This commit was manufactured by cvs2svn to create tag
'release-1-3-1-d01'.

X-SVN-Rev: 4716
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..5013448
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,99 @@
+* text=auto !eol
+
+*.c text !eol
+*.cc text !eol
+*.classpath text !eol
+*.cpp text !eol
+*.css text !eol
+*.dsp text !eol
+*.dsw text !eol
+*.filters text !eol
+*.h text !eol
+*.htm text !eol
+*.html text !eol
+*.in text !eol
+*.java text !eol
+*.launch text !eol
+*.mak text !eol
+*.md text !eol
+*.MF text !eol
+*.mk text !eol
+*.pl text !eol
+*.pm text !eol
+*.project text !eol
+*.properties text !eol
+*.py text !eol
+*.rc text !eol
+*.sh text eol=lf
+*.sln text !eol
+*.stub text !eol
+*.txt text !eol
+*.ucm text !eol
+*.vcproj text !eol
+*.vcxproj text !eol
+*.xml text !eol
+*.xsl text !eol
+*.xslt text !eol
+Makefile text !eol
+configure text !eol
+LICENSE text !eol
+README text !eol
+
+*.bin -text
+*.brk -text
+*.cnv -text
+*.icu -text
+*.res -text
+*.nrm -text
+*.spp -text
+*.tri2 -text
+
+src/com/ibm/data/misc/english.dict -text
+src/com/ibm/text/resources/Transliterator_Bengali_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Devanagari_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Fullwidth_Halfwidth.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Gujarati_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Gurmukhi_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Han_Pinyin.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Hiragana_Katakana.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Bengali.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Devanagari.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Gujarati.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Gurmukhi.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Kannada.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Malayalam.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Oriya.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Tamil.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_InterIndic_Telugu.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Kanji_English.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Kanji_OnRomaji.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Kannada_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_KeyboardEscape_Latin1.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Latin_Arabic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Latin_Cyrillic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Latin_Devanagari.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Latin_Greek.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Latin_Hebrew.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Latin_Jamo.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Latin_Kana.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Malayalam_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Oriya_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_StraightQuotes_CurlyQuotes.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Tamil_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_Telugu_InterIndic.utf8.txt -text
+src/com/ibm/text/resources/Transliterator_UnicodeName_UnicodeChar.utf8.txt -text
+src/com/ibm/text/resources/thai_dict -text
+src/com/ibm/text/unames.dat -text
+src/com/ibm/text/uprops.dat -text
+src/data/holidays_jp.ucs -text
+src/data/thai6.ucs -text
+src/data/unicode/Draft-TestSuite.txt -text
+
+# The following file types are stored in Git-LFS.
+*.jar filter=lfs diff=lfs merge=lfs -text
+*.dat filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.gif filter=lfs diff=lfs merge=lfs -text
+
diff --git a/build.bat b/build.bat
new file mode 100755
index 0000000..1d1c346
--- /dev/null
+++ b/build.bat
@@ -0,0 +1,15 @@
+@echo off
+
+REM *******************************************************************************
+REM * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+REM * others. All Rights Reserved.                                                *
+REM *******************************************************************************
+
+REM $Source: /xsrl/Nsvn/icu/icu4j/Attic/build.bat,v $ 
+REM $Date: 2000/03/15 00:40:27 $ 
+REM $Revision: 1.4 $
+
+REM *******************************************************************************
+
+REM convience bat file to build with
+java -classpath "build\icu4jtools.jar;jakarta-ant\lib\ant.jar;jakarta-ant\lib\xml.jar;%CLASSPATH%" org.apache.tools.ant.Main %1 %2 %3 %4 %5
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..8f5de2a
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,26 @@
+#/*
+#*******************************************************************************
+#* Copyright (C) 1997-2000, International Business Machines Corporation and    *
+#* others. All Rights Reserved.                                                *
+#*******************************************************************************
+#*
+#* $Source: /xsrl/Nsvn/icu/icu4j/Attic/build.sh,v $ 
+#* $Date: 2000/03/15 00:40:27 $ 
+#* $Revision: 1.3 $
+#*
+#*****************************************************************************************
+#*/
+#!/bin/sh
+
+ADDL_CLASSPATH=build/icu4jtoolz.zip:jakarta-ant/lib/ant.jar:jakarta-ant/lib/xml.jar
+
+if [ "$CLASSPATH" != "" ] ; then
+  CLASSPATH=$CLASSPATH:$ADDL_CLASSPATH
+else
+ CLASSPATH=$ADDL_CLASSPATH
+fi
+export CLASSPATH
+
+echo Building with classpath $CLASSPATH
+
+java org.apache.tools.ant.Main $*
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..46497c3
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,175 @@
+<!-- 
+/*
+*******************************************************************************
+* Copyright (C) 1997-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/build.xml,v $ 
+* $Date: 2001/03/23 19:52:48 $ 
+* $Revision: 1.32 $
+*
+*******************************************************************************
+* This is the ant build file for ICU4J.  See readme.html for more information.
+*/
+-->
+
+<project name="ICU4J" default="core" basedir=".">
+
+  <target name="init">
+    <tstamp/>
+    <property name="src.dir" value="src"/>
+    <property name="doc.dir" value="doc"/>
+    <property name="build.dir" value="classes"/>
+    <property name="obsolete.dir" value="build"/>
+    <property name="jar.file" value="icu4j.jar"/>
+    <property name="zipbin.file" value="../icu4jbin${DSTAMP}.zip"/>
+    <property name="zip.file" value="../icu4j${DSTAMP}.zip"/>
+    <property name="classpath" value="${build.dir}"/>
+    <property name="build.compiler" value="classic"/>
+    <property name="richedit.dist.dir" value="richeditDist"/>
+    <property name="richedit.cont.dir" value="richedit"/>
+    <property name="richedit.archive.dir" value="${richedit.dist.dir}/${richedit.cont.dir}"/>
+    <property name="richedit.jar.file" value="${richedit.archive.dir}/richedit.jar"/>
+    <property name="richedit.doc.dir" value="${richedit.archive.dir}/doc"/>
+    <property name="richedit.zip.file" value="${richedit.dist.dir}/richedit.zip"/>
+    <property name="richedit.manifest" value="${richedit.dist.dir}/manifest.stub"/>
+  </target>
+
+  <target name="all" depends="core,tests,tools,demos,jar,docs"/>
+  
+  <target name="core" depends="init,coreData">
+    <mkdir dir="${build.dir}"/>
+    <copy file="${src.dir}/com/ibm/text/resources/thai_dict"
+           todir="${build.dir}/com/ibm/text/resources/"/>
+    <javac includes="com/ibm/util/**/*.java,com/ibm/text/**/*.java,com/ibm/math/**/*.java,com/ibm/richtext/**/*.java"
+           excludes="**/CVS/**/*"
+           srcdir="${src.dir}"
+    	   destdir="${build.dir}" 
+    	   classpath="${classpath}"
+           debug="on" deprecation="off" target="1.2"/>
+  </target>
+  
+  <target name="tests" depends="core,testData">
+    <javac includes="com/ibm/test/**/*.java,com/ibm/icu/test/**/*.java"
+           excludes="**/CVS/**/*"
+    	   srcdir="${src.dir}"
+    	   destdir="${build.dir}" 
+    	   classpath="${classpath}"
+           debug="on" deprecation="off" target="1.2"/>
+  </target>
+  
+  <target name="demos" depends="core,testData">
+    <javac includes="com/ibm/demo/**/*.java"
+           excludes="**/CVS/**/*"
+    	   srcdir="${src.dir}"
+    	   destdir="${build.dir}" 
+    	   classpath="${classpath}"
+           debug="on" deprecation="off" target="1.2"/>
+  </target>
+  
+  <target name="tools" depends="core">
+    <javac includes="com/ibm/tools/**/*.java"
+           excludes="**/CVS/**/*"
+    	   srcdir="${src.dir}"
+    	   destdir="${build.dir}" 
+    	   classpath="${classpath}"
+           debug="on" deprecation="off" target="1.2"/>
+  </target>
+  
+  <target name="docs" depends="core">
+    <mkdir dir="${doc.dir}"/>
+    <javadoc packagenames="com.ibm.util,com.ibm.text,com.ibm.math,com.ibm.richtext.awtui,com.ibm.richtext.swingui,com.ibm.richtext.textpanel,com.ibm.richtext.styledtext,com.ibm.textlayout.attributes,com.ibm.richtext.print,com.ibm.icu.test.text"
+              sourcepath="${src.dir}"
+    		  destdir="${doc.dir}"
+    		  nodeprecatedlist="true"
+			  windowtitle="icu4j"
+			  doctitle="icu4j"
+			  encoding="iso-8859-1"
+			  docencoding="iso-8859-1"
+			  bottom="&lt;font size=-1>Copyright (c) 1998-2000 IBM Corporation and others.&lt;/font>"
+    		  />    		  
+  </target>
+
+  <target name ="coreData" depends="init">
+    <copy todir="${build.dir}/com/ibm/text/resources">
+      <fileset dir="${src.dir}/com/ibm/text/resources"
+               includes="Transliterator_*.txt"/>
+    </copy>
+    <copy todir="${build.dir}/com/ibm/text">
+      <fileset dir="${src.dir}/com/ibm/text"
+               includes="unames.dat,uprops.dat"/>
+    </copy>
+  </target>
+
+  <target name ="testData" depends="init">
+    <copy file="${src.dir}/com/ibm/data/misc/english.dict"
+    	   todir="${build.dir}/com/ibm/data/misc/"/>
+  </target>
+  
+  <target name="jar" depends="core">
+    <jar jarfile="${jar.file}"
+         includes="com/ibm/util/**/*,com/ibm/text/**/*,com/ibm/math/**/*,com/ibm/richtext/**/*"
+         basedir="${build.dir}"/>
+  </target>
+
+  <target name="richeditJar" depends="core">
+    <jar jarfile="${richedit.jar.file}"
+         includes="com/ibm/richtext/**/*,com/ibm/textlayout/**/*"
+         basedir="${build.dir}"
+         manifest="${richedit.manifest}"/>
+  </target>
+
+    <!-- 
+        Note:  I used to use -linkoffline http://java.sun.com/products/jdk/1.2/docs/api/ C:\jdk1.2.2\docs\api
+        This links to core docs on Sun's site - a very nice feature.  But it requires the 1.2 docs to be
+        on the build machine at a known location.
+    -->
+  <target name="richeditDocs" depends="core">
+    <mkdir dir="${richedit.doc.dir}"/>
+    <javadoc  packagenames="com.ibm.richtext.awtui,com.ibm.richtext.swingui,com.ibm.richtext.textpanel,com.ibm.richtext.styledtext,com.ibm.textlayout.attributes,com.ibm.richtext.print"
+              sourcepath="${src.dir}"
+    		  destdir="${richedit.doc.dir}"
+    		  nodeprecatedlist="true"
+			  windowtitle="RichEdit Control"
+			  doctitle="RichEdit Control"
+			  encoding="iso-8859-1"
+			  docencoding="iso-8859-1"
+			  bottom="&lt;font size=-1>Copyright (c) 1998-2000 IBM Corporation and others.&lt;/font>"
+    		  />    		  
+  </target>
+
+  <target name="richeditZip" depends="richeditJar,richeditDocs">
+    <!--Create a zip archive of the richedit jar and readme -->
+    <zip zipfile="${richedit.zip.file}"
+         basedir="${richedit.dist.dir}"
+         includes="${richedit.cont.dir}/**/*"/>
+  </target>
+  
+  <target name="zipbin" depends="docs,jar">
+    <!--Create a zip archive of the source, docs, and jar file for
+    distribution.  The zip file will be created in the directory above
+    the root ICU4J directory.-->
+    <zip zipfile="${zipbin.file}"
+         basedir="."
+         excludes="${richedit.dist.dir},test_*,${src.dir}/data/unicode/*-*.txt,${obsolete.dir}/**,**/*~,${src.dir}/**/*.class,${build.dir}/**,**/CVS/**/*"/>
+  </target>
+
+  <target name="zip" depends="init">
+    <!--Create a zip archive of just the source for distribution.  The
+    zip file will be created in the directory above the root ICU4J
+    directory. The exclude pattern ${src.dir}/data/unicode/*-*.txt
+    eliminates old archive copies like SpecialCasing-2.txt and
+    UnicodeData-2.1.8.txt -->
+    <zip zipfile="${zip.file}"
+         basedir="."
+         excludes="${richedit.dist.dir},test_*,${src.dir}/data/unicode/*-*.txt,${obsolete.dir}/**,**/*~,${src.dir}/**/*.class,${build.dir}/**,**/CVS/**/*,${doc.dir}/**,${jar.file}"/>
+  </target>
+
+  <target name="clean" depends="init">
+    <delete dir="${build.dir}"/>
+    <delete dir="${doc.dir}"/>
+    <delete  file="${jar.file}"/>
+  </target>
+
+</project>
diff --git a/buildall.bat b/buildall.bat
new file mode 100755
index 0000000..40e098f
--- /dev/null
+++ b/buildall.bat
@@ -0,0 +1,2 @@
+javac -sourcepath src -d classes -classpath classes src/com/ibm/math/*.java src/com/ibm/util/*.java src/com/ibm/util/resources/*.java src/com/ibm/text/*.java src/com/ibm/text/resources/*.java src/com/ibm/text/components/*.java src/com/ibm/test/*.java src/com/ibm/test/bnf/*.java src/com/ibm/test/calendar/*.java src/com/ibm/test/compression/*.java src/com/ibm/test/normalizer/*.java src/com/ibm/test/rbbi/*.java src/com/ibm/test/rbnf/*.java src/com/ibm/test/search/*.java src/com/ibm/test/topleveltest/*.java src/com/ibm/test/translit/*.java src/com/ibm/demo/*.java src/com/ibm/demo/calendar/*.java src/com/ibm/demo/holiday/*.java src/com/ibm/demo/rbbi/*.java src/com/ibm/demo/rbnf/*.java src/com/ibm/demo/translit/*.java src/com/ibm/tools/compression/*.java src/com/ibm/tools/normalizer/*.java src/com/ibm/tools/RuleBasedBreakIterator/*.java
+javadoc -sourcepath src -d docs -classpath classes src/com/ibm/math/*.java src/com/ibm/util/*.java src/com/ibm/util/resources/*.java src/com/ibm/text/*.java src/com/ibm/text/resources/*.java src/com/ibm/text/components/*.java src/com/ibm/test/*.java src/com/ibm/test/bnf/*.java src/com/ibm/test/calendar/*.java src/com/ibm/test/compression/*.java src/com/ibm/test/normalizer/*.java src/com/ibm/test/rbbi/*.java src/com/ibm/test/rbnf/*.java src/com/ibm/test/search/*.java src/com/ibm/test/topleveltest/*.java src/com/ibm/test/translit/*.java src/com/ibm/demo/*.java src/com/ibm/demo/calendar/*.java src/com/ibm/demo/holiday/*.java src/com/ibm/demo/rbbi/*.java src/com/ibm/demo/rbnf/*.java src/com/ibm/demo/translit/*.java src/com/ibm/tools/compression/*.java src/com/ibm/tools/normalizer/*.java src/com/ibm/tools/RuleBasedBreakIterator/*.java
diff --git a/license.html b/license.html
new file mode 100644
index 0000000..ede34e0
--- /dev/null
+++ b/license.html
@@ -0,0 +1,242 @@
+<html>
+
+<head>
+<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Latin-1">
+<title>IBM's Public License - IBM's Components for Unicode in Java</title>
+</head>
+
+<body>
+<b>
+
+<p ALIGN="CENTER"><big>IBM PUBLIC LICENSE - IBM&#146;s Components for Unicode in Java VERSION 1.0</big></p>
+</b><font size="2">
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS IBM PUBLIC LICENSE
+(&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES
+RECIPIENT&#146;S ACCEPTANCE OF THIS AGREEMENT.</p>
+<b>
+
+<p>1. DEFINITIONS</p>
+</b>
+
+<p>&quot;Contribution&quot; means: </p>
+
+<blockquote>
+  <blockquote>
+    <p>a) in the case of International Business Machines Corporation (&quot;IBM&quot;), the
+    Original Program, and </p>
+    <p>b) in the case of each Contributor, </p>
+    <blockquote>
+      <p>i) changes to the Program, and</p>
+      <p>ii) additions to the Program;</p>
+    </blockquote>
+  </blockquote>
+  <p>where such changes and/or additions to the Program originate from and are distributed
+  by that particular Contributor. A Contribution &#145;originates&#146; from a Contributor
+  if it was added to the Program by such Contributor itself or anyone acting on such
+  Contributor&#146;s behalf. Contributions do not include additions to the Program which:
+  (i) are separate modules of software distributed in conjunction with the Program under
+  their own license agreement, and (ii) are not derivative works of the Program.</p>
+</blockquote>
+
+<p>&quot;Contributor&quot; means IBM and any other entity that distributes the Program.</p>
+
+<p>&quot;Licensed Patents &quot; mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when combined with
+the Program. </p>
+
+<p>&quot;Original Program&quot; means the original version of the software accompanying
+this Agreement as released by IBM, including source code, object code and documentation,
+if any.</p>
+
+<p>&quot;Program&quot; means the Original Program and Contributions.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under this Agreement,
+including all Contributors.</p>
+<b>
+
+<p>2. GRANT OF RIGHTS</p>
+
+<blockquote>
+  <blockquote>
+    </b><p>a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+    a non-exclusive, worldwide, royalty-free copyright license to<font COLOR="#ff0000"> </font>reproduce,
+    prepare derivative works of, publicly display, publicly perform, distribute and sublicense
+    the Contribution of such Contributor, if any, and such derivative works, in source code
+    and object code form.</p>
+    <p>b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a
+    non-exclusive, worldwide,<font COLOR="#008000"> </font>royalty-free patent license under
+    Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+    Contribution of such Contributor, if any, in source code and object code form. This patent
+    license shall apply to the combination of the Contribution and the Program if, at the time
+    the Contribution is added by the Contributor, such addition of the Contribution causes
+    such combination to be covered by the Licensed Patents. The patent license shall not apply
+    to any other combinations which include the Contribution. No hardware per se is licensed
+    hereunder. </p>
+    <p>c) Recipient understands that although each Contributor grants the licenses to its
+    Contributions set forth herein, no assurances are provided by any Contributor that the
+    Program does not infringe the patent or other intellectual property rights of any other
+    entity. Each Contributor disclaims any liability to Recipient for claims brought by any
+    other entity based on infringement of intellectual property rights or otherwise. As a
+    condition to exercising the rights and licenses granted hereunder, each Recipient hereby
+    assumes sole responsibility to secure any other intellectual property rights needed, if
+    any. For example, if a third party patent license is required to allow Recipient to
+    distribute the Program, it is Recipient&#146;s responsibility to acquire that license
+    before distributing the Program.</p>
+    <p>d) Each Contributor represents that to its knowledge it has sufficient copyright rights
+    in its Contribution, if any, to grant the copyright license set forth in this Agreement. </p>
+  </blockquote>
+</blockquote>
+<b>
+
+<p>3. REQUIREMENTS</p>
+</b>
+
+<p>A Contributor may choose to distribute the Program in object code form under its own
+license agreement, provided that:</p>
+
+<blockquote>
+  <blockquote>
+    <p>a) it complies with the terms and conditions of this Agreement; and</p>
+    <p>b) its license agreement:</p>
+    <blockquote>
+      <p>i) effectively disclaims on behalf of all Contributors all warranties and conditions,
+      express and implied, including warranties or conditions of title and non-infringement, and
+      implied warranties or conditions of merchantability and fitness for a particular purpose; </p>
+      <p>ii) effectively excludes on behalf of all Contributors all liability for damages,
+      including direct, indirect, special, incidental and consequential damages, such as lost
+      profits; </p>
+      <p>iii) states that any provisions which differ from this Agreement are offered by that
+      Contributor alone and not by any other party; and</p>
+      <p>iv) states that source code for the Program is available from such Contributor, and
+      informs licensees how to obtain it in a reasonable manner on or through a medium
+      customarily used for software exchange.<font COLOR="#0000ff"> </p>
+      </font>
+    </blockquote>
+  </blockquote>
+</blockquote>
+
+<p>When the Program is made available in source code form:</p>
+
+<blockquote>
+  <blockquote>
+    <p>a) it must be made available under this Agreement; and </p>
+    <p>b) a copy of this Agreement must be included with each copy of the Program. </p>
+    <font COLOR="#0000ff"><strike>
+  </blockquote>
+</blockquote>
+</strike></font>
+
+<p>Each Contributor must include the following in a conspicuous location in the Program: </p>
+
+<blockquote>
+  <p>Copyright <font FACE="Times New Roman">©</font><font COLOR="#ff0000"> </font>1999,
+  International Business Machines Corporation and others. All Rights Reserved. </p>
+</blockquote>
+
+<p>In addition, each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution. </p>
+<b>
+
+<p>4. COMMERCIAL DISTRIBUTION</p>
+</b>
+
+<p>Commercial distributors of software may accept certain responsibilities with respect to
+end users, business partners and the like. While this license is intended to facilitate
+the commercial use of the Program, the Contributor who includes the Program in a
+commercial product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the Program in a
+commercial product offering, such Contributor (&quot;Commercial Contributor&quot;) hereby
+agrees to defend and indemnify every other Contributor (&quot;Indemnified
+Contributor&quot;) against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third party against the
+Indemnified Contributor to the extent caused by the acts or omissions of such Commercial
+Contributor in connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses relating to
+any actual or alleged intellectual property infringement. In order to qualify, an
+Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of
+such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial product offering,
+Product X. That Contributor is then a Commercial Contributor. If that Commercial
+Contributor then makes performance claims, or offers warranties related to Product X,
+those performance claims and warranties are such Commercial Contributor&#146;s
+responsibility alone. Under this section, the Commercial Contributor would have to defend
+claims against the other Contributors related to those performance claims and warranties,
+and if a court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</p>
+<b>
+
+<p>5. NO WARRANTY</p>
+</b>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS
+IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED
+INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible
+for determining the appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement, including but not
+limited to the risks and costs of program errors, compliance with applicable laws, damage
+to or loss of data, programs or equipment, and unavailability or interruption of
+operations. </p>
+<b>
+
+<p>6. DISCLAIMER OF LIABILITY</p>
+</b>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM
+OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.</p>
+<b>
+
+<p>7. GENERAL</p>
+</b>
+
+<p>If any provision of this Agreement is invalid or unenforceable under applicable law, it
+shall not affect the validity or enforceability of the remainder of the terms of this
+Agreement, and without further action by the parties hereto, such provision shall be
+reformed to the minimum extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against a Contributor with respect to a
+patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then
+any patent licenses granted by that Contributor to such Recipient under this Agreement
+shall terminate as of the date such litigation is filed. In addition, If Recipient
+institutes patent litigation against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient&#146;s patent(s), then such
+Recipient&#146;s rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed. </p>
+
+<p>All Recipient&#146;s rights under this Agreement shall terminate if it fails to comply
+with any of the material terms or conditions of this Agreement and does not cure such
+failure in a reasonable period of time after becoming aware of such noncompliance. If all
+Recipient&#146;s rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However, Recipient's
+obligations under this Agreement and any licenses granted by Recipient relating to the
+Program shall continue and survive. </p>
+
+<p>IBM may publish new versions (including revisions) of this Agreement from time to time.
+Each new version of the Agreement will be given a distinguishing version number. The
+Program (including Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version of the Agreement
+is published, Contributor may elect to distribute the Program (including its
+Contributions) under the new version. No one other than IBM has the right to modify this
+Agreement. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives
+no rights or licenses to the intellectual property of any Contributor under this
+Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the
+Program not expressly granted under this Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and the intellectual
+property laws of the United States of America. No party to this Agreement will bring a
+legal action under this Agreement more than one year after the cause of action arose. Each
+party waives its rights to a jury trial in any resulting litigation. </p>
+</font>
+</body>
+</html>
diff --git a/readme.html b/readme.html
new file mode 100644
index 0000000..cc4fe72
--- /dev/null
+++ b/readme.html
@@ -0,0 +1,386 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>ReadMe for ICU4J</title>
+</head>
+
+<body bgcolor="#FFFFFF" link="#0000FF" vlink="#800080" lang="EN-US">
+
+<h2>ReadMe: International Components for Unicode for Java</h2>
+
+<p>Version: 1.3 Mar 23 2001 </p>
+
+<hr size="2" width="100%" align="center">
+
+<p>COPYRIGHT: <br>
+Copyright (c) 2001 International Business Machines Corporation and others. All Rights
+Reserved. </p>
+
+<hr size="2" width="100%" align="center">
+
+<h3><u>Contents</u></h3>
+
+<ul type="disc">
+  <li><a href="#introduction">Introduction</a></li>
+  <li><a href="#WhatContain">What the International Components for Unicode for Java Contains</a></li>
+  <li><a href="#API">API overview</a></li>
+  <li><a href="#PlatformDependencies">Platform Dependencies</a></li>
+  <li><a href="#HowToInstallJavac">How to Install and Build</a></li>
+  <li><a href="#WhereToFindMore">Where to Find More Information</a></li>
+  <li><a href="#SubmittingComments">Submitting Comments, Requesting Features and Reporting
+    Bugs</a></li>
+</ul>
+
+<h3><a NAME="introduction"></a><u>Introduction</u></h3>
+
+<p>Today's software market is a global one in which it is desirable to develop and
+maintain one application that supports a wide variety of national languages. International
+Components for Unicode for Java provides the following tools to help you write language
+independent applications: 
+
+<ul type="disc">
+  <li>International Calendars &#150; Arabic, Buddhist, Hebrew, Japanese</li>
+  <li>Unicode Normalization &#150; Canonical text representation for W3C</li>
+  <li>Number Format Enhancements &#150; Scientific Notation, Spelled-out, ...</li>
+  <li>Enhanced word-break detection &#150; Rule-based, supports Thai</li>
+  <li>Unicode Text Searching &#150; Efficient multi-lingual searching</li>
+  <li>Unicode Text Compression &#150; 2:1 compression on English Unicode text</li>
+</ul>
+
+<p>Your comments are important to making this release successful.&nbsp; We are committed
+to fixing any bugs, and will also use your feedback to help plan future releases. </p>
+
+<p><b><u>IMPORTANT</u>: Please make sure you understand the <a href="license.html">Copyright
+and License information</a>.</b></p>
+
+<h3><a NAME="WhatContain"></a><u>What the International Components for Unicode for Java
+Contains</u></h3>
+
+<p>There are two ways to download the ICU4J releases, 
+
+<ul type="disc">
+  <li><b>Official Release Snapshot:</b><br>
+    If you want to use ICU4J (as opposed to developing it), your best bet is to download an
+    official, packaged ICU4J version of the ICU4J source code.&nbsp; These versions are tested
+    more thoroughly than day-to-day development builds, and they are packaged in zip and tar
+    files for convenient download.&nbsp; These packaged files can be found at <a
+    href="http://oss.software.ibm.com/developerworks/opensource/icu4j/download/index.html">http://oss.software.ibm.com/developerworks/opensource/icu4j/download/index.html</a>.
+    <br>
+    If packaged snapshot is named <b>ICU4JXXXXXX.zip </b>, XXXXXX is the release version
+    number. <br>
+    Please unzip this file.&nbsp; It will re-construct the source directory. </li>
+</ul>
+
+<ul type="disc">
+  <li><b>CVS Source Repository:</b><br>
+    If you are interested in developing features, patches, or bug fixes for ICU4J, you should
+    probably be working with the latest version of the ICU4J source code. You will need to
+    check the code out of our CVS repository to ensure that you have the most recent version
+    of all of the files. There are several ways to do this: <br>
+    <ul type="circle">
+      <li>WebCVS:<br>
+        If you want to browse the code and only make occasional downloads, you may want to use
+        WebCVS. It provides a convenient, web-based interface for browsing and downloading the
+        latest version of the ICU4J source code and documentation. You can also view each file's
+        revision history, display the differences between individual revisions, determine which
+        revisions were part of which official release, and so on. <br>
+      </li>
+      <li>WinCVS:<br>
+        If you will be doing serious work on ICU4J, you should probably install a CVS client on
+        your own machine so that you can do batch operations without going through the WebCVS
+        interface. On Windows, we suggest the WinCVS client. The following is the example
+        instruction on how to download ICU4J via WinCVS: <ol>
+          <li>Install the WinCVS client, which you can download from the <a
+            href="http://www.wincvs.org">http://www.wincvs.org</a>.</li>
+          <li>Select <strong>Preferences</strong> from the <strong>Admin</strong> menu.<ol type="a">
+              <li>On the <strong>General</strong> tab panel: Set your <strong>CVSROOT</strong> to &quot;<strong>:pserver:anoncvs@oss.software.ibm.com:/usr/cvs/icu4j</strong>&quot;.<br>
+                Leave other options on this page at their default.</li>
+              <li>On the <strong>Ports</strong> tab panel: Check the <strong>pserver</strong> checkbox and
+                enter port <strong>2401</strong>.</li>
+            </ol>
+          </li>
+          <li>Click on the Login menu button (<strong>Admin</strong> menu). Enter in  &quot;<strong>anoncvs</strong>&quot; when requested.</li>
+          <li>To extract the most recent version of ICU4J, select <strong>Checkout module</strong>
+            from the <strong>Create</strong> menu. Specify &quot;<strong>icu4j</strong>&quot; for the
+            module name. This will create a new copy of the workspace on your local hard drive.</li>
+          <li>In the future, you can download updated files from the repository to your hard drive
+            using the <strong>Update selection</strong> item in the <strong>Modify</strong> menu.<br>
+          </li>
+        </ol>
+      </li>
+      <li>CVS command line:<br>
+        You can also check out the repository anonymously on UNIX using the following commands,
+        after first setting your CVSROOT to point to the ICU4J repository: <pre><code>export CVSROOT=:pserver:anoncvs@oss.software.ibm.com:/usr/cvs/icu4j 
+cvs login CVS password: anoncvs 
+cvs checkout icu4j 
+cvs logout</code></pre>
+      </li>
+    </ul>
+  </li>
+</ul>
+
+<p>For more details on how to download ICU4J directly from the web site, please also see <a
+href="/developerworks/opensource/icu4j/download/index.html">http:/oss.software.ibm.com/developerworks/opensource/icu4j/download/index.html</a>
+</p>
+
+<p>Below, <b>$Root</b> is the placement of the icu directory in your file system, like
+&quot;drive:\...\icu4j&quot; in your environment. &quot;drive:\...&quot; stands for any
+drive and any directory on that drive that you chose to install icu4j into. </p>
+
+<p><b>The following files describe the code drop:</b></p>
+
+<table BORDER="1" CELLPADDING="0">
+  <tr>
+    <td>readme.html (this file)</td>
+    <td>describes the International Components for Unicode for Java</td>
+  </tr>
+  <tr>
+    <td>license.html</td>
+    <td>contains IBM's public license</td>
+  </tr>
+</table>
+
+<p><b>The source directories mirror package structure of the code.&nbsp; The following
+directories contain source code and data files:</b> </p>
+
+<table BORDER="1" CELLPADDING="0" WIDTH="623">
+  <tr>
+    <td WIDTH="20%">$Root/src/data/</td>
+    <td WIDTH="80%">Various data files used to generate ICU4J classes.&nbsp; Most of the files
+    contain Unicode information that is available from <a href="http://www.unicode.org/">http://www.unicode.org/</a>.&nbsp;
+    Used only by tools in the src/com/ibm/tools.</td>
+  </tr>
+  <tr>
+    <td WIDTH="20%">$Root/src/com/ibm/demo</td>
+    <td WIDTH="80%">Demonstration applications and Applets.</td>
+  </tr>
+  <tr>
+    <td WIDTH="20%">$Root/src/com/ibm/test</td>
+    <td WIDTH="80%">Tests for various ICU4J components.. For information about running the
+    tests, see <a href="../../../../icu4j/icu4jhtml/com/ibm/test/topleveltest/TestAll.html">$Root/doc/com/ibm/test/TestAll.html</a>.</td>
+  </tr>
+  <tr>
+    <td WIDTH="20%">$Root/src/com/ibm/tools</td>
+    <td WIDTH="80%">Various tools used to generate ICU4J classes.</td>
+  </tr>
+  <tr>
+    <td WIDTH="20%">$Root/src/com/ibm/text</td>
+    <td WIDTH="80%">The following components:&nbsp; <ul>
+      <li>RuleBasedBreakIterator</li>
+      <li>DictionaryBasedBreakIterator</li>
+      <li>Transliterator</li>
+      <li>Normalizer</li>
+      <li>BigNumberFormat</li>
+      <li>StringSearch</li>
+      <li>Unicode compression</li>
+    </ul>
+    </td>
+  </tr>
+  <tr>
+    <td WIDTH="20%">$Root/src/com/ibm/util</td>
+    <td WIDTH="80%">Calendars and Holidays</td>
+  </tr>
+  <tr>
+    <td WIDTH="20%">$Root/build</td>
+    <td WIDTH="80%">Additional classes needed to build using Ant</td>
+  </tr>
+</table>
+
+<p><b>The following directories are populated when you've built everything:</b> </p>
+
+<table BORDER="1" CELLPADDING="0">
+  <tr>
+    <td>$Root/classes/</td>
+    <td>contains all class files</td>
+  </tr>
+  <tr>
+    <td>$Root/docs</td>
+    <td>contains JavaDoc for all packages</td>
+  </tr>
+</table>
+
+<p><b>Data organization:</b> </p>
+
+<p>Data is stored in various locations in ICU4J:
+
+<ul>
+  <li>Data that is &quot;raw&quot; data goes into <strong>$Root/src/data</strong>. This
+    includes things like the raw Unicode database. <strong>$Root/src/data</strong> does <em>not</em>
+    contain <strong>.java</strong> source files.</li>
+  <li>Data that is in the form of a Java class, typically a ResourceBundle, but not
+    necessarily, goes into one of the packages <code>com.ibm.util.resources</code> or <code>com.ibm.text.resources</code>,
+    depending on whether the associated code lives in <code>com.ibm.util</code> or <code>com.ibm.text</code>.</li>
+  <li>Data that is not part of ICU4J proper (or its base tool set), but rather part of a test,
+    sample, or demo, should go near the source code of its owner. This makes it easy to ship a
+    core ICU4J release without optional components.</li>
+</ul>
+
+<h3><u><a name="API"></a>API Overview</u></h3>
+
+<p>The complete API documentation is available on the ICU4J web site: 
+
+<ul>
+  <li><a href="../../../../icu4j/icu4jhtml/index.html">Complete index</a></li>
+  <li>International Calendars &#150; <a href="../../../../icu4j/icu4jhtml/com/ibm/util/IslamicCalendar.html">Islamic</a>,
+    <a href="../../../../icu4j/icu4jhtml/com/ibm/util/BuddhistCalendar.html">Buddhist</a>, <a
+    href="../../../../icu4j/icu4jhtml/com/ibm/util/HebrewCalendar.html">Hebrew</a>, <a
+    href="../../../../icu4j/icu4jhtml/com/ibm/util/JapaneseCalendar.html">Japanese</a></li>
+  <li><a href="../../../../icu4j/icu4jhtml/com/ibm/text/Normalizer.html">Unicode Normalization</a> &#150;
+    Canonical text representation for W3C</li>
+  <li><a href="../../../../icu4j/icu4jhtml/com/ibm/text/NumberFormat.html">Number Format Enhancements</a> &#150;
+    Scientific Notation, Spelled-out, ...</li>
+  <li><a href="../../../../icu4j/icu4jhtml/com/ibm/text/BreakIterator.html">Enhanced word-break detection</a>
+    &#150; Rule-based, supports Thai</li>
+  <li><a href="../../../../icu4j/icu4jhtml/com/ibm/text/StringSearch.html">Unicode Text Searching</a> &#150;
+    Efficient multi-lingual searching</li>
+  <li>Unicode Text <a href="../../../../icu4j/icu4jhtml/com/ibm/text/UnicodeCompressor.html">Compression</a> &amp;
+    <a href="../../../../icu4j/icu4jhtml/com/ibm/text/UnicodeDecompressor.html">Decompression</a> &#150; 2:1
+    compression on English Unicode text</li>
+</ul>
+
+<h3><a NAME="PlatformDependencies"></a><u>Platform Dependencies</u></h3>
+
+<p>Parts of ICU4J depend on functionality that is only available in Java2 (JDk1.2) or
+later, although some components work under 1.1.&nbsp; However, all components should be
+compiled using a Java2 compiler as even components that run using a 1.1.x JVM may require
+language features that are only present in 1.2.&nbsp; Currently 1.1.x is unsupported and
+untested and you use the components on a 1.1.x system at your own risk. </p>
+
+<h3><a NAME="HowToInstallJavac"></a><u>How to Install and Build</u></h3>
+
+<p>To install ICU4J, simply place the prebuilt jar file <strong>icu4j.jar</strong> on your
+Java CLASSPATH.&nbsp; No other files are needed.</p>
+
+<p>The prerequisites for building ICU4J are a working JDK and the Ant build system: 
+
+<ul>
+  <li>First install a recent JDK, at least version 1.2.</li>
+  <li>Next install the <a href="http://jakarta.apache.org/ant/"><strong>Ant</strong></a> build
+    system, part of the Apache Software Foundation's <a href="http://jakarta.apache.org/"><strong>Jakarta</strong></a>
+    project. Ant is a portable, Java-based build system similar to make. ICU4J uses Ant
+    because it introduces no other dependencies, it's portable, and it's easier to manage than
+    a collection of makefiles. We currently build ICU4J using a single makefile on both
+    Windows 9x and Linux using Ant.</li>
+  <li>Installing Ant is straightforward. Download it (see <a
+    href="http://jakarta.apache.org/downloads/binindex.html">http://jakarta.apache.org/downloads/binindex.html</a>),
+    extract it onto your system, set some environment variables, and add its bin directory to
+    your path. For example:<pre>    set JAVA_HOME=C:\jdk1.2.2
+    set ANT_HOME=C:\jakarta-ant
+    set PATH=%PATH%;%ANT_HOME%\bin
+    call antsetup</pre>
+    <p>See the current Ant documentation for details.</p>
+  </li>
+  <li>It's recommended to install both the JDK and Ant somewhere <em>outside</em> the ICU4J
+    directory, to keep them out of CVS's hair. For example, on Linux you might install these
+    in /usr/local.</li>
+</ul>
+
+<p>Once Ant is installed, building is just a matter of typing <strong>ant</strong> in the
+ICU4J root directory. This causes the Ant build system to perform a build as specified by
+the file <strong>build.xml</strong>, located in the ICU4J root directory. You can give Ant
+options like -verbose, and you can specify targets. Ant will only build what's been
+changed and will resolve dependencies properly.</p>
+
+<blockquote>
+  <pre>F:\icu4j&gt;ant tests
+Buildfile: build.xml
+Project base dir set to: F:\icu4j
+Executing Target: core
+Compiling 71 source files to F:\icu4j\classes
+Executing Target: tests
+Compiling 24 source files to F:\icu4j\classes
+Completed in 19 seconds</pre>
+</blockquote>
+
+<p>Current targets that you can give after <strong>ant</strong>:</p>
+<div align="left">
+
+<table border="1" cellpadding="0">
+  <tr>
+    <td>all</td>
+    <td>Build all targets.</td>
+  </tr>
+  <tr>
+    <td>core</td>
+    <td>Build the main class files in the subdirectory <strong>classes</strong>. If no target
+    is specified, core is assumed.</td>
+  </tr>
+  <tr>
+    <td>tests</td>
+    <td>Build the test class files.</td>
+  </tr>
+  <tr>
+    <td>demos</td>
+    <td>Build the demos.</td>
+  </tr>
+  <tr>
+    <td>tools</td>
+    <td>Build the tools.</td>
+  </tr>
+  <tr>
+    <td>docs</td>
+    <td>Run javadoc over the main class files, generating an HTML documentation tree in the
+    subdirectory <strong>docs</strong>.</td>
+  </tr>
+  <tr>
+    <td>jar</td>
+    <td>Create a jar archive <strong>icu4j.jar</strong> in the root ICU4J directory containing
+    the main class files.</td>
+  </tr>
+  <tr>
+    <td>zip</td>
+    <td>Create a zip archive of the source, docs, and jar file for distribution, excluding
+    unwanted things like CVS directories and emacs backup files. The zip file <strong>icu4jYYYYMMDD.zip</strong>
+    will be created in the directory <em>above</em> the root ICU4J directory, where YYYYMMDD
+    is today's date. Any existing file of that name will be overwritten.</td>
+  </tr>
+  <tr>
+    <td>zipsrc</td>
+    <td>Like the <strong>zip</strong> target, without the docs and the jar file. The zip file <strong>icu4jsrcYYYYMMDD.zip</strong>
+    will be created in the directory <em>above</em> the root ICU4J directory.</td>
+  </tr>
+  <tr>
+    <td>clean</td>
+    <td>Remove all built targets, leaving the source.</td>
+  </tr>
+</table>
+</div>
+
+<p>For more information, read the Ant documentation and the <strong>build.xml</strong>
+file.</p>
+
+<p>After doing a build it is a good idea to run all the tests by typeing &quot;java
+-classpath classes com.ibm.test.TestAll&quot;. </p>
+
+<p>(As an alternative to using Ant, you can build simply by running javac and javadoc
+directly. This is not recommended, but a Windows batch file &quot;buildall.bat&quot;
+exists to get you started if you're really allergic to build systems. You may have to
+create destination directories.)</p>
+
+<h3><a name="WhereToFindMore"></a><u>Where to Find More Information</u></h3>
+
+<p><a href="http://oss.software.ibm.com/icu4j">http://oss.software.ibm.com/icu4j</a> is a
+pointer to general information about the International Components for Unicode in Java </p>
+
+<p><a href="http://www.ibm.com/developer/unicode">http://www.ibm.com/developer/unicode</a> is a pointer to
+information on how to make applications global. </p>
+
+<h3><a NAME="SubmittingComments"></a><u>Submitting Comments, Requesting Features and
+Reporting Bugs</u></h3>
+
+<p>To submit comments, request features and report bugs, contact us through the <a href=http://oss.software.ibm.com/icu4j/archives/index.html>ICU4J mailing list</a>.<br>
+While we are not able to respond individually to each comment, we do review all comments. </p>
+
+<hr size="2" width="100%" align="center">
+
+<p>Copyright © 2001 International Business Machines Corporation and others. All Rights
+Reserved. <br>
+IBM Center for Java Technology Silicon Valley, <br>
+10275 N De Anza Blvd., Cupertino, CA 95014 <br>
+All rights reserved. </p>
+
+<hr size="2" width="100%" align="center">
+</body>
+</html>
diff --git a/src/com/ibm/data/misc/english.dict b/src/com/ibm/data/misc/english.dict
new file mode 100755
index 0000000..10f430b
--- /dev/null
+++ b/src/com/ibm/data/misc/english.dict
Binary files differ
diff --git a/src/com/ibm/data/misc/words.txt b/src/com/ibm/data/misc/words.txt
new file mode 100755
index 0000000..a7e06ac
--- /dev/null
+++ b/src/com/ibm/data/misc/words.txt
@@ -0,0 +1,2990 @@
+--
+--such
+a
+a'bel-mizraim
+a'iah
+abate
+abated
+abdicated
+abel
+abi'da
+abide
+abim'a-el
+abim'elech
+abim'elech's
+able
+abolish
+abolishing
+abomination
+about
+above
+abraham
+abraham's
+abram
+abram's
+abroad
+absent
+absolute
+absolved
+abundance
+abundantly
+abuses
+accad
+accept
+accepted
+accommodation
+according
+accordingly
+account
+accustomed
+achbor
+acknowledged
+acquiesce
+acquired
+across
+act
+acts
+adah
+adam
+adbeel
+add
+added
+admah
+administration
+adullamite
+advanced
+adviser
+afar
+affected
+afflicted
+affliction
+afraid
+after
+afterward
+afterwards
+again
+against
+age
+ages
+agile
+agree
+agreed
+ahuz'zath
+ai
+aid
+air
+akan
+al'lon-bacuth
+alighted
+alive
+all
+allegiance
+alliances
+allies
+allow
+allowance
+almighty
+almo'dad
+almond
+almonds
+alone
+along
+aloud
+already
+also
+altar
+alter
+altering
+although
+altogether
+alvah
+alvan
+am
+am'alek
+am'raphel
+amal'ekites
+amazement
+america
+ammonites
+among
+amongst
+amorite
+amorites
+amount
+an
+an'amim
+anah
+and
+aner
+angel
+angels
+anger
+angry
+animal
+animals
+annihilation
+anointed
+another
+another's
+answer
+answered
+any
+anything
+anywhere
+apart
+appealed
+appealing
+appear
+appeared
+appease
+appoint
+appointed
+approached
+approaching
+appropriations
+aprons
+ar'arat
+ar'ioch
+ar'vadites
+aram
+aramean
+aran
+arbitrary
+archers
+ard
+are
+are'li
+area
+arise
+ark
+arkites
+armed
+armies
+arms
+army
+aro'di
+arose
+around
+arpach'shad
+arrayed
+arrive
+art
+as
+as'enath
+ascending
+ash'kenaz
+ash'teroth-karna'im
+ashamed
+ashbel
+asher
+asher's
+ashes
+aside
+ask
+asked
+asks
+asleep
+ass
+ass's
+assemble
+assembled
+assent
+asses
+asshu'rim
+asshur
+assume
+assured
+assyria
+at
+atad
+ate
+attack
+attacked
+attained
+attempts
+attend
+attended
+attention
+authority
+avenged
+avith
+away
+awesome
+awoke
+ba'al-ha'nan
+ba'bel
+back
+backward
+bad
+bade
+bags
+baked
+baker
+balm
+bank
+banks
+barbarous
+barren
+bas'emath
+basket
+baskets
+battle
+bdellium
+be
+be'or
+be-e'ri
+bear
+bearing
+bears
+beast
+beasts
+beautiful
+became
+because
+becher
+become
+becomes
+bed
+bedad
+been
+beer-la'hai-roi
+beer-sheba
+befall
+befallen
+befalls
+before
+beg
+began
+beginning
+beguiled
+begun
+beheld
+behind
+behold
+being
+bela
+believe
+believed
+belly
+belong
+belonging
+belongs
+below
+ben-ammi
+ben-o'ni
+beneath
+benefits
+benjamin
+benjamin's
+bera
+bereaved
+bered
+bereft
+beri'ah
+beside
+besides
+besought
+best
+bethel
+bethlehem
+bethu'el
+better
+between
+beyond
+bilhah
+bilhan
+binding
+bird
+birds
+birsha
+birth
+birthday
+birthright
+bites
+bitter
+bitumen
+black
+blame
+blameless
+bless
+blessed
+blesses
+blessing
+blessings
+blighted
+blindness
+blood
+blossoms
+blot
+blotted
+blow
+bodies
+body
+boiling
+bonds
+bone
+bones
+book
+booths
+border
+bore
+born
+borne
+both
+bough
+bought
+bound
+boundaries
+bounties
+bow
+bowed
+bowing
+bowshot
+boys
+bozrah
+bracelets
+branches
+breach
+bread
+breadth
+break
+breaking
+breasts
+breath
+breathed
+bred
+breed
+breeding
+brethren
+brick
+bricks
+brimstone
+bring
+britain
+british
+broken
+bronze
+brother
+brother's
+brother-in-law
+brothers
+brought
+brow
+bruise
+budded
+build
+building
+built
+bulls
+bundle
+bundles
+buried
+burn
+burned
+burnt
+burst
+bury
+burying
+bushes
+but
+butler
+butlership
+buy
+buz
+by
+cain
+cake
+cakes
+calah
+calf
+call
+called
+calls
+came
+camel
+camel's
+camels
+camp
+camped
+can
+canaan
+canaan'
+canaanite
+canaanites
+canaanitish
+candid
+cannot
+caph'torim
+captain
+captive
+captives
+captured
+caravan
+carcasses
+care
+carefully
+carmi
+carried
+carry
+cases
+caslu'him
+cast
+cattle
+caught
+cause
+caused
+causes
+cave
+cease
+ceased
+certain
+chain
+chalde'ans
+chamber
+change
+changed
+character
+charge
+charged
+charging
+chariot
+chariots
+charters
+cheat
+cheated
+ched-or-lao'mer
+cheran
+cherubim
+chesed
+chezib
+chief
+chiefs
+child
+childbearing
+childless
+children
+children's
+choice
+choicest
+chose
+chosen
+circumcised
+circumstances
+cities
+citizens
+city
+civil
+civilized
+clans
+clean
+clear
+cleaves
+close
+closed
+clothed
+clothes
+clothing
+cloud
+clouds
+clusters
+coastland
+coasts
+coffin
+cold
+colonies
+colonies:
+colt
+colts
+combined
+come
+comely
+comes
+comfort
+comforted
+comforts
+coming
+command
+commanded
+commander
+commandments
+commerce
+commit
+committed
+common
+companies
+company
+complained
+complete
+completed
+compliance
+conceal
+conceived
+concern
+concerning
+conclude
+concubine
+concubines
+condition
+conditions
+confined
+confuse
+confused
+congress
+conjured
+connected
+connection
+connections
+consent
+consent:
+conspired
+constitution
+constrained
+constrains
+consume
+consumed
+contempt
+contended
+continually
+continue
+continued
+contract
+control
+controlling
+convulsions
+cool
+cord
+correspondence
+corrupt
+corrupted
+costly
+couch
+couched
+couches
+couching
+could
+council
+count
+counted
+countenance
+country
+course
+covenant
+cover
+covered
+covering
+cows
+created
+creation
+creator
+creature
+creatures
+creeping
+creeps
+cried
+crossed
+crossing
+crouching
+crown
+cruel
+cruelty
+cry
+crying
+cubit
+cubits
+cup
+curds
+current
+curse
+cursed
+curses
+cush
+custody
+cut
+cutting
+dainties
+damascus
+dan
+dangers
+dares
+dark
+darkness
+daughter
+daughter-in-law
+daughters
+dawned
+day
+days
+dead
+deal
+dealt
+death
+deb'orah
+deceitfully
+deceived
+decent
+decide
+decks
+declaration
+declare
+declaring
+dedan
+deed
+deep
+defeat
+defeated
+defiled
+define
+delay
+delayed
+delight
+deliver
+delivered
+delivery
+denied
+denounces
+depart
+departed
+departing
+dependent
+dependents
+depository
+depriving
+deriving
+descendants
+descending
+design
+desire
+desired
+desolate
+desolation
+despised
+despotism
+destroy
+destroyed
+destroys
+destruction
+destructive
+determined
+devoured
+devouring
+dew
+dictate
+did
+didst
+die
+died
+dies
+diklah
+dim
+din'habah
+dinah
+dinah's
+dine
+dipped
+direct
+direction
+disaster
+disavow
+discreet
+disgrace
+dishan
+dishon
+dismayed
+displeased
+displeasing
+disposed
+dissolutions
+dissolve
+dissolved
+distance
+distant
+distress
+distressed
+districts
+divide
+divided
+dividing
+divination
+divine
+divines
+do
+do'danim
+doer
+does
+doing
+domestic
+dominion
+done
+door
+dothan
+double
+doubling
+doubt
+dove
+down
+downcast
+dowry
+drank
+draw
+drawn
+dread
+dream
+dreamed
+dreamer
+dreams
+drew
+dried
+drink
+drinking
+drinks
+driven
+drove
+droves
+drunk
+dry
+dug
+dumah
+dungeon
+during
+dust
+duty
+dwell
+dwelling
+dwelt
+e'domites
+e'phraim
+e'phraim's
+each
+early
+ears
+earth
+easily
+east
+eastward
+eat
+eaten
+eating
+ebal
+eber
+eden
+eder
+edom
+effect
+egypt
+egyptian
+egyptian's
+egyptians
+ehi
+eight
+eighteen
+eighty
+eighty-seven
+eighty-six
+eighty-two
+either
+el'iphaz
+el-bethel
+el-el'ohe-israel
+el-paran
+elah
+elam
+elda'ah
+elder
+elders
+eldest
+elected
+eleven
+eli'shah
+elie'zer
+ella'sar
+elon
+else
+embalm
+embalmed
+embalming
+embrace
+embraced
+emigration
+emim
+emptied
+empty
+empty-handed
+enaim
+encamped
+encampments
+encourage
+end
+endeavored
+ended
+ending
+endowed
+ends
+enemies
+enemy
+english
+enlarge
+enlarging
+enmish'pat
+enmity
+enoch
+enosh
+enough
+enter
+entered
+entitle
+entrance
+entreat
+envied
+ephah
+epher
+ephrath
+ephron
+equal
+er
+erech
+erected
+eri
+errand
+esau
+esau's
+escape
+escaped
+esek
+eshban
+eshcol
+establish
+established
+establishing
+establishment
+eternal
+euphra'tes
+euphrates
+eve
+even
+evening
+events
+ever
+everlasting
+every
+everything
+everywhere
+evil
+evils
+evinces
+ewe
+ewes
+example
+exceedingly
+except
+exchange
+excited
+executioners
+exercise
+experience
+expert
+explain
+exposed
+exposing
+extend
+extended
+eyes
+ezbon
+ezer
+face
+faces
+facts
+failed
+fainted
+fair
+faithfulness
+fall
+fallen
+falls
+falsely
+families
+family
+famine
+famished
+far
+fare
+fared
+farewell
+fast
+fat
+father
+father's
+father-in-law
+fathers
+fatiguing
+fatness
+faults
+favor
+favorable
+fawns
+fear
+feared
+feast
+fed
+feebler
+feed
+feel
+feet
+fell
+fellow
+felt
+female
+festal
+fetch
+few
+field
+fields
+fierce
+fiercely
+fifteen
+fifth
+fifths
+fifty
+fig
+fill
+filled
+find
+finds
+fine
+finish
+finished
+fire
+firm
+firmament
+firmness
+first
+first-
+first-born
+firstlings
+fish
+fit
+five
+fixed
+flaming
+fled
+flee
+fleeing
+flesh
+floated
+flock
+flocks
+flood
+floor
+flowed
+flows
+fly
+foal
+follow
+followed
+following
+follows
+folly
+fondling
+food
+foolishly
+foot
+for
+forbidden
+force
+forced
+forces
+ford
+foreign
+foreigner
+foreigners
+foremost
+foreskin
+foreskins
+forger
+forget
+forgets
+forgive
+forgot
+forgotten
+form
+formed
+former
+formerly
+formidable
+forms
+forsaken
+forth
+fortune
+fortunes
+forty
+forty-five
+forty-seven
+found
+foundation
+fountains
+four
+fourteen
+fourteenth
+fourth
+frail
+free
+freely
+fresh
+freshly
+friend
+friendly
+friends
+fro
+from
+front
+frontiers
+fruit
+fruitful
+fruits
+fugitive
+fulfil
+fulfilled
+full
+fundamentally
+furnace
+fury
+future
+gad
+gaham
+gained
+galeed
+game
+garden
+garment
+garments
+gatam
+gate
+gather
+gathered
+gaunt
+gave
+gavest
+gaza
+gazed
+genealogies
+general
+generation
+generations
+gera
+gerar
+gershon
+get
+gether
+gift
+gifts
+gihon
+gilead
+gir'gashites
+give
+given
+givest
+giving
+go
+goat
+goats
+god
+god's
+gods
+goes
+goi'im
+going
+gold
+gomer
+gomor'rah
+gone
+good
+good-looking
+goods
+gopher
+goshen
+got
+gotten
+governed
+government
+governments
+governments:
+governor
+governors
+gracious
+graciously
+grain
+grandchildren
+grandson
+grant
+granted
+grapes
+grass
+grave
+gray
+great
+greater
+greatly
+green
+grew
+grieved
+grievous
+groping
+ground
+grow
+growing
+grown
+grows
+guard
+guards
+guile
+guilt
+guilty
+gum
+guni
+ha'mathites
+had
+hadad
+hadar
+hador'am
+hagar
+haggi
+hairs
+hairy
+half
+hallowed
+ham
+hamor
+hamor's
+hamstring
+hamul
+hand
+hands
+handsome
+hang
+hanged
+hanoch
+happened
+happiness
+happy
+haran
+harass
+harassed
+hard
+hardship
+harlot
+harlotry
+harm
+harshly
+harvest
+harvests
+has
+hast
+haste
+hastened
+hastily
+hate
+hated
+hath
+hav'ilah
+have
+haven
+havilah
+having
+haz'azon-ta'mar
+hazarma'veth
+hazo
+he
+he-asses
+he-goats
+head
+heads
+healed
+heap
+hear
+heard
+hearing
+hearken
+hearkened
+hears
+heart
+hearts
+heat
+heaven
+heavens
+heber
+hebrew
+hebrews
+hebron
+heed
+heeded
+heel
+heels
+heifer
+height
+heir
+held
+help
+helper
+heman
+hemdan
+her
+herb
+herd
+herds
+herdsmen
+here
+herself
+heth
+hewed
+hezron
+hid
+hidden
+hide
+high
+hill
+hills
+him
+himself
+hind
+hinder
+hip
+hirah
+hire
+hired
+his
+history
+hither
+hittite
+hittites
+hivite
+hivites
+hobah
+hold
+hollow
+home
+honest
+honesty
+honey
+honor
+honored
+hori
+horite
+horites
+horns
+horse's
+horsemen
+horses
+host
+hot
+hotly
+house
+household
+households
+houses
+how
+hul
+human
+humane
+humble
+humbled
+hundred
+hundredfold
+hundredth
+hunt
+hunted
+hunter
+hunting
+huppim
+husband
+husham
+hushim
+i
+if
+ill
+ill-treat
+image
+imagination
+immediate
+imnah
+impel
+importance
+imposing
+impossible
+in
+inasmuch
+incapable
+including
+increased
+indeed
+independent
+indian
+indignant
+inestimable
+inevitably
+inhabitants
+inheritance
+iniquity
+injuries
+injury
+innocence
+innocent
+inquire
+inquired
+inside
+instead
+institute
+instituted
+instructed
+instructing
+instrument
+instruments
+insult
+insurrections
+integrity
+intended
+intentions
+interpret
+interpretation
+interpretations
+interpreted
+interpreter
+interrupt
+into
+introducing
+invariably
+invasion
+invasions
+invested
+iob
+irad
+iram
+iron
+is
+is'sachar
+isaac
+isaac's
+iscah
+ish'mael
+ish'mael's
+ish'maelites
+ishbak
+ishvah
+ishvi
+israel
+israel's
+israelites
+it
+ithran
+its
+itself
+jabal
+jabbok
+jachin
+jacob
+jacob's
+jah'leel
+jahzeel
+jalam
+jamin
+japheth
+jar
+jared
+javan
+je'gar-sahadu'tha
+je'ush
+jealous
+jeb'usites
+jemu'el
+jerah
+jesting
+jetheth
+jetur
+jewelry
+jezer
+jidlaph
+jobab
+joined
+joint
+jokshan
+joktan
+jordan
+joseph
+joseph's
+journey
+journeyed
+jubal
+judah
+judah's
+judge
+judged
+judges
+judgment
+judiciary
+judith
+jurisdiction
+jury:
+just
+justice
+kad'monites
+kadesh
+ked'emah
+kedar
+keep
+keeper
+keepers
+kemu'el
+ken'ites
+ken'izzites
+kenan
+kenaz
+kept
+ketu'rah
+kid
+kids
+kill
+killed
+kind
+kindled
+kindness
+kindred
+kinds
+king
+king's
+kingdom
+kings
+kinsman
+kinsmen
+kir'iath-ar'ba
+kiss
+kissed
+kittim
+knead
+knee
+kneel
+knees
+knew
+knife
+know
+knowing
+knowledge
+known
+knows
+kohath
+korah
+laban
+laban's
+labor
+lack
+lacking
+lad
+lad's
+ladder
+lads
+laid
+lain
+lamb
+lambs
+lamech
+lamentation
+lamented
+land
+lands
+language
+languages
+languished
+large
+lasha
+last
+later
+laugh
+laughed
+laughter
+laws
+lay
+laying
+le-um'mim
+lead
+leaf
+leah
+leah's
+lean
+leap
+leaped
+learn
+learned
+least
+leave
+leaves
+led
+left
+legislate
+legislation:
+legislative
+legislature
+legislatures
+leha'bim
+length
+lentils
+lesser
+lest
+let
+letu'shim
+levey
+levi
+liberty
+lie
+lies
+life
+lifeblood
+lift
+lifted
+light
+lights
+like
+likely
+likeness
+likewise
+limping
+linen
+lingered
+lion
+lion's
+lioness
+listen
+listened
+listening
+little
+live
+lived
+lives
+livestock
+living
+lo
+load
+loaded
+lodge
+lodged
+lodging
+loins
+long
+longed
+longer
+longs
+look
+looked
+looking
+loose
+lord
+lord's
+lords
+loss
+lot
+lot's
+lotan
+lotan's
+loud
+love
+loved
+lovely
+loves
+lower
+lowered
+loyally
+lud
+ludim
+luz
+lying
+lyre
+ma'acah
+ma'halath
+ma-hal'alel
+mach-
+mach-pe'lah
+machir
+madai
+made
+mag'diel
+magicians
+magnanimity
+magog
+mahana'im
+maid
+maiden
+maids
+maidservants
+make
+maker
+making
+mal'chi-el
+male
+males
+mamre
+man
+man'ahath
+man's
+manas'seh
+manas'seh's
+mandrakes
+mankind
+manly
+manner
+mantle
+many
+mark
+marked
+marriage
+marriages
+married
+marries
+marry
+mash
+masre'kah
+massa
+master
+master's
+mate
+mating
+matred
+matter
+may
+me
+me'zahab
+me-hu'ja-el
+me-thu'sha-el
+meal
+mean
+meaning
+means
+meant
+meantime
+meanwhile
+measure
+measured
+measures
+medan
+meditate
+meet
+meets
+mehet'abel
+mel-chiz'edek
+members
+men
+men's
+mend
+mended
+menservants
+mention
+merar'i
+mercenaries
+merchants
+merciful
+merciless
+mercy
+merry
+mesha
+meshech
+mesopota'mia
+message
+messengers
+met
+methu'selah
+mibsam
+mibzar
+mid'ian
+mid'ianite
+mid'ianites
+midst
+midwife
+might
+mightier
+mightily
+mighty
+migrated
+migration
+milcah
+milch
+military
+milk
+mind
+mine
+mirth
+miscarried
+mishma
+mist
+mistress
+mizpah
+mizzah
+moab
+moabites
+mock
+mocking
+money
+monsters
+month
+months
+moon
+more
+moreh
+moreover
+mori'ah
+morning
+morsel
+mortar
+most
+mother
+mother's
+mothers
+mottled
+mount
+mountain
+mountains
+mourn
+mourned
+mourning
+mouth
+moved
+moves
+moving
+much
+multiplied
+multiply
+multitude
+muppim
+murders
+must
+mutually
+my
+myrrh
+myself
+na'amah
+na'aman
+nahath
+nahor
+nahor's
+naked
+nakedness
+name
+named
+names
+naph'tali
+naph-tu'him
+naphish
+nation
+nations
+native
+naturalization
+nature
+nature's
+near
+neba'ioth
+necessary
+necessity
+neck
+need
+negeb
+neglected
+neighboring
+neither
+nephilim
+never
+nevertheless
+new
+next
+night
+nights
+nile
+nimrod
+nin'eveh
+nine
+nineteen
+ninety
+ninety-five
+ninety-nine
+no
+noah
+noah's
+nod
+none
+noon
+nor
+north
+northward
+nose
+nostrils
+not
+nothing
+now
+number
+numbered
+numbers
+nurse
+nuts
+o
+oak
+oaks
+oath
+obal
+obedience
+obeisance
+obey
+obeyed
+object
+obstructed
+obstructing
+obtain
+obtained
+occasion
+occupation
+odious
+odor
+of
+off
+offended
+offense
+offenses:
+offer
+offered
+offering
+offerings
+office
+officer
+officers
+offices
+offspring
+oh
+ohad
+oholiba'mah
+oil
+old
+older
+oldest
+olive
+omar
+on
+onam
+onan
+once
+one
+ones
+only
+onyx
+open
+opened
+operation
+ophir
+opinions
+opposing
+opposite
+oppressed
+oppressions
+or
+order
+orders
+organizing
+ornaments
+other
+others
+ought
+our
+ours
+ourselves
+out
+outcry
+outside
+outwitted
+over
+overdriven
+overseer
+overseers
+oversight
+overtake
+overthrew
+overthrow
+overtook
+own
+owns
+oxen
+pace
+paddan
+paddan-aram
+paid
+pain
+pair
+pairs
+pallu
+paralleled
+paran
+part
+parts
+pass
+passed
+past
+pasture
+pastured
+pasturing
+path
+pathru'sim
+patient
+pau
+pay
+payment
+pe'lah
+peace
+peaceably
+peeled
+peleg
+peni'el
+penu'el
+people
+peopled
+peoples
+per'izzites
+perez
+perfidy
+perform
+perhaps
+perish
+permit
+perpetuated
+persons
+petitioned
+petitions
+pharaoh
+pharaoh's
+phicol
+philistines
+physicians
+piece
+pieces
+pigeon
+pildash
+pillar
+pinon
+pipe
+pishon
+pistachio
+pit
+pitch
+pitched
+pits
+place
+placed
+places
+plagues
+plain
+plainly
+plane
+planning
+plant
+planted
+plants
+play
+played
+playing
+pleasant
+please
+pleased
+pleases
+pleasing
+pleasure
+pledge
+plenteous
+plenty
+plowing
+plucked
+plump
+plundered
+point
+political
+poor
+poplar
+population
+portion
+portions
+possess
+possession
+possessions
+posterity
+pot
+pot'i-phar
+poti'phera
+pottage
+poured
+poverty
+power
+powers
+praise
+praised
+pray
+prayed
+prayer
+pre-eminence
+pre-eminent
+prepare
+prepared
+presence
+present
+presented
+preserve
+preserved
+pressed
+pressing
+pretended
+prevail
+prevailed
+prevent
+prevented
+prey
+price
+pride
+priest
+priests
+prince
+princes
+principles
+prison
+prisoners
+proceed
+produce
+profit
+promise
+promised
+pronounce
+property
+prophet
+proposal
+propose
+prosper
+prospered
+protecting
+protection
+prove
+provender
+provide
+provided
+providence
+province
+provision
+provisions
+prudence
+public
+publish
+punishment
+purchased
+purify
+purpose
+pursue
+pursued
+pursuing
+pursuit
+put
+putting
+puvah
+quarrel
+quarreled
+quartering
+questioned
+questions
+quickly
+quiet
+quiver
+ra'amah
+rachel
+rachel's
+raid
+raiders
+raiment
+rain
+rained
+raise
+raised
+raising
+ram
+ram'eses
+rams
+ran
+rather
+ravaged
+raven
+ravenous
+re'u
+reached
+ready
+really
+reaped
+reason
+reassured
+rebekah
+rebekah's
+rebelled
+rebuked
+receded
+receive
+received
+reckoned
+reckoning
+recognize
+recognized
+records
+rectitude
+red
+redeemed
+redress
+reduce
+reed
+refresh
+refused
+refusing
+regard
+regarded
+regards
+reho'both
+reho'both-ir
+reign
+reigned
+reliance
+relief
+relinquish
+remain
+remained
+remaining
+remains
+remember
+remembered
+reminded
+remnant
+remove
+removed
+removing
+render
+renown
+rent
+repeated
+repeatedly
+reph'aim
+replace
+replaced
+replied
+report
+representation
+representative
+representatives
+reproach
+require
+required
+requires
+rescue
+resen
+reserve
+reserved
+respect
+rest
+rested
+resting
+restore
+restored
+restrained
+return
+returned
+reu'el
+reuben
+reumah
+revealed
+revived
+reward
+rib
+ribs
+rich
+ride
+rider
+right
+righted
+righteous
+righteousness
+rightly
+rights
+ring
+rings
+ripened
+riphath
+rise
+risen
+river
+rivers
+road
+robe
+rock
+rode
+rods
+roll
+rolled
+roof
+room
+rooms
+rose
+rosh
+roughly
+round
+rouse
+routed
+royal
+rule
+ruler
+ruler's
+run
+runnels
+sab'teca
+sabtah
+sack
+sackcloth
+sacks
+sacred
+sacrifice
+sacrifices
+saddle
+saddled
+safely
+safety
+said
+sake
+salaries
+salem
+salt
+salvation
+same
+samlah
+sand
+sandal-thong
+sar'ai
+sarah
+sarah's
+sat
+savages
+saved
+saving
+savory
+saw
+say
+saying
+says
+scarcely
+scarlet
+scatter
+scattered
+scepter
+se'ir
+sea
+searched
+seas
+seashore
+season
+seasons
+seba
+second
+secretly
+secure
+security
+see
+seed
+seedtime
+seeing
+seek
+seeking
+seem
+seemed
+seen
+sees
+seize
+seized
+select
+self-evident
+sell
+semen
+send
+sent
+separate
+separated
+separation
+sephar
+sepulchre
+sepulchres
+serah
+sered
+serpent
+serug
+servant
+servant's
+servants
+serve
+served
+service
+serving
+set
+seth
+settle
+settled
+settlement
+seven
+sevenfold
+seventeen
+seventeenth
+seventh
+seventy
+seventy-five
+seventy-seven
+seventy-sevenfold
+severe
+sewed
+sexes
+sha'veh-kiriatha'im
+shall
+shammah
+share
+shaul
+shaved
+shaveh
+she
+she-asses
+she-goat
+she-goats
+sheaf
+shear
+sheaves
+sheba
+shechem
+shechem's
+shed
+sheds
+sheep
+sheepfolds
+sheepshearers
+shekel
+shekels
+shelah
+sheleph
+shelter
+shem
+sheme'ber
+sheol
+shepherd
+shepherding
+shepherds
+shepho
+shibah
+shield
+shillem
+shimron
+shinab
+shinar
+ships
+shobal
+shore
+short
+shortly
+shot
+should
+shoulder
+shoulders
+show
+showed
+shown
+shua
+shua's
+shuah
+shuni
+shur
+shut
+siddim
+side
+sidon
+sight
+sign
+signet
+signs
+silence
+silver
+simeon
+sin
+since
+sinew
+sinites
+sinned
+sinners
+sinning
+sister
+sister's
+sit
+sitnah
+sitting
+six
+sixteen
+sixth
+sixty
+sixty-five
+sixty-nine
+sixty-six
+sixty-two
+skilful
+skin
+skins
+slain
+slaughter
+slave
+slaves
+slay
+slays
+sleek
+sleep
+sleeves
+slept
+slew
+slope
+slowly
+small
+smell
+smelled
+smoke
+smoking
+smooth
+so
+sodom
+soil
+sojourn
+sojourned
+sojourner
+sojourners
+sojourning
+sojournings
+sold
+sole
+solemnly
+some
+son
+son's
+songs
+sons
+sons'
+sons-in-law
+soon
+sore
+sorely
+sorrow
+sorrowful
+sorry
+sort
+sorts
+sought
+soul
+sound
+south
+southward
+sow
+sowed
+space
+spare
+spared
+speak
+speaking
+speaks
+speckled
+speech
+spend
+spent
+spies
+spilled
+spirit
+splendor
+spoil
+spoke
+spoken
+spotted
+spread
+spring
+springing
+springs
+sprouted
+sprung
+staff
+stage
+stalk
+stand
+standing
+stands
+stars
+state
+states
+states:
+station
+statute
+statutes
+stay
+stayed
+stead
+steadfast
+steal
+steward
+still
+stole
+stolen
+stone
+stones
+stood
+stooped
+stop
+stopped
+store
+stored
+storehouses
+story
+stranger
+strangers
+straw
+streaks
+stream
+street
+strength
+stretched
+strife
+striking
+striped
+stripped
+striven
+strong
+stronger
+strongly
+struck
+struggled
+subdue
+subdued
+subject
+submit
+submitted
+subsided
+substance
+subtle
+success
+successful
+succoth
+such
+suck
+suckle
+suffer
+sufferable
+sufferance
+suitable
+summer
+summoned
+sun
+superior
+supplanted
+supplied
+support
+suppose
+supreme
+surely
+surety
+surrounded
+survivors
+suspended
+suspending
+sustained
+swallowed
+swarm
+swarming
+swarms
+swear
+sweat
+sword
+swords
+swore
+sworn
+system
+systems
+table
+tahash
+take
+taken
+taking
+talked
+talking
+tamar
+tamarisk
+tambourine
+tarried
+tarry
+tarshish
+taxes
+te'manites
+tebah
+teeth
+tell
+tells
+tema
+teman
+ten
+tender
+tenderly
+tent
+tenth
+tents
+tenure
+terah
+terms:
+territory
+terror
+tested
+than
+that
+the
+thee
+their
+theirs
+them
+themselves
+then
+thence
+there
+therefore
+therein
+these
+they
+thicket
+thigh
+thin
+thing
+things
+thinking
+third
+thirteen
+thirteenth
+thirty
+thirty-five
+thirty-four
+thirty-seven
+thirty-three
+thirty-two
+this
+thistles
+thorns
+thoroughly
+those
+thou
+thought
+thoughts
+thousand
+thousands
+thread
+three
+threshing
+throne
+through
+throughout
+throw
+thus
+thy
+tidal
+tidings
+ties
+tigris
+till
+tiller
+time
+times
+timna
+timnah
+tiras
+to
+today
+togar'mah
+together
+toil
+tola
+told
+tomb
+tonight
+too
+took
+top
+tops
+torch
+torn
+totally
+totaly
+touch
+touched
+touches
+toward
+tower
+towns
+trade
+traders
+train
+trained
+transgression
+transient
+transporting
+travailed
+treasure
+treat
+treated
+tree
+trees
+trembled
+trembling
+trial
+tribes
+tried
+troops
+trouble
+troubled
+troubles
+trough
+troughs
+truly
+truth
+truths
+tubal
+tubal-
+tubal-cain
+turn
+turned
+turns
+turtledove
+twelve
+twenty
+twenty-nine
+twenty-seven
+twenty-seventh
+twice
+twins
+two
+tyranny
+tyrant
+tyrants
+unacknowledged
+unalienable
+unawares
+uncircumcised
+uncomfortable
+uncovered
+under
+understand
+understood
+undistinguished
+unfit
+ungirded
+united
+unknown
+unleavened
+unless
+unmoved
+unstable
+until
+unusual
+unwarrantable
+unworth
+up
+upbraided
+upon
+uppermost
+upright
+ur
+urged
+us
+us:
+use
+using
+usurpations
+utterly
+uz
+uzal
+valley
+valuable
+vegetation
+veil
+vengeance
+vent
+vents
+verified
+very
+vesture
+villages
+vindication
+vine
+vineyard
+violence
+violently
+viper
+virgin
+vision
+visions
+visit
+visited
+voice
+void
+vow
+wages
+waging
+wagons
+wait
+waited
+walk
+walked
+walking
+wall
+wander
+wandered
+wanderer
+wandering
+wanting
+wantonness
+war
+warfare
+warned
+was
+wash
+washed
+washes
+watch
+water
+watered
+watering
+waters
+way
+wayside
+we
+weak
+weakness
+wealth
+wealthy
+weaned
+weapons
+wear
+wearied
+weary
+week
+weep
+weeping
+weighed
+weighing
+weight
+weights
+welfare
+well
+well's
+wells
+went
+wept
+were
+west
+westward
+what
+whatever
+whatsoever
+wheat
+whelp
+when
+whence
+whenever
+where
+whereby
+wherever
+whether
+which
+while
+white
+who
+whoever
+whole
+wholesome
+whom
+whomever
+whose
+why
+wicked
+wickedly
+wickedness
+widow
+widow's
+widowhood
+wife
+wife's
+wild
+wilderness
+will
+willing
+wilt
+wind
+window
+windows
+wine
+winged
+winter
+wise
+with
+withered
+withheld
+withhold
+within
+without
+witness
+wives
+wolf
+woman
+woman's
+womb
+wombs
+women
+wood
+word
+words
+wore
+work
+works
+world
+world:
+worse
+worship
+worshiped
+worth
+worthy
+would
+wounding
+wrapping
+wrath
+wrestled
+wrestlings
+wrong
+wrought
+year
+yearned
+years
+yes
+yet
+yield
+yielding
+yoke
+yonder
+you
+young
+younger
+youngest
+your
+yours
+yourself
+yourselves
+youth
+za'avan
+zaph'enath-pane'ah
+zeb'ulun
+zeboi'im
+zem'arites
+zepho
+zerah
+zib'eon
+zillah
+zilpah
+zimran
+ziph'ion
+zo'ar
+zohar
+zuzim
diff --git a/src/com/ibm/demo/DemoApplet.java b/src/com/ibm/demo/DemoApplet.java
new file mode 100755
index 0000000..e3ed204
--- /dev/null
+++ b/src/com/ibm/demo/DemoApplet.java
@@ -0,0 +1,80 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/Attic/DemoApplet.java,v $ 
+ * $Date: 2000/03/10 03:47:42 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.demo;
+
+import java.applet.Applet;
+import java.util.Locale;
+import java.awt.*;
+import java.awt.event.*;
+
+public abstract class DemoApplet extends java.applet.Applet {
+    private Button   demoButton;
+    private Frame    demoFrame;
+	private static int demoFrameCount = 0;
+
+    protected abstract Frame createDemoFrame(DemoApplet applet);
+    protected Dimension getDefaultFrameSize(DemoApplet applet, Frame f) {
+    	return new Dimension(700, 550);
+    }
+
+    //Create a button that will display the demo
+    public void init()
+    {
+        setBackground(Color.white);
+        demoButton = new Button("Demo");
+        demoButton.setBackground(Color.yellow);
+        add( demoButton );
+
+        demoButton.addActionListener( new ActionListener() {
+             public void actionPerformed(ActionEvent e) {
+                if (e.getID() == ActionEvent.ACTION_PERFORMED) {
+                    demoButton.setLabel("loading");
+
+                    if (demoFrame == null) {
+                       demoFrame = createDemoFrame(DemoApplet.this);
+                       showDemo();
+                    }
+
+                    demoButton.setLabel("Demo");
+                }
+             }
+        } );
+    }
+
+    public void showDemo()
+    {
+    	demoFrame = createDemoFrame(this);
+        demoFrame.layout();
+        Dimension d = getDefaultFrameSize(this, demoFrame);
+        demoFrame.resize(d.width, d.height);
+        demoFrame.show();
+		demoFrameOpened();
+    }
+
+    public void demoClosed()
+    {
+        demoFrame = null;
+		demoFrameClosed();
+    }
+
+	protected static void demoFrameOpened() {
+		demoFrameCount++;
+    }
+	protected static void demoFrameClosed() {
+		if (--demoFrameCount == 0) {
+			System.exit(0);
+		}
+    }
+}
+
diff --git a/src/com/ibm/demo/DemoTextBox.java b/src/com/ibm/demo/DemoTextBox.java
new file mode 100755
index 0000000..3d11497
--- /dev/null
+++ b/src/com/ibm/demo/DemoTextBox.java
@@ -0,0 +1,101 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/Attic/DemoTextBox.java,v $ 
+ * $Date: 2000/03/10 03:47:42 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo;
+
+
+import java.text.BreakIterator;
+import java.awt.*;
+
+public class DemoTextBox {
+
+    public DemoTextBox(Graphics g, String text, int width)
+    {
+        this.text = text;
+        this.chars = new char[text.length()];
+        text.getChars(0, text.length(), chars, 0);
+
+        this.width = width;
+        this.port = g;
+        this.metrics = g.getFontMetrics();
+
+        breakText();
+    }
+
+    public  int getHeight() {
+        return (nbreaks + 1) * metrics.getHeight();
+    }
+
+    public  void draw(Graphics g, int x, int y)
+    {
+        int index = 0;
+
+        y += metrics.getAscent();
+
+        for (int i = 0; i < nbreaks; i++)
+        {
+            g.drawChars(chars, index, breakPos[i] - index, x, y);
+            index = breakPos[i];
+            y += metrics.getHeight();
+        }
+
+        g.drawChars(chars, index, chars.length - index, x, y);
+    }
+
+
+    private void breakText()
+    {
+        if (metrics.charsWidth(chars, 0, chars.length) > width)
+        {
+            BreakIterator iter = BreakIterator.getWordInstance();
+            iter.setText(text);
+
+            int start = iter.first();
+            int end = start;
+            int pos;
+
+            while ( (pos = iter.next()) != BreakIterator.DONE )
+            {
+                int w = metrics.charsWidth(chars, start, pos - start);
+                if (w > width)
+                {
+                    // We've gone past the maximum width, so break the line
+                    if (end > start) {
+                        // There was at least one break position before this point
+                        breakPos[nbreaks++] = end;
+                        start = end;
+                        end = pos;
+                    } else {
+                        // There weren't any break positions before this one, so
+                        // let this word overflow the margin (yuck)
+                        breakPos[nbreaks++] = pos;
+                        start = end = pos;
+                    }
+                } else {
+                    // the current position still fits on the line; it's the best
+                    // tentative break position we have so far.
+                    end = pos;
+                }
+
+            }
+        }
+    }
+
+    private String          text;
+    private char[]          chars;
+    private Graphics        port;
+    private FontMetrics     metrics;
+    private int             width;
+
+    private int[]           breakPos = new int[10]; // TODO: get real
+    private int             nbreaks = 0;
+}
\ No newline at end of file
diff --git a/src/com/ibm/demo/DemoUtility.java b/src/com/ibm/demo/DemoUtility.java
new file mode 100755
index 0000000..15f266a
--- /dev/null
+++ b/src/com/ibm/demo/DemoUtility.java
@@ -0,0 +1,136 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/Attic/DemoUtility.java,v $ 
+ * $Date: 2000/04/26 18:40:15 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo;
+
+import java.awt.*;
+import java.lang.*;
+import java.util.*;
+
+public class DemoUtility
+{
+    public static final Font titleFont = new Font("TimesRoman",Font.BOLD,18);
+    public static final Font labelFont = new Font("TimesRoman",Font.BOLD,14);
+    public static final Font choiceFont = new Font("Helvetica",Font.BOLD,12);
+    public static final Font editFont = new Font("Helvetica",Font.PLAIN,14);
+    public static final Font creditFont = new Font("Helvetica",Font.PLAIN,10);
+    public static final Font numberFont = new Font("sansserif", Font.PLAIN, 14);
+
+    public static final Color bgColor = Color.lightGray;
+    public static final Color choiceColor = Color.white;
+
+    public static final String copyright1 =
+        "(C) Copyright Taligent, Inc. 1996-1998.  Copyright (C) IBM, Inc. 1998 - All Rights Reserved";
+    public static final String copyright2 =
+        "Portions copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved.";
+
+    /**
+    Provides easy way to use basic functions of GridBagLayout, without
+    the complications. After building a panel, and inserting all the
+    * subcomponents, call this to lay it out in the desired number of columns.
+    */
+    public static void fixGrid(Container cont, int columns) {
+        GridBagLayout gridbag = new GridBagLayout();
+        cont.setLayout(gridbag);
+
+        GridBagConstraints c = new GridBagConstraints();
+        c.fill = GridBagConstraints.VERTICAL;
+        c.weightx = 1.0;
+        c.insets = new Insets(2,2,2,2);
+
+        Component[] components = cont.getComponents();
+        for (int i = 0; i < components.length; ++i) {
+            int colNumber = i%columns;
+            c.gridwidth = 1;    // default
+            if ((i%columns) == columns - 1)
+                c.gridwidth = GridBagConstraints.REMAINDER;    // last in grid
+            if (components[i] instanceof Label) {
+                switch (((Label)components[i]).getAlignment()) {
+                case Label.CENTER: c.anchor = GridBagConstraints.CENTER; break;
+                case Label.LEFT: c.anchor = GridBagConstraints.WEST; break;
+                case Label.RIGHT: c.anchor = GridBagConstraints.EAST; break;
+                }
+            }
+            gridbag.setConstraints(components[i], c);
+        }
+
+    }
+
+    /**
+    Provides easy way to change the spacing around an object in a GridBagLayout.
+    Call AFTER fixGridBag, passing in the container, the component, and the
+    new insets.
+    */
+    public static void setInsets(Container cont, Component comp, Insets insets) {
+        GridBagLayout gbl = (GridBagLayout)cont.getLayout();
+        GridBagConstraints g = gbl.getConstraints(comp);
+        g.insets = insets;
+        gbl.setConstraints(comp,g);
+    }
+
+    public static Panel createSpacer() {
+        Panel spacer = new Panel();
+        spacer.setLayout(null);
+        spacer.resize(1000, 1);
+        return spacer;
+    }
+
+    // to avoid goofy updates and misplaced cursors
+    public static void setText(TextComponent area, String newText) {
+        String foo = area.getText();
+        if (foo.equals(newText)) return;
+        area.setText(newText);
+    }
+    
+    /**
+     * Compares two locals. Return value is negative
+     * if they're different, and more positive the more
+     * fields that match.
+     */
+     
+    public static int compareLocales(Locale l1, Locale l2)
+    {
+        int result = -1;
+        
+        if (l1.getLanguage().equals(l2.getLanguage())) {
+            result += 1;
+            
+            if (l1.getCountry().equals(l2.getCountry())) {
+                result += 1;
+                
+                if (l1.getVariant().equals(l2.getVariant())) {
+                    result += 1;
+                }
+            }
+        }
+        
+        return result;
+    }
+    
+    /**
+     * Get the G7 locale list for demos.
+     */
+    public static Locale[] getG7Locales() {
+        return localeList;
+    }
+    private static Locale[] localeList = {
+        new Locale("DA", "DK", ""),
+        new Locale("EN", "US", ""),
+        new Locale("EN", "GB", ""),
+        new Locale("EN", "CA", ""),
+        new Locale("FR", "FR", ""),
+        new Locale("FR", "CA", ""),
+        new Locale("DE", "DE", ""),
+        new Locale("IT", "IT", ""),
+    //new Locale("JA", "JP", ""),
+    };
+}
diff --git a/src/com/ibm/demo/calendar/CalendarApp.java b/src/com/ibm/demo/calendar/CalendarApp.java
new file mode 100755
index 0000000..4ff0d48
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarApp.java
@@ -0,0 +1,45 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/calendar/Attic/CalendarApp.java,v $ 
+ * $Date: 2000/05/12 23:21:23 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.demo.calendar;
+
+import com.ibm.demo.*;
+
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+import java.net.*;
+import java.io.*;
+
+import com.ibm.util.*;
+import com.ibm.text.*;
+
+/**
+ * CalendarApp demonstrates how Calendar works.
+ */
+public class CalendarApp extends DemoApplet
+{
+    /**
+     * The main function which defines the behavior of the CalendarDemo
+     * applet when an applet is started.
+     */
+    public static void main(String argv[]) {
+
+        new CalendarApp().showDemo();
+    }
+
+    /* This creates a CalendarFrame for the demo applet. */
+    public Frame createDemoFrame(DemoApplet applet) {
+        return new CalendarFrame(applet);
+    }
+}
diff --git a/src/com/ibm/demo/calendar/CalendarCalc.java b/src/com/ibm/demo/calendar/CalendarCalc.java
new file mode 100755
index 0000000..b3ab269
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarCalc.java
@@ -0,0 +1,572 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/calendar/Attic/CalendarCalc.java,v $ 
+ * $Date: 2000/10/19 00:27:16 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.demo.calendar;
+
+import com.ibm.demo.*;
+
+import java.applet.Applet;
+import java.util.Date;
+import java.awt.*;
+import java.awt.event.*;
+
+//import java.text.DateFormat;
+import com.ibm.text.DateFormat;
+import java.text.ParsePosition;
+
+//import java.util.Calendar;
+import com.ibm.util.Calendar;
+//import java.util.GregorianCalendar;
+import com.ibm.util.GregorianCalendar;
+//import java.util.TimeZone;
+import com.ibm.util.TimeZone;
+import java.util.Locale;
+
+import com.ibm.util.*;
+import com.ibm.text.*;
+
+import javax.swing.*;
+
+/**
+ * CalendarCalc demonstrates how Date/Time formatter works.
+ */
+public class CalendarCalc extends DemoApplet
+{
+    /**
+     * The main function which defines the behavior of the MultiCalendarDemo
+     * applet when an applet is started.
+     */
+    public static void main(String argv[]) {
+        new CalendarCalc().showDemo();
+    }
+
+    /**
+     * This creates a CalendarCalcFrame for the demo applet.
+     */
+    public Frame createDemoFrame(DemoApplet applet) {
+        return new CalendarCalcFrame(applet);
+    }
+}
+
+/**
+ * A Frame is a top-level window with a title. The default layout for a frame
+ * is BorderLayout.  The CalendarCalcFrame class defines the window layout of
+ * MultiCalendarDemo.
+ */
+class CalendarCalcFrame extends Frame
+{
+    private static final String     creditString = "";
+
+    static final Locale[] locales = DemoUtility.getG7Locales();
+
+    private static final boolean    DEBUG = false;
+
+    private DemoApplet              applet;
+    private long                    time = System.currentTimeMillis();
+
+    private static final RollAddField kRollAddFields[] = {
+        new RollAddField(Calendar.YEAR,                 "Year" ),
+        new RollAddField(Calendar.MONTH,                "Month" ),
+        new RollAddField(Calendar.WEEK_OF_MONTH,        "Week of Month" ),
+        new RollAddField(Calendar.WEEK_OF_YEAR,         "Week of Year" ),
+        new RollAddField(Calendar.DAY_OF_MONTH,         "Day of Month" ),
+        new RollAddField(Calendar.DAY_OF_WEEK,          "Day of Week" ),
+        new RollAddField(Calendar.DAY_OF_WEEK_IN_MONTH, "Day of Week in Month" ),
+        new RollAddField(Calendar.DAY_OF_YEAR,          "Day of Year" ),
+        new RollAddField(Calendar.AM_PM,                "AM/PM" ),
+        new RollAddField(Calendar.HOUR_OF_DAY,          "Hour of day" ),
+        new RollAddField(Calendar.HOUR,                 "Hour" ),
+        new RollAddField(Calendar.MINUTE,               "Minute" ),
+        new RollAddField(Calendar.SECOND,               "Second" ),
+    };
+
+    /**
+     * Constructs a new CalendarCalcFrame that is initially invisible.
+     */
+    public CalendarCalcFrame(DemoApplet applet)
+    {
+        super("Multiple Calendar Demo");
+        this.applet = applet;
+        init();
+        start();
+    }
+
+    /**
+     * Initializes the applet. You never need to call this directly, it
+     * is called automatically by the system once the applet is created.
+     */
+    public void init()
+    {
+        buildGUI();
+
+        patternText.setText( calendars[0].toPattern() );
+
+        // Force an update of the display
+        cityChanged();
+        millisFormat();
+    }
+
+    //------------------------------------------------------------
+    // package private
+    //------------------------------------------------------------
+    void addWithFont(Container container, Component foo, Font font) {
+        if (font != null)
+            foo.setFont(font);
+        container.add(foo);
+    }
+
+    /**
+     * Called to start the applet. You never need to call this method
+     * directly, it is called when the applet's document is visited.
+     */
+    public void start()
+    {
+        // do nothing
+    }
+
+    TextField patternText;
+
+    Choice dateMenu;
+    Choice localeMenu;
+
+    Button up;
+    Button down;
+
+    Checkbox getRoll;
+    Checkbox getAdd;
+
+    public void buildGUI()
+    {
+        setBackground(DemoUtility.bgColor);
+        setLayout(new FlowLayout()); // shouldn't be necessary, but it is.
+
+// TITLE
+        Label label1=new Label("Calendar Converter", Label.CENTER);
+        label1.setFont(DemoUtility.titleFont);
+        add(label1);
+        add(DemoUtility.createSpacer());
+
+// IO Panel
+        Panel topPanel = new Panel();
+        topPanel.setLayout(new FlowLayout());
+
+        CheckboxGroup group1= new CheckboxGroup();
+
+        // Set up the controls for each calendar we're demonstrating
+        for (int i = 0; i < calendars.length; i++)
+        {
+            Label label = new Label(calendars[i].name, Label.RIGHT);
+            label.setFont(DemoUtility.labelFont);
+            topPanel.add(label);
+
+            topPanel.add(calendars[i].text);
+
+            final int j = i;
+            calendars[i].text.addActionListener( new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    textChanged(j);
+                }
+            } );
+
+            calendars[i].rollAdd.setCheckboxGroup(group1);
+            topPanel.add(calendars[i].rollAdd);
+        }
+        calendars[0].rollAdd.setState(true);    // Make the first one selected
+
+        Label label4=new Label("Pattern", Label.RIGHT);
+        label4.setFont(DemoUtility.labelFont);
+        topPanel.add(label4);
+
+        patternText=new TextField(FIELD_COLUMNS);
+        patternText.setFont(DemoUtility.editFont);
+        topPanel.add(patternText);
+        topPanel.add(new Label(""));
+
+        DemoUtility.fixGrid(topPanel,3);
+        add(topPanel);
+        add(DemoUtility.createSpacer());
+
+// ROLL / ADD
+        Panel rollAddPanel=new Panel();
+        {
+            rollAddPanel.setLayout(new FlowLayout());
+
+            Panel rollAddBoxes = new Panel();
+            {
+                rollAddBoxes.setLayout(new GridLayout(2,1));
+                CheckboxGroup group2= new CheckboxGroup();
+                getRoll = new Checkbox("Roll",group2, false);
+                getAdd = new Checkbox("Add",group2, true);
+
+                rollAddBoxes.add(getRoll);
+                rollAddBoxes.add(getAdd);
+            }
+
+            Label dateLabel=new Label("Date Fields");
+            dateLabel.setFont(DemoUtility.labelFont);
+
+            dateMenu= new Choice();
+            dateMenu.setBackground(DemoUtility.choiceColor);
+            for (int i = 0; i < kRollAddFields.length; i++) {
+                dateMenu.addItem(kRollAddFields[i].name);
+                if (kRollAddFields[i].field == Calendar.MONTH) {
+                    dateMenu.select(i);
+                }
+            }
+
+            Panel upDown = new Panel();
+            {
+                upDown.setLayout(new GridLayout(2,1));
+
+                // *** If the images are not found, we use the label.
+                up = new Button("^");
+                down = new Button("v");
+                up.setBackground(DemoUtility.bgColor);
+                down.setBackground(DemoUtility.bgColor);
+                upDown.add(up);
+                upDown.add(down);
+            }
+
+            rollAddPanel.add(dateLabel);
+            rollAddPanel.add(dateMenu);
+            rollAddPanel.add(rollAddBoxes);
+            rollAddPanel.add(upDown);
+
+        }
+        Panel localePanel = new Panel();
+        {
+            // Make the locale popup menus
+            localeMenu= new Choice();
+            Locale defaultLocale = Locale.getDefault();
+            int bestMatch = -1, thisMatch = -1;
+            int selectMe = 0;
+            
+            for (int i = 0; i < locales.length; i++) {
+                if (i > 0 && locales[i].getLanguage().equals(locales[i-1].getLanguage()) ||
+                    i < locales.length - 1 &&
+                        locales[i].getLanguage().equals(locales[i+1].getLanguage()))
+                {
+                    localeMenu.addItem( locales[i].getDisplayName() );
+                } else {
+                    localeMenu.addItem( locales[i].getDisplayLanguage());
+                }
+                
+                thisMatch = DemoUtility.compareLocales(locales[i], defaultLocale);
+                
+                if (thisMatch >= bestMatch) {
+                    bestMatch = thisMatch;
+                    selectMe = i;
+                }
+            }
+            
+            localeMenu.setBackground(DemoUtility.choiceColor);
+            localeMenu.select(selectMe);
+
+            Label localeLabel =new Label("Display Locale");
+            localeLabel.setFont(DemoUtility.labelFont);
+
+            localePanel.add(localeLabel);
+            localePanel.add(localeMenu);
+            DemoUtility.fixGrid(localePanel,2);
+
+            localeMenu.addItemListener( new ItemListener() {
+                public void itemStateChanged(ItemEvent e) {
+                    Locale loc = locales[localeMenu.getSelectedIndex()];
+                    System.out.println("Change locale to " + loc.getDisplayName());
+
+                    for (int i = 0; i < calendars.length; i++) {
+                        calendars[i].setLocale(loc);
+                    }
+                    millisFormat();
+                }
+            } );
+        }
+        add(rollAddPanel);
+        add(DemoUtility.createSpacer());
+        add(localePanel);
+        add(DemoUtility.createSpacer());
+
+// COPYRIGHT
+        Panel copyrightPanel = new Panel();
+        addWithFont (copyrightPanel,new Label(DemoUtility.copyright1, Label.LEFT),
+            DemoUtility.creditFont);
+        DemoUtility.fixGrid(copyrightPanel,1);
+        add(copyrightPanel);
+    }
+
+    /**
+     * Called if an action occurs in the CalendarCalcFrame object.
+     */
+    public boolean action(Event evt, Object obj)
+    {
+        // *** Button events are handled here.
+        if (evt.target instanceof Button) {
+            if (evt.target == up) {
+                    dateFieldChanged(false);
+                    return true;
+            } else
+            if (evt.target == down) {
+                    dateFieldChanged(true);
+                    return true;
+            }
+        }
+        return super.action(evt, obj);
+    }
+
+    /**
+     * Handles the event. Returns true if the event is handled and should not
+     * be passed to the parent of this component. The default event handler
+     * calls some helper methods to make life easier on the programmer.
+     */
+    public boolean handleEvent(Event evt)
+    {
+        if (evt.id == Event.KEY_RELEASE && evt.target == patternText) {
+            patternTextChanged();
+            return true;
+        }
+        else if (evt.id == Event.KEY_RELEASE) {
+            for (int i = 0; i < calendars.length; i++) {
+                if (evt.target == calendars[i].text) {
+                    textChanged(i);
+                    return true;
+                }
+            }
+        }
+        else if (evt.id == Event.ACTION_EVENT && evt.target == up) {
+            dateFieldChanged(true);
+            return true;
+        }
+        else if (evt.id == Event.ACTION_EVENT && evt.target == down) {
+            dateFieldChanged(false);
+            return true;
+        }
+        else if (evt.id == Event.WINDOW_DESTROY && evt.target == this) {
+            this.hide();
+            this.dispose();
+
+            if (applet != null) {
+               applet.demoClosed();
+            } else System.exit(0);
+
+            return true;
+        }
+
+        return super.handleEvent(evt);
+    }
+
+    /**
+     * This function is called when users change the pattern text.
+     */
+    public void setFormatFromPattern() {
+        String timePattern = patternText.getText();
+
+        for (int i = 0; i < calendars.length; i++) {
+            calendars[i].applyPattern(timePattern);
+        }
+
+        millisFormat();
+    }
+
+    /**
+     * This function is called when it is necessary to parse the time
+     * string in one of the formatted date fields
+     */
+    public void textChanged(int index) {
+        String rightString = calendars[index].text.getText();
+
+        ParsePosition status = new ParsePosition(0);
+
+        if (rightString.length() == 0)
+        {
+            errorText("Error: no input to parse!");
+            return;
+        }
+
+        try {
+            Date date = calendars[index].format.parse(rightString, status);
+            time = date.getTime();
+        }
+        catch (Exception e) {
+            for (int i = 0; i < calendars.length; i++) {
+                if (i != index) {
+                    calendars[i].text.setText("ERROR");
+                }
+            }
+            errorText("Exception: " + e.getClass().toString() + " parsing: "+rightString);
+            return;
+        }
+
+        int start = calendars[index].text.getSelectionStart();
+        int end = calendars[index].text.getSelectionEnd();
+
+        millisFormat();
+
+        calendars[index].text.select(start,end);
+    }
+
+    /**
+     * This function is called when it is necessary to format the time
+     * in the "Millis" text field.
+     */
+    public void millisFormat() {
+        String out = "";
+
+        for (int i = 0; i < calendars.length; i++) {
+            try {
+                out = calendars[i].format.format(new Date(time));
+                calendars[i].text.setText(out);
+            }
+            catch (Exception e) {
+                calendars[i].text.setText("ERROR");
+                errorText("Exception: " + e.getClass().toString() + " formatting "
+                            + calendars[i].name + " " + time);
+            }
+        }
+    }
+
+
+    /**
+     * This function is called when users change the pattern text.
+     */
+    public void patternTextChanged() {
+        setFormatFromPattern();
+    }
+
+    /**
+     * This function is called when users select a new representative city.
+     */
+    public void cityChanged() {
+        TimeZone timeZone = TimeZone.getDefault();
+
+        for (int i = 0; i < calendars.length; i++) {
+            calendars[i].format.setTimeZone(timeZone);
+        }
+        millisFormat();
+    }
+
+    /**
+     * This function is called when users select a new time field
+     * to add or roll its value.
+     */
+    public void dateFieldChanged(boolean up) {
+        int field = kRollAddFields[dateMenu.getSelectedIndex()].field;
+
+        for (int i = 0; i < calendars.length; i++)
+        {
+            if (calendars[i].rollAdd.getState())
+            {
+                Calendar c = calendars[i].calendar;
+                c.setTime(new Date(time));
+
+                if (getAdd.getState()) {
+                    c.add(field, up ? 1 : -1);
+                } else {
+                    c.roll(field, up);
+                }
+
+                time = c.getTime().getTime();
+                millisFormat();
+                break;
+            }
+        }
+    }
+
+    /**
+     * Print out the error message while debugging this program.
+     */
+    public void errorText(String s)
+    {
+        if (true) {
+            System.out.println(s);
+        }
+    }
+
+    private static final int        FIELD_COLUMNS = 35;
+    private static final String     DEFAULT_FORMAT = "EEEE MMMM d, yyyy G";
+
+
+    class CalendarRec {
+        public CalendarRec(String nameStr, Calendar cal)
+        {
+            name = nameStr;
+            calendar = cal;
+            rollAdd = new Checkbox();
+
+            text = new JTextField("",FIELD_COLUMNS);
+            text.setFont(DemoUtility.editFont);
+
+            format = DateFormat.getDateInstance(cal, DateFormat.FULL,
+                                                Locale.getDefault());
+            //format.applyPattern(DEFAULT_FORMAT);
+        }
+
+        public void setLocale(Locale loc) {
+            String pattern = toPattern();
+
+            format = DateFormat.getDateInstance(calendar, DateFormat.FULL,
+                                                loc);
+            applyPattern(pattern);
+        }
+
+        public void applyPattern(String pattern) {
+            if (format instanceof SimpleDateFormat) {
+                ((SimpleDateFormat)format).applyPattern(pattern);
+//hey {al} - 
+//            } else if (format instanceof java.text.SimpleDateFormat) {
+//                ((java.text.SimpleDateFormat)format).applyPattern(pattern);
+            }
+        }
+        
+        private String toPattern() {
+            if (format instanceof SimpleDateFormat) {
+                return ((SimpleDateFormat)format).toPattern();
+//hey {al} - 
+//            } else if (format instanceof java.text.SimpleDateFormat) {
+//                return ((java.text.SimpleDateFormat)format).toPattern();
+            } else {
+                return "";
+            }
+        }
+
+        Calendar  calendar;
+        DateFormat          format;
+        String              name;
+        JTextField           text;
+        Checkbox            rollAdd;
+    };
+
+    private final CalendarRec[] calendars = {
+        new CalendarRec("Gregorian",        new GregorianCalendar()),
+        new CalendarRec("Hebrew",           new HebrewCalendar()),
+        new CalendarRec("Islamic (civil)",  makeIslamic(true)),
+        new CalendarRec("Islamic (true)",   makeIslamic(false)),
+        new CalendarRec("Buddhist",         new BuddhistCalendar()),
+        new CalendarRec("Japanese",         new JapaneseCalendar()),
+//        new CalendarRec("Chinese",          new ChineseCalendar()),
+    };
+
+    static private final Calendar makeIslamic(boolean civil) {
+        IslamicCalendar cal = new IslamicCalendar();
+        cal.setCivil(civil);
+        return cal;
+    };
+};
+
+class RollAddField {
+    RollAddField(int field, String name) {
+        this.field = field;
+        this.name = name;
+    }
+    int field;
+    String name;
+};
diff --git a/src/com/ibm/demo/calendar/CalendarFrame.java b/src/com/ibm/demo/calendar/CalendarFrame.java
new file mode 100755
index 0000000..9b400fe
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarFrame.java
@@ -0,0 +1,435 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/calendar/Attic/CalendarFrame.java,v $ 
+ * $Date: 2000/10/19 00:27:16 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.demo.calendar;
+
+import com.ibm.demo.*;
+import com.ibm.util.Calendar;
+import com.ibm.util.HebrewCalendar;
+import com.ibm.util.BuddhistCalendar;
+import com.ibm.util.JapaneseCalendar;
+import com.ibm.util.IslamicCalendar;
+import com.ibm.text.SimpleDateFormat;
+//import java.util.SimpleTimeZone;
+import com.ibm.util.SimpleTimeZone;
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+import java.net.*;
+import java.io.*;
+//import java.text.DateFormat;
+import com.ibm.text.DateFormat;
+import java.text.MessageFormat;
+//import java.util.Calendar;
+import com.ibm.util.Calendar;
+import java.util.Date;
+//import java.util.GregorianCalendar;
+import com.ibm.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+//import java.util.TimeZone;
+import com.ibm.util.TimeZone;
+
+/**
+ * A Frame is a top-level window with a title. The default layout for a frame
+ * is BorderLayout.  The CalendarFrame class defines the window layout of
+ * CalendarDemo.
+ */
+class CalendarFrame extends Frame
+{
+    private static final boolean DEBUG = false;
+
+    private DemoApplet applet;
+
+    /**
+     * Constructs a new CalendarFrame that is initially invisible.
+     */
+    public CalendarFrame(DemoApplet myApplet)
+    {
+        super("Calendar Demo");
+        this.applet = myApplet;
+        init();
+
+        // When the window is closed, we want to shut down the applet or application
+        addWindowListener(
+            new WindowAdapter() {
+                public void windowClosing(WindowEvent e) {
+                    setVisible(false);
+                    dispose();
+
+                    if (applet != null) {
+                        applet.demoClosed();
+                    } else System.exit(0);
+                }
+            } );
+    }
+
+    private Choice          displayMenu;
+    private Locale[]        locales = DemoUtility.getG7Locales();
+
+    private Calendar        calendars[]   = new Calendar[2];
+    private Choice          calMenu[]     = new Choice[2];
+    private ColoredLabel    monthLabel[]  = new ColoredLabel[2];
+    private DateFormat      monthFormat[] = new DateFormat[2];
+
+    private Button          prevYear;
+    private Button          prevMonth;
+    private Button          gotoToday;
+    private Button          nextMonth;
+    private Button          nextYear;
+    private CalendarPanel   calendarPanel;
+
+    private static void add(Container container, Component component,
+                            GridBagLayout g, GridBagConstraints c,
+                            int gridwidth, int weightx)
+    {
+        c.gridwidth = gridwidth;
+        c.weightx = weightx;
+        g.setConstraints(component, c);
+        container.add(component);
+    }
+
+    /**
+     * Initializes the applet. You never need to call this directly, it
+     * is called automatically by the system once the applet is created.
+     */
+    public void init() {
+        setBackground(DemoUtility.bgColor);
+        setLayout(new BorderLayout(10,10));
+
+        Panel topPanel = new Panel();
+        GridBagLayout g = new GridBagLayout();
+        topPanel.setLayout(g);
+        GridBagConstraints c = new GridBagConstraints();
+        c.fill = GridBagConstraints.HORIZONTAL;
+
+        // Build the two menus for selecting which calendar is displayed,
+        // plus the month/year label for each calendar
+        for (int i = 0; i < 2; i++) {
+            calMenu[i] = new Choice();
+            for (int j = 0; j < CALENDARS.length; j++) {
+                calMenu[i].addItem(CALENDARS[j].name);
+            }
+            calMenu[i].setBackground(DemoUtility.choiceColor);
+            calMenu[i].select(i);
+            calMenu[i].addItemListener(new CalMenuListener());
+
+            // Label for the current month name
+            monthLabel[i] = new ColoredLabel("", COLORS[i]);
+            monthLabel[i].setFont(DemoUtility.titleFont);
+
+            // And the default calendar to use for this slot
+            calendars[i] = CALENDARS[i].calendar;
+
+            add(topPanel, calMenu[i], g, c, 5, 0);
+            add(topPanel, monthLabel[i], g, c, GridBagConstraints.REMAINDER, 1);
+        }
+
+        // Now add the next/previous year/month buttons:
+        prevYear = new Button("<<");
+        prevYear.addActionListener(new AddAction(Calendar.YEAR, -1));
+
+        prevMonth = new Button("<");
+        prevMonth.addActionListener(new AddAction(Calendar.MONTH, -1));
+
+        gotoToday = new Button("Today");
+        gotoToday.addActionListener( new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e) {
+                calendarPanel.setDate( new Date() );
+                updateMonthName();
+            }
+        } );
+
+        nextMonth = new Button(">");
+        nextMonth.addActionListener(new AddAction(Calendar.MONTH, 1));
+
+        nextYear = new Button(">>");
+        nextYear.addActionListener(new AddAction(Calendar.YEAR, 1));
+
+        c.fill = GridBagConstraints.NONE;
+        add(topPanel, prevYear,  g, c, 1, 0);
+        add(topPanel, prevMonth, g, c, 1, 0);
+        add(topPanel, gotoToday, g, c, 1, 0);
+        add(topPanel, nextMonth, g, c, 1, 0);
+        add(topPanel, nextYear,  g, c, 1, 0);
+
+        // Now add the menu for selecting the display language
+        Panel displayPanel = new Panel();
+        {
+            displayMenu = new Choice();
+            Locale defaultLocale = Locale.getDefault();
+            int bestMatch = -1, thisMatch = -1;
+            int selectMe = 0;
+            
+            for (int i = 0; i < locales.length; i++) {
+                if (i > 0 &&
+                        locales[i].getLanguage().equals(locales[i-1].getLanguage()) ||
+                    i < locales.length - 1 &&
+                        locales[i].getLanguage().equals(locales[i+1].getLanguage()))
+                {
+                    displayMenu.addItem( locales[i].getDisplayName() );
+                } else {
+                    displayMenu.addItem( locales[i].getDisplayLanguage());
+                }
+
+                thisMatch = DemoUtility.compareLocales(locales[i], defaultLocale);
+                
+                if (thisMatch >= bestMatch) {
+                    bestMatch = thisMatch;
+                    selectMe = i;
+                }
+            }
+            
+            displayMenu.setBackground(DemoUtility.choiceColor);
+            displayMenu.select(selectMe);
+
+            displayMenu.addItemListener( new ItemListener()
+            {
+                 public void itemStateChanged(ItemEvent e) {
+                    Locale loc = locales[displayMenu.getSelectedIndex()];
+                    calendarPanel.setLocale( loc );
+                    monthFormat[0] = monthFormat[1] = null;
+                    updateMonthName();
+                    repaint();
+                }
+            } );
+
+            Label l1 = new Label("Display Language:", Label.RIGHT);
+            l1.setFont(DemoUtility.labelFont);
+
+            displayPanel.setLayout(new FlowLayout());
+            displayPanel.add(l1);
+            displayPanel.add(displayMenu);
+
+        }
+        c.fill = GridBagConstraints.NONE;
+        c.anchor = GridBagConstraints.EAST;
+
+        add(topPanel, displayPanel, g, c, GridBagConstraints.REMAINDER, 0);
+
+        // The title, buttons, etc. go in a panel at the top of the window
+        add("North", topPanel);
+
+        // The copyright notice goes at the bottom of the window
+        Label copyright = new Label(DemoUtility.copyright1, Label.LEFT);
+        copyright.setFont(DemoUtility.creditFont);
+        add("South", copyright);
+
+        // Now create the big calendar panel and stick it in the middle
+        calendarPanel = new CalendarPanel( locales[displayMenu.getSelectedIndex()] );
+        add("Center", calendarPanel);
+
+        for (int i = 0; i < 2; i++) {
+            calendarPanel.setCalendar(i, calendars[i]);
+            calendarPanel.setColor(i, COLORS[i]);
+        }
+
+        updateMonthName();
+    };
+
+
+    private void updateMonthName()
+    {
+            for (int i = 0; i < 2; i++) {
+                try {
+                    if (monthFormat[i] == null) {     // TODO: optimize
+                        DateFormat f = DateFormat.getDateTimeInstance(
+                                                calendars[i], DateFormat.MEDIUM, -1,
+                                                locales[displayMenu.getSelectedIndex()]);
+                        if (f instanceof com.ibm.text.SimpleDateFormat) {
+                            com.ibm.text.SimpleDateFormat f1 = (com.ibm.text.SimpleDateFormat) f;
+                            f1.applyPattern("MMMM, yyyy G");
+                            f1.setTimeZone(new SimpleTimeZone(0, "UTC"));
+//hey {al} -
+//                        } else if (f instanceof java.text.SimpleDateFormat) {
+//                            java.text.SimpleDateFormat f1 = (java.text.SimpleDateFormat) f;
+//                            f1.applyPattern("MMMM, yyyy G");
+//                            f1.setTimeZone(new SimpleTimeZone(0, "UTC"));
+                        }
+                        monthFormat[i] = f;
+                    }
+                } catch (ClassCastException e) {
+                    //hey {lw} - there's something wrong in this routine that cuases exceptions.
+                    System.out.println(e);
+                }
+
+                monthLabel[i].setText( monthFormat[i].format( calendarPanel.firstOfMonth() ));
+            }
+    }
+
+    /**
+     * CalMenuListener responds to events in the two popup menus that select
+     * the calendar systems to be used in the display.  It figures out which
+     * of the two menus the event occurred in and updates the corresponding
+     * element of the calendars[] array to match the new selection.
+     */
+    private class CalMenuListener implements ItemListener
+    {
+         public void itemStateChanged(ItemEvent e)
+         {
+            for (int i = 0; i < calMenu.length; i++)
+            {
+                if (e.getItemSelectable() == calMenu[i])
+                {
+                    // We found the menu that the event happened in.
+                    // Figure out which new calendar they selected.
+                    Calendar newCal = CALENDARS[ calMenu[i].getSelectedIndex() ].calendar;
+
+                    if (newCal != calendars[i])
+                    {
+                        // If any of the other menus are set to the same new calendar
+                        // we're about to use for this menu, set them to the current
+                        // calendar from *this* menu so we won't have two the same
+                        for (int j = 0; j < calendars.length; j++) {
+                            if (j != i && calendars[j] == newCal) {
+                                calendars[j] = calendars[i];
+                                calendarPanel.setCalendar(j, calendars[j]);
+                                monthFormat[j] = null;
+
+                                for (int k = 0; k < CALENDARS.length; k++) {
+                                    if (calendars[j] == CALENDARS[k].calendar) {
+                                        calMenu[j].select(k);
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                        // Now update this menu to use the new calendar the user selected
+                        calendars[i] = newCal;
+                        calendarPanel.setCalendar(i, newCal);
+                        monthFormat[i] = null;
+
+                        updateMonthName();
+                    }
+                    break;
+                }
+            }
+         }
+    };
+
+    /**
+     * AddAction handles the next/previous year/month buttons...
+     */
+    private class AddAction implements ActionListener {
+        AddAction(int field, int amount) {
+            this.field = field;
+            this.amount = amount;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            calendarPanel.add(field, amount);
+            updateMonthName();
+        }
+
+        private int field, amount;
+    }
+
+    /**
+     * ColoredLabel is similar to java.awt.Label, with two differences:
+     *
+     *  - You can set its text color
+     *
+     *  - It draws text using drawString rather than using a host-specific
+     *    "Peer" object like AWT does.  On 1.2, using drawString gives
+     *    us Bidi reordering for free.
+     */
+    static private class ColoredLabel extends Component {
+        public ColoredLabel(String label) {
+            text = label;
+        }
+
+        public ColoredLabel(String label, Color c) {
+            text = label;
+            color = c;
+        }
+
+        public void setText(String label) {
+            text = label;
+            repaint();
+        }
+
+        public void setFont(Font f) {
+            font = f;
+            repaint();
+        }
+
+        public void paint(Graphics g) {
+            FontMetrics fm = g.getFontMetrics(font);
+
+            Rectangle bounds = getBounds();
+
+            g.setColor(color);
+            g.setFont(font);
+            g.drawString(text, fm.stringWidth("\u00a0"),
+                         bounds.height/2 + fm.getHeight()
+                         - fm.getAscent() + fm.getLeading()/2);
+        }
+
+        public Dimension getPreferredSize() {
+            return getMinimumSize();
+        }
+
+        public Dimension getMinimumSize() {
+            FontMetrics fm = getFontMetrics(font);
+
+            return new Dimension( fm.stringWidth(text) + 2*fm.stringWidth("\u00a0"),
+                                  fm.getHeight() + fm.getLeading()*2);
+        }
+
+        String text;
+        Color color = Color.black;
+        Font font = DemoUtility.labelFont;
+    }
+
+    /**
+     * Print out the error message while debugging this program.
+     */
+    public void errorText(String s)
+    {
+        if (DEBUG)
+        {
+            System.out.println(s);
+        }
+    }
+
+    class CalendarRec {
+        public CalendarRec(String nameStr, Calendar cal)
+        {
+            name = nameStr;
+            calendar = cal;
+        }
+
+        Calendar  calendar;
+        String              name;
+    };
+
+    private final CalendarRec[] CALENDARS = {
+        new CalendarRec("Gregorian Calendar",       new GregorianCalendar()),
+        new CalendarRec("Hebrew Calendar",          new HebrewCalendar()),
+        new CalendarRec("Islamic Calendar",         makeIslamic(false)),
+        new CalendarRec("Islamic Civil Calendar ",  makeIslamic(true)),
+        new CalendarRec("Buddhist Calendar",        new BuddhistCalendar()),
+        new CalendarRec("Japanese Calendar",        new JapaneseCalendar()),
+    };
+
+    static private final Calendar makeIslamic(boolean civil) {
+        IslamicCalendar cal = new IslamicCalendar();
+        cal.setCivil(civil);
+        return cal;
+    };
+
+    static final Color[] COLORS = { Color.blue, Color.black };
+}
+
diff --git a/src/com/ibm/demo/calendar/CalendarPanel.java b/src/com/ibm/demo/calendar/CalendarPanel.java
new file mode 100755
index 0000000..1b97dcb
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarPanel.java
@@ -0,0 +1,368 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/calendar/Attic/CalendarPanel.java,v $ 
+ * $Date: 2000/10/19 00:27:16 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.demo.calendar;
+
+import com.ibm.demo.*;
+
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+//import java.util.*;
+import java.net.*;
+import java.io.*;
+
+//import java.text.DateFormat;
+import com.ibm.text.DateFormat;
+//import java.util.SimpleTimeZone;
+import com.ibm.util.SimpleTimeZone;
+//import java.util.*;
+import java.util.Date;
+import java.util.Locale;
+
+import com.ibm.util.*;
+import com.ibm.text.*;
+
+class CalendarPanel extends Canvas {
+
+    public CalendarPanel( Locale locale ) {
+        setLocale(locale);
+    }
+
+    public void setLocale(Locale locale) {
+        if (fDisplayLocale == null || !fDisplayLocale.equals(locale)) {
+            fDisplayLocale = locale;
+            dirty = true;
+
+            for (int i = 0; i < fCalendar.length; i++) {
+                if (fCalendar[i] != null) {
+                    fSymbols[i] = new DateFormatSymbols(fCalendar[i],
+                                                        fDisplayLocale);
+                }
+            }
+            String lang = locale.getLanguage();
+            leftToRight = !(lang.equals("iw") || lang.equals("ar"));
+
+            repaint();
+        }
+    }
+
+    public void setDate(Date date) {
+        fStartOfMonth = date;
+        dirty = true;
+        repaint();
+    }
+
+    public void add(int field, int delta)
+    {
+        synchronized(fCalendar) {
+            fCalendar[0].setTime(fStartOfMonth);
+            fCalendar[0].add(field, delta);
+            fStartOfMonth = fCalendar[0].getTime();
+        }
+        dirty = true;
+        repaint();
+    }
+
+    public void setColor(int index, Color c) {
+        fColor[index] = c;
+        repaint();
+    }
+
+    public void setCalendar(int index, Calendar c) {
+        Date date = (fCalendar[index] == null) ? new Date()
+                                               : fCalendar[index].getTime();
+
+        fCalendar[index] = c;
+        fCalendar[index].setTime(date);
+
+        fSymbols[index] = new DateFormatSymbols(c, fDisplayLocale);
+        dirty = true;
+        repaint();
+    }
+
+    public Calendar getCalendar(int index) {
+        return fCalendar[index];
+    }
+
+    public Locale getDisplayLocale() {
+        return fDisplayLocale;
+    }
+
+    public Date firstOfMonth() {
+        return fStartOfMonth;
+    }
+
+    private Date startOfMonth(Date dateInMonth)
+    {
+        synchronized(fCalendar) {
+            fCalendar[0].setTime(dateInMonth);
+
+            int era = fCalendar[0].get(Calendar.ERA);
+            int year = fCalendar[0].get(Calendar.YEAR);
+            int month = fCalendar[0].get(Calendar.MONTH);
+
+            fCalendar[0].clear();
+            fCalendar[0].set(Calendar.ERA, era);
+            fCalendar[0].set(Calendar.YEAR, year);
+            fCalendar[0].set(Calendar.MONTH, month);
+            fCalendar[0].set(Calendar.DATE, 1);
+
+            return fCalendar[0].getTime();
+        }
+    }
+
+    private void calculate()
+    {
+        //
+        // As a workaround for JDK 1.1.3 and below, where Calendars and time
+        // zones are a bit goofy, always set my calendar's time zone to UTC.
+        // You would think I would want to do this in the "set" function above,
+        // but if I do that, the program hangs when this class is loaded,
+        // perhaps due to some sort of static initialization ordering problem.
+        // So I do it here instead.
+        //
+        fCalendar[0].setTimeZone(new SimpleTimeZone(0, "UTC"));
+
+        Calendar c = (Calendar)fCalendar[0].clone(); // Temporary copy
+
+        fStartOfMonth = startOfMonth(fStartOfMonth);
+
+        // Stash away a few useful constants for this calendar and display
+        minDay = c.getMinimum(Calendar.DAY_OF_WEEK);
+        daysInWeek = c.getMaximum(Calendar.DAY_OF_WEEK) - minDay + 1;
+
+        firstDayOfWeek = Calendar.getInstance(fDisplayLocale).getFirstDayOfWeek();
+
+        // Stash away a Date for the start of this month
+
+        // Find the day of week of the first day in this month
+        c.setTime(fStartOfMonth);
+        firstDayInMonth = c.get(Calendar.DAY_OF_WEEK);
+        int firstWeek = c.get(Calendar.WEEK_OF_MONTH);
+
+        // Now find the # of days in the month
+        c.roll(Calendar.DATE, false);
+        daysInMonth = c.get(Calendar.DATE);
+
+        // Finally, find the end of the month, i.e. the start of the next one
+        c.roll(Calendar.DATE, true);
+        c.add(Calendar.MONTH, 1);
+        c.getTime();        // JDK 1.1.2 bug workaround
+        c.add(Calendar.SECOND, -1);
+        Date endOfMonth = c.getTime();
+        int lastWeek = c.get(Calendar.WEEK_OF_MONTH);
+
+        // Calculate the number of full or partial weeks in this month.
+        numWeeks = lastWeek - firstWeek + 1;
+
+        dirty = false;
+    }
+
+    static final int XINSET = 4;
+    static final int YINSET = 2;
+
+    /*
+     * Convert from the day number within a month (1-based)
+     * to the cell coordinates on the calendar (0-based)
+     */
+    private void dateToCell(int date, Point pos)
+    {
+        int cell = (date + firstDayInMonth - firstDayOfWeek - minDay);
+        if (firstDayInMonth < firstDayOfWeek) {
+            cell += daysInWeek;
+        }
+
+        pos.x = cell % daysInWeek;
+        pos.y = cell / daysInWeek;
+    }
+    private Point dateToCell(int date) {
+        Point p = new Point(0,0);
+        dateToCell(date, p);
+        return p;
+    }
+
+    public void paint(Graphics g) {
+
+        if (dirty) {
+            calculate();
+        }
+
+        Point cellPos = new Point(0,0);     // Temporary variable
+        Dimension d = this.getSize();
+
+        g.setColor(Color.lightGray);
+        g.fillRect(0,0,d.width,d.height);
+
+        // Draw the day names at the top
+        g.setColor(Color.black);
+        g.setFont(DemoUtility.labelFont);
+        FontMetrics fm = g.getFontMetrics();
+        int labelHeight = fm.getHeight() + YINSET * 2;
+
+        int v = fm.getAscent() + YINSET;
+        for (int i = 0; i < daysInWeek; i++) {
+            int dayNum = (i + minDay + firstDayOfWeek - 2) % daysInWeek + 1;
+            String dayName = fSymbols[0].getWeekdays()[dayNum];
+
+
+            double h;
+            if (leftToRight) {
+                h = d.width*(i + 0.5) / daysInWeek;
+            } else {
+                h = d.width*(daysInWeek - i - 0.5) / daysInWeek;
+            }
+            h -= fm.stringWidth(dayName) / 2;
+
+            g.drawString(dayName, (int)h, v);
+        }
+
+        double cellHeight = (d.height - labelHeight - 1) / numWeeks;
+        double cellWidth = (double)(d.width - 1) / daysInWeek;
+
+        // Draw a white background in the part of the calendar
+        // that displays this month.
+        // First figure out how much of the first week should be shaded.
+        {
+            g.setColor(Color.white);
+            dateToCell(1, cellPos);
+            int width = (int)(cellPos.x*cellWidth);  // Width of unshaded area
+
+            if (leftToRight) {
+                g.fillRect((int)(width), labelHeight ,
+                           d.width - width, (int)cellHeight);
+            } else {
+                g.fillRect(0, labelHeight ,
+                           d.width - width, (int)cellHeight);
+            }
+
+            // All of the intermediate weeks get shaded completely
+            g.fillRect(0, (int)(labelHeight + cellHeight),
+                        d.width, (int)(cellHeight * (numWeeks - 2)));
+
+            // Now figure out the last week.
+            dateToCell(daysInMonth, cellPos);
+            width = (int)((cellPos.x+1)*cellWidth);  // Width of shaded area
+
+            if (leftToRight) {
+                g.fillRect(0, (int)(labelHeight + (numWeeks-1) * cellHeight),
+                           width, (int)cellHeight);
+            } else {
+                g.fillRect(d.width - width, (int)(labelHeight + (numWeeks-1) * cellHeight),
+                           width, (int)cellHeight);
+            }
+
+        }
+        // Draw the X/Y grid lines
+        g.setColor(Color.black);
+        for (int i = 0; i <= numWeeks; i++) {
+            int y = (int)(labelHeight + i * cellHeight);
+            g.drawLine(0, y, d.width - 1, y);
+        }
+        for (int i = 0; i <= daysInWeek; i++) {
+            int x = (int)(i * cellWidth);
+            g.drawLine(x, labelHeight, x, d.height - 1);
+        }
+
+        // Now loop through all of the days in the month, figure out where
+        // they go in the grid, and draw the day # for each one
+
+        // Figure out the date of the first cell in the calendar display
+        int cell = (1 + firstDayInMonth - firstDayOfWeek - minDay);
+        if (firstDayInMonth < firstDayOfWeek) {
+            cell += daysInWeek;
+        }
+
+        Calendar c = (Calendar)fCalendar[0].clone();
+        c.setTime(fStartOfMonth);
+        c.add(Calendar.DATE, -cell);
+
+        StringBuffer buffer = new StringBuffer();
+
+        for (int row = 0; row < numWeeks; row++) {
+            for (int col = 0; col < daysInWeek; col++) {
+
+                g.setFont(DemoUtility.numberFont);
+                g.setColor(Color.black);
+                fm = g.getFontMetrics();
+
+                int cellx;
+                if (leftToRight) {
+                    cellx = (int)((col) * cellWidth);
+                } else {
+                    cellx = (int)((daysInWeek - col - 1) * cellWidth);
+                }
+
+                int celly = (int)(row * cellHeight + labelHeight);
+
+                for (int i = 0; i < 2; i++) {
+                    fCalendar[i].setTime(c.getTime());
+
+                    int date = fCalendar[i].get(Calendar.DATE);
+                    buffer.setLength(0);
+                    buffer.append(date);
+                    String dayNum = buffer.toString();
+
+                    int x;
+
+                    if (leftToRight) {
+                        x = cellx + (int)cellWidth - XINSET - fm.stringWidth(dayNum);
+                    } else {
+                        x = cellx + XINSET;
+                    }
+                    int y = celly + + fm.getAscent() + YINSET + i * fm.getHeight();
+
+                    if (fColor[i] != null) {
+                        g.setColor(fColor[i]);
+                    }
+                    g.drawString(dayNum, x, y);
+
+                    if (date == 1 || row == 0 && col == 0) {
+                        g.setFont(DemoUtility.numberFont);
+                        String month = fSymbols[i].getMonths()[
+                                            fCalendar[i].get(Calendar.MONTH)];
+
+                        if (leftToRight) {
+                            x = cellx + XINSET;
+                        } else {
+                            x = cellx + (int)cellWidth - XINSET - fm.stringWidth(month);
+                        }
+                        g.drawString(month, x, y);
+                    }
+                }
+
+                c.add(Calendar.DATE, 1);
+            }
+        }
+    }
+
+    // Important state variables
+    private Calendar[]          fCalendar = new Calendar[4];
+    private Color[]             fColor = new Color[4];
+
+    private Locale              fDisplayLocale;
+    private DateFormatSymbols[] fSymbols = new DateFormatSymbols[4];
+
+    private Date                fStartOfMonth = new Date();     // 00:00:00 on first day of month
+
+    // Cached calculations to make drawing faster.
+    private transient int       minDay;           // Minimum legal day #
+    private transient int       daysInWeek;       // # of days in a week
+    private transient int       firstDayOfWeek;   // First day to display in week
+    private transient int       numWeeks;         // # full or partial weeks in month
+    private transient int       daysInMonth;      // # days in this month
+    private transient int       firstDayInMonth;  // Day of week of first day in month
+    private transient boolean   leftToRight;
+
+    private transient boolean dirty = true;
+}
diff --git a/src/com/ibm/demo/calendar/package.html b/src/com/ibm/demo/calendar/package.html
new file mode 100755
index 0000000..5275b89
--- /dev/null
+++ b/src/com/ibm/demo/calendar/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/calendar/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 06:28:48 $
+-->
+</head>
+<body bgcolor="white">
+Calendar demo applications including date/time arithmetic.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/demo/holiday/HolidayBorderPanel.java b/src/com/ibm/demo/holiday/HolidayBorderPanel.java
new file mode 100755
index 0000000..d838142
--- /dev/null
+++ b/src/com/ibm/demo/holiday/HolidayBorderPanel.java
@@ -0,0 +1,550 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1997-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/holiday/Attic/HolidayBorderPanel.java,v $ 
+ * $Date: 2000/03/10 03:47:43 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.holiday;
+
+import com.ibm.demo.*;
+import java.awt.*;
+
+/**
+ * Various graphical borders. The border itself is a Panel so that it can
+ * contain other Components (i.e. it borders something). You use the
+ * HolidayBorderPanel like any other Panel: you set the layout that you prefer and
+ * add Components to it. Beware that a null layout does not obey the insets
+ * of the panel so if you use null layouts, adjust your measurements to
+ * handle the border by calling insets().
+ *
+ * @author  Andy Clark, Taligent Inc.
+ * @version 1.0
+ */
+public class HolidayBorderPanel extends Panel {
+    // Constants
+
+    /** Solid border. */
+    public final static int SOLID = 0;
+    /** A raised border. */
+    public final static int RAISED = 1;
+    /** A lowered border. */
+    public final static int LOWERED = 2;
+    /** An etched in border. */
+    public final static int IN = 3;
+    /** An etched out border. */
+    public final static int OUT = 4;
+
+    /** Left alignment. */
+    public final static int LEFT = 0;
+    /** Center alignment. */
+    public final static int CENTER = 1;
+    /** Right alignment. */
+    public final static int RIGHT = 2;
+
+    /** Default style (IN). */
+    public final static int DEFAULT_STYLE = IN;
+    /** Default thickness (10). */
+    public final static int DEFAULT_THICKNESS = 10;
+    /** Default thickness for solid borders (4). */
+    public final static int DEFAULT_SOLID_THICKNESS = 4;
+    /** Default thickness for raised borders (2). */
+    public final static int DEFAULT_RAISED_THICKNESS = 2;
+    /** Default thickness for lowered borders (2). */
+    public final static int DEFAULT_LOWERED_THICKNESS = 2;
+    /** Default thickness for etched-in borders (10). */
+    public final static int DEFAULT_IN_THICKNESS = 10;
+    /** Default thickness for etched-out borders (10). */
+    public final static int DEFAULT_OUT_THICKNESS = 10;
+    /** Default gap between border and contained component (5). */
+    public final static int DEFAULT_GAP = 5;
+    /** Default color (black). Applies to SOLID and etched borders. */
+    public final static Color DEFAULT_COLOR = Color.black;
+
+    /** Default font (TimesRoman,PLAIN,14). Only applies to etched borders. */
+    public final static Font DEFAULT_FONT = new Font("TimesRoman", Font.PLAIN, 14);
+    /** Default alignment (LEFT). Only applies to etched borders. */
+    public final static int DEFAULT_ALIGNMENT = LEFT;
+
+    // Data
+    private int style;
+    private int thickness;
+    private int gap;
+    private Color color;
+
+    private Font font;
+    private String text;
+    private int alignment;
+
+    /**
+     * Constructor. Makes default border.
+     */
+    public HolidayBorderPanel() {
+
+        // initialize data
+        style       = DEFAULT_STYLE;
+        thickness   = DEFAULT_THICKNESS;
+        gap         = DEFAULT_GAP;
+        color       = DEFAULT_COLOR;
+
+        text        = null;
+        font        = DEFAULT_FONT;
+        alignment   = DEFAULT_ALIGNMENT;
+
+        }
+
+    /**
+     * Constructor. Makes an etched IN border with given text caption.
+     *
+     * @param text  Text caption
+     */
+    public HolidayBorderPanel(String text) {
+        this();
+
+        style = IN;
+        this.text = text;
+        }
+
+    /**
+     * Constructor. Makes SOLID border with color and thickness given.
+     *
+     * @param color     The color for the border.
+     * @param thickness The thickness of the border.
+     */
+    public HolidayBorderPanel(Color color, int thickness) {
+        this();
+
+        style = SOLID;
+        this.color = color;
+        this.thickness = thickness;
+        }
+
+    /**
+     * Constructor. Makes a border of the given style with the default
+     * thickness for that style.
+     *
+     * @param style The style for this border.
+     */
+    public HolidayBorderPanel(int style) {
+        this();
+
+        // set thickness appropriate to this style
+        int thickness;
+        switch (style) {
+            case SOLID: thickness = DEFAULT_SOLID_THICKNESS; break;
+            case RAISED: thickness = DEFAULT_RAISED_THICKNESS; break;
+            case LOWERED: thickness = DEFAULT_LOWERED_THICKNESS; break;
+            case IN: thickness = DEFAULT_IN_THICKNESS; break;
+            case OUT: thickness = DEFAULT_OUT_THICKNESS; break;
+            default:
+                thickness = DEFAULT_THICKNESS;
+            }
+
+        this.style = style;
+        this.thickness = thickness;
+        }
+
+    /**
+     * Constructor. Makes border with given style and thickness.
+     *
+     * @param style     The style for this border.
+     * @param thickness The thickness for this border.
+     */
+    public HolidayBorderPanel(int style, int thickness) {
+        this();
+
+        this.style = style;
+        this.thickness = thickness;
+        }
+
+    /**
+     * Returns the insets of this panel..
+     */
+    public Insets insets() {
+        int adjustment = 0;
+
+        // adjust for text string
+        if (style == IN || style == OUT) {
+            if (text != null && text.length() > 0) {
+                try {
+                    // set font and get info
+                    int height = getGraphics().getFontMetrics(font).getHeight();
+                    if (height > thickness)
+                        adjustment = height - thickness;
+                    }
+                catch (Exception e) {
+                    // nothing: just in case there is no graphics context
+                    //   at the beginning.
+                    }
+                }
+            }
+
+        // return appropriate insets
+        int dist = thickness + gap;
+        return new Insets(dist + adjustment, dist, dist, dist);
+        }
+
+    /**
+     * Sets the style of the border
+     *
+     * @param style The new style.
+     */
+    public HolidayBorderPanel setStyle(int style) {
+
+        // set the style and re-layout the panel
+        this.style = style;
+        layout();
+        repaint();
+
+        return this;
+        }
+
+    /**
+     * Gets the style of the border
+     */
+    public int getStyle() {
+
+        return style;
+        }
+
+    /**
+     * Sets the thickness of the border.
+     *
+     * @param thickness The new thickness
+     */
+    public HolidayBorderPanel setThickness(int thickness) {
+
+        if (thickness > 0) {
+            this.thickness = thickness;
+            layout();
+            repaint();
+            }
+
+        return this;
+        }
+
+    /**
+     * Gets the thickness of the border.
+     */
+    public int getThickness() {
+
+        return thickness;
+        }
+
+    /**
+     * Sets the gap between the border and the contained Component.
+     *
+     * @param gap The new gap, in pixels.
+     */
+    public HolidayBorderPanel setGap(int gap) {
+
+        if (gap > -1) {
+            this.gap = gap;
+            layout();
+            repaint();
+            }
+
+        return this;
+        }
+
+    /**
+     * Gets the gap between the border and the contained Component.
+     */
+    public int getGap() {
+
+        return gap;
+        }
+
+    /**
+     * Sets the current color for SOLID borders and the caption text
+     * color for etched borders.
+     *
+     * @param color The new color.
+     */
+    public HolidayBorderPanel setColor(Color color) {
+
+        this.color = color;
+        if (style == SOLID || style == IN || style == OUT)
+            repaint();
+
+        return this;
+        }
+
+    /**
+     * Gets the current color for SOLID borders and the caption
+     * text color for etched borders.
+     */
+    public Color getColor() {
+
+        return color;
+        }
+
+    /**
+     * Sets the font. Only applies to etched borders.
+     */
+    public HolidayBorderPanel setTextFont(Font font) {
+
+        // set font
+        if (font != null) {
+            this.font = font;
+            if (style == IN || style == OUT) {
+                layout();
+                repaint();
+                }
+            }
+
+        return this;
+        }
+
+    /**
+     * Gets the font of the text. Only applies to etched borders.
+     */
+    public Font getTextFont() {
+
+        return font;
+        }
+
+    /**
+     * Sets the text. Only applies to etched borders.
+     *
+     * @param text  The new text.
+     */
+    public HolidayBorderPanel setText(String text) {
+
+        this.text = text;
+        if (style == IN || style == OUT) {
+            layout();
+            repaint();
+            }
+
+        return this;
+        }
+
+    /**
+     * Gets the text. Only applies to etched borders.
+     */
+    public String getText() {
+
+        return text;
+        }
+
+    /**
+     * Sets the text alignment. Only applies to etched borders.
+     *
+     * @param alignment The new alignment.
+     */
+    public HolidayBorderPanel setAlignment(int alignment) {
+
+        this.alignment = alignment;
+        if (style == IN || style == OUT) {
+            layout();
+            repaint();
+            }
+
+        return this;
+        }
+
+    /**
+     * Gets the text alignment.
+     */
+    public int getAlignment() {
+
+        return alignment;
+        }
+
+    /**
+     * Repaints the border.
+     *
+     * @param g The graphics context.
+     */
+    public void paint(Graphics g) {
+
+        // get current dimensions
+        Dimension size = size();
+        int width = size.width;
+        int height = size.height;
+
+        // set colors
+        Color light = getBackground().brighter().brighter().brighter();
+        Color dark = getBackground().darker().darker().darker();
+
+        // Draw border
+        switch (style) {
+            case RAISED:    // 3D Border (in or out)
+            case LOWERED:
+                Color topleft = null;
+                Color bottomright = null;
+
+                // set colors
+                if (style == RAISED) {
+                    topleft = light;
+                    bottomright = dark;
+                    }
+                else {
+                    topleft = dark;
+                    bottomright = light;
+                    }
+
+                // draw border
+                g.setColor(topleft);
+                for (int i = 0; i < thickness; i++) {
+                    g.drawLine(i, i, width - i - 2, i);
+                    g.drawLine(i, i + 1, i, height - i - 1);
+                    }
+                g.setColor(bottomright);
+                for (int i = 0; i < thickness; i++) {
+                    g.drawLine(i + 1, height - i - 1, width - i - 1, height - i - 1);
+                    g.drawLine(width - i - 1, i, width - i - 1, height - i - 2);
+                    }
+                break;
+
+            case IN:    // Etched Border (in or out)
+            case OUT:
+                int adjust1 = 0;
+                int adjust2 = 0;
+
+                // set font and get info
+                Font oldfont = g.getFont();
+                g.setFont(font);
+                FontMetrics fm = g.getFontMetrics();
+                int ascent = fm.getAscent();
+
+                // set adjustment
+                if (style == IN)
+                    adjust1 = 1;
+                else
+                    adjust2 = 1;
+
+                // Calculate adjustment for text
+                int adjustment = 0;
+                if (text != null && text.length() > 0) {
+                    if (ascent > thickness)
+                        adjustment = (ascent - thickness) / 2;
+                    }
+
+                // The adjustment is there so that we always draw the
+                // light rectangle first. Otherwise, your eye picks up
+                // the discrepancy where the light rect. passes over
+                // the darker rect.
+                int x = thickness / 2;
+                int y = thickness / 2 + adjustment;
+                int w = width - thickness - 1;
+                int h = height - thickness - 1 - adjustment;
+
+                // draw rectangles
+                g.setColor(light);
+                g.drawRect(x + adjust1, y + adjust1, w, h);
+                g.setColor(dark);
+                g.drawRect(x + adjust2, y + adjust2, w, h);
+
+                // draw text, if applicable
+                if (text != null && text.length() > 0) {
+                    // calculate drawing area
+                    int fontheight = fm.getHeight();
+                    int strwidth = fm.stringWidth(text);
+
+                    int textwidth = width - 2 * (thickness + 5);
+                    if (strwidth > textwidth)
+                        strwidth = textwidth;
+
+                    // calculate offset for alignment
+                    int offset;
+                    switch (alignment) {
+                        case CENTER:
+                            offset = (width - strwidth) / 2;
+                            break;
+                        case RIGHT:
+                            offset = width - strwidth - thickness - 5;
+                            break;
+                        case LEFT:
+                        default: // assume left alignment if invalid
+                            offset = thickness + 5;
+                            break;
+                        }
+
+                    // clear drawing area and set clipping region
+                    g.clearRect(offset - 5, 0, strwidth  + 10, fontheight);
+                    g.clipRect(offset, 0, strwidth, fontheight);
+
+                    // draw text
+                    g.setColor(color);
+                    g.drawString(text, offset, ascent);
+
+                    // restore old clipping area
+                    g.clipRect(0, 0, width, height);
+                    }
+
+                g.setFont(oldfont);
+                break;
+
+            case SOLID:
+            default: // assume SOLID
+                g.setColor(color);
+                for (int i = 0; i < thickness; i++)
+                    g.drawRect(i, i, width - 2 * i - 1, height - 2 * i - 1);
+            }
+
+        }
+
+    /**
+     * Returns the settings of this HolidayBorderPanel instance as a string.
+     */
+    public String toString() {
+        StringBuffer str = new StringBuffer("HolidayBorderPanel[");
+
+        // style
+        str.append("style=");
+        switch (style) {
+            case SOLID: str.append("SOLID"); break;
+            case RAISED: str.append("RAISED"); break;
+            case LOWERED: str.append("LOWERED"); break;
+            case IN: str.append("IN"); break;
+            case OUT: str.append("OUT"); break;
+            default: str.append("unknown");
+            }
+        str.append(",");
+
+        // thickness
+        str.append("thickness=");
+        str.append(thickness);
+        str.append(",");
+
+        // gap
+        str.append("gap=");
+        str.append(gap);
+        str.append(",");
+
+        // color
+        str.append(color);
+        str.append(",");
+
+        // font
+        str.append(font);
+        str.append(",");
+
+        // text
+        str.append("text=");
+        str.append(text);
+        str.append(",");
+
+        // alignment
+        str.append("alignment=");
+        switch (alignment) {
+            case LEFT: str.append("LEFT"); break;
+            case CENTER: str.append("CENTER"); break;
+            case RIGHT: str.append("RIGHT"); break;
+            default: str.append("unknown");
+            }
+
+        str.append("]");
+
+        return str.toString();
+        }
+
+    }
+
diff --git a/src/com/ibm/demo/holiday/HolidayCalendarDemo.java b/src/com/ibm/demo/holiday/HolidayCalendarDemo.java
new file mode 100755
index 0000000..b21aacc
--- /dev/null
+++ b/src/com/ibm/demo/holiday/HolidayCalendarDemo.java
@@ -0,0 +1,720 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/holiday/Attic/HolidayCalendarDemo.java,v $ 
+ * $Date: 2000/05/12 23:21:32 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.demo.holiday;
+
+import com.ibm.demo.*;
+import java.applet.Applet;
+import java.awt.*;
+//import java.util.*;
+import java.net.*;
+import java.io.*;
+
+//import java.text.SimpleDateFormat;
+import com.ibm.text.SimpleDateFormat;
+import java.text.DateFormatSymbols;
+//import java.util.SimpleTimeZone;
+import com.ibm.util.SimpleTimeZone;
+import java.util.Locale;
+import java.util.Vector;
+import java.util.Date;
+
+import com.ibm.util.*;
+
+/**
+ * CalendarDemo demonstrates how Calendar works.
+ */
+public class HolidayCalendarDemo extends DemoApplet
+{
+    /**
+     * The main function which defines the behavior of the CalendarDemo
+     * applet when an applet is started.
+     */
+    public static void main(String argv[]) {
+
+        new HolidayCalendarDemo().showDemo();
+    }
+
+    /* This creates a CalendarFrame for the demo applet. */
+    public Frame createDemoFrame(DemoApplet applet) {
+        return new CalendarFrame(applet);
+    }
+
+	/**
+	* A Frame is a top-level window with a title. The default layout for a frame
+	* is BorderLayout.  The CalendarFrame class defines the window layout of
+	* CalendarDemo.
+	*/
+	private static class CalendarFrame extends Frame
+	{
+    	private static final String creditString = "";
+
+    	private static final boolean DEBUG = false;
+
+    	private Locale curLocale = Locale.US;
+
+    	private DemoApplet applet;
+
+    	private static final Locale[] calendars = {
+        	//new Locale("de","AT"),
+        	Locale.CANADA,
+        	Locale.CANADA_FRENCH,
+        	Locale.FRANCE,
+        	Locale.GERMANY,
+        	new Locale("iw","IL"),
+        	new Locale("el","GR"),
+        	//new Locale("es","MX"),
+        	Locale.UK,
+        	Locale.US,
+    	};
+    	private static final Locale[] displays = {
+        	Locale.CANADA,
+        	Locale.UK,
+        	Locale.US,
+        	Locale.FRANCE,
+        	Locale.CANADA_FRENCH,
+        	//new Locale("de","AT"),
+        	Locale.GERMAN,
+        	new Locale("el","GR"),
+        	//new Locale("iw","IL"),
+        	new Locale("es","MX"),
+    	};
+
+    	/**
+    	* Constructs a new CalendarFrame that is initially invisible.
+    	*/
+    	public CalendarFrame(DemoApplet applet)
+    	{
+        	super("Calendar Demo");
+        	this.applet = applet;
+        	init();
+        	start();
+    	}
+
+    	/**
+    	* Initializes the applet. You never need to call this directly, it
+    	* is called automatically by the system once the applet is created.
+    	*/
+    	public void init()
+    	{
+        	// Get G7 locales only for demo purpose. To get all the locales
+        	// supported, switch to calling Calendar.getAvailableLocales().
+        	// commented
+        	locales = displays;
+
+        	buildGUI();
+    	}
+
+    	//------------------------------------------------------------
+    	// package private
+    	//------------------------------------------------------------
+    	void addWithFont(Container container, Component foo, Font font) {
+        	if (font != null)
+            	foo.setFont(font);
+        	container.add(foo);
+    	}
+
+    	/**
+    	* Called to start the applet. You never need to call this method
+    	* directly, it is called when the applet's document is visited.
+    	*/
+    	public void start()
+    	{
+        	// do nothing
+    	}
+
+    	private Choice          localeMenu;
+    	private Choice          displayMenu;
+    	private Locale[]        locales;
+
+    	private Label           monthLabel;
+    	private Button          prevYear;
+    	private Button          prevMonth;
+    	private Button          gotoToday;
+    	private Button          nextMonth;
+    	private Button          nextYear;
+    	private CalendarPanel   calendarPanel;
+
+    	private static final Locale kFirstLocale = Locale.US;
+
+    	private static void add(Container container, Component component,
+                            	GridBagLayout g, GridBagConstraints c)
+    	{
+        	g.setConstraints(component, c);
+        	container.add(component);
+    	}
+
+    	public void buildGUI()
+    	{
+        	setBackground(DemoUtility.bgColor);
+        	setLayout(new BorderLayout(10,10));
+
+        	// Label for the demo's title
+        	Label titleLabel = new Label("Calendar Demo", Label.CENTER);
+        	titleLabel.setFont(DemoUtility.titleFont);
+
+        	// Label for the current month name
+        	monthLabel = new Label("", Label.LEFT);
+        	monthLabel.setFont(new Font(DemoUtility.titleFont.getName(),
+                                    	DemoUtility.titleFont.getStyle(),
+                                    	(DemoUtility.titleFont.getSize() * 3)/2));
+
+        	// Make the locale popup menus
+        	localeMenu= new Choice();
+        	int selectMe = 0;
+        	
+        	for (int i = 0; i < calendars.length; i++) {
+            	if (i > 0 &&
+                    	calendars[i].getCountry().equals(calendars[i-1].getCountry()) ||
+                	i < calendars.length - 1 &&
+                    	calendars[i].getCountry().equals(calendars[i+1].getCountry()))
+            	{
+                	localeMenu.addItem(calendars[i].getDisplayCountry() + " (" +
+                                	calendars[i].getDisplayLanguage() + ")");
+            	} else {
+                	localeMenu.addItem( calendars[i].getDisplayCountry() );
+            	}
+            	
+            	if (calendars[i].equals(kFirstLocale)) {
+                	selectMe = i;
+            	}
+        	}
+        	
+        	localeMenu.setBackground(DemoUtility.choiceColor);
+        	localeMenu.select(selectMe);
+
+        	displayMenu = new Choice();
+        	
+        	selectMe = 0;
+        	for (int i = 0; i < locales.length; i++) {
+            	if (i > 0 &&
+                    	locales[i].getLanguage().equals(locales[i-1].getLanguage()) ||
+                	i < locales.length - 1 &&
+                    	locales[i].getLanguage().equals(locales[i+1].getLanguage()))
+            	{
+                	displayMenu.addItem( locales[i].getDisplayName() );
+            	} else {
+                	displayMenu.addItem( locales[i].getDisplayLanguage());
+            	}
+            	
+            	if (locales[i].equals(kFirstLocale)) {
+            	    selectMe = i;
+            	}
+        	}
+        	
+        	displayMenu.setBackground(DemoUtility.choiceColor);
+        	displayMenu.select(selectMe);
+
+        	// Make all the next/previous/today buttons
+        	prevYear = new Button("<<");
+        	prevMonth = new Button("<");
+        	gotoToday = new Button("Today");
+        	nextMonth = new Button(">");
+        	nextYear = new Button(">>");
+
+        	// The month name and the control buttons are bunched together
+        	Panel monthPanel = new Panel();
+        	{
+            	GridBagLayout g = new GridBagLayout();
+            	GridBagConstraints c = new GridBagConstraints();
+            	monthPanel.setLayout(g);
+
+            	c.weightx = 1;
+            	c.weighty = 1;
+
+            	c.gridwidth = 1;
+            	c.fill = GridBagConstraints.HORIZONTAL;
+            	c.gridwidth = GridBagConstraints.REMAINDER;
+            	add(monthPanel, monthLabel, g, c);
+
+            	c.gridwidth = 1;
+            	add(monthPanel, prevYear, g, c);
+            	add(monthPanel, prevMonth, g, c);
+            	add(monthPanel, gotoToday, g, c);
+            	add(monthPanel, nextMonth, g, c);
+            	c.gridwidth = GridBagConstraints.REMAINDER;
+            	add(monthPanel, nextYear, g, c);
+        	}
+
+        	// Stick the menu and buttons in a little "control panel"
+        	Panel menuPanel = new Panel();
+        	{
+            	GridBagLayout g = new GridBagLayout();
+            	GridBagConstraints c = new GridBagConstraints();
+            	menuPanel.setLayout(g);
+
+            	c.weightx = 1;
+            	c.weighty = 1;
+
+            	c.fill = GridBagConstraints.HORIZONTAL;
+
+            	c.gridwidth = GridBagConstraints.RELATIVE;
+            	Label l1 = new Label("Holidays");
+            	l1.setFont(DemoUtility.labelFont);
+            	add(menuPanel, l1, g, c);
+
+            	c.gridwidth = GridBagConstraints.REMAINDER;
+            	add(menuPanel, localeMenu, g, c);
+
+            	c.gridwidth = GridBagConstraints.RELATIVE;
+            	Label l2 = new Label("Display:");
+            	l2.setFont(DemoUtility.labelFont);
+            	add(menuPanel, l2, g, c);
+
+            	c.gridwidth = GridBagConstraints.REMAINDER;
+            	add(menuPanel, displayMenu, g, c);
+        	}
+
+        	// The title, buttons, etc. go in a panel at the top of the window
+        	Panel topPanel = new Panel();
+        	{
+            	topPanel.setLayout(new BorderLayout());
+
+            	//topPanel.add("North", titleLabel);
+            	topPanel.add("Center", monthPanel);
+            	topPanel.add("East", menuPanel);
+        	}
+        	add("North", topPanel);
+
+        	// The copyright notice goes at the bottom of the window
+        	Label copyright = new Label(DemoUtility.copyright1, Label.LEFT);
+        	copyright.setFont(DemoUtility.creditFont);
+        	add("South", copyright);
+
+        	// Now create the big calendar panel and stick it in the middle
+        	calendarPanel = new CalendarPanel( kFirstLocale );
+        	add("Center", calendarPanel);
+
+        	updateMonthName();
+    	}
+
+    	/**
+    	* Called if an action occurs in the CalendarFrame object.
+    	*/
+    	public boolean action(Event evt, Object obj)
+    	{
+        	// *** Button events are handled here.
+        	boolean handled = false;
+
+        	if (evt.target instanceof Button) {
+            	if (evt.target == nextMonth) {
+                	calendarPanel.add(Calendar.MONTH, +1);
+                	handled = true;
+            	}
+            	else
+            	if (evt.target == prevMonth) {
+                	calendarPanel.add(Calendar.MONTH, -1);
+                	handled = true;
+            	}
+            	else
+            	if (evt.target == prevYear) {
+                	calendarPanel.add(Calendar.YEAR, -1);
+                	handled = true;
+            	}
+            	else
+            	if (evt.target == nextYear) {
+                	calendarPanel.add(Calendar.YEAR, +1);
+                	handled = true;
+            	}
+            	else
+            	if (evt.target == gotoToday) {
+                	calendarPanel.set( new Date() );
+                	handled = true;
+            	}
+            	if (handled) {
+                	updateMonthName();
+            	}
+        	}
+        	return handled || super.action(evt, obj);
+    	}
+
+    	private void updateMonthName()
+    	{
+        	SimpleDateFormat f = new SimpleDateFormat("MMMM yyyyy",
+                                                    	calendarPanel.getDisplayLocale());
+        	f.setCalendar(calendarPanel.getCalendar());
+        	f.setTimeZone(new SimpleTimeZone(0, "UTC"));        // JDK 1.1.2 workaround
+        	monthLabel.setText( f.format( calendarPanel.firstOfMonth() ));
+    	}
+
+    	/**
+    	* Handles the event. Returns true if the event is handled and should not
+    	* be passed to the parent of this component. The default event handler
+    	* calls some helper methods to make life easier on the programmer.
+    	*/
+    	public boolean handleEvent(Event evt)
+    	{
+        	if (evt.id == Event.ACTION_EVENT && evt.target == localeMenu) {
+            	calendarPanel.setCalendarLocale(calendars[localeMenu.getSelectedIndex()]);
+            	updateMonthName();
+            	return true;
+        	}
+        	if (evt.id == Event.ACTION_EVENT && evt.target == displayMenu) {
+            	calendarPanel.setDisplayLocale(locales[displayMenu.getSelectedIndex()]);
+            	updateMonthName();
+            	return true;
+        	}
+        	else
+        	if (evt.id == Event.WINDOW_DESTROY && evt.target == this) {
+            	this.hide();
+            	this.dispose();
+
+            	if (applet != null) {
+            	applet.demoClosed();
+            	} else {
+                	System.exit(0);
+            	}
+            	return true;
+        	}
+        	return super.handleEvent(evt);
+    	}
+
+    	/**
+    	* Print out the error message while debugging this program.
+    	*/
+    	public void errorText(String s)
+    	{
+        	if (DEBUG)
+        	{
+            	System.out.println(s);
+        	}
+    	}
+	}
+
+
+	private static class CalendarPanel extends Canvas {
+
+    	public CalendarPanel( Locale locale ) {
+        	set(locale, locale, new Date());
+    	}
+
+    	public void setCalendarLocale(Locale locale) {
+        	set(locale, fDisplayLocale, fCalendar.getTime());
+    	}
+
+    	public void setDisplayLocale(Locale locale) {
+        	set(fCalendarLocale, locale, fCalendar.getTime());
+    	}
+
+    	public void set(Date date) {
+        	set(fCalendarLocale, fDisplayLocale, date);
+    	}
+
+    	public void set(Locale loc, Locale display, Date date)
+    	{
+        	if (fCalendarLocale == null || !loc.equals(fCalendarLocale)) {
+            	fCalendarLocale = loc;
+            	fCalendar = Calendar.getInstance(fCalendarLocale);
+            	fAllHolidays = Holiday.getHolidays(fCalendarLocale);
+        	}
+        	if (fDisplayLocale == null || !display.equals(fDisplayLocale)) {
+            	fDisplayLocale = display;
+            	fSymbols = new DateFormatSymbols(fDisplayLocale);
+        	}
+
+        	fStartOfMonth = date;
+
+        	dirty = true;
+        	repaint();
+    	}
+
+    	public void add(int field, int delta)
+    	{
+        	synchronized(fCalendar) {
+            	fCalendar.setTime(fStartOfMonth);
+            	fCalendar.add(field, delta);
+            	fStartOfMonth = fCalendar.getTime();
+        	}
+        	dirty = true;
+        	repaint();
+    	}
+
+    	public com.ibm.util.Calendar getCalendar() {
+        	return fCalendar;
+    	}
+
+    	public Locale getCalendarLocale() {
+        	return fCalendarLocale;
+    	}
+
+    	public Locale getDisplayLocale() {
+        	return fDisplayLocale;
+    	}
+
+
+    	public Date firstOfMonth() {
+        	return fStartOfMonth;
+    	}
+
+    	private Date startOfMonth(Date dateInMonth)
+    	{
+        	synchronized(fCalendar) {
+            	fCalendar.setTime(dateInMonth);             // TODO: synchronization
+
+            	int era = fCalendar.get(Calendar.ERA);
+            	int year = fCalendar.get(Calendar.YEAR);
+            	int month = fCalendar.get(Calendar.MONTH);
+
+            	fCalendar.clear();
+            	fCalendar.set(Calendar.ERA, era);
+            	fCalendar.set(Calendar.YEAR, year);
+            	fCalendar.set(Calendar.MONTH, month);
+            	fCalendar.set(Calendar.DATE, 1);
+
+            	return fCalendar.getTime();
+        	}
+    	}
+
+    	private void calculate()
+    	{
+        	//
+        	// As a workaround for JDK 1.1.3 and below, where Calendars and time
+        	// zones are a bit goofy, always set my calendar's time zone to UTC.
+        	// You would think I would want to do this in the "set" function above,
+        	// but if I do that, the program hangs when this class is loaded,
+        	// perhaps due to some sort of static initialization ordering problem.
+        	// So I do it here instead.
+        	//
+        	fCalendar.setTimeZone(new SimpleTimeZone(0, "UTC"));
+
+        	Calendar c = (Calendar)fCalendar.clone(); // Temporary copy
+
+        	fStartOfMonth = startOfMonth(fStartOfMonth);
+
+        	// Stash away a few useful constants for this calendar and display
+        	minDay = c.getMinimum(Calendar.DAY_OF_WEEK);
+        	daysInWeek = c.getMaximum(Calendar.DAY_OF_WEEK) - minDay + 1;
+
+        	firstDayOfWeek = Calendar.getInstance(fDisplayLocale).getFirstDayOfWeek();
+
+        	// Stash away a Date for the start of this month
+
+        	// Find the day of week of the first day in this month
+        	c.setTime(fStartOfMonth);
+        	firstDayInMonth = c.get(Calendar.DAY_OF_WEEK);
+
+        	// Now find the # of days in the month
+        	c.roll(Calendar.DATE, false);
+        	daysInMonth = c.get(Calendar.DATE);
+
+        	// Finally, find the end of the month, i.e. the start of the next one
+        	c.roll(Calendar.DATE, true);
+        	c.add(Calendar.MONTH, 1);
+        	c.getTime();        // JDK 1.1.2 bug workaround
+        	c.add(Calendar.SECOND, -1);
+        	Date endOfMonth = c.getTime();
+
+        	//
+        	// Calculate the number of full or partial weeks in this month.
+        	// To do this I can just reuse the code that calculates which
+        	// calendar cell contains a given date.
+        	//
+        	numWeeks = dateToCell(daysInMonth).y - dateToCell(1).y + 1;
+
+        	// Remember which holidays fall on which days in this month,
+        	// to save the trouble of having to do it later
+        	fHolidays.setSize(0);
+
+        	for (int h = 0; h < fAllHolidays.length; h++)
+        	{
+            	Date d = fStartOfMonth;
+            	while ( (d = fAllHolidays[h].firstBetween(d, endOfMonth) ) != null)
+            	{
+                	c.setTime(d);
+                	fHolidays.addElement( new HolidayInfo(c.get(Calendar.DATE),
+                                        	fAllHolidays[h],
+                                        	fAllHolidays[h].getDisplayName(fDisplayLocale) ));
+
+                	d.setTime( d.getTime() + 1000 );    // "d++"
+            	}
+        	}
+        	dirty = false;
+    	}
+
+    	static final int INSET = 2;
+
+    	/*
+    	* Convert from the day number within a month (1-based)
+    	* to the cell coordinates on the calendar (0-based)
+    	*/
+    	private void dateToCell(int date, Point pos)
+    	{
+        	int cell = (date + firstDayInMonth - firstDayOfWeek - minDay);
+        	if (firstDayInMonth < firstDayOfWeek) {
+            	cell += daysInWeek;
+        	}
+
+        	pos.x = cell % daysInWeek;
+        	pos.y = cell / daysInWeek;
+    	}
+    	private Point dateToCell(int date) {
+        	Point p = new Point(0,0);
+        	dateToCell(date, p);
+        	return p;
+    	}
+
+    	public void paint(Graphics g) {
+
+        	if (dirty) {
+            	calculate();
+        	}
+
+        	Point cellPos = new Point(0,0);     // Temporary variable
+        	Dimension d = this.size();
+
+        	g.setColor(DemoUtility.bgColor);
+        	g.fillRect(0,0,d.width,d.height);
+
+        	// Draw the day names at the top
+        	g.setColor(Color.black);
+        	g.setFont(DemoUtility.labelFont);
+        	FontMetrics fm = g.getFontMetrics();
+        	int labelHeight = fm.getHeight() + INSET * 2;
+
+        	int v = fm.getAscent() + INSET;
+        	for (int i = 0; i < daysInWeek; i++) {
+            	int dayNum = (i + minDay + firstDayOfWeek - 2) % daysInWeek + 1;
+            	String dayName = fSymbols.getWeekdays()[dayNum];
+
+            	int h = (int) (d.width * (i + 0.5)) / daysInWeek;
+            	h -= fm.stringWidth(dayName) / 2;
+
+            	g.drawString(dayName, h, v);
+        	}
+
+        	double cellHeight = (d.height - labelHeight - 1) / numWeeks;
+        	double cellWidth = (double)(d.width - 1) / daysInWeek;
+
+        	// Draw a white background in the part of the calendar
+        	// that displays this month.
+        	// First figure out how much of the first week should be shaded.
+        	{
+            	g.setColor(Color.white);
+            	dateToCell(1, cellPos);
+            	int width = (int)(cellPos.x*cellWidth);  // Width of unshaded area
+
+            	g.fillRect((int)(width), labelHeight ,
+                    	(int)(d.width - width), (int)cellHeight);
+
+            	// All of the intermediate weeks get shaded completely
+            	g.fillRect(0, (int)(labelHeight + cellHeight),
+                        	d.width, (int)(cellHeight * (numWeeks - 2)));
+
+            	// Now figure out the last week.
+            	dateToCell(daysInMonth, cellPos);
+            	width = (int)((cellPos.x+1)*cellWidth);  // Width of shaded area
+
+            	g.fillRect(0, (int)(labelHeight + (numWeeks-1) * cellHeight),
+                        	width, (int)(cellHeight));
+
+        	}
+        	// Draw the X/Y grid lines
+        	g.setColor(Color.black);
+        	for (int i = 0; i <= numWeeks; i++) {
+            	int y = (int)(labelHeight + i * cellHeight);
+            	g.drawLine(0, y, d.width - 1, y);
+        	}
+        	for (int i = 0; i <= daysInWeek; i++) {
+            	int x = (int)(i * cellWidth);
+            	g.drawLine(x, labelHeight, x, d.height - 1);
+        	}
+
+        	// Now loop through all of the days in the month, figure out where
+        	// they go in the grid, and draw the day # for each one
+        	Font numberFont = new Font("Helvetica",Font.PLAIN,12);
+        	Font holidayFont = DemoUtility.creditFont;
+
+        	Calendar c = (Calendar)fCalendar.clone();
+        	c.setTime(fStartOfMonth);
+
+        	for (int i = 1, h = 0; i <= daysInMonth; i++) {
+            	g.setFont(numberFont);
+            	g.setColor(Color.black);
+            	fm = g.getFontMetrics();
+
+            	dateToCell(i, cellPos);
+            	int x = (int)((cellPos.x + 1) * cellWidth);
+            	int y = (int)(cellPos.y * cellHeight + labelHeight);
+
+            	StringBuffer buffer = new StringBuffer();
+            	buffer.append(i);
+            	String dayNum = buffer.toString();
+
+            	x = x - INSET - fm.stringWidth(dayNum);
+            	y = y + fm.getAscent() + INSET;
+
+            	g.drawString(dayNum, x, y);
+
+            	// See if any of the holidays land on this day....
+            	HolidayInfo info = null;
+            	int count = 0;
+
+            	// Coordinates of lower-left corner of cell.
+            	x = (int)((cellPos.x) * cellWidth);
+            	y = (int)((cellPos.y+1) * cellHeight) + labelHeight;
+
+            	while (h < fHolidays.size() &&
+                    	(info = (HolidayInfo)fHolidays.elementAt(h)).date <= i)
+            	{
+                	if (info.date == i) {
+                    	// Draw the holiday here.
+                    	g.setFont(numberFont);
+                    	g.setColor(Color.red);
+
+                    	DemoTextBox box = new DemoTextBox(g, info.name, (int)(cellWidth - INSET));
+                    	box.draw(g, x + INSET, y - INSET - box.getHeight());
+
+                    	y -= (box.getHeight() + INSET);
+                    	count++;
+                	}
+                	h++;
+            	}
+        	}
+    	}
+
+    	// Important state variables
+    	private Locale              fCalendarLocale;    // Whose calendar
+    	private Calendar            fCalendar;          // Calendar for calculations
+
+    	private Locale              fDisplayLocale;     // How to display it
+    	private DateFormatSymbols   fSymbols;           // Symbols for drawing
+
+    	private Date                fStartOfMonth;      // 00:00:00 on first day of month
+
+    	// Cached calculations to make drawing faster.
+    	private transient int minDay;           // Minimum legal day #
+    	private transient int daysInWeek;       // # of days in a week
+    	private transient int firstDayOfWeek;   // First day to display in week
+    	private transient int numWeeks;         // # full or partial weeks in month
+    	private transient int daysInMonth;      // # days in this month
+    	private transient int firstDayInMonth;  // Day of week of first day in month
+
+    	private transient Holiday[] fAllHolidays;
+    	private transient Vector    fHolidays = new Vector(5,5);
+
+    	private transient boolean dirty = true;
+	}
+
+	private static class HolidayInfo {
+    	public HolidayInfo(int date, Holiday holiday, String name) {
+        	this.date = date;
+        	this.holiday = holiday;
+        	this.name = name;
+    	}
+
+    	public Holiday holiday;
+    	public int date;
+    	public String name;
+	}
+}
+
diff --git a/src/com/ibm/demo/holiday/package.html b/src/com/ibm/demo/holiday/package.html
new file mode 100755
index 0000000..82ca145
--- /dev/null
+++ b/src/com/ibm/demo/holiday/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/holiday/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 06:54:50 $
+-->
+</head>
+<body bgcolor="white">
+Holiday demo application.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/demo/package.html b/src/com/ibm/demo/package.html
new file mode 100755
index 0000000..045c6c3
--- /dev/null
+++ b/src/com/ibm/demo/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 17:43:40 $
+-->
+</head>
+<body bgcolor="white">
+Shared utilities for demo applications and Applets.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/demo/rbbi/BreakIteratorRules_en_US_DEMO.java b/src/com/ibm/demo/rbbi/BreakIteratorRules_en_US_DEMO.java
new file mode 100755
index 0000000..8099ce2
--- /dev/null
+++ b/src/com/ibm/demo/rbbi/BreakIteratorRules_en_US_DEMO.java
@@ -0,0 +1,223 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbbi/Attic/BreakIteratorRules_en_US_DEMO.java,v $ 
+ * $Date: 2001/02/20 22:50:12 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+import java.net.URL;
+
+/**
+ * This resource bundle is included for testing and demonstration purposes only.
+ * It applies the dictionary-based algorithm to English text that has had all the
+ * spaces removed.  Once we have good test cases for Thai, we will replace this
+ * with good resource data (and a good dictionary file) for Thai
+ */
+public class BreakIteratorRules_en_US_DEMO extends ListResourceBundle {
+    
+    private static final URL url =
+        BreakIteratorRules_en_US_DEMO.class.getResource("/com/ibm/data/misc/english.dict");
+    
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    static final Object[][] contents = {
+        // names of classes to instantiate for the different kinds of break
+        // iterator.  Notice we're now using DictionaryBasedBreakIterator
+        // for word and line breaking.
+        { "BreakIteratorClasses",
+            new String[] { "RuleBasedBreakIterator",           // character-break iterator class
+                           "DictionaryBasedBreakIterator",     // word-break iterator class
+                           "DictionaryBasedBreakIterator",     // line-break iterator class
+                           "RuleBasedBreakIterator" }          // sentence-break iterator class
+        },
+        
+        // These are the same word-breaking rules as are specified in the default
+        // resource, except that the Latin letters, apostrophe, and hyphen are
+        // specified as dictionary characters
+        { "WordBreakRules",
+            // ignore non-spacing marks, enclosing marks, and format characters,
+            // all of which should not influence the algorithm
+            "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
+
+            // lower and upper case Roman letters, apostrophy and dash are
+            // in the English dictionary
+            + "$_dictionary_=[a-zA-Z\\'\\-];"
+
+            // Hindi phrase separator, kanji, katakana, hiragana, CJK diacriticals,
+            // other letters, and digits
+            + "$danda=[\u0964\u0965];"
+            + "$kanji=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
+            + "$kata=[\u3099-\u309c\u30a1-\u30fe];"
+            + "$hira=[\u3041-\u309e\u30fc];"
+            + "$let=[[[:L:][:Mc:]]-[$kanji$kata$hira]];"
+            + "$dgt=[:N:];"
+
+            // punctuation that can occur in the middle of a word: currently
+            // dashes, apostrophes, and quotation marks
+            + "$mid_word=[[:Pd:]\u00ad\u2027\\\"\\\'];"
+
+            // punctuation that can occur in the middle of a number: currently
+            // apostrophes, qoutation marks, periods, commas, and the Arabic
+            // decimal point
+            + "$mid_num=[\\\"\\\'\\,\u066b\\.];"
+
+            // punctuation that can occur at the beginning of a number: currently
+            // the period, the number sign, and all currency symbols except the cents sign
+            + "$pre_num=[[[:Sc:]-[\u00a2]]\\#\\.];"
+
+            // punctuation that can occur at the end of a number: currently
+            // the percent, per-thousand, per-ten-thousand, and Arabic percent
+            // signs, the cents sign, and the ampersand
+            + "$post_num=[\\%\\&\u00a2\u066a\u2030\u2031];"
+
+            // line separators: currently LF, FF, PS, and LS
+            + "$ls=[\n\u000c\u2028\u2029];"
+
+            // whitespace: all space separators and the tab character
+            + "$ws=[[:Zs:]\t];"
+
+            // a word is a sequence of letters that may contain internal
+            // punctuation, as long as it begins and ends with a letter and
+            // never contains two punctuation marks in a row
+            + "$word=($let+($mid_word$let+)*$danda?);"
+
+            // a number is a sequence of digits that may contain internal
+            // punctuation, as long as it begins and ends with a digit and
+            // never contains two punctuation marks in a row.
+            + "$number=($dgt+($mid_num$dgt+)*);"
+
+            // break after every character, with the following exceptions
+            // (this will cause punctuation marks that aren't considered
+            // part of words or numbers to be treated as words unto themselves)
+            + ".;"
+
+            // keep together any sequence of contiguous words and numbers
+            // (including just one of either), plus an optional trailing
+            // number-suffix character
+            + "$word?($number$word)*($number$post_num?)?;"
+
+            // keep together and sequence of contiguous words and numbers
+            // that starts with a number-prefix character and a number,
+            // and may end with a number-suffix character
+            + "$pre_num($number$word)*($number$post_num?)?;"
+
+            // keep together runs of whitespace (optionally with a single trailing
+            // line separator or CRLF sequence)
+            + "$ws*\r?$ls?;"
+
+            // keep together runs of Katakana
+            + "$kata*;"
+
+            // keep together runs of Hiragana
+            + "$hira*;"
+
+            // keep together runs of Kanji
+            + "$kanji*;"},
+        
+        // These are the same line-breaking rules as are specified in the default
+        // resource, except that the Latin letters, apostrophe, and hyphen are
+        // specified as dictionary characters
+        { "LineBreakRules",
+            // ignore non-spacing marks, enclosing marks, and format characters
+            "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
+
+            // lower and upper case Roman letters, apostrophy and dash
+            // are in the English dictionary
+            + "$_dictionary_=[a-zA-Z\\'\\-];"
+
+            // Hindi phrase separators
+            + "$danda=[\u0964\u0965];"
+
+            // characters that always cause a break: ETX, tab, LF, FF, LS, and PS
+            + "$break=[\u0003\t\n\f\u2028\u2029];"
+
+            // characters that always prevent a break: the non-breaking space
+            // and similar characters
+            + "$nbsp=[\u00a0\u2007\u2011\ufeff];"
+
+            // whitespace: space separators and control characters, except for
+            // CR and the other characters mentioned above
+            + "$space=[[[:Zs:][:Cc:]]-[$nbsp$break\r]];"
+
+            // dashes: dash punctuation and the discretionary hyphen, except for
+            // non-breaking hyphens
+            + "$dash=[[[:Pd:]\u00ad]-[$nbsp]];"
+
+            // characters that stick to a word if they precede it: currency symbols
+            // (except the cents sign) and starting punctuation
+            + "$pre_word=[[[:Sc:]-[\u00a2]][:Ps:]\\\"\\\'];"
+
+            // characters that stick to a word if they follow it: ending punctuation,
+            // other punctuation that usually occurs at the end of a sentence,
+            // small Kana characters, some CJK diacritics, etc.
+            + "$post_word=[[:Pe:]\\!\\\"\\\'\\%\\.\\,\\:\\;\\?\u00a2\u00b0\u066a\u2030-\u2034"
+                    + "\u2103\u2105\u2109\u3001\u3002\u3005\u3041\u3043\u3045\u3047\u3049\u3063"
+                    + "\u3083\u3085\u3087\u308e\u3099-\u309e\u30a1\u30a3\u30a5\u30a7\u30a9"
+                    + "\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u30fc-\u30fe\uff01\uff0c"
+                    + "\uff0e\uff1f];"
+
+            // Kanji: actually includes both Kanji and Kana, except for small Kana and
+            // CJK diacritics
+            + "$kanji=[[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa]-[$post_word$_ignore_]];"
+
+            // digits
+            + "$digit=[[:Nd:][:No:]];"
+
+            // punctuation that can occur in the middle of a number: periods and commas
+            + "$mid_num=[\\.\\,];"
+
+            // everything not mentioned above, plus the quote marks (which are both
+            // <pre-word>, <post-word>, and <char>)
+            + "$char=[^$break$space$dash$kanji$nbsp$_ignore_$pre_word$post_word$mid_num$danda\r\\\"\\\'];"
+
+            // a "number" is a run of prefix characters and dashes, followed by one or
+            // more digits with isolated number-punctuation characters interspersed
+            + "$number=([$pre_word$dash]*$digit+($mid_num$digit+)*);"
+
+            // the basic core of a word can be either a "number" as defined above, a single
+            // "Kanji" character, or a run of any number of not-explicitly-mentioned
+            // characters (this includes Latin letters)
+            + "$word_core=([$pre_word$char]*|$kanji|$number);"
+
+            // a word may end with an optional suffix that be either a run of one or
+            // more dashes or a run of word-suffix characters, followed by an optional
+            // run of whitespace
+            + "$word_suffix=(($dash+|$post_word*)$space*);"
+
+            // a word, thus, is an optional run of word-prefix characters, followed by
+            // a word core and a word suffix (the syntax of <word-core> and <word-suffix>
+            // actually allows either of them to match the empty string, putting a break
+            // between things like ")(" or "aaa(aaa"
+            + "$word=($pre_word*$word_core$word_suffix);"
+
+            // finally, the rule that does the work: Keep together any run of words that
+            // are joined by runs of one of more non-spacing mark.  Also keep a trailing
+            // line-break character or CRLF combination with the word.  (line separators
+            // "win" over nbsp's)
+            + "$word($nbsp+$word)*\r?$break?;" },
+            
+        // these two resources specify the pathnames of the dictionary files to
+        // use for word breaking and line breaking.  Both currently refer to 
+        // a file called english.dict placed in com\ibm\text\resources
+        // somewhere in the class path.  It's important to note that
+        // english.dict was created for testing purposes only, and doesn't
+        // come anywhere close to being an exhaustive dictionary of English
+        // words (basically, it contains all the words in the Declaration of
+        // Independence, and the Revised Standard Version of the book of Genesis,
+        // plus a few other words thrown in to show more interesting cases).
+        // { "WordBreakDictionary", "com\\ibm\\text\\resources\\english.dict" },
+        // { "LineBreakDictionary", "com\\ibm\\text\\resources\\english.dict" }
+        { "WordBreakDictionary", url },
+        { "LineBreakDictionary", url }
+    };
+}
diff --git a/src/com/ibm/demo/rbbi/DBBIDemo.java b/src/com/ibm/demo/rbbi/DBBIDemo.java
new file mode 100755
index 0000000..90bdb1e
--- /dev/null
+++ b/src/com/ibm/demo/rbbi/DBBIDemo.java
@@ -0,0 +1,458 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbbi/Attic/DBBIDemo.java,v $ 
+ * $Date: 2001/02/20 22:48:19 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.rbbi;
+
+import com.ibm.demo.*;
+import java.applet.Applet;
+import java.awt.*;
+import javax.swing.JTextArea;
+import javax.swing.JScrollPane;
+import javax.swing.BorderFactory;
+import java.util.*;
+
+import com.ibm.text.BreakIterator;
+
+public class DBBIDemo extends DemoApplet
+{
+    public static void main(String argv[]) {
+        Locale.setDefault(new Locale("en", "US", "DEMO"));
+		new DBBIDemo().showDemo();
+    }
+
+    public Frame createDemoFrame(DemoApplet applet) {
+        return new DBBIFrame(applet);
+    }
+}
+
+
+
+class DBBIFrame extends Frame
+{
+    private static final String creditString =
+        "v1.1a9, Demo";
+
+    private static final int FIELD_COLUMNS = 45;
+    private static final Font choiceFont = null;
+    private static final boolean DEBUG = false;
+    private DemoApplet applet;
+
+    final String right = "-->";
+    final String left = "<--";
+
+    private BreakIterator enum;
+
+JTextArea text;
+//    TextArea text;
+    Choice bound;
+
+    public DBBIFrame(DemoApplet applet)
+    {
+        this.applet = applet;
+        init();
+        start();
+    }
+
+
+
+    public void run()
+    {
+        /*
+        while (true) {
+            try {
+                checkChange();
+                Thread.sleep(250);
+            }
+            catch (InterruptedException e) {
+            }
+            catch (Exception e) {
+            }
+            catch (Throwable e) {
+            }
+        }
+        */
+    }
+
+    int s, e;
+    int ts, te;
+
+    public void checkChange()
+    {
+//        System.out.println("checkChange...");
+        if ((text.getSelectionStart() & 0x7FFF) != ts ||
+            (text.getSelectionEnd() & 0x7FFF) != te) {
+
+            int tempS = text.getSelectionStart() & 0x7FFF;
+            int tempE = text.getSelectionEnd() & 0x7FFF;
+
+//          System.out.println(">");
+//          select(0, 0);
+//          select(tempS, tempE);
+            //select(tempS - (ts - s), tempE - (te - e));
+//          System.out.println("<");
+
+
+//          if (s != ts || e != te) System.out.println("     s("+s+") ts("+ts+") e("+e+") te("+te+")");
+//          if (tempS != ts || tempE != te) System.out.println(">s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
+//          select(s - (ts - s), e - (te - e));
+//          if (tempS != ts || tempE != te) System.out.println("s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
+
+//          System.out.println("lkdslksj");
+        }
+    }
+
+    public void select(int sIn, int eIn)
+    {
+        s = sIn;
+        e = eIn;
+        text.select(s, e);
+        ts = text.getSelectionStart() & 0x7FFF;
+        te = text.getSelectionEnd() & 0x7FFF;
+//        if (s != ts || e != te) {
+//            System.out.println(">s("+s+") ts("+ts+") e("+e+") te("+te+")");
+//            System.out.println("   "+(ts-s)+","+(te-e));
+//        }
+    }
+
+    public int getSelectionStart()
+    {
+        checkChange();
+//      return s;
+        return text.getSelectionStart() & 0x7FFF;
+    }
+
+
+    public int getSelectionEnd()
+    {
+        checkChange();
+//      return e;
+        return text.getSelectionEnd() & 0x7FFF;
+    }
+
+    public final synchronized void selectRange(int s, int e)
+    {
+        try {
+            //if (getSelectionStart() != s || getSelectionEnd() != e) {
+                //text.select(s, e);
+                select(s,e);
+            //}
+//          if (getSelectionStart() != s || getSelectionEnd() != e) {
+//              System.out.println("AGH! select("+s+","+e+") -> ("+
+//              getSelectionStart()+","+getSelectionEnd()+")");
+//              text.select(s - (getSelectionStart() - s), e - (getSelectionEnd() - e));
+//          }
+        } catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+
+
+    public void init()
+    {
+        buildGUI();
+    }
+
+
+    public void start()
+    {
+    }
+
+
+    void addWithFont(Container container, Component foo, Font font) {
+        if (font != null)
+            foo.setFont(font);
+        container.add(foo);
+    }
+
+
+
+   public void buildGUI()
+    {
+        setBackground(DemoUtility.bgColor);
+        setLayout(new BorderLayout());
+
+       Panel topPanel = new Panel();
+
+            Label titleLabel =
+                new Label("Text Boundary Demo", Label.CENTER);
+            titleLabel.setFont(DemoUtility.titleFont);
+            topPanel.add(titleLabel);
+
+            //Label demo=new Label(creditString, Label.CENTER);
+            //demo.setFont(DemoUtility.creditFont);
+            //topPanel.add(demo);
+
+            Panel choicePanel = new Panel();
+
+            Label demo1=new Label("Boundaries", Label.LEFT);
+            demo1.setFont(DemoUtility.labelFont);
+            choicePanel.add(demo1);
+
+            bound = new Choice();
+                bound.setBackground(DemoUtility.choiceColor);
+            bound.addItem("Sentence");
+            bound.addItem("Line Break");
+            bound.addItem("Word");
+            bound.addItem("Char");
+            if (choiceFont != null)
+                bound.setFont(choiceFont);
+
+            choicePanel.add(bound);
+            topPanel.add(choicePanel);
+
+            DemoUtility.fixGrid(topPanel,1);
+
+
+        add("North", topPanel);
+
+
+            int ROWS = 15;
+            int COLUMNS = 50;
+//            text = new TextArea(getInitialText(), ROWS, COLUMNS);
+text = new JTextArea(getInitialText(), ROWS, COLUMNS);
+text.setLineWrap(true);
+text.setWrapStyleWord(true);
+            text.setEditable(true);
+            text.selectAll();
+            text.setFont(DemoUtility.editFont);
+            text.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+        add("Center", new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+                        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
+
+        Panel copyrightPanel = new Panel();
+        addWithFont (copyrightPanel,
+            new Label(DemoUtility.copyright1, Label.LEFT),DemoUtility.creditFont);
+        addWithFont (copyrightPanel,
+            new Label(DemoUtility.copyright2, Label.LEFT),DemoUtility.creditFont);
+        DemoUtility.fixGrid(copyrightPanel,1);
+        add("South", copyrightPanel);
+
+        //layout();
+        handleEnumChanged();
+
+        // (new Thread(this)).start();
+    }
+
+
+
+    public String getInitialText()
+    {
+        return
+"When,inthecourseofhumanevents,itbecomesnecessaryforonepeopletodissolvethepoliticalbondswhichhave"
++ "connectedthemwithanother,andtoassumeamongthepowersoftheearth,theseparateandequalstationtowhichthelaws"
++ "ofnatureandofnature'sGodentitlethem,adecentrespecttotheopinionsofmankindrequiresthattheyshoulddeclarethe"
++ "causeswhichimpelthemtotheseparation.\n"
++ "Weholdthesetruthstobeself-evident,thatallmenarecreatedequal,thattheyareendowedbytheirCreatorwithcertain"
++ "unalienablerights,thatamongthesearelife,libertyandthepursuitofhappiness.Thattosecuretheserights,governmentsare"
++ "institutedamongmen,derivingtheirjustpowersfromtheconsentofthegoverned.Thatwheneveranyformofgovernment"
++ "becomesdestructivetotheseends,itistherightofthepeopletoalterortoabolishit,andtoinstitutenewgovernment,laying"
++ "itsfoundationonsuchprinciplesandorganizingitspowersinsuchform,astothemshallseemmostlikelytoeffecttheirsafety"
++ "andhappiness.Prudence,indeed,willdictatethatgovernmentslongestablishedshouldnotbechangedforlightandtransient"
++ "causes;andaccordinglyallexperiencehathshownthatmankindaremoredisposedtosuffer,whileevilsaresufferable,than"
++ "torightthemselvesbyabolishingtheformstowhichtheyareaccustomed.Butwhenalongtrainofabusesandusurpations,"
++ "pursuinginvariablythesameobjectevincesadesigntoreducethemunderabsolutedespotism,itistheirright,itistheirduty,"
++ "tothrowoffsuchgovernment,andtoprovidenewguardsfortheirfuturesecurity.--Suchhasbeenthepatientsufferanceof"
++ "thesecolonies;andsuchisnowthenecessitywhichconstrainsthemtoaltertheirformersystemsofgovernment.Thehistory"
++ "ofthepresentKingofGreatBritainisahistoryofrepeatedinjuriesandusurpations,allhavingindirectobjectthe"
++ "establishmentofanabsolutetyrannyoverthesestates.Toprovethis,letfactsbesubmittedtoacandidworld.\n"
++ "Hehasrefusedhisassenttolaws,themostwholesomeandnecessaryforthepublicgood.\n"
++ "Hehasforbiddenhisgovernorstopasslawsofimmediateandpressingimportance,unlesssuspendedintheiroperationtill"
++ "hisassentshouldbeobtained;andwhensosuspended,hehasutterlyneglectedtoattendtothem.\n"
++ "Hehasrefusedtopassotherlawsfortheaccommodationoflargedistrictsofpeople,unlessthosepeoplewouldrelinquish"
++ "therightofrepresentationinthelegislature,arightinestimabletothemandformidabletotyrantsonly.\n"
++ "Hehascalledtogetherlegislativebodiesatplacesunusual,uncomfortable,anddistantfromthedepositoryoftheirpublic"
++ "records,forthesolepurposeoffatiguingthemintocompliancewithhismeasures.\n"
++ "Hehasdissolvedrepresentativehousesrepeatedly,foropposingwithmanlyfirmnesshisinvasionsontherightsofthepeople.\n"
++ "Hehasrefusedforalongtime,aftersuchdissolutions,tocauseotherstobeelected;wherebythelegislativepowers,"
++ "incapableofannihilation,havereturnedtothepeopleatlargefortheirexercise;thestateremaininginthemeantimeexposed"
++ "toallthedangersofinvasionfromwithout,andconvulsionswithin.\n"
++ "Hehasendeavoredtopreventthepopulationofthesestates;forthatpurposeobstructingthelawsfornaturalizationof"
++ "foreigners;refusingtopassotherstoencouragetheirmigrationhither,andraisingtheconditionsofnewappropriationsof"
++ "lands.\n"
++ "Hehasobstructedtheadministrationofjustice,byrefusinghisassenttolawsforestablishingjudiciarypowers.\n"
++ "Hehasmadejudgesdependentonhiswillalone,forthetenureoftheiroffices,andtheamountandpaymentoftheirsalaries.\n"
++ "Hehaserectedamultitudeofnewoffices,andsenthitherswarmsofofficerstoharassourpeople,andeatouttheir"
++ "substance.\n"
++ "Hehaskeptamongus,intimesofpeace,standingarmieswithouttheconsentofourlegislature.\n"
++ "Hehasaffectedtorenderthemilitaryindependentofandsuperiortocivilpower.\n"
++ "Hehascombinedwithotherstosubjectustoajurisdictionforeigntoourconstitution,andunacknowledgedbyourlaws;"
++ "givinghisassenttotheiractsofpretendedlegislation:\n"
++ "Forquarteringlargebodiesofarmedtroopsamongus:\n"
++ "Forprotectingthem,bymocktrial,frompunishmentforanymurderswhichtheyshouldcommitontheinhabitantsofthese"
++ "states:\n"
++ "Forcuttingoffourtradewithallpartsoftheworld:\n"
++ "Forimposingtaxesonuswithoutourconsent:\n"
++ "Fordeprivingusinmanycases,ofthebenefitsoftrialbyjury:\n"
++ "Fortransportingusbeyondseastobetriedforpretendedoffenses:\n"
++ "ForabolishingthefreesystemofEnglishlawsinaneighboringprovince,establishingthereinanarbitrarygovernment,and"
++ "enlargingitsboundariessoastorenderitatonceanexampleandfitinstrumentforintroducingthesameabsoluteruleinthese"
++ "colonies:\n"
++ "Fortakingawayourcharters,abolishingourmostvaluablelaws,andalteringfundamentallytheformsofourgovernments:\n"
++ "Forsuspendingourownlegislatures,anddeclaringthemselvesinvestedwithpowertolegislateforusinallcaseswhatsoever.\n"
++ "Hehasabdicatedgovernmenthere,bydeclaringusoutofhisprotectionandwagingwaragainstus.\n"
++ "Hehasplunderedourseas,ravagedourcoasts,burnedourtowns,anddestroyedthelivesofourpeople.\n"
++ "Heisatthistimetransportinglargearmiesofforeignmercenariestocompletetheworksofdeath,desolationandtyranny,"
++ "alreadybegunwithcircumstancesofcrueltyandperfidyscarcelyparalleledinthemostbarbarousages,andtotallyunworthy"
++ "theheadofacivilizednation.\n"
++ "Hehasconstrainedourfellowcitizenstakencaptiveonthehighseastobeararmsagainsttheircountry,tobecomethe"
++ "executionersoftheirfriendsandbrethren,ortofallthemselvesbytheirhands.\n"
++ "Hehasexciteddomesticinsurrectionsamongstus,andhasendeavoredtobringontheinhabitantsofourfrontiers,the"
++ "mercilessIndiansavages,whoseknownruleofwarfare,isundistinguisheddestructionofallages,sexesandconditions.\n"
++ "Ineverystageoftheseoppressionswehavepetitionedforredressinthemosthumbleterms:ourrepeatedpetitionshave"
++ "beenansweredonlybyrepeatedinjury.Aprince,whosecharacteristhusmarkedbyeveryactwhichmaydefineatyrant,is"
++ "unfittobetherulerofafreepeople.\n"
++ "NorhavewebeenwantinginattentiontoourBritishbrethren.Wehavewarnedthemfromtimetotimeofattemptsbytheir"
++ "legislaturetoextendanunwarrantablejurisdictionoverus.Wehaveremindedthemofthecircumstancesofouremigration"
++ "andsettlementhere.Wehaveappealedtotheirnativejusticeandmagnanimity,andwehaveconjuredthembythetiesofour"
++ "commonkindredtodisavowtheseusurpations,which,wouldinevitablyinterruptourconnectionsandcorrespondence.We"
++ "must,therefore,acquiesceinthenecessity,whichdenouncesourseparation,andholdthem,asweholdtherestofmankind,"
++ "enemiesinwar,inpeacefriends.\n"
++ "We,therefore,therepresentativesoftheUnitedStatesofAmerica,inGeneralCongress,assembled,appealingtothe"
++ "SupremeJudgeoftheworldfortherectitudeofourintentions,do,inthename,andbytheauthorityofthegoodpeopleof"
++ "thesecolonies,solemnlypublishanddeclare,thattheseunitedcoloniesare,andofrightoughttobefreeandindependent"
++ "states;thattheyareabsolvedfromallallegiancetotheBritishCrown,andthatallpoliticalconnectionbetweenthemandthe"
++ "stateofGreatBritain,isandoughttobetotallydissolved;andthatasfreeandindependentstates,theyhavefullpowerto"
++ "leveywar,concludepeace,contractalliances,establishcommerce,andtodoallotheractsandthingswhichindependent"
++ "statesmayofrightdo.Andforthesupportofthisdeclaration,withafirmrelianceontheprotectionofDivineProvidence,we"
++ "mutuallypledgetoeachotherourlives,ourfortunesandoursacredhonor.\n";
+    }
+
+
+    public void handleEnumChanged()
+    {
+        String s = bound.getSelectedItem();
+        if (s.equals("Char")) {
+            errorText("getCharacterInstance");
+            enum = BreakIterator.getCharacterInstance();
+        }
+        else if (s.equals("Word")) {
+            errorText("getWordInstance");
+            enum = BreakIterator.getWordInstance();
+        }
+        else if (s.equals("Line Break")) {
+            errorText("getLineInstance");
+            enum = BreakIterator.getLineInstance();
+        }
+        else /* if (s.equals("Sentence")) */ {
+            errorText("getSentenceInstance");
+            enum = BreakIterator.getSentenceInstance();
+        }
+        enum.setText(text.getText());
+        selectRange(0, 0);
+        //text.select(0,0);
+    }
+
+    public void handleForward()
+    {
+        try {
+//          System.out.println("entering handleForward");
+            enum.setText(text.getText());
+            int oldStart = getSelectionStart();
+            int oldEnd = getSelectionEnd();
+
+//          System.out.println("handleForward: oldStart=" + oldStart + ", oldEnd=" + oldEnd);
+
+            if (oldEnd < 1) {
+                selectRange(0, enum.following(0));
+            }
+            else {
+                int s = enum.following(oldEnd-1);
+                int e = enum.next();
+                if (e == -1) {
+                    e = s;
+                }
+                selectRange(s, e);
+            }
+            //text.select(s, e);
+            errorText("<" + oldStart + "," + oldEnd + "> -> <" +
+                s + "," + e + ">");
+        }
+        catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+    public void handleBackward()
+    {
+        try {
+            enum.setText(text.getText());
+            int oldStart = getSelectionStart();
+            int oldEnd = getSelectionEnd();
+            if (oldStart < 1) {
+                selectRange(0, 0);
+            }
+            else {
+                int e = enum.following(oldStart-1);
+                int s = enum.previous();
+                selectRange(s, e);
+            }
+            //text.select(s, e);
+            errorText("<" + oldStart + "," + oldEnd + "> -> <" + s + "," + e + ">");
+        }
+        catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+    public boolean action(Event evt, Object obj)
+    {
+
+        if(evt.target instanceof Button && left.equals(obj))
+        {
+            handleBackward();
+            return true;
+        }
+        else if(evt.target instanceof Button && right.equals(obj))
+        {
+            handleForward();
+            return true;
+        }
+        else if(evt.target instanceof Choice)
+        {
+            handleEnumChanged();
+            return true;
+        }
+        return false;
+    }
+
+    public boolean handleEvent(Event evt)
+    {
+        if (evt.id == Event.KEY_PRESS || evt.id == Event.KEY_ACTION) {
+            if (evt.key == Event.RIGHT || (evt.key == 0x0E && evt.controlDown())) {
+                handleForward();
+                return true;
+            }
+            else if (evt.key == Event.LEFT || (evt.key == 0x10 && evt.controlDown())) {
+                handleBackward();
+                return true;
+            }
+        }
+        else
+        if (evt.id == Event.WINDOW_DESTROY && evt.target == this) {
+            this.hide();
+            this.dispose();
+                if (applet != null) {
+                  applet.demoClosed();
+               } else System.exit(0);
+            return true;
+        }
+        return super.handleEvent(evt);
+    }
+
+    public void errorText(String s)
+    {
+       if (DEBUG)
+           System.out.println(s);
+    }
+}
diff --git a/src/com/ibm/demo/rbbi/RBBIDemo.java b/src/com/ibm/demo/rbbi/RBBIDemo.java
new file mode 100755
index 0000000..83ab45b
--- /dev/null
+++ b/src/com/ibm/demo/rbbi/RBBIDemo.java
@@ -0,0 +1,397 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbbi/Attic/RBBIDemo.java,v $ 
+ * $Date: 2000/09/26 21:46:54 $ 
+ * $Revision: 1.1 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.rbbi;
+
+import com.ibm.demo.*;
+import java.applet.Applet;
+import java.awt.*;
+import javax.swing.JTextArea;
+import javax.swing.JScrollPane;
+import javax.swing.BorderFactory;
+import java.util.*;
+
+import com.ibm.text.BreakIterator;
+
+public class RBBIDemo extends DemoApplet
+{
+    public static void main(String argv[]) {
+        Locale.setDefault(new Locale("en", "US"));
+		new RBBIDemo().showDemo();
+    }
+
+    public Frame createDemoFrame(DemoApplet applet) {
+        return new RBBIFrame(applet);
+    }
+}
+
+
+
+class RBBIFrame extends Frame
+{
+    private static final String creditString =
+        "v1.1a9, Demo";
+
+    private static final int FIELD_COLUMNS = 45;
+    private static final Font choiceFont = null;
+    private static final boolean DEBUG = false;
+    private DemoApplet applet;
+
+    final String right = "-->";
+    final String left = "<--";
+
+    private BreakIterator enum;
+
+JTextArea text;
+//    TextArea text;
+    Choice bound;
+
+    public RBBIFrame(DemoApplet applet)
+    {
+        this.applet = applet;
+        init();
+        start();
+    }
+
+
+
+    public void run()
+    {
+        /*
+        while (true) {
+            try {
+                checkChange();
+                Thread.sleep(250);
+            }
+            catch (InterruptedException e) {
+            }
+            catch (Exception e) {
+            }
+            catch (Throwable e) {
+            }
+        }
+        */
+    }
+
+    int s, e;
+    int ts, te;
+
+    public void checkChange()
+    {
+//        System.out.println("checkChange...");
+        if ((text.getSelectionStart() & 0x7FFF) != ts ||
+            (text.getSelectionEnd() & 0x7FFF) != te) {
+
+            int tempS = text.getSelectionStart() & 0x7FFF;
+            int tempE = text.getSelectionEnd() & 0x7FFF;
+
+//          System.out.println(">");
+//          select(0, 0);
+//          select(tempS, tempE);
+            //select(tempS - (ts - s), tempE - (te - e));
+//          System.out.println("<");
+
+
+//          if (s != ts || e != te) System.out.println("     s("+s+") ts("+ts+") e("+e+") te("+te+")");
+//          if (tempS != ts || tempE != te) System.out.println(">s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
+//          select(s - (ts - s), e - (te - e));
+//          if (tempS != ts || tempE != te) System.out.println("s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
+
+//          System.out.println("lkdslksj");
+        }
+    }
+
+    public void select(int sIn, int eIn)
+    {
+        s = sIn;
+        e = eIn;
+        text.select(s, e);
+        ts = text.getSelectionStart() & 0x7FFF;
+        te = text.getSelectionEnd() & 0x7FFF;
+//        if (s != ts || e != te) {
+//            System.out.println(">s("+s+") ts("+ts+") e("+e+") te("+te+")");
+//            System.out.println("   "+(ts-s)+","+(te-e));
+//        }
+    }
+
+    public int getSelectionStart()
+    {
+        checkChange();
+//      return s;
+        return text.getSelectionStart() & 0x7FFF;
+    }
+
+
+    public int getSelectionEnd()
+    {
+        checkChange();
+//      return e;
+        return text.getSelectionEnd() & 0x7FFF;
+    }
+
+    public final synchronized void selectRange(int s, int e)
+    {
+        try {
+            //if (getSelectionStart() != s || getSelectionEnd() != e) {
+                //text.select(s, e);
+                select(s,e);
+            //}
+//          if (getSelectionStart() != s || getSelectionEnd() != e) {
+//              System.out.println("AGH! select("+s+","+e+") -> ("+
+//              getSelectionStart()+","+getSelectionEnd()+")");
+//              text.select(s - (getSelectionStart() - s), e - (getSelectionEnd() - e));
+//          }
+        } catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+
+
+    public void init()
+    {
+        buildGUI();
+    }
+
+
+    public void start()
+    {
+    }
+
+
+    void addWithFont(Container container, Component foo, Font font) {
+        if (font != null)
+            foo.setFont(font);
+        container.add(foo);
+    }
+
+
+
+   public void buildGUI()
+    {
+        setBackground(DemoUtility.bgColor);
+        setLayout(new BorderLayout());
+
+       Panel topPanel = new Panel();
+
+            Label titleLabel =
+                new Label("Deva Text Boundary Demo", Label.CENTER);
+            titleLabel.setFont(DemoUtility.titleFont);
+            topPanel.add(titleLabel);
+
+            //Label demo=new Label(creditString, Label.CENTER);
+            //demo.setFont(DemoUtility.creditFont);
+            //topPanel.add(demo);
+
+            Panel choicePanel = new Panel();
+
+            Label demo1=new Label("Boundaries", Label.LEFT);
+            demo1.setFont(DemoUtility.labelFont);
+            choicePanel.add(demo1);
+
+            bound = new Choice();
+                bound.setBackground(DemoUtility.choiceColor);
+            bound.addItem("Sentence");
+            bound.addItem("Line Break");
+            bound.addItem("Word");
+            bound.addItem("Char");
+            if (choiceFont != null)
+                bound.setFont(choiceFont);
+
+            choicePanel.add(bound);
+            topPanel.add(choicePanel);
+
+            DemoUtility.fixGrid(topPanel,1);
+
+
+        add("North", topPanel);
+
+
+            int ROWS = 15;
+            int COLUMNS = 50;
+//            text = new TextArea(getInitialText(), ROWS, COLUMNS);
+            text = new JTextArea(getInitialText(), ROWS, COLUMNS);
+            text.setLineWrap(true);
+            text.setWrapStyleWord(true);
+            text.setEditable(true);
+            text.selectAll();
+            text.setFont(new Font("Devanagari MT for IBM", Font.PLAIN, 48));
+            text.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+        add("Center", new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+                        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
+
+        Panel copyrightPanel = new Panel();
+        addWithFont (copyrightPanel,
+            new Label(DemoUtility.copyright1, Label.LEFT),DemoUtility.creditFont);
+        addWithFont (copyrightPanel,
+            new Label(DemoUtility.copyright2, Label.LEFT),DemoUtility.creditFont);
+        DemoUtility.fixGrid(copyrightPanel,1);
+        add("South", copyrightPanel);
+
+        //layout();
+        handleEnumChanged();
+
+        // (new Thread(this)).start();
+    }
+
+
+
+    public String getInitialText()
+    {
+        return
+            "\u0936\u094d\u0930\u0940\u092e\u0926\u094d " +
+            "\u092d\u0917\u0935\u0926\u094d\u0917\u0940\u0924\u093e " +
+            "\u0905\u0927\u094d\u092f\u093e\u092f " +
+            "\u0905\u0930\u094d\u091c\u0941\u0928 " +
+            "\u0935\u093f\u0937\u093e\u0926 " +
+            "\u092f\u094b\u0917 " +
+            "\u0927\u0943\u0924\u0930\u093e\u0937\u094d\u091f\u094d\u0930 " +
+            "\u0909\u0935\u093E\u091A\u0943 " +
+            "\u0927\u0930\u094d\u092e\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947 " +
+            "\u0915\u0941\u0930\u0941\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947 " +
+            "\u0938\u092e\u0935\u0947\u0924\u093e " +
+            "\u092f\u0941\u092f\u0941\u0924\u094d\u0938\u0935\u0903 " +
+            "\u092e\u093e\u092e\u0915\u093e\u0903 " +
+            "\u092a\u093e\u0923\u094d\u0921\u0935\u093e\u0936\u094d\u091a\u0948\u0935 " +
+            "\u0915\u093f\u092e\u0915\u0941\u0930\u094d\u0935\u0924 " +
+            "\u0938\u0902\u091c\u0935";
+    }
+
+
+    public void handleEnumChanged()
+    {
+        String s = bound.getSelectedItem();
+        if (s.equals("Char")) {
+            errorText("getCharacterInstance");
+            enum = BreakIterator.getCharacterInstance();
+        }
+        else if (s.equals("Word")) {
+            errorText("tWordBreak");
+            enum = BreakIterator.getWordInstance();
+        }
+        else if (s.equals("Line Break")) {
+            errorText("getLineInstance");
+            enum = BreakIterator.getLineInstance();
+        }
+        else /* if (s.equals("Sentence")) */ {
+            errorText("getSentenceInstance");
+            enum = BreakIterator.getSentenceInstance();
+        }
+        enum.setText(text.getText());
+        selectRange(0, 0);
+        //text.select(0,0);
+    }
+
+    public void handleForward()
+    {
+        try {
+//          System.out.println("entering handleForward");
+            enum.setText(text.getText());
+            int oldStart = getSelectionStart();
+            int oldEnd = getSelectionEnd();
+
+//          System.out.println("handleForward: oldStart=" + oldStart + ", oldEnd=" + oldEnd);
+
+            if (oldEnd < 1) {
+                selectRange(0, enum.following(0));
+            }
+            else {
+                int s = enum.following(oldEnd-1);
+                int e = enum.next();
+                if (e == -1) {
+                    e = s;
+                }
+                selectRange(s, e);
+            }
+            //text.select(s, e);
+            errorText("<" + oldStart + "," + oldEnd + "> -> <" +
+                s + "," + e + ">");
+        }
+        catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+    public void handleBackward()
+    {
+        try {
+            enum.setText(text.getText());
+            int oldStart = getSelectionStart();
+            int oldEnd = getSelectionEnd();
+            if (oldStart < 1) {
+                selectRange(0, 0);
+            }
+            else {
+                int e = enum.following(oldStart-1);
+                int s = enum.previous();
+                selectRange(s, e);
+            }
+            //text.select(s, e);
+            errorText("<" + oldStart + "," + oldEnd + "> -> <" + s + "," + e + ">");
+        }
+        catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+    public boolean action(Event evt, Object obj)
+    {
+
+        if(evt.target instanceof Button && left.equals(obj))
+        {
+            handleBackward();
+            return true;
+        }
+        else if(evt.target instanceof Button && right.equals(obj))
+        {
+            handleForward();
+            return true;
+        }
+        else if(evt.target instanceof Choice)
+        {
+            handleEnumChanged();
+            return true;
+        }
+        return false;
+    }
+
+    public boolean handleEvent(Event evt)
+    {
+        if (evt.id == Event.KEY_PRESS || evt.id == Event.KEY_ACTION) {
+            if (evt.key == Event.RIGHT || (evt.key == 0x0E && evt.controlDown())) {
+                handleForward();
+                return true;
+            }
+            else if (evt.key == Event.LEFT || (evt.key == 0x10 && evt.controlDown())) {
+                handleBackward();
+                return true;
+            }
+        }
+        else
+        if (evt.id == Event.WINDOW_DESTROY && evt.target == this) {
+            this.hide();
+            this.dispose();
+                if (applet != null) {
+                  applet.demoClosed();
+               } else System.exit(0);
+            return true;
+        }
+        return super.handleEvent(evt);
+    }
+
+    public void errorText(String s)
+    {
+       if (DEBUG)
+           System.out.println(s);
+    }
+}
diff --git a/src/com/ibm/demo/rbbi/TextBoundDemo.java b/src/com/ibm/demo/rbbi/TextBoundDemo.java
new file mode 100755
index 0000000..1609019
--- /dev/null
+++ b/src/com/ibm/demo/rbbi/TextBoundDemo.java
@@ -0,0 +1,424 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbbi/Attic/TextBoundDemo.java,v $ 
+ * $Date: 2000/03/10 03:47:43 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.rbbi;
+
+import com.ibm.demo.*;
+import java.applet.Applet;
+import java.awt.*;
+import javax.swing.JTextArea;
+import javax.swing.JScrollPane;
+import javax.swing.BorderFactory;
+import java.util.*;
+
+import com.ibm.text.BreakIterator;
+
+public class TextBoundDemo extends DemoApplet
+{
+    public static void main(String argv[]) {
+        new TextBoundDemo().showDemo();
+    }
+
+    public Frame createDemoFrame(DemoApplet applet) {
+        return new TextBoundFrame(applet);
+    }
+}
+
+
+
+class TextBoundFrame extends Frame
+{
+    private static final String creditString =
+        "v1.1a9, Demo";
+
+    private static final int FIELD_COLUMNS = 45;
+    private static final Font choiceFont = null;
+    private static final boolean DEBUG = false;
+    private DemoApplet applet;
+
+    final String right = "-->";
+    final String left = "<--";
+
+    private BreakIterator enum;
+
+JTextArea text;
+//    TextArea text;
+    Choice bound;
+
+    public TextBoundFrame(DemoApplet applet)
+    {
+        this.applet = applet;
+        init();
+        start();
+    }
+
+
+
+    public void run()
+    {
+        /*
+        while (true) {
+            try {
+                checkChange();
+                Thread.sleep(250);
+            }
+            catch (InterruptedException e) {
+            }
+            catch (Exception e) {
+            }
+            catch (Throwable e) {
+            }
+        }
+        */
+    }
+
+    int s, e;
+    int ts, te;
+
+    public void checkChange()
+    {
+//        System.out.println("checkChange...");
+        if ((text.getSelectionStart() & 0x7FFF) != ts ||
+            (text.getSelectionEnd() & 0x7FFF) != te) {
+
+            int tempS = text.getSelectionStart() & 0x7FFF;
+            int tempE = text.getSelectionEnd() & 0x7FFF;
+
+//          System.out.println(">");
+//          select(0, 0);
+//          select(tempS, tempE);
+            //select(tempS - (ts - s), tempE - (te - e));
+//          System.out.println("<");
+
+
+//          if (s != ts || e != te) System.out.println("     s("+s+") ts("+ts+") e("+e+") te("+te+")");
+//          if (tempS != ts || tempE != te) System.out.println(">s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
+//          select(s - (ts - s), e - (te - e));
+//          if (tempS != ts || tempE != te) System.out.println("s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
+
+//          System.out.println("lkdslksj");
+        }
+    }
+
+    public void select(int sIn, int eIn)
+    {
+        s = sIn;
+        e = eIn;
+        text.select(s, e);
+        ts = text.getSelectionStart() & 0x7FFF;
+        te = text.getSelectionEnd() & 0x7FFF;
+//        if (s != ts || e != te) {
+//            System.out.println(">s("+s+") ts("+ts+") e("+e+") te("+te+")");
+//            System.out.println("   "+(ts-s)+","+(te-e));
+//        }
+    }
+
+    public int getSelectionStart()
+    {
+        checkChange();
+//      return s;
+        return text.getSelectionStart() & 0x7FFF;
+    }
+
+
+    public int getSelectionEnd()
+    {
+        checkChange();
+//      return e;
+        return text.getSelectionEnd() & 0x7FFF;
+    }
+
+    public final synchronized void selectRange(int s, int e)
+    {
+        try {
+            //if (getSelectionStart() != s || getSelectionEnd() != e) {
+                //text.select(s, e);
+                select(s,e);
+            //}
+//          if (getSelectionStart() != s || getSelectionEnd() != e) {
+//              System.out.println("AGH! select("+s+","+e+") -> ("+
+//              getSelectionStart()+","+getSelectionEnd()+")");
+//              text.select(s - (getSelectionStart() - s), e - (getSelectionEnd() - e));
+//          }
+        } catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+
+
+    public void init()
+    {
+        buildGUI();
+    }
+
+
+    public void start()
+    {
+    }
+
+
+    void addWithFont(Container container, Component foo, Font font) {
+        if (font != null)
+            foo.setFont(font);
+        container.add(foo);
+    }
+
+
+
+   public void buildGUI()
+    {
+        setBackground(DemoUtility.bgColor);
+        setLayout(new BorderLayout());
+
+       Panel topPanel = new Panel();
+
+            Label titleLabel =
+                new Label("Text Boundary Demo", Label.CENTER);
+            titleLabel.setFont(DemoUtility.titleFont);
+            topPanel.add(titleLabel);
+
+            //Label demo=new Label(creditString, Label.CENTER);
+            //demo.setFont(DemoUtility.creditFont);
+            //topPanel.add(demo);
+
+            Panel choicePanel = new Panel();
+
+            Label demo1=new Label("Boundaries", Label.LEFT);
+            demo1.setFont(DemoUtility.labelFont);
+            choicePanel.add(demo1);
+
+            bound = new Choice();
+                bound.setBackground(DemoUtility.choiceColor);
+            bound.addItem("Sentence");
+            bound.addItem("Line Break");
+            bound.addItem("Word");
+            bound.addItem("Char");
+            if (choiceFont != null)
+                bound.setFont(choiceFont);
+
+            choicePanel.add(bound);
+            topPanel.add(choicePanel);
+
+            DemoUtility.fixGrid(topPanel,1);
+
+
+        add("North", topPanel);
+
+
+            int ROWS = 15;
+            int COLUMNS = 50;
+//            text = new TextArea(getInitialText(), ROWS, COLUMNS);
+text = new JTextArea(getInitialText(), ROWS, COLUMNS);
+text.setLineWrap(true);
+text.setWrapStyleWord(true);
+            text.setEditable(true);
+            text.selectAll();
+            text.setFont(DemoUtility.editFont);
+            text.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
+
+        add("Center", new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+                        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
+
+        Panel copyrightPanel = new Panel();
+        addWithFont (copyrightPanel,
+            new Label(DemoUtility.copyright1, Label.LEFT),DemoUtility.creditFont);
+        addWithFont (copyrightPanel,
+            new Label(DemoUtility.copyright2, Label.LEFT),DemoUtility.creditFont);
+        DemoUtility.fixGrid(copyrightPanel,1);
+        add("South", copyrightPanel);
+
+        //layout();
+        handleEnumChanged();
+
+        // (new Thread(this)).start();
+    }
+
+
+
+    public String getInitialText()
+    {
+        return
+    /*
+            "\"This is a sentence.\" This is not.\" \"because. And go. " +
+            "This is a simple 012.566,5 sample sentence. \n"+
+            "It does not have to make any sense as you can see. \n"+
+            "Nel mezzo del cammin di nostra vita, mi ritrovai in "+
+                "una selva oscura. \n"+
+            "Che la dritta via aveo smarrita. \n"+
+            "He said, that I said, that you said!! \n"+
+            "Don't rock the boat.\n\n"+
+            "Because I am the daddy, that is why. \n"+
+            "Not on my time (el timo.)! \n"+
+            "Tab\tTab\rTab\tWow."+
+            "So what!!\n\n"+
+            "Is this a question???  " +
+            "I wonder...Hmm.\n" +
+            "Harris thumbed down several, including \"Away We Go\" "+
+                "(which became the huge success Oklahoma!). \n"+
+            "One species, B. anthracis, is highly virulent.\n"+
+            "Wolf said about Sounder: \"Beautifully thought-out and "+
+                "directed.\"\n"+
+            "Have you ever said, \"This is where I shall live\"? \n"+
+            "He 1000,233,456.000 answered, \"You may not!\" \n"+
+            "Another popular saying is: \"How do you do?\". \n"+
+            "What is the proper use of the abbreviation pp.? \n"+
+            "Yes, I am 1,23.322% definatelly 12\" tall!!";
+    */
+            "(\"This is a complete sentence.\") This is (\"not.\") also.  "
+            +"An abbreviation in the middle, etc. and one at the end, etc. "+
+                "This "
+            +"is a simple sample 012.566,5 sentence. It doesn't "
+            +"have to make any sense, as you can see. Nel mezzo del  c"
+            +"ammin di nostra vita, mi ritrovai in una selva oscura. Che "
+            +"la dritta via aveo smarrita. Not on my time (el timo.)! And "
+            +"tabulated columns: \tCol1\tCol2\t3,456%.\t "
+            +"Is this a question???  I wonder... Hmm. Harris thumbed "
+            +"down several, including \"Away We Go\" (which became the  "
+            +"huge success Oklahoma!). One species, B. anthracis, is  "
+            +"highly virulent. Wolf said about Sounder: \"Beautifully  "
+            +"thought-out and directed.\" Have you ever said, \"This is "+
+                "where I "
+            +"shall live\"? He said 1000,233,456.000 and answered, \"You "+
+                "may not!\"  "
+            +"Another popular saying is: \"How do you do?\". What is the  "
+            +"proper use of the abbreviation pp.? Yes, I am 12\' 3\" tall!!";
+    }
+
+
+    public void handleEnumChanged()
+    {
+        String s = bound.getSelectedItem();
+        if (s.equals("Char")) {
+            errorText("getCharacterInstance");
+            enum = BreakIterator.getCharacterInstance();
+        }
+        else if (s.equals("Word")) {
+            errorText("tWordBreak");
+            enum = BreakIterator.getWordInstance();
+        }
+        else if (s.equals("Line Break")) {
+            errorText("getLineInstance");
+            enum = BreakIterator.getLineInstance();
+        }
+        else /* if (s.equals("Sentence")) */ {
+            errorText("getSentenceInstance");
+            enum = BreakIterator.getSentenceInstance();
+        }
+        enum.setText(text.getText());
+        selectRange(0, 0);
+        //text.select(0,0);
+    }
+
+    public void handleForward()
+    {
+        try {
+//          System.out.println("entering handleForward");
+            enum.setText(text.getText());
+            int oldStart = getSelectionStart();
+            int oldEnd = getSelectionEnd();
+
+//          System.out.println("handleForward: oldStart=" + oldStart + ", oldEnd=" + oldEnd);
+
+            if (oldEnd < 1) {
+                selectRange(0, enum.following(0));
+            }
+            else {
+                int s = enum.following(oldEnd-1);
+                int e = enum.next();
+                if (e == -1) {
+                    e = s;
+                }
+                selectRange(s, e);
+            }
+            //text.select(s, e);
+            errorText("<" + oldStart + "," + oldEnd + "> -> <" +
+                s + "," + e + ">");
+        }
+        catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+    public void handleBackward()
+    {
+        try {
+            enum.setText(text.getText());
+            int oldStart = getSelectionStart();
+            int oldEnd = getSelectionEnd();
+            if (oldStart < 1) {
+                selectRange(0, 0);
+            }
+            else {
+                int e = enum.following(oldStart-1);
+                int s = enum.previous();
+                selectRange(s, e);
+            }
+            //text.select(s, e);
+            errorText("<" + oldStart + "," + oldEnd + "> -> <" + s + "," + e + ">");
+        }
+        catch (Exception exp) {
+            errorText(exp.toString());
+        }
+    }
+
+    public boolean action(Event evt, Object obj)
+    {
+
+        if(evt.target instanceof Button && left.equals(obj))
+        {
+            handleBackward();
+            return true;
+        }
+        else if(evt.target instanceof Button && right.equals(obj))
+        {
+            handleForward();
+            return true;
+        }
+        else if(evt.target instanceof Choice)
+        {
+            handleEnumChanged();
+            return true;
+        }
+        return false;
+    }
+
+    public boolean handleEvent(Event evt)
+    {
+        if (evt.id == Event.KEY_PRESS || evt.id == Event.KEY_ACTION) {
+            if (evt.key == Event.RIGHT || (evt.key == 0x0E && evt.controlDown())) {
+                handleForward();
+                return true;
+            }
+            else if (evt.key == Event.LEFT || (evt.key == 0x10 && evt.controlDown())) {
+                handleBackward();
+                return true;
+            }
+        }
+        else
+        if (evt.id == Event.WINDOW_DESTROY && evt.target == this) {
+            this.hide();
+            this.dispose();
+                if (applet != null) {
+                  applet.demoClosed();
+               } else System.exit(0);
+            return true;
+        }
+        return super.handleEvent(evt);
+    }
+
+    public void errorText(String s)
+    {
+       if (DEBUG)
+           System.out.println(s);
+    }
+}
diff --git a/src/com/ibm/demo/rbbi/package.html b/src/com/ibm/demo/rbbi/package.html
new file mode 100755
index 0000000..d5eb46a
--- /dev/null
+++ b/src/com/ibm/demo/rbbi/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbbi/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 17:43:53 $
+-->
+</head>
+<body bgcolor="white">
+RuleBasedBreakIterator and DictionaryBasedBreakIterator demo applications.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/demo/rbnf/RbnfDemo.java b/src/com/ibm/demo/rbnf/RbnfDemo.java
new file mode 100755
index 0000000..e78295a
--- /dev/null
+++ b/src/com/ibm/demo/rbnf/RbnfDemo.java
@@ -0,0 +1,533 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbnf/Attic/RbnfDemo.java,v $ 
+ * $Date: 2000/03/10 03:47:43 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.rbnf;
+
+import com.ibm.demo.*;
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+import java.text.DecimalFormat;
+import java.text.BreakIterator;
+import java.text.ParsePosition;
+import java.util.Locale;
+
+import com.ibm.text.RuleBasedNumberFormat;
+
+public class RbnfDemo extends DemoApplet {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    /*
+     * code to run the demo as an application
+     */
+    public static void main(String[] argv) {
+    	new RbnfDemo().showDemo();
+    }
+
+    protected Dimension getDefaultFrameSize(DemoApplet applet, Frame f) {
+    	return new Dimension(430,270);
+    }
+
+    protected Frame createDemoFrame(DemoApplet applet) {
+        final Frame window = new Frame("Number Spellout Demo");
+        window.setSize(800, 600);
+        window.setLayout(new BorderLayout());
+
+        Panel mainPanel = new Panel();
+        mainPanel.setLayout(new GridLayout(1,2));
+
+        commentaryField = new TextArea("", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY);
+        commentaryField.setSize(800, 50);
+        commentaryField.setText(RbnfSampleRuleSets.sampleRuleSetCommentary[0]);
+        commentaryField.setEditable(false);
+        commentaryField.setFont(new Font("Helvetica", Font.PLAIN, 14));
+
+        spelloutFormatter = new RuleBasedNumberFormat(RbnfSampleRuleSets.usEnglish, Locale.US);
+        spelloutFormatter.setLenientParseMode(lenientParse);
+        populateRuleSetMenu();
+        numberFormatter = new DecimalFormat("#,##0.##########");
+        parsePosition = new ParsePosition(0);
+        theNumber = 0;
+
+        numberField = new TextField();
+        numberField.setFont(new Font("Serif", Font.PLAIN, 24));
+        textField = new DemoTextFieldHolder();
+        textField.setFont(new Font("Serif", Font.PLAIN, 24));
+        rulesField = new DemoTextFieldHolder();
+        rulesField.setFont(new Font("Serif", Font.PLAIN, 14));
+        lenientParseButton = new Checkbox("Lenient parse", lenientParse);
+
+        numberField.addTextListener(new TextListener() {
+            public void textValueChanged(TextEvent e) {
+                if (!numberFieldHasFocus)
+                    return;
+
+                String fieldText = ((TextComponent)(e.getSource())).getText();
+                parsePosition.setIndex(0);
+                Number temp = numberFormatter.parse(fieldText, parsePosition);
+                if (temp == null || parsePosition.getIndex() == 0) {
+                    theNumber = 0;
+                    textField.setText("PARSE ERROR");
+                }
+                else {
+                    theNumber = temp.doubleValue();
+                    textField.setText(spelloutFormatter.format(theNumber, ruleSetName));
+                }
+            }
+        } );
+
+        numberField.addFocusListener(new FocusAdapter() {
+            public void focusLost(FocusEvent e) {
+                numberFieldHasFocus = false;
+                numberField.setText(numberFormatter.format(theNumber));
+            }
+
+            public void focusGained(FocusEvent e) {
+                numberFieldHasFocus = true;
+                numberField.selectAll();
+            }
+        } );
+
+        textField.addKeyListener(new KeyAdapter() {
+            public void keyTyped(KeyEvent e) {
+                if (e.getKeyChar() == '\t') {
+                    String fieldText = ((TextComponent)(e.getSource())).getText();
+                    parsePosition.setIndex(0);
+                    theNumber = spelloutFormatter.parse(fieldText, parsePosition)
+                                        .doubleValue();
+                    if (parsePosition.getIndex() == 0) {
+                        theNumber = 0;
+                        numberField.setText("PARSE ERROR");
+                        textField.selectAll();
+                    }
+                    else if (parsePosition.getIndex() < fieldText.length()) {
+                        textField.select(parsePosition.getIndex(), fieldText.length());
+                        numberField.setText(numberFormatter.format(theNumber));
+                    }
+                    else {
+                        textField.selectAll();
+                        numberField.setText(numberFormatter.format(theNumber));
+                    }
+                    e.consume();
+                }
+            }
+        } );
+
+        textField.addFocusListener(new FocusAdapter() {
+            public void focusLost(FocusEvent e) {
+                String fieldText = ((TextComponent)(e.getSource())).getText();
+                parsePosition.setIndex(0);
+                theNumber = spelloutFormatter.parse(fieldText, parsePosition)
+                                .doubleValue();
+                if (parsePosition.getIndex() == 0)
+                    numberField.setText("PARSE ERROR");
+                else
+                    numberField.setText(numberFormatter.format(theNumber));
+                textField.setText(textField.getText()); // textField.repaint() didn't work right
+            }
+
+            public void focusGained(FocusEvent e) {
+                textField.selectAll();
+            }
+        } );
+
+        rulesField.addKeyListener(new KeyAdapter() {
+            public void keyTyped(KeyEvent e) {
+                if (e.getKeyChar() == '\t') {
+                    String fieldText = ((TextComponent)(e.getSource())).getText();
+                    if (formatterMenu.getSelectedItem().equals("Custom") || !fieldText.equals(
+                                    RbnfSampleRuleSets.sampleRuleSets[formatterMenu.getSelectedIndex()])) {
+                        try {
+                            RuleBasedNumberFormat temp = new RuleBasedNumberFormat(fieldText);
+                            temp.setLenientParseMode(lenientParse);
+                            populateRuleSetMenu();
+                            spelloutFormatter = temp;
+                            customRuleSet = fieldText;
+                            formatterMenu.select("Custom");
+                            commentaryField.setText(RbnfSampleRuleSets.
+                                sampleRuleSetCommentary[RbnfSampleRuleSets.
+                                sampleRuleSetCommentary.length - 1]);
+                            redisplay();
+                        }
+                        catch (Exception x) {
+                            textField.setText(x.toString());
+                        }
+                    }
+                    e.consume();
+                }
+            }
+        } );
+
+        rulesField.addFocusListener(new FocusAdapter() {
+            public void focusLost(FocusEvent e) {
+                String fieldText = ((TextComponent)(e.getSource())).getText();
+                if (formatterMenu.getSelectedItem().equals("Custom") || !fieldText.equals(
+                                RbnfSampleRuleSets.sampleRuleSets[formatterMenu.getSelectedIndex()])) {
+                    try {
+                        RuleBasedNumberFormat temp = new RuleBasedNumberFormat(fieldText);
+                        temp.setLenientParseMode(lenientParse);
+                        populateRuleSetMenu();
+                        spelloutFormatter = temp;
+                        customRuleSet = fieldText;
+                        formatterMenu.select("Custom");
+                        redisplay();
+                    }
+                    catch (Exception x) {
+                        textField.setText(x.toString());
+                    }
+                }
+                rulesField.setText(rulesField.getText()); // rulesField.repaint() didn't work right
+            }
+        } );
+
+        lenientParseButton.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                lenientParse = lenientParseButton.getState();
+                spelloutFormatter.setLenientParseMode(lenientParse);
+            }
+        } );
+
+        numberField.setText(numberFormatter.format(theNumber));
+        numberField.selectAll();
+        textField.setText(spelloutFormatter.format(theNumber, ruleSetName));
+
+        Panel leftPanel = new Panel();
+        leftPanel.setLayout(new BorderLayout());
+        Panel panel = new Panel();
+        panel.setLayout(new BorderLayout());
+        Panel panel1 = new Panel();
+        panel1.setLayout(new GridLayout(3, 1));
+        panel1.add(new Panel());
+        panel1.add(numberField, "Center");
+        panel1.add(lenientParseButton);
+        panel.add(panel1, "Center");
+        Panel panel2 = new Panel();
+        panel2.setLayout(new GridLayout(3, 3));
+        Button button = new Button("+100");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                roll(100);
+            }
+        } );
+        panel2.add(button);
+        button = new Button("+10");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                roll(10);
+            }
+        } );
+        panel2.add(button);
+        button = new Button("+1");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                roll(1);
+            }
+        } );
+        panel2.add(button);
+        button = new Button("<");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                theNumber *= 10;
+                redisplay();
+            }
+        } );
+        panel2.add(button);
+        panel2.add(new Panel());
+        button = new Button(">");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                theNumber /= 10;
+                redisplay();
+            }
+        } );
+        panel2.add(button);
+        button = new Button("-100");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                roll(-100);
+            }
+        } );
+        panel2.add(button);
+        button = new Button("-10");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                roll(-10);
+            }
+        } );
+        panel2.add(button);
+        button = new Button("-1");
+        button.addActionListener( new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                roll(-1);
+            }
+        } );
+        panel2.add(button);
+        panel.add(panel2, "East");
+        leftPanel.add(panel, "North");
+        leftPanel.add(textField, "Center");
+
+        Panel rightPanel = new Panel();
+        rightPanel.setLayout(new BorderLayout());
+        formatterMenu = new Choice();
+        for (int i = 0; i < RbnfSampleRuleSets.sampleRuleSetNames.length; i++)
+            formatterMenu.addItem(RbnfSampleRuleSets.sampleRuleSetNames[i]);
+        formatterMenu.addItem("Custom");
+        formatterMenu.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                Choice source = (Choice)(e.getSource());
+                int item = source.getSelectedIndex();
+                Locale locale = RbnfSampleRuleSets.sampleRuleSetLocales[item];
+
+                commentaryField.setText(RbnfSampleRuleSets.
+                                sampleRuleSetCommentary[item]);
+
+                if (locale != null && (locale.getLanguage().equals("iw")
+                        || locale.getLanguage().equals("ru") || locale.getLanguage().equals("ja")
+                        || locale.getLanguage().equals("el")
+                        || locale.getLanguage().equals("zh"))) {
+                    textField.togglePanes(false);
+                    rulesField.togglePanes(false);
+                }
+                else {
+                    textField.togglePanes(true);
+                    rulesField.togglePanes(true);
+                }
+
+                makeNewSpelloutFormatter();
+                redisplay();
+            }
+        } );
+
+        ruleSetMenu = new Choice();
+        populateRuleSetMenu();
+
+        ruleSetMenu.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                ruleSetName = ruleSetMenu.getSelectedItem();
+                redisplay();
+            }
+        } );
+
+        Panel menuPanel = new Panel();
+        menuPanel.setLayout(new GridLayout(1, 2));
+        menuPanel.add(formatterMenu);
+        menuPanel.add(ruleSetMenu);
+        rightPanel.add(menuPanel, "North");
+
+        rulesField.setText(RbnfSampleRuleSets.sampleRuleSets[formatterMenu.getSelectedIndex()]);
+        rightPanel.add(rulesField, "Center");
+
+        mainPanel.add(leftPanel);
+        mainPanel.add(rightPanel);
+
+        window.add(mainPanel, "Center");
+        window.add(commentaryField, "South");
+
+        window.doLayout();
+        window.show();
+        return window;
+    }
+
+    void roll(int delta) {
+        theNumber += delta;
+        redisplay();
+    }
+
+    void redisplay() {
+        numberField.setText(numberFormatter.format(theNumber));
+        textField.setText(spelloutFormatter.format(theNumber, ruleSetName));
+    }
+
+    void makeNewSpelloutFormatter() {
+        int item = formatterMenu.getSelectedIndex();
+        String formatterMenuItem = formatterMenu.getSelectedItem();
+
+        if (formatterMenuItem.equals("Custom")) {
+            rulesField.setText(customRuleSet);
+            spelloutFormatter = new RuleBasedNumberFormat(customRuleSet);
+        }
+        else {
+            rulesField.setText(RbnfSampleRuleSets.sampleRuleSets[item]);
+
+            Locale locale = RbnfSampleRuleSets.sampleRuleSetLocales[item];
+            if (locale == null)
+                locale = Locale.getDefault();
+
+            spelloutFormatter = new RuleBasedNumberFormat(RbnfSampleRuleSets.
+                            sampleRuleSets[item], locale);
+        }
+        spelloutFormatter.setLenientParseMode(lenientParse);
+        populateRuleSetMenu();
+    }
+
+    void populateRuleSetMenu() {
+        String[] ruleSetNames = spelloutFormatter.getRuleSetNames();
+
+        if (ruleSetMenu != null) {
+            ruleSetMenu.removeAll();
+            for (int i = 0; i < ruleSetNames.length; i++)
+                ruleSetMenu.addItem(ruleSetNames[i]);
+
+            ruleSetName = ruleSetMenu.getSelectedItem();
+        }
+        else
+            ruleSetName = ruleSetNames[0];
+    }
+
+    private Frame demoWindow = null;
+
+    private TextComponent numberField;
+    private DemoTextFieldHolder textField;
+    private DemoTextFieldHolder rulesField;
+    private TextComponent commentaryField;
+    private Checkbox lenientParseButton;
+
+    private boolean numberFieldHasFocus = true;
+
+    private RuleBasedNumberFormat spelloutFormatter;
+    private DecimalFormat numberFormatter;
+    private ParsePosition parsePosition;
+
+    private boolean lenientParse = true;
+
+    private double theNumber = 0;
+    private boolean canEdit = true;
+
+    private Choice formatterMenu;
+    private Choice ruleSetMenu;
+    private String ruleSetName;
+
+    private String customRuleSet = "NO RULES!";
+}
+
+class DemoTextField extends Component {
+    public DemoTextField() {
+    }
+
+    public void setText(String text) {
+        this.text = text;
+        this.repaint();
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void paint(Graphics g) {
+        Font font = getFont();
+        FontMetrics fm = g.getFontMetrics();
+        g.setFont(font);
+        String text = getText();
+        BreakIterator bi = BreakIterator.getLineInstance();
+        bi.setText(text);
+        int lineHeight = fm.getHeight();
+        int width = getSize().width;
+        int penY = fm.getAscent();
+        int lineStart = 0;
+        int tempLineEnd = bi.first();
+        int lineEnd = 0;
+        int maxLineEnd = 0;
+        totalHeight = 0;
+
+        while (lineStart < text.length()) {
+            maxLineEnd = text.indexOf('\n', lineStart);
+            if (maxLineEnd == -1)
+                maxLineEnd = Integer.MAX_VALUE;
+            while (tempLineEnd != BreakIterator.DONE && fm.stringWidth(text.substring(
+                            lineStart, tempLineEnd)) < width) {
+                lineEnd = tempLineEnd;
+                tempLineEnd = bi.next();
+            }
+            if (lineStart >= lineEnd) {
+                if (tempLineEnd == BreakIterator.DONE)
+                    lineEnd = text.length();
+                else
+                    lineEnd = tempLineEnd;
+            }
+            if (lineEnd > maxLineEnd)
+                lineEnd = maxLineEnd;
+            g.drawString(text.substring(lineStart, lineEnd), 0, penY);
+            penY += lineHeight;
+            totalHeight += lineHeight;
+            lineStart = lineEnd;
+            if (lineStart < text.length() && text.charAt(lineStart) == '\n')
+                ++lineStart;
+        }
+    }
+
+/*
+    public Dimension getPreferredSize() {
+        Dimension size = getParent().getSize();
+        return new Dimension(size.width, totalHeight);
+    }
+*/
+
+    private String text;
+    private int totalHeight;
+}
+
+class DemoTextFieldHolder extends Panel {
+    public DemoTextFieldHolder() {
+        tf1 = new TextArea("", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY);
+        tf2 = new DemoTextField();
+        sp = new ScrollPane();
+
+        setLayout(new CardLayout());
+
+        sp.add(tf2, "TextField1");
+        sp.setVisible(false);
+        add(tf1, "TestField2");
+        add(sp, "ScrollPane");
+    }
+
+    public void addFocusListener(FocusListener l) {
+        tf1.addFocusListener(l);
+    }
+
+    public void addKeyListener(KeyListener l) {
+        tf1.addKeyListener(l);
+    }
+
+    public void setText(String text) {
+        tf1.setText(text);
+        tf2.setText(text);
+    }
+
+    public String getText() {
+        return tf1.getText();
+    }
+
+    public void select(int start, int end) {
+        tf1.select(start, end);
+    }
+
+    public void selectAll() {
+        tf1.selectAll();
+    }
+
+    public void togglePanes(boolean canShowRealTextField) {
+        if (canShowRealTextField != showingRealTextField) {
+            CardLayout layout = (CardLayout)(getLayout());
+            layout.next(this);
+            showingRealTextField = canShowRealTextField;
+        }
+    }
+
+    private TextArea tf1 = null;
+    private DemoTextField tf2 = null;
+    private ScrollPane sp = null;
+    private boolean showingRealTextField = true;
+}
diff --git a/src/com/ibm/demo/rbnf/RbnfSampleRuleSets.java b/src/com/ibm/demo/rbnf/RbnfSampleRuleSets.java
new file mode 100755
index 0000000..2294212
--- /dev/null
+++ b/src/com/ibm/demo/rbnf/RbnfSampleRuleSets.java
@@ -0,0 +1,1949 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbnf/Attic/RbnfSampleRuleSets.java,v $ 
+ * $Date: 2000/03/10 03:47:44 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.rbnf;
+
+import com.ibm.demo.*;
+import java.util.Locale;
+
+/**
+ * A collection of example rule sets for use with RuleBasedNumberFormat.
+ * These examples are intended to serve both as demonstrations of what can
+ * be done with this framework, and as starting points for designing new
+ * rule sets.
+ *
+ * For those that claim to represent number-spellout rules for languages
+ * other than U.S. English, we make no claims of either accuracy or
+ * completeness.  In fact, we know them to be incomplete, and suspect
+ * most have mistakes in them.  If you see something that you know is wrong,
+ * please tell us!
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 03:47:44 $
+ */
+public class RbnfSampleRuleSets {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //========================================================================
+    // Spellout rules for various languages
+    //
+    // The following RuleBasedNumberFormat descriptions show the rules for
+    // spelling out numeric values in various languages.  As mentioned
+    // before, we cannot vouch for the accuracy or completeness of this
+    // data, although we believe it's pretty close.  Basically, this
+    // represents one day's worth of Web-surfing.  If you can supply the
+    // missing information in any of these rule sets, or if you find errors,
+    // or if you can supply spellout rules for languages that aren't shown
+    // here, we want to hear from you!
+    //========================================================================
+
+    /**
+     * Spellout rules for U.S. English.  This demonstration version of the
+     * U.S. English spellout rules has four variants: 1) %simplified is a
+     * set of rules showing the simple method of spelling out numbers in
+     * English: 289 is formatted as "two hundred eighty-nine".  2) %alt-teens
+     * is the same as %simplified, except that values between 1,000 and 9,999
+     * whose hundreds place isn't zero are formatted in hundreds.  For example,
+     * 1,983 is formatted as "nineteen hundred eighty-three," and 2,183 is
+     * formatted as "twenty-one hundred eighty-three," but 2,083 is still
+     * formatted as "two thousand eighty-three."  3) %ordinal formats the
+     * values as ordinal numbers in English (e.g., 289 is "two hundred eighty-
+     * ninth").  4) %default uses a more complicated algorithm to format
+     * numbers in a more natural way: 289 is formatted as "two hundred AND
+     * eighty-nine" and commas are inserted between the thousands groups for
+     * values above 100,000.
+     */
+    public static final String usEnglish =
+        // This rule set shows the normal simple formatting rules for English
+        "%simplified:\n"
+               // negative number rule.  This rule is used to format negative
+               // numbers.  The result of formatting the number's absolute
+               // value is placed where the >> is.
+        + "    -x: minus >>;\n"
+               // faction rule.  This rule is used for formatting numbers
+               // with fractional parts.  The result of formatting the
+               // number's integral part is substituted for the <<, and
+               // the result of formatting the number's fractional part
+               // (one digit at a time, e.g., 0.123 is "zero point one two
+               // three") replaces the >>.
+        + "    x.x: << point >>;\n"
+               // the rules for the values from 0 to 19 are simply the
+               // words for those numbers
+        + "    zero; one; two; three; four; five; six; seven; eight; nine;\n"
+        + "    ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen;\n"
+        + "        seventeen; eighteen; nineteen;\n"
+               // beginning at 20, we use the >> to mark the position where
+               // the result of formatting the number's ones digit.  Thus,
+               // we only need a new rule at every multiple of 10.  Text in
+               // backets is omitted if the value being formatted is an
+               // even multiple of 10.
+        + "    20: twenty[->>];\n"
+        + "    30: thirty[->>];\n"
+        + "    40: forty[->>];\n"
+        + "    50: fifty[->>];\n"
+        + "    60: sixty[->>];\n"
+        + "    70: seventy[->>];\n"
+        + "    80: eighty[->>];\n"
+        + "    90: ninety[->>];\n"
+               // beginning at 100, we can use << to mark the position where
+               // the result of formatting the multiple of 100 is to be
+               // inserted.  Notice also that the meaning of >> has shifted:
+               // here, it refers to both the ones place and the tens place.
+               // The meanings of the << and >> tokens depend on the base value
+               // of the rule.  A rule's divisor is (usually) the highest
+               // power of 10 that is less than or equal to the rule's base
+               // value.  The value being formatted is divided by the rule's
+               // divisor, and the integral quotient is used to get the text
+               // for <<, while the remainder is used to produce the text
+               // for >>.  Again, text in brackets is omitted if the value
+               // being formatted is an even multiple of the rule's divisor
+               // (in this case, an even multiple of 100)
+        + "    100: << hundred[ >>];\n"
+               // The rules for the higher numbers work the same way as the
+               // rule for 100: Again, the << and >> tokens depend on the
+               // rule's divisor, which for all these rules is also the rule's
+               // base value.  To group by thousand, we simply don't have any
+               // rules between 1,000 and 1,000,000.
+        + "    1000: << thousand[ >>];\n"
+        + "    1,000,000: << million[ >>];\n"
+        + "    1,000,000,000: << billion[ >>];\n"
+        + "    1,000,000,000,000: << trillion[ >>];\n"
+               // overflow rule.  This rule specifies that values of a
+               // quadrillion or more are shown in numerals rather than words.
+               // The == token means to format (with new rules) the value
+               // being formatted by this rule and place the result where
+               // the == is.  The #,##0 inside the == signs is a
+               // DecimalFormat pattern.  It specifies that the value should
+               // be formatted with a DecimalFormat object, and that it
+               // should be formatted with no decimal places, at least one
+               // digit, and a thousands separator.
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+
+        // This rule set formats numbers between 1,000 and 9,999 somewhat
+        // differently: If the hundreds digit is not zero, the first two
+        // digits are treated as a number of hundreds.  For example, 2,197
+        // would come out as "twenty-one hundred ninety-seven."
+        + "%alt-teens:\n"
+               // just use %simplified to format values below 1,000
+        + "    =%simplified=;\n"
+               // values between 1,000 and 9,999 are delegated to %%alt-hundreds
+               // for formatting.  The > after "1000" decreases the exponent
+               // of the rule's radix by one, causing the rule's divisor
+               // to be 100 instead of 1,000.  This causes the first TWO
+               // digits of the number, instead of just the first digit,
+               // to be sent to %%alt-hundreds
+        + "    1000>: <%%alt-hundreds<[ >>];\n"
+               // for values of 10,000 and more, we again just use %simplified
+        + "    10,000: =%simplified=;\n"
+        // This rule set uses some obscure voodoo of the description language
+        // to format the first two digits of a value in the thousands.
+        // The rule at 10 formats the first two digits as a multiple of 1,000
+        // and the rule at 11 formats the first two digits as a multiple of
+        // 100.  This works because of something known as the "rollback rule":
+        // if the rule applicable to the value being formatted has two
+        // substitutions, the value being formatted is an even multiple of
+        // the rule's divisor, and the rule's base value ISN'T an even multiple
+        // if the rule's divisor, then the rule that precedes this one in the
+        // list is used instead.  (The [] notation is implemented internally
+        // using this notation: a rule containing [] is split into two rules,
+        // and the right one is chosen using the rollback rule.) In this case,
+        // it means that if the first two digits are an even multiple of 10,
+        // they're formatted with the 10 rule (containing "thousand"), and if
+        // they're not, they're formatted with the 11 rule (containing
+        // "hundred").  %%empty is a hack to cause the rollback rule to be
+        // invoked: it makes the 11 rule have two substitutions, even though
+        // the second substitution (calling %%empty) doesn't actually do
+        // anything.
+        + "%%alt-hundreds:\n"
+        + "    0: SHOULD NEVER GET HERE!;\n"
+        + "    10: <%simplified< thousand;\n"
+        + "    11: =%simplified= hundred>%%empty>;\n"
+        + "%%empty:\n"
+        + "    0:;"
+
+        // this rule set is the same as %simplified, except that it formats
+        // the value as an ordinal number: 234 is formatted as "two hundred
+        // thirty-fourth".  Notice the calls to ^simplified: we have to
+        // call %simplified to avoid getting "second hundred thirty-fourth."
+        + "%ordinal:\n"
+        + "    zeroth; first; second; third; fourth; fifth; sixth; seventh;\n"
+        + "        eighth; ninth;\n"
+        + "    tenth; eleventh; twelfth; thirteenth; fourteenth;\n"
+        + "        fifteenth; sixteenth; seventeenth; eighteenth;\n"
+        + "        nineteenth;\n"
+        + "    twentieth; twenty->>;\n"
+        + "    30: thirtieth; thirty->>;\n"
+        + "    40: fortieth; forty->>;\n"
+        + "    50: fiftieth; fifty->>;\n"
+        + "    60: sixtieth; sixty->>;\n"
+        + "    70: seventieth; seventy->>;\n"
+        + "    80: eightieth; eighty->>;\n"
+        + "    90: ninetieth; ninety->>;\n"
+        + "    100: <%simplified< hundredth; <%simplified< hundred >>;\n"
+        + "    1000: <%simplified< thousandth; <%simplified< thousand >>;\n"
+        + "    1,000,000: <%simplified< millionth; <%simplified< million >>;\n"
+        + "    1,000,000,000: <%simplified< billionth;\n"
+        + "        <%simplified< billion >>;\n"
+        + "    1,000,000,000,000: <%simplified< trillionth;\n"
+        + "        <%simplified< trillion >>;\n"
+        + "    1,000,000,000,000,000: =#,##0=;"
+
+        // %default is a more elaborate form of %simplified;  It is basically
+        // the same, except that it introduces "and" before the ones digit
+        // when appropriate (basically, between the tens and ones digits) and
+        // separates the thousands groups with commas in values over 100,000.
+        + "%default:\n"
+               // negative-number and fraction rules.  These are the same
+               // as those for %simplified, but ave to be stated here too
+               // because this is an entry point
+        + "    -x: minus >>;\n"
+        + "    x.x: << point >>;\n"
+               // just use %simplified for values below 100
+        + "    =%simplified=;\n"
+               // for values from 100 to 9,999 use %%and to decide whether or
+               // not to interpose the "and"
+        + "    100: << hundred[ >%%and>];\n"
+        + "    1000: << thousand[ >%%and>];\n"
+               // for values of 100,000 and up, use %%commas to interpose the
+               // commas in the right places (and also to interpose the "and")
+        + "    100,000>>: << thousand[>%%commas>];\n"
+        + "    1,000,000: << million[>%%commas>];\n"
+        + "    1,000,000,000: << billion[>%%commas>];\n"
+        + "    1,000,000,000,000: << trillion[>%%commas>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        // if the value passed to this rule set is greater than 100, don't
+        // add the "and"; if it's less than 100, add "and" before the last
+        // digits
+        + "%%and:\n"
+        + "    and =%default=;\n"
+        + "    100: =%default=;\n"
+        // this rule set is used to place the commas
+        + "%%commas:\n"
+               // for values below 100, add "and" (the apostrophe at the
+               // beginning is ignored, but causes the space that follows it
+               // to be significant: this is necessary because the rules
+               // calling %%commas don't put a space before it)
+        + "    ' and =%default=;\n"
+               // put a comma after the thousands (or whatever preceded the
+               // hundreds)
+        + "    100: , =%default=;\n"
+               // put a comma after the millions (or whatever precedes the
+               // thousands)
+        + "    1000: , <%default< thousand, >%default>;\n"
+               // and so on...
+        + "    1,000,000: , =%default=;"
+        // %%lenient-parse isn't really a set of number formatting rules;
+        // it's a set of collation rules.  Lenient-parse mode uses a Collator
+        // object to compare fragments of the text being parsed to the text
+        // in the rules, allowing more leeway in the matching text.  This set
+        // of rules tells the formatter to ignore commas when parsing (it
+        // already ignores spaces, which is why we refer to the space; it also
+        // ignores hyphens, making "twenty one" and "twenty-one" parse
+        // identically)
+        + "%%lenient-parse:\n"
+        + "    & ' ' , ',' ;\n";
+
+    /**
+     * Spellout rules for U.K. English.  U.K. English has one significant
+     * difference from U.S. English: the names for values of 1,000,000,000
+     * and higher.  In American English, each successive "-illion" is 1,000
+     * times greater than the preceding one: 1,000,000,000 is "one billion"
+     * and 1,000,000,000,000 is "one trillion."  In British English, each
+     * successive "-illion" is one million times greater than the one before:
+     * "one billion" is 1,000,000,000,000 (or what Americans would call a
+     * "trillion"), and "one trillion" is 1,000,000,000,000,000,000.
+     * 1,000,000,000 in British English is "one thousand million."  (This
+     * value is sometimes called a "milliard," but this word seems to have
+     * fallen into disuse.)
+     */
+    public static final String ukEnglish =
+        "%simplified:\n"
+        + "    -x: minus >>;\n"
+        + "    x.x: << point >>;\n"
+        + "    zero; one; two; three; four; five; six; seven; eight; nine;\n"
+        + "    ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen;\n"
+        + "        seventeen; eighteen; nineteen;\n"
+        + "    20: twenty[->>];\n"
+        + "    30: thirty[->>];\n"
+        + "    40: forty[->>];\n"
+        + "    50: fifty[->>];\n"
+        + "    60: sixty[->>];\n"
+        + "    70: seventy[->>];\n"
+        + "    80: eighty[->>];\n"
+        + "    90: ninety[->>];\n"
+        + "    100: << hundred[ >>];\n"
+        + "    1000: << thousand[ >>];\n"
+        + "    1,000,000: << million[ >>];\n"
+        + "    1,000,000,000,000: << billion[ >>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        + "%alt-teens:\n"
+        + "    =%simplified=;\n"
+        + "    1000>: <%%alt-hundreds<[ >>];\n"
+        + "    10,000: =%simplified=;\n"
+        + "    1,000,000: << million[ >%simplified>];\n"
+        + "    1,000,000,000,000: << billion[ >%simplified>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        + "%%alt-hundreds:\n"
+        + "    0: SHOULD NEVER GET HERE!;\n"
+        + "    10: <%simplified< thousand;\n"
+        + "    11: =%simplified= hundred>%%empty>;\n"
+        + "%%empty:\n"
+        + "    0:;"
+        + "%ordinal:\n"
+        + "    zeroth; first; second; third; fourth; fifth; sixth; seventh;\n"
+        + "        eighth; ninth;\n"
+        + "    tenth; eleventh; twelfth; thirteenth; fourteenth;\n"
+        + "        fifteenth; sixteenth; seventeenth; eighteenth;\n"
+        + "        nineteenth;\n"
+        + "    twentieth; twenty->>;\n"
+        + "    30: thirtieth; thirty->>;\n"
+        + "    40: fortieth; forty->>;\n"
+        + "    50: fiftieth; fifty->>;\n"
+        + "    60: sixtieth; sixty->>;\n"
+        + "    70: seventieth; seventy->>;\n"
+        + "    80: eightieth; eighty->>;\n"
+        + "    90: ninetieth; ninety->>;\n"
+        + "    100: <%simplified< hundredth; <%simplified< hundred >>;\n"
+        + "    1000: <%simplified< thousandth; <%simplified< thousand >>;\n"
+        + "    1,000,000: <%simplified< millionth; <%simplified< million >>;\n"
+        + "    1,000,000,000,000: <%simplified< billionth;\n"
+        + "        <%simplified< billion >>;\n"
+        + "    1,000,000,000,000,000: =#,##0=;"
+        + "%default:\n"
+        + "    -x: minus >>;\n"
+        + "    x.x: << point >>;\n"
+        + "    =%simplified=;\n"
+        + "    100: << hundred[ >%%and>];\n"
+        + "    1000: << thousand[ >%%and>];\n"
+        + "    100,000>>: << thousand[>%%commas>];\n"
+        + "    1,000,000: << million[>%%commas>];\n"
+        + "    1,000,000,000,000: << billion[>%%commas>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        + "%%and:\n"
+        + "    and =%default=;\n"
+        + "    100: =%default=;\n"
+        + "%%commas:\n"
+        + "    ' and =%default=;\n"
+        + "    100: , =%default=;\n"
+        + "    1000: , <%default< thousand, >%default>;\n"
+        + "    1,000,000: , =%default=;"
+        + "%%lenient-parse:\n"
+        + "    & ' ' , ',' ;\n";
+    // Could someone please correct me if I'm wrong about "milliard" falling
+    // into disuse, or have missed any other details of how large numbers
+    // are rendered.  Also, could someone please provide me with information
+    // on which other English-speaking countries use which system?  Right now,
+    // I'm assuming that the U.S. system is used in Canada and that all the
+    // other English-speaking countries follow the British system.  Can
+    // someone out there confirm this?
+
+    /**
+     * Spellout rules for Spanish.  The Spanish rules are quite similar to
+     * the English rules, but there are some important differences:
+     * First, we have to provide separate rules for most of the twenties
+     * because the ones digit frequently picks up an accent mark that it
+     * doesn't have when standing alone.  Second, each multiple of 100 has
+     * to be specified separately because the multiplier on 100 very often
+     * changes form in the contraction: 500 is "quinientos," not
+     * "cincocientos."  In addition, the word for 100 is "cien" when
+     * standing alone, but changes to "ciento" when followed by more digits.
+     * There also some other differences.
+     */
+    public static final String spanish =
+        // negative-number and fraction rules
+        "-x: menos >>;\n"
+        + "x.x: << punto >>;\n"
+        // words for values from 0 to 19
+        + "cero; uno; dos; tres; cuatro; cinco; seis; siete; ocho; nueve;\n"
+        + "diez; once; doce; trece; catorce; quince; diecis\u00e9is;\n"
+        + "    diecisiete; dieciocho; diecinueve;\n"
+        // words for values from 20 to 29 (necessary because the ones digit
+        // often picks up an accent mark it doesn't have when standing alone)
+        + "veinte; veintiuno; veintid\u00f3s; veintitr\u00e9s; veinticuatro;\n"
+        + "    veinticinco; veintis\u00e9is; veintisiete; veintiocho;\n"
+        + "    veintinueve;\n"
+        // words for multiples of 10 (notice that the tens digit is separated
+        // from the ones digit by the word "y".)
+        + "30: treinta[ y >>];\n"
+        + "40: cuarenta[ y >>];\n"
+        + "50: cincuenta[ y >>];\n"
+        + "60: sesenta[ y >>];\n"
+        + "70: setenta[ y >>];\n"
+        + "80: ochenta[ y >>];\n"
+        + "90: noventa[ y >>];\n"
+        // 100 by itself is "cien," but 100 followed by something is "cineto"
+        + "100: cien;\n"
+        + "101: ciento >>;\n"
+        // words for multiples of 100 (must be stated because they're
+        // rarely simple concatenations)
+        + "200: doscientos[ >>];\n"
+        + "300: trescientos[ >>];\n"
+        + "400: cuatrocientos[ >>];\n"
+        + "500: quinientos[ >>];\n"
+        + "600: seiscientos[ >>];\n"
+        + "700: setecientos[ >>];\n"
+        + "800: ochocientos[ >>];\n"
+        + "900: novecientos[ >>];\n"
+        // for 1,000, the multiplier on "mil" is omitted: 2,000 is "dos mil,"
+        // but 1,000 is just "mil."
+        + "1000: mil[ >>];\n"
+        + "2000: << mil[ >>];\n"
+        // 1,000,000 is "un millon," not "uno millon"
+        + "1,000,000: un mill\u00f3n[ >>];\n"
+        + "2,000,000: << mill\u00f3n[ >>];\n"
+        // overflow rule
+        + "1,000,000,000: =#,##0= (incomplete data);";
+    // The Spanish rules are incomplete.  I'm missing information on negative
+    // numbers and numbers with fractional parts.  I also don't have
+    // information on numbers higher than the millions
+
+    /**
+     * Spellout rules for French.  French adds some interesting quirks of its
+     * own: 1) The word "et" is interposed between the tens and ones digits,
+     * but only if the ones digit if 1: 20 is "vingt," and 2 is "vingt-deux,"
+     * but 21 is "vingt-et-un."  2)  There are no words for 70, 80, or 90.
+     * "quatre-vingts" ("four twenties") is used for 80, and values proceed
+     * by score from 60 to 99 (e.g., 73 is "soixante-treize" ["sixty-thirteen"]).
+     * Numbers from 1,100 to 1,199 are rendered as hundreds rather than
+     * thousands: 1,100 is "onze cents" ("eleven hundred"), rather than
+     * "mille cent" ("one thousand one hundred")
+     */
+    public static final String french =
+        // the main rule set
+        "%main:\n"
+               // negative-number and fraction rules
+        + "    -x: moins >>;\n"
+        + "    x.x: << virgule >>;\n"
+               // words for numbers from 0 to 10
+        + "    z\u00e9ro; un; deux; trois; quatre; cinq; six; sept; huit; neuf;\n"
+        + "    dix; onze; douze; treize; quatorze; quinze; seize;\n"
+        + "        dix-sept; dix-huit; dix-neuf;\n"
+               // ords for the multiples of 10: %%alt-ones inserts "et"
+               // when needed
+        + "    20: vingt[->%%alt-ones>];\n"
+        + "    30: trente[->%%alt-ones>];\n"
+        + "    40: quarante[->%%alt-ones>];\n"
+        + "    50: cinquante[->%%alt-ones>];\n"
+               // rule for 60.  The /20 causes this rule's multiplier to be
+               // 20 rather than 10, allowinhg us to recurse for all values
+               // from 60 to 79...
+        + "    60/20: soixante[->%%alt-ones>];\n"
+               // ...except for 71, which must be special-cased
+        + "    71: soixante et onze;\n"
+               // at 72, we have to repeat the rule for 60 to get us to 79
+        + "    72/20: soixante->%%alt-ones>;\n"
+               // at 80, we state a new rule with the phrase for 80.  Since
+               // it changes form when there's a ones digit, we need a second
+               // rule at 81.  This rule also includes "/20," allowing it to
+               // be used correctly for all values up to 99
+        + "    80: quatre-vingts; 81/20: quatre-vingt->>;\n"
+               // "cent" becomes plural when preceded by a multiplier, and
+               // the multiplier is omitted from the singular form
+        + "    100: cent[ >>];\n"
+        + "    200: << cents[ >>];\n"
+        + "    1000: mille[ >>];\n"
+               // values from 1,100 to 1,199 are rendered as "onze cents..."
+               // instead of "mille cent..."  The > after "1000" decreases
+               // the rule's exponent, causing its multiplier to be 100 instead
+               // of 1,000.  This prevents us from getting "onze cents cent
+               // vingt-deux" ("eleven hundred one hundred twenty-two").
+        + "    1100>: onze cents[ >>];\n"
+               // at 1,200, we go back to formating in thousands, so we
+               // repeat the rule for 1,000
+        + "    1200: mille >>;\n"
+               // at 2,000, the multiplier is added
+        + "    2000: << mille[ >>];\n"
+        + "    1,000,000: << million[ >>];\n"
+        + "    1,000,000,000: << milliarde[ >>];\n"
+        + "    1,000,000,000,000: << billion[ >>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        // %%alt-ones is used to insert "et" when the ones digit is 1
+        + "%%alt-ones:\n"
+        + "    ; et-un; =%main=;";
+
+    /**
+     * Spellout rules for Swiss French.  Swiss French differs from French French
+     * in that it does have words for 70, 80, and 90.  This rule set shows them,
+     * and is simpler as a result.
+     */
+    public static final String swissFrench =
+        "%main:\n"
+        + "    -x: moins >>;\n"
+        + "    x.x: << virgule >>;\n"
+        + "    z\u00e9ro; un; deux; trois; quatre; cinq; six; sept; huit; neuf;\n"
+        + "    dix; onze; douze; treize; quatorze; quinze; seize;\n"
+        + "        dix-sept; dix-huit; dix-neuf;\n"
+        + "    20: vingt[->%%alt-ones>];\n"
+        + "    30: trente[->%%alt-ones>];\n"
+        + "    40: quarante[->%%alt-ones>];\n"
+        + "    50: cinquante[->%%alt-ones>];\n"
+        + "    60: soixante[->%%alt-ones>];\n"
+               // notice new words for 70, 80, and 90
+        + "    70: septante[->%%alt-ones>];\n"
+        + "    80: octante[->%%alt-ones>];\n"
+        + "    90: nonante[->%%alt-ones>];\n"
+        + "    100: cent[ >>];\n"
+        + "    200: << cents[ >>];\n"
+        + "    1000: mille[ >>];\n"
+        + "    1100>: onze cents[ >>];\n"
+        + "    1200: mille >>;\n"
+        + "    2000: << mille[ >>];\n"
+        + "    1,000,000: << million[ >>];\n"
+        + "    1,000,000,000: << milliarde[ >>];\n"
+        + "    1,000,000,000,000: << billion[ >>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        + "%%alt-ones:\n"
+        + "    ; et-un; =%main=;";
+    // I'm not 100% sure about Swiss French.  Is
+    // this correct?  Is "onze cents" commonly used for 1,100 in both France
+    // and Switzerland?  Can someone fill me in on the rules for the other
+    // French-speaking countries?  I've heard conflicting opinions on which
+    // version is used in Canada, and I understand there's an alternate set
+    // of words for 70, 80, and 90 that is used somewhere, but I don't know
+    // what those words are or where they're used.
+
+    /**
+     * Spellout rules for German.  German also adds some interesting
+     * characteristics.  For values below 1,000,000, numbers are customarily
+     * written out as a single word.  And the ones digit PRECEDES the tens
+     * digit (e.g., 23 is "dreiundzwanzig," not "zwanzigunddrei").
+     */
+    public static final String german =
+        // 1 is "eins" when by itself, but turns into "ein" in most
+        // combinations
+        "%alt-ones:\n"
+        + "    null; eins; =%%main=;\n"
+        + "%%main:\n"
+               // words for numbers from 0 to 12.  Notice that the values
+               // from 13 to 19 can derived algorithmically, unlike in most
+               // other languages
+        + "    null; ein; zwei; drei; vier; f\u00fcnf; sechs; sieben; acht; neun;\n"
+        + "    zehn; elf; zw\u00f6lf; >>zehn;\n"
+               // rules for the multiples of 10.  Notice that the ones digit
+               // goes on the front
+        + "    20: [>>und]zwanzig;\n"
+        + "    30: [>>und]drei\u00dfig;\n"
+        + "    40: [>>und]vierzig;\n"
+        + "    50: [>>und]f\u00fcnfzig;\n"
+        + "    60: [>>und]sechzig;\n"
+        + "    70: [>>und]siebzig;\n"
+        + "    80: [>>und]achtzig;\n"
+        + "    90: [>>und]neunzig;\n"
+        + "    100: hundert[>%alt-ones>];\n"
+        + "    200: <<hundert[>%alt-ones>];\n"
+        + "    1000: tausend[>%alt-ones>];\n"
+        + "    2000: <<tausend[>%alt-ones>];\n"
+        + "    1,000,000: eine Million[ >%alt-ones>];\n"
+        + "    2,000,000: << Millionen[ >%alt-ones>];\n"
+        + "    1,000,000,000: eine Milliarde[ >%alt-ones>];\n"
+        + "    2,000,000,000: << Milliarden[ >%alt-ones>];\n"
+        + "    1,000,000,000,000: eine Billion[ >%alt-ones>];\n"
+        + "    2,000,000,000,000: << Billionen[ >%alt-ones>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;";
+    // again, I'm not 100% sure of these rules.  I think both "hundert" and
+    // "einhundert" are correct or 100, but I'm not sure which is preferable
+    // in situations where this framework is likely to be used.  Also, is it
+    // really true that numbers are run together into compound words all the
+    // time?  And again, I'm missing information on negative numbers and
+    // decimas.
+
+    /**
+     * Spellout rules for Italian.  Like German, most Italian numbers are
+     * written as single words.  What makes these rules complicated is the rule
+     * that says that when a word ending in a vowel and a word beginning with
+     * a vowel are combined into a compound, the vowel is dropped from the
+     * end of the first word: 180 is "centottanta," not "centoottanta."
+     * The complexity of this rule set is to produce this behavior.
+     */
+    public static final String italian =
+        // main rule set.  Follows the patterns of the preceding rule sets,
+        // except that the final vowel is omitted from words ending in
+        // vowels when they are followed by another word; instead, we have
+        // separate rule sets that are identical to this one, except that
+        // all the words that don't begin with a vowel have a vowel tacked
+        // onto them at the front.  A word ending in a vowel calls a
+        // substitution that will supply that vowel, unless that vowel is to
+        // be elided.
+        "%main:\n"
+        + "    -x: meno >>;\n"
+        + "    x.x: << virgola >>;\n"
+        + "    zero; uno; due; tre; quattro; cinque; sei; sette; otto;\n"
+        + "        nove;\n"
+        + "    dieci; undici; dodici; tredici; quattordici; quindici; sedici;\n"
+        + "        diciasette; diciotto; diciannove;\n"
+        + "    20: venti; vent>%%with-i>;\n"
+        + "    30: trenta; trent>%%with-i>;\n"
+        + "    40: quaranta; quarant>%%with-a>;\n"
+        + "    50: cinquanta; cinquant>%%with-a>;\n"
+        + "    60: sessanta; sessant>%%with-a>;\n"
+        + "    70: settanta; settant>%%with-a>;\n"
+        + "    80: ottanta; ottant>%%with-a>;\n"
+        + "    90: novanta; novant>%%with-a>;\n"
+        + "    100: cento; cent[>%%with-o>];\n"
+        + "    200: <<cento; <<cent[>%%with-o>];\n"
+        + "    1000: mille; mill[>%%with-i>];\n"
+        + "    2000: <<mila; <<mil[>%%with-a>];\n"
+        + "    100,000>>: <<mila[ >>];\n"
+        + "    1,000,000: =#,##0= (incomplete data);\n"
+        + "%%with-a:\n"
+        + "    azero; uno; adue; atre; aquattro; acinque; asei; asette; otto;\n"
+        + "        anove;\n"
+        + "    adieci; undici; adodici; atredici; aquattordici; aquindici; asedici;\n"
+        + "        adiciasette; adiciotto; adiciannove;\n"
+        + "    20: aventi; avent>%%with-i>;\n"
+        + "    30: atrenta; atrent>%%with-i>;\n"
+        + "    40: aquaranta; aquarant>%%with-a>;\n"
+        + "    50: acinquanta; acinquant>%%with-a>;\n"
+        + "    60: asessanta; asessant>%%with-a>;\n"
+        + "    70: asettanta; asettant>%%with-a>;\n"
+        + "    80: ottanta; ottant>%%with-a>;\n"
+        + "    90: anovanta; anovant>%%with-a>;\n"
+        + "    100: acento; acent[>%%with-o>];\n"
+        + "    200: <%%with-a<cento; <%%with-a<cent[>%%with-o>];\n"
+        + "    1000: amille; amill[>%%with-i>];\n"
+        + "    2000: <%%with-a<mila; <%%with-a<mil[>%%with-a>];\n"
+        + "    100,000: =%main=;\n"
+        + "%%with-i:\n"
+        + "    izero; uno; idue; itre; iquattro; icinque; isei; isette; otto;\n"
+        + "        inove;\n"
+        + "    idieci; undici; idodici; itredici; iquattordici; iquindici; isedici;\n"
+        + "        idiciasette; idiciotto; idiciannove;\n"
+        + "    20: iventi; ivent>%%with-i>;\n"
+        + "    30: itrenta; itrent>%%with-i>;\n"
+        + "    40: iquaranta; iquarant>%%with-a>;\n"
+        + "    50: icinquanta; icinquant>%%with-a>;\n"
+        + "    60: isessanta; isessant>%%with-a>;\n"
+        + "    70: isettanta; isettant>%%with-a>;\n"
+        + "    80: ottanta; ottant>%%with-a>;\n"
+        + "    90: inovanta; inovant>%%with-a>;\n"
+        + "    100: icento; icent[>%%with-o>];\n"
+        + "    200: <%%with-i<cento; <%%with-i<cent[>%%with-o>];\n"
+        + "    1000: imille; imill[>%%with-i>];\n"
+        + "    2000: <%%with-i<mila; <%%with-i<mil[>%%with-a>];\n"
+        + "    100,000: =%main=;\n"
+        + "%%with-o:\n"
+        + "    ozero; uno; odue; otre; oquattro; ocinque; osei; osette; otto;\n"
+        + "        onove;\n"
+        + "    odieci; undici; ododici; otredici; oquattordici; oquindici; osedici;\n"
+        + "        odiciasette; odiciotto; odiciannove;\n"
+        + "    20: oventi; ovent>%%with-i>;\n"
+        + "    30: otrenta; otrent>%%with-i>;\n"
+        + "    40: oquaranta; oquarant>%%with-a>;\n"
+        + "    50: ocinquanta; ocinquant>%%with-a>;\n"
+        + "    60: osessanta; osessant>%%with-a>;\n"
+        + "    70: osettanta; osettant>%%with-a>;\n"
+        + "    80: ottanta; ottant>%%with-a>;\n"
+        + "    90: onovanta; onovant>%%with-a>;\n"
+        + "    100: ocento; ocent[>%%with-o>];\n"
+        + "    200: <%%with-o<cento; <%%with-o<cent[>%%with-o>];\n"
+        + "    1000: omille; omill[>%%with-i>];\n"
+        + "    2000: <%%with-o<mila; <%%with-o<mil[>%%with-a>];\n"
+        + "    100,000: =%main=;\n";
+    // Can someone confirm that I did the vowel-eliding thing right?  I'm
+    // not 100% sure I'm doing it in all the right places, or completely
+    // correctly.  Also, I don't have information for negatives and decimals,
+    // and I lack words fror values from 1,000,000 on up.
+
+    /**
+     * Spellout rules for Swedish.
+     */
+    public static final String swedish =
+        "noll; ett; tv\u00e5; tre; fyra; fem; sex; sjo; \u00e5tta; nio;\n"
+        + "tio; elva; tolv; tretton; fjorton; femton; sexton; sjutton; arton; nitton;\n"
+        + "20: tjugo[>>];\n"
+        + "30: trettio[>>];\n"
+        + "40: fyrtio[>>];\n"
+        + "50: femtio[>>];\n"
+        + "60: sextio[>>];\n"
+        + "70: sjuttio[>>];\n"
+        + "80: \u00e5ttio[>>];\n"
+        + "90: nittio[>>];\n"
+        + "100: hundra[>>];\n"
+        + "200: <<hundra[>>];\n"
+        + "1000: tusen[ >>];\n"
+        + "2000: << tusen[ >>];\n"
+        + "1,000,000: en miljon[ >>];\n"
+        + "2,000,000: << miljon[ >>];\n"
+        + "1,000,000,000: en miljard[ >>];\n"
+        + "2,000,000,000: << miljard[ >>];\n"
+        + "1,000,000,000,000: en biljon[ >>];\n"
+        + "2,000,000,000,000: << biljon[ >>];\n"
+        + "1,000,000,000,000,000: =#,##0=";
+    // can someone supply me with information on negatives and decimals?
+
+    /**
+     * Spellout rules for Dutch.  Notice that in Dutch, as in German,
+     * the ones digit precedes the tens digit.
+     */
+    public static final String dutch =
+        " -x: min >>;\n"
+        + "x.x: << komma >>;\n"
+        + "(zero?); een; twee; drie; vier; vijf; zes; zeven; acht; negen;\n"
+        + "tien; elf; twaalf; dertien; veertien; vijftien; zestien;\n"
+        + "zeventien; achtien; negentien;\n"
+        + "20: [>> en ]twintig;\n"
+        + "30: [>> en ]dertig;\n"
+        + "40: [>> en ]veertig;\n"
+        + "50: [>> en ]vijftig;\n"
+        + "60: [>> en ]zestig;\n"
+        + "70: [>> en ]zeventig;\n"
+        + "80: [>> en ]tachtig;\n"
+        + "90: [>> en ]negentig;\n"
+        + "100: << honderd[ >>];\n"
+        + "1000: << duizend[ >>];\n"
+        + "1,000,000: << miljoen[ >>];\n"
+        + "1,000,000,000: << biljoen[ >>];\n"
+        + "1,000,000,000,000: =#,##0=";
+
+    /**
+     * Spellout rules for Japanese.  In Japanese, there really isn't any
+     * distinction between a number written out in digits and a number
+     * written out in words: the ideographic characters are both digits
+     * and words.  This rule set provides two variants:  %traditional
+     * uses the traditional CJK numerals (which are also used in China
+     * and Korea).  %financial uses alternate ideographs for many numbers
+     * that are harder to alter than the traditional numerals (one could
+     * fairly easily change a one to
+     * a three just by adding two strokes, for example).  This is also done in
+     * the other countries using Chinese idographs, but different ideographs
+     * are used in those places.
+     */
+    public static final String japanese =
+        "%financial:\n"
+        + "    \u96f6; \u58f1; \u5f10; \u53c2; \u56db; \u4f0d; \u516d; \u4e03; \u516b; \u4e5d;\n"
+        + "    \u62fe[>>];\n"
+        + "    20: <<\u62fe[>>];\n"
+        + "    100: <<\u767e[>>];\n"
+        + "    1000: <<\u5343[>>];\n"
+        + "    10,000: <<\u4e07[>>];\n"
+        + "    100,000,000: <<\u5104[>>];\n"
+        + "    1,000,000,000,000: <<\u5146[>>];\n"
+        + "    10,000,000,000,000,000: =#,##0=;\n"
+        + "%traditional:\n"
+        + "    \u96f6; \u4e00; \u4e8c; \u4e09; \u56db; \u4e94; \u516d; \u4e03; \u516b; \u4e5d;\n"
+        + "    \u5341[>>];\n"
+        + "    20: <<\u5341[>>];\n"
+        + "    100: <<\u767e[>>];\n"
+        + "    1000: <<\u5343[>>];\n"
+        + "    10,000: <<\u4e07[>>];\n"
+        + "    100,000,000: <<\u5104[>>];\n"
+        + "    1,000,000,000,000: <<\u5146[>>];\n"
+        + "    10,000,000,000,000,000: =#,##0=;";
+    // Can someone supply me with the right fraud-proof ideographs for
+    // Simplified and Traditional Chinese, and for Korean?  Can someone
+    // supply me with information on negatives and decimals?
+
+    /**
+     * Spellout rules for Greek.  Again in Greek we have to supply the words
+     * for the multiples of 100 because they can't be derived algorithmically.
+     * Also, the tens dgit changes form when followed by a ones digit: an
+     * accent mark disappears from the tens digit and moves to the ones digit.
+     * Therefore, instead of using the [] notation, we actually have to use
+     * two separate rules for each multiple of 10 to show the two forms of
+     * the word.
+     */
+    public static final String greek =
+        "zero (incomplete data); \u03ad\u03bd\u03b1; \u03b4\u03cd\u03bf; \u03b4\u03c1\u03af\u03b1; "
+        + "\u03c4\u03ad\u03c3\u03c3\u03b5\u03c1\u03b1; \u03c0\u03ad\u03bd\u03c4\u03b5; "
+        + "\u03ad\u03be\u03b9; \u03b5\u03c0\u03c4\u03ac; \u03bf\u03ba\u03c4\u03ce; "
+        + "\u03b5\u03bd\u03bd\u03ad\u03b1;\n"
+        + "10: \u03b4\u03ad\u03ba\u03b1; "
+        + "\u03ad\u03bd\u03b4\u03b5\u03ba\u03b1; \u03b4\u03ce\u03b4\u03b5\u03ba\u03b1; "
+        + "\u03b4\u03b5\u03ba\u03b1>>;\n"
+        + "20: \u03b5\u03af\u03ba\u03bf\u03c3\u03b9; \u03b5\u03b9\u03ba\u03bf\u03c3\u03b9>>;\n"
+        + "30: \u03c4\u03c1\u03b9\u03ac\u03bd\u03c4\u03b1; \u03c4\u03c1\u03b9\u03b1\u03bd\u03c4\u03b1>>;\n"
+        + "40: \u03c3\u03b1\u03c1\u03ac\u03bd\u03c4\u03b1; \u03c3\u03b1\u03c1\u03b1\u03bd\u03c4\u03b1>>;\n"
+        + "50: \u03c0\u03b5\u03bd\u03ae\u03bd\u03c4\u03b1; \u03c0\u03b5\u03bd\u03b7\u03bd\u03c4\u03b1>>;\n"
+        + "60: \u03b5\u03be\u03ae\u03bd\u03c4\u03b1; \u03b5\u03be\u03b7\u03bd\u03c4\u03b1>>;\n"
+        + "70: \u03b5\u03b2\u03b4\u03bf\u03bc\u03ae\u03bd\u03c4\u03b1; "
+        + "\u03b5\u03b2\u03b4\u03bf\u03bc\u03b7\u03bd\u03c4\u03b1>>;\n"
+        + "80: \u03bf\u03b3\u03b4\u03cc\u03bd\u03c4\u03b1; \u03bf\u03b3\u03b4\u03bf\u03bd\u03c4\u03b1>>;\n"
+        + "90: \u03b5\u03bd\u03bd\u03b5\u03bd\u03ae\u03bd\u03c4\u03b1; "
+        + "\u03b5\u03bd\u03bd\u03b5\u03bd\u03b7\u03bd\u03c4\u03b1>>;\n"
+        + "100: \u03b5\u03ba\u03b1\u03c4\u03cc[\u03bd >>];\n"
+        + "200: \u03b4\u03b9\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "300: \u03c4\u03c1\u03b9\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "400: \u03c4\u03b5\u03c4\u03c1\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "500: \u03c0\u03b5\u03bd\u03c4\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "600: \u03b5\u03be\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "700: \u03b5\u03c0\u03c4\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "800: \u03bf\u03ba\u03c4\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "900: \u03b5\u03bd\u03bd\u03b9\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+        + "1000: \u03c7\u03af\u03bb\u03b9\u03b1[ >>];\n"
+        + "2000: << \u03c7\u03af\u03bb\u03b9\u03b1[ >>];\n"
+        + "1,000,000: << \u03b5\u03ba\u03b1\u03c4\u03bf\u03bc\u03bc\u03b9\u03cc\u03c1\u03b9\u03bf[ >>];\n"
+        + "1,000,000,000: << \u03b4\u03b9\u03c3\u03b5\u03ba\u03b1\u03c4\u03bf\u03bc\u03bc\u03b9\u03cc\u03c1\u03b9\u03bf[ >>];\n"
+        + "1,000,000,000,000: =#,##0=";
+    // Can someone supply me with information on negatives and decimals?
+    // I'm also missing the word for zero.  Can someone clue me in?
+
+    /**
+     * Spellout rules for Russian.
+     */
+    public static final String russian =
+        "\u043d\u043e\u043b\u044c; \u043e\u0434\u0438\u043d; \u0434\u0432\u0430; \u0442\u0440\u0438; "
+        + "\u0447\u0435\u0442\u044b\u0440\u0435; \u043f\u044f\u0442; \u0448\u0435\u0441\u0442; "
+        + "\u0441\u0435\u043c\u044c; \u0432\u043e\u0441\u0435\u043c\u044c; \u0434\u0435\u0432\u044f\u0442;\n"
+        + "10: \u0434\u0435\u0441\u044f\u0442; "
+        + "\u043e\u0434\u0438\u043d\u043d\u0430\u0434\u0446\u0430\u0442\u044c;\n"
+        + "\u0434\u0432\u0435\u043d\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+        + "\u0442\u0440\u0438\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+        + "\u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c;\n"
+        + "15: \u043f\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+        + "\u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+        + "\u0441\u0435\u043c\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+        + "\u0432\u043e\u0441\u0435\u043c\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+        + "\u0434\u0435\u0432\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c;\n"
+        + "20: \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c[ >>];\n"
+        + "30: \u0442\u0440\u043b\u0434\u0446\u0430\u0442\u044c[ >>];\n"
+        + "40: \u0441\u043e\u0440\u043e\u043a[ >>];\n"
+        + "50: \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+        + "60: \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+        + "70: \u0441\u0435\u043c\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+        + "80: \u0432\u043e\u0441\u0435\u043c\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+        + "90: \u0434\u0435\u0432\u044f\u043d\u043e\u0441\u0442\u043e[ >>];\n"
+        + "100: \u0441\u0442\u043e[ >>];\n"
+        + "200: << \u0441\u0442\u043e[ >>];\n"
+        + "1000: \u0442\u044b\u0441\u044f\u0447\u0430[ >>];\n"
+        + "2000: << \u0442\u044b\u0441\u044f\u0447\u0430[ >>];\n"
+        + "1,000,000: \u043c\u0438\u043b\u043b\u0438\u043e\u043d[ >>];\n"
+        + "2,000,000: << \u043c\u0438\u043b\u043b\u0438\u043e\u043d[ >>];\n"
+        + "1,000,000,000: =#,##0=;";
+    // Can someone supply me with information on negatives and decimals?
+    // How about words for billions and trillions?
+
+    /**
+     * Spellout rules for Hebrew.  Hebrew actually has inflected forms for
+     * most of the lower-order numbers.  The masculine forms are shown
+     * here.
+     */
+    public static final String hebrew =
+        "zero (incomplete data); \u05d0\u05d4\u05d3; \u05e9\u05d2\u05d9\u05d9\u05dd; \u05e9\u05dc\u05d5\u05e9\u05d4;\n"
+        + "4: \u05d0\u05d3\u05d1\u05e6\u05d4; \u05d7\u05d2\u05d5\u05d9\u05e9\u05d4; \u05e9\u05e9\u05d4;\n"
+        + "7: \u05e9\u05d1\u05e6\u05d4; \u05e9\u05de\u05d5\u05d2\u05d4; \u05ea\u05e9\u05e6\u05d4;\n"
+        + "10: \u05e6\u05e9\u05d3\u05d4[ >>];\n"
+        + "20: \u05e6\u05e9\u05d3\u05d9\u05dd[ >>];\n"
+        + "30: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd[ >>];\n"
+        + "40: \u05d0\u05d3\u05d1\u05e6\u05d9\u05dd[ >>];\n"
+        + "50: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd[ >>];\n"
+        + "60: \u05e9\u05e9\u05d9\u05dd[ >>];\n"
+        + "70: \u05e9\u05d1\u05e6\u05d9\u05dd[ >>];\n"
+        + "80: \u05e9\u05de\u05d5\u05d2\u05d9\u05dd[ >>];\n"
+        + "90: \u05ea\u05e9\u05e6\u05d9\u05dd[ >>];\n"
+        + "100: \u05de\u05d0\u05d4[ >>];\n"
+        + "200: << \u05de\u05d0\u05d4[ >>];\n"
+        + "1000: \u05d0\u05dc\u05e3[ >>];\n"
+        + "2000: << \u05d0\u05dc\u05e3[ >>];\n"
+        + "1,000,000: =#,##0= (incomplete data);";
+    // This data is woefully incomplete.  Can someone fill me in on the
+    // various inflected forms of the numbers, which seem to be necessary
+    // to do Hebrew correctly?  Can somone supply me with data for values
+    // from 1,000,000 on up?  What about the word for zero?  What about
+    // information on negatives and decimals?
+
+    //========================================================================
+    // Simple examples
+    //========================================================================
+
+    /**
+     * This rule set adds an English ordinal abbreviation to the end of a
+     * number.  For example, 2 is formatted as "2nd".  Parsing doesn't work with
+     * this rule set.  To parse, use DecimalFormat on the numeral.
+     */
+    public static final String ordinal =
+        // this rule set formats the numeral and calls %%abbrev to
+        // supply the abbreviation
+        "%main:\n"
+        + "    =#,##0==%%abbrev=;\n"
+        // this rule set supplies the abbreviation
+        + "%%abbrev:\n"
+               // the abbreviations.  Everything from 4 to 19 ends in "th"
+        + "    th; st; nd; rd; th;\n"
+               // at 20, we begin repeating the cycle every 10 (13 is "13th",
+               // but 23 and 33 are "23rd" and "33rd")  We do this by
+               // ignoring all bug the ones digit in selecting the abbreviation
+        + "    20: >>;\n"
+               // at 100, we repeat the whole cycle by considering only the
+               // tens and ones digits in picking an abbreviation
+        + "    100: >>;\n";
+
+    /**
+     * This is a simple message-formatting example.  Normally one would
+     * use ChoiceFormat and MessageFormat to do something this simple,
+     * but this shows it could be done with RuleBasedNumberFormat too.
+     * A message-formatting example that might work better with
+     * RuleBasedNumberFormat appears later.
+     */
+    public static final String message1 =
+        // this rule surrounds whatever the other rules produce with the
+        // rest of the sentence
+        "x.0: The search found <<.;\n"
+        // use words for values below 10 (and change to "file" for 1)
+        + "no files; one file; two files; three files; four files; five files;\n"
+        + "    six files; seven files; eight files; nine files;\n"
+        // use numerals for values higher than 10
+        + "=#,##0= files;";
+
+    //========================================================================
+    // Fraction handling
+    //
+    // The next few examples show how RuleBasedNumberFormat can be used for
+    // more flexible handling of fractions
+    //========================================================================
+
+    /**
+     * This example formats a number in one of the two styles often used
+     * on checks.  %dollars-and-hundredths formats cents as hundredths of
+     * a dollar (23.40 comes out as "twenty-three and 40/100 dollars").
+     * %dollars-and-cents formats in dollars and cents (23.40 comes out as
+     * "twenty-three dollars and forty cents")
+     */
+    public static final String dollarsAndCents =
+        // this rule set formats numbers as dollars and cents
+        "%dollars-and-cents:\n"
+               // if the value is 1 or more, put "xx dollars and yy cents".
+               // the "and y cents" part is suppressed if the value is an
+               // even number of dollars
+        + "    x.0: << [and >%%cents>];\n"
+               // if the value is between 0 and 1, put "xx cents"
+        + "    0.x: >%%cents>;\n"
+               // these three rules take care of the singular and plural
+               // forms of "dollar" and use %%main to format the number
+        + "    0: zero dollars; one dollar; =%%main= dollars;\n"
+        // these are the regular U.S. English number spellout rules
+        + "%%main:\n"
+        + "    zero; one; two; three; four; five; six; seven; eight; nine;\n"
+        + "    ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen;\n"
+        + "        seventeen; eighteen; nineteen;\n"
+        + "    20: twenty[->>];\n"
+        + "    30: thirty[->>];\n"
+        + "    40: forty[->>];\n"
+        + "    50: fifty[->>];\n"
+        + "    60: sixty[->>];\n"
+        + "    70: seventy[->>];\n"
+        + "    80: eighty[->>];\n"
+        + "    90: ninety[->>];\n"
+        + "    100: << hundred[ >>];\n"
+        + "    1000: << thousand[ >>];\n"
+        + "    1,000,000: << million[ >>];\n"
+        + "    1,000,000,000: << billion[ >>];\n"
+        + "    1,000,000,000,000: << trillion[ >>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        // this rule takes care of the fractional part of the value.  It
+        // multiplies the fractional part of the number being formatted by
+        // 100, formats it with %%main, and then addes the word "cent" or
+        // "cents" to the end.  (The text in brackets is omitted if the
+        // numerator of the fraction is 1.)
+        + "%%cents:\n"
+        + "    100: <%%main< cent[s];\n"
+
+        // this rule set formats numbers as dollars and hundredths of dollars
+        + "%dollars-and-hundredths:\n"
+               // this rule takes care of the general shell of the output
+               // string.  We always show the cents, even when there aren't
+               // any.  Because of this, the word is always "dollars"--
+               // we don't have to worry about the singular form.  We use
+               // %%main to format the number of dollars and %%hundredths to
+               // format the number of cents
+        + "    x.0: <%%main< and >%%hundredths>/100 dollars;\n"
+        // this rule set formats the cents for %dollars-and-hundredths.
+        // It multiplies the fractional part of the number by 100 and formats
+        // the result using a DecimalFormat ("00" tells the DecimalFormat to
+        // always use two digits, even for numbers under 10)
+        + "%%hundredths:\n"
+        + "    100: <00<;\n";
+
+    /**
+     * This rule set shows the fractional part of the number as a fraction
+     * with a power of 10 as the denominator.  Some languages don't spell
+     * out the fractional part of a number as "point one two three," but
+     * always render it as a fraction.  If we still want to treat the fractional
+     * part of the number as a decimal, then the fraction's denominator
+     * is always a power of 10.  This example does that: 23.125 is formatted
+     * as "twenty-three and one hundred twenty-five thousandths" (as opposed
+     * to "twenty-three point one two five" or "twenty-three and one eighth").
+     */
+    public static final String decimalAsFraction =
+        // the regular U.S. English spellout rules, with one difference
+        "%main:\n"
+        + "    -x: minus >>;\n"
+               // the difference.  This rule uses %%frac to show the fractional
+               // part of the number.  Text in brackets is omitted when the
+               // value is between 0 and 1 (causing 0.3 to come out as "three
+               // tenths" instead of "zero and three tenths").
+        + "    x.x: [<< and ]>%%frac>;\n"
+        + "    zero; one; two; three; four; five; six; seven; eight; nine;\n"
+        + "    ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen;\n"
+        + "        seventeen; eighteen; nineteen;\n"
+        + "    twenty[->>];\n"
+        + "    30: thirty[->>];\n"
+        + "    40: forty[->>];\n"
+        + "    50: fifty[->>];\n"
+        + "    60: sixty[->>];\n"
+        + "    70: seventy[->>];\n"
+        + "    80: eighty[->>];\n"
+        + "    90: ninety[->>];\n"
+        + "    100: << hundred[ >>];\n"
+        + "    1000: << thousand[ >>];\n"
+        + "    1,000,000: << million[ >>];\n"
+        + "    1,000,000,000: << billion[ >>];\n"
+        + "    1,000,000,000,000: << trillion[ >>];\n"
+        + "    1,000,000,000,000,000: =#,##0=;\n"
+        // the rule set that formats the fractional part of the number.
+        // The rule that is used is the one that, when its baase value is
+        // multiplied by the fractional part of the number being formatted,
+        // produces the result closest to zero.  Thus, the base values are
+        // prospective denominators of the fraction.  The << marks the place
+        // where the numerator of the fraction (the result of multiplying the
+        // fractional part of the number by the rule's base value) is
+        // placed.  Text in brackets is omitted when the numerator is 1, giving
+        // us the singular and plural forms of the words.
+        // [In languages where the singular and plural are completely different
+        // words, the rule can just be stated twice: the second time with
+        // the plural form.]
+        + "%%frac:\n"
+        + "    10: << tenth[s];\n"
+        + "    100: << hundredth[s];\n"
+        + "    1000: << thousandth[s];\n"
+        + "    10,000: << ten-thousandth[s];\n"
+        + "    100,000: << hundred-thousandth[s];\n"
+        + "    1,000,000: << millionth[s];";
+
+    /**
+     * Number with closest fraction.  This example formats a value using
+     * numerals, but shows the fractional part as a ratio (fraction) rather
+     * than a decimal.  The fraction always has a denominator between 2 and 10.
+     */
+    public static final String closestFraction =
+        "%main:\n"
+               // this rule formats the number if it's 1 or more.  It formats
+               // the integral part using a DecimalFormat ("#,##0" puts
+               // thousands separators in the right places) and the fractional
+               // part using %%frac.  If there is no fractional part, it
+               // just shows the integral part.
+        + "    x.0: <#,##0<[ >%%frac>];\n"
+               // this rule formats the number if it's between 0 and 1.  It
+               // shows only the fractional part (0.5 shows up as "1/2," not
+               // "0 1/2")
+        + "    0.x: >%%frac>;\n"
+        // the fraction rule set.  This works the same way as the one in the
+        // preceding example: We multiply the fractional part of the number
+        // being formatted by each rule's base value and use the rule that
+        // produces the result closest to 0 (or the first rule that produces 0).
+        // Since we only provide rules for the numbers from 2 to 10, we know
+        // we'll get a fraction with a denominator between 2 and 10.
+        // "<0<" causes the numerator of the fraction to be formatted
+        // using numerals
+        + "%%frac:\n"
+        + "    2: 1/2;\n"
+        + "    3: <0</3;\n"
+        + "    4: <0</4;\n"
+        + "    5: <0</5;\n"
+        + "    6: <0</6;\n"
+        + "    7: <0</7;\n"
+        + "    8: <0</8;\n"
+        + "    9: <0</9;\n"
+        + "    10: <0</10;\n";
+
+    /**
+     * American stock-price formatting.  Non-integral stock prices are still
+     * generally shown in eighths or sixteenths of dollars instead of dollars
+     * and cents.  This example formats stock prices in this way if possible,
+     * and in dollars and cents if not.
+     */
+    public static final String stock =
+        "%main:\n"
+               // this rule formats the integral part of the number in numerals
+               // and (if necessary) the fractional part using %%frac1
+        + "    x.0: <#,##0<[>%%frac1>];\n"
+               // this rule is used for values between 0 and 1 and omits the
+               // integral part
+        + "    0.x: >%%frac2>;\n"
+        // this rule set is used to format the fractional part of the number when
+        // there's an integral part before it (again, we try all denominators
+        // and use the "best" one)
+        + "%%frac1:\n"
+               // for even multiples of 1/4, format the fraction using the
+               // typographer's fractions
+        + "    4: <%%quarters<;\n"
+               // format the value as a number of eighths, sixteenths, or
+               // thirty-seconds, whichever produces the most accurate value.
+               // The apostrophe at the front of these rules is ignored, but
+               // it makes the space that follows it significant.  This puts a
+               // space between the value's integral and fractional parts so
+               // you can read it
+        + "    8: ' <0</8;\n"
+        + "    16: ' <0</16;\n"
+        + "    32: ' <0</32;\n"
+               // if we can't reasonably format the number in powers of 2,
+               // then show it as dollars and cents
+        + "    100: .<00<;\n"
+        // this rule set is used when the fractional part of the value stands
+        // alone
+        + "%%frac2:\n"
+        + "    4: <%%quarters<;\n"
+               // for fractions that we can't show using typographer's fractions,
+               // we don't have to put a space before the fraction
+        + "    8: <0</8;\n"
+        + "    16: <0</16;\n"
+        + "    32: <0</32;\n"
+               // but dollars and cents look better with a leading 0
+        + "    100: 0.<00<;\n"
+        // this rule set formats 1/4, 1/2, and 3/4 using typographer's fractions
+        + "%%quarters:\n"
+        + "    ; \u00bc; \u00bd; \u00be;\n"
+        // there are the lenient-parse rules.  These allow the user to type
+        // "1/4," "1/2," and "3/4" instead of their typographical counterparts
+        // and still have them be understood by the formatter
+        + "%%lenient-parse:\n"
+        + "    & '1/4' , \u00bc\n"
+        + "    & '1/2' , \u00bd\n"
+        + "    & '3/4' , \u00be\n;";
+
+    //========================================================================
+    // Changing dimensions
+    //
+    // The next few examples demonstrate using a RuleBasedNumberFormat to
+    // change the units a value is denominated in depending on its magnitude
+    //========================================================================
+
+    /**
+     * The example shows large numbers the way they often appear is nwespapers:
+     * 1,200,000 is formatted as "1.2 million".
+     */
+    public static final String abbEnglish =
+        "=#,##0=;\n"
+        // this is fairly self-explanatory, but note that the << substitution
+        // can show the fractional part of the substitution value if the user
+        // wants it
+        + "1,000,000: <##0.###< million;\n"
+        + "1,000,000,000: <##0.###< billion;\n"
+        + "1,000,000,000,000: <##0.###< trillion;\n";
+
+    /**
+     * This example takes a number of meters and formats it in whatever unit
+     * will produce a number with from one to three digits before the decimal
+     * point.  For example, 230,000 is formatted as "230 km".
+     */
+    public static final String units =
+        "%main:\n"
+               // for values between 0 and 1, delegate to %%small
+        + "    0.x: >%%small>;\n"
+               // otherwise, show between 3 and 6 significant digits of the value
+               // along with the most appropriate unit
+        + "    0: =##0.###= m;\n"
+        + "    1,000: <##0.###< km;\n"
+        + "    1,000,000: <##0.###< Mm;\n"
+        + "    1,000,000,000: <##0.###< Gm;\n"
+        + "    1,000,000,000,000: <#,##0.###< Tm;\n"
+        // %%small formats the number when it's less then 1.  It multiplies the
+        // value by one billion, and then uses %%small2 to actually do the
+        // formatting.
+        + "%%small:\n"
+        + "    1,000,000,000,000: <%%small2<;\n"
+        // this rule set actually formats small values.  %%small passes this
+        // rule set a number of picometers, and it takes care of scaling up as
+        // appropriate in exactly the same way %main does (we can't normally
+        // handle fractional values this way: here, we're concerned about
+        // magnitude; most of the time, we're concerned about precsion)
+        + "%%small2:\n"
+        + "    0: =##0= pm;\n"
+        + "    1,000: <##0.###< nm;\n"
+        + "    1,000,000: <##0.###< \u00b5m;\n"
+        + "    1,000,000,000: <##0.###< mm;\n";
+
+    /**
+     * A more complicated message-formatting example.  Here, in addition to
+     * handling the singular and plural versions of the word, the value is
+     * denominated in bytes, kilobytes, or megabytes depending on its magnitude.
+     * Also notice that it correctly treats a kilobyte as 1,024 bytes (not 1,000),
+     * and a megabyte as 1,024 kilobytes (not 1,000).
+     */
+    public static final String message2 =
+        // this rule supplies the shell of the sentence
+        "x.0: There << free space on the disk.;\n"
+        // handle singular and plural forms of "byte" (and format 0 as
+        // "There is no free space...")
+        + "0: is no;\n"
+        + "is one byte of;\n"
+        + "are =0= bytes of;\n"
+        // for values above 1,024, format the number in K (since "K" is usually
+        // promounced "K" regardless of whether it's singular or plural, we
+        // don't worry about the plural form).  The "/1024" here causes us to
+        // treat a K as 1,024 bytes rather than 1,000 bytes.
+        + "1024/1024: is <0<K of;\n"
+        // for values about 1,048,576, format the number in Mb.  Since "Mb" is
+        // usually promounced "meg" in singular and "megs" in plural, we do have
+        // both singular and plural forms.  Again, notice we treat a megabyte
+        // as 1,024 kilobytes.
+        + "1,048,576/1024: is 1 Mb of;\n"
+        + "2,097,152/1024: are <0< Mb of;";
+
+    //========================================================================
+    // Alternate radices
+    //========================================================================
+
+    /**
+     * This example formats a number in dozens and gross.  This is intended to
+     * demonstrate how this rule set can be used to format numbers in systems
+     * other than base 10.  The "/12" after the rules' base values controls this.
+     * Also notice that the base doesn't have to be consistent throughout the
+     * whole rule set: we go back to base 10 for values over 1,000.
+     */
+    public static final String dozens =
+        // words for numbers...
+        "zero; one; two; three; four; five; six;\n"
+        + "seven; eight; nine; ten; eleven;\n"
+        // format values over 12 in dozens
+        + "12/12: << dozen[ and >>];\n"
+        // format values over 144 in gross
+        + "144/12: << gross[, >>];\n"
+        // format values over 1,000 in thousands
+        + "1000: << thousand[, >>];\n"
+        // overflow rule.  Format values over 10,000 in numerals
+        + "10,000: =#,##0=;\n";
+
+    //========================================================================
+    // Major and minor units
+    //
+    // These examples show how a single value can be divided up into major
+    // and minor units that don't relate to each other by a factor of 10.
+    //========================================================================
+
+    /**
+     * This example formats a number of seconds in sexagesimal notation
+     * (i.e., hours, minutes, and seconds).  %with-words formats it with
+     * words (3740 is "1 hour, 2 minutes, 20 seconds") and %in-numerals
+     * formats it entirely in numerals (3740 is "1:02:20").
+     */
+    public static final String durationInSeconds =
+        // main rule set for formatting with words
+        "%with-words:\n"
+               // take care of singular and plural forms of "second"
+        + "    0 seconds; 1 second; =0= seconds;\n"
+               // use %%min to format values greater than 60 seconds
+        + "    60/60: <%%min<[, >>];\n"
+               // use %%hr to format values greater than 3,600 seconds
+               // (the ">>>" below causes us to see the number of minutes
+               // when when there are zero minutes)
+        + "    3600/60: <%%hr<[, >>>];\n"
+        // this rule set takes care of the singular and plural forms
+        // of "minute"
+        + "%%min:\n"
+        + "    0 minutes; 1 minute; =0= minutes;\n"
+        // this rule set takes care of the singular and plural forms
+        // of "hour"
+        + "%%hr:\n"
+        + "    0 hours; 1 hour; =0= hours;\n"
+
+        // main rule set for formatting in numerals
+        + "%in-numerals:\n"
+               // values below 60 seconds are shown with "sec."
+        + "    =0= sec.;\n"
+               // higher values are shown with colons: %%min-sec is used for
+               // values below 3,600 seconds...
+        + "    60: =%%min-sec=;\n"
+               // ...and %%hr-min-sec is used for values of 3,600 seconds
+               // and above
+        + "    3600: =%%hr-min-sec=;\n"
+        // this rule causes values of less than 10 minutes to show without
+        // a leading zero
+        + "%%min-sec:\n"
+        + "    0: :=00=;\n"
+        + "    60/60: <0<>>;\n"
+        // this rule set is used for values of 3,600 or more.  Minutes are always
+        // shown, and always shown with two digits
+        + "%%hr-min-sec:\n"
+        + "    0: :=00=;\n"
+        + "    60/60: <00<>>;\n"
+        + "    3600/60: <#,##0<:>>>;\n"
+        // the lenient-parse rules allow several different characters to be used
+        // as delimiters between hours, minutes, and seconds
+        + "%%lenient-parse:\n"
+        + "    & : = . = ' ' = -;\n";
+
+    /**
+     * This example formats a number of hours in sexagesimal notation (i.e.,
+     * hours, minutes, and seconds).  %with-words formats the value using
+     * words for the units, and %in-numerals formats the value using only
+     * numerals.
+     */
+    public static final String durationInHours =
+        // main entry point for formatting with words
+        "%with-words:\n"
+               // this rule omits minutes and seconds when the value is
+               // an even number of hours
+        + "    x.0: <<[, >%%min-sec>];\n"
+               // these rules take care of the singular and plural forms
+               // of hours
+        + "    0 hours; 1 hour; =#,##0= hours;\n"
+        // this rule set takes the fractional part of the number and multiplies
+        // it by 3,600 (turning it into a number of seconds).  Then it delegates
+        // to %%min-sec-implementation to format the resulting value
+        + "%%min-sec:\n"
+        + "    3600: =%%min-sec-implementation=;\n"
+        // this rule set formats the seconds as either seconds or minutes and
+        // seconds, and takes care of the singular and plural forms of
+        // "minute" and "second"
+        + "%%min-sec-implementation:\n"
+        + "    0 seconds; 1 second; =0= seconds;\n"
+        + "    60/60: 1 minute[, >>];\n"
+        + "    120/60: <0< minutes[, >>];\n"
+
+        // main entry point for formatting in numerals
+        + "%in-numerals:\n"
+               // show minutes even for even numbers of hours
+        + "    x.0: <#,##0<:00;\n"
+               // delegate to %%min-sec2 to format minutes and seconds
+        + "    x.x: <#,##0<:>%%min-sec2>;\n"
+        // this rule set formats minutes when there is an even number of
+        // minutes, and delegates to %%min-sec2-implementation when there
+        // are seconds
+        + "%%min-sec2:\n"
+        + "    60: <00<;\n"
+        + "    3600: <%%min-sec2-implementation<;\n"
+        // these two rule sets are used to format the minutes and seconds
+        + "%%min-sec2-implementation:\n"
+               // if there are fewer than 60 seconds, show the minutes anyway
+        + "    0: 00:=00=;\n"
+               // if there are minutes, format them too, and always use 2 digits
+               // for both minutes and seconds
+        + "    60: =%%min-sec3=;\n"
+        + "%%min-sec3:\n"
+        + "    0: :=00=;\n"
+        + "    60/60: <00<>>;\n"
+        // the lenient-parse rules allow the user to use any of several
+        // characters as delimiters between hours, minutes, and seconds
+        + "%%lenient-parse:\n"
+        + "    & : = . = ' ' = -;\n";
+
+    /**
+     * This rule set formats a number of pounds as pounds, shillings, and
+     * pence in the old English system of currency.
+     */
+    public static final String poundsShillingsAndPence =
+        // for values of 1 or more, format the integral part with a pound
+        // sign in front, and show shillings and pence if necessary
+        "%main:\n"
+        + "    x.0: \u00a3<#,##0<[ >%%shillings-and-pence>];\n"
+        // for values between 0 and 1, omit the number of pounds
+        + "    0.x: >%%pence-alone>;\n"
+        // this rule set is used to show shillings and pence.  It multiplies
+        // the fractional part of the number by 240 (the number of pence in a
+        // pound) and uses %%shillings-and-pence-implementation to format
+        // the result
+        + "%%shillings-and-pence:\n"
+        + "    240: <%%shillings-and-pence-implementation<;\n"
+        // this rule set is used to show shillings and pence when there are
+        // no pounds.  It also multiplies the value by 240, and then it uses
+        // %%pence-alone-implementation to format the result.
+        + "%%pence-alone:\n"
+        + "    240: <%%pence-alone-implementation<;\n"
+        // this rule set formats a number of pence when we know we also
+        // have pounds.  We always show shillings (with a 0 if necessary),
+        // but only show pence if the value isn't an even number of shillings
+        + "%%shillings-and-pence-implementation:\n"
+        + "    0/; 0/=0=;\n"
+        + "    12/12: <0</[>0>];\n"
+        // this rule set formats a number of pence when we know there are
+        // no pounds.  Values less than a shilling are shown with "d." (the
+        // abbreviation for pence), and values greater than a shilling are
+        // shown with a shilling bar (and without pence when the value is
+        // an even number of shillings)
+        + "%%pence-alone-implementation:\n"
+        + "    =0= d.;\n"
+        + "    12/12: <0</[>0>];\n";
+
+    //========================================================================
+    // Alternate numeration systems
+    //
+    // These examples show how RuleBasedNumberFormat can be used to format
+    // numbers using non-positional numeration systems.
+    //========================================================================
+
+    /**
+     * Arabic digits.  This example formats numbers in Arabic numerals.
+     * Normally, you'd do this with DecimalFormat, but this shows that
+     * RuleBasedNumberFormat can handle it too.
+     */
+    public static final String arabicNumerals =
+        "0; 1; 2; 3; 4; 5; 6; 7; 8; 9;\n"
+        + "10: <<>>;\n"
+        + "100: <<>>>;\n"
+        + "1000: <<,>>>;\n"
+        + "1,000,000: <<,>>>;\n"
+        + "1,000,000,000: <<,>>>;\n"
+        + "1,000,000,000,000: <<,>>>;\n"
+        + "1,000,000,000,000,000: =#,##0=;\n"
+        + "-x: ->>;\n"
+        + "x.x: <<.>>;";
+
+    /**
+     * Words for digits.  Follows the same pattern as the Arabic-numerals
+     * example above, but uses words for the various digits (e.g., 123 comes
+     * out as "one two three").
+     */
+    public static final String wordsForDigits =
+        "-x: minus >>;\n"
+        + "x.x: << point >>;\n"
+        + "zero; one; two; three; four; five; six;\n"
+        + "    seven; eight; nine;\n"
+        + "10: << >>;\n"
+        + "100: << >>>;\n"
+        + "1000: <<, >>>;\n"
+        + "1,000,000: <<, >>>;\n"
+        + "1,000,000,000: <<, >>>;\n"
+        + "1,000,000,000,000: <<, >>>;\n"
+        + "1,000,000,000,000,000: =#,##0=;\n";
+
+    /**
+     * This example formats numbers using Chinese characters in the Arabic
+     * place-value method.  This was used historically in China for a while.
+     */
+    public static final String chinesePlaceValue =
+        "\u3007; \u4e00; \u4e8c; \u4e09; \u56db; \u4e94; \u516d; \u4e03; \u516b; \u4e5d;\n"
+        + "10: <<>>;\n"
+        + "100: <<>>>;\n"
+        + "1000: <<>>>;\n"
+        + "1,000,000: <<>>>;\n"
+        + "1,000,000,000: <<>>>;\n"
+        + "1,000,000,000,000: <<>>>;\n"
+        + "1,000,000,000,000,000: =#,##0=;\n";
+
+    /**
+     * Roman numerals.  This example has two variants: %modern shows how large
+     * numbers are usually handled today; %historical ses the older symbols for
+     * thousands.
+     */
+    public static final String romanNumerals =
+        "%historical:\n"
+        + "    =%modern=;\n"
+               // in early Roman numerals, 1,000 was shown with a circle
+               // bisected by a vertical line.  Additional thousands were
+               // shown by adding more concentric circles, and fives were
+               // shown by cutting the symbol for next-higher power of 10
+               // in half (the letter D for 500 evolved from this).
+               // We could go beyond 40,000, but Unicode doesn't encode
+               // the symbols for higher numbers/
+        + "    1000: \u2180[>>]; 2000: \u2180\u2180[>>]; 3000: \u2180\u2180\u2180[>>]; 4000: \u2180\u2181[>>];\n"
+        + "    5000: \u2181[>>]; 6000: \u2181\u2180[>>]; 7000: \u2181\u2180\u2180[>>];\n"
+        + "    8000: \u2181\u2180\u2180\u2180[>>]; 9000: \u2180\u2182[>>];\n"
+        + "    10,000: \u2182[>>]; 20,000: \u2182\u2182[>>]; 30,000: \u2182\u2182\u2182[>>];\n"
+        + "    40,000: =#,##0=;\n"
+        + "%modern:\n"
+        + "    ; I; II; III; IV; V; VI; VII; VIII; IX;\n"
+        + "    10: X[>>]; 20: XX[>>]; 30: XXX[>>]; 40: XL[>>]; 50: L[>>];\n"
+        + "    60: LX[>>]; 70: LXX[>>]; 80: LXXX[>>]; 90: XC[>>];\n"
+        + "    100: C[>>]; 200: CC[>>]; 300: CCC[>>]; 400: CD[>>]; 500: D[>>];\n"
+        + "    600: DC[>>]; 700: DCC[>>]; 800: DCCC[>>]; 900: CM[>>];\n"
+               // in modern Roman numerals, high numbers are generally shown
+               // by placing a bar over the letters for the lower numbers:
+               // the bar multiplied a letter's value by 1,000
+        + "    1000: M[>>]; 2000: MM[>>]; 3000: MMM[>>]; 4000: MV\u0306[>>];\n"
+        + "    5000: V\u0306[>>]; 6000: V\u0306M[>>]; 7000: V\u0306MM[>>];\n"
+        + "    8000: V\u0306MMM[>>]; 9000: MX\u0306[>>];\n"
+        + "    10,000: X\u0306[>>]; 20,000: X\u0306X\u0306[>>]; 30,000: X\u0306X\u0306X\u0306[>>];\n"
+        + "    40,000: X\u0306L\u0306[>>]; 50,000: L\u0306[>>]; 60,000: L\u0306X\u0306[>>];\n"
+        + "    70,000: L\u0306X\u0306X\u0306[>>]; 80,000: L\u0306X\u0306X\u0306X\u0306[>>];\n"
+        + "    90,000: X\u0306C\u0306[>>];\n"
+        + "    100,000: C\u0306[>>]; 200,000: C\u0306C\u0306[>>]; 300,000: C\u0306C\u0306[>>];\n"
+        + "    400,000: C\u0306D\u0306[>>]; 500,000: D\u0306[>>]; 600,000: D\u0306C\u0306[>>];\n"
+        + "    700,000: D\u0306C\u0306C\u0306[>>]; 800,000: D\u0306C\u0306C\u0306C\u0306[>>];\n"
+        + "    900,000: =#,##0=;\n";
+
+    /**
+     * Hebrew alphabetic numerals.  Before adoption of Arabic numerals, Hebrew speakers
+     * used the letter of their alphabet as numerals.  The first nine letters of
+     * the alphabet repesented the values from 1 to 9, the second nine letters the
+     * multiples of 10, and the remaining letters the multiples of 100.  Since they
+     * ran out of letters at 400, the remaining multiples of 100 were represented
+     * using combinations of the existing letters for the hundreds.  Numbers were
+     * distinguished from words in a number of different ways: the way shown here
+     * uses a single mark after a number consisting of one letter, and a double
+     * mark between the last two letters of a number consisting of two or more
+     * letters.  Two dots over a letter multiplied its value by 1,000.  Also, since
+     * the letter for 10 is the first letter of God's name and the letters for 5 and 6
+     * are letters in God's name, which wasn't supposed to be written or spoken, 15 and
+     * 16 were usually written as 9 + 6 and 9 + 7 instead of 10 + 5 and 10 + 6.
+     */
+    public static final String hebrewAlphabetic =
+        // letters for the ones
+        "%%ones:\n"
+        + "    (no zero); \u05d0; \u05d1; \u05d2; \u05d3; \u05d4; \u05d5; \u05d6; \u05d7; \u05d8;\n"
+        // letters for the tens
+        + "%%tens:\n"
+        + "    ; \u05d9; \u05db; \u05dc; \u05de; \u05e0; \u05e1; \u05e2; \u05e4; \u05e6;\n"
+        // letters for the first four hundreds
+        + "%%hundreds:\n"
+        + "    ; \u05e7; \u05e8; \u05e9; \u05ea;\n"
+        // this rule set is used to write the combination of the tens and ones digits
+        // when we know that no other digits precede them: they put the numeral marks
+        // in the right place and properly handle 15 and 16 (I'm using the mathematical
+        // prime characters for the numeral marks because my Unicode font doesn't
+        // include the real Hebrew characters, which look just like the prime marks)
+        + "%%tens-and-ones:\n"
+               // for values less than 10, just use %%ones and put the numeral mark
+               // afterward
+        + "    =%%ones=\u2032;\n"
+               // put the numeral mark at the end for 10, but in the middle for
+               // 11 through 14
+        + "    10: <%%tens<\u2032; <%%tens<\u2033>%%ones>;\n"
+               // special-case 15 and 16
+        + "    15: \u05d8\u2033\u05d5; 16: \u05d8\u2033\u05d6;\n"
+               // go back to the normal method at 17
+        + "    17: <%%tens<\u2033>%%ones>;\n"
+               // repeat the rules for 10 and 11 to cover the values from 20 to 99
+        + "    20: <%%tens<\u2032; <%%tens<\u2033>%%ones>;\n"
+        // this rule set is used to format numbers below 1,000.  It relies on
+        // %%tens-and-ones to format the tens and ones places, and adds logic
+        // to handle the high hundreds and the numeral marks when there is no
+        // tens digit.  Notice how the rules are paired: all of these pairs of
+        // rules take advantage of the rollback rule: if the value (between 100
+        // and 499) is an even multiple of 100, the rule for 100 is used; otherwise,
+        // the rule for 101 (the following rule) is used.  The first rule in each
+        // pair (the one for the even multiple) places the numeral mark in a different
+        // spot than the second rule in each pair (which knows there are more digits
+        // and relies on the rule supplying them to also supply the numeral mark).
+        // The call to %%null in line 10 is there simply to invoke the rollback
+        // rule.
+        + "%%low-order:\n"
+               // this rule is only called when there are other characters before.
+               // It places the numeral mark before the last digit
+        + "    \u2033=%%ones=;\n"
+               // the rule for 10 places the numeral mark before the 10 character
+               // (because we know it's the last character); the rule for 11 relies
+               // on %%tens-and-ones to place the numeral mark
+        + "    10: \u2033<%%tens<; =%%tens-and-ones=>%%null>;\n"
+               // the rule for 100 places the numeral mark before the 100 character
+               // (we know it's the last character); the rule for 101 recurses to
+               // fill in the remaining digits and the numeral mark
+        + "    100: <%%hundreds<\u2032; <%%hundreds<>>;\n"
+               // special-case the hundreds from 500 to 900 because they consist of
+               // more than one character
+        + "    500: \u05ea\u2033\u05e7; \u05ea\u05e7>>;\n"
+        + "    600: \u05ea\u2033\u05e8; \u05ea\u05e8>>;\n"
+        + "    700: \u05ea\u2033\u05e9; \u05ea\u05e9>>;\n"
+        + "    800: \u05ea\u2033\u05ea; \u05ea\u05ea>>;\n"
+        + "    900: \u05ea\u05ea\u2033\u05e7; \u05ea\u05ea\u05e7>>;\n"
+        // this rule set is used to format values of 1,000 or more.  Here, we don't
+        // worry about the numeral mark, and we add two dots (the Unicode combining
+        // diaeresis character) to ever letter
+        + "%%high-order:\n"
+               // put the ones digit, followed by the diaeresis
+        + "    =%%ones=\u0308;\n"
+               // the tens can be handled with recursion
+        + "    10: <%%tens<\u0308[>>];\n"
+               // still have to special-case 15 and 16
+        + "    15: \u05d8\u0308\u05d5\u0308; 16: \u05d8\u003078\u05d6\u0308;\n"
+               // back to the regular rules at 17
+        + "    17: <%%tens<\u0308[>>];\n"
+               // the hundreds with the dots added (and without worrying about
+               // placing the numeral mark)
+        + "    100: <%%hundreds<\u0308[>>];\n"
+        + "    500: \u05ea\u0308\u05e7\u0308[>>];\n"
+        + "    600: \u05ea\u0308\u05e8\u0308[>>];\n"
+        + "    700: \u05ea\u0308\u05e9\u0308[>>];\n"
+        + "    800: \u05ea\u0308\u05ea\u0308[>>];\n"
+        + "    900: \u05ea\u0308\u05ea\u0308\u05e7\u0308[>>];\n"
+        // this rule set doesn't do anything; it's used by some other rules to
+        // invoke the rollback rule
+        + " %%null:\n"
+        + "    ;\n"
+        // the main rule set.
+        + "%main:\n"
+               // for values below 10, just output the letter and the numeral mark
+        + "    =%%ones=\u2032;\n"
+               // for values from 10 to 99, use %%tens-and-ones to do the formatting
+        + "    10: =%%tens-and-ones=;\n"
+               // for values from 100 to 999, use %%low-order to do the formatting
+        + "    100: =%%low-order=;\n"
+               // for values of 1,000 and over, use %%high-order to do the formatting
+        + "    1000: <%%high-order<[>%%low-order>];\n";
+
+    /**
+     * Greek alphabetic numerals.  The Greeks, before adopting the Arabic numerals,
+     * also used the letters of their alphabet as numerals.  There are three now-
+     * obsolete Greek letters that are used as numerals; many fonts don't have them.
+     * Large numbers were handled many different ways; the way shown here divides
+     * large numbers into groups of four letters (factors of 10,000), and separates
+     * the groups with the capital letter mu (for myriad).  Capital letters are used
+     * for values below 10,000; small letters for higher numbers (to make the capital
+     * mu stand out).
+     */
+    public static final String greekAlphabetic =
+        // this rule set is used for formatting numbers below 10,000.  It uses
+        // capital letters.
+        "%%low-order:\n"
+        + "    (no zero); \u0391; \u0392; \u0393; \u0394; \u0395; \u03dc; \u0396; \u0397; \u0398;\n"
+        + "    10: \u0399[>>]; 20: \u039a[>>]; 30: \u039b[>>]; 40: \u039c[>>]; 50: \u039d[>>];\n"
+        + "    60: \u039e[>>]; 70: \u039f[>>]; 80: \u03a0[>>]; 90: \u03de[>>];\n"
+        + "    100: \u03a1[>>]; 200: \u03a3[>>]; 300: \u03a4[>>]; 400: \u03a5[>>];\n"
+        + "    500: \u03a6[>>]; 600: \u03a7[>>]; 700: \u03a8[>>]; 800: \u03a9[>>];\n"
+        + "    900: \u03e0[>>];\n"
+               // the thousands are represented by the same numbers as the ones, but
+               // with a comma-like mark added to their left shoulder
+        + "    1000: \u0391\u0313[>>]; 2000: \u0392\u0313[>>]; 3000: \u0393\u0313[>>];\n"
+        + "    4000: \u0394\u0313[>>]; 5000: \u0395\u0313[>>]; 6000: \u03dc\u0313[>>];\n"
+        + "    7000: \u0396\u0313[>>]; 8000: \u0397\u0313[>>]; 9000: \u0398\u0313[>>];\n"
+        // this rule set is the same as above, but uses lowercase letters.  It is used
+        // for formatting the groups in numbers above 10,000.
+        + "%%high-order:\n"
+        + "    (no zero); \u03b1; \u03b2; \u03b3; \u03b4; \u03b5; \u03dc; \u03b6; \u03b7; \u03b8;\n"
+        + "    10: \u03b9[>>]; 20: \u03ba[>>]; 30: \u03bb[>>]; 40: \u03bc[>>]; 50: \u03bd[>>];\n"
+        + "    60: \u03be[>>]; 70: \u03bf[>>]; 80: \u03c0[>>]; 90: \u03de[>>];\n"
+        + "    100: \u03c1[>>]; 200: \u03c3[>>]; 300: \u03c4[>>]; 400: \u03c5[>>];\n"
+        + "    500: \u03c6[>>]; 600: \u03c7[>>]; 700: \u03c8[>>]; 800: \u03c9[>>];\n"
+        + "    900: \u03c0[>>];\n"
+        + "    1000: \u03b1\u0313[>>]; 2000: \u03b2\u0313[>>]; 3000: \u03b3\u0313[>>];\n"
+        + "    4000: \u03b4\u0313[>>]; 5000: \u03b5\u0313[>>]; 6000: \u03dc\u0313[>>];\n"
+        + "    7000: \u03b6\u0313[>>]; 8000: \u03b7\u0313[>>]; 9000: \u03b8\u0313[>>];\n"
+        // the main rule set
+        + "%main:\n"
+               // for values below 10,000, just use %%low-order
+        + "    =%%low-order=;\n"
+               // for values above 10,000, split into two groups of four digits
+               // and format each with %%high-order (putting an M in betwen)
+        + "    10,000: <%%high-order<\u039c>%%high-order>;\n"
+               // for values above 100,000,000, add another group onto the front
+               // and another M
+        + "    100,000,000: <%%high-order<\u039c>>\n";
+
+    /**
+     * A list of all the sample rule sets, used by the demo program.
+     */
+    public static final String[] sampleRuleSets =
+        { usEnglish,
+          ukEnglish,
+          spanish,
+          french,
+          swissFrench,
+          german,
+          italian,
+          swedish,
+          dutch,
+          japanese,
+          greek,
+          russian,
+          hebrew,
+          ordinal,
+          message1,
+          dollarsAndCents,
+          decimalAsFraction,
+          closestFraction,
+          stock,
+          abbEnglish,
+          units,
+          message2,
+          dozens,
+          durationInSeconds,
+          durationInHours,
+          poundsShillingsAndPence,
+          arabicNumerals,
+          wordsForDigits,
+          chinesePlaceValue,
+          romanNumerals,
+          hebrewAlphabetic,
+          greekAlphabetic };
+
+    /**
+     * The displayable names for all the sample rule sets, in the same order as
+     * the preceding array.
+     */
+    public static final String[] sampleRuleSetNames =
+        { "English (US)",
+          "English (UK)",
+          "Spanish",
+          "French (France)",
+          "French (Switzerland)",
+          "German",
+          "Italian",
+          "Swedish",
+          "Dutch",
+          "Japanese",
+          "Greek",
+          "Russian",
+          "Hebrew",
+          "English ordinal abbreviations",
+          "Simple message formatting",
+          "Dollars and cents",
+          "Decimals as fractions",
+          "Closest fraction",
+          "Stock prices",
+          "Abbreviated US English",
+          "Changing dimensions",
+          "Complex message formatting",
+          "Dozens",
+          "Duration (value in seconds)",
+          "Duration (value in hours)",
+          "Pounds, shillings, and pence",
+          "Arabic numerals",
+          "Words for digits",
+          "Chinese place-value notation",
+          "Roman numerals",
+          "Hebrew ahlphabetic numerals",
+          "Greek alphabetic numerals" };
+
+    /**
+     * The base locale for each of the sample rule sets.  The locale is used to
+     * determine DecimalFormat behavior, lenient-parse behavior, and text-display
+     * selection (we have a hack in here to allow display of non-Latin scripts).
+     * Null means the locale setting is irrelevant and the default can be used.
+     */
+    public static final Locale[] sampleRuleSetLocales =
+        { Locale.US,
+          Locale.UK,
+          new Locale("es", "", ""),
+          Locale.FRANCE,
+          new Locale("fr", "CH", ""),
+          Locale.GERMAN,
+          Locale.ITALIAN,
+          new Locale("sv", "", ""),
+          new Locale("nl", "", ""),
+          Locale.JAPANESE,
+          new Locale("el", "", ""),
+          new Locale("ru", "", ""),
+          new Locale("iw", "", ""),
+          Locale.ENGLISH,
+          Locale.ENGLISH,
+          Locale.US,
+          Locale.ENGLISH,
+          null,
+          null,
+          Locale.ENGLISH,
+          null,
+          Locale.ENGLISH,
+          Locale.ENGLISH,
+          null,
+          null,
+          Locale.UK,
+          null,
+          Locale.ENGLISH,
+          new Locale("zh", "", ""),
+          null,
+          new Locale("iw", "", ""),
+          new Locale("el", "", ""),
+          null };
+
+        public static final String[] sampleRuleSetCommentary = {
+            "This demonstration version of the "
+            + "U.S. English spellout rules has four variants: 1) %simplified is a "
+            + "set of rules showing the simple method of spelling out numbers in "
+            + "English: 289 is formatted as \"two hundred eighty-nine\".  2) %alt-teens "
+            + "is the same as %simplified, except that values between 1,000 and 9,999 "
+            + "whose hundreds place isn't zero are formatted in hundreds.  For example, "
+            + "1,983 is formatted as \"nineteen hundred eighty-three,\" and 2,183 is "
+            + "formatted as \"twenty-one hundred eighty-three,\" but 2,083 is still "
+            + "formatted as \"two thousand eighty-three.\"  3) %ordinal formats the "
+            + "values as ordinal numbers in English (e.g., 289 is \"two hundred eighty-"
+            + "ninth\").  4) %default uses a more complicated algorithm to format "
+            + "numbers in a more natural way: 289 is formatted as \"two hundred AND "
+            + "eighty-nine\" and commas are inserted between the thousands groups for "
+            + "values above 100,000.",
+
+            "U.K. English has one significant "
+            + "difference from U.S. English: the names for values of 1,000,000,000 "
+            + "and higher.  In American English, each successive \"-illion\" is 1,000 "
+            + "times greater than the preceding one: 1,000,000,000 is \"one billion\" "
+            + "and 1,000,000,000,000 is \"one trillion.\"  In British English, each "
+            + "successive \"-illion\" is one million times greater than the one before: "
+            + "\"one billion\" is 1,000,000,000,000 (or what Americans would call a "
+            + "\"trillion\"), and \"one trillion\" is 1,000,000,000,000,000,000.  "
+            + "1,000,000,000 in British English is \"one thousand million.\"  (This "
+            + "value is sometimes called a \"milliard,\" but this word seems to have "
+            + "fallen into disuse.)",
+
+            "The Spanish rules are quite similar to "
+            + "the English rules, but there are some important differences: "
+            + "First, we have to provide separate rules for most of the twenties "
+            + "because the ones digit frequently picks up an accent mark that it "
+            + "doesn't have when standing alone.  Second, each multiple of 100 has "
+            + "to be specified separately because the multiplier on 100 very often "
+            + "changes form in the contraction: 500 is \"quinientos,\" not "
+            + "\"cincocientos.\"  In addition, the word for 100 is \"cien\" when "
+            + "standing alone, but changes to \"ciento\" when followed by more digits.  "
+            + "There also some other differences.",
+
+            "French adds some interesting quirks of its "
+            + "own: 1) The word \"et\" is interposed between the tens and ones digits, "
+            + "but only if the ones digit if 1: 20 is \"vingt,\" and 2 is \"vingt-deux,\" "
+            + "but 21 is \"vingt-et-un.\"  2)  There are no words for 70, 80, or 90.  "
+            + "\"quatre-vingts\" (\"four twenties\") is used for 80, and values proceed "
+            + "by score from 60 to 99 (e.g., 73 is \"soixante-treize\" [\"sixty-thirteen\"]).  "
+            + "Numbers from 1,100 to 1,199 are rendered as hundreds rather than "
+            + "thousands: 1,100 is \"onze cents\" (\"eleven hundred\"), rather than "
+            + "\"mille cent\" (\"one thousand one hundred\")",
+
+            "Swiss French differs from French French "
+            + "in that it does have words for 70, 80, and 90.  This rule set shows them, "
+            + "and is simpler as a result.",
+
+            "German also adds some interesting "
+            + "characteristics.  For values below 1,000,000, numbers are customarily "
+            + "written out as a single word.  And the ones digit PRECEDES the tens "
+            + "digit (e.g., 23 is \"dreiundzwanzig,\" not \"zwanzigunddrei\").",
+
+            "Like German, most Italian numbers are "
+            + "written as single words.  What makes these rules complicated is the rule "
+            + "that says that when a word ending in a vowel and a word beginning with "
+            + "a vowel are combined into a compound, the vowel is dropped from the "
+            + "end of the first word: 180 is \"centottanta,\" not \"centoottanta.\"  "
+            + "The complexity of this rule set is to produce this behavior.",
+
+            "Spellout rules for Swedish.",
+
+            "Spellout rules for Dutch.  Notice that in Dutch, as in German,"
+            + "the ones digit precedes the tens digit.",
+
+            "In Japanese, there really isn't any "
+            + "distinction between a number written out in digits and a number "
+            + "written out in words: the ideographic characters are both digits "
+            + "and words.  This rule set provides two variants:  %traditional "
+            + "uses the traditional CJK numerals (which are also used in China "
+            + "and Korea).  %financial uses alternate ideographs for many numbers "
+            + "that are harder to alter than the traditional numerals (one could "
+            + "fairly easily change a one to "
+            + "a three just by adding two strokes, for example).  This is also done in "
+            + "the other countries using Chinese idographs, but different ideographs "
+            + "are used in those places.",
+
+            "Again in Greek we have to supply the words "
+            + "for the multiples of 100 because they can't be derived algorithmically.  "
+            + "Also, the tens dgit changes form when followed by a ones digit: an "
+            + "accent mark disappears from the tens digit and moves to the ones digit.  "
+            + "Therefore, instead of using the [] notation, we actually have to use "
+            + "two separate rules for each multiple of 10 to show the two forms of "
+            + "the word.",
+
+            "Spellout rules for Russian.",
+
+            "Spellout rules for Hebrew.  Hebrew actually has inflected forms for "
+            + "most of the lower-order numbers.  The masculine forms are shown "
+            + "here.",
+
+            "This rule set adds an English ordinal abbreviation to the end of a "
+            + "number.  For example, 2 is formatted as \"2nd\".  Parsing doesn't work with "
+            + "this rule set.  To parse, use DecimalFormat on the numeral.",
+
+            "This is a simple message-formatting example.  Normally one would "
+            + "use ChoiceFormat and MessageFormat to do something this simple, "
+            + "but this shows it could be done with RuleBasedNumberFormat too.  "
+            + "A message-formatting example that might work better with "
+            + "RuleBasedNumberFormat appears later.",
+
+            "The next few examples demonstrate fraction handling.  "
+            + "This example formats a number in one of the two styles often used "
+            + "on checks.  %dollars-and-hundredths formats cents as hundredths of "
+            + "a dollar (23.40 comes out as \"twenty-three and 40/100 dollars\").  "
+            + "%dollars-and-cents formats in dollars and cents (23.40 comes out as "
+            + "\"twenty-three dollars and forty cents\")",
+
+            "This rule set shows the fractional part of the number as a fraction "
+            + "with a power of 10 as the denominator.  Some languages don't spell "
+            + "out the fractional part of a number as \"point one two three,\" but "
+            + "always render it as a fraction.  If we still want to treat the fractional "
+            + "part of the number as a decimal, then the fraction's denominator "
+            + "is always a power of 10.  This example does that: 23.125 is formatted "
+            + "as \"twenty-three and one hundred twenty-five thousandths\" (as opposed "
+            + "to \"twenty-three point one two five\" or \"twenty-three and one eighth\").",
+
+            "Number with closest fraction.  This example formats a value using "
+            + "numerals, but shows the fractional part as a ratio (fraction) rather "
+            + "than a decimal.  The fraction always has a denominator between 2 and 10.",
+
+            "American stock-price formatting.  Non-integral stock prices are still "
+            + "generally shown in eighths or sixteenths of dollars instead of dollars "
+            + "and cents.  This example formats stock prices in this way if possible, "
+            + "and in dollars and cents if not.",
+
+            "The next few examples demonstrate using a RuleBasedNumberFormat to "
+            + "change the units a value is denominated in depending on its magnitude.  "
+            + "The example shows large numbers the way they often appear is nwespapers: "
+            + "1,200,000 is formatted as \"1.2 million\".",
+
+            "This example takes a number of meters and formats it in whatever unit "
+            + "will produce a number with from one to three digits before the decimal "
+            + "point.  For example, 230,000 is formatted as \"230 km\".",
+
+            "A more complicated message-formatting example.  Here, in addition to "
+            + "handling the singular and plural versions of the word, the value is "
+            + "denominated in bytes, kilobytes, or megabytes depending on its magnitude.  "
+            + "Also notice that it correctly treats a kilobyte as 1,024 bytes (not 1,000), "
+            + "and a megabyte as 1,024 kilobytes (not 1,000).",
+
+            "This example formats a number in dozens and gross.  This is intended to "
+            + "demonstrate how this rule set can be used to format numbers in systems "
+            + "other than base 10.  The \"/12\" after the rules' base values controls this.  "
+            + "Also notice that the base doesn't have to be consistent throughout the "
+            + "whole rule set: we go back to base 10 for values over 1,000.",
+
+            "The next few examples show how a single value can be divided up into major "
+            + "and minor units that don't relate to each other by a factor of 10.  "
+            + "This example formats a number of seconds in sexagesimal notation "
+            + "(i.e., hours, minutes, and seconds).  %with-words formats it with "
+            + "words (3740 is \"1 hour, 2 minutes, 20 seconds\") and %in-numerals "
+            + "formats it entirely in numerals (3740 is \"1:02:20\").",
+
+            "This example formats a number of hours in sexagesimal notation (i.e., "
+            + "hours, minutes, and seconds).  %with-words formats the value using "
+            + "words for the units, and %in-numerals formats the value using only "
+            + "numerals.",
+
+            "This rule set formats a number of pounds as pounds, shillings, and "
+            + "pence in the old English system of currency.",
+
+            "These examples show how RuleBasedNumberFormat can be used to format "
+            + "numbers using non-positional numeration systems.  "
+            + "This example formats numbers in Arabic numerals.  "
+            + "Normally, you'd do this with DecimalFormat, but this shows that "
+            + "RuleBasedNumberFormat can handle it too.",
+
+            "This example follows the same pattern as the Arabic-numerals "
+            + "example, but uses words for the various digits (e.g., 123 comes "
+            + "out as \"one two three\").",
+
+            "This example formats numbers using Chinese characters in the Arabic "
+            + "place-value method.  This was used historically in China for a while.",
+
+            "Roman numerals.  This example has two variants: %modern shows how large "
+            + "numbers are usually handled today; %historical ses the older symbols for "
+            + "thousands.  Not all of the characters are displayable with most fonts.",
+
+            "Hebrew alphabetic numerals.  Before adoption of Arabic numerals, Hebrew speakers "
+            + "used the letter of their alphabet as numerals.  The first nine letters of "
+            + "the alphabet repesented the values from 1 to 9, the second nine letters the "
+            + "multiples of 10, and the remaining letters the multiples of 100.  Since they "
+            + "ran out of letters at 400, the remaining multiples of 100 were represented "
+            + "using combinations of the existing letters for the hundreds.  Numbers were "
+            + "distinguished from words in a number of different ways: the way shown here "
+            + "uses a single mark after a number consisting of one letter, and a double "
+            + "mark between the last two letters of a number consisting of two or more "
+            + "letters.  Two dots over a letter multiplied its value by 1,000.  Also, since "
+            + "the letter for 10 is the first letter of God's name and the letters for 5 and 6 "
+            + "are letters in God's name, which wasn't supposed to be written or spoken, 15 and "
+            + "16 were usually written as 9 + 6 and 9 + 7 instead of 10 + 5 and 10 + 6.",
+
+            "Greek alphabetic numerals.  The Greeks, before adopting the Arabic numerals, "
+            + "also used the letters of their alphabet as numerals.  There are three now-"
+            + "obsolete Greek letters that are used as numerals; many fonts don't have them.  "
+            + "Large numbers were handled many different ways; the way shown here divides "
+            + "large numbers into groups of four letters (factors of 10,000), and separates "
+            + "the groups with the capital letter mu (for myriad).  Capital letters are used "
+            + "for values below 10,000; small letters for higher numbers (to make the capital "
+            + "mu stand out).",
+
+            "This is a custom (user-defined) rule set."
+        };
+}
diff --git a/src/com/ibm/demo/rbnf/package.html b/src/com/ibm/demo/rbnf/package.html
new file mode 100755
index 0000000..48917ae
--- /dev/null
+++ b/src/com/ibm/demo/rbnf/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/rbnf/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 17:44:02 $
+-->
+</head>
+<body bgcolor="white">
+RuleBasedNumberFormat demo appliation.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/demo/translit/Demo.java b/src/com/ibm/demo/translit/Demo.java
new file mode 100755
index 0000000..83b91fb
--- /dev/null
+++ b/src/com/ibm/demo/translit/Demo.java
@@ -0,0 +1,266 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/translit/Attic/Demo.java,v $ 
+ * $Date: 2000/03/10 03:47:44 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.translit;
+import java.applet.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import com.ibm.text.components.*;
+import com.ibm.text.*;
+
+/**
+ * A frame that allows the user to experiment with keyboard
+ * transliteration.  This class has a main() method so it can be run
+ * as an application.  The frame contains an editable text component
+ * and uses keyboard transliteration to process keyboard events.
+ *
+ * <p>Copyright (c) IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: Demo.java,v $ $Revision: 1.4 $ $Date: 2000/03/10 03:47:44 $
+ */
+public class Demo extends Frame {
+
+    static final boolean DEBUG = false;
+
+    Transliterator translit = null;
+
+    boolean compound = false;
+    Transliterator[] compoundTranslit = new Transliterator[MAX_COMPOUND];
+    static final int MAX_COMPOUND = 128;
+    int compoundCount = 0;
+
+    TransliteratingTextComponent text = null;
+
+    Menu translitMenu;
+    CheckboxMenuItem translitItem;
+    CheckboxMenuItem noTranslitItem;
+
+    static final String NO_TRANSLITERATOR = "None";
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    public static void main(String[] args) {
+        Frame f = new Demo(600, 200);
+        f.addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
+        f.setVisible(true);
+    }
+
+	public Demo(int width, int height) {
+        super("Transliteration Demo");
+
+        initMenus();
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                handleClose();
+            }
+        });
+        
+        text = new TransliteratingTextComponent();
+        Font font = new Font("serif", Font.PLAIN, 48);
+        text.setFont(font);
+        text.setSize(width, height);
+        text.setVisible(true);
+        text.setText("\u03B1\u05D0\u3042\u4E80");
+        add(text);
+
+        setSize(width, height);
+    }
+
+    private void initMenus() {
+        MenuBar mbar;
+        Menu menu;
+        MenuItem mitem;
+        CheckboxMenuItem citem;
+        
+        setMenuBar(mbar = new MenuBar());
+        mbar.add(menu = new Menu("File"));
+        menu.add(mitem = new MenuItem("Quit"));
+        mitem.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                handleClose();
+            }
+        });
+
+        final ItemListener setTransliteratorListener = new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                CheckboxMenuItem item = (CheckboxMenuItem) e.getSource();
+                if (e.getStateChange() == ItemEvent.DESELECTED) {
+                    // Don't let the current transliterator be deselected.
+                    // Just reselect it.
+                    item.setState(true);
+                } else if (compound) {
+                    // Adding an item to a compound transliterator
+                    handleAddToCompound(item.getLabel());
+                } else if (item != translitItem) {
+                    // Deselect previous choice.  Don't need to call
+                    // setState(true) on new choice.
+                    translitItem.setState(false);
+                    translitItem = item;
+                    handleSetTransliterator(item.getLabel());
+                }
+            }
+        };
+
+        translit = null;
+        mbar.add(translitMenu = new Menu("Transliterator"));
+        translitMenu.add(translitItem = noTranslitItem =
+                         new CheckboxMenuItem(NO_TRANSLITERATOR, true));
+        noTranslitItem.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                // Can't uncheck None -- any action here sets None to true
+                setNoTransliterator();
+            }
+        });
+
+        translitMenu.addSeparator();
+
+        translitMenu.add(citem = new CheckboxMenuItem("Compound"));
+        citem.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent e) {
+                CheckboxMenuItem item = (CheckboxMenuItem) e.getSource();
+                if (e.getStateChange() == ItemEvent.DESELECTED) {
+                    // If compound gets deselected, then select NONE
+                    setNoTransliterator();
+                } else if (!compound) {
+                    // Switching from non-compound to compound
+                    translitItem.setState(false);
+                    translitItem = item;
+                    translit = null;
+                    compound = true;
+                    compoundCount = 0;
+                    for (int i=0; i<MAX_COMPOUND; ++i) {
+                        compoundTranslit[i] = null;
+                    }
+                }
+            }
+        });
+      
+        translitMenu.addSeparator();
+
+        for (Enumeration e=getSystemTransliteratorNames().elements();
+             e.hasMoreElements(); ) {
+            String s = (String) e.nextElement();
+            translitMenu.add(citem = new CheckboxMenuItem(s));
+            citem.addItemListener(setTransliteratorListener);
+        }
+
+        mbar.add(menu = new Menu("Batch"));
+        menu.add(mitem = new MenuItem("Transliterate Selection"));
+        mitem.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                handleBatchTransliterate();
+            }
+        });
+    }
+
+    /**
+     * Get a sorted list of the system transliterators.
+     */
+    private static Vector getSystemTransliteratorNames() {
+        Vector v = new Vector();
+        for (Enumeration e=Transliterator.getAvailableIDs();
+             e.hasMoreElements(); ) {
+            v.addElement(e.nextElement());
+        }
+        // Insertion sort, O(n^2) acceptable for small n
+        for (int i=0; i<(v.size()-1); ++i) {
+            String a = (String) v.elementAt(i);
+            for (int j=i+1; j<v.size(); ++j) {
+                String b = (String) v.elementAt(j);
+                if (a.compareTo(b) > 0) {
+                    v.setElementAt(b, i);
+                    v.setElementAt(a, j);
+                    a = b;
+                }
+            }
+        }
+        return v;
+    }
+
+    private void setNoTransliterator() {
+        translitItem = noTranslitItem;
+        noTranslitItem.setState(true);
+        handleSetTransliterator(noTranslitItem.getLabel());
+        compound = false;
+        for (int i=0; i<translitMenu.getItemCount(); ++i) {
+            MenuItem it = translitMenu.getItem(i);
+            if (it != noTranslitItem && it instanceof CheckboxMenuItem) {
+                ((CheckboxMenuItem) it).setState(false);
+            }
+        }
+    }
+
+    private void handleAddToCompound(String name) {
+        if (compoundCount < MAX_COMPOUND) {
+            compoundTranslit[compoundCount] = decodeTranslitItem(name);
+            ++compoundCount;
+            Transliterator t[] = new Transliterator[compoundCount];
+            System.arraycopy(compoundTranslit, 0, t, 0, compoundCount);
+            translit = new CompoundTransliterator(t);
+            text.setTransliterator(translit);
+        }
+    }
+
+    private void handleSetTransliterator(String name) {
+        translit = decodeTranslitItem(name);
+        text.setTransliterator(translit);
+    }
+
+    /**
+     * Decode a menu item that looks like <translit name>.
+     */
+    private static Transliterator decodeTranslitItem(String name) {
+        return (name.equals(NO_TRANSLITERATOR))
+            ? null : Transliterator.getInstance(name);
+    }
+
+    private void handleBatchTransliterate() {
+        if (translit == null) {
+            return;
+        }
+
+        int start = text.getSelectionStart();
+        int end = text.getSelectionEnd();
+        ReplaceableString s =
+            new ReplaceableString(text.getText().substring(start, end));
+
+        StringBuffer log = null;
+        if (DEBUG) {
+            log = new StringBuffer();
+            log.append('"' + s.toString() + "\" (start " + start +
+                       ", end " + end + ") -> \"");
+        }
+
+        translit.transliterate(s);
+        String str = s.toString();
+
+        if (DEBUG) {
+            log.append(str + "\"");
+            System.out.println("Batch " + translit.getID() + ": " + log.toString());
+        }
+
+        text.replaceRange(str, start, end);
+        text.select(start, start + str.length());
+    }
+
+    private void handleClose() {
+        dispose();
+    }
+}
diff --git a/src/com/ibm/demo/translit/DemoApplet.java b/src/com/ibm/demo/translit/DemoApplet.java
new file mode 100755
index 0000000..77fb815
--- /dev/null
+++ b/src/com/ibm/demo/translit/DemoApplet.java
@@ -0,0 +1,74 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/translit/Attic/DemoApplet.java,v $ 
+ * $Date: 2000/03/10 03:47:44 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.demo.translit;
+import java.awt.*;
+import java.awt.event.*;
+import java.applet.*;
+import com.ibm.text.components.AppletFrame;
+
+/**
+ * A simple Applet that shows a button.  When pressed, the button
+ * shows the DemoAppletFrame.  This Applet is meant to be embedded
+ * in a web page.
+ *
+ * <p>Copyright (c) IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: DemoApplet.java,v $ $Revision: 1.4 $ $Date: 2000/03/10 03:47:44 $
+ */
+public class DemoApplet extends Applet {
+
+    Demo frame = null;
+    
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    public static void main(String args[]) {
+        final DemoApplet applet = new DemoApplet();
+        new AppletFrame("Transliteration Demo", applet, 640, 480);
+    }
+
+	public void init() {
+
+		Button button = new Button("Transliteration Demo");
+		button.addActionListener(new ActionListener() {
+		    public void actionPerformed(ActionEvent e) {
+		        if (frame == null) {
+                    frame = new Demo(600, 200);
+                    frame.addWindowListener(new WindowAdapter() {
+                        public void windowClosing(WindowEvent we) {
+                            frame = null;
+                        }
+                    });
+                }
+                frame.setVisible(true);
+                frame.toFront();
+		    }
+		});
+
+		add(button);
+
+        Dimension size = button.getPreferredSize();
+        size.width += 10;
+        size.height += 10;
+
+		resize(size);
+	}
+	
+    public void stop() {
+        if (frame != null) {
+            frame.dispose();
+        }
+        frame = null;
+    }
+}
diff --git a/src/com/ibm/demo/translit/demo.bat b/src/com/ibm/demo/translit/demo.bat
new file mode 100755
index 0000000..36f8b78
--- /dev/null
+++ b/src/com/ibm/demo/translit/demo.bat
@@ -0,0 +1,19 @@
+REM /*
+REM *******************************************************************************
+REM  * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+REM  * others. All Rights Reserved.                                                *
+REM  *******************************************************************************
+REM  *
+REM  * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/translit/Attic/demo.bat,v $ 
+REM  * $Date: 2000/03/10 03:47:44 $ 
+REM  * $Revision: 1.2 $
+REM  *
+REM  *****************************************************************************************
+REM  */
+REM For best results, run the demo as an applet inside of Netscape
+REM with Bitstream Cyberbit installed.
+
+REM setup your JDK 1.1.x path and classpath here:
+call JDK11
+set CLASSPATH=../translit.jar;%CLASSPATH%
+javaw Demo
diff --git a/src/com/ibm/demo/translit/demo.html b/src/com/ibm/demo/translit/demo.html
new file mode 100755
index 0000000..c655dc9
--- /dev/null
+++ b/src/com/ibm/demo/translit/demo.html
@@ -0,0 +1,27 @@
+<HTML>
+<HEAD>
+<TITLE>Transliteration Demo</TITLE>
+</HEAD>
+<BODY>
+
+<APPLET CODE="com.ibm.demo.translit.DemoApplet.class" WIDTH=140 HEIGHT=33></APPLET>
+
+<HR>
+
+If you don't see a button above, then your browser is failing to
+locate the necessary Java class files.
+
+<P>
+
+One way to make this work is to copy this HTML file to
+<code>icu4j/src</code>, and make sure the Java files in the directories
+under <code>icu4j/src/com</code> are built.  Then open this HTML file
+using a browser or appletviewer.
+
+<P>
+
+For best results, run this demo as an applet within Netscape with
+Bitstream Cyberbit installed.
+
+</BODY>
+</HTML>
diff --git a/src/com/ibm/demo/translit/package.html b/src/com/ibm/demo/translit/package.html
new file mode 100755
index 0000000..3f4e5b9
--- /dev/null
+++ b/src/com/ibm/demo/translit/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/demo/translit/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 17:44:12 $
+-->
+</head>
+<body bgcolor="white">
+Transliterator demo appliation.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/icu/internal/UInfo.java b/src/com/ibm/icu/internal/UInfo.java
new file mode 100755
index 0000000..098dca9
--- /dev/null
+++ b/src/com/ibm/icu/internal/UInfo.java
@@ -0,0 +1,608 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2001, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/internal/Attic/UInfo.java,v $ 
+ * $Date: 2001/03/15 23:31:12 $ 
+ * $Revision: 1.1 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.icu.internal;
+
+import java.io.*;
+import java.util.*;
+import com.ibm.util.Utility;
+
+public final class UInfo {
+    static final boolean DEBUG = false;
+    static final int UINFO_VERSION = 5;
+
+    // these values are aligned with the java.lang.Character constants
+
+    public static final byte
+    UNASSIGNED      = 0,
+    UPPERCASE_LETTER    = 1,
+    LOWERCASE_LETTER    = 2,
+    TITLECASE_LETTER    = 3,
+    MODIFIER_LETTER     = 4,
+    OTHER_LETTER        = 5,
+    NON_SPACING_MARK    = 6,
+    ENCLOSING_MARK      = 7,
+    COMBINING_SPACING_MARK  = 8,
+    DECIMAL_DIGIT_NUMBER    = 9,
+    LETTER_NUMBER       = 10,
+    OTHER_NUMBER        = 11,
+    SPACE_SEPARATOR     = 12,
+    LINE_SEPARATOR      = 13,
+    PARAGRAPH_SEPARATOR = 14,
+    CONTROL         = 15,
+    FORMAT          = 16,
+    PRIVATE_USE     = 18,
+    SURROGATE       = 19,
+    DASH_PUNCTUATION    = 20,
+    START_PUNCTUATION   = 21,
+    END_PUNCTUATION     = 22,
+    CONNECTOR_PUNCTUATION   = 23,
+    OTHER_PUNCTUATION   = 24,
+    MATH_SYMBOL     = 25,
+    CURRENCY_SYMBOL     = 26,
+    MODIFIER_SYMBOL     = 27,
+    OTHER_SYMBOL        = 28;
+
+    public String getName(char ch) {return getInfo(ch).name;}
+    public String getDecomposition(char ch) {return getInfo(ch).decomposition;}
+    public String getName10(char ch) {return getInfo(ch).name10;}
+    public String getComment(char ch) {return getInfo(ch).comment;}
+
+    public float getNumeric(char ch) {return getInfo(ch).numeric;}
+
+    public short getCanonicalClass(char ch) {return getInfo(ch).canonical;}
+    public short getDecimal(char ch) {return getInfo(ch).decimal;}
+    public short getDigit(char ch) {return getInfo(ch).digit;}
+
+    public char getUppercase(char ch) {return getInfo(ch).uppercase;}
+    public char getLowercase(char ch) {return getInfo(ch).lowercase;}
+    public char getTitlecase(char ch) {return getInfo(ch).titlecase;}
+
+    public byte getCategory(char ch) {return getInfo(ch).category;}
+    public byte getBidiClass(char ch) {return getInfo(ch).bidi;}
+    public boolean getMirrored(char ch) {return getInfo(ch).mirrored;}
+
+    public boolean isDisparaged(char ch) { return getDecomposition(ch).length() == 4; }
+
+    public boolean isLetter(char ch) {
+        return (0 != ((1<<getCategory(ch)) &
+          ((1<<UPPERCASE_LETTER)
+          | (1<<LOWERCASE_LETTER)
+          | (1<<TITLECASE_LETTER)
+          | (1<<MODIFIER_LETTER)
+          | (1<<MODIFIER_LETTER))));
+    }
+
+    public boolean isMark(char ch) {
+        return (0 != ((1<<getCategory(ch)) &
+          ((1<<NON_SPACING_MARK)
+          | (1<<ENCLOSING_MARK)
+          | (1<<COMBINING_SPACING_MARK))));
+    }
+
+    public boolean isNumber(char ch) {
+        return (0 != ((1<<getCategory(ch)) &
+          ((1<<DECIMAL_DIGIT_NUMBER)
+          | (1<<LETTER_NUMBER)
+          | (1<<OTHER_NUMBER))));
+    }
+
+    public boolean isSeparator(char ch) {
+        return (0 != ((1<<getCategory(ch)) &
+          ((1<<SPACE_SEPARATOR)
+          | (1<<LINE_SEPARATOR)
+          | (1<<PARAGRAPH_SEPARATOR))));
+    }
+
+    public boolean isFormat(char ch) {
+        return (0 != ((1<<getCategory(ch)) &
+          ((1<<CONTROL)
+          | (1<<FORMAT))));
+    }
+
+    public boolean isPunctuation(char ch) {
+        return (0 != ((1<<getCategory(ch)) &
+          ((1<<DASH_PUNCTUATION)
+          | (1<<START_PUNCTUATION)
+          | (1<<END_PUNCTUATION)
+          | (1<<CONNECTOR_PUNCTUATION)
+          | (1<<START_PUNCTUATION)
+          | (1<<END_PUNCTUATION)
+          | (1<<OTHER_PUNCTUATION))));
+    }
+
+    public boolean isSymbol(char ch) {
+        return (0 != ((1<<getCategory(ch)) &
+          ((1<<MATH_SYMBOL)
+          | (1<<CURRENCY_SYMBOL)
+          | (1<<MODIFIER_SYMBOL)
+          | (1<<OTHER_SYMBOL))));
+    }
+
+    //
+    // Characters excluded from composition.  This is read from the Unicode
+    // file CompositionExclusions.txt.
+    //
+    String composeExclude = "";
+
+    /**
+     * Is this character excluded from the composition algorithm by virtue
+     * of being listed in the composition exclusion table in Tech Report #15?
+     */
+    public boolean isExcludedComposition(char ch) {
+        return isDisparaged(ch)
+            || composeExclude.indexOf(ch) >= 0
+            || getCanonicalClass(getDecompositionChars(ch).charAt(0)) != 0;
+    }
+
+
+
+    public String getName(String s) {
+        return getName(s,true);
+    }
+
+    public String getName(String s, boolean shortVersion) {
+        StringBuffer temp = new StringBuffer();
+        for (int i = 0; i < s.length(); ++i) {
+            if (i != 0) temp.append(", ");
+            temp.append(getName(s.charAt(i), shortVersion));
+        }
+        return temp.toString();
+    }
+
+    public String getName(char ch, boolean shortVersion) {
+        String result = getName(ch);
+        if (!shortVersion) return result;
+        result = replace(result,"LETTER ","");
+        result = replace(result,"CHARACTER ","");
+        result = replace(result,"SIGN ","");
+        result = replace(result,"CAPITAL ","UC ");
+        if (getCategory(ch) == LOWERCASE_LETTER)
+          result = replace(result,"SMALL ","LC ");
+        result = replace(result,"COMBINING ","-");
+        result = replace(result,"WITH ","");
+        result = replace(result,"AND ","");
+        result = replace(result,"VARIA","GRAVE");
+        result = replace(result,"OXIA","ACUTE");
+        result = replace(result,"VRACHY","BREVE");
+        result = replace(result,"VERTICAL LINE ABOVE","TONOS");
+        result = replace(result,"PSILI","SMOOTH");
+        result = replace(result,"DASIA","ROUGH");
+        result = replace(result,"COMMA ABOVE","SMOOTH");
+        result = replace(result,"REVERSED COMMA ABOVE","ROUGH");
+        result = replace(result,"YPOGEGRAMMENI","IOTA-SUB");
+        result = replace(result,"PROSGEGRAMMENI","IOTA-AD");
+        result = replace(result,"DIALYTIKA","DIAERESIS");
+        result = replace(result,"PERISPOMENI","CIRCUMFLEX");
+        result = replace(result,"VOICED SOUND MARK","VOICED SIGN");
+        result = replace(result,"PROLONGED SOUND MARK","VOICED SIGN");
+        result = replace(result,"KATAKANA-HIRAGANA","KANA");
+        result = replace(result,"COMPATIBILITY IDEOGRAPH-","");
+        result = replace(result,"CHOSEONG","INITIAL");
+        result = replace(result,"JUNGSEONG","MEDIAL");
+        result = replace(result,"JONGSEONG","FINAL");
+
+        return result.substring(0,1)
+          + result.substring(1,result.length()).toLowerCase();
+    }
+
+    public String replace(String source,
+      String replacee, String replacer) {
+        int p = source.indexOf(replacee);
+        if (p == -1) return source;
+        return source.substring(0,p)
+          + replacer
+          + source.substring(p+replacee.length(),source.length());
+    }
+
+    public boolean isCCS(String s) {
+        if (s.length() < 2) return false;
+        if (isMark(s.charAt(0))) return false;
+        for (int i = 1; i < s.length(); ++i) {
+            if (!isMark(s.charAt(i))) return false;
+        }
+        return true;
+    }
+
+    // combining base sequence := <cat_zero>+ <cat_pos>*
+    public boolean isCBS(String s) {
+        if (s.length() == 0) return false;
+        if (getCanonicalClass(s.charAt(0)) != 0) return false;
+        boolean gotGreater = false;
+        for (int i = 1; i < s.length(); ++i) {
+            if (getCanonicalClass(s.charAt(i)) == 0) {
+                if (gotGreater) return false;
+            } else {
+                gotGreater = true;
+            }
+        }
+        return true;
+    }
+
+    public boolean hasCanonicalDecomposition(char ch) {
+        String decomp = getDecomposition(ch);
+        return (decomp.length() != 0 && decomp.indexOf('<') == -1);
+    }
+
+    public boolean hasCompatibilityDecomposition(char ch) {
+        String decomp = getDecomposition(ch);
+        return (decomp.length() != 0 && decomp.indexOf('<') != -1);
+    }
+
+    public boolean isEquivalent(
+      String a, String b, boolean canonical) {
+        return getFullDecomposition(a, canonical).equals(
+          getFullDecomposition(b, canonical));
+    }
+
+    // use very dumb algorithm. Don't need lower order one.
+
+    public String getFullDecomposition(
+      String s, boolean canonical) {
+        StringBuffer output = new StringBuffer();
+        for (int i = 0; i < s.length(); ++i) {
+            getFullDecomp2(s.charAt(i),canonical,output);
+        }
+        return fixCanonical(output).toString();
+    }
+
+    public StringBuffer getFullDecomposition(
+      char ch, boolean canonical, StringBuffer output) {
+
+        StringBuffer result = getFullDecomp2(ch,canonical,output);
+        return fixCanonical(result);
+    }
+
+    public String getFullDecomposition(
+      char ch, boolean canonical) {
+        return getFullDecomposition(ch, canonical, new StringBuffer()).toString();
+    }
+
+    /**
+     * Given a decomposed string of characters, put it in canonical
+     * order by finding and processing all exchangeable pairs.
+     */
+    public StringBuffer fixCanonical(StringBuffer target) {
+        for (int i = 1; i < target.length(); ++i) {
+            char ch = target.charAt(i);
+            short canClass = getCanonicalClass(ch);
+            char chPrev = target.charAt(i-1);
+            short canClassPrev = getCanonicalClass(chPrev);
+            if (canClass != 0 && canClass < canClassPrev) {
+                target.setCharAt(i-1, ch);
+                target.setCharAt(i, chPrev);
+                if (i > 1) i -= 2; // backup (-1 to compensate for loop)
+            }
+        }
+        return target;
+    }
+
+    public String fixCanonical(String source) {
+        return fixCanonical(new StringBuffer(source)).toString();
+    }
+
+
+    // ============================================
+    //                  PRIVATES
+    // ============================================
+
+    static class CharData {
+        public CharData() {
+        };
+
+        String name = "";
+        String decomposition = "";
+        String name10 = "";
+        String comment = "";
+
+        float numeric = Float.MIN_VALUE;
+
+        short canonical = 0;
+        short decimal = Short.MIN_VALUE;
+        short digit = Short.MIN_VALUE;
+
+        char uppercase;
+        char lowercase;
+        char titlecase;
+
+        byte category;
+        byte bidi = 0;
+
+        boolean mirrored;
+    };
+
+    private static final CharData UNASSIGNED_INFO = new CharData();
+    private static char cachedChar = 0xFFFF;
+
+    private CharData getInfo(char ch) {
+        if (ch == cachedChar) return UNASSIGNED_INFO;
+        // remap special ranges
+        if (ch >= 0x4E00 && ch < 0xF900) {
+            if (ch <= 0x9FA5) ch = 0x4E00;
+            else if (ch >= 0xAC00 && ch <= 0xD7A3) ch = 0xAC00;
+            else if (ch >= 0xD800 && ch <= 0xDFFF) ch = 0xD800;
+            else if (ch >= 0xE000) ch = 0xE000;
+        }
+        Object value = cache[ch];
+        CharData result;
+        if (value == null) {
+            result = UNASSIGNED_INFO;
+        } else if (value instanceof String) {
+            result = updateCache((String)value);
+        } else {
+            result = (CharData)value;
+        }
+        return result;
+    }
+
+    private StringBuffer getFullDecomp2(
+      char ch, boolean canonical, StringBuffer output) {
+
+        String decomp = getDecomposition(ch);
+        if (decomp.length() == 0
+          || (canonical && decomp.indexOf('<') != -1)) {
+            output.append(ch);
+            return output;
+        }
+        boolean inBrackets = false;
+        for (int i = 0; i < decomp.length(); ++i) {
+            char c = decomp.charAt(i);
+            if (c == '<') inBrackets = true;
+            else if (c == '>') inBrackets = false;
+            else if (inBrackets) ; // skip
+            else if (c == ' ') ; // skip
+            else {
+                String tempString = decomp.substring(i,i+4);
+                char temp = (char)Integer.parseInt(tempString,16);
+                getFullDecomposition(temp,canonical,output);
+                i+= 3;
+            }
+        }
+        return output;
+    }
+
+    public String getDecompositionChars(char ch) {
+        StringBuffer output = new StringBuffer();
+        String decomp = getDecomposition(ch);
+        if (decomp.length() == 0) {
+            output.append(ch);
+            return output.toString();
+        }
+        boolean inBrackets = false;
+        for (int i = 0; i < decomp.length(); ++i) {
+            char c = decomp.charAt(i);
+            if (c == '<') inBrackets = true;
+            else if (c == '>') inBrackets = false;
+            else if (inBrackets) ; // skip
+            else if (c == ' ') ; // skip
+            else {
+                String tempString = decomp.substring(i,i+4);
+                char temp = (char)Integer.parseInt(tempString,16);
+                output.append(temp);
+                i+= 3;
+            }
+        }
+        return output.toString();
+    }
+
+    public UInfo(String fileName, String composeExcludeFileName) {
+        long startTime,endTime;
+
+        BufferedReader input = null;
+        String line = null;
+        try {
+            input = new BufferedReader(new FileReader(fileName),64*1024);
+            for (int count = 0;;++count) {
+                line = input.readLine();
+                if (line == null) break;
+                if (line.length() == 0) continue;
+                char ch = charFrom(line.substring(0,4));
+                if (DEBUG) if ((count % 100) == 0)
+                    System.out.println("[" + count + "," + Utility.hex(ch) + ']');
+                cache[ch] = line;
+            }
+
+            // Read composition exlusions
+            input = new BufferedReader(new FileReader(composeExcludeFileName),64*1024);
+            StringBuffer ce = new StringBuffer();
+            for (;;) {
+                line = input.readLine();
+                if (line == null) break;
+                if (line.length() == 0 ||
+                    Character.digit(line.charAt(0), 16) < 0) continue;
+                ce.append(charFrom(line.substring(0,4)));
+            }
+            composeExclude = ce.toString();
+        } catch (Exception ex) {
+            try {
+                input.close();
+            } catch (Exception ex2) {}
+            ex.printStackTrace();
+            throw new IllegalArgumentException("Couldn't read file "
+              + ex.getClass().getName() + " " + ex.getMessage()
+              + " line = " + line
+              );
+        }
+    }
+
+    public UInfo() {
+        // FIX
+        // This is bad...this path must be correct relative to the
+        // user's current directory.  I have changed it so that it's
+        // relative to the root icu4j directory, so it works as long
+        // as code is run from that directory, e.g., "java -classpath
+        // classes...".  A better way to do this might be to get it
+        // from a system property that is defined on the command line,
+        // e.g., "java -Dicu4j=D:/icu4j..." - liu
+        this("src/data/unicode/UnicodeData.txt",
+             "src/data/unicode/CompositionExclusions.txt");
+    }
+
+    /*
+  0 Code value in 4-digit hexadecimal format.
+  1 Unicode 2.1 Character Name. These names match exactly the
+  2 General Category. This is a useful breakdown into various "character
+  3 Canonical Combining Classes. The classes used for the
+  4 Bidirectional Category. See the list below for an explanation of the
+  5 Character Decomposition. In the Unicode Standard, not all of
+  6 Decimal digit value. This is a numeric field. If the character
+  7 Digit value. This is a numeric field. If the character represents a
+  8 Numeric value. This is a numeric field. If the character has the
+  9 If the characters has been identified as a "mirrored" character in
+ 10 Unicode 1.0 Name. This is the old name as published in Unicode 1.0.
+ 11 10646 Comment field. This field is informative.
+ 12 Upper case equivalent mapping. If a character is part of an
+ 13 Lower case equivalent mapping. Similar to 12. This field is informative.
+ 14 Title case equivalent mapping. Similar to 12. This field is informative.
+    */
+
+    private CharData updateCache(String line) {
+        try {
+            String[] parts = new String[30];
+            Utility.split(line,';',parts);
+            CharData info = new CharData();
+            char ch = charFrom(parts[0]);
+            info.name = parts[1];
+            info.category = (byte)Utility.lookup(parts[2], CATEGORY_TABLE);
+            info.canonical = shortFrom(parts[3]);
+            info.bidi = (byte)Utility.lookup(parts[4], BIDI_TABLE);
+            info.decomposition = parts[5];
+            info.decimal = shortFrom(parts[6]);
+            info.digit = shortFrom(parts[7]);
+            info.numeric = floatFrom(parts[8]);
+            info.mirrored = charFrom(parts[9]) == 'Y';
+            info.name10 = parts[10];
+            info.comment = parts[11];
+            info.uppercase = charFrom(parts[12]);
+            if (info.uppercase == 0) info.uppercase = ch;
+            info.lowercase = charFrom(parts[13]);
+            if (info.lowercase == 0) info.lowercase = ch;
+            info.titlecase = charFrom(parts[14]);
+            if (info.titlecase == 0) info.titlecase = info.uppercase;
+            String trial = Utility.hex(ch) + ";" + info;
+            if (DEBUG) if (!trial.equals(line)) {
+                System.out.println("Difference between:");
+                System.out.println(line);
+                System.out.println(trial);
+            }
+            cache[ch] = info;
+            return info;
+        }
+        catch (NumberFormatException e) {
+            System.out.println("updateCache: error parsing '" + line + "'");
+            throw e;
+        }
+    }
+
+    private static CharData typeInfo = new CharData();
+
+    private boolean latin1(char c) {
+        return ((c >= 20 && c <= 0x7F) || c > 0xA0);
+    }
+
+    private static final String[] YN_TABLE = {"N", "Y"};
+
+    private static final String[] CATEGORY_TABLE = {
+        "Cn", // = Other, Not Assigned
+
+        "Lu", // = Letter, Uppercase
+        "Ll", // = Letter, Lowercase
+        "Lt", // = Letter, Titlecase
+        "Lm", // = Letter, Modifier
+        "Lo", // = Letter, Other
+
+        "Mn", // = Mark, Non-Spacing
+        "Me", // = Mark, Enclosing
+        "Mc", // = Mark, Spacing Combining
+
+        "Nd", // = Number, Decimal Digit
+        "Nl", // = Number, Letter
+        "No", // = Number, Other
+
+        "Zs", // = Separator, Space
+        "Zl", // = Separator, Line
+        "Zp", // = Separator, Paragraph
+
+        "Cc", // = Other, Control
+        "Cf", // = Other, Format
+        "",   // unused
+        "Co", // = Other, Private Use
+        "Cs", // = Other, Surrogate
+
+
+        "Pd", // = Punctuation, Dash
+        "Ps", // = Punctuation, Open
+        "Pe", // = Punctuation, Close
+        "Pc", // = Punctuation, Connector
+        "Po", // = Punctuation, Other
+
+        "Sm", // = Symbol, Math
+        "Sc", // = Symbol, Currency
+        "Sk", // = Symbol, Modifier
+        "So", // = Symbol, Other
+
+        "Pi", // = Punctuation, Initial quote (may behave like Ps or Pe depending on usage)
+        "Pf", // = Punctuation, Final quote (may behave like Ps or Pe dependingon usage)
+    };
+
+    private static String[] BIDI_TABLE = {
+        "L", // Left-Right; Most alphabetic, syllabic, and logographic characters (e.g., CJK ideographs)
+        "R", // Right-Left; Arabic, Hebrew, and punctuation specific to those scripts
+        "EN", //    European Number
+        "ES", //    European Number Separator
+        "ET", //    European Number Terminator
+        "AN", //    Arabic Number
+        "CS", //    Common Number Separator
+        "B", // Block Separator
+        "S", // Segment Separator
+        "WS", //    Whitespace
+        "ON" // Other Neutrals ; All other characters: punctuation, symbols
+    };
+
+    private static short shortFrom(String p) {
+        if (p.length() == 0) return Short.MIN_VALUE;
+        return Short.parseShort(p);
+    }
+
+    private static float floatFrom(String p) {
+        try {
+            if (p.length() == 0) return Float.MIN_VALUE;
+            int fract = p.indexOf('/');
+            if (fract == -1) return Float.valueOf(p).floatValue();
+            String q = p.substring(0,fract);
+            float num = 0;
+            if (q.length() != 0) num = Integer.parseInt(q);
+            p = p.substring(fract+1,p.length());
+            float den = 0;
+            if (p.length() != 0) den = Integer.parseInt(p);
+            return num/den;
+        }
+        catch (NumberFormatException e) {
+            System.out.println("floatFrom: error parsing '" + p + "'");
+            throw e;
+        }
+    }
+
+    private static char charFrom(String p) {
+        if (p.length() == 0) return '\u0000';
+        else if (p.length() == 1) return p.charAt(0);
+        int temp = Integer.parseInt(p, 16);
+        if (temp < 0 || temp > 0xFFFF)
+            throw new NumberFormatException(
+                "Hex char out of range: " + p);
+        return (char)temp;
+    }
+
+
+    private Object[] cache = new Object[65536];
+}
diff --git a/src/com/ibm/icu/test/text/ArabicShapingRegTest.java b/src/com/ibm/icu/test/text/ArabicShapingRegTest.java
new file mode 100755
index 0000000..d1eebbb
--- /dev/null
+++ b/src/com/ibm/icu/test/text/ArabicShapingRegTest.java
@@ -0,0 +1,415 @@
+/*
+*******************************************************************************
+*   Copyright (C) 2001, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+
+package com.ibm.icu.test.text;
+
+import com.ibm.test.TestFmwk;
+import com.ibm.text.ArabicShaping;
+import com.ibm.text.ArabicShapingException;
+
+/**
+ * Regression test for Arabic shaping.
+ */
+public class ArabicShapingRegTest extends TestFmwk {
+
+    /* constants copied from ArabicShaping for convenience */
+
+    public static final int LENGTH_GROW_SHRINK = 0;
+    public static final int LENGTH_FIXED_SPACES_NEAR = 1;
+    public static final int LENGTH_FIXED_SPACES_AT_END = 2;
+    public static final int LENGTH_FIXED_SPACES_AT_BEGINNING = 3;
+
+    public static final int TEXT_DIRECTION_LOGICAL = 0;
+    public static final int TEXT_DIRECTION_VISUAL_LTR = 4;
+
+    public static final int LETTERS_NOOP = 0;
+    public static final int LETTERS_SHAPE = 8;
+    public static final int LETTERS_UNSHAPE = 0x10;
+
+    public static final int DIGITS_NOOP = 0;
+    public static final int DIGITS_EN2AN = 0x20;
+    public static final int DIGITS_AN2EN = 0x40;
+    public static final int DIGITS_EN2AN_INIT_LR = 0x60;
+    public static final int DIGITS_EN2AN_INIT_AL = 0x80;
+    private static final int DIGITS_RESERVED = 0xa0;
+
+    public static final int DIGIT_TYPE_AN = 0;
+    public static final int DIGIT_TYPE_AN_EXTENDED = 0x100;
+
+    public static class TestData {
+        public int type;
+        public String source;
+        public int flags;
+        public String result;
+        public int length;
+        public Class error;
+
+        public static final int STANDARD = 0;
+        public static final int PREFLIGHT = 1;
+        public static final int ERROR = 2;
+
+        public static TestData standard(String source, int flags, String result) {
+            return new TestData(STANDARD, source, flags, result, 0, null);
+        }
+        
+        public static TestData preflight(String source, int flags, int length) {
+            return new TestData(PREFLIGHT, source, flags, null, length, null);
+        }
+
+        public static TestData error(String source, int flags, Class error) {
+            return new TestData(ERROR, source, flags, null, 0, error);
+        }
+
+        private TestData(int type, String source, int flags, String result, int length, Class error) {
+            this.type = type;
+            this.source = source;
+            this.flags = flags;
+            this.result = result;
+            this.length = length;
+            this.error = error;
+        }
+
+        private static final String[] typenames = { "standard", "preflight", "error" };
+
+        public String toString() {
+            StringBuffer buf = new StringBuffer(super.toString());
+            buf.append("[\n");
+            buf.append(typenames[type]);
+            buf.append(",\n");
+            if (source == null) {
+                buf.append("null");
+            } else {
+                buf.append('"');
+                buf.append(escapedString(source));
+                buf.append('"');
+            }
+            buf.append(",\n");
+            buf.append(Integer.toHexString(flags));
+            buf.append(",\n");
+            if (result == null) {
+                buf.append("null");
+            } else {
+                buf.append('"');
+                buf.append(escapedString(result));
+                buf.append('"');
+            }
+            buf.append(",\n");
+            buf.append(length);
+            buf.append(",\n");
+            buf.append(error);
+            buf.append(']');
+            return buf.toString();
+        }
+    }
+
+    private static final String lamAlefSpecialVLTR =
+        "\u0020\u0646\u0622\u0644\u0627\u0020" +
+     	"\u0646\u0623\u064E\u0644\u0627\u0020" +
+     	"\u0646\u0627\u0670\u0644\u0627\u0020" +
+     	"\u0646\u0622\u0653\u0644\u0627\u0020" +
+     	"\u0646\u0625\u0655\u0644\u0627\u0020" +
+     	"\u0646\u0622\u0654\u0644\u0627\u0020" +
+     	"\uFEFC\u0639";
+
+    private static final String tashkeelSpecialVLTR = 
+        "\u064A\u0628\u0631\u0639\u0020" +
+        "\u064A\u0628\u0651\u0631\u064E\u0639\u0020" +
+        "\u064C\u064A\u0628\u0631\u064F\u0639\u0020" +
+        "\u0628\u0670\u0631\u0670\u0639\u0020" +
+        "\u0628\u0653\u0631\u0653\u0639\u0020" +
+        "\u0628\u0654\u0631\u0654\u0639\u0020" +
+        "\u0628\u0655\u0631\u0655\u0639\u0020";
+
+    private static final String logicalUnshape = 
+        "\u0020\u0020\u0020\uFE8D\uFEF5\u0020\uFEE5\u0020\uFE8D\uFEF7\u0020" +
+        "\uFED7\uFEFC\u0020\uFEE1\u0020\uFE8D\uFEDF\uFECC\uFEAE\uFE91\uFEF4" +
+        "\uFE94\u0020\uFE8D\uFEDF\uFEA4\uFEAE\uFE93\u0020\u0020\u0020\u0020";
+
+    private static final String numSource =
+        "\u0031" +  /* en:1 */
+        "\u0627" +  /* arabic:alef */
+        "\u0032" +  /* en:2 */
+        "\u06f3" +  /* an:3 */
+        "\u0061" +  /* latin:a */
+        "\u0034";   /* en:4 */
+
+    private static final TestData[] tests = {
+        /* lam alef special visual ltr */
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
+                          "\u0020\ufee5\u0020\ufef5\ufe8d\u0020" +
+                          "\ufee5\u0020\ufe76\ufef7\ufe8d\u0020" +
+                          "\ufee5\u0020\u0670\ufefb\ufe8d\u0020" +
+                          "\ufee5\u0020\u0653\ufef5\ufe8d\u0020" +
+                          "\ufee5\u0020\u0655\ufef9\ufe8d\u0020" +
+                          "\ufee5\u0020\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb"),
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_END,
+                          "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
+                          "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
+                          "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
+                          "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
+                          "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb\u0020\u0020\u0020\u0020" +
+                          "\u0020\u0020"),
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_BEGINNING,
+                          "\u0020\u0020\u0020\u0020\u0020\u0020" +
+                          "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
+                          "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
+                          "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
+                          "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
+                          "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb"),
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_GROW_SHRINK,
+                          "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
+                          "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
+                          "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
+                          "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
+                          "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb"),
+        /* TASHKEEL unsupported
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE_EXCEPT_TASHKEEL | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
+                          "\u0020\ufee5\u0020\ufef5\ufe8d\u0020" +
+                          "\ufee5\u0020\ufe76\ufef7\ufe8d\u0020" +
+                          "\ufee5\u0020\u0670\ufefb\ufe8d\u0020" +
+                          "\ufee5\u0020\u0653\ufef5\ufe8d\u0020" +
+                          "\ufee5\u0020\u0655\ufef9\ufe8d\u0020" +
+                          "\ufee5\u0020\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb"),
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE_EXCEPT_TASHKEEL | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_END,
+                          "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
+                          "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
+                          "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
+                          "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
+                          "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb\u0020\u0020\u0020\u0020" +
+                          "\u0020\u0020"),
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE_EXCEPT_TASHKEEL | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_BEGINNING,
+                          "\u0020\u0020\u0020\u0020\u0020\u0020" +
+                          "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
+                          "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
+                          "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
+                          "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
+                          "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb"),
+        TestData.standard(lamAlefSpecialVLTR,
+                          LETTERS_SHAPE_EXCEPT_TASHKEEL | TEXT_DIRECTION_VISUAL_LTR | LENGTH_GROW_SHRINK,
+                          "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
+                          "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
+                          "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
+                          "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
+                          "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
+                          "\ufefc\ufecb"),
+        */
+
+        /* tashkeel special visual ltr */
+        TestData.standard(tashkeelSpecialVLTR,
+                          LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
+                          "\ufef2\ufe91\ufeae\ufecb\u0020" +
+                          "\ufef2\ufe91\ufe7c\ufeae\ufe77\ufecb\u0020" +
+                          "\ufe72\ufef2\ufe91\ufeae\ufe79\ufecb\u0020" +
+                          "\ufe8f\u0670\ufeae\u0670\ufecb\u0020" +
+                          "\ufe8f\u0653\ufeae\u0653\ufecb\u0020" +
+                          "\ufe8f\u0654\ufeae\u0654\ufecb\u0020" +
+                          "\ufe8f\u0655\ufeae\u0655\ufecb\u0020"),
+        /* TASHKEEL unsupported
+        TestData.standard(tashkeelSpecialVLTR,
+                          LETTERS_SHAPE_EXCEPT_TASHKEEL | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
+                          "\ufef2\ufe91\ufeae\ufecb\u0020" +
+                          "\ufef2\ufe91\ufe7c\ufeae\ufe76\ufecb\u0020" +
+                          "\ufe72\ufef2\ufe91\ufeae\ufe78\ufecb\u0020" +
+                          "\ufe8f\u0670\ufeae\u0670\ufecb\u0020" +
+                          "\ufe8f\u0653\ufeae\u0653\ufecb\u0020" +
+                          "\ufe8f\u0654\ufeae\u0654\ufecb\u0020" +
+                          "\ufe8f\u0655\ufeae\u0655\ufecb\u0020"),
+        */
+
+        /* logical unshape */
+        TestData.standard(logicalUnshape,
+                          LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_NEAR,
+                          "\u0020\u0020\u0020\u0627\u0644\u0622\u0646\u0020\u0627\u0644\u0623\u0642\u0644\u0627" +
+                          "\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627\u0644\u062d\u0631" +
+                          "\u0629\u0020\u0020\u0020\u0020"),
+        TestData.standard(logicalUnshape,
+                          LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_END,
+                          "\u0020\u0020\u0020\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642" +
+                          "\u0644\u0627\u0020\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627" +
+                          "\u0644\u062d\u0631\u0629\u0020"),
+        TestData.standard(logicalUnshape,
+                          LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_BEGINNING,
+                          "\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642\u0644\u0627\u0020" +
+                          "\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627\u0644\u062d\u0631" +
+                          "\u0629\u0020\u0020\u0020\u0020"),
+        TestData.standard(logicalUnshape,
+                          LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_GROW_SHRINK,
+                          "\u0020\u0020\u0020\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642" +
+                          "\u0644\u0627\u0020\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627" +
+                          "\u0644\u062d\u0631\u0629\u0020\u0020\u0020\u0020"),
+
+        /* numbers */
+        TestData.standard(numSource, 
+                          DIGITS_EN2AN | DIGIT_TYPE_AN, 
+                          "\u0661\u0627\u0662\u06f3\u0061\u0664"),
+        TestData.standard(numSource, 
+                          DIGITS_AN2EN | DIGIT_TYPE_AN_EXTENDED, 
+                          "\u0031\u0627\u0032\u0033\u0061\u0034"),
+        TestData.standard(numSource, 
+                          DIGITS_EN2AN_INIT_LR | DIGIT_TYPE_AN, 
+                          "\u0031\u0627\u0662\u06f3\u0061\u0034"),
+        TestData.standard(numSource, 
+                          DIGITS_EN2AN_INIT_AL | DIGIT_TYPE_AN_EXTENDED, 
+                          "\u06f1\u0627\u06f2\u06f3\u0061\u0034"),
+        TestData.standard(numSource, 
+                          DIGITS_EN2AN_INIT_LR | DIGIT_TYPE_AN | TEXT_DIRECTION_VISUAL_LTR,
+                          "\u0661\u0627\u0032\u06f3\u0061\u0034"),
+        TestData.standard(numSource, 
+                          DIGITS_EN2AN_INIT_AL | DIGIT_TYPE_AN_EXTENDED | TEXT_DIRECTION_VISUAL_LTR,
+                          "\u06f1\u0627\u0032\u06f3\u0061\u06f4"),
+
+        /* no-op */
+        TestData.standard(numSource, 
+                          0,
+                          numSource),
+
+        /* preflight */
+        TestData.preflight("\u0644\u0627",
+                           LETTERS_SHAPE | LENGTH_GROW_SHRINK,
+                           1),
+
+        TestData.preflight("\u0644\u0627\u0031",
+                           DIGITS_EN2AN | DIGIT_TYPE_AN_EXTENDED | LENGTH_GROW_SHRINK,
+                           3),
+
+        TestData.preflight("\u0644\u0644",
+                           LETTERS_SHAPE | LENGTH_GROW_SHRINK,
+                           2),
+
+        TestData.preflight("\ufef7",
+                           LETTERS_UNSHAPE | LENGTH_GROW_SHRINK,
+                           2),
+
+        /* bad data */
+        TestData.error("\u0020\ufef7\u0644\u0020",
+                       LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_NEAR,
+                       ArabicShapingException.class),
+
+        TestData.error("\u0020\ufef7",
+                       LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_END,
+                       ArabicShapingException.class),
+
+        TestData.error("\ufef7\u0020",
+                       LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_BEGINNING,
+                       ArabicShapingException.class),
+
+        /* bad options */
+        TestData.error("\ufef7",
+                       0xffffffff,
+                       IllegalArgumentException.class),
+    };
+
+    public void testStandard() {
+        for (int i = 0; i < tests.length; ++i) {
+            TestData test = tests[i];
+
+            Exception ex = null;
+            String result = null;
+            ArabicShaping shaper = null;
+            try {
+                shaper = new ArabicShaping(test.flags);
+                result = shaper.shape(test.source);
+            }
+            catch (Exception e) {
+                ex = e;
+            }
+            
+            switch (test.type) {
+            case TestData.STANDARD:
+                if (!test.result.equals(result)) {
+                    reportTestFailure(i, test, shaper, result, ex);
+                }
+                break;
+                
+            case TestData.PREFLIGHT:
+                if (result == null || test.length != result.length()) {
+                    reportTestFailure(i, test, shaper, result, ex);
+                }
+                break;
+
+            case TestData.ERROR:
+                if (!test.error.isInstance(ex)) {
+                    reportTestFailure(i, test, shaper, result, ex);
+                }
+                break;
+            }
+        }                    
+    }
+
+    public void reportTestFailure(int index, TestData test, ArabicShaping shaper, String result, Exception error) {
+        StringBuffer buf = new StringBuffer();
+        buf.append("*** test failure ***\n");
+        buf.append("index: " + index + "\n");
+        buf.append("test: " + test + "\n");
+        buf.append("shaper: " + shaper + "\n");
+        buf.append("result: " + escapedString(result) + "\n");
+        buf.append("error: " + error + "\n");
+
+        if (result != null && test.result != null && !test.result.equals(result)) {
+            for (int i = 0; i < Math.max(test.result.length(), result.length()); ++i) {
+                String temp = Integer.toString(i);
+                if (temp.length() < 2) {
+                    temp = " ".concat(temp);
+                }
+                char trg = i < test.result.length() ? test.result.charAt(i) : '\uffff';
+                char res = i < result.length() ? result.charAt(i) : '\uffff';
+
+                buf.append("[" + temp + "] ");
+                buf.append(escapedString("" + trg) + " ");
+                buf.append(escapedString("" + res) + " ");
+                if (trg != res) {
+                    buf.append("***");
+                }
+                buf.append("\n");
+            }
+        }
+        err(buf.toString());
+    }
+
+    private static String escapedString(String str) {
+        StringBuffer buf = new StringBuffer(str.length() * 6);
+        for (int i = 0; i < str.length(); ++i) {
+            char ch = str.charAt(i);
+            buf.append("\\u");
+            if (ch < 0x1000) {
+                buf.append('0');
+            }
+            if (ch < 0x0100) {
+                buf.append('0');
+            }
+            if (ch < 0x0010) {
+                buf.append('0');
+            }
+            buf.append(Integer.toHexString(ch));
+        }
+        return buf.toString();
+    }
+
+    public static void main(String[] args) {
+        try {
+            new ArabicShapingRegTest().run(args);
+        }
+        catch (Exception e) {
+            System.out.println(e);
+        }
+    }
+}
+
diff --git a/src/com/ibm/icu/test/text/ArabicShapingTest.java b/src/com/ibm/icu/test/text/ArabicShapingTest.java
new file mode 100755
index 0000000..670f5c6
--- /dev/null
+++ b/src/com/ibm/icu/test/text/ArabicShapingTest.java
@@ -0,0 +1,288 @@
+/*
+*******************************************************************************
+*   Copyright (C) 2001, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+
+package com.ibm.icu.test.text;
+
+import com.ibm.text.ArabicShaping;
+import com.ibm.text.ArabicShapingException;
+
+/**
+ * Interactive test for Arabic shaping.
+ * Invoke from a command line passing args and strings.  Use '-help' to see description of arguments.
+ */
+public class ArabicShapingTest {
+    private static final int COPY = 0;
+    private static final int INPLACE = 1;
+    private static final int STRING = 2;
+
+    public static final void main(String[] args) {
+        int testtype = COPY;
+        int options = 0;
+        int ss = 0;
+        int sl = -1;
+        int ds = 0;
+        int dl = -1;
+        String text = "$22.4 test 123 \ufef6\u0644\u0622 456 \u0664\u0665\u0666!";
+
+        for (int i = 0; i < args.length; ++i) {
+            String arg = args[i];
+            if (arg.charAt(0) == '-') {
+                String opt = arg.substring(1);
+                String val = opt;
+                int index = arg.indexOf(':');
+                if (index != -1) {
+                    opt = opt.substring(0, Math.min(index, 3));
+                    val = arg.substring(index + 1);
+                }
+                
+                if (opt.equalsIgnoreCase("len")) {
+                    options &= ~ArabicShaping.LENGTH_MASK;
+                    if (val.equalsIgnoreCase("gs")) {
+                        options |= ArabicShaping.LENGTH_GROW_SHRINK;
+                    } else if (val.equalsIgnoreCase("sn")) {
+                        options |= ArabicShaping.LENGTH_FIXED_SPACES_NEAR;
+                    } else if (val.equalsIgnoreCase("se")) {
+                        options |= ArabicShaping.LENGTH_FIXED_SPACES_AT_END;
+                    } else if (val.equalsIgnoreCase("sb")) {
+                        options |= ArabicShaping.LENGTH_FIXED_SPACES_AT_BEGINNING;
+                    } else {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("dir")) {
+                    options &= ~ArabicShaping.TEXT_DIRECTION_MASK;
+                    if (val.equalsIgnoreCase("log")) {
+                        options |= ArabicShaping.TEXT_DIRECTION_LOGICAL;
+                    } else if (val.equalsIgnoreCase("vis")) {
+                        options |= ArabicShaping.TEXT_DIRECTION_VISUAL_LTR;
+                    } else {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("let")) {
+                    options &= ~ArabicShaping.LETTERS_MASK;
+                    if (val.equalsIgnoreCase("no")) {
+                        options |= ArabicShaping.LETTERS_NOOP;
+                    } else if (val.equalsIgnoreCase("sh")) {
+                        options |= ArabicShaping.LETTERS_SHAPE;
+                    } else if (val.equalsIgnoreCase("un")) {
+                        options |= ArabicShaping.LETTERS_UNSHAPE;
+                        /* TASHKEEL unsupported
+                    } else if (val.equalsIgnoreCase("ta")) {
+                        options |= ArabicShaping.LETTERS_SHAPE_EXCEPT_TASHKEEL;
+                        */
+                    } else {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("dig")) {
+                    options &= ~ArabicShaping.DIGITS_MASK;
+                    if (val.equalsIgnoreCase("no")) {
+                        options |= ArabicShaping.DIGITS_NOOP;
+                    } else if (val.equalsIgnoreCase("ea")) {
+                        options |= ArabicShaping.DIGITS_EN2AN;
+                    } else if (val.equalsIgnoreCase("ae")) {
+                        options |= ArabicShaping.DIGITS_AN2EN;
+                    } else if (val.equalsIgnoreCase("lr")) {
+                        options |= ArabicShaping.DIGITS_EN2AN_INIT_LR;
+                    } else if (val.equalsIgnoreCase("al")) {
+                        options |= ArabicShaping.DIGITS_EN2AN_INIT_AL;
+                    } else {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("typ")) {
+                    options &= ~ArabicShaping.DIGIT_TYPE_MASK;
+                    if (val.equalsIgnoreCase("an")) {
+                        options |= ArabicShaping.DIGIT_TYPE_AN;
+                    } else if (val.equalsIgnoreCase("ex")) {
+                        options |= ArabicShaping.DIGIT_TYPE_AN_EXTENDED;
+                    } else {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("dst")) {
+                    try {
+                        ds = Integer.parseInt(val);
+                    }
+                    catch (Exception e) {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("dln")) {
+                    try {
+                        dl = Integer.parseInt(val);
+                    }
+                    catch (Exception e) {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("sst")) {
+                    try {
+                        ss = Integer.parseInt(val);
+                    }
+                    catch (Exception e) {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("sln")) {
+                    try {
+                        sl = Integer.parseInt(val);
+                    }
+                    catch (Exception e) {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("tes")) {
+                    if (val.equalsIgnoreCase("cp")) {
+                        testtype = COPY;
+                    } else if (val.equalsIgnoreCase("ip")) {
+                        testtype = INPLACE;
+                    } else if (val.equalsIgnoreCase("st")) {
+                        testtype = STRING;
+                    } else {
+                        throwValError(opt, val);
+                    }
+                } else if (opt.equalsIgnoreCase("help")) {
+                    System.out.println(usage);
+                } else {
+                    throwOptError(opt);
+                }
+            } else {
+                // assume text
+                text = parseText(arg);
+            }
+        }
+
+        if (sl < 0) {
+            sl = text.length() - ss;
+            System.out.println("sl defaulting to " + sl);
+        }
+        if (dl < 0) {
+            dl = 2 * sl;
+            System.out.println("dl defaulting to " + dl);
+        }
+
+        ArabicShaping shaper = new ArabicShaping(options);
+        System.out.println("shaper: " + shaper);
+
+        char[] src = text.toCharArray();
+        System.out.println(" input: '" + escapedText(src, ss, sl) + "'");
+        if (testtype != STRING) {
+            System.out.println("start: " + ss + " length: " + sl + " total length: " + src.length);
+        }
+
+        int result = -1;
+        char[] dest = null;
+
+        try {
+            switch (testtype) {
+            case COPY:
+                dest = new char[ds + dl];
+                result = shaper.shape(src, ss, sl, dest, ds, dl);
+                break;
+
+            case INPLACE:
+                shaper.shape(src, ss, sl);
+                ds = ss;
+                result = sl;
+                dest = src;
+                break;
+
+            case STRING:
+                dest = shaper.shape(text).toCharArray();
+                ds = 0;
+                result = dest.length;
+                break;
+            }
+
+            System.out.println("output: '" + escapedText(dest, ds, result) + "'");
+            System.out.println("length: " + result);
+            if (ds != 0 || result != dest.length) {
+                System.out.println("full output: '" + escapedText(dest, 0, dest.length) + "'");
+            }
+        }
+        catch (ArabicShapingException e) {
+            System.out.println("Caught ArabicShapingException");
+            System.out.println(e);
+        }
+        catch (Exception e) {
+            System.out.println("Caught Exception");
+            System.out.println(e);
+        }
+    }
+
+    private static void throwOptError(String opt) {
+        throwUsageError("unknown option: " + opt);
+    }
+
+    private static void throwValError(String opt, String val) {
+        throwUsageError("unknown value: " + val + " for option: " + opt);
+    }
+
+    private static void throwUsageError(String message) {
+        StringBuffer buf = new StringBuffer("*** usage error ***\n");
+        buf.append(message);
+        buf.append("\n");
+        buf.append(usage);
+        throw new Error(buf.toString());
+    }
+
+    private static final String usage = 
+        "Usage: [option]* [text]\n" +
+        "  where option is in the format '-opt[:val]'\n" +
+        "  options are:\n" +
+        "    -len:[gs|sn|se|sb]    (length: grow/shrink, spaces near, spaces end, spaces beginning)\n" +
+        "    -dir:[log|vis]        (direction: logical, visual)\n" +
+        //        "    -let:[no|sh|un|ta]    (letters: noop, shape, unshape, tashkeel)\n" +
+        "    -let:[no|sh|un]       (letters: noop, shape, unshape)\n" +
+        "    -dig:[no|ea|ae|lr|al] (digits: noop, en2an, an2en, en2an_lr, en2an_al)\n" +
+        "    -typ:[an|ex]          (digit type: arabic, arabic extended)\n" +
+        "    -dst:#                (dest start: [integer])\n" +
+        "    -dln:#                (dest length (max size): [integer])\n" +
+        "    -sst:#                (source start: [integer])\n" +
+        "    -sln:#                (source length: [integer])\n" +
+        "    -tes:[cp|ip|st]       (test type: copy, in place, string)\n" +
+        "    -help                 (print this help message)\n" +
+        "  text can contain unicode escape values in the format '\\uXXXX' only\n";
+        
+    private static String escapedText(char[] text, int start, int length) {
+        StringBuffer buf = new StringBuffer();
+        for (int i = start, e = start + length; i < e; ++i) {
+            char ch = text[i];
+            if (ch < 0x20 || ch > 0x7e) {
+                buf.append("\\u");
+                if (ch < 0x1000) {
+                    buf.append('0');
+                }
+                if (ch < 0x100) {
+                    buf.append('0');
+                }
+                if (ch < 0x10) {
+                    buf.append('0');
+                }
+                buf.append(Integer.toHexString(ch));
+            } else {
+                buf.append(ch);
+            }
+        }
+        return buf.toString();
+    }
+
+    private static String parseText(String text) {
+        // process unicode escapes (only)
+        StringBuffer buf = new StringBuffer();
+        char[] chars = text.toCharArray();
+        for (int i = 0; i < chars.length; ++i) {
+            char ch = chars[i];
+            if (ch == '\\') {
+                if ((i < chars.length - 1) &&
+                    (chars[i+1] == 'u')) {
+                    int val = Integer.parseInt(text.substring(i+2, i+6), 16);
+                    buf.append((char)val);
+                    i += 5;
+                } else {
+                    buf.append('\\');
+                }
+            } else {
+                buf.append(ch);
+            }
+        }
+        return buf.toString();
+    }
+}
diff --git a/src/com/ibm/icu/test/text/UCharacterCompare.java b/src/com/ibm/icu/test/text/UCharacterCompare.java
new file mode 100755
index 0000000..124108c
--- /dev/null
+++ b/src/com/ibm/icu/test/text/UCharacterCompare.java
@@ -0,0 +1,313 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/test/text/Attic/UCharacterCompare.java,v $ 
+* $Date: 2001/03/23 19:52:03 $ 
+* $Revision: 1.6 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.icu.test.text;
+
+import com.ibm.text.UCharacter;
+import com.ibm.text.UCharacterCategory;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.util.Hashtable;
+import java.util.Enumeration;
+
+/**
+* A class to compare the difference in methods between java.lang.Character and
+* UCharacter
+* @author Syn Wee Quek
+* @since oct 06 2000
+* @see com.ibm.text.UCharacter
+*/
+
+public final class UCharacterCompare
+{ 
+  // private variables ================================================
+  
+  private static Hashtable m_hashtable_ = new Hashtable();
+  
+  // public methods ======================================================
+  
+  /**
+  * Main testing method
+  */
+  public static void main(String arg[])
+  {
+    try
+    {
+      FileWriter f;
+      if (arg.length == 0)
+        f = new FileWriter("compare.txt");
+      else
+        f = new FileWriter(arg[0]);
+      PrintWriter p = new PrintWriter(f);
+      p.print("char  character name                                                           ");
+      p.println("method name               ucharacter character");
+      for (char i = Character.MIN_VALUE; i < Character.MAX_VALUE; i ++)
+      {
+        if (UCharacter.isDefined(i) != Character.isDefined(i))
+          trackDifference(p, i, "isDefined()", "" + UCharacter.isDefined(i), 
+                          "" + Character.isDefined(i));
+        else
+        {
+          if (UCharacter.digit(i, 10) != Character.digit(i, 10))
+            trackDifference(p, i, "digit()", "" + UCharacter.digit(i, 10),
+                            "" + Character.digit(i, 10));
+          if (UCharacter.getNumericValue(i) != Character.getNumericValue(i))
+            trackDifference(p, i, "getNumericValue()", 
+                            "" + UCharacter.getNumericValue(i),
+                            "" + Character.getNumericValue(i));
+          if (!compareType(UCharacter.getType(i), Character.getType(i)))
+            trackDifference(p, i, "getType()", "" + UCharacter.getType(i),
+                            "" + Character.getType(i));
+          if (UCharacter.isDigit(i) != Character.isDigit(i))
+            trackDifference(p, i, "isDigit()",
+                            "" + UCharacter.isDigit(i), 
+                            "" + Character.isDigit(i));
+          if (UCharacter.isISOControl(i) != Character.isISOControl(i))
+            trackDifference(p, i, "isISOControl()", 
+                            "" + UCharacter.isISOControl(i),
+                            "" + Character.isISOControl(i));
+          if (UCharacter.isLetter(i) != Character.isLetter(i))
+            trackDifference(p, i, "isLetter()", "" + UCharacter.isLetter(i),
+                            "" + Character.isLetter(i));
+          if (UCharacter.isLetterOrDigit(i) != Character.isLetterOrDigit(i))
+            trackDifference(p, i, "isLetterOrDigit()", 
+                            "" + UCharacter.isLetterOrDigit(i),
+                            "" + Character.isLetterOrDigit(i));
+          if (UCharacter.isLowerCase(i) != Character.isLowerCase(i))
+            trackDifference(p, i, "isLowerCase()", 
+                            "" + UCharacter.isLowerCase(i),
+                            "" + Character.isLowerCase(i));
+          if (UCharacter.isWhitespace(i) != Character.isWhitespace(i))
+            trackDifference(p, i, "isWhitespace()", 
+                            "" + UCharacter.isWhitespace(i),
+                            "" + Character.isWhitespace(i));
+          if (UCharacter.isSpaceChar(i) != Character.isSpaceChar(i))
+            trackDifference(p, i, "isSpaceChar()", 
+                            "" + UCharacter.isSpaceChar(i),
+                            "" + Character.isSpaceChar(i));
+          if (UCharacter.isTitleCase(i) != Character.isTitleCase(i))
+            trackDifference(p, i, "isTitleChar()", 
+                            "" + UCharacter.isTitleCase(i),
+                            "" + Character.isTitleCase(i));
+          if (UCharacter.isUnicodeIdentifierPart(i) != 
+              Character.isUnicodeIdentifierPart(i))
+            trackDifference(p, i, "isUnicodeIdentifierPart()", 
+                            "" + UCharacter.isUnicodeIdentifierPart(i),
+                            "" + Character.isUnicodeIdentifierPart(i));
+          if (UCharacter.isUnicodeIdentifierStart(i) != 
+              Character.isUnicodeIdentifierStart(i))
+            trackDifference(p, i, "isUnicodeIdentifierStart()",
+                            "" + UCharacter.isUnicodeIdentifierStart(i),
+                            "" + Character.isUnicodeIdentifierStart(i));
+          if (UCharacter.isIdentifierIgnorable(i) != 
+              Character.isIdentifierIgnorable(i))
+            trackDifference(p, i, "isIdentifierIgnorable()",
+                            "" + UCharacter.isIdentifierIgnorable(i),
+                            "" + Character.isIdentifierIgnorable(i));
+          if (UCharacter.isUpperCase(i) != Character.isUpperCase(i))
+            trackDifference(p, i, "isUpperCase()", 
+                            "" + UCharacter.isUpperCase(i),
+                            "" + Character.isUpperCase(i));
+          if (UCharacter.toLowerCase(i) != Character.toLowerCase(i))
+            trackDifference(p, i, "toLowerCase()", 
+                            Integer.toHexString(UCharacter.toLowerCase(i)),
+                            Integer.toHexString(Character.toLowerCase(i)));
+          if (!UCharacter.toString(i).equals(new Character(i).toString()))
+            trackDifference(p, i, "toString()",
+                            UCharacter.toString(i),
+                            new Character(i).toString());
+          if (UCharacter.toTitleCase(i) != Character.toTitleCase(i))
+            trackDifference(p, i, "toTitleCase()",
+                            Integer.toHexString(UCharacter.toTitleCase(i)),
+                            Integer.toHexString(Character.toTitleCase(i)));
+          if (UCharacter.toUpperCase(i) != Character.toUpperCase(i))
+            trackDifference(p, i, "toUpperCase()",
+                            Integer.toHexString(UCharacter.toUpperCase(i)),
+                            Integer.toHexString(Character.toUpperCase(i)));
+        }
+      }
+      summary(p);
+      p.close();
+    } 
+    catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+  }
+  
+  // private methods ===================================================
+  
+  /**
+  * Comparing types
+  * @param uchartype UCharacter type
+  * @param jchartype java.lang.Character type
+  */
+  private static boolean compareType(int uchartype, int jchartype)
+  {
+    if (uchartype == UCharacterCategory.UNASSIGNED && 
+        jchartype == Character.UNASSIGNED)
+      return true;
+    if (uchartype == UCharacterCategory.UPPERCASE_LETTER && 
+        jchartype == Character.UPPERCASE_LETTER)
+      return true;                                                   
+    if (uchartype == UCharacterCategory.LOWERCASE_LETTER && 
+        jchartype == Character.LOWERCASE_LETTER)
+      return true;                                                   
+    if (uchartype == UCharacterCategory.TITLECASE_LETTER && 
+        jchartype == Character.TITLECASE_LETTER)
+      return true;
+    if (uchartype == UCharacterCategory.MODIFIER_LETTER && 
+        jchartype == Character.MODIFIER_LETTER)
+      return true;
+    if (uchartype == UCharacterCategory.OTHER_LETTER && 
+        jchartype == Character.OTHER_LETTER)
+      return true;
+    if (uchartype == UCharacterCategory.NON_SPACING_MARK && 
+        jchartype == Character.NON_SPACING_MARK)
+      return true;
+    if (uchartype == UCharacterCategory.ENCLOSING_MARK && 
+        jchartype == Character.ENCLOSING_MARK)
+      return true;
+    if (uchartype == UCharacterCategory.COMBINING_SPACING_MARK && 
+        jchartype == Character.COMBINING_SPACING_MARK)
+      return true;
+	  if (uchartype == UCharacterCategory.DECIMAL_DIGIT_NUMBER && 
+        jchartype == Character.DECIMAL_DIGIT_NUMBER)
+      return true;
+	  if (uchartype == UCharacterCategory.LETTER_NUMBER && 
+        jchartype == Character.LETTER_NUMBER)
+      return true;
+	  if (uchartype == UCharacterCategory.OTHER_NUMBER && 
+        jchartype == Character.OTHER_NUMBER)
+      return true;
+	  if (uchartype == UCharacterCategory.SPACE_SEPARATOR && 
+        jchartype == Character.SPACE_SEPARATOR)
+      return true;
+	  if (uchartype == UCharacterCategory.LINE_SEPARATOR && 
+        jchartype == Character.LINE_SEPARATOR)
+      return true;
+	  if (uchartype == UCharacterCategory.PARAGRAPH_SEPARATOR && 
+        jchartype == Character.PARAGRAPH_SEPARATOR)
+      return true;
+	  if (uchartype == UCharacterCategory.CONTROL && 
+        jchartype == Character.CONTROL)
+      return true;
+    if (uchartype == UCharacterCategory.FORMAT && 
+        jchartype == Character.FORMAT)
+      return true;
+	  if (uchartype == UCharacterCategory.PRIVATE_USE && 
+        jchartype == Character.PRIVATE_USE)
+      return true;
+    if (uchartype == UCharacterCategory.SURROGATE && 
+        jchartype == Character.SURROGATE)
+      return true;
+    if (uchartype == UCharacterCategory.DASH_PUNCTUATION && 
+        jchartype == Character.DASH_PUNCTUATION)
+      return true;
+	  if (uchartype == UCharacterCategory.START_PUNCTUATION && 
+        jchartype == Character.START_PUNCTUATION)
+      return true;
+	  if (uchartype == UCharacterCategory.END_PUNCTUATION && 
+        jchartype == Character.END_PUNCTUATION)
+      return true;
+    if (uchartype == UCharacterCategory.CONNECTOR_PUNCTUATION && 
+        jchartype == Character.CONNECTOR_PUNCTUATION)
+      return true;
+    if (uchartype == UCharacterCategory.OTHER_PUNCTUATION && 
+        jchartype == Character.OTHER_PUNCTUATION)
+      return true;
+	  if (uchartype == UCharacterCategory.MATH_SYMBOL && 
+        jchartype == Character.MATH_SYMBOL)
+      return true;
+	  if (uchartype == UCharacterCategory.CURRENCY_SYMBOL && 
+        jchartype == Character.CURRENCY_SYMBOL)
+      return true;
+	  if (uchartype == UCharacterCategory.MODIFIER_SYMBOL && 
+        jchartype == Character.MODIFIER_SYMBOL)
+      return true;
+	  if (uchartype == UCharacterCategory.OTHER_SYMBOL && 
+        jchartype == Character.OTHER_SYMBOL)
+      return true;
+	  if (uchartype == UCharacterCategory.INITIAL_PUNCTUATION && 
+        jchartype == Character.START_PUNCTUATION)
+      return true;
+    if (uchartype == UCharacterCategory.FINAL_PUNCTUATION && 
+        jchartype == Character.END_PUNCTUATION)
+      return true;
+	  /*if (uchartype == UCharacterCategory.GENERAL_OTHER_TYPES && 
+        jchartype == Character.GENERAL_OTHER_TYPES)
+      return true;*/
+    return false;
+	}
+	
+	/**
+	* Difference writing to file
+	* @param f file outputstream
+	* @param ch code point
+	* @param method for testing
+	* @param ucharval UCharacter value after running method
+	* @param charval Character value after running method
+	* @exception thrown when error occur in writing to file
+	*/
+	private static void trackDifference(PrintWriter f, int ch, String method,
+	                                    String ucharval, String charval)
+	  throws Exception
+	{
+	  if (m_hashtable_.containsKey(method))
+	  {
+	    Integer value = (Integer)m_hashtable_.get(method);
+	    m_hashtable_.put(method, new Integer(value.intValue() + 1));
+	  }
+	  else
+	    m_hashtable_.put(method, new Integer(1));
+	  
+	  String temp = Integer.toHexString(ch);
+	  StringBuffer s = new StringBuffer(temp);
+	  for (int i = 0; i < 6 - temp.length(); i ++)
+	    s.append(' ');
+	  temp = UCharacter.getName(ch);
+	  if (temp == null)
+	    temp = " ";
+	  s.append(temp);
+	  for (int i = 0; i < 73 - temp.length(); i ++)
+	    s.append(' ');
+	  
+	  s.append(method);
+	  for (int i = 0; i < 27 - method.length(); i ++)
+	    s.append(' ');
+	  s.append(ucharval);
+	  for (int i = 0; i < 11 - ucharval.length(); i ++)
+	    s.append(' ');
+	  s.append(charval);
+	  f.println(s.toString());
+	}
+	
+	/**
+	* Does up a summary of the differences
+	* @param f file outputstream
+	*/
+	private static void summary(PrintWriter f)
+	{
+	  f.println("==================================================");
+	  f.println("Summary of differences");
+	  for (Enumeration e = m_hashtable_.keys() ; e.hasMoreElements() ;) 
+	  {
+	    StringBuffer method = new StringBuffer((String)e.nextElement());
+	    int count = ((Integer)m_hashtable_.get(method.toString())).intValue();
+	    for (int i = 30 - method.length(); i > 0; i --)
+	      method.append(' ');
+      f.println(method + "  " + count);
+    }
+	}
+}
+
diff --git a/src/com/ibm/icu/test/text/UCharacterTest.java b/src/com/ibm/icu/test/text/UCharacterTest.java
new file mode 100755
index 0000000..fc647a5
--- /dev/null
+++ b/src/com/ibm/icu/test/text/UCharacterTest.java
@@ -0,0 +1,678 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/test/text/Attic/UCharacterTest.java,v $ 
+* $Date: 2001/03/23 19:52:03 $ 
+* $Revision: 1.9 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.icu.test.text;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.FileNotFoundException;
+import java.util.Locale;
+import com.ibm.test.TestFmwk;
+import com.ibm.text.UCharacter;
+import com.ibm.text.UCharacterCategory;
+import com.ibm.text.UCharacterDirection;
+import com.ibm.text.UTF16;
+
+/**
+* Testing class for UCharacter
+* Mostly following the test cases for ICU
+* @author Syn Wee Quek
+* @since nov 04 2000
+*/
+public final class UCharacterTest extends TestFmwk
+{ 
+  // private variables =============================================
+  
+  /**
+  * ICU4J data version number
+  */
+  private final String VERSION_ = "3.0.0.0";
+  
+  // constructor ===================================================
+  
+  /**
+  * Constructor
+  */
+  public UCharacterTest()
+  {
+  }
+  
+  // public methods ================================================
+  
+  /**
+  * Testing the uppercase and lowercase function of UCharacter
+  */
+  public void TestUpperLower()
+  {
+    // variables to test the uppercase and lowercase characters
+    int upper[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0xb1, 0xb2, 
+                   0xb3, 0x48, 0x49, 0x4a, 0x2e, 0x3f, 0x3a, 0x4b, 0x4c,
+                   0x4d, 0x4e, 0x4f, 0x01c4, 0x01c8, 0x000c, 0x0000};
+    int lower[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0xb1, 0x00b2, 
+                   0xb3, 0x68, 0x69, 0x6a, 0x2e, 0x3f, 0x3a, 0x6b, 0x6c,
+                   0x6d, 0x6e, 0x6f, 0x01c6, 0x01c9, 0x000c, 0x0000};
+    
+    int size = upper.length;
+    
+    for (int i = 0; i < size; i ++) 
+    {
+      if (UCharacter.isLetter(lower[i]) && !UCharacter.isLowerCase(lower[i]))
+      {
+        errln("FAIL isLowerCase test for 0x" + 
+              Integer.toHexString(lower[i]));
+        break;
+      }
+      if (UCharacter.isLetter(upper[i]) && !(UCharacter.isUpperCase(upper[i]) 
+                                       || UCharacter.isTitleCase(upper[i])))     
+      {
+        errln("FAIL isUpperCase test for 0x" + 
+              Integer.toHexString(upper[i]));
+        break;
+      }
+      if (lower[i] != UCharacter.toLowerCase(upper[i]) || 
+          (upper[i] != UCharacter.toUpperCase(lower[i]) &&
+            upper[i] != UCharacter.toTitleCase(lower[i])))
+      {
+        errln("FAIL case conversion test for 0x" + 
+              Integer.toHexString(upper[i]) + " to 0x" + 
+              Integer.toHexString(lower[i]));
+        break;
+      }
+      if (lower[i] != UCharacter.toLowerCase(lower[i]))
+      {
+        errln("FAIL lower case conversion test for 0x" + 
+        Integer.toHexString(lower[i]));
+        break;
+      }
+      if (upper[i] != UCharacter.toUpperCase(upper[i]) && 
+          upper[i] != UCharacter.toTitleCase(upper[i]))
+      {
+        errln("FAIL upper case conversion test for 0x" + 
+              Integer.toHexString(upper[i]));
+        break;
+      }
+      logln("Ok    0x" + Integer.toHexString(upper[i]) + " and 0x" +
+            Integer.toHexString(lower[i]));
+    }
+  }
+  
+  /**
+  * Testing the letter and number determination in UCharacter
+  */
+  public void TestLetterNumber()
+  {
+    for (int i = 0x0041; i < 0x005B; i ++) 
+      if (!UCharacter.isLetter(i))
+        errln("FAIL 0x" + Integer.toHexString(i) + " expected to be a letter");
+        
+    for (int i = 0x0660; i < 0x066A; i ++) 
+      if (UCharacter.isLetter(i))
+        errln("FAIL 0x" + Integer.toHexString(i) + 
+              " expected not to be a letter");
+    
+    for (int i = 0x0660; i < 0x066A; i ++) 
+      if (!UCharacter.isDigit(i))
+        errln("FAIL 0x" + Integer.toHexString(i) + " expected to be a digit");
+    
+    for (int i = 0x0041; i < 0x005B; i ++) 
+      if (!UCharacter.isLetterOrDigit(i))
+        errln("FAIL 0x" + Integer.toHexString(i) + 
+              " expected not to be a digit");
+        
+    for (int i = 0x0660; i < 0x066A; i ++) 
+      if (!UCharacter.isLetterOrDigit(i))
+        errln("FAIL 0x" + Integer.toHexString(i) + 
+              "expected to be either a letter or a digit");
+  }
+
+  /**
+  * Tests for space determination in UCharacter
+  */
+  public void TestSpaces()
+  {
+    int spaces[] = {0x0020, 0x00a0, 0x2000, 0x2001, 0x2005};
+    int nonspaces[] = {0x61, 0x62, 0x63, 0x64, 0x74};
+    int whitespaces[] = {0x2008, 0x2009, 0x200a, 0x001c, 0x000c};
+    int nonwhitespaces[] = {0x61, 0x62, 0x3c, 0x28, 0x3f};
+                       
+    int size = spaces.length;
+    for (int i = 0; i < size; i ++)
+    {
+      if (!UCharacter.isSpaceChar(spaces[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(spaces[i]) + 
+              " expected to be a space character");
+        break;
+      }
+      
+      if (UCharacter.isSpaceChar(nonspaces[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nonspaces[i]) + 
+              " expected not to be space character");
+        break;
+      }
+ 
+      if (!UCharacter.isWhitespace(whitespaces[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(whitespaces[i]) + 
+              " expected to be a white space character");
+        break;
+      }
+      if (UCharacter.isWhitespace(nonwhitespaces[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nonwhitespaces[i]) + 
+              " expected not to be a space character");
+        break;
+      }
+      logln("Ok    0x" + Integer.toHexString(spaces[i]) + " and 0x" +
+            Integer.toHexString(nonspaces[i]) + " and 0x" +
+            Integer.toHexString(whitespaces[i]) + " and 0x" +
+            Integer.toHexString(nonwhitespaces[i]));
+    }
+  }
+  
+  /**
+  * Tests for defined and undefined characters
+  */
+  public void TestDefined()
+  {
+    int undefined[] = {0xfff1, 0xfff7, 0xfa30};
+    int defined[] = {0x523E, 0x4f88, 0xfffd};
+    
+    int size = undefined.length;
+    for (int i = 0; i < size; i ++) 
+    {
+      if (UCharacter.isDefined(undefined[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(undefined[i]) + 
+              " expected not to be defined");
+        break;
+      }
+      if (!UCharacter.isDefined(defined[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(defined[i]) + 
+              " expected defined");
+        break;
+      }
+    }
+  }
+  
+  /**
+  * Tests for base characters and their cellwidth
+  */
+  public void TestBase()
+  {
+    int base[] = {0x0061, 0x0031, 0x03d2};
+    int nonbase[] = {0x002B, 0x0020, 0x203B};    
+    int size = base.length;
+    for (int i = 0; i < size; i ++) 
+    {
+      if (UCharacter.isBaseForm(nonbase[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nonbase[i]) + 
+              " expected not to be a base character");
+        break;
+      }
+      if (!UCharacter.isBaseForm(base[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(base[i]) + 
+              " expected to be a base character");
+        break;
+      }
+    }
+  }
+    
+  /**
+  * Tests for digit characters 
+  */
+  public void TestDigits()
+  {
+    int digits[] = {0x0030, 0x0662, 0x0F23, 0x0ED5, 0x2160};
+    
+    //special characters not in the properties table
+    int digits2[] = {0x3007, 0x4e00, 0x4e8c, 0x4e09, 0x56d8, 0x4e94, 0x516d, 
+                     0x4e03, 0x516b, 0x4e5d}; 
+    int nondigits[] = {0x0010, 0x0041, 0x0122, 0x68FE};
+    
+    int digitvalues[] = {0, 2, 3, 5, 1};
+    int digitvalues2[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};     
+    
+    int size  = digits.length;
+    for (int i = 0; i < size; i ++) 
+      if (UCharacter.isDigit(digits[i]) && 
+          UCharacter.digit(digits[i]) != digitvalues[i]) 
+      {
+        errln("FAIL 0x" + Integer.toHexString(digits[i]) + 
+              " expected digit with value " + digitvalues[i]);
+        break;
+      }
+    
+    size = nondigits.length;
+    for (int i = 0; i < size; i ++)
+      if (UCharacter.isDigit(nondigits[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nondigits[i]) + 
+              " expected nondigit");
+        break;
+      }
+      
+    size = digits2.length;
+    for (int i = 0; i < 10; i ++) 
+      if (UCharacter.isDigit(digits2[i]) &&
+          UCharacter.digit(digits2[i]) != digitvalues2[i]) 
+      {
+        errln("FAIL 0x" + Integer.toHexString(digits2[i]) + 
+              " expected digit with value " + digitvalues2[i]);
+        break;
+      }
+  }
+
+  /**
+  * Tests for version 
+  */
+  public void TestVersion()
+  {
+    String version = UCharacter.getUnicodeVersion();
+    if (!version.equals(VERSION_))
+      errln("FAIL expected " + VERSION_);
+  }
+  
+  /**
+  * Tests for control characters
+  */
+  /*
+  public void TestControl()
+  {
+    int control[] = {0x001b, 0x0097, 0x0082};
+    int noncontrol[] = {0x61, 0x0031, 0x00e2};
+    
+    int size = control.length;
+    for (int i = 0; i < size; i ++) 
+    {
+      if (!UCharacter.isControl(control[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(control[i]) + 
+              " expected to be a control character");
+        break;
+      }  
+      if (UCharacter.isControl(noncontrol[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(noncontrol[i]) + 
+              " expected to be not a control character");
+        break;
+      }
+      
+      logln("Ok    0x" + Integer.toHexString(control[i]) + " and 0x" +
+            Integer.toHexString(noncontrol[i]));
+    }
+  }
+  */
+  
+  /**
+  * Tests for printable characters
+  */
+  public void TestPrint()
+  {
+    int printable[] = {0x0042, 0x005f, 0x2014};
+    int nonprintable[] = {0x200c, 0x009f, 0x001b};
+    
+    int size = printable.length;
+    for (int i = 0; i < size; i ++)
+    {
+      if (!UCharacter.isPrintable(printable[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(printable[i]) + 
+              " expected to be a printable character");
+        break;
+      }
+      if (UCharacter.isPrintable(nonprintable[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nonprintable[i]) +
+              " expected not to be a printable character");
+        break;
+      }
+      logln("Ok    0x" + Integer.toHexString(printable[i]) + " and 0x" +
+            Integer.toHexString(nonprintable[i]));
+    }
+    
+    // test all ISO 8 controls
+    for (int ch = 0; ch <= 0x9f; ++ ch) {
+      if (ch == 0x20) {
+      // skip ASCII graphic characters and continue with DEL
+        ch = 0x7f;
+      }
+      if (UCharacter.isPrintable(ch)) {
+        errln("Fail 0x" + Integer.toHexString(ch) + 
+              " is a ISO 8 control character hence not printable\n");
+      }
+    }
+
+    /* test all Latin-1 graphic characters */
+    for (int ch = 0x20; ch <= 0xff; ++ ch) {
+      if (ch == 0x7f) {
+        ch = 0xa0;
+      }
+      if (!UCharacter.isPrintable(ch)) {
+        errln("Fail 0x" + Integer.toHexString(ch) + 
+              " is a Latin-1 graphic character\n");
+        }
+    }
+  }
+  
+  /** 
+  * Testing for identifier characters
+  */
+  public void TestIdentifier()
+  {
+    int unicodeidstart[] = {0x0250, 0x00e2, 0x0061};
+    int nonunicodeidstart[] = {0x2000, 0x000a, 0x2019};
+    int unicodeidpart[] = {0x005f, 0x0032, 0x0045};
+    int nonunicodeidpart[] = {0x2030, 0x00a3, 0x0020};
+    int idignore[] = {0x070F, 0x180B, 0x180C};
+    int nonidignore[] = {0x0075, 0x00a3, 0x0061};
+
+    int size = unicodeidstart.length;
+    for (int i = 0; i < size; i ++) 
+    {
+      if (!UCharacter.isUnicodeIdentifierStart(unicodeidstart[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(unicodeidstart[i]) + 
+              " expected to be a unicode identifier start character");
+        break;
+      }
+      if (UCharacter.isUnicodeIdentifierStart(nonunicodeidstart[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nonunicodeidstart[i]) + 
+              " expected not to be a unicode identifier start character");
+        break;
+      }
+      if (!UCharacter.isUnicodeIdentifierPart(unicodeidpart[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(unicodeidpart[i]) + 
+              " expected to be a unicode identifier part character");
+        break;
+      }
+      if (UCharacter.isUnicodeIdentifierPart(nonunicodeidpart[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nonunicodeidpart[i]) + 
+              " expected not to be a unicode identifier part character");
+        break;
+      }
+      if (!UCharacter.isIdentifierIgnorable(idignore[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(idignore[i]) + 
+              " expected to be a ignorable unicode character");
+        break;
+      }
+      if (UCharacter.isIdentifierIgnorable(nonidignore[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(nonidignore[i]) + 
+              " expected not to be a ignorable unicode character");
+        break;
+      }
+      logln("Ok    0x" + Integer.toHexString(unicodeidstart[i]) + " and 0x" +
+            Integer.toHexString(nonunicodeidstart[i]) + " and 0x" +
+            Integer.toHexString(unicodeidpart[i]) + " and 0x" +
+            Integer.toHexString(nonunicodeidpart[i]) + " and 0x" +
+            Integer.toHexString(idignore[i]) + " and 0x" +
+            Integer.toHexString(nonidignore[i]));
+    }
+  }
+  
+  /**
+  * Tests for the character types, direction.<br>
+  * This method reads in UnicodeData.txt file for testing purposes. A default 
+  * path is provided relative to the class path, however if the user could 
+  * set a system property to change the path.<br>
+  * e.g. java -DUnicodeData="anyfile.dat" com.ibm.test.text.UCharacterTest
+  */
+  public void TestUnicodeData()
+  {
+    // this is the 2 char category types used in the UnicodeData file
+    final String TYPE = 
+      "LuLlLtLmLoMnMeMcNdNlNoZsZlZpCcCfCoCsPdPsPePcPoSmScSkSoPiPf";
+    
+    // directory types used in the UnicodeData file
+    // padded by spaces to make each type size 4
+    final String DIR = 
+      "L   R   EN  ES  ET  AN  CS  B   S   WS  ON  LRE LRO AL  RLE RLO PDF NSM BN  ";
+      
+    // default unicode data file name
+    final String UNICODE_DATA_FILE = "src//data//unicode//UnicodeData.txt";
+    
+    // unicode data file path system name
+    final String UNICODE_DATA_SYSTEM_NAME = "UnicodeData";
+    String s = System.getProperty(UNICODE_DATA_SYSTEM_NAME);
+    if (s == null)
+    // assuming runtime directory is on the same level as the source
+      s = System.getProperty("user.dir") + "//..//" + UNICODE_DATA_FILE;
+    
+    final int LASTUNICODECHAR = 0xFFFD;
+    int ch = 0,
+        index = 0,
+        type = 0,
+        dir = 0;
+	
+	  try
+	  {
+	    // reading in the UnicodeData file
+	    FileReader fr = new FileReader(s);
+	    BufferedReader input = new BufferedReader(fr);
+	    
+      while (ch != LASTUNICODECHAR)
+      {
+        s= input.readLine();
+        
+        // geting the unicode character, its type and its direction
+        ch = Integer.parseInt(s.substring(0, 4), 16);
+        index = s.indexOf(';', 5);
+        String t = s.substring(index + 1, index + 3);
+        index += 4;
+        byte cc = (byte)(Integer.parseInt(s.substring(index, 
+                                                      s.indexOf(';', index))));
+        index = s.indexOf(';', index);
+        String d = s.substring(index + 1, s.indexOf(';', index + 1));
+        
+        // testing the category
+        // we override the general category of some control characters
+        if (ch == 9 || ch == 0xb || ch == 0x1f)
+          type = UCharacterCategory.SPACE_SEPARATOR;
+        else
+          if (ch == 0xc)
+            type = UCharacterCategory.LINE_SEPARATOR;
+          else
+            if (ch == 0xa || ch == 0xd || ch == 0x1c || ch == 0x1d || 
+                ch == 0x1e || ch == 0x85)
+               type = UCharacterCategory.PARAGRAPH_SEPARATOR;
+            else
+            {
+              type = TYPE.indexOf(t);
+              if (type < 0)
+                type = 0;
+              else 
+                type = (type >> 1) + 1;  
+            }
+            
+        if (UCharacter.getType(ch) != type)
+        {
+          errln("FAIL 0x" + Integer.toHexString(ch) + " expected type " + 
+                type);
+          break;
+        }
+        
+        // testing combining class
+        if (UCharacter.getCombiningClass(ch) != cc)
+        {
+          errln("FAIL 0x" + Integer.toHexString(ch) + " expected combining " +
+                "class " + cc);
+          break;
+        }
+        
+        // testing the direction
+        if (d.length() == 1)
+          d = d + "   ";  
+          
+        dir = DIR.indexOf(d) >> 2;
+        if (UCharacter.getDirection(ch) != dir) 
+        {
+          errln("FAIL 0x" + Integer.toHexString(ch) + 
+                " expected wrong direction " + dir);
+          break;
+        }
+      }
+      input.close();
+    }
+    catch (FileNotFoundException e)
+    {
+      errln("FAIL UnicodeData.txt not found\n" +
+            "Configure the system setting UnicodeData to the right path\n" +
+            "e.g. java -DUnicodeData=\"anyfile.dat\" " +
+            "com.ibm.icu.test.text.UCharacterTest");
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+    
+    if (UCharacter.getDirection(0x10001) != 
+                                         UCharacterDirection.LEFT_TO_RIGHT) 
+      errln("FAIL 0x10001 expected direction " + 
+      UCharacterDirection.toString(UCharacterDirection.LEFT_TO_RIGHT));
+  }
+  
+  /**
+  * Test for the character names
+  */
+  public void TestNames()
+  {
+    int c[] = {0x0061, 0x0284, 0x3401, 0x7fed, 0xac00, 0xd7a3, 0xff08, 0xffe5};
+    String name[] = {"LATIN SMALL LETTER A", 
+                     "LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK", 
+                     "CJK UNIFIED IDEOGRAPH-3401", 
+                     "CJK UNIFIED IDEOGRAPH-7FED", "HANGUL SYLLABLE GA", 
+                     "HANGUL SYLLABLE HIH", "FULLWIDTH LEFT PARENTHESIS",
+                     "FULLWIDTH YEN SIGN"};
+    String oldname[] = {"", "LATIN SMALL LETTER DOTLESS J BAR HOOK", "", "",
+                        "", "", "FULLWIDTH OPENING PARENTHESIS", ""};
+    int size = c.length;
+    String str;
+    int uc;
+    
+    for (int i = 0; i < size; i ++) 
+    {
+      // modern Unicode character name
+      str = UCharacter.getName(c[i]);
+      if (!str.equalsIgnoreCase(name[i]))
+      {
+        errln("FAIL 0x" + Integer.toHexString(c[i]) + " expected name " +
+              name[i]);
+        break;
+      }
+     
+      // 1.0 Unicode character name
+      str = UCharacter.getName1_0(c[i]);
+      if ((str == null && oldname[i].length() > 0) || 
+          (str != null && !str.equalsIgnoreCase(oldname[i])))
+      {
+        errln("FAIL 0x" + Integer.toHexString(c[i]) + " expected 1.0 name " +
+              oldname[i]);
+        break;
+      }
+      
+      // retrieving unicode character from modern name
+      uc = UCharacter.getCharFromName(name[i]);
+      if (uc != c[i])
+      {
+        errln("FAIL " + name[i] + " expected character 0x" + 
+              Integer.toHexString(c[i]));
+        break;
+      }
+      
+      //retrieving unicode character from 1.0 name
+      uc = UCharacter.getCharFromName1_0(oldname[i]);
+      if (uc != c[i] && i != 0 && (i == 1 || i == 6))
+      {
+        errln("FAIL " + name[i] + " expected 1.0 character " + 
+              Integer.toHexString(c[i]));
+        break;
+      }
+    }
+    
+    // extra testing different from icu
+    for (int i = UCharacter.MIN_VALUE; i < UCharacter.MAX_VALUE; i ++)
+    {
+      str = UCharacter.getName(i);
+      if (str != null && UCharacter.getCharFromName(str) != i)
+      {
+        errln("FAIL 0x" + Integer.toHexString(i) + " " + str  + 
+              " retrieval of name and vice versa" );
+        break;
+      }
+    }
+  }
+  
+  /**
+  * Testing the strings case mapping methods
+  */
+  public void TestCaseMapping() 
+  {
+    String beforeLower =  "\u0061\u0042\u0049\u03a3\u00df\u03a3\u002f\ud93f\udfff",
+           lowerRoot =    "\u0061\u0062\u0069\u03c3\u00df\u03c2\u002f\ud93f\udfff",
+           lowerTurkish = "\u0061\u0062\u0131\u03c3\u00df\u03c2\u002f\ud93f\udfff",
+           beforeUpper =  "\u0061\u0042\u0069\u03c2\u00df\u03c3\u002f\ufb03\ud93f\udfff",
+           upperRoot =    "\u0041\u0042\u0049\u03a3\u0053\u0053\u03a3\u002f\u0046\u0046\u0049\ud93f\udfff",
+           upperTurkish = "\u0041\u0042\u0130\u03a3\u0053\u0053\u03a3\u002f\u0046\u0046\u0049\ud93f\udfff";
+
+    String result = UCharacter.toLowerCase(beforeLower);
+    if (!lowerRoot.equals(result)) 
+      errln("Fail " + beforeLower + " after lowercase should be " + lowerRoot);
+   
+    // lowercase with turkish locale
+    result = UCharacter.toLowerCase(new Locale("tr", "TR"), beforeLower);
+    if (!lowerTurkish.equals(result)) 
+      errln("Fail " + beforeLower + " after turkish-sensitive lowercase " +
+            "should be " + lowerRoot);
+            
+    // uppercase with root locale and in the same buffer
+    result = UCharacter.toUpperCase(beforeUpper);
+    if (!upperRoot.equals(result)) 
+      errln("Fail " + beforeUpper + " after uppercase should be " + upperRoot);
+      
+    // uppercase with turkish locale and separate buffers
+    result = UCharacter.toUpperCase(new Locale("tr", "TR"), beforeUpper);
+    if (!upperTurkish.equals(result)) 
+      errln("Fail " + beforeUpper + " after turkish-sensitive uppercase " +
+            "should be " + upperTurkish);
+            
+    // test preflighting
+    result = UCharacter.toLowerCase(beforeLower);
+    if (!lowerRoot.equals(result)) 
+      errln("Fail " + beforeLower + " after lower case should be " + 
+            lowerRoot);
+  }
+
+ 
+  public static void main(String[] arg)
+  {
+    try
+    {
+      UCharacterTest test = new UCharacterTest();
+      test.run(arg);
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+  }
+}
+
diff --git a/src/com/ibm/icu/test/text/UTF16Test.java b/src/com/ibm/icu/test/text/UTF16Test.java
new file mode 100755
index 0000000..372b7c6
--- /dev/null
+++ b/src/com/ibm/icu/test/text/UTF16Test.java
@@ -0,0 +1,226 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/test/text/Attic/UTF16Test.java,v $ 
+* $Date: 2001/03/23 19:52:03 $ 
+* $Revision: 1.5 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.icu.test.text;
+
+import com.ibm.test.TestFmwk;
+import com.ibm.text.UCharacter;
+import com.ibm.text.UTF16;
+
+/**
+* Testing class for UTF16
+* @author Syn Wee Quek
+* @since feb 09 2001
+*/
+public final class UTF16Test extends TestFmwk
+{ 
+  // constructor ===================================================
+  
+  /**
+  * Constructor
+  */
+  public UTF16Test()
+  {
+  }
+  
+  // public methods ================================================
+  
+  /**
+  * Testing UTF16 class methods append, getCharCount and bounds
+  */
+  public void TestUTF16AppendBoundCount()
+  {
+    StringBuffer str = new StringBuffer("this is a string ");
+    int initstrsize = str.length();
+    int length;
+    
+    for (int i = UCharacter.MIN_VALUE; i < UCharacter.MAX_VALUE; i += 100)
+    {
+      length = str.length();
+      UTF16.append(str, i);
+      
+      // this is to cater for the combination of 0xDBXX 0xDC50 which forms
+      // a supplementary character
+      if (i == 0xDC50)
+        initstrsize --;
+        
+      if (UTF16.countCodePoint(str.toString()) != initstrsize + (i / 100) + 1)
+      {
+        errln("FAIL Counting code points in string appended with " + 
+              " 0x" + Integer.toHexString(i));
+        break;
+      }
+       
+      if (!UCharacter.isSupplementary(i))
+      {
+        if (UTF16.getCharCount(i) != 1)
+        {
+          errln("FAIL Counting BMP character size error" );
+          break;
+        }  
+        if (str.length() != length + 1)
+        {
+          errln("FAIL Adding a BMP character error" );
+          break;
+        }
+        if (!UTF16.isSurrogate((char)i) && 
+            (UTF16.bounds(str.toString(), str.length() - 1) != 
+                                                UTF16.SINGLE_CHAR_BOUNDARY ||
+             UTF16.boundsAtCodePointOffset(str.toString(), 
+                                           initstrsize + (i /100)) 
+                                              != UTF16.SINGLE_CHAR_BOUNDARY))
+        {
+          errln("FAIL Finding BMP character bounds error" );
+          break;
+        }
+      }
+      else 
+      {
+        if (UTF16.getCharCount(i) != 2)
+        {
+          errln("FAIL Counting Supplementary character size error" );
+          break;
+        }
+        if (str.length() != length + 2)
+        {
+          errln("FAIL Adding a Supplementary character error" );
+          break;
+        }
+        length = str.length();
+        if (UTF16.bounds(str.toString(), str.length() - 2) != 
+            UTF16.LEAD_SURROGATE_BOUNDARY || 
+            UTF16.bounds(str.toString(), str.length() - 1) != 
+            UTF16.TRAIL_SURROGATE_BOUNDARY ||
+            UTF16.boundsAtCodePointOffset(str.toString(), 
+                                          initstrsize + (i / 100)) 
+                                            != UTF16.LEAD_SURROGATE_BOUNDARY)
+        {
+          errln("FAIL Finding Supplementary character bounds error with " +
+                "string appended with 0x" + Integer.toHexString(i));
+          break;
+        }
+      }
+    } 
+  }
+  
+  /**
+  * Testing UTF16 class methods findCodePointOffset, findOffsetFromCodePoint, charAt and
+  * charAtCodePoint 
+  */
+  public void TestUTF16OffsetCharAt()
+  {
+    StringBuffer str = new StringBuffer("12345");
+    UTF16.append(str, 0x10001);
+    str.append("67890");
+    UTF16.append(str, 0x10002);
+    String s = str.toString();
+    if (UTF16.charAt(s, 0) != '1' || UTF16.charAt(s, 2) != '3' || 
+        UTF16.charAt(s, 5) != 0x10001 || UTF16.charAt(s, 6) != 0x10001 || 
+        UTF16.charAt(s, 12) != 0x10002 || UTF16.charAt(s, 13) != 0x10002 ||
+        UTF16.charAtCodePointOffset(s, 0) != '1' || 
+        UTF16.charAtCodePointOffset(s, 2) != '3' || 
+        UTF16.charAtCodePointOffset(s, 5) != 0x10001 || 
+        UTF16.charAtCodePointOffset(s, 6) != '6' || 
+        UTF16.charAtCodePointOffset(s, 11) != 0x10002)
+      errln("FAIL Getting character from string error" );
+
+    if (UTF16.findCodePointOffset(s, 3) != 3 || 
+        UTF16.findCodePointOffset(s, 5) != 5 || 
+        UTF16.findCodePointOffset(s, 6) != 5)
+      errln("FAIL Getting codepoint offset from string error" );
+    if (UTF16.findOffsetFromCodePoint(s, 3) != 3 || 
+        UTF16.findOffsetFromCodePoint(s, 5) != 5 || 
+        UTF16.findOffsetFromCodePoint(s, 6) != 7)
+      errln("FAIL Getting UTF16 offset from codepoint in string error" );
+      
+    UTF16.setCharAt(str, 3, '3');
+    UTF16.setCharAtCodePointOffset(str, 4, '3');
+    if (UTF16.charAt(str.toString(), 3) != '3' || 
+        UTF16.charAtCodePointOffset(str.toString(), 3) != '3' ||
+        UTF16.charAt(str.toString(), 4) != '3' || 
+        UTF16.charAtCodePointOffset(str.toString(), 4) != '3')
+      errln("FAIL Setting non-supplementary characters at a " +
+            "non-supplementary position");
+            
+    UTF16.setCharAt(str, 5, '3');
+    if (UTF16.charAt(str.toString(), 5) != '3' || 
+        UTF16.charAtCodePointOffset(str.toString(), 5) != '3' || 
+        UTF16.charAt(str.toString(), 6) != '6' || 
+        UTF16.charAtCodePointOffset(str.toString(), 5) != '3' || 
+        UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
+      errln("FAIL Setting non-supplementary characters at a " +
+            "supplementary position");
+            
+    UTF16.setCharAt(str, 5, 0x10001);
+    if (UTF16.charAt(str.toString(), 5) != 0x10001 || 
+        UTF16.charAtCodePointOffset(str.toString(), 5) != 0x10001 ||
+        UTF16.charAt(str.toString(), 7) != '6' || 
+        UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
+      errln("FAIL Setting supplementary characters at a " +
+            "non-supplementary position");
+            
+    UTF16.setCharAtCodePointOffset(str, 5, '3');
+    if (UTF16.charAt(str.toString(), 5) != '3' || 
+        UTF16.charAtCodePointOffset(str.toString(), 5) != '3' ||
+        UTF16.charAt(str.toString(), 6) != '6' || 
+        UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
+      errln("FAIL Setting non-supplementary characters at a " +
+            "supplementary position");
+            
+    UTF16.setCharAt(str, 5, 0x10001);
+    if (UTF16.charAt(str.toString(), 5) != 0x10001 || 
+        UTF16.charAtCodePointOffset(str.toString(), 5) != 0x10001 ||
+        UTF16.charAt(str.toString(), 7) != '6' || 
+        UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
+      errln("FAIL Setting supplementary characters at a " +
+            "non-supplementary position");
+            
+     
+   UTF16.setCharAt(str, 5, 0xD800);
+   UTF16.setCharAt(str, 6, 0xD800);
+   if (UTF16.charAt(str.toString(), 5) != 0xD800 ||
+       UTF16.charAt(str.toString(), 6) != 0xD800 ||
+       UTF16.charAtCodePointOffset(str.toString(), 5) != 0xD800 ||
+       UTF16.charAtCodePointOffset(str.toString(), 6) != 0xD800)
+      errln("FAIL Setting lead characters at a supplementary position");   
+      
+   UTF16.setCharAt(str, 5, 0xDDDD);
+   if (UTF16.charAt(str.toString(), 5) != 0xDDDD ||
+       UTF16.charAt(str.toString(), 6) != 0xD800 ||
+       UTF16.charAtCodePointOffset(str.toString(), 5) != 0xDDDD ||
+       UTF16.charAtCodePointOffset(str.toString(), 6) != 0xD800)
+      errln("FAIL Setting trail characters at a surrogate position");
+      
+   UTF16.setCharAt(str, 5, '3');
+   if (UTF16.charAt(str.toString(), 5) != '3' ||
+       UTF16.charAt(str.toString(), 6) != 0xD800 ||
+       UTF16.charAtCodePointOffset(str.toString(), 5) != '3' ||
+       UTF16.charAtCodePointOffset(str.toString(), 6) != 0xD800)
+      errln("FAIL Setting non-supplementary characters at a surrogate " +
+            "position");
+  }
+ 
+  public static void main(String[] arg)
+  {
+    try
+    {
+      UTF16Test test = new UTF16Test();
+      test.run(arg);
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+  }
+}
+
diff --git a/src/com/ibm/math/BigDecimal.java b/src/com/ibm/math/BigDecimal.java
new file mode 100755
index 0000000..df92e5a
--- /dev/null
+++ b/src/com/ibm/math/BigDecimal.java
@@ -0,0 +1,4358 @@
+/* Generated from 'BigDecimal.nrx' 8 Sep 2000 11:10:50 [v2.00] */
+/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
+package com.ibm.math;
+import java.math.BigInteger;
+
+/* ------------------------------------------------------------------ */
+/* BigDecimal -- Decimal arithmetic for Java                          */
+/* ------------------------------------------------------------------ */
+/* Copyright IBM Corporation, 1996, 2000.  All Rights Reserved.       */
+/*                                                                    */
+/* The BigDecimal class provides immutable arbitrary-precision        */
+/* floating point (including integer) decimal numbers.                */
+/*                                                                    */
+/* As the numbers are decimal, there is an exact correspondence       */
+/* between an instance of a BigDecimal object and its String          */
+/* representation; the BigDecimal class provides direct conversions   */
+/* to and from String and character array objects, and well as        */
+/* conversions to and from the Java primitive types (which may not    */
+/* be exact).                                                         */
+/* ------------------------------------------------------------------ */
+/* Notes:                                                             */
+/*                                                                    */
+/* 1. A BigDecimal object is never changed in value once constructed; */
+/*    this avoids the need for locking.  Note in particular that the  */
+/*    mantissa array may be shared between many BigDecimal objects,   */
+/*    so that once exposed it must not be altered.                    */
+/*                                                                    */
+/* 2. This class looks at MathContext class fields directly (for      */
+/*    performance).  It must not and does not change them.            */
+/*                                                                    */
+/* 3. Exponent checking is delayed until finish(), as we know         */
+/*    intermediate calculations cannot cause 31-bit overflow.         */
+/*    [This assertion depends on MAX_DIGITS in MathContext.]          */
+/*                                                                    */
+/* 4. Comments for the public API now follow the javadoc conventions. */
+/*    The NetRexx -comments option is used to pass these comments     */
+/*    through to the generated Java code (with -format, if desired).  */
+/*                                                                    */
+/* 5. System.arraycopy is faster than explicit loop as follows        */
+/*      Mean length 4:  equal                                         */
+/*      Mean length 8:  x2                                            */
+/*      Mean length 16: x3                                            */
+/*      Mean length 24: x4                                            */
+/*    From prior experience, we expect mean length a little below 8,  */
+/*    but arraycopy is still the one to use, in general, until later  */
+/*    measurements suggest otherwise.                                 */
+/*                                                                    */
+/* 6. 'DMSRCN' referred to below is the original (1981) IBM S/370     */
+/*    assembler code implementation of the algorithms below; it is    */
+/*    now called IXXRCN and is available with the OS/390 and VM/ESA   */
+/*    operating systems.                                              */
+/* ------------------------------------------------------------------ */
+/* Change History:                                                    */
+/* 1997.09.02 Initial version (derived from netrexx.lang classes)     */
+/* 1997.09.12 Add lostDigits checking                                 */
+/* 1997.10.06 Change mantissa to a byte array                         */
+/* 1997.11.22 Rework power [did not prepare arguments, etc.]          */
+/* 1997.12.13 multiply did not prepare arguments                      */
+/* 1997.12.14 add did not prepare and align arguments correctly       */
+/* 1998.05.02 0.07 packaging changes suggested by Sun and Oracle      */
+/* 1998.05.21 adjust remainder operator finalization                  */
+/* 1998.06.04 rework to pass MathContext to finish() and round()      */
+/* 1998.06.06 change format to use round(); support rounding modes    */
+/* 1998.06.25 rename to BigDecimal and begin merge                    */
+/*            zero can now have trailing zeros (i.e., exp\=0)         */
+/* 1998.06.28 new methods: movePointXxxx, scale, toBigInteger         */
+/*                         unscaledValue, valueof                     */
+/* 1998.07.01 improve byteaddsub to allow array reuse, etc.           */
+/* 1998.07.01 make null testing explicit to avoid JIT bug [Win32]     */
+/* 1998.07.07 scaled division  [divide(BigDecimal, int, int)]         */
+/* 1998.07.08 setScale, faster equals                                 */
+/* 1998.07.11 allow 1E6 (no sign) <sigh>; new double/float conversion */
+/* 1998.10.12 change package to com.ibm.math                          */
+/* 1998.12.14 power operator no longer rounds RHS [to match ANSI]     */
+/*            add toBigDecimal() and BigDecimal(java.math.BigDecimal) */
+/* 1998.12.29 improve byteaddsub by using table lookup                */
+/* 1999.02.04 lostdigits=0 behaviour rounds instead of digits+1 guard */
+/* 1999.02.05 cleaner code for BigDecimal(char[])                     */
+/* 1999.02.06 add javadoc comments                                    */
+/* 1999.02.11 format() changed from 7 to 2 method form                */
+/* 1999.03.05 null pointer checking is no longer explicit             */
+/* 1999.03.05 simplify; changes from discussion with J. Bloch:        */
+/*            null no longer permitted for MathContext; drop boolean, */
+/*            byte, char, float, short constructor, deprecate double  */
+/*            constructor, no blanks in string constructor, add       */
+/*            offset and length version of char[] constructor;        */
+/*            add valueOf(double); drop booleanValue, charValue;      */
+/*            add ...Exact versions of remaining convertors           */
+/* 1999.03.13 add toBigIntegerExact                                   */
+/* 1999.03.13 1.00 release to IBM Centre for Java Technology          */
+/* 1999.05.27 1.01 correct 0-0.2 bug under scaled arithmetic          */
+/* 1999.06.29 1.02 constructors should not allow exponent > 9 digits  */
+/* 1999.07.03 1.03 lost digits should not be checked if digits=0      */
+/* 1999.07.06      lost digits Exception message changed              */
+/* 1999.07.10 1.04 more work on 0-0.2 (scaled arithmetic)             */
+/* 1999.07.17      improve messages from pow method                   */
+/* 1999.08.08      performance tweaks                                 */
+/* 1999.08.15      fastpath in multiply                               */
+/* 1999.11.05 1.05 fix problem in intValueExact [e.g., 5555555555]    */
+/* 1999.12.22 1.06 remove multiply fastpath, and improve performance  */
+/* 2000.01.01      copyright update [Y2K has arrived]                 */
+/* 2000.06.18 1.08 no longer deprecate BigDecimal(double)             */
+/* ------------------------------------------------------------------ */
+
+
+
+
+
+/**
+ * The <code>BigDecimal</code> class implements immutable
+ * arbitrary-precision decimal numbers.  The methods of the
+ * <code>BigDecimal</code> class provide operations for fixed and
+ * floating point arithmetic, comparison, format conversions, and
+ * hashing.
+ * <p>
+ * As the numbers are decimal, there is an exact correspondence between
+ * an instance of a <code>BigDecimal</code> object and its
+ * <code>String</code> representation; the <code>BigDecimal</code> class
+ * provides direct conversions to and from <code>String</code> and
+ * character array (<code>char[]</code>) objects, as well as conversions
+ * to and from the Java primitive types (which may not be exact) and
+ * <code>BigInteger</code>.
+ * <p>
+ * In the descriptions of constructors and methods in this documentation,
+ * the value of a <code>BigDecimal</code> number object is shown as the
+ * result of invoking the <code>toString()</code> method on the object.
+ * The internal representation of a decimal number is neither defined
+ * nor exposed, and is not permitted to affect the result of any
+ * operation.
+ * <p>
+ * The floating point arithmetic provided by this class is defined by
+ * the ANSI X3.274-1996 standard, and is also documented at
+ * <code>http://www2.hursley.ibm.com/decimal</code>
+ * <br><i>[This URL will change.]</i>
+ *
+ * <h3>Operator methods</h3>
+ * <p>
+ * Operations on <code>BigDecimal</code> numbers are controlled by a
+ * {@link MathContext} object, which provides the context (precision and
+ * other information) for the operation. Methods that can take a
+ * <code>MathContext</code> parameter implement the standard arithmetic
+ * operators for <code>BigDecimal</code> objects and are known as
+ * <i>operator methods</i>.  The default settings provided by the
+ * constant {@link MathContext#DEFAULT} (<code>digits=9,
+ * form=SCIENTIFIC, lostDigits=false, roundingMode=ROUND_HALF_UP</code>)
+ * perform general-purpose floating point arithmetic to nine digits of
+ * precision.  The <code>MathContext</code> parameter must not be
+ * <code>null</code>.
+ * <p>
+ * Each operator method also has a version provided which does
+ * not take a <code>MathContext</code> parameter.  For this version of
+ * each method, the context settings used are <code>digits=0,
+ * form=PLAIN, lostDigits=false, roundingMode=ROUND_HALF_UP</code>;
+ * these settings perform fixed point arithmetic with unlimited
+ * precision, as defined for the original BigDecimal class in Java 1.1
+ * and Java 1.2.
+ * <p>
+ * For monadic operators, only the optional <code>MathContext</code>
+ * parameter is present; the operation acts upon the current object.
+ * <p>
+ * For dyadic operators, a <code>BigDecimal</code> parameter is always
+ * present; it must not be <code>null</code>.
+ * The operation acts with the current object being the left-hand operand
+ * and the <code>BigDecimal</code> parameter being the right-hand operand.
+ * <p>
+ * For example, adding two <code>BigDecimal</code> objects referred to
+ * by the names <code>award</code> and <code>extra</code> could be
+ * written as any of:
+ * <p><code>
+ *     award.add(extra)
+ * <br>award.add(extra, MathContext.DEFAULT)
+ * <br>award.add(extra, acontext)
+ * </code>
+ * <p>
+ * (where <code>acontext</code> is a <code>MathContext</code> object),
+ * which would return a <code>BigDecimal</code> object whose value is
+ * the result of adding <code>award</code> and <code>extra</code> under
+ * the appropriate context settings.
+ * <p>
+ * When a <code>BigDecimal</code> operator method is used, a set of
+ * rules define what the result will be (and, by implication, how the
+ * result would be represented as a character string).
+ * These rules are defined in the BigDecimal arithmetic documentation
+ * (see the URL above), but in summary:
+ * <ul>
+ * <li>Results are normally calculated with up to some maximum number of
+ * significant digits.
+ * For example, if the <code>MathContext</code> parameter for an operation
+ * were <code>MathContext.DEFAULT</code> then the result would be
+ * rounded to 9 digits; the division of 2 by 3 would then result in
+ * 0.666666667.
+ * <br>
+ * You can change the default of 9 significant digits by providing the
+ * method with a suitable <code>MathContext</code> object. This lets you
+ * calculate using as many digits as you need -- thousands, if necessary.
+ * Fixed point (scaled) arithmetic is indicated by using a
+ * <code>digits</code> setting of 0 (or omitting the
+ * <code>MathContext</code> parameter).
+ * <br>
+ * Similarly, you can change the algorithm used for rounding from the
+ * default "classic" algorithm.
+ * <li>
+ * In standard arithmetic (that is, when the <code>form</code> setting
+ * is not <code>PLAIN</code>), a zero result is always expressed as the
+ * single digit <code>'0'</code> (that is, with no sign, decimal point,
+ * or exponent part).
+ * <li>
+ * Except for the division and power operators in standard arithmetic,
+ * trailing zeros are preserved (this is in contrast to binary floating
+ * point operations and most electronic calculators, which lose the
+ * information about trailing zeros in the fractional part of results).
+ * <br>
+ * So, for example:
+ * <p><code>
+ *     new BigDecimal("2.40").add(     new BigDecimal("2"))      =&gt; "4.40"
+ * <br>new BigDecimal("2.40").subtract(new BigDecimal("2"))      =&gt; "0.40"
+ * <br>new BigDecimal("2.40").multiply(new BigDecimal("2"))      =&gt; "4.80"
+ * <br>new BigDecimal("2.40").divide(  new BigDecimal("2"), def) =&gt; "1.2"
+ * </code>
+ * <p>where the value on the right of the <code>=&gt;</code> would be the
+ * result of the operation, expressed as a <code>String</code>, and
+ * <code>def</code> (in this and following examples) refers to
+ * <code>MathContext.DEFAULT</code>).
+ * This preservation of trailing zeros is desirable for most
+ * calculations (including financial calculations).
+ * If necessary, trailing zeros may be easily removed using division by 1.
+ * <li>
+ * In standard arithmetic, exponential form is used for a result
+ * depending on its value and the current setting of <code>digits</code>
+ * (the default is 9 digits).
+ * If the number of places needed before the decimal point exceeds the
+ * <code>digits</code> setting, or the absolute value of the number is
+ * less than <code>0.000001</code>, then the number will be expressed in
+ * exponential notation; thus
+ * <p><code>
+ *   new BigDecimal("1e+6").multiply(new BigDecimal("1e+6"), def)
+ * </code>
+ * <p>results in <code>1E+12</code> instead of
+ * <code>1000000000000</code>, and
+ * <p><code>
+ *   new BigDecimal("1").divide(new BigDecimal("3E+10"), def)
+ * </code>
+ * <p>results in <code>3.33333333E-11</code> instead of
+ * <code>0.0000000000333333333</code>.
+ * <p>
+ * The form of the exponential notation (scientific or engineering) is
+ * determined by the <code>form</code> setting.
+ * <eul>
+ * <p>
+ * The names of methods in this class follow the conventions established
+ * by <code>java.lang.Number</code>, <code>java.math.BigInteger</code>,
+ * and <code>java.math.BigDecimal</code> in Java 1.1 and Java 1.2.
+ *
+ * @see     MathContext
+ * @version 1.08 2000.06.18
+ * @author  Mike Cowlishaw
+ */
+
+public class BigDecimal extends java.lang.Number implements java.io.Serializable,java.lang.Comparable{
+ private static final java.lang.String $0="BigDecimal.nrx";
+ 
+ 
+ 
+ /* ----- Constants ----- */
+ /* properties constant public */ // useful to others
+ /**
+  * The <code>BigDecimal</code> constant "0".
+  *
+  * @see #ONE
+  * @see #TEN
+  * @since IBM JDK 1.1.8
+  */
+ public static final com.ibm.math.BigDecimal ZERO=new com.ibm.math.BigDecimal((long)0); // use long as we want the int constructor
+ // .. to be able to use this, for speed
+ 
+ /**
+  * The <code>BigDecimal</code> constant "1".
+  *
+  * @see #TEN
+  * @see #ZERO
+  * @since IBM JDK 1.1.8
+  */
+ public static final com.ibm.math.BigDecimal ONE=new com.ibm.math.BigDecimal((long)1); // use long as we want the int constructor
+ // .. to be able to use this, for speed
+ 
+ /**
+  * The <code>BigDecimal</code> constant "10".
+  *
+  * @see #ONE
+  * @see #ZERO
+  * @since IBM JDK 1.1.8
+  */
+ public static final com.ibm.math.BigDecimal TEN=new com.ibm.math.BigDecimal(10);
+ 
+ // the rounding modes (copied here for upwards compatibility)
+ /**
+  * Rounding mode to round to a more positive number.
+  * See {@Link MathContext#ROUND_CEILING}.
+  */
+ public static final int ROUND_CEILING=com.ibm.math.MathContext.ROUND_CEILING;
+ 
+ /**
+  * Rounding mode to round towards zero.
+  * See {@Link MathContext#ROUND_DOWN}.
+  */
+ public static final int ROUND_DOWN=com.ibm.math.MathContext.ROUND_DOWN;
+ 
+ /**
+  * Rounding mode to round to a more negative number.
+  * See {@Link MathContext#ROUND_FLOOR}.
+  */
+ public static final int ROUND_FLOOR=com.ibm.math.MathContext.ROUND_FLOOR;
+ 
+ /**
+  * Rounding mode to round to nearest neighbor, where an equidistant
+  * value is rounded down.
+  * See {@Link MathContext#ROUND_HALF_DOWN}.
+  */
+ public static final int ROUND_HALF_DOWN=com.ibm.math.MathContext.ROUND_HALF_DOWN;
+ 
+ /**
+  * Rounding mode to round to nearest neighbor, where an equidistant
+  * value is rounded to the nearest even neighbor.
+  * See {@Link MathContext#ROUND_HALF_EVEN}.
+  */
+ public static final int ROUND_HALF_EVEN=com.ibm.math.MathContext.ROUND_HALF_EVEN;
+ 
+ /**
+  * Rounding mode to round to nearest neighbor, where an equidistant
+  * value is rounded up.
+  * See {@Link MathContext#ROUND_HALF_UP}.
+  */
+ public static final int ROUND_HALF_UP=com.ibm.math.MathContext.ROUND_HALF_UP;
+ 
+ /**
+  * Rounding mode to assert that no rounding is necessary.
+  * See {@Link MathContext#ROUND_UNNECESSARY}.
+  */
+ public static final int ROUND_UNNECESSARY=com.ibm.math.MathContext.ROUND_UNNECESSARY;
+ 
+ /**
+  * Rounding mode to round away from zero.
+  * See {@Link MathContext#ROUND_UP}.
+  */
+ public static final int ROUND_UP=com.ibm.math.MathContext.ROUND_UP;
+ 
+ /* properties constant private */ // locals
+ private static final byte ispos=1; // ind: indicates positive (must be 1)
+ private static final byte iszero=0; // ind: indicates zero     (must be 0)
+ private static final byte isneg=-1; // ind: indicates negative (must be -1)
+ // [later could add NaN, +/- infinity, here]
+ 
+ private static final int MinExp=-999999999; // minimum exponent allowed
+ private static final int MaxExp=999999999; // maximum exponent allowed
+ private static final int MinArg=-999999999; // minimum argument integer
+ private static final int MaxArg=999999999; // maximum argument integer
+ 
+ private static final com.ibm.math.MathContext plainMC=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN); // context for plain unlimited math
+ 
+ /* properties constant private unused */ // present but not referenced
+ 
+ // Serialization version
+ private static final long serialVersionUID=8245355804974198832L;
+ 
+ private static final java.lang.String copyright=" Copyright (c) IBM Corporation 1996, 2000.  All rights reserved. ";
+ 
+ /* properties static private */
+ // Precalculated constant arrays (used by byteaddsub)
+ private static byte bytecar[]=new byte[(90+99)+1]; // carry/borrow array
+ private static byte bytedig[]=diginit(); // next digit array
+ 
+ /* ----- Instance properties [all private and immutable] ----- */
+ /* properties private */
+ 
+ /**
+  * The indicator. This may take the values:
+  * <ul>
+  * <li>ispos  -- the number is positive
+  * <li>iszero -- the number is zero
+  * <li>isneg  -- the number is negative
+  * </ul>
+  *
+  * @serial
+  */
+ private byte ind; // assumed undefined
+ // Note: some code below assumes IND = Sign [-1, 0, 1], at present.
+ // We only need two bits for this, but use a byte [also permits
+ // smooth future extension].
+ 
+ /**
+  * The formatting style. This may take the values:
+  * <ul>
+  * <li>MathContext.PLAIN        -- no exponent needed
+  * <li>MathContext.SCIENTIFIC   -- scientific notation required
+  * <li>MathContext.ENGINEERING  -- engineering notation required
+  * </ul>
+  * <p>
+  * This property is an optimization; it allows us to defer number
+  * layout until it is actually needed as a string, hence avoiding
+  * unnecessary formatting.
+  *
+  * @serial
+  */
+ private byte form=(byte)com.ibm.math.MathContext.PLAIN; // assumed PLAIN
+ // We only need two bits for this, at present, but use a byte
+ // [again, to allow for smooth future extension]
+ 
+ /**
+  * The value of the mantissa.
+  * <p>
+  * Once constructed, this may become shared between several BigDecimal
+  * objects, so must not be altered.
+  * <p>
+  * For efficiency (speed), this is a byte array, with each byte
+  * taking a value of 0 -> 9.
+  * <p>
+  * If the first byte is 0 then the value of the number is zero (and
+  * mant.length=1, except when constructed from a plain number, for
+  * example, 0.000).
+  *
+  * @serial
+  */
+ private byte mant[]; // assumed null
+ 
+ /**
+  * The exponent.
+  * <p>
+  * For fixed point arithmetic, scale is <code>-exp</code>, and can
+  * apply to zero.
+  *
+  * Note that this property can have a value less than MinExp when
+  * the mantissa has more than one digit.
+  *
+  * @serial
+  */
+ private int exp;
+ // assumed 0
+ 
+ /* ---------------------------------------------------------------- */
+ /* Constructors                                                     */
+ /* ---------------------------------------------------------------- */
+ 
+ /**
+  * Constructs a <code>BigDecimal</code> object from a
+  * <code>java.math.BigDecimal</code>.
+  * <p>
+  * Constructs a <code>BigDecimal</code> as though the parameter had
+  * been represented as a <code>String</code> (using its
+  * <code>toString</code> method) and the
+  * {@link #BigDecimal(java.lang.String)} constructor had then been
+  * used.
+  * The parameter must not be <code>null</code>.
+  * <p>
+  * <i>(Note: this constructor is provided only in the
+  * <code>com.ibm.math</code> version of the BigDecimal class.
+  * It would not be present in a <code>java.math</code> version.)</i>
+  *
+  * @param bd The <code>BigDecimal</code> to be translated.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public BigDecimal(java.math.BigDecimal bd){
+  this(bd.toString());
+  return;}
+
+ /**
+  * Constructs a <code>BigDecimal</code> object from a
+  * <code>BigInteger</code>, with scale 0.
+  * <p>
+  * Constructs a <code>BigDecimal</code> which is the exact decimal
+  * representation of the <code>BigInteger</code>, with a scale of
+  * zero.
+  * The value of the <code>BigDecimal</code> is identical to the value
+  * of the <code>BigInteger</code>.
+  * The parameter must not be <code>null</code>.
+  * <p>
+  * The <code>BigDecimal</code> will contain only decimal digits,
+  * prefixed with a leading minus sign (hyphen) if the
+  * <code>BigInteger</code> is negative.  A leading zero will be
+  * present only if the <code>BigInteger</code> is zero.
+  *
+  * @param bi The <code>BigInteger</code> to be converted.
+  */
+ 
+ public BigDecimal(java.math.BigInteger bi){
+  this(bi.toString(10));
+  return;}
+ // exp remains 0
+ 
+ /**
+  * Constructs a <code>BigDecimal</code> object from a
+  * <code>BigInteger</code> and a scale.
+  * <p>
+  * Constructs a <code>BigDecimal</code> which is the exact decimal
+  * representation of the <code>BigInteger</code>, scaled by the
+  * second parameter, which may not be negative.
+  * The value of the <code>BigDecimal</code> is the
+  * <code>BigInteger</code> divided by ten to the power of the scale.
+  * The <code>BigInteger</code> parameter must not be
+  * <code>null</code>.
+  * <p>
+  * The <code>BigDecimal</code> will contain only decimal digits, (with
+  * an embedded decimal point followed by <code>scale</code> decimal
+  * digits if the scale is positive), prefixed with a leading minus
+  * sign (hyphen) if the <code>BigInteger</code> is negative.  A
+  * leading zero will be present only if the <code>BigInteger</code> is
+  * zero.
+  *
+  * @param  bi    The <code>BigInteger</code> to be converted.
+  * @param  scale The <code>int</code> specifying the scale.
+  * @throws NumberFormatException if the scale is negative.
+  */
+ 
+ public BigDecimal(java.math.BigInteger bi,int scale){
+  this(bi.toString(10));
+  if (scale<0) 
+   throw new java.lang.NumberFormatException("Negative scale:"+" "+scale);
+  exp=(int)-scale; // exponent is -scale
+  return;}
+
+ /**
+  * Constructs a <code>BigDecimal</code> object from an array of characters.
+  * <p>
+  * Constructs a <code>BigDecimal</code> as though a
+  * <code>String</code> had been constructed from the character array
+  * and the {@link #BigDecimal(java.lang.String)} constructor had then
+  * been used. The parameter must not be <code>null</code>.
+  * <p>
+  * Using this constructor is faster than using the
+  * <code>BigDecimal(String)</code> constructor if the string is
+  * already available in character array form.
+  *
+  * @param inchars The <code>char[]</code> array containing the number
+  *                to be converted.
+  * @throws NumberFormatException if the parameter is not a valid
+  *                number.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public BigDecimal(char inchars[]){
+  this(inchars,0,inchars.length);
+  return;}
+
+ /**
+  * Constructs a <code>BigDecimal</code> object from an array of characters.
+  * <p>
+  * Constructs a <code>BigDecimal</code> as though a
+  * <code>String</code> had been constructed from the character array
+  * (or a subarray of that array) and the
+  * {@link #BigDecimal(java.lang.String)} constructor had then been
+  * used. The first parameter must not be <code>null</code>, and the
+  * subarray must be wholly contained within it.
+  * <p>
+  * Using this constructor is faster than using the
+  * <code>BigDecimal(String)</code> constructor if the string is
+  * already available within a character array.
+  *
+  * @param inchars The <code>char[]</code> array containing the number
+  *                to be converted.
+  * @param offset  The <code>int</code> offset into the array of the
+  *                start of the number to be converted.
+  * @param length  The <code>int</code> length of the number.
+  * @throws NumberFormatException if the parameter is not a valid
+  *                number for any reason.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public BigDecimal(char inchars[],int offset,int length){super();
+  boolean exotic;
+  boolean hadexp;
+  int d;
+  int dotoff;
+  int last;
+  int i=0;
+  char si=0;
+  boolean eneg=false;
+  int k=0;
+  int elen=0;
+  int j=0;
+  char sj=0;
+  int dvalue=0;
+  int mag=0;
+  // This is the primary constructor; all incoming strings end up
+  // here; it uses explicit (inline) parsing for speed and to avoid
+  // generating intermediate (temporary) objects of any kind.
+  // 1998.06.25: exponent form built only if E/e in string
+  // 1998.06.25: trailing zeros not removed for zero
+  // 1999.03.06: no embedded blanks; allow offset and length
+  if (length<=0) 
+   bad(inchars); // bad conversion (empty string)
+  // [bad offset will raise array bounds exception]
+  
+  /* Handle and step past sign */
+  ind=ispos; // assume positive
+  if (inchars[0]==('-')) 
+   {
+    length--;
+    if (length==0) 
+     bad(inchars); // nothing after sign
+    ind=isneg;
+    offset++;
+   }
+  else 
+   if (inchars[0]==('+')) 
+    {
+     length--;
+     if (length==0) 
+      bad(inchars); // nothing after sign
+     offset++;
+    }
+  
+  /* We're at the start of the number */
+  exotic=false; // have extra digits
+  hadexp=false; // had explicit exponent
+  d=0; // count of digits found
+  dotoff=-1; // offset where dot was found
+  last=-1; // last character of mantissa
+  {int $1=length;i=offset;i:for(;$1>0;$1--,i++){
+   si=inchars[i];
+   if (si>='0')  // test for Arabic digit
+    if (si<='9') 
+     {
+      last=i;
+      d++; // still in mantissa
+      continue i;
+     }
+   if (si=='.') 
+    { // record and ignore
+     if (dotoff>=0) 
+      bad(inchars); // two dots
+     dotoff=i-offset; // offset into mantissa
+     continue i;
+    }
+   if (si!='e') 
+    if (si!='E') 
+     { // expect an extra digit
+      if ((!(java.lang.Character.isDigit(si)))) 
+       bad(inchars); // not a number
+      // defer the base 10 check until later to avoid extra method call
+      exotic=true; // will need conversion later
+      last=i;
+      d++; // still in mantissa
+      continue i;
+     }
+   /* Found 'e' or 'E' -- now process explicit exponent */
+   // 1998.07.11: sign no longer required
+   if ((i-offset)>(length-2)) 
+    bad(inchars); // no room for even one digit
+   eneg=false;
+   if ((inchars[i+1])==('-')) 
+    {
+     eneg=true;
+     k=i+2;
+    }
+   else 
+    if ((inchars[i+1])==('+')) 
+     k=i+2;
+    else 
+     k=i+1;
+   // k is offset of first expected digit
+   elen=length-((k-offset)); // possible number of digits
+   if ((elen==0)|(elen>9)) 
+    bad(inchars); // 0 or more than 9 digits
+   {int $2=elen;j=k;j:for(;$2>0;$2--,j++){
+    sj=inchars[j];
+    if (sj<'0') 
+     bad(inchars); // always bad
+    if (sj>'9') 
+     { // maybe an exotic digit
+      if ((!(java.lang.Character.isDigit(sj)))) 
+       bad(inchars); // not a number
+      dvalue=java.lang.Character.digit(sj,10); // check base
+      if (dvalue<0) 
+       bad(inchars); // not base 10
+     }
+    else 
+     dvalue=((int)(sj))-((int)('0'));
+    exp=(exp*10)+dvalue;
+    }
+   }/*j*/
+   if (eneg) 
+    exp=(int)-exp; // was negative
+   hadexp=true; // remember we had one
+   break i; // we are done
+   }
+  }/*i*/
+  
+  /* Here when all inspected */
+  if (d==0) 
+   bad(inchars); // no mantissa digits
+  if (dotoff>=0) 
+   exp=(exp+dotoff)-d; // adjust exponent if had dot
+  
+  /* strip leading zeros/dot (leave final if all 0's) */
+  {int $3=last-1;i=offset;i:for(;i<=$3;i++){
+   si=inchars[i];
+   if (si=='0') 
+    {
+     offset++;
+     dotoff--;
+     d--;
+    }
+   else 
+    if (si=='.') 
+     {
+      offset++; // step past dot
+      dotoff--;
+     }
+    else 
+     if (si<='9') 
+      break i;/* non-0 */
+     else 
+      {/* exotic */
+       if ((java.lang.Character.digit(si,10))!=0) 
+        break i; // non-0 or bad
+       // is 0 .. strip like '0'
+       offset++;
+       dotoff--;
+       d--;
+      }
+   }
+  }/*i*/
+  
+  /* Create the mantissa array */
+  mant=new byte[d]; // we know the length
+  j=offset; // input offset
+  if (exotic) 
+   {exotica:do{ // slow: check for exotica
+    {int $4=d;i=0;i:for(;$4>0;$4--,i++){
+     if (i==dotoff) 
+      j++; // at dot
+     sj=inchars[j];
+     if (sj<='9') 
+      mant[i]=(byte)(((int)(sj))-((int)('0')));/* easy */
+     else 
+      {
+       dvalue=java.lang.Character.digit(sj,10);
+       if (dvalue<0) 
+        bad(inchars); // not a number after all
+       mant[i]=(byte)dvalue;
+      }
+     j++;
+     }
+    }/*i*/
+   }while(false);}/*exotica*/
+  else 
+   {simple:do{
+    {int $5=d;i=0;i:for(;$5>0;$5--,i++){
+     if (i==dotoff) 
+      j++;
+     mant[i]=(byte)(((int)(inchars[j]))-((int)('0')));
+     j++;
+     }
+    }/*i*/
+   }while(false);}/*simple*/
+  
+  /* Looks good.  Set the sign indicator and form, as needed. */
+  // Trailing zeros are preserved
+  // The rule here for form is:
+  //   If no E-notation, then request plain notation
+  //   Otherwise act as though add(0,DEFAULT) and request scientific notation
+  // [form is already PLAIN]
+  if (mant[0]==0) 
+   {
+    ind=iszero; // force to show zero
+    // negative exponent is significant (e.g., -3 for 0.000) if plain
+    if (exp>0) 
+     exp=0; // positive exponent can be ignored
+    if (hadexp) 
+     { // zero becomes single digit from add
+      mant=ZERO.mant;
+      exp=0;
+     }
+   }
+  else 
+   { // non-zero
+    // [ind was set earlier]
+    // now determine form
+    if (hadexp) 
+     {
+      form=(byte)com.ibm.math.MathContext.SCIENTIFIC;
+      // 1999.06.29 check for overflow
+      mag=(exp+mant.length)-1; // true exponent in scientific notation
+      if ((mag<MinExp)|(mag>MaxExp)) 
+       bad(inchars);
+     }
+   }
+  // say 'BD(c[]): mant[0] mantlen exp ind form:' mant[0] mant.length exp ind form
+  return;
+  }
+
+ /**
+  * Constructs a <code>BigDecimal</code> object directly from a
+  * <code>double</code>.
+  * <p>
+  * Constructs a <code>BigDecimal</code> which is the exact decimal
+  * representation of the 64-bit signed binary floating point
+  * parameter.
+  * <p>
+  * Note that this constructor it an exact conversion; it does not give
+  * the same result as converting <code>num</code> to a
+  * <code>String</code> using the <code>Double.toString()</code> method
+  * and then using the {@link #BigDecimal(java.lang.String)}
+  * constructor.
+  * To get that result, use the static {@link #valueOf(double)}
+  * method to construct a <code>BigDecimal</code> from a
+  * <code>double</code>.
+  *
+  * @param num The <code>double</code> to be converted.
+  * @throws NumberFormatException if the parameter is infinite or
+  *            not a number.
+  */
+ 
+ public BigDecimal(double num){
+  // 1999.03.06: use exactly the old algorithm
+  // 2000.01.01: note that this constructor does give an exact result,
+  //             so perhaps it should not be deprecated
+  // 2000.06.18: no longer deprecated
+  this((new java.math.BigDecimal(num)).toString());
+  return;}
+
+ /**
+  * Constructs a <code>BigDecimal</code> object directly from a
+  * <code>int</code>.
+  * <p>
+  * Constructs a <code>BigDecimal</code> which is the exact decimal
+  * representation of the 32-bit signed binary integer parameter.
+  * The <code>BigDecimal</code> will contain only decimal digits,
+  * prefixed with a leading minus sign (hyphen) if the parameter is
+  * negative.
+  * A leading zero will be present only if the parameter is zero.
+  *
+  * @param num The <code>int</code> to be converted.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public BigDecimal(int num){super();
+  int mun;
+  int i=0;
+  // We fastpath commoners
+  if (num<=9) 
+   if (num>=(-9)) 
+    {singledigit:do{
+     // very common single digit case
+     {/*select*/
+     if (num==0)
+      {
+       mant=ZERO.mant;
+       ind=iszero;
+      }
+     else if (num==1)
+      {
+       mant=ONE.mant;
+       ind=ispos;
+      }
+     else if (num==(-1))
+      {
+       mant=ONE.mant;
+       ind=isneg;
+      }
+     else{
+      {
+       mant=new byte[1];
+       if (num>0) 
+        {
+         mant[0]=(byte)num;
+         ind=ispos;
+        }
+       else 
+        { // num<-1
+         mant[0]=(byte)((int)-num);
+         ind=isneg;
+        }
+      }
+     }
+     }
+     return;
+    }while(false);}/*singledigit*/
+  
+  /* We work on negative numbers so we handle the most negative number */
+  if (num>0) 
+   {
+    ind=ispos;
+    num=(int)-num;
+   }
+  else 
+   ind=isneg;/* negative */ // [0 case already handled]
+  // [it is quicker, here, to pre-calculate the length with
+  // one loop, then allocate exactly the right length of byte array,
+  // then re-fill it with another loop]
+  mun=num; // working copy
+  {i=9;i:for(;;i--){
+   mun=mun/10;
+   if (mun==0) 
+    break i;
+   }
+  }/*i*/
+  // i is the position of the leftmost digit placed
+  mant=new byte[10-i];
+  {i=(10-i)-1;i:for(;;i--){
+   mant[i]=(byte)-(((byte)(num%10)));
+   num=num/10;
+   if (num==0) 
+    break i;
+   }
+  }/*i*/
+  return;
+  }
+
+ /**
+  * Constructs a <code>BigDecimal</code> object directly from a
+  * <code>long</code>.
+  * <p>
+  * Constructs a <code>BigDecimal</code> which is the exact decimal
+  * representation of the 64-bit signed binary integer parameter.
+  * The <code>BigDecimal</code> will contain only decimal digits,
+  * prefixed with a leading minus sign (hyphen) if the parameter is
+  * negative.
+  * A leading zero will be present only if the parameter is zero.
+  *
+  * @param num The <code>long</code> to be converted.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public BigDecimal(long num){super();
+  long mun;
+  int i=0;
+  // Not really worth fastpathing commoners in this constructor [also,
+  // we use this to construct the static constants].
+  // This is much faster than: this(String.valueOf(num).toCharArray())
+  /* We work on negative num so we handle the most negative number */
+  if (num>0) 
+   {
+    ind=ispos;
+    num=(long)-num;
+   }
+  else 
+   if (num==0) 
+    ind=iszero;
+   else 
+    ind=isneg;/* negative */
+  mun=num;
+  {i=18;i:for(;;i--){
+   mun=mun/10;
+   if (mun==0) 
+    break i;
+   }
+  }/*i*/
+  // i is the position of the leftmost digit placed
+  mant=new byte[19-i];
+  {i=(19-i)-1;i:for(;;i--){
+   mant[i]=(byte)-(((byte)(num%10)));
+   num=num/10;
+   if (num==0) 
+    break i;
+   }
+  }/*i*/
+  return;
+  }
+
+ /**
+  * Constructs a <code>BigDecimal</code> object from a <code>String</code>.
+  * <p>
+  * Constructs a <code>BigDecimal</code> from the parameter, which must
+  * not be <code>null</code> and must represent a valid <i>number</i>,
+  * as described formally in the documentation referred to
+  * {@link BigDecimal above}.
+  * <p>
+  * In summary, numbers in <code>String</code> form must have at least
+  * one digit, may have a leading sign, may have a decimal point, and
+  * exponential notation may be used.  They follow conventional syntax,
+  * and may not contain blanks.
+  * <p>
+  * Some valid strings from which a <code>BigDecimal</code> might
+  * be constructed are:
+  * <pre>
+  *       "0"         -- Zero
+  *      "12"         -- A whole number
+  *     "-76"         -- A signed whole number
+  *      "12.70"      -- Some decimal places
+  *     "+0.003"      -- Plus sign is allowed
+  *      "17."        -- The same as 17
+  *        ".5"       -- The same as 0.5
+  *      "4E+9"       -- Exponential notation
+  *       "0.73e-7"   -- Exponential notation
+  * </pre>
+  * <p>
+  * (Exponential notation means that the number includes an optional
+  * sign and a power of ten following an '</code>E</code>' that
+  * indicates how the decimal point will be shifted.  Thus the
+  * <code>"4E+9"</code> above is just a short way of writing
+  * <code>4000000000</code>, and the <code>"0.73e-7"</code> is short
+  * for <code>0.000000073</code>.)
+  * <p>
+  * The <code>BigDecimal</code> constructed from the String is in a
+  * standard form, with no blanks, as though the
+  * {@link #add(BigDecimal)} method had been used to add zero to the
+  * number with unlimited precision.
+  * If the string uses exponential notation (that is, includes an
+  * <code>e</code> or an <code>E</code>), then the
+  * <code>BigDecimal</code> number will be expressed in scientific
+  * notation (where the power of ten is adjusted so there is a single
+  * non-zero digit to the left of the decimal point); in this case if
+  * the number is zero then it will be expressed as the single digit 0,
+  * and if non-zero it will have an exponent unless that exponent would
+  * be 0.  The exponent must fit in nine digits both before and after it
+  * is expressed in scientific notation.
+  * <p>
+  * Any digits in the parameter must be decimal; that is,
+  * <code>Character.digit(c, 10)</code> (where </code>c</code> is the
+  * character in question) would not return -1.
+  *
+  * @param string The <code>String</code> to be converted.
+  * @throws NumberFormatException if the parameter is not a valid
+  * number.
+  */
+ 
+ public BigDecimal(java.lang.String string){
+  this(string.toCharArray(),0,string.length());
+  return;}
+
+ /* <sgml> Make a default BigDecimal object for local use. </sgml> */
+ 
+ private BigDecimal(){super();
+  return;
+  }
+
+ /* ---------------------------------------------------------------- */
+ /* Operator methods [methods which take a context parameter]        */
+ /* ---------------------------------------------------------------- */
+ 
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is the absolute
+  * value of this <code>BigDecimal</code>.
+  * <p>
+  * The same as {@link #abs(MathContext)}, where the context is
+  * <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will
+  * be <code>this.scale()</code>
+  *
+  * @return A <code>BigDecimal</code> whose value is the absolute
+  *         value of this <code>BigDecimal</code>.
+  */
+ 
+ public com.ibm.math.BigDecimal abs(){
+  return this.abs(plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is the absolute value
+  * of this <code>BigDecimal</code>.
+  * <p>
+  * If the current object is zero or positive, then the same result as
+  * invoking the {@link #plus(MathContext)} method with the same
+  * parameter is returned.
+  * Otherwise, the same result as invoking the
+  * {@link #negate(MathContext)} method with the same parameter is
+  * returned.
+  *
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is the absolute
+  *             value of this <code>BigDecimal</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal abs(com.ibm.math.MathContext set){
+  if (this.ind==isneg) 
+   return this.negate(set);
+  return this.plus(set);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>this+rhs</code>, using fixed point arithmetic.
+  * <p>
+  * The same as {@link #add(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will be
+  * the maximum of the scales of the two operands.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the addition.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this+rhs</code>, using fixed point arithmetic.
+  */
+ 
+ public com.ibm.math.BigDecimal add(com.ibm.math.BigDecimal rhs){
+  return this.add(rhs,plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is <code>this+rhs</code>.
+  * <p>
+  * Implements the addition (<b><code>+</code></b>) operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the addition.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this+rhs</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal add(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  com.ibm.math.BigDecimal lhs;
+  int reqdig;
+  com.ibm.math.BigDecimal res;
+  byte usel[];
+  int usellen;
+  byte user[];
+  int userlen;
+  int newlen=0;
+  int tlen=0;
+  int mult=0;
+  byte t[]=null;
+  int ia=0;
+  int ib=0;
+  int ea=0;
+  int eb=0;
+  byte ca=0;
+  byte cb=0;
+  /* determine requested digits and form */
+  if (set.lostDigits) 
+   checkdigits(rhs,set.digits);
+  lhs=this; // name for clarity and proxy
+  
+  /* Quick exit for add floating 0 */
+  // plus() will optimize to return same object if possible
+  if (lhs.ind==0) 
+   if (set.form!=com.ibm.math.MathContext.PLAIN) 
+    return rhs.plus(set);
+  if (rhs.ind==0) 
+   if (set.form!=com.ibm.math.MathContext.PLAIN) 
+    return lhs.plus(set);
+  
+  /* Prepare numbers (round, unless unlimited precision) */
+  reqdig=set.digits; // local copy (heavily used)
+  if (reqdig>0) 
+   {
+    if (lhs.mant.length>reqdig) 
+     lhs=clone(lhs).round(set);
+    if (rhs.mant.length>reqdig) 
+     rhs=clone(rhs).round(set);
+   // [we could reuse the new LHS for result in this case]
+   }
+  
+  res=new com.ibm.math.BigDecimal(); // build result here
+  
+  /* Now see how much we have to pad or truncate lhs or rhs in order
+     to align the numbers.  If one number is much larger than the
+     other, then the smaller cannot affect the answer [but we may
+     still need to pad with up to DIGITS trailing zeros]. */
+  // Note sign may be 0 if digits (reqdig) is 0
+  // usel and user will be the byte arrays passed to the adder; we'll
+  // use them on all paths except quick exits
+  usel=lhs.mant;
+  usellen=lhs.mant.length;
+  user=rhs.mant;
+  userlen=rhs.mant.length;
+  {padder:do{/*select*/
+  if (lhs.exp==rhs.exp)
+   {/* no padding needed */
+    // This is the most common, and fastest, path
+    res.exp=lhs.exp;
+   }
+  else if (lhs.exp>rhs.exp)
+   { // need to pad lhs and/or truncate rhs
+    newlen=(usellen+lhs.exp)-rhs.exp;
+    /* If, after pad, lhs would be longer than rhs by digits+1 or
+       more (and digits>0) then rhs cannot affect answer, so we only
+       need to pad up to a length of DIGITS+1. */
+    if (newlen>=((userlen+reqdig)+1)) 
+     if (reqdig>0) 
+      {
+       // LHS is sufficient
+       res.mant=usel;
+       res.exp=lhs.exp;
+       res.ind=lhs.ind;
+       if (usellen<reqdig) 
+        { // need 0 padding
+         res.mant=extend(lhs.mant,reqdig);
+         res.exp=res.exp-((reqdig-usellen));
+        }
+       return res.finish(set,false);
+      }
+    // RHS may affect result
+    res.exp=rhs.exp; // expected final exponent
+    if (newlen>(reqdig+1)) 
+     if (reqdig>0) 
+      {
+       // LHS will be max; RHS truncated
+       tlen=(newlen-reqdig)-1; // truncation length
+       userlen=userlen-tlen;
+       res.exp=res.exp+tlen;
+       newlen=reqdig+1;
+      }
+    if (newlen>usellen) 
+     usellen=newlen; // need to pad LHS
+   }
+  else{ // need to pad rhs and/or truncate lhs
+   newlen=(userlen+rhs.exp)-lhs.exp;
+   if (newlen>=((usellen+reqdig)+1)) 
+    if (reqdig>0) 
+     {
+      // RHS is sufficient
+      res.mant=user;
+      res.exp=rhs.exp;
+      res.ind=rhs.ind;
+      if (userlen<reqdig) 
+       { // need 0 padding
+        res.mant=extend(rhs.mant,reqdig);
+        res.exp=res.exp-((reqdig-userlen));
+       }
+      return res.finish(set,false);
+     }
+   // LHS may affect result
+   res.exp=lhs.exp; // expected final exponent
+   if (newlen>(reqdig+1)) 
+    if (reqdig>0) 
+     {
+      // RHS will be max; LHS truncated
+      tlen=(newlen-reqdig)-1; // truncation length
+      usellen=usellen-tlen;
+      res.exp=res.exp+tlen;
+      newlen=reqdig+1;
+     }
+   if (newlen>userlen) 
+    userlen=newlen; // need to pad RHS
+  }
+  }while(false);}/*padder*/
+  
+  /* OK, we have aligned mantissas.  Now add or subtract. */
+  // 1998.06.27 Sign may now be 0 [e.g., 0.000] .. treat as positive
+  // 1999.05.27 Allow for 00 on lhs [is not larger than 2 on rhs]
+  // 1999.07.10 Allow for 00 on rhs [is not larger than 2 on rhs]
+  if (lhs.ind==iszero) 
+   res.ind=ispos;
+  else 
+   res.ind=lhs.ind; // likely sign, all paths
+  if (((lhs.ind==isneg)?1:0)==((rhs.ind==isneg)?1:0))  // same sign, 0 non-negative
+   mult=1;
+  else 
+   {signdiff:do{ // different signs, so subtraction is needed
+    mult=-1; // will cause subtract
+    /* Before we can subtract we must determine which is the larger,
+       as our add/subtract routine only handles non-negative results
+       so we may need to swap the operands. */
+    {swaptest:do{/*select*/
+    if (rhs.ind==iszero)
+     ; // original A bigger
+    else if ((usellen<userlen)|(lhs.ind==iszero))
+     { // original B bigger
+      t=usel;
+      usel=user;
+      user=t; // swap
+      tlen=usellen;
+      usellen=userlen;
+      userlen=tlen; // ..
+      res.ind=(byte)-res.ind; // and set sign
+     }
+    else if (usellen>userlen)
+     ; // original A bigger
+    else{
+     {/* logical lengths the same */ // need compare
+      /* may still need to swap: compare the strings */
+      ia=0;
+      ib=0;
+      ea=usel.length-1;
+      eb=user.length-1;
+      {compare:for(;;){
+       if (ia<=ea) 
+        ca=usel[ia];
+       else 
+        {
+         if (ib>eb) 
+          {/* identical */
+           if (set.form!=com.ibm.math.MathContext.PLAIN) 
+            return ZERO;
+           // [if PLAIN we must do the subtract, in case of 0.000 results]
+           break compare;
+          }
+         ca=(byte)0;
+        }
+       if (ib<=eb) 
+        cb=user[ib];
+       else 
+        cb=(byte)0;
+       if (ca!=cb) 
+        {
+         if (ca<cb) 
+          {/* swap needed */
+           t=usel;
+           usel=user;
+           user=t; // swap
+           tlen=usellen;
+           usellen=userlen;
+           userlen=tlen; // ..
+           res.ind=(byte)-res.ind;
+          }
+         break compare;
+        }
+       /* mantissas the same, so far */
+       ia++;
+       ib++;
+       }
+      }/*compare*/
+     } // lengths the same
+    }
+    }while(false);}/*swaptest*/
+   }while(false);}/*signdiff*/
+  
+  /* here, A is > B if subtracting */
+  // add [A+B*1] or subtract [A+(B*-1)]
+  res.mant=byteaddsub(usel,usellen,user,userlen,mult,false);
+  // [reuse possible only after chop; accounting makes not worthwhile]
+  
+  // Finish() rounds before stripping leading 0's, then sets form, etc.
+  return res.finish(set,false);
+  }
+
+ /**
+  * Compares this <code>BigDecimal</code> to another, using unlimited
+  * precision.
+  * <p>
+  * The same as {@link #compareTo(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the comparison.
+  * @return     An <code>int</code> whose value is -1, 0, or 1 as
+  *             <code>this</code> is numerically less than, equal to,
+  *             or greater than <code>rhs</code>.
+  * @see    #compareTo(Object)
+  */
+ 
+ public int compareTo(com.ibm.math.BigDecimal rhs){
+  return this.compareTo(rhs,plainMC);
+  }
+
+ /**
+  * Compares this <code>BigDecimal</code> to another.
+  * <p>
+  * Implements numeric comparison,
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns a result of type <code>int</code>.
+  * <p>
+  * The result will be:
+  * <table cellpadding=2><tr>
+  * <td align=right><b>-1</b></td>
+  * <td>if the current object is less than the first parameter</td>
+  * </tr><tr>
+  * <td align=right><b>0</b></td>
+  * <td>if the current object is equal to the first parameter</td>
+  * </tr><tr>
+  * <td align=right><b>1</b></td>
+  * <td>if the current object is greater than the first parameter.</td>
+  * </tr></table>
+  * <p>
+  * A {@link #compareTo(Object)} method is also provided.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the comparison.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     An <code>int</code> whose value is -1, 0, or 1 as
+  *             <code>this</code> is numerically less than, equal to,
+  *             or greater than <code>rhs</code>.
+  * @see    #compareTo(Object)
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public int compareTo(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  int thislength=0;
+  int i=0;
+  com.ibm.math.BigDecimal newrhs;
+  // rhs=null will raise NullPointerException, as per Comparable interface
+  if (set.lostDigits) 
+   checkdigits(rhs,set.digits);
+  // [add will recheck in slowpath cases .. but would report -rhs]
+  if ((this.ind==rhs.ind)&(this.exp==rhs.exp)) 
+   {
+    /* sign & exponent the same [very common] */
+    thislength=this.mant.length;
+    if (thislength<rhs.mant.length) 
+     return (byte)-this.ind;
+    if (thislength>rhs.mant.length) 
+     return this.ind;
+    /* lengths are the same; we can do a straight mantissa compare
+       unless maybe rounding [rounding is very unusual] */
+    if ((thislength<=set.digits)|(set.digits==0)) 
+     {
+      {int $6=thislength;i=0;i:for(;$6>0;$6--,i++){
+       if (this.mant[i]<rhs.mant[i]) 
+        return (byte)-this.ind;
+       if (this.mant[i]>rhs.mant[i]) 
+        return this.ind;
+       }
+      }/*i*/
+      return 0; // identical
+     }
+   /* drop through for full comparison */
+   }
+  else 
+   {
+    /* More fastpaths possible */
+    if (this.ind<rhs.ind) 
+     return -1;
+    if (this.ind>rhs.ind) 
+     return 1;
+   }
+  /* carry out a subtract to make the comparison */
+  newrhs=clone(rhs); // safe copy
+  newrhs.ind=(byte)-newrhs.ind; // prepare to subtract
+  return this.add(newrhs,set).ind; // add, and return sign of result
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>this/rhs</code>, using fixed point arithmetic.
+  * <p>
+  * The same as {@link #divide(BigDecimal, int)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the rounding mode is {@link MathContext#ROUND_HALF_UP}.
+  *
+  * The length of the decimal part (the scale) of the result will be
+  * the same as the scale of the current object, if the latter were
+  * formatted without exponential notation.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the division.
+  * @return     A plain <code>BigDecimal</code> whose value is
+  *             <code>this/rhs</code>, using fixed point arithmetic.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal divide(com.ibm.math.BigDecimal rhs){
+  return this.dodivide('D',rhs,plainMC,-1);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>this/rhs</code>, using fixed point arithmetic and a
+  * rounding mode.
+  * <p>
+  * The same as {@link #divide(BigDecimal, int, int)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the second parameter is <code>this.scale()</code>, and
+  * the third is <code>round</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will
+  * therefore be the same as the scale of the current object, if the
+  * latter were formatted without exponential notation.
+  * <p>
+  * @param  rhs   The <code>BigDecimal</code> for the right hand side of
+  *               the division.
+  * @param  round The <code>int</code> rounding mode to be used for
+  *               the division (see the {@link MathContext} class).
+  * @return       A plain <code>BigDecimal</code> whose value is
+  *               <code>this/rhs</code>, using fixed point arithmetic
+  *               and the specified rounding mode.
+  * @throws IllegalArgumentException if <code>round</code> is not a
+  *               valid rounding mode.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @throws ArithmeticException if <code>round</code> is {@link
+  *               MathContext#ROUND_UNNECESSARY} and
+  *               <code>this.scale()</code> is insufficient to
+  *               represent the result exactly.
+  */
+ 
+ public com.ibm.math.BigDecimal divide(com.ibm.math.BigDecimal rhs,int round){
+  com.ibm.math.MathContext set;
+  set=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,round); // [checks round, too]
+  return this.dodivide('D',rhs,set,-1); // take scale from LHS
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>this/rhs</code>, using fixed point arithmetic and a
+  * given scale and rounding mode.
+  * <p>
+  * The same as {@link #divide(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * <code>new MathContext(0, MathContext.PLAIN, false, round)</code>,
+  * except that the length of the decimal part (the scale) to be used
+  * for the result is explicit rather than being taken from
+  * <code>this</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will be
+  * the same as the scale of the current object, if the latter were
+  * formatted without exponential notation.
+  * <p>
+  * @param  rhs   The <code>BigDecimal</code> for the right hand side of
+  *               the division.
+  * @param  scale The <code>int</code> scale to be used for the result.
+  * @param  round The <code>int</code> rounding mode to be used for
+  *               the division (see the {@link MathContext} class).
+  * @return       A plain <code>BigDecimal</code> whose value is
+  *               <code>this/rhs</code>, using fixed point arithmetic
+  *               and the specified rounding mode.
+  * @throws IllegalArgumentException if <code>round</code> is not a
+  *               valid rounding mode.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @throws ArithmeticException if <code>scale</code> is negative.
+  * @throws ArithmeticException if <code>round</code> is {@link
+  *               MathContext#ROUND_UNNECESSARY} and <code>scale</code>
+  *               is insufficient to represent the result exactly.
+  */
+ 
+ public com.ibm.math.BigDecimal divide(com.ibm.math.BigDecimal rhs,int scale,int round){
+  com.ibm.math.MathContext set;
+  if (scale<0) 
+   throw new java.lang.ArithmeticException("Negative scale:"+" "+scale);
+  set=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,round); // [checks round]
+  return this.dodivide('D',rhs,set,scale);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is <code>this/rhs</code>.
+  * <p>
+  * Implements the division (<b><code>/</code></b>) operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the division.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this/rhs</code>.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal divide(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  return this.dodivide('D',rhs,set,-1);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is the integer
+  * part of <code>this/rhs</code>.
+  * <p>
+  * The same as {@link #divideInteger(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the integer division.
+  * @return     A <code>BigDecimal</code> whose value is the integer
+  *             part of <code>this/rhs</code>.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal divideInteger(com.ibm.math.BigDecimal rhs){
+  // scale 0 to drop .000 when plain
+  return this.dodivide('I',rhs,plainMC,0);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is the integer
+  * part of <code>this/rhs</code>.
+  * <p>
+  * Implements the integer division operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the integer division.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is the integer
+  *             part of <code>this/rhs</code>.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @throws ArithmeticException if the result will not fit in the
+  *             number of digits specified for the context.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal divideInteger(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  // scale 0 to drop .000 when plain
+  return this.dodivide('I',rhs,set,0);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * the maximum of <code>this</code> and <code>rhs</code>.
+  * <p>
+  * The same as {@link #max(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the comparison.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             the maximum of <code>this</code> and <code>rhs</code>.
+  */
+ 
+ public com.ibm.math.BigDecimal max(com.ibm.math.BigDecimal rhs){
+  return this.max(rhs,plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is
+  * the maximum of <code>this</code> and <code>rhs</code>.
+  * <p>
+  * Returns the larger of the current object and the first parameter.
+  * <p>
+  * If calling the {@link #compareTo(BigDecimal, MathContext)} method
+  * with the same parameters would return <code>1</code> or
+  * <code>0</code>, then the result of calling the
+  * {@link #plus(MathContext)} method on the current object (using the
+  * same <code>MathContext</code> parameter) is returned.
+  * Otherwise, the result of calling the {@link #plus(MathContext)}
+  * method on the first parameter object (using the same
+  * <code>MathContext</code> parameter) is returned.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the comparison.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             the maximum of <code>this</code> and <code>rhs</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal max(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  if ((this.compareTo(rhs,set))>=0) 
+   return this.plus(set);
+  else 
+   return rhs.plus(set);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * the minimum of <code>this</code> and <code>rhs</code>.
+  * <p>
+  * The same as {@link #min(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the comparison.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             the minimum of <code>this</code> and <code>rhs</code>.
+  */
+ 
+ public com.ibm.math.BigDecimal min(com.ibm.math.BigDecimal rhs){
+  return this.min(rhs,plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is
+  * the minimum of <code>this</code> and <code>rhs</code>.
+  * <p>
+  * Returns the smaller of the current object and the first parameter.
+  * <p>
+  * If calling the {@link #compareTo(BigDecimal, MathContext)} method
+  * with the same parameters would return <code>-1</code> or
+  * <code>0</code>, then the result of calling the
+  * {@link #plus(MathContext)} method on the current object (using the
+  * same <code>MathContext</code> parameter) is returned.
+  * Otherwise, the result of calling the {@link #plus(MathContext)}
+  * method on the first parameter object (using the same
+  * <code>MathContext</code> parameter) is returned.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the comparison.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             the minimum of <code>this</code> and <code>rhs</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal min(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  if ((this.compareTo(rhs,set))<=0) 
+   return this.plus(set);
+  else 
+   return rhs.plus(set);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>this*rhs</code>, using fixed point arithmetic.
+  * <p>
+  * The same as {@link #add(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will be
+  * the sum of the scales of the operands, if they were formatted
+  * without exponential notation.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the multiplication.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this*rhs</code>, using fixed point arithmetic.
+  */
+ 
+ public com.ibm.math.BigDecimal multiply(com.ibm.math.BigDecimal rhs){
+  return this.multiply(rhs,plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is <code>this*rhs</code>.
+  * <p>
+  * Implements the multiplication (<b><code>*</code></b>) operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the multiplication.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this*rhs</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal multiply(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  com.ibm.math.BigDecimal lhs;
+  int padding;
+  int reqdig;
+  byte multer[]=null;
+  byte multand[]=null;
+  int multandlen;
+  int acclen=0;
+  com.ibm.math.BigDecimal res;
+  byte acc[];
+  int n=0;
+  byte mult=0;
+  if (set.lostDigits) 
+   checkdigits(rhs,set.digits);
+  lhs=this; // name for clarity and proxy
+  
+  /* Prepare numbers (truncate, unless unlimited precision) */
+  padding=0; // trailing 0's to add
+  reqdig=set.digits; // local copy
+  if (reqdig>0) 
+   {
+    if (lhs.mant.length>reqdig) 
+     lhs=clone(lhs).round(set);
+    if (rhs.mant.length>reqdig) 
+     rhs=clone(rhs).round(set);
+   // [we could reuse the new LHS for result in this case]
+   }
+  else 
+   {/* unlimited */
+    // fixed point arithmetic will want every trailing 0; we add these
+    // after the calculation rather than before, for speed.
+    if (lhs.exp>0) 
+     padding=padding+lhs.exp;
+    if (rhs.exp>0) 
+     padding=padding+rhs.exp;
+   }
+  
+  // For best speed, as in DMSRCN, we use the shorter number as the
+  // multiplier and the longer as the multiplicand.
+  // 1999.12.22: We used to special case when the result would fit in
+  //             a long, but with Java 1.3 this gave no advantage.
+  if (lhs.mant.length<rhs.mant.length) 
+   {
+    multer=lhs.mant;
+    multand=rhs.mant;
+   }
+  else 
+   {
+    multer=rhs.mant;
+    multand=lhs.mant;
+   }
+  
+  /* Calculate how long result byte array will be */
+  multandlen=(multer.length+multand.length)-1; // effective length
+  // optimize for 75% of the cases where a carry is expected...
+  if ((multer[0]*multand[0])>9) 
+   acclen=multandlen+1;
+  else 
+   acclen=multandlen;
+  
+  /* Now the main long multiplication loop */
+  res=new com.ibm.math.BigDecimal(); // where we'll build result
+  acc=new byte[acclen]; // accumulator, all zeros
+  // 1998.07.01: calculate from left to right so that accumulator goes
+  // to likely final length on first addition; this avoids a one-digit
+  // extension (and object allocation) each time around the loop.
+  // Initial number therefore has virtual zeros added to right.
+  {int $7=multer.length;n=0;n:for(;$7>0;$7--,n++){
+   mult=multer[n];
+   if (mult!=0) 
+    { // [optimization]
+     // accumulate [accumulator is reusable array]
+     acc=byteaddsub(acc,acc.length,multand,multandlen,mult,true);
+    }
+   // divide multiplicand by 10 for next digit to right
+   multandlen--; // 'virtual length'
+   }
+  }/*n*/
+  
+  res.ind=(byte)(lhs.ind*rhs.ind); // final sign
+  res.exp=(lhs.exp+rhs.exp)-padding; // final exponent
+  // [overflow is checked by finish]
+  
+  /* add trailing zeros to the result, if necessary */
+  if (padding==0) 
+   res.mant=acc;
+  else 
+   res.mant=extend(acc,acc.length+padding); // add trailing 0s
+  return res.finish(set,false);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>-this</code>.
+  * <p>
+  * The same as {@link #negate(MathContext)}, where the context is
+  * <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will be
+  * be <code>this.scale()</code>
+  *
+  *
+  * @return A <code>BigDecimal</code> whose value is
+  *         <code>-this</code>.
+  */
+ 
+ public com.ibm.math.BigDecimal negate(){
+  return this.negate(plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is <code>-this</code>.
+  * <p>
+  * Implements the negation (Prefix <b><code>-</code></b>) operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  *
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return A <code>BigDecimal</code> whose value is
+  *         <code>-this</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal negate(com.ibm.math.MathContext set){
+  com.ibm.math.BigDecimal res;
+  // Originally called minus(), changed to matched Java precedents
+  // This simply clones, flips the sign, and possibly rounds
+  if (set.lostDigits) 
+   checkdigits((com.ibm.math.BigDecimal)null,set.digits);
+  res=clone(this); // safe copy
+  res.ind=(byte)-res.ind;
+  return res.finish(set,false);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>+this</code>.
+  * Note that <code>this</code> is not necessarily a
+  * plain <code>BigDecimal</code>, but the result will always be.
+  * <p>
+  * The same as {@link #plus(MathContext)}, where the context is
+  * <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will be
+  * be <code>this.scale()</code>
+  *
+  * @return A <code>BigDecimal</code> whose value is
+  *         <code>+this</code>.
+  */
+ 
+ public com.ibm.math.BigDecimal plus(){
+  return this.plus(plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is
+  * <code>+this</code>.
+  * <p>
+  * Implements the plus (Prefix <b><code>+</code></b>) operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  * <p>
+  * This method is useful for rounding or otherwise applying a context
+  * to a decimal value.
+  *
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return A <code>BigDecimal</code> whose value is
+  *         <code>+this</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal plus(com.ibm.math.MathContext set){
+  // This clones and forces the result to the new settings
+  // May return same object
+  if (set.lostDigits) 
+   checkdigits((com.ibm.math.BigDecimal)null,set.digits);
+  // Optimization: returns same object for some common cases
+  if (set.form==com.ibm.math.MathContext.PLAIN) 
+   if (this.form==com.ibm.math.MathContext.PLAIN) 
+    {
+     if (this.mant.length<=set.digits) 
+      return this;
+     if (set.digits==0) 
+      return this;
+    }
+  return clone(this).finish(set,false);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>this**rhs</code>, using fixed point arithmetic.
+  * <p>
+  * The same as {@link #pow(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * The parameter is the power to which the <code>this</code> will be
+  * raised; it must be in the range 0 through 999999999, and must
+  * have a decimal part of zero.  Note that these restrictions may be
+  * removed in the future, so they should not be used as a test for a
+  * whole number.
+  * <p>
+  * In addition, the power must not be negative, as no
+  * <code>MathContext</code> is used and so the result would then
+  * always be 0.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the operation (the power).
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this**rhs</code>, using fixed point arithmetic.
+  * @throws ArithmeticException if <code>rhs</code> is out of range or
+  *             is not a whole number.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal pow(com.ibm.math.BigDecimal rhs){
+  return this.pow(rhs,plainMC);
+  }
+ // The name for this method is inherited from the precedent set by the
+ // BigInteger and Math classes.
+ 
+ /**
+  * Returns a <code>BigDecimal</code> whose value is <code>this**rhs</code>.
+  * <p>
+  * Implements the power (<b><code>**</code></b>) operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  * <p>
+  * The first parameter is the power to which the <code>this</code>
+  * will be raised; it must be in the range -999999999 through
+  * 999999999, and must have a decimal part of zero.  Note that these
+  * restrictions may be removed in the future, so they should not be
+  * used as a test for a whole number.
+  * <p>
+  * If the <code>digits</code> setting of the <code>MathContext</code>
+  * parameter is 0, the power must be zero or positive.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the operation (the power).
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this**rhs</code>.
+  * @throws ArithmeticException if <code>rhs</code> is out of range or
+  *             is not a whole number.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal pow(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  int n;
+  com.ibm.math.BigDecimal lhs;
+  int reqdig;
+  int workdigits=0;
+  int L=0;
+  com.ibm.math.MathContext workset;
+  com.ibm.math.BigDecimal res;
+  boolean seenbit;
+  int i=0;
+  if (set.lostDigits) 
+   checkdigits(rhs,set.digits);
+  n=rhs.intcheck(MinArg,MaxArg); // check RHS by the rules
+  lhs=this; // clarified name
+  
+  reqdig=set.digits; // local copy (heavily used)
+  if (reqdig==0) 
+   {
+    if (rhs.ind==isneg) 
+     throw new java.lang.ArithmeticException("Negative power:"+" "+rhs.toString());
+    workdigits=0;
+   }
+  else 
+   {/* non-0 digits */
+    if ((rhs.mant.length+rhs.exp)>reqdig) 
+     throw new java.lang.ArithmeticException("Too many digits:"+" "+rhs.toString());
+    
+    /* Round the lhs to DIGITS if need be */
+    if (lhs.mant.length>reqdig) 
+     lhs=clone(lhs).round(set);
+    
+    /* L for precision calculation [see ANSI X3.274-1996] */
+    L=rhs.mant.length+rhs.exp; // length without decimal zeros/exp
+    workdigits=(reqdig+L)+1; // calculate the working DIGITS
+   }
+  
+  /* Create a copy of set for working settings */
+  // Note: no need to check for lostDigits again.
+  // 1999.07.17 Note: this construction must follow RHS check
+  workset=new com.ibm.math.MathContext(workdigits,set.form,false,set.roundingMode);
+  
+  res=ONE; // accumulator
+  if (n==0) 
+   return res; // x**0 == 1
+  if (n<0) 
+   n=(int)-n; // [rhs.ind records the sign]
+  seenbit=false; // set once we've seen a 1-bit
+  {i=1;i:for(;;i++){ // for each bit [top bit ignored]
+   n=n+n; // shift left 1 bit
+   if (n<0) 
+    { // top bit is set
+     seenbit=true; // OK, we're off
+     res=res.multiply(lhs,workset); // acc=acc*x
+    }
+   if (i==31) 
+    break i; // that was the last bit
+   if ((!seenbit)) 
+    continue i; // we don't have to square 1
+   res=res.multiply(res,workset); // acc=acc*acc [square]
+   }
+  }/*i*/ // 32 bits
+  if (rhs.ind<0)  // was a **-n [hence digits>0]
+   res=ONE.divide(res,workset); // .. so acc=1/acc
+  return res.finish(set,true); // round and strip [original digits]
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * the remainder of <code>this/rhs</code>, using fixed point arithmetic.
+  * <p>
+  * The same as {@link #remainder(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * This is not the modulo operator -- the result may be negative.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the remainder operation.
+  * @return     A <code>BigDecimal</code> whose value is the remainder
+  *             of <code>this/rhs</code>, using fixed point arithmetic.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal remainder(com.ibm.math.BigDecimal rhs){
+  return this.dodivide('R',rhs,plainMC,-1);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is the remainder of
+  * <code>this/rhs</code>.
+  * <p>
+  * Implements the remainder operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  * <p>
+  * This is not the modulo operator -- the result may be negative.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the remainder operation.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is the remainder
+  *             of <code>this+rhs</code>.
+  * @throws ArithmeticException if <code>rhs</code> is zero.
+  * @throws ArithmeticException if the integer part of the result will
+  *             not fit in the number of digits specified for the
+  *             context.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal remainder(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  return this.dodivide('R',rhs,set,-1);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose value is
+  * <code>this-rhs</code>, using fixed point arithmetic.
+  * <p>
+  * The same as {@link #subtract(BigDecimal, MathContext)},
+  * where the <code>BigDecimal</code> is <code>rhs</code>,
+  * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+  * <p>
+  * The length of the decimal part (the scale) of the result will be
+  * the maximum of the scales of the two operands.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the subtraction.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this-rhs</code>, using fixed point arithmetic.
+  */
+ 
+ public com.ibm.math.BigDecimal subtract(com.ibm.math.BigDecimal rhs){
+  return this.subtract(rhs,plainMC);
+  }
+
+ /**
+  * Returns a <code>BigDecimal</code> whose value is <code>this-rhs</code>.
+  * <p>
+  * Implements the subtraction (<b><code>-</code></b>) operator
+  * (as defined in the decimal documentation, see {@link BigDecimal
+  * class header}),
+  * and returns the result as a <code>BigDecimal</code> object.
+  *
+  * @param  rhs The <code>BigDecimal</code> for the right hand side of
+  *             the subtraction.
+  * @param  set The <code>MathContext</code> arithmetic settings.
+  * @return     A <code>BigDecimal</code> whose value is
+  *             <code>this-rhs</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public com.ibm.math.BigDecimal subtract(com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set){
+  com.ibm.math.BigDecimal newrhs;
+  if (set.lostDigits) 
+   checkdigits(rhs,set.digits);
+  // [add will recheck .. but would report -rhs]
+  /* carry out the subtraction */
+  // we could fastpath -0, but it is too rare.
+  newrhs=clone(rhs); // safe copy
+  newrhs.ind=(byte)-newrhs.ind; // prepare to subtract
+  return this.add(newrhs,set); // arithmetic
+  }
+
+ /* ---------------------------------------------------------------- */
+ /* Other methods                                                    */
+ /* ---------------------------------------------------------------- */
+ 
+ /**
+  * Converts this <code>BigDecimal</code> to a <code>byte</code>.
+  * If the <code>BigDecimal</code> has a non-zero decimal part or is
+  * out of the possible range for a <code>byte</code> (8-bit signed
+  * integer) result then an <code>ArithmeticException</code> is thrown.
+  *
+  * @return A <code>byte</code> equal in value to <code>this</code>.
+  * @throws ArithmeticException if <code>this</code> has a non-zero
+  *                 decimal part, or will not fit in a <code>byte</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public byte byteValueExact(){
+  int num;
+  num=this.intValueExact(); // will check decimal part too
+  if ((num>127)|(num<(-128))) 
+   throw new java.lang.ArithmeticException("Conversion overflow:"+" "+this.toString());
+  return (byte)num;
+  }
+
+ /**
+  * Compares this <code>BigDecimal</code> with the value of the parameter.
+  * <p>
+  * If the parameter is <code>null</code>, or is not an instance of the
+  * <code>BigDecimal</code> type, an exception is thrown.
+  * Otherwise, the parameter is cast to type <code>BigDecimal</code>
+  * and the result of the {@link #compareTo(BigDecimal)} method,
+  * using the cast parameter, is returned.
+  * <p>
+  * The {@link #compareTo(BigDecimal, MathContext)} method should be
+  * used when a <code>MathContext</code> is needed for the comparison.
+  *
+  * @param  rhs The <code>Object</code> for the right hand side of
+  *             the comparison.
+  * @return     An <code>int</code> whose value is -1, 0, or 1 as
+  *             <code>this</code> is numerically less than, equal to,
+  *             or greater than <code>rhs</code>.
+  * @throws ClassCastException if <code>rhs</code> cannot be cast to
+  *                 a <code>BigDecimal</code> object.
+  * @see    #compareTo(BigDecimal)
+  * @since  JDK1.2
+  */
+ 
+ public int compareTo(java.lang.Object rhsobj){
+  // the cast in the next line will raise ClassCastException if necessary
+  return compareTo((com.ibm.math.BigDecimal)rhsobj,plainMC);
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a <code>double</code>.
+  * If the <code>BigDecimal</code> is out of the possible range for a
+  * <code>double</code> (64-bit signed floating point) result then an
+  * <code>ArithmeticException</code> is thrown.
+  * <p>
+  * The double produced is identical to result of expressing the
+  * <code>BigDecimal</code> as a <code>String</code> and then
+  * converting it using the <code>Double(String)</code> constructor;
+  * this can result in values of <code>Double.NEGATIVE_INFINITY</code>
+  * or <code>Double.POSITIVE_INFINITY</code>.
+  *
+  * @return A <code>double</code> corresponding to <code>this</code>.
+  */
+ 
+ public double doubleValue(){
+  // We go via a String [as does BigDecimal in JDK 1.2]
+  // Next line could possibly raise NumberFormatException
+  return java.lang.Double.valueOf(this.toString()).doubleValue();
+  }
+
+ /**
+  * Compares this <code>BigDecimal</code> with <code>rhs</code> for
+  * equality.
+  * <p>
+  * If the parameter is <code>null</code>, or is not an instance of the
+  * BigDecimal type, or is not exactly equal to the current
+  * <code>BigDecimal</code> object, then <i>false</i> is returned.
+  * Otherwise, <i>true</i> is returned.
+  * <p>
+  * "Exactly equal", here, means that the <code>String</code>
+  * representations of the <code>BigDecimal</code> numbers are
+  * identical (they have the same characters in the same sequence).
+  * <p>
+  * The {@link #compareTo(BigDecimal, MathContext)} method should be
+  * used for more general comparisons.
+  * @param  rhs The <code>Object</code> for the right hand side of
+  *             the comparison.
+  * @return     A <code>boolean</code> whose value <i>true</i> if and
+  *             only if the operands have identical string representations.
+  * @throws ClassCastException if <code>rhs</code> cannot be cast to
+  *                 a <code>BigDecimal</code> object.
+  * @see    #compareTo(Object)
+  * @see    #compareTo(BigDecimal)
+  * @see    #compareTo(BigDecimal, MathContext)
+  */
+ 
+ public boolean equals(java.lang.Object obj){
+  com.ibm.math.BigDecimal rhs;
+  int i=0;
+  char lca[]=null;
+  char rca[]=null;
+  // We are equal iff toString of both are exactly the same
+  if (obj==null) 
+   return false; // not equal
+  if ((!(((obj instanceof com.ibm.math.BigDecimal))))) 
+   return false; // not a decimal
+  rhs=(com.ibm.math.BigDecimal)obj; // cast; we know it will work
+  if (this.ind!=rhs.ind) 
+   return false; // different signs never match
+  if (((this.mant.length==rhs.mant.length)&(this.exp==rhs.exp))&(this.form==rhs.form)) 
+   
+   { // mantissas say all
+    // here with equal-length byte arrays to compare
+    {int $8=this.mant.length;i=0;i:for(;$8>0;$8--,i++){
+     if (this.mant[i]!=rhs.mant[i]) 
+      return false;
+     }
+    }/*i*/
+   }
+  else 
+   { // need proper layout
+    lca=this.layout(); // layout to character array
+    rca=rhs.layout();
+    if (lca.length!=rca.length) 
+     return false; // mismatch
+    // here with equal-length character arrays to compare
+    {int $9=lca.length;i=0;i:for(;$9>0;$9--,i++){
+     if (lca[i]!=rca[i]) 
+      return false;
+     }
+    }/*i*/
+   }
+  return true; // arrays have identical content
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a <code>float</code>.
+  * If the <code>BigDecimal</code> is out of the possible range for a
+  * <code>float</code> (32-bit signed floating point) result then an
+  * <code>ArithmeticException</code> is thrown.
+  * <p>
+  * The float produced is identical to result of expressing the
+  * <code>BigDecimal</code> as a <code>String</code> and then
+  * converting it using the <code>Float(String)</code> constructor;
+  * this can result in values of <code>Float.NEGATIVE_INFINITY</code>
+  * or <code>Float.POSITIVE_INFINITY</code>.
+  *
+  * @return A <code>float</code> corresponding to <code>this</code>.
+  */
+ 
+ public float floatValue(){
+  return java.lang.Float.valueOf(this.toString()).floatValue();
+  }
+
+ /**
+  * Returns the <code>String</code> representation of this
+  * <code>BigDecimal</code>, modified by layout parameters.
+  * <p>
+  * <i>This method is provided as a primitive for use by more
+  * sophisticated classes, such as <code>DecimalFormat</code>, that
+  * can apply locale-sensitive editing of the result.  The level of
+  * formatting that it provides is a necessary part of the BigDecimal
+  * class as it is sensitive to and must follow the calculation and
+  * rounding rules for BigDecimal arithmetic.
+  * However, if the function is provided elsewhere, it may be removed
+  * from this class. </i>
+  * <p>
+  * The parameters, for both forms of the <code>format</code> method
+  * are all of type <code>int</code>.
+  * A value of -1 for any parameter indicates that the default action
+  * or value for that parameter should be used.
+  * <p>
+  * The parameters, <code>before</code> and <code>after</code>,
+  * specify the number of characters to be used for the integer part
+  * and decimal part of the result respectively.  Exponential notation
+  * is not used. If either parameter is -1 (which indicates the default
+  * action), the number of characters used will be exactly as many as
+  * are needed for that part.
+  * <p>
+  * <code>before</code> must be a positive number; if it is larger than
+  * is needed to contain the integer part, that part is padded on the
+  * left with blanks to the requested length. If <code>before</code> is
+  * not large enough to contain the integer part of the number
+  * (including the sign, for negative numbers) an exception is thrown.
+  * <p>
+  * <code>after</code> must be a non-negative number; if it is not the
+  * same size as the decimal part of the number, the number will be
+  * rounded (or extended with zeros) to fit.  Specifying 0 for
+  * <code>after</code> will cause the number to be rounded to an
+  * integer (that is, it will have no decimal part or decimal point).
+  * The rounding method will be the default,
+  * <code>MathContext.ROUND_HALF_UP</code>.
+  * <p>
+  * Other rounding methods, and the use of exponential notation, can
+  * be selected by using {@link #format(int,int,int,int,int,int)}.
+  * Using the two-parameter form of the method has exactly the same
+  * effect as using the six-parameter form with the final four
+  * parameters all being -1.
+  *
+  * @param  before The <code>int</code> specifying the number of places
+  *                before the decimal point.  Use -1 for 'as many as
+  *                are needed'.
+  * @param  after  The <code>int</code> specifying the number of places
+  *                after the decimal point.  Use -1 for 'as many as are
+  *                needed'.
+  * @return        A <code>String</code> representing this
+  *                <code>BigDecimal</code>, laid out according to the
+  *                specified parameters
+  * @throws ArithmeticException if the number cannot be laid out as
+  *                requested.
+  * @throws IllegalArgumentException if a parameter is out of range.
+  * @see    #toString
+  * @see    #toCharArray
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public java.lang.String format(int before,int after){
+  return format(before,after,-1,-1,com.ibm.math.MathContext.SCIENTIFIC,ROUND_HALF_UP);
+  }
+
+ /**
+  * Returns the <code>String</code> representation of this
+  * <code>BigDecimal</code>, modified by layout parameters and allowing
+  * exponential notation.
+  * <p>
+  * <i>This method is provided as a primitive for use by more
+  * sophisticated classes, such as <code>DecimalFormat</code>, that
+  * can apply locale-sensitive editing of the result.  The level of
+  * formatting that it provides is a necessary part of the BigDecimal
+  * class as it is sensitive to and must follow the calculation and
+  * rounding rules for BigDecimal arithmetic.
+  * However, if the function is provided elsewhere, it may be removed
+  * from this class. </i>
+  * <p>
+  * The parameters are all of type <code>int</code>.
+  * A value of -1 for any parameter indicates that the default action
+  * or value for that parameter should be used.
+  * <p>
+  * The first two parameters (<code>before</code> and
+  * <code>after</code>) specify the number of characters to be used for
+  * the integer part and decimal part of the result respectively, as
+  * defined for {@link #format(int,int)}.
+  * If either of these is -1 (which indicates the default action), the
+  * number of characters used will be exactly as many as are needed for
+  * that part.
+  * <p>
+  * The remaining parameters control the use of exponential notation
+  * and rounding.  Three (<code>explaces</code>, <code>exdigits</code>,
+  * and <code>exform</code>) control the exponent part of the result.
+  * As before, the default action for any of these parameters may be
+  * selected by using the value -1.
+  * <p>
+  * <code>explaces</code> must be a positive number; it sets the number
+  * of places (digits after the sign of the exponent) to be used for
+  * any exponent part, the default (when <code>explaces</code> is -1)
+  * being to use as many as are needed.
+  * If <code>explaces</code> is not -1, space is always reserved for
+  * an exponent; if one is not needed (for example, if the exponent
+  * will be 0) then <code>explaces</code>+2 blanks are appended to the
+  * result.
+  * <!-- (This preserves vertical alignment of similarly formatted
+  *       numbers in a monospace font.) -->
+  * If <code>explaces</code> is not -1 and is not large enough to
+  * contain the exponent, an exception is thrown.
+  * <p>
+  * <code>exdigits</code> sets the trigger point for use of exponential
+  * notation. If, before any rounding, the number of places needed
+  * before the decimal point exceeds <code>exdigits</code>, or if the
+  * absolute value of the result is less than <code>0.000001</code>,
+  * then exponential form will be used, provided that
+  * <code>exdigits</code> was specified.
+  * When <code>exdigits</code> is -1, exponential notation will never
+  * be used. If 0 is specified for <code>exdigits</code>, exponential
+  * notation is always used unless the exponent would be 0.
+  * <p>
+  * <code>exform</code> sets the form for exponential notation (if
+  * needed).
+  * It  may be either {@link MathContext#SCIENTIFIC} or
+  * {@link MathContext#ENGINEERING}.
+  * If the latter, engineering, form is requested, up to three digits
+  * (plus sign, if negative) may be needed for the integer part of the
+  * result (<code>before</code>).  Otherwise, only one digit (plus
+  * sign, if negative) is needed.
+  * <p>
+  * Finally, the sixth argument, <code>exround</code>, selects the
+  * rounding algorithm to be used, and must be one of the values
+  * indicated by a public constant in the {@link MathContext} class
+  * whose name starts with <code>ROUND_</code>.
+  * The default (<code>ROUND_HALF_UP</code>) may also be selected by
+  * using the value -1, as before.
+  * <p>
+  * The special value <code>MathContext.ROUND_UNNECESSARY</code> may be
+  * used to detect whether non-zero digits are discarded -- if
+  * <code>exround</code> has this value than if non-zero digits would
+  * be discarded (rounded) during formatting then an
+  * <code>ArithmeticException</code> is thrown.
+  *
+  * @param  before   The <code>int</code> specifying the number of places
+  *                  before the decimal point.
+  *                  Use -1 for 'as many as are needed'.
+  * @param  after    The <code>int</code> specifying the number of places
+  *                  after the decimal point.
+  *                  Use -1 for 'as many as are needed'.
+  * @param  explaces The <code>int</code> specifying the number of places
+  *                  to be used for any exponent.
+  *                  Use -1 for 'as many as are needed'.
+  * @param  exdigits The <code>int</code> specifying the trigger
+  *                  (digits before the decimal point) which if
+  *                  exceeded causes exponential notation to be used.
+  *                  Use 0 to force exponential notation.
+  *                  Use -1 to force plain notation (no exponential
+  *                  notation).
+  * @param  exform   The <code>int</code> specifying the form of
+  *                  exponential notation to be used
+  *                  ({@link MathContext#SCIENTIFIC} or
+  *                  {@link MathContext#ENGINEERING}).
+  * @param  exround  The <code>int</code> specifying the rounding mode
+  *                  to use.
+  *                  Use -1 for the default, {@link MathContext#ROUND_HALF_UP}.
+  * @return          A <code>String</code> representing this
+  *                  <code>BigDecimal</code>, laid out according to the
+  *                  specified parameters
+  * @throws ArithmeticException if the number cannot be laid out as
+  *                  requested.
+  * @throws IllegalArgumentException if a parameter is out of range.
+  * @see    #toString
+  * @see    #toCharArray
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public java.lang.String format(int before,int after,int explaces,int exdigits,int exformint,int exround){
+  com.ibm.math.BigDecimal num;
+  int mag=0;
+  int thisafter=0;
+  int lead=0;
+  byte newmant[]=null;
+  int chop=0;
+  int need=0;
+  int oldexp=0;
+  char a[];
+  int p=0;
+  char newa[]=null;
+  int i=0;
+  int places=0;
+  
+  
+  /* Check arguments */
+  if ((before<(-1))|(before==0)) 
+   badarg("format",1,java.lang.String.valueOf(before));
+  if (after<(-1)) 
+   badarg("format",2,java.lang.String.valueOf(after));
+  if ((explaces<(-1))|(explaces==0)) 
+   badarg("format",3,java.lang.String.valueOf(explaces));
+  if (exdigits<(-1)) 
+   badarg("format",4,java.lang.String.valueOf(explaces));
+  {/*select*/
+  if (exformint==com.ibm.math.MathContext.SCIENTIFIC)
+   ;
+  else if (exformint==com.ibm.math.MathContext.ENGINEERING)
+   ;
+  else if (exformint==(-1))
+   exformint=com.ibm.math.MathContext.SCIENTIFIC;
+   // note PLAIN isn't allowed
+  else{
+   badarg("format",5,java.lang.String.valueOf(exformint));
+  }
+  }
+  // checking the rounding mode is done by trying to construct a
+  // MathContext object with that mode; it will fail if bad
+  if (exround!=ROUND_HALF_UP) 
+   {try{ // if non-default...
+    if (exround==(-1)) 
+     exround=ROUND_HALF_UP;
+    else 
+     new com.ibm.math.MathContext(9,com.ibm.math.MathContext.SCIENTIFIC,false,exround);
+   }
+   catch (java.lang.IllegalArgumentException $10){
+    badarg("format",6,java.lang.String.valueOf(exround));
+   }}
+  
+  num=clone(this); // make private copy
+  
+  /* Here:
+     num       is BigDecimal to format
+     before    is places before point [>0]
+     after     is places after point  [>=0]
+     explaces  is exponent places     [>0]
+     exdigits  is exponent digits     [>=0]
+     exformint is exponent form       [one of two]
+     exround   is rounding mode       [one of eight]
+     'before' through 'exdigits' are -1 if not specified
+  */
+  
+  /* determine form */
+  {setform:do{/*select*/
+  if (exdigits==(-1))
+   num.form=(byte)com.ibm.math.MathContext.PLAIN;
+  else if (num.ind==iszero)
+   num.form=(byte)com.ibm.math.MathContext.PLAIN;
+  else{
+   // determine whether triggers
+   mag=num.exp+num.mant.length;
+   if (mag>exdigits) 
+    num.form=(byte)exformint;
+   else 
+    if (mag<(-5)) 
+     num.form=(byte)exformint;
+    else 
+     num.form=(byte)com.ibm.math.MathContext.PLAIN;
+  }
+  }while(false);}/*setform*/
+  
+  /* If 'after' was specified then we may need to adjust the
+     mantissa.  This is a little tricky, as we must conform to the
+     rules of exponential layout if necessary (e.g., we cannot end up
+     with 10.0 if scientific). */
+  if (after>=0) 
+   {setafter:for(;;){
+    // calculate the current after-length
+    {/*select*/
+    if (num.form==com.ibm.math.MathContext.PLAIN)
+     thisafter=(int)-num.exp; // has decimal part
+    else if (num.form==com.ibm.math.MathContext.SCIENTIFIC)
+     thisafter=num.mant.length-1;
+    else{ // engineering
+     lead=(((num.exp+num.mant.length)-1))%3; // exponent to use
+     if (lead<0) 
+      lead=3+lead; // negative exponent case
+     lead++; // number of leading digits
+     if (lead>=num.mant.length) 
+      thisafter=0;
+     else 
+      thisafter=num.mant.length-lead;
+    }
+    }
+    if (thisafter==after) 
+     break setafter; // we're in luck
+    if (thisafter<after) 
+     { // need added trailing zeros
+      // [thisafter can be negative]
+      newmant=extend(num.mant,(num.mant.length+after)-thisafter);
+      num.mant=newmant;
+      num.exp=num.exp-((after-thisafter)); // adjust exponent
+      if (num.exp<MinExp) 
+       throw new java.lang.ArithmeticException("Exponent Overflow:"+" "+num.exp);
+      break setafter;
+     }
+    // We have too many digits after the decimal point; this could
+    // cause a carry, which could change the mantissa...
+    // Watch out for implied leading zeros in PLAIN case
+    chop=thisafter-after; // digits to lop [is >0]
+    if (chop>num.mant.length) 
+     { // all digits go, no chance of carry
+      // carry on with zero
+      num.mant=ZERO.mant;
+      num.ind=iszero;
+      num.exp=0;
+      continue setafter; // recheck: we may need trailing zeros
+     }
+    // we have a digit to inspect from existing mantissa
+    // round the number as required
+    need=num.mant.length-chop; // digits to end up with [may be 0]
+    oldexp=num.exp; // save old exponent
+    num.round(need,exround);
+    // if the exponent grew by more than the digits we chopped, then
+    // we must have had a carry, so will need to recheck the layout
+    if ((num.exp-oldexp)==chop) 
+     break setafter; // number did not have carry
+    // mantissa got extended .. so go around and check again
+    }
+   }/*setafter*/
+  
+  a=num.layout(); // lay out, with exponent if required, etc.
+  
+  /* Here we have laid-out number in 'a' */
+  // now apply 'before' and 'explaces' as needed
+  if (before>0) 
+   {
+    // look for '.' or 'E'
+    {int $11=a.length;p=0;p:for(;$11>0;$11--,p++){
+     if (a[p]=='.') 
+      break p;
+     if (a[p]=='E') 
+      break p;
+     }
+    }/*p*/
+    // p is now offset of '.', 'E', or character after end of array
+    // that is, the current length of before part
+    if (p>before) 
+     badarg("format",1,java.lang.String.valueOf(before)); // won't fit
+    if (p<before) 
+     { // need leading blanks
+      newa=new char[(a.length+before)-p];
+      {int $12=before-p;i=0;i:for(;$12>0;$12--,i++){
+       newa[i]=' ';
+       }
+      }/*i*/
+      java.lang.System.arraycopy((java.lang.Object)a,0,(java.lang.Object)newa,i,a.length);
+      a=newa;
+     }
+   // [if p=before then it's just the right length]
+   }
+  
+  if (explaces>0) 
+   {
+    // look for 'E' [cannot be at offset 0]
+    {int $13=a.length-1;p=a.length-1;p:for(;$13>0;$13--,p--){
+     if (a[p]=='E') 
+      break p;
+     }
+    }/*p*/
+    // p is now offset of 'E', or 0
+    if (p==0) 
+     { // no E part; add trailing blanks
+      newa=new char[(a.length+explaces)+2];
+      java.lang.System.arraycopy((java.lang.Object)a,0,(java.lang.Object)newa,0,a.length);
+      {int $14=explaces+2;i=a.length;i:for(;$14>0;$14--,i++){
+       newa[i]=' ';
+       }
+      }/*i*/
+      a=newa;
+     }
+    else 
+     {/* found E */ // may need to insert zeros
+      places=(a.length-p)-2; // number so far
+      if (places>explaces) 
+       badarg("format",3,java.lang.String.valueOf(explaces));
+      if (places<explaces) 
+       { // need to insert zeros
+        newa=new char[(a.length+explaces)-places];
+        java.lang.System.arraycopy((java.lang.Object)a,0,(java.lang.Object)newa,0,p+2); // through E and sign
+        {int $15=explaces-places;i=p+2;i:for(;$15>0;$15--,i++){
+         newa[i]='0';
+         }
+        }/*i*/
+        java.lang.System.arraycopy((java.lang.Object)a,p+2,(java.lang.Object)newa,i,places); // remainder of exponent
+        a=newa;
+       }
+     // [if places=explaces then it's just the right length]
+     }
+   }
+  return new java.lang.String(a);
+  }
+
+ /**
+  * Returns the hashcode for this <code>BigDecimal</code>.
+  * This hashcode is suitable for use by the
+  * <code>java.util.Hashtable</code> class.
+  * <p>
+  * Note that two <code>BigDecimal</code> objects are only guaranteed
+  * to produce the same hashcode if they are exactly equal (that is,
+  * the <code>String</code> representations of the
+  * <code>BigDecimal</code> numbers are identical -- they have the same
+  * characters in the same sequence).
+  *
+  * @return An <code>int</code> that is the hashcode for <code>this</code>.
+  */
+ 
+ public int hashCode(){
+  // Maybe calculate ourselves, later.  If so, note that there can be
+  // more than one internal representation for a given toString() result.
+  return this.toString().hashCode();
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to an <code>int</code>.
+  * If the <code>BigDecimal</code> has a non-zero decimal part it is
+  * discarded. If the <code>BigDecimal</code> is out of the possible
+  * range for an <code>int</code> (32-bit signed integer) result then
+  * only the low-order 32 bits are used. (That is, the number may be
+  * <i>decapitated</i>.)  To avoid unexpected errors when these
+  * conditions occur, use the {@link #intValueExact} method.
+  *
+  * @return An <code>int</code> converted from <code>this</code>,
+  *         truncated and decapitated if necessary.
+  */
+ 
+ public int intValue(){
+  return toBigInteger().intValue();
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to an <code>int</code>.
+  * If the <code>BigDecimal</code> has a non-zero decimal part or is
+  * out of the possible range for an <code>int</code> (32-bit signed
+  * integer) result then an <code>ArithmeticException</code> is thrown.
+  *
+  * @return An <code>int</code> equal in value to <code>this</code>.
+  * @throws ArithmeticException if <code>this</code> has a non-zero
+  *                 decimal part, or will not fit in an
+  *                 <code>int</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public int intValueExact(){
+  int lodigit;
+  int useexp=0;
+  int result;
+  int i=0;
+  int topdig=0;
+  // This does not use longValueExact() as the latter can be much
+  // slower.
+  // intcheck (from pow) relies on this to check decimal part
+  if (ind==iszero) 
+   return 0; // easy, and quite common
+  /* test and drop any trailing decimal part */
+  lodigit=mant.length-1;
+  if (exp<0) 
+   {
+    lodigit=lodigit+exp; // reduces by -(-exp)
+    /* all decimal places must be 0 */
+    if ((!(allzero(mant,lodigit+1)))) 
+     throw new java.lang.ArithmeticException("Decimal part non-zero:"+" "+this.toString());
+    if (lodigit<0) 
+     return 0; // -1<this<1
+    useexp=0;
+   }
+  else 
+   {/* >=0 */
+    if ((exp+lodigit)>9)  // early exit
+     throw new java.lang.ArithmeticException("Conversion overflow:"+" "+this.toString());
+    useexp=exp;
+   }
+  /* convert the mantissa to binary, inline for speed */
+  result=0;
+  {int $16=lodigit+useexp;i=0;i:for(;i<=$16;i++){
+   result=result*10;
+   if (i<=lodigit) 
+    result=result+mant[i];
+   }
+  }/*i*/
+  
+  /* Now, if the risky length, check for overflow */
+  if ((lodigit+useexp)==9) 
+   {
+    // note we cannot just test for -ve result, as overflow can move a
+    // zero into the top bit [consider 5555555555]
+    topdig=result/1000000000; // get top digit, preserving sign
+    if (topdig!=mant[0]) 
+     { // digit must match and be positive
+      // except in the special case ...
+      if (result==java.lang.Integer.MIN_VALUE)  // looks like the special
+       if (ind==isneg)  // really was negative
+        if (mant[0]==2) 
+         return result; // really had top digit 2
+      throw new java.lang.ArithmeticException("Conversion overflow:"+" "+this.toString());
+     }
+   }
+  
+  /* Looks good */
+  if (ind==ispos) 
+   return result;
+  return (int)-result;
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a <code>long</code>.
+  * If the <code>BigDecimal</code> has a non-zero decimal part it is
+  * discarded. If the <code>BigDecimal</code> is out of the possible
+  * range for a <code>long</code> (64-bit signed integer) result then
+  * only the low-order 64 bits are used. (That is, the number may be
+  * <i>decapitated</i>.)  To avoid unexpected errors when these
+  * conditions occur, use the {@link #longValueExact} method.
+  *
+  * @return A <code>long</code> converted from <code>this</code>,
+  *         truncated and decapitated if necessary.
+  */
+ 
+ public long longValue(){
+  return toBigInteger().longValue();
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a <code>long</code>.
+  * If the <code>BigDecimal</code> has a non-zero decimal part or is
+  * out of the possible range for a <code>long</code> (64-bit signed
+  * integer) result then an <code>ArithmeticException</code> is thrown.
+  *
+  * @return A <code>long</code> equal in value to <code>this</code>.
+  * @throws ArithmeticException if <code>this</code> has a non-zero
+  *                 decimal part, or will not fit in a
+  *                 <code>long</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public long longValueExact(){
+  int lodigit;
+  int cstart=0;
+  int useexp=0;
+  long result;
+  int i=0;
+  long topdig=0;
+  // Identical to intValueExact except for result=long, and exp>=20 test
+  if (ind==0) 
+   return 0; // easy, and quite common
+  lodigit=mant.length-1; // last included digit
+  if (exp<0) 
+   {
+    lodigit=lodigit+exp; // -(-exp)
+    /* all decimal places must be 0 */
+    if (lodigit<0) 
+     cstart=0;
+    else 
+     cstart=lodigit+1;
+    if ((!(allzero(mant,cstart)))) 
+     throw new java.lang.ArithmeticException("Decimal part non-zero:"+" "+this.toString());
+    if (lodigit<0) 
+     return 0; // -1<this<1
+    useexp=0;
+   }
+  else 
+   {/* >=0 */
+    if ((exp+mant.length)>18)  // early exit
+     throw new java.lang.ArithmeticException("Conversion overflow:"+" "+this.toString());
+    useexp=exp;
+   }
+  
+  /* convert the mantissa to binary, inline for speed */
+  // note that we could safely use the 'test for wrap to negative'
+  // algorithm here, but instead we parallel the intValueExact
+  // algorithm for ease of checking and maintenance.
+  result=(long)0;
+  {int $17=lodigit+useexp;i=0;i:for(;i<=$17;i++){
+   result=result*10;
+   if (i<=lodigit) 
+    result=result+mant[i];
+   }
+  }/*i*/
+  
+  /* Now, if the risky length, check for overflow */
+  if ((lodigit+useexp)==18) 
+   {
+    topdig=result/1000000000000000000L; // get top digit, preserving sign
+    if (topdig!=mant[0]) 
+     { // digit must match and be positive
+      // except in the special case ...
+      if (result==java.lang.Long.MIN_VALUE)  // looks like the special
+       if (ind==isneg)  // really was negative
+        if (mant[0]==9) 
+         return result; // really had top digit 9
+      throw new java.lang.ArithmeticException("Conversion overflow:"+" "+this.toString());
+     }
+   }
+  
+  /* Looks good */
+  if (ind==ispos) 
+   return result;
+  return (long)-result;
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose decimal point has
+  * been moved to the left by a specified number of positions.
+  * The parameter, <code>n</code>, specifies the number of positions to
+  * move the decimal point.
+  * That is, if <code>n</code> is 0 or positive, the number returned is
+  * given by:
+  * <p><code>
+  * this.multiply(TEN.pow(new BigDecimal(-n)))
+  * </code>
+  * <p>
+  * <code>n</code> may be negative, in which case the method returns
+  * the same result as <code>movePointRight(-n)</code>.
+  *
+  * @param  n The <code>int</code> specifying the number of places to
+  *           move the decimal point leftwards.
+  * @return   A <code>BigDecimal</code> derived from
+  *           <code>this</code>, with the decimal point moved
+  *           <code>n</code> places to the left.
+  */
+ 
+ public com.ibm.math.BigDecimal movePointLeft(int n){
+  com.ibm.math.BigDecimal res;
+  // very little point in optimizing for shift of 0
+  res=clone(this);
+  res.exp=res.exp-n;
+  return res.finish(plainMC,false); // finish sets form and checks exponent
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> whose decimal point has
+  * been moved to the right by a specified number of positions.
+  * The parameter, <code>n</code>, specifies the number of positions to
+  * move the decimal point.
+  * That is, if <code>n</code> is 0 or positive, the number returned is
+  * given by:
+  * <p><code>
+  * this.multiply(TEN.pow(new BigDecimal(n)))
+  * </code>
+  * <p>
+  * <code>n</code> may be negative, in which case the method returns
+  * the same result as <code>movePointLeft(-n)</code>.
+  *
+  * @param  n The <code>int</code> specifying the number of places to
+  *           move the decimal point rightwards.
+  * @return   A <code>BigDecimal</code> derived from
+  *           <code>this</code>, with the decimal point moved
+  *           <code>n</code> places to the right.
+  */
+ 
+ public com.ibm.math.BigDecimal movePointRight(int n){
+  com.ibm.math.BigDecimal res;
+  res=clone(this);
+  res.exp=res.exp+n;
+  return res.finish(plainMC,false);
+  }
+
+ /**
+  * Returns the scale of this <code>BigDecimal</code>.
+  * Returns a non-negative <code>int</code> which is the scale of the
+  * number. The scale is the number of digits in the decimal part of
+  * the number if the number were formatted without exponential
+  * notation.
+  *
+  * @return An <code>int</code> whose value is the scale of this
+  *         <code>BigDecimal</code>.
+  */
+ 
+ public int scale(){
+  if (exp>=0) 
+   return 0; // scale can never be negative
+  return (int)-exp;
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> with a given scale.
+  * <p>
+  * If the given scale (which must be zero or positive) is the same as
+  * or greater than the length of the decimal part (the scale) of this
+  * <code>BigDecimal</code> then trailing zeros will be added to the
+  * decimal part as necessary.
+  * <p>
+  * If the given scale is less than the length of the decimal part (the
+  * scale) of this <code>BigDecimal</code> then trailing digits
+  * will be removed, and in this case an
+  * <code>ArithmeticException</code> is thrown if any discarded digits
+  * are non-zero.
+  * <p>
+  * The same as {@link #setScale(int, int)}, where the first parameter
+  * is the scale, and the second is
+  * <code>MathContext.ROUND_UNNECESSARY</code>.
+  *
+  * @param  scale The <code>int</code> specifying the scale of the
+  *               resulting <code>BigDecimal</code>.
+  * @return       A plain <code>BigDecimal</code> with the given scale.
+  * @throws ArithmeticException if <code>scale</code> is negative.
+  * @throws ArithmeticException if reducing scale would discard
+  *               non-zero digits.
+  */
+ 
+ public com.ibm.math.BigDecimal setScale(int scale){
+  return setScale(scale,ROUND_UNNECESSARY);
+  }
+
+ /**
+  * Returns a plain <code>BigDecimal</code> with a given scale.
+  * <p>
+  * If the given scale (which must be zero or positive) is the same as
+  * or greater than the length of the decimal part (the scale) of this
+  * <code>BigDecimal</code> then trailing zeros will be added to the
+  * decimal part as necessary.
+  * <p>
+  * If the given scale is less than the length of the decimal part (the
+  * scale) of this <code>BigDecimal</code> then trailing digits
+  * will be removed, and the rounding mode given by the second
+  * parameter is used to determine if the remaining digits are
+  * affected by a carry.
+  * In this case, an <code>IllegalArgumentException</code> is thrown if
+  * <code>round</code> is not a valid rounding mode.
+  * <p>
+  * If <code>round</code> is <code>MathContext.ROUND_UNNECESSARY</code>,
+  * an <code>ArithmeticException</code> is thrown if any discarded
+  * digits are non-zero.
+  *
+  * @param  scale The <code>int</code> specifying the scale of the
+  *               resulting <code>BigDecimal</code>.
+  * @param  round The <code>int</code> rounding mode to be used for
+  *               the division (see the {@link MathContext} class).
+  * @return       A plain <code>BigDecimal</code> with the given scale.
+  * @throws IllegalArgumentException if <code>round</code> is not a
+  *               valid rounding mode.
+  * @throws ArithmeticException if <code>scale</code> is negative.
+  * @throws ArithmeticException if <code>round</code> is
+  *               <code>MathContext.ROUND_UNNECESSARY</code>, and
+  *               reducing scale would discard non-zero digits.
+  */
+ 
+ public com.ibm.math.BigDecimal setScale(int scale,int round){
+  int ourscale;
+  com.ibm.math.BigDecimal res;
+  int padding=0;
+  int newlen=0;
+  // at present this naughtily only checks the round value if it is
+  // needed (used), for speed
+  ourscale=this.scale();
+  if (ourscale==scale)  // already correct scale
+   if (this.form==com.ibm.math.MathContext.PLAIN)  // .. and form
+    return this;
+  res=clone(this); // need copy
+  if (ourscale<=scale) 
+   { // simply zero-padding/changing form
+    // if ourscale is 0 we may have lots of 0s to add
+    if (ourscale==0) 
+     padding=res.exp+scale;
+    else 
+     padding=scale-ourscale;
+    res.mant=extend(res.mant,res.mant.length+padding);
+    res.exp=(int)-scale; // as requested
+   }
+  else 
+   {/* ourscale>scale: shortening, probably */
+    if (scale<0) 
+     throw new java.lang.ArithmeticException("Negative scale:"+" "+scale);
+    // [round() will raise exception if invalid round]
+    newlen=res.mant.length-((ourscale-scale)); // [<=0 is OK]
+    res=res.round(newlen,round); // round to required length
+    // This could have shifted left if round (say) 0.9->1[.0]
+    // Repair if so by adding a zero and reducing exponent
+    if (res.exp!=((int)-scale)) 
+     {
+      res.mant=extend(res.mant,res.mant.length+1);
+      res.exp=res.exp-1;
+     }
+   }
+  res.form=(byte)com.ibm.math.MathContext.PLAIN; // by definition
+  return res;
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a <code>short</code>.
+  * If the <code>BigDecimal</code> has a non-zero decimal part or is
+  * out of the possible range for a <code>short</code> (16-bit signed
+  * integer) result then an <code>ArithmeticException</code> is thrown.
+  *
+  * @return A <code>short</code> equal in value to <code>this</code>.
+  * @throws ArithmeticException if <code>this</code> has a non-zero
+  *                 decimal part, or will not fit in a
+  *                 <code>short</code>.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public short shortValueExact(){
+  int num;
+  num=this.intValueExact(); // will check decimal part too
+  if ((num>32767)|(num<(-32768))) 
+   throw new java.lang.ArithmeticException("Conversion overflow:"+" "+this.toString());
+  return (short)num;
+  }
+
+ /**
+  * Returns the sign of this <code>BigDecimal</code>, as an
+  * <code>int</code>.
+  * This returns the <i>signum</i> function value that represents the
+  * sign of this <code>BigDecimal</code>.
+  * That is, -1 if the <code>BigDecimal</code> is negative, 0 if it is
+  * numerically equal to zero, or 1 if it is positive.
+  *
+  * @return An <code>int</code> which is -1 if the
+  *         <code>BigDecimal</code> is negative, 0 if it is
+  *         numerically equal to zero, or 1 if it is positive.
+  */
+ 
+ public int signum(){
+  return (int)this.ind; // [note this assumes values for ind.]
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a
+  * <code>java.math.BigDecimal</code>.
+  * <p>
+  * This is an exact conversion; the result is the same as if the
+  * <code>BigDecimal</code> were formatted as a plain number without
+  * any rounding or exponent and then the
+  * <code>java.math.BigDecimal(java.lang.String)</code> constructor
+  * were used to construct the result.
+  * <p>
+  * <i>(Note: this method is provided only in the
+  * <code>com.ibm.math</code> version of the BigDecimal class.
+  * It would not be present in a <code>java.math</code> version.)</i>
+  *
+  * @return The <code>java.math.BigDecimal</code> equal in value
+  *         to this <code>BigDecimal</code>.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public java.math.BigDecimal toBigDecimal(){
+  return new java.math.BigDecimal(this.unscaledValue(),this.scale());
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a
+  * <code>java.math.BigInteger</code>.
+  * <p>
+  * Any decimal part is truncated (discarded).
+  * If an exception is desired should the decimal part be non-zero,
+  * use {@link #toBigIntegerExact()}.
+  *
+  * @return The <code>java.math.BigInteger</code> equal in value
+  *         to the integer part of this <code>BigDecimal</code>.
+  */
+ 
+ public java.math.BigInteger toBigInteger(){
+  com.ibm.math.BigDecimal res=null;
+  int newlen=0;
+  byte newmant[]=null;
+  {/*select*/
+  if ((exp>=0)&(form==com.ibm.math.MathContext.PLAIN))
+   res=this; // can layout simply
+  else if (exp>=0)
+   {
+    res=clone(this); // safe copy
+    res.form=(byte)com.ibm.math.MathContext.PLAIN; // .. and request PLAIN
+   }
+  else{
+   { // exp<0; scale to be truncated
+    // we could use divideInteger, but we may as well be quicker
+    if (((int)-this.exp)>=this.mant.length) 
+     res=ZERO; // all blows away
+    else 
+     {
+      res=clone(this); // safe copy
+      newlen=res.mant.length+res.exp;
+      newmant=new byte[newlen]; // [shorter]
+      java.lang.System.arraycopy((java.lang.Object)res.mant,0,(java.lang.Object)newmant,0,newlen);
+      res.mant=newmant;
+      res.form=(byte)com.ibm.math.MathContext.PLAIN;
+      res.exp=0;
+     }
+   }
+  }
+  }
+  return new BigInteger(new java.lang.String(res.layout()));
+  }
+
+ /**
+  * Converts this <code>BigDecimal</code> to a
+  * <code>java.math.BigInteger</code>.
+  * <p>
+  * An exception is thrown if the decimal part (if any) is non-zero.
+  *
+  * @return The <code>java.math.BigInteger</code> equal in value
+  *         to the integer part of this <code>BigDecimal</code>.
+  * @throws ArithmeticException if <code>this</code> has a non-zero
+  *         decimal part.
+  * @since  IBM JDK 1.1.8
+  */
+ 
+ public java.math.BigInteger toBigIntegerExact(){
+  /* test any trailing decimal part */
+  if (exp<0) 
+   { // possible decimal part
+    /* all decimal places must be 0; note exp<0 */
+    if ((!(allzero(mant,mant.length+exp)))) 
+     throw new java.lang.ArithmeticException("Decimal part non-zero:"+" "+this.toString());
+   }
+  return toBigInteger();
+  }
+
+ /**
+  * Returns the <code>BigDecimal</code> as a character array.
+  * The result of this method is the same as using the
+  * sequence <code>toString().toCharArray()</code>, but avoids creating
+  * the intermediate <code>String</code> and <code>char[]</code>
+  * objects.
+  *
+  * @return The <code>char[]</code> array corresponding to this
+  *         <code>BigDecimal</code>.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public char[] toCharArray(){
+  return layout();
+  }
+
+ /**
+  * Returns the <code>BigDecimal</code> as a <code>String</code>.
+  * This returns a <code>String</code> that exactly represents this
+  * <code>BigDecimal</code>, as defined in the decimal documentation
+  * (see {@link BigDecimal class header}).
+  * <p>
+  * By definition, using the {@link #BigDecimal(String)} constructor
+  * on the result <code>String</code> will create a
+  * <code>BigDecimal</code> that is exactly equal to the original
+  * <code>BigDecimal</code>.
+  *
+  * @return The <code>String</code> exactly corresponding to this
+  *         <code>BigDecimal</code>.
+  * @see    #format(int, int)
+  * @see    #format(int, int, int, int, int, int)
+  * @see    #toCharArray()
+  */
+ 
+ public java.lang.String toString(){
+  return new java.lang.String(layout());
+  }
+
+ /**
+  * Returns the number as a <code>BigInteger</code> after removing the
+  * scale.
+  * That is, the number is expressed as a plain number, any decimal
+  * point is then removed (retaining the digits of any decimal part),
+  * and the result is then converted to a <code>BigInteger</code>.
+  *
+  * @return The <code>java.math.BigInteger</code> equal in value to
+  *         this <code>BigDecimal</code> multiplied by ten to the
+  *         power of <code>this.scale()</code>.
+  * @since JDK1.2
+  */
+ 
+ public java.math.BigInteger unscaledValue(){
+  com.ibm.math.BigDecimal res=null;
+  if (exp>=0) 
+   res=this;
+  else 
+   {
+    res=clone(this); // safe copy
+    res.exp=0; // drop scale
+   }
+  return res.toBigInteger();
+  }
+
+ /**
+  * Translates a <code>double</code> to a <code>BigDecimal</code>.
+  * <p>
+  * Returns a <code>BigDecimal</code> which is the decimal
+  * representation of the 64-bit signed binary floating point
+  * parameter. If the parameter is infinite, or is not a number (NaN),
+  * a <code>NumberFormatException</code> is thrown.
+  * <p>
+  * The number is constructed as though <code>num</code> had been
+  * converted to a <code>String</code> using the
+  * <code>Double.toString()</code> method and the
+  * {@link #BigDecimal(java.lang.String)} constructor had then been used.
+  * This is typically not an exact conversion.
+  *
+  * @param  dub The <code>double</code> to be translated.
+  * @return     The <code>BigDecimal</code> equal in value to
+  *             <code>dub</code>.
+  * @throws NumberFormatException if the parameter is infinite or
+  *             not a number.
+  * @since IBM JDK 1.1.8
+  */
+ 
+ public static com.ibm.math.BigDecimal valueOf(double dub){
+  // Reminder: a zero double returns '0.0', so we cannot fastpath to
+  // use the constant ZERO.  This might be important enough to justify
+  // a factory approach, a cache, or a few private constants, later.
+  return new com.ibm.math.BigDecimal((new java.lang.Double(dub)).toString());
+  }
+
+ /**
+  * Translates a <code>long</code> to a <code>BigDecimal</code>.
+  * That is, returns a plain <code>BigDecimal</code> whose value is
+  * equal to the given <code>long</code>.
+  *
+  * @param  lint The <code>long</code> to be translated.
+  * @return      The <code>BigDecimal</code> equal in value to
+  *              <code>lint</code>.
+  */
+ 
+ public static com.ibm.math.BigDecimal valueOf(long lint){
+  return valueOf(lint,0);
+  }
+
+ /**
+  * Translates a <code>long</code> to a <code>BigDecimal</code> with a
+  * given scale.
+  * That is, returns a plain <code>BigDecimal</code> whose unscaled
+  * value is equal to the given <code>long</code>, adjusted by the
+  * second parameter, <code>scale</code>.
+  * <p>
+  * The result is given by:
+  * <p><code>
+  * (new BigDecimal(lint)).divide(TEN.pow(new BigDecimal(scale)))
+  * </code>
+  * <p>
+  * A <code>NumberFormatException</code> is thrown if <code>scale</code>
+  * is negative.
+  *
+  * @param  lint  The <code>long</code> to be translated.
+  * @param  scale The <code>int</code> scale to be applied.
+  * @return       The <code>BigDecimal</code> equal in value to
+  *               <code>lint</code>.
+  * @throws NumberFormatException if the scale is negative.
+  */
+ 
+ public static com.ibm.math.BigDecimal valueOf(long lint,int scale){
+  com.ibm.math.BigDecimal res=null;
+  {/*select*/
+  if (lint==0)
+   res=ZERO;
+  else if (lint==1)
+   res=ONE;
+  else if (lint==10)
+   res=TEN;
+  else{
+   res=new com.ibm.math.BigDecimal(lint);
+  }
+  }
+  if (scale==0) 
+   return res;
+  if (scale<0) 
+   throw new java.lang.NumberFormatException("Negative scale:"+" "+scale);
+  res=clone(res); // safe copy [do not mutate]
+  res.exp=(int)-scale; // exponent is -scale
+  return res;
+  }
+
+ /* ---------------------------------------------------------------- */
+ /* Private methods                                                  */
+ /* ---------------------------------------------------------------- */
+ 
+ /* <sgml> Return char array value of a BigDecimal (conversion from
+       BigDecimal to laid-out canonical char array).
+    <p>The mantissa will either already have been rounded (following an
+       operation) or will be of length appropriate (in the case of
+       construction from an int, for example).
+    <p>We must not alter the mantissa, here.
+    <p>'form' describes whether we are to use exponential notation (and
+       if so, which), or if we are to lay out as a plain/pure numeric.
+    </sgml> */
+ 
+ private char[] layout(){
+  char cmant[];
+  int i=0;
+  java.lang.StringBuffer sb=null;
+  int euse=0;
+  int sig=0;
+  char csign=0;
+  char rec[]=null;
+  int needsign;
+  int mag;
+  int len=0;
+  cmant=new char[mant.length]; // copy byte[] to a char[]
+  {int $18=mant.length;i=0;i:for(;$18>0;$18--,i++){
+   cmant[i]=(char)(mant[i]+((int)('0')));
+   }
+  }/*i*/
+  
+  if (form!=com.ibm.math.MathContext.PLAIN) 
+   {/* exponential notation needed */
+    sb=new java.lang.StringBuffer(cmant.length+15); // -x.xxxE+999999999
+    if (ind==isneg) 
+     sb.append('-');
+    euse=(exp+cmant.length)-1; // exponent to use
+    /* setup sig=significant digits and copy to result */
+    if (form==com.ibm.math.MathContext.SCIENTIFIC) 
+     { // [default]
+      sb.append(cmant[0]); // significant character
+      if (cmant.length>1)  // have decimal part
+       sb.append('.').append(cmant,1,cmant.length-1);
+     }
+    else 
+     {engineering:do{
+      sig=euse%3; // common
+      if (sig<0) 
+       sig=3+sig; // negative exponent
+      euse=euse-sig;
+      sig++;
+      if (sig>=cmant.length) 
+       { // zero padding may be needed
+        sb.append(cmant,0,cmant.length);
+        {int $19=sig-cmant.length;for(;$19>0;$19--){
+         sb.append('0');
+         }
+        }
+       }
+      else 
+       { // decimal point needed
+        sb.append(cmant,0,sig).append('.').append(cmant,sig,cmant.length-sig);
+       }
+     }while(false);}/*engineering*/
+    if (euse!=0) 
+     {
+      if (euse<0) 
+       {
+        csign='-';
+        euse=(int)-euse;
+       }
+      else 
+       csign='+';
+      sb.append('E').append(csign).append(euse);
+     }
+    rec=new char[sb.length()];
+    sb.getChars(0,sb.length(),rec,0);
+    return rec;
+   }
+  
+  /* Here for non-exponential (plain) notation */
+  if (exp==0) 
+   {/* easy */
+    if (ind>=0) 
+     return cmant; // non-negative integer
+    rec=new char[cmant.length+1];
+    rec[0]='-';
+    java.lang.System.arraycopy((java.lang.Object)cmant,0,(java.lang.Object)rec,1,cmant.length);
+    return rec;
+   }
+  
+  /* Need a '.' and/or some zeros */
+  needsign=(int)((ind==isneg)?1:0); // space for sign?  0 or 1
+  
+  /* MAG is the position of the point in the mantissa (index of the
+     character it follows) */
+  mag=exp+cmant.length;
+  
+  if (mag<1) 
+   {/* 0.00xxxx form */
+    len=(needsign+2)-exp; // needsign+2+(-mag)+cmant.length
+    rec=new char[len];
+    if (needsign!=0) 
+     rec[0]='-';
+    rec[needsign]='0';
+    rec[needsign+1]='.';
+    {int $20=(int)-mag;i=needsign+2;i:for(;$20>0;$20--,i++){ // maybe none
+     rec[i]='0';
+     }
+    }/*i*/
+    java.lang.System.arraycopy((java.lang.Object)cmant,0,(java.lang.Object)rec,(needsign+2)-mag,cmant.length);
+    return rec;
+   }
+  
+  if (mag>cmant.length) 
+   {/* xxxx0000 form */
+    len=needsign+mag;
+    rec=new char[len];
+    if (needsign!=0) 
+     rec[0]='-';
+    java.lang.System.arraycopy((java.lang.Object)cmant,0,(java.lang.Object)rec,needsign,cmant.length);
+    {int $21=mag-cmant.length;i=needsign+cmant.length;i:for(;$21>0;$21--,i++){ // never 0
+     rec[i]='0';
+     }
+    }/*i*/
+    return rec;
+   }
+  
+  /* decimal point is in the middle of the mantissa */
+  len=(needsign+1)+cmant.length;
+  rec=new char[len];
+  if (needsign!=0) 
+   rec[0]='-';
+  java.lang.System.arraycopy((java.lang.Object)cmant,0,(java.lang.Object)rec,needsign,mag);
+  rec[needsign+mag]='.';
+  java.lang.System.arraycopy((java.lang.Object)cmant,mag,(java.lang.Object)rec,(needsign+mag)+1,cmant.length-mag);
+  return rec;
+  }
+
+ /* <sgml> Checks a BigDecimal argument to ensure it's a true integer
+       in a given range.
+    <p>If OK, returns it as an int. </sgml> */
+ // [currently only used by pow]
+ 
+ private int intcheck(int min,int max){
+  int i;
+  i=this.intValueExact(); // [checks for non-0 decimal part]
+  // Use same message as though intValueExact failed due to size
+  if ((i<min)|(i>max)) 
+   throw new java.lang.ArithmeticException("Conversion overflow:"+" "+i);
+  return i;
+  }
+
+ /* <sgml> Carry out division operations. </sgml> */
+ /*
+    Arg1 is operation code: D=divide, I=integer divide, R=remainder
+    Arg2 is the rhs.
+    Arg3 is the context.
+    Arg4 is explicit scale iff code='D' or 'I' (-1 if none).
+ 
+    Underlying algorithm (complications for Remainder function and
+    scaled division are omitted for clarity):
+ 
+      Test for x/0 and then 0/x
+      Exp =Exp1 - Exp2
+      Exp =Exp +len(var1) -len(var2)
+      Sign=Sign1 * Sign2
+      Pad accumulator (Var1) to double-length with 0's (pad1)
+      Pad Var2 to same length as Var1
+      B2B=1st two digits of var2, +1 to allow for roundup
+      have=0
+      Do until (have=digits+1 OR residue=0)
+        if exp<0 then if integer divide/residue then leave
+        this_digit=0
+        Do forever
+           compare numbers
+           if <0 then leave inner_loop
+           if =0 then (- quick exit without subtract -) do
+              this_digit=this_digit+1; output this_digit
+              leave outer_loop; end
+           Compare lengths of numbers (mantissae):
+           If same then CA=first_digit_of_Var1
+                   else CA=first_two_digits_of_Var1
+           mult=ca*10/b2b   -- Good and safe guess at divisor
+           if mult=0 then mult=1
+           this_digit=this_digit+mult
+           subtract
+           end inner_loop
+         if have\=0 | this_digit\=0 then do
+           output this_digit
+           have=have+1; end
+         var2=var2/10
+         exp=exp-1
+         end outer_loop
+      exp=exp+1   -- set the proper exponent
+      if have=0 then generate answer=0
+      Return to FINISHED
+      Result defined by MATHV1
+ 
+    For extended commentary, see DMSRCN.
+  */
+ 
+ private com.ibm.math.BigDecimal dodivide(char code,com.ibm.math.BigDecimal rhs,com.ibm.math.MathContext set,int scale){
+  com.ibm.math.BigDecimal lhs;
+  int reqdig;
+  int newexp;
+  com.ibm.math.BigDecimal res;
+  int newlen;
+  byte var1[];
+  int var1len;
+  byte var2[];
+  int var2len;
+  int b2b;
+  int have;
+  int thisdigit=0;
+  int i=0;
+  byte v2=0;
+  int ba=0;
+  int mult=0;
+  int start=0;
+  int padding=0;
+  int d=0;
+  byte newvar1[]=null;
+  byte lasthave=0;
+  int actdig=0;
+  byte newmant[]=null;
+  
+  if (set.lostDigits) 
+   checkdigits(rhs,set.digits);
+  lhs=this; // name for clarity
+  
+  // [note we must have checked lostDigits before the following checks]
+  if (rhs.ind==0) 
+   throw new java.lang.ArithmeticException("Divide by 0"); // includes 0/0
+  if (lhs.ind==0) 
+   { // 0/x => 0 [possibly with .0s]
+    if (set.form!=com.ibm.math.MathContext.PLAIN) 
+     return ZERO;
+    if (scale==(-1)) 
+     return lhs;
+    return lhs.setScale(scale);
+   }
+  
+  /* Prepare numbers according to BigDecimal rules */
+  reqdig=set.digits; // local copy (heavily used)
+  if (reqdig>0) 
+   {
+    if (lhs.mant.length>reqdig) 
+     lhs=clone(lhs).round(set);
+    if (rhs.mant.length>reqdig) 
+     rhs=clone(rhs).round(set);
+   }
+  else 
+   {/* scaled divide */
+    if (scale==(-1)) 
+     scale=lhs.scale();
+    // set reqdig to be at least large enough for the computation
+    reqdig=lhs.mant.length; // base length
+    // next line handles both positive lhs.exp and also scale mismatch
+    if (scale!=((int)-lhs.exp)) 
+     reqdig=(reqdig+scale)+lhs.exp;
+    reqdig=(reqdig-((rhs.mant.length-1)))-rhs.exp; // reduce by RHS effect
+    if (reqdig<lhs.mant.length) 
+     reqdig=lhs.mant.length; // clamp
+    if (reqdig<rhs.mant.length) 
+     reqdig=rhs.mant.length; // ..
+   }
+  
+  /* precalculate exponent */
+  newexp=((lhs.exp-rhs.exp)+lhs.mant.length)-rhs.mant.length;
+  /* If new exponent -ve, then some quick exits are possible */
+  if (newexp<0) 
+   if (code!='D') 
+    {
+     if (code=='I') 
+      return ZERO; // easy - no integer part
+     /* Must be 'R'; remainder is [finished clone of] input value */
+     return clone(lhs).finish(set,false);
+    }
+  
+  /* We need slow division */
+  res=new com.ibm.math.BigDecimal(); // where we'll build result
+  res.ind=(byte)(lhs.ind*rhs.ind); // final sign (for D/I)
+  res.exp=newexp; // initial exponent (for D/I)
+  res.mant=new byte[reqdig+1]; // where build the result
+  
+  /* Now [virtually pad the mantissae with trailing zeros */
+  // Also copy the LHS, which will be our working array
+  newlen=(reqdig+reqdig)+1;
+  var1=extend(lhs.mant,newlen); // always makes longer, so new safe array
+  var1len=newlen; // [remaining digits are 0]
+  
+  var2=rhs.mant;
+  var2len=newlen;
+  
+  /* Calculate first two digits of rhs (var2), +1 for later estimations */
+  b2b=(var2[0]*10)+1;
+  if (var2.length>1) 
+   b2b=b2b+var2[1];
+  
+  /* start the long-division loops */
+  have=0;
+  {outer:for(;;){
+   thisdigit=0;
+   /* find the next digit */
+   {inner:for(;;){
+    if (var1len<var2len) 
+     break inner; // V1 too low
+    if (var1len==var2len) 
+     { // compare needed
+      {compare:do{ // comparison
+       {int $22=var1len;i=0;i:for(;$22>0;$22--,i++){
+        // var1len is always <= var1.length
+        if (i<var2.length) 
+         v2=var2[i];
+        else 
+         v2=(byte)0;
+        if (var1[i]<v2) 
+         break inner; // V1 too low
+        if (var1[i]>v2) 
+         break compare; // OK to subtract
+        }
+       }/*i*/
+       /* reach here if lhs and rhs are identical; subtraction will
+          increase digit by one, and the residue will be 0 so we
+          are done; leave the loop with residue set to 0 (in case
+          code is 'R' or ROUND_UNNECESSARY or a ROUND_HALF_xxxx is
+          being checked) */
+       thisdigit++;
+       res.mant[have]=(byte)thisdigit;
+       have++;
+       var1[0]=(byte)0; // residue to 0 [this is all we'll test]
+       // var1len=1      -- [optimized out]
+       break outer;
+      }while(false);}/*compare*/
+      /* prepare for subtraction.  Estimate BA (lengths the same) */
+      ba=(int)var1[0]; // use only first digit
+     } // lengths the same
+    else 
+     {/* lhs longer than rhs */
+      /* use first two digits for estimate */
+      ba=var1[0]*10;
+      if (var1len>1) 
+       ba=ba+var1[1];
+     }
+    /* subtraction needed; V1>=V2 */
+    mult=(ba*10)/b2b;
+    if (mult==0) 
+     mult=1;
+    thisdigit=thisdigit+mult;
+    // subtract; var1 reusable
+    var1=byteaddsub(var1,var1len,var2,var2len,(int)-mult,true);
+    if (var1[0]!=0) 
+     continue inner; // maybe another subtract needed
+    /* V1 now probably has leading zeros, remove leading 0's and try
+       again. (It could be longer than V2) */
+    {int $23=var1len-2;start=0;start:for(;start<=$23;start++){
+     if (var1[start]!=0) 
+      break start;
+     var1len--;
+     }
+    }/*start*/
+    if (start==0) 
+     continue inner;
+    // shift left
+    java.lang.System.arraycopy((java.lang.Object)var1,start,(java.lang.Object)var1,0,var1len);
+    }
+   }/*inner*/
+   
+   /* We have the next digit */
+   if ((have!=0)|(thisdigit!=0)) 
+    { // put the digit we got
+     res.mant[have]=(byte)thisdigit;
+     have++;
+     if (have==(reqdig+1)) 
+      break outer; // we have all we need
+     if (var1[0]==0) 
+      break outer; // residue now 0
+    }
+   /* can leave now if a scaled divide and exponent is small enough */
+   if (scale>=0) 
+    if (((int)-res.exp)>scale) 
+     break outer;
+   /* can leave now if not Divide and no integer part left  */
+   if (code!='D') 
+    if (res.exp<=0) 
+     break outer;
+   res.exp=res.exp-1; // reduce the exponent
+   /* to get here, V1 is less than V2, so divide V2 by 10 and go for
+      the next digit */
+   var2len--;
+   }
+  }/*outer*/
+  
+  /* here when we have finished dividing, for some reason */
+  // have is the number of digits we collected in res.mant
+  if (have==0) 
+   have=1; // res.mant[0] is 0; we always want a digit
+  
+  if ((code=='I')|(code=='R')) 
+   {/* check for integer overflow needed */
+    if ((have+res.exp)>reqdig) 
+     throw new java.lang.ArithmeticException("Integer overflow");
+    
+    if (code=='R') 
+     {remainder:do{
+      /* We were doing Remainder -- return the residue */
+      if (res.mant[0]==0)  // no integer part was found
+       return clone(lhs).finish(set,false); // .. so return lhs, canonical
+      if (var1[0]==0) 
+       return ZERO; // simple 0 residue
+      res.ind=lhs.ind; // sign is always as LHS
+      /* Calculate the exponent by subtracting the number of padding zeros
+         we added and adding the original exponent */
+      padding=((reqdig+reqdig)+1)-lhs.mant.length;
+      res.exp=(res.exp-padding)+lhs.exp;
+      
+      /* strip insignificant padding zeros from residue, and create/copy
+         the resulting mantissa if need be */
+      d=var1len;
+      {i=d-1;i:for(;i>=1;i--){if(!((res.exp<lhs.exp)&(res.exp<rhs.exp)))break;
+       if (var1[i]!=0) 
+        break i;
+       d--;
+       res.exp=res.exp+1;
+       }
+      }/*i*/
+      if (d<var1.length) 
+       {/* need to reduce */
+        newvar1=new byte[d];
+        java.lang.System.arraycopy((java.lang.Object)var1,0,(java.lang.Object)newvar1,0,d); // shorten
+        var1=newvar1;
+       }
+      res.mant=var1;
+      return res.finish(set,false);
+     }while(false);}/*remainder*/
+   }
+   
+  else 
+   {/* 'D' -- no overflow check needed */
+    // If there was a residue then bump the final digit (iff 0 or 5)
+    // so that the residue is visible for ROUND_UP, ROUND_HALF_xxx and
+    // ROUND_UNNECESSARY checks (etc.) later.
+    // [if we finished early, the residue will be 0]
+    if (var1[0]!=0) 
+     { // residue not 0
+      lasthave=res.mant[have-1];
+      if (((lasthave%5))==0) 
+       res.mant[have-1]=(byte)(lasthave+1);
+     }
+   }
+  
+  /* Here for Divide or Integer Divide */
+  // handle scaled results first ['I' always scale 0, optional for 'D']
+  if (scale>=0) 
+   {scaled:do{
+    // say 'scale have res.exp len' scale have res.exp res.mant.length
+    if (have!=res.mant.length) 
+     // already padded with 0's, so just adjust exponent
+     res.exp=res.exp-((res.mant.length-have));
+    // calculate number of digits we really want [may be 0]
+    actdig=res.mant.length-((((int)-res.exp)-scale));
+    res.round(actdig,set.roundingMode); // round to desired length
+    // This could have shifted left if round (say) 0.9->1[.0]
+    // Repair if so by adding a zero and reducing exponent
+    if (res.exp!=((int)-scale)) 
+     {
+      res.mant=extend(res.mant,res.mant.length+1);
+      res.exp=res.exp-1;
+     }
+    return res.finish(set,true); // [strip if not PLAIN]
+   }while(false);}/*scaled*/
+  
+  // reach here only if a non-scaled
+  if (have==res.mant.length) 
+   { // got digits+1 digits
+    res.round(set);
+    have=reqdig;
+   }
+  else 
+   {/* have<=reqdig */
+    if (res.mant[0]==0) 
+     return ZERO; // fastpath
+    // make the mantissa truly just 'have' long
+    // [we could let finish do this, during strip, if we adjusted
+    // the exponent; however, truncation avoids the strip loop]
+    newmant=new byte[have]; // shorten
+    java.lang.System.arraycopy((java.lang.Object)res.mant,0,(java.lang.Object)newmant,0,have);
+    res.mant=newmant;
+   }
+  return res.finish(set,true);
+  }
+
+ 
+ /* <sgml> Report a conversion exception. </sgml> */
+ 
+ private void bad(char s[]){
+  throw new java.lang.NumberFormatException("Not a number:"+" "+java.lang.String.valueOf(s));
+  }
+
+ /* <sgml> Report a bad argument to a method. </sgml>
+    Arg1 is method name
+    Arg2 is argument position
+    Arg3 is what was found */
+ 
+ private void badarg(java.lang.String name,int pos,java.lang.String value){
+  throw new java.lang.IllegalArgumentException("Bad argument"+" "+pos+" "+"to"+" "+name+":"+" "+value);
+  }
+
+ /* <sgml> Extend byte array to given length, padding with 0s.  If no
+    extension is required then return the same array. </sgml>
+ 
+    Arg1 is the source byte array
+    Arg2 is the new length (longer)
+    */
+ 
+ private static final byte[] extend(byte inarr[],int newlen){
+  byte newarr[];
+  if (inarr.length==newlen) 
+   return inarr;
+  newarr=new byte[newlen];
+  java.lang.System.arraycopy((java.lang.Object)inarr,0,(java.lang.Object)newarr,0,inarr.length);
+  // 0 padding is carried out by the JVM on allocation initialization
+  return newarr;
+  }
+
+ /* <sgml> Add or subtract two >=0 integers in byte arrays
+    <p>This routine performs the calculation:
+    <pre>
+    C=A+(B*M)
+    </pre>
+    Where M is in the range -9 through +9
+    <p>
+    If M<0 then A>=B must be true, so the result is always
+    non-negative.
+ 
+    Leading zeros are not removed after a subtraction.  The result is
+    either the same length as the longer of A and B, or 1 longer than
+    that (if a carry occurred).
+ 
+    A is not altered unless Arg6 is 1.
+    B is never altered.
+ 
+    Arg1 is A
+    Arg2 is A length to use (if longer than A, pad with 0's)
+    Arg3 is B
+    Arg4 is B length to use (if longer than B, pad with 0's)
+    Arg5 is M, the multiplier
+    Arg6 is 1 if A can be used to build the result (if it fits)
+ 
+    This routine is severely performance-critical; *any* change here
+    must be measured (timed) to assure no performance degradation.
+    */
+ // 1996.02.20 -- enhanced version of DMSRCN algorithm (1981)
+ // 1997.10.05 -- changed to byte arrays (from char arrays)
+ // 1998.07.01 -- changed to allow destructive reuse of LHS
+ // 1998.07.01 -- changed to allow virtual lengths for the arrays
+ // 1998.12.29 -- use lookaside for digit/carry calculation
+ // 1999.08.07 -- avoid multiply when mult=1, and make db an int
+ // 1999.12.22 -- special case m=-1, also drop 0 special case
+ 
+ private static final byte[] byteaddsub(byte a[],int avlen,byte b[],int bvlen,int m,boolean reuse){
+  int alength;
+  int blength;
+  int ap;
+  int bp;
+  int maxarr;
+  byte reb[];
+  boolean quickm;
+  int digit;
+  int op=0;
+  int dp90=0;
+  byte newarr[];
+  int i=0;
+  
+  
+  
+  
+  // We'll usually be right if we assume no carry
+  alength=a.length; // physical lengths
+  blength=b.length; // ..
+  ap=avlen-1; // -> final (rightmost) digit
+  bp=bvlen-1; // ..
+  maxarr=bp;
+  if (maxarr<ap) 
+   maxarr=ap;
+  reb=(byte[])null; // result byte array
+  if (reuse) 
+   if ((maxarr+1)==alength) 
+    reb=a; // OK to reuse A
+  if (reb==null) 
+   reb=new byte[maxarr+1]; // need new array
+  
+  quickm=false; // 1 if no multiply needed
+  if (m==1) 
+   quickm=true; // most common
+  else 
+   if (m==(-1)) 
+    quickm=true; // also common
+  
+  digit=0; // digit, with carry or borrow
+  {op=maxarr;op:for(;op>=0;op--){
+   if (ap>=0) 
+    {
+     if (ap<alength) 
+      digit=digit+a[ap]; // within A
+     ap--;
+    }
+   if (bp>=0) 
+    {
+     if (bp<blength) 
+      { // within B
+       if (quickm) 
+        {
+         if (m>0) 
+          digit=digit+b[bp]; // most common
+         else 
+          digit=digit-b[bp]; // also common
+        }
+       else 
+        digit=digit+(b[bp]*m);
+      }
+     bp--;
+    }
+   /* result so far (digit) could be -90 through 99 */
+   if (digit<10) 
+    if (digit>=0) 
+     {quick:do{ // 0-9
+      reb[op]=(byte)digit;
+      digit=0; // no carry
+      continue op;
+     }while(false);}/*quick*/
+   dp90=digit+90;
+   reb[op]=bytedig[dp90]; // this digit
+   digit=bytecar[dp90]; // carry or borrow
+   }
+  }/*op*/
+  
+  if (digit==0) 
+   return reb; // no carry
+  // following line will become an Assert, later
+  // if digit<0 then signal ArithmeticException("internal.error ["digit"]")
+  
+  /* We have carry -- need to make space for the extra digit */
+  newarr=(byte[])null;
+  if (reuse) 
+   if ((maxarr+2)==a.length) 
+    newarr=a; // OK to reuse A
+  if (newarr==null) 
+   newarr=new byte[maxarr+2];
+  newarr[0]=(byte)digit; // the carried digit ..
+  // .. and all the rest [use local loop for short numbers]
+  if (maxarr<10) 
+   {int $24=maxarr+1;i=0;i:for(;$24>0;$24--,i++){
+    newarr[i+1]=reb[i];
+    }
+   }/*i*/
+  else 
+   java.lang.System.arraycopy((java.lang.Object)reb,0,(java.lang.Object)newarr,1,maxarr+1);
+  return newarr;
+  }
+
+ /* <sgml> Initializer for digit array properties (lookaside). </sgml>
+    Returns the digit array, and initializes the carry array. */
+ 
+ private static final byte[] diginit(){
+  byte work[];
+  int op=0;
+  int digit=0;
+  work=new byte[(90+99)+1];
+  {op=0;op:for(;op<=(90+99);op++){
+   digit=op-90;
+   if (digit>=0) 
+    {
+     work[op]=(byte)(digit%10);
+     bytecar[op]=(byte)(digit/10); // calculate carry
+     continue op;
+    }
+   // borrowing...
+   digit=digit+100; // yes, this is right [consider -50]
+   work[op]=(byte)(digit%10);
+   bytecar[op]=(byte)((digit/10)-10); // calculate borrow [NB: - after %]
+   }
+  }/*op*/
+  return work;
+  }
+
+ /* <sgml> Create a copy of BigDecimal object for local use.
+    <p>This does NOT make a copy of the mantissa array.
+    </sgml>
+    Arg1 is the BigDecimal to clone (non-null)
+    */
+ 
+ private static final com.ibm.math.BigDecimal clone(com.ibm.math.BigDecimal dec){
+  com.ibm.math.BigDecimal copy;
+  copy=new com.ibm.math.BigDecimal();
+  copy.ind=dec.ind;
+  copy.exp=dec.exp;
+  copy.form=dec.form;
+  copy.mant=dec.mant;
+  return copy;
+  }
+
+ /* <sgml> Check one or two numbers for lost digits. </sgml>
+    Arg1 is RHS (or null, if none)
+    Arg2 is current DIGITS setting
+    returns quietly or throws an exception */
+ 
+ private void checkdigits(com.ibm.math.BigDecimal rhs,int dig){
+  if (dig==0) 
+   return; // don't check if digits=0
+  // first check lhs...
+  if (this.mant.length>dig) 
+   if ((!(allzero(this.mant,dig)))) 
+    throw new java.lang.ArithmeticException("Too many digits:"+" "+this.toString());
+  if (rhs==null) 
+   return; // monadic
+  if (rhs.mant.length>dig) 
+   if ((!(allzero(rhs.mant,dig)))) 
+    throw new java.lang.ArithmeticException("Too many digits:"+" "+rhs.toString());
+  return;
+  }
+
+ /* <sgml> Round to specified digits, if necessary. </sgml>
+    Arg1 is requested MathContext [with length and rounding mode]
+    returns this, for convenience */
+ 
+ private com.ibm.math.BigDecimal round(com.ibm.math.MathContext set){
+  return round(set.digits,set.roundingMode);
+  }
+
+ /* <sgml> Round to specified digits, if necessary.
+    Arg1 is requested length (digits to round to)
+            [may be <=0 when called from format, dodivide, etc.]
+    Arg2 is rounding mode
+    returns this, for convenience
+ 
+    ind and exp are adjusted, but not cleared for a mantissa of zero
+ 
+    The length of the mantissa returned will be Arg1, except when Arg1
+    is 0, in which case the returned mantissa length will be 1.
+    </sgml>
+    */
+ 
+ private com.ibm.math.BigDecimal round(int len,int mode){
+  int adjust;
+  int sign;
+  byte oldmant[];
+  boolean reuse=false;
+  byte first=0;
+  int increment;
+  byte newmant[]=null;
+  adjust=mant.length-len;
+  if (adjust<=0) 
+   return this; // nowt to do
+  
+  exp=exp+adjust; // exponent of result
+  sign=(int)ind; // save [assumes -1, 0, 1]
+  oldmant=mant; // save
+  if (len>0) 
+   {
+    // remove the unwanted digits
+    mant=new byte[len];
+    java.lang.System.arraycopy((java.lang.Object)oldmant,0,(java.lang.Object)mant,0,len);
+    reuse=true; // can reuse mantissa
+    first=oldmant[len]; // first of discarded digits
+   }
+  else 
+   {/* len<=0 */
+    mant=ZERO.mant;
+    ind=iszero;
+    reuse=false; // cannot reuse mantissa
+    if (len==0) 
+     first=oldmant[0];
+    else 
+     first=(byte)0; // [virtual digit]
+   }
+  
+  // decide rounding adjustment depending on mode, sign, and discarded digits
+  increment=0; // bumper
+  {modes:do{/*select*/
+  if (mode==ROUND_HALF_UP)
+   { // default first [most common]
+    if (first>=5) 
+     increment=sign;
+   }
+  else if (mode==ROUND_UNNECESSARY)
+   { // default for setScale()
+    // discarding any non-zero digits is an error
+    if ((!(allzero(oldmant,len)))) 
+     throw new java.lang.ArithmeticException("Rounding necessary");
+   }
+  else if (mode==ROUND_HALF_DOWN)
+   { // 0.5000 goes down
+    if (first>5) 
+     increment=sign;
+    else 
+     if (first==5) 
+      if ((!(allzero(oldmant,len+1)))) 
+       increment=sign;
+   }
+  else if (mode==ROUND_HALF_EVEN)
+   { // 0.5000 goes down if left digit even
+    if (first>5) 
+     increment=sign;
+    else 
+     if (first==5) 
+      {
+       if ((!(allzero(oldmant,len+1)))) 
+        increment=sign;
+       else /* 0.5000 */
+        if ((((mant[mant.length-1])%2))==1) 
+         increment=sign;
+      }
+   }
+  else if (mode==ROUND_DOWN)
+   ; // never increment
+  else if (mode==ROUND_UP)
+   { // increment if discarded non-zero
+    if ((!(allzero(oldmant,len)))) 
+     increment=sign;
+   }
+  else if (mode==ROUND_CEILING)
+   { // more positive
+    if (sign>0) 
+     if ((!(allzero(oldmant,len)))) 
+      increment=sign;
+   }
+  else if (mode==ROUND_FLOOR)
+   { // more negative
+    if (sign<0) 
+     if ((!(allzero(oldmant,len)))) 
+      increment=sign;
+   }
+  else{
+   throw new java.lang.IllegalArgumentException("Bad round value:"+" "+mode);
+  }
+  }while(false);}/*modes*/
+  
+  if (increment!=0) 
+   {bump:do{
+    if (ind==iszero) 
+     {
+      // we must not subtract from 0, but result is trivial anyway
+      mant=ONE.mant;
+      ind=(byte)increment;
+     }
+    else 
+     {
+      // mantissa is non-0; we can safely add or subtract 1
+      if (ind==isneg) 
+       increment=(int)-increment;
+      newmant=byteaddsub(mant,mant.length,ONE.mant,1,increment,reuse);
+      if (newmant.length>mant.length) 
+       { // had a carry
+        // drop rightmost digit and raise exponent
+        exp++;
+        // mant is already the correct length
+        java.lang.System.arraycopy((java.lang.Object)newmant,0,(java.lang.Object)mant,0,mant.length);
+       }
+      else 
+       mant=newmant;
+     }
+   }while(false);}/*bump*/
+  // rounding can increase exponent significantly
+  if (exp>MaxExp) 
+   throw new java.lang.ArithmeticException("Exponent Overflow:"+" "+exp);
+  return this;
+  }
+
+ /* <sgml> Test if rightmost digits are all 0.
+    Arg1 is a mantissa array to test
+    Arg2 is the offset of first digit to check
+            [may be negative; if so, digits to left are 0's]
+    returns 1 if all the digits starting at Arg2 are 0
+ 
+    Arg2 may be beyond array bounds, in which case 1 is returned
+    </sgml> */
+ 
+ private static final boolean allzero(byte array[],int start){
+  int i=0;
+  if (start<0) 
+   start=0;
+  {int $25=array.length-1;i=start;i:for(;i<=$25;i++){
+   if (array[i]!=0) 
+    return false;
+   }
+  }/*i*/
+  return true;
+  }
+
+ /* <sgml> Carry out final checks and canonicalization
+    <p>
+    This finishes off the current number by:
+      1. Rounding if necessary (NB: length includes leading zeros)
+      2. Stripping trailing zeros (if requested and \PLAIN)
+      3. Stripping leading zeros (always)
+      4. Selecting exponential notation (if required)
+      5. Converting a zero result to just '0' (if \PLAIN)
+    In practice, these operations overlap and share code.
+    It always sets form.
+    </sgml>
+    Arg1 is requested MathContext (length to round to, trigger, and FORM)
+    Arg2 is 1 if trailing insignificant zeros should be removed after
+         round (for division, etc.), provided that set.form isn't PLAIN.
+   returns this, for convenience
+   */
+ 
+ private com.ibm.math.BigDecimal finish(com.ibm.math.MathContext set,boolean strip){
+  int d=0;
+  int i=0;
+  byte newmant[]=null;
+  int mag=0;
+  int sig=0;
+  /* Round if mantissa too long and digits requested */
+  if (set.digits!=0) 
+   if (this.mant.length>set.digits) 
+    this.round(set);
+  
+  /* If strip requested (and standard formatting), remove
+     insignificant trailing zeros. */
+  if (strip) 
+   if (set.form!=com.ibm.math.MathContext.PLAIN) 
+    {
+     d=this.mant.length;
+     /* see if we need to drop any trailing zeros */
+     {i=d-1;i:for(;i>=1;i--){
+      if (this.mant[i]!=0) 
+       break i;
+      d--;
+      exp++;
+      }
+     }/*i*/
+     if (d<this.mant.length) 
+      {/* need to reduce */
+       newmant=new byte[d];
+       java.lang.System.arraycopy((java.lang.Object)this.mant,0,(java.lang.Object)newmant,0,d);
+       this.mant=newmant;
+      }
+    }
+  
+  form=(byte)com.ibm.math.MathContext.PLAIN; // preset
+  
+  /* Now check for leading- and all- zeros in mantissa */
+  {int $26=this.mant.length;i=0;i:for(;$26>0;$26--,i++){
+   if (this.mant[i]!=0) 
+    {
+     // non-0 result; ind will be correct
+     // remove leading zeros [e.g., after subtract]
+     if (i>0) 
+      {delead:do{
+       newmant=new byte[this.mant.length-i];
+       java.lang.System.arraycopy((java.lang.Object)this.mant,i,(java.lang.Object)newmant,0,this.mant.length-i);
+       this.mant=newmant;
+      }while(false);}/*delead*/
+     // now determine form if not PLAIN
+     mag=exp+mant.length;
+     if (mag>0) 
+      { // most common path
+       if (mag>set.digits) 
+        if (set.digits!=0) 
+         form=(byte)set.form;
+       if ((mag-1)<=MaxExp) 
+        return this; // no overflow; quick return
+      }
+     else 
+      if (mag<(-5)) 
+       form=(byte)set.form;
+     /* check for overflow */
+     mag--;
+     if ((mag<MinExp)|(mag>MaxExp)) 
+      {overflow:do{
+       // possible reprieve if form is engineering
+       if (form==com.ibm.math.MathContext.ENGINEERING) 
+        {
+         sig=mag%3; // leftover
+         if (sig<0) 
+          sig=3+sig; // negative exponent
+         mag=mag-sig; // exponent to use
+         // 1999.06.29: second test here must be MaxExp
+         if (mag>=MinExp) 
+          if (mag<=MaxExp) 
+           break overflow;
+        }
+       throw new java.lang.ArithmeticException("Exponent Overflow:"+" "+mag);
+      }while(false);}/*overflow*/
+     return this;
+    }
+   }
+  }/*i*/
+  
+  // Drop through to here only if mantissa is all zeros
+  ind=iszero;
+  {/*select*/
+  if (set.form!=com.ibm.math.MathContext.PLAIN)
+   exp=0; // standard result; go to '0'
+  else if (exp>0)
+   exp=0; // +ve exponent also goes to '0'
+  else{
+   // a plain number with -ve exponent; preserve and check exponent
+   if (exp<MinExp) 
+    throw new java.lang.ArithmeticException("Exponent Overflow:"+" "+exp);
+  }
+  }
+  mant=ZERO.mant; // canonical mantissa
+  return this;
+  }
+ }
diff --git a/src/com/ibm/math/DiagBigDecimal.java b/src/com/ibm/math/DiagBigDecimal.java
new file mode 100755
index 0000000..5ba3a1b
--- /dev/null
+++ b/src/com/ibm/math/DiagBigDecimal.java
@@ -0,0 +1,5342 @@
+/* Generated from 'DiagBigDecimal.nrx' 8 Sep 2000 11:08:28 [v2.00] */
+/* Options: Binary Comments Crossref Format Java Logo Trace1 Verbose3 */
+package com.ibm.math;
+import java.math.BigInteger;
+
+/* ------------------------------------------------------------------ */
+/* Decimal diagnostic tests                                       mfc */
+/* Copyright (c) IBM Corporation 1996, 2000.  All Rights Reserved.    */
+/* ------------------------------------------------------------------ */
+/* DiagBigDecimal                                                     */
+/*                                                                    */
+/*   A class that tests the BigDecimal and MathContext classes.       */
+/*                                                                    */
+/*   The tests here are derived from or cover the same paths as:      */
+/*      -- ANSI X3-274 testcases                                      */
+/*      -- Java JCK testcases                                         */
+/*      -- NetRexx testcases                                          */
+/*      -- VM/CMS S/370 REXX implementation testcases [1981+]         */
+/*      -- IBM Vienna Laboratory Rexx compiler testcases [1988+]      */
+/*      -- New testcases                                              */
+/*                                                                    */
+/*   The authoritative sources for how the underlying technology      */
+/*   (arithmetic) should work are:                                    */
+/*      -- for digits=0 (fixed point): java.math.BigDecimal           */
+/*      -- for digits>0 (floating point): ANSI X3.274-1996 + errata   */
+/*                                                                    */
+/* ------------------------------------------------------------------ */
+/* Change list                                                        */
+/* 1997.09.05 Initial implementation, from DiagRexx [NetRexx tests]   */
+/* 1998.05.02 0.07 changes (e.g., compareTo)                          */
+/* 1998.06.06 Rounding modes and format additions                     */
+/* 1998.06.25 Rename from DiagDecimal; make stand-alone [add          */
+/*            DiagException as a Minor class]                         */
+/* 1998.06.27 Start adding testcases for DIGITS=0/FORM=PLAIN cases    */
+/*            Reorganize for faster trace compilation                 */
+/* 1998.06.28 new: valueof, scale, movePointX, unscaledValue, etc.    */
+/* 1998.07.07 Scaled divide                                           */
+/* 1998.07.08 setScale                                                */
+/* 1998.07.15 new scaffolding (Minor Test class) -- see diagabs       */
+/* 1998.12.14 add toBigDecimal and BigDecimal(java.math.BigDecimal)   */
+/* 1999.02.04 number preparation rounds instead of digits+1 trunc     */
+/* 1999.02.09 format method now only has two signatures               */
+/* 1999.02.27 no longer use Rexx class or RexxIO class                */
+/* 1999.03.05 add MathContext tests                                   */
+/* 1999.03.05 update for 0.96 [no null settings, etc.]                */
+/*            drop sundry constructors; no blanks; char[] gets ints   */
+/*            drop sundry converters, add Exact converters            */
+/* 1999.05.27 additional tests for scaled arithmetic                  */
+/* 1999.06.29 additional tests for exponent overflows                 */
+/* 1999.07.03 add 'continue' option                                   */
+/* 1999.07.10 additional tests for scaled arithmetic                  */
+/* 1999.07.18 randomly-generated tests added for base operators       */
+/* 1999.10.28 weird intValueExact bad cases                           */
+/* 1999.12.21 multiplication fast path failure and edge cases         */
+/* 2000.01.01 copyright update                                        */
+/* 2000.03.26 cosmetic updates; add extra format() testcases          */
+/* 2000.03.27 1.00 move to com.ibm.math package; open source release; */
+/*                 change to javadoc comments                         */
+/* ------------------------------------------------------------------ */
+
+// note BINARY for conversions checking
+
+
+
+
+/**
+ * The <code>DiagBigDecimal</code> class forms a standalone test suite
+ * for the <code>com.ibm.math.BigDecimal</code> and
+ * <code>com.ibm.math.MathContext</code> classes (or, by changing the
+ * <code>package</code> statement, other classes of the same names and
+ * definition in other packages).  It may also be used as a constructed
+ * object to embed the tests in an external test harness.
+ * <p>
+ * The tests are collected into <i>groups</i>, each corresponding to a
+ * tested method or a more general grouping.  By default, when run from
+ * the static {@link #main(java.lang.String[])} method, the run will end
+ * if any test fails in a group.  The <code>continue</code> argument may
+ * be specified to force the tests to run to completion.
+ * <p>
+ * Two minor (inner) classes are used; {@link
+ * DiagBigDecimal.DiagException} is used to signal the failure of a test
+ * group, and {@link DiagBigDecimal.Test}, a dependent minor class, is
+ * used to register tests so that a summary of failures (or success) can be
+ * presented as each group is completed.
+ *
+ * @see     com.ibm.math.BigDecimal
+ * @see     com.ibm.math.MathContext
+ * @version 1.00 2000.03.27
+ * @author  Mike Cowlishaw
+ */
+
+public class DiagBigDecimal{
+ private static final java.lang.String $0="DiagBigDecimal.nrx";
+ 
+ /* properties shared */
+ java.util.Vector Tests=new java.util.Vector(100); // scaffolding
+ 
+ /* properties private */
+ private int totalcount=0; // counts tests run
+ 
+ /* properties constant private */
+ 
+ /* Count of test groups */
+ private static final int testcount=38;
+ 
+ private static final com.ibm.math.BigDecimal zero=com.ibm.math.BigDecimal.ZERO;
+ private static final com.ibm.math.BigDecimal one=com.ibm.math.BigDecimal.ONE;
+ private static final com.ibm.math.BigDecimal two=new com.ibm.math.BigDecimal(2);
+ private static final com.ibm.math.BigDecimal ten=com.ibm.math.BigDecimal.TEN;
+ private static final com.ibm.math.BigDecimal tenlong=new com.ibm.math.BigDecimal((long)1234554321); // 10-digiter
+ 
+ /* Some context objects -- [some of these are checked later] */
+ private static final com.ibm.math.MathContext mcdef=com.ibm.math.MathContext.DEFAULT;
+ private static final com.ibm.math.MathContext mc3=new com.ibm.math.MathContext(3);
+ private static final com.ibm.math.MathContext mc6=new com.ibm.math.MathContext(6);
+ private static final com.ibm.math.MathContext mc9=new com.ibm.math.MathContext(9);
+ private static final com.ibm.math.MathContext mc50=new com.ibm.math.MathContext(50);
+ private static final com.ibm.math.MathContext mcs=new com.ibm.math.MathContext(9,com.ibm.math.MathContext.SCIENTIFIC);
+ private static final com.ibm.math.MathContext mce=new com.ibm.math.MathContext(9,com.ibm.math.MathContext.ENGINEERING);
+ private static final com.ibm.math.MathContext mcld=new com.ibm.math.MathContext(9,com.ibm.math.MathContext.SCIENTIFIC,true); // lost digits
+ private static final com.ibm.math.MathContext mcld0=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.SCIENTIFIC,true); // lost digits, digits=0
+ private static final com.ibm.math.MathContext mcfd=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN); // fixed decimal style
+ 
+ /* boundary primitive values */
+ private static final byte bmin=-128;
+ private static final byte bmax=127;
+ private static final byte bzer=0;
+ private static final byte bneg=-1;
+ private static final byte bpos=1;
+ private static final int imin=-2147483648;
+ private static final int imax=2147483647;
+ private static final int izer=0;
+ private static final int ineg=-1;
+ private static final int ipos=1;
+ private static final long lmin=-9223372036854775808L;
+ private static final long lmax=9223372036854775807L;
+ private static final long lzer=(long)0;
+ private static final long lneg=(long)-1;
+ private static final long lpos=(long)1;
+ private static final short smin=-32768;
+ private static final short smax=32767;
+ private static final short szer=(short)0;
+ private static final short sneg=(short)(-1);
+ private static final short spos=(short)1;
+ 
+ 
+ /* properties constant private unused */ // present but not referenced
+ private static final java.lang.String copyright=" Copyright (c) IBM Corporation 1996, 2000.  All rights reserved. ";
+
+ 
+ /** Constructs a <code>DiagBigDecimal</code> test suite.
+   * <p>
+   * Invoke its {@link #diagrun} method to run the tests.
+   */
+ 
+ public DiagBigDecimal(){super();
+  return;
+  }
+
+ /** Run the tests in the test suite.
+  *
+  * @param isContinue The <code>boolean</code> which determines whether
+  *                   to stop running after a group fails.  If 1 (true)
+  *                   then the tests should be run to completion if
+  *                   possible; if 0 (false) then the run will end if a
+  *                   group fails.
+  * @return an <code>int</code> which is 0 if all tests were
+  * successful, >0 (the count of failures) if some failures were
+  * detected, or <0 if an unexpected Exception was signalled.
+  */
+ 
+ public int diagrun(boolean isContinue){
+  int fails;
+  int num=0;
+  com.ibm.math.DiagBigDecimal.DiagException de=null;
+  java.lang.RuntimeException e=null;
+  java.lang.String rest=null;
+  
+  fails=0; // count of failures
+  {try{num=1;num:for(;num<=testcount;num++){ // [testcount is constant set above]
+   {try{
+    dotest(num);
+   }
+   catch (com.ibm.math.DiagBigDecimal.DiagException $1){de=$1;
+    say();
+    say("**** Failed:"+" "+de.getMessage()+" "+"****");
+    say();
+    fails=fails+de.failcount;
+    if ((!isContinue)) 
+     break num;
+   }}
+   }
+  }
+  catch (java.lang.RuntimeException $2){e=$2; // any other exception is total failure; just show trace and quit
+   say();
+   say("**** Failed: unexpected exception ****");
+   e.printStackTrace();
+   return -1;
+  }}/*num*/
+  
+  if (fails==0) 
+   say("--- All OK ---"+" "+right("["+totalcount+" "+"tests]",15));
+  else 
+   {
+    if (isContinue) 
+     {
+      if (fails>1) 
+       rest="tests";
+      else 
+       rest="test";
+      say("--- All run ---"+" "+right("["+totalcount+" "+"tests,",14)+" "+"failed"+" "+fails+" "+rest+"]");
+     
+     }
+   }
+  
+  return fails;
+  }
+
+ /* Run test by number -- method for development/private switching */
+ 
+ private void dotest(int num){
+  {/*select*/switch(num){
+   /* -------------------------------------------------------------- */
+   /* MathContext                                                    */
+   /* -------------------------------------------------------------- */
+  case 1:
+   diagmathcontext();break;
+   
+   /* -------------------------------------------------------------- */
+   /* Constructors                                                   */
+   /* -------------------------------------------------------------- */
+  case 2:
+   diagconstructors();break;
+   
+   /* -------------------------------------------------------------- */
+   /* Operator methods                                               */
+   /* -------------------------------------------------------------- */
+  case 3:
+   diagabs();break;
+  case 4:
+   diagadd();break;
+  case 5:
+   diagcompareto();break;
+  case 6:
+   diagdivide();break;
+  case 7:
+   diagdivideInteger();break;
+  case 8:
+   diagmax();break;
+  case 9:
+   diagmin();break;
+  case 10:
+   diagmultiply();break;
+  case 11:
+   diagnegate();break;
+  case 12:
+   diagplus();break;
+  case 13:
+   diagpow();break;
+  case 14:
+   diagremainder();break;
+  case 15:
+   diagsubtract();break;
+  case 16:
+   diagmath();break; // general math
+   
+   /* -------------------------------------------------------------- */
+   /* Other methods                                                  */
+   /* -------------------------------------------------------------- */
+  case 17:
+   diagbyteValue();break;
+  case 18:
+   diagcomparetoObj();break;
+  case 19:
+   diagdoublevalue();break;
+  case 20:
+   diagequals();break;
+  case 21:
+   diagfloatvalue();break;
+  case 22:
+   diagformat();break;
+  case 23:
+   diaghashcode();break;
+  case 24:
+   diagintvalue();break;
+  case 25:
+   diaglongvalue();break;
+  case 26:
+   diagmovepointleft();break;
+  case 27:
+   diagmovepointright();break;
+  case 28:
+   diagscale();break;
+  case 29:
+   diagsetscale();break;
+  case 30:
+   diagshortvalue();break;
+  case 31:
+   diagsignum();break;
+  case 32:
+   diagtobigdecimal();break;
+  case 33:
+   diagtobiginteger();break;
+  case 34:
+   diagtochararray();break;
+  case 35:
+   diagtostring();break;
+  case 36:
+   diagunscaledvalue();break;
+  case 37:
+   diagvalueof();break;
+   
+   /* -------------------------------------------------------------- */
+   /* Mutation test [must be the last test]                          */
+   /* -------------------------------------------------------------- */
+  case 38:
+   diagmutation();break;
+   // if any more, increase testcount above
+  default:{
+   say("*** dotest case not found:"+" "+num+" "+"***");
+  }}
+  }
+  return;
+  }
+
+ /*--------------------------------------------------------------------*/
+ /* Diagnostic group methods                                           */
+ /*--------------------------------------------------------------------*/
+ 
+ /** Test constructors (and {@link #toString()} for equalities). */
+ 
+ public void diagconstructors(){
+  boolean flag=false;
+  java.lang.String num;
+  java.math.BigInteger bip;
+  java.math.BigInteger biz;
+  java.math.BigInteger bin;
+  com.ibm.math.BigDecimal bda;
+  com.ibm.math.BigDecimal bdb;
+  com.ibm.math.BigDecimal bmc;
+  com.ibm.math.BigDecimal bmd;
+  com.ibm.math.BigDecimal bme;
+  java.lang.RuntimeException e=null;
+  char ca[];
+  double dzer;
+  double dpos;
+  double dneg;
+  double dpos5;
+  double dneg5;
+  double dmin;
+  double dmax;
+  double d;
+  java.lang.String badstrings[];
+  int i=0;
+  
+  // constants [statically-called constructors]
+  (new com.ibm.math.DiagBigDecimal.Test("con001")).ok=(com.ibm.math.BigDecimal.ZERO.toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("con002")).ok=(com.ibm.math.BigDecimal.ONE.toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("con003")).ok=(com.ibm.math.BigDecimal.TEN.toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("con004")).ok=(com.ibm.math.BigDecimal.ZERO.intValueExact())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("con005")).ok=(com.ibm.math.BigDecimal.ONE.intValueExact())==1;
+  (new com.ibm.math.DiagBigDecimal.Test("con006")).ok=(com.ibm.math.BigDecimal.TEN.intValueExact())==10;
+  
+  // [java.math.] BigDecimal
+  (new com.ibm.math.DiagBigDecimal.Test("cbd001")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("0"))).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd002")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("1"))).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd003")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("10"))).toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd004")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("1000"))).toString()).equals("1000");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd005")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("10.0"))).toString()).equals("10.0");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd006")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("10.1"))).toString()).equals("10.1");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd007")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("-1.1"))).toString()).equals("-1.1");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd008")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("-9.0"))).toString()).equals("-9.0");
+  (new com.ibm.math.DiagBigDecimal.Test("cbd009")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("0.9"))).toString()).equals("0.9");
+  
+  num="123456789.123456789";
+  (new com.ibm.math.DiagBigDecimal.Test("cbd010")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="123456789.000000000";
+  (new com.ibm.math.DiagBigDecimal.Test("cbd011")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="123456789000000000";
+  (new com.ibm.math.DiagBigDecimal.Test("cbd012")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="0.00000123456789";
+  (new com.ibm.math.DiagBigDecimal.Test("cbd013")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="0.000000123456789";
+  (new com.ibm.math.DiagBigDecimal.Test("cbd014")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  
+  {try{checknull:do{
+   new com.ibm.math.BigDecimal((java.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $3){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("cbi015")).ok=flag;
+  
+  // BigInteger
+  bip=new BigInteger("987654321987654321987654321"); // biggie +ve
+  biz=new BigInteger("0"); // biggie 0
+  bin=new BigInteger("-12345678998765432112345678"); // biggie -ve
+  (new com.ibm.math.DiagBigDecimal.Test("cbi001")).ok=((new com.ibm.math.BigDecimal(bip)).toString()).equals(bip.toString());
+  (new com.ibm.math.DiagBigDecimal.Test("cbi002")).ok=((new com.ibm.math.BigDecimal(biz)).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cbi003")).ok=((new com.ibm.math.BigDecimal(bin)).toString()).equals(bin.toString());
+  {try{checknull:do{
+   new com.ibm.math.BigDecimal((java.math.BigInteger)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $4){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("cbi004")).ok=flag;
+  
+  // BigInteger with scale
+  bip=new BigInteger("123456789"); // bigish
+  bda=new com.ibm.math.BigDecimal(bip);
+  bdb=new com.ibm.math.BigDecimal(bip,5);
+  bmc=new com.ibm.math.BigDecimal(bip,15);
+  (new com.ibm.math.DiagBigDecimal.Test("cbs001")).ok=(bda.toString()).equals("123456789");
+  (new com.ibm.math.DiagBigDecimal.Test("cbs002")).ok=(bdb.toString()).equals("1234.56789");
+  (new com.ibm.math.DiagBigDecimal.Test("cbs003")).ok=(bmc.toString()).equals("0.000000123456789");
+  bip=new BigInteger("123456789123456789123456789"); // biggie
+  bda=new com.ibm.math.BigDecimal(bip);
+  bdb=new com.ibm.math.BigDecimal(bip,7);
+  bmc=new com.ibm.math.BigDecimal(bip,13);
+  bmd=new com.ibm.math.BigDecimal(bip,19);
+  bme=new com.ibm.math.BigDecimal(bip,29);
+  (new com.ibm.math.DiagBigDecimal.Test("cbs011")).ok=(bda.toString()).equals("123456789123456789123456789");
+  (new com.ibm.math.DiagBigDecimal.Test("cbs012")).ok=(bdb.toString()).equals("12345678912345678912.3456789");
+  (new com.ibm.math.DiagBigDecimal.Test("cbs013")).ok=(bmc.toString()).equals("12345678912345.6789123456789");
+  (new com.ibm.math.DiagBigDecimal.Test("cbs014")).ok=(bmd.toString()).equals("12345678.9123456789123456789");
+  (new com.ibm.math.DiagBigDecimal.Test("cbs015")).ok=(bme.toString()).equals("0.00123456789123456789123456789");
+  {try{checknull:do{
+   new com.ibm.math.BigDecimal((java.math.BigInteger)null,1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $5){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("cbs004")).ok=flag;
+  {try{checkscale:do{
+   new com.ibm.math.BigDecimal(bip,-8);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $6){e=$6;
+   flag=(e.getMessage()).equals("Negative scale: -8");
+  }}/*checkscale*/
+  (new com.ibm.math.DiagBigDecimal.Test("cbs005")).ok=flag;
+  
+  // char[]
+  // We just test it's there
+  // Functionality is tested by BigDecimal(String).
+  ca=("123.45").toCharArray();
+  (new com.ibm.math.DiagBigDecimal.Test("cca001")).ok=((new com.ibm.math.BigDecimal(ca)).toString()).equals("123.45");
+  {try{checknull:do{
+   new com.ibm.math.BigDecimal((char[])null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $7){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("cca010")).ok=flag;
+  
+  // char[],int,int
+  // We just test it's there, and that offsets work.
+  // Functionality is tested by BigDecimal(String).
+  ca=("123.45").toCharArray();
+  (new com.ibm.math.DiagBigDecimal.Test("cca101")).ok=((new com.ibm.math.BigDecimal(ca,0,6)).toString()).equals("123.45");
+  (new com.ibm.math.DiagBigDecimal.Test("cca102")).ok=((new com.ibm.math.BigDecimal(ca,1,5)).toString()).equals("23.45");
+  (new com.ibm.math.DiagBigDecimal.Test("cca103")).ok=((new com.ibm.math.BigDecimal(ca,2,4)).toString()).equals("3.45");
+  (new com.ibm.math.DiagBigDecimal.Test("cca104")).ok=((new com.ibm.math.BigDecimal(ca,3,3)).toString()).equals("0.45");
+  (new com.ibm.math.DiagBigDecimal.Test("cca105")).ok=((new com.ibm.math.BigDecimal(ca,4,2)).toString()).equals("45");
+  (new com.ibm.math.DiagBigDecimal.Test("cca106")).ok=((new com.ibm.math.BigDecimal(ca,5,1)).toString()).equals("5");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cca110")).ok=((new com.ibm.math.BigDecimal(ca,0,1)).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("cca111")).ok=((new com.ibm.math.BigDecimal(ca,1,1)).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("cca112")).ok=((new com.ibm.math.BigDecimal(ca,2,1)).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("cca113")).ok=((new com.ibm.math.BigDecimal(ca,4,1)).toString()).equals("4");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cca120")).ok=((new com.ibm.math.BigDecimal(ca,0,2)).toString()).equals("12");
+  (new com.ibm.math.DiagBigDecimal.Test("cca121")).ok=((new com.ibm.math.BigDecimal(ca,1,2)).toString()).equals("23");
+  (new com.ibm.math.DiagBigDecimal.Test("cca122")).ok=((new com.ibm.math.BigDecimal(ca,2,2)).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("cca123")).ok=((new com.ibm.math.BigDecimal(ca,3,2)).toString()).equals("0.4");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cca130")).ok=((new com.ibm.math.BigDecimal(ca,0,3)).toString()).equals("123");
+  (new com.ibm.math.DiagBigDecimal.Test("cca131")).ok=((new com.ibm.math.BigDecimal(ca,1,3)).toString()).equals("23");
+  (new com.ibm.math.DiagBigDecimal.Test("cca132")).ok=((new com.ibm.math.BigDecimal(ca,2,3)).toString()).equals("3.4");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cca140")).ok=((new com.ibm.math.BigDecimal(ca,0,4)).toString()).equals("123");
+  (new com.ibm.math.DiagBigDecimal.Test("cca141")).ok=((new com.ibm.math.BigDecimal(ca,1,4)).toString()).equals("23.4");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cca150")).ok=((new com.ibm.math.BigDecimal(ca,0,5)).toString()).equals("123.4");
+  
+  // a couple of oddies
+  ca=("x23.4x").toCharArray();
+  (new com.ibm.math.DiagBigDecimal.Test("cca160")).ok=((new com.ibm.math.BigDecimal(ca,1,4)).toString()).equals("23.4");
+  (new com.ibm.math.DiagBigDecimal.Test("cca161")).ok=((new com.ibm.math.BigDecimal(ca,1,1)).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("cca162")).ok=((new com.ibm.math.BigDecimal(ca,4,1)).toString()).equals("4");
+  
+  ca=("0123456789.9876543210").toCharArray();
+  (new com.ibm.math.DiagBigDecimal.Test("cca163")).ok=((new com.ibm.math.BigDecimal(ca,0,21)).toString()).equals("123456789.9876543210");
+  (new com.ibm.math.DiagBigDecimal.Test("cca164")).ok=((new com.ibm.math.BigDecimal(ca,1,20)).toString()).equals("123456789.9876543210");
+  (new com.ibm.math.DiagBigDecimal.Test("cca165")).ok=((new com.ibm.math.BigDecimal(ca,2,19)).toString()).equals("23456789.9876543210");
+  (new com.ibm.math.DiagBigDecimal.Test("cca166")).ok=((new com.ibm.math.BigDecimal(ca,2,18)).toString()).equals("23456789.987654321");
+  (new com.ibm.math.DiagBigDecimal.Test("cca167")).ok=((new com.ibm.math.BigDecimal(ca,2,17)).toString()).equals("23456789.98765432");
+  (new com.ibm.math.DiagBigDecimal.Test("cca168")).ok=((new com.ibm.math.BigDecimal(ca,2,16)).toString()).equals("23456789.9876543");
+  
+  {try{checknull:do{
+   new com.ibm.math.BigDecimal((char[])null,0,1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $8){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("cca200")).ok=flag;
+  
+  {try{checklen:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),0,0);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $9){
+   flag=true;
+  }}/*checklen*/
+  (new com.ibm.math.DiagBigDecimal.Test("cca201")).ok=flag;
+  
+  {try{checkbound:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),2,4);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $10){ // anything OK
+   flag=true;
+  }}/*checkbound*/
+  (new com.ibm.math.DiagBigDecimal.Test("cca202")).ok=flag;
+  {try{checkbound2:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),-1,2);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $11){ // anything OK
+   flag=true;
+  }}/*checkbound2*/
+  (new com.ibm.math.DiagBigDecimal.Test("cca203")).ok=flag;
+  {try{checkbound3:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),1,-2);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $12){ // anything OK
+   flag=true;
+  }}/*checkbound3*/
+  (new com.ibm.math.DiagBigDecimal.Test("cca204")).ok=flag;
+  
+  // double [deprecated]
+  // Note that many of these differ from the valueOf(double) results.
+  dzer=(double)0;
+  dpos=(double)1;
+  dpos=dpos/((double)10);
+  dneg=(double)-dpos;
+  (new com.ibm.math.DiagBigDecimal.Test("cdo001")).ok=((new com.ibm.math.BigDecimal(dneg)).toString()).equals("-0.1000000000000000055511151231257827021181583404541015625");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cdo002")).ok=((new com.ibm.math.BigDecimal(dzer)).toString()).equals("0"); // NB, not '0.0'
+  (new com.ibm.math.DiagBigDecimal.Test("cdo003")).ok=((new com.ibm.math.BigDecimal(dpos)).toString()).equals("0.1000000000000000055511151231257827021181583404541015625");
+  
+  dpos5=(double)0.5D;
+  dneg5=(double)-dpos5;
+  (new com.ibm.math.DiagBigDecimal.Test("cdo004")).ok=((new com.ibm.math.BigDecimal(dneg5)).toString()).equals("-0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("cdo005")).ok=((new com.ibm.math.BigDecimal(dpos5)).toString()).equals("0.5");
+  dmin=java.lang.Double.MIN_VALUE;
+  dmax=java.lang.Double.MAX_VALUE;
+  (new com.ibm.math.DiagBigDecimal.Test("cdo006")).ok=((new com.ibm.math.BigDecimal(dmin)).toString()).equals("0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359923797965646954457177309266567103559397963987747960107818781263007131903114045278458171678489821036887186360569987307230500063874091535649843873124733972731696151400317153853980741262385655911710266585566867681870395603106249319452715914924553293054565444011274801297099995419319894090804165633245247571478690147267801593552386115501348035264934720193790268107107491703332226844753335720832431936092382893458368060106011506169809753078342277318329247904982524730776375927247874656084778203734469699533647017972677717585125660551199131504891101451037862738167250955837389733598993664809941164205702637090279242767544565229087538682506419718265533447265625");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cdo007")).ok=((new com.ibm.math.BigDecimal(dmax)).toString()).equals("179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368");
+  
+  
+  // nasties
+  d=(double)9;
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo010")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.90000000000000002220446049250313080847263336181640625");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo011")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.0899999999999999966693309261245303787291049957275390625");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo012")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00899999999999999931998839741709161899052560329437255859375");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo013")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00089999999999999997536692664112933925935067236423492431640625");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo014")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00008999999999999999211568180168541175589780323207378387451171875");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo015")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00000899999999999999853394182236510090433512232266366481781005859375");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo016")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.000000899999999999999853394182236510090433512232266366481781005859375");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo017")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.0000000899999999999999853394182236510090433512232266366481781005859375");
+  
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("cdo018")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.000000008999999999999997872197332322678764437995369007694534957408905029296875");
+  
+  
+  {try{checkpin:do{
+   new com.ibm.math.BigDecimal(java.lang.Double.POSITIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $13){
+   flag=true;
+  }}/*checkpin*/
+  (new com.ibm.math.DiagBigDecimal.Test("cdo101")).ok=flag;
+  {try{checknin:do{
+   new com.ibm.math.BigDecimal(java.lang.Double.NEGATIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $14){
+   flag=true;
+  }}/*checknin*/
+  (new com.ibm.math.DiagBigDecimal.Test("cdo102")).ok=flag;
+  {try{checknan:do{
+   new com.ibm.math.BigDecimal(java.lang.Double.NaN);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $15){
+   flag=true;
+  }}/*checknan*/
+  (new com.ibm.math.DiagBigDecimal.Test("cdo103")).ok=flag;
+  
+  // int
+  (new com.ibm.math.DiagBigDecimal.Test("cin001")).ok=((new com.ibm.math.BigDecimal(imin)).toString()).equals("-2147483648");
+  (new com.ibm.math.DiagBigDecimal.Test("cin002")).ok=((new com.ibm.math.BigDecimal(imax)).toString()).equals("2147483647");
+  (new com.ibm.math.DiagBigDecimal.Test("cin003")).ok=((new com.ibm.math.BigDecimal(ineg)).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("cin004")).ok=((new com.ibm.math.BigDecimal(izer)).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cin005")).ok=((new com.ibm.math.BigDecimal(ipos)).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("cin006")).ok=((new com.ibm.math.BigDecimal(10)).toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("cin007")).ok=((new com.ibm.math.BigDecimal(9)).toString()).equals("9");
+  (new com.ibm.math.DiagBigDecimal.Test("cin008")).ok=((new com.ibm.math.BigDecimal(5)).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("cin009")).ok=((new com.ibm.math.BigDecimal(2)).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("cin010")).ok=((new com.ibm.math.BigDecimal(-2)).toString()).equals("-2");
+  (new com.ibm.math.DiagBigDecimal.Test("cin011")).ok=((new com.ibm.math.BigDecimal(-5)).toString()).equals("-5");
+  (new com.ibm.math.DiagBigDecimal.Test("cin012")).ok=((new com.ibm.math.BigDecimal(-9)).toString()).equals("-9");
+  (new com.ibm.math.DiagBigDecimal.Test("cin013")).ok=((new com.ibm.math.BigDecimal(-10)).toString()).equals("-10");
+  (new com.ibm.math.DiagBigDecimal.Test("cin014")).ok=((new com.ibm.math.BigDecimal(-11)).toString()).equals("-11");
+  (new com.ibm.math.DiagBigDecimal.Test("cin015")).ok=((new com.ibm.math.BigDecimal(-99)).toString()).equals("-99");
+  (new com.ibm.math.DiagBigDecimal.Test("cin016")).ok=((new com.ibm.math.BigDecimal(-100)).toString()).equals("-100");
+  (new com.ibm.math.DiagBigDecimal.Test("cin017")).ok=((new com.ibm.math.BigDecimal(-999)).toString()).equals("-999");
+  (new com.ibm.math.DiagBigDecimal.Test("cin018")).ok=((new com.ibm.math.BigDecimal(-1000)).toString()).equals("-1000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cin019")).ok=((new com.ibm.math.BigDecimal(11)).toString()).equals("11");
+  (new com.ibm.math.DiagBigDecimal.Test("cin020")).ok=((new com.ibm.math.BigDecimal(99)).toString()).equals("99");
+  (new com.ibm.math.DiagBigDecimal.Test("cin021")).ok=((new com.ibm.math.BigDecimal(100)).toString()).equals("100");
+  (new com.ibm.math.DiagBigDecimal.Test("cin022")).ok=((new com.ibm.math.BigDecimal(999)).toString()).equals("999");
+  (new com.ibm.math.DiagBigDecimal.Test("cin023")).ok=((new com.ibm.math.BigDecimal(1000)).toString()).equals("1000");
+  
+  // long
+  (new com.ibm.math.DiagBigDecimal.Test("clo001")).ok=((new com.ibm.math.BigDecimal(lmin)).toString()).equals("-9223372036854775808");
+  (new com.ibm.math.DiagBigDecimal.Test("clo002")).ok=((new com.ibm.math.BigDecimal(lmax)).toString()).equals("9223372036854775807");
+  (new com.ibm.math.DiagBigDecimal.Test("clo003")).ok=((new com.ibm.math.BigDecimal(lneg)).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("clo004")).ok=((new com.ibm.math.BigDecimal(lzer)).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("clo005")).ok=((new com.ibm.math.BigDecimal(lpos)).toString()).equals("1");
+  
+  // String [many more examples are elsewhere]
+  // strings without E cannot generate E in result
+  (new com.ibm.math.DiagBigDecimal.Test("cst001")).ok=((new com.ibm.math.BigDecimal("12")).toString()).equals("12");
+  (new com.ibm.math.DiagBigDecimal.Test("cst002")).ok=((new com.ibm.math.BigDecimal("-76")).toString()).equals("-76");
+  (new com.ibm.math.DiagBigDecimal.Test("cst003")).ok=((new com.ibm.math.BigDecimal("12.76")).toString()).equals("12.76");
+  (new com.ibm.math.DiagBigDecimal.Test("cst004")).ok=((new com.ibm.math.BigDecimal("+12.76")).toString()).equals("12.76");
+  (new com.ibm.math.DiagBigDecimal.Test("cst005")).ok=((new com.ibm.math.BigDecimal("012.76")).toString()).equals("12.76");
+  (new com.ibm.math.DiagBigDecimal.Test("cst006")).ok=((new com.ibm.math.BigDecimal("+0.003")).toString()).equals("0.003");
+  (new com.ibm.math.DiagBigDecimal.Test("cst007")).ok=((new com.ibm.math.BigDecimal("17.")).toString()).equals("17");
+  (new com.ibm.math.DiagBigDecimal.Test("cst008")).ok=((new com.ibm.math.BigDecimal(".5")).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("cst009")).ok=((new com.ibm.math.BigDecimal("044")).toString()).equals("44");
+  (new com.ibm.math.DiagBigDecimal.Test("cst010")).ok=((new com.ibm.math.BigDecimal("0044")).toString()).equals("44");
+  (new com.ibm.math.DiagBigDecimal.Test("cst011")).ok=((new com.ibm.math.BigDecimal("0.0005")).toString()).equals("0.0005");
+  (new com.ibm.math.DiagBigDecimal.Test("cst012")).ok=((new com.ibm.math.BigDecimal("00.00005")).toString()).equals("0.00005");
+  (new com.ibm.math.DiagBigDecimal.Test("cst013")).ok=((new com.ibm.math.BigDecimal("0.000005")).toString()).equals("0.000005");
+  (new com.ibm.math.DiagBigDecimal.Test("cst014")).ok=((new com.ibm.math.BigDecimal("0.0000005")).toString()).equals("0.0000005"); // \NR
+  (new com.ibm.math.DiagBigDecimal.Test("cst015")).ok=((new com.ibm.math.BigDecimal("0.00000005")).toString()).equals("0.00000005"); // \NR
+  (new com.ibm.math.DiagBigDecimal.Test("cst016")).ok=((new com.ibm.math.BigDecimal("12345678.876543210")).toString()).equals("12345678.876543210");
+  (new com.ibm.math.DiagBigDecimal.Test("cst017")).ok=((new com.ibm.math.BigDecimal("2345678.876543210")).toString()).equals("2345678.876543210");
+  (new com.ibm.math.DiagBigDecimal.Test("cst018")).ok=((new com.ibm.math.BigDecimal("345678.876543210")).toString()).equals("345678.876543210");
+  (new com.ibm.math.DiagBigDecimal.Test("cst019")).ok=((new com.ibm.math.BigDecimal("0345678.87654321")).toString()).equals("345678.87654321");
+  (new com.ibm.math.DiagBigDecimal.Test("cst020")).ok=((new com.ibm.math.BigDecimal("345678.8765432")).toString()).equals("345678.8765432");
+  (new com.ibm.math.DiagBigDecimal.Test("cst021")).ok=((new com.ibm.math.BigDecimal("+345678.8765432")).toString()).equals("345678.8765432");
+  (new com.ibm.math.DiagBigDecimal.Test("cst022")).ok=((new com.ibm.math.BigDecimal("+0345678.8765432")).toString()).equals("345678.8765432");
+  (new com.ibm.math.DiagBigDecimal.Test("cst023")).ok=((new com.ibm.math.BigDecimal("+00345678.8765432")).toString()).equals("345678.8765432");
+  (new com.ibm.math.DiagBigDecimal.Test("cst024")).ok=((new com.ibm.math.BigDecimal("-345678.8765432")).toString()).equals("-345678.8765432");
+  (new com.ibm.math.DiagBigDecimal.Test("cst025")).ok=((new com.ibm.math.BigDecimal("-0345678.8765432")).toString()).equals("-345678.8765432");
+  (new com.ibm.math.DiagBigDecimal.Test("cst026")).ok=((new com.ibm.math.BigDecimal("-00345678.8765432")).toString()).equals("-345678.8765432");
+  
+  // exotics --
+  (new com.ibm.math.DiagBigDecimal.Test("cst035")).ok=((new com.ibm.math.BigDecimal("\u0e57.\u0e50")).toString()).equals("7.0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst036")).ok=((new com.ibm.math.BigDecimal("\u0b66.\u0b67")).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst037")).ok=((new com.ibm.math.BigDecimal("\u0b66\u0b66")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst038")).ok=((new com.ibm.math.BigDecimal("\u0b6a\u0b66")).toString()).equals("40");
+  
+  // strings with E
+  (new com.ibm.math.DiagBigDecimal.Test("cst040")).ok=((new com.ibm.math.BigDecimal("1E+9")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst041")).ok=((new com.ibm.math.BigDecimal("1e+09")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst042")).ok=((new com.ibm.math.BigDecimal("1E+90")).toString()).equals("1E+90");
+  (new com.ibm.math.DiagBigDecimal.Test("cst043")).ok=((new com.ibm.math.BigDecimal("+1E+009")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst044")).ok=((new com.ibm.math.BigDecimal("0E+9")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst045")).ok=((new com.ibm.math.BigDecimal("1E+9")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst046")).ok=((new com.ibm.math.BigDecimal("1E+09")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst047")).ok=((new com.ibm.math.BigDecimal("1e+90")).toString()).equals("1E+90");
+  (new com.ibm.math.DiagBigDecimal.Test("cst048")).ok=((new com.ibm.math.BigDecimal("1E+009")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst049")).ok=((new com.ibm.math.BigDecimal("0E+9")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst050")).ok=((new com.ibm.math.BigDecimal("1E9")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst051")).ok=((new com.ibm.math.BigDecimal("1e09")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst052")).ok=((new com.ibm.math.BigDecimal("1E90")).toString()).equals("1E+90");
+  (new com.ibm.math.DiagBigDecimal.Test("cst053")).ok=((new com.ibm.math.BigDecimal("1E009")).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst054")).ok=((new com.ibm.math.BigDecimal("0E9")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst055")).ok=((new com.ibm.math.BigDecimal("0.000e+0")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst056")).ok=((new com.ibm.math.BigDecimal("0.000E-1")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst057")).ok=((new com.ibm.math.BigDecimal("4E+9")).toString()).equals("4E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst058")).ok=((new com.ibm.math.BigDecimal("44E+9")).toString()).equals("4.4E+10");
+  (new com.ibm.math.DiagBigDecimal.Test("cst059")).ok=((new com.ibm.math.BigDecimal("0.73e-7")).toString()).equals("7.3E-8");
+  (new com.ibm.math.DiagBigDecimal.Test("cst060")).ok=((new com.ibm.math.BigDecimal("00E+9")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst061")).ok=((new com.ibm.math.BigDecimal("00E-9")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cst062")).ok=((new com.ibm.math.BigDecimal("10E+9")).toString()).equals("1.0E+10");
+  (new com.ibm.math.DiagBigDecimal.Test("cst063")).ok=((new com.ibm.math.BigDecimal("10E+09")).toString()).equals("1.0E+10");
+  (new com.ibm.math.DiagBigDecimal.Test("cst064")).ok=((new com.ibm.math.BigDecimal("10e+90")).toString()).equals("1.0E+91");
+  (new com.ibm.math.DiagBigDecimal.Test("cst065")).ok=((new com.ibm.math.BigDecimal("10E+009")).toString()).equals("1.0E+10");
+  (new com.ibm.math.DiagBigDecimal.Test("cst066")).ok=((new com.ibm.math.BigDecimal("100e+9")).toString()).equals("1.00E+11");
+  (new com.ibm.math.DiagBigDecimal.Test("cst067")).ok=((new com.ibm.math.BigDecimal("100e+09")).toString()).equals("1.00E+11");
+  (new com.ibm.math.DiagBigDecimal.Test("cst068")).ok=((new com.ibm.math.BigDecimal("100E+90")).toString()).equals("1.00E+92");
+  (new com.ibm.math.DiagBigDecimal.Test("cst069")).ok=((new com.ibm.math.BigDecimal("100e+009")).toString()).equals("1.00E+11");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cst070")).ok=((new com.ibm.math.BigDecimal("1.265")).toString()).equals("1.265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst071")).ok=((new com.ibm.math.BigDecimal("1.265E-20")).toString()).equals("1.265E-20");
+  (new com.ibm.math.DiagBigDecimal.Test("cst072")).ok=((new com.ibm.math.BigDecimal("1.265E-8")).toString()).equals("1.265E-8");
+  (new com.ibm.math.DiagBigDecimal.Test("cst073")).ok=((new com.ibm.math.BigDecimal("1.265E-4")).toString()).equals("1.265E-4");
+  (new com.ibm.math.DiagBigDecimal.Test("cst074")).ok=((new com.ibm.math.BigDecimal("1.265E-3")).toString()).equals("1.265E-3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst075")).ok=((new com.ibm.math.BigDecimal("1.265E-2")).toString()).equals("1.265E-2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst076")).ok=((new com.ibm.math.BigDecimal("1.265E-1")).toString()).equals("1.265E-1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst077")).ok=((new com.ibm.math.BigDecimal("1.265E-0")).toString()).equals("1.265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst078")).ok=((new com.ibm.math.BigDecimal("1.265E+1")).toString()).equals("1.265E+1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst079")).ok=((new com.ibm.math.BigDecimal("1.265E+2")).toString()).equals("1.265E+2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst080")).ok=((new com.ibm.math.BigDecimal("1.265E+3")).toString()).equals("1.265E+3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst081")).ok=((new com.ibm.math.BigDecimal("1.265E+4")).toString()).equals("1.265E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("cst082")).ok=((new com.ibm.math.BigDecimal("1.265E+8")).toString()).equals("1.265E+8");
+  (new com.ibm.math.DiagBigDecimal.Test("cst083")).ok=((new com.ibm.math.BigDecimal("1.265E+20")).toString()).equals("1.265E+20");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cst090")).ok=((new com.ibm.math.BigDecimal("12.65")).toString()).equals("12.65");
+  (new com.ibm.math.DiagBigDecimal.Test("cst091")).ok=((new com.ibm.math.BigDecimal("12.65E-20")).toString()).equals("1.265E-19");
+  (new com.ibm.math.DiagBigDecimal.Test("cst092")).ok=((new com.ibm.math.BigDecimal("12.65E-8")).toString()).equals("1.265E-7");
+  (new com.ibm.math.DiagBigDecimal.Test("cst093")).ok=((new com.ibm.math.BigDecimal("12.65E-4")).toString()).equals("1.265E-3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst094")).ok=((new com.ibm.math.BigDecimal("12.65E-3")).toString()).equals("1.265E-2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst095")).ok=((new com.ibm.math.BigDecimal("12.65E-2")).toString()).equals("1.265E-1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst096")).ok=((new com.ibm.math.BigDecimal("12.65E-1")).toString()).equals("1.265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst097")).ok=((new com.ibm.math.BigDecimal("12.65E-0")).toString()).equals("1.265E+1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst098")).ok=((new com.ibm.math.BigDecimal("12.65E+1")).toString()).equals("1.265E+2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst099")).ok=((new com.ibm.math.BigDecimal("12.65E+2")).toString()).equals("1.265E+3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst100")).ok=((new com.ibm.math.BigDecimal("12.65E+3")).toString()).equals("1.265E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("cst101")).ok=((new com.ibm.math.BigDecimal("12.65E+4")).toString()).equals("1.265E+5");
+  (new com.ibm.math.DiagBigDecimal.Test("cst102")).ok=((new com.ibm.math.BigDecimal("12.65E+8")).toString()).equals("1.265E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst103")).ok=((new com.ibm.math.BigDecimal("12.65E+20")).toString()).equals("1.265E+21");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cst110")).ok=((new com.ibm.math.BigDecimal("126.5")).toString()).equals("126.5");
+  (new com.ibm.math.DiagBigDecimal.Test("cst111")).ok=((new com.ibm.math.BigDecimal("126.5E-20")).toString()).equals("1.265E-18");
+  (new com.ibm.math.DiagBigDecimal.Test("cst112")).ok=((new com.ibm.math.BigDecimal("126.5E-8")).toString()).equals("1.265E-6");
+  (new com.ibm.math.DiagBigDecimal.Test("cst113")).ok=((new com.ibm.math.BigDecimal("126.5E-4")).toString()).equals("1.265E-2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst114")).ok=((new com.ibm.math.BigDecimal("126.5E-3")).toString()).equals("1.265E-1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst115")).ok=((new com.ibm.math.BigDecimal("126.5E-2")).toString()).equals("1.265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst116")).ok=((new com.ibm.math.BigDecimal("126.5E-1")).toString()).equals("1.265E+1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst117")).ok=((new com.ibm.math.BigDecimal("126.5E-0")).toString()).equals("1.265E+2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst118")).ok=((new com.ibm.math.BigDecimal("126.5E+1")).toString()).equals("1.265E+3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst119")).ok=((new com.ibm.math.BigDecimal("126.5E+2")).toString()).equals("1.265E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("cst120")).ok=((new com.ibm.math.BigDecimal("126.5E+3")).toString()).equals("1.265E+5");
+  (new com.ibm.math.DiagBigDecimal.Test("cst121")).ok=((new com.ibm.math.BigDecimal("126.5E+4")).toString()).equals("1.265E+6");
+  (new com.ibm.math.DiagBigDecimal.Test("cst122")).ok=((new com.ibm.math.BigDecimal("126.5E+8")).toString()).equals("1.265E+10");
+  (new com.ibm.math.DiagBigDecimal.Test("cst123")).ok=((new com.ibm.math.BigDecimal("126.5E+20")).toString()).equals("1.265E+22");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cst130")).ok=((new com.ibm.math.BigDecimal("1265")).toString()).equals("1265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst131")).ok=((new com.ibm.math.BigDecimal("1265E-20")).toString()).equals("1.265E-17");
+  (new com.ibm.math.DiagBigDecimal.Test("cst132")).ok=((new com.ibm.math.BigDecimal("1265E-8")).toString()).equals("1.265E-5");
+  (new com.ibm.math.DiagBigDecimal.Test("cst133")).ok=((new com.ibm.math.BigDecimal("1265E-4")).toString()).equals("1.265E-1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst134")).ok=((new com.ibm.math.BigDecimal("1265E-3")).toString()).equals("1.265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst135")).ok=((new com.ibm.math.BigDecimal("1265E-2")).toString()).equals("1.265E+1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst136")).ok=((new com.ibm.math.BigDecimal("1265E-1")).toString()).equals("1.265E+2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst137")).ok=((new com.ibm.math.BigDecimal("1265E-0")).toString()).equals("1.265E+3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst138")).ok=((new com.ibm.math.BigDecimal("1265E+1")).toString()).equals("1.265E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("cst139")).ok=((new com.ibm.math.BigDecimal("1265E+2")).toString()).equals("1.265E+5");
+  (new com.ibm.math.DiagBigDecimal.Test("cst140")).ok=((new com.ibm.math.BigDecimal("1265E+3")).toString()).equals("1.265E+6");
+  (new com.ibm.math.DiagBigDecimal.Test("cst141")).ok=((new com.ibm.math.BigDecimal("1265E+4")).toString()).equals("1.265E+7");
+  (new com.ibm.math.DiagBigDecimal.Test("cst142")).ok=((new com.ibm.math.BigDecimal("1265E+8")).toString()).equals("1.265E+11");
+  (new com.ibm.math.DiagBigDecimal.Test("cst143")).ok=((new com.ibm.math.BigDecimal("1265E+20")).toString()).equals("1.265E+23");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cst150")).ok=((new com.ibm.math.BigDecimal("0.1265")).toString()).equals("0.1265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst151")).ok=((new com.ibm.math.BigDecimal("0.1265E-20")).toString()).equals("1.265E-21");
+  (new com.ibm.math.DiagBigDecimal.Test("cst152")).ok=((new com.ibm.math.BigDecimal("0.1265E-8")).toString()).equals("1.265E-9");
+  (new com.ibm.math.DiagBigDecimal.Test("cst153")).ok=((new com.ibm.math.BigDecimal("0.1265E-4")).toString()).equals("1.265E-5");
+  (new com.ibm.math.DiagBigDecimal.Test("cst154")).ok=((new com.ibm.math.BigDecimal("0.1265E-3")).toString()).equals("1.265E-4");
+  (new com.ibm.math.DiagBigDecimal.Test("cst155")).ok=((new com.ibm.math.BigDecimal("0.1265E-2")).toString()).equals("1.265E-3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst156")).ok=((new com.ibm.math.BigDecimal("0.1265E-1")).toString()).equals("1.265E-2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst157")).ok=((new com.ibm.math.BigDecimal("0.1265E-0")).toString()).equals("1.265E-1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst158")).ok=((new com.ibm.math.BigDecimal("0.1265E+1")).toString()).equals("1.265");
+  (new com.ibm.math.DiagBigDecimal.Test("cst159")).ok=((new com.ibm.math.BigDecimal("0.1265E+2")).toString()).equals("1.265E+1");
+  (new com.ibm.math.DiagBigDecimal.Test("cst160")).ok=((new com.ibm.math.BigDecimal("0.1265E+3")).toString()).equals("1.265E+2");
+  (new com.ibm.math.DiagBigDecimal.Test("cst161")).ok=((new com.ibm.math.BigDecimal("0.1265E+4")).toString()).equals("1.265E+3");
+  (new com.ibm.math.DiagBigDecimal.Test("cst162")).ok=((new com.ibm.math.BigDecimal("0.1265E+8")).toString()).equals("1.265E+7");
+  (new com.ibm.math.DiagBigDecimal.Test("cst163")).ok=((new com.ibm.math.BigDecimal("0.1265E+20")).toString()).equals("1.265E+19");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cst170")).ok=((new com.ibm.math.BigDecimal("0.09e999999999")).toString()).equals("9E+999999997");
+  (new com.ibm.math.DiagBigDecimal.Test("cst171")).ok=((new com.ibm.math.BigDecimal("0.9e999999999")).toString()).equals("9E+999999998");
+  (new com.ibm.math.DiagBigDecimal.Test("cst172")).ok=((new com.ibm.math.BigDecimal("9e999999999")).toString()).equals("9E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("cst173")).ok=((new com.ibm.math.BigDecimal("9.9e999999999")).toString()).equals("9.9E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("cst174")).ok=((new com.ibm.math.BigDecimal("9.99e999999999")).toString()).equals("9.99E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("cst175")).ok=((new com.ibm.math.BigDecimal("9.99e-999999999")).toString()).equals("9.99E-999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("cst176")).ok=((new com.ibm.math.BigDecimal("9.9e-999999999")).toString()).equals("9.9E-999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("cst177")).ok=((new com.ibm.math.BigDecimal("9e-999999999")).toString()).equals("9E-999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("cst179")).ok=((new com.ibm.math.BigDecimal("99e-999999999")).toString()).equals("9.9E-999999998");
+  (new com.ibm.math.DiagBigDecimal.Test("cst180")).ok=((new com.ibm.math.BigDecimal("999e-999999999")).toString()).equals("9.99E-999999997");
+  
+  // baddies --
+  badstrings=new java.lang.String[]{"1..2",".","..","++1","--1","-+1","+-1","12e","12e++","12f4"," +1","+ 1","12 "," + 1"," - 1 ","x","-1-","12-","3+","","1e-","7e1000000000","","e100","\u0e5a","\u0b65","99e999999999","999e999999999","0.9e-999999999","0.09e-999999999","0.1e1000000000","10e-1000000000","0.9e9999999999","99e-9999999999","111e9999999999","1111e-9999999999"+" "+"111e*123","111e123-","111e+12+","111e1-3-","111e1*23","111e1e+3","1e1.0","1e123e","ten","ONE","1e.1","1e1.","1ee","e+1"}; // 200-203
+  // 204-207
+  // 208-211
+  // 211-214
+  // 215-219
+  // 220-222
+  // 223-224
+  // 225-226
+  // 227-228
+  // 229-230
+  // 231-232
+  // 233-234
+  // 235-237
+  // 238-240
+  // 241-244
+  // 245-248
+  
+  // watch out for commas on continuation lines
+  
+  {int $16=badstrings.length;i=0;i:for(;$16>0;$16--,i++){
+   {try{
+    new com.ibm.math.BigDecimal(badstrings[i]);
+    say(">>> cst"+(200+i)+":"+" "+badstrings[i]+" "+(new com.ibm.math.BigDecimal(badstrings[i])).toString());
+    flag=false;
+   }
+   catch (java.lang.NumberFormatException $17){
+    flag=true;
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("cst"+(200+i))).ok=flag;
+   }
+  }/*i*/
+  
+  {try{checknull:do{
+   new com.ibm.math.BigDecimal((java.lang.String)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $18){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("cst301")).ok=flag;
+  
+  summary("Constructors");
+  return;
+  }
+
+ /** Mutation tests (checks that contents of constant objects are unchanged). */
+ 
+ public void diagmutation(){
+  /* ---------------------------------------------------------------- */
+  /* Final tests -- check constants haven't mutated                   */
+  /*             -- also that MC objects haven't mutated              */
+  /* ---------------------------------------------------------------- */
+  (new com.ibm.math.DiagBigDecimal.Test("cuc001")).ok=(com.ibm.math.BigDecimal.ZERO.toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("cuc002")).ok=(com.ibm.math.BigDecimal.ONE.toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("cuc003")).ok=(com.ibm.math.BigDecimal.TEN.toString()).equals("10");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cuc010")).ok=com.ibm.math.BigDecimal.ROUND_CEILING==com.ibm.math.MathContext.ROUND_CEILING;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc011")).ok=com.ibm.math.BigDecimal.ROUND_DOWN==com.ibm.math.MathContext.ROUND_DOWN;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc012")).ok=com.ibm.math.BigDecimal.ROUND_FLOOR==com.ibm.math.MathContext.ROUND_FLOOR;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc013")).ok=com.ibm.math.BigDecimal.ROUND_HALF_DOWN==com.ibm.math.MathContext.ROUND_HALF_DOWN;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc014")).ok=com.ibm.math.BigDecimal.ROUND_HALF_EVEN==com.ibm.math.MathContext.ROUND_HALF_EVEN;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc015")).ok=com.ibm.math.BigDecimal.ROUND_HALF_UP==com.ibm.math.MathContext.ROUND_HALF_UP;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc016")).ok=com.ibm.math.BigDecimal.ROUND_UNNECESSARY==com.ibm.math.MathContext.ROUND_UNNECESSARY;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc017")).ok=com.ibm.math.BigDecimal.ROUND_UP==com.ibm.math.MathContext.ROUND_UP;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cuc020")).ok=(com.ibm.math.MathContext.DEFAULT.getDigits())==9;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc021")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc022")).ok=(com.ibm.math.MathContext.DEFAULT.getLostDigits()?1:0)==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc023")).ok=(com.ibm.math.MathContext.DEFAULT.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  // mc9  =MathContext(9)
+  // mcld =MathContext(9, SCIENTIFIC, 1)
+  // mcfd =MathContext(0, PLAIN)
+  (new com.ibm.math.DiagBigDecimal.Test("cuc030")).ok=(mc9.getDigits())==9;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc031")).ok=(mc9.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc032")).ok=(mc9.getLostDigits()?1:0)==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc033")).ok=(mc9.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc034")).ok=(mcld.getDigits())==9;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc035")).ok=(mcld.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc036")).ok=(mcld.getLostDigits()?1:0)==1;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc037")).ok=(mcld.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc038")).ok=(mcfd.getDigits())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc039")).ok=(mcfd.getForm())==com.ibm.math.MathContext.PLAIN;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc040")).ok=(mcfd.getLostDigits()?1:0)==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cuc041")).ok=(mcfd.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  summary("No mutation");
+  return;}
+
+ 
+ /* ----------------------------------------------------------------- */
+ /* Operator test methods                                             */
+ /* ----------------------------------------------------------------- */
+ // The use of context in these tests are primarily to show that they
+ // are correctly passed to the methods, except that we check that
+ // each method checks for lostDigits.
+ 
+ /** Test the {@link BigDecimal#abs} method. */
+ 
+ public void diagabs(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  // most of the function of this is tested by add
+  (new com.ibm.math.DiagBigDecimal.Test("abs001")).ok=((new com.ibm.math.BigDecimal("2")).abs().toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("abs002")).ok=((new com.ibm.math.BigDecimal("-2")).abs().toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("abs003")).ok=((new com.ibm.math.BigDecimal("+0.000")).abs().toString()).equals("0.000");
+  (new com.ibm.math.DiagBigDecimal.Test("abs004")).ok=((new com.ibm.math.BigDecimal("00.000")).abs().toString()).equals("0.000");
+  (new com.ibm.math.DiagBigDecimal.Test("abs005")).ok=((new com.ibm.math.BigDecimal("-0.000")).abs().toString()).equals("0.000");
+  (new com.ibm.math.DiagBigDecimal.Test("abs006")).ok=((new com.ibm.math.BigDecimal("+0.000")).abs(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("abs007")).ok=((new com.ibm.math.BigDecimal("00.000")).abs(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("abs008")).ok=((new com.ibm.math.BigDecimal("-0.000")).abs(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("abs009")).ok=((new com.ibm.math.BigDecimal("-2000000")).abs().toString()).equals("2000000");
+  (new com.ibm.math.DiagBigDecimal.Test("abs010")).ok=((new com.ibm.math.BigDecimal("-2000000")).abs(mcdef).toString()).equals("2000000");
+  (new com.ibm.math.DiagBigDecimal.Test("abs011")).ok=((new com.ibm.math.BigDecimal("-2000000")).abs(mc6).toString()).equals("2.00000E+6");
+  (new com.ibm.math.DiagBigDecimal.Test("abs012")).ok=((new com.ibm.math.BigDecimal("2000000")).abs(mc6).toString()).equals("2.00000E+6");
+  (new com.ibm.math.DiagBigDecimal.Test("abs013")).ok=((new com.ibm.math.BigDecimal("0.2")).abs().toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("abs014")).ok=((new com.ibm.math.BigDecimal("-0.2")).abs().toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("abs015")).ok=((new com.ibm.math.BigDecimal("0.01")).abs().toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("abs016")).ok=((new com.ibm.math.BigDecimal("-0.01")).abs().toString()).equals("0.01");
+  {try{checkdigits:do{
+   tenlong.abs(mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $19){ae=$19;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("abs020")).ok=flag;
+  // check lostdigits not raised if digits=0 [monadic method]
+  {try{checkdigits:do{
+   tenlong.abs(mcld0);
+   flag=true;
+  }while(false);}
+  catch (java.lang.ArithmeticException $20){ae=$20;
+   flag=false;
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("abs021")).ok=flag;
+  {try{checknull:do{
+   com.ibm.math.BigDecimal.TEN.abs((com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $21){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("abs022")).ok=flag;
+  
+  summary("abs");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#add} method. */
+ 
+ public void diagadd(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal alhs;
+  com.ibm.math.BigDecimal arhs;
+  java.lang.ArithmeticException ae=null;
+  
+  // [first group are 'quick confidence check']
+  (new com.ibm.math.DiagBigDecimal.Test("add001")).ok=((new com.ibm.math.BigDecimal(2)).add(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("add003")).ok=((new com.ibm.math.BigDecimal("5.75")).add(new com.ibm.math.BigDecimal("3.3"),mcdef).toString()).equals("9.05");
+  (new com.ibm.math.DiagBigDecimal.Test("add004")).ok=((new com.ibm.math.BigDecimal("5")).add(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("add005")).ok=((new com.ibm.math.BigDecimal("-5")).add(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("-8");
+  (new com.ibm.math.DiagBigDecimal.Test("add006")).ok=((new com.ibm.math.BigDecimal("-7")).add(new com.ibm.math.BigDecimal("2.5"),mcdef).toString()).equals("-4.5");
+  (new com.ibm.math.DiagBigDecimal.Test("add007")).ok=((new com.ibm.math.BigDecimal("0.7")).add(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("add008")).ok=((new com.ibm.math.BigDecimal("1.25")).add(new com.ibm.math.BigDecimal("1.25"),mcdef).toString()).equals("2.50");
+  (new com.ibm.math.DiagBigDecimal.Test("add009")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000000"),mcdef).toString()).equals("2.23456789");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add010")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000011"),mcdef).toString()).equals("2.23456800");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add011")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555555"),mcdef).toString()).equals("1.00000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add012")).ok=((new com.ibm.math.BigDecimal("0.4444444440")).add(new com.ibm.math.BigDecimal("0.5555555555"),mcdef).toString()).equals("1.00000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add013")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555550"),mcdef).toString()).equals("0.999999999");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add014")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).add(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444444");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add015")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).add(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444445");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add016")).ok=((new com.ibm.math.BigDecimal("70")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add017")).ok=((new com.ibm.math.BigDecimal("700")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add018")).ok=((new com.ibm.math.BigDecimal("7000")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add019")).ok=((new com.ibm.math.BigDecimal("70000")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000001E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add020")).ok=((new com.ibm.math.BigDecimal("700000")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000007E+13");
+  
+  
+  // [Now the same group with fixed arithmetic]
+  (new com.ibm.math.DiagBigDecimal.Test("add030")).ok=((new com.ibm.math.BigDecimal(2)).add(new com.ibm.math.BigDecimal(3)).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("add031")).ok=((new com.ibm.math.BigDecimal("5.75")).add(new com.ibm.math.BigDecimal("3.3")).toString()).equals("9.05");
+  (new com.ibm.math.DiagBigDecimal.Test("add032")).ok=((new com.ibm.math.BigDecimal("5")).add(new com.ibm.math.BigDecimal("-3")).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("add033")).ok=((new com.ibm.math.BigDecimal("-5")).add(new com.ibm.math.BigDecimal("-3")).toString()).equals("-8");
+  (new com.ibm.math.DiagBigDecimal.Test("add034")).ok=((new com.ibm.math.BigDecimal("-7")).add(new com.ibm.math.BigDecimal("2.5")).toString()).equals("-4.5");
+  (new com.ibm.math.DiagBigDecimal.Test("add035")).ok=((new com.ibm.math.BigDecimal("0.7")).add(new com.ibm.math.BigDecimal("0.3")).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("add036")).ok=((new com.ibm.math.BigDecimal("1.25")).add(new com.ibm.math.BigDecimal("1.25")).toString()).equals("2.50");
+  (new com.ibm.math.DiagBigDecimal.Test("add037")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000000")).toString()).equals("2.23456789");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add038")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000011")).toString()).equals("2.23456800");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add039")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555555")).toString()).equals("0.9999999999");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add040")).ok=((new com.ibm.math.BigDecimal("0.4444444440")).add(new com.ibm.math.BigDecimal("0.5555555555")).toString()).equals("0.9999999995");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add041")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555550")).toString()).equals("0.9999999994");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add042")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).add(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444444999");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add043")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).add(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444445000");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add044")).ok=((new com.ibm.math.BigDecimal("70")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000000070");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add045")).ok=((new com.ibm.math.BigDecimal("700")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000000700");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add046")).ok=((new com.ibm.math.BigDecimal("7000")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000007000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add047")).ok=((new com.ibm.math.BigDecimal("70000")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000070000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add048")).ok=((new com.ibm.math.BigDecimal("700000")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000700000");
+  
+  
+  // symmetry:
+  (new com.ibm.math.DiagBigDecimal.Test("add049")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add050")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add051")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("7000"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add052")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("1.00000001E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add053")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700000"),mcdef).toString()).equals("1.00000007E+13");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add054")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70")).toString()).equals("10000000000070");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add055")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700")).toString()).equals("10000000000700");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add056")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("7000")).toString()).equals("10000000007000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add057")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000")).toString()).equals("10000000070000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add058")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700000")).toString()).equals("10000000700000");
+  
+  // some rounding effects
+  (new com.ibm.math.DiagBigDecimal.Test("add059")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0000")).toString()).equals("0.9998");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add060")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0001")).toString()).equals("0.9999");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add061")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0002")).toString()).equals("1.0000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add062")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0003")).toString()).equals("1.0001");
+  
+  
+  // MC
+  (new com.ibm.math.DiagBigDecimal.Test("add070")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mcfd).toString()).equals("10000000070000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add071")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("1.00000001E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add072")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mc6).toString()).equals("1.00000E+13");
+  
+  
+  // zero preservation
+  (new com.ibm.math.DiagBigDecimal.Test("add080")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.0001"),mc6).toString()).equals("1.0001");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add081")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.00001"),mc6).toString()).equals("1.00001");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add082")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.000001"),mc6).toString()).equals("1.00000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add083")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.0000001"),mc6).toString()).equals("1.00000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add084")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.00000001"),mc6).toString()).equals("1.00000");
+  
+  
+  // more fixed, LHS swaps
+  (new com.ibm.math.DiagBigDecimal.Test("add090")).ok=((new com.ibm.math.BigDecimal("-56267E-10")).add(zero).toString()).equals("-0.0000056267");
+  (new com.ibm.math.DiagBigDecimal.Test("add091")).ok=((new com.ibm.math.BigDecimal("-56267E-6")).add(zero).toString()).equals("-0.056267");
+  (new com.ibm.math.DiagBigDecimal.Test("add092")).ok=((new com.ibm.math.BigDecimal("-56267E-5")).add(zero).toString()).equals("-0.56267");
+  (new com.ibm.math.DiagBigDecimal.Test("add093")).ok=((new com.ibm.math.BigDecimal("-56267E-4")).add(zero).toString()).equals("-5.6267");
+  (new com.ibm.math.DiagBigDecimal.Test("add094")).ok=((new com.ibm.math.BigDecimal("-56267E-3")).add(zero).toString()).equals("-56.267");
+  (new com.ibm.math.DiagBigDecimal.Test("add095")).ok=((new com.ibm.math.BigDecimal("-56267E-2")).add(zero).toString()).equals("-562.67");
+  (new com.ibm.math.DiagBigDecimal.Test("add096")).ok=((new com.ibm.math.BigDecimal("-56267E-1")).add(zero).toString()).equals("-5626.7");
+  (new com.ibm.math.DiagBigDecimal.Test("add097")).ok=((new com.ibm.math.BigDecimal("-56267E-0")).add(zero).toString()).equals("-56267");
+  (new com.ibm.math.DiagBigDecimal.Test("add098")).ok=((new com.ibm.math.BigDecimal("-5E-10")).add(zero).toString()).equals("-0.0000000005");
+  (new com.ibm.math.DiagBigDecimal.Test("add099")).ok=((new com.ibm.math.BigDecimal("-5E-5")).add(zero).toString()).equals("-0.00005");
+  (new com.ibm.math.DiagBigDecimal.Test("add100")).ok=((new com.ibm.math.BigDecimal("-5E-1")).add(zero).toString()).equals("-0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("add101")).ok=((new com.ibm.math.BigDecimal("-5E-10")).add(zero).toString()).equals("-0.0000000005");
+  (new com.ibm.math.DiagBigDecimal.Test("add102")).ok=((new com.ibm.math.BigDecimal("-5E-5")).add(zero).toString()).equals("-0.00005");
+  (new com.ibm.math.DiagBigDecimal.Test("add103")).ok=((new com.ibm.math.BigDecimal("-5E-1")).add(zero).toString()).equals("-0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("add104")).ok=((new com.ibm.math.BigDecimal("-5E10")).add(zero).toString()).equals("-50000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("add105")).ok=((new com.ibm.math.BigDecimal("-5E5")).add(zero).toString()).equals("-500000");
+  (new com.ibm.math.DiagBigDecimal.Test("add106")).ok=((new com.ibm.math.BigDecimal("-5E1")).add(zero).toString()).equals("-50");
+  (new com.ibm.math.DiagBigDecimal.Test("add107")).ok=((new com.ibm.math.BigDecimal("-5E0")).add(zero).toString()).equals("-5");
+  
+  // more fixed, RHS swaps
+  (new com.ibm.math.DiagBigDecimal.Test("add108")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-10")).toString()).equals("-0.0000056267");
+  (new com.ibm.math.DiagBigDecimal.Test("add109")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-6")).toString()).equals("-0.056267");
+  (new com.ibm.math.DiagBigDecimal.Test("add110")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-5")).toString()).equals("-0.56267");
+  (new com.ibm.math.DiagBigDecimal.Test("add111")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-4")).toString()).equals("-5.6267");
+  (new com.ibm.math.DiagBigDecimal.Test("add112")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-3")).toString()).equals("-56.267");
+  (new com.ibm.math.DiagBigDecimal.Test("add113")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-2")).toString()).equals("-562.67");
+  (new com.ibm.math.DiagBigDecimal.Test("add114")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-1")).toString()).equals("-5626.7");
+  (new com.ibm.math.DiagBigDecimal.Test("add115")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-0")).toString()).equals("-56267");
+  (new com.ibm.math.DiagBigDecimal.Test("add116")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-10")).toString()).equals("-0.0000000005");
+  (new com.ibm.math.DiagBigDecimal.Test("add117")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-5")).toString()).equals("-0.00005");
+  (new com.ibm.math.DiagBigDecimal.Test("add118")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-1")).toString()).equals("-0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("add129")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-10")).toString()).equals("-0.0000000005");
+  (new com.ibm.math.DiagBigDecimal.Test("add130")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-5")).toString()).equals("-0.00005");
+  (new com.ibm.math.DiagBigDecimal.Test("add131")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-1")).toString()).equals("-0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("add132")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E10")).toString()).equals("-50000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("add133")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E5")).toString()).equals("-500000");
+  (new com.ibm.math.DiagBigDecimal.Test("add134")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E1")).toString()).equals("-50");
+  (new com.ibm.math.DiagBigDecimal.Test("add135")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E0")).toString()).equals("-5");
+  
+  // [some of the next group are really constructor tests]
+  (new com.ibm.math.DiagBigDecimal.Test("add140")).ok=((new com.ibm.math.BigDecimal("00.0")).add(new com.ibm.math.BigDecimal("0.00"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("add141")).ok=((new com.ibm.math.BigDecimal("0.00")).add(new com.ibm.math.BigDecimal("00.0"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("add142")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.3");
+  (new com.ibm.math.DiagBigDecimal.Test("add143")).ok=((new com.ibm.math.BigDecimal("3.")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.3");
+  (new com.ibm.math.DiagBigDecimal.Test("add144")).ok=((new com.ibm.math.BigDecimal("3.0")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.3");
+  (new com.ibm.math.DiagBigDecimal.Test("add145")).ok=((new com.ibm.math.BigDecimal("3.00")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.30");
+  (new com.ibm.math.DiagBigDecimal.Test("add146")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("6");
+  (new com.ibm.math.DiagBigDecimal.Test("add147")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("+3"),mcdef).toString()).equals("6");
+  (new com.ibm.math.DiagBigDecimal.Test("add148")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("add149")).ok=((new com.ibm.math.BigDecimal("0.03")).add(new com.ibm.math.BigDecimal("-0.03"),mcdef).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add150")).ok=((new com.ibm.math.BigDecimal("00.0")).add(new com.ibm.math.BigDecimal("0.00")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("add151")).ok=((new com.ibm.math.BigDecimal("0.00")).add(new com.ibm.math.BigDecimal("00.0")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("add152")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.3");
+  (new com.ibm.math.DiagBigDecimal.Test("add153")).ok=((new com.ibm.math.BigDecimal("3.")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.3");
+  (new com.ibm.math.DiagBigDecimal.Test("add154")).ok=((new com.ibm.math.BigDecimal("3.0")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.3");
+  (new com.ibm.math.DiagBigDecimal.Test("add155")).ok=((new com.ibm.math.BigDecimal("3.00")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.30");
+  (new com.ibm.math.DiagBigDecimal.Test("add156")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("3")).toString()).equals("6");
+  (new com.ibm.math.DiagBigDecimal.Test("add157")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("+3")).toString()).equals("6");
+  (new com.ibm.math.DiagBigDecimal.Test("add158")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("-3")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("add159")).ok=((new com.ibm.math.BigDecimal("0.3")).add(new com.ibm.math.BigDecimal("-0.3")).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("add160")).ok=((new com.ibm.math.BigDecimal("0.03")).add(new com.ibm.math.BigDecimal("-0.03")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("add161")).ok=((new com.ibm.math.BigDecimal("7E+12")).add(new com.ibm.math.BigDecimal("-1"),mcfd).toString()).equals("6999999999999");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add162")).ok=((new com.ibm.math.BigDecimal("7E+12")).add(new com.ibm.math.BigDecimal("1.11"),mcfd).toString()).equals("7000000000001.11");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add163")).ok=((new com.ibm.math.BigDecimal("1.11")).add(new com.ibm.math.BigDecimal("7E+12"),mcfd).toString()).equals("7000000000001.11");
+  
+  
+  // input preparation tests
+  alhs=new com.ibm.math.BigDecimal("12345678900000");
+  arhs=new com.ibm.math.BigDecimal("9999999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("add170")).ok=(alhs.add(arhs,mc3).toString()).equals("2.23E+13");
+  (new com.ibm.math.DiagBigDecimal.Test("add171")).ok=(arhs.add(alhs,mc3).toString()).equals("2.23E+13");
+  (new com.ibm.math.DiagBigDecimal.Test("add172")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3456"),mc3).toString()).equals("1.55E+4");
+  // next was 1.54E+4 under old [truncate to digits+1] rules
+  (new com.ibm.math.DiagBigDecimal.Test("add173")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3446"),mc3).toString()).equals("1.55E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("add174")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3454"),mc3).toString()).equals("1.55E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("add175")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3444"),mc3).toString()).equals("1.54E+4");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("add176")).ok=((new com.ibm.math.BigDecimal("3456")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.55E+4");
+  // next was 1.54E+4 under old [truncate to digits+1] rules
+  (new com.ibm.math.DiagBigDecimal.Test("add177")).ok=((new com.ibm.math.BigDecimal("3446")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.55E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("add178")).ok=((new com.ibm.math.BigDecimal("3454")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.55E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("add179")).ok=((new com.ibm.math.BigDecimal("3444")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.54E+4");
+  
+  {try{checknull:do{
+   ten.add((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $22){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("add200")).ok=flag;
+  {try{checknull2:do{
+   ten.add(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $23){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("add201")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.add(com.ibm.math.BigDecimal.ZERO,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $24){ae=$24;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("add202")).ok=flag;
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ZERO.add(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $25){ae=$25;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("add203")).ok=flag;
+  
+  // check lostdigits not raised if digits=0 [dyadic method]
+  {try{checkdigits:do{
+   tenlong.add(com.ibm.math.BigDecimal.ZERO,mcld0);
+   flag=true;
+  }while(false);}
+  catch (java.lang.ArithmeticException $26){ae=$26;
+   flag=false;
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("add204")).ok=flag;
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ZERO.add(tenlong,mcld0);
+   flag=true;
+  }while(false);}
+  catch (java.lang.ArithmeticException $27){ae=$27;
+   flag=false;
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("add205")).ok=flag;
+  
+  summary("add");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ /** Test the {@link BigDecimal#compareTo(BigDecimal)} method. */
+ 
+ public void diagcompareto(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  // we assume add/subtract test function; this just
+  // tests existence, exceptions, and possible results
+  
+  (new com.ibm.math.DiagBigDecimal.Test("cpt001")).ok=((new com.ibm.math.BigDecimal("5")).compareTo(new com.ibm.math.BigDecimal("2")))==1;
+  (new com.ibm.math.DiagBigDecimal.Test("cpt002")).ok=((new com.ibm.math.BigDecimal("5")).compareTo(new com.ibm.math.BigDecimal("5")))==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cpt003")).ok=((new com.ibm.math.BigDecimal("5")).compareTo(new com.ibm.math.BigDecimal("5.00")))==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cpt004")).ok=((new com.ibm.math.BigDecimal("0.5")).compareTo(new com.ibm.math.BigDecimal("0.5")))==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cpt005")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5")))==(-1);
+  (new com.ibm.math.DiagBigDecimal.Test("cpt006")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5"),mcdef))==(-1);
+  (new com.ibm.math.DiagBigDecimal.Test("cpt007")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5"),mc6))==(-1);
+  (new com.ibm.math.DiagBigDecimal.Test("cpt008")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5"),mcfd))==(-1);
+  {try{checknull:do{
+   ten.compareTo((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $28){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("cpt100")).ok=flag;
+  {try{checknull2:do{
+   ten.compareTo(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $29){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("cpt101")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.compareTo(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $30){ae=$30;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("cpt102")).ok=flag;
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.compareTo(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $31){ae=$31;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("cpt103")).ok=flag;
+  
+  summary("compareTo");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#divide} method. */
+ 
+ public void diagdivide(){
+  boolean flag=false;
+  com.ibm.math.MathContext rmcd;
+  int rhu;
+  int rd;
+  int ru;
+  java.lang.RuntimeException e=null;
+  java.lang.ArithmeticException ae=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div301")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("0.333333333");
+  (new com.ibm.math.DiagBigDecimal.Test("div302")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("0.666666667");
+  (new com.ibm.math.DiagBigDecimal.Test("div303")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div304")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("-1"),mcdef).toString()).equals("-2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div305")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("-2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div306")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("-1"),mcdef).toString()).equals("2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div307")).ok=((new com.ibm.math.BigDecimal("2.40")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div308")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div309")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1.2");
+  (new com.ibm.math.DiagBigDecimal.Test("div310")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1.2");
+  (new com.ibm.math.DiagBigDecimal.Test("div311")).ok=((new com.ibm.math.BigDecimal("2.")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div312")).ok=((new com.ibm.math.BigDecimal("20")).divide(new com.ibm.math.BigDecimal("20"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div313")).ok=((new com.ibm.math.BigDecimal("187")).divide(new com.ibm.math.BigDecimal("187"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div314")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("2.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div315")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.0"),mcdef).toString()).equals("2.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div316")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.000"),mcdef).toString()).equals("2.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div317")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("0.200"),mcdef).toString()).equals("25");
+  (new com.ibm.math.DiagBigDecimal.Test("div318")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("div319")).ok=((new com.ibm.math.BigDecimal("999999999.4")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("div320")).ok=((new com.ibm.math.BigDecimal("999999999.5")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("div321")).ok=((new com.ibm.math.BigDecimal("999999999.9")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("div322")).ok=((new com.ibm.math.BigDecimal("999999999.999")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("div323")).ok=((new com.ibm.math.BigDecimal("0.0000E-50")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("0");
+  // MC
+  (new com.ibm.math.DiagBigDecimal.Test("div325")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("div326")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1"),mc6).toString()).equals("1E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("div327")).ok=((new com.ibm.math.BigDecimal("9999999")).divide(new com.ibm.math.BigDecimal("1"),mc6).toString()).equals("1E+7");
+  (new com.ibm.math.DiagBigDecimal.Test("div328")).ok=((new com.ibm.math.BigDecimal("999999")).divide(new com.ibm.math.BigDecimal("1"),mc6).toString()).equals("999999");
+  
+  // check rounding explicitly [note: digits+1 truncation]
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_CEILING);
+  (new com.ibm.math.DiagBigDecimal.Test("div330")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div331")).ok=((new com.ibm.math.BigDecimal("1.51")).divide(one,rmcd).toString()).equals("1.6");
+  (new com.ibm.math.DiagBigDecimal.Test("div332")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_DOWN);
+  (new com.ibm.math.DiagBigDecimal.Test("div333")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div334")).ok=((new com.ibm.math.BigDecimal("1.59")).divide(one,rmcd).toString()).equals("1.5");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_FLOOR);
+  (new com.ibm.math.DiagBigDecimal.Test("div335")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div336")).ok=((new com.ibm.math.BigDecimal("1.59")).divide(one,rmcd).toString()).equals("1.5");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_DOWN);
+  (new com.ibm.math.DiagBigDecimal.Test("div337")).ok=((new com.ibm.math.BigDecimal("1.45")).divide(one,rmcd).toString()).equals("1.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div338")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div339")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.5");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_EVEN);
+  (new com.ibm.math.DiagBigDecimal.Test("div340")).ok=((new com.ibm.math.BigDecimal("1.45")).divide(one,rmcd).toString()).equals("1.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div341")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div342")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_UP);
+  (new com.ibm.math.DiagBigDecimal.Test("div343")).ok=((new com.ibm.math.BigDecimal("1.45")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div344")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div345")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_UP);
+  (new com.ibm.math.DiagBigDecimal.Test("div346")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div347")).ok=((new com.ibm.math.BigDecimal("1.51")).divide(one,rmcd).toString()).equals("1.6");
+  (new com.ibm.math.DiagBigDecimal.Test("div348")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  
+  // fixed point...
+  (new com.ibm.math.DiagBigDecimal.Test("div350")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div351")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div352")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div353")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("-1")).toString()).equals("-2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div354")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("-2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div355")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("-1")).toString()).equals("2.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div356")).ok=((new com.ibm.math.BigDecimal("2.40")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("div357")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("2.400");
+  (new com.ibm.math.DiagBigDecimal.Test("div358")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("1.2");
+  (new com.ibm.math.DiagBigDecimal.Test("div359")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("1.200");
+  (new com.ibm.math.DiagBigDecimal.Test("div360")).ok=((new com.ibm.math.BigDecimal("2.")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div361")).ok=((new com.ibm.math.BigDecimal("20")).divide(new com.ibm.math.BigDecimal("20")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div362")).ok=((new com.ibm.math.BigDecimal("187")).divide(new com.ibm.math.BigDecimal("187")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div363")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("div364")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.0")).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("div365")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.000")).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("div366")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("0.200")).toString()).equals("25");
+  (new com.ibm.math.DiagBigDecimal.Test("div367")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("2.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div368")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("2.0")).toString()).equals("2.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div369")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("2.000")).toString()).equals("2.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div370")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("0.200")).toString()).equals("25.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div371")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("div372")).ok=((new com.ibm.math.BigDecimal("999999999.4")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.4");
+  (new com.ibm.math.DiagBigDecimal.Test("div373")).ok=((new com.ibm.math.BigDecimal("999999999.5")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div374")).ok=((new com.ibm.math.BigDecimal("999999999.9")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.9");
+  (new com.ibm.math.DiagBigDecimal.Test("div375")).ok=((new com.ibm.math.BigDecimal("999999999.999")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.999");
+  (new com.ibm.math.DiagBigDecimal.Test("div376")).ok=((new com.ibm.math.BigDecimal("0.0000E-5")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div377")).ok=((new com.ibm.math.BigDecimal("0.000000000")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("0.000000000");
+  
+  //- Fixed point; explicit scales & rounds [old BigDecimal divides]
+  rhu=com.ibm.math.MathContext.ROUND_HALF_UP;
+  rd=com.ibm.math.MathContext.ROUND_DOWN;
+  (new com.ibm.math.DiagBigDecimal.Test("div001")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div002")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),rhu).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div003")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),0,rhu).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div004")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),1,rhu).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div005")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),2,rhu).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("div006")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),3,rhu).toString()).equals("0.000");
+  (new com.ibm.math.DiagBigDecimal.Test("div007")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),4,rhu).toString()).equals("0.0000");
+  (new com.ibm.math.DiagBigDecimal.Test("div008")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div009")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),rhu).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div010")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),0,rhu).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div011")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),1,rhu).toString()).equals("0.3");
+  (new com.ibm.math.DiagBigDecimal.Test("div012")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),2,rhu).toString()).equals("0.33");
+  (new com.ibm.math.DiagBigDecimal.Test("div013")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),3,rhu).toString()).equals("0.333");
+  (new com.ibm.math.DiagBigDecimal.Test("div014")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),4,rhu).toString()).equals("0.3333");
+  (new com.ibm.math.DiagBigDecimal.Test("div015")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div016")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),rhu).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div017")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),0,rhu).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div018")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),1,rhu).toString()).equals("0.7");
+  (new com.ibm.math.DiagBigDecimal.Test("div019")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),2,rhu).toString()).equals("0.67");
+  (new com.ibm.math.DiagBigDecimal.Test("div020")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),3,rhu).toString()).equals("0.667");
+  (new com.ibm.math.DiagBigDecimal.Test("div021")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),4,rhu).toString()).equals("0.6667");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div030")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),4,rhu).toString()).equals("0.5000");
+  (new com.ibm.math.DiagBigDecimal.Test("div031")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),3,rhu).toString()).equals("0.500");
+  (new com.ibm.math.DiagBigDecimal.Test("div032")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),2,rhu).toString()).equals("0.50");
+  (new com.ibm.math.DiagBigDecimal.Test("div033")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),1,rhu).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("div034")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),0,rhu).toString()).equals("1");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div035")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),4,rhu).toString()).equals("0.0200");
+  (new com.ibm.math.DiagBigDecimal.Test("div036")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),3,rhu).toString()).equals("0.020");
+  (new com.ibm.math.DiagBigDecimal.Test("div037")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),2,rhu).toString()).equals("0.02");
+  (new com.ibm.math.DiagBigDecimal.Test("div038")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),1,rhu).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div039")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),0,rhu).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div040")).ok=((new com.ibm.math.BigDecimal("9.99999999")).divide(new com.ibm.math.BigDecimal("9.77777777"),4,rhu).toString()).equals("1.0227");
+  (new com.ibm.math.DiagBigDecimal.Test("div041")).ok=((new com.ibm.math.BigDecimal("9.9999999")).divide(new com.ibm.math.BigDecimal("9.7777777"),4,rhu).toString()).equals("1.0227");
+  (new com.ibm.math.DiagBigDecimal.Test("div042")).ok=((new com.ibm.math.BigDecimal("9.999999")).divide(new com.ibm.math.BigDecimal("9.777777"),4,rhu).toString()).equals("1.0227");
+  (new com.ibm.math.DiagBigDecimal.Test("div043")).ok=((new com.ibm.math.BigDecimal("9.77777777")).divide(new com.ibm.math.BigDecimal("9.99999999"),4,rhu).toString()).equals("0.9778");
+  (new com.ibm.math.DiagBigDecimal.Test("div044")).ok=((new com.ibm.math.BigDecimal("9.7777777")).divide(new com.ibm.math.BigDecimal("9.9999999"),4,rhu).toString()).equals("0.9778");
+  (new com.ibm.math.DiagBigDecimal.Test("div045")).ok=((new com.ibm.math.BigDecimal("9.777777")).divide(new com.ibm.math.BigDecimal("9.999999"),4,rhu).toString()).equals("0.9778");
+  (new com.ibm.math.DiagBigDecimal.Test("div046")).ok=((new com.ibm.math.BigDecimal("9.77777")).divide(new com.ibm.math.BigDecimal("9.99999"),4,rhu).toString()).equals("0.9778");
+  (new com.ibm.math.DiagBigDecimal.Test("div047")).ok=((new com.ibm.math.BigDecimal("9.7777")).divide(new com.ibm.math.BigDecimal("9.9999"),4,rhu).toString()).equals("0.9778");
+  (new com.ibm.math.DiagBigDecimal.Test("div048")).ok=((new com.ibm.math.BigDecimal("9.777")).divide(new com.ibm.math.BigDecimal("9.999"),4,rhu).toString()).equals("0.9778");
+  (new com.ibm.math.DiagBigDecimal.Test("div049")).ok=((new com.ibm.math.BigDecimal("9.77")).divide(new com.ibm.math.BigDecimal("9.99"),4,rhu).toString()).equals("0.9780");
+  (new com.ibm.math.DiagBigDecimal.Test("div050")).ok=((new com.ibm.math.BigDecimal("9.7")).divide(new com.ibm.math.BigDecimal("9.9"),4,rhu).toString()).equals("0.9798");
+  (new com.ibm.math.DiagBigDecimal.Test("div051")).ok=((new com.ibm.math.BigDecimal("9.")).divide(new com.ibm.math.BigDecimal("9."),4,rhu).toString()).equals("1.0000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div060")).ok=((new com.ibm.math.BigDecimal("9.99999999")).divide(new com.ibm.math.BigDecimal("9.77777777"),rhu).toString()).equals("1.02272727");
+  (new com.ibm.math.DiagBigDecimal.Test("div061")).ok=((new com.ibm.math.BigDecimal("9.9999999")).divide(new com.ibm.math.BigDecimal("9.7777777"),rhu).toString()).equals("1.0227273");
+  (new com.ibm.math.DiagBigDecimal.Test("div062")).ok=((new com.ibm.math.BigDecimal("9.999999")).divide(new com.ibm.math.BigDecimal("9.777777"),rhu).toString()).equals("1.022727");
+  (new com.ibm.math.DiagBigDecimal.Test("div063")).ok=((new com.ibm.math.BigDecimal("9.77777777")).divide(new com.ibm.math.BigDecimal("9.99999999"),rhu).toString()).equals("0.97777778");
+  (new com.ibm.math.DiagBigDecimal.Test("div064")).ok=((new com.ibm.math.BigDecimal("9.7777777")).divide(new com.ibm.math.BigDecimal("9.9999999"),rhu).toString()).equals("0.9777778");
+  (new com.ibm.math.DiagBigDecimal.Test("div065")).ok=((new com.ibm.math.BigDecimal("9.777777")).divide(new com.ibm.math.BigDecimal("9.999999"),rhu).toString()).equals("0.977778");
+  (new com.ibm.math.DiagBigDecimal.Test("div066")).ok=((new com.ibm.math.BigDecimal("9.77777")).divide(new com.ibm.math.BigDecimal("9.99999"),rhu).toString()).equals("0.97778");
+  (new com.ibm.math.DiagBigDecimal.Test("div067")).ok=((new com.ibm.math.BigDecimal("9.7777")).divide(new com.ibm.math.BigDecimal("9.9999"),rhu).toString()).equals("0.9778");
+  (new com.ibm.math.DiagBigDecimal.Test("div068")).ok=((new com.ibm.math.BigDecimal("9.777")).divide(new com.ibm.math.BigDecimal("9.999"),rhu).toString()).equals("0.978");
+  (new com.ibm.math.DiagBigDecimal.Test("div069")).ok=((new com.ibm.math.BigDecimal("9.77")).divide(new com.ibm.math.BigDecimal("9.99"),rhu).toString()).equals("0.98");
+  (new com.ibm.math.DiagBigDecimal.Test("div070")).ok=((new com.ibm.math.BigDecimal("9.7")).divide(new com.ibm.math.BigDecimal("9.9"),rhu).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div071")).ok=((new com.ibm.math.BigDecimal("9.")).divide(new com.ibm.math.BigDecimal("9."),rhu).toString()).equals("1");
+  
+  rd=com.ibm.math.MathContext.ROUND_DOWN; // test this is actually being used
+  (new com.ibm.math.DiagBigDecimal.Test("div080")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),0,rd).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div081")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),1,rd).toString()).equals("0.6");
+  (new com.ibm.math.DiagBigDecimal.Test("div082")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),2,rd).toString()).equals("0.66");
+  (new com.ibm.math.DiagBigDecimal.Test("div083")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),3,rd).toString()).equals("0.666");
+  (new com.ibm.math.DiagBigDecimal.Test("div084")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),4,rd).toString()).equals("0.6666");
+  
+  ru=com.ibm.math.MathContext.ROUND_UNNECESSARY; // check for some 0 residues
+  (new com.ibm.math.DiagBigDecimal.Test("div090")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5"),4,ru).toString()).equals("200.0000");
+  (new com.ibm.math.DiagBigDecimal.Test("div091")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("50"),4,ru).toString()).equals("20.0000");
+  (new com.ibm.math.DiagBigDecimal.Test("div092")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("500"),4,ru).toString()).equals("2.0000");
+  (new com.ibm.math.DiagBigDecimal.Test("div093")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),4,ru).toString()).equals("0.2000");
+  (new com.ibm.math.DiagBigDecimal.Test("div094")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),3,ru).toString()).equals("0.200");
+  (new com.ibm.math.DiagBigDecimal.Test("div095")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),2,ru).toString()).equals("0.20");
+  (new com.ibm.math.DiagBigDecimal.Test("div096")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),1,ru).toString()).equals("0.2");
+  
+  // check rounding explicitly
+  (new com.ibm.math.DiagBigDecimal.Test("div101")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.06");
+  (new com.ibm.math.DiagBigDecimal.Test("div102")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("div103")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("div104")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("div105")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div106")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div107")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("div108")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div109")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div110")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.04");
+  (new com.ibm.math.DiagBigDecimal.Test("div111")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div112")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div113")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("div114")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div115")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div116")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("div117")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("div118")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div120")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.04");
+  (new com.ibm.math.DiagBigDecimal.Test("div121")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div122")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div123")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("div124")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div125")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div126")).ok=((new com.ibm.math.BigDecimal("0.150")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.15");
+  (new com.ibm.math.DiagBigDecimal.Test("div127")).ok=((new com.ibm.math.BigDecimal("0.150")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("div128")).ok=((new com.ibm.math.BigDecimal("0.150")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div129")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.06");
+  (new com.ibm.math.DiagBigDecimal.Test("div130")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("div131")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div140")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("div141")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("div142")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div143")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("div144")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("div145")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("div146")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.06");
+  (new com.ibm.math.DiagBigDecimal.Test("div147")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("div148")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("div150")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.06");
+  (new com.ibm.math.DiagBigDecimal.Test("div151")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("div52.")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_UP).toString()).equals("1");
+  
+  //- error conditions ---
+  {try{checknull:do{
+   ten.divide((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $32){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("div201")).ok=flag;
+  {try{checknull2:do{
+   ten.divide(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $33){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("div202")).ok=flag;
+  
+  {try{checkscale:do{
+   (new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),-8,0);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $34){e=$34;
+   flag=flag&(e.getMessage()).equals("Negative scale: -8");
+  }}/*checkscale*/
+  (new com.ibm.math.DiagBigDecimal.Test("div203")).ok=flag;
+  
+  {try{rounn:do{
+   (new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),0,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $35){ae=$35;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }}/*rounn*/
+  (new com.ibm.math.DiagBigDecimal.Test("div204")).ok=flag;
+  {try{rounn:do{
+   (new com.ibm.math.BigDecimal("1001")).divide(new com.ibm.math.BigDecimal("10"),0,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $36){ae=$36;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }}/*rounn*/
+  (new com.ibm.math.DiagBigDecimal.Test("div205")).ok=flag;
+  {try{rounn:do{
+   (new com.ibm.math.BigDecimal("1001")).divide(new com.ibm.math.BigDecimal("100"),1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $37){ae=$37;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }}/*rounn*/
+  (new com.ibm.math.DiagBigDecimal.Test("div206")).ok=flag;
+  {try{rounn:do{
+   (new com.ibm.math.BigDecimal("10001")).divide(new com.ibm.math.BigDecimal("10000"),1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $38){ae=$38;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }}/*rounn*/
+  (new com.ibm.math.DiagBigDecimal.Test("div207")).ok=flag;
+  {try{rounn:do{
+   (new com.ibm.math.BigDecimal("1.0001")).divide(new com.ibm.math.BigDecimal("1"),1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $39){ae=$39;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }}/*rounn*/
+  (new com.ibm.math.DiagBigDecimal.Test("div208")).ok=flag;
+  
+  {try{div0:do{
+   (new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("0.00"));
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $40){ae=$40;
+   flag=(ae.getMessage()).equals("Divide by 0");
+  }}/*div0*/
+  (new com.ibm.math.DiagBigDecimal.Test("div209")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.divide(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $41){ae=$41;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("div210")).ok=flag;
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.divide(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $42){ae=$42;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("div211")).ok=flag;
+  
+  summary("divide");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#divideInteger} method. */
+ 
+ public void diagdivideInteger(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("dvI001")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("101");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI002")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("101");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI003")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("33");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI004")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("33");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI005")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI006")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI007")).ok=((new com.ibm.math.BigDecimal("18")).divideInteger(new com.ibm.math.BigDecimal("18"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI008")).ok=((new com.ibm.math.BigDecimal("1120")).divideInteger(new com.ibm.math.BigDecimal("1000"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI009")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI010")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI011")).ok=((new com.ibm.math.BigDecimal("0.5")).divideInteger(new com.ibm.math.BigDecimal("2.000"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI012")).ok=((new com.ibm.math.BigDecimal("8.005")).divideInteger(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI013")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI014")).ok=((new com.ibm.math.BigDecimal("0")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI015")).ok=((new com.ibm.math.BigDecimal("0.00")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0");
+  // MC
+  (new com.ibm.math.DiagBigDecimal.Test("dvI016")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2"),mce).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI017")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2"),mc6).toString()).equals("2");
+  
+  // Fixed --
+  (new com.ibm.math.DiagBigDecimal.Test("dvI021")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("101");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI022")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("101");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI023")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("3")).toString()).equals("33");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI024")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("3")).toString()).equals("33");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI025")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI026")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI027")).ok=((new com.ibm.math.BigDecimal("18")).divideInteger(new com.ibm.math.BigDecimal("18")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI028")).ok=((new com.ibm.math.BigDecimal("1120")).divideInteger(new com.ibm.math.BigDecimal("1000")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI029")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI030")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI031")).ok=((new com.ibm.math.BigDecimal("0.5")).divideInteger(new com.ibm.math.BigDecimal("2.000")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI032")).ok=((new com.ibm.math.BigDecimal("8.005")).divideInteger(new com.ibm.math.BigDecimal("7")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI033")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI034")).ok=((new com.ibm.math.BigDecimal("0")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("dvI035")).ok=((new com.ibm.math.BigDecimal("0.00")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("0");
+  
+  {try{checknull:do{
+   ten.divideInteger((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $43){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("dvI101")).ok=flag;
+  {try{checknull2:do{
+   ten.divideInteger(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $44){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("dvI102")).ok=flag;
+  
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.divideInteger(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $45){ae=$45;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("dvI103")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.divideInteger(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $46){ae=$46;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("dvI104")).ok=flag;
+  
+  summary("divideInteger");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#max} method. */
+ 
+ public void diagmax(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  // we assume add/subtract test function; this and min just
+  // test existence and test the truth table
+  (new com.ibm.math.DiagBigDecimal.Test("max001")).ok=((new com.ibm.math.BigDecimal("5")).max(new com.ibm.math.BigDecimal("2")).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("max002")).ok=((new com.ibm.math.BigDecimal("5")).max(new com.ibm.math.BigDecimal("5")).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("max003")).ok=((new com.ibm.math.BigDecimal("2")).max(new com.ibm.math.BigDecimal("7")).toString()).equals("7");
+  (new com.ibm.math.DiagBigDecimal.Test("max004")).ok=((new com.ibm.math.BigDecimal("2")).max(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("7");
+  (new com.ibm.math.DiagBigDecimal.Test("max005")).ok=((new com.ibm.math.BigDecimal("2")).max(new com.ibm.math.BigDecimal("7"),mc6).toString()).equals("7");
+  (new com.ibm.math.DiagBigDecimal.Test("max006")).ok=((new com.ibm.math.BigDecimal("2E+3")).max(new com.ibm.math.BigDecimal("7")).toString()).equals("2000");
+  (new com.ibm.math.DiagBigDecimal.Test("max007")).ok=((new com.ibm.math.BigDecimal("2E+3")).max(new com.ibm.math.BigDecimal("7"),mc3).toString()).equals("2E+3");
+  (new com.ibm.math.DiagBigDecimal.Test("max008")).ok=((new com.ibm.math.BigDecimal("7")).max(new com.ibm.math.BigDecimal("2E+3")).toString()).equals("2000");
+  (new com.ibm.math.DiagBigDecimal.Test("max009")).ok=((new com.ibm.math.BigDecimal("7")).max(new com.ibm.math.BigDecimal("2E+3"),mc3).toString()).equals("2E+3");
+  {try{checknull:do{
+   ten.max((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $47){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("max010")).ok=flag;
+  {try{checknull2:do{
+   ten.max(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $48){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("max011")).ok=flag;
+  {try{checkdigits:do{
+   tenlong.max(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $49){ae=$49;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("max012")).ok=flag;
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.max(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $50){ae=$50;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("max013")).ok=flag;
+  summary("max");
+  return;}
+
+ /** Test the {@link BigDecimal#min} method. */
+ 
+ public void diagmin(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal minx=null;
+  java.lang.ArithmeticException ae=null;
+  // we assume add/subtract test function; this and max just
+  // test existence and test the truth table
+  
+  (new com.ibm.math.DiagBigDecimal.Test("min001")).ok=((new com.ibm.math.BigDecimal("5")).min(new com.ibm.math.BigDecimal("2")).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("min002")).ok=((new com.ibm.math.BigDecimal("5")).min(new com.ibm.math.BigDecimal("5")).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("min003")).ok=((new com.ibm.math.BigDecimal("2")).min(new com.ibm.math.BigDecimal("7")).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("min004")).ok=((new com.ibm.math.BigDecimal("2")).min(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("min005")).ok=((new com.ibm.math.BigDecimal("1")).min(new com.ibm.math.BigDecimal("7"),mc6).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("min006")).ok=((new com.ibm.math.BigDecimal("-2E+3")).min(new com.ibm.math.BigDecimal("7")).toString()).equals("-2000");
+  (new com.ibm.math.DiagBigDecimal.Test("min007")).ok=((new com.ibm.math.BigDecimal("-2E+3")).min(new com.ibm.math.BigDecimal("7"),mc3).toString()).equals("-2E+3");
+  (new com.ibm.math.DiagBigDecimal.Test("min008")).ok=((new com.ibm.math.BigDecimal("7")).min(new com.ibm.math.BigDecimal("-2E+3")).toString()).equals("-2000");
+  (new com.ibm.math.DiagBigDecimal.Test("min009")).ok=((new com.ibm.math.BigDecimal("7")).min(new com.ibm.math.BigDecimal("-2E+3"),mc3).toString()).equals("-2E+3");
+  {try{checknull:do{
+   minx=ten;
+   minx.min((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $51){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("min010")).ok=flag;
+  {try{checknull2:do{
+   minx=ten;
+   minx.min(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $52){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("min011")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.min(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $53){ae=$53;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("min012")).ok=flag;
+  {try{checkdigits:do{
+   (new com.ibm.math.BigDecimal(9)).min(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $54){ae=$54;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("min013")).ok=flag;
+  summary("min");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#multiply} method. */
+ 
+ public void diagmultiply(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal l9;
+  com.ibm.math.BigDecimal l77e;
+  com.ibm.math.BigDecimal l12345;
+  com.ibm.math.BigDecimal edge;
+  com.ibm.math.BigDecimal tenedge;
+  com.ibm.math.BigDecimal hunedge;
+  com.ibm.math.BigDecimal opo;
+  com.ibm.math.BigDecimal d1=null;
+  com.ibm.math.BigDecimal d2=null;
+  java.lang.ArithmeticException oe=null;
+  java.lang.ArithmeticException ae=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul001")).ok=((new com.ibm.math.BigDecimal("2")).multiply(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("6");
+  (new com.ibm.math.DiagBigDecimal.Test("mul002")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("mul003")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("mul004")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul005")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mul006")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("-2"),mcdef).toString()).equals("-2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul007")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("-2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul008")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mul009")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("-2"),mcdef).toString()).equals("2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul010")).ok=((new com.ibm.math.BigDecimal("5.09")).multiply(new com.ibm.math.BigDecimal("7.1"),mcdef).toString()).equals("36.139");
+  (new com.ibm.math.DiagBigDecimal.Test("mul011")).ok=((new com.ibm.math.BigDecimal("2.5")).multiply(new com.ibm.math.BigDecimal("4"),mcdef).toString()).equals("10.0");
+  (new com.ibm.math.DiagBigDecimal.Test("mul012")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4"),mcdef).toString()).equals("10.00");
+  (new com.ibm.math.DiagBigDecimal.Test("mul013")).ok=((new com.ibm.math.BigDecimal("1.23456789")).multiply(new com.ibm.math.BigDecimal("1.00000000"),mcdef).toString()).equals("1.23456789");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul014")).ok=((new com.ibm.math.BigDecimal("9.999999999")).multiply(new com.ibm.math.BigDecimal("9.999999999"),mcdef).toString()).equals("100.000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul015")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4"),mcdef).toString()).equals("10.00");
+  (new com.ibm.math.DiagBigDecimal.Test("mul016")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4"),mc6).toString()).equals("10.00");
+  (new com.ibm.math.DiagBigDecimal.Test("mul017")).ok=((new com.ibm.math.BigDecimal("9.999999999")).multiply(new com.ibm.math.BigDecimal("9.999999999"),mc6).toString()).equals("100.000");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul020")).ok=((new com.ibm.math.BigDecimal("2")).multiply(new com.ibm.math.BigDecimal("3")).toString()).equals("6");
+  (new com.ibm.math.DiagBigDecimal.Test("mul021")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("1")).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("mul022")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("2")).toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("mul023")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("2")).toString()).equals("2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul024")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("0")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("mul025")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("-2")).toString()).equals("-2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul026")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("2")).toString()).equals("-2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul027")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("0")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("mul028")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("-2")).toString()).equals("2.40");
+  (new com.ibm.math.DiagBigDecimal.Test("mul029")).ok=((new com.ibm.math.BigDecimal("5.09")).multiply(new com.ibm.math.BigDecimal("7.1")).toString()).equals("36.139");
+  (new com.ibm.math.DiagBigDecimal.Test("mul030")).ok=((new com.ibm.math.BigDecimal("2.5")).multiply(new com.ibm.math.BigDecimal("4")).toString()).equals("10.0");
+  (new com.ibm.math.DiagBigDecimal.Test("mul031")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4")).toString()).equals("10.00");
+  (new com.ibm.math.DiagBigDecimal.Test("mul032")).ok=((new com.ibm.math.BigDecimal("1.23456789")).multiply(new com.ibm.math.BigDecimal("1.00000000")).toString()).equals("1.2345678900000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul033")).ok=((new com.ibm.math.BigDecimal("1234.56789")).multiply(new com.ibm.math.BigDecimal("-1000.00000")).toString()).equals("-1234567.8900000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul034")).ok=((new com.ibm.math.BigDecimal("-1234.56789")).multiply(new com.ibm.math.BigDecimal("1000.00000")).toString()).equals("-1234567.8900000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul035")).ok=((new com.ibm.math.BigDecimal("9.999999999")).multiply(new com.ibm.math.BigDecimal("9.999999999")).toString()).equals("99.999999980000000001");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul036")).ok=((new com.ibm.math.BigDecimal("5.00")).multiply(new com.ibm.math.BigDecimal("1E-3")).toString()).equals("0.00500");
+  (new com.ibm.math.DiagBigDecimal.Test("mul037")).ok=((new com.ibm.math.BigDecimal("00.00")).multiply(new com.ibm.math.BigDecimal("0.000")).toString()).equals("0.00000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul038")).ok=((new com.ibm.math.BigDecimal("00.00")).multiply(new com.ibm.math.BigDecimal("0E-3")).toString()).equals("0.00"); // rhs is '0'
+  // 1999.12.21: next one is a edge case if intermediate longs are used
+  (new com.ibm.math.DiagBigDecimal.Test("mul039")).ok=((new com.ibm.math.BigDecimal("999999999999")).multiply(new com.ibm.math.BigDecimal("9765625")).toString()).equals("9765624999990234375");
+  
+  l9=new com.ibm.math.BigDecimal("123456789E+10");
+  l77e=new com.ibm.math.BigDecimal("77E-20");
+  (new com.ibm.math.DiagBigDecimal.Test("mul040")).ok=(l9.multiply(new com.ibm.math.BigDecimal("3456757")).toString()).equals("4267601195732730000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul041")).ok=(l9.multiply(new com.ibm.math.BigDecimal("3456757"),mc3).toString()).equals("4.26E+24");
+  (new com.ibm.math.DiagBigDecimal.Test("mul042")).ok=(l9.multiply(l77e).toString()).equals("0.95061727530000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul043")).ok=(l9.multiply(l77e,mc3).toString()).equals("0.947");
+  (new com.ibm.math.DiagBigDecimal.Test("mul044")).ok=(l77e.multiply(l9,mc3).toString()).equals("0.947");
+  
+  l12345=new com.ibm.math.BigDecimal("123.45");
+  (new com.ibm.math.DiagBigDecimal.Test("mul050")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e11"),mcdef).toString()).equals("1.2345E+13");
+  (new com.ibm.math.DiagBigDecimal.Test("mul051")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e11"),mcs).toString()).equals("1.2345E+13");
+  (new com.ibm.math.DiagBigDecimal.Test("mul052")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e+9"),mce).toString()).equals("123.45E+9");
+  (new com.ibm.math.DiagBigDecimal.Test("mul053")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e10"),mce).toString()).equals("1.2345E+12");
+  (new com.ibm.math.DiagBigDecimal.Test("mul054")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e11"),mce).toString()).equals("12.345E+12");
+  (new com.ibm.math.DiagBigDecimal.Test("mul055")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e12"),mce).toString()).equals("123.45E+12");
+  (new com.ibm.math.DiagBigDecimal.Test("mul056")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e13"),mce).toString()).equals("1.2345E+15");
+  
+  // test some cases that are close to exponent overflow
+  (new com.ibm.math.DiagBigDecimal.Test("mul060")).ok=(one.multiply(new com.ibm.math.BigDecimal("9e999999999"),mcs).toString()).equals("9E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul061")).ok=(one.multiply(new com.ibm.math.BigDecimal("9.9e999999999"),mcs).toString()).equals("9.9E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul062")).ok=(one.multiply(new com.ibm.math.BigDecimal("9.99e999999999"),mcs).toString()).equals("9.99E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul063")).ok=(ten.multiply(new com.ibm.math.BigDecimal("9e999999999"),mce).toString()).equals("90E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul064")).ok=(ten.multiply(new com.ibm.math.BigDecimal("9.9e999999999"),mce).toString()).equals("99.0E+999999999");
+  edge=new com.ibm.math.BigDecimal("9.999e999999999");
+  tenedge=ten.multiply(edge,mce);
+  (new com.ibm.math.DiagBigDecimal.Test("mul065")).ok=(tenedge.toString()).equals("99.990E+999999999");
+  hunedge=ten.multiply(tenedge,mce);
+  (new com.ibm.math.DiagBigDecimal.Test("mul066")).ok=(hunedge.toString()).equals("999.900E+999999999");
+  opo=new com.ibm.math.BigDecimal("0.1"); // one tenth
+  (new com.ibm.math.DiagBigDecimal.Test("mul067")).ok=(opo.multiply(new com.ibm.math.BigDecimal("9e-999999998"),mcs).toString()).equals("9E-999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul068")).ok=(opo.multiply(new com.ibm.math.BigDecimal("99e-999999998"),mcs).toString()).equals("9.9E-999999998");
+  (new com.ibm.math.DiagBigDecimal.Test("mul069")).ok=(opo.multiply(new com.ibm.math.BigDecimal("999e-999999998"),mcs).toString()).equals("9.99E-999999997");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul070")).ok=(opo.multiply(new com.ibm.math.BigDecimal("9e-999999998"),mce).toString()).equals("9E-999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul071")).ok=(opo.multiply(new com.ibm.math.BigDecimal("99e-999999998"),mce).toString()).equals("99E-999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul072")).ok=(opo.multiply(new com.ibm.math.BigDecimal("999e-999999998"),mce).toString()).equals("999E-999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("mul073")).ok=(opo.multiply(new com.ibm.math.BigDecimal("999e-999999997"),mce).toString()).equals("9.99E-999999996");
+  (new com.ibm.math.DiagBigDecimal.Test("mul074")).ok=(opo.multiply(new com.ibm.math.BigDecimal("9999e-999999997"),mce).toString()).equals("99.99E-999999996");
+  (new com.ibm.math.DiagBigDecimal.Test("mul074")).ok=(opo.multiply(new com.ibm.math.BigDecimal("99999e-999999997"),mce).toString()).equals("999.99E-999999996");
+  
+  // test some intermediate lengths
+  (new com.ibm.math.DiagBigDecimal.Test("mul080")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789"),mcs).toString()).equals("12345678.9");
+  (new com.ibm.math.DiagBigDecimal.Test("mul081")).ok=(opo.multiply(new com.ibm.math.BigDecimal("12345678901234"),mcs).toString()).equals("1.23456789E+12");
+  (new com.ibm.math.DiagBigDecimal.Test("mul082")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789123456789"),mcs).toString()).equals("1.23456789E+16");
+  (new com.ibm.math.DiagBigDecimal.Test("mul083")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789"),mcfd).toString()).equals("12345678.9");
+  (new com.ibm.math.DiagBigDecimal.Test("mul084")).ok=(opo.multiply(new com.ibm.math.BigDecimal("12345678901234"),mcfd).toString()).equals("1234567890123.4");
+  (new com.ibm.math.DiagBigDecimal.Test("mul085")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789123456789"),mcfd).toString()).equals("12345678912345678.9");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mul090")).ok=((new com.ibm.math.BigDecimal("123456789")).multiply(opo,mcs).toString()).equals("12345678.9");
+  (new com.ibm.math.DiagBigDecimal.Test("mul091")).ok=((new com.ibm.math.BigDecimal("12345678901234")).multiply(opo,mcs).toString()).equals("1.23456789E+12");
+  (new com.ibm.math.DiagBigDecimal.Test("mul092")).ok=((new com.ibm.math.BigDecimal("123456789123456789")).multiply(opo,mcs).toString()).equals("1.23456789E+16");
+  (new com.ibm.math.DiagBigDecimal.Test("mul093")).ok=((new com.ibm.math.BigDecimal("123456789")).multiply(opo,mcfd).toString()).equals("12345678.9");
+  (new com.ibm.math.DiagBigDecimal.Test("mul094")).ok=((new com.ibm.math.BigDecimal("12345678901234")).multiply(opo,mcfd).toString()).equals("1234567890123.4");
+  (new com.ibm.math.DiagBigDecimal.Test("mul095")).ok=((new com.ibm.math.BigDecimal("123456789123456789")).multiply(opo,mcfd).toString()).equals("12345678912345678.9");
+  
+  // test some more edge cases and carries
+  (new com.ibm.math.DiagBigDecimal.Test("mul101")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9")).toString()).equals("81");
+  (new com.ibm.math.DiagBigDecimal.Test("mul102")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90")).toString()).equals("810");
+  (new com.ibm.math.DiagBigDecimal.Test("mul103")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900")).toString()).equals("8100");
+  (new com.ibm.math.DiagBigDecimal.Test("mul104")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000")).toString()).equals("81000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul105")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000")).toString()).equals("810000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul106")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000")).toString()).equals("8100000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul107")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000")).toString()).equals("81000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul108")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000")).toString()).equals("810000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul109")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000")).toString()).equals("8100000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul110")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000")).toString()).equals("81000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul111")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000")).toString()).equals("810000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul112")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000")).toString()).equals("8100000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul113")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000")).toString()).equals("81000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul114")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000")).toString()).equals("810000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul115")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000000")).toString()).equals("8100000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul116")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000000")).toString()).equals("81000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul117")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000000")).toString()).equals("810000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul118")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000000000")).toString()).equals("8100000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul119")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000000000")).toString()).equals("81000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul120")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000000000")).toString()).equals("810000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul121")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000000000000")).toString()).equals("8100000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul122")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000000000000")).toString()).equals("81000000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul123")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000000000000")).toString()).equals("810000000000000000000000");
+  // test some more edge cases without carries
+  (new com.ibm.math.DiagBigDecimal.Test("mul131")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3")).toString()).equals("9");
+  (new com.ibm.math.DiagBigDecimal.Test("mul132")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30")).toString()).equals("90");
+  (new com.ibm.math.DiagBigDecimal.Test("mul133")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300")).toString()).equals("900");
+  (new com.ibm.math.DiagBigDecimal.Test("mul134")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000")).toString()).equals("9000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul135")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000")).toString()).equals("90000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul136")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000")).toString()).equals("900000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul137")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000")).toString()).equals("9000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul138")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000")).toString()).equals("90000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul139")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000")).toString()).equals("900000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul140")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000")).toString()).equals("9000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul141")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000")).toString()).equals("90000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul142")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000")).toString()).equals("900000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul143")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000")).toString()).equals("9000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul144")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000")).toString()).equals("90000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul145")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000000")).toString()).equals("900000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul146")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000000")).toString()).equals("9000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul147")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000000")).toString()).equals("90000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul148")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000000000")).toString()).equals("900000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul149")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000000000")).toString()).equals("9000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul150")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000000000")).toString()).equals("90000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul151")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000000000000")).toString()).equals("900000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul152")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000000000000")).toString()).equals("9000000000000000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mul153")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000000000000")).toString()).equals("90000000000000000000000");
+  
+  {try{checknull:do{
+   ten.multiply((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $55){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul200")).ok=flag;
+  {try{checknull2:do{
+   ten.multiply(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $56){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul201")).ok=flag;
+  
+  {try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("-1.23456789012345E-0");
+   d2=new com.ibm.math.BigDecimal("9E+999999999");
+   d1.multiply(d2,mcdef); // marginal overflow
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $57){oe=$57;
+   flag=(oe.getMessage()).equals("Exponent Overflow: 1000000000");
+  }}/*checkover*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul202")).ok=flag;
+  {try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("112");
+   d2=new com.ibm.math.BigDecimal("9E+999999999");
+   d1.multiply(d2,mce); // marginal overflow, engineering
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $58){oe=$58;
+   flag=(oe.getMessage()).equals("Exponent Overflow: 1000000002");
+  }}/*checkover*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul203")).ok=flag;
+  
+  {try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("0.9");
+   d2=new com.ibm.math.BigDecimal("1E-999999999");
+   d1.multiply(d2,mcdef); // marginal negative overflow
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $59){oe=$59;
+   flag=(oe.getMessage()).equals("Exponent Overflow: -1000000000");
+  }}/*checkover*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul204")).ok=flag;
+  {try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("0.9");
+   d2=new com.ibm.math.BigDecimal("1E-999999999");
+   d1.multiply(d2,mce); // marginal negative overflow, engineering
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $60){oe=$60;
+   flag=(oe.getMessage()).equals("Exponent Overflow: -1000000002");
+  }}/*checkover*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul205")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.multiply(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $61){ae=$61;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul206")).ok=flag;
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.TEN.multiply(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $62){ae=$62;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("mul207")).ok=flag;
+  
+  summary("multiply");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#negate} method. */
+ 
+ public void diagnegate(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("neg001")).ok=((new com.ibm.math.BigDecimal("2")).negate().toString()).equals("-2");
+  (new com.ibm.math.DiagBigDecimal.Test("neg002")).ok=((new com.ibm.math.BigDecimal("-2")).negate().toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("neg003")).ok=((new com.ibm.math.BigDecimal("2.00")).negate(mcdef).toString()).equals("-2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("neg004")).ok=((new com.ibm.math.BigDecimal("-2.00")).negate(mcdef).toString()).equals("2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("neg005")).ok=((new com.ibm.math.BigDecimal("0")).negate(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("neg006")).ok=((new com.ibm.math.BigDecimal("0.00")).negate(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("neg007")).ok=((new com.ibm.math.BigDecimal("00.0")).negate(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("neg008")).ok=((new com.ibm.math.BigDecimal("00")).negate(mcdef).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("neg010")).ok=((new com.ibm.math.BigDecimal("2.00")).negate().toString()).equals("-2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("neg011")).ok=((new com.ibm.math.BigDecimal("-2.00")).negate().toString()).equals("2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("neg012")).ok=((new com.ibm.math.BigDecimal("0")).negate().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("neg013")).ok=((new com.ibm.math.BigDecimal("0.00")).negate().toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("neg014")).ok=((new com.ibm.math.BigDecimal("00.0")).negate().toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("neg015")).ok=((new com.ibm.math.BigDecimal("00.00")).negate().toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("neg016")).ok=((new com.ibm.math.BigDecimal("00")).negate().toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("neg020")).ok=((new com.ibm.math.BigDecimal("-2000000")).negate().toString()).equals("2000000");
+  (new com.ibm.math.DiagBigDecimal.Test("neg021")).ok=((new com.ibm.math.BigDecimal("-2000000")).negate(mcdef).toString()).equals("2000000");
+  (new com.ibm.math.DiagBigDecimal.Test("neg022")).ok=((new com.ibm.math.BigDecimal("-2000000")).negate(mc6).toString()).equals("2.00000E+6");
+  (new com.ibm.math.DiagBigDecimal.Test("neg023")).ok=((new com.ibm.math.BigDecimal("2000000")).negate(mc6).toString()).equals("-2.00000E+6");
+  
+  {try{checknull:do{
+   ten.negate((com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $63){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("neg100")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.negate(mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $64){ae=$64;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("neg101")).ok=flag;
+  summary("negate");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#plus} method. */
+ 
+ public void diagplus(){
+  boolean flag=false;
+  com.ibm.math.MathContext mche1;
+  java.lang.ArithmeticException ae=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("plu001")).ok=((new com.ibm.math.BigDecimal("2")).plus(mcdef).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu002")).ok=((new com.ibm.math.BigDecimal("-2")).plus(mcdef).toString()).equals("-2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu003")).ok=((new com.ibm.math.BigDecimal("2.00")).plus(mcdef).toString()).equals("2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("plu004")).ok=((new com.ibm.math.BigDecimal("-2.00")).plus(mcdef).toString()).equals("-2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("plu005")).ok=((new com.ibm.math.BigDecimal("0")).plus(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("plu006")).ok=((new com.ibm.math.BigDecimal("0.00")).plus(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("plu007")).ok=((new com.ibm.math.BigDecimal("00.0")).plus(mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("plu008")).ok=((new com.ibm.math.BigDecimal("00")).plus(mcdef).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("plu010")).ok=((new com.ibm.math.BigDecimal("2")).plus().toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu011")).ok=((new com.ibm.math.BigDecimal("-2")).plus().toString()).equals("-2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu012")).ok=((new com.ibm.math.BigDecimal("2.00")).plus().toString()).equals("2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("plu013")).ok=((new com.ibm.math.BigDecimal("-2.00")).plus().toString()).equals("-2.00");
+  (new com.ibm.math.DiagBigDecimal.Test("plu014")).ok=((new com.ibm.math.BigDecimal("0")).plus().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("plu015")).ok=((new com.ibm.math.BigDecimal("0.00")).plus().toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("plu016")).ok=((new com.ibm.math.BigDecimal("00.0")).plus().toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("plu017")).ok=((new com.ibm.math.BigDecimal("00.00")).plus().toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("plu018")).ok=((new com.ibm.math.BigDecimal("00")).plus().toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("plu020")).ok=((new com.ibm.math.BigDecimal("-2000000")).plus().toString()).equals("-2000000");
+  (new com.ibm.math.DiagBigDecimal.Test("plu021")).ok=((new com.ibm.math.BigDecimal("-2000000")).plus(mcdef).toString()).equals("-2000000");
+  (new com.ibm.math.DiagBigDecimal.Test("plu022")).ok=((new com.ibm.math.BigDecimal("-2000000")).plus(mc6).toString()).equals("-2.00000E+6");
+  (new com.ibm.math.DiagBigDecimal.Test("plu023")).ok=((new com.ibm.math.BigDecimal("2000000")).plus(mc6).toString()).equals("2.00000E+6");
+  
+  // try some exotic but silly rounding [format checks more varieties]
+  // [this mostly ensures we can set up and pass the setting]
+  mche1=new com.ibm.math.MathContext(1,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_EVEN);
+  (new com.ibm.math.DiagBigDecimal.Test("plu030")).ok=((new com.ibm.math.BigDecimal("0.24")).plus(mche1).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu031")).ok=((new com.ibm.math.BigDecimal("0.25")).plus(mche1).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu032")).ok=((new com.ibm.math.BigDecimal("0.26")).plus(mche1).toString()).equals("0.3");
+  (new com.ibm.math.DiagBigDecimal.Test("plu033")).ok=((new com.ibm.math.BigDecimal("0.14")).plus(mche1).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("plu034")).ok=((new com.ibm.math.BigDecimal("0.15")).plus(mche1).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu035")).ok=((new com.ibm.math.BigDecimal("0.16")).plus(mche1).toString()).equals("0.2");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("plu040")).ok=((new com.ibm.math.BigDecimal("0.251")).plus(mche1).toString()).equals("0.3");
+  (new com.ibm.math.DiagBigDecimal.Test("plu041")).ok=((new com.ibm.math.BigDecimal("0.151")).plus(mche1).toString()).equals("0.2");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("plu050")).ok=((new com.ibm.math.BigDecimal("-0.24")).plus(mche1).toString()).equals("-0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu051")).ok=((new com.ibm.math.BigDecimal("-0.25")).plus(mche1).toString()).equals("-0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu052")).ok=((new com.ibm.math.BigDecimal("-0.26")).plus(mche1).toString()).equals("-0.3");
+  (new com.ibm.math.DiagBigDecimal.Test("plu053")).ok=((new com.ibm.math.BigDecimal("-0.14")).plus(mche1).toString()).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("plu054")).ok=((new com.ibm.math.BigDecimal("-0.15")).plus(mche1).toString()).equals("-0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("plu055")).ok=((new com.ibm.math.BigDecimal("-0.16")).plus(mche1).toString()).equals("-0.2");
+  
+  // more fixed, potential LHS swaps if done by add 0
+  (new com.ibm.math.DiagBigDecimal.Test("plu060")).ok=((new com.ibm.math.BigDecimal("-56267E-10")).plus().toString()).equals("-0.0000056267");
+  (new com.ibm.math.DiagBigDecimal.Test("plu061")).ok=((new com.ibm.math.BigDecimal("-56267E-5")).plus().toString()).equals("-0.56267");
+  (new com.ibm.math.DiagBigDecimal.Test("plu062")).ok=((new com.ibm.math.BigDecimal("-56267E-2")).plus().toString()).equals("-562.67");
+  (new com.ibm.math.DiagBigDecimal.Test("plu063")).ok=((new com.ibm.math.BigDecimal("-56267E-1")).plus().toString()).equals("-5626.7");
+  (new com.ibm.math.DiagBigDecimal.Test("plu065")).ok=((new com.ibm.math.BigDecimal("-56267E-0")).plus().toString()).equals("-56267");
+  
+  {try{checknull:do{
+   ten.plus((com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $65){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("plu100")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.plus(mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $66){ae=$66;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("plu101")).ok=flag;
+  summary("plus");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#pow} method. */
+ 
+ public void diagpow(){
+  boolean flag;
+  com.ibm.math.BigDecimal x;
+  com.ibm.math.BigDecimal temp;
+  int n=0;
+  com.ibm.math.BigDecimal vx;
+  com.ibm.math.BigDecimal vn;
+  java.lang.ArithmeticException ae=null;
+  flag=true;
+  (new com.ibm.math.DiagBigDecimal.Test("pow001")).ok="1".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow002")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow003")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1.00"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow004")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2.00"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow005")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2.000000000"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow006")).ok=("1E-8").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-8"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow007")).ok=("1E-7").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-7"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow008")).ok="0.000001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-6"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow009")).ok="0.00001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-5"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow010")).ok="0.0001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-4"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow011")).ok="0.001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-3"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow012")).ok="0.01".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-2"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow013")).ok="0.1".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-1"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow014")).ok="1".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow015")).ok="10".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow016")).ok="100000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("8"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow017")).ok=("1E+9").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("9"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow018")).ok=("1E+99").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("99"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow019")).ok=("1E+999999999").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999999"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow020")).ok=("1E+999999998").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999998"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow021")).ok=("1E+999999997").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999997"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow022")).ok=("1E+333333333").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("333333333"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow023")).ok=("1E-333333333").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-333333333"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow024")).ok=("1E-999999998").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-999999998"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow025")).ok=("1E-999999999").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-999999999"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow026")).ok="0.5".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-1"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow027")).ok="0.25".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-2"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow028")).ok="0.0625".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-4"),mcdef).toString());
+  
+  (new com.ibm.math.DiagBigDecimal.Test("pow050")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow051")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("pow052")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("pow053")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow054")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow055")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow056")).ok=((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow057")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999999"),mcdef).toString()).equals("1E+999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("pow058")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999998"),mcdef).toString()).equals("1E+999999998");
+  (new com.ibm.math.DiagBigDecimal.Test("pow059")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999997"),mcdef).toString()).equals("1E+999999997");
+  (new com.ibm.math.DiagBigDecimal.Test("pow060")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("333333333"),mcdef).toString()).equals("1E+333333333");
+  (new com.ibm.math.DiagBigDecimal.Test("pow061")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("77"),mcdef).toString()).equals("1E+77");
+  (new com.ibm.math.DiagBigDecimal.Test("pow062")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("22"),mcdef).toString()).equals("1E+22");
+  (new com.ibm.math.DiagBigDecimal.Test("pow063")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-77"),mcdef).toString()).equals("1E-77");
+  (new com.ibm.math.DiagBigDecimal.Test("pow064")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-22"),mcdef).toString()).equals("1E-22");
+  (new com.ibm.math.DiagBigDecimal.Test("pow065")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-1"),mcdef).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("pow066")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-2"),mcdef).toString()).equals("0.25");
+  (new com.ibm.math.DiagBigDecimal.Test("pow067")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-4"),mcdef).toString()).equals("0.0625");
+  (new com.ibm.math.DiagBigDecimal.Test("pow068")).ok=((new com.ibm.math.BigDecimal("6.0")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("36");
+  (new com.ibm.math.DiagBigDecimal.Test("pow069")).ok=((new com.ibm.math.BigDecimal("-3")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("9");/* from book */
+  (new com.ibm.math.DiagBigDecimal.Test("pow070")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("2"),mcdef).pow(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("64");/* from book */
+  
+  // 1998.12.14 Next test removed as pow() no longer rounds RHS [as per ANSI]
+  // Test('pow071').ok=BigDecimal('2').pow(BigDecimal('2.000000001'),mcdef).toString == '4'/* check input rounding */
+  
+  /* General tests from original Rexx diagnostics */
+  x=new com.ibm.math.BigDecimal("0.5");
+  temp=com.ibm.math.BigDecimal.ONE;
+  flag=true;
+  {n=1;n:for(;n<=10;n++){
+   temp=temp.multiply(x).divide(com.ibm.math.BigDecimal.ONE);
+   flag=flag&(x.pow(new com.ibm.math.BigDecimal(n),mcdef).toString()).equals(temp.toString());
+   }
+  }/*n*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow080")).ok=flag;
+  
+  x=new com.ibm.math.BigDecimal("2");
+  temp=com.ibm.math.BigDecimal.ONE;
+  flag=true;
+  {n=1;n:for(;n<=29;n++){
+   temp=temp.multiply(x).divide(com.ibm.math.BigDecimal.ONE);
+   flag=flag&(x.pow(new com.ibm.math.BigDecimal(n),mcdef).toString()).equals(temp.toString());
+   flag=flag&(x.pow(new com.ibm.math.BigDecimal((int)-n),mcdef).toString()).equals(com.ibm.math.BigDecimal.ONE.divide(temp,mcdef).toString());
+   /* Note that rounding errors are possible for larger "n" */
+   /* due to the information content of the exponent        */
+   }
+  }/*n*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow081")).ok=flag;
+  
+  /* The Vienna case.  Checks both setup and 1/acc working precision */
+  // Modified 1998.12.14 as RHS no longer rounded before use (must fit)
+  // Modified 1990.02.04 as LHS is now rounded (instead of truncated to guard)
+  vx=new com.ibm.math.BigDecimal("123456789E+10"); // lhs .. rounded to 1.23E+18
+  vn=new com.ibm.math.BigDecimal("-1.23000e+2"); // rhs .. [was: -1.23455e+2, rounds to -123]
+  (new com.ibm.math.DiagBigDecimal.Test("pow090")).ok=(vx.pow(vn,mc3).toString()).equals("8.74E-2226");
+  
+  //- fixed point versions ---
+  (new com.ibm.math.DiagBigDecimal.Test("pow101")).ok="1".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow102")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow103")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1.00")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow104")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow105")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2.00")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow106")).ok="10".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("1")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow107")).ok="100000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("8")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow108")).ok="1000000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("9")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow109")).ok="10000000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("10")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow110")).ok="1".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("0")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow111")).ok="16".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("4")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow112")).ok="256".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("8")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow113")).ok="1024".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("10")).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("pow114")).ok="1.0510100501".equals((new com.ibm.math.BigDecimal("1.01")).pow(new com.ibm.math.BigDecimal("5")).toString());
+  
+  (new com.ibm.math.DiagBigDecimal.Test("pow120")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("0")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow121")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("1")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("pow122")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("pow123")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("0")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow144")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("1")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow125")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow126")).ok=((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("pow127")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("7")).toString()).equals("10000000");
+  (new com.ibm.math.DiagBigDecimal.Test("pow128")).ok=((new com.ibm.math.BigDecimal("6.0")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("36.00");
+  (new com.ibm.math.DiagBigDecimal.Test("pow129")).ok=((new com.ibm.math.BigDecimal("6.00")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("36.0000");
+  (new com.ibm.math.DiagBigDecimal.Test("pow130")).ok=((new com.ibm.math.BigDecimal("6.000")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("36.000000");
+  (new com.ibm.math.DiagBigDecimal.Test("pow131")).ok=((new com.ibm.math.BigDecimal("-3")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("9");
+  (new com.ibm.math.DiagBigDecimal.Test("pow132")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("3")).toString()).equals("64");
+  
+  /* errors */
+  {try{checknull:do{
+   ten.pow((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $67){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow150")).ok=flag;
+  {try{checknull2:do{
+   ten.pow(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $68){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow151")).ok=flag;
+  
+  flag=true;
+  {try{checkdigits:do{
+   tenlong.pow(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $69){ae=$69;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow152")).ok=flag;
+  
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.pow(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $70){ae=$70;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow153")).ok=flag;
+  
+  {try{checkpos:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("-71"));
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $71){ae=$71;
+   flag=(ae.getMessage()).equals("Negative power: -71");
+  }}/*checkpos*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow154")).ok=flag;
+  
+  {try{checkwhole:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1234"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $72){ae=$72;
+   flag=(ae.getMessage()).equals("Too many digits: 1234");
+  }}/*checkwhole*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow155")).ok=flag;
+  
+  {try{checkwhole1:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("12.34e+2"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $73){ae=$73;
+   flag=(ae.getMessage()).equals("Too many digits: 1.234E+3");
+  }}/*checkwhole1*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow156")).ok=flag;
+  
+  {try{checkwhole2:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("12.4"),mcdef);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $74){ae=$74;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 12.4");
+  }}/*checkwhole2*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow157")).ok=flag;
+  
+  {try{checkwhole3:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1.01"),mcdef);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $75){ae=$75;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 1.01");
+  }}/*checkwhole3*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow158")).ok=flag;
+  
+  {try{checkwhole4:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1.000000001"),mcdef);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $76){ae=$76;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 1.000000001");
+  }}/*checkwhole4*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow159")).ok=flag;
+  
+  {try{checkwhole5:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1.000000001"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $77){ae=$77;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 1.000000001");
+  }}/*checkwhole5*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow160")).ok=flag;
+  
+  {try{checkwhole6:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("5.67E-987654321"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $78){ae=$78;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 5.67E-987654321");
+  }}/*checkwhole6*/
+  (new com.ibm.math.DiagBigDecimal.Test("pow161")).ok=flag;
+  
+  summary("pow");
+  return;}
+
+ /*--------------------------------------------------------------------*/
+ 
+ /** Test the {@link BigDecimal#remainder} method. */
+ 
+ public void diagremainder(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("rem001")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem002")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("5"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem003")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("10"),mcdef).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem004")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("50"),mcdef).toString()).equals("13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem005")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("100"),mcdef).toString()).equals("13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem006")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("1000"),mcdef).toString()).equals("13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem007")).ok=((new com.ibm.math.BigDecimal(".13")).remainder(one).toString()).equals("0.13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem008")).ok=((new com.ibm.math.BigDecimal("0.133")).remainder(one).toString()).equals("0.133");
+  (new com.ibm.math.DiagBigDecimal.Test("rem009")).ok=((new com.ibm.math.BigDecimal("0.1033")).remainder(one).toString()).equals("0.1033");
+  (new com.ibm.math.DiagBigDecimal.Test("rem010")).ok=((new com.ibm.math.BigDecimal("1.033")).remainder(one).toString()).equals("0.033");
+  (new com.ibm.math.DiagBigDecimal.Test("rem011")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(one).toString()).equals("0.33");
+  (new com.ibm.math.DiagBigDecimal.Test("rem012")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("0.33");
+  (new com.ibm.math.DiagBigDecimal.Test("rem013")).ok=((new com.ibm.math.BigDecimal("103.3")).remainder(com.ibm.math.BigDecimal.ONE).toString()).equals("0.3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem014")).ok=((new com.ibm.math.BigDecimal("133")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem015")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem016")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(new com.ibm.math.BigDecimal(50),mcdef).toString()).equals("33");
+  (new com.ibm.math.DiagBigDecimal.Test("rem017")).ok=((new com.ibm.math.BigDecimal("101.0")).remainder(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("2.0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem018")).ok=((new com.ibm.math.BigDecimal("102.0")).remainder(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem019")).ok=((new com.ibm.math.BigDecimal("103.0")).remainder(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem020")).ok=((new com.ibm.math.BigDecimal("2.40")).remainder(one).toString()).equals("0.40");
+  (new com.ibm.math.DiagBigDecimal.Test("rem021")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(one).toString()).equals("0.400");
+  (new com.ibm.math.DiagBigDecimal.Test("rem022")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(one).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("rem023")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("rem024")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.400");
+  (new com.ibm.math.DiagBigDecimal.Test("rem025")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem026")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.30"),mcdef).toString()).equals("0.10");
+  (new com.ibm.math.DiagBigDecimal.Test("rem027")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.300"),mcdef).toString()).equals("0.100");
+  (new com.ibm.math.DiagBigDecimal.Test("rem028")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3000"),mcdef).toString()).equals("0.1000");
+  (new com.ibm.math.DiagBigDecimal.Test("rem029")).ok=((new com.ibm.math.BigDecimal("1.0")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem030")).ok=((new com.ibm.math.BigDecimal("1.00")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.10");
+  (new com.ibm.math.DiagBigDecimal.Test("rem031")).ok=((new com.ibm.math.BigDecimal("1.000")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.100");
+  (new com.ibm.math.DiagBigDecimal.Test("rem032")).ok=((new com.ibm.math.BigDecimal("1.0000")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.1000");
+  (new com.ibm.math.DiagBigDecimal.Test("rem033")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("2.001"),mcdef).toString()).equals("0.5");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("rem040")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.5000001"),mcdef).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("rem041")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.50000001"),mcdef).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("rem042")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.500000001"),mcdef).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("rem043")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.5000000001"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem044")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.50000000001"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem045")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.4999999"),mcdef).toString()).equals("1E-7");
+  (new com.ibm.math.DiagBigDecimal.Test("rem046")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.49999999"),mcdef).toString()).equals("1E-8");
+  (new com.ibm.math.DiagBigDecimal.Test("rem047")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.499999999"),mcdef).toString()).equals("1E-9");
+  (new com.ibm.math.DiagBigDecimal.Test("rem048")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.4999999999"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem049")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.49999999999"),mcdef).toString()).equals("0");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("rem050")).ok=((new com.ibm.math.BigDecimal("0.03")).remainder(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("0.03");
+  (new com.ibm.math.DiagBigDecimal.Test("rem051")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem052")).ok=((new com.ibm.math.BigDecimal("4.1")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem053")).ok=((new com.ibm.math.BigDecimal("4.01")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("rem054")).ok=((new com.ibm.math.BigDecimal("4.001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem055")).ok=((new com.ibm.math.BigDecimal("4.0001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.0001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem056")).ok=((new com.ibm.math.BigDecimal("4.00001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.00001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem057")).ok=((new com.ibm.math.BigDecimal("4.000001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.000001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem058")).ok=((new com.ibm.math.BigDecimal("4.0000001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1E-7");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("rem060")).ok=((new com.ibm.math.BigDecimal("1.2")).remainder(new com.ibm.math.BigDecimal("0.7345"),mcdef).toString()).equals("0.4655");
+  (new com.ibm.math.DiagBigDecimal.Test("rem061")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("12"),mcdef).toString()).equals("0.8");
+  (new com.ibm.math.DiagBigDecimal.Test("rem062")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.2"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem063")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("rem064")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("12"),mcdef).toString()).equals("0.800");
+  (new com.ibm.math.DiagBigDecimal.Test("rem065")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("1.7"),mcdef).toString()).equals("0.800");
+  (new com.ibm.math.DiagBigDecimal.Test("rem066")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.400");
+  
+  // MC --
+  (new com.ibm.math.DiagBigDecimal.Test("rem071")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mc6).toString()).equals("0.400");
+  (new com.ibm.math.DiagBigDecimal.Test("rem072")).ok=((new com.ibm.math.BigDecimal("12345678900000")).remainder(new com.ibm.math.BigDecimal("12e+12"),mc3).toString()).equals("3E+11");
+  
+  // Fixed --
+  (new com.ibm.math.DiagBigDecimal.Test("rem101")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("3")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem102")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("5")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem103")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("10")).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem104")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("50")).toString()).equals("13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem105")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("100")).toString()).equals("13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem106")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("1000")).toString()).equals("13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem107")).ok=((new com.ibm.math.BigDecimal(".13")).remainder(one).toString()).equals("0.13");
+  (new com.ibm.math.DiagBigDecimal.Test("rem108")).ok=((new com.ibm.math.BigDecimal("0.133")).remainder(one).toString()).equals("0.133");
+  (new com.ibm.math.DiagBigDecimal.Test("rem109")).ok=((new com.ibm.math.BigDecimal("0.1033")).remainder(one).toString()).equals("0.1033");
+  (new com.ibm.math.DiagBigDecimal.Test("rem110")).ok=((new com.ibm.math.BigDecimal("1.033")).remainder(one).toString()).equals("0.033");
+  (new com.ibm.math.DiagBigDecimal.Test("rem111")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(one).toString()).equals("0.33");
+  (new com.ibm.math.DiagBigDecimal.Test("rem112")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("0.33");
+  (new com.ibm.math.DiagBigDecimal.Test("rem113")).ok=((new com.ibm.math.BigDecimal("103.3")).remainder(com.ibm.math.BigDecimal.ONE).toString()).equals("0.3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem114")).ok=((new com.ibm.math.BigDecimal("133")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem115")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new com.ibm.math.DiagBigDecimal.Test("rem116")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(new com.ibm.math.BigDecimal(50)).toString()).equals("33");
+  (new com.ibm.math.DiagBigDecimal.Test("rem117")).ok=((new com.ibm.math.BigDecimal("101.0")).remainder(new com.ibm.math.BigDecimal(3)).toString()).equals("2.0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem118")).ok=((new com.ibm.math.BigDecimal("102.0")).remainder(new com.ibm.math.BigDecimal(3)).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem119")).ok=((new com.ibm.math.BigDecimal("103.0")).remainder(new com.ibm.math.BigDecimal(3)).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem120")).ok=((new com.ibm.math.BigDecimal("2.40")).remainder(one).toString()).equals("0.40");
+  (new com.ibm.math.DiagBigDecimal.Test("rem121")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(one).toString()).equals("0.400");
+  (new com.ibm.math.DiagBigDecimal.Test("rem122")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(one).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("rem123")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(new com.ibm.math.BigDecimal(2)).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("rem124")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2)).toString()).equals("0.400");
+  (new com.ibm.math.DiagBigDecimal.Test("rem125")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem126")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.30")).toString()).equals("0.10");
+  (new com.ibm.math.DiagBigDecimal.Test("rem127")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.300")).toString()).equals("0.100");
+  (new com.ibm.math.DiagBigDecimal.Test("rem128")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3000")).toString()).equals("0.1000");
+  (new com.ibm.math.DiagBigDecimal.Test("rem129")).ok=((new com.ibm.math.BigDecimal("1.0")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem130")).ok=((new com.ibm.math.BigDecimal("1.00")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.10");
+  (new com.ibm.math.DiagBigDecimal.Test("rem131")).ok=((new com.ibm.math.BigDecimal("1.000")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.100");
+  (new com.ibm.math.DiagBigDecimal.Test("rem132")).ok=((new com.ibm.math.BigDecimal("1.0000")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.1000");
+  (new com.ibm.math.DiagBigDecimal.Test("rem133")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("2.001")).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("rem134")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.500000001")).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("rem135")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.5000000001")).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("rem136")).ok=((new com.ibm.math.BigDecimal("0.03")).remainder(new com.ibm.math.BigDecimal("7")).toString()).equals("0.03");
+  (new com.ibm.math.DiagBigDecimal.Test("rem137")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem138")).ok=((new com.ibm.math.BigDecimal("4.1")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("rem139")).ok=((new com.ibm.math.BigDecimal("4.01")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("rem140")).ok=((new com.ibm.math.BigDecimal("4.001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem141")).ok=((new com.ibm.math.BigDecimal("4.0001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.0001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem142")).ok=((new com.ibm.math.BigDecimal("4.00001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.00001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem143")).ok=((new com.ibm.math.BigDecimal("4.000001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.000001");
+  (new com.ibm.math.DiagBigDecimal.Test("rem144")).ok=((new com.ibm.math.BigDecimal("4.0000001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.0000001"); // 1E-7, plain
+  (new com.ibm.math.DiagBigDecimal.Test("rem145")).ok=((new com.ibm.math.BigDecimal("1.2")).remainder(new com.ibm.math.BigDecimal("0.7345")).toString()).equals("0.4655");
+  (new com.ibm.math.DiagBigDecimal.Test("rem146")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("12")).toString()).equals("0.8");
+  (new com.ibm.math.DiagBigDecimal.Test("rem147")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.2")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("rem148")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("rem149")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("12")).toString()).equals("0.800");
+  (new com.ibm.math.DiagBigDecimal.Test("rem150")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("1.7")).toString()).equals("0.800");
+  (new com.ibm.math.DiagBigDecimal.Test("rem151")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.400");
+  
+  {try{checknull:do{
+   ten.remainder((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $79){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("rem200")).ok=flag;
+  {try{checknull2:do{
+   ten.remainder(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $80){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("rem201")).ok=flag;
+  
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.remainder(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $81){ae=$81;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("rem202")).ok=flag;
+  
+  {try{checkdigits:do{
+   tenlong.remainder(one,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $82){ae=$82;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("rem203")).ok=flag;
+  
+  summary("remainder");
+  return;}
+/*--------------------------------------------------------------------*/
+ 
+ /** Test the {@link BigDecimal#subtract} method. */
+ 
+ public void diagsubtract(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal alhs;
+  com.ibm.math.BigDecimal arhs;
+  java.lang.ArithmeticException ae=null;
+  
+  // [first group are 'quick confidence check']
+  (new com.ibm.math.DiagBigDecimal.Test("sub301")).ok=((new com.ibm.math.BigDecimal(2)).subtract(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("sub302")).ok=((new com.ibm.math.BigDecimal("5.75")).subtract(new com.ibm.math.BigDecimal("3.3"),mcdef).toString()).equals("2.45");
+  (new com.ibm.math.DiagBigDecimal.Test("sub303")).ok=((new com.ibm.math.BigDecimal("5")).subtract(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("8");
+  (new com.ibm.math.DiagBigDecimal.Test("sub304")).ok=((new com.ibm.math.BigDecimal("-5")).subtract(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("-2");
+  (new com.ibm.math.DiagBigDecimal.Test("sub305")).ok=((new com.ibm.math.BigDecimal("-7")).subtract(new com.ibm.math.BigDecimal("2.5"),mcdef).toString()).equals("-9.5");
+  (new com.ibm.math.DiagBigDecimal.Test("sub306")).ok=((new com.ibm.math.BigDecimal("0.7")).subtract(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("sub307")).ok=((new com.ibm.math.BigDecimal("1.3")).subtract(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub308")).ok=((new com.ibm.math.BigDecimal("1.25")).subtract(new com.ibm.math.BigDecimal("1.25"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub309")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000000"),mcdef).toString()).equals("0.23456789");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub310")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000089"),mcdef).toString()).equals("0.23456700");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub311")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000001"),mcdef).toString()).equals("0.555555556");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub312")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000005"),mcdef).toString()).equals("0.555555556");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub313")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).subtract(new com.ibm.math.BigDecimal("0.1111111111"),mcdef).toString()).equals("0.333333333");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub314")).ok=((new com.ibm.math.BigDecimal("1.0000000000")).subtract(new com.ibm.math.BigDecimal("0.00000001"),mcdef).toString()).equals("0.99999999");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub315")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).subtract(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444444");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub316")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).subtract(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444445");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub317")).ok=((new com.ibm.math.BigDecimal("70")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub318")).ok=((new com.ibm.math.BigDecimal("700")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub319")).ok=((new com.ibm.math.BigDecimal("7000")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub320")).ok=((new com.ibm.math.BigDecimal("70000")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-9.9999999E+12");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub321")).ok=((new com.ibm.math.BigDecimal("700000")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-9.9999993E+12");
+  
+  // symmetry:
+  (new com.ibm.math.DiagBigDecimal.Test("sub322")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub323")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub324")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("7000"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub325")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("9.9999999E+12");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub326")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700000"),mcdef).toString()).equals("9.9999993E+12");
+  
+  
+  // [same with fixed point arithmetic]
+  (new com.ibm.math.DiagBigDecimal.Test("sub001")).ok=((new com.ibm.math.BigDecimal(2)).subtract(new com.ibm.math.BigDecimal(3)).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("sub002")).ok=((new com.ibm.math.BigDecimal("5.75")).subtract(new com.ibm.math.BigDecimal("3.3")).toString()).equals("2.45");
+  (new com.ibm.math.DiagBigDecimal.Test("sub003")).ok=((new com.ibm.math.BigDecimal("5")).subtract(new com.ibm.math.BigDecimal("-3")).toString()).equals("8");
+  (new com.ibm.math.DiagBigDecimal.Test("sub004")).ok=((new com.ibm.math.BigDecimal("-5")).subtract(new com.ibm.math.BigDecimal("-3")).toString()).equals("-2");
+  (new com.ibm.math.DiagBigDecimal.Test("sub005")).ok=((new com.ibm.math.BigDecimal("-7")).subtract(new com.ibm.math.BigDecimal("2.5")).toString()).equals("-9.5");
+  (new com.ibm.math.DiagBigDecimal.Test("sub006")).ok=((new com.ibm.math.BigDecimal("0.7")).subtract(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("sub007")).ok=((new com.ibm.math.BigDecimal("1.3")).subtract(new com.ibm.math.BigDecimal("0.3")).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub008")).ok=((new com.ibm.math.BigDecimal("1.25")).subtract(new com.ibm.math.BigDecimal("1.25")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("sub009")).ok=((new com.ibm.math.BigDecimal("0.02")).subtract(new com.ibm.math.BigDecimal("0.02")).toString()).equals("0.00");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub010")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000000")).toString()).equals("0.23456789");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub011")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000089")).toString()).equals("0.23456700");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub012")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000001")).toString()).equals("0.5555555558");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub013")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000005")).toString()).equals("0.5555555554");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub014")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).subtract(new com.ibm.math.BigDecimal("0.1111111111")).toString()).equals("0.3333333333");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub015")).ok=((new com.ibm.math.BigDecimal("1.0000000000")).subtract(new com.ibm.math.BigDecimal("0.00000001")).toString()).equals("0.9999999900");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub016")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).subtract(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444444999");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub017")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).subtract(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444445000");
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub018")).ok=((new com.ibm.math.BigDecimal("70")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999999930");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub019")).ok=((new com.ibm.math.BigDecimal("700")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999999300");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub020")).ok=((new com.ibm.math.BigDecimal("7000")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999993000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub021")).ok=((new com.ibm.math.BigDecimal("70000")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999930000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub022")).ok=((new com.ibm.math.BigDecimal("700000")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999300000");
+  
+  // symmetry:
+  (new com.ibm.math.DiagBigDecimal.Test("sub023")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70")).toString()).equals("9999999999930");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub024")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700")).toString()).equals("9999999999300");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub025")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("7000")).toString()).equals("9999999993000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub026")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000")).toString()).equals("9999999930000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub027")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700000")).toString()).equals("9999999300000");
+  
+  // MC
+  (new com.ibm.math.DiagBigDecimal.Test("sub030")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("9.9999999E+12");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("sub031")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000"),mc6).toString()).equals("1.00000E+13");
+  
+  
+  // some of the next group are really constructor tests
+  (new com.ibm.math.DiagBigDecimal.Test("sub040")).ok=((new com.ibm.math.BigDecimal("00.0")).subtract(new com.ibm.math.BigDecimal("0.0")).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub041")).ok=((new com.ibm.math.BigDecimal("00.0")).subtract(new com.ibm.math.BigDecimal("0.00")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("sub042")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("00.0")).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("sub043")).ok=((new com.ibm.math.BigDecimal("00.0")).subtract(new com.ibm.math.BigDecimal("0.00"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub044")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("00.0"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub045")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.7");
+  (new com.ibm.math.DiagBigDecimal.Test("sub046")).ok=((new com.ibm.math.BigDecimal("3.")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.7");
+  (new com.ibm.math.DiagBigDecimal.Test("sub047")).ok=((new com.ibm.math.BigDecimal("3.0")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.7");
+  (new com.ibm.math.DiagBigDecimal.Test("sub048")).ok=((new com.ibm.math.BigDecimal("3.00")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.70");
+  (new com.ibm.math.DiagBigDecimal.Test("sub049")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub050")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("+3"),mcdef).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub051")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("6");
+  (new com.ibm.math.DiagBigDecimal.Test("sub052")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.7");
+  (new com.ibm.math.DiagBigDecimal.Test("sub053")).ok=((new com.ibm.math.BigDecimal("3.")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.7");
+  (new com.ibm.math.DiagBigDecimal.Test("sub054")).ok=((new com.ibm.math.BigDecimal("3.0")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.7");
+  (new com.ibm.math.DiagBigDecimal.Test("sub055")).ok=((new com.ibm.math.BigDecimal("3.00")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.70");
+  (new com.ibm.math.DiagBigDecimal.Test("sub056")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub057")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("+3")).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("sub058")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("-3")).toString()).equals("6");
+  
+  // the above all from add; massaged and extended.  Now some new ones...
+  // [particularly important for comparisons]
+  // NB: -1E-7 below were non-exponents pre-ANSI
+  (new com.ibm.math.DiagBigDecimal.Test("sub080")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456784")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub081")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456785")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub082")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456786")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub083")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456787")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub084")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456788")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub085")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456789")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub086")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456790")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub087")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456791")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub088")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456792")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub089")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456793")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub090")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456794")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub091")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456781")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub092")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456782")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub093")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456783")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub094")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456784")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub095")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456785")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub096")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456786")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub097")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456787")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub098")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456788")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub099")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456789")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub100")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456790")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub101")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456791")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub102")).ok="0".equals(com.ibm.math.BigDecimal.ONE.subtract(new com.ibm.math.BigDecimal("0.999999999"),mcdef).toString());
+  (new com.ibm.math.DiagBigDecimal.Test("sub103")).ok="0".equals((new com.ibm.math.BigDecimal("0.999999999")).subtract(com.ibm.math.BigDecimal.ONE,mcdef).toString());
+  
+  alhs=new com.ibm.math.BigDecimal("12345678900000");
+  arhs=new com.ibm.math.BigDecimal("9999999999999");
+  (new com.ibm.math.DiagBigDecimal.Test("sub110")).ok=(alhs.subtract(arhs,mc3).toString()).equals("2.3E+12");
+  (new com.ibm.math.DiagBigDecimal.Test("sub111")).ok=(arhs.subtract(alhs,mc3).toString()).equals("-2.3E+12");
+  (new com.ibm.math.DiagBigDecimal.Test("sub112")).ok=(alhs.subtract(arhs).toString()).equals("2345678900001");
+  (new com.ibm.math.DiagBigDecimal.Test("sub113")).ok=(arhs.subtract(alhs).toString()).equals("-2345678900001");
+  
+  // additional scaled arithmetic tests [0.97 problem]
+  (new com.ibm.math.DiagBigDecimal.Test("sub120")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".1")).toString()).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("sub121")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal(".97983")).toString()).equals("-0.97983");
+  (new com.ibm.math.DiagBigDecimal.Test("sub122")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".9")).toString()).equals("-0.9");
+  (new com.ibm.math.DiagBigDecimal.Test("sub123")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("0.102")).toString()).equals("-0.102");
+  (new com.ibm.math.DiagBigDecimal.Test("sub124")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".4")).toString()).equals("-0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("sub125")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".307")).toString()).equals("-0.307");
+  (new com.ibm.math.DiagBigDecimal.Test("sub126")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".43822")).toString()).equals("-0.43822");
+  (new com.ibm.math.DiagBigDecimal.Test("sub127")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".911")).toString()).equals("-0.911");
+  (new com.ibm.math.DiagBigDecimal.Test("sub128")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal(".02")).toString()).equals("-0.02");
+  (new com.ibm.math.DiagBigDecimal.Test("sub129")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal(".392")).toString()).equals("-0.392");
+  (new com.ibm.math.DiagBigDecimal.Test("sub130")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".26")).toString()).equals("-0.26");
+  (new com.ibm.math.DiagBigDecimal.Test("sub131")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("0.51")).toString()).equals("-0.51");
+  (new com.ibm.math.DiagBigDecimal.Test("sub132")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".2234")).toString()).equals("-0.2234");
+  (new com.ibm.math.DiagBigDecimal.Test("sub133")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".2")).toString()).equals("-0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("sub134")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal(".0008")).toString()).equals("-0.0008");
+  // 0. on left
+  (new com.ibm.math.DiagBigDecimal.Test("sub140")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.1")).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("sub141")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("-.97983")).toString()).equals("0.97983");
+  (new com.ibm.math.DiagBigDecimal.Test("sub142")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.9")).toString()).equals("0.9");
+  (new com.ibm.math.DiagBigDecimal.Test("sub143")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-0.102")).toString()).equals("0.102");
+  (new com.ibm.math.DiagBigDecimal.Test("sub144")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.4")).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("sub145")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.307")).toString()).equals("0.307");
+  (new com.ibm.math.DiagBigDecimal.Test("sub146")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.43822")).toString()).equals("0.43822");
+  (new com.ibm.math.DiagBigDecimal.Test("sub147")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.911")).toString()).equals("0.911");
+  (new com.ibm.math.DiagBigDecimal.Test("sub148")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.02")).toString()).equals("0.02");
+  (new com.ibm.math.DiagBigDecimal.Test("sub149")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("-.392")).toString()).equals("0.392");
+  (new com.ibm.math.DiagBigDecimal.Test("sub150")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.26")).toString()).equals("0.26");
+  (new com.ibm.math.DiagBigDecimal.Test("sub151")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-0.51")).toString()).equals("0.51");
+  (new com.ibm.math.DiagBigDecimal.Test("sub152")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.2234")).toString()).equals("0.2234");
+  (new com.ibm.math.DiagBigDecimal.Test("sub153")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.2")).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("sub154")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.0008")).toString()).equals("0.0008");
+  // negatives of same
+  (new com.ibm.math.DiagBigDecimal.Test("sub160")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.1")).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("sub161")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal("-.97983")).toString()).equals("0.97983");
+  (new com.ibm.math.DiagBigDecimal.Test("sub162")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.9")).toString()).equals("0.9");
+  (new com.ibm.math.DiagBigDecimal.Test("sub163")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-0.102")).toString()).equals("0.102");
+  (new com.ibm.math.DiagBigDecimal.Test("sub164")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.4")).toString()).equals("0.4");
+  (new com.ibm.math.DiagBigDecimal.Test("sub165")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.307")).toString()).equals("0.307");
+  (new com.ibm.math.DiagBigDecimal.Test("sub166")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.43822")).toString()).equals("0.43822");
+  (new com.ibm.math.DiagBigDecimal.Test("sub167")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.911")).toString()).equals("0.911");
+  (new com.ibm.math.DiagBigDecimal.Test("sub168")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal("-.02")).toString()).equals("0.02");
+  (new com.ibm.math.DiagBigDecimal.Test("sub169")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal("-.392")).toString()).equals("0.392");
+  (new com.ibm.math.DiagBigDecimal.Test("sub170")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.26")).toString()).equals("0.26");
+  (new com.ibm.math.DiagBigDecimal.Test("sub171")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-0.51")).toString()).equals("0.51");
+  (new com.ibm.math.DiagBigDecimal.Test("sub172")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.2234")).toString()).equals("0.2234");
+  (new com.ibm.math.DiagBigDecimal.Test("sub173")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.2")).toString()).equals("0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("sub174")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal("-.0008")).toString()).equals("0.0008");
+  
+  // more fixed, LHS swaps [really same as testcases under add]
+  (new com.ibm.math.DiagBigDecimal.Test("sub180")).ok=((new com.ibm.math.BigDecimal("-56267E-10")).subtract(zero).toString()).equals("-0.0000056267");
+  (new com.ibm.math.DiagBigDecimal.Test("sub181")).ok=((new com.ibm.math.BigDecimal("-56267E-5")).subtract(zero).toString()).equals("-0.56267");
+  (new com.ibm.math.DiagBigDecimal.Test("sub182")).ok=((new com.ibm.math.BigDecimal("-56267E-2")).subtract(zero).toString()).equals("-562.67");
+  (new com.ibm.math.DiagBigDecimal.Test("sub183")).ok=((new com.ibm.math.BigDecimal("-56267E-1")).subtract(zero).toString()).equals("-5626.7");
+  (new com.ibm.math.DiagBigDecimal.Test("sub185")).ok=((new com.ibm.math.BigDecimal("-56267E-0")).subtract(zero).toString()).equals("-56267");
+  
+  {try{checknull:do{
+   ten.subtract((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $83){
+   flag=true;
+  }}/*checknull*/
+  (new com.ibm.math.DiagBigDecimal.Test("sub200")).ok=flag;
+  {try{checknull2:do{
+   ten.subtract(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $84){
+   flag=true;
+  }}/*checknull2*/
+  (new com.ibm.math.DiagBigDecimal.Test("sub201")).ok=flag;
+  
+  {try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.subtract(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $85){ae=$85;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("sub202")).ok=flag;
+  {try{checkdigits:do{
+   tenlong.subtract(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $86){ae=$86;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }}/*checkdigits*/
+  (new com.ibm.math.DiagBigDecimal.Test("sub203")).ok=flag;
+  summary("subtract");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /* ----------------------------------------------------------------- */
+ /* Other methods                                                     */
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the <code>BigDecimal.byteValue()</code> method. */
+ 
+ public void diagbyteValue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  
+  
+  (new com.ibm.math.DiagBigDecimal.Test("byv001")).ok=((((byte)-128)))==((new com.ibm.math.BigDecimal("-128")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv002")).ok=((0))==((new com.ibm.math.BigDecimal("0")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv003")).ok=((1))==((new com.ibm.math.BigDecimal("1")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv004")).ok=((99))==((new com.ibm.math.BigDecimal("99")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv005")).ok=((127))==((new com.ibm.math.BigDecimal("127")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv006")).ok=((-128))==((new com.ibm.math.BigDecimal("128")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv007")).ok=((-127))==((new com.ibm.math.BigDecimal("129")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv008")).ok=((127))==((new com.ibm.math.BigDecimal("-129")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv009")).ok=((126))==((new com.ibm.math.BigDecimal("-130")).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv010")).ok=((bmax))==((new com.ibm.math.BigDecimal(bmax)).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv011")).ok=((bmin))==((new com.ibm.math.BigDecimal(bmin)).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv012")).ok=((bneg))==((new com.ibm.math.BigDecimal(bneg)).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv013")).ok=((bzer))==((new com.ibm.math.BigDecimal(bzer)).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv014")).ok=((bpos))==((new com.ibm.math.BigDecimal(bpos)).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv015")).ok=((bmin))==((new com.ibm.math.BigDecimal(bmax+1)).byteValue());
+  (new com.ibm.math.DiagBigDecimal.Test("byv016")).ok=((bmax))==((new com.ibm.math.BigDecimal(bmin-1)).byteValue());
+  
+  (new com.ibm.math.DiagBigDecimal.Test("byv021")).ok=((((byte)-128)))==((new com.ibm.math.BigDecimal("-128")).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv022")).ok=((0))==((new com.ibm.math.BigDecimal("0")).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv023")).ok=((1))==((new com.ibm.math.BigDecimal("1")).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv024")).ok=((99))==((new com.ibm.math.BigDecimal("99")).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv025")).ok=((127))==((new com.ibm.math.BigDecimal("127")).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv026")).ok=((bmax))==((new com.ibm.math.BigDecimal(bmax)).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv027")).ok=((bmin))==((new com.ibm.math.BigDecimal(bmin)).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv028")).ok=((bneg))==((new com.ibm.math.BigDecimal(bneg)).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv029")).ok=((bzer))==((new com.ibm.math.BigDecimal(bzer)).byteValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("byv030")).ok=((bpos))==((new com.ibm.math.BigDecimal(bpos)).byteValueExact());
+  {try{
+   v="-129";
+   (new com.ibm.math.BigDecimal(v)).byteValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $87){ae=$87;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("byv100")).ok=flag;
+  {try{
+   v="128";
+   (new com.ibm.math.BigDecimal(v)).byteValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $88){ae=$88;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("byv101")).ok=flag;
+  {try{
+   v="1.5";
+   (new com.ibm.math.BigDecimal(v)).byteValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $89){ae=$89;
+   flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("byv102")).ok=flag;
+  
+  badstrings=new java.lang.String[]{"1234",(new com.ibm.math.BigDecimal(bmax)).add(one).toString(),(new com.ibm.math.BigDecimal(bmin)).subtract(one).toString(),"170","270","370","470","570","670","770","870","970","-170","-270","-370","-470","-570","-670","-770","-870","-970",(new com.ibm.math.BigDecimal(bmin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(bmax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(bmin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(bmax)).multiply(ten).toString(),"-1234"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225
+  // 226
+  // 227
+  // 228
+  // 229
+  // 230
+  // 231
+  // 232
+  // 233
+  // 234
+  // 235
+  // 236
+  // 237
+  // 238
+  // 239
+  // 240
+  // 241
+  // 242
+  // 243
+  // 244
+  // 245
+  {int $90=badstrings.length;i=0;i:for(;$90>0;$90--,i++){
+   {try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).byteValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $91){ae=$91;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("byv"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("byteValue+");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#compareTo(java.lang.Object)} method. */
+ 
+ public void diagcomparetoObj(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal d;
+  com.ibm.math.BigDecimal long1;
+  com.ibm.math.BigDecimal long2;
+  
+  d=new com.ibm.math.BigDecimal(17);
+  (new com.ibm.math.DiagBigDecimal.Test("cto001")).ok=(d.compareTo((java.lang.Object)(new com.ibm.math.BigDecimal(66))))==(-1);
+  (new com.ibm.math.DiagBigDecimal.Test("cto002")).ok=(d.compareTo((java.lang.Object)((new com.ibm.math.BigDecimal(10)).add(new com.ibm.math.BigDecimal(7)))))==0;
+  (new com.ibm.math.DiagBigDecimal.Test("cto003")).ok=(d.compareTo((java.lang.Object)(new com.ibm.math.BigDecimal(10))))==1;
+  long1=new com.ibm.math.BigDecimal("12345678903");
+  long2=new com.ibm.math.BigDecimal("12345678900");
+  (new com.ibm.math.DiagBigDecimal.Test("cto004")).ok=(long1.compareTo((java.lang.Object)long2))==1;
+  (new com.ibm.math.DiagBigDecimal.Test("cto005")).ok=(long2.compareTo((java.lang.Object)long1))==(-1);
+  (new com.ibm.math.DiagBigDecimal.Test("cto006")).ok=(long2.compareTo((java.lang.Object)long2))==0;
+  {try{
+   d.compareTo((java.lang.Object)null);
+   flag=false;
+  }
+  catch (java.lang.NullPointerException $92){
+   flag=true; // should get here
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("cto101")).ok=flag;
+  {try{
+   d.compareTo((java.lang.Object)"foo");
+   flag=false;
+  }
+  catch (java.lang.ClassCastException $93){
+   flag=true; // should get here
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("cto102")).ok=flag;
+  summary("compareTo(Obj)");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#doubleValue} method. */
+ 
+ public void diagdoublevalue(){
+  java.lang.String val;
+  // 1999.03.07 Infinities no longer errors
+  val="-1";
+  (new com.ibm.math.DiagBigDecimal.Test("dov001")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="-0.1";
+  (new com.ibm.math.DiagBigDecimal.Test("dov002")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="0";
+  (new com.ibm.math.DiagBigDecimal.Test("dov003")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="0.1";
+  (new com.ibm.math.DiagBigDecimal.Test("dov004")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="1";
+  (new com.ibm.math.DiagBigDecimal.Test("dov005")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="1e1000";
+  (new com.ibm.math.DiagBigDecimal.Test("dov006")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==java.lang.Double.POSITIVE_INFINITY;
+  val="-1e1000";
+  (new com.ibm.math.DiagBigDecimal.Test("dov007")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==java.lang.Double.NEGATIVE_INFINITY;
+  summary("doubleValue");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#equals} method. */
+ 
+ public void diagequals(){
+  com.ibm.math.BigDecimal d;
+  d=new com.ibm.math.BigDecimal(17);
+  (new com.ibm.math.DiagBigDecimal.Test("equ001")).ok=(!(d.equals((java.lang.Object)null)));
+  (new com.ibm.math.DiagBigDecimal.Test("equ002")).ok=(!(d.equals((java.lang.Object)"foo")));
+  (new com.ibm.math.DiagBigDecimal.Test("equ003")).ok=(!(d.equals((java.lang.Object)(new com.ibm.math.BigDecimal(66)))));
+  (new com.ibm.math.DiagBigDecimal.Test("equ004")).ok=d.equals((java.lang.Object)d);
+  (new com.ibm.math.DiagBigDecimal.Test("equ005")).ok=d.equals((java.lang.Object)((new com.ibm.math.BigDecimal(10)).add(new com.ibm.math.BigDecimal(7))));
+  summary("equals");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#floatValue} method. */
+ 
+ public void diagfloatvalue(){
+  java.lang.String val;
+  // 1999.03.07 Infinities no longer errors
+  val="-1";
+  (new com.ibm.math.DiagBigDecimal.Test("flv001")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="-0.1";
+  (new com.ibm.math.DiagBigDecimal.Test("flv002")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="0";
+  (new com.ibm.math.DiagBigDecimal.Test("flv003")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="0.1";
+  (new com.ibm.math.DiagBigDecimal.Test("flv004")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="1";
+  (new com.ibm.math.DiagBigDecimal.Test("flv005")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="1e200";
+  (new com.ibm.math.DiagBigDecimal.Test("flv006")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.POSITIVE_INFINITY;
+  val="-1e200";
+  (new com.ibm.math.DiagBigDecimal.Test("flv007")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.NEGATIVE_INFINITY;
+  val="1e1000";
+  (new com.ibm.math.DiagBigDecimal.Test("flv008")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.POSITIVE_INFINITY;
+  val="-1e1000";
+  (new com.ibm.math.DiagBigDecimal.Test("flv009")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.NEGATIVE_INFINITY;
+  summary("floatValue");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#format} method. */
+ 
+ public void diagformat(){
+  boolean flag=false;
+  int eng;
+  int sci;
+  com.ibm.math.BigDecimal d04;
+  com.ibm.math.BigDecimal d05;
+  com.ibm.math.BigDecimal d06;
+  com.ibm.math.BigDecimal d15;
+  java.lang.IllegalArgumentException iae=null;
+  com.ibm.math.BigDecimal d050;
+  com.ibm.math.BigDecimal d150;
+  com.ibm.math.BigDecimal m050;
+  com.ibm.math.BigDecimal m150;
+  com.ibm.math.BigDecimal d051;
+  com.ibm.math.BigDecimal d151;
+  com.ibm.math.BigDecimal d000;
+  com.ibm.math.BigDecimal d500;
+  java.lang.ArithmeticException ae=null;
+  // 1999.02.09 now only two signatures for format(), so some tests below
+  //            may now be redundant
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for001")).ok=((new com.ibm.math.BigDecimal("12.3")).format(-1,-1)).equals("12.3");
+  (new com.ibm.math.DiagBigDecimal.Test("for002")).ok=((new com.ibm.math.BigDecimal("-12.73")).format(-1,-1)).equals("-12.73");
+  (new com.ibm.math.DiagBigDecimal.Test("for003")).ok=((new com.ibm.math.BigDecimal("0.000")).format(-1,-1)).equals("0.000");
+  (new com.ibm.math.DiagBigDecimal.Test("for004")).ok=((new com.ibm.math.BigDecimal("3E+3")).format(-1,-1)).equals("3000");
+  (new com.ibm.math.DiagBigDecimal.Test("for005")).ok=((new com.ibm.math.BigDecimal("3")).format(4,-1)).equals("   3");
+  (new com.ibm.math.DiagBigDecimal.Test("for006")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,0)).equals("   2");
+  (new com.ibm.math.DiagBigDecimal.Test("for007")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,1)).equals("   1.7");
+  (new com.ibm.math.DiagBigDecimal.Test("for008")).ok=((new com.ibm.math.BigDecimal("1.75")).format(4,1)).equals("   1.8");
+  (new com.ibm.math.DiagBigDecimal.Test("for009")).ok=((new com.ibm.math.BigDecimal("0.5")).format(4,1)).equals("   0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("for010")).ok=((new com.ibm.math.BigDecimal("0.05")).format(4,1)).equals("   0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for011")).ok=((new com.ibm.math.BigDecimal("0.04")).format(4,1)).equals("   0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for012")).ok=((new com.ibm.math.BigDecimal("0")).format(4,0)).equals("   0");
+  (new com.ibm.math.DiagBigDecimal.Test("for013")).ok=((new com.ibm.math.BigDecimal("0")).format(4,1)).equals("   0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for014")).ok=((new com.ibm.math.BigDecimal("0")).format(4,2)).equals("   0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("for015")).ok=((new com.ibm.math.BigDecimal("0")).format(4,3)).equals("   0.000");
+  (new com.ibm.math.DiagBigDecimal.Test("for016")).ok=((new com.ibm.math.BigDecimal("0")).format(4,4)).equals("   0.0000");
+  (new com.ibm.math.DiagBigDecimal.Test("for017")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,0)).equals("   0");
+  (new com.ibm.math.DiagBigDecimal.Test("for018")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,1)).equals("   0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for019")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,2)).equals("   0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("for020")).ok=((new com.ibm.math.BigDecimal("0.004")).format(4,2)).equals("   0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("for021")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,3)).equals("   0.005");
+  (new com.ibm.math.DiagBigDecimal.Test("for022")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,4)).equals("   0.0050");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for023")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,2)).equals("   1.73");
+  (new com.ibm.math.DiagBigDecimal.Test("for024")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,3)).equals("   1.730");
+  (new com.ibm.math.DiagBigDecimal.Test("for025")).ok=((new com.ibm.math.BigDecimal("-.76")).format(4,1)).equals("  -0.8");
+  (new com.ibm.math.DiagBigDecimal.Test("for026")).ok=((new com.ibm.math.BigDecimal("-12.73")).format(-1,4)).equals("-12.7300");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for027")).ok=((new com.ibm.math.BigDecimal("3.03")).format(4,-1)).equals("   3.03");
+  (new com.ibm.math.DiagBigDecimal.Test("for028")).ok=((new com.ibm.math.BigDecimal("3.03")).format(4,1)).equals("   3.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for029")).ok=((new com.ibm.math.BigDecimal("3.03")).format(4,-1,3,-1,-1,-1)).equals("   3.03     ");
+  (new com.ibm.math.DiagBigDecimal.Test("for030")).ok=((new com.ibm.math.BigDecimal("3.03")).format(-1,-1,3,-1,-1,-1)).equals("3.03     ");
+  (new com.ibm.math.DiagBigDecimal.Test("for031")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,-1,4,-1,-1)).equals("1.234573E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for032")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,-1,5,-1,-1)).equals("12345.73");
+  (new com.ibm.math.DiagBigDecimal.Test("for033")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,-1,6,-1,-1)).equals("12345.73");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for034")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,8,-1,3,-1,-1)).equals("1.23457300E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for035")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,7,-1,3,-1,-1)).equals("1.2345730E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for036")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,6,-1,3,-1,-1)).equals("1.234573E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for037")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,5,-1,3,-1,-1)).equals("1.23457E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for038")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,4,-1,3,-1,-1)).equals("1.2346E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for039")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,3,-1,3,-1,-1)).equals("1.235E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for040")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,2,-1,3,-1,-1)).equals("1.23E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for041")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,1,-1,3,-1,-1)).equals("1.2E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for042")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,0,-1,3,-1,-1)).equals("1E+4");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for043")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,6,-1,3,-1,-1)).equals("9.999999E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for044")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,5,-1,3,-1,-1)).equals("1.00000E+5");
+  (new com.ibm.math.DiagBigDecimal.Test("for045")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,2,-1,3,-1,-1)).equals("1.00E+5");
+  (new com.ibm.math.DiagBigDecimal.Test("for046")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,0,-1,3,-1,-1)).equals("1E+5");
+  (new com.ibm.math.DiagBigDecimal.Test("for047")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(3,0,-1,3,-1,-1)).equals("  1E+5");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for048")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,2,2,-1,-1)).equals("1.234573E+04");
+  (new com.ibm.math.DiagBigDecimal.Test("for049")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,3,-1,0,-1,-1)).equals("1.235E+4");
+  (new com.ibm.math.DiagBigDecimal.Test("for050")).ok=((new com.ibm.math.BigDecimal("1.234573")).format(-1,3,-1,0,-1,-1)).equals("1.235");
+  (new com.ibm.math.DiagBigDecimal.Test("for051")).ok=((new com.ibm.math.BigDecimal("123.45")).format(-1,3,2,0,-1,-1)).equals("1.235E+02");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for052")).ok=((new com.ibm.math.BigDecimal("0.444")).format(-1,0)).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("for053")).ok=((new com.ibm.math.BigDecimal("-0.444")).format(-1,0)).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("for054")).ok=((new com.ibm.math.BigDecimal("0.4")).format(-1,0)).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("for055")).ok=((new com.ibm.math.BigDecimal("-0.4")).format(-1,0)).equals("0");
+  
+  eng=com.ibm.math.MathContext.ENGINEERING;
+  sci=com.ibm.math.MathContext.SCIENTIFIC;
+  (new com.ibm.math.DiagBigDecimal.Test("for060")).ok=((new com.ibm.math.BigDecimal("1234.5")).format(-1,3,2,0,eng,-1)).equals("1.235E+03");
+  (new com.ibm.math.DiagBigDecimal.Test("for061")).ok=((new com.ibm.math.BigDecimal("12345")).format(-1,3,3,0,eng,-1)).equals("12.345E+003");
+  (new com.ibm.math.DiagBigDecimal.Test("for062")).ok=((new com.ibm.math.BigDecimal("12345")).format(-1,3,3,0,sci,-1)).equals("1.235E+004");
+  (new com.ibm.math.DiagBigDecimal.Test("for063")).ok=((new com.ibm.math.BigDecimal("1234.5")).format(4,3,2,0,eng,-1)).equals("   1.235E+03");
+  (new com.ibm.math.DiagBigDecimal.Test("for064")).ok=((new com.ibm.math.BigDecimal("12345")).format(5,3,3,0,eng,-1)).equals("   12.345E+003");
+  (new com.ibm.math.DiagBigDecimal.Test("for065")).ok=((new com.ibm.math.BigDecimal("12345")).format(6,3,3,0,sci,-1)).equals("     1.235E+004");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for066")).ok=((new com.ibm.math.BigDecimal("1.2345")).format(-1,3,2,0,-1,-1)).equals("1.235    ");
+  (new com.ibm.math.DiagBigDecimal.Test("for067")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,3,6,-1,-1)).equals("12345.73     ");
+  (new com.ibm.math.DiagBigDecimal.Test("for068")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,0)).equals("1234500000");
+  (new com.ibm.math.DiagBigDecimal.Test("for069")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,1)).equals("1234500000.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for070")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,2)).equals("1234500000.00");
+  (new com.ibm.math.DiagBigDecimal.Test("for071")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,3)).equals("1234500000.000");
+  (new com.ibm.math.DiagBigDecimal.Test("for072")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,4)).equals("1234500000.0000");
+  
+  // some from ANSI Dallas [Nov 1998]
+  (new com.ibm.math.DiagBigDecimal.Test("for073")).ok=((new com.ibm.math.BigDecimal("99.999")).format(-1,2,-1,2,-1,-1)).equals("100.00");
+  (new com.ibm.math.DiagBigDecimal.Test("for074")).ok=((new com.ibm.math.BigDecimal("0.99999")).format(-1,4,2,2,-1,-1)).equals("1.0000    ");
+  
+  // try some rounding modes [default ROUND_HALF_UP widely tested above]
+  // the first few also tests that defaults are accepted for the others
+  d04=new com.ibm.math.BigDecimal("0.04");
+  d05=new com.ibm.math.BigDecimal("0.05");
+  d06=new com.ibm.math.BigDecimal("0.06");
+  d15=new com.ibm.math.BigDecimal("0.15");
+  (new com.ibm.math.DiagBigDecimal.Test("for080")).ok=(d05.format(-1,1)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for081")).ok=(d05.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_UP)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for082")).ok=(d05.format(-1,1,-1,-1,-1,-1)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for083")).ok=(d05.format(-1,-1,-1,-1,-1,-1)).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("for084")).ok=(d05.format(-1,-1)).equals("0.05");
+  {try{
+   d05.format(-1,-1,-1,-1,-1,30); // bad mode
+   flag=false; // shouldn't get here
+  }
+  catch (java.lang.IllegalArgumentException $94){iae=$94;
+   flag=(iae.getMessage()).equals("Bad argument 6 to format: 30");
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for085")).ok=flag;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for090")).ok=(d04.format(-1,1)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for091")).ok=(d06.format(-1,1)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for092")).ok=(d04.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_DOWN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for093")).ok=(d05.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_DOWN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for094")).ok=(d06.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_DOWN)).equals("0.1");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for095")).ok=(d04.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for096")).ok=(d05.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for097")).ok=(d06.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for098")).ok=(d15.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.2");
+  d050=new com.ibm.math.BigDecimal("0.050");
+  d150=new com.ibm.math.BigDecimal("0.150");
+  (new com.ibm.math.DiagBigDecimal.Test("for099")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for100")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.2");
+  m050=new com.ibm.math.BigDecimal("-0.050");
+  m150=new com.ibm.math.BigDecimal("-0.150");
+  (new com.ibm.math.DiagBigDecimal.Test("for101")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for102")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("-0.2");
+  d051=new com.ibm.math.BigDecimal("0.051");
+  d151=new com.ibm.math.BigDecimal("0.151");
+  (new com.ibm.math.DiagBigDecimal.Test("for103")).ok=(d051.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for104")).ok=(d151.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.2");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for105")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for106")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for107")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for108")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("0.2");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for109")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for110")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("-0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("for111")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for112")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("0.1");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for113")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for114")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("-0.2");
+  (new com.ibm.math.DiagBigDecimal.Test("for115")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for116")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("0.2");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("for117")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for118")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("for119")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for120")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("0.1");
+  
+  d000=new com.ibm.math.BigDecimal("0.000");
+  d500=new com.ibm.math.BigDecimal("0.500");
+  (new com.ibm.math.DiagBigDecimal.Test("for121")).ok=(d000.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("for122")).ok=(d000.format(-1,2,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("for123")).ok=(d000.format(-1,3,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.000");
+  {try{ // this should trap..
+   d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $95){ae=$95;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for124")).ok=flag;
+  (new com.ibm.math.DiagBigDecimal.Test("for125")).ok=(d050.format(-1,2,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.05");
+  (new com.ibm.math.DiagBigDecimal.Test("for126")).ok=(d050.format(-1,3,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.050");
+  (new com.ibm.math.DiagBigDecimal.Test("for127")).ok=(d500.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("for128")).ok=(d500.format(-1,2,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.50");
+  (new com.ibm.math.DiagBigDecimal.Test("for129")).ok=(d500.format(-1,3,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.500");
+  
+  // bad negs --
+  {try{
+   d050.format(-2,-1,-1,-1,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $96){
+   flag=true;
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for131")).ok=flag;
+  {try{
+   d050.format(-1,-2,-1,-1,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $97){
+   flag=true;
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for132")).ok=flag;
+  {try{
+   d050.format(-1,-1,-2,-1,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $98){
+   flag=true;
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for133")).ok=flag;
+  {try{
+   d050.format(-1,-1,-1,-2,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $99){
+   flag=true;
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for134")).ok=flag;
+  {try{
+   d050.format(-1,-1,-1,-1,-2,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $100){
+   flag=true;
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for135")).ok=flag;
+  {try{
+   d050.format(-1,-1,-1,-1,-1,-2);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $101){
+   flag=true;
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("for136")).ok=flag;
+  
+  summary("format");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#hashCode} method. */
+ 
+ public void diaghashcode(){
+  java.lang.String hs;
+  com.ibm.math.BigDecimal d;
+  hs="27827817";
+  d=new com.ibm.math.BigDecimal(hs);
+  (new com.ibm.math.DiagBigDecimal.Test("has001")).ok=(d.hashCode())==(hs.hashCode());
+  hs="1.265E+200";
+  d=new com.ibm.math.BigDecimal(hs);
+  (new com.ibm.math.DiagBigDecimal.Test("has002")).ok=(d.hashCode())==(hs.hashCode());
+  hs="126.5E+200";
+  d=new com.ibm.math.BigDecimal(hs);
+  (new com.ibm.math.DiagBigDecimal.Test("has003")).ok=(d.hashCode())!=(hs.hashCode());
+  summary("hashCode");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#intValue} method. */
+ 
+ public void diagintvalue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  com.ibm.math.BigDecimal dimax;
+  com.ibm.math.BigDecimal num=null;
+  com.ibm.math.BigDecimal dv=null;
+  com.ibm.math.BigDecimal dimin;
+  
+  
+  // intValue --
+  
+  (new com.ibm.math.DiagBigDecimal.Test("inv001")).ok=imin==((new com.ibm.math.BigDecimal(imin)).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv002")).ok=((99))==((new com.ibm.math.BigDecimal("99")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv003")).ok=((1))==((new com.ibm.math.BigDecimal("1")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv004")).ok=((0))==((new com.ibm.math.BigDecimal("0")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv005")).ok=((-1))==((new com.ibm.math.BigDecimal("-1")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv006")).ok=((-99))==((new com.ibm.math.BigDecimal("-99")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv007")).ok=imax==((new com.ibm.math.BigDecimal(imax)).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv008")).ok=((5))==((new com.ibm.math.BigDecimal("5.0")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv009")).ok=((5))==((new com.ibm.math.BigDecimal("5.3")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv010")).ok=((5))==((new com.ibm.math.BigDecimal("5.5")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv011")).ok=((5))==((new com.ibm.math.BigDecimal("5.7")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv012")).ok=((5))==((new com.ibm.math.BigDecimal("5.9")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv013")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.0")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv014")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.3")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv015")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.5")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv016")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.7")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv017")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.9")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv018")).ok=((new com.ibm.math.BigDecimal("88888888888")).intValue())==(-1305424328); // ugh
+  (new com.ibm.math.DiagBigDecimal.Test("inv019")).ok=((new com.ibm.math.BigDecimal("-88888888888")).intValue())==1305424328; // ugh
+  (new com.ibm.math.DiagBigDecimal.Test("inv020")).ok=((imin))==((new com.ibm.math.BigDecimal((((long)imax))+1)).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv021")).ok=((imax))==((new com.ibm.math.BigDecimal((((long)imin))-1)).intValue());
+  
+  // intValueExact --
+  
+  (new com.ibm.math.DiagBigDecimal.Test("inv101")).ok=imin==((new com.ibm.math.BigDecimal(imin)).intValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("inv102")).ok=((99))==((new com.ibm.math.BigDecimal("99")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv103")).ok=((1))==((new com.ibm.math.BigDecimal("1")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv104")).ok=((0))==((new com.ibm.math.BigDecimal("0")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv105")).ok=((-1))==((new com.ibm.math.BigDecimal("-1")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv106")).ok=((-99))==((new com.ibm.math.BigDecimal("-99")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv107")).ok=imax==((new com.ibm.math.BigDecimal(imax)).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv108")).ok=((5))==((new com.ibm.math.BigDecimal("5.0")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv109")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.0")).intValue());
+  (new com.ibm.math.DiagBigDecimal.Test("inv110")).ok=imax==((new com.ibm.math.BigDecimal(imax)).intValueExact());
+  
+  {try{
+   v="-88588688888";
+   (new com.ibm.math.BigDecimal(v)).intValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $102){ae=$102;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("inv200")).ok=flag;
+  
+  // this one could raise either overflow or bad decimal part
+  {try{
+   v="88088818888.00001";
+   (new com.ibm.math.BigDecimal(v)).intValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $103){
+   flag=true;
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("inv201")).ok=flag;
+  
+  // 1999.10.28: the testcases marked '*' failed
+  badstrings=new java.lang.String[]{"12345678901",(new com.ibm.math.BigDecimal(imax)).add(one).toString(),(new com.ibm.math.BigDecimal(imin)).subtract(one).toString(),"3731367293","4731367293","5731367293","6731367293","7731367293","8731367293","9731367293","-3731367293","-4731367293","-5731367293","-6731367293","-7731367293","-8731367293","-9731367293",(new com.ibm.math.BigDecimal(imin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(imax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(imin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(imax)).multiply(ten).toString(),"4731367293","4831367293","4931367293","5031367293","5131367293","5231367293","5331367293","5431367293","5531367293","5631367293","5731367293","5831367293","5931367293","6031367293","6131367293","6231367293","6331367293","6431367293","6531367293","6631367293","6731367293","2200000000","2300000000","2400000000","2500000000","2600000000","2700000000","2800000000","2900000000","-2200000000","-2300000000","-2400000000","-2500000000","-2600000000","-2700000000","-2800000000","-2900000000","25E+8","-25E+8","-12345678901"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225  *
+  // 226
+  // 227
+  // 228
+  // 229  *
+  // 230
+  // 231
+  // 232  *
+  // 233
+  // 234
+  // 235
+  // 236  *
+  // 237
+  // 238
+  // 239
+  // 240
+  // 241
+  // 242  *
+  // 243  *
+  // 244  *
+  // 245  *
+  // 246  *
+  // 247  *
+  // 248  *
+  // 249  *
+  // 250  *
+  // 251  *
+  // 252  *
+  // 253  *
+  // 254  *
+  // 255  *
+  // 256  *
+  // 257  *
+  // 258  *
+  // 259
+  // 260
+  // 261
+  // 262
+  // 263
+  // 264
+  // 265
+  // 266
+  // 267
+  // 268
+  // 269
+  // 270
+  // 271
+  // 272
+  // 273
+  // 274
+  // 275
+  // 276
+  // 277
+  // 278
+  // 279
+  // 280
+  {int $104=badstrings.length;i=0;i:for(;$104>0;$104--,i++){
+   {try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $105){ae=$105;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("inv"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  // now slip in some single bits...
+  dimax=new com.ibm.math.BigDecimal(imax);
+  {i=0;i:for(;i<=49;i++){
+   {try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dimax.add(num,mc50);
+    dv.intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $106){ae=$106;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("inv"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  dimin=new com.ibm.math.BigDecimal(imin);
+  {i=50;i:for(;i<=99;i++){
+   {try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dimin.subtract(num,mc50);
+    dv.intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $107){ae=$107;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("inv"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  
+  // the following should all raise bad-decimal-part exceptions
+  badstrings=new java.lang.String[]{"0.09","0.9","0.01","0.1","-0.01","-0.1","1.01","-1.01","-1.1","-111.111","+111.111","1.09","1.05","1.04","1.99","1.9","1.5","1.4","-1.09","-1.05","-1.04","-1.99","-1.9","-1.5","-1.4","1E-1000","-1E-1000","11E-1","1.5"}; // 400-403
+  // 404-407
+  // 408-411
+  // 412-416
+  // 417-420
+  // 421-424
+  // 425-428
+  
+  {int $108=badstrings.length;i=0;i:for(;$108>0;$108--,i++){
+   {try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $109){ae=$109;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("inv"+(400+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("intValue+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#longValue} method. */
+ 
+ public void diaglongvalue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  com.ibm.math.BigDecimal dlmax;
+  com.ibm.math.BigDecimal num=null;
+  com.ibm.math.BigDecimal dv=null;
+  com.ibm.math.BigDecimal dlmin;
+  
+  
+  // longValue --
+  
+  (new com.ibm.math.DiagBigDecimal.Test("lov001")).ok=lmin==((new com.ibm.math.BigDecimal(lmin)).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov002")).ok=(((long)99))==((new com.ibm.math.BigDecimal("99")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov003")).ok=(((long)1))==((new com.ibm.math.BigDecimal("1")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov004")).ok=(((long)0))==((new com.ibm.math.BigDecimal("0")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov005")).ok=(((long)-1))==((new com.ibm.math.BigDecimal("-1")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov006")).ok=(((long)-99))==((new com.ibm.math.BigDecimal("-99")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov007")).ok=lmax==((new com.ibm.math.BigDecimal(lmax)).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov008")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.0")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov009")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.3")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov010")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.5")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov011")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.7")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov012")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.9")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov013")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.0")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov014")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.3")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov015")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.5")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov016")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.7")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov017")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.9")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov018")).ok=((new com.ibm.math.BigDecimal("888888888899999999998")).longValue())==3445173361941522430L; // ugh
+  (new com.ibm.math.DiagBigDecimal.Test("lov019")).ok=((new com.ibm.math.BigDecimal("-888888888899999999998")).longValue())==(-3445173361941522430L); // ugh
+  
+  // longValueExact --
+  
+  (new com.ibm.math.DiagBigDecimal.Test("lov101")).ok=lmin==((new com.ibm.math.BigDecimal(lmin)).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov102")).ok=(((long)99))==((new com.ibm.math.BigDecimal("99")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov103")).ok=(((long)1))==((new com.ibm.math.BigDecimal("1")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov104")).ok=(((long)0))==((new com.ibm.math.BigDecimal("0")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov105")).ok=(((long)-1))==((new com.ibm.math.BigDecimal("-1")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov106")).ok=(((long)-99))==((new com.ibm.math.BigDecimal("-99")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov107")).ok=lmax==((new com.ibm.math.BigDecimal(lmax)).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov108")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.0")).longValue());
+  (new com.ibm.math.DiagBigDecimal.Test("lov109")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.0")).longValue());
+  
+  {try{
+   v="-888888888899999999998";
+   (new com.ibm.math.BigDecimal(v)).longValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $110){ae=$110;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("lov200")).ok=flag;
+  {try{
+   v="88888887487487479488888";
+   (new com.ibm.math.BigDecimal(v)).longValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $111){ae=$111;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("lov201")).ok=flag;
+  {try{
+   v="1.5";
+   (new com.ibm.math.BigDecimal(v)).longValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $112){ae=$112;
+   flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("lov202")).ok=flag;
+  
+  badstrings=new java.lang.String[]{"1234567890110987654321","-1234567890110987654321",(new com.ibm.math.BigDecimal(lmax)).add(one).toString(),(new com.ibm.math.BigDecimal(lmin)).subtract(one).toString(),(new com.ibm.math.BigDecimal(lmin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(lmax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(lmin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(lmax)).multiply(ten).toString(),"9223372036854775818","9323372036854775818","9423372036854775818","9523372036854775818","9623372036854775818","9723372036854775818","9823372036854775818","9923372036854775818","-9223372036854775818","-9323372036854775818","-9423372036854775818","-9523372036854775818","-9623372036854775818","-9723372036854775818","-9823372036854775818","-9923372036854775818","12345678901234567890"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225
+  // 226
+  // 227
+  // 228
+  // 229
+  // 230
+  // 231
+  // 232
+  // 233
+  // 234
+  // 235
+  // 236
+  // 237
+  // 238
+  // 239
+  // 240
+  // 241
+  // 242
+  // 243
+  // 244
+  {int $113=badstrings.length;i=0;i:for(;$113>0;$113--,i++){
+   {try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).longValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $114){ae=$114;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("lov"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  // now slip in some single bits...
+  dlmax=new com.ibm.math.BigDecimal(lmax);
+  {i=0;i:for(;i<=99;i++){
+   {try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dlmax.add(num,mc50);
+    dv.longValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $115){ae=$115;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("lov"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  dlmin=new com.ibm.math.BigDecimal(lmin);
+  {i=0;i:for(;i<=99;i++){
+   {try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dlmin.subtract(num,mc50);
+    dv.longValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $116){ae=$116;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("lov"+(400+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("longValue+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#movePointLeft} method. */
+ 
+ public void diagmovepointleft(){
+  (new com.ibm.math.DiagBigDecimal.Test("mpl001")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(-10).toString()).equals("-10000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl002")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(-5).toString()).equals("-100000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl003")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(-1).toString()).equals("-10");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl004")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(0).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl005")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(+1).toString()).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl006")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(+5).toString()).equals("-0.00001");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl007")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(+10).toString()).equals("-0.0000000001");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(-10).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(-5).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(-1).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(0).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(+1).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(+5).toString()).equals("0.00000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(+10).toString()).equals("0.0000000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mpl020")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(-10).toString()).equals("10000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl021")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(-5).toString()).equals("100000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl022")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(-1).toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl023")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(0).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl024")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(+1).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl025")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(+5).toString()).equals("0.00001");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl026")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(+10).toString()).equals("0.0000000001");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mpl030")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(-10).toString()).equals("50000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl031")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(-5).toString()).equals("500000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl032")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(-1).toString()).equals("50");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl033")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(0).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl034")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(+1).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl035")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(+5).toString()).equals("0.00005");
+  (new com.ibm.math.DiagBigDecimal.Test("mpl036")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(+10).toString()).equals("0.0000000005");
+  
+  summary("movePointLeft");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#movePointRight} method. */
+ 
+ public void diagmovepointright(){
+  (new com.ibm.math.DiagBigDecimal.Test("mpr001")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(+10).toString()).equals("-10000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr002")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(+5).toString()).equals("-100000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr003")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(+1).toString()).equals("-10");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr004")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(0).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr005")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(-1).toString()).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr006")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(-5).toString()).equals("-0.00001");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr007")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(-10).toString()).equals("-0.0000000001");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mpr010")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(+10).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr011")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(+5).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr012")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(+1).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr013")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(0).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr014")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(-1).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr015")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(-5).toString()).equals("0.00000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr016")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(-10).toString()).equals("0.0000000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mpr020")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(+10).toString()).equals("10000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr021")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(+5).toString()).equals("100000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr022")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(+1).toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr023")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(0).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr024")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(-1).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr025")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(-5).toString()).equals("0.00001");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr026")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(-10).toString()).equals("0.0000000001");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mpr030")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(+10).toString()).equals("50000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr031")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(+5).toString()).equals("500000");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr032")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(+1).toString()).equals("50");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr033")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(0).toString()).equals("5");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr034")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(-1).toString()).equals("0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr035")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(-5).toString()).equals("0.00005");
+  (new com.ibm.math.DiagBigDecimal.Test("mpr036")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(-10).toString()).equals("0.0000000005");
+  
+  summary("movePointRight");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#scale} method. */
+ 
+ public void diagscale(){
+  (new com.ibm.math.DiagBigDecimal.Test("sca001")).ok=((new com.ibm.math.BigDecimal("-1")).scale())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("sca002")).ok=((new com.ibm.math.BigDecimal("-10")).scale())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("sca003")).ok=((new com.ibm.math.BigDecimal("+1")).scale())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("sca004")).ok=((new com.ibm.math.BigDecimal("+10")).scale())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("sca005")).ok=((new com.ibm.math.BigDecimal("1E+10")).scale())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("sca006")).ok=((new com.ibm.math.BigDecimal("1E-10")).scale())==10;
+  (new com.ibm.math.DiagBigDecimal.Test("sca007")).ok=((new com.ibm.math.BigDecimal("0E-10")).scale())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("sca008")).ok=((new com.ibm.math.BigDecimal("0.000")).scale())==3;
+  (new com.ibm.math.DiagBigDecimal.Test("sca009")).ok=((new com.ibm.math.BigDecimal("0.00")).scale())==2;
+  (new com.ibm.math.DiagBigDecimal.Test("sca010")).ok=((new com.ibm.math.BigDecimal("0.0")).scale())==1;
+  (new com.ibm.math.DiagBigDecimal.Test("sca011")).ok=((new com.ibm.math.BigDecimal("0.1")).scale())==1;
+  (new com.ibm.math.DiagBigDecimal.Test("sca012")).ok=((new com.ibm.math.BigDecimal("0.12")).scale())==2;
+  (new com.ibm.math.DiagBigDecimal.Test("sca013")).ok=((new com.ibm.math.BigDecimal("0.123")).scale())==3;
+  (new com.ibm.math.DiagBigDecimal.Test("sca014")).ok=((new com.ibm.math.BigDecimal("-0.0")).scale())==1;
+  (new com.ibm.math.DiagBigDecimal.Test("sca015")).ok=((new com.ibm.math.BigDecimal("-0.1")).scale())==1;
+  (new com.ibm.math.DiagBigDecimal.Test("sca016")).ok=((new com.ibm.math.BigDecimal("-0.12")).scale())==2;
+  (new com.ibm.math.DiagBigDecimal.Test("sca017")).ok=((new com.ibm.math.BigDecimal("-0.123")).scale())==3;
+  summary("scale");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#setScale} method. */
+ 
+ public void diagsetscale(){
+  boolean flag=false;
+  java.lang.RuntimeException e=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("ssc001")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(0).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc002")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(1).toString()).equals("-1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc003")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(2).toString()).equals("-1.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc004")).ok=((new com.ibm.math.BigDecimal("0")).setScale(0).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc005")).ok=((new com.ibm.math.BigDecimal("0")).setScale(1).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc006")).ok=((new com.ibm.math.BigDecimal("0")).setScale(2).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc007")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(0).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc008")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(1).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc009")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(2).toString()).equals("1.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc010")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc011")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc012")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-1.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc013")).ok=((new com.ibm.math.BigDecimal("0")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc014")).ok=((new com.ibm.math.BigDecimal("0")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc015")).ok=((new com.ibm.math.BigDecimal("0")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc016")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc017")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc018")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.00");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("ssc020")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.040");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc021")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.04");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc022")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc023")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc024")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.050");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc025")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.05");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc026")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc027")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc028")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1.050");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc029")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1.05");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc030")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc031")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc032")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.060");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc033")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.06");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc034")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc035")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("ssc040")).ok=((new com.ibm.math.BigDecimal("-10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-10.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc041")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc042")).ok=((new com.ibm.math.BigDecimal("+10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("10.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc043")).ok=((new com.ibm.math.BigDecimal("1E+10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("10000000000.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc044")).ok=((new com.ibm.math.BigDecimal("1E-10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc045")).ok=((new com.ibm.math.BigDecimal("1E-2")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc046")).ok=((new com.ibm.math.BigDecimal("0E-10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.00");
+  
+  // check rounding
+  (new com.ibm.math.DiagBigDecimal.Test("ssc050")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc051")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc052")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc053")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc054")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc055")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc056")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc057")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc058")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc059")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc060")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc061")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc062")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc063")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc064")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc065")).ok=((new com.ibm.math.BigDecimal("0.015")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.02");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc066")).ok=((new com.ibm.math.BigDecimal("0.015")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc067")).ok=((new com.ibm.math.BigDecimal("0.015")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc068")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc069")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc070")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc071")).ok=((new com.ibm.math.BigDecimal("0.095")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.10");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc072")).ok=((new com.ibm.math.BigDecimal("0.095")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc073")).ok=((new com.ibm.math.BigDecimal("0.095")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc074")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc075")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("ssc076")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_UP).toString()).equals("1");
+  
+  {try{checkscale:do{
+   (new com.ibm.math.BigDecimal(1)).setScale(-8);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $117){e=$117;
+   flag=(e.getMessage()).equals("Negative scale: -8");
+  }}/*checkscale*/
+  (new com.ibm.math.DiagBigDecimal.Test("ssc100")).ok=flag;
+  {try{checkrunn:do{
+   (new com.ibm.math.BigDecimal(1.0001D)).setScale(3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $118){e=$118;
+   flag=(e.getMessage()).equals("Rounding necessary");
+  }}/*checkrunn*/
+  (new com.ibm.math.DiagBigDecimal.Test("ssc101")).ok=flag;
+  {try{checkrunn:do{
+   (new com.ibm.math.BigDecimal(1E-8D)).setScale(3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $119){e=$119;
+   flag=(e.getMessage()).equals("Rounding necessary");
+  }}/*checkrunn*/
+  (new com.ibm.math.DiagBigDecimal.Test("ssc102")).ok=flag;
+  summary("setScale");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the <code>BigDecimal.shortValue()</code> method. */
+ 
+ public void diagshortvalue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("shv002")).ok=(((short)0))==((new com.ibm.math.BigDecimal("0")).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv003")).ok=(((short)1))==((new com.ibm.math.BigDecimal("1")).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv004")).ok=(((short)99))==((new com.ibm.math.BigDecimal("99")).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv006")).ok=((smax))==((new com.ibm.math.BigDecimal(smax)).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv007")).ok=((smin))==((new com.ibm.math.BigDecimal(smin)).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv008")).ok=((sneg))==((new com.ibm.math.BigDecimal(sneg)).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv009")).ok=((szer))==((new com.ibm.math.BigDecimal(szer)).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv010")).ok=((spos))==((new com.ibm.math.BigDecimal(spos)).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv011")).ok=((smin))==((new com.ibm.math.BigDecimal(smax+1)).shortValue());
+  (new com.ibm.math.DiagBigDecimal.Test("shv012")).ok=((smax))==((new com.ibm.math.BigDecimal(smin-1)).shortValue());
+  
+  (new com.ibm.math.DiagBigDecimal.Test("shv022")).ok=(((short)0))==((new com.ibm.math.BigDecimal("0")).shortValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("shv023")).ok=(((short)1))==((new com.ibm.math.BigDecimal("1")).shortValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("shv024")).ok=(((short)99))==((new com.ibm.math.BigDecimal("99")).shortValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("shv026")).ok=((smax))==((new com.ibm.math.BigDecimal(smax)).shortValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("shv027")).ok=((smin))==((new com.ibm.math.BigDecimal(smin)).shortValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("shv028")).ok=((sneg))==((new com.ibm.math.BigDecimal(sneg)).shortValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("shv029")).ok=((szer))==((new com.ibm.math.BigDecimal(szer)).shortValueExact());
+  (new com.ibm.math.DiagBigDecimal.Test("shv030")).ok=((spos))==((new com.ibm.math.BigDecimal(spos)).shortValueExact());
+  {try{
+   v="-88888888888";
+   (new com.ibm.math.BigDecimal(v)).shortValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $120){ae=$120;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("shv100")).ok=flag;
+  {try{
+   v="88888888888";
+   (new com.ibm.math.BigDecimal(v)).shortValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $121){ae=$121;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("shv101")).ok=flag;
+  {try{
+   v="1.5";
+   (new com.ibm.math.BigDecimal(v)).shortValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $122){ae=$122;
+   flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+v);
+  }}
+  (new com.ibm.math.DiagBigDecimal.Test("shv102")).ok=flag;
+  
+  badstrings=new java.lang.String[]{"123456",(new com.ibm.math.BigDecimal(smax)).add(one).toString(),(new com.ibm.math.BigDecimal(smin)).subtract(one).toString(),"71111","81111","91111","-71111","-81111","-91111",(new com.ibm.math.BigDecimal(smin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(smax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(smin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(smax)).multiply(ten).toString(),"-123456"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225
+  // 226
+  // 227
+  // 228
+  // 229
+  // 230
+  // 231
+  // 232
+  // 233
+  {int $123=badstrings.length;i=0;i:for(;$123>0;$123--,i++){
+   {try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).shortValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $124){ae=$124;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("shv"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  
+  summary("shortValue+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#signum} method. */
+ 
+ public void diagsignum(){
+  // necessarily checks some obscure constructions, too
+  (new com.ibm.math.DiagBigDecimal.Test("sig001")).ok=(-1)==((new com.ibm.math.BigDecimal("-1")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig002")).ok=(-1)==((new com.ibm.math.BigDecimal("-0.0010")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig003")).ok=(-1)==((new com.ibm.math.BigDecimal("-0.001")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig004")).ok=0==((new com.ibm.math.BigDecimal("-0.00")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig005")).ok=0==((new com.ibm.math.BigDecimal("-0")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig006")).ok=0==((new com.ibm.math.BigDecimal("0")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig007")).ok=0==((new com.ibm.math.BigDecimal("00")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig008")).ok=0==((new com.ibm.math.BigDecimal("00.0")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig009")).ok=1==((new com.ibm.math.BigDecimal("00.01")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig010")).ok=1==((new com.ibm.math.BigDecimal("00.01")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig011")).ok=1==((new com.ibm.math.BigDecimal("00.010")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig012")).ok=1==((new com.ibm.math.BigDecimal("01.01")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig013")).ok=1==((new com.ibm.math.BigDecimal("+0.01")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig014")).ok=1==((new com.ibm.math.BigDecimal("+0.001")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig015")).ok=1==((new com.ibm.math.BigDecimal("1")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig016")).ok=1==((new com.ibm.math.BigDecimal("1e+12")).signum());
+  (new com.ibm.math.DiagBigDecimal.Test("sig017")).ok=0==((new com.ibm.math.BigDecimal("00e+12")).signum());
+  summary("signum");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toBigDecimal} method. */
+ 
+ public void diagtobigdecimal(){
+  (new com.ibm.math.DiagBigDecimal.Test("tbd001")).ok=((new com.ibm.math.BigDecimal("0")).toBigDecimal().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd002")).ok=((new com.ibm.math.BigDecimal("-1")).toBigDecimal().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd003")).ok=((new com.ibm.math.BigDecimal("+1")).toBigDecimal().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd004")).ok=((new com.ibm.math.BigDecimal("1")).toBigDecimal().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd005")).ok=((new com.ibm.math.BigDecimal("1E+2")).toBigDecimal().toString()).equals("100");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd006")).ok=((new com.ibm.math.BigDecimal("1E-2")).toBigDecimal().toString()).equals("0.01");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd007")).ok=((new com.ibm.math.BigDecimal("1E-8")).toBigDecimal().toString()).equals("0.00000001");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd008")).ok=((new com.ibm.math.BigDecimal("1E-9")).toBigDecimal().toString()).equals("0.000000001");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd009")).ok=((new com.ibm.math.BigDecimal("1E10")).toBigDecimal().toString()).equals("10000000000");
+  (new com.ibm.math.DiagBigDecimal.Test("tbd010")).ok=((new com.ibm.math.BigDecimal("1E12")).toBigDecimal().toString()).equals("1000000000000");
+  summary("toBigDecimal");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toBigInteger} method. */
+ 
+ public void diagtobiginteger(){
+  boolean flag=false;
+  java.lang.String badstrings[];
+  int i=0;
+  (new com.ibm.math.DiagBigDecimal.Test("tbi001")).ok=((new com.ibm.math.BigDecimal("-1")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi002")).ok=((new com.ibm.math.BigDecimal("0")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi003")).ok=((new com.ibm.math.BigDecimal("+1")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi004")).ok=((new com.ibm.math.BigDecimal("10")).toBigInteger().toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi005")).ok=((new com.ibm.math.BigDecimal("1000")).toBigInteger().toString()).equals("1000");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi006")).ok=((new com.ibm.math.BigDecimal("-1E+0")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi007")).ok=((new com.ibm.math.BigDecimal("0E+0")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi008")).ok=((new com.ibm.math.BigDecimal("+1E+0")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi009")).ok=((new com.ibm.math.BigDecimal("10E+0")).toBigInteger().toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi010")).ok=((new com.ibm.math.BigDecimal("1E+3")).toBigInteger().toString()).equals("1000");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi011")).ok=((new com.ibm.math.BigDecimal("0.00")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi012")).ok=((new com.ibm.math.BigDecimal("0.01")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi013")).ok=((new com.ibm.math.BigDecimal("0.0")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi014")).ok=((new com.ibm.math.BigDecimal("0.1")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi015")).ok=((new com.ibm.math.BigDecimal("-0.00")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi016")).ok=((new com.ibm.math.BigDecimal("-0.01")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi017")).ok=((new com.ibm.math.BigDecimal("-0.0")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi018")).ok=((new com.ibm.math.BigDecimal("-0.1")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi019")).ok=((new com.ibm.math.BigDecimal("1.00")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi020")).ok=((new com.ibm.math.BigDecimal("1.01")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi021")).ok=((new com.ibm.math.BigDecimal("1.0")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi022")).ok=((new com.ibm.math.BigDecimal("1.1")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi023")).ok=((new com.ibm.math.BigDecimal("-1.00")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi024")).ok=((new com.ibm.math.BigDecimal("-1.01")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi025")).ok=((new com.ibm.math.BigDecimal("-1.0")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi026")).ok=((new com.ibm.math.BigDecimal("-1.1")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi027")).ok=((new com.ibm.math.BigDecimal("-111.111")).toBigInteger().toString()).equals("-111");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi028")).ok=((new com.ibm.math.BigDecimal("+111.111")).toBigInteger().toString()).equals("111");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi029")).ok=((new com.ibm.math.BigDecimal("0.09")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi030")).ok=((new com.ibm.math.BigDecimal("0.9")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi031")).ok=((new com.ibm.math.BigDecimal("1.09")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi032")).ok=((new com.ibm.math.BigDecimal("1.05")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi033")).ok=((new com.ibm.math.BigDecimal("1.04")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi034")).ok=((new com.ibm.math.BigDecimal("1.99")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi034")).ok=((new com.ibm.math.BigDecimal("1.9")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi035")).ok=((new com.ibm.math.BigDecimal("1.5")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi036")).ok=((new com.ibm.math.BigDecimal("1.4")).toBigInteger().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi037")).ok=((new com.ibm.math.BigDecimal("-1.09")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi038")).ok=((new com.ibm.math.BigDecimal("-1.05")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi039")).ok=((new com.ibm.math.BigDecimal("-1.04")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi040")).ok=((new com.ibm.math.BigDecimal("-1.99")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi041")).ok=((new com.ibm.math.BigDecimal("-1.9")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi042")).ok=((new com.ibm.math.BigDecimal("-1.5")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi043")).ok=((new com.ibm.math.BigDecimal("-1.4")).toBigInteger().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi044")).ok=((new com.ibm.math.BigDecimal("1E-1000")).toBigInteger().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi045")).ok=((new com.ibm.math.BigDecimal("-1E-1000")).toBigInteger().toString()).equals("0");
+  
+  // Exact variety --
+  (new com.ibm.math.DiagBigDecimal.Test("tbi101")).ok=((new com.ibm.math.BigDecimal("-1")).toBigIntegerExact().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi102")).ok=((new com.ibm.math.BigDecimal("0")).toBigIntegerExact().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi103")).ok=((new com.ibm.math.BigDecimal("+1")).toBigIntegerExact().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi104")).ok=((new com.ibm.math.BigDecimal("10")).toBigIntegerExact().toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi105")).ok=((new com.ibm.math.BigDecimal("1000")).toBigIntegerExact().toString()).equals("1000");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi106")).ok=((new com.ibm.math.BigDecimal("-1E+0")).toBigIntegerExact().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi107")).ok=((new com.ibm.math.BigDecimal("0E+0")).toBigIntegerExact().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi108")).ok=((new com.ibm.math.BigDecimal("+1E+0")).toBigIntegerExact().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi109")).ok=((new com.ibm.math.BigDecimal("10E+0")).toBigIntegerExact().toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi110")).ok=((new com.ibm.math.BigDecimal("1E+3")).toBigIntegerExact().toString()).equals("1000");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi111")).ok=((new com.ibm.math.BigDecimal("0.00")).toBigIntegerExact().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi112")).ok=((new com.ibm.math.BigDecimal("0.0")).toBigIntegerExact().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi113")).ok=((new com.ibm.math.BigDecimal("-0.00")).toBigIntegerExact().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi114")).ok=((new com.ibm.math.BigDecimal("-0.0")).toBigIntegerExact().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi115")).ok=((new com.ibm.math.BigDecimal("1.00")).toBigIntegerExact().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi116")).ok=((new com.ibm.math.BigDecimal("1.0")).toBigIntegerExact().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi117")).ok=((new com.ibm.math.BigDecimal("-1.00")).toBigIntegerExact().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi118")).ok=((new com.ibm.math.BigDecimal("-1.0")).toBigIntegerExact().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("tbi119")).ok=((new com.ibm.math.BigDecimal("1.00000000000000000000000000000")).toBigIntegerExact().toString()).equals("1");
+  
+  // the following should all raise exceptions
+  
+  badstrings=new java.lang.String[]{"0.09","0.9","0.01","0.1","-0.01","-0.1","1.01","-1.01","-1.1","-111.111","+111.111","1.09","1.05","1.04","1.99","1.9","1.5","1.4","-1.09","-1.05","-1.04","-1.99","-1.9","-1.5","-1.4","1E-1000","-1E-1000","11E-1","1.1","127623156123656561356123512315631231551312356.000001","0.000000000000000000000000000000000000000000000001"}; // 300-303
+  // 304-307
+  // 308-311
+  // 312-316
+  // 317-320
+  // 321-324
+  // 325-328
+  // 329
+  // 330
+  
+  {int $125=badstrings.length;i=0;i:for(;$125>0;$125--,i++){
+   {try{
+    (new com.ibm.math.BigDecimal(badstrings[i])).toBigIntegerExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $126){
+    flag=true;
+   }}
+   (new com.ibm.math.DiagBigDecimal.Test("tbi"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("toBigInteger+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toCharArray} method. */
+ 
+ public void diagtochararray(){
+  java.lang.String str;
+  char car[];
+  com.ibm.math.BigDecimal d;
+  char ca[];
+  // the function of this has been tested above, this is simply an
+  // existence proof and type-check
+  str="-123.45";
+  car=(str).toCharArray();
+  d=new com.ibm.math.BigDecimal(str);
+  ca=d.toCharArray();
+  (new com.ibm.math.DiagBigDecimal.Test("tca001")).ok=ca.length==car.length;
+  (new com.ibm.math.DiagBigDecimal.Test("tca002")).ok=(new java.lang.String(ca)).equals((java.lang.Object)(new java.lang.String(car)));
+  (new com.ibm.math.DiagBigDecimal.Test("tca003")).ok=(d.toCharArray() instanceof char[]);
+  (new com.ibm.math.DiagBigDecimal.Test("tca004")).ok=(ca instanceof char[]);
+  summary("toCharArray");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toString} method. */
+ 
+ public void diagtostring(){
+  java.lang.String str;
+  char car[];
+  com.ibm.math.BigDecimal d;
+  char ca[];
+  java.lang.String cs;
+  // the function of this has been tested above, this is simply an
+  // existence proof and type-check
+  str="123.45";
+  car=(str).toCharArray();
+  d=new com.ibm.math.BigDecimal(car,0,car.length);
+  ca=d.toCharArray();
+  cs=d.toString();
+  (new com.ibm.math.DiagBigDecimal.Test("tos001")).ok=(str.toCharArray().length)==ca.length;
+  (new com.ibm.math.DiagBigDecimal.Test("tos002")).ok=(str.length())==(cs.length());
+  (new com.ibm.math.DiagBigDecimal.Test("tos003")).ok=str.equals((java.lang.Object)(new java.lang.String(ca)));
+  (new com.ibm.math.DiagBigDecimal.Test("tos004")).ok=str.equals((java.lang.Object)cs);
+  (new com.ibm.math.DiagBigDecimal.Test("tos005")).ok=(cs instanceof java.lang.String);
+  (new com.ibm.math.DiagBigDecimal.Test("tos006")).ok=(d.toString() instanceof java.lang.String);
+  summary("toString");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#unscaledValue} method. */
+ 
+ public void diagunscaledvalue(){
+  // just like toBigInteger, but scaly bits are preserved [without dots]
+  (new com.ibm.math.DiagBigDecimal.Test("uns001")).ok=((new com.ibm.math.BigDecimal("-1")).unscaledValue().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns002")).ok=((new com.ibm.math.BigDecimal("0")).unscaledValue().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("uns003")).ok=((new com.ibm.math.BigDecimal("+1")).unscaledValue().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns004")).ok=((new com.ibm.math.BigDecimal("10")).unscaledValue().toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("uns005")).ok=((new com.ibm.math.BigDecimal("1000")).unscaledValue().toString()).equals("1000");
+  (new com.ibm.math.DiagBigDecimal.Test("uns006")).ok=((new com.ibm.math.BigDecimal("-1E+0")).unscaledValue().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns007")).ok=((new com.ibm.math.BigDecimal("0E+0")).unscaledValue().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("uns008")).ok=((new com.ibm.math.BigDecimal("+1E+0")).unscaledValue().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns009")).ok=((new com.ibm.math.BigDecimal("10E+0")).unscaledValue().toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("uns010")).ok=((new com.ibm.math.BigDecimal("1E+3")).unscaledValue().toString()).equals("1000");
+  (new com.ibm.math.DiagBigDecimal.Test("uns011")).ok=((new com.ibm.math.BigDecimal("0.00")).unscaledValue().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("uns012")).ok=((new com.ibm.math.BigDecimal("0.01")).unscaledValue().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns013")).ok=((new com.ibm.math.BigDecimal("0.0")).unscaledValue().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("uns014")).ok=((new com.ibm.math.BigDecimal("0.1")).unscaledValue().toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns015")).ok=((new com.ibm.math.BigDecimal("-0.00")).unscaledValue().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("uns016")).ok=((new com.ibm.math.BigDecimal("-0.01")).unscaledValue().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns017")).ok=((new com.ibm.math.BigDecimal("-0.0")).unscaledValue().toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("uns018")).ok=((new com.ibm.math.BigDecimal("-0.1")).unscaledValue().toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("uns019")).ok=((new com.ibm.math.BigDecimal("1.00")).unscaledValue().toString()).equals("100");
+  (new com.ibm.math.DiagBigDecimal.Test("uns020")).ok=((new com.ibm.math.BigDecimal("1.01")).unscaledValue().toString()).equals("101");
+  (new com.ibm.math.DiagBigDecimal.Test("uns021")).ok=((new com.ibm.math.BigDecimal("1.0")).unscaledValue().toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("uns022")).ok=((new com.ibm.math.BigDecimal("1.1")).unscaledValue().toString()).equals("11");
+  (new com.ibm.math.DiagBigDecimal.Test("uns023")).ok=((new com.ibm.math.BigDecimal("-1.00")).unscaledValue().toString()).equals("-100");
+  (new com.ibm.math.DiagBigDecimal.Test("uns024")).ok=((new com.ibm.math.BigDecimal("-1.01")).unscaledValue().toString()).equals("-101");
+  (new com.ibm.math.DiagBigDecimal.Test("uns025")).ok=((new com.ibm.math.BigDecimal("-1.0")).unscaledValue().toString()).equals("-10");
+  (new com.ibm.math.DiagBigDecimal.Test("uns026")).ok=((new com.ibm.math.BigDecimal("-1.1")).unscaledValue().toString()).equals("-11");
+  (new com.ibm.math.DiagBigDecimal.Test("uns027")).ok=((new com.ibm.math.BigDecimal("-111.111")).unscaledValue().toString()).equals("-111111");
+  (new com.ibm.math.DiagBigDecimal.Test("uns028")).ok=((new com.ibm.math.BigDecimal("+111.111")).unscaledValue().toString()).equals("111111");
+  summary("unscaledValue");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#valueOf} method [long and double]. */
+ 
+ public void diagvalueof(){
+  boolean flag=false;
+  java.lang.NumberFormatException e=null;
+  double dzer;
+  double dpos;
+  double dneg;
+  double dpos5;
+  double dneg5;
+  double dmin;
+  double dmax;
+  double d;
+  
+  // valueOf(long [,scale]) --
+  
+  (new com.ibm.math.DiagBigDecimal.Test("val001")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)-2)).toString()).equals("-2");
+  (new com.ibm.math.DiagBigDecimal.Test("val002")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)-1)).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("val003")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)-0)).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("val004")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)+1)).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("val005")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)+2)).toString()).equals("2");
+  (new com.ibm.math.DiagBigDecimal.Test("val006")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)10)).toString()).equals("10");
+  (new com.ibm.math.DiagBigDecimal.Test("val007")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)11)).toString()).equals("11");
+  (new com.ibm.math.DiagBigDecimal.Test("val008")).ok=(com.ibm.math.BigDecimal.valueOf(lmin).toString()).equals("-9223372036854775808");
+  (new com.ibm.math.DiagBigDecimal.Test("val009")).ok=(com.ibm.math.BigDecimal.valueOf(lmax).toString()).equals("9223372036854775807");
+  (new com.ibm.math.DiagBigDecimal.Test("val010")).ok=(com.ibm.math.BigDecimal.valueOf(lneg).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("val011")).ok=(com.ibm.math.BigDecimal.valueOf(lzer).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("val012")).ok=(com.ibm.math.BigDecimal.valueOf(lpos).toString()).equals("1");
+  (new com.ibm.math.DiagBigDecimal.Test("val013")).ok=(com.ibm.math.BigDecimal.valueOf(lmin,0).toString()).equals("-9223372036854775808");
+  (new com.ibm.math.DiagBigDecimal.Test("val014")).ok=(com.ibm.math.BigDecimal.valueOf(lmax,0).toString()).equals("9223372036854775807");
+  (new com.ibm.math.DiagBigDecimal.Test("val015")).ok=(com.ibm.math.BigDecimal.valueOf(lneg,0).toString()).equals("-1");
+  (new com.ibm.math.DiagBigDecimal.Test("val016")).ok=(com.ibm.math.BigDecimal.valueOf(lpos,0).toString()).equals("1");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("val017")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,0).toString()).equals("0");
+  (new com.ibm.math.DiagBigDecimal.Test("val018")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,1).toString()).equals("0.0");
+  (new com.ibm.math.DiagBigDecimal.Test("val019")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,2).toString()).equals("0.00");
+  (new com.ibm.math.DiagBigDecimal.Test("val020")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,3).toString()).equals("0.000");
+  (new com.ibm.math.DiagBigDecimal.Test("val021")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,10).toString()).equals("0.0000000000");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("val022")).ok=(com.ibm.math.BigDecimal.valueOf(lmin,7).toString()).equals("-922337203685.4775808");
+  (new com.ibm.math.DiagBigDecimal.Test("val023")).ok=(com.ibm.math.BigDecimal.valueOf(lmax,11).toString()).equals("92233720.36854775807");
+  
+  
+  {try{checkscale:do{
+   com.ibm.math.BigDecimal.valueOf((long)23,-8);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $127){e=$127;
+   flag=(e.getMessage()).equals("Negative scale: -8");
+  }}/*checkscale*/
+  (new com.ibm.math.DiagBigDecimal.Test("val100")).ok=flag;
+  
+  // valueOf(double) --
+  
+  dzer=(double)0;
+  dpos=(double)1;
+  dpos=dpos/((double)10);
+  dneg=(double)-dpos;
+  (new com.ibm.math.DiagBigDecimal.Test("val201")).ok=(com.ibm.math.BigDecimal.valueOf(dneg).toString()).equals("-0.1");
+  (new com.ibm.math.DiagBigDecimal.Test("val202")).ok=(com.ibm.math.BigDecimal.valueOf(dzer).toString()).equals("0.0"); // cf. constructor
+  (new com.ibm.math.DiagBigDecimal.Test("val203")).ok=(com.ibm.math.BigDecimal.valueOf(dpos).toString()).equals("0.1");
+  dpos5=(double)0.5D;
+  dneg5=(double)-dpos5;
+  (new com.ibm.math.DiagBigDecimal.Test("val204")).ok=(com.ibm.math.BigDecimal.valueOf(dneg5).toString()).equals("-0.5");
+  (new com.ibm.math.DiagBigDecimal.Test("val205")).ok=(com.ibm.math.BigDecimal.valueOf(dpos5).toString()).equals("0.5");
+  dmin=java.lang.Double.MIN_VALUE;
+  dmax=java.lang.Double.MAX_VALUE;
+  (new com.ibm.math.DiagBigDecimal.Test("val206")).ok=(com.ibm.math.BigDecimal.valueOf(dmin).toString()).equals("4.9E-324");
+  (new com.ibm.math.DiagBigDecimal.Test("val207")).ok=(com.ibm.math.BigDecimal.valueOf(dmax).toString()).equals("1.7976931348623157E+308");
+  
+  // nasties
+  d=(double)9;
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val210")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("0.9");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val211")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("0.09");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val212")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("0.0090");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val213")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("9.0E-4");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val214")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-5");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val215")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-6");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val216")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-7");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val217")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-8");
+  d=d/((double)10);
+  (new com.ibm.math.DiagBigDecimal.Test("val218")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999998E-9");
+  
+  {try{checkpin:do{
+   com.ibm.math.BigDecimal.valueOf(java.lang.Double.POSITIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $128){
+   flag=true;
+  }}/*checkpin*/
+  (new com.ibm.math.DiagBigDecimal.Test("val301")).ok=flag;
+  {try{checknin:do{
+   com.ibm.math.BigDecimal.valueOf(java.lang.Double.NEGATIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $129){
+   flag=true;
+  }}/*checknin*/
+  (new com.ibm.math.DiagBigDecimal.Test("val302")).ok=flag;
+  {try{checknan:do{
+   com.ibm.math.BigDecimal.valueOf(java.lang.Double.NaN);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $130){
+   flag=true;
+  }}/*checknan*/
+  (new com.ibm.math.DiagBigDecimal.Test("val303")).ok=flag;
+  
+  summary("valueOf");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link MathContext} class. */
+ 
+ public void diagmathcontext(){
+  com.ibm.math.MathContext mccon1;
+  com.ibm.math.MathContext mccon2;
+  com.ibm.math.MathContext mccon3;
+  com.ibm.math.MathContext mccon4;
+  com.ibm.math.MathContext mcrmc;
+  com.ibm.math.MathContext mcrmd;
+  com.ibm.math.MathContext mcrmf;
+  com.ibm.math.MathContext mcrmhd;
+  com.ibm.math.MathContext mcrmhe;
+  com.ibm.math.MathContext mcrmhu;
+  com.ibm.math.MathContext mcrmun;
+  com.ibm.math.MathContext mcrmu;
+  boolean flag=false;
+  java.lang.IllegalArgumentException e=null;
+  // these tests are mostly existence checks
+  (new com.ibm.math.DiagBigDecimal.Test("mcn001")).ok=(com.ibm.math.MathContext.DEFAULT.getDigits())==9;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn002")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn003")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())!=com.ibm.math.MathContext.ENGINEERING;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn004")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())!=com.ibm.math.MathContext.PLAIN;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn005")).ok=(com.ibm.math.MathContext.DEFAULT.getLostDigits()?1:0)==0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn006")).ok=(com.ibm.math.MathContext.DEFAULT.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn010")).ok=com.ibm.math.MathContext.ROUND_CEILING>=0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn011")).ok=com.ibm.math.MathContext.ROUND_DOWN>=0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn012")).ok=com.ibm.math.MathContext.ROUND_FLOOR>=0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn013")).ok=com.ibm.math.MathContext.ROUND_HALF_DOWN>=0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn014")).ok=com.ibm.math.MathContext.ROUND_HALF_EVEN>=0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn015")).ok=com.ibm.math.MathContext.ROUND_HALF_UP>=0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn016")).ok=com.ibm.math.MathContext.ROUND_UNNECESSARY>=0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn017")).ok=com.ibm.math.MathContext.ROUND_UP>=0;
+  
+  mccon1=new com.ibm.math.MathContext(111);
+  (new com.ibm.math.DiagBigDecimal.Test("mcn021")).ok=(mccon1.getDigits())==111;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn022")).ok=(mccon1.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn023")).ok=(mccon1.getLostDigits()?1:0)==0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn024")).ok=(mccon1.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  mccon2=new com.ibm.math.MathContext(78,com.ibm.math.MathContext.ENGINEERING);
+  (new com.ibm.math.DiagBigDecimal.Test("mcn031")).ok=(mccon2.getDigits())==78;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn032")).ok=(mccon2.getForm())==com.ibm.math.MathContext.ENGINEERING;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn033")).ok=(mccon2.getLostDigits()?1:0)==0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn034")).ok=(mccon2.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  mccon3=new com.ibm.math.MathContext(5,com.ibm.math.MathContext.PLAIN,true);
+  (new com.ibm.math.DiagBigDecimal.Test("mcn041")).ok=(mccon3.getDigits())==5;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn042")).ok=(mccon3.getForm())==com.ibm.math.MathContext.PLAIN;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn043")).ok=(mccon3.getLostDigits()?1:0)==1;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn044")).ok=(mccon3.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  mccon4=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_FLOOR);
+  (new com.ibm.math.DiagBigDecimal.Test("mcn051")).ok=(mccon4.getDigits())==0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn052")).ok=(mccon4.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn053")).ok=(mccon4.getLostDigits()?1:0)==0;
+  (new com.ibm.math.DiagBigDecimal.Test("mcn054")).ok=(mccon4.getRoundingMode())==com.ibm.math.MathContext.ROUND_FLOOR;
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn061")).ok=(mccon1.toString()).equals("digits=111 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn062")).ok=(mccon2.toString()).equals("digits=78 form=ENGINEERING lostDigits=0 roundingMode=ROUND_HALF_UP");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn063")).ok=(mccon3.toString()).equals("digits=5 form=PLAIN lostDigits=1 roundingMode=ROUND_HALF_UP");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn064")).ok=(mccon4.toString()).equals("digits=0 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_FLOOR");
+  
+  
+  // complete testing rounding modes round trips
+  mcrmc=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_CEILING);
+  mcrmd=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_DOWN);
+  mcrmf=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_FLOOR);
+  mcrmhd=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_HALF_DOWN);
+  mcrmhe=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_HALF_EVEN);
+  mcrmhu=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_HALF_UP);
+  mcrmun=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+  mcrmu=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_UP);
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn071")).ok=(mcrmc.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_CEILING");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn072")).ok=(mcrmd.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_DOWN");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn073")).ok=(mcrmf.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_FLOOR");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn074")).ok=(mcrmhd.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_HALF_DOWN");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn075")).ok=(mcrmhe.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_HALF_EVEN");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn076")).ok=(mcrmhu.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_HALF_UP");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn077")).ok=(mcrmun.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_UNNECESSARY");
+  
+  (new com.ibm.math.DiagBigDecimal.Test("mcn078")).ok=(mcrmu.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_UP");
+  
+  
+  // [get methods tested already]
+  
+  // errors...
+  
+  {try{checkdig:do{
+   new com.ibm.math.MathContext(-1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $131){e=$131;
+   flag=(e.getMessage()).equals("Digits too small: -1");
+  }}/*checkdig*/
+  (new com.ibm.math.DiagBigDecimal.Test("mcn101")).ok=flag;
+  {try{checkdigbig:do{
+   new com.ibm.math.MathContext(1000000000);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $132){e=$132;
+   flag=(e.getMessage()).equals("Digits too large: 1000000000");
+  }}/*checkdigbig*/
+  (new com.ibm.math.DiagBigDecimal.Test("mcn102")).ok=flag;
+  
+  {try{checkform:do{
+   new com.ibm.math.MathContext(0,5);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $133){e=$133;
+   flag=(e.getMessage()).equals("Bad form value: 5");
+  }}/*checkform*/
+  (new com.ibm.math.DiagBigDecimal.Test("mcn111")).ok=flag;
+  {try{checkformneg:do{
+   new com.ibm.math.MathContext(0,-1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $134){e=$134;
+   flag=(e.getMessage()).equals("Bad form value: -1");
+  }}/*checkformneg*/
+  (new com.ibm.math.DiagBigDecimal.Test("mcn112")).ok=flag;
+  
+  // [lostDigits cannot be invalid]
+  
+  {try{checkround:do{
+   new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,12);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $135){e=$135;
+   flag=(e.getMessage()).equals("Bad roundingMode value: 12");
+  }}/*checkround*/
+  (new com.ibm.math.DiagBigDecimal.Test("mcn121")).ok=flag;
+  {try{checkroundneg:do{
+   new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,-1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $136){e=$136;
+   flag=(e.getMessage()).equals("Bad roundingMode value: -1");
+  }}/*checkroundneg*/
+  (new com.ibm.math.DiagBigDecimal.Test("mcn122")).ok=flag;
+  
+  summary("MathContext");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test general arithmetic (base operators).
+  * <p>Unlike the specific method tests, these tests were randomly
+  * generated by an IBM Object Rexx procedure, then manually corrected
+  * for known differences from ANSI X3-274.  These differences are:
+  * <ol>
+  * <li>the trigger point in exponential notation is fixed in ANSI
+  *     X3-274 but varies with DIGITS in Classic and Object Rexx
+  * <li>some trailing zeros were missing (e.g., 1.3 + 1E-60 should show
+  *     seven trailing zeros)
+  * <li>the power operator is less accurate in Object Rexx
+  * <li>ANSI X3-274 [errata 1999] rounds input numbers to DIGITS (rather
+  *     than truncating to DIGITS+1).
+  * </ol>
+  */
+ 
+ public void diagmath(){
+  com.ibm.math.MathContext def;
+  def=com.ibm.math.MathContext.DEFAULT;
+  mathtest(1,def,"-9375284.42","5516.99832E+27276984","5.51699832E+27276987","-5.51699832E+27276987","-5.17234284E+27276994","-1.69934516E-27276981","0","-9375284.42","6.79057752E+41");
+  mathtest(2,def,"-410.832710","99.3588243E-502740862","-410.832710","-410.832710","-4.08198550E-502740858","-4.13483868E+502740862","","","1.36977786E+26");
+  mathtest(3,def,"80025.2340","-8.03097581","80017.2030","80033.2650","-642680.718","-9964.57167","-9964","4.59102916","5.94544517E-40");
+  mathtest(4,def,"81052020.2","-464525495","-383473475","545577515","-3.76507298E+16","-0.17448347","0","81052020.2","");
+  mathtest(5,def,"715.069294E-26923151","85.4404128E+796388557","8.54404128E+796388558","-8.54404128E+796388558","6.10958157E+769465410","8.36921628E-823311708","0","7.15069294E-26923149","4.88802213E-242308334");
+  mathtest(6,def,"-21971575.0E+31454441","-70944960.3E+111238221","-7.09449603E+111238228","7.09449603E+111238228","1.55877252E+142692677","3.09698884E-79783781","0","-2.19715750E+31454448","-4.04549502E-220181139");
+  mathtest(7,def,"682.25316","54470185.6","54470867.9","-54469503.4","3.71624563E+10","0.0000125252586","0","682.25316","3.48578699E+154365541");
+  mathtest(8,def,"-257586757.","2082888.71","-255503868","-259669646","-5.36524548E+14","-123.668036","-123","-1391445.67","-1.26879515E+17519020");
+  mathtest(9,def,"319577540.E+242599761","60.7124561","3.19577540E+242599769","3.19577540E+242599769","1.94023374E+242599771","5.26378869E+242599767","","","");
+  mathtest(10,def,"-13769977.0","24371.3381","-13745605.7","-13794348.3","-3.35592765E+11","-565.007015","-565","-170.9735","-8.73734001E+173982");
+  mathtest(11,def,"-475.434972E-725464311","-3.22214066E-865476836","-4.75434972E-725464309","-4.75434972E-725464309","","1.47552519E+140012527","","","");
+  mathtest(12,def,"842.01250","197199893","197200735","-197199051","1.66044775E+11","0.00000426984258","0","842.01250","7.00674164E+576872502");
+  mathtest(13,def,"572.173103E+280128428","-7140.19428","5.72173103E+280128430","5.72173103E+280128430","-4.08542712E+280128434","-8.01341085E+280128426","","","");
+  mathtest(14,def,"674235.954E+476135291","9684.82245","6.74235954E+476135296","6.74235954E+476135296","6.52985550E+476135300","6.96177919E+476135292","","","");
+  mathtest(15,def,"-360557.921E+437116514","930428850","-3.60557921E+437116519","-3.60557921E+437116519","-3.35473492E+437116528","-3.87517993E+437116510","","","");
+  mathtest(16,def,"957165918E-394595705","1676.59073E-829618944","9.57165918E-394595697","9.57165918E-394595697","","5.70900161E+435023244","","","9.16166595E-789191393");
+  mathtest(17,def,"-2610864.40","31245912.7","28635048.3","-33856777.1","-8.15788411E+13","-0.0835585897","0","-2610864.40","-3.12008905E+200498284");
+  mathtest(18,def,"959.548461","98.994577E+776775426","9.89945770E+776775427","-9.89945770E+776775427","9.49900940E+776775430","9.69293965E-776775426","0","959.548461","6.61712185E+29");
+  mathtest(19,def,"-41085.0268","3115477.61","3074392.58","-3156562.64","-1.27999481E+11","-0.0131873927","0","-41085.0268","4.73844173E+14373829");
+  mathtest(20,def,"-723420285.","2681660.35","-720738625","-726101945","-1.93996749E+15","-269.765813","-269","-2053650.85","4.14324113E+23757873");
+  mathtest(21,def,"63542018.0E-817732230","-8836243.22","-8836243.22","8836243.22","-5.61472726E-817732216","-7.19106711E-817732230","0","6.35420180E-817732223","");
+  mathtest(22,def,"-96051.7108","-291201.955","-387253.666","195150.244","2.79704460E+10","0.329845694","0","-96051.7108","3.53617153E-1450916");
+  mathtest(23,def,"108490.853","91685996.5","91794487.4","-91577505.7","9.94709197E+12","0.00118328706","0","108490.853","6.98124265E+461675038");
+  mathtest(24,def,"-27489.1735","-9835835.4E-506411649","-27489.1735","-27489.1735","2.70378986E-506411638","2.79479804E+506411646","","","4.05866472E-45");
+  mathtest(25,def,"-89220406.6","993391.008E-611041175","-89220406.6","-89220406.6","-8.86307496E-611041162","-8.98139865E+611041176","","","3.19625913E+79");
+  mathtest(26,def,"4.75502020","-17089144.9","-17089140.2","17089149.7","-81259229.2","-2.78247989E-7","0","4.75502020","1.0630191E-11571955");
+  mathtest(27,def,"68027916.2","-796883.839","67231032.4","68824800.0","-5.42103470E+13","-85.3674185","-85","292789.885","8.29415374E-6241744");
+  mathtest(28,def,"-8.01969439E+788605478","92154156.0","-8.01969439E+788605478","-8.01969439E+788605478","-7.39048168E+788605486","-8.70247717E+788605470","","","");
+  mathtest(29,def,"-8012.98341","96188.8651","88175.8817","-104201.849","-770759780","-0.0833046881","0","-8012.98341","-1.16010156E+375502");
+  mathtest(30,def,"21761476E+592330677","-9.70744506","2.17614760E+592330684","2.17614760E+592330684","-2.11248333E+592330685","-2.24173053E+592330683","","","");
+  mathtest(31,def,"-9840778.51","-17907.219","-9858685.73","-9822871.29","1.76220976E+11","549.542534","549","-9715.279","-6.62997437E-125225");
+  mathtest(32,def,"-4.1097614","-819.225776E-145214751","-4.10976140","-4.10976140","3.36682247E-145214748","5.01664074E+145214748","","","0.0000122876018");
+  mathtest(33,def,"-448.880985","-394.087374E-442511435","-448.880985","-448.880985","1.76898329E-442511430","1.13903925E+442511435","","","2.46306099E-11");
+  mathtest(34,def,"779.445304E+882688544","-797868519","7.79445304E+882688546","7.79445304E+882688546","-6.21894870E+882688555","-9.7690946E+882688537","","","");
+  mathtest(35,def,"799995477","-6.23675208E+156309440","-6.23675208E+156309440","6.23675208E+156309440","-4.98937346E+156309449","-1.28271169E-156309432","0","799995477","3.81482667E-54");
+  mathtest(36,def,"-51932.8170","591840275E-278480289","-51932.8170","-51932.8170","-3.07359327E-278480276","-8.7748028E+278480284","","","1.96178443E+28");
+  mathtest(37,def,"70.3552392","-4228656.73","-4228586.38","4228727.09","-297508156","-0.0000166377277","0","70.3552392","9.14742382E-7811584");
+  mathtest(38,def,"1588359.34","-12232799.2","-10644439.9","13821158.5","-1.94300809E+13","-0.129844307","0","1588359.34","1.56910086E-75854960");
+  mathtest(39,def,"2842.16206","-3.23234345","2838.92972","2845.39440","-9186.84392","-879.288388","-879","0.93216745","4.35565514E-11");
+  mathtest(40,def,"29960.2305","45.2735747E-95205475","29960.2305","29960.2305","1.35640673E-95205469","6.61759773E+95205477","","","2.413936E+22");
+  mathtest(41,def,"2916565.77","1151935.43E-787118724","2916565.77","2916565.77","3.35969544E-787118712","2.53188303E+787118724","","","2916565.77");
+  mathtest(42,def,"-52723012.9E-967143787","79.4088237","79.4088237","-79.4088237","-4.18667244E-967143778","-6.63944011E-967143782","0","-5.27230129E-967143780","");
+  mathtest(43,def,"-167473465","793646.597","-166679819","-168267112","-1.32914746E+14","-211.017682","-211","-14033.033","-1.19053789E+6526910");
+  mathtest(44,def,"-31769071.0","133.4360","-31768937.6","-31769204.4","-4.23913776E+9","-238084.707","-238084","-94.3760","-5.84252432E+997");
+  mathtest(45,def,"45960.6383","-93352.7468","-47392.1085","139313.385","-4.29055183E+9","-0.492333004","0","45960.6383","1.88335323E-435248");
+  mathtest(46,def,"606.175648","5.28528458E-981983620","606.175648","606.175648","3.20381081E-981983617","1.14691203E+981983622","","","8.18450516E+13");
+  mathtest(47,def,"171578.617E+643006110","-407774.293","1.71578617E+643006115","1.71578617E+643006115","-6.99653492E+643006120","-4.20768597E+643006109","","","");
+  mathtest(48,def,"-682286332.","-464.871699","-682286797","-682285867","3.17175606E+11","1467687.39","1467687","-182.709787","-1.6050843E-4108");
+  mathtest(49,def,"492088.428","653.72170","492742.150","491434.706","321688884","752.74911","752","489.70960","3.94658596E+3722");
+  mathtest(50,def,"74303782.5","1141.68058","74304924.2","74302640.8","8.48311855E+10","65082.812","65082","926.99244","4.94849869E+8988");
+  mathtest(51,def,"74.7794084E+119375329","-34799355.6","7.47794084E+119375330","7.47794084E+119375330","-2.60227522E+119375338","-2.14887337E+119375323","","","");
+  mathtest(52,def,"-9432.08369","33735.5058","24303.4221","-43167.5895","-318196114","-0.279589218","0","-9432.08369","2.309567E+134087");
+  mathtest(53,def,"4249198.78E-112433155","418673051.","418673051","-418673051","1.77902502E-112433140","1.01492054E-112433157","0","4.24919878E-112433149","");
+  mathtest(54,def,"-2960933.02","-207933.38","-3168866.40","-2752999.64","6.15676811E+11","14.2398158","14","-49865.70","-2.75680397E-1345624");
+  mathtest(55,def,"29317.7519E+945600035","1.43555750","2.93177519E+945600039","2.93177519E+945600039","4.20873186E+945600039","2.04225549E+945600039","","","2.93177519E+945600039");
+  mathtest(56,def,"-51.1693770","-638055.414","-638106.583","638004.245","32648898.0","0.0000801958198","0","-51.1693770","-3.48266075E-1090443");
+  mathtest(57,def,"-756343055.","-68.9248344E+217100975","-6.89248344E+217100976","6.89248344E+217100976","5.21308198E+217100985","1.09734475E-217100968","0","-756343055","-7.06265897E-63");
+  mathtest(58,def,"2538.80406E+694185197","-3386499.65","2.53880406E+694185200","2.53880406E+694185200","-8.59765906E+694185206","-7.49683839E+694185193","","","");
+  mathtest(59,def,"-54344.0672","-8086.45235","-62430.5196","-46257.6149","439450710","6.72038427","6","-5825.35310","3.62916861E-38289");
+  mathtest(60,def,"3.31600054","217481648","217481651","-217481645","721169262","1.5247266E-8","0","3.31600054","3.73134969E+113224119");
+  mathtest(61,def,"681832.671","320341.161E+629467560","3.20341161E+629467565","-3.20341161E+629467565","2.18419069E+629467571","2.12845789E-629467560","0","681832.671","3.16981139E+17");
+  mathtest(62,def,"832689481","348040024E-882122501","832689481","832689481","2.89809267E-882122484","2.3925107E+882122501","","","5.77363381E+26");
+  mathtest(63,def,"14.5512326E+257500811","60.9979577E-647314724","1.45512326E+257500812","1.45512326E+257500812","8.87595471E-389813911","2.38552784E+904815534","","","");
+  mathtest(64,def,"-901.278844","449461667.","449460766","-449462568","-4.05090292E+11","-0.00000200524074","0","-901.278844","");
+  mathtest(65,def,"-5.32627675","-738860216E-238273224","-5.32627675","-5.32627675","3.93537399E-238273215","7.20877459E+238273215","","","-0.00000822306838");
+  mathtest(66,def,"-505383463.","3.18756328","-505383460","-505383466","-1.61094177E+9","-158548527","-158548527","-0.23671144","-1.29081226E+26");
+  mathtest(67,def,"769241.44E-720927320","-145382631.","-145382631","145382631","-1.11834344E-720927306","-5.29115091E-720927323","0","7.6924144E-720927315","");
+  mathtest(68,def,"-6.45038910","56736.4411E+440937167","5.67364411E+440937171","-5.67364411E+440937171","-3.65972121E+440937172","-1.13690407E-440937171","0","-6.45038910","72030.3421");
+  mathtest(69,def,"58.4721075","-712186829","-712186771","712186887","-4.16430648E+10","-8.21022028E-8","0","58.4721075","");
+  mathtest(70,def,"8244.08357","245.302828E+652007959","2.45302828E+652007961","-2.45302828E+652007961","2.02229701E+652007965","3.36077804E-652007958","0","8244.08357","67964913.9");
+  mathtest(71,def,"45.5361397","-76579063.9","-76579018.4","76579109.4","-3.48711495E+9","-5.94629098E-7","0","45.5361397","3.98335374E-126995367");
+  mathtest(72,def,"594420.54E+685263039","-952420.179","5.94420540E+685263044","5.94420540E+685263044","-5.66138117E+685263050","-6.24115861E+685263038","","","");
+  mathtest(73,def,"-841310701.","9398110.4","-831912591","-850708811","-7.90673085E+15","-89.5191337","-89","-4878875.4","1.30001466E+83877722");
+  mathtest(74,def,"904392146E-140100276","168116093.","168116093","-168116093","1.52042874E-140100259","5.37956914E-140100276","0","9.04392146E-140100268","");
+  mathtest(75,def,"-907324792E+685539670","-15.6902171","-9.07324792E+685539678","-9.07324792E+685539678","1.42361230E+685539680","5.78274211E+685539677","","","");
+  mathtest(76,def,"987013606.","-26818.3572E+560907442","-2.68183572E+560907446","2.68183572E+560907446","-2.64700834E+560907455","-3.68036565E-560907438","0","987013606","1.0399934E-27");
+  mathtest(77,def,"-741317564","630.241530E-212782946","-741317564","-741317564","-4.67209116E-212782935","-1.1762436E+212782952","","","1.65968527E+53");
+  mathtest(78,def,"61867907.2","-139204670","-77336763","201072577","-8.61230161E+15","-0.444438446","0","61867907.2","");
+  mathtest(79,def,"-273.622743E+531282717","-4543.68684","-2.73622743E+531282719","-2.73622743E+531282719","1.24325606E+531282723","6.02204229E+531282715","","","");
+  mathtest(80,def,"-383588949.","-428640583.","-812229532","45051634","1.64421791E+17","0.89489648","0","-383588949","");
+  mathtest(81,def,"-56182.2686","32.7741649","-56149.4944","-56215.0428","-1841326.94","-1714.22426","-1714","-7.3499614","-5.45476402E+156");
+  mathtest(82,def,"-6366384.30","332014.980","-6034369.32","-6698399.28","-2.11373496E+12","-19.1749911","-19","-58099.680","-3.05392399E+2258994");
+  mathtest(83,def,"-1.27897702","-8213776.03E-686519123","-1.27897702","-1.27897702","1.05052308E-686519116","1.55711212E+686519116","","","0.139668371");
+  mathtest(84,def,"65.4059036","401162145E+884155506","4.01162145E+884155514","-4.01162145E+884155514","2.62383726E+884155516","1.63041066E-884155513","0","65.4059036","18300704.1");
+  mathtest(85,def,"-20630916.8","158987411.E-480500612","-20630916.8","-20630916.8","-3.28005605E-480500597","-1.29764468E+480500611","","","4.25634728E+14");
+  mathtest(86,def,"-4.72705853","-97626742.4","-97626747.1","97626737.7","461487325","4.84197097E-8","0","-4.72705853","2.92654449E-65858120");
+  mathtest(87,def,"8.43528169","-4573.45752","-4565.02224","4581.89280","-38578.4025","-0.00184439927","0","8.43528169","8.84248688E-4236");
+  mathtest(88,def,"1.91075189","-704247089.","-704247087","704247091","-1.34564146E+9","-2.71318394E-9","0","1.91075189","6.84547494E-198037309");
+  mathtest(89,def,"31997198E-551746308","326.892584","326.892584","-326.892584","1.04596467E-551746298","9.78829119E-551746304","0","3.1997198E-551746301","");
+  mathtest(90,def,"127589.213","84184304.","84311893.2","-84056714.8","1.07410091E+13","0.00151559385","0","127589.213","2.87917042E+429829394");
+  mathtest(91,def,"714494248","-7025063.59","707469185","721519312","-5.01936753E+15","-101.706446","-101","4962825.41","1.65018516E-62199908");
+  mathtest(92,def,"-52987680.2E+279533503","-42014114.8","-5.29876802E+279533510","-5.29876802E+279533510","2.22623048E+279533518","1.26118759E+279533503","","","");
+  mathtest(93,def,"-8795.0513","-225294.394E-884414238","-8795.05130","-8795.05130","1.98147575E-884414229","3.90380388E+884414236","","","1.2927759E-8");
+  mathtest(94,def,"83280.1394","161566354.","161649634","-161483074","1.34552685E+13","0.000515454718","0","83280.1394","5.30774809E+794993940");
+  mathtest(95,def,"112.877897","-9.96481666","102.913080","122.842714","-1124.80755","-11.3276441","-11","3.26491374","2.97790545E-21");
+  mathtest(96,def,"-572542.121E+847487397","433.843420","-5.72542121E+847487402","-5.72542121E+847487402","-2.48393632E+847487405","-1.3196976E+847487400","","","");
+  mathtest(97,def,"4709649.89","20949266.4","25658916.3","-16239616.5","9.86637102E+13","0.224812163","0","4709649.89","4.85293644E+139794213");
+  mathtest(98,def,"-9475.19322","-30885.2475E+584487341","-3.08852475E+584487345","3.08852475E+584487345","2.92643688E+584487349","3.06787026E-584487342","0","-9475.19322","-1.17553557E-12");
+  mathtest(99,def,"-213230447.","864.815822E+127783046","8.64815822E+127783048","-8.64815822E+127783048","-1.84405064E+127783057","-2.46561686E-127783041","0","-213230447","-9.11261361E+74");
+  mathtest(100,def,"-89.1168786E+403375873","6464.05744","-8.91168786E+403375874","-8.91168786E+403375874","-5.76056622E+403375878","-1.37865233E+403375871","","","");
+  mathtest(101,def,"61774.4958","-14000.7706","47773.7252","75775.2664","-864890545","-4.41222112","-4","5771.4134","7.59030407E-67077");
+  mathtest(102,def,"1.60731414","7.04330293E-427033419","1.60731414","1.60731414","1.13208004E-427033418","2.28204602E+427033418","","","27.7143921");
+  mathtest(103,def,"7955012.51","-230117662.","-222162650","238072675","-1.83058888E+15","-0.0345693261","0","7955012.51","");
+  mathtest(104,def,"4086661.08","1.77621994","4086662.86","4086659.30","7258808.90","2300762.98","2300762","1.73840572","1.67007988E+13");
+  mathtest(105,def,"-610.076931","-207.658306","-817.735237","-402.418625","126687.542","2.93788841","2","-194.760319","4.36518377E-580");
+  mathtest(106,def,"-98.6353697","-99253.3899E-716309653","-98.6353697","-98.6353697","9.78989481E-716309647","9.93773309E+716309649","","","1.14729007E-20");
+  mathtest(107,def,"-959923730","409.125542E-900295528","-959923730","-959923730","-3.92729316E-900295517","-2.3462816E+900295534","","","8.49076677E+35");
+  mathtest(108,def,"379965133","-8.15869657","379965125","379965141","-3.10002023E+9","-46571793.6","-46571793","5.19214999","2.30170697E-69");
+  mathtest(109,def,"833.646797","1389499.46E-443407251","833.646797","833.646797","1.15835177E-443407242","5.99961944E+443407247","","","833.646797");
+  mathtest(110,def,"2314933.4E-646489194","-7401538.17","-7401538.17","7401538.17","-1.71340679E-646489181","-3.12763826E-646489195","0","2.3149334E-646489188","");
+  mathtest(111,def,"808525347","-5959.74667E+58232168","-5.95974667E+58232171","5.95974667E+58232171","-4.81860624E+58232180","-1.35664382E-58232163","0","808525347","3.5796302E-54");
+  mathtest(112,def,"-17220490.6E+726428704","19.9855688","-1.72204906E+726428711","-1.72204906E+726428711","-3.44161300E+726428712","-8.61646259E+726428709","","","");
+  mathtest(113,def,"59015.9705","-72070405.4E+322957279","-7.20704054E+322957286","7.20704054E+322957286","-4.25330492E+322957291","-8.18865527E-322957283","0","59015.9705","4.01063488E-34");
+  mathtest(114,def,"16411470E+578192008","497470.005E-377473621","1.64114700E+578192015","1.64114700E+578192015","8.16421406E+200718399","3.29898684E+955665630","","","");
+  mathtest(115,def,"-107.353544E+609689808","-659.50136E-456711743","-1.07353544E+609689810","-1.07353544E+609689810","7.07998083E+152978069","","","","");
+  mathtest(116,def,"786.134163","-53.0292275E-664419768","786.134163","786.134163","-4.16880874E-664419764","-1.48245449E+664419769","","","3.33055532E-15");
+  mathtest(117,def,"23.5414714","5000786.91","5000810.45","-5000763.37","117725882","0.0000047075534","0","23.5414714","4.4895618E+6860247");
+  mathtest(118,def,"-69775.6113","561292120.","561222344","-561361896","-3.91645008E+13","-0.000124312473","0","-69775.6113","");
+  mathtest(119,def,"919043.871","-71606613.7","-70687569.8","72525657.6","-6.58096194E+13","-0.0128346227","0","919043.871","3.05862429E-427014317");
+  mathtest(120,def,"-27667.1915","-293455.107E-789181924","-27667.1915","-27667.1915","8.11907864E-789181915","9.42808315E+789181922","","","-4.72176938E-14");
+  mathtest(121,def,"-908603625.","-982.409273E+449441134","-9.82409273E+449441136","9.82409273E+449441136","8.92620627E+449441145","9.2487281E-449441129","0","-908603625","2.60768632E-90");
+  mathtest(122,def,"847.113351","5.71511268","852.828464","841.398238","4841.34825","148.223386","148","1.27667436","3.69529538E+17");
+  mathtest(123,def,"-992140475","3.82918218","-992140471","-992140479","-3.79908663E+9","-259099836","-259099836","-0.14787752","9.68930595E+35");
+  mathtest(124,def,"-12606437.5","268123145E+362798858","2.68123145E+362798866","-2.68123145E+362798866","-3.38007767E+362798873","-4.70173416E-362798860","0","-12606437.5","-2.00344362E+21");
+  mathtest(125,def,"3799470.64","-264.703992","3799205.94","3799735.34","-1.00573505E+9","-14353.6583","-14353","174.242824","2.3625466E-1744");
+  mathtest(126,def,"-8.11070247","-931284056.E-654288974","-8.11070247","-8.11070247","7.55336789E-654288965","8.70916067E+654288965","","","-6.58375662E-9");
+  mathtest(127,def,"-242660177.","-6.09832715E-943742415","-242660177","-242660177","1.47982115E-943742406","3.97912692E+943742422","","","4.89788901E-51");
+  mathtest(128,def,"76.1463803","-45.6758006E-636907996","76.1463803","76.1463803","-3.47804688E-636907993","-1.66710554E+636907996","","","3.90619287E-10");
+  mathtest(129,def,"761185.862","-70878470.9E+221214712","-7.08784709E+221214719","7.08784709E+221214719","-5.39516900E+221214725","-1.07393099E-221214714","0","761185.862","6.75406144E-42");
+  mathtest(130,def,"6203606.54","-195.92748E-833512061","6203606.54","6203606.54","-1.21545700E-833512052","-3.1662769E+833512065","","","2.59843292E-14");
+  mathtest(131,def,"-163274837.","95.0448550E+887876533","9.50448550E+887876534","-9.50448550E+887876534","-1.55184332E+887876543","-1.71787139E-887876527","0","-163274837","1.34645731E+82");
+  mathtest(132,def,"2.38638190","-807986179.","-807986177","807986181","-1.92816359E+9","-2.95349347E-9","0","2.38638190","1.19029305E-305208656");
+  mathtest(133,def,"-109022296E-811981158","7.19685680","7.19685680","-7.19685680","-7.84617852E-811981150","-1.51485988E-811981151","0","-1.09022296E-811981150","");
+  mathtest(134,def,"-559250.780E-273710421","-393780811.","-393780811","393780811","2.20222226E-273710407","1.42020831E-273710424","0","-5.59250780E-273710416","");
+  mathtest(135,def,"-88021.9966E+555334642","7599686.64E+818884053","7.59968664E+818884059","-7.59968664E+818884059","","-1.15823192E-263549413","0","-8.80219966E+555334646","");
+  mathtest(136,def,"194.317648E-197450009","-930.979064","-930.979064","930.979064","-1.80905662E-197450004","-2.08723972E-197450010","0","1.94317648E-197450007","");
+  mathtest(137,def,"9495479.65","7405697.96","16901177.6","2089781.69","7.03206543E+13","1.28218565","1","2089781.69","1.0135446E+51673383");
+  mathtest(138,def,"-1656.28925","-163050511E-682882380","-1656.28925","-1656.28925","2.70058809E-682882369","1.01581359E+682882375","","","3.64525265E-7");
+  mathtest(139,def,"95581.3784E+64262149","-99.2879365","9.55813784E+64262153","9.55813784E+64262153","-9.49007783E+64262155","-9.62668596E+64262151","","","");
+  mathtest(140,def,"643761.452","3.73446939","643765.186","643757.718","2404107.44","172383.647","172383","2.41514363","1.71751236E+23");
+  mathtest(141,def,"7960.49866E-129827423","3220.22850","3220.22850","-3220.22850","2.56346247E-129827416","2.47202913E-129827423","0","7.96049866E-129827420","");
+  mathtest(142,def,"-6356.64112E-707203818","1805054.98","1805054.98","-1805054.98","-1.14740867E-707203808","-3.52157756E-707203821","0","-6.35664112E-707203815","");
+  mathtest(143,def,"2.3904042","8476.52006","8478.91046","-8474.12966","20262.3092","0.000282003013","0","2.3904042","2.00251752E+3208");
+  mathtest(144,def,"-713298.658","-957.782729","-714256.441","-712340.875","683185135","744.739528","744","-708.307624","3.68122321E-5608");
+  mathtest(145,def,"607779233.E-820497365","-20.1188742E-857318323","6.07779233E-820497357","6.07779233E-820497357","","-3.02094057E+36820965","","","");
+  mathtest(146,def,"-205888251","-908.792922E+250680613","-9.08792922E+250680615","9.08792922E+250680615","1.87109785E+250680624","2.26551336E-250680608","0","-205888251","-1.5042358E-75");
+  mathtest(147,def,"51542399.1","-23212.2414","51519186.9","51565611.3","-1.19641461E+12","-2220.4835","-2220","11223.1920","1.71641348E-179015");
+  mathtest(148,def,"4.44287230","158923023","158923027","-158923019","706074697","2.79561275E-8","0","4.44287230","7.12573416E+102928693");
+  mathtest(149,def,"-79123682.6","-3.8571770","-79123686.5","-79123678.8","305194049","20513365.8","20513365","-2.9293950","2.55137345E-32");
+  mathtest(150,def,"-80.3324347E-569715030","883142.351","883142.351","-883142.351","-7.09449752E-569715023","-9.09620455E-569715035","0","-8.03324347E-569715029","");
+  mathtest(151,def,"13637.483","-52798.5631","-39161.0801","66436.0461","-720039507","-0.258292692","0","13637.483","1.47163791E-218310");
+  mathtest(152,def,"6.42934843E-276476458","84057440.0E-388039782","6.42934843E-276476458","6.42934843E-276476458","5.40434570E-664516232","7.64875593E+111563316","","","");
+  mathtest(153,def,"-5.64133087","-17401297.","-17401302.6","17401291.4","98166473.9","3.24190253E-7","0","-5.64133087","-1.25908916E-13075014");
+  mathtest(154,def,"95469.7057E+865733824","198.829749","9.54697057E+865733828","9.54697057E+865733828","1.89822176E+865733831","4.80158056E+865733826","","","");
+  mathtest(155,def,"-416466.209","-930153427","-930569893","929736961","3.87377472E+14","0.000447739262","0","-416466.209","");
+  mathtest(156,def,"-1541733.85","-1.99208708","-1541735.84","-1541731.86","3071268.08","773928.944","773928","-1.88034976","4.20708401E-13");
+  mathtest(157,def,"-39152691.8","-645131748.","-684284440","605979056","2.52586445E+16","0.0606894513","0","-39152691.8","");
+  mathtest(158,def,"113.939979","-58282550.4","-58282436.5","58282664.3","-6.64071257E+9","-0.0000019549587","0","113.939979","2.106557E-119868330");
+  mathtest(159,def,"-324971.736","-9517.15154","-334488.888","-315454.585","3.09280526E+9","34.1459033","34","-1388.58364","-5.82795263E-52457");
+  mathtest(160,def,"-76.9436744","-9548122.75E-273599728","-76.9436744","-76.9436744","7.34667648E-273599720","8.05851332E+273599722","","","1.37489895E-19");
+  mathtest(161,def,"-430393.282","-70.2551505","-430463.537","-430323.027","30237344.8","6126.14561","6126","-10.2300370","4.26006409E-395");
+  mathtest(162,def,"-3308051.90","-349433799.E+397813188","-3.49433799E+397813196","3.49433799E+397813196","1.15594514E+397813203","9.46689161E-397813191","0","-3308051.90","-2.76237768E-20");
+  mathtest(163,def,"23.1543212E-655822712","5848.20853","5848.20853","-5848.20853","1.35411299E-655822707","3.95921607E-655822715","0","2.31543212E-655822711","");
+  mathtest(164,def,"-174.261308E-82902077","-200096204.","-200096204","200096204","3.48690262E-82902067","8.70887626E-82902084","0","-1.74261308E-82902075","");
+  mathtest(165,def,"-50669105.2","9105789.01E+609889700","9.10578901E+609889706","-9.10578901E+609889706","-4.61382181E+609889714","-5.56449366E-609889700","0","-50669105.2","-2.20135008E+69");
+  mathtest(166,def,"424768856.","-971.71757","424767884","424769828","-4.12755361E+11","-437132.012","-437132","11.19076","2.72651473E-8387");
+  mathtest(167,def,"7181.2767","999117.918","1006299.19","-991936.641","7.17494223E+9","0.00718761677","0","7181.2767","3.09655124E+3852800");
+  mathtest(168,def,"8096417.07E-433694528","-68.4863363","-68.4863363","68.4863363","-5.54493942E-433694520","-1.18219451E-433694523","0","8.09641707E-433694522","");
+  mathtest(169,def,"1236287.5","-7119.97299E-176200498","1236287.50","1236287.50","-8.80233361E-176200489","-1.73636544E+176200500","","","2.26549784E-43");
+  mathtest(170,def,"-752995833E-654401067","-15.2736930E+803939983","-1.52736930E+803939984","1.52736930E+803939984","1.15010272E+149538926","","0","-7.52995833E-654401059","");
+  mathtest(171,def,"702992.459","-312.689474","702679.770","703305.148","-219818342","-2248.21274","-2248","66.521448","8.02493322E-1831");
+  mathtest(172,def,"-4414.38805","-17680.4630E-584364536","-4414.38805","-4414.38805","7.80484246E-584364529","2.49676044E+584364535","","","5.13167312E-8");
+  mathtest(173,def,"9.46350807","7826.65424","7836.11775","-7817.19073","74067.6056","0.00120913839","0","9.46350807","3.63271495E+7639");
+  mathtest(174,def,"2078153.7","-16934607.3E+233594439","-1.69346073E+233594446","1.69346073E+233594446","-3.51927168E+233594452","-1.2271638E-233594440","0","2078153.7","2.31549939E-13");
+  mathtest(175,def,"-9359.74629","7.07761788E+252457696","7.07761788E+252457696","-7.07761788E+252457696","-6.62447077E+252457700","-1.32244301E-252457693","0","-9359.74629","-6.29286677E+27");
+  mathtest(176,def,"66.2319284E+730468479","25.9391685E+221147044","6.62319284E+730468480","6.62319284E+730468480","1.71800115E+951615526","2.55335588E+509321435","","","");
+  mathtest(177,def,"317997088.E-90968742","-977426.461","-977426.461","977426.461","-3.10818768E-90968728","-3.2534119E-90968740","0","3.17997088E-90968734","");
+  mathtest(178,def,"227473386","-6759.61390","227466626","227480146","-1.53763226E+12","-33651.8312","-33651","5618.65110","1.40992627E-56493");
+  mathtest(179,def,"-392019.462","-245456.503","-637475.965","-146562.959","9.62237263E+10","1.59710359","1","-146562.959","-3.08656533E-1372917");
+  mathtest(180,def,"-3619556.28E+587673583","-3.45236972","-3.61955628E+587673589","-3.61955628E+587673589","1.24960465E+587673590","1.04842661E+587673589","","","");
+  mathtest(181,def,"-249.400704E-923930848","831102.919","831102.919","-831102.919","-2.07277653E-923930840","-3.00084019E-923930852","0","-2.49400704E-923930846","");
+  mathtest(182,def,"65234.2739E+154949914","-694581895","6.52342739E+154949918","6.52342739E+154949918","-4.53105456E+154949927","-9.39187652E+154949909","","","");
+  mathtest(183,def,"45.2316213","-88775083.4","-88775038.2","88775128.6","-4.01544095E+9","-5.09508069E-7","0","45.2316213","1.92314254E-146962015");
+  mathtest(184,def,"331100375.","442.343378","331100817","331099933","1.46460058E+11","748514.37","748514","163.759708","6.64011043E+3765");
+  mathtest(185,def,"81.8162765","5.61239515E+467372163","5.61239515E+467372163","-5.61239515E+467372163","4.59185273E+467372165","1.45777826E-467372162","0","81.8162765","2.99942677E+11");
+  mathtest(186,def,"-5738.13069E+789464078","33969715.0","-5.73813069E+789464081","-5.73813069E+789464081","-1.94922664E+789464089","-1.68919012E+789464074","","","");
+  mathtest(187,def,"-7413.03911","2.70630320E-254858264","-7413.03911","-7413.03911","-2.00619315E-254858260","-2.73917539E+254858267","","","-4.07369842E+11");
+  mathtest(188,def,"-417696.182","27400.6002","-390295.582","-445096.782","-1.14451261E+10","-15.2440523","-15","-6687.1790","-1.58020334E+154017");
+  mathtest(189,def,"68.8538735E+655647287","3198.17933E-132454826","6.88538735E+655647288","6.88538735E+655647288","2.20207035E+523192466","2.15290846E+788102111","","","");
+  mathtest(190,def,"-6817.04246","434420.439","427603.397","-441237.481","-2.96146258E+9","-0.0156922692","0","-6817.04246","5.94143518E+1665390");
+  mathtest(191,def,"8578.27511","647042.341E-490924334","8578.27511","8578.27511","5.55050721E-490924325","1.3257672E+490924332","","","3.98473846E+23");
+  mathtest(192,def,"4124.11615E+733109424","597385828E+375928745","4.12411615E+733109427","4.12411615E+733109427","","6.9036056E+357180673","","","");
+  mathtest(193,def,"102.714400","-919017.468","-918914.754","919120.182","-94396327.8","-0.000111765449","0","102.714400","4.04295689E-1848724");
+  mathtest(194,def,"-4614.33015E+996778733","-433.560812E+22860599","-4.61433015E+996778736","-4.61433015E+996778736","","1.06428672E+973918135","","","");
+  mathtest(195,def,"457455170.","3709230.48E+677010879","3.70923048E+677010885","-3.70923048E+677010885","1.69680666E+677010894","1.23328861E-677010877","0","457455170","4.37919376E+34");
+  mathtest(196,def,"-2522468.15","-48482043.5","-51004511.7","45959575.4","1.22294411E+14","0.0520289156","0","-2522468.15","1.42348178E-310373595");
+  mathtest(197,def,"-659811384","62777.6118","-659748606","-659874162","-4.14213829E+13","-10510.2976","-10510","-18683.9820","3.4393524E+553665");
+  mathtest(198,def,"4424.94176","-825848.20","-821423.258","830273.142","-3.65433019E+9","-0.00535805704","0","4424.94176","3.42152775E-3010966");
+  mathtest(199,def,"43.6441884","-6509.89663E-614169377","43.6441884","43.6441884","-2.84119155E-614169372","-6.70428286E+614169374","","","3.31524056E-12");
+  mathtest(200,def,"897.388381E-843864876","84195.1369","84195.1369","-84195.1369","7.55557376E-843864869","1.06584348E-843864878","0","8.97388381E-843864874","");
+  mathtest(201,def,"796199825","496.76834","796200322","796199328","3.95526865E+11","1602758.79","1602758","393.91828","6.42647264E+4423");
+  mathtest(202,def,"573583582","1598.69521","573585181","573581983","9.16985325E+11","358782.323","358782","517.16578","9.91156302E+14004");
+  mathtest(203,def,"-783144270.","6347.71496","-783137922","-783150618","-4.97117660E+12","-123374.202","-123374","-1284.52496","1.28110803E+56458");
+  mathtest(204,def,"26909234.7","52411.5081","26961646.2","26856823.2","1.41035357E+12","513.422255","513","22131.0447","9.75836528E+389415");
+  mathtest(205,def,"8.21915282","24859.7841E-843282959","8.21915282","8.21915282","2.04326365E-843282954","3.30620443E+843282955","","","67.5544731");
+  mathtest(206,def,"-688.387710","82783.5207E-831870858","-688.387710","-688.387710","-5.69871582E-831870851","-8.31551623E+831870855","","","5.04272012E+22");
+  mathtest(207,def,"-9792232.","-1749.01166","-9793981.01","-9790482.99","1.71267279E+10","5598.72311","5598","-1264.72732","-8.86985674E-12228");
+  mathtest(208,def,"-130.765600","8.67437427","-122.091226","-139.439974","-1134.30976","-15.0749317","-15","-0.64998595","-1.11799947E+19");
+  mathtest(209,def,"917.259102","-368640.426","-367723.167","369557.685","-338138786","-0.00248822169","0","917.259102","8.67104255E-1092094");
+  mathtest(210,def,"-4.9725631","-294563717.","-294563722","294563712","1.46473667E+9","1.6881112E-8","0","-4.9725631","-6.27962584E-205187284");
+  mathtest(211,def,"-60962887.2E-514249661","-243021.407","-243021.407","243021.407","1.48152866E-514249648","2.5085398E-514249659","0","-6.09628872E-514249654","");
+  mathtest(212,def,"-55389219.8","-3772200E+981866393","-3.77220000E+981866399","3.77220000E+981866399","2.08939215E+981866407","1.46835321E-981866392","0","-55389219.8","1.06242678E-31");
+  mathtest(213,def,"681.666010","626886700","626887382","-626886018","4.27327356E+11","0.00000108738311","0","681.666010","");
+  mathtest(214,def,"6.42652138","53465894.5","53465900.9","-53465888.1","343599714","1.2019852E-7","0","6.42652138","4.61155532E+43199157");
+  mathtest(215,def,"561546656","651408.476","562198064","560895248","3.65796251E+14","862.049968","862","32549.688","8.6052377E+5699419");
+  mathtest(216,def,"7845778.36E-79951139","9.45859047","9.45859047","-9.45859047","7.42100044E-79951132","8.29487056E-79951134","0","7.84577836E-79951133","1.12648216E-719560189");
+  mathtest(217,def,"54486.2112","10.7565078","54496.9677","54475.4547","586081.356","5065.41828","5065","4.4991930","1.25647168E+52");
+  mathtest(218,def,"16576482.5","-2217720.83","14358761.7","18794203.3","-3.67620105E+13","-7.47455779","-7","1052436.69","1.38259374E-16010820");
+  mathtest(219,def,"61.2793787E-392070111","6.22575651","6.22575651","-6.22575651","3.81510491E-392070109","9.84288072E-392070111","0","6.12793787E-392070110","");
+  mathtest(220,def,"5115136.39","-653674372.","-648559236","658789508","-3.34363357E+15","-0.00782520565","0","5115136.39","");
+  mathtest(221,def,"-7.84238366E-416477339","-37432758.9E+97369393","-3.74327589E+97369400","3.74327589E+97369400","2.93562057E-319107938","2.09505895E-513846739","0","-7.84238366E-416477339","");
+  mathtest(222,def,"-387781.3E+284108380","-218085.592","-3.87781300E+284108385","-3.87781300E+284108385","8.45695144E+284108390","1.77811517E+284108380","","","");
+  mathtest(223,def,"-5353.17736","3.39332346E+546685359","3.39332346E+546685359","-3.39332346E+546685359","-1.81650623E+546685363","-1.57756177E-546685356","0","-5353.17736","-1.53403369E+11");
+  mathtest(224,def,"-20837.2900E-168652772","-8236.78305E-712819173","-2.08372900E-168652768","-2.08372900E-168652768","1.71632237E-881471937","2.52978497E+544166401","","","");
+  mathtest(225,def,"-98573.8722E+829022366","309011.007","-9.85738722E+829022370","-9.85738722E+829022370","-3.04604115E+829022376","-3.18997932E+829022365","","","");
+  mathtest(226,def,"49730750.7","-5315.10636E-299586991","49730750.7","49730750.7","-2.64324229E-299586980","-9.35649211E+299586994","","","3.28756936E-39");
+  mathtest(227,def,"1539523.40","-962388.581","577134.82","2501911.98","-1.48161974E+12","-1.59969001","-1","577134.819","3.10144834E-5954673");
+  mathtest(228,def,"81596.2121","-37600.9653","43995.2468","119197.177","-3.06809634E+9","-2.17005631","-2","6394.2815","1.97878299E-184684");
+  mathtest(229,def,"590146199","-1425404.61","588720794","591571604","-8.41197113E+14","-414.020128","-414","28690.46","2.04650994E-12502170");
+  mathtest(230,def,"196.05543","505.936305","701.991735","-309.880875","99191.5598","0.387510104","0","196.05543","8.78437397E+1159");
+  mathtest(231,def,"77.8058449","-642.275274","-564.469429","720.081119","-49972.7704","-0.121140963","0","77.8058449","9.33582626E-1215");
+  mathtest(232,def,"1468.60684","10068.138","11536.7448","-8599.5312","14786136.3","0.145866777","0","1468.60684","2.54122484E+31884");
+  mathtest(233,def,"4.98774767E-387968632","4.41731439E-578812376","4.98774767E-387968632","4.98774767E-387968632","2.20324496E-966781007","1.12913577E+190843744","","","");
+  mathtest(234,def,"981.091059","-92238.9930","-91257.9020","93220.0841","-90494851.3","-0.0106364025","0","981.091059","5.29943342E-275953");
+  mathtest(235,def,"-3606.24992","8290224.70","8286618.45","-8293830.95","-2.98966222E+10","-0.000435000262","0","-3606.24992","-1.23747107E+29488793");
+  mathtest(236,def,"-8978571.35","92243.4796","-8886327.87","-9070814.83","-8.28214663E+11","-97.3355666","-97","-30953.8288","-4.95762813E+641384");
+  mathtest(237,def,"-61968.1992E+810060478","474294671.E+179263414","-6.19681992E+810060482","-6.19681992E+810060482","-2.93911867E+989323905","-1.30653374E+630797060","","","");
+  mathtest(238,def,"61298431.6E-754429041","-2584862.79","-2584862.79","2584862.79","-1.58448035E-754429027","-2.37143851E-754429040","0","6.12984316E-754429034","");
+  mathtest(239,def,"621039.064","-5351539.62","-4730500.56","5972578.68","-3.32351516E+12","-0.116048672","0","621039.064","2.41163312E-31002108");
+  mathtest(240,def,"-19.6007605","-57905696.","-57905715.6","57905676.4","1.13499568E+9","3.38494515E-7","0","-19.6007605","1.05663646E-74829963");
+  mathtest(241,def,"3626.13109E+687030346","189.896004","3.62613109E+687030349","3.62613109E+687030349","6.88587804E+687030351","1.90953523E+687030347","","","");
+  mathtest(242,def,"-249334.026","-7.54735834E-14137188","-249334.026","-249334.026","1.88181324E-14137182","3.30359332E+14137192","","","6.69495408E-44");
+  mathtest(243,def,"417613928.","-925213.216","416688715","418539141","-3.86381925E+14","-451.370474","-451","342767.584","8.38430085E-7976054");
+  mathtest(244,def,"23.8320309","-50074996.1","-50074972.3","50075019.9","-1.19338885E+9","-4.75926765E-7","0","23.8320309","5.81466387E-68961335");
+  mathtest(245,def,"49789677.7","-131827812E+156412534","-1.31827812E+156412542","1.31827812E+156412542","-6.56366427E+156412549","-3.77687204E-156412535","0","49789677.7","2.00844843E-8");
+  mathtest(246,def,"-8907163.61E-741867246","773651.288E-472033282","7.73651288E-472033277","-7.73651288E-472033277","","-1.15131504E-269833963","0","-8.90716361E-741867240","");
+  mathtest(247,def,"514021711.E+463536646","617441659.","5.14021711E+463536654","5.14021711E+463536654","3.17378418E+463536663","8.32502478E+463536645","","","");
+  mathtest(248,def,"998175750","2.39285478","998175752","998175748","2.38848961E+9","417148487","417148486","1.30513692","9.96354828E+17");
+  mathtest(249,def,"873575426.","647853.152E+497450781","6.47853152E+497450786","-6.47853152E+497450786","5.65948593E+497450795","1.3484158E-497450778","0","873575426","4.44429064E+53");
+  mathtest(250,def,"4352626.8","-130338048.E-744560911","4352626.80","4352626.80","-5.67312881E-744560897","-3.33949055E+744560909","","","2.29746322E-7");
+  mathtest(251,def,"437.286960","7.37560835","444.662568","429.911352","3225.25735","59.2882565","59","2.12606735","3.05749452E+18");
+  mathtest(252,def,"8498280.45E+220511522","588617612","8.49828045E+220511528","8.49828045E+220511528","5.00223754E+220511537","1.44376931E+220511520","","","");
+  mathtest(253,def,"-5320387.77","-7673237.46","-12993625.2","2352849.69","4.08245987E+13","0.693369363","0","-5320387.77","-1.30113745E-51609757");
+  mathtest(254,def,"587655375","-4.9748366","587655370","587655380","-2.92348947E+9","-118125563","-118125563","0.7919942","1.42687667E-44");
+  mathtest(255,def,"1266098.44","-2661.64904E-642601142","1266098.44","1266098.44","-3.36990970E-642601133","-4.75681963E+642601144","","","4.92717036E-19");
+  mathtest(256,def,"3.92737463E+482873483","-685.522747","3.92737463E+482873483","3.92737463E+482873483","-2.69230464E+482873486","-5.72902161E+482873480","","","");
+  mathtest(257,def,"22826494.1","986189474.","1.00901597E+9","-963362980","2.25112482E+16","0.0231461547","0","22826494.1","");
+  mathtest(258,def,"-647342.380","-498816386","-499463728","498169044","3.22904986E+14","0.00129775685","0","-647342.380","");
+  mathtest(259,def,"393092373.","-25.7226822","393092347","393092399","-1.01113902E+10","-15281935.6","-15281935","15.5939430","3.49252839E-224");
+  mathtest(260,def,"2.96253492","20.7444888","23.7070237","-17.7819539","61.4562725","0.142810698","0","2.96253492","8.03402246E+9");
+  mathtest(261,def,"53553.3750E+386955423","-732470876","5.35533750E+386955427","5.35533750E+386955427","-3.92262875E+386955436","-7.31133165E+386955418","","","");
+  mathtest(262,def,"-696451.406E-286535917","-73086090.8","-73086090.8","73086090.8","5.09009107E-286535904","9.52919219E-286535920","0","-6.96451406E-286535912","");
+  mathtest(263,def,"1551.29957","-580358622.E+117017265","-5.80358622E+117017273","5.80358622E+117017273","-9.00310081E+117017276","-2.67300168E-117017271","0","1551.29957","7.17506711E-20");
+  mathtest(264,def,"-205123006.E-213752799","-78638468.6","-78638468.6","78638468.6","1.61305591E-213752783","2.60843083E-213752799","0","-2.05123006E-213752791","");
+  mathtest(265,def,"77632.8073","-3378542.88E+677441319","-3.37854288E+677441325","3.37854288E+677441325","-2.62285768E+677441330","-2.29781921E-677441321","0","77632.8073","2.13729331E-15");
+  mathtest(266,def,"3068999.37","2.21006212","3069001.58","3068997.16","6782679.25","1388648.46","1388648","1.02718624","9.41875713E+12");
+  mathtest(267,def,"625524274.","55.2468624","625524329","625524219","3.45582535E+10","11322349.3","11322349","16.7522224","6.21482943E+483");
+  mathtest(268,def,"61269134.9","-845761303.","-784492168","907030438","-5.18190634E+16","-0.0724425848","0","61269134.9","");
+  mathtest(269,def,"-2840.12099","-2856.76731E-82743650","-2840.12099","-2840.12099","8.11356480E-82743644","9.94173022E+82743649","","","-4.36505254E-11");
+  mathtest(270,def,"8.9538781","-7.56603391","1.38784419","16.5199120","-67.7453453","-1.18343087","-1","1.38784419","2.42053061E-8");
+  mathtest(271,def,"-56233547.2","509752530","453518983","-565986077","-2.86651930E+16","-0.110315386","0","-56233547.2","");
+  mathtest(272,def,"-3167.47853E-854859497","-110852115","-110852115","110852115","3.51121694E-854859486","2.85739116E-854859502","0","-3.16747853E-854859494","");
+  mathtest(273,def,"-5652.52092","-632243244.","-632248897","632237592","3.57376816E+12","0.00000894042123","0","-5652.52092","");
+  mathtest(274,def,"-946.009928","820090.66E-589278015","-946.009928","-946.009928","-7.75813906E-589278007","-1.15354311E+589278012","","","6.41454053E+23");
+  mathtest(275,def,"-367.757758","-959.626016","-1327.38377","591.868258","352909.912","0.383230292","0","-367.757758","1.14982199E-2463");
+  mathtest(276,def,"809926721.E-744611554","-67.6560549","-67.6560549","67.6560549","-5.47964467E-744611544","-1.19712378E-744611547","0","8.09926721E-744611546","");
+  mathtest(277,def,"-1725.08555","75586.3031","73861.2176","-77311.3887","-130392839","-0.0228227269","0","-1725.08555","3.70540587E+244657");
+  mathtest(278,def,"2659.84191E+29314492","-74372.4551E+518196680","-7.43724551E+518196684","7.43724551E+518196684","-1.97818973E+547511180","-3.5763804E-488882190","0","2.65984191E+29314495","1.06171811E-205201468");
+  mathtest(279,def,"-91.1431113","12147507.0","12147415.9","-12147598.1","-1.10716158E+9","-0.00000750303015","0","-91.1431113","-1.52417006E+23805759");
+  mathtest(280,def,"-1136778.91E+697783878","-801552569.","-1.13677891E+697783884","-1.13677891E+697783884","9.11188056E+697783892","1.41822128E+697783875","","","");
+  mathtest(281,def,"73123773.0E+433334149","63.3548930","7.31237730E+433334156","7.31237730E+433334156","4.63274881E+433334158","1.15419298E+433334155","","","");
+  mathtest(282,def,"-9765484.8","7979.90802E-234029715","-9765484.80","-9765484.80","-7.79276705E-234029705","-1.22375907E+234029718","","","8.27085614E+55");
+  mathtest(283,def,"-695010288","-8.26582820","-695010296","-695010280","5.74483564E+9","84082353.4","84082353","-3.45024540","1.83683495E-71");
+  mathtest(284,def,"23975643.3E-155955264","-505547.692E+137258948","-5.05547692E+137258953","5.05547692E+137258953","-1.21208311E-18696303","-4.7425087E-293214211","0","2.39756433E-155955257","1.26225952E+779776283");
+  mathtest(285,def,"2862.95921","-32601248.6E-605861333","2862.95921","2862.95921","-9.33360449E-605861323","-8.78174712E+605861328","","","4.26142175E-11");
+  mathtest(286,def,"-13.133518E+246090516","-8.71269925E-945092108","-1.31335180E+246090517","-1.31335180E+246090517","1.14428392E-699001590","","","","");
+  mathtest(287,def,"-34671.2232","817710.762","783039.539","-852381.985","-2.83510323E+10","-0.0424003508","0","-34671.2232","-5.30788828E+3712382");
+  mathtest(288,def,"-22464769","62.4366060","-22464706.6","-22464831.4","-1.40262393E+9","-359801.252","-359801","-15.7245940","6.21042536E+455");
+  mathtest(289,def,"-9458.60887E-563051963","5676056.01","5676056.01","-5676056.01","-5.36875937E-563051953","-1.66640513E-563051966","0","-9.45860887E-563051960","");
+  mathtest(290,def,"-591.924123E-95331874","-134.596188","-134.596188","134.596188","7.96707305E-95331870","4.39777777E-95331874","0","-5.91924123E-95331872","");
+  mathtest(291,def,"-182566085.E+68870646","-960345993.","-1.82566085E+68870654","-1.82566085E+68870654","1.75326608E+68870663","1.9010449E+68870645","","","");
+  mathtest(292,def,"8232.54893","-99822004E+891979845","-9.98220040E+891979852","9.98220040E+891979852","-8.21789532E+891979856","-8.24722867E-891979850","0","8232.54893","6.99289156E-40");
+  mathtest(293,def,"-4336.94317","-819373.601E+563233430","-8.19373601E+563233435","8.19373601E+563233435","3.55357674E+563233439","5.29299841E-563233433","0","-4336.94317","7.98969405E-30");
+  mathtest(294,def,"-2.09044362E-876527908","-6515463.33","-6515463.33","6515463.33","1.36202087E-876527901","3.20843433E-876527915","0","-2.09044362E-876527908","");
+  mathtest(295,def,"-194343.344","1.95929977","-194341.385","-194345.303","-380776.869","-99190.2041","-99190","-0.39981370","3.77693354E+10");
+  mathtest(296,def,"-326002.927","4215.99030","-321786.937","-330218.917","-1.37442518E+9","-77.3253503","-77","-1371.67390","5.51875821E+23243");
+  mathtest(297,def,"-12037.8590E+876429044","314.81827","-1.20378590E+876429048","-1.20378590E+876429048","-3.78973794E+876429050","-3.82374854E+876429045","","","");
+  mathtest(298,def,"21036045.4E-162804809","-91.7149219","-91.7149219","91.7149219","-1.92931926E-162804800","-2.2936339E-162804804","0","2.10360454E-162804802","");
+  mathtest(299,def,"-947019.534","9916.29280","-937103.241","-956935.827","-9.39092299E+9","-95.5013686","-95","-4971.71800","3.76029022E+59261");
+  mathtest(300,def,"-5985.84136","-12.4090184E-12364204","-5985.84136","-5985.84136","7.42784156E-12364200","4.82378313E+12364206","","","-0.000167060893");
+  mathtest(301,def,"-85344379.4","-6783.08669E+218840215","-6.78308669E+218840218","6.78308669E+218840218","5.78898324E+218840226","1.25819385E-218840211","0","-85344379.4","-3.03232347E-56");
+  mathtest(302,def,"-94.1947070E-938257103","15003.240","15003.2400","-15003.2400","-1.41322580E-938257097","-6.27829102E-938257106","0","-9.41947070E-938257102","");
+  mathtest(303,def,"-4846233.6","-8289769.76","-13136003.4","3443536.16","4.01741607E+13","0.584604125","0","-4846233.6","4.25077524E-55420465");
+  mathtest(304,def,"67.9147198","-108373645.E+291715415","-1.08373645E+291715423","1.08373645E+291715423","-7.36016573E+291715424","-6.26671916E-291715422","0","67.9147198","0.0147243485");
+  mathtest(305,def,"1958.77994","5.57285137E+690137826","5.57285137E+690137826","-5.57285137E+690137826","1.09159895E+690137830","3.51486126E-690137824","0","1958.77994","5.64824968E+19");
+  mathtest(306,def,"22780314.3","8805279.83","31585594.1","13975034.5","2.00587042E+14","2.58711986","2","5169754.64","2.39132169E+64785373");
+  mathtest(307,def,"596745.184","197602423.","198199168","-197005678","1.17918294E+14","0.00301992848","0","596745.184","");
+  mathtest(308,def,"171.340497","-480349.924","-480178.584","480521.264","-82303394.7","-0.000356699332","0","171.340497","2.17914102E-1073035");
+  mathtest(309,def,"824.65555","-379287.530","-378462.875","380112.186","-312781567","-0.00217422268","0","824.65555","6.35829256E-1106108");
+  mathtest(310,def,"19.3164031","-9207644.24E+988115069","-9.20764424E+988115075","9.20764424E+988115075","-1.77858568E+988115077","-2.09786592E-988115075","0","19.3164031","2.67093711E-12");
+  mathtest(311,def,"-3123.77646E+177814265","973284435.E+383256112","9.73284435E+383256120","-9.73284435E+383256120","-3.04032301E+561070389","-3.20952062E-205441853","0","-3.12377646E+177814268","");
+  mathtest(312,def,"-850.123915E+662955309","6774849.81E-846576865","-8.50123915E+662955311","-8.50123915E+662955311","-5.75946184E-183621547","","","","");
+  mathtest(313,def,"-23349.7724","2921.35355","-20428.4189","-26271.1260","-68212940.5","-7.99279238","-7","-2900.29755","-5.6705546E+12759");
+  mathtest(314,def,"18886653.3","568707476.","587594129","-549820823","1.07409809E+16","0.0332097855","0","18886653.3","");
+  mathtest(315,def,"-90552818.0","-542.03563E-986606878","-90552818.0","-90552818.0","4.90828538E-986606868","1.67060638E+986606883","","","-1.64244241E-40");
+  mathtest(316,def,"41501126.1E+791838765","-69.6651675E+204268348","4.15011261E+791838772","4.15011261E+791838772","-2.89118290E+996107122","-5.95722763E+587570422","","","");
+  mathtest(317,def,"76783193.3E-271488154","3765.01829E-520346003","7.67831933E-271488147","7.67831933E-271488147","2.89090127E-791834146","2.03938434E+248857853","","","");
+  mathtest(318,def,"4192.9928","987822007E-146560989","4192.99280","4192.99280","4.14193056E-146560977","4.24468454E+146560983","","","1.67973653E+36");
+  mathtest(319,def,"-891845.629","48277955.","47386109.4","-49169800.6","-4.30564831E+13","-0.0184731443","0","-891845.629","-6.32964147E+287267817");
+  mathtest(320,def,"334.901176","-7609296.55E+447340228","-7.60929655E+447340234","7.60929655E+447340234","-2.54836236E+447340237","-4.40121073E-447340233","0","334.901176","6.31926575E-21");
+  mathtest(321,def,"4.49868636","-341880896E-447251873","4.49868636","4.49868636","-1.53801492E-447251864","-1.31586363E+447251865","","","0.010983553");
+  mathtest(322,def,"807615.58","-314286480","-313478865","315094096","-2.53822658E+14","-0.00256967968","0","807615.58","");
+  mathtest(323,def,"-37.7457954","53277.8129E-859225538","-37.7457954","-37.7457954","-2.01101343E-859225532","-7.08471188E+859225534","","","-76620134.1");
+  mathtest(324,def,"-28671081.","98.8819623","-28670982.1","-28671179.9","-2.83505275E+9","-289952.589","-289952","-58.2671904","-1.93625566E+738");
+  mathtest(325,def,"-89752.2106E-469496896","99.9879961","99.9879961","-99.9879961","-8.97414368E-469496890","-8.97629857E-469496894","0","-8.97522106E-469496892","");
+  mathtest(326,def,"-497983567E-13538052","39.4578742","39.4578742","-39.4578742","-1.96493729E-13538042","-1.26206385E-13538045","0","-4.97983567E-13538044","-1.55376543E-527983689");
+  mathtest(327,def,"845739221E-654202565","-33313.1551","-33313.1551","33313.1551","-2.81742418E-654202552","-2.53875449E-654202561","0","8.45739221E-654202557","");
+  mathtest(328,def,"742.332067E+537827843","-4532.70023E-855387414","7.42332067E+537827845","7.42332067E+537827845","-3.36476873E-317559565","","","","");
+  mathtest(329,def,"-893.48654","670389960","670389067","-670390853","-5.98984406E+11","-0.00000133278628","0","-893.48654","");
+  mathtest(330,def,"1.37697162","-915.737474E-351578724","1.37697162","1.37697162","-1.26094451E-351578721","-1.50367508E+351578721","","","0.0561920784");
+  mathtest(331,def,"-65.2839808E+550288403","-121389.306","-6.52839808E+550288404","-6.52839808E+550288404","7.92477712E+550288409","5.37806689E+550288399","","","");
+  mathtest(332,def,"-30346603.E+346067390","792661.544","-3.03466030E+346067397","-3.03466030E+346067397","-2.40545852E+346067403","-3.82844396E+346067391","","","");
+  mathtest(333,def,"-61170.7065","-453731131.","-453792302","453669960","2.77550538E+13","0.000134817081","0","-61170.7065","");
+  mathtest(334,def,"6569.51133","13.8706351E+399434914","1.38706351E+399434915","-1.38706351E+399434915","9.11232944E+399434918","4.73627291E-399434912","0","6569.51133","6569.51133");
+  mathtest(335,def,"300703925.","-3156736.8","297547188","303860662","-9.49243146E+14","-95.2578387","-95","813929.0","4.18609114E-26763256");
+  mathtest(336,def,"192138216E+353011592","-473.080633","1.92138216E+353011600","1.92138216E+353011600","-9.08968688E+353011602","-4.06142637E+353011597","","","");
+  mathtest(337,def,"8607.64794","-34740.3367","-26132.6888","43347.9846","-299032588","-0.247770999","0","8607.64794","1.29604519E-136698");
+  mathtest(338,def,"-67913.8241","-93815.4229","-161729.247","25901.5988","6.37136413E+9","0.723908948","0","-67913.8241","-6.96355203E-453311");
+  mathtest(339,def,"34.5559455","-998799398.","-998799364","998799433","-3.45144576E+10","-3.45974833E-8","0","34.5559455","");
+  mathtest(340,def,"387995.328","990199543.E-124623607","387995.328","387995.328","3.84192796E-124623593","3.91835495E+124623603","","","7.73152138E+55");
+  mathtest(341,def,"-471.09166E-83521919","-441222368","-441222368","441222368","2.07856178E-83521908","1.06769669E-83521925","0","-4.7109166E-83521917","");
+  mathtest(342,def,"-97834.3858","70779789.8E+502166065","7.07797898E+502166072","-7.07797898E+502166072","-6.92469726E+502166077","-1.38223617E-502166068","0","-97834.3858","-8.57907886E+34");
+  mathtest(343,def,"7732331.06","-952719.482E+115325505","-9.52719482E+115325510","9.52719482E+115325510","-7.36674244E+115325517","-8.11606271E-115325505","0","7732331.06","1.30886724E-69");
+  mathtest(344,def,"23.2745547","2.23194245E-221062592","23.2745547","23.2745547","5.19474666E-221062591","1.04279368E+221062593","","","541.704896");
+  mathtest(345,def,"671.083363E-218324205","-787150031","-787150031","787150031","-5.28243290E-218324194","-8.52548227E-218324212","0","6.71083363E-218324203","");
+  mathtest(346,def,"365167.80","-80263.6516","284904.148","445431.452","-2.93097011E+10","-4.54960362","-4","44113.1936","1.27052227E-446468");
+  mathtest(347,def,"-1.43297604E-65129780","56.598733E-135581942","-1.43297604E-65129780","-1.43297604E-65129780","-8.11046283E-200711721","-2.53181646E+70452160","","","8.65831881E-390778680");
+  mathtest(348,def,"416998859.","260.220323E-349285593","416998859","416998859","1.08511578E-349285582","1.60248383E+349285599","","","7.25111178E+25");
+  mathtest(349,def,"7267.17611E+862630607","4021.56861","7.26717611E+862630610","7.26717611E+862630610","2.92254473E+862630614","1.80705014E+862630607","","","");
+  mathtest(350,def,"12.2142434E+593908740","5.27236571E-396050748","1.22142434E+593908741","1.22142434E+593908741","6.43979581E+197857993","2.3166533E+989959488","","","");
+  mathtest(351,def,"-28.591932","-1.79153238E-817064576","-28.5919320","-28.5919320","5.12233720E-817064575","1.59594838E+817064577","","","0.00122324372");
+  mathtest(352,def,"590.849666","753424.306E+277232744","7.53424306E+277232749","-7.53424306E+277232749","4.45160500E+277232752","7.84219014E-277232748","0","590.849666","1.48530607E+22");
+  mathtest(353,def,"1.7270628","-1325026.67","-1325024.94","1325028.40","-2288404.27","-0.00000130341739","0","1.7270628","2.09260036E-314440");
+  mathtest(354,def,"33402118.","-5534.83745","33396583.2","33407652.8","-1.84875294E+11","-6034.8869","-6034","4908.82670","8.14473913E-41645");
+  mathtest(355,def,"-439842.506","-775110.807","-1214953.31","335268.301","3.40926680E+11","0.567457584","0","-439842.506","-1.84678472E-4374182");
+  mathtest(356,def,"-248664.779","-440890.44E+666433944","-4.40890440E+666433949","4.40890440E+666433949","1.09633924E+666433955","5.64005831E-666433945","0","-248664.779","2.61542877E-22");
+  mathtest(357,def,"-14161.9142","8306.49493","-5855.4193","-22468.4091","-117635869","-1.70492059","-1","-5855.41927","1.65573372E+34479");
+  mathtest(358,def,"-6417227.13","16679.8842","-6400547.25","-6433907.01","-1.07038605E+11","-384.728518","-384","-12151.5972","3.58767978E+113546");
+  mathtest(359,def,"514825024.","-25.0446345E-103809457","514825024","514825024","-1.28936046E-103809447","-2.05563002E+103809464","","","7.32860062E-27");
+  mathtest(360,def,"525948196","219450390","745398586","306497806","1.15419537E+17","2.39666102","2","87047416","");
+  mathtest(361,def,"-638509.181","45580189.0E+269212559","4.55801890E+269212566","-4.55801890E+269212566","-2.91033691E+269212572","-1.40084803E-269212561","0","-638509.181","-1.06129405E+29");
+  mathtest(362,def,"330590422","74.359928E+535377965","7.43599280E+535377966","-7.43599280E+535377966","2.45826800E+535377975","4.44581418E-535377959","0","330590422","4.31550742E+59");
+  mathtest(363,def,"-3.48593871E-940579904","-20265.9640E-322988987","-2.02659640E-322988983","2.02659640E-322988983","","1.72009519E-617590921","0","-3.48593871E-940579904","");
+  mathtest(364,def,"-328103480.","-721.949371E-923938665","-328103480","-328103480","2.36874101E-923938654","4.54468822E+923938670","","","-2.4430038E-60");
+  mathtest(365,def,"-1857.01448","19081578.1","19079721.1","-19083435.1","-3.54347668E+10","-0.0000973197537","0","-1857.01448","8.44397087E+62374153");
+  mathtest(366,def,"347.28720E+145930771","-62821.9906E-676564106","3.47287200E+145930773","3.47287200E+145930773","-2.18172732E-530633328","-5.52811518E+822494874","","","5.69990135E-875584642");
+  mathtest(367,def,"-643.211399E+441807003","-50733419.2","-6.43211399E+441807005","-6.43211399E+441807005","3.26323135E+441807013","1.26782584E+441806998","","","");
+  mathtest(368,def,"-53991661.4E-843339554","20718.7346","20718.7346","-20718.7346","-1.11863890E-843339542","-2.60593431E-843339551","0","-5.39916614E-843339547","");
+  mathtest(369,def,"-900181424","-105763982.","-1.00594541E+9","-794417442","9.52067719E+16","8.51122856","8","-54069568","1.32627061E-947045602");
+  mathtest(370,def,"94218.7462E+563233951","19262.6382E+765263890","1.92626382E+765263894","-1.92626382E+765263894","","4.89126906E-202029939","0","9.42187462E+563233955","");
+  mathtest(371,def,"28549.271E+921331828","-2150590.40","2.85492710E+921331832","2.85492710E+921331832","-6.13977881E+921331838","-1.32750853E+921331826","","","");
+  mathtest(372,def,"810.7080E+779625763","5957.94044","8.10708000E+779625765","8.10708000E+779625765","4.83014998E+779625769","1.36071854E+779625762","","","");
+  mathtest(373,def,"-23.7357549E+77116908","351.100649E+864348022","3.51100649E+864348024","-3.51100649E+864348024","-8.33363895E+941464933","-6.7603848E-787231116","0","-2.37357549E+77116909","3.17403853E+308467637");
+  mathtest(374,def,"40216102.2E+292724544","661.025962","4.02161022E+292724551","4.02161022E+292724551","2.65838876E+292724554","6.08389148E+292724548","","","");
+  mathtest(375,def,"22785024.3E+783719168","399.505989E+137478666","2.27850243E+783719175","2.27850243E+783719175","9.10275367E+921197843","5.70329981E+646240506","","","");
+  mathtest(376,def,"515.591819E+821371364","-692137914.E-149498690","5.15591819E+821371366","5.15591819E+821371366","-3.56860646E+671872685","-7.44926421E+970870047","","","");
+  mathtest(377,def,"-536883072E+477911251","624996.301","-5.36883072E+477911259","-5.36883072E+477911259","-3.35549934E+477911265","-8.59017999E+477911253","","","");
+  mathtest(378,def,"-399492.914E-334369192","5202119.87E+442442258","5.20211987E+442442264","-5.20211987E+442442264","-2.07821003E+108073078","-7.67942539E-776811452","0","-3.99492914E-334369187","");
+  mathtest(379,def,"762.071184","9851631.37","9852393.44","-9850869.30","7.50764438E+9","0.0000773548213","0","762.071184","4.02198436E+28392356");
+  mathtest(380,def,"5626.12471","72989818.3","72995444.4","-72984192.2","4.10649820E+11","0.0000770809524","0","5626.12471","1.79814757E+273727098");
+  mathtest(381,def,"-47207260.1","-2073.3152","-47209333.4","-47205186.8","9.78755299E+10","22768.9741","22768","-2019.6264","-6.02238319E-15909");
+  mathtest(382,def,"207.740860","-51.0390090","156.701851","258.779869","-10602.8876","-4.07023694","-4","3.5848240","6.40297515E-119");
+  mathtest(383,def,"-572.812464E-745934021","-182805872.E+604508681","-1.82805872E+604508689","1.82805872E+604508689","1.04713482E-141425329","","0","-5.72812464E-745934019","");
+  mathtest(384,def,"-6418504E+3531407","8459416.1","-6.41850400E+3531413","-6.41850400E+3531413","-5.42967961E+3531420","-7.58740784E+3531406","","","");
+  mathtest(385,def,"280689.531","-128212543","-127931854","128493233","-3.59879186E+13","-0.00218925173","0","280689.531","1.42173809E-698530938");
+  mathtest(386,def,"15.803551E-783422793","239108038E-489186308","2.39108038E-489186300","-2.39108038E-489186300","","6.60937672E-294236493","0","1.5803551E-783422792","");
+  mathtest(387,def,"26.515922","-9418242.96E-105481628","26.5159220","26.5159220","-2.49733396E-105481620","-2.81537885E+105481622","","","1.54326108E-13");
+  mathtest(388,def,"-88.1094557","-54029934.1","-54030022.2","54029846.0","4.76054809E+9","0.0000016307526","0","-88.1094557","5.05289826E-105089439");
+  mathtest(389,def,"6770.68602E-498420397","-6.11248908E-729616908","6.77068602E-498420394","6.77068602E-498420394","","-1.10768067E+231196514","","","");
+  mathtest(390,def,"-892973818.E-781904441","555201299.","555201299","-555201299","-4.95780224E-781904424","-1.60837847E-781904441","0","-8.92973818E-781904433","");
+  mathtest(391,def,"670175802E+135430680","27355195.4","6.70175802E+135430688","6.70175802E+135430688","1.83327900E+135430696","2.44990318E+135430681","","","");
+  mathtest(392,def,"-440950.26","205.477469E-677345561","-440950.260","-440950.260","-9.06053434E-677345554","-2.14597864E+677345564","","","1.94437132E+11");
+  mathtest(393,def,"-8.2335779","573665010E+742722075","5.73665010E+742722083","-5.73665010E+742722083","-4.72331555E+742722084","-1.43525886E-742722083","0","-8.2335779","311552.753");
+  mathtest(394,def,"452943.863","7022.23629","459966.099","445921.627","3.18067883E+9","64.5013703","64","3520.74044","5.54158976E+39716");
+  mathtest(395,def,"62874.1079","-52719654.1","-52656780.0","52782528.2","-3.31470122E+12","-0.0011926123","0","62874.1079","1.18819936E-252973775");
+  mathtest(396,def,"-7428.41741E+609772037","-46024819.3","-7.42841741E+609772040","-7.42841741E+609772040","3.41891569E+609772048","1.61400251E+609772033","","","");
+  mathtest(397,def,"2.27959297","41937.019","41939.2986","-41934.7394","95599.3337","0.0000543575348","0","2.27959297","2.89712423E+15007");
+  mathtest(398,def,"508692408E-671967782","8491989.20","8491989.20","-8491989.20","4.31981043E-671967767","5.99026207E-671967781","0","5.08692408E-671967774","");
+  mathtest(399,def,"940.533705E-379310421","-4.01176961E+464620037","-4.01176961E+464620037","4.01176961E+464620037","-3.77320453E+85309619","-2.34443599E-843930456","0","9.40533705E-379310419","");
+  mathtest(400,def,"97.0649652","-92.4485649E-151989098","97.0649652","97.0649652","-8.97351673E-151989095","-1.0499348E+151989098","","","1.30748728E-18");
+  mathtest(401,def,"297544.536E+360279473","8.80275007","2.97544536E+360279478","2.97544536E+360279478","2.61921019E+360279479","3.38013159E+360279477","","","");
+  mathtest(402,def,"-28861028.","82818.820E+138368758","8.28188200E+138368762","-8.28188200E+138368762","-2.39023628E+138368770","-3.48483932E-138368756","0","-28861028","4.81387013E+59");
+  mathtest(403,def,"36.2496238E+68828039","49243.00","3.62496238E+68828040","3.62496238E+68828040","1.78504022E+68828045","7.36137599E+68828035","","","");
+  mathtest(404,def,"22.447828E-476014683","-56067.5520","-56067.5520","56067.5520","-1.25859476E-476014677","-4.00371109E-476014687","0","2.2447828E-476014682","");
+  mathtest(405,def,"282688.791E+75011952","5.99789051","2.82688791E+75011957","2.82688791E+75011957","1.69553642E+75011958","4.7131369E+75011956","","","5.10330507E+450071744");
+  mathtest(406,def,"-981.860310E-737387002","-994046289","-994046289","994046289","9.76014597E-737386991","9.87741035E-737387009","0","-9.81860310E-737387000","");
+  mathtest(407,def,"-702.91210","-6444903.55","-6445606.46","6444200.64","4.53020069E+9","0.000109064797","0","-702.91210","1.70866703E-18348004");
+  mathtest(408,def,"972456720E-17536823","16371.2590","16371.2590","-16371.2590","1.59203408E-17536810","5.94002404E-17536819","0","9.72456720E-17536815","");
+  mathtest(409,def,"71471.2045","-74303278.4","-74231807.2","74374749.6","-5.31054481E+12","-0.00096188494","0","71471.2045","2.14535374E-360677853");
+  mathtest(410,def,"643.103951E+439708441","788251925.","6.43103951E+439708443","6.43103951E+439708443","5.06927927E+439708452","8.15860933E+439708434","","","");
+  mathtest(411,def,"4.30838663","-7.43110827","-3.12272164","11.7394949","-32.0160875","-0.579777131","0","4.30838663","0.0000362908645");
+  mathtest(412,def,"823.678025","-513.581840E-324453141","823.678025","823.678025","-4.23026076E-324453136","-1.60379118E+324453141","","","2.63762228E-15");
+  mathtest(413,def,"4461.81162","3.22081680","4465.03244","4458.59080","14370.6778","1385.30438","1385","0.98035200","8.8824688E+10");
+  mathtest(414,def,"-4458527.10","-99072605","-103531132","94614077.9","4.41717894E+14","0.0450026231","0","-4458527.10","-6.23928099E-658752715");
+  mathtest(415,def,"-577964618","487424368.","-90540250","-1.06538899E+9","-2.81714039E+17","-1.18575241","-1","-90540250","");
+  mathtest(416,def,"-867.036184","-57.1768608","-924.213045","-809.859323","49574.4072","15.1641096","15","-9.3832720","-3.40312837E-168");
+  mathtest(417,def,"771871921E-330504770","5.34285236","5.34285236","-5.34285236","4.12399771E-330504761","1.44468136E-330504762","0","7.71871921E-330504762","");
+  mathtest(418,def,"-338683.062E-728777518","166441931","166441931","-166441931","-5.63710628E-728777505","-2.03484218E-728777521","0","-3.38683062E-728777513","");
+  mathtest(419,def,"-512568743","-416376887.E-965945295","-512568743","-512568743","2.13421778E-965945278","1.23102112E+965945295","","","1.44874358E-35");
+  mathtest(420,def,"7447181.99","5318438.52","12765620.5","2128743.47","3.96073796E+13","1.40025723","1","2128743.47","1.21634782E+36548270");
+  mathtest(421,def,"54789.8207","93165435.2","93220225.0","-93110645.4","5.10451749E+12","0.000588091716","0","54789.8207","3.80769825E+441483035");
+  mathtest(422,def,"41488.5960","146.797094","41635.3931","41341.7989","6090405.33","282.625459","282","91.815492","6.84738153E+678");
+  mathtest(423,def,"785741.663E+56754529","-461.531732","7.85741663E+56754534","7.85741663E+56754534","-3.62644711E+56754537","-1.70246509E+56754532","","","");
+  mathtest(424,def,"-4.95436786","-3132.4233","-3137.37767","3127.46893","15519.1773","0.0015816406","0","-4.95436786","1.98062422E-2177");
+  mathtest(425,def,"77321.8478E+404626874","82.4797688","7.73218478E+404626878","7.73218478E+404626878","6.37748813E+404626880","9.3746441E+404626876","","","");
+  mathtest(426,def,"-7.99307725","-29153.7273","-29161.7204","29145.7342","233027.994","0.000274169994","0","-7.99307725","1.88688028E-26318");
+  mathtest(427,def,"-61.6337401E+474999517","5254.87092","-6.16337401E+474999518","-6.16337401E+474999518","-3.23877349E+474999522","-1.1728878E+474999515","","","");
+  mathtest(428,def,"-16.4043088","35.0064812","18.6021724","-51.4107900","-574.257128","-0.468607762","0","-16.4043088","-3.33831843E+42");
+  mathtest(429,def,"-8.41156520","-56508958.9","-56508967.3","56508950.5","475328792","1.48853657E-7","0","-8.41156520","-8.86365458E-52263827");
+  mathtest(430,def,"-360165.79E+503559835","-196688.515","-3.60165790E+503559840","-3.60165790E+503559840","7.08404744E+503559845","1.83114805E+503559835","","","");
+  mathtest(431,def,"-653236480.E+565648495","-930.445274","-6.53236480E+565648503","-6.53236480E+565648503","6.07800796E+565648506","7.02068674E+565648500","","","");
+  mathtest(432,def,"-3.73342903","855.029289","851.295860","-858.762718","-3192.19117","-0.00436643408","0","-3.73342903","-1.41988961E+489");
+  mathtest(433,def,"-5.14890532E+562048011","10847127.8E-390918910","-5.14890532E+562048011","-5.14890532E+562048011","-5.58508340E+171129108","-4.74679142E+952966914","","","-5.14890532E+562048011");
+  mathtest(434,def,"653311907","-810.036965E+744537823","-8.10036965E+744537825","8.10036965E+744537825","-5.29206794E+744537834","-8.06521104E-744537818","0","653311907","3.01325171E-71");
+  mathtest(435,def,"-1.31557907","98.9139300E-579281802","-1.31557907","-1.31557907","-1.30129096E-579281800","-1.33002406E+579281800","","","15.529932");
+  mathtest(436,def,"-875192389","-72071565.6","-947263955","-803120823","6.30764857E+16","12.1433797","12","-10333601.8","1.25564408E-644471405");
+  mathtest(437,def,"-72838078.8","-391.398423","-72838470.2","-72837687.4","2.85087092E+10","186097.017","186097","-6.474969","-6.574057E-3075");
+  mathtest(438,def,"29186560.9","-79.7419988","29186481.2","29186640.6","-2.32739470E+9","-366012.407","-366012","32.4352144","6.10050869E-598");
+  mathtest(439,def,"-329801660E-730249465","-6489.9256","-6489.92560","6489.92560","2.14038824E-730249453","5.08174793E-730249461","0","-3.29801660E-730249457","");
+  mathtest(440,def,"91.8429117E+103164883","7131455.16","9.18429117E+103164884","9.18429117E+103164884","6.54973607E+103164891","1.28785654E+103164878","","","");
+  mathtest(441,def,"3943866.38E+150855113","-31927007.3","3.94386638E+150855119","3.94386638E+150855119","-1.25915851E+150855127","-1.23527594E+150855112","","","");
+  mathtest(442,def,"-7002.0468E-795962156","-5937891.05","-5937891.05","5937891.05","4.15773910E-795962146","1.17921443E-795962159","0","-7.0020468E-795962153","");
+  mathtest(443,def,"696504605.","54506.4617","696559111","696450099","3.79640016E+13","12778.386","12778","21037.3974","2.6008532E+481992");
+  mathtest(444,def,"-5115.76467","690.960979E+815126701","6.90960979E+815126703","-6.90960979E+815126703","-3.53479376E+815126707","-7.4038402E-815126701","0","-5115.76467","-9.17009655E+25");
+  mathtest(445,def,"-261.279392","-613.079357","-874.358749","351.799965","160185.002","0.426175484","0","-261.279392","-2.06318841E-1482");
+  mathtest(446,def,"-591407763","-80145822.8","-671553586","-511261940","4.73988618E+16","7.37914644","7","-30387003.4","-2.79334522E-703030105");
+  mathtest(447,def,"615630407","-69.4661869","615630338","615630476","-4.27654969E+10","-8862303.15","-8862303","10.4375693","3.44283102E-607");
+  mathtest(448,def,"1078757.50","27402569.0E-713742082","1078757.50","1078757.50","2.95607268E-713742069","3.93670207E+713742080","","","1.25536924E+18");
+  mathtest(449,def,"-4865.60358E-401116515","66952.5315","66952.5315","-66952.5315","-3.25764477E-401116507","-7.26724363E-401116517","0","-4.86560358E-401116512","");
+  mathtest(450,def,"-87805.3921E-934896690","-1875.14745","-1875.14745","1875.14745","1.64648057E-934896682","4.68258601E-934896689","0","-8.78053921E-934896686","");
+  mathtest(451,def,"-232540609.E+602702520","68.0834223","-2.32540609E+602702528","-2.32540609E+602702528","-1.58321605E+602702530","-3.41552468E+602702526","","","");
+  mathtest(452,def,"-320610803.","-863871235.","-1.18448204E+9","543260432","2.76966450E+17","0.37113263","0","-320610803","");
+  mathtest(453,def,"-303956364E+278139979","229537.920E+479603725","2.29537920E+479603730","-2.29537920E+479603730","-6.97695116E+757743717","-1.3242098E-201463743","0","-3.03956364E+278139987","9.23894712E+556279974");
+  mathtest(454,def,"-439.747348","74.9494457E-353117582","-439.747348","-439.747348","-3.29588200E-353117578","-5.86725284E+353117582","","","-3.17996693E+18");
+  mathtest(455,def,"-89702231.9","1.28993993","-89702230.6","-89702233.2","-115710491","-69539852.1","-69539852","-0.07890964","-89702231.9");
+  mathtest(456,def,"-5856939.14","-6743375.34","-12600314.5","886436.20","3.94955390E+13","0.868547107","0","-5856939.14","-3.29213248E-45636942");
+  mathtest(457,def,"733317.669E+100381349","-13832.6792E+174055607","-1.38326792E+174055611","1.38326792E+174055611","-1.01437481E+274436966","-5.30134227E-73674257","0","7.33317669E+100381354","1.36366549E-100381355");
+  mathtest(458,def,"87.4798787E-80124704","108497.32","108497.320","-108497.320","9.49133239E-80124698","8.06286079E-80124708","0","8.74798787E-80124703","");
+  mathtest(459,def,"-694562052","310681.319E+549445264","3.10681319E+549445269","-3.10681319E+549445269","-2.15787454E+549445278","-2.23560932E-549445261","0","-694562052","-3.35068155E+26");
+  mathtest(460,def,"-9744135.85","1797016.04","-7947119.81","-11541151.9","-1.75103684E+13","-5.42239782","-5","-759055.65","3.83848006E+12558883");
+  mathtest(461,def,"3625.87308","-50.2208536E+658627487","-5.02208536E+658627488","5.02208536E+658627488","-1.82094441E+658627492","-7.21985554E-658627486","0","3625.87308","1.5956477E-18");
+  mathtest(462,def,"365347.52","-3655414.47","-3290066.95","4020761.99","-1.33549661E+12","-0.099946948","0","365347.52","1.02663257E-20333994");
+  mathtest(463,def,"-19706333.6E-816923050","-383858032.","-383858032","383858032","7.56443443E-816923035","5.1337557E-816923052","0","-1.97063336E-816923043","");
+  mathtest(464,def,"-86346.2616","-98.8063785","-86445.0680","-86247.4552","8531561.41","873.893598","873","-88.2931695","-2.05064086E-489");
+  mathtest(465,def,"-445588.160E-496592215","328.822976","328.822976","-328.822976","-1.46519625E-496592207","-1.35510044E-496592212","0","-4.45588160E-496592210","");
+  mathtest(466,def,"-9709213.71","-34.6690137","-9709248.38","-9709179.04","336608863","280054.512","280054","-17.7472602","-2.80903974E-245");
+  mathtest(467,def,"742395536.","-43533.6889","742352002","742439070","-3.23192163E+13","-17053.3569","-17053","15539.1883","5.7622734E-386175");
+  mathtest(468,def,"-878849193.","-5842982.47E-972537342","-878849193","-878849193","5.13510043E-972537327","1.50411061E+972537344","","","2.17027042E-54");
+  mathtest(469,def,"-78014142.1","-624658.522","-78638800.6","-77389483.6","4.87321987E+13","124.890863","124","-556485.372","-7.86063865E-4929918");
+  mathtest(470,def,"857039.371","454.379672","857493.751","856584.991","389421268","1886.17454","1886","79.309608","3.82253101E+2693");
+  mathtest(471,def,"166534010.","-173.012236","166533837","166534183","-2.88124214E+10","-962556.255","-962556","44.164784","4.78620664E-1423");
+  mathtest(472,def,"-810.879063","43776.610","42965.7309","-44587.4891","-35497536.5","-0.0185231123","0","-810.879063","-2.34758691E+127345");
+  mathtest(473,def,"-327.127935","93458944","93458616.9","-93459271.1","-3.05730314E+10","-0.00000350023145","0","-327.127935","2.29323021E+235022854");
+  mathtest(474,def,"539295218.","-9587941.10E-309643098","539295218","539295218","-5.17073079E-309643083","-5.62472394E+309643099","","","4.80545269E-88");
+  mathtest(475,def,"-3862702.65","879616.733","-2983085.92","-4742319.38","-3.39769789E+12","-4.3913474","-4","-344235.718","-3.50650167E+5793941");
+  mathtest(476,def,"-8.25290500","992.091584E+256070257","9.92091584E+256070259","-9.92091584E+256070259","-8.18763759E+256070260","-8.31869268E-256070260","0","-8.25290500","1.46577888E+9");
+  mathtest(477,def,"546875205.","447.52857E+557357101","4.47528570E+557357103","-4.47528570E+557357103","2.44742278E+557357112","1.22198948E-557357095","0","546875205","8.94443542E+34");
+  mathtest(478,def,"177623437","-7779116.14","169844321","185402553","-1.38175335E+15","-22.83337","-22","6482881.92","2.90085309E-64173820");
+  mathtest(479,def,"377204735.","13768.1401","377218503","377190967","5.19340764E+12","27396.9274","27396","12768.8204","2.06065297E+118082");
+  mathtest(480,def,"-2435.49239","-11732.0640E-23331504","-2435.49239","-2435.49239","2.85733526E-23331497","2.07592832E+23331503","","","-0.00041059459");
+  mathtest(481,def,"-6128465.14E-137123294","-5742264.27","-5742264.27","5742264.27","3.51912664E-137123281","1.06725585E-137123294","0","-6.12846514E-137123288","");
+  mathtest(482,def,"-2898065.44","-5.11638105","-2898070.56","-2898060.32","14827607.1","566428.773","566428","-3.95461060","-4.89169151E-33");
+  mathtest(483,def,"1851395.31E+594383160","-550301.475","1.85139531E+594383166","1.85139531E+594383166","-1.01882557E+594383172","-3.36432918E+594383160","","","");
+  mathtest(484,def,"536412589.E+379583977","899.601161","5.36412589E+379583985","5.36412589E+379583985","4.82557388E+379583988","5.96278231E+379583982","","","");
+  mathtest(485,def,"185.85297","867419480.","867419666","-867419294","1.61212487E+11","2.14259622E-7","0","185.85297","");
+  mathtest(486,def,"-5.26631053","-3815941.35E+183291763","-3.81594135E+183291769","3.81594135E+183291769","2.00959321E+183291770","1.38008162E-183291769","0","-5.26631053","0.00130009218");
+  mathtest(487,def,"-8.11587021E-245942806","4553.06753E+943412048","4.55306753E+943412051","-4.55306753E+943412051","-3.69521051E+697469246","","0","-8.11587021E-245942806","");
+  mathtest(488,def,"-405765.352","854963231","854557466","-855368996","-3.46914456E+14","-0.000474599769","0","-405765.352","");
+  mathtest(489,def,"-159.609757","-43356.7567","-43516.3665","43197.1470","6920161.40","0.00368131219","0","-159.609757","-8.95397849E-95519");
+  mathtest(490,def,"-564240.241E-501316672","-557.781977","-557.781977","557.781977","3.14723037E-501316664","1.01157847E-501316669","0","-5.64240241E-501316667","");
+  mathtest(491,def,"318847.270","582107878.E+399633412","5.82107878E+399633420","-5.82107878E+399633420","1.85603508E+399633426","5.47746014E-399633416","0","318847.270","1.0507423E+33");
+  mathtest(492,def,"-4426.59663","95.1096765","-4331.48695","-4521.70631","-421012.173","-46.5420217","-46","-51.5515110","-2.38037379E+346");
+  mathtest(493,def,"6037.28310","578264.105","584301.388","-572226.822","3.49114411E+9","0.010440356","0","6037.28310","3.57279483E+2186324");
+  mathtest(494,def,"-66.9556692","-53.8519404","-120.807610","-13.1037288","3605.69271","1.24332881","1","-13.1037288","2.55554086E-99");
+  mathtest(495,def,"-92486.0222","-59935.8544","-152421.877","-32550.1678","5.54322876E+9","1.5430834","1","-32550.1678","1.83152656E-297647");
+  mathtest(496,def,"852136219.E+917787351","9246221.91","8.52136219E+917787359","8.52136219E+917787359","7.87904058E+917787366","9.21604767E+917787352","","","");
+  mathtest(497,def,"-2120096.16E-269253718","9437.00514","9437.00514","-9437.00514","-2.00073584E-269253708","-2.24657731E-269253716","0","-2.12009616E-269253712","");
+  mathtest(498,def,"-524653.169E-865784226","228054.698","228054.698","-228054.698","-1.19649620E-865784215","-2.30055848E-865784226","0","-5.24653169E-865784221","");
+  mathtest(499,def,"-288193133","-312268737.","-600461870","24075604","8.99937057E+16","0.922901011","0","-288193133","");
+  mathtest(500,def,"-373484759E-113589964","844101958E-852538240","-3.73484759E-113589956","-3.73484759E-113589956","-3.15259216E-966128187","-4.42464036E+738948275","","","3.78602147E-908719644");
+  
+  summary("Arithmetic");
+  return;}
+
+ /* mathtest -- general arithmetic test routine
+    Arg1  is test number
+    Arg2  is MathContext
+    Arg3  is left hand side (LHS)
+    Arg4  is right hand side (RHS)
+    Arg5  is the expected result for add
+    Arg6  is the expected result for subtract
+    Arg7  is the expected result for multiply
+    Arg8  is the expected result for divide
+    Arg9  is the expected result for integerDivide
+    Arg10 is the expected result for remainder
+    Arg11 is the expected result for power
+ 
+  For power RHS, 0 is added to the number, any exponent is removed and
+  the number is then rounded to an integer, using format(rhs+0,,0)
+ 
+  If an error should result for an operation, the 'expected result' is
+  an empty string.
+  */
+ 
+ private void mathtest(int test,com.ibm.math.MathContext mc,java.lang.String slhs,java.lang.String srhs,java.lang.String add,java.lang.String sub,java.lang.String mul,java.lang.String div,java.lang.String idv,java.lang.String rem,java.lang.String pow){
+  com.ibm.math.BigDecimal lhs;
+  com.ibm.math.BigDecimal rhs;
+  java.lang.String res=null;
+  java.lang.String sn=null;
+  int e=0;
+  
+  
+  
+  lhs=new com.ibm.math.BigDecimal(slhs);
+  rhs=new com.ibm.math.BigDecimal(srhs);
+  
+  {try{
+   res=lhs.add(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $137){
+   res="";
+  }}
+  mathtestcheck(test,lhs,rhs,"add",res,add);
+  
+  {try{
+   res=lhs.subtract(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $138){
+   res="";
+  }}
+  mathtestcheck(test,lhs,rhs,"sub",res,sub);
+  
+  {try{
+   res=lhs.multiply(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $139){
+   res="";
+  }}
+  mathtestcheck(test,lhs,rhs,"mul",res,mul);
+  
+  {try{
+   res=lhs.divide(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $140){
+   res="";
+  }}
+  mathtestcheck(test,lhs,rhs,"div",res,div);
+  
+  {try{
+   res=lhs.divideInteger(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $141){
+   res="";
+  }}
+  mathtestcheck(test,lhs,rhs,"idv",res,idv);
+  
+  {try{
+   res=lhs.remainder(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $142){
+   res="";
+  }}
+  mathtestcheck(test,lhs,rhs,"rem",res,rem);
+  
+  {try{
+   // prepare an integer from the rhs
+   // in Rexx:
+   //   n=rhs+0
+   //   e=pos('E', n)
+   //   if e>0 then n=left(n,e-1)
+   //   n=format(n,,0)
+   
+   sn=rhs.plus(mc).toString();
+   e=sn.indexOf("E",0);
+   if (e>0) 
+    sn=sn.substring(0,e);
+   sn=(new com.ibm.math.BigDecimal(sn)).format(-1,0);
+   
+   res=lhs.pow(new com.ibm.math.BigDecimal(sn),mc).toString();
+  }
+  catch (java.lang.ArithmeticException $143){
+   res="";
+  }}
+  mathtestcheck(test,lhs,rhs,"pow",res,pow);
+  return;
+  }
+
+ /* mathtestcheck -- check for general mathtest error
+    Arg1  is test number
+    Arg2  is left hand side (LHS)
+    Arg3  is right hand side (RHS)
+    Arg4  is the operation
+    Arg5  is the actual result
+    Arg6  is the expected result
+    Show error message if a problem, otherwise return quietly
+    */
+ 
+ private void mathtestcheck(int test,com.ibm.math.BigDecimal lhs,com.ibm.math.BigDecimal rhs,java.lang.String op,java.lang.String got,java.lang.String want){
+  boolean flag;
+  java.lang.String testnum;
+  
+  flag=want.equals((java.lang.Object)got);
+  
+  if ((!flag)) 
+   say(">"+test+">"+" "+lhs.toString()+" "+op+" "+rhs.toString()+" "+"="+" "+want+" "+"[got"+" "+got+"]");
+  
+  testnum="gen"+right((new com.ibm.math.BigDecimal(test+1000)).toString(),3);
+  
+  (new com.ibm.math.DiagBigDecimal.Test(testnum)).ok=flag;
+  return;
+  }
+
+ 
+ /* ------------------------------------------------------------------ */
+ /* Support routines and minor classes follow                          */
+ /* ------------------------------------------------------------------ */
+ 
+ /* ----------------------------------------------------------------- */
+ /* Method called to summarise pending tests                          */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is section name */
+ 
+ private void summary(java.lang.String section){
+  int bad;
+  int count;
+  int i=0;
+  com.ibm.math.DiagBigDecimal.Test item=null;
+  bad=0;
+  count=Tests.size();
+  {int $144=count;i=0;i:for(;$144>0;$144--,i++){
+   item=(com.ibm.math.DiagBigDecimal.Test)(Tests.elementAt(i));
+   if ((!item.ok)) 
+    {
+     bad++;
+     say("Failed:"+" "+item.name);
+    }
+   }
+  }/*i*/
+  totalcount=totalcount+count;
+  Tests=new java.util.Vector(100); // reinitialize
+  if (bad==0) 
+   say("OK"+" "+left(section,14)+" "+right("["+count+" "+"tests]",12));
+  else 
+   throw new com.ibm.math.DiagBigDecimal.DiagException(section+" "+"[failed"+" "+bad+" "+"of"+" "+count+" "+"tests]",bad);
+  return;}
+
+ 
+ /* ----------------------------------------------------------------- */
+ /* right - Utility to do a 'right' on a Java String                  */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is string to right-justify */
+ /* Arg2 is desired length */
+ 
+ private static java.lang.String right(java.lang.String s,int len){
+  int slen;
+  slen=s.length();
+  if (slen==len) 
+   return s; // length just right
+  if (slen>len) 
+   return s.substring(slen-len); // truncate on left
+  // too short
+  return (new java.lang.String(new char[len-slen])).replace('\000',' ').concat(s);
+  }
+
+ /* ----------------------------------------------------------------- */
+ /* left - Utility to do a 'left' on a Java String                    */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is string to left-justify */
+ /* Arg2 is desired length */
+ 
+ private static java.lang.String left(java.lang.String s,int len){
+  int slen;
+  slen=s.length();
+  if (slen==len) 
+   return s; // length just right
+  if (slen>len) 
+   return s.substring(0,len); // truncate on right
+  // too short
+  return s.concat((new java.lang.String(new char[len-slen])).replace('\000',' '));
+  }
+
+ /* ----------------------------------------------------------------- */
+ /* say - Utility to do a display                                     */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is string to display, omitted if none */
+ /*         [null or omitted gives blank line] */
+ // this version doesn't heed continuation final character
+ 
+ private static void say(){
+  say((java.lang.String)null);return;
+  }
+ private static void say(java.lang.String s){
+  if (s==null) 
+   s="";
+  java.lang.System.out.println(s);
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ /* Scaffolding for stand-alone run                                   */
+ /* ----------------------------------------------------------------- */
+ /** Entry point for stand-alone run.  It constructs a
+  *  <code>DiagBigDecimal</code> object and then invokes its
+  *  {@link #diagrun(boolean)} method to run the test
+  *  suite.
+  *
+  * @param args The command line argument string array.
+  *   if the first word is '<code>continue</code>' then try and run
+  *   all tests, otherwise stop after the first failing test group.
+  */
+ 
+ public static void main(java.lang.String args[]){
+  boolean $continue;
+  com.ibm.math.DiagBigDecimal dbd;
+  int fails;
+  $continue=false;
+  if (args.length>0) 
+   $continue=args[0].equals("continue");
+  dbd=new com.ibm.math.DiagBigDecimal(); // make the runner
+  fails=dbd.diagrun($continue); // and run the tests
+  if (fails==0) 
+   {System.exit(0);return;}
+  {System.exit(1);return;}
+  }
+
+/* ------------------------------------------------------------------ */
+/* Test -- represents a test and its status                           */
+/* ------------------------------------------------------------------ */
+/* Copyright IBM Corporation 1998, 2000.  All rights reserved.        */
+/* Author: Mike Cowlishaw                                             */
+/* ------------------------------------------------------------------ */
+/* 1998.07.15 Initial version                                         */
+/* 2000.03.27 Change to javadoc comments                              */
+
+/**
+ * The <code>Test</code> class is used to record a specific test.
+ * When constructed, it notes the name of the test and adds the test
+ * to the list of tests held by the parent.
+ *
+ * Its <code>ok</flag> is assigned directly to record whether the
+ * test succeeded (1) or failed (0).
+ *
+ * @see     com.ibm.math.DiagBigDecimal
+ * @version 1.00 2000.03.27
+ * @author  Mike Cowlishaw
+ */
+ 
+ public class Test{
+  private final transient java.lang.String $0="DiagBigDecimal.nrx";
+  /* properties shared transient */
+ /** The name of the test. */
+  transient java.lang.String name;
+ /** Success flag; will be set to 1 (true) if the test succeeded, or 0
+  * (false) if the test failed.
+  */
+  transient boolean ok;
+
+ 
+ /**
+  * Constructs a new <code>Test</code> with a specified name.
+  *
+  * @param testname The <code>String</code> naming the test.
+  */
+  
+  public Test(java.lang.String testname){super();
+   name=testname; // save the name
+   DiagBigDecimal.this.Tests.addElement((java.lang.Object)this); // and add to parent's list
+   return;}
+  }
+
+ /* ------------------------------------------------------------------ */
+ /* DiagException                                                      */
+ /* ------------------------------------------------------------------ */
+ /* Copyright IBM Corporation 1996, 2000.  All rights reserved.        */
+ /* Author: Mike Cowlishaw                                             */
+ /* ------------------------------------------------------------------ */
+ /* 1996.05.27 Initial version in NetRexx (as DiagX)                   */
+ /* 1998.06.25 Copied from NetRexx test suite                          */
+ /* 1999.07.03 Add fail count                                          */
+ /* 2000.03.27 Change to javadoc comments                              */
+ 
+ /**
+  * The <code>DiagException</code> class is used to signal the failure
+  * of a test group.  It records the number of failures in the group.
+  *
+  * @see     com.ibm.math.DiagBigDecimal
+  * @version 1.00 2000.03.27
+  * @author  Mike Cowlishaw
+  */
+ 
+ public static class DiagException extends java.lang.RuntimeException{
+  private final transient java.lang.String $0="DiagBigDecimal.nrx";
+ 
+  /* properties shared transient */
+ /** the count of failed tests in the group which signalled this
+   * exception.
+   */
+  transient int failcount=0;
+ // number of tests which failed
+ 
+ /**
+  * Constructs a new <code>DiagException</code> with a message and
+  * failure count.  This is thrown when a group of tests fails.
+  *
+  * @param message The <code>String</code> message describing the group.
+  * @param fails   The <code>int</code> number of failed tests in the  group.
+  */
+  
+  public DiagException(java.lang.String message,int fails){
+   super(message);
+   failcount=fails;
+   return;}
+ }}
diff --git a/src/com/ibm/math/MathContext.java b/src/com/ibm/math/MathContext.java
new file mode 100755
index 0000000..b5a1d18
--- /dev/null
+++ b/src/com/ibm/math/MathContext.java
@@ -0,0 +1,582 @@
+/* Generated from 'MathContext.nrx' 8 Sep 2000 11:07:48 [v2.00] */
+/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
+package com.ibm.math;
+
+/* ------------------------------------------------------------------ */
+/* MathContext -- Math context settings                               */
+/* ------------------------------------------------------------------ */
+/* Copyright IBM Corporation, 1997, 2000.  All Rights Reserved.       */
+/*                                                                    */
+/*   The MathContext object encapsulates the settings used by the     */
+/*   BigDecimal class; it could also be used by other arithmetics.    */
+/* ------------------------------------------------------------------ */
+/* Notes:                                                             */
+/*                                                                    */
+/* 1. The properties are checked for validity on construction, so     */
+/*    the BigDecimal class may assume that they are correct.          */
+/* ------------------------------------------------------------------ */
+/* Author:    Mike Cowlishaw                                          */
+/* 1997.09.03 Initial version (edited from netrexx.lang.RexxSet)      */
+/* 1997.09.12 Add lostDigits property                                 */
+/* 1998.05.02 Make the class immutable and final; drop set methods    */
+/* 1998.06.05 Add Round (rounding modes) property                     */
+/* 1998.06.25 Rename from DecimalContext; allow digits=0              */
+/* 1998.10.12 change to com.ibm.math package                          */
+/* 1999.02.06 add javadoc comments                                    */
+/* 1999.03.05 simplify; changes from discussion with J. Bloch         */
+/* 1999.03.13 1.00 release to IBM Centre for Java Technology          */
+/* 1999.07.10 1.04 flag serialization unused                          */
+/* 2000.01.01 1.06 copyright update                                   */
+/* ------------------------------------------------------------------ */
+
+
+
+
+/**
+ * The <code>MathContext</code> immutable class encapsulates the
+ * settings understood by the operator methods of the {@link BigDecimal}
+ * class (and potentially other classes).  Operator methods are those
+ * that effect an operation on a number or a pair of numbers.
+ * <p>
+ * The settings, which are not base-dependent, comprise:
+ * <ol>
+ * <li><code>digits</code>:
+ * the number of digits (precision) to be used for an operation
+ * <li><code>form</code>:
+ * the form of any exponent that results from the operation
+ * <li><code>lostDigits</code>:
+ * whether checking for lost digits is enabled
+ * <li><code>roundingMode</code>:
+ * the algorithm to be used for rounding.
+ * </ol>
+ * <p>
+ * When provided, a <code>MathContext</code> object supplies the
+ * settings for an operation directly.
+ * <p>
+ * When <code>MathContext.DEFAULT</code> is provided for a
+ * <code>MathContext</code> parameter then the default settings are used
+ * (<code>9, SCIENTIFIC, false, ROUND_HALF_UP</code>).
+ * <p>
+ * In the <code>BigDecimal</code> class, all methods which accept a
+ * <code>MathContext</code> object defaults) also have a version of the
+ * method which does not accept a MathContext parameter.  These versions
+ * carry out unlimited precision fixed point arithmetic (as though the
+ * settings were (<code>0, PLAIN, false, ROUND_HALF_UP</code>).
+ * <p>
+ * The instance variables are shared with default access (so they are
+ * directly accessible to the <code>BigDecimal</code> class), but must
+ * never be changed.
+ * <p>
+ * The rounding mode constants have the same names and values as the
+ * constants of the same name in <code>java.math.BigDecimal</code>, to
+ * maintain compatibility with earlier versions of
+ * <code>BigDecimal</code>.
+ *
+ * @see     BigDecimal
+ * @version 1.08 2000.06.18
+ * @author  Mike Cowlishaw
+ */
+
+public final class MathContext implements java.io.Serializable{
+ private static final java.lang.String $0="MathContext.nrx";
+ 
+ /* ----- Properties ----- */
+ /* properties public constant */
+ /**
+  * Plain (fixed point) notation, without any exponent.
+  * Used as a setting to control the form of the result of a
+  * <code>BigDecimal</code> operation.
+  * A zero result in plain form may have a decimal part of one or
+  * more zeros.
+  *
+  * @see #ENGINEERING
+  * @see #SCIENTIFIC
+  */
+ public static final int PLAIN=0; // [no exponent]
+ 
+ /**
+  * Standard floating point notation (with scientific exponential
+  * format, where there is one digit before any decimal point).
+  * Used as a setting to control the form of the result of a
+  * <code>BigDecimal</code> operation.
+  * A zero result in plain form may have a decimal part of one or
+  * more zeros.
+  *
+  * @see #ENGINEERING
+  * @see #PLAIN
+  */
+ public static final int SCIENTIFIC=1; // 1 digit before .
+ 
+ /**
+  * Standard floating point notation (with engineering exponential
+  * format, where the power of ten is a multiple of 3).
+  * Used as a setting to control the form of the result of a
+  * <code>BigDecimal</code> operation.
+  * A zero result in plain form may have a decimal part of one or
+  * more zeros.
+  *
+  * @see #PLAIN
+  * @see #SCIENTIFIC
+  */
+ public static final int ENGINEERING=2; // 1-3 digits before .
+ 
+ // The rounding modes match the original BigDecimal class values
+ /**
+  * Rounding mode to round to a more positive number.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * If any of the discarded digits are non-zero then the result
+  * should be rounded towards the next more positive digit.
+  */
+ public static final int ROUND_CEILING=2;
+ 
+ /**
+  * Rounding mode to round towards zero.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * All discarded digits are ignored (truncated).  The result is
+  * neither incremented nor decremented.
+  */
+ public static final int ROUND_DOWN=1;
+ 
+ /**
+  * Rounding mode to round to a more negative number.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * If any of the discarded digits are non-zero then the result
+  * should be rounded towards the next more negative digit.
+  */
+ public static final int ROUND_FLOOR=3;
+ 
+ /**
+  * Rounding mode to round to nearest neighbor, where an equidistant
+  * value is rounded down.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * If the discarded digits represent greater than half (0.5 times)
+  * the value of a one in the next position then the result should be
+  * rounded up (away from zero).  Otherwise the discarded digits are
+  * ignored.
+  */
+ public static final int ROUND_HALF_DOWN=5;
+ 
+ /**
+  * Rounding mode to round to nearest neighbor, where an equidistant
+  * value is rounded to the nearest even neighbor.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * If the discarded digits represent greater than half (0.5 times)
+  * the value of a one in the next position then the result should be
+  * rounded up (away from zero).  If they represent less than half,
+  * then the result should be rounded down.
+  * <p>
+  * Otherwise (they represent exactly half) the result is rounded
+  * down if its rightmost digit is even, or rounded up if its
+  * rightmost digit is odd (to make an even digit).
+  */
+ public static final int ROUND_HALF_EVEN=6;
+ 
+ /**
+  * Rounding mode to round to nearest neighbor, where an equidistant
+  * value is rounded up.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * If the discarded digits represent greater than or equal to half
+  * (0.5 times) the value of a one in the next position then the result
+  * should be rounded up (away from zero).  Otherwise the discarded
+  * digits are ignored.
+  */
+ public static final int ROUND_HALF_UP=4;
+ 
+ /**
+  * Rounding mode to assert that no rounding is necessary.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * Rounding (potential loss of information) is not permitted.
+  * If any of the discarded digits are non-zero then an
+  * <code>ArithmeticException</code> should be thrown.
+  */
+ public static final int ROUND_UNNECESSARY=7;
+ 
+ /**
+  * Rounding mode to round away from zero.
+  * Used as a setting to control the rounding mode used during a
+  * <code>BigDecimal</code> operation.
+  * <p>
+  * If any of the discarded digits are non-zero then the result will
+  * be rounded up (away from zero).
+  */
+ public static final int ROUND_UP=0;
+ 
+ 
+ /* properties shared */
+ /**
+  * The number of digits (precision) to be used for an operation.
+  * A value of 0 indicates that unlimited precision (as many digits
+  * as are required) will be used.
+  * <p>
+  * The {@link BigDecimal} operator methods use this value to
+  * determine the precision of results.
+  * Note that leading zeros (in the integer part of a number) are
+  * never significant.
+  * <p>
+  * <code>digits</code> will always be non-negative.
+  *
+  * @serial
+  */
+ int digits;
+ 
+ /**
+  * The form of results from an operation.
+  * <p>
+  * The {@link BigDecimal} operator methods use this value to
+  * determine the form of results, in particular whether and how
+  * exponential notation should be used.
+  *
+  * @see #ENGINEERING
+  * @see #PLAIN
+  * @see #SCIENTIFIC
+  * @serial
+  */
+ int form; // values for this must fit in a byte
+ 
+ /**
+  * Controls whether lost digits checking is enabled for an
+  * operation.
+  * Set to <code>true</code> to enable checking, or
+  * to <code>false</code> to disable checking.
+  * <p>
+  * When enabled, the {@link BigDecimal} operator methods check
+  * the precision of their operand or operands, and throw an
+  * <code>ArithmeticException</code> if an operand is more precise
+  * than the digits setting (that is, digits would be lost).
+  * When disabled, operands are rounded to the specified digits.
+  *
+  * @serial
+  */
+ boolean lostDigits;
+ 
+ /**
+  * The rounding algorithm to be used for an operation.
+  * <p>
+  * The {@link BigDecimal} operator methods use this value to
+  * determine the algorithm to be used when non-zero digits have to
+  * be discarded in order to reduce the precision of a result.
+  * The value must be one of the public constants whose name starts
+  * with <code>ROUND_</code>.
+  *
+  * @see #ROUND_CEILING
+  * @see #ROUND_DOWN
+  * @see #ROUND_FLOOR
+  * @see #ROUND_HALF_DOWN
+  * @see #ROUND_HALF_EVEN
+  * @see #ROUND_HALF_UP
+  * @see #ROUND_UNNECESSARY
+  * @see #ROUND_UP
+  * @serial
+  */
+ int roundingMode;
+ 
+ /* properties private constant */
+ // default settings
+ private static final int DEFAULT_FORM=SCIENTIFIC;
+ private static final int DEFAULT_DIGITS=9;
+ private static final boolean DEFAULT_LOSTDIGITS=false;
+ private static final int DEFAULT_ROUNDINGMODE=ROUND_HALF_UP;
+ 
+ /* properties private constant */
+ 
+ private static final int MIN_DIGITS=0; // smallest value for DIGITS.
+ private static final int MAX_DIGITS=999999999; // largest value for DIGITS.  If increased,
+ // the BigDecimal class may need update.
+ // list of valid rounding mode values, most common two first
+ private static final int ROUNDS[]=new int[]{ROUND_HALF_UP,ROUND_UNNECESSARY,ROUND_CEILING,ROUND_DOWN,ROUND_FLOOR,ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_UP};
+ 
+ 
+ private static final java.lang.String ROUNDWORDS[]=new java.lang.String[]{"ROUND_HALF_UP","ROUND_UNNECESSARY","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_UP"}; // matching names of the ROUNDS values
+ 
+ 
+ 
+ 
+ /* properties private constant unused */
+ 
+ // Serialization version
+ private static final long serialVersionUID=7163376998892515376L;
+ 
+ /* properties public constant */
+ /**
+  * A <code>MathContext</code> object initialized to the default
+  * settings for general-purpose arithmetic.  That is,
+  * <code>digits=9 form=SCIENTIFIC lostDigits=false
+  * roundingMode=ROUND_HALF_UP</code>.
+  *
+  * @see #SCIENTIFIC
+  * @see #ROUND_HALF_UP
+  */
+ public static final com.ibm.math.MathContext DEFAULT=new com.ibm.math.MathContext(DEFAULT_DIGITS,DEFAULT_FORM,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
+
+ 
+ 
+ 
+ /* ----- Constructors ----- */
+ 
+ /**
+  * Constructs a new <code>MathContext</code> with a specified
+  * precision.
+  * The other settings are set to the default values
+  * (see {@link #DEFAULT}).
+  *
+  * An <code>IllegalArgumentException</code> is thrown if the
+  * <code>setdigits</code> parameter is out of range
+  * (&lt;0 or &gt;999999999).
+  *
+  * @param setdigits     The <code>int</code> digits setting
+  *                      for this <code>MathContext</code>.
+  * @throws IllegalArgumentException parameter out of range.
+  */
+ 
+ public MathContext(int setdigits){
+  this(setdigits,DEFAULT_FORM,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
+  return;}
+
+ 
+ /**
+  * Constructs a new <code>MathContext</code> with a specified
+  * precision and form.
+  * The other settings are set to the default values
+  * (see {@link #DEFAULT}).
+  *
+  * An <code>IllegalArgumentException</code> is thrown if the
+  * <code>setdigits</code> parameter is out of range
+  * (&lt;0 or &gt;999999999), or if the value given for the
+  * <code>setform</code> parameter is not one of the appropriate
+  * constants.
+  *
+  * @param setdigits     The <code>int</code> digits setting
+  *                      for this <code>MathContext</code>.
+  * @param setform       The <code>int</code> form setting
+  *                      for this <code>MathContext</code>.
+  * @throws IllegalArgumentException parameter out of range.
+  */
+ 
+ public MathContext(int setdigits,int setform){
+  this(setdigits,setform,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
+  return;}
+
+ /**
+  * Constructs a new <code>MathContext</code> with a specified
+  * precision, form, and lostDigits setting.
+  * The roundingMode setting is set to its default value
+  * (see {@link #DEFAULT}).
+  *
+  * An <code>IllegalArgumentException</code> is thrown if the
+  * <code>setdigits</code> parameter is out of range
+  * (&lt;0 or &gt;999999999), or if the value given for the
+  * <code>setform</code> parameter is not one of the appropriate
+  * constants.
+  *
+  * @param setdigits     The <code>int</code> digits setting
+  *                      for this <code>MathContext</code>.
+  * @param setform       The <code>int</code> form setting
+  *                      for this <code>MathContext</code>.
+  * @param setlostdigits The <code>boolean</code> lostDigits
+  *                      setting for this <code>MathContext</code>.
+  * @throws IllegalArgumentException parameter out of range.
+  */
+ 
+ public MathContext(int setdigits,int setform,boolean setlostdigits){
+  this(setdigits,setform,setlostdigits,DEFAULT_ROUNDINGMODE);
+  return;}
+
+ /**
+  * Constructs a new <code>MathContext</code> with a specified
+  * precision, form, lostDigits, and roundingMode setting.
+  *
+  * An <code>IllegalArgumentException</code> is thrown if the
+  * <code>setdigits</code> parameter is out of range
+  * (&lt;0 or &gt;999999999), or if the value given for the
+  * <code>setform</code> or <code>setroundingmode</code> parameters is
+  * not one of the appropriate constants.
+  *
+  * @param setdigits       The <code>int</code> digits setting
+  *                        for this <code>MathContext</code>.
+  * @param setform         The <code>int</code> form setting
+  *                        for this <code>MathContext</code>.
+  * @param setlostdigits   The <code>boolean</code> lostDigits
+  *                        setting for this <code>MathContext</code>.
+  * @param setroundingmode The <code>int</code> roundingMode setting
+  *                        for this <code>MathContext</code>.
+  * @throws IllegalArgumentException parameter out of range.
+  */
+ 
+ public MathContext(int setdigits,int setform,boolean setlostdigits,int setroundingmode){super();
+  
+  
+  // set values, after checking
+  if (setdigits!=DEFAULT_DIGITS) 
+   {
+    if (setdigits<MIN_DIGITS) 
+     throw new java.lang.IllegalArgumentException("Digits too small:"+" "+setdigits);
+    if (setdigits>MAX_DIGITS) 
+     throw new java.lang.IllegalArgumentException("Digits too large:"+" "+setdigits);
+   }
+  {/*select*/
+  if (setform==SCIENTIFIC)
+   ; // [most common]
+  else if (setform==ENGINEERING)
+   ;
+  else if (setform==PLAIN)
+   ;
+  else{
+   throw new java.lang.IllegalArgumentException("Bad form value:"+" "+setform);
+  }
+  }
+  if ((!(isValidRound(setroundingmode)))) 
+   throw new java.lang.IllegalArgumentException("Bad roundingMode value:"+" "+setroundingmode);
+  digits=setdigits;
+  form=setform;
+  lostDigits=setlostdigits; // [no bad value possible]
+  roundingMode=setroundingmode;
+  return;}
+
+ /**
+  * Returns the digits setting.
+  * This value is always non-negative.
+  *
+  * @return an <code>int</code> which is the value of the digits
+  *         setting
+  */
+ 
+ public int getDigits(){
+  return digits;
+  }
+
+ /**
+  * Returns the form setting.
+  * This will be one of
+  * {@link #ENGINEERING},
+  * {@link #PLAIN}, or
+  * {@link #SCIENTIFIC}.
+  *
+  * @return an <code>int</code> which is the value of the form setting
+  */
+ 
+ public int getForm(){
+  return form;
+  }
+
+ /**
+  * Returns the lostDigits setting.
+  * This will be either <code>true</code> (enabled) or
+  * <code>false</code> (disabled).
+  *
+  * @return a <code>boolean</code> which is the value of the lostDigits
+  *           setting
+  */
+ 
+ public boolean getLostDigits(){
+  return lostDigits;
+  }
+
+ /**
+  * Returns the roundingMode setting.
+  * This will be one of
+  * {@link  #ROUND_CEILING},
+  * {@link  #ROUND_DOWN},
+  * {@link  #ROUND_FLOOR},
+  * {@link  #ROUND_HALF_DOWN},
+  * {@link  #ROUND_HALF_EVEN},
+  * {@link  #ROUND_HALF_UP},
+  * {@link  #ROUND_UNNECESSARY}, or
+  * {@link  #ROUND_UP}.
+  *
+  * @return an <code>int</code> which is the value of the roundingMode
+  *         setting
+  */
+ 
+ public int getRoundingMode(){
+  return roundingMode;
+  }
+
+ /** Returns the <code>MathContext</code> as a readable string.
+  * The <code>String</code> returned represents the settings of the
+  * <code>MathContext</code> object as four blank-delimited words
+  * separated by a single blank and with no leading or trailing blanks,
+  * as follows:
+  * <ol>
+  * <li>
+  * <code>digits=</code>, immediately followed by
+  * the value of the digits setting as a numeric word.
+  * <li>
+  * <code>form=</code>, immediately followed by
+  * the value of the form setting as an uppercase word
+  * (one of <code>SCIENTIFIC</code>, <code>PLAIN</code>, or
+  * <code>ENGINEERING</code>).
+  * <li>
+  * <code>lostDigits=</code>, immediately followed by
+  * the value of the lostDigits setting
+  * (<code>1</code> if enabled, <code>0</code> if disabled).
+  * <li>
+  * <code>roundingMode=</code>, immediately followed by
+  * the value of the roundingMode setting as a word.
+  * This word will be the same as the name of the corresponding public
+  * constant.
+  * </ol>
+  * <p>
+  * For example:
+  * <br><code>
+  * digits=9 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP
+  * </code>
+  * <p>
+  * Additional words may be appended to the result of
+  * <code>toString</code> in the future if more properties are added
+  * to the class.
+  *
+  * @return a <code>String</code> representing the context settings.
+  */
+ 
+ public java.lang.String toString(){
+  java.lang.String formstr=null;
+  int r=0;
+  java.lang.String roundword=null;
+  {/*select*/
+  if (form==SCIENTIFIC)
+   formstr="SCIENTIFIC";
+  else if (form==ENGINEERING)
+   formstr="ENGINEERING";
+  else{
+   formstr="PLAIN";/* form=PLAIN */
+  }
+  }
+  {int $1=ROUNDS.length;r=0;r:for(;$1>0;$1--,r++){
+   if (roundingMode==ROUNDS[r]) 
+    {
+     roundword=ROUNDWORDS[r];
+     break r;
+    }
+   }
+  }/*r*/
+  return "digits="+digits+" "+"form="+formstr+" "+"lostDigits="+(lostDigits?"1":"0")+" "+"roundingMode="+roundword;
+  }
+
+ 
+ /* <sgml> Test whether round is valid. </sgml> */
+ // This could be made shared for use by BigDecimal for setScale.
+ 
+ private static boolean isValidRound(int testround){
+  int r=0;
+  {int $2=ROUNDS.length;r=0;r:for(;$2>0;$2--,r++){
+   if (testround==ROUNDS[r]) 
+    return true;
+   }
+  }/*r*/
+  return false;
+  }
+ }
diff --git a/src/com/ibm/math/package.html b/src/com/ibm/math/package.html
new file mode 100755
index 0000000..3fb5563
--- /dev/null
+++ b/src/com/ibm/math/package.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+
+<head><!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/math/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/04/05 18:05:11 $
+-->
+
+<title>C:\cvs\icu4j\src\com\ibm\demo\package.html</title>
+</head>
+
+<body bgcolor="white">
+
+<p>IBM BigDecimal support.</p>
+</body>
+</html>
diff --git a/src/com/ibm/richtext/awtui/AwtMenuBuilder.java b/src/com/ibm/richtext/awtui/AwtMenuBuilder.java
new file mode 100755
index 0000000..ede917b
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/AwtMenuBuilder.java
@@ -0,0 +1,238 @@
+/*
+ * @(#)$RCSfile: AwtMenuBuilder.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:41:49 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import java.awt.Frame;
+import java.awt.Menu;
+import java.awt.MenuBar;
+import java.awt.Window;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+
+import com.ibm.richtext.uiimpl.*;
+import com.ibm.richtext.uiimpl.DialogItem.DialogFactory;
+
+// TO DO:  Don't hard-code menu configurations.  Instead, specify them with
+// strings somehow.  This is an improvement over what we had, and it'll do
+// for now.
+
+/**
+ * AwtMenuBuilder creates a set of AWT menus for interacting
+ * with an MTextPanel.  Future versions of this class may allow
+ * clients to control the menu contents.
+ * @see MTextPanel
+ */
+public final class AwtMenuBuilder extends MenuBuilder {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final AwtMenuBuilder INSTANCE = new AwtMenuBuilder();
+    
+    /**
+     * Id for an Edit menu.  The Edit menu has the following items:
+     * <ul>
+     * <li><b>Undo</b> - invoke undo() on the MTextPanel</li>
+     * <li><b>Redo</b> - invoke redo() on the MTextPanel</li>
+     * <li><b>Cut</b> - invoke cut() on the MTextPanel</li>
+     * <li><b>Copy</b> - invoke copy() on the MTextPanel</li>
+     * <li><b>Paste</b> - invoke paste() on the MTextPanel</li>
+     * <li><b>Clear</b> - invoke clear() on the MTextPanel</li>
+     * <li><b>Select All</b> - invoke selectAll() on the MTextPanel</li>
+     * </ul>
+     */
+    public static final int EDIT = MenuBuilder.EDIT;
+    /**
+     * Id for the point sizes menu.  The menu has items that set the size of a character
+     * in a typeface.
+     */
+    public static final int SIZE = MenuBuilder.SIZE;
+    /**
+     * Id for a Style menu.  The Style menu has the following items:
+     * <ul>
+     * <li><b>Plain</b> - remove <code>WEIGHT</code>,
+     *                    <code>POSTURE</code>,
+     *                    <code>UNDERLINE</code> and
+     *                    <code>STRIKETHROUGH</code> attributes from the
+     * current selection</li>
+     * <li><b>Bold</b> - add <code>{WEIGHT,WEIGHT_BOLD}</code> to
+     * the current selection</li>
+     * <li><b>Italic</b> - add <code>{POSTURE,POSTURE_ITALIC}</code> to
+     * the current selection</li>
+     * <li><b>Underline</b> - add <code>{UNDERLINE,UNDERLINE_ON}</code> to
+     * the current selection</li>
+     * <li><b>Strikethrough</b> - add <code>{STRIKETHROUGH,STRIKETHROUGH_ON}</code>
+     * to the current selection</li>
+     * <li><b>Font...</b> - display a dialog allowing the user to
+     * select a typeface (font family) for the current selection</li>
+     * <li><b>Forecolor...</b> - display a dialog allowing the user to
+     * select a foreground color for the current selection</li>
+     * <li><b>Backcolor...</b> - display a dialog allowing the user to
+     * select a background color for the current selection</li>
+     * </ul>
+     */
+    public static final int STYLE = MenuBuilder.STYLE;
+    /**
+     * Id for a paragraph alignment menu.  The menu has the following items:
+     * <ul>
+     * <li><b>Leading</b> - give selected paragraph(s) LEADING flush</li>
+     * <li><b>Center</b> - give selected paragraph(s) CENTER flush</li>
+     * <li><b>Trailing</b> - give selected paragraph(s) TRAILING flush</li>
+     * <li><b>Justified</b> - give selected paragraph(s) full justification</li>
+     * </ul>
+     */
+    public static final int FLUSH = MenuBuilder.FLUSH;
+    /**
+     * Id for a menu that sets the KeyRemap
+     * on an MTextPanel.  The menu has the following items:
+     * <ul>
+     * <li><b>Default</b> - set KeyRemap to identity remap</li>
+     * <li><b>Arabic</b> - set KeyRemap to Arabic transliteration</li>
+     * <li><b>Hebrew</b> - set KeyRemap to Hebrew transliteration</li>
+     * <li><b>Israel Nikud</b> - set KeyRemap to Israel Nikud</li>
+     * <li><b>Thai Ketmanee</b> - set KeyRemap to Thai Ketmanee</li>
+     * </ul>
+     */
+    public static final int KEYMAP = MenuBuilder.KEYMAP;
+    /**
+     * Id for a menu that sets
+     * the primary run direction for a paragraph.  Run direction can be left-to-right,
+     * right-to-left, or can use the default run direction from the Unicode bidi algorithm.
+     */
+    public static final int BIDI = MenuBuilder.BIDI;
+    /**
+     * Id for a menu with an <b>About</b> item.  When selected, 
+     * the item displays a Frame containing some
+     * self-promotional text.
+     */
+    public static final int ABOUT = MenuBuilder.ABOUT;
+    
+    /**
+     * Return an instance of AwtMenuBuilder.
+     */
+    public static AwtMenuBuilder getInstance() {
+        
+        return INSTANCE;
+    }
+    
+    private MenuBar fMenuBar;
+    
+    private AwtMenuBuilder() {
+    }
+    
+    /**
+     * Add a standard set of menus to the given menu bar.  The menus 
+     * will interact with the given MTextPanel.
+     * @param menuBar the MenuBar to which menus are added
+     * @param textPanel the MTextPanel with which the menus interact
+     * @param frame a Frame to use as the parent of any dialogs created by a 
+     *   a menu item.  If null, menu items which create dialogs will be omitted.
+     */
+    public void createMenus(MenuBar menuBar, 
+                            MTextPanel textPanel,
+                            Frame frame) {
+        
+        createMenus(menuBar, textPanel, frame, defaultMenus);
+    }
+    
+    /**
+     * Add a set of menus to the given menu bar.  The menus 
+     * will interact with the given MTextPanel.
+     * @param menuBar the MenuBar to which menus are added
+     * @param textPanel the MTextPanel with which the menus interact
+     * @param frame a Frame to use as the parent of any dialogs created by a 
+     *   a menu item.  If null, menu items which create dialogs will be omitted.
+     * @param menus an array of integer menu id's.  Each element of the
+     *   array must be one of this class's menu id constants.  If null,
+     *   the default menus are created.
+     */
+    public void createMenus(MenuBar menuBar, 
+                            MTextPanel textPanel,
+                            Frame frame,
+                            int[] menus) {
+        
+        if (menus == null) {
+            menus = defaultMenus;
+        }
+        
+        synchronized (MItem.LOCK) {
+            
+            fMenuBar = menuBar;
+            doCreateMenus(textPanel, frame, menus);
+            fMenuBar = null;
+        }
+    }
+    
+    protected void handleAddMenu(String key) {
+        
+        Menu menu = new Menu(ResourceUtils.getResourceString(key));
+        fMenuBar.add(menu);
+        MItem.setItemFactory(new AwtMenuFactory(menu));
+    }
+
+    protected DialogFactory createObjectDialogFactory(final String dialogTitle,
+                                                      final String dialogMessage,
+                                                      final Object key,
+                                                      final boolean character,
+                                                      final String[] names,
+                                                      final Object[] values) {
+        
+        final Frame dialogParent = fDialogParent;
+
+        return new DialogFactory() {    
+            public Window createDialog(MTextPanel textPanel) {
+                return new ObjectDialog(dialogParent,
+                                        dialogTitle,
+                                        dialogMessage,
+                                        textPanel,
+                                        key,
+                                        character,
+                                        names,
+                                        values);
+            }
+        };
+    }
+    
+    protected DialogFactory createNumberDialogFactory(final String dialogTitle,
+                                                      final String dialogMessage,
+                                                      final Object key,
+                                                      final boolean character) {
+        
+        final Frame dialogParent = fDialogParent;
+            
+        return new DialogFactory() {
+            public Window createDialog(MTextPanel textPanel) {
+                return new NumberDialog(dialogParent,
+                                        dialogTitle,
+                                        dialogMessage,
+                                        textPanel,
+                                        key,
+                                        character,
+                                        1);
+            }
+        };
+    }    
+    
+    protected DialogFactory createAboutDialogFactory() {
+        
+        return new DialogFactory() {
+            public Window createDialog(MTextPanel textPanel) {
+                String title = ResourceUtils.getResourceString(FrameResources.ABOUT_TITLE);
+                return new MessageDialog(title, AboutText.getAboutText());
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/awtui/AwtMenuFactory.java b/src/com/ibm/richtext/awtui/AwtMenuFactory.java
new file mode 100755
index 0000000..9e26179
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/AwtMenuFactory.java
@@ -0,0 +1,116 @@
+/*
+ * @(#)$RCSfile: AwtMenuFactory.java,v $ $Revision: 1.2 $ $Date: 2000/04/20 19:29:08 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import java.awt.CheckboxMenuItem;
+import java.awt.Menu;
+import java.awt.MenuItem;
+import java.awt.MenuShortcut;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import com.ibm.richtext.uiimpl.resources.MenuData;
+import com.ibm.richtext.uiimpl.MItem;
+import com.ibm.richtext.uiimpl.MItem.ItemFactory;
+
+final class AwtMenuFactory implements ItemFactory {
+        
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private final class AwtMItem extends MItem {
+        
+        private MenuItem fItem;
+        
+        AwtMItem(MenuItem item) {
+            
+            fItem = item;
+            try {
+                CheckboxMenuItem chItem = (CheckboxMenuItem) fItem;
+                chItem.addItemListener(new ItemListener() {
+                    public void itemStateChanged(ItemEvent e) {
+                        handleSelected();
+                    }
+                });
+            }
+            catch(ClassCastException e) {
+                item.addActionListener(new ActionListener() {
+                    public void actionPerformed(ActionEvent evt) {
+                        handleSelected();
+                    }
+                });
+            }
+        }
+        
+        // Ack - how do you do this from inner classes??
+        protected void handleSelected() {
+            
+            super.handleSelected();
+        }
+        
+        public final void setEnabled(boolean enabled) {
+            
+            fItem.setEnabled(enabled);
+        }
+        
+        public void setState(boolean checked) {
+            
+            try {
+                CheckboxMenuItem item = (CheckboxMenuItem) fItem;
+                item.setState(checked);
+            }
+            catch(ClassCastException e) {
+                throw new Error("Cannot perform setChecked on non-checkbox item");
+            }
+        }
+    }
+    
+    private Menu fMenu;
+        
+    AwtMenuFactory(Menu menu) {
+            
+        fMenu = menu;
+    }
+    
+    private MItem handleCreate(MenuItem item,
+                               MenuData menuData) {
+
+        if (menuData.hasShortcut()) {
+            item.setShortcut(new MenuShortcut(menuData.getShortcutChar()));
+        }
+        
+        fMenu.add(item);
+        
+        return new AwtMItem(item);
+    }
+        
+    public MItem createItem(MenuData menuData) {
+        
+        return handleCreate(new MenuItem(menuData.getName()), menuData);
+    }        
+
+    public MItem createCheckboxItem(MenuData menuData) {
+        
+        return handleCreate(new CheckboxMenuItem(menuData.getName()), menuData);
+    }
+    
+    public void createSeparator() {
+        
+        fMenu.add(new MenuItem("-"));
+    }
+}
+    
diff --git a/src/com/ibm/richtext/awtui/MTabRulerComponent.java b/src/com/ibm/richtext/awtui/MTabRulerComponent.java
new file mode 100755
index 0000000..d6b47bc
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/MTabRulerComponent.java
@@ -0,0 +1,92 @@
+/*
+ * @(#)$RCSfile: MTabRulerComponent.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:41:49 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import java.awt.Color;
+import com.ibm.richtext.styledtext.MTabRuler;
+import com.ibm.richtext.textpanel.MTextPanel;
+
+/**
+ * MTabRulerComponent is implemented by components which provide a tab-ruler
+ * interface for interacting with an MTextPanel.
+ * <p>
+ * Users interact with MTabRulerComponent implementations as follows:
+ * <ul>
+ * <li>The leading margin can be set by dragging the bottom half
+ * of the leftmost triangle.  The first-line indent will "stick" with
+ * the leading margin.</li>
+ * <li>The first-line indent can be set by dragging the top half of the
+ * leftmost triangle.  The first-line indent applies to the first line of
+ * a paragraph.</li>
+ * <li>The trailing margin can be set by dragging the rightmost triangle.</li>
+ * <li>Tabs can be added to the ruler by clicking the mouse on the ruler with the
+ * control key pressed.  Four kinds of tabs are provided:  leading, trailing, center,
+ * and decimal.  The type of a tab can be changed by double-clicking the tab.</li>
+ * <li>Tabs can be repositioned by dragging them with the mouse.</li>
+ * </ul>
+ * <p>
+ * MTabRulerComponent's appearance will reflect the paragraph styles in the
+ * first selected paragraph.  Style changes performed with an 
+ * MTabRulerComponent will apply to all selected paragraphs.
+ */
+public interface MTabRulerComponent {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    /**
+     * Listen to the given MTextPanel and reflect its changes,
+     * and update its paragraph styles when TabRuler is
+     * manipulated.
+     * @param textPanel the MTextPanel to listen to
+     */
+    public void listenToTextPanel(MTextPanel textPanel);
+
+    /**
+     * Return the background color of this TabRuler.
+     * @return the background color of this TabRuler
+     */
+    public Color getBackColor();
+
+    /**
+     * Set the background color of this TabRuler.
+     * @param backColor the new background color of this TabRuler
+     */
+    public void setBackColor(Color backColor);
+
+    /**
+     * Return the MTabRuler represented by this TabRuler.
+     * @return the MTabRuler represented by this TabRuler
+     */
+    public MTabRuler getRuler();
+
+    /**
+     * Return the leading margin of this TabRuler.
+     * @return the leading margin of this TabRuler
+     */
+    public int getLeadingMargin();
+
+    /**
+     * Return the first line indent of this TabRuler.
+     * @return the first line indent of this TabRuler
+     */
+    public int getFirstLineIndent();
+
+    /**
+     * Return the trailing margin of this TabRuler.
+     * @return the trailing margin of this TabRuler
+     */
+    public int getTrailingMargin();
+}
diff --git a/src/com/ibm/richtext/awtui/MessageDialog.java b/src/com/ibm/richtext/awtui/MessageDialog.java
new file mode 100755
index 0000000..47c938d
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/MessageDialog.java
@@ -0,0 +1,67 @@
+/*
+ * @(#)$RCSfile: MessageDialog.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:41:49 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import java.awt.Color;
+import java.awt.Frame;
+import java.awt.CardLayout;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.textpanel.TextPanelSettings;
+
+/**
+ * MessageDialog is a simple Frame which displays a styled
+ * text message in a TextPanel.
+ * The text in the message is not selectable or editable.
+ * @see MConstText
+ * @see TextPanel
+ */
+public final class MessageDialog extends Frame {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+    * Create a new MessageDialog.
+    * @param title the dialog's title
+    * @param message the text which will appear in the dialog
+    */
+    public MessageDialog(String title, MConstText message)
+    {
+        super(title);
+
+        setLayout(new CardLayout());
+        TextPanelSettings settings = TextPanel.getDefaultSettings();
+        settings.setScrollable(false);
+        settings.setSelectable(false);
+        TextPanel panel = new TextPanel(settings, message, null);
+
+        panel.setBackground(Color.black);
+        add("Center", panel);
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                setVisible(false);
+                dispose();
+            }
+        });
+
+        setSize(450,320);
+    }
+}
diff --git a/src/com/ibm/richtext/awtui/NumberDialog.java b/src/com/ibm/richtext/awtui/NumberDialog.java
new file mode 100755
index 0000000..f3c976f
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/NumberDialog.java
@@ -0,0 +1,155 @@
+/*
+ * @(#)$RCSfile: NumberDialog.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:41:49 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import java.awt.FlowLayout;
+import java.awt.Dialog;
+import java.awt.TextField;
+import java.awt.Button;
+import java.awt.Frame;
+import java.awt.Panel;
+import java.awt.Label;
+
+import java.text.NumberFormat;
+import java.text.ParseException;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowAdapter;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+import com.ibm.richtext.uiimpl.MenuItemSet;
+import com.ibm.richtext.uiimpl.ResourceUtils;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.textpanel.MTextPanel;
+
+/**
+* Simple dialog which gets a number, and sends an appropriate command
+*/
+final class NumberDialog extends Dialog implements ActionListener
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private MTextPanel fTextPanel;
+    private TextField fInput = null;
+    private Button fOKButton = null;
+    private Button fCancelButton = null;
+    private boolean fCharacter;
+    private Object fKey;
+    private float fMultiplier; 
+
+    /**
+     * @param multiplier the factor by which to multiply the user's
+     *        selection before creating the attribute value.   This
+     *        is useful for subscripting.
+     */
+    NumberDialog(Frame parent,
+                 String title,
+                 String message,
+                 MTextPanel textPanel,
+                 Object key,
+                 boolean character,
+                 float multiplier) {
+
+        super(parent, title, false);
+        fTextPanel = textPanel;
+        fKey = key;
+        fCharacter = character;
+        fMultiplier = multiplier;
+        setLayout(new java.awt.GridLayout(2,1));
+
+        Panel panel = new Panel();
+        panel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 15));
+        fInput = new TextField(5);
+        panel.add(new Label(message));
+        panel.add(fInput);
+        add("Center", panel);
+
+        fCancelButton = new Button(ResourceUtils.getResourceString(FrameResources.CANCEL));
+        fOKButton = new Button(ResourceUtils.getResourceString(FrameResources.OK));
+        Panel p = new Panel();
+        p.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
+        p.add(fCancelButton);
+        p.add(fOKButton);
+        add("South", p);
+
+        pack();
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                closeWindow(false);
+            }
+        });
+        
+        fOKButton.addActionListener(this);
+        fCancelButton.addActionListener(this);
+    }
+
+    private void closeWindow(boolean sendAction) {
+
+        setVisible(false);
+
+        int num = 0;
+        if (sendAction) {
+            try {
+                String text = fInput.getText();
+                num = NumberFormat.getInstance().parse(text).intValue();
+            }
+            catch (ParseException exception) {
+                sendAction = false;
+            }
+        }
+
+        if (sendAction) {
+            sendAction(num);
+        }
+
+        dispose();
+    }
+
+    public void actionPerformed(ActionEvent e) {
+
+        Object source = e.getSource();
+
+        if (source == fOKButton) {
+            closeWindow(true);
+        }
+        else if (source == fCancelButton) {
+            closeWindow(false);
+        }
+        else {
+            throw new IllegalArgumentException("Invalid ActionEvent!");
+        }
+    }
+
+    /**
+    * Handle the user input
+    * @param the number the user typed in
+    */
+    private void sendAction(int number) {
+        float num = number * fMultiplier;
+        StyleModifier modifier = StyleModifier.createAddModifier(
+                                                fKey,
+                                                new Float(num));
+        if (fCharacter == MenuItemSet.CHARACTER) {
+            fTextPanel.modifyCharacterStyleOnSelection(modifier);
+        }
+        else {
+            fTextPanel.modifyParagraphStyleOnSelection(modifier);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/awtui/ObjectDialog.java b/src/com/ibm/richtext/awtui/ObjectDialog.java
new file mode 100755
index 0000000..e3c6a95
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/ObjectDialog.java
@@ -0,0 +1,170 @@
+/*
+ * @(#)$RCSfile: ObjectDialog.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:41:49 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import java.util.Hashtable;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.uiimpl.MenuItemSet;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+import com.ibm.richtext.uiimpl.ResourceUtils;
+
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Button;
+import java.awt.Choice;
+import java.awt.Label;
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.Panel;
+import java.awt.GridLayout;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowAdapter;
+
+/**
+* Simple dialog which gets a color
+*/
+final class ObjectDialog extends Dialog implements ActionListener
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private final MTextPanel fTextPanel;
+    private final Object fKey;
+    private boolean fCharacter;
+
+    private final Button fOKButton;
+    private final Button fCancelButton;
+    private final Choice fItems;
+    private final Hashtable fNameToValueMap;
+    /**
+    * Construct a new ColorDialog.
+    * @param parent the dialog's parent frame
+    * @param title the dialogs title
+    * @param message the message displayed next to the input box
+    */
+    ObjectDialog(Frame parent, 
+                 String title, 
+                 String message, 
+                 MTextPanel textPanel,
+                 Object key,
+                 boolean character,
+                 String[] names,
+                 Object[] values) {
+                    
+        super(parent, title, false);
+        fTextPanel = textPanel;
+        fKey = key;
+        fCharacter = character;
+        
+        setLayout(new GridLayout(2, 1));
+
+        Panel panel = new Panel();
+        panel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
+        fItems = new Choice();
+
+        if (names.length != values.length) {
+            throw new IllegalArgumentException("Must have same number of names and values.");
+        }
+
+        fNameToValueMap = new Hashtable(names.length);
+        
+        for (int i=0; i < names.length; i++) {
+            fItems.add(names[i]);
+            if (values[i] != null) {
+                fNameToValueMap.put(names[i], values[i]);
+            }
+        }
+
+        panel.add(new Label(message));        
+        panel.add(fItems);
+        
+        add("North", panel);
+
+        fCancelButton = new Button(ResourceUtils.getResourceString(FrameResources.CANCEL));
+        fOKButton = new Button(ResourceUtils.getResourceString(FrameResources.OK));
+        Panel p = new Panel();
+        p.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
+        p.add(fCancelButton);
+        p.add(fOKButton);
+        add("South", p);
+
+        pack();
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                closeWindow(false);
+            }
+        });
+        
+        fOKButton.addActionListener(this);
+        fCancelButton.addActionListener(this);
+    }
+
+    private void closeWindow(boolean sendAction) {
+
+        setVisible(false);
+        if (sendAction) {
+            Object value = fNameToValueMap.get(fItems.getSelectedItem());
+            sendAction(value);
+        }
+        dispose();
+    }
+
+    public void actionPerformed(ActionEvent e) {
+
+        Object source = e.getSource();
+
+        if (source == fOKButton) {
+            closeWindow(true);
+        }
+        else if (source == fCancelButton) {
+            closeWindow(false);
+        }
+        else {
+            throw new IllegalArgumentException("Invalid ActionEvent!");
+        }
+    }
+
+    /**
+    * Handle the user input
+    * @param obj the value object
+    */
+    private void sendAction(Object value) {
+
+        StyleModifier modifier;
+        if (value != null) {
+            modifier = StyleModifier.createAddModifier(fKey, value);
+        }
+        else {
+            AttributeSet set = new AttributeSet(fKey);
+            modifier = StyleModifier.createRemoveModifier(set);
+        }
+        
+        if (fCharacter == MenuItemSet.CHARACTER) {
+            fTextPanel.modifyCharacterStyleOnSelection(modifier);
+        }
+        else {
+            fTextPanel.modifyParagraphStyleOnSelection(modifier);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/awtui/TabRuler.java b/src/com/ibm/richtext/awtui/TabRuler.java
new file mode 100755
index 0000000..44825d5b
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/TabRuler.java
@@ -0,0 +1,131 @@
+/*
+ * @(#)$RCSfile: TabRuler.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:41:49 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.uiimpl.TabRulerImpl;
+import com.ibm.richtext.styledtext.MTabRuler;
+
+/**
+ * TabRuler is an implementation of MTabRulerComponent in an AWT component.
+ */
+public final class TabRuler extends Component implements MTabRulerComponent {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private TabRulerImpl fImpl;
+    
+    /**
+     * Create a new TabRuler.
+     * @param baseline the y-coordinate of the ruler's baseline
+     * @param origin the x-coordinate in this Component where
+     *     the left margin appears
+     * @param textPanel the MTextPanel to listen to.  This TabRuler
+     *     will reflect the MTextPanel's paragraph styles, and update
+     *     the paragraph styles when manipulated.
+     */
+    public TabRuler(int baseline, int origin, MTextPanel textPanel) {
+        
+        fImpl = new TabRulerImpl(baseline, origin, textPanel, this);
+    }
+    
+    /**
+     * Listen to the given MTextPanel and reflect its changes,
+     * and update its paragraph styles when TabRuler is
+     * manipulated.
+     * @param textPanel the MTextPanel to listen to
+     */
+    public void listenToTextPanel(MTextPanel textPanel) {
+
+        fImpl.listenToTextPanel(textPanel);
+    }
+    
+    /**
+     * Return the background color of this TabRuler.
+     * @return the background color of this TabRuler
+     */
+    public Color getBackColor() {
+
+        return fImpl.getBackColor();
+    }
+    
+    /**
+     * Set the background color of this TabRuler.
+     * @param backColor the new background color of this TabRuler
+     */
+    public void setBackColor(Color backColor) {
+
+        fImpl.setBackColor(backColor);
+    }
+    
+    /**
+     * Return the MTabRuler represented by this TabRuler.
+     * @return the MTabRuler represented by this TabRuler
+     */
+    public MTabRuler getRuler() {
+        
+        return fImpl.getRuler();
+    }
+
+    /**
+     * Return the leading margin of this TabRuler.
+     * @return the leading margin of this TabRuler
+     */
+    public int getLeadingMargin() {
+        
+        return fImpl.getLeadingMargin();
+    }
+
+    /**
+     * Return the first line indent of this TabRuler.
+     * @return the first line indent of this TabRuler
+     */
+    public int getFirstLineIndent() {
+        
+        return fImpl.getFirstLineIndent();
+    }
+
+    /**
+     * Return the trailing margin of this TabRuler.
+     * @return the trailing margin of this TabRuler
+     */
+    public final int getTrailingMargin() {
+        
+        return fImpl.getTrailingMargin();
+    }
+    
+    // The following are Component methods which need to be delegated to
+    // the implementation:
+    
+    public void paint(Graphics g) {
+        
+        fImpl.paint(g);
+    }
+    
+    public Dimension getPreferredSize() {
+        
+        return fImpl.getPreferredSize();
+    }
+
+    public Dimension getMinimumSize() {
+        
+        return fImpl.getMinimumSize();
+    }
+}
diff --git a/src/com/ibm/richtext/awtui/TextFrame.java b/src/com/ibm/richtext/awtui/TextFrame.java
new file mode 100755
index 0000000..2396fd8
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/TextFrame.java
@@ -0,0 +1,128 @@
+/*
+ * @(#)$RCSfile: TextFrame.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:41:49 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.awtui;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.richtext.uiimpl.ResourceUtils;
+
+import java.awt.BorderLayout;
+import java.awt.Frame;
+import java.awt.Menu;
+import java.awt.MenuBar;
+import java.awt.Toolkit;
+
+import java.awt.datatransfer.Clipboard;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+/**
+ * TextFrame is a Frame containing an editable TextPanel, a set of standard
+ * menus, and a TabRuler.  This class can be used as-is, but is
+ * primarily intended to be a simple example of how to use the other classes
+ * in this package.
+ * @see com.ibm.richtext.textpanel.TextPanel
+ * @see AwtMenuBuilder
+ * @see TabRuler
+ */
+public final class TextFrame extends Frame {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private TextPanel fTextPanel;
+
+    /**
+     * Create a new TextFrame with no text and no title.
+     */
+    public TextFrame() {
+        
+        super();
+        init(null, Toolkit.getDefaultToolkit().getSystemClipboard());
+    }
+    
+    /**
+     * Create a new TextFrame with no text and the given title.
+     * @param title the title of this Frame
+     */
+    public TextFrame(String title) {
+        
+        super(title);
+        init(null, Toolkit.getDefaultToolkit().getSystemClipboard());
+    }
+    
+    /**
+     * Create a new TextFrame with the given text and title, whose
+     * TextPanel will use the given clipboard.
+     * @param text the initial text in the TextPanel.  If null the
+     *      TextPanel will initially be empty
+     * @param title the title of this Frame
+     * @param clipboard the Clipboard which the TextPanel will use.
+     *      If null the TextPanel will use a private Clipboard
+     */
+    public TextFrame(MConstText text,
+                     String title,
+                     Clipboard clipboard) {
+
+        super(title);
+        init(text, clipboard);
+    }
+
+    private void init(MConstText text, Clipboard clipboard) {
+        
+        fTextPanel = new TextPanel(text, clipboard);
+
+        TabRuler tabRuler = new TabRuler(14, 10, fTextPanel);
+
+        createMenus();
+
+        setLayout(new BorderLayout());
+        add(fTextPanel, "Center");
+        add(tabRuler, "North");
+        pack();
+    }
+
+    private void createMenus() {
+
+        MenuBar menuBar = new MenuBar();
+
+        AwtMenuBuilder.getInstance().createMenus(menuBar, fTextPanel, this);
+
+        setMenuBar(menuBar);
+    }
+
+    /**
+     * Return the MTextPanel in this frame.
+     */
+    public MTextPanel getTextPanel() {
+
+        return fTextPanel;
+    }
+    
+    public static void main(String[] args) {
+        
+        TextFrame frame = new TextFrame();
+        frame.addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
+        frame.setSize(550, 700);
+        frame.show();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/awtui/package.html b/src/com/ibm/richtext/awtui/package.html
new file mode 100755
index 0000000..57fcc41
--- /dev/null
+++ b/src/com/ibm/richtext/awtui/package.html
@@ -0,0 +1,5 @@
+<html>
+<body bgcolor="white">
+Provides classes for building an AWT-based user interface for a TextPanel.
+</body>
+</html>
diff --git a/src/com/ibm/richtext/demo/AwtDocumentWindow.java b/src/com/ibm/richtext/demo/AwtDocumentWindow.java
new file mode 100755
index 0000000..9575894
--- /dev/null
+++ b/src/com/ibm/richtext/demo/AwtDocumentWindow.java
@@ -0,0 +1,365 @@
+/*
+ * @(#)$RCSfile: AwtDocumentWindow.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import com.ibm.richtext.awtui.TabRuler;
+
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.textpanel.TextPanelListener;
+import com.ibm.richtext.textpanel.TextPanelSettings;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.awtui.AwtMenuBuilder;
+
+import com.ibm.richtext.print.PrintingUtils;
+
+import java.awt.BorderLayout;
+import java.awt.Button;
+import java.awt.Dialog;
+import java.awt.FileDialog;
+import java.awt.GridLayout;
+import java.awt.Frame;
+import java.awt.Menu;
+import java.awt.MenuBar;
+import java.awt.Label;
+import java.awt.Panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import java.io.File;
+
+import java.text.MessageFormat;
+
+/**
+ * AwtDocumentWindow is a Frame containing a TextPanel, with a document
+ * for storing the text in the TextPanel.
+ */
+public final class AwtDocumentWindow extends Frame implements DocumentWindow {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private TextPanel fTextPanel;
+    private EditApplication fApplication;
+    private TextDocument fDocument;
+
+    /**
+     * Create a new AwtDocumentWindow.
+     * @param application the application that owns this document
+     * @param clipboard the clipboard to use
+     * @param document the document to show in this AwtDocumentWindow
+     */
+    AwtDocumentWindow(EditApplication application,
+                   TextDocument document,
+                   TextPanelSettings textPanelSettings,
+                   boolean useTabRuler,
+                   TextPanelListener listener,
+                   boolean supportStyledText,
+                   boolean supportPlainText,
+                   int[] menus) {
+
+        fApplication = application;
+        
+        fTextPanel = new TextPanel(textPanelSettings, null, application.getClipboard());
+        if (listener != null) {
+            fTextPanel.addListener(listener);
+        }
+        setDocument(document);
+
+        addMenuBar(supportStyledText, supportPlainText, menus);
+
+        setLayout(new BorderLayout());
+
+        if (useTabRuler) {
+            TabRuler tabRuler = new TabRuler(14, 10, fTextPanel);
+            add(tabRuler, "North");
+        }
+        
+        add(fTextPanel, "Center");
+        pack();
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                doClose();
+            }
+        });
+    }
+
+    private void addMenuBar(boolean supportStyledText, 
+                            boolean supportPlainText,
+                            int[] menus) {
+        
+        MenuBar menuBar = new MenuBar();
+        String menuTitle = ResourceUtils.getString(EditorResources.FILE);
+        Menu menu = new Menu(menuTitle);
+        new AwtFileMenuManager(menu, fApplication, this,
+                                supportStyledText, supportPlainText);
+        menuBar.add(menu);
+
+        AwtMenuBuilder.getInstance().createMenus(menuBar, fTextPanel, this, menus);
+        setMenuBar(menuBar);
+    }
+    
+    /**
+     * Return true if it is OK to set the document text and file to
+     * something different.
+     */
+    private boolean canChangeDocuments() {
+
+        // If the text is modified, give the user a chance to
+        // save it.  Otherwise return true.
+
+        if (fDocument.isModified()) {
+            byte save = askSave(this, getTitle());
+            if (save == YES) {
+                return doSave();
+            }
+            else {
+                return save == NO;
+            }
+        }
+        else {
+            return true;
+        }
+    }
+
+    private void setDocument(TextDocument document) {
+
+        fDocument = document;
+        fDocument.setTextPanel(fTextPanel);
+        setTitle(fDocument.getTitle());
+    }
+
+    /**
+     * Set the document to empty text with no associated file.  If
+     * the document text is not saved, prompt the user to save the
+     * the text first.  If this operation is canceled, the document
+     * is unchanged.
+     */
+    public void doNew() {
+
+        if (!canChangeDocuments()) {
+            return;
+        }
+        
+        setDocument(fApplication.createNewDocument());
+    }
+
+    /**
+     * Prompt the user for a file from which to load a text document.
+     * If the current text is not saved, first prompt the user to
+     * save.  If either operation is canceled or fails, the document
+     * is unchanged.
+     */
+    public void doOpen() {
+
+        if (!canChangeDocuments()) {
+            return;
+        }
+
+        TextDocument document = fApplication.openDocument(this);
+
+        if (document != null) {
+            setDocument(document);
+        }
+    }
+
+    /**
+     * Prompt the user for a file in which to save the document text.
+     * If this operation is not canceled, save the text in the file.
+     * The file becomes this document's file.
+     */
+    public boolean doSaveAs(int format) {
+
+        String title = ResourceUtils.getString(EditorResources.SAVE_TITLE);
+        File file = getFileFromDialog(fDocument.getFile(), title, this, FileDialog.SAVE);
+        
+        if (file == null) {
+            return false;
+        }
+        
+        fDocument.setFile(file);
+        setTitle(fDocument.getTitle());
+
+        fDocument.setFormat(format);
+        
+        return fDocument.save();
+    }
+
+    /**
+     * Save the text in this document.  If there is no file associated
+     * with the text, this is equivalent to <code>doSaveAs</code>.
+     * This method returns true if the document was successfully saved.
+     */
+    public boolean doSave() {
+
+        if (fDocument.getFile() == null) {
+            return doSaveAs(fDocument.getFormat());
+        }
+        
+        return fDocument.save();
+    }
+
+    /**
+     * Print the contents of this window.
+     */
+    public void doPrint() {
+
+        PrintingUtils.userPrintText(fDocument.getText(),
+                                    fTextPanel.getDefaultValues(),
+                                    this,
+                                    this.getTitle());
+    }
+
+    /**
+     * Attempt to close this window.  If the text has not been saved,
+     * give the user a chance to save the text before closing the
+     * window.  If the user cancels this operation, this method returns
+     * false and the window is not closed;  otherwise this method
+     * returns true and the window is closed.
+     */
+    public boolean doClose() {
+
+        if (canChangeDocuments()) {
+            setVisible(false);
+            dispose();
+            fApplication.removeDocumentWindow(this);
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * Retrieve a file from a dialog.  If the user does not
+     * select a file in the dialog this method returns null.
+     * @param kind either FileDialog.LOAD or FileDialog.SAVE.
+     */
+    public static File getFileFromDialog(File origFile,
+                                         String dialogTitle, 
+                                         Frame owner,
+                                         int kind) {
+        
+        FileDialog dialog = new FileDialog(owner, 
+                                           dialogTitle,
+                                           kind);
+        if (origFile != null) {
+            dialog.setDirectory(origFile.getParent());
+            dialog.setFile(origFile.getName());
+        }
+        dialog.show();
+        String fileStr = dialog.getFile();
+        String dirStr = dialog.getDirectory();
+        
+        File file = null;
+        
+        if (fileStr != null) {
+            file = new File(dirStr, fileStr);
+        }
+        
+        return file;
+    }
+    
+    private static final byte YES = 0;
+    private static final byte NO = 1;
+    private static final byte CANCEL = 2;
+
+    private static final class DialogListener implements ActionListener {
+
+        Dialog fDialog;
+        Button fYes, fNo, fCancel;
+        byte fState;
+
+        DialogListener(Dialog dialog,
+                       Button yes,
+                       Button no,
+                       Button cancel) {
+
+            fDialog = dialog;
+            fYes = yes;
+            fNo = no;
+            fCancel = cancel;
+            fYes.addActionListener(this);
+            fNo.addActionListener(this);
+            fCancel.addActionListener(this);
+            fState = -1;
+        }
+
+        public void actionPerformed(ActionEvent event) {
+
+            Object source = event.getSource();
+            if (source == fYes) {
+                fState = YES;
+            }
+            else if (source == fNo) {
+                fState = NO;
+            }
+            else if (source == fCancel) {
+                fState = CANCEL;
+            }
+            else {
+                return;
+            }
+
+            fDialog.dispose();
+        }
+
+        byte getState() {
+
+            return fState;
+        }
+    }
+
+    /**
+     * Display a dialog that asks whether the user wants to
+     * save a document.  Possible reponses are Yes, No, and
+     * Cancel.  The returned value indicates which response
+     * was chosen.
+     */
+    private static byte askSave(Frame parent, String fileName) {
+
+        Dialog dialog = new Dialog(parent, true);
+        dialog.setLayout(new GridLayout(0, 1));
+        
+        String pattern = ResourceUtils.getString(EditorResources.SAVE_MSG);
+        String text = MessageFormat.format(pattern, new Object[] {fileName});
+        dialog.add(new Label(text, Label.CENTER));
+        
+        Button yes = new Button(ResourceUtils.getString(EditorResources.YES));
+        Button no = new Button(ResourceUtils.getString(EditorResources.NO));
+        Button cancel = new Button(ResourceUtils.getString(EditorResources.CANCEL));
+
+        Panel panel = new Panel();
+        panel.add(yes);
+        panel.add(no);
+        panel.add(cancel);
+        dialog.add(panel);
+
+        DialogListener listener = new DialogListener(dialog, yes, no, cancel);
+
+        dialog.setSize(220, 130);
+        dialog.show();
+
+        return listener.getState();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/AwtFileMenuManager.java b/src/com/ibm/richtext/demo/AwtFileMenuManager.java
new file mode 100755
index 0000000..29df2d4
--- /dev/null
+++ b/src/com/ibm/richtext/demo/AwtFileMenuManager.java
@@ -0,0 +1,49 @@
+/*
+ * @(#)$RCSfile: AwtFileMenuManager.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.awt.Menu;
+import java.awt.MenuItem;
+
+final class AwtFileMenuManager extends FileMenuManager {
+
+    private Menu fMenu;
+    
+    public AwtFileMenuManager(Menu menu,
+                              EditApplication application, 
+                              DocumentWindow document,
+                              boolean supportStyledFormat,
+                              boolean supportPlainFormat) {
+                          
+        super(application, document);
+        
+        fMenu = menu;
+        createItems(supportStyledFormat, supportPlainFormat);
+        fMenu = null;
+    }
+    
+    protected Object addMenuItem(String key) {
+
+        MenuItem item = ResourceUtils.createMenuItem(key);
+        item.addActionListener(this);
+        fMenu.add(item);
+        return item;
+    }
+    
+    protected void addSeparator() {
+    
+        fMenu.add(new MenuItem("-"));
+    }
+}
diff --git a/src/com/ibm/richtext/demo/CodeEdit.java b/src/com/ibm/richtext/demo/CodeEdit.java
new file mode 100755
index 0000000..0a613b5
--- /dev/null
+++ b/src/com/ibm/richtext/demo/CodeEdit.java
@@ -0,0 +1,123 @@
+/*
+ * @(#)$RCSfile: CodeEdit.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.awt.FileDialog;
+import java.awt.Frame;
+import java.awt.Menu;
+import java.awt.MenuBar;
+import java.awt.Toolkit;
+
+import java.io.File;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.textpanel.TextPanelSettings;
+import com.ibm.richtext.awtui.AwtMenuBuilder;
+
+public class CodeEdit extends EditApplication {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    
+    protected final TextPanelSettings fSettings;
+    
+    public static synchronized void main(String[] args) {
+
+        if (args.length > 0 && args[0].equals("-swing")) {
+            new com.ibm.richtext.swingdemo.SwingCodeEdit(args,1);
+        }
+        else {
+            new CodeEdit(args, 0);
+        }
+    }
+
+    protected CodeEdit(String[] args, int start) {
+
+        super(Toolkit.getDefaultToolkit().getSystemClipboard(),
+              TextDocument.PLAIN_TEXT);
+
+        AttributeMap defaultStyle = new AttributeMap(TextAttribute.SIZE, new Float(12))
+                                       .addAttribute(TextAttribute.FAMILY, "Monospaced");
+                                       
+        fSettings = TextPanel.getDefaultSettings();
+        fSettings.setWraps(false);
+        fSettings.addDefaultValues(defaultStyle);
+        
+        if (args.length == start) {
+            doNewWindow();
+        }
+        else {
+            boolean openedADocument = false;
+            for (int i=start; i < args.length; i++) {
+
+                File file = new File(args[i]);
+                TextDocument document = null;
+                Throwable error = null;
+                try {
+                    document = TextDocument.createFromFile(file, TextDocument.PLAIN_TEXT);
+                }
+                catch(Exception e) {
+                    error = e;
+                }
+                
+                if (error != null) {
+                    error.printStackTrace();
+                }
+                else {
+                    addDocument(document);
+                    openedADocument = true;
+                }
+            }
+            if (!openedADocument) {
+                quit();
+            }
+        }
+    }
+    
+    protected DocumentWindow createDocumentWindow(TextDocument document) {
+
+        return new AwtDocumentWindow(this, 
+                                  document,
+                                  fSettings,
+                                  false,
+                                  new SyntaxColorer(),
+                                  false,
+                                  true,
+                                  menus);
+    }
+    
+    protected static final int[] menus = { AwtMenuBuilder.EDIT, 
+                                           AwtMenuBuilder.BIDI,
+                                           AwtMenuBuilder.ABOUT };
+
+    public TextDocument openDocument(Frame dialogParent) {
+    
+        String title = ResourceUtils.getString(EditorResources.OPEN_TITLE);
+        
+        File file = AwtDocumentWindow.getFileFromDialog(null, title, dialogParent, FileDialog.LOAD);
+        if (file != null) {
+            try {
+                return TextDocument.createFromFile(file, TextDocument.PLAIN_TEXT);
+            }
+            catch(Exception e) {
+            }
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/DocumentWindow.java b/src/com/ibm/richtext/demo/DocumentWindow.java
new file mode 100755
index 0000000..8064003
--- /dev/null
+++ b/src/com/ibm/richtext/demo/DocumentWindow.java
@@ -0,0 +1,34 @@
+/*
+ * @(#)$RCSfile: DocumentWindow.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+public interface DocumentWindow {
+
+    public void doNew();
+    
+    public void doOpen();
+    
+    public boolean doClose();
+    
+    public boolean doSave();
+    
+    public boolean doSaveAs(int format);
+    
+    public void doPrint();
+    
+    public void setSize(int wd, int ht);
+    
+    public void show();
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/EditApplication.java b/src/com/ibm/richtext/demo/EditApplication.java
new file mode 100755
index 0000000..3a2e497
--- /dev/null
+++ b/src/com/ibm/richtext/demo/EditApplication.java
@@ -0,0 +1,128 @@
+/*
+ * @(#)$RCSfile: EditApplication.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.awt.Frame;
+import java.awt.MenuBar;
+
+import java.awt.datatransfer.Clipboard;
+
+import java.text.MessageFormat;
+
+import java.util.Vector;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelSettings;
+
+public abstract class EditApplication {
+
+    private Clipboard fClipboard;
+    private int fDefaultFormat;
+    private Vector fWindows = new Vector();
+    private int fUntitledCount = 0;
+    
+    protected EditApplication(Clipboard clipboard, int defaultFormat) {
+        
+        fClipboard = clipboard;
+        fDefaultFormat = defaultFormat;
+    }
+    
+    /**
+     * New documents are named "Untitled 1", "Untitled 2", etc.  This
+     * method returns the appropriate name for the next new document.
+     * @return the next new document name
+     */
+    private String getNextNewName() {
+
+        fUntitledCount += 1;
+        String pattern = ResourceUtils.getString(EditorResources.UNTITLED_MSG);
+        return MessageFormat.format(pattern,
+                                    new Object[]{new Integer(fUntitledCount)});
+    }
+    
+    public final Clipboard getClipboard() {
+        
+        return fClipboard;
+    }
+
+    protected abstract DocumentWindow createDocumentWindow(TextDocument document);
+    
+    public abstract TextDocument openDocument(Frame dialogParent);
+    
+    public final TextDocument createNewDocument() {
+    
+        String name = getNextNewName();
+        int format = fDefaultFormat;
+        return TextDocument.createEmpty(name, format);
+    }
+    
+    public final void doNewWindow() {
+        
+        addDocument(TextDocument.createEmpty(getNextNewName(), fDefaultFormat));
+    }
+    
+    public final void addDocument(TextDocument document) {
+        
+        final DocumentWindow window = createDocumentWindow(document);
+
+        window.setSize(500, 400);
+        window.show();
+        fWindows.addElement(window);
+    }
+    
+    /**
+     * Remove document from list of documents.  Quit application if list
+     * length falls to zero.
+     * @param document the document to remove
+     */
+    public final void removeDocumentWindow(DocumentWindow window) {
+
+        fWindows.removeElement(window);
+        if (fWindows.isEmpty()) {
+            quit();
+        }
+    }
+
+    /**
+     * Go through list of documents and attempt to close each document.
+     * If all documents close successfully, then exit.
+     */
+    public final void doExit() {
+
+        // Clone fWindows since it can get modified while being traversed.
+        Vector windows = (Vector) fWindows.clone();
+
+        int size = windows.size();
+        for (int i=0; i < size; i++) {
+            DocumentWindow window = (DocumentWindow) windows.elementAt(i);
+            if (!window.doClose()) {
+                return;
+            }
+        }
+
+        // quit will be called when last document removes itself
+    }
+
+    /**
+     * Called when last document window closes.  Default implementation
+     * calls System.exit.
+     */
+    protected void quit() {
+
+        System.exit(0);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/EditDemo.java b/src/com/ibm/richtext/demo/EditDemo.java
new file mode 100755
index 0000000..27e0884
--- /dev/null
+++ b/src/com/ibm/richtext/demo/EditDemo.java
@@ -0,0 +1,134 @@
+/*
+ * @(#)$RCSfile: EditDemo.java,v $ $Revision: 1.2 $ $Date: 2000/04/22 03:30:52 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.awt.FileDialog;
+import java.awt.Frame;
+import java.awt.Menu;
+import java.awt.MenuBar;
+import java.awt.Toolkit;
+
+import java.io.File;
+import java.io.StreamCorruptedException;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.textpanel.TextPanelSettings;
+
+/**
+ * EditDemo is the main class for a simple, multiple-document
+ * styled text editor, built with the classes in the textpanel
+ * and textframe packages.
+ * <p>
+ * To run EditDemo, type:
+ * <blockquote><pre>
+ * java com.ibm.richtext.demo.EditDemo [file1] [file2] [...]
+ * </pre></blockquote>
+ * where the filenames are files saved with this demo.
+ */
+public class EditDemo extends EditApplication {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    
+    public static synchronized void main(String[] args) {
+
+        if (args.length > 0 && args[0].equals("-swing")) {
+            new com.ibm.richtext.swingdemo.SwingEditDemo(args,1);
+        }
+        else {
+            new EditDemo(args, 0);
+        }
+    }
+
+    protected EditDemo(String[] args, int start) {
+
+        super(Toolkit.getDefaultToolkit().getSystemClipboard(), 
+              TextDocument.STYLED_TEXT);
+
+        if (args.length == start) {
+            doNewWindow();
+        }
+        else {
+            boolean openedADocument = false;
+            for (int i=start; i < args.length; i++) {
+
+                File file = new File(args[i]);
+                TextDocument document = getDocumentFromFile(file);
+                
+                if (document != null) {
+                    addDocument(document);
+                    openedADocument = true;
+                }
+            }
+            if (!openedADocument) {
+                quit();
+            }
+        }
+    }
+    
+    public static TextDocument getDocumentFromFile(File file) {
+    
+        Exception exception = null;
+        
+        try {
+            return TextDocument.createFromFile(file, TextDocument.STYLED_TEXT);
+        }
+        catch(StreamCorruptedException e) {
+            try {
+                return TextDocument.createFromFile(file, TextDocument.PLAIN_TEXT);
+            }
+            catch(Exception e2) {
+                exception = e2;
+            }
+        }
+        catch(Exception e) {
+            exception = e;
+        }
+        
+        System.err.println("Exception opening file.");
+        exception.printStackTrace();
+        
+        return null;
+    }
+    
+    protected DocumentWindow createDocumentWindow(TextDocument document) {
+        
+        return new AwtDocumentWindow(this, 
+                                     document,
+                                     TextPanel.getDefaultSettings(),
+                                     true,
+                                     null,
+                                     true,
+                                     true,
+                                     null);
+    }
+    
+    public TextDocument openDocument(Frame dialogParent) {
+    
+        String title = ResourceUtils.getString(EditorResources.OPEN_TITLE);
+        File file = AwtDocumentWindow.getFileFromDialog(null,
+                                                     title,
+                                                     dialogParent,
+                                                     FileDialog.LOAD);
+        if (file != null) {
+            return getDocumentFromFile(file);
+        }
+        else {
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/EditorResources.java b/src/com/ibm/richtext/demo/EditorResources.java
new file mode 100755
index 0000000..3f43eb8
--- /dev/null
+++ b/src/com/ibm/richtext/demo/EditorResources.java
@@ -0,0 +1,107 @@
+/*
+ * @(#)$RCSfile: EditorResources.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.util.ListResourceBundle;
+import java.awt.event.KeyEvent;
+
+public final class EditorResources extends ListResourceBundle {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    // menu names - values are Strings
+    public static final String FILE = "File";
+
+    // file menu items - values are MenuData instances
+    public static final String NEW = "New";
+    public static final String NEW_WINDOW = "New Window";
+    public static final String OPEN = "Open...";
+    public static final String SAVE = "Save";
+    public static final String SAVE_AS = "Save As...";
+    public static final String SAVE_AS_STYLED = "Save As Styled Text...";
+    public static final String SAVE_AS_TEXT = "Save As Plain Text...";
+    public static final String CLOSE = "Close";
+    public static final String PRINT = "Print";
+    public static final String EXIT = "Exit";
+
+    // button labels - values are Strings
+    public static final String YES = "Yes";
+    public static final String NO = "No";
+    public static final String CANCEL = "Cancel";
+
+    // message strings - values are Strings
+    public static final String SAVE_MSG = "Save {0} before closing?";
+    public static final String UNTITLED_MSG = "Untitled {0}";
+
+    // window and dialog titles - values are Strings
+    public static final String OPEN_TITLE = "Open Document";
+    public static final String SAVE_TITLE = "Save As";
+
+    /**
+     * Convenience method that returns a two-element
+     * Object array.  The first element is name, the
+     * second is a MenuData instance with the given
+     * shortcut.
+     */
+    private static Object[] makeEntry(String name,
+                                      char shortCut,
+                                      int keyCode) {
+
+        return new Object[] { name, new MenuData(name, shortCut, keyCode) };
+    }
+
+    /**
+     * Convenience method that returns a two-element
+     * Object array.  The first element is name, the
+     * second is a MenuData instance.
+     */
+    private static Object[] makeEntry(String name) {
+
+        return new Object[] { name, new MenuData(name) };
+    }
+
+    /**
+     * Convenience method that returns a two-element
+     * Object array in which both elements are obj.
+     */
+    private static Object[] duplicate(Object obj) {
+
+        return new Object[] { obj, obj };
+    }
+
+    protected Object[][] getContents() {
+
+        return new Object[][] {
+            duplicate(FILE),
+            duplicate(YES),
+            duplicate(NO),
+            duplicate(CANCEL),
+            duplicate(SAVE_MSG),
+            duplicate(SAVE_TITLE),
+            duplicate(OPEN_TITLE),
+            duplicate(UNTITLED_MSG),
+            makeEntry(NEW, 'n', KeyEvent.VK_N),
+            makeEntry(NEW_WINDOW),
+            makeEntry(OPEN, 'o', KeyEvent.VK_O),
+            makeEntry(SAVE, 's', KeyEvent.VK_S),
+            makeEntry(SAVE_AS),
+            makeEntry(SAVE_AS_STYLED),
+            makeEntry(SAVE_AS_TEXT),
+            makeEntry(CLOSE),
+            makeEntry(PRINT),
+            makeEntry(EXIT),
+        };
+    }
+}
diff --git a/src/com/ibm/richtext/demo/FileMenuManager.java b/src/com/ibm/richtext/demo/FileMenuManager.java
new file mode 100755
index 0000000..a19c04d
--- /dev/null
+++ b/src/com/ibm/richtext/demo/FileMenuManager.java
@@ -0,0 +1,116 @@
+/*
+ * @(#)$RCSfile: FileMenuManager.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+/**
+ * This class creates a File menu and manages user interactions
+ * with the menu.
+ */
+public abstract class FileMenuManager implements ActionListener {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private EditApplication fApplication;
+    private DocumentWindow fDocumentWindow;
+    private Object fNew, fNewWindow, fOpen, fSave;
+    private Object fSaveAsStyled, fSaveAsText, fClose, fPrint, fExit;
+
+    protected FileMenuManager(EditApplication application, 
+                              DocumentWindow document) {
+
+        fApplication = application;
+        fDocumentWindow = document;
+    }
+    
+    protected final void createItems(boolean supportStyledFormat,
+                                     boolean supportPlainFormat) {
+        
+        if (!supportStyledFormat && !supportPlainFormat) {
+            throw new IllegalArgumentException("Must support at least one format.");
+        }
+        
+        fNew = addMenuItem(EditorResources.NEW);
+        fNewWindow = addMenuItem(EditorResources.NEW_WINDOW);
+        
+        addSeparator();
+
+        fOpen = addMenuItem(EditorResources.OPEN);
+
+        fSave = addMenuItem(EditorResources.SAVE);
+        
+        if (supportStyledFormat) {
+            if (supportPlainFormat) {
+                fSaveAsStyled = addMenuItem(EditorResources.SAVE_AS_STYLED);
+                fSaveAsText = addMenuItem(EditorResources.SAVE_AS_TEXT);
+            }
+            else {
+                fSaveAsStyled = addMenuItem(EditorResources.SAVE_AS);
+            }
+        }
+        else {
+            fSaveAsText = addMenuItem(EditorResources.SAVE_AS);
+        }
+        
+        addSeparator();
+        fClose = addMenuItem(EditorResources.CLOSE);
+        addSeparator();
+        fPrint = addMenuItem(EditorResources.PRINT);
+        addSeparator();
+        fExit = addMenuItem(EditorResources.EXIT);
+    }
+    
+    protected abstract Object addMenuItem(String key);
+
+    protected abstract void addSeparator();
+    
+    public final void actionPerformed(ActionEvent event) {
+
+        Object source = event.getSource();
+
+        if (source == fNew) {
+            fDocumentWindow.doNew();
+        }
+        else if (source == fNewWindow) {
+            fApplication.doNewWindow();
+        }
+        else if (source == fOpen) {
+            fDocumentWindow.doOpen();
+        }
+        else if (source == fClose) {
+            fDocumentWindow.doClose();
+        }
+        else if (source == fSave) {
+            fDocumentWindow.doSave();
+        }
+        else if (source == fSaveAsStyled) {
+            fDocumentWindow.doSaveAs(TextDocument.STYLED_TEXT);
+        }
+        else if (source == fSaveAsText) {
+            fDocumentWindow.doSaveAs(TextDocument.PLAIN_TEXT);
+        }
+        else if (source == fPrint) {
+            fDocumentWindow.doPrint();
+        }
+        else if (source == fExit) {
+            fApplication.doExit();
+        }
+        else {
+            throw new Error("Unknown event source: " + source);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/MenuData.java b/src/com/ibm/richtext/demo/MenuData.java
new file mode 100755
index 0000000..cdf41e9
--- /dev/null
+++ b/src/com/ibm/richtext/demo/MenuData.java
@@ -0,0 +1,62 @@
+/*
+ * @(#)$RCSfile: MenuData.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+public final class MenuData {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private String fName;
+    private boolean fHasShortcut;
+    private char fShortcut;
+    private int fShortcutKeyCode;
+
+    public MenuData(String name) {
+
+        fName = name;
+        fHasShortcut = false;
+    }
+
+    public MenuData(String name, char ch, int keyCode) {
+
+        fName = name;
+        fHasShortcut = true;
+        fShortcut = ch;
+        fShortcutKeyCode = keyCode;
+    }
+
+    public String getName() {
+
+        return fName;
+    }
+
+    public char getShortcut() {
+
+        if (!fHasShortcut) {
+            throw new Error("Menu doesn't have shortcut");
+        }
+        return fShortcut;
+    }
+    
+    public int getShortcutKeyCode() {
+    
+        return fShortcutKeyCode;
+    }
+
+    public boolean hasShortcut() {
+
+        return fHasShortcut;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/ResourceUtils.java b/src/com/ibm/richtext/demo/ResourceUtils.java
new file mode 100755
index 0000000..e67df81
--- /dev/null
+++ b/src/com/ibm/richtext/demo/ResourceUtils.java
@@ -0,0 +1,75 @@
+/*
+ * @(#)$RCSfile: ResourceUtils.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.awt.MenuItem;
+import java.awt.MenuShortcut;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * Utility class for dealing with resource data.
+ */
+public final class ResourceUtils {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static ResourceBundle BUNDLE;
+    static {
+        String bundleName = "com.ibm.richtext.demo.EditorResources";
+        try {
+            BUNDLE = ResourceBundle.getBundle(bundleName);
+        }
+        catch(MissingResourceException e) {
+            System.out.println("Couldn't load " + bundleName +
+                               ";  Exception: " + e);
+            BUNDLE = new EditorResources();
+        }
+    }
+
+    public static String getString(String key) {
+
+        try {
+            return BUNDLE.getString(key);
+        }
+        catch(MissingResourceException e) {
+            return key;
+        }
+    }
+
+    public static MenuData getMenuData(String key) {
+    
+        try {
+            return (MenuData) BUNDLE.getObject(key);
+        }
+        catch(MissingResourceException e) {
+            return new MenuData(key);
+        }
+    }
+        
+    public static MenuItem createMenuItem(String key) {
+
+        MenuData menuData = getMenuData(key);
+
+        if (menuData.hasShortcut()) {
+            MenuShortcut shortcut = new MenuShortcut(menuData.getShortcut());
+            return new MenuItem(menuData.getName(), shortcut);
+        }
+        else {
+            return new MenuItem(menuData.getName());
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/SyntaxColorer.java b/src/com/ibm/richtext/demo/SyntaxColorer.java
new file mode 100755
index 0000000..cf48730
--- /dev/null
+++ b/src/com/ibm/richtext/demo/SyntaxColorer.java
@@ -0,0 +1,288 @@
+/*
+ * $RCSfile: SyntaxColorer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+
+package com.ibm.richtext.demo;
+
+import com.ibm.richtext.awtui.TextFrame;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.textpanel.TextPanelListener;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import java.awt.Color;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import java.text.BreakIterator;
+import java.text.CharacterIterator;
+import java.text.CollationKey;
+import java.text.Collator;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+/**
+ * SyntaxColorer is a TextPanelListener that applies a style
+ * to a set of words in the TextPanel.
+ */
+public final class SyntaxColorer implements TextPanelListener {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    
+    private static final class Colorer {
+        
+        static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+        private int fStart;
+        private Hashtable fStyleMap;
+        private Collator fCollator = Collator.getInstance();
+        private BreakIterator fBreakIter = BreakIterator.getWordInstance();
+
+        private String fText;
+        private int fCurrentStart;
+        private int fCurrentLimit;
+        private AttributeMap fCurrentStyle;
+        
+        Colorer(Hashtable styles) {
+
+            fStyleMap = new Hashtable(styles.size());
+
+            Enumeration e = styles.keys();
+            while (e.hasMoreElements()) {
+                String k = (String) e.nextElement();
+                fStyleMap.put(fCollator.getCollationKey(k), styles.get(k));
+            }
+        }
+        
+        void set(CharacterIterator text, int start, int limit) {
+            
+            fStart = start;
+
+            StringBuffer sb = new StringBuffer(limit-start);
+            for (char c=text.setIndex(start); text.getIndex() != limit; c=text.next()) {
+                sb.append(c);
+            }
+            fText = sb.toString();
+            fCurrentStart = fCurrentLimit = 0;
+            fCurrentStyle = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+            
+            fBreakIter.setText(fText);
+            fBreakIter.first();
+        }
+            
+        boolean next() {
+            
+            if (fCurrentLimit == fText.length()) {
+                fText = null;
+                return false;
+            }
+
+            fCurrentStart = fCurrentLimit;
+            fCurrentLimit = fBreakIter.next();
+            
+            String word = fText.substring(fCurrentStart, fCurrentLimit);
+            CollationKey ck = fCollator.getCollationKey(word);
+            fCurrentStyle = (AttributeMap) fStyleMap.get(ck);
+            if (fCurrentStyle == null) {
+                fCurrentStyle = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+            }
+            
+            return true;
+        }
+            
+        int currentStart() {
+            return fCurrentStart + fStart;
+        }
+        
+        int currentLimit() {
+            return fCurrentLimit + fStart;
+        }
+        
+        AttributeMap currentStyle() {
+            return fCurrentStyle;
+        }
+    }
+
+    private BreakIterator fBreakIter = BreakIterator.getWordInstance();
+    private Colorer fColorer;
+    private boolean fModifying = false;
+    private AttributeMap fDefaultKeywordStyle = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+    private Hashtable fModifierCache;
+    
+    public SyntaxColorer() {
+        
+        this(null);
+    }
+    
+    public SyntaxColorer(MTextPanel panel) {
+        
+        Hashtable ht = new Hashtable();
+
+        //Uncomment this to make keywords appear right-to-left!
+        //fDefaultKeywordStyle = fDefaultKeywordStyle.addAttribute(TextAttribute.BIDI_EMBEDDING, 
+        //                                                         new Integer(-1));
+        
+        fDefaultKeywordStyle = fDefaultKeywordStyle.addAttribute(TextAttribute.UNDERLINE,
+                                                                 TextAttribute.UNDERLINE_ON);
+        fDefaultKeywordStyle = fDefaultKeywordStyle.addAttribute(TextAttribute.FOREGROUND, 
+                                                                 Color.blue);
+        
+        String[] javaWords = {"abstract" , "boolean", "break", "byte",
+                              "byvalue", "case", "cast", "default",
+                              "do", "double", "else", "extends", 
+                              "false", "final", "goto", "if",
+                              "implements", "import", "inner", "instanceof",
+                              "int", "operator", "outer", "package",
+                              "private", "protected", "public", "rest",
+                              "synchronized", "this", "throw", "throws",
+                              "transient", "true", "try",
+                              "catch", "char", "const", "continue",
+                              "finally", "float", "for", "future",
+                              "generic", "interface", "long", "native",
+                              "new", "null", "return", "short",
+                              "static", "super", "switch", "var",
+                              "void", "volatile", "while", "class"};
+
+        for (int i=0; i < javaWords.length; i++) {
+            ht.put(javaWords[i], fDefaultKeywordStyle);
+        }
+        
+        fColorer = new Colorer(ht);
+        
+        if (panel != null) {
+            MConstText text = panel.getText();
+            colorRange(0, text.length(), text.createCharacterIterator(), panel);
+        }
+        
+        fModifierCache = new Hashtable(2);
+        fModifierCache.put(fDefaultKeywordStyle, 
+                           StyleModifier.createReplaceModifier(fDefaultKeywordStyle));
+        fModifierCache.put(AttributeMap.EMPTY_ATTRIBUTE_MAP, 
+                           StyleModifier.createReplaceModifier(AttributeMap.EMPTY_ATTRIBUTE_MAP));
+    }
+    
+    public boolean respondsToEventType(int type) {
+        
+        return type == TextPanelEvent.TEXT_CHANGED;
+    }
+    
+    public void textEventOccurred(TextPanelEvent e) {
+
+        if (fModifying) {
+            return;
+        }
+        
+        MTextPanel panel = (MTextPanel) e.getSource();
+        
+        final MConstText text = panel.getText();
+        int start = text.damagedRangeStart();
+        int limit = text.damagedRangeLimit();
+        if (start > limit) {
+            return;
+        }
+        
+        CharacterIterator textIter = text.createCharacterIterator();
+        
+        fBreakIter.setText(textIter);
+        if (start > 0) {
+            if (start == text.length()) {
+                fBreakIter.last();
+            }
+            else {
+                fBreakIter.following(start-1);
+            }
+            start = fBreakIter.previous();
+        }
+        if (limit < text.length()) {
+            fBreakIter.following(limit);
+            int l;
+            if ((l=fBreakIter.previous()) <= limit) {
+                limit = fBreakIter.next();
+            }
+        }
+        
+        fModifying = true;
+        colorRange(start, limit, textIter, panel);
+        fModifying = false;
+    }
+    
+    private void colorRange(final int start, 
+                            final int limit, 
+                            CharacterIterator textIter,
+                            MTextPanel panel) {
+        
+        fColorer.set(textIter, start, limit);
+
+        MConstText oldText = panel.getText();
+        MText newText = null;
+        
+        while (fColorer.next()) {
+
+            int rangeStart = fColorer.currentStart();
+            int rangeLimit = fColorer.currentLimit();
+            
+            AttributeMap style = fColorer.currentStyle();
+            
+            if (oldText.characterStyleLimit(rangeStart) < rangeLimit ||
+                    oldText.characterStyleAt(rangeStart) != style) {
+            
+                int cstart = rangeStart-start;
+                int climit = rangeLimit-start;
+                if (newText == null) {
+                    newText = new StyledText(oldText, start, limit);
+                }
+                StyleModifier mod = (StyleModifier) fModifierCache.get(style);
+                newText.modifyCharacterStyles(cstart, climit, mod);
+            }
+        }
+        
+        if (newText != null) {
+        
+            int oldStart = panel.getSelectionStart();
+            int oldLimit = panel.getSelectionEnd();
+            
+            panel.replaceRange(newText, start, limit);            
+    
+            panel.select(oldStart, oldLimit);
+            if (oldStart == oldLimit) {
+                StyleModifier mod = (StyleModifier) fModifierCache.get(AttributeMap.EMPTY_ATTRIBUTE_MAP);                
+                panel.modifyCharacterStyleOnSelection(mod);
+            }
+        }
+    }
+    
+    public static void main(String[] args) {
+        
+        TextFrame f = new TextFrame();
+        f.addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
+        f.setSize(400, 300);
+        MTextPanel panel = f.getTextPanel();
+        panel.addListener(new SyntaxColorer(panel));
+        f.show();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/demo/TextDocument.java b/src/com/ibm/richtext/demo/TextDocument.java
new file mode 100755
index 0000000..2e14e9e
--- /dev/null
+++ b/src/com/ibm/richtext/demo/TextDocument.java
@@ -0,0 +1,347 @@
+/*
+ * @(#)$RCSfile: TextDocument.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:43:09 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.demo;
+
+import java.io.*;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+/**
+ * A TextDocument handles the association between a file on disk
+ * and a TextPanel.
+ */
+public final class TextDocument {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final int BUF_SIZE = 1024;
+    
+    private String fTitle;
+    private MConstText fText;
+    private File fFile;
+    private MTextPanel fTextPanel = null;
+    private boolean isModified = false;
+    private int fFormat = STYLED_TEXT;
+    
+    private TextDocument(String title,
+                         MConstText text,
+                         File file,
+                         int format) {
+        
+        fTitle = title;
+        fText = text;
+        fFile = file;
+        setFormat(format);
+    }
+    
+    public static final int STYLED_TEXT = 0;
+    public static final int PLAIN_TEXT = 1;
+    
+    /** 
+     * Return a new TextDocument with no associated file and
+     * empty text.
+     */
+    public static TextDocument createEmpty(String title, int format) {
+        
+        return new TextDocument(title, new StyledText(), null, format);
+    }
+    
+    /**
+     * Return a TextDocument created from the contents of the given
+     * file.  This method may throw an exception if the file cannot
+     * be read.  In particular, if the format is given as STYLED_TEXT
+     * but the file does not contain a serialized MConstText, 
+     * this method will throw StreamCorruptedException.
+     */
+    public static TextDocument createFromFile(File file, int format) throws Exception {
+        
+        if (format != STYLED_TEXT && format != PLAIN_TEXT) {
+            throw new IllegalArgumentException("Invalid format");
+        }
+        
+        MConstText text;
+        if (format == STYLED_TEXT) {
+            text = readMText(file);
+        }
+        else {
+            text = readMTextFromTextFile(file);
+        }
+        
+        TextDocument document = new TextDocument(file.getName(), 
+                                                 text,
+                                                 file,
+                                                 format);
+        return document;
+    }
+    
+    /**
+     * Return true if this document's text differs from the contents
+     * of its file.
+     */
+    public boolean isModified() {
+        
+        if (fTextPanel == null) {
+            return isModified;
+        }
+        else {
+            return fTextPanel.isModified();
+        }
+    }
+    
+    /**
+     * Set the MTextPanel that will be used to edit the document's
+     * text.  The document's text becomes the contents of the
+     * MTextPanel.
+     */
+    public void setTextPanel(MTextPanel textPanel) {
+
+        if (fTextPanel != null) {
+            fText = fTextPanel.getText();
+            isModified = fTextPanel.isModified();
+        }
+        
+        fTextPanel = textPanel;
+        
+        if (fTextPanel != null) {
+            fTextPanel.setText(fText);
+            fText = null;
+            fTextPanel.setModified(isModified);
+            fTextPanel.clearCommandLog();
+        }
+    }
+    
+    public File getFile() {
+    
+        return fFile;
+    }
+    
+    /**
+     * Set this document's file.  The document's title will
+     * change to the file name.  The file cannot be null.
+     */
+    public void setFile(File file) {
+        
+        fFile = file;
+        fTitle = file.getName();
+    }
+    
+    /**
+     * Set the format of this document.  The format determines
+     * whether the document will be written to files as styled
+     * text or plain characters.
+     */
+    public void setFormat(int format) {
+        
+        if (format != STYLED_TEXT && format != PLAIN_TEXT) {
+            throw new IllegalArgumentException("Invalid format");
+        }
+        fFormat = format;
+    }
+    
+    /**
+     * Return the format of this document.
+     */
+    public int getFormat() {
+        
+        return fFormat;
+    }
+    
+    /**
+     * Write the document's text to its file.  If the document does
+     * not have an associated file then this method is equivalent to
+     * saveAs.  This method returns true if the save operation succeeds.
+     */
+    public boolean save() {
+
+        if (fFile == null) {
+            throw new RuntimeException("Can't save without a file.");
+        }
+                
+        MConstText text = getText();
+        boolean success = fFormat==STYLED_TEXT? writeMText(fFile, text) :
+                                                writePlainMText(fFile, text);
+        if (success && fTextPanel != null) {
+            fTextPanel.setModified(false);
+        }
+        return success;
+    }
+    
+    /** 
+     * Return this document's styled text.
+     */
+    public MConstText getText() {
+        
+        if (fTextPanel == null) {
+            return fText;
+        }
+        else {
+            return fTextPanel.getText();
+        }
+    }
+    
+    /**
+     * Return the title of this document.
+     */
+    public String getTitle() {
+        
+        return fTitle;
+    }
+    
+    /**
+     * Return the MText serialized in the given file.
+     * In case of an error return null.
+     */
+    private static MConstText readMText(File file) throws Exception {
+
+        FileInputStream inStream = null;
+        
+        try {
+            inStream = new FileInputStream(file);
+            ObjectInputStream objStream = new ObjectInputStream(inStream);
+
+            return (MConstText) objStream.readObject();
+        }
+        finally {
+            if (inStream != null) {
+                try {
+                    inStream.close();
+                }
+                catch(IOException e) {
+                }
+            }
+        }
+    }
+    
+    /**
+     * Read the given file as a plain text file, and return its
+     * contents as an MConstText.  The character and paragraph styles in 
+     * the returned text will be EMPTY_ATTRIBUTE_MAP.
+     */
+    private static MConstText readMTextFromTextFile(File file) throws Exception {
+        
+        InputStreamReader in = null;
+        
+        try {
+            in = new FileReader(file);
+            
+            MText text = new StyledText();
+            
+            char[] buf = new char[BUF_SIZE];
+            int read;
+            while ((read=in.read(buf, 0, buf.length)) != -1) {
+                int len = text.length();
+                text.replace(len, len, buf, 0, read, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+            }
+            return text;
+        }
+        finally {
+            if (in != null) {
+                try {
+                    in.close();
+                }
+                catch(IOException e) {
+                }
+            }
+        }
+    }
+
+    /**
+     * Attempt to save the given text in the given file.
+     * @return true if the operation succeeded
+     */
+    private static boolean writeMText(File file, MConstText text) {
+
+        Throwable error = null;
+        OutputStream outStream = null;
+        
+        try {
+            outStream = new FileOutputStream(file);
+            ObjectOutputStream objStream = new ObjectOutputStream(outStream);
+
+            objStream.writeObject(text);
+        }
+        catch(IOException e) {
+            error = e;
+        }
+        catch(ClassCastException e) {
+            error = e;
+        }
+        finally {
+            if (outStream != null) {
+                try {
+                    outStream.close();
+                }
+                catch(IOException e) {
+                }
+            }
+        }
+
+
+        if (error != null) {
+            error.printStackTrace();
+            return false;
+        }
+        else {
+            return true;
+        }
+    }
+
+    /**
+     * Write the given MConstText to the given file as plain text.
+     */
+    private static boolean writePlainMText(File file, MConstText text) {
+
+        Throwable error = null;
+        OutputStreamWriter outStream = null;
+        
+        try {
+            outStream = new FileWriter(file);
+            char[] buf = new char[BUF_SIZE];
+            int length = text.length();
+            int start = 0;
+            do {
+                int count = Math.min(length-start, buf.length);
+                text.extractChars(start, start+count, buf, 0);
+                outStream.write(buf, 0, count);
+                start += count;
+            } while (start < length);
+        }
+        catch(IOException e) {
+            error = e;
+        }
+        finally {
+            if (outStream != null) {
+                try {
+                    outStream.close();
+                }
+                catch(IOException e) {
+                }
+            }
+        }
+
+
+        if (error != null) {
+            error.printStackTrace();
+            return false;
+        }
+        else {
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/print/MConstTextPrintable.java b/src/com/ibm/richtext/print/MConstTextPrintable.java
new file mode 100755
index 0000000..83fbdbc
--- /dev/null
+++ b/src/com/ibm/richtext/print/MConstTextPrintable.java
@@ -0,0 +1,162 @@
+/*
+ * @(#)$RCSfile: MConstTextPrintable.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:44:33 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.print;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.richtext.textformat.MFormatter;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Rectangle;
+
+import java.util.Vector;
+
+/**
+ * This class's interface is very close to that of the JDK 1.2 Printable 
+ * interface, but can execute on JDK 1.1.  On 1.2, this class is wrapped
+ * in a real Printable.  On 1.1, the PrintContext class uses this class
+ * and a PrintJob for printing.
+ *
+ * Note that this class paginates the text in the first call to print,
+ * or to getPageCount.
+ * After construction, its page size is essentially fixed.  This is not 
+ * as flexible as the 1.2 classes allow, but it should suffice.
+ */
+final class MConstTextPrintable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    static final int PAGE_EXISTS = 0;
+    static final int NO_SUCH_PAGE = 1;
+    
+    private MConstText fText;
+    private AttributeMap fDefaultStyles;
+    private Rectangle fPageRect;
+    
+    // If these two fields are null the text has not been paginated.
+    private MFormatter fFormatter;
+    private Vector fPageStarts;
+
+    /**
+     * Construct an MConstTextPrintable to print the given text.  Each page will fit
+     * into pageRect.
+     */
+    MConstTextPrintable(MConstText text, 
+                        AttributeMap defaultStyles,
+                        Rectangle pageRect) {
+
+        fText = text;
+        fDefaultStyles = defaultStyles;
+        fPageRect = new Rectangle(pageRect);
+    }
+    
+    private static boolean emptyParagraphAtEndOfText(MConstText text) {
+
+        if (text.length() > 0) {
+            char ch = text.at(text.length()-1);
+            return ch == '\n' || ch == '\u2029';
+        }
+        else {
+            return false;
+        }
+    }
+
+    private void paginate(Graphics graphics) {
+        
+        if (fPageStarts == null) {
+
+            fFormatter = MFormatter.createFormatter(fText,
+                                                    fDefaultStyles,
+                                                    fPageRect.width,
+                                                    true,
+                                                    graphics);
+ 
+            fFormatter.formatToHeight(Integer.MAX_VALUE);
+            fFormatter.stopBackgroundFormatting();
+
+            fPageStarts = new Vector();
+            
+            int lineCount = fFormatter.getLineCount();
+            if (emptyParagraphAtEndOfText(fText)) {
+                lineCount -= 1;
+            }
+
+            int startLine = 0;
+            fPageStarts.addElement(new Integer(startLine));
+            int startHeight = 0;
+            final int pageHeight = fPageRect.height;
+
+            while (startLine < lineCount) {
+
+                int nextStart = fFormatter.lineAtHeight(startHeight + pageHeight);
+                fPageStarts.addElement(new Integer(nextStart));
+                startHeight = fFormatter.lineGraphicStart(nextStart);
+                startLine = nextStart;
+            }
+        }
+    }
+
+    /**
+     * Print the given page in the given graphics.  Page numbers are
+     * 0-based.  The the return value indicates whether
+     * the page number is valid (as in JDK 1.2).  Since you can get the page count
+     * directly, there's really no excuse for passing in an invalid page
+     * index.
+     * @param graphics the Graphics to print to
+     * @param pageNumber the 0-based page number.  Should be nonnegative and
+     * less than getPageCount()
+     * @return PAGE_EXISTS if the page number is valid, or 
+     *         NO_SUCH_PAGE otherwise
+     */
+    int print(Graphics graphics, int pageNumber) {
+        
+        paginate(graphics);
+        
+        if (pageNumber < getPageCount(graphics) && pageNumber >= 0) {
+            graphics.setColor(Color.black); // workaround for 1.2 printing bug
+            int startLine = ((Integer)fPageStarts.elementAt(pageNumber)).intValue();
+            int limitLine = ((Integer)fPageStarts.elementAt(pageNumber+1)).intValue();
+
+            int topOfPage = fFormatter.lineGraphicStart(startLine);
+            int pageHeight = fFormatter.lineGraphicStart(limitLine) - topOfPage;
+
+            Point origin = new Point(fPageRect.x, fPageRect.y - topOfPage);
+            Rectangle drawRect = new Rectangle(fPageRect);
+            drawRect.height = pageHeight;
+            
+            fFormatter.draw(graphics, drawRect, origin);
+            return PAGE_EXISTS;
+        }
+        else {
+            return NO_SUCH_PAGE;
+        }
+    }
+    
+    /**
+     * Return the number of pages that can be printed.
+     * @param graphics a Graphics instance representative of those 
+     * which will be printed into
+     */
+    int getPageCount(Graphics graphics) {
+        
+        paginate(graphics);
+        return fPageStarts.size() - 1;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/print/PrintContext.java b/src/com/ibm/richtext/print/PrintContext.java
new file mode 100755
index 0000000..987d72e
--- /dev/null
+++ b/src/com/ibm/richtext/print/PrintContext.java
@@ -0,0 +1,81 @@
+/*
+ * @(#)$RCSfile: PrintContext.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:44:33 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+
+package com.ibm.richtext.print;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterJob;
+import java.awt.print.PrinterException;
+
+final class PrintContext implements Printable {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private MConstTextPrintable fPrintable;
+    
+    PrintContext(MConstText text, AttributeMap defaultStyles, PageFormat pf) {
+        
+        int width = (int) Math.round(pf.getImageableWidth());
+        int height = (int) Math.round(pf.getImageableHeight());
+        int left = (((int)Math.round(pf.getWidth())) - width) / 2;
+        int top = (((int)Math.round(pf.getHeight())) - height) / 2;
+        
+        Rectangle pageRect = new Rectangle(left, top, width, height);
+        fPrintable = new MConstTextPrintable(text, defaultStyles, pageRect);
+    }
+    
+    public int print(Graphics graphics,
+                     PageFormat format,
+                     int pageIndex) throws PrinterException {
+        
+        if (false)
+            throw new PrinterException("save trees");
+            
+        if (fPrintable.print(graphics, pageIndex) == fPrintable.PAGE_EXISTS) {
+            return PAGE_EXISTS;
+        }
+        else {
+            return NO_SUCH_PAGE;
+        }
+    }
+    
+    static void userPrintText(MConstText text,
+                              AttributeMap defaultStyles,
+                              Frame frame,
+                              String jobTitle) {
+
+        PrinterJob job = PrinterJob.getPrinterJob();
+        job.setJobName(jobTitle);
+        if (job.printDialog()) {
+            job.setPrintable(new PrintContext(text, defaultStyles, job.defaultPage()));
+            try {
+                job.print();
+            }
+            catch(PrinterException e) {
+                System.out.println("Printer exception: " + e);
+            }
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/print/PrintingUtils.java b/src/com/ibm/richtext/print/PrintingUtils.java
new file mode 100755
index 0000000..914be3c
--- /dev/null
+++ b/src/com/ibm/richtext/print/PrintingUtils.java
@@ -0,0 +1,51 @@
+/*
+ * @(#)$RCSfile: PrintingUtils.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:44:33 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.print;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import java.awt.Frame;
+
+/**
+ * PrintingUtils contains a static method for printing styled text.
+ * @see com.ibm.richtext.styledtext.MConstText
+ */
+public final class PrintingUtils {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    // Keep it out of Javadoc...
+    private PrintingUtils() {
+    }
+    
+    /**
+     * Print the given text.  A Print dialog is presented to the user;
+     * unless the user cancels, the text is printed.
+     * @param text the text to print
+     * @param defaultStyles default values for unspecified attributes
+     * @param frame the parent of the Print dialog
+     * @param jobTitle the title of the PrintJob
+     */
+    public static void userPrintText(MConstText text,
+                                     AttributeMap defaultStyles,
+                                     Frame frame,
+                                     String jobTitle) {
+
+        PrintContext.userPrintText(text, defaultStyles, frame, jobTitle);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/print/package.html b/src/com/ibm/richtext/print/package.html
new file mode 100755
index 0000000..5386b24
--- /dev/null
+++ b/src/com/ibm/richtext/print/package.html
@@ -0,0 +1,5 @@
+<html>
+<body bgcolor="white">
+Provides printing for styled text.
+</body>
+</html>
diff --git a/src/com/ibm/richtext/styledtext/CharBuffer.java b/src/com/ibm/richtext/styledtext/CharBuffer.java
new file mode 100755
index 0000000..7108f7a
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/CharBuffer.java
@@ -0,0 +1,379 @@
+/*
+ * @(#)$RCSfile: CharBuffer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/** An implementation of MCharBuffer that stores chars in an array with an insertion gap. */
+/*
+    Change history
+    072396 jf   - fixed a bug in replace(int, int, char[], int, int) so that it correctly
+                inserted into the middle of the buffer.
+    080296 jf   - added timestamp.  This is strictly a debugging device to help catch
+                stale iterators.
+
+    082296 jbr  added check for 0-length iterator in replace
+*/
+
+package com.ibm.richtext.styledtext;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
+import java.text.CharacterIterator;
+
+final class CharBuffer
+    extends MCharBuffer implements Externalizable
+{
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+  private static final int kGrowSize = 0x80; // small size for testing
+  private static final int CURRENT_VERSION = 1; // version code for streaming
+  private static final long serialVersionUID = 563174;
+
+  transient Validation fValidation = null;
+  private char[] fArray;
+  transient private int fArraySize;
+  transient private int fGap;
+
+  /** Create an empty char buffer. */
+  public CharBuffer()
+  {
+  }
+
+  /** Create a char buffer that can hold at least capacity chars. */
+
+  public CharBuffer(int capacity)
+  {
+    fArray = allocate(capacity);
+  }
+
+  public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+
+    if (in.readInt() != CURRENT_VERSION) {
+        throw new IOException("Invalid version of CharBuffer");
+    }
+
+    fArray = (char[]) in.readObject();
+    if (fArray != null) {
+        fArraySize = fArray.length;
+        fGap = fArraySize;
+    }
+    else {
+        fArraySize = 0;
+        fGap = 0;
+    }
+  }
+
+  public void writeExternal(ObjectOutput out) throws IOException {
+
+    compress();
+    out.writeInt(CURRENT_VERSION);
+    out.writeObject(fArray);
+  }
+
+  private void invalidate() {
+
+    if (fValidation != null) {
+        fValidation.invalidate();
+        fValidation = null;
+    }
+  }
+
+  // not ThreadSafe - could end up with two Validations
+  // being generated
+  private Validation getValidation() {
+
+    if (fValidation == null) {
+        fValidation = new Validation();
+    }
+    return fValidation;
+  }
+
+  /** Replace the chars from start to limit with the chars from srcStart to srcLimit in srcBuffer. */
+
+  /** Replace the chars from start to limit with the chars from srcStart to srcLimit in srcChars.
+  * This is the core routine for manipulating the buffer.
+  */
+  public void replace(int start, int limit, char[] srcChars, int srcStart, int srcLimit)
+  {
+    invalidate();
+    int dstLength = limit - start;
+    int srcLength = srcLimit - srcStart;
+
+    if (dstLength < 0 || srcLength < 0) {
+        throw new IllegalArgumentException("replace(int start, int limit, char[] srcChars, int srcStart, int srcLimit)");
+    }
+
+    int gapAlloc = 0;
+    if (srcChars == null) {
+        gapAlloc = srcLength;
+        srcLength = 0;
+    }
+
+    int newSize = fArraySize - dstLength + srcLength;
+
+    if (fArray == null) {
+        if (start != 0 || limit != 0) {
+            throw new IllegalArgumentException("replace(int start, int limit, char[] srcChars, int srcStart, int srcLimit)");
+        }
+        if (newSize + gapAlloc > 0) {
+            fArray = allocate(newSize + gapAlloc);
+            if (srcLength > 0) {
+                System.arraycopy(srcChars, srcStart, fArray, 0, srcLength);
+                fArraySize = srcLength;
+                fGap = srcLength;
+            }
+        }
+    } else {
+        int newGap = start + srcLength;
+        int gapLimit = fArray.length - fArraySize + fGap;
+
+        if (newSize + gapAlloc > fArray.length) {
+            char[] temp = allocate(newSize + gapAlloc);
+
+            //move stuff at beginning that we aren't writing over
+            if (start > 0) {
+                at(0, start, temp, 0);
+            }
+            //move stuff from src array that we are copying
+            if (srcLength > 0) {
+                System.arraycopy(srcChars, srcStart, temp, start, srcLength);
+            }
+            //move stuff at end that we aren't copying over
+            if (limit < fArraySize) {
+                at(limit, fArraySize, temp, temp.length - newSize + newGap);
+            //change 7-23-96
+            //    at(limit, fArraySize - limit, temp, temp.length - newSize + newGap);
+            }
+
+            fArray = temp;
+        } else {
+            if (start > fGap) {
+                System.arraycopy(fArray, gapLimit, fArray, fGap, start - fGap);
+            }
+            if (limit < fGap) {
+                System.arraycopy(fArray, limit, fArray, fArray.length - newSize + newGap, fGap - limit);
+            }
+            if (srcLength > 0) {
+                System.arraycopy(srcChars, srcStart, fArray, start, srcLength);
+            }
+        }
+
+        fArraySize = newSize;
+        fGap = newGap;
+    }
+  }
+
+  /** Replace the chars from start to limit with the chars from srcStart to srcLimit in srcString. */
+
+  /* This implements optimizations for null text or inserting text that fits at the gap,
+     and defaults to call the core replace routine if these optimizations fail. */
+
+  public void replace(int start, int limit, String srcString, int srcStart, int srcLimit)
+  {
+    invalidate();
+    int length = limit - start;
+    int srcLength = srcLimit - srcStart;
+
+    if (fArray == null) {
+        if (start != 0 || limit != 0) {
+            throw new IllegalArgumentException("replace(int start, int limit, String srcString, int srcStart, int srcLimit)");
+        }
+        if (srcLength > 0) {
+            fArray = allocate(srcLength);
+            srcString.getChars(srcStart, srcLimit, fArray, 0);
+            fArraySize = srcLength;
+            fGap = srcLength;
+        }
+    } else {
+        if (start == fGap && fArray.length >= fArraySize - length + srcLength) {
+            if (srcLimit > 0) {
+                srcString.getChars(srcStart, srcLimit, fArray, fGap);
+                fGap += srcLength;
+            }
+            fArraySize += srcLength - length;
+        } else {
+            replace(start, limit, srcString != null ? srcString.toCharArray() : null, srcStart, srcLimit);
+        }
+    }
+  }
+
+  public void replace(int start, int limit, MConstText srcText, int srcStart, int srcLimit)
+  {
+    invalidate();
+    int length = limit - start;
+    int srcLength = srcLimit - srcStart;
+
+    if (fArray == null) {
+        if (start != 0 || limit != 0) {
+            throw new IllegalArgumentException("replace(int start, int limit, String srcString, int srcStart, int srcLimit)");
+        }
+        if (srcLength > 0) {
+            fArray = allocate(srcLength);
+            srcText.extractChars(srcStart, srcLimit, fArray, 0);
+            fArraySize = srcLength;
+            fGap = srcLength;
+        }
+    } else {
+        if (start == fGap && fArray.length >= fArraySize - length + srcLength) {
+            if (srcLimit > 0) {
+                srcText.extractChars(srcStart, srcLimit, fArray, fGap);
+                fGap += srcLength;
+            }
+            fArraySize += srcLength - length;
+        } else {
+            char[] temp = srcLength == 0? null : new char[srcLength];
+            if (temp != null) {
+                srcText.extractChars(srcStart, srcLimit, temp, 0);
+            }
+            replace(start, limit, temp, 0, srcLimit - srcStart);
+        }
+    }
+  }
+
+  /** Replace the chars from start to limit with srcChar. */
+
+  /* This implements optimizations for null text or replacing a character that fits into the gap,
+     and defaults to call the core replace routine if these optimizations fail. */
+
+  public void replace(int start, int limit, char srcChar)
+  {
+    invalidate();
+    if (fArray == null) {
+        if (start != 0 || limit != 0) {
+            throw new IllegalArgumentException("replace(int start, int limit, char srcChar)");
+        }
+        fArray = allocate(1);
+        fArray[0] = srcChar;
+        fArraySize = 1;
+        fGap = 1;
+    } else {
+        int length = limit - start;
+        if (start == fGap && fArray.length > fArraySize - length) {
+            fArray[fGap] = srcChar;
+            fGap += 1;
+            fArraySize += 1 - length;
+        } else {
+            replace(start, limit, new char[] { srcChar} , 0, 1);
+        }
+    }
+  }
+
+  /** Return the char at pos. */
+
+  public char at(int pos)
+  {
+    if (pos < 0 || pos >= fArraySize) {
+      throw new IllegalArgumentException();
+    }
+    return pos < fGap ? fArray[pos] : fArray[fArray.length - fArraySize + pos];
+  }
+
+  /** Copy the chars from start to limit to dst starting at dstStart. */
+
+  public void at(int start, int limit, char[] dst, int dstStart)
+  {
+    int length = limit - start;
+
+    if (start < 0 || limit < start || limit > fArraySize) {
+        throw new IllegalArgumentException();
+    }
+
+    if (limit <= fGap) {
+        System.arraycopy(fArray, start, dst, dstStart, length);
+    } else if (start >= fGap) {
+        System.arraycopy(fArray, fArray.length - fArraySize + start, dst, dstStart, length);
+    } else {
+        System.arraycopy(fArray, start, dst, dstStart, fGap - start);
+        System.arraycopy(fArray, fArray.length - fArraySize + fGap, dst, dstStart + fGap - start, limit - fGap);
+    }
+  }
+
+  /** Return the number of chars in the buffer. */
+
+  public final int length()
+  {
+    return fArraySize;
+  }
+
+  /** Return the number of chars the buffer can hold before it must reallocate. */
+
+  public final int capacity()
+  {
+    return fArray != null ? fArray.length : 0;
+  }
+
+  /** Reserve capacity chars at start. Utility to optimize a sequence of operations at start. */
+
+  public void reserveCapacity(int start, int capacity)
+  {
+    replace(start, start, (char[])null, 0, capacity);
+  }
+
+  /** Minimize the storage used by the buffer. */
+
+  public void compress()
+  {
+    invalidate();
+    if (fArraySize == 0) {
+        fArray = null;
+        fGap = 0;
+    } else if (fArraySize != fArray.length) {
+        char[] temp = new char[fArraySize];
+        at(0, fArraySize, temp, 0);
+        fArray = temp;
+        fGap = fArraySize;
+    }
+  }
+
+  /** Display the buffer. */
+
+  public String toString()
+  {
+    if (fArray != null) {
+        return new StringBuffer()
+        .append("limit: ").append(fArray.length)
+        .append(", size: ").append(fArraySize)
+        .append(", gap: ").append(fGap)
+        .append(", ").append(fArray, 0, fGap)
+        .append(fArray, fArray.length - fArraySize + fGap, fArraySize - fGap)
+        .toString();
+    } else {
+        return new String("The buffer is empty.");
+    }
+  }
+
+  public CharacterIterator createCharacterIterator(int start, int limit) {
+
+    Validation val = getValidation();
+    return new CharBufferIterator(start, limit, fArray, fArraySize, fGap, val);
+  }
+
+  /** The resizing algorithm. Return a value >= minSize. */
+
+  protected int allocation(int minSize)
+  {
+    //    return (minSize + kGrowSize) & ~(kGrowSize - 1);
+    return minSize < kGrowSize ? kGrowSize : (minSize * 2 + kGrowSize) & ~(kGrowSize - 1);
+  }
+
+  /** Allocate a new character array of limit >= minSize. */
+
+  protected char[] allocate(int minSize)
+  {
+    return new char[allocation(minSize)];
+  }
+}
diff --git a/src/com/ibm/richtext/styledtext/CharBufferIterator.java b/src/com/ibm/richtext/styledtext/CharBufferIterator.java
new file mode 100755
index 0000000..6a0ac16
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/CharBufferIterator.java
@@ -0,0 +1,131 @@
+/*
+ * @(#)$RCSfile: CharBufferIterator.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import java.text.CharacterIterator;
+
+final class CharBufferIterator implements CharacterIterator,
+                                          Cloneable
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private int fRangeStart;
+    private int fRangeLimit;
+    private int fCurrentIndex;
+    private char fStorage[];
+    private int fGap;
+    private int fGapLength;
+    private Validation fValidation;
+
+    CharBufferIterator(int start,
+                       int limit,
+                       char[] storage,
+                       int length,
+                       int gap,
+                       Validation validation) {
+
+        if (start > limit) {
+            throw new IllegalArgumentException("start > limit");
+        }
+        fRangeStart = start;
+        fRangeLimit = limit;
+        fCurrentIndex = fRangeStart;
+        fStorage = storage;
+        fGap = gap;
+        fGapLength = (storage==null? 0 : storage.length) - length;
+        fValidation = validation;
+    }
+
+    private void checkValidation() {
+
+        if (!fValidation.isValid()) {
+            throw new Error("Iterator is no longer valid");
+        }
+    }
+
+    public char first()
+    {
+        return setIndex(fRangeStart);
+    }
+
+    public char last()
+    {
+        return setIndex(fRangeLimit - 1);
+    }
+
+    public char current()
+    {
+        checkValidation();
+        if (fCurrentIndex < fRangeStart || fCurrentIndex >= fRangeLimit)
+            return DONE;
+        int i = (fCurrentIndex < fGap) ? fCurrentIndex : (fCurrentIndex + fGapLength);
+        return fStorage[i];
+    }
+
+    public char next()
+    {
+        checkValidation();
+        fCurrentIndex++;
+        if (fCurrentIndex >= fRangeLimit)
+        {
+            fCurrentIndex = fRangeLimit;
+            return DONE;
+        }
+        int i = (fCurrentIndex < fGap) ? fCurrentIndex : (fCurrentIndex + fGapLength);
+        return fStorage[i];
+    }
+
+    public char previous()
+    {
+        fCurrentIndex--;
+        if (fCurrentIndex >= fRangeStart)
+            return current();
+        fCurrentIndex = fRangeStart;
+        return DONE;
+    }
+
+    public char setIndex(int i)
+    {
+        if (i < fRangeStart || i > fRangeLimit)
+            throw new IllegalArgumentException("Invalid position");
+        fCurrentIndex = i;
+        return current();
+    }
+
+    public int getBeginIndex()
+    {
+        return fRangeStart;
+    }
+
+    public int getEndIndex()
+    {
+        return fRangeLimit;
+    }
+
+    public int getIndex()
+    {
+        return fCurrentIndex;
+    }
+
+    public Object clone()
+    {
+        try {
+            return super.clone();
+        }
+        catch (CloneNotSupportedException e) {
+            return null;
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/styledtext/FastIntBinarySearch.java b/src/com/ibm/richtext/styledtext/FastIntBinarySearch.java
new file mode 100755
index 0000000..e297a7b
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/FastIntBinarySearch.java
@@ -0,0 +1,136 @@
+/*
+ * @(#)$RCSfile: FastIntBinarySearch.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+(C) Copyright Taligent, Inc. 1996 - All Rights Reserved
+(C) Copyright IBM Corp. 1996 - All Rights Reserved
+
+  The original version of this source code and documentation is copyrighted and
+owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These materials are
+provided under terms of a License Agreement between Taligent and Sun. This
+technology is protected by multiple US and International patents. This notice and
+attribution to Taligent may not be removed.
+  Taligent is a registered trademark of Taligent, Inc.
+*/
+
+/*
+    7/29/96
+        Modified to search portions of an integer array.  Should be retested.
+*/
+
+package com.ibm.richtext.styledtext;
+
+/**
+ * This class searches a segment of an array of integers.  The segment
+ * must be sorted in ascending order (but this class does not verify this).
+ * Also, this class aliases the array;  if the array is modified later the
+ * search results are undefined.
+ */
+final class FastIntBinarySearch
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private int dataArray[];
+    private int auxStart;
+    private int power;
+
+    private int fFirstIndex;
+
+    private static final int exp2[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072 };
+
+    public FastIntBinarySearch(int data[])
+    {
+        this(data, 0, data.length);
+    }
+
+    public FastIntBinarySearch(int data[], int firstValidIndex, int validLength)
+    {
+        setData(data, firstValidIndex, validLength);
+    }
+    
+    public void setData(int data[]) {
+        
+        setData(data, 0, data.length);
+    }
+    
+    public void setData(int data[], int firstValidIndex, int validLength) {
+
+        if (data.length < 1) throw new IllegalArgumentException();
+        if (data.length >= exp2[exp2.length-1]) throw new IllegalArgumentException();
+
+        dataArray = data;
+        fFirstIndex = firstValidIndex;
+
+        for (power = exp2.length-1; power > 0 && validLength < exp2[power]; power--) {}
+
+        // at this point, array.length >= 2^power
+
+        auxStart = validLength - exp2[power];
+    }
+    
+    /**
+     * Return the index in the array of the first element which is at least
+     * as large as <tt>value</tt>.  If value is larger than the largest
+     * element in the array the last valid index in the array is returned.
+     */
+    public int findIndex(int value)
+    {
+        int index = exp2[power]-1 + fFirstIndex;
+        if (value >= dataArray[auxStart + fFirstIndex]) {
+            index += auxStart;
+        }
+
+        // at this point, index is the "upper limit" of the search
+
+        switch (power) {
+        case 17:
+            if (value < dataArray[index-65536]) index -= 65536;
+        case 16:
+            if (value < dataArray[index-32768]) index -= 32768;
+        case 15:
+            if (value < dataArray[index-16384]) index -= 16384;
+        case 14:
+            if (value < dataArray[index-8192]) index -= 8192;
+        case 13:
+            if (value < dataArray[index-4096]) index -= 4096;
+        case 12:
+            if (value < dataArray[index-2048]) index -= 2048;
+        case 11:
+            if (value < dataArray[index-1024]) index -= 1024;
+        case 10:
+            if (value < dataArray[index-512]) index -= 512;
+        case 9:
+            if (value < dataArray[index-256]) index -= 256;
+        case 8:
+            if (value < dataArray[index-128]) index -= 128;
+        case 7:
+            if (value < dataArray[index-64]) index -= 64;
+        case 6:
+            if (value < dataArray[index-32]) index -= 32;
+        case 5:
+            if (value < dataArray[index-16]) index -= 16;
+        case 4:
+            if (value < dataArray[index-8]) index -= 8;
+        case 3:
+            if (value < dataArray[index-4]) index -= 4;
+        case 2:
+            if (value < dataArray[index-2]) index -= 2;
+        case 1:
+            if (value < dataArray[index-1]) index -= 1;
+        case 0:
+            if (value < dataArray[index]) index -= 1;
+        }
+        return index;
+    }
+}
diff --git a/src/com/ibm/richtext/styledtext/MCharBuffer.java b/src/com/ibm/richtext/styledtext/MCharBuffer.java
new file mode 100755
index 0000000..0eebff1
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/MCharBuffer.java
@@ -0,0 +1,38 @@
+/*
+ * @(#)$RCSfile: MCharBuffer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+import java.text.CharacterIterator;
+
+/** A dynamic character array optimized for sequences of insert
+    or delete operations in a local region. */
+
+abstract class MCharBuffer
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    abstract void replace(int start, int limit, MConstText text, int srcStart, int srcLimit);
+    abstract void replace(int start, int limit, char[] srcChars, int srcStart, int srcLimit);
+    abstract void replace(int start, int limit, String srcString, int srcStart, int srcLimit);
+    abstract void replace(int start, int limit, char srcChar);
+    abstract CharacterIterator createCharacterIterator(int start, int limit);
+    abstract char at(int pos);
+    abstract void at(int start, int limit, char[] dst, int dstStart);
+
+    abstract int  length();
+
+    abstract int  capacity();
+    abstract void reserveCapacity(int pos, int length);
+    abstract void compress();
+}
diff --git a/src/com/ibm/richtext/styledtext/MConstText.java b/src/com/ibm/richtext/styledtext/MConstText.java
new file mode 100755
index 0000000..ea6e419
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/MConstText.java
@@ -0,0 +1,325 @@
+/*
+ * @(#)$RCSfile: MConstText.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import java.text.CharacterIterator;
+import java.awt.datatransfer.DataFlavor;
+
+/**
+ * MConstText is a base class for text with multiple character and
+ * paragraph styles.  The text is a sequence of Unicode characters,
+ * represented by <code>char</code>.  Character and paragraph
+ * styles are represented by the <code>AttributeMap</code> class.
+ * <p>
+ * Characters in the text are accessed with an integer index using the
+ * <code>at</code> method.
+ * Valid indices are between 0 and (length-1), where length is the number
+ * of characters in the text.  Additionally, the
+ * characters in the text may be accessed through a
+ * <code>java.text.CharacterIterator</code>.
+ * <p>
+ * Every character in the text has a character style associated with it,
+ * represented by the <code>AttributeMap</code> class.  The character
+ * style for a particular character can be obtained using the
+ * <code>characterStyleAt</code> method.
+ * <p>
+ * Each character in the text is contained in a paragraph.  A paragraph
+ * is a range of text including and terminated by a
+ * paragraph separator (either <code>\n</code> or <code>U+2029</code>).
+ * Every
+ * paragraph has a paragraph style associated with it, represented
+ * by the <code>AttributeMap</code> class.  Paragraph boundaries and
+ * styles can be obtained from the MConstText.
+ * <p>
+ * This class does not have methods for modifying the text or styles.
+ * However, subclasses may add this capability, so it is not safe to
+ * assume that an MConstText instance is immutable.  In particular,
+ * the MText class adds modification protocol to this class.  Clients
+ * can detect whether an MConstText has changed by keeping track of its
+ * timestamp.
+ * <p>
+ * A DataFlavor for clipboard content is defined in this class.  Using
+ * this DataFlavor insures that all clients will recognize MConstText
+ * content on the clipboard.
+ * @see MText
+ * @see AttributeMap
+ * @see java.text.CharacterIterator
+ * @see java.awt.datatransfer.DataFlavor
+ */
+public abstract class MConstText {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * The DataFlavor for MConstText clipboard content.  Used to
+     * indicate that clipboard data has an MConstText representation.
+     */
+    public static final DataFlavor styledTextFlavor =
+                            new DataFlavor(MConstText.class, "Styled Text");
+
+    protected MConstText() {
+    }
+
+//========================================================
+// CHARACTER ACCESS
+//========================================================
+/**
+* Return the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the character at offset <code>pos</code>
+*/
+    public abstract char at(int pos);
+
+/**
+* Copy the characters in the range [<code>start</code>, <code>limit</code>)
+* into the array <code>dst</code>, beginning at <code>dstStart</code>.
+* @param start offset of first character which will be copied into the array
+* @param limit offset immediately after the last character which will be copied into the array
+* @param dst array in which to copy characters.  The length of <code>dst</code> must be at least
+* (<code>dstStart + limit - start</code>).
+*/
+    public abstract void extractChars(int start, int limit, char[] dst, int dstStart);
+
+/**
+* Create an MConstText containing the characters and styles in the range
+* [<code>start</code>, <code>limit</code>).
+* @param start offset of first character in the new text
+* @param limit offset immediately after the last character in the new text
+* @return an MConstText object containing the characters and styles in the given range
+*/
+    public abstract MConstText extract(int start, int limit);
+
+/**
+* Create a <code>java.text.CharacterIterator</code> over all
+* of the characters in the text.  Default implementation calls
+* <code>createCharacterIterator(0, length())</code>
+* @return a <code>java.text.CharacterIterator</code> over all
+*      of the characters in the text
+*/
+    public CharacterIterator createCharacterIterator() {
+
+        return createCharacterIterator(0, length());
+    }
+
+/**
+* Create a <code>java.text.CharacterIterator</code> over the
+* given range of characters in the text.
+* @param start the first index in the iteration range
+* @param limit the index after the last character in the iteration range
+* @return a <code>java.text.CharacterIterator</code> over the
+*     given range
+*/
+    public abstract CharacterIterator createCharacterIterator(int start,
+                                                              int limit);
+
+
+//========================================================
+// SIZE/CAPACITY
+//========================================================
+/**
+* Return the length of the MConstText object.  The length is the number of characters in the text.
+* @return the length of the MConstText object
+*/
+    public abstract int length();
+
+//========================================================
+// Character styles
+//========================================================
+
+/**
+* Return the index of the first character in the character style run
+* containing pos.  All characters in a style run have the same character
+* style.
+* @returns the style at offset <code>pos</code>
+*/
+    public abstract int characterStyleStart(int pos);
+
+/**
+* Return the index after the last character in the character style run
+* containing pos.  All characters in a style run have the same character
+* style.
+* @returns the style at offset <code>pos</code>
+*/
+    public abstract int characterStyleLimit(int pos);
+
+/**
+* Return the style applied to the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the style at offset <code>pos</code>
+*/
+    public abstract AttributeMap characterStyleAt(int pos);
+
+//========================================================
+// PARAGRAPH BOUNDARIES
+//========================================================
+/**
+* Return the start of the paragraph containing the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the start of the paragraph containing the character at offset <code>pos</code>
+*/
+    public abstract int paragraphStart(int pos);
+
+/**
+* Return the limit of the paragraph containing the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the limit of the paragraph containing the character at offset <code>pos</code>
+*/
+    public abstract int paragraphLimit(int pos);
+
+/**
+* Return the paragraph style applied to the paragraph containing offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the paragraph style in effect at <code>pos</code>
+*/
+    public abstract AttributeMap paragraphStyleAt(int pos);
+
+/**
+* Return the current time stamp.  The time stamp is
+* incremented whenever the contents of the MConstText changes.
+* @return the current paragraph style time stamp
+*/
+    public abstract int getTimeStamp();
+
+/**
+* Return the start of the damaged range.  If the start is not less
+* than the the limit of the damaged range, then the damaged range
+* is empty.
+* @return the start of the damaged range
+* @see #damagedRangeLimit
+* @see MText#resetDamagedRange
+*/
+    public abstract int damagedRangeStart();
+
+/**
+* Return the limit of the damaged range.  If the start is not less
+* than the the limit of the damaged range, then the damaged range
+* is empty.
+* @return the start of the damaged range
+* @see #damagedRangeStart
+* @see MText#resetDamagedRange
+*/
+    public abstract int damagedRangeLimit();
+
+//========================================================
+// Equality and hashCode
+//========================================================
+/**
+* Compare this to another Object for equality.  This is
+* equal to rhs if rhs is an MConstText which is equal
+* to this.
+* @param rhs Object to compare to
+* @return true if this equals <code>rhs</code>
+*/
+    public final boolean equals(Object rhs) {
+
+        MConstText otherText;
+
+        try {
+            otherText = (MConstText) rhs;
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+
+        return equals(otherText);
+    }
+
+/**
+* Compare this to another MConstText for equality.  This is
+* equal to rhs if the characters and styles in rhs are the
+* same as this.  Subclasses may override this implementation
+* for efficiency, but they should preserve these semantics.
+* Determining that two MConstText instances are equal may be
+* an expensive operation, since every character and style must
+* be compared.
+* @param rhs Object to compare to
+* @return true if this equals <code>rhs</code>
+*/
+    public boolean equals(MConstText rhs) {
+
+        if (rhs == null) {
+            return false;
+        }
+
+        if (rhs == this) {
+            return true;
+        }
+
+        if (hashCode() != rhs.hashCode()) {
+            return false;
+        }
+
+        int length = length();
+        if (length != rhs.length()) {
+            return false;
+        }
+
+        for (int i=0; i < length; i++) {
+            if (i < length && at(i) != rhs.at(i)) {
+                return false;
+            }
+        }
+
+        for (int start = 0; start < length;) {
+            if (!characterStyleAt(start).equals(rhs.characterStyleAt(start))) {
+                return false;
+            }
+            int limit = characterStyleLimit(start);
+            if (limit != rhs.characterStyleLimit(start)) {
+                return false;
+            }
+            start = limit;
+        }
+
+        for (int start = 0; start < length;) {
+
+            if (!paragraphStyleAt(start).equals(rhs.paragraphStyleAt(start))) {
+                return false;
+            }
+            start = paragraphLimit(start);
+        }
+
+        return paragraphStyleAt(length).equals(rhs.paragraphStyleAt(length));
+    }
+
+    /**
+     * Return the hashCode for this MConstText.  An empty MConstText
+     * has hashCode 0;  a nonempty MConstText's hashCode is
+     * <blockquote><pre>
+     *       at(0) +
+     *       at(length/2)*31^1 +
+     *       at(length-1)*31^2 +
+     *       characterStyleAt(0).hashCode()*31^3 +
+     *       paragraphStyleAt(length-1).hashCode()*31^4
+     * </pre></blockquote>
+     * where <code>^</code> is exponentiation (not bitwise XOR).
+     */
+    public final int hashCode() {
+
+        int hashCode = 0;
+        int length = length();
+
+        if (length > 0) {
+            hashCode = paragraphStyleAt(length-1).hashCode();
+            hashCode = hashCode*31 + characterStyleAt(0).hashCode();
+            hashCode = hashCode*31 + at(length-1);
+            hashCode = hashCode*31 + at(length/2);
+            hashCode = hashCode*31 + at(0);
+        }
+
+        return hashCode;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/styledtext/MParagraphBuffer.java b/src/com/ibm/richtext/styledtext/MParagraphBuffer.java
new file mode 100755
index 0000000..6fb4f31
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/MParagraphBuffer.java
@@ -0,0 +1,94 @@
+/*
+ * @(#)$RCSfile: MParagraphBuffer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import java.io.Serializable;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+abstract class MParagraphBuffer
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+/**
+* Returns the start of the paragraph containing offset <tt>pos</tt>.
+*/
+    abstract int paragraphStart(int pos);
+
+/**
+* Returns the limit of the paragraph containing offset <tt>pos</tt>.
+*/
+    abstract int paragraphLimit(int pos);
+
+/**
+* Returns the style of the paragraph containing offset <tt>pos</tt>.
+*/
+    abstract AttributeMap paragraphStyleAt(int offset);
+
+/**
+* Process a character insertion at offset <tt>start</tt>.
+* If a paragraph break was inserted, propogate paragraph style at
+* <tt>start</tt> to new paragraph.
+*/
+    abstract void insertText(int start, char insertedChar);
+
+/**
+* Process character insertion at offset <tt>start</tt>.
+* Each new paragraph gets paragraph style at
+* <tt>start</tt>.
+*/
+    abstract void insertText(int start,
+                             char[] srcChars,
+                             int srcStart,
+                             int srcLimit);
+
+/**
+* Process deletion by removing paragraph breaks contained in
+* deleted range.  Propogate paragraph styles backward, if necessary.
+*/
+    abstract void deleteText(int start,
+                             int limit,
+                             int[] damagedRange);
+
+/*
+* Replace paragraph breaks/styles between start and limit with paragraph breaks/styles
+* from <tt>srcText</tt>.
+* @param start an offset into the text
+* @param limit the index after the last character to replace
+* @param srcText the text from which new paragraphs are taken
+* @param srcStart the start of the range in <code>srcText</code> to copy
+* @param srcLimit the first index after the range in <code>srcText</code> to copy
+*/
+    abstract void replace(int start,
+                          int limit,
+                          MConstText srcText,
+                          int srcStart,
+                          int srcLimit,
+                          int[] damagedRange);
+
+/**
+* Set the style of all paragraphs containing offsets in the range [start, limit) to
+* <tt>style</tt>.
+*/
+    abstract boolean modifyParagraphStyles(int start,
+                                           int limit,
+                                           StyleModifier modifier,
+                                           int[] damagedRange);
+
+/**
+* Minimize the amount of memory used by this object.
+*/
+    abstract void compress();
+}
diff --git a/src/com/ibm/richtext/styledtext/MStyleBuffer.java b/src/com/ibm/richtext/styledtext/MStyleBuffer.java
new file mode 100755
index 0000000..133fa30
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/MStyleBuffer.java
@@ -0,0 +1,112 @@
+/*
+ * @(#)$RCSfile: MStyleBuffer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+/*
+    8/1/96
+        Style -> ResolvedStyle
+    8/7/96 jf
+        added countStyles and getStyles protocol
+    8/13/96
+        ResolvedStyle->Style
+    8/22/96 jf
+        Removed the setIterator methods.
+*/
+/*
+* MStyleBuffer is the abstract interface for a class which maintains
+* style runs in an <tt>MText</tt>.  A "style run" consists of a
+* style and the interval on which the style applies.
+* <p>
+* MStyleBuffer includes methods to call when text is inserted into
+* or deleted from the <tt>MText</tt>.  These methods update the
+* style runs in accordance with the commonly accepted behavior for
+* style runs.
+* <p>
+* Additionally, MStyleBuffer provides methods for replacing the style runs on a
+* text range with another set of style runs.  MStyleBuffer does not do style "combining" (for
+* example, adding the bold attribute to text which is italicized);  clients are
+* responsible for computing the combined styles, and passing these styles into
+* MStyleBuffer.
+* <p>
+* MStyleBuffer supplies a method for replacing the style runs on a text range with the runs
+* represented in an <tt>MStyleRunIterator</tt>.  This is useful for implementing paste
+* operations, in which the style runs on a range of text are replaced by style runs
+* from an external source.
+* <p>
+*
+* @author John Raley
+*
+* @see AttributeMap
+* @see MText
+*/
+abstract class MStyleBuffer
+{
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+/**
+* Respond to an insertion in the text.  The length of the last style run which
+* begins before <tt>start</tt> is increased by <tt>limit-start</tt>.
+* @param start the offset where the insertion began
+* @param limit the offset where the insertion ended
+*/
+    abstract void insertText(int start, int limit);
+
+/**
+* Respond to a deletion in the text.  The last style run before
+* <tt>start</tt> is truncated to end at <tt>start</tt>.  The
+* style run containing (<tt>start</tt>+<tt>length</tt>) is set to begin
+* at (<tt>start</tt>+<tt>length</tt>).  Runs in between are deleted.
+* If the deletion occurs entirely within one style run, the length of the style
+* run is reduced by <tt>length</tt>.
+* @param start the offset where the deletion began
+* @param length the offset where the deletion ended
+*/
+    abstract void deleteText(int start, int limit);
+
+/*
+* Replace style runs between offsets <tt>start</tt> and <tt>limit</tt> with styles in
+* <tt>iter</tt>.  This method can be used to perform a "paste" operation.
+* @param start the offset where the replacement begins
+* @param limit the offset where the replacement ends
+* @param iter an <tt>MStyleRunIterator</tt> containing style runs which will replace old
+* style runs.
+*/
+    abstract void replace(int start, int limit, MConstText srcText, int srcStart, int srcLimit);
+
+    abstract int styleStart(int pos);
+    abstract int styleLimit(int pos);
+
+/**
+* Return style at location <tt>pos</tt>.
+* @param pos an offset into the text
+* @returns the style of the character at <tt>offset</tt>
+*/
+    abstract AttributeMap styleAt(int pos);
+
+/**
+ * Return true if styles were modified.
+ */
+    abstract boolean modifyStyles(int start,
+                                  int limit,
+                                  StyleModifier modifier,
+                                  int[] damagedRange);
+
+/**
+* Minimize the amount of memory used by this object.
+*/
+    abstract void compress();
+}
diff --git a/src/com/ibm/richtext/styledtext/MTabRuler.java b/src/com/ibm/richtext/styledtext/MTabRuler.java
new file mode 100755
index 0000000..40fa4e1
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/MTabRuler.java
@@ -0,0 +1,113 @@
+/*
+ * @(#)$RCSfile: MTabRuler.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+/**
+ * This interface represents a sequence of TabStops, ordered by position.
+ * The first
+ * TabStop in the ruler can be obtained with the <code>firstTab</code>
+ * method;  subsequent TabStops are obtained with the <code>nextTab</code>
+ * method.
+ * <p>
+ * If a TabStop with type <code>TabStop.kAuto</code> is returned, all tabs
+ * after that TabStop will also have type <code>TabStop.kAuto</code>, and
+ * their positions will be multiples of <code>autoSpacing</code>.
+ * @see TabStop
+ */
+public abstract class MTabRuler
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * Return first tab in the ruler.  If an autoTab, it is at position zero, and
+     * all subsequent tabs will be autotabs at autoSpacing intervals.
+     */
+    public abstract TabStop firstTab();
+
+    /**
+     * Return the first tab in the ruler with fPosition > position.  If it is an
+     * autotab, it is at an increment of autoSpacing, and all subsequent tabs will be
+     * autotabs at autoSpacing intervals.
+     */
+    public abstract TabStop nextTab(int position);
+
+    /**
+     * Return the interval for autotabs.
+     */
+    public abstract int autoSpacing();
+
+    /**
+     * Compute the hashCode for this ruler.  The hashCode is the
+     * hashCode of the first tab multiplied by the autoSpacing
+     * interval.
+     */
+    public final int hashCode() {
+
+        return firstTab().hashCode() * autoSpacing();
+    }
+
+    /**
+     * Return true if this tab ruler contains the given tab.
+     * @param tabToTest the tab to search for
+     * @return true if this tab ruler contains <code>tabToTest</code>
+     */
+    public boolean containsTab(TabStop tabToTest) {
+
+        for (TabStop tab = firstTab();
+                        tab.getType() != TabStop.kAuto;
+                        tab = nextTab(tab.getPosition())) {
+            if (tab.getPosition() >= tabToTest.getPosition()) {
+                return tabToTest.equals(tab);
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Return a tab ruler identical to this ruler, except with the
+     * given tab added.  This ruler is not modified.
+     * @param tabToAdd the tab to add to the new tab ruler
+     * @return an MTabRuler resulting from this operation
+     */
+    public MTabRuler addTab(TabStop tabToAdd) {
+
+        return StandardTabRuler.addTabToRuler(this, tabToAdd);
+    }
+
+    /**
+     * Return a tab ruler identical to the given ruler, except with the
+     * tab at the given position removed.  This ruler is not modified.
+     * @param position the position of the tab to remove from the new tab ruler
+     * @return an MTabRuler resulting from this operation
+     */
+    public MTabRuler removeTab(int position) {
+
+        return StandardTabRuler.removeTabFromRuler(this, position);
+    }
+
+    /**
+     * Return a tab ruler identical to this ruler, except with the
+     * tab at position <code>fromPosition</code> moved to position
+     * <code>toPosition</code>.  This ruler is not modified.
+     * @param fromPosition the position of the tab to move
+     * @param toPosition the new position of the tab
+     * @return an MTabRuler resulting from this operation
+     */
+    public MTabRuler moveTab(int fromPosition, int toPosition) {
+
+        return StandardTabRuler.moveTabOnRuler(this, fromPosition, toPosition);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/styledtext/MText.java b/src/com/ibm/richtext/styledtext/MText.java
new file mode 100755
index 0000000..54be596
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/MText.java
@@ -0,0 +1,243 @@
+/*
+ * @(#)$RCSfile: MText.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+/*
+    Change history:
+
+    10/29/96 jef    split the character and paragraph style access functions
+    8/14/96 sfb     eliminated StyleSheetIterator
+    8/21/96 jef        completed abstract interface (changed iterator classes etc.)
+    1/30/97 rtg     cleaned up interface, brought in functions from SimpleTextView
+    7/31/98 jbr switched from Style to AttributeMap
+
+*/
+
+/**
+ * This class is a mutable extension of MConstText.  It has methods for
+ * inserting, appending, replacing, and removing styled text.  Additionally,
+ * it has methods for modifying paragraph and character styles.
+ * <p>
+ * Styled characters (from another <code>MConstText</code> instance) added
+ * to the text retain their original character styles.  The style of plain characters
+ * (specified as a <code>char</code> or <code>char[]</code>) is always
+ * specified explicitly when they are added to the text.  MText does not do
+ * character style "propagation", where unstyled characters take on the
+ * style of previous characters.  Clients can implement this behavior by
+ * specifying the styles to propagate.
+ * <p>
+ * When unstyled characters are added to the text, their paragraph style
+ * is the paragraph style in effect immediately after the last new character.
+ * If the characters contain paragraph separators, then every new paragraph
+ * will have the same paragraph style.  When styled characters are added
+ * to the text, their resulting paragraph style is determined by the
+ * following rule:
+ * <blockquote>
+ * The paragraph styles in the new text
+ * become the paragraph styles in the target text, with the exception of the
+ * last paragraph in the new text, which takes on the paragraph style in
+ * effect immediately after the inserted text.
+ * If the new text is added at the end of the target text, the new text's
+ * paragraph styles take effect in any paragraph affected by the addition.
+ * </blockquote>
+ * For example, suppose there is a single paragraph of text with style 'A',
+ * delimited with a paragraph separator 'P':
+ * <blockquote>
+ * AAAAAAP
+ * </blockquote>
+ * Suppose the following styled paragraphs are inserted into the above text
+ * after the fourth character:
+ * <blockquote>
+ * BBBBPCCCPDDD
+ * </blockquote>
+ * Then the original paragraph style of each character is:
+ * <blockquote>
+ * AAAABBBBPCCCPDDDAAP
+ * </blockquote>
+ * The resulting paragraph styles are:
+ * <blockquote>
+ * BBBBBBBBPCCCPAAAAAP
+ * </blockquote>
+ * Similarly, if characters are deleted, the paragraph style immediately
+ * after the deletion takes effect on the paragraph containing the deletion.
+ * So, if characters 4-16 were deleted in the example above, the paragraph
+ * styles would be:
+ * <blockquote>
+ * AAAAAAP
+ * </blockquote>
+ * This paragraph-style propagation policy is sometimes referred to as <strong>
+ * following styles win</strong>, since styles at the end of the paragraph
+ * become the style for the entire paragraph.
+ * <p>
+ * This class can accumulate a <strong>damaged range</strong> - an interval in
+ * which characters, character styles, or paragraph styles have changed.  This is
+ * useful for clients such as text editors which reformat and draw text after
+ * changes.  Usually the damaged range is exactly the range of characters
+ * operated upon;  however, larger ranges may be damaged if paragraph styles
+ * change.
+ * @see StyleModifier
+ */
+
+public abstract class MText extends MConstText
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    protected MText() {
+    }
+
+//==================================================
+// MAIN CHARACTER MODIFICATION FUNCTIONS
+//==================================================
+/**
+* Replace the characters and styles in the range [<code>start</code>, <code>limit</code>) with the characters
+* and styles in <code>srcText</code> in the range [<code>srcStart</code>, <code>srcLimit</code>).  <code>srcText</code> is not
+* modified.
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character and style at
+* <code>limit</code> is not modified.
+* @param srcText the source for the new characters and styles
+* @param srcStart the offset into <code>srcText</code> where new characters and styles will be obtained
+* @param srcLimit the offset into <code>srcText</code> where the new characters and styles end
+*/
+    public abstract void replace(int start, int limit, MConstText srcText, int srcStart, int srcLimit);
+
+/**
+* Replace the characters and styles in the range [<code>start</code>, <code>limit</code>) with the characters
+* and styles in <code>srcText</code>.  <code>srcText</code> is not
+* modified.
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character and style at
+* <code>limit</code> is not modified.
+* @param srcText the source for the new characters and styles
+*/
+    public abstract void replace(int start, int limit, MConstText text);
+
+/**
+* Replace the characters in the range [<code>start</code>, <code>limit</code>) with the characters
+* in <code>srcChars</code> in the range [<code>srcStart</code>, <code>srcLimit</code>).  New characters take on the style
+* <code>charsStyle</code>.
+* <code>srcChars</code> is not modified.
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character at
+* <code>limit</code> is not modified.
+* @param srcChars the source for the new characters
+* @param srcStart the offset into <code>srcChars</code> where new characters will be obtained
+* @param srcLimit the offset into <code>srcChars</code> where the new characters end
+* @param charsStyle the style of the new characters
+*/
+    public abstract void replace(int start, int limit, char[] srcChars, int srcStart, int srcLimit, AttributeMap charsStyle);
+
+/**
+* Replace the characters in the range [<code>start</code>, <code>limit</code>) with the character <code>srcChar</code>.
+* The new character takes on the style <code>charStyle</code>
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character at
+* <code>limit</code> is not modified.
+* @param srcChar the new character
+* @param charsStyle the style of the new character
+*/
+    public abstract void replace(int start, int limit, char srcChar, AttributeMap charStyle);
+
+/**
+* Replace the entire contents of this MText (both characters and styles) with
+* the contents of <code>srcText</code>.
+* @param srcText the source for the new characters and styles
+*/
+    public abstract void replaceAll(MConstText srcText);
+
+/**
+* Insert the contents of <code>srcText</code> (both characters and styles) into this
+* MText at the position specified by <code>pos</code>.
+* @param pos The character offset where the new text is to be inserted.
+* @param srcText The text to insert. */
+    public abstract void insert(int pos, MConstText srcText);
+
+/**
+* Append the contents of <code>srcText</code> (both characters and styles) to the
+* end of this MText.
+* @param srcText The text to append. */
+    public abstract void append(MConstText srcText);
+
+/**
+* Delete the specified range of characters (and styles).
+* @param start Offset of the first character to delete.
+* @param limit Offset of the first character after the range to delete. */
+    public abstract void remove(int start, int limit);
+
+/**
+* Delete all characters and styles.
+*/
+    public abstract void remove();
+
+/**
+* Create an MText containing the characters and styles in the range
+* [<code>start</code>, <code>limit</code>).
+* @param start offset of first character in the new text
+* @param limit offset immediately after the last character in the new text
+* @return an MConstText object containing the characters and styles in the given range
+*/
+    public abstract MText extractWritable(int start, int limit);
+
+
+//==================================================
+// STORAGE MANAGEMENT
+//==================================================
+
+/**
+* Minimize the amount of memory used by the MText object.
+*/
+    public abstract void compress();
+
+//==================================================
+// STYLE MODIFICATION
+//==================================================
+
+/**
+* Set the character style of all characters in the MText object to
+* <code>AttributeMap.EMPTY_ATTRIBUTE_MAP</code>.
+*/
+    public abstract void removeCharacterStyles();
+
+/**
+* Invoke the given modifier on all character styles from start to limit.
+* @param modifier the modifier to apply to the range.
+* @param start the start of the range of text to modify.
+* @param limit the limit of the range of text to modify.
+*/
+    public abstract void modifyCharacterStyles(int start, int limit, StyleModifier modifier);
+
+/**
+* Invoke the given modifier on all paragraph styles in paragraphs
+* containing characters in the range [start, limit).
+* @param modifier the modifier to apply to the range.
+* @param start the start of the range of text to modify.
+* @param limit the limit of the range of text to modify.
+*/
+    public abstract void modifyParagraphStyles(int start, int limit, StyleModifier modifier);
+
+//==================================================
+// DAMAGED RANGE
+//==================================================
+/**
+* Reset the damaged range to an empty interval, and begin accumulating the damaged
+* range.  The damaged range includes every index where a character, character style,
+* or paragraph style has changed.
+* @see #damagedRangeStart
+* @see #damagedRangeLimit
+*/
+    public abstract void resetDamagedRange();
+}
diff --git a/src/com/ibm/richtext/styledtext/ParagraphBuffer.java b/src/com/ibm/richtext/styledtext/ParagraphBuffer.java
new file mode 100755
index 0000000..5557379
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/ParagraphBuffer.java
@@ -0,0 +1,716 @@
+/*
+ * @(#)$RCSfile: ParagraphBuffer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+/*
+    Right now, you have to construct this class with a charBuffer.  That's pretty ugly... */
+
+/*
+    8/8/96
+        Added replace method, which reads styles from a ParagraphIterator.
+        Also, added a constructor which takes a ParagraphIterator.
+        These methods are for copy/paste support.
+
+    8/22/96
+        Replace method (which takes an iterator as an argument) tests for a
+        0-length iterator.
+
+    9/30/96
+        {jbr} modified paragraphLimit();
+
+    10/23/96
+        This class now maintains paragraph styles.  Also has a timestamp.
+
+    10/25/96
+        Holds on to Style instead of Style.
+
+    7/31/98 Switched to AttributeMap
+
+*/
+
+/**
+* This class stores offsets where paragraph breaks occur, and the style applied to
+* each paragraph.
+*
+* The offsets where paragraph breaks occur are stored in a RunArray object.  This is
+* not strictly necessary, but it makes scanning the text for paragraph breaks unnecessary.
+* However, it makes determining where paragraphs start a little confusing.  If there is a
+* paragraph break at offset p, then there will be a paragraph start at offset p+1.
+* If the last character in the text is a paragraph break, there will be a run array entry
+* for that character (and also a paragraph style for that paragraph, even though the
+* style does not apply to any text).
+*
+* The style of the first paragraph in the text is in the fFirstStyle member.  Other
+* paragraph styles are stored in the fStyleTable array, in the following manner:  the
+* paragraph with begins at offset fRunArray.fRunStart[i]+1 has style fStyleTable[i].
+* The style table's "gap range" is kept in sync with the RunArray.
+*
+* This class propogates paragraph styles in the "Microsoft Word" fashion:  styles
+* propogate backward from paragraph breaks.
+*
+* This class maintains a time stamp, which changes every time extra formatting (formatting
+* on a range other than the current selection) is needed;  for example, when a paragraph
+* break is removed.
+*/
+
+
+final class ParagraphBuffer extends MParagraphBuffer implements Externalizable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final int kInitialSize = 10;
+    private static final int CURRENT_VERSION = 1;
+    private static final long serialVersionUID = 22356934;
+
+    private RunArray fRunArray;
+    private AttributeMap[] fStyleTable;
+    private AttributeMap fFirstStyle;
+
+    private static final boolean isParagraphBreak(char c) {
+
+        return c =='\u2029' || c == '\n';
+    }
+
+/**
+* Construct a new paragraph buffer from the characters in <tt>charBuffer</tt>.
+*/
+    ParagraphBuffer(MCharBuffer charBuffer) {
+
+        this(charBuffer.length());
+
+        // scan text for paragraph boundaries
+
+        int textLength = fRunArray.getCurTextLength();
+
+        for (int pos=0; pos < textLength; pos++) {
+
+            if (isParagraphBreak(charBuffer.at(pos))) {
+                if (fRunArray.fPosEnd+1 >= fRunArray.fNegStart)
+                    expandStyleTable();
+                fRunArray.fRunStart[++fRunArray.fPosEnd] = pos;
+                fStyleTable[fRunArray.fPosEnd] = fFirstStyle;
+            }
+        }
+
+    }
+
+/**
+* Private constructor.
+*/
+    private ParagraphBuffer(int initialLength) {
+
+        fRunArray = new RunArray(kInitialSize, initialLength);
+        fStyleTable = new AttributeMap[fRunArray.getArrayLength()];
+
+        fFirstStyle = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+    }
+
+    /**
+     * Note: this constructor is ONLY for use by the Serialization
+     * mechanism.  It does not leave this object in a valid state!
+     */
+    public ParagraphBuffer() {
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        compress();
+        out.writeInt(CURRENT_VERSION);
+        out.writeObject(fRunArray);
+        out.writeObject(fStyleTable);
+        out.writeObject(fFirstStyle);
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                                ClassNotFoundException {
+
+        if (in.readInt() != CURRENT_VERSION) {
+            throw new IOException("Invalid version of ParagraphBuffer");
+        }
+        fRunArray = (RunArray) in.readObject();
+        fStyleTable = (AttributeMap[]) in.readObject();
+        fFirstStyle = (AttributeMap) in.readObject();
+    }
+
+/**
+* Shift table such that the last positive run starts before pos.
+*/
+    private void shiftTableTo(int pos) {
+
+        int oldNegStart = fRunArray.fNegStart;
+        int oldPosEnd = fRunArray.fPosEnd;
+
+        fRunArray.shiftTableTo(pos);
+
+        if (oldPosEnd > fRunArray.fPosEnd)
+            System.arraycopy(fStyleTable, fRunArray.fPosEnd+1,
+                             fStyleTable, fRunArray.fNegStart,
+                             oldPosEnd-fRunArray.fPosEnd);
+        else if (oldNegStart < fRunArray.fNegStart)
+            System.arraycopy(fStyleTable, oldNegStart,
+                             fStyleTable, oldPosEnd+1,
+                             fRunArray.fNegStart-oldNegStart);
+    }
+
+/**
+* Update the style table to reflect a change in the RunArray's size.
+*/
+    private void handleArrayResize(int oldNegStart) {
+
+        AttributeMap newStyleTable[] = new AttributeMap[fRunArray.getArrayLength()];
+        System.arraycopy(fStyleTable, 0, newStyleTable, 0, fRunArray.fPosEnd+1);
+        System.arraycopy(fStyleTable, oldNegStart, newStyleTable, fRunArray.fNegStart, (fRunArray.getArrayLength()-fRunArray.fNegStart));
+        fStyleTable = newStyleTable;
+    }
+
+    void compress() {
+
+        int oldNegStart = fRunArray.fNegStart;
+        fRunArray.compress();
+        if (fRunArray.fNegStart != oldNegStart) {
+            handleArrayResize(oldNegStart);
+        }
+    }
+
+/**
+* Make more room in run/style tables.
+*/
+    private void expandStyleTable() {
+
+        int oldNegStart = fRunArray.fNegStart;
+        fRunArray.expandRunTable();
+        handleArrayResize(oldNegStart);
+    }
+
+/**
+* Process a character insertion at offset <tt>start</tt>.
+* If a paragraph break was inserted, propogate paragraph style at
+* <tt>start</tt> to new paragraph.
+*/
+    public void insertText(int start, char insertedChar) {
+
+        shiftTableTo(start);
+        if (isParagraphBreak(insertedChar)) {
+            if (fRunArray.fPosEnd+1 >= fRunArray.fNegStart)
+                expandStyleTable();
+            fRunArray.fRunStart[++fRunArray.fPosEnd] = start;
+            fStyleTable[fRunArray.fPosEnd] =
+                (fRunArray.fPosEnd == 0)? fFirstStyle : fStyleTable[fRunArray.fPosEnd-1];
+            fRunArray.runStartsChanged();
+        }
+
+        //fRunArray.fCurTextLength++;
+        fRunArray.addToCurTextLength(1);
+    }
+
+/**
+* Process character insertion at offset <tt>start</tt>.
+* Each new paragraph gets paragraph style at
+* <tt>start</tt>.
+*/
+    public void insertText(int start, char srcChars[], int srcStart, int srcLimit) {
+
+        shiftTableTo(start);
+
+        int adjust = start - srcStart;
+
+        for (int i=srcStart;  i < srcLimit; i++)
+            if (isParagraphBreak(srcChars[i])) {
+                if (fRunArray.fPosEnd+1 >= fRunArray.fNegStart)
+                    expandStyleTable();
+                fRunArray.fRunStart[++fRunArray.fPosEnd] = adjust + i;
+                fStyleTable[fRunArray.fPosEnd] =
+                    (fRunArray.fPosEnd == 0)? fFirstStyle : fStyleTable[fRunArray.fPosEnd-1];
+                fRunArray.runStartsChanged();
+            }
+
+        //fRunArray.fCurTextLength += (srcLimit-srcStart);
+        fRunArray.addToCurTextLength(srcLimit-srcStart);
+    }
+
+/**
+* Process deletion by removing paragraph breaks contained in
+* deleted range.  Propogate paragraph styles backward, if necessary.
+*/
+    public void deleteText(int start, int limit, int[] damagedRange) {
+
+        int length = limit - start;
+        if (length < 0) {
+            throw new IllegalArgumentException("Invalid range");
+        }
+
+        shiftTableTo(limit);
+
+        int newEnd = fRunArray.findRunContaining(start-1);
+
+        if (newEnd != fRunArray.fPosEnd) {
+
+            AttributeMap propStyle = fStyleTable[fRunArray.fPosEnd];
+            boolean propogated;
+
+            if (newEnd == -1) {
+                propogated = !propStyle.equals(fFirstStyle);
+                fFirstStyle = propStyle;
+            }
+            else {
+                propogated = !propStyle.equals(fStyleTable[newEnd]);
+                fStyleTable[newEnd] = propStyle;
+            }
+
+            if (propogated) {
+                int pStart = (newEnd==-1)? 0 : fRunArray.fRunStart[newEnd] + 1;
+                damagedRange[0] = Math.min(damagedRange[0], pStart);
+            }
+
+            fRunArray.fPosEnd = newEnd;
+        }
+
+        fRunArray.addToCurTextLength(-length);
+
+        fRunArray.runStartsChanged();
+    }
+
+/**
+* Returns the start of the paragraph containing offset <tt>pos</tt>.
+*/
+    public int paragraphStart(int pos) {
+
+        int run = fRunArray.findRunContaining(pos-1);
+        if (run == -1) {
+            return 0;
+        }
+        else {
+            return fRunArray.getLogicalRunStart(run) + 1;
+        }
+    }
+
+/**
+* Returns the limit of the paragraph containing offset <tt>pos</tt>.
+*/
+    public int paragraphLimit(int pos) {
+
+        int run = fRunArray.findRunContaining(pos-1);
+
+        if (run == fRunArray.fPosEnd)
+            run = fRunArray.fNegStart;
+        else
+            run++;
+
+        if (run == fRunArray.getArrayLength()) {
+            return fRunArray.getCurTextLength();
+        }
+
+        int start = fRunArray.getLogicalRunStart(run);
+
+        return start+1;
+    }
+
+/**
+* Returns the style of the paragraph containing offset <tt>pos</tt>.
+*/
+    public AttributeMap paragraphStyleAt(int offset) {
+
+        int run = fRunArray.findRunContaining(offset-1);
+        if (run < 0)
+            return fFirstStyle;
+        else
+            return fStyleTable[run];
+    }
+
+/**
+* Create paragraph iterator.
+*/
+/*
+    public MParagraphIterator createParagraphIterator(int start, int limit) {
+
+        return new ParagraphIterator(start, limit);
+    }
+*/
+
+/**
+* Called by iterator to get run info.
+*/
+    private void setIterator(int pos, ParagraphIterator iter) {
+
+        if ((pos < 0) || (pos >= fRunArray.getCurTextLength())) {
+            iter.set(0, 0, kNoRun, null);
+            return;
+        }
+
+        int run;
+
+        if (pos > 0)
+            run = fRunArray.findRunContaining(pos-1);
+        else
+            run = -1;
+
+        setIteratorUsingRun(run, iter);
+    }
+
+/**
+* Called by iterator to get run info.
+*/
+    private void setIteratorUsingRun(int run, ParagraphIterator iter) {
+
+        int lastValidRun = fRunArray.lastRun();
+
+        if (run < -1 || run > lastValidRun) {
+            iter.set(0, 0, kNoRun, null);
+            return;
+        }
+
+        if (run == fRunArray.fPosEnd+1)
+            run = fRunArray.fNegStart;
+        else if (run == fRunArray.fNegStart-1)
+            run = fRunArray.fPosEnd;
+
+        int runStart;
+        AttributeMap style;
+
+        if (run < 0) {
+            runStart = 0;
+            style = fFirstStyle;
+        }
+        else {
+            runStart = fRunArray.fRunStart[run];
+            style = fStyleTable[run];
+            if (runStart < 0)
+                runStart += fRunArray.getCurTextLength();
+            runStart++;
+        }
+
+        int nextRun;
+
+        if (run == fRunArray.fPosEnd)
+            nextRun = fRunArray.fNegStart;
+        else
+            nextRun = run + 1;
+
+        int runLimit;
+
+        if (nextRun >= fRunArray.getArrayLength())
+            runLimit = fRunArray.getCurTextLength();
+        else {
+            runLimit = fRunArray.fRunStart[nextRun];
+            if (runLimit < 0)
+                runLimit += fRunArray.getCurTextLength();
+            runLimit++;
+            }
+
+        iter.set(runStart, runLimit, run, style);
+    }
+
+/**
+* Replace paragraph breaks/styles between start and length with paragraph breaks/styles
+* from <tt>srcText</tt>.
+* @param start an offset into the text
+* @param limit the index after the last character to replace
+* @param srcText the text from which new paragraphs are taken
+* @param srcStart the start of the range in <code>srcText</code> to copy
+* @param srcLimit the first index after the range in <code>srcText</code> to copy
+*/
+    public void replace(int start,
+                        int limit,
+                        MConstText srcText,
+                        int srcStart,
+                        int srcLimit,
+                        int[] damagedRange) {
+
+        final int insLength = srcLimit - srcStart;
+        if (insLength < 0) {
+            throw new Error("invalid range");
+        }
+        final int origLength = fRunArray.getCurTextLength();
+        deleteText(start, limit, damagedRange);
+
+        if (insLength == 0)
+            return;
+
+        final int oldPosEnd = fRunArray.fPosEnd;
+        AttributeMap origStyle;
+        if (limit < origLength) {
+            origStyle = (fRunArray.fPosEnd>=0)? fStyleTable[fRunArray.fPosEnd] : fFirstStyle;
+        }
+        else {
+            origStyle = srcText.paragraphStyleAt(srcLimit);
+        }
+
+        int paragraphStart = srcStart;
+        int lastPLimit = srcText.paragraphStart(srcLimit);
+        boolean separatorAtEnd = lastPLimit > srcStart && isParagraphBreak(srcText.at(lastPLimit-1));
+
+        if (limit == origLength && lastPLimit == paragraphStart) {
+            if (fRunArray.fPosEnd > 0) {
+                fStyleTable[fRunArray.fPosEnd] = origStyle;
+            }
+            else {
+                fFirstStyle = origStyle;
+            }
+        }
+        else {
+            boolean firstPass = true;
+            while (paragraphStart < lastPLimit) {
+
+                AttributeMap style = srcText.paragraphStyleAt(paragraphStart);
+                int paragraphLimit = srcText.paragraphLimit(paragraphStart);
+
+                if (fRunArray.fPosEnd+1 >= fRunArray.fNegStart)
+                    expandStyleTable();
+
+                if (fRunArray.fPosEnd >= 0) {
+                    if (!style.equals(fStyleTable[fRunArray.fPosEnd])) {
+                        fStyleTable[fRunArray.fPosEnd] = style;
+                        if (firstPass) {
+                            int pStart = fRunArray.fRunStart[fRunArray.fPosEnd]+1;
+                            damagedRange[0] = Math.min(damagedRange[0], pStart);
+                        }
+                    }
+                }
+                else if (!style.equals(fFirstStyle)) {
+                    fFirstStyle = style;
+                    damagedRange[0] = 0;
+                }
+
+                firstPass = false;
+
+                if (paragraphLimit < lastPLimit || separatorAtEnd) {
+                    fRunArray.fRunStart[++fRunArray.fPosEnd] = paragraphLimit - 1 + start - srcStart;
+                }
+                paragraphStart = paragraphLimit;
+            }
+            if (fRunArray.fPosEnd != oldPosEnd) {
+                fStyleTable[fRunArray.fPosEnd] = origStyle;
+            }
+        }
+
+        fRunArray.addToCurTextLength(insLength);
+    }
+
+/**
+* Modify the style of all paragraphs containing offsets in the range [start, limit) to
+* <tt>style</tt>.
+*/
+    public boolean modifyParagraphStyles(int start,
+                                         int limit,
+                                         StyleModifier modifier,
+                                         int[] damagedRange)  {
+
+        int run = fRunArray.findRunContaining(start-1);
+        int currentPStart;
+        if (run == -1) {
+            currentPStart = 0;
+        }
+        else {
+            currentPStart = fRunArray.getLogicalRunStart(run) + 1;
+        }
+
+        boolean modifiedAnywhere = false;
+
+        for (;;) {
+
+            boolean modified = false;
+
+            if (run < 0) {
+
+                AttributeMap newStyle = modifier.modifyStyle(fFirstStyle);
+
+                if (!newStyle.equals(fFirstStyle)) {
+                    fFirstStyle = newStyle;
+                    modified = true;
+                }
+            }
+            else {
+
+                AttributeMap newStyle = modifier.modifyStyle(fStyleTable[run]);
+
+                if (!fStyleTable[run].equals(newStyle)) {
+                    fStyleTable[run] = newStyle;
+                    modified = true;
+                }
+            }
+
+            if (run == fRunArray.fPosEnd) {
+                run = fRunArray.fNegStart;
+            }
+            else {
+                run++;
+            }
+
+            int nextPStart;
+            if (run == fRunArray.getArrayLength()) {
+                nextPStart = fRunArray.getCurTextLength();
+            }
+            else {
+                nextPStart = fRunArray.getLogicalRunStart(run) + 1;
+            }
+
+            if (modified) {
+                modifiedAnywhere = true;
+                damagedRange[0] = Math.min(damagedRange[0], currentPStart);
+                damagedRange[1] = Math.max(damagedRange[1], nextPStart);
+            }
+
+            if (limit <= nextPStart) {
+                break;
+            }
+            else {
+                currentPStart = nextPStart;
+            }
+        }
+
+        return modifiedAnywhere;
+    }
+
+    private static void dumpParagraphStarts(ParagraphBuffer st) {
+
+        System.out.println("fRunArray.fPosEnd="+st.fRunArray.fPosEnd+", fRunArray.fNegStart="+st.fRunArray.fNegStart+
+                            ", fRunArray.getArrayLength()="+st.fRunArray.getArrayLength()+", fRunArray.getCurTextLength()="+st.fRunArray.getCurTextLength());
+
+        int i;
+        System.out.print("Positives: ");
+        for (i=0; i<=st.fRunArray.fPosEnd; i++)
+            System.out.print(st.fRunArray.fRunStart[i]+" ");
+
+        System.out.print("   Negatives: ");
+        for (i=st.fRunArray.fNegStart; i<st.fRunArray.getArrayLength(); i++)
+            System.out.print(st.fRunArray.fRunStart[i]+" ");
+
+        System.out.println(" ");
+    }
+
+    private static final int kNoRun = -42; // iterator use
+
+    private final class ParagraphIterator /*implements MParagraphIterator*/
+    {
+        ParagraphIterator(int start, int limit)
+        {
+            reset(start, limit, start);
+        }
+
+        public void reset(int start, int limit, int pos)
+        {
+            fStart = start;
+            fLimit = limit;
+            setIterator(fStart, this);
+        }
+
+        public boolean isValid()
+        {
+            return fCurrentRun != kNoRun;
+        }
+
+        public void next()
+        {
+            if (fRunLimit < fLimit) {
+                fCurrentRun++;
+                setIteratorUsingRun(fCurrentRun, this);
+            }
+            else
+                set(0, 0, kNoRun, null);
+        }
+
+        public void prev()
+        {
+            if (fRunStart > fStart) {
+                fCurrentRun--;
+                setIteratorUsingRun(fCurrentRun, this);
+            }
+            else
+                set(0, 0, kNoRun, null);
+        }
+
+        public void set(int pos)
+        {
+            if (pos >= fStart && pos < fLimit) {
+                setIterator(pos, this);
+            } else {
+                set(0, 0, kNoRun, null);
+            }
+        }
+
+        // ParagraphBuffer calls back on this to set iterators
+        void set(int start, int limit, int currentRun, AttributeMap style)
+        {
+            fRunStart = start < fStart ? fStart : start;
+            fRunLimit = limit > fLimit ? fLimit : limit;
+            fCurrentRun = currentRun;
+            fStyle = style;
+        }
+
+        public void reset(int start, int limit)
+        {
+            reset(start, limit, start);
+        }
+
+        public void first()
+        {
+            set(fStart);
+        }
+
+        public void last()
+        {
+            set(fLimit - 1);
+        }
+
+        public int rangeStart()
+        {
+            return fStart;
+        }
+
+        public int rangeLimit()
+        {
+            return fLimit;
+        }
+
+        public int rangeLength()
+        {
+            return fLimit - fStart;
+        }
+
+        public int runStart()
+        {
+            return fRunStart;
+        }
+
+        public int runLimit()
+        {
+            return fRunLimit;
+        }
+
+        public int runLength()
+        {
+            return fRunLimit - fRunStart;
+        }
+
+        public AttributeMap style() {
+
+            return fStyle;
+        }
+
+        private int fStart;
+        private int fLimit;
+        private int fRunStart;
+        private int fRunLimit;
+        private int fCurrentRun;
+        private AttributeMap fStyle;
+    }
+}
diff --git a/src/com/ibm/richtext/styledtext/RunArray.java b/src/com/ibm/richtext/styledtext/RunArray.java
new file mode 100755
index 0000000..7e18f03
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/RunArray.java
@@ -0,0 +1,282 @@
+/*
+ * @(#)$RCSfile: RunArray.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/**
+* This class maintains intervals within a piece of text.  Interval boundaries
+* are stored in the fRunStart array.  Interval boundaries may have a
+* positive or negative representation.  A positive boundary is given as an offset
+* from 0.  A negative boundary is given as a negative offset from the ned of the text.
+* The RunArray stores positive boundaries in the entries [0, fPosEnd], and negative
+* boundaries in the entries [fNegStart, fLength).  New boundaries may be inserted into
+* the undefined middle of the RunArray.  If fPosEnd < 0, there are no positive entries.
+* If fNegStart >= fRunArray.length, there are no negative netries.  It's possible to have
+* a runarray with neither positive or negative entries.
+*
+* As an example of how the RunArray works, consider a piece of text with 5 intervals,
+* where each interval is 3 characters in length.  The RunArray for this text could
+* look like:
+*    fCurTextLength = 15, fPosEnd = 5, fNegStart = 10,
+*    fRunStart = { 0, 3, 6, 9, 12, U, U, U, U, U };
+* where U is an undefined array element.
+
+* An equivalent representation would be:
+*    fCurTextLength = 15, fPosEnd = 3, fNegStart = 8,
+*    fRunStart = { 0, 3, 6, U, U, U, U, U, -6, -3 };
+*
+* The RunArray class is used in the StyleBuffer and the ParagraphBuffer.  In the StyleBuffer,
+* the entries in fRunStart give the offsets where style runs begin.  In the
+* ParagraphBuffer, the fRunStart entries store offsets of paragraph breaks.
+*
+* This class provides methods for shifting the run table to a particular position, expanding the
+* run table, and returning the index of the run containing a particular offset in the text.  All
+* other functionality is implemented in the RunArray clients.
+*
+* RunArray uses FastIntBinarySearch for searches.  The searches are constructed on demand in
+* the findRunContaining method.  The searches are invalidated when the run array is shifted;
+* however, the RunArray can be modified by other classes.  Thus, if another class modifies
+* the entries in fRunArray, or modifies fPosEnd or fNegStart, it is responsible for
+* calling runStartsChanged.
+*/
+
+package com.ibm.richtext.styledtext;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
+final class RunArray implements Externalizable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final long serialVersionUID = 22356934;
+
+    int[] fRunStart;
+    private int fCurTextLength;
+    int fPosEnd, fNegStart;
+    
+    transient private FastIntBinarySearch fPosSearch;
+    transient private boolean fPosSearchValid;
+    transient private FastIntBinarySearch fNegSearch;
+    transient private boolean fNegSearchValid;
+
+    private static final int CURRENT_VERSION = 1;
+
+    RunArray(int initialSize, int curTextLength) {
+
+        fRunStart = new int[initialSize];
+        fCurTextLength = curTextLength;
+        fPosEnd = -1;
+        fNegStart = initialSize;
+        
+        fPosSearch = new FastIntBinarySearch(fRunStart, 0, 1);
+        fNegSearch = new FastIntBinarySearch(fRunStart, 0, 1);
+        fPosSearchValid = fNegSearchValid = false;
+    }
+
+    /**
+     * Note: this constructor is ONLY for use by the Serialization
+     * mechanism.  It does not leave this object in a valid state!
+     */
+    public RunArray() {
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        out.writeInt(CURRENT_VERSION);
+        out.writeObject(fRunStart);
+        out.writeInt(fCurTextLength);
+        out.writeInt(fPosEnd);
+        out.writeInt(fNegStart);
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+
+        if (in.readInt() != CURRENT_VERSION) {
+            throw new IOException("Invalid version of RunArray");
+        }
+        fRunStart = (int[]) in.readObject();
+        fCurTextLength = in.readInt();
+        fPosEnd = in.readInt();
+        fNegStart = in.readInt();
+        
+        fPosSearch = new FastIntBinarySearch(fRunStart, 0, 1);
+        fNegSearch = new FastIntBinarySearch(fRunStart, 0, 1);
+        fPosSearchValid = fNegSearchValid = false;
+    }
+
+    public int getCurTextLength() {
+
+        return fCurTextLength;
+    }
+
+    public void setCurTextLength(int curTextLength) {
+
+        fCurTextLength = curTextLength;
+    }
+
+    public void addToCurTextLength(int delta) {
+
+        fCurTextLength += delta;
+    }
+
+    public void runStartsChanged() {
+
+        fPosSearchValid = fNegSearchValid = false;
+    }
+
+/**
+* Returns the index of the last valid run.
+*/
+    int lastRun() {
+
+        return (fNegStart == fRunStart.length)? fPosEnd : fRunStart.length-1;
+    }
+
+/**
+* Returns the length of the run array.  Replaces old fLength member.
+*/
+    int getArrayLength() {
+
+        return fRunStart.length;
+    }
+
+/**
+* Shifts style table such that the last positive run
+* starts before pos.
+*/
+    void shiftTableTo(int pos) {
+
+        int oldPosEnd = fPosEnd;
+
+        while (fPosEnd >= 0 && fRunStart[fPosEnd] >= pos) {
+
+            fNegStart--;
+            fRunStart[fNegStart] = fRunStart[fPosEnd] - fCurTextLength;
+            fPosEnd--;
+
+        }
+
+        pos -= fCurTextLength;
+
+        while (fNegStart<fRunStart.length && fRunStart[fNegStart] < pos) {
+
+            fPosEnd++;
+            fRunStart[fPosEnd] = fRunStart[fNegStart] + fCurTextLength;
+            fNegStart++;
+        }
+
+        if (oldPosEnd != fPosEnd) {
+            fPosSearchValid = fNegSearchValid = false;
+        }
+    }
+
+/**
+* Returns index of style run containing pos.  If first style run starts before
+* pos, -1 is returned.  If pos is greater than text length, lastrun is returned.
+*/
+    int findRunContaining(int pos) {
+
+        FastIntBinarySearch search;
+        final int length = fRunStart.length;
+
+        if (fNegStart < length && (pos-fCurTextLength >= fRunStart[fNegStart])) {
+
+            pos -= fCurTextLength;
+
+            if (!fNegSearchValid) {
+                fNegSearch.setData(fRunStart, fNegStart, length-fNegStart);
+            }
+            search = fNegSearch;
+        }
+        else if (fPosEnd >= 0) {
+
+            if (!fPosSearchValid) {
+                fPosSearch.setData(fRunStart, 0, fPosEnd+1);
+            }
+            search = fPosSearch;
+        }
+        else
+            return -1;
+
+        int run = search.findIndex(pos);
+
+        return run;
+    }
+
+    int getLogicalRunStart(int run) {
+
+        if (run == -1) {
+            return 0;
+        }
+        else if (run == fRunStart.length) {
+            return fCurTextLength;
+        }
+        else {
+            if (run <= fPosEnd) {
+                return fRunStart[run];
+            }
+            else if (run >= fNegStart) {
+                return fRunStart[run] + fCurTextLength;
+            }
+            else {
+                throw new IllegalArgumentException("Illegal run");
+            }
+        }
+    }
+
+/**
+* Increases size of run table.  Current implementation doubles the run table's size.
+*/
+    void expandRunTable() {
+
+        resizeRunTable(fRunStart.length * 2);
+    }
+
+/**
+* Return the minimum number of elements possible in fRunStart.
+*/
+    private int getMinSize() {
+
+        return Math.max(fPosEnd + (fRunStart.length-fNegStart) + 1, 1);
+    }
+
+    void compress() {
+
+        int minSize = getMinSize();
+        if (fRunStart.length > minSize) {
+            resizeRunTable(minSize);
+        }
+    }
+
+    private void resizeRunTable(int newSize) {
+
+        if (newSize < getMinSize()) {
+            throw new IllegalArgumentException("Attempt to make RunArray too small.");
+        }
+
+        final int oldLength = fRunStart.length;
+
+        int newRunStart[] = new int[newSize];
+        System.arraycopy(fRunStart, 0, newRunStart, 0, fPosEnd+1);
+        int newNegStart = newRunStart.length - (oldLength-fNegStart);
+        System.arraycopy(fRunStart, fNegStart, newRunStart, newNegStart, (oldLength-fNegStart));
+
+        fNegStart = newNegStart;
+        fRunStart = newRunStart;
+
+        fPosSearchValid = fNegSearchValid = false;
+    }
+}
diff --git a/src/com/ibm/richtext/styledtext/StandardTabRuler.java b/src/com/ibm/richtext/styledtext/StandardTabRuler.java
new file mode 100755
index 0000000..e0b583f
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/StandardTabRuler.java
@@ -0,0 +1,374 @@
+/*
+ * @(#)$RCSfile: StandardTabRuler.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import java.util.Vector;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
+/**
+ * This class is a standard implementation of MTabRuler.
+ * It can have a finite number of client-specified TabStops.  After
+ * the client-specified TabStops, all TabStops have type
+ * <code>TabStop.kAuto</code> and are at the autospace intervals.
+ * @see TabStop
+ */
+public final class StandardTabRuler extends MTabRuler
+                                    implements Externalizable
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final int CURRENT_VERSION = 1;
+    private static final long serialVersionUID = 22356934;
+
+    private static final TabStop AUTO_ZERO = new TabStop(0, TabStop.kAuto);
+
+    private TabStop[] fTabs = null;
+    private int fAutoSpacing = 36; // every 1/2 inch.
+
+    /**
+     * Create a StandardTabRuler with only auto tabs, with spacing of 36.
+     */
+    public StandardTabRuler()
+    {
+    }
+
+    /**
+     * Create a StandardTabRuler with only auto tabs, with the
+     * given autoSpacing.
+     * @param autoSpacing the autoSpacing for this tab ruler
+     */
+    public StandardTabRuler(int autoSpacing)
+    {
+        fAutoSpacing = autoSpacing;
+    }
+
+    /**
+     * Create a StandardTabRuler.  The first TabStops on the ruler will be
+     * the TabStops in the <code>tabs</code> array.  After these tabs all
+     * tabs are auto tabs.
+     * @param tabs an array of TabStops.  The TabStops in the array must
+     *    be in strictly increasing order (of positions), and cannot have
+     *    type <code>TabStop.kAuto</code>.
+     * @param autoSpacing the autoSpacing interval to use after the last
+     *    client-specified tab.
+     */
+    public StandardTabRuler(TabStop[] tabs, int autoSpacing)
+    {
+        if (tabs.length > 0) {
+            validateTabArray(tabs);
+            fTabs = (TabStop[]) tabs.clone();
+        }
+        else {
+            fTabs = null;
+        }
+        fAutoSpacing = autoSpacing;
+    }
+
+    /** Tabs as provided, then autoSpacing after the last tab to eternity.  Use this constructor when
+        munging a ruler, it does no validation on the tabs in the vector. Vector may not be null. */
+
+    /*public*/ StandardTabRuler(Vector v, int autoSpacing)
+    {
+        fTabs = tabArrayFromVector(v);
+        fAutoSpacing = autoSpacing;
+    }
+
+    /** Construct from another ruler. No validation. Ruler may not be null. */
+
+    /*public*/ StandardTabRuler(MTabRuler ruler)
+    {
+        if (ruler == null) {
+            throw new IllegalArgumentException("ruler may not be null");
+        }
+
+        fTabs = tabArrayFromVector(vectorFromTabRuler(ruler));
+        fAutoSpacing = ruler.autoSpacing();
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+
+        int version = in.readInt();
+        if (version != CURRENT_VERSION) {
+            throw new IOException("Invalid version of StyledText: " + version);
+        }
+        fTabs = (TabStop[]) in.readObject();
+        fAutoSpacing = in.readInt();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        out.writeInt(CURRENT_VERSION);
+        out.writeObject(fTabs);
+        out.writeInt(fAutoSpacing);
+    }
+
+    /**
+     * Return first tab in the ruler.  If an autoTab, it is at position zero, and
+     * all subsequent tabs will be autotabs at autoSpacing intervals.
+     */
+    public TabStop firstTab()
+    {
+        if (fTabs != null && fTabs.length > 0) {
+            return fTabs[0];
+        }
+
+        return AUTO_ZERO;
+    }
+
+    /**
+     * Return the first tab in the ruler with fPosition > position.  If it is an
+     * autotab, it is at an increment of autoSpacing, and all subsequent tabs will be
+     * autotabs at autoSpacing intervals.
+     * @param position the position of the TabStop returned will be greater than this parameter
+     */
+    public TabStop nextTab(int position)
+    {
+        if (fTabs != null) {
+            for (int i = 0; i < fTabs.length; ++i) {
+                if (position < fTabs[i].getPosition())
+                    return fTabs[i];
+            }
+        }
+
+        if (position >= 4000) { // debug: sanity check
+            System.out.println("auto tab past 4000");
+        }
+
+        return new TabStop(((position / fAutoSpacing) + 1) * fAutoSpacing, TabStop.kAuto);
+    }
+
+    /**
+     * Return the interval for autotabs.
+     */
+    public int autoSpacing()
+    {
+        return fAutoSpacing;
+    }
+
+    /**
+     * Compare this to another Object. Returns true if the object
+     * is an MTabRuler with the same autoSpacing and tabs.
+     */
+    public boolean equals(Object o)
+    {
+        if (o == this) {
+            return true;
+        }
+        else if (o == null) {
+            return false;
+        }
+        
+        MTabRuler rhs;
+        try {
+            rhs = (MTabRuler)o;
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+
+        if (fAutoSpacing != rhs.autoSpacing())
+            return false;
+
+        TabStop rhsTab = rhs.firstTab();
+
+        if (fTabs != null) {
+            for (int i = 0; i < fTabs.length; ++i) {
+                if (!fTabs[i].equals(rhsTab))
+                    return false;
+
+                rhsTab = rhs.nextTab(rhsTab.getPosition());
+            }
+        }
+
+        return rhsTab.getType() == TabStop.kAuto;
+    }
+
+    /**
+     * Return debug information about this tab ruler.
+     */
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer(super.toString());
+        buffer.append(" auto: ");
+        buffer.append(Integer.toString(fAutoSpacing));
+
+        if (fTabs != null) {
+            for (int i = 0; i < fTabs.length; ++i) {
+                buffer.append(fTabs[i].toString());
+            }
+        }
+
+        return buffer.toString();
+    }
+
+    /** Utility to convert a vector of tabs to an array. */
+
+    private static TabStop[] tabArrayFromVector(Vector v)
+    {
+        int count = v.size();
+        TabStop[] tabs = new TabStop[count];
+        for (int i = 0; i < count; ++i) {
+            tabs[i] = (TabStop)v.elementAt(i);
+        }
+
+        return tabs;
+    }
+
+    /** Utility to convert a ruler to a vector of tabs, for munging. */
+
+    private static Vector vectorFromTabRuler(MTabRuler ruler)
+    {
+        Vector v = new Vector();
+        for (TabStop tab = ruler.firstTab(); tab != null && tab.getType() != TabStop.kAuto; tab = ruler.nextTab(tab.getPosition())) {
+            v.addElement(tab);
+        }
+
+        return v;
+    }
+
+    /** Utility to validate an array of tabs.  The array must not be null, must not contain null
+        entries, must not be kAuto, and positions must in increasing order. */
+
+    private static void validateTabArray(TabStop[] tabs)
+    {
+        int pos = Integer.MIN_VALUE;
+        for (int i = 0; i < tabs.length; ++i) {
+            if (tabs[i].getType() == TabStop.kAuto) {
+                throw new IllegalArgumentException("can't explicitly specify an auto tab.");
+            }
+            int nextpos = tabs[i].getPosition();
+            if (nextpos <= pos) {
+                throw new IllegalArgumentException("tab positions must be in increasing order.");
+            }
+            pos = nextpos;
+        }
+    }
+
+    /**
+     * Return a tab ruler identical to the given ruler, except with the
+     * given tab added.
+     * @param ruler the original ruler.  The MTabRuler will be the same as
+     *   this except for the additional tab.  <code>ruler</code> is not modified.
+     * @param tabToAdd the tab to add to the new tab ruler
+     * @return an MTabRuler resulting from this operation
+     */
+    /*public*/ static MTabRuler addTabToRuler(MTabRuler ruler, TabStop tabToAdd)
+    {
+        if (ruler == null || tabToAdd == null)
+            throw new IllegalArgumentException("ruler and tabToAdd may not be null");
+
+        Vector vector = new Vector();
+
+        int pos = 0;
+        boolean added = false;
+        for (TabStop tab = ruler.firstTab(); tab.getType() != TabStop.kAuto; tab = ruler.nextTab(pos)) {
+            pos = tab.getPosition();
+
+            if (!added && pos >= tabToAdd.getPosition()) {
+                if (pos == tabToAdd.getPosition())
+                    tab = null;
+                vector.addElement(tabToAdd);
+                added = true;
+            }
+
+            if (tab != null)
+                vector.addElement(tab);
+        }
+        if (!added)
+            vector.addElement(tabToAdd);
+
+        return new StandardTabRuler(vector, ruler.autoSpacing());
+    }
+
+    /**
+     * Return a tab ruler identical to the given ruler, except with the
+     * given tab removed.
+     * @param ruler the original ruler.  The MTabRuler will be the same as
+     *   this except for the removed tab.  <code>ruler</code> is not modified.
+     * @param position the position of the tab to remove from the new tab ruler
+     * @return an MTabRuler resulting from this operation
+     */
+    /*public*/ static MTabRuler removeTabFromRuler(MTabRuler ruler, int position)
+    {
+        if (ruler == null)
+            throw new IllegalArgumentException("ruler may not be null");
+
+        Vector vector = new Vector();
+
+        int pos = 0;
+        boolean removed = false;
+        for (TabStop tab = ruler.firstTab(); tab.getType() != TabStop.kAuto; tab = ruler.nextTab(pos)) {
+            pos = tab.getPosition();
+
+            if (!removed && pos >= position) {
+                if (pos == position) {
+                    removed = true;
+                    continue; // skip this tab and continue with the remainder
+                }
+                break; // we didn't remove a tab, but skipped position, so don't bother with the rest
+            }
+
+            vector.addElement(tab);
+        }
+        if (!removed) // no change
+            return ruler;
+
+        if (vector.size() == 0)
+            return new StandardTabRuler(ruler.autoSpacing());
+
+        return new StandardTabRuler(vector, ruler.autoSpacing());
+    }
+
+    /**
+     * Return a tab ruler identical to the given ruler, except with the
+     * tab at position <code>fromPosition</code> moved to position
+     * <code>toPosition</code>.
+     * @param ruler the original ruler.  The MTabRuler will be the same as
+     *   this except for the moved tab.  <code>ruler</code> is not modified.
+     * @param fromPosition the position of the tab to move
+     * @param toPosition the new position of the tab
+     * @return an MTabRuler resulting from this operation
+     */
+    /*public*/ static MTabRuler moveTabOnRuler(MTabRuler ruler, int fromPosition, int toPosition)
+    {
+        if (ruler == null)
+            throw new IllegalArgumentException("ruler may not be null");
+
+        Vector vector = new Vector();
+
+        int pos = 0;
+        boolean moved = false;
+        for (TabStop tab = ruler.firstTab(); tab.getType() != TabStop.kAuto; tab = ruler.nextTab(pos)) {
+            pos = tab.getPosition();
+
+            if (!moved && pos == fromPosition) {
+                moved = true;
+                tab = new TabStop(toPosition, tab.getType()); // copy it
+            }
+
+            vector.addElement(tab);
+        }
+        if (!moved) // no change
+            return ruler;
+
+        return new StandardTabRuler(vector, ruler.autoSpacing());
+    }
+
+}
diff --git a/src/com/ibm/richtext/styledtext/StyleBuffer.java b/src/com/ibm/richtext/styledtext/StyleBuffer.java
new file mode 100755
index 0000000..23cdb13
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/StyleBuffer.java
@@ -0,0 +1,671 @@
+/*
+ * @(#)$RCSfile: StyleBuffer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+/*
+    8/2/96
+        Added setIteratorUsingRun method
+
+    8/5/96
+        No longer has to be constructed with an MText.
+
+    8/8/96
+        Added replace method, which reads styles from a StyleRunIterator.
+        Also, added a constructor which takes a StyleRunIterator.
+        These methods are for copy/paste support.
+    8/16/96
+        StyleBuffer now takes MConstText instead of MText where possible.
+
+    10/23/96
+        Some old commented-out code removed for aesthetic reasons.
+
+    7/31/98 Switched to AttributeMap
+*/
+
+/**
+* StyleBuffer implements <tt>MStyleBuffer</tt>.  It maintains
+* <tt>AttributeMap</tt> objects to apply to the text in an <tt>MText</tt> object,
+* and the
+* intervals on which those styles apply.
+* <p>
+* StyleBuffer stores the intervals on which styles apply in a <tt>RunArray</tt>
+* object (see <tt>RunArray</tt> for more information).  The styles are stored in
+* an array of <tt>AttributeMap</tt> objects.
+* <p>
+* <tt>RunArray</tt> maintains an array of integers which represent offsets into text.
+* The array has a "positive" region in which offsets are given as positive distances
+* from the start of the text, and a "negative" region in which offsets are given as
+* negative distances from the end of the text.  Between the positive and negative regions
+* is a gap, into which new offsets may be inserted.  This storage scheme allows for
+* efficient response to a series of editing operations which occur in the same area of the
+* text.
+* <p>
+* StyleBuffer uses the offsets in <tt>RunArray</tt> as the boundaries of style runs.
+* A style run begins at each offset in <tt>RunArray</tt>, and each style run continues to
+* the next offset.  The style array is kept in sync with the array of offsets in <tt>RunArray</tt>;
+* that is, the style which begins at RunArray[i] is stored in StyleArray[i].
+* <p>
+* The first entry in the <tt>RunArray</tt> is always 0.
+*
+* @author John Raley
+*
+* @see AttributeMap
+* @see MText
+* @see RunArray
+*/
+
+final class StyleBuffer extends MStyleBuffer implements Externalizable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+    * Creates a new style buffer with length equal to the length of <tt>text</tt>,
+    * and with a single run of <tt>defaultStyle</tt>.
+    */
+    private static final long serialVersionUID = 22356934;
+
+    private static final int CURRENT_VERSION = 1;
+    private static final int kInitialSize = 10;
+    private RunArray fRunArray;
+
+    private AttributeMap fStyleTable[];
+
+    StyleBuffer(MConstText text, AttributeMap initialStyle) {
+
+        this(text.length(), initialStyle);
+    }
+
+    /**
+    * Creates a new style buffer with length <tt>initialLength</tt> and with a
+    * single run of <tt>defaultStyle</tt>.
+    */
+
+    StyleBuffer(int initialLength, AttributeMap initialStyle) {
+
+        fRunArray = new RunArray(kInitialSize, initialLength);
+        fRunArray.fPosEnd = 0;
+        fRunArray.fRunStart[0] = 0;
+
+        fStyleTable = new AttributeMap[kInitialSize]; // do I really want to do this???
+
+        fStyleTable[0] = initialStyle;
+    }
+
+    /**
+     * Note: this constructor is ONLY for use by the Serialization
+     * mechanism.  It does not leave this object in a valid state!
+     */
+    public StyleBuffer() {
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        compress();
+        out.writeInt(CURRENT_VERSION);
+        out.writeObject(fRunArray);
+        out.writeObject(fStyleTable);
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                                ClassNotFoundException {
+
+        if (in.readInt() != CURRENT_VERSION) {
+            throw new IOException("Invalid version of StyleBuffer");
+        }
+        fRunArray = (RunArray) in.readObject();
+        fStyleTable = (AttributeMap[]) in.readObject();
+    }
+
+/**
+* Shift style and run tables such that the last positive run begins before the given position.
+* Since there is always a run start at 0, this method ensures that the first run will not be shifted.
+* This is called by: <tt>insertText</tt> and <tt>deleteText</tt>.
+* @param pos a position in the text.
+*/
+
+    private void shiftTableTo(int pos) {
+
+        if (pos == 0)
+            pos = 1;
+
+        int oldNegStart = fRunArray.fNegStart;
+        int oldPosEnd = fRunArray.fPosEnd;
+
+        fRunArray.shiftTableTo(pos);
+
+        if (oldPosEnd > fRunArray.fPosEnd)
+            System.arraycopy(fStyleTable, fRunArray.fPosEnd+1,
+                             fStyleTable, fRunArray.fNegStart,
+                             oldPosEnd-fRunArray.fPosEnd);
+        else if (oldNegStart < fRunArray.fNegStart)
+            System.arraycopy(fStyleTable, oldNegStart,
+                             fStyleTable, oldPosEnd+1,
+                             fRunArray.fNegStart-oldNegStart);
+    }
+
+/**
+* Update the style table to reflect a change in the RunArray's size.
+*/
+    private void handleArrayResize(int oldNegStart) {
+
+        AttributeMap newStyleTable[] = new AttributeMap[fRunArray.getArrayLength()];
+        System.arraycopy(fStyleTable, 0, newStyleTable, 0, fRunArray.fPosEnd+1);
+        System.arraycopy(fStyleTable, oldNegStart, newStyleTable, fRunArray.fNegStart, (fRunArray.getArrayLength()-fRunArray.fNegStart));
+        fStyleTable = newStyleTable;
+    }
+
+/**
+* Minimize the amount of storage used by this object.
+*/
+    void compress() {
+
+        int oldNegStart = fRunArray.fNegStart;
+        fRunArray.compress();
+        if (fRunArray.fNegStart != oldNegStart) {
+            handleArrayResize(oldNegStart);
+        }
+    }
+
+/**
+* Increase the storage capacity of the style and run tables if no room remains.
+*/
+    private void expandStyleTableIfFull() {
+
+        if (fRunArray.fPosEnd + 1 == fRunArray.fNegStart) {
+
+            int oldNegStart = fRunArray.fNegStart;
+            fRunArray.expandRunTable();
+            handleArrayResize(oldNegStart);
+        }
+    }
+
+/*
+    public MStyleRunIterator createStyleRunIterator(int start, int limit) {
+
+        return new StyleRunIterator(start, limit);
+    }
+*/
+/**
+* Respond to an insertion in the text.  The length of the last style run which
+* begins before <tt>start</tt> is increased by <tt>length</tt>.  The run table
+* is shifted such that the run into which text was inserted is the last positive run.
+* This implementation assumes that all styles propogate.
+* @param start the offset where the insertion began
+* @param length the number of characters inserted
+*/
+    public void insertText(int start, int limit) {
+
+        shiftTableTo(start);
+        fRunArray.addToCurTextLength(limit - start);
+    }
+
+/**
+* Respond to a deletion in the text.  The last style run before
+* <tt>start</tt> is truncated to end at <tt>start</tt>.  The
+* style run containing (<tt>start</tt>+<tt>length</tt>) is set to begin
+* at (<tt>start</tt>+<tt>length</tt>).  Runs in between are deleted.
+* If the deletion occurs entirely within one style run, the length of the style
+* run is reduced by <tt>length</tt>.
+* This implementation assumes that all styles propogate.
+* This method shifts the run table such that the run in which the delete began
+* is the last positive run.  Other methods depend on this "side effect".
+* @param start the offset where the deletion began
+* @param length the offset where the deletion stopped
+*/
+    public void deleteText(int start, int limit) {
+
+        int length = limit - start;
+
+        // An optimization - if a whole run wasn't deleted we don't
+        // need to check for run merging, which could be expensive.
+        boolean wholeRunDeleted = false;
+
+        shiftTableTo(start);
+
+        int firstRunLimit = fRunArray.getCurTextLength();
+        if (fRunArray.fNegStart < fRunArray.getArrayLength())
+            firstRunLimit += fRunArray.fRunStart[fRunArray.fNegStart];
+
+        if (limit == fRunArray.getCurTextLength()) {
+            fRunArray.fNegStart = fRunArray.getArrayLength();
+        }
+        else if (limit >= firstRunLimit) {
+
+            int end = fRunArray.findRunContaining(limit);
+            if (end != fRunArray.fPosEnd) {
+                fRunArray.fRunStart[end] = limit - fRunArray.getCurTextLength();
+                fRunArray.fNegStart = end;
+                wholeRunDeleted = true;
+            }
+        }
+
+        if (fRunArray.fNegStart != fRunArray.getArrayLength()) {
+            if (start == 0 && limit >= firstRunLimit) {
+                // the first style run was deleted;  move first "negative" run into
+                // first position
+                fStyleTable[0] = fStyleTable[fRunArray.fNegStart++];
+            }
+            else if (wholeRunDeleted) {
+                if (fStyleTable[fRunArray.fNegStart].equals(fStyleTable[fRunArray.fPosEnd])) {
+                    // merge style runs
+                    fRunArray.fNegStart++;
+                }
+            }
+        }
+
+        fRunArray.addToCurTextLength(-length);
+
+        fRunArray.runStartsChanged();
+        //System.out.println("In deleteText:  number of style runs = " + numRuns(this));
+    }
+
+/**
+* Arrange style table so that old styles in the provided range are removed, and
+* new styles can be inserted into the insertion gap.
+* After calling this method, new style starts and styles may be placed
+* in the insertion gaps of fRunArray.fStyleStart and fStyleTable.
+* @param start offset in the text where insertion operation begins
+* @param limit offset in the text where previous styles resume
+*/
+    private void prepareStyleInsert(int start) {
+
+        if (start == 0) {
+
+            // fRunArray.fPosEnd should be 0 if we're in this branch.
+
+            if (fRunArray.getCurTextLength() > 0) {
+
+                /* Move first existing style run to negative end of buffer.
+                   Don't do this if length==0;  that is, if there is no real
+                   style run at 0.
+                 */
+
+                fRunArray.fNegStart--;
+                fStyleTable[fRunArray.fNegStart] = fStyleTable[0];
+                fRunArray.fRunStart[fRunArray.fNegStart] = -fRunArray.getCurTextLength();
+            }
+
+            fRunArray.fPosEnd = -1;
+        }
+        else {
+
+            // consistency check: start should be in current gap
+            if (fRunArray.fRunStart[fRunArray.fPosEnd] >= start) {
+                throw new Error("Inconsistent state!  Start should be within insertion gap.");
+            }
+
+            int endOfInsertionGap = fRunArray.getCurTextLength();
+            if (fRunArray.fNegStart < fRunArray.getArrayLength()) {
+                endOfInsertionGap += fRunArray.fRunStart[fRunArray.fNegStart];
+            }
+
+            if (endOfInsertionGap < start) {
+                throw new Error("Inconsistent state!  Start should be within insertion gap.");
+            }
+
+            // if no break at start (on negative end of buffer) make one
+
+            if (endOfInsertionGap != start) {
+
+                // split style run in insertion gap
+
+                expandStyleTableIfFull();
+
+                fRunArray.fNegStart--;
+                fStyleTable[fRunArray.fNegStart] = fStyleTable[fRunArray.fPosEnd];
+                fRunArray.fRunStart[fRunArray.fNegStart] = start - fRunArray.getCurTextLength();
+
+                //System.out.println("splitting run.");
+            }
+        }
+    }
+
+    public boolean modifyStyles(int start,
+                                int limit,
+                                StyleModifier modifier,
+                                int[] damagedRange) {
+
+        if (limit == start) {
+            return false;
+        }
+
+        shiftTableTo(start);
+
+        int currentRunStart = start;
+        AttributeMap oldStyle;
+        AttributeMap mergeStyle = fStyleTable[fRunArray.fPosEnd];
+
+        if (fRunArray.fNegStart < fRunArray.getArrayLength() &&
+                fRunArray.fRunStart[fRunArray.fNegStart]+fRunArray.getCurTextLength() == start) {
+
+            oldStyle = fStyleTable[fRunArray.fNegStart];
+            ++fRunArray.fNegStart;
+        }
+        else {
+            oldStyle = mergeStyle;
+        }
+
+        boolean modifiedAnywhere = false;
+        for(;;) {
+
+            boolean modified = false;
+
+            // push new style into gap on positive side
+            AttributeMap newStyle = modifier.modifyStyle(oldStyle);
+            if (damagedRange != null && !newStyle.equals(oldStyle)) {
+                modified = modifiedAnywhere = true;
+                damagedRange[0] = Math.min(currentRunStart, damagedRange[0]);
+            }
+
+            if (!newStyle.equals(mergeStyle)) {
+
+                if (currentRunStart != 0) {
+                    expandStyleTableIfFull();
+                    ++fRunArray.fPosEnd;
+                }
+
+                fStyleTable[fRunArray.fPosEnd] = newStyle;
+                fRunArray.fRunStart[fRunArray.fPosEnd] = currentRunStart;
+            }
+
+            mergeStyle = newStyle;
+
+            int nextRunStart = fRunArray.getLogicalRunStart(fRunArray.fNegStart);
+
+            if (limit > nextRunStart) {
+                oldStyle = fStyleTable[fRunArray.fNegStart];
+                currentRunStart = nextRunStart;
+                if (modified) {
+                    damagedRange[1] = Math.max(currentRunStart, damagedRange[1]);
+                }
+                ++fRunArray.fNegStart;
+            }
+            else {
+                if (limit < nextRunStart && !oldStyle.equals(mergeStyle)) {
+                    expandStyleTableIfFull();
+                    ++fRunArray.fPosEnd;
+                    fStyleTable[fRunArray.fPosEnd] = oldStyle;
+                    fRunArray.fRunStart[fRunArray.fPosEnd] = limit;
+                }
+                if (modified) {
+                    damagedRange[1] = Math.max(limit, damagedRange[1]);
+                }
+                break;
+            }
+        }
+
+        // merge last run if needed
+        if ((fRunArray.fNegStart < fRunArray.getArrayLength()) &&
+                    (fStyleTable[fRunArray.fNegStart].equals(fStyleTable[fRunArray.fPosEnd]))) {
+            fRunArray.fNegStart++;
+        }
+
+        fRunArray.runStartsChanged();
+
+        return modifiedAnywhere;
+    }
+
+    public int styleStart(int pos) {
+
+        if (pos == fRunArray.getCurTextLength()) {
+            return pos;
+        }
+
+        return fRunArray.getLogicalRunStart(fRunArray.findRunContaining(pos));
+    }
+
+    public int styleLimit(int pos) {
+
+        if (pos == fRunArray.getCurTextLength()) {
+            return pos;
+        }
+
+        int run = fRunArray.findRunContaining(pos);
+
+        if (run == fRunArray.fPosEnd) {
+            run = fRunArray.fNegStart;
+        }
+        else {
+            ++run;
+        }
+
+        return fRunArray.getLogicalRunStart(run);
+    }
+
+/**
+* Return style at location <tt>pos</tt>.
+* @param pos an offset into the text
+* @returns the style of the character at <tt>offset</tt>
+*/
+    public AttributeMap styleAt(int pos) {
+
+        return fStyleTable[ fRunArray.findRunContaining(pos) ];
+    }
+
+/*
+* Set run start, run length, and run value in an iterator.  This method is
+* only called by a <tt>StyleRunIterator</tt>.
+* @param pos an offset into the text.  The iterator's run start and run limit are
+* set to the run containing <tt>pos</tt>.
+* @param iter the iterator to set
+*/
+    void setIterator(int pos, StyleRunIterator iter) {
+
+        if ((pos < 0) || (pos > fRunArray.getCurTextLength())) {
+
+            iter.set(null, 0, 0, kNoRun);
+            return;
+        }
+
+        int run = fRunArray.findRunContaining(pos);
+
+        setIteratorUsingRun(run, iter);
+    }
+
+/**
+* Set run start, run length, and run value in an iterator.  This method is
+* only called by a <tt>StyleRunIterator</tt>.
+* @param run the index of the run to which the iterator should be set
+* @param iter the iterator to set
+*/
+    private void setIteratorUsingRun(int run, StyleRunIterator iter) {
+
+        int lastValidRun = fRunArray.lastRun();
+
+        if (run < 0 || run > lastValidRun) {
+
+            iter.set(null, 0, 0, kNoRun);
+            return;
+        }
+
+        if (run == fRunArray.fPosEnd+1)
+            run = fRunArray.fNegStart;
+        else if (run == fRunArray.fNegStart-1)
+            run = fRunArray.fPosEnd;
+
+        int runStart = fRunArray.fRunStart[run];
+        if (runStart < 0)
+            runStart += fRunArray.getCurTextLength();
+
+        AttributeMap style = fStyleTable[run];
+
+        int nextRun;
+
+        if (run == fRunArray.fPosEnd)
+            nextRun = fRunArray.fNegStart;
+        else
+            nextRun = run + 1;
+
+        int runLimit;
+
+        if (nextRun >= fRunArray.getArrayLength())
+            runLimit = fRunArray.getCurTextLength();
+        else {
+            runLimit = fRunArray.fRunStart[nextRun];
+            if (runLimit < 0)
+                runLimit += fRunArray.getCurTextLength();
+        }
+
+        //System.out.println("setIterator: pos="+pos+", runStart="+runStart+", runLimit="+runLimit+
+        //                  ", run="+run+", fPosEnd="+fPosEnd);
+
+        iter.set(style, runStart, runLimit, run);
+    }
+
+    public void replace(int start, int limit, MConstText srcText, int srcStart, int srcLimit)
+    {
+        deleteText(start, limit);
+        if (srcStart == srcLimit)
+            return;
+        prepareStyleInsert(start);
+        for (int j2 = srcStart; j2 < srcLimit; j2 = srcText.characterStyleLimit(j2))
+        {
+            AttributeMap attributeMap = srcText.characterStyleAt(j2);
+            if (fRunArray.fPosEnd < 0 || !fStyleTable[fRunArray.fPosEnd].equals(attributeMap))
+            {
+                expandStyleTableIfFull();
+                fRunArray.fPosEnd++;
+                fRunArray.fRunStart[fRunArray.fPosEnd] = j2 - srcStart + start;
+                fStyleTable[fRunArray.fPosEnd] = attributeMap;
+            }
+        }
+        fRunArray.addToCurTextLength(srcLimit - srcStart);
+        if (fRunArray.fNegStart < fRunArray.getArrayLength() && fStyleTable[fRunArray.fNegStart].equals(fStyleTable[fRunArray.fPosEnd]))
+            fRunArray.fNegStart++;
+    }
+
+    private  static final int kNoRun = -42; // iterator use
+
+    private final class StyleRunIterator /*implements MStyleRunIterator*/ {
+
+        StyleRunIterator(int start, int limit)
+        {
+            reset(start, limit, start);
+        }
+
+        public void reset(int start, int limit, int pos)
+        {
+            fStart = start;
+            fLimit = limit;
+            setIterator(fStart, this);
+        }
+
+        public boolean isValid()
+        {
+            return fStyle != null;
+        }
+
+        public void next()
+        {
+            if (fRunLimit < fLimit) {
+                fCurrentRun++;
+                setIteratorUsingRun(fCurrentRun, this);
+            }
+            else
+                set(null, 0, 0, kNoRun);
+        }
+
+        public void prev()
+        {
+            if (fRunStart > fStart) {
+                fCurrentRun--;
+                setIteratorUsingRun(fCurrentRun, this);
+            }
+            else
+                set(null, 0, 0, kNoRun);
+        }
+
+        public void set(int pos)
+        {
+            if (pos >= fStart && pos < fLimit) {
+                setIterator(pos, this);
+            } else {
+                set(null, 0, 0, kNoRun);
+            }
+        }
+
+        void set(AttributeMap style, int start, int limit, int currentRun)
+        {
+            fStyle = style;
+            fCurrentRun = currentRun;
+            fRunStart = start < fStart ? fStart : start;
+            fRunLimit = limit > fLimit ? fLimit : limit;
+        }
+
+        public void reset(int start, int limit)
+        {
+            reset(start, limit, start);
+        }
+
+        public void first()
+        {
+            set(fStart);
+        }
+
+        public void last()
+        {
+            set(fLimit - 1);
+        }
+
+        public int rangeStart()
+        {
+            return fStart;
+        }
+
+        public int rangeLimit()
+        {
+            return fLimit;
+        }
+
+        public int rangeLength()
+        {
+            return fLimit - fStart;
+        }
+
+        public AttributeMap style()
+        {
+            return fStyle;
+        }
+
+        public int runStart()
+        {
+            return fRunStart;
+        }
+
+        public int runLimit()
+        {
+            return fRunLimit;
+        }
+
+        public int runLength()
+        {
+            return fRunLimit - fRunStart;
+        }
+
+        private int fStart;
+        private int fLimit;
+        private AttributeMap fStyle;
+        private int fRunStart;
+        private int fRunLimit;
+        private int fCurrentRun;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/styledtext/StyleModifier.java b/src/com/ibm/richtext/styledtext/StyleModifier.java
new file mode 100755
index 0000000..90453c1
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/StyleModifier.java
@@ -0,0 +1,192 @@
+/*
+ * @(#)$RCSfile: StyleModifier.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.AttributeSet;
+
+/**
+ * StyleModifier is the base class for operations on AttributeMap.  To implement
+ * an operation on AttributeMap, subclass StyleModifier and override
+ * <code>modifyStyle</code>.  StyleModifiers are used by MText.
+ * <p>
+ * For convenience, this class contains factory methods which will create a
+ * StyleModifier for
+ * certain common operations: attribute union, attribute removal, and AttributeMap
+ * replacement.
+ * @see AttributeMap
+ * @see AttributeSet
+ * @see MText
+ */
+/*
+ * {jbr} StyleModifier is not the best name for this class - styles are immutable and never
+ * really modified.
+ */
+public class StyleModifier
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * Create a StyleModifier.
+     */
+    protected StyleModifier() {
+    }
+
+    /**
+     * Return the result of this StyleModifier's operation on the given style.
+     * Default implementation just returns the given style.
+     * @param style the AttributeMap to perform the operation on
+     */
+    public AttributeMap modifyStyle(AttributeMap style)
+    {
+        return style;
+    }
+
+    /**
+     * A StyleModifier which simply returns the given style.
+     */
+    public static final StyleModifier IDENTITY = new StyleModifier();
+
+    /**
+     * Create a StyleModifier whose operation is
+     * <code>style.addAttributes(s)</code>,
+     * where <code>style</code> is the AttributeMap passed to
+     * <code>modifyStyle</code>.
+     * @param s the AttributeMap to union with
+     * @return a StyleModifier for this operation
+     */
+    public static StyleModifier createAddModifier(AttributeMap s) {
+
+        return new StyleAddModifier(s);
+    }
+
+    /**
+     * Create a StyleModifier whose operation is
+     * <code>style.addAttribute(key, value)</code>,
+     * where <code>style</code> is the AttributeMap passed to
+     * <code>modifyStyle</code>.
+     * @param key the key to add
+     * @param value the value to add
+     * @return a StyleModifier for this operation
+     */
+    public static StyleModifier createAddModifier(Object key,
+                                                  Object value) {
+
+        return new AttributeAddModifier(key, value);
+    }
+
+    /**
+     * Create a StyleModifier whose operation returns <code>s</code>,
+     * ignoring the parameter to <code>modifyStyle</code>.
+     * @param s the AttributeMap which will replace any other AttributeMap
+     * @return a StyleModifier for this operation
+     */
+    public static StyleModifier createReplaceModifier(AttributeMap s) {
+
+        return new StyleReplaceModifier(s);
+    }
+
+    /**
+     * Create a StyleModifier whose operation is
+     * <code>style.removeAttributes(s)</code>,
+     * where <code>style</code> is the AttributeMap passed to
+     * <code>modifyStyle</code>.
+     * @param s the AttributeSet of attributes to remove
+     * @return a StyleModifier for this operation
+     */
+    public static StyleModifier createRemoveModifier(AttributeSet s) {
+
+        return new StyleRemoveModifier(s);
+    }
+
+    static final class AttributeAddModifier extends StyleModifier {
+
+        private Object fKey;
+        private Object fValue;
+
+        public AttributeAddModifier(Object key, Object value) {
+
+            fKey = key;
+            fValue = value;
+        }
+
+        public AttributeMap modifyStyle(AttributeMap style) {
+
+            return style.addAttribute(fKey, fValue);
+        }
+    }
+
+    /**
+     * Create this with the styles to add.  These styles will add to and override any already
+     * present in the style passed to modifyStyle.
+     */
+    static final class StyleAddModifier extends StyleModifier
+    {
+        private AttributeMap fStyle;
+
+        public StyleAddModifier(AttributeMap style)
+        {
+            if (style == null) {
+                throw new IllegalArgumentException("style is null");
+            }
+            fStyle = style;
+        }
+
+        public AttributeMap modifyStyle(AttributeMap style)
+        {
+            return style.addAttributes(fStyle);
+        }
+    }
+
+    /**
+     * Create this with the styles to replace.  All style runs will have only these
+     * styles.
+     */
+    static final class StyleReplaceModifier extends StyleModifier
+    {
+        private AttributeMap fStyle;
+
+        public StyleReplaceModifier(AttributeMap style)
+        {
+            if (style == null) {
+                throw new IllegalArgumentException("style is null");
+            }
+            fStyle = style;
+        }
+
+        public AttributeMap modifyStyle(AttributeMap style)
+        {
+            return fStyle;
+        }
+    }
+
+    static final class StyleRemoveModifier extends StyleModifier {
+
+        private AttributeSet fRemoveSet;
+
+        public StyleRemoveModifier(AttributeSet removeSet) {
+
+            if (removeSet == null) {
+                throw new IllegalArgumentException("set is null");
+            }
+            fRemoveSet = removeSet;
+        }
+
+        public AttributeMap modifyStyle(AttributeMap style) {
+
+            return style.removeAttributes(fRemoveSet);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/styledtext/StyledText.java b/src/com/ibm/richtext/styledtext/StyledText.java
new file mode 100755
index 0000000..5520646
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/StyledText.java
@@ -0,0 +1,686 @@
+/*
+ * @(#)$RCSfile: StyledText.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.text.CharacterIterator;
+
+/**
+ * This class is an implementation of MText, a modifyable, styled text
+ * storage model.  Additionally, it supports persistance through the
+ * Externalizable interface.
+ * @see MText
+ */
+
+/*
+    10/28/96 {jf} - split the character and paragraph style access and setter function around...
+            just to keep things interesting.
+    8/7/96 {jf} - moved paragraph break implementation from AbstractText into Style text.
+            - added countStyles, getStyles, and ReplaceStyles implementation.
+
+    8/14/96 sfb  eliminated StyleSheetIterator
+
+    8/29/96 {jbr} changed iter-based replace method - doesn't call at() unless it is safe to do so
+            Also, added checkStartAndLimit for debugging
+
+    7/31/98 Switched from Style to AttributeMap
+
+*/
+
+public final class StyledText extends MText implements Externalizable
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final int CURRENT_VERSION = 1;
+    private static final long serialVersionUID = 22356934;
+
+    /* unicode storage */
+    private MCharBuffer         fCharBuffer;
+    /* character style storage */
+    private MStyleBuffer        fStyleBuffer;
+    /* paragraph style storage */
+    private MParagraphBuffer    fParagraphBuffer;
+
+    private transient int fTimeStamp = 0;
+    private transient int[] fDamagedRange = { Integer.MAX_VALUE,
+                                              Integer.MIN_VALUE };
+
+    private static class ForceModifier extends StyleModifier {
+
+        private AttributeMap fStyle = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+
+        void setStyle(AttributeMap style) {
+
+            fStyle = style;
+        }
+
+        public AttributeMap modifyStyle(AttributeMap style) {
+
+            return fStyle;
+        }
+    }
+
+    // Keep this around foruse in replaceCharStylesWith.  OK since
+    // this class isn't threadsafe anyway.
+    private transient ForceModifier forceModifier = null;
+
+    //======================================================
+    // CONSTRUCTORS
+    //======================================================
+    /**
+     * Create an empty text object.
+     */
+    public StyledText()
+    {
+        this(0);
+    }
+
+    /**
+     * Create an empty text object ready to hold at least capacity chars.
+     * @param capacity the minimum capacity of the internal text buffer
+     */
+    public StyledText(int capacity)
+    {
+        fCharBuffer         = capacity>0? new CharBuffer(capacity) : new CharBuffer();
+        fStyleBuffer        = new StyleBuffer(this, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+        fParagraphBuffer    = new ParagraphBuffer(fCharBuffer);
+    }
+
+    /**
+     * Create a text object with the characters in the string,
+     * in the given style.
+     * @param string the initial contents
+     * @param initialStyle the style of the initial text
+     */
+    public StyledText(String string, AttributeMap initialStyle)
+    {
+        fCharBuffer = new CharBuffer(string.length());
+        fCharBuffer.replace(0, 0, string, 0, string.length());
+
+        fStyleBuffer = new StyleBuffer(this, initialStyle);
+        fParagraphBuffer = new ParagraphBuffer(fCharBuffer);
+    }
+
+    /**
+     * Create a text object from the given source.
+     * @param source the text to copy
+     */
+    public StyledText(MConstText source) {
+        this();
+        append(source);
+    }
+    
+    /**
+     * Create a text object from a subrange of the given source.
+     * @param source the text to copy from
+     * @param srcStart the index of the first character to copy
+     * @param srcLimit the index after the last character to copy
+     */
+    public StyledText(MConstText source, int srcStart, int srcLimit) {
+        this();
+        replace(0, 0, source, srcStart, srcLimit);
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        out.writeInt(CURRENT_VERSION);
+        out.writeObject(fCharBuffer);
+        out.writeObject(fStyleBuffer);
+        out.writeObject(fParagraphBuffer);
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+
+        int version = in.readInt();
+        if (version != CURRENT_VERSION) {
+            throw new IOException("Invalid version of StyledText: " + version);
+        }
+        fCharBuffer = (MCharBuffer) in.readObject();
+        fStyleBuffer = (MStyleBuffer) in.readObject();
+        fParagraphBuffer = (MParagraphBuffer) in.readObject();
+
+        resetDamagedRange();
+    }
+
+    //======================================================
+    // MConstText INTERFACES
+    //======================================================
+
+    //--------------------------------------------------------
+    // character access
+    //--------------------------------------------------------
+/**
+* Return the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the character at offset <code>pos</code>
+*/
+    public char at(int pos)
+    {
+        return fCharBuffer.at(pos);
+    }
+
+/**
+* Copy the characters in the range [<code>start</code>, <code>limit</code>)
+* into the array <code>dst</code>, beginning at <code>dstStart</code>.
+* @param start offset of first character which will be copied into the array
+* @param limit offset immediately after the last character which will be copied into the array
+* @param dst array in which to copy characters.  The length of <code>dst</code> must be at least
+* (<code>dstStart + limit - start</code>).
+*/
+    public void extractChars(int start, int limit, char[] dst, int dstStart)
+    {
+        fCharBuffer.at(start, limit, dst, dstStart);
+    }
+
+    //-------------------------------------------------------
+    // text model creation
+    //-------------------------------------------------------
+/**
+* Create an MConstText containing the characters and styles in the range
+* [<code>start</code>, <code>limit</code>).
+* @param start offset of first character in the new text
+* @param limit offset immediately after the last character in the new text
+* @return an MConstText object containing the characters and styles in the given range
+*/
+    public MConstText extract(int start, int limit)
+    {
+        return extractWritable(start, limit);
+    }
+
+/**
+* Create an MText containing the characters and styles in the range
+* [<code>start</code>, <code>limit</code>).
+* @param start offset of first character in the new text
+* @param limit offset immediately after the last character in the new text
+* @return an MConstText object containing the characters and styles in the given range
+*/
+    public MText extractWritable(int start, int limit)
+    {
+        MText text = new StyledText();
+        text.replace(0, 0, this, start, limit);
+        text.resetDamagedRange();
+        return text;
+    }
+
+    //--------------------------------------------------------
+    // size/capacity
+    //--------------------------------------------------------
+/**
+* Return the length of the MConstText object.  The length is the number of characters in the text.
+* @return the length of the MConstText object
+*/
+    public int length()
+    {
+        return fCharBuffer.length();
+    }
+
+/**
+* Create a <code>CharacterIterator</code> over the range [<code>start</code>, <code>limit</code>).
+* @param start the beginning of the iterator's range
+* @param limit the limit of the iterator's range
+* @returns a valid <code>CharacterIterator</code> over the specified range
+* @see java.text.CharacterIterator
+*/
+    public CharacterIterator createCharacterIterator(int start, int limit)
+    {
+        return fCharBuffer.createCharacterIterator(start, limit);
+    }
+
+    //--------------------------------------------------------
+    // character styles
+    //--------------------------------------------------------
+
+/**
+* Return the index of the first character in the character style run
+* containing pos.  All characters in a style run have the same character
+* style.
+* @returns the style at offset <code>pos</code>
+*/
+    public int characterStyleStart(int pos) {
+
+        checkPos(pos, LESS_THAN_LENGTH);
+        return fStyleBuffer.styleStart(pos);
+    }
+
+/**
+* Return the index after the last character in the character style run
+* containing pos.  All characters in a style run have the same character
+* style.
+* @returns the style at offset <code>pos</code>
+*/
+    public int characterStyleLimit(int pos) {
+
+        checkPos(pos, NOT_GREATER_THAN_LENGTH);
+        return fStyleBuffer.styleLimit(pos);
+    }
+
+/**
+* Return the style applied to the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the style at offset <code>pos</code>
+*/
+    public AttributeMap characterStyleAt(int pos)
+    {
+        checkPos(pos, NOT_GREATER_THAN_LENGTH);
+        return fStyleBuffer.styleAt(pos);
+    }
+
+    //--------------------------------------------------------
+    // paragraph boundaries and styles
+    //--------------------------------------------------------
+/**
+* Return the start of the paragraph containing the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the start of the paragraph containing the character at offset <code>pos</code>
+*/
+    public int paragraphStart(int pos)
+    {
+        checkPos(pos, NOT_GREATER_THAN_LENGTH);
+        return fParagraphBuffer.paragraphStart(pos);
+    }
+
+/**
+* Return the limit of the paragraph containing the character at offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the limit of the paragraph containing the character at offset <code>pos</code>
+*/
+    public int paragraphLimit(int pos)
+    {
+        checkPos(pos, NOT_GREATER_THAN_LENGTH);
+        return fParagraphBuffer.paragraphLimit(pos);
+    }
+
+/**
+* Return the paragraph style applied to the paragraph containing offset <code>pos</code>.
+* @param pos a valid offset into the text
+* @returns the paragraph style in effect at <code>pos</code>
+*/
+    public AttributeMap paragraphStyleAt(int pos)
+    {
+        checkPos(pos, NOT_GREATER_THAN_LENGTH);
+        return fParagraphBuffer.paragraphStyleAt(pos);
+    }
+
+/**
+* Return the current time stamp.  The time stamp is
+* incremented whenever the contents of the MConstText changes.
+* @return the current paragraph style time stamp
+*/
+    public int getTimeStamp() {
+
+        return fTimeStamp;
+    }
+
+    //======================================================
+    // MText INTERFACES
+    //======================================================
+    //--------------------------------------------------------
+    // character modfication functions
+    //--------------------------------------------------------
+
+    private void updateDamagedRange(int deleteStart,
+                                    int deleteLimit,
+                                    int insertLength) {
+
+        fDamagedRange[0] = Math.min(fDamagedRange[0], deleteStart);
+
+        if (fDamagedRange[1] >= deleteLimit) {
+            int lengthChange = insertLength - (deleteLimit-deleteStart);
+            fDamagedRange[1] += lengthChange;
+        }
+        else {
+            fDamagedRange[1] = deleteStart + insertLength;
+        }
+    }
+
+/**
+* Replace the characters and styles in the range [<code>start</code>, <code>limit</code>) with the characters
+* and styles in <code>srcText</code> in the range [<code>srcStart</code>, <code>srcLimit</code>).  <code>srcText</code> is not
+* modified.
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character and style at
+* <code>limit</code> is not modified.
+* @param srcText the source for the new characters and styles
+* @param srcStart the offset into <code>srcText</code> where new characters and styles will be obtained
+* @param srcLimit the offset into <code>srcText</code> where the new characters and styles end
+*/
+    public void replace(int start, int limit, MConstText text, int srcStart, int srcLimit)
+    {
+        if (text == this) {
+            text = new StyledText(text);
+        }
+
+        if (start == limit && srcStart == srcLimit) {
+            return;
+        }
+
+        checkStartLimit(start, limit);
+
+        updateDamagedRange(start, limit, srcLimit-srcStart);
+
+        fCharBuffer.replace(start, limit, text, srcStart, srcLimit);
+        fStyleBuffer.replace(start, limit, text, srcStart, srcLimit);
+        fParagraphBuffer.replace(start, limit, text, srcStart, srcLimit, fDamagedRange);
+        fTimeStamp += 1;
+    }
+
+/**
+* Replace the characters and styles in the range [<code>start</code>, <code>limit</code>) with the characters
+* and styles in <code>srcText</code>.  <code>srcText</code> is not
+* modified.
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character and style at
+* <code>limit</code> is not modified.
+* @param srcText the source for the new characters and styles
+*/
+    public void replace(int start, int limit, MConstText text) {
+
+        replace(start, limit, text, 0, text.length());
+    }
+
+/**
+* Replace the characters in the range [<code>start</code>, <code>limit</code>) with the characters
+* in <code>srcChars</code> in the range [<code>srcStart</code>, <code>srcLimit</code>).  New characters take on the style
+* <code>charsStyle</code>.
+* <code>srcChars</code> is not modified.
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character at
+* <code>limit</code> is not modified.
+* @param srcChars the source for the new characters
+* @param srcStart the offset into <code>srcChars</code> where new characters will be obtained
+* @param srcLimit the offset into <code>srcChars</code> where the new characters end
+* @param charsStyle the style of the new characters
+*/
+    public void replace(int start, int limit, char[] srcChars, int srcStart, int srcLimit, AttributeMap charsStyle)
+    {
+        checkStartLimit(start, limit);
+
+        if (start == limit && srcStart == srcLimit) {
+            return;
+        }
+
+        updateDamagedRange(start, limit, srcLimit-srcStart);
+
+        fCharBuffer.replace(start, limit, srcChars, srcStart, srcLimit);
+
+        replaceCharStylesWith(start, limit, start + (srcLimit-srcStart), charsStyle);
+
+        fParagraphBuffer.deleteText(start, limit, fDamagedRange);
+        fParagraphBuffer.insertText(start, srcChars, srcStart, srcLimit);
+
+        fTimeStamp += 1;
+    }
+
+    private void replaceCharStylesWith(int start, int oldLimit, int newLimit, AttributeMap style) {
+
+        if (start < oldLimit) {
+            fStyleBuffer.deleteText(start, oldLimit);
+        }
+        if (start < newLimit) {
+            if (forceModifier == null) {
+                forceModifier = new ForceModifier();
+            }
+            forceModifier.setStyle(style);
+            fStyleBuffer.insertText(start, newLimit);
+            fStyleBuffer.modifyStyles(start, newLimit, forceModifier, null);
+        }
+    }
+
+/**
+* Replace the characters in the range [<code>start</code>, <code>limit</code>) with the character <code>srcChar</code>.
+* The new character takes on the style <code>charStyle</code>
+* @param start the offset at which the replace operation begins
+* @param limit the offset at which the replace operation ends.  The character at
+* <code>limit</code> is not modified.
+* @param srcChar the new character
+* @param charsStyle the style of the new character
+*/
+    public void replace(int start, int limit, char srcChar, AttributeMap charStyle)
+    {
+        checkStartLimit(start, limit);
+
+        updateDamagedRange(start, limit, 1);
+
+        fCharBuffer.replace(start, limit, srcChar);
+
+        replaceCharStylesWith(start, limit, start + 1, charStyle);
+
+        if (start < limit) {
+            fParagraphBuffer.deleteText(start, limit, fDamagedRange);
+        }
+
+        fParagraphBuffer.insertText(start, srcChar);
+
+        fTimeStamp += 1;
+    }
+
+/**
+* Replace the entire contents of this MText (both characters and styles) with
+* the contents of <code>srcText</code>.
+* @param srcText the source for the new characters and styles
+*/
+    public void replaceAll(MConstText srcText)
+    {
+        replace(0, length(), srcText, 0, srcText.length());
+    }
+
+/**
+* Insert the contents of <code>srcText</code> (both characters and styles) into this
+* MText at the position specified by <code>pos</code>.
+* @param pos The character offset where the new text is to be inserted.
+* @param srcText The text to insert.
+*/
+    public void insert(int pos, MConstText srcText)
+    {
+        replace(pos, pos, srcText, 0, srcText.length());
+    }
+
+/**
+* Append the contents of <code>srcText</code> (both characters and styles) to the
+* end of this MText.
+* @param srcText The text to append.
+*/
+    public void append(MConstText srcText)
+    {
+        replace(length(), length(), srcText, 0, srcText.length());
+    }
+
+/**
+* Delete the specified range of characters (and styles).
+* @param start Offset of the first character to delete.
+* @param limit Offset of the first character after the range to delete.
+*/
+    public void remove(int start, int limit)
+    {
+        replace(start, limit, (char[])null, 0, 0, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+    }
+
+/**
+* Delete all characters and styles.  Always increments time stamp.
+*/
+    public void remove()
+    {
+        // rather than going through replace(), just reinitialize the StyledText,
+        // letting the old data structures fall on the floor
+        fCharBuffer = new CharBuffer();
+        fStyleBuffer = new StyleBuffer(this, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+        fParagraphBuffer = new ParagraphBuffer(fCharBuffer);
+        fTimeStamp += 1;
+        fDamagedRange[0] = fDamagedRange[1] = 0;
+    }
+
+    //--------------------------------------------------------
+    // storage management
+    //--------------------------------------------------------
+
+/**
+* Minimize the amount of memory used by the MText object.
+*/
+    public void compress() {
+
+        fCharBuffer.compress();
+        fStyleBuffer.compress();
+        fParagraphBuffer.compress();
+    }
+
+    //--------------------------------------------------------
+    // style modification
+    //--------------------------------------------------------
+
+/**
+* Set the style of all characters in the MText object to
+* <code>AttributeMap.EMPTY_ATTRIBUTE_MAP</code>.
+*/
+    public void removeCharacterStyles() {
+
+        fStyleBuffer = new StyleBuffer(this, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+        fTimeStamp += 1;
+        fDamagedRange[0] = 0;
+        fDamagedRange[1] = length();
+    }
+
+/**
+* Invoke the given modifier on all character styles from start to limit.
+* @param modifier the modifier to apply to the range.
+* @param start the start of the range of text to modify.
+* @param limit the limit of the range of text to modify.
+*/
+    public void modifyCharacterStyles(int start, int limit, StyleModifier modifier) {
+
+        checkStartLimit(start, limit);
+        boolean modified = fStyleBuffer.modifyStyles(start,
+                                                     limit,
+                                                     modifier,
+                                                     fDamagedRange);
+        if (modified) {
+            fTimeStamp += 1;
+        }
+    }
+
+/**
+* Invoke the given modifier on all paragraph styles in paragraphs
+* containing characters in the range [start, limit).
+* @param modifier the modifier to apply to the range.
+* @param start the start of the range of text to modify.
+* @param limit the limit of the range of text to modify.
+*/
+    public void modifyParagraphStyles(int start, int limit, StyleModifier modifier) {
+
+        checkStartLimit(start, limit);
+        boolean modified = fParagraphBuffer.modifyParagraphStyles(start,
+                                                                  limit,
+                                                                  modifier,
+                                                                  fDamagedRange);
+        if (modified) {
+            fTimeStamp += 1;
+        }
+    }
+
+/**
+* Reset the damaged range to an empty interval, and begin accumulating the damaged
+* range.  The damaged range includes every index where a character, character style,
+* or paragraph style has changed.
+* @see #damagedRangeStart
+* @see #damagedRangeLimit
+*/
+    public void resetDamagedRange() {
+
+        fDamagedRange[0] = Integer.MAX_VALUE;
+        fDamagedRange[1] = Integer.MIN_VALUE;
+    }
+
+/**
+* Return the start of the damaged range.
+* If the start is
+* <code>Integer.MAX_VALUE</code> and the limit is
+* <code>Integer.MIN_VALUE</code>, then the damaged range
+* is empty.
+* @return the start of the damaged range
+* @see #damagedRangeLimit
+* @see #resetDamagedRange
+*/
+    public int damagedRangeStart() {
+
+        return fDamagedRange[0];
+    }
+
+/**
+* Return the limit of the damaged range.
+* If the start is
+* <code>Integer.MAX_VALUE</code> and the limit is
+* <code>Integer.MIN_VALUE</code>, then the damaged range
+* is empty.
+* @return the limit of the damaged range
+* @see #damagedRangeStart
+* @see #resetDamagedRange
+*/
+    public int damagedRangeLimit() {
+
+        return fDamagedRange[1];
+    }
+
+    public String toString()
+    {
+        String result ="";
+        for (int i = 0; i < length(); i++) {
+            result += at(i);
+        }
+        return result;
+    }
+
+    //======================================================
+    // IMPLEMENTATION
+    //======================================================
+
+    /* check a range to see if it is well formed and within the bounds of the text */
+    private void checkStartLimit(int start, int limit)
+    {
+        if (start > limit) {
+            //System.out.println("Start is less than limit. start:"+start+"; limit:"+limit);
+            throw new IllegalArgumentException("Start is greater than limit. start:"+start+"; limit:"+limit);
+        }
+
+        if (start < 0) {
+            //System.out.println("Start is negative. start:"+start);
+            throw new IllegalArgumentException("Start is negative. start:"+start);
+        }
+
+        if (limit > length()) {
+            //System.out.println("Limit is greater than length.  limit:"+limit);
+            throw new IllegalArgumentException("Limit is greater than length.  limit:"+limit);
+        }
+    }
+
+    private static final boolean LESS_THAN_LENGTH = false;
+    private static final boolean NOT_GREATER_THAN_LENGTH = true;
+
+    private void checkPos(int pos, boolean endAllowed) {
+
+        int lastValidPos = length();
+        if (endAllowed == LESS_THAN_LENGTH) {
+            --lastValidPos;
+        }
+
+        if (pos < 0 || pos > lastValidPos) {
+            throw new IllegalArgumentException("Position is out of range.");
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/styledtext/TabStop.java b/src/com/ibm/richtext/styledtext/TabStop.java
new file mode 100755
index 0000000..b57889c
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/TabStop.java
@@ -0,0 +1,185 @@
+/*
+ * @(#)$RCSfile: TabStop.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
+/**
+ * TabStop represents a position on a tab ruler.  Each tab stop has a
+ * position, giving its location on the ruler, and one of several
+ * types.  The type determines how a segment controled by this TabStop
+ * is positioned on a line:
+ * <ul>
+ * <li><code>kLeading</code> - the leading edge of the segment is aligned to
+ *     the TabStop's position</li>
+ * <li><code>kCenter</code> - the segment is centered on this TabStop's
+ *     position</li>
+ * <li><code>kTrailing</code> - the trailing edge of the segment is aligned to
+ *     the TabStop's position</li>
+ * <li><code>kDecimal</code> - the first decimal in the segment is aligned to
+ *     the TabStop's position</li>
+ * <li><code>kAuto</code> - semantically the same as <code>kLeading</code>.
+ *     Used by tab rulers to indicate that all subsequent tab stops
+ *     will be at autospaced intervals.</li>
+ * </ul>
+ * @see MTabRuler
+ */
+public final class TabStop implements Externalizable
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final int CURRENT_VERSION = 1;
+    private static final long serialVersionUID = 22356934;
+
+    private byte fType;    // left, center, right, decimal
+    private int fPosition; // tab stop position from line origin.
+
+    /**
+     * A TabStop with this type aligns its segment's leading edge
+     * to the TabStop's position.
+     */
+    public static final byte kLeading = 0;
+
+    /**
+     * A TabStop with this type aligns its segment's center
+     * to the TabStop's position.
+     */
+    public static final byte kCenter = 1;
+
+    /**
+     * A TabStop with this type aligns its segment's trailing edge
+     * to the TabStop's position.
+     */
+    public static final byte kTrailing = 2;
+
+    /**
+     * A TabStop with this type aligns its segment's first decimal
+     * to the TabStop's position.
+     */
+    public static final byte kDecimal = 3;
+
+    /**
+     * A TabStop with this type aligns its segment's leading edge
+     * to the TabStop's position.  After a TabStop of this type,
+     * all tabs are at autospace intervals.  Usually, clients will
+     * not construct TabStops with this type.
+     */
+    public static final byte kAuto = 4;
+
+    /**
+     * Create a TabStop with position 0 and type <code>kLeading</code>.
+     */
+    public TabStop() {
+
+       this(0, kLeading);
+    }
+
+    /**
+     * Create a TabStop with the given position and type.
+     * @param position the TabStop's position
+     * @param type the TabStop's type.  Must be one of constants
+     *      in this class.
+     */
+    public TabStop(int position, byte type) {
+
+        if (type < kLeading || type > kAuto) {
+            throw new IllegalArgumentException("Invalid tab type");
+        }
+
+        fPosition = position;
+        fType = type;
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+
+        int version = in.readInt();
+        if (version != CURRENT_VERSION) {
+            throw new IOException("Invalid version of TabStop.");
+        }
+        fPosition = in.readInt();
+        fType = in.readByte();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        out.writeInt(CURRENT_VERSION);
+        out.writeInt(fPosition);
+        out.writeByte(fType);
+    }
+
+    /**
+     * Compare this to another Object.  TabStops are equal if
+     * their position and type are the same.
+     */
+    public boolean equals(Object rhs)
+    {
+        if (rhs == null) {
+            return false;
+        }
+
+        TabStop rhsTab;
+        try {
+            rhsTab = (TabStop) rhs;
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+
+        return fType == rhsTab.fType && fPosition == rhsTab.fPosition;
+    }
+
+    /**
+     * Return the hash code for this TabStop.  The hash code is
+     * <code>position << type</code>.
+     */
+    public int hashCode() {
+
+        return fPosition << fType;
+    }
+
+    public String toString()
+    {
+        char typeChar;
+        switch (fType) {
+            case kLeading: typeChar = 'L'; break;
+            case kCenter: typeChar = 'C'; break;
+            case kTrailing: typeChar = 'R'; break;
+            case kDecimal: typeChar = 'D'; break;
+            case kAuto: typeChar = 'A'; break;
+            default: typeChar = '?'; break;
+        }
+        return "TabStop[" + Integer.toString(fPosition) + typeChar + ']';
+    }
+
+    /**
+     * Return the type of this TabStop.  Will be one of the constants
+     * in this class.
+     */
+    public byte getType() {
+        return fType;
+    }
+
+    /**
+     * Return the position of this TabStop.
+     */
+    public int getPosition() {
+        return fPosition;
+    }
+}
+
diff --git a/src/com/ibm/richtext/styledtext/TestFastIntBinarySearch.java b/src/com/ibm/richtext/styledtext/TestFastIntBinarySearch.java
new file mode 100755
index 0000000..04cbf0c
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/TestFastIntBinarySearch.java
@@ -0,0 +1,60 @@
+/*
+ * @(#)$RCSfile: TestFastIntBinarySearch.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+final class TestFastIntBinarySearch {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static void main(String[] args) {
+
+        boolean result = new TestFastIntBinarySearch().test();
+        System.out.println(result? "PASSED" : "FAILED");
+    }
+
+    public boolean test() {
+
+        boolean result = true;
+        int[] test = {-5, -3, 0, 2, 5};
+        FastIntBinarySearch fibs = new FastIntBinarySearch(test);
+
+        for (int i=0; i < 2; i++) {
+            int beforeAny = fibs.findIndex(-6);
+            if (beforeAny != -1) {
+                result = false;
+            }
+            
+            int atEnd = fibs.findIndex(5);
+            if (atEnd != test.length-1) {
+                result = false;
+            }
+            
+            int afterAny = fibs.findIndex(6);
+            if (afterAny != test.length-1) {
+                result = false;
+            }
+            
+            int exactly = fibs.findIndex(-3);
+            if (exactly != 1) {
+                result = false;
+            }
+            
+            fibs = new FastIntBinarySearch(new int[] {20, 40});
+            fibs.setData(test);
+        }
+        
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/styledtext/Validation.java b/src/com/ibm/richtext/styledtext/Validation.java
new file mode 100755
index 0000000..2ef7b55
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/Validation.java
@@ -0,0 +1,39 @@
+/*
+ * @(#)$RCSfile: Validation.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.styledtext;
+
+/**
+ * Iterators use this class to keep from getting out of sync with
+ * their underlying data.  When created, the iterator gets a
+ * Validation instance.  If the underlying data changes, the Validation
+ * becomes invalid.  Usually iterators will throw exceptions if accessed
+ * after becoming invalid.
+ */
+final class Validation {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private boolean fIsValid = true;
+
+    boolean isValid() {
+
+        return fIsValid;
+    }
+
+    void invalidate() {
+
+        fIsValid = false;
+    }
+}
diff --git a/src/com/ibm/richtext/styledtext/package.html b/src/com/ibm/richtext/styledtext/package.html
new file mode 100755
index 0000000..dd580d3
--- /dev/null
+++ b/src/com/ibm/richtext/styledtext/package.html
@@ -0,0 +1,5 @@
+<html>
+<body bgcolor="white">
+Provides styled text storage and related classes.
+</body>
+</html>
diff --git a/src/com/ibm/richtext/swingdemo/SwingCodeEdit.java b/src/com/ibm/richtext/swingdemo/SwingCodeEdit.java
new file mode 100755
index 0000000..42ee495
--- /dev/null
+++ b/src/com/ibm/richtext/swingdemo/SwingCodeEdit.java
@@ -0,0 +1,48 @@
+/*
+ * @(#)$RCSfile: SwingCodeEdit.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:42 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingdemo;
+
+import com.ibm.richtext.demo.CodeEdit;
+import com.ibm.richtext.demo.DocumentWindow;
+import com.ibm.richtext.demo.SyntaxColorer;
+import com.ibm.richtext.demo.TextDocument;
+
+public class SwingCodeEdit extends CodeEdit {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    public static void main(String[] args) {
+    
+        new SwingCodeEdit(args, 0);
+    }
+    
+    public SwingCodeEdit(String[] args, int start) {
+    
+        super(args, start);
+    }
+    
+    protected DocumentWindow createDocumentWindow(TextDocument document) {
+
+        return new SwingDocumentWindow(this, 
+                                       document,
+                                       fSettings,
+                                       false,
+                                       new SyntaxColorer(),
+                                       false,
+                                       true,
+                                       menus);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/swingdemo/SwingDocumentWindow.java b/src/com/ibm/richtext/swingdemo/SwingDocumentWindow.java
new file mode 100755
index 0000000..eedc5a8
--- /dev/null
+++ b/src/com/ibm/richtext/swingdemo/SwingDocumentWindow.java
@@ -0,0 +1,280 @@
+/*
+ * @(#)$RCSfile: SwingDocumentWindow.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:42 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingdemo;
+
+import com.ibm.richtext.textpanel.JTextPanel;
+import com.ibm.richtext.textpanel.TextPanelListener;
+import com.ibm.richtext.textpanel.TextPanelSettings;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.swingui.JTabRuler;
+import com.ibm.richtext.swingui.SwingMenuBuilder;
+
+import com.ibm.richtext.print.PrintingUtils;
+
+import com.ibm.richtext.demo.AwtDocumentWindow;
+import com.ibm.richtext.demo.DocumentWindow;
+import com.ibm.richtext.demo.EditApplication;
+import com.ibm.richtext.demo.EditorResources;
+import com.ibm.richtext.demo.ResourceUtils;
+import com.ibm.richtext.demo.TextDocument;
+
+import java.awt.BorderLayout;
+import java.awt.FileDialog;
+import java.awt.Frame;
+
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JOptionPane;
+import javax.swing.WindowConstants;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import java.io.File;
+
+import java.text.MessageFormat;
+
+/**
+ * AwtDocumentWindow is a Frame containing a TextPanel, with a document
+ * for storing the text in the TextPanel.
+ */
+final class SwingDocumentWindow extends JFrame implements DocumentWindow {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private JTextPanel fTextPanel;
+    private EditApplication fApplication;
+    private TextDocument fDocument;
+
+    /**
+     * Create a new AwtDocumentWindow.
+     * @param application the application that owns this document
+     * @param clipboard the clipboard to use
+     * @param document the document to show in this AwtDocumentWindow
+     */
+    SwingDocumentWindow(EditApplication application,
+                        TextDocument document,
+                        TextPanelSettings textPanelSettings,
+                        boolean useTabRuler,
+                        TextPanelListener listener,
+                        boolean supportStyledText,
+                        boolean supportPlainText,
+                        int[] menus) {
+
+        fApplication = application;
+        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+        
+        fTextPanel = new JTextPanel(textPanelSettings, null, application.getClipboard());
+        if (listener != null) {
+            fTextPanel.addListener(listener);
+        }
+        setDocument(document);
+
+        addMenuBar(supportStyledText, supportPlainText, menus);
+
+        getContentPane().setLayout(new BorderLayout());
+
+        if (useTabRuler) {
+            JTabRuler tabRuler = new JTabRuler(14, 10, fTextPanel);
+            getContentPane().add(tabRuler, "North");
+        }
+        
+        getContentPane().add(fTextPanel, "Center");
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                doClose();
+            }
+        });
+    }
+
+    private void addMenuBar(boolean supportStyledText, 
+                            boolean supportPlainText,
+                            int[] menus) {
+        
+        JMenuBar menuBar = new JMenuBar();
+        String menuTitle = ResourceUtils.getString(EditorResources.FILE);
+        JMenu menu = new JMenu(menuTitle);
+        new SwingFileMenuManager(menu, fApplication, this,
+                                 supportStyledText, supportPlainText);
+        menuBar.add(menu);
+
+        SwingMenuBuilder.getInstance().createMenus(menuBar, fTextPanel, this, menus);
+        setJMenuBar(menuBar);
+    }
+    
+    /**
+     * Return true if it is OK to set the document text and file to
+     * something different.
+     */
+    private boolean canChangeDocuments() {
+
+        // If the text is modified, give the user a chance to
+        // save it.  Otherwise return true.
+
+        if (fDocument.isModified()) {
+            int save = askSave();
+            if (save == JOptionPane.YES_OPTION) {
+                return doSave();
+            }
+            else {
+                return save == JOptionPane.NO_OPTION;
+            }
+        }
+        else {
+            return true;
+        }
+    }
+
+    private void setDocument(TextDocument document) {
+
+        fDocument = document;
+        fDocument.setTextPanel(fTextPanel);
+        setTitle(fDocument.getTitle());
+    }
+
+    /**
+     * Set the document to empty text with no associated file.  If
+     * the document text is not saved, prompt the user to save the
+     * the text first.  If this operation is canceled, the document
+     * is unchanged.
+     */
+    public void doNew() {
+
+        if (!canChangeDocuments()) {
+            return;
+        }
+        
+        setDocument(fApplication.createNewDocument());
+    }
+
+    /**
+     * Prompt the user for a file from which to load a text document.
+     * If the current text is not saved, first prompt the user to
+     * save.  If either operation is canceled or fails, the document
+     * is unchanged.
+     */
+    public void doOpen() {
+
+        if (!canChangeDocuments()) {
+            return;
+        }
+
+        TextDocument document = fApplication.openDocument(this);
+
+        if (document != null) {
+            setDocument(document);
+        }
+    }
+
+    /**
+     * Prompt the user for a file in which to save the document text.
+     * If this operation is not canceled, save the text in the file.
+     * The file becomes this document's file.
+     */
+    public boolean doSaveAs(int format) {
+
+        String title = ResourceUtils.getString(EditorResources.SAVE_TITLE);
+        File file = AwtDocumentWindow.getFileFromDialog(fDocument.getFile(), title, this, FileDialog.SAVE);
+        
+        if (file == null) {
+            return false;
+        }
+        
+        fDocument.setFile(file);
+        setTitle(fDocument.getTitle());
+
+        fDocument.setFormat(format);
+        
+        return fDocument.save();
+    }
+
+    /**
+     * Save the text in this document.  If there is no file associated
+     * with the text, this is equivalent to <code>doSaveAs</code>.
+     * This method returns true if the document was successfully saved.
+     */
+    public boolean doSave() {
+
+        if (fDocument.getFile() == null) {
+            return doSaveAs(fDocument.getFormat());
+        }
+        
+        return fDocument.save();
+    }
+
+    /**
+     * Print the contents of this window.
+     */
+    public void doPrint() {
+
+        PrintingUtils.userPrintText(fDocument.getText(),
+                                    fTextPanel.getDefaultValues(),
+                                    this,
+                                    this.getTitle());
+    }
+
+    /**
+     * Attempt to close this window.  If the text has not been saved,
+     * give the user a chance to save the text before closing the
+     * window.  If the user cancels this operation, this method returns
+     * false and the window is not closed;  otherwise this method
+     * returns true and the window is closed.
+     */
+    public boolean doClose() {
+
+        if (canChangeDocuments()) {
+            setVisible(false);
+            dispose();
+            fApplication.removeDocumentWindow(this);
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * Display a dialog that asks whether the user wants to
+     * save a document.  The returned value will be YES_OPTION,
+     * NO_OPTION, or CANCEL_OPTION from JOptionPane.
+     */
+    private int askSave() {
+
+        String pattern = ResourceUtils.getString(EditorResources.SAVE_MSG);
+        String message = MessageFormat.format(pattern, new Object[] {getTitle()});
+        
+        String yes = ResourceUtils.getString(EditorResources.YES);
+        String no = ResourceUtils.getString(EditorResources.NO);
+        String cancel = ResourceUtils.getString(EditorResources.CANCEL);
+
+        return JOptionPane.showOptionDialog(this,
+                                            message,
+                                            "",
+                                            JOptionPane.YES_NO_CANCEL_OPTION,
+                                            JOptionPane.QUESTION_MESSAGE,
+                                            null,
+                                            new Object[]{yes,no,cancel},
+                                            yes);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/swingdemo/SwingEditDemo.java b/src/com/ibm/richtext/swingdemo/SwingEditDemo.java
new file mode 100755
index 0000000..d581127
--- /dev/null
+++ b/src/com/ibm/richtext/swingdemo/SwingEditDemo.java
@@ -0,0 +1,49 @@
+/*
+ * @(#)$RCSfile: SwingEditDemo.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:42 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingdemo;
+
+import com.ibm.richtext.demo.EditDemo;
+import com.ibm.richtext.demo.DocumentWindow;
+import com.ibm.richtext.demo.TextDocument;
+
+import com.ibm.richtext.textpanel.JTextPanel;
+
+public class SwingEditDemo extends EditDemo {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    public static void main(String[] args) {
+    
+        new SwingCodeEdit(args, 0);
+    }
+    
+    public SwingEditDemo(String[] args, int start) {
+    
+        super(args, start);
+    }
+    
+    protected DocumentWindow createDocumentWindow(TextDocument document) {
+
+        return new SwingDocumentWindow(this, 
+                                       document,
+                                       JTextPanel.getDefaultSettings(),
+                                       true,
+                                       null,
+                                       true,
+                                       true,
+                                       null);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/swingdemo/SwingFileMenuManager.java b/src/com/ibm/richtext/swingdemo/SwingFileMenuManager.java
new file mode 100755
index 0000000..0f24d2a
--- /dev/null
+++ b/src/com/ibm/richtext/swingdemo/SwingFileMenuManager.java
@@ -0,0 +1,65 @@
+/*
+ * @(#)$RCSfile: SwingFileMenuManager.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:42 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingdemo;
+
+import java.awt.Event;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JSeparator;
+import javax.swing.KeyStroke;
+
+import com.ibm.richtext.demo.DocumentWindow;
+import com.ibm.richtext.demo.EditApplication;
+import com.ibm.richtext.demo.FileMenuManager;
+import com.ibm.richtext.demo.MenuData;
+import com.ibm.richtext.demo.ResourceUtils;
+
+final class SwingFileMenuManager extends FileMenuManager {
+
+    private JMenu fMenu;
+    
+    public SwingFileMenuManager(JMenu menu,
+                                EditApplication application, 
+                                DocumentWindow document,
+                                boolean supportStyledFormat,
+                                boolean supportPlainFormat) {
+                          
+        super(application, document);
+        
+        fMenu = menu;
+        createItems(supportStyledFormat, supportPlainFormat);
+        fMenu = null;
+    }
+    
+    protected Object addMenuItem(String key) {
+
+        MenuData menuData = ResourceUtils.getMenuData(key);
+        JMenuItem item = new JMenuItem(menuData.getName());
+        if (menuData.hasShortcut()) {
+            KeyStroke ks = KeyStroke.getKeyStroke(menuData.getShortcutKeyCode(),
+                                                  Event.CTRL_MASK);
+            item.setAccelerator(ks);
+        }
+        item.addActionListener(this);
+        fMenu.add(item);
+        return item;
+    }
+    
+    protected void addSeparator() {
+    
+        fMenu.add(new JSeparator());
+    }
+}
diff --git a/src/com/ibm/richtext/swingui/JMessageDialog.java b/src/com/ibm/richtext/swingui/JMessageDialog.java
new file mode 100755
index 0000000..455fd65
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/JMessageDialog.java
@@ -0,0 +1,70 @@
+/*
+ * @(#)$RCSfile: JMessageDialog.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:22 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingui;
+
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.CardLayout;
+
+import javax.swing.JFrame;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.richtext.textpanel.JTextPanel;
+import com.ibm.richtext.textpanel.TextPanelSettings;
+
+/**
+ * MessageDialog is a simple Frame which displays a styled
+ * text message in a TextPanel.
+ * The text in the message is not selectable or editable.
+ * @see MConstText
+ * @see JTextPanel
+ */
+public final class JMessageDialog extends JFrame {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+    * Create a new MessageDialog.
+    * @param title the dialog's title
+    * @param message the text which will appear in the dialog
+    */
+    public JMessageDialog(String title, MConstText message)
+    {
+        super(title);
+
+        Container content = getContentPane();
+        content.setLayout(new CardLayout());
+        TextPanelSettings settings = JTextPanel.getDefaultSettings();
+        settings.setScrollable(false);
+        settings.setSelectable(false);
+        JTextPanel panel = new JTextPanel(settings, message, null);
+
+        panel.setBackground(Color.black);
+        content.add("Center", panel);
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                setVisible(false);
+                dispose();
+            }
+        });
+
+        setSize(450,320);
+    }
+}
diff --git a/src/com/ibm/richtext/swingui/JNumberDialog.java b/src/com/ibm/richtext/swingui/JNumberDialog.java
new file mode 100755
index 0000000..8c20ae5
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/JNumberDialog.java
@@ -0,0 +1,162 @@
+/*
+ * @(#)$RCSfile: JNumberDialog.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:22 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingui;
+
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+
+import java.text.NumberFormat;
+import java.text.ParseException;
+
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowAdapter;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+import com.ibm.richtext.uiimpl.MenuItemSet;
+import com.ibm.richtext.uiimpl.ResourceUtils;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.textpanel.MTextPanel;
+
+/**
+* Simple dialog which gets a number, and sends an appropriate command
+*/
+final class JNumberDialog extends JDialog implements ActionListener
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private MTextPanel fTextPanel;
+    private JTextField fInput = null;
+
+    private JButton fOKButton = null;
+    private JButton fCancelButton = null;
+    private boolean fCharacter;
+    private Object fKey;
+    private float fMultiplier; 
+
+    /**
+     * @param multiplier the factor by which to multiply the user's
+     *        selection before creating the attribute value.   This
+     *        is useful for subscripting.
+     */
+    JNumberDialog(Frame parent,
+                  String title,
+                  String message,
+                  MTextPanel textPanel,
+                  Object key,
+                  boolean character,
+                  float multiplier) {
+
+        super(parent, title, false);
+        fTextPanel = textPanel;
+        fKey = key;
+        fCharacter = character;
+        fMultiplier = multiplier;
+        
+        Container content = getContentPane();
+        
+        content.setLayout(new java.awt.GridLayout(2,1));
+
+        JPanel panel = new JPanel();
+        panel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 15));
+        fInput = new JTextField(5);
+
+        panel.add(new JLabel(message));
+        panel.add(fInput);
+        content.add("Center", panel);
+
+        fCancelButton = new JButton(ResourceUtils.getResourceString(FrameResources.CANCEL));
+        fOKButton = new JButton(ResourceUtils.getResourceString(FrameResources.OK));
+        JPanel p = new JPanel();
+        p.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
+        p.add(fCancelButton);
+        p.add(fOKButton);
+        content.add("South", p);
+
+        pack();
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                closeWindow(false);
+            }
+        });
+        
+        fOKButton.addActionListener(this);
+        fCancelButton.addActionListener(this);
+    }
+
+    private void closeWindow(boolean sendAction) {
+
+        setVisible(false);
+
+        int num = 0;
+        if (sendAction) {
+            try {
+                String text = fInput.getText();
+                num = NumberFormat.getInstance().parse(text).intValue();
+            }
+            catch (ParseException exception) {
+                sendAction = false;
+            }
+        }
+
+        if (sendAction) {
+            sendAction(num);
+        }
+
+        dispose();
+    }
+
+    public void actionPerformed(ActionEvent e) {
+
+        Object source = e.getSource();
+
+        if (source == fOKButton) {
+            closeWindow(true);
+        }
+        else if (source == fCancelButton) {
+            closeWindow(false);
+        }
+        else {
+            throw new IllegalArgumentException("Invalid ActionEvent!");
+        }
+    }
+
+    /**
+    * Handle the user input
+    * @param the number the user typed in
+    */
+    private void sendAction(int number) {
+        float num = number * fMultiplier;
+        StyleModifier modifier = StyleModifier.createAddModifier(
+                                                fKey,
+                                                new Float(num));
+        if (fCharacter == MenuItemSet.CHARACTER) {
+            fTextPanel.modifyCharacterStyleOnSelection(modifier);
+        }
+        else {
+            fTextPanel.modifyParagraphStyleOnSelection(modifier);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/swingui/JObjectDialog.java b/src/com/ibm/richtext/swingui/JObjectDialog.java
new file mode 100755
index 0000000..8d642bf
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/JObjectDialog.java
@@ -0,0 +1,280 @@
+/*
+ * @(#)$RCSfile: JObjectDialog.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:22 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingui;
+
+import java.util.Hashtable;
+
+import javax.swing.Box;
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JLabel;
+import javax.swing.ListSelectionModel;
+
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowAdapter;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.uiimpl.MenuItemSet;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+import com.ibm.richtext.uiimpl.ResourceUtils;
+
+/**
+* Simple dialog that sets an attribute.
+*/
+final class JObjectDialog extends JDialog {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private final MTextPanel fTextPanel;
+    private final Object fKey;
+    private boolean fCharacter;
+    private Hashtable fNameToValueMap;
+    
+    private final JButton fOKButton;
+    private final JButton fCancelButton;
+    private final JList fItems;
+    
+    /**
+    * Construct a new JObjectDialog.
+    * @param parent the dialog's parent frame
+    * @param title the dialogs title
+    * @param message the message displayed next to the input box
+    */
+    JObjectDialog(Frame parent,
+                  String title, 
+                  String message, 
+                  MTextPanel textPanel,
+                  Object key,
+                  boolean character,
+                  String[] names,
+                  Object[] values) {
+                    
+        super(parent, title, false);
+
+        setupMap(names, values);
+        
+        Dimension size = new Dimension(250, 200);
+        
+        fTextPanel = textPanel;
+        fKey = key;
+        fCharacter = character;
+        
+        fItems = new JList(names);
+        fItems.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+        
+        fItems.addMouseListener(new MouseAdapter() {
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2) {
+                    closeWindow(true);
+                }
+            }
+        });
+        
+        JScrollPane listScroller = new JScrollPane(fItems);
+        listScroller.setPreferredSize(size);
+        listScroller.setPreferredSize(size);
+        listScroller.setAlignmentX(LEFT_ALIGNMENT);
+
+        JLabel label = new JLabel(message);
+        label.setLabelFor(fItems);
+        
+        JPanel itemPanel = new JPanel();
+        itemPanel.add(label);
+        itemPanel.add(Box.createRigidArea(new Dimension(0,5)));
+        itemPanel.add(listScroller);
+        itemPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
+        
+        itemPanel.setLayout(new BoxLayout(itemPanel, BoxLayout.Y_AXIS));
+        
+        fCancelButton = new JButton(ResourceUtils.getResourceString(FrameResources.CANCEL));
+        fOKButton = new JButton(ResourceUtils.getResourceString(FrameResources.OK));
+        
+        JPanel buttonPanel = new JPanel();
+        buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
+        buttonPanel.add(fCancelButton);
+        buttonPanel.add(fOKButton);
+        
+        Container content = getContentPane();
+        content.add(itemPanel, BorderLayout.CENTER);
+        content.add(buttonPanel, BorderLayout.SOUTH);
+
+        pack();
+
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                closeWindow(false);
+            }
+        });
+        
+        ActionListener listener = new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+            
+                Object source = e.getSource();
+                if (source == fOKButton) {
+                    closeWindow(true);
+                }
+                else if (source == fCancelButton) {
+                    closeWindow(false);
+                }
+            }
+        };
+        
+        fOKButton.addActionListener(listener);
+        fCancelButton.addActionListener(listener);
+        
+        selectStyles(values);
+    }
+    
+    private void setupMap(String[] names, Object[] values) {
+    
+        if (names.length != values.length) {
+            throw new IllegalArgumentException("Must have same number of names and values.");
+        }
+        
+        fNameToValueMap = new Hashtable(names.length);
+        
+        for (int i=0; i < names.length; i++) {
+            if (values[i] != null) {
+                fNameToValueMap.put(names[i], values[i]);
+            }
+        }
+
+    }
+
+    private void closeWindow(boolean sendAction) {
+
+        setVisible(false);
+        
+        if (sendAction && fItems.getMinSelectionIndex() != fItems.getMaxSelectionIndex()) {
+            sendAction = false;
+        }
+        
+        if (sendAction) {
+            Object value = fNameToValueMap.get(fItems.getSelectedValue());
+            sendAction(value);
+        }
+        dispose();
+    }
+
+    /**
+    * Handle the user input
+    * @param obj the value object
+    */
+    private void sendAction(Object value) {
+
+        StyleModifier modifier;
+        if (value != null) {
+            modifier = StyleModifier.createAddModifier(fKey, value);
+        }
+        else {
+            AttributeSet set = new AttributeSet(fKey);
+            modifier = StyleModifier.createRemoveModifier(set);
+        }
+
+        if (fCharacter == MenuItemSet.CHARACTER) {
+            fTextPanel.modifyCharacterStyleOnSelection(modifier);
+        }
+        else {
+            fTextPanel.modifyParagraphStyleOnSelection(modifier);
+        }
+    }
+    
+    private void selectValue(Object value, Object[] values) {
+    
+        for (int i=0; i < values.length; i++) {
+        
+            if ((value != null && value.equals(values[i])) || (value == null && values[i] == null)) {
+                fItems.addSelectionInterval(i, i);
+                fItems.ensureIndexIsVisible(i);
+                return;
+            }
+        }
+    }
+    
+    private void selectStyles(Object[] values) {
+    
+        Object value;
+ 
+        if (fCharacter) {
+            value = fTextPanel.getCharacterStyleOverSelection(fKey);
+        }
+        else {
+            value = fTextPanel.getParagraphStyleOverSelection(fKey);
+        }
+        
+        if (value != MTextPanel.MULTIPLE_VALUES) {
+            selectValue(value, values);
+        }
+        else {
+            fOKButton.setEnabled(false);
+            
+            int selLimit = fTextPanel.getSelectionEnd();
+            MConstText text = fTextPanel.getText();
+            for (int runStart = fTextPanel.getSelectionStart(); runStart <= selLimit;
+                    runStart = fCharacter? text.characterStyleLimit(runStart) : 
+                                           text.paragraphLimit(runStart)) {
+            
+                Object runVal;
+                if (fCharacter) {
+                    runVal = text.characterStyleAt(runStart).get(fKey);
+                }
+                else {
+                    runVal = text.paragraphStyleAt(runStart).get(fKey);
+                }
+                if (runVal == null) {
+                    runVal = fTextPanel.getDefaultValues().get(fKey);
+                }
+                
+                selectValue(runVal, values);
+                if (runStart == text.length()) {
+                    break;
+                }
+            }
+        }
+        
+        fItems.addListSelectionListener(new ListSelectionListener() {
+            public void valueChanged(ListSelectionEvent e) {
+                fItems.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+                fOKButton.setEnabled(true);
+                fItems.removeListSelectionListener(this);
+            }
+        });
+    }
+}
diff --git a/src/com/ibm/richtext/swingui/JTabRuler.java b/src/com/ibm/richtext/swingui/JTabRuler.java
new file mode 100755
index 0000000..48bc506
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/JTabRuler.java
@@ -0,0 +1,134 @@
+/*
+ * @(#)$RCSfile: JTabRuler.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:22 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingui;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+
+import javax.swing.JComponent;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.styledtext.MTabRuler;
+
+import com.ibm.richtext.uiimpl.TabRulerImpl;
+import com.ibm.richtext.awtui.MTabRulerComponent;
+
+/**
+ * JTabRuler is an implementation of MTabRulerComponent in a Swing component.
+ */
+public final class JTabRuler extends JComponent implements MTabRulerComponent {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private TabRulerImpl fImpl;
+    
+    /**
+     * Create a new TabRuler.
+     * @param baseline the y-coordinate of the ruler's baseline
+     * @param origin the x-coordinate in this Component where
+     *     the left margin appears
+     * @param textPanel the MTextPanel to listen to.  This TabRuler
+     *     will reflect the MTextPanel's paragraph styles, and update
+     *     the paragraph styles when manipulated.
+     */
+    public JTabRuler(int baseline, int origin, MTextPanel textPanel) {
+        
+        fImpl = new TabRulerImpl(baseline, origin, textPanel, this);
+    }
+    
+    /**
+     * Listen to the given MTextPanel and reflect its changes,
+     * and update its paragraph styles when TabRuler is
+     * manipulated.
+     * @param textPanel the MTextPanel to listen to
+     */
+    public void listenToTextPanel(MTextPanel textPanel) {
+
+        fImpl.listenToTextPanel(textPanel);
+    }
+    
+    /**
+     * Return the background color of this TabRuler.
+     * @return the background color of this TabRuler
+     */
+    public Color getBackColor() {
+
+        return fImpl.getBackColor();
+    }
+    
+    /**
+     * Set the background color of this TabRuler.
+     * @param backColor the new background color of this TabRuler
+     */
+    public void setBackColor(Color backColor) {
+
+        fImpl.setBackColor(backColor);
+    }
+    
+    /**
+     * Return the MTabRuler represented by this TabRuler.
+     * @return the MTabRuler represented by this TabRuler
+     */
+    public MTabRuler getRuler() {
+        
+        return fImpl.getRuler();
+    }
+
+    /**
+     * Return the leading margin of this TabRuler.
+     * @return the leading margin of this TabRuler
+     */
+    public int getLeadingMargin() {
+        
+        return fImpl.getLeadingMargin();
+    }
+
+    /**
+     * Return the first line indent of this TabRuler.
+     * @return the first line indent of this TabRuler
+     */
+    public int getFirstLineIndent() {
+        
+        return fImpl.getFirstLineIndent();
+    }
+
+    /**
+     * Return the trailing margin of this TabRuler.
+     * @return the trailing margin of this TabRuler
+     */
+    public final int getTrailingMargin() {
+        
+        return fImpl.getTrailingMargin();
+    }
+    
+    // The following are Component methods which need to be delegated to
+    // the implementation:
+    
+    public void paint(Graphics g) {
+        
+        fImpl.paint(g);
+    }
+    
+    public Dimension getPreferredSize() {
+        
+        return fImpl.getPreferredSize();
+    }
+
+    public Dimension getMinimumSize() {
+        
+        return fImpl.getMinimumSize();
+    }
+}
diff --git a/src/com/ibm/richtext/swingui/JTextFrame.java b/src/com/ibm/richtext/swingui/JTextFrame.java
new file mode 100755
index 0000000..7dd4207
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/JTextFrame.java
@@ -0,0 +1,146 @@
+/*
+ * @(#)$RCSfile: JTextFrame.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:22 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingui;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.JTextPanel;
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+import com.ibm.richtext.uiimpl.ResourceUtils;
+
+import java.awt.BorderLayout;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JFrame;
+import javax.swing.JMenuBar;
+import javax.swing.UIManager;
+
+import java.awt.Container;
+
+/**
+ * JTextFrame is a JFrame containing an editable JTextPanel, a set of standard
+ * menus, and a JTabRuler.  This class can be used as-is, but is
+ * primarily intended to be a simple example of how to use the other classes
+ * in this package.
+ * @see com.ibm.richtext.textpanel.JTextPanel
+ * @see SwingMenuBuilder
+ * @see JTabRuler
+ */
+public final class JTextFrame extends JFrame {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private JTextPanel fTextPanel;
+
+    /**
+     * Create a new JTextFrame with no text, no title, 
+     * and a private clipboard.
+     */
+    public JTextFrame() {
+        
+        super();
+        init(null, Toolkit.getDefaultToolkit().getSystemClipboard());
+    }
+    
+    /**
+     * Create a new JTextFrame with no text and the given title.
+     * The JTextPanel will use a private clipboard.
+     * @param title the title of this Frame
+     */
+    public JTextFrame(String title) {
+        
+        super(title);
+        init(null, Toolkit.getDefaultToolkit().getSystemClipboard());
+    }
+    
+    /**
+     * Create a new JTextFrame with the given text and title, whose
+     * TextPanel will use the given clipboard.
+     * @param text the initial text in the TextPanel.  If null the
+     *      TextPanel will initially be empty
+     * @param title the title of this Frame
+     * @param clipboard the Clipboard which the TextPanel will use.
+     *      If null the TextPanel will use a private Clipboard
+     */
+    public JTextFrame(MConstText text,
+                     String title,
+                     Clipboard clipboard) {
+
+        super(title);
+        init(text, clipboard);
+    }
+
+    private void init(MConstText text, Clipboard clipboard) {
+        
+        fTextPanel = new JTextPanel(text, clipboard);
+
+        JTabRuler tabRuler = new JTabRuler(14, 10, fTextPanel);
+
+        createMenus();
+
+        Container contentPane = getContentPane();
+        contentPane.setLayout(new BorderLayout());
+        contentPane.add(fTextPanel, "Center");
+        contentPane.add(tabRuler, "North");
+        pack();
+    }
+
+    private void createMenus() {
+
+        JMenuBar menuBar = new JMenuBar();
+
+        SwingMenuBuilder.getInstance().createMenus(menuBar, fTextPanel, this);
+        
+        setJMenuBar(menuBar);
+    }
+
+    /**
+     * Return the MTextPanel in this frame.
+     */
+    public MTextPanel getTextPanel() {
+
+        return fTextPanel;
+    }
+    
+    public static void main(String[] args) {
+        
+        String laf = UIManager.getSystemLookAndFeelClassName();
+        if (args.length == 1) {
+            if (args[0].equals("cp")) {
+                laf = UIManager.getCrossPlatformLookAndFeelClassName();
+            }
+        }
+                
+        try {
+            UIManager.setLookAndFeel(laf);
+        }
+        catch(Throwable th) {
+            th.printStackTrace();
+        }
+        JTextFrame frame = new JTextFrame();
+        frame.addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
+        frame.setSize(550, 700);
+        frame.show();
+    }
+}
diff --git a/src/com/ibm/richtext/swingui/SwingMenuBuilder.java b/src/com/ibm/richtext/swingui/SwingMenuBuilder.java
new file mode 100755
index 0000000..a236ed1
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/SwingMenuBuilder.java
@@ -0,0 +1,236 @@
+/*
+ * @(#)$RCSfile: SwingMenuBuilder.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:22 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingui;
+
+import java.awt.Frame;
+import java.awt.Window;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+
+import com.ibm.richtext.uiimpl.*;
+import com.ibm.richtext.uiimpl.DialogItem.DialogFactory;
+
+/**
+ * SwingMenuBuilder provides a method for creating a set of Swing menus for interacting
+ * with an MTextPanel.  Future versions of this class may provide greater control
+ * over the menu contents.
+ * @see MTextPanel
+ */
+public final class SwingMenuBuilder extends MenuBuilder {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final SwingMenuBuilder INSTANCE = new SwingMenuBuilder();
+    
+    /**
+     * Id for an Edit menu.  The Edit menu has the following items:
+     * <ul>
+     * <li><b>Undo</b> - invoke undo() on the MTextPanel</li>
+     * <li><b>Redo</b> - invoke redo() on the MTextPanel</li>
+     * <li><b>Cut</b> - invoke cut() on the MTextPanel</li>
+     * <li><b>Copy</b> - invoke copy() on the MTextPanel</li>
+     * <li><b>Paste</b> - invoke paste() on the MTextPanel</li>
+     * <li><b>Clear</b> - invoke clear() on the MTextPanel</li>
+     * <li><b>Select All</b> - invoke selectAll() on the MTextPanel</li>
+     * </ul>
+     */
+    public static final int EDIT = MenuBuilder.EDIT;
+    /**
+     * Id for the point sizes menu.  The menu has items that set the size of a character
+     * in a typeface.
+     */
+    public static final int SIZE = MenuBuilder.SIZE;
+    /**
+     * Id for a Style menu.  The Style menu has the following items:
+     * <ul>
+     * <li><b>Plain</b> - remove <code>WEIGHT</code>,
+     *                    <code>POSTURE</code>,
+     *                    <code>UNDERLINE</code> and
+     *                    <code>STRIKETHROUGH</code> attributes from the
+     * current selection</li>
+     * <li><b>Bold</b> - add <code>{WEIGHT,WEIGHT_BOLD}</code> to
+     * the current selection</li>
+     * <li><b>Italic</b> - add <code>{POSTURE,POSTURE_ITALIC}</code> to
+     * the current selection</li>
+     * <li><b>Underline</b> - add <code>{UNDERLINE,UNDERLINE_ON}</code> to
+     * the current selection</li>
+     * <li><b>Strikethrough</b> - add <code>{STRIKETHROUGH,STRIKETHROUGH_ON}</code>
+     * to the current selection</li>
+     * <li><b>Font...</b> - display a dialog allowing the user to
+     * select a typeface (font family) for the current selection</li>
+     * <li><b>Forecolor...</b> - display a dialog allowing the user to
+     * select a foreground color for the current selection</li>
+     * <li><b>Backcolor...</b> - display a dialog allowing the user to
+     * select a background color for the current selection</li>
+     * </ul>
+     */
+    public static final int STYLE = MenuBuilder.STYLE;
+    /**
+     * Id for a paragraph alignment menu.  The menu has the following items:
+     * <ul>
+     * <li><b>Leading</b> - give selected paragraph(s) LEADING flush</li>
+     * <li><b>Center</b> - give selected paragraph(s) CENTER flush</li>
+     * <li><b>Trailing</b> - give selected paragraph(s) TRAILING flush</li>
+     * <li><b>Justified</b> - give selected paragraph(s) full justification</li>
+     * </ul>
+     */
+    public static final int FLUSH = MenuBuilder.FLUSH;
+    /**
+     * Id for a menu that sets the KeyRemap
+     * on an MTextPanel.  The menu has the following items:
+     * <ul>
+     * <li><b>Default</b> - set KeyRemap to identity remap</li>
+     * <li><b>Arabic</b> - set KeyRemap to Arabic transliteration</li>
+     * <li><b>Hebrew</b> - set KeyRemap to Hebrew transliteration</li>
+     * <li><b>Israel Nikud</b> - set KeyRemap to Israel Nikud</li>
+     * <li><b>Thai Ketmanee</b> - set KeyRemap to Thai Ketmanee</li>
+     * </ul>
+     */
+    public static final int KEYMAP = MenuBuilder.KEYMAP;
+    /**
+     * Id for a menu that sets
+     * the primary run direction for a paragraph.  Run direction can be left-to-right,
+     * right-to-left, or can use the default run direction from the Unicode bidi algorithm.
+     */
+    public static final int BIDI = MenuBuilder.BIDI;
+    /**
+     * Id for a menu with an <b>About</b> item.  When selected, 
+     * the item displays a Frame containing some
+     * self-promotional text.
+     */
+    public static final int ABOUT = MenuBuilder.ABOUT;
+    /**
+     * Return an instance of SwingMenuBuilder.
+     */
+     
+    public static SwingMenuBuilder getInstance() {
+        
+        return INSTANCE;
+    }
+    
+    private JMenuBar fMenuBar;
+    
+    private SwingMenuBuilder() {
+    }
+    
+    /**
+     * Add a standard set of menus to the given menu bar.  The menus 
+     * will interact with the given MTextPanel.
+     * @param menuBar the MenuBar to which menus are added
+     * @param textPanel the MTextPanel with which the menus interact
+     * @param frame a Frame to use as the parent of any dialogs created by a 
+     *   a menu item.  If null, menu items which create dialogs will be omitted.
+     */
+    public void createMenus(JMenuBar menuBar, 
+                            MTextPanel textPanel,
+                            Frame frame) {
+
+        createMenus(menuBar, textPanel, frame, defaultMenus);
+    }
+    
+    /**
+     * Add a set of menus to the given menu bar.  The menus 
+     * will interact with the given MTextPanel.
+     * @param menuBar the MenuBar to which menus are added
+     * @param textPanel the MTextPanel with which the menus interact
+     * @param frame a Frame to use as the parent of any dialogs created by a 
+     *   a menu item.  If null, menu items which create dialogs will be omitted.
+     * @param menus an array of integer menu id's.  Each element of the
+     *   array must be one of this class's menu id constants.  If null,
+     *   the default menus are created.
+     */
+    public void createMenus(JMenuBar menuBar,
+                            MTextPanel textPanel,
+                            Frame frame,
+                            int[] menus) {
+        
+        if (menus == null) {
+            menus = defaultMenus;
+        }
+        
+        synchronized (MItem.LOCK) {
+            
+            fMenuBar = menuBar;
+            doCreateMenus(textPanel, frame, menus);
+            fMenuBar = null;
+        }
+    }
+    
+    protected void handleAddMenu(String key) {
+        
+        JMenu menu = new JMenu(ResourceUtils.getResourceString(key));
+        fMenuBar.add(menu);
+        MItem.setItemFactory(new SwingMenuFactory(menu));
+    }
+
+    protected DialogFactory createObjectDialogFactory(final String dialogTitle,
+                                                      final String dialogMessage,
+                                                      final Object key,
+                                                      final boolean character,
+                                                      final String[] names,
+                                                      final Object[] values) {
+        
+        final Frame dialogParent = fDialogParent;
+
+        return new DialogFactory() {    
+            public Window createDialog(MTextPanel textPanel) {
+                return new JObjectDialog(dialogParent,
+                                        dialogTitle,
+                                        dialogMessage,
+                                        textPanel,
+                                        key,
+                                        character,
+                                        names,
+                                        values);
+            }
+        };
+    }
+    
+    protected DialogFactory createNumberDialogFactory(final String dialogTitle,
+                                                      final String dialogMessage,
+                                                      final Object key,
+                                                      final boolean character) {
+        
+        final Frame dialogParent = fDialogParent;
+        final MTextPanel textPanel = fTextPanel;
+            
+        return new DialogFactory() {
+            public Window createDialog(MTextPanel fTextPanel) {
+                return new JNumberDialog(dialogParent,
+                                         dialogTitle,
+                                         dialogMessage,
+                                         fTextPanel,
+                                         key,
+                                         character,
+                                         1);
+            }
+        };
+    }    
+    
+    protected DialogFactory createAboutDialogFactory() {
+        
+        return new DialogFactory() {
+            public Window createDialog(MTextPanel textPanel) {
+                String title = ResourceUtils.getResourceString(FrameResources.ABOUT_TITLE);
+                return new JMessageDialog(title, AboutText.getAboutText());
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/swingui/SwingMenuFactory.java b/src/com/ibm/richtext/swingui/SwingMenuFactory.java
new file mode 100755
index 0000000..0c19ae4
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/SwingMenuFactory.java
@@ -0,0 +1,108 @@
+/*
+ * @(#)$RCSfile: SwingMenuFactory.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:22 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.swingui;
+
+import java.awt.Event;
+
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JSeparator;
+import javax.swing.KeyStroke;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import com.ibm.richtext.uiimpl.resources.MenuData;
+import com.ibm.richtext.uiimpl.EventListener;
+import com.ibm.richtext.uiimpl.MItem;
+import com.ibm.richtext.uiimpl.MItem.ItemFactory;
+
+final class SwingMenuFactory implements ItemFactory {
+        
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private final class SwingMItem extends MItem {
+        
+        private JMenuItem fItem;
+        
+        SwingMItem(JMenuItem item) {
+            
+            fItem = item;
+            item.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    handleSelected();
+                }
+            });
+        }
+        
+        protected void handleSelected() {
+            
+            super.handleSelected();
+        }
+        
+        public final void setEnabled(boolean enabled) {
+            
+            fItem.setEnabled(enabled);
+        }
+        
+        public void setState(boolean checked) {
+            
+            try {
+                JCheckBoxMenuItem item = (JCheckBoxMenuItem) fItem;
+                item.setState(checked);
+            }
+            catch(ClassCastException e) {
+                throw new Error("Cannot perform setChecked on non-checkbox item");
+            }
+        }
+    }
+    
+    private JMenu fMenu;
+        
+    SwingMenuFactory(JMenu menu) {
+            
+        fMenu = menu;
+    }
+    
+    private MItem handleCreate(JMenuItem item,
+                               MenuData menuData) {
+
+        if (menuData.hasShortcut()) {
+            KeyStroke ks = KeyStroke.getKeyStroke(menuData.getShortcutKeyCode(),
+                                                  Event.CTRL_MASK);
+            item.setAccelerator(ks);
+        }
+        
+        fMenu.add(item);
+        
+        return new SwingMItem(item);
+    }
+        
+    public MItem createItem(MenuData menuData) {
+        
+        return handleCreate(new JMenuItem(menuData.getName()), menuData);
+    }        
+
+    public MItem createCheckboxItem(MenuData menuData) {
+        
+        return handleCreate(new JCheckBoxMenuItem(menuData.getName()), menuData);
+    }
+    
+    public void createSeparator() {
+        
+        fMenu.add(new JSeparator());
+    }
+}
diff --git a/src/com/ibm/richtext/swingui/package.html b/src/com/ibm/richtext/swingui/package.html
new file mode 100755
index 0000000..450bae3
--- /dev/null
+++ b/src/com/ibm/richtext/swingui/package.html
@@ -0,0 +1,5 @@
+<html>
+<body bgcolor="white">
+Provides classes for building a Swing-based user interface for a TextPanel.
+</body>
+</html>
diff --git a/src/com/ibm/richtext/tests/Declaration.java b/src/com/ibm/richtext/tests/Declaration.java
new file mode 100755
index 0000000..e5ff6e4
--- /dev/null
+++ b/src/com/ibm/richtext/tests/Declaration.java
@@ -0,0 +1,44 @@
+/*
+ * @(#)$RCSfile: Declaration.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:46:57 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.tests;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+/**
+ * This class contains the first four paragraphs of the Declaration
+ * of Independence, as both styled and unstyled text.  The views
+ * expressed therein are not necessarily those of the programmer or of
+ * his/her employer.  No criticism of any monarchy, oligarchy, dictatorship,
+ * autocracy, plutocracy, theocracy, anarchist territory, colonial power,
+ * or any other nondemocratic form of government is intended.  This document
+ * is provided "as-is" without any warranty expressed or implied.
+ */
+public final class Declaration {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static final String fgDeclarationStr = "In Congress, July 4, 1776, THE UNANIMOUS DECLARATION OF THE THIRTEEN UNITED STATES OF AMERICA\n" +
+        "\n" +
+        "When in the Course of human Events, it becomes necessary for one People to dissolve the Political Bands which have connected them with another, and to assume among the Powers of the Earth, the separate and equal Station to which the Laws of Nature and of Nature's God entitle them, a decent Respect to the Opinions of Mankind requires that they should declare the causes which impel them to the Separation.\n" +
+        "\n" +
+        "We hold these Truths to be self-evident, that all Men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty, and the Pursuit of Happiness.\n" +
+        "\n" +
+        "That to secure these Rights, Governments are instituted among Men, deriving their just Powers from the Consent of the Governed, that whenever any Form of Government becomes destructive of these Ends, it is the Right of the People to alter or to abolish it, and to institute new Government, laying its Foundation on such Principles, and organizing its Powers in such Form, as to them shall seem most likely to effect their Safety and Happiness. Prudence, indeed, will dictate that Governments long established should not be changed for light and transient Causes; and accordingly all Experience hath shewn, that Mankind are more disposed to suffer, while Evils are sufferable, than to right themselves by abolishing the Forms to which they are accustomed. But when a long Train of Abuses and Usurpations, pursuing invariably the same Object, evinces a Design to reduce them under absolute Despotism, it is their Right, it is their Duty, to throw off such Government, and to provide new Guards for their future Security.\n" +
+        "\n";
+
+    public static final MConstText fgDeclaration = new StyledText(fgDeclarationStr, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+}
diff --git a/src/com/ibm/richtext/tests/ITestTextPanel.java b/src/com/ibm/richtext/tests/ITestTextPanel.java
new file mode 100755
index 0000000..4853422
--- /dev/null
+++ b/src/com/ibm/richtext/tests/ITestTextPanel.java
@@ -0,0 +1,214 @@
+/*
+ * @(#)$RCSfile: ITestTextPanel.java,v $ $Revision: 1.2 $ $Date: 2000/04/22 03:31:34 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.tests;
+
+import java.awt.Button;
+import java.awt.Frame;
+import java.awt.GridLayout;
+import java.awt.datatransfer.Clipboard;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowAdapter;
+
+import java.util.Date;
+import java.text.DateFormat;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.awtui.TextFrame;
+
+public class ITestTextPanel extends Frame implements ActionListener {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static long fgOpCount = 0;
+
+    private TestTextPanel fTest;
+    
+    private MTextPanel fTextPanel;
+    private Frame fTextFrame;
+    private Clipboard fClipboard;
+    private Button fExersize, fStressTest, fResize;
+
+    public static void main(String[] args) {
+
+        Date startDate = new Date();
+
+        try {
+            Clipboard clipboard = new Clipboard("ITextTestPanel");
+            TextFrame frame = new TextFrame(null, "Interactive Test", clipboard);
+            MTextPanel panel = frame.getTextPanel();
+
+            new ITestTextPanel(panel, frame, clipboard).show();
+        }
+        finally {
+            DateFormat df = DateFormat.getDateTimeInstance();
+            System.out.println("Start time: " + df.format(startDate));
+            System.out.println("End Time: " + df.format(new Date()));
+            System.out.println("Op count: " + fgOpCount);
+        }
+    }
+
+    public ITestTextPanel(MTextPanel panel,
+                          Frame frame,
+                          Clipboard clipboard) {
+
+        fTextPanel = panel;
+        fTest = new TestTextPanel(fTextPanel);
+        fClipboard = clipboard;
+
+        setLayout(new GridLayout(0, 1));
+
+        fTextFrame = frame;
+        fTextFrame.setSize(350, 500);
+        fTextFrame.show();
+
+        // initialize UI:
+        fExersize = new Button("Exercise");
+        fExersize.addActionListener(this);
+        add(fExersize);
+
+        fStressTest = new Button("Stress Test");
+        fStressTest.addActionListener(this);
+        add(fStressTest);
+
+        pack();
+
+        addWindowListener(new WindowAdapter() {
+            public void windowActivated(WindowEvent e) {
+                //activateTextFrame();
+            }
+            public void windowClosing(WindowEvent e) {
+                System.exit(0);
+            }
+        });
+
+        setSize(280, 150);
+    }
+
+    private void activateTextFrame() {
+
+        fTextFrame.toFront();
+    }
+
+    public void actionPerformed(ActionEvent event) {
+
+        Object source = event.getSource();
+        activateTextFrame();
+        Date startDate = new Date();
+        boolean exitedNormally = false;
+
+        try {
+            if (source == fExersize) {
+                fTest.incRandSeed();
+                for (int i=0; i < 100; i++) {
+                    selectOperation(fTextFrame, fClipboard);
+                }
+            }
+            else if (source == fStressTest) {
+                fTest.incRandSeed();
+                while (true) {
+                    selectOperation(fTextFrame, fClipboard);
+                }
+            }
+            exitedNormally = true;
+        }
+        finally {
+            if (!exitedNormally) {
+                DateFormat df = DateFormat.getDateTimeInstance();
+                System.out.println("Start time: " + df.format(startDate));
+                System.out.println("End Time: " + df.format(new Date()));
+                System.out.println("Rand seed: " + fTest.getRandSeed());
+                System.out.println("Op count: " + fgOpCount);
+            }
+        }
+    }
+
+    /**
+     * Perform a random operation on the MTextPanel.  Frame can
+     * be null.
+     */
+    private static final int OP_COUNT = 15;
+
+    public void selectOperation(Frame frame,
+                                Clipboard fClipboard) {
+
+        int op = fTest.randInt(OP_COUNT);
+
+        switch (op) {
+
+            case 0:
+                fTest._testSetSelection();
+                break;
+
+            case 1:
+                fTest._testModifications(fTest.MOD_TEXT,
+                                        true);
+                break;
+
+            case 2:
+                fTest._testEditMenuOperations(fClipboard);
+                break;
+
+            case 3:
+                fTest._testModFlag(fTextPanel.getCommandLogSize());
+                break;
+
+            case 4:
+                fTest.applyCharacterStyle();
+                break;
+
+            case 5:
+                fTest.applyParagraphStyle();
+                break;
+
+            case 6:
+            case 7:
+            case 8:
+            case 9:
+                fTest.typeKeys();
+                break;
+
+            case 10:
+                fTest.selectText();
+                break;
+
+            case 11:
+                fTest.undoRedo();
+                break;
+
+            case 12:
+                //if (frame != null) {
+                //    fTest.resizeFrame(frame);
+                //    break;
+                //}
+
+            case 13:
+                fTest.applyKeyRemap();
+                break;
+
+            case 14:
+                fTest._testCommandLogControl();
+                break;
+
+            default:
+                throw new Error("OP_COUNT is incorrect");
+        }
+        fgOpCount++;
+    }
+
+
+}
diff --git a/src/com/ibm/richtext/tests/TestTextPanel.java b/src/com/ibm/richtext/tests/TestTextPanel.java
new file mode 100755
index 0000000..87552ee
--- /dev/null
+++ b/src/com/ibm/richtext/tests/TestTextPanel.java
@@ -0,0 +1,846 @@
+/*
+ * @(#)$RCSfile: TestTextPanel.java,v $ $Revision: 1.7 $ $Date: 2000/04/24 21:11:45 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.tests;
+
+import java.util.Random;
+import java.awt.Color;
+import java.awt.Frame;
+import java.awt.event.KeyEvent;
+
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+
+import com.ibm.richtext.textpanel.KeyRemap;
+import com.ibm.richtext.textpanel.KeyEventForwarder;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.textpanel.TextPanelListener;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.textlayout.attributes.TextAttribute;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.textlayout.attributes.TextAttribute;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+// Note:  this used to be a TestFmwk test.  If you add
+// more tests to it, be sure to add them to 
+// com.ibm.test.richtext.FmwkTestTextPanel.test() -
+// otherwise they won't get run!
+
+public class TestTextPanel /*extends TestFmwk*/ {
+
+    private final class TestListener implements TextPanelListener {
+        
+        private int NO_WAY = 0;
+        private int DEFINITELY = 1;
+        private int MAYBE = 2;
+        
+        private final int[] status;
+        
+        TestListener(MTextPanel textPanel) {
+            
+            int length = TextPanelEvent.TEXT_PANEL_LAST -
+                         TextPanelEvent.TEXT_PANEL_FIRST + 1;
+            status = new int[length];
+            textPanel.addListener(this);
+            allowAll();
+        }
+        
+        void refuseAll() {
+            
+            for (int i=0; i < status.length; i++) {
+                status[i] = NO_WAY;
+            }
+        }
+        
+        void allowAll() {
+            
+            for (int i=0; i < status.length; i++) {
+                status[i] = MAYBE;
+            }
+        }
+        
+        void expectEvent(int type) {
+            
+            int index = type - TextPanelEvent.TEXT_PANEL_FIRST;
+            status[index] = DEFINITELY;
+        }
+        
+        void allowEvent(int type) {
+            int index = type - TextPanelEvent.TEXT_PANEL_FIRST;
+            status[index] = MAYBE;
+        }
+        
+        void assertNotExpectingEvents() {
+            assertNotExpectingEvents(false, 0, false);
+        }
+        
+        void assertNotExpectingEvents(int iterationCount, boolean exp) {
+            assertNotExpectingEvents(true, iterationCount, exp);
+        }
+        
+        private void assertNotExpectingEvents(boolean logDetails, int iterationCount, boolean exp) {
+            
+            boolean e = false;
+            for (int i=0; i < status.length; i++) {
+                if (status[i] == DEFINITELY) {
+                    if (logDetails) {
+                        logMessage("Expecting event " +
+                                        (i+TextPanelEvent.TEXT_PANEL_FIRST));
+                        logMessage("iterationCount="+iterationCount+";  expexting="+exp);
+                    }
+                    e = true;
+                }
+            }
+            if (e) {
+                reportError("Some events pending");
+            }
+        }
+        
+        public void textEventOccurred(TextPanelEvent event) {
+            
+            int index = event.getID() - TextPanelEvent.TEXT_PANEL_FIRST;
+            if (status[index] == NO_WAY) {
+                reportError("Unexpected event: " + event);
+            }
+            else if (status[index] == DEFINITELY) {
+                status[index] = NO_WAY;
+            }
+        }
+        
+        public boolean respondsToEventType(int type) {
+            
+            return true;
+        }
+    }
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private static final String STRING_CONTENT = "Some content";
+    private static final int TEST_ITERS = 2;
+    public static final MConstText MOD_TEXT =
+                new StyledText("Styled", AttributeMap.EMPTY_ATTRIBUTE_MAP);
+
+    private Clipboard fClipboard;
+    private MTextPanel fTextPanel = null;
+    private TestListener fListener = null;
+    private int fRandSeed = 0;
+    private Random rand;
+    
+    private static final int BIG_COMMAND_LOG_SIZE = 40;
+    private static final int SMALL_COMMAND_LOG_SIZE = 8;
+
+    private static final StyleModifier[] paraMods = {
+        StyleModifier.createAddModifier(
+                new AttributeMap(TextAttribute.LINE_FLUSH,
+                                 TextAttribute.FLUSH_LEADING)),
+        StyleModifier.createAddModifier(TextAttribute.LINE_FLUSH,
+                                 TextAttribute.FLUSH_CENTER),
+        StyleModifier.createAddModifier(TextAttribute.LINE_FLUSH,
+                                 TextAttribute.FLUSH_TRAILING),
+        StyleModifier.createAddModifier(TextAttribute.LINE_FLUSH,
+                                 TextAttribute.FULLY_JUSTIFIED),
+        StyleModifier.createAddModifier(TextAttribute.RUN_DIRECTION,
+                                 TextAttribute.RUN_DIRECTION_RTL),
+        StyleModifier.createAddModifier(TextAttribute.RUN_DIRECTION,
+                                 TextAttribute.RUN_DIRECTION_LTR),
+        StyleModifier.createRemoveModifier(
+                new AttributeSet(TextAttribute.LINE_FLUSH)),
+        StyleModifier.createRemoveModifier(
+                new AttributeSet(TextAttribute.RUN_DIRECTION))
+    };
+
+    private static final int SELECT = 0;
+    private static final int SET_CARET_POS = 1;
+    private static final int SET_START = 2;
+    private static final int SET_END = 3;
+
+    // using both styles of add modifier: AttributeMap and
+    // key-value, just for variety...
+    private static final StyleModifier[] charMods = {
+        StyleModifier.createAddModifier(
+                new AttributeMap(TextAttribute.WEIGHT,
+                                 TextAttribute.WEIGHT_BOLD)),
+        StyleModifier.createAddModifier(TextAttribute.FOREGROUND,
+                                 Color.green),
+        StyleModifier.createAddModifier(
+                new AttributeMap(TextAttribute.UNDERLINE,
+                                 TextAttribute.UNDERLINE_ON).addAttributes(
+                new AttributeMap(TextAttribute.SIZE, new Float(6)))),
+        StyleModifier.createReplaceModifier(
+                new AttributeMap(TextAttribute.FAMILY, "Dialog")),
+        StyleModifier.createRemoveModifier(
+                new AttributeSet(
+                new Object[] { TextAttribute.WEIGHT,
+                           TextAttribute.POSTURE,
+                           TextAttribute.UNDERLINE,
+                           TextAttribute.STRIKETHROUGH,
+                           TextAttribute.SUPERSCRIPT })),
+        StyleModifier.IDENTITY
+    };
+
+    private static final char[] TYPED_CHARS = new char[128 - ' ' + 3];
+    static {
+        TYPED_CHARS[0] = 8; // backspace
+        TYPED_CHARS[1] = '\t';
+        TYPED_CHARS[2] = '\n';
+        for (int i=3; i < TYPED_CHARS.length; i++) {
+            TYPED_CHARS[i] = (char) (' ' + i - 3);
+        }
+    }
+
+    public TestTextPanel() {
+
+        fClipboard = new Clipboard("TestTextPanel");
+        incRandSeed();
+    }
+
+    protected void reportError(String message) {
+    
+        System.err.println(message);
+        throw new RuntimeException(message);
+        //super.errln(message);
+    }
+    
+    protected void logMessage(String message) {
+    
+        System.err.println(message);
+        //super.logMessage(message);
+    }
+    
+    public TestTextPanel(MTextPanel panel) {
+        
+        this();
+        setTextPanel(panel);
+    }
+    
+    void incRandSeed() {
+        
+        rand = new Random(++fRandSeed);
+    }
+    
+    int getRandSeed() {
+        
+        return fRandSeed;
+    }
+
+    int randInt(int limit) {
+
+        return randInt(0, limit);
+    }
+
+    int randInt(int start, int limit) {
+
+        if (start > limit) {
+            throw new IllegalArgumentException("Range is 0-length.");
+        }
+        else if (start == limit) {
+            return start;
+        }
+
+        return start + (Math.abs(rand.nextInt())%(limit-start)) ;
+    }
+
+    public void test() {
+
+        AttributeMap bold = new AttributeMap(TextAttribute.WEIGHT,
+                                             TextAttribute.WEIGHT_BOLD);
+        MConstText text1 = new StyledText("Test contents. 1234\nHow about it?",
+                                              AttributeMap.EMPTY_ATTRIBUTE_MAP);
+        MConstText text2 = new StyledText("Another test string.", bold);
+
+        _testWithText(text1);
+        _testWithText(text2);
+        _testWithText(new StyledText());
+
+        StyledText big1 = new StyledText();
+        for (int i=0; i < 50; i++) {
+            big1.append(text1);
+        }
+
+        _testWithText(big1);
+        StyledText big2 = new StyledText(text1);
+        for (int i=0; i < 80; i++) {
+            big2.append(text2);
+        }
+
+        _testWithText(big2);
+    }
+    
+    private void setTextPanel(MTextPanel panel) {
+        
+        fTextPanel = panel;
+        fListener = new TestListener(panel);
+    }
+    
+    private void _testWithText(MConstText text) {
+
+        setTextPanel(new TextPanel(text, fClipboard));
+
+        for (int i=0; i < TEST_ITERS; i++) {
+            _testSetSelection();
+            _testModifications(MOD_TEXT, true);
+            _testEditMenuOperations(fClipboard);
+            _testModFlag(fTextPanel.getCommandLogSize());
+            _testCommandLogControl();
+        }
+    }
+
+    private void _testSelection(int function, 
+                               final int aStart,
+                               final int aLimit) {
+
+        int oldStart = fTextPanel.getSelectionStart();
+        int oldLimit = fTextPanel.getSelectionEnd();
+
+        final int length = fTextPanel.getTextLength();
+        
+        int start = aStart;
+        int limit = aLimit;
+        
+        if (start < 0) {
+            start = 0;
+        }
+        else if (start > length) {
+            start = length;
+        }
+
+        if (limit < start) {
+            limit = start;
+        }
+        else if (limit > length) {
+            limit = length;
+        }
+        
+        fListener.refuseAll();
+        
+        if (oldStart != start || oldLimit != limit) {
+            fListener.expectEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+            fListener.allowEvent(TextPanelEvent.SELECTION_STYLES_CHANGED);
+        }
+        if ((oldStart==oldLimit) != (start==limit)) {
+            fListener.expectEvent(TextPanelEvent.SELECTION_EMPTY_CHANGED);
+        }
+        if (oldStart==oldLimit) {
+            fListener.allowEvent(TextPanelEvent.UNDO_STATE_CHANGED);
+        }
+
+        switch(function) {
+            case SELECT:
+                fTextPanel.select(aStart, aLimit);
+                break;
+            case SET_CARET_POS:
+                fTextPanel.setCaretPosition(aStart);
+                break;
+            case SET_START:
+                fTextPanel.setSelectionStart(aStart);
+                break;
+            case SET_END:
+                fTextPanel.setSelectionEnd(aLimit);
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid function");
+        }
+        
+        if (fTextPanel.getSelectionStart() != start) {
+            reportError("getSelectionStart is incorrect after set");
+        }
+        if (fTextPanel.getSelectionEnd() != limit) {
+            reportError("getSelectionEnd is incorrect after set");
+        }
+        fListener.assertNotExpectingEvents();
+        fListener.allowAll();
+    }
+
+    private void setAndTestSelection(int start, int limit) {
+        
+        _testSelection(SELECT, start, limit);
+    }
+
+    private void setAndTestCaret(int caretPos) {
+
+        _testSelection(SET_CARET_POS, caretPos, caretPos);
+    }
+
+    private void setAndTestSelectionStart(int selStart) {
+
+        int limit = fTextPanel.getSelectionEnd();
+        _testSelection(SET_START, selStart, limit);
+    }
+
+    private void setAndTestSelectionEnd(int selEnd) {
+
+        int start = fTextPanel.getSelectionStart();
+        _testSelection(SET_END, start, selEnd);
+    }
+
+    public void _testSetSelection() {
+
+        int textLength = fTextPanel.getTextLength();
+        if (textLength != fTextPanel.getText().length()) {
+            reportError("Text panel length is not correct");
+        }
+
+        setAndTestSelection(0, textLength / 2);
+        setAndTestSelection(textLength / 2, textLength);
+        setAndTestSelection(0, textLength);
+        setAndTestSelection(-1, textLength+1);
+        if (textLength > 0) {
+            setAndTestSelection(0, textLength - 1);
+            setAndTestSelection(0, 1);
+        }
+
+        final int incAmount = Math.max(1, textLength/5);
+        for (int index = 0; index <= textLength; index += incAmount) {
+
+            setAndTestCaret(index);
+            setAndTestSelectionStart(textLength-index);
+            setAndTestSelectionEnd(textLength);
+            setAndTestSelectionStart(0);
+            setAndTestSelectionEnd(textLength-index);
+        }
+    }
+
+    /**
+     * Text must be editable to pass this test.
+     */
+    public void _testModifications(MConstText insertionText,
+                                   boolean restoreOldText) {
+
+        MConstText oldText = new StyledText(fTextPanel.getText());
+        final int insLength = insertionText.length();
+
+        fListener.allowAll();
+        fListener.expectEvent(TextPanelEvent.TEXT_CHANGED);
+        fListener.expectEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+        fTextPanel.append(insertionText);
+        fListener.assertNotExpectingEvents();
+        
+        if (fTextPanel.getSelectionStart() != oldText.length() + insLength) {
+            reportError("Append didn't result in correct selection");
+        }
+
+        fListener.expectEvent(TextPanelEvent.TEXT_CHANGED);
+        fListener.expectEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+        fTextPanel.insert(insertionText, 0);
+        fListener.assertNotExpectingEvents();
+        fListener.allowAll();
+        
+        if (fTextPanel.getSelectionStart() != insLength) {
+            reportError("Insert didn't result in correct selection");
+        }
+
+        fTextPanel.replaceRange(insertionText, insLength, insLength+oldText.length());
+        if (fTextPanel.getSelectionStart() != insLength*2) {
+            reportError("Replace didn't result in correct selection");
+        }
+        if (fTextPanel.getSelectionEnd() != insLength*2) {
+            reportError("Replace didn't result in correct selection");
+        }
+        if (fTextPanel.getTextLength() != insLength*3) {
+            reportError("textLength is incorrect");
+        }
+
+        if (restoreOldText) {
+            fTextPanel.setText(oldText);
+            if (fTextPanel.getSelectionStart() != oldText.length()) {
+                reportError("setText didn't result in correct selection");
+            }
+            if (fTextPanel.getTextLength() != oldText.length()) {
+                reportError("length incorrect after setText");
+            }
+        }
+        
+        fListener.allowAll();
+    }
+
+    private static int iterationCount = 0;
+    public void _testCommandLogControl() {
+
+        fListener.refuseAll();
+        iterationCount++;
+        boolean exp = false;
+        if (fTextPanel.canRedo() || BIG_COMMAND_LOG_SIZE==0) {
+            fListener.expectEvent(TextPanelEvent.UNDO_STATE_CHANGED);
+            exp = true;
+        }
+        //try {
+            fTextPanel.setCommandLogSize(BIG_COMMAND_LOG_SIZE);
+            
+            if (fTextPanel.canRedo()) {
+                reportError("canRedo after setCommandLogSize");
+            }
+            fListener.assertNotExpectingEvents(iterationCount, exp);
+        //}
+        //catch(Error e) {
+        //    logMessage("iterationCount="+iterationCount+";  expexting="+exp);
+        //    throw e;
+        //}
+
+        MConstText insText = new StyledText("7",
+                                AttributeMap.EMPTY_ATTRIBUTE_MAP);
+
+        final int origLength = fTextPanel.getTextLength();
+        int start = origLength / 3;
+        
+        fListener.allowEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+        fListener.allowEvent(TextPanelEvent.SELECTION_STYLES_CHANGED);
+
+        for (int i=start; i < BIG_COMMAND_LOG_SIZE+start; i++) {
+            fListener.expectEvent(TextPanelEvent.UNDO_STATE_CHANGED);
+            fListener.expectEvent(TextPanelEvent.TEXT_CHANGED);
+            if (fTextPanel.getSelectionStart() != fTextPanel.getSelectionEnd()) {
+                fListener.expectEvent(TextPanelEvent.SELECTION_EMPTY_CHANGED);
+            }
+            fTextPanel.insert(insText, i);
+            fListener.assertNotExpectingEvents();
+        }
+
+        fListener.allowEvent(TextPanelEvent.SELECTION_EMPTY_CHANGED);
+        
+        for (int i=0; i < BIG_COMMAND_LOG_SIZE-1; i++) {
+            fListener.expectEvent(TextPanelEvent.UNDO_STATE_CHANGED);
+            fListener.expectEvent(TextPanelEvent.TEXT_CHANGED);
+            fTextPanel.undo();
+            fListener.assertNotExpectingEvents();
+        }
+        if (!fTextPanel.canUndo()) {
+            reportError("Command log is too small");
+        }
+        
+        fListener.allowAll();
+        fTextPanel.undo();
+        if (fTextPanel.canUndo()) {
+            reportError("Command log is too large");
+        }
+
+        if (fTextPanel.getTextLength() != origLength * insText.length()) {
+            reportError("Text length was not restored");
+        }
+
+        for (int i=0; i < BIG_COMMAND_LOG_SIZE; i++) {
+            fTextPanel.redo();
+        }
+
+        if (fTextPanel.getTextLength() != origLength+BIG_COMMAND_LOG_SIZE) {
+            reportError("Text length was not restored after redo");
+        }
+
+        if (fTextPanel.canRedo()) {
+            reportError("Should not be able to redo");
+        }
+
+        fTextPanel.undo();
+
+        fTextPanel.setCommandLogSize(SMALL_COMMAND_LOG_SIZE);
+
+        if (fTextPanel.canRedo()) {
+            reportError("canRedo after setCommandLogSize(small)");
+        }
+
+        for (int i=0; i < SMALL_COMMAND_LOG_SIZE; i++) {
+            if (!fTextPanel.canUndo()) {
+                reportError("should be able to undo");
+            }
+            fTextPanel.undo();
+        }
+        if (fTextPanel.canUndo()) {
+            reportError("should not be able to undo after setCommandLogSize(small)");
+        }
+        if (!fTextPanel.canRedo()) {
+            reportError("why can't this redo???");
+        }
+        fTextPanel.redo();
+
+        fTextPanel.clearCommandLog();
+
+        if (fTextPanel.canUndo() || fTextPanel.canRedo()) {
+            reportError("Command log wasn't cleared");
+        }
+    }
+
+    /**
+     * Test cut, copy, paste, undo, redo, clear, canUndo, canRedo.
+     * Text must be editable to pass this test.
+     */
+    public void _testEditMenuOperations(Clipboard clipboard) {
+        
+        if (clipboard != null) {
+            // test paste and undo / redo
+            Transferable tr = new StringSelection(STRING_CONTENT);
+            clipboard.setContents(tr, new ClipboardOwner() {
+                public void lostOwnership(Clipboard c, Transferable t) {
+                }
+            });
+            if (!fTextPanel.clipboardNotEmpty()) {
+                reportError("MTextPanel doesn't recognize string content.");
+            }
+
+            fTextPanel.setCaretPosition(fTextPanel.getSelectionStart());
+            int oldLength = fTextPanel.getTextLength();
+            fTextPanel.paste();
+            if (fTextPanel.getTextLength() != oldLength + STRING_CONTENT.length()) {
+                reportError("Text length is wrong after paste.");
+            }
+
+            if (!fTextPanel.canUndo()) {
+                reportError("canUndo should be true");
+            }
+            fTextPanel.undo();
+            if (fTextPanel.getTextLength() != oldLength) {
+                reportError("Length is wrong after undo");
+            }
+            if (!fTextPanel.canRedo()) {
+                reportError("canRedo should be true");
+            }
+            fTextPanel.redo();
+            if (fTextPanel.getTextLength() != oldLength + STRING_CONTENT.length()) {
+                reportError("Text length is wrong after redo.");
+            }
+        }
+
+        int origLength = fTextPanel.getTextLength();
+        fTextPanel.selectAll();
+        fTextPanel.clear();
+        if (fTextPanel.getTextLength() != 0) {
+            reportError("Length is nonzero after clear");
+        }
+        if (!fTextPanel.canUndo()) {
+            reportError("canUndo should be true");
+        }
+        fTextPanel.undo();
+        if (fTextPanel.getTextLength() != origLength) {
+            reportError("Old text not restored");
+        }
+
+        if (origLength > 0) {
+
+            fTextPanel.select(0, 1);
+            fTextPanel.cut();
+            if (fTextPanel.getTextLength() != origLength-1) {
+                reportError("Length wrong after cut");
+            }
+            fTextPanel.paste();
+            if (fTextPanel.getTextLength() != origLength) {
+                reportError("Length wrong after paste");
+            }
+            fTextPanel.select(0, origLength);
+            fTextPanel.copy();
+            fTextPanel.setCaretPosition(0);
+            fTextPanel.paste();
+            if (fTextPanel.getTextLength() != 2*origLength) {
+                reportError("Length wrong after paste");
+            }
+            fTextPanel.undo();
+            if (fTextPanel.getTextLength() != origLength) {
+                reportError("Length wrong after undo");
+            }
+        }
+    }
+
+    private void setAndTestModFlag(final int depth,
+                                   boolean modified) {
+
+        fTextPanel.setModified(modified);
+        for (int i=0; i < depth; i++) {
+            if (!fTextPanel.canUndo()) {
+                reportError("Panel cannot undo at valid depth.  Depth=" + i);
+            }
+            fTextPanel.undo();
+            fTextPanel.setModified(modified);
+        }
+
+        // check that all mod flags are false:
+        if (fTextPanel.isModified() != modified) {
+            reportError("isModified is not correct");
+        }
+
+        for (int i=0; i < depth; i++) {
+            fTextPanel.redo();
+            if (fTextPanel.isModified() != modified) {
+                reportError("isModified is not correct");
+            }
+        }
+    }
+
+    /**
+     * Make <code>depth</code> modifications to the text in textfTextPanel.
+     * Set the modified flag on each operation, and then retrieve its
+     * value.  Finally, undo the modifications.
+     */
+    public void _testModFlag(final int depth) {
+
+        final int oldLength = fTextPanel.getTextLength();
+
+        for (int i=0; i < depth; i++) {
+            fTextPanel.insert(MOD_TEXT, 0);
+        }
+
+        setAndTestModFlag(depth, false);
+        setAndTestModFlag(depth, true);
+
+        for (int i=0; i < depth; i++) {
+            fTextPanel.undo();
+        }
+
+        if (fTextPanel.getTextLength() != oldLength) {
+            reportError("Undo did not restore old text.");
+        }
+    }
+
+    void applyCharacterStyle() {
+
+        StyleModifier stMod = charMods[randInt(charMods.length)];
+        fListener.refuseAll();
+        fListener.expectEvent(TextPanelEvent.SELECTION_STYLES_CHANGED);
+        if (fTextPanel.getSelectionStart() != fTextPanel.getSelectionEnd()) {
+            fListener.expectEvent(TextPanelEvent.TEXT_CHANGED);
+            fListener.allowEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+        }
+        fListener.allowEvent(TextPanelEvent.UNDO_STATE_CHANGED);
+        fTextPanel.modifyCharacterStyleOnSelection(stMod);
+        fListener.assertNotExpectingEvents();
+        fListener.allowAll();
+    }
+
+
+    void applyParagraphStyle() {
+
+        fListener.refuseAll();
+        fListener.expectEvent(TextPanelEvent.SELECTION_STYLES_CHANGED);
+        fListener.expectEvent(TextPanelEvent.TEXT_CHANGED);
+        fListener.allowEvent(TextPanelEvent.UNDO_STATE_CHANGED);
+        fListener.allowEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+        StyleModifier stMod = paraMods[randInt(paraMods.length)];
+        fTextPanel.modifyParagraphStyleOnSelection(stMod);
+        fListener.assertNotExpectingEvents();
+        fListener.allowAll();
+    }
+
+    void applyKeyRemap() {
+
+        fListener.refuseAll();
+        fListener.expectEvent(TextPanelEvent.KEYREMAP_CHANGED);
+        int op = randInt(5);
+        switch (op) {
+
+            case 0:
+                fTextPanel.setKeyRemap(KeyRemap.getIdentityRemap());
+                break;
+
+            case 1:
+                fTextPanel.setKeyRemap(KeyRemap.getArabicTransliteration());
+                break;
+
+            case 2:
+                fTextPanel.setKeyRemap(KeyRemap.getHebrewTransliteration());
+                break;
+
+            case 3:
+                fTextPanel.setKeyRemap(KeyRemap.getIsraelNikud());
+                break;
+            
+            case 4:
+                //fTextPanel.setKeyRemap(KeyRemap.getThaiKetmanee());
+                fTextPanel.setKeyRemap(KeyRemap.getIsraelNikud());
+                break;
+            
+            default:
+                reportError("Invalid operation!");
+        }
+        fListener.assertNotExpectingEvents();
+        fListener.allowAll();
+    }
+
+    void resizeFrame(Frame frame) {
+
+        fListener.refuseAll();
+        fListener.allowEvent(TextPanelEvent.FORMAT_WIDTH_CHANGED);
+        int wd = randInt(50, 1000);
+        int ht = randInt(20, 800);
+
+        frame.setSize(wd, ht);
+        fListener.allowAll();
+    }
+
+    void selectText() {
+
+        int selStart = randInt(-10, fTextPanel.getTextLength());
+        int selLimit = randInt(0, fTextPanel.getTextLength() + 10);
+        _testSelection(SELECT, selStart, selLimit);
+    }
+
+    void undoRedo() {
+
+        final int opCount = randInt(-10, 15);
+
+        for (int i=opCount; i <= 0; i++) {
+            fTextPanel.redo();
+        }
+        for (int i=0; i < opCount; i++) {
+            fTextPanel.undo();
+        }
+    }
+    
+    void typeKeys() {
+
+        final int keyCount = randInt(1, 100);
+        TextPanel textPanel = (TextPanel) fTextPanel;
+        
+        KeyEventForwarder forwarder = new KeyEventForwarder(textPanel);
+        
+        fListener.refuseAll();
+        fListener.allowEvent(TextPanelEvent.UNDO_STATE_CHANGED);
+        
+        if (fTextPanel.getSelectionStart() != fTextPanel.getSelectionEnd()) {
+            fListener.expectEvent(TextPanelEvent.SELECTION_EMPTY_CHANGED);
+        }
+        
+        for (int i=0; i < keyCount; i++) {
+            char typedChar = TYPED_CHARS[randInt(TYPED_CHARS.length)];
+            KeyEvent event = new KeyEvent(textPanel,
+                                          KeyEvent.KEY_TYPED,
+                                          0,
+                                          0,
+                                          KeyEvent.VK_UNDEFINED,
+                                          typedChar);
+            if (typedChar == 8 || typedChar == 0x7f) {
+                fListener.allowEvent(TextPanelEvent.TEXT_CHANGED);
+                fListener.allowEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+            }
+            else {
+                fListener.expectEvent(TextPanelEvent.TEXT_CHANGED);
+                fListener.expectEvent(TextPanelEvent.SELECTION_RANGE_CHANGED);
+            }
+            forwarder.handleKeyEvent(event);
+            //try {
+                fListener.assertNotExpectingEvents(i, false);
+            //}
+            //catch(Error e) {
+            //    logMessage("i="+i+"; typedChar="+Integer.toHexString(typedChar));
+            //    throw e;
+            //}
+        }
+        fListener.allowAll();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/tests/TypingPerfTest.java b/src/com/ibm/richtext/tests/TypingPerfTest.java
new file mode 100755
index 0000000..b7e5a19
--- /dev/null
+++ b/src/com/ibm/richtext/tests/TypingPerfTest.java
@@ -0,0 +1,242 @@
+/*
+ * @(#)$RCSfile: TypingPerfTest.java,v $ $Revision: 1.2 $ $Date: 2000/04/22 17:08:46 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.tests;
+
+import java.awt.Button;
+import java.awt.GridLayout;
+import java.awt.Frame;
+import java.awt.Toolkit;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.IOException;
+
+import java.text.DateFormat;
+import java.util.Date;
+
+import com.ibm.richtext.textpanel.KeyEventForwarder;
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.awtui.TextFrame;
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.richtext.demo.EditDemo;
+import com.ibm.richtext.demo.TextDocument;
+
+public class TypingPerfTest implements ActionListener {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private TextFrame fTextFrame;
+    private KeyEventForwarder fKeyEventForwarder;
+    private PrintWriter fOut;
+
+    private static final String fgAtStartCommand = "Insert at start";
+    private static final String fgAtEndCommand = "Insert at end";
+    private static final String fgFwdDelete = "Forward delete";
+    private static final String fgBackspace = "Backspace";
+    private static final String fgAtCurrentPosCommand = "Insert at current position";
+    private static final String fgLotsOfTextCommand = "Insert a lot of text";
+
+    private static final String USAGE = "Usage: java com.ibm.richtext.tests.TypingPerfTest [file] [-insertionText text]";
+    private char[] fInsText;
+
+    public static void main(String[] args) throws IOException {
+
+        OutputStream outStream = null;
+        PrintWriter writer = new PrintWriter(System.out);
+
+        MConstText text = Declaration.fgDeclaration;
+        char[] insText = "The quick brown fox jumps over the lazy dog. The end. ".toCharArray();
+        
+        int index = 0;
+        while (index < args.length) {
+            if (args[index].equals("-insertionText")) {
+                if (args.length == ++index) {
+                    throw new Error(USAGE);
+                }
+                insText = args[index++].toCharArray();
+            }
+            else {
+                // This will try MConstText first, then plain text.
+                TextDocument doc = EditDemo.getDocumentFromFile(new File(args[index++]));
+                if (doc == null) {
+                    throw new Error("Couldn't open file "+args[index-1]);
+                }
+                text = doc.getText();
+            }
+        }
+        
+        if (index != args.length) {
+            throw new Error(USAGE);
+        }
+        
+        new TypingPerfTest(writer, text, insText);
+    }
+
+    public TypingPerfTest(PrintWriter out, MConstText text, char[] insText) throws IOException {
+
+        fInsText = insText;
+        fTextFrame = new TextFrame(text, "", null);
+        TextPanel textPanel = (TextPanel) fTextFrame.getTextPanel();
+        fKeyEventForwarder = new KeyEventForwarder(textPanel);
+        fOut = out;
+
+        DateFormat df = DateFormat.getDateTimeInstance();
+        out.println("Test date: " + df.format(new Date()));
+
+        fTextFrame.setSize(500, 700);
+        fTextFrame.show();
+
+        Frame f = new Frame("Typing Perf Test");
+        f.setLayout(new GridLayout(0, 1));
+        Button b;
+/*
+        b = new Button(fgAtStartCmd);
+        b.addActionListener(this);
+        f.add(b);
+
+        b = new Button(fgAtEndCmd);
+        b.addActionListener(this);
+        f.add(b);
+*/
+        b = new Button(fgAtCurrentPosCommand);
+        b.addActionListener(this);
+        f.add(b);
+
+        b = new Button(fgLotsOfTextCommand);
+        b.addActionListener(this);
+        f.add(b);
+
+        b = new Button(fgFwdDelete);
+        b.addActionListener(this);
+        f.add(b);
+
+        b = new Button(fgBackspace);
+        b.addActionListener(this);
+        f.add(b);
+
+        f.doLayout();
+        WindowAdapter closer = new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                fOut.close();
+                System.exit(0);
+            }
+        };
+        
+        f.addWindowListener(closer);
+        fTextFrame.addWindowListener(closer);
+        
+        f.setSize(200, 80);
+        f.show();
+    }
+
+    public void actionPerformed(ActionEvent evt) {
+
+        try {
+            if (evt.getActionCommand().equals(fgAtCurrentPosCommand)) {
+
+                insertAtCurrentPos(1);
+            }
+            else if (evt.getActionCommand().equals(fgLotsOfTextCommand)) {
+
+                insertAtCurrentPos(8);
+            }
+            else if (evt.getActionCommand().equals(fgFwdDelete)) {
+
+                forwardDelete(1);
+            }
+            else if (evt.getActionCommand().equals(fgBackspace)) {
+
+                backspace(1);
+            }
+        }
+        catch(IOException e) {
+            System.out.println("Caught exception: " + e);
+        }
+    }
+
+    private void insertAtCurrentPos(final int times) throws IOException {
+
+        fTextFrame.toFront();
+
+        System.gc();
+
+        long startTime = System.currentTimeMillis();
+
+        for (int t=0; t < times; t++) {
+            for (int i=0; i < fInsText.length; i++) {
+
+                KeyEvent event = new KeyEvent(fTextFrame, KeyEvent.KEY_TYPED, 0, 0, 0, fInsText[i]);
+                fKeyEventForwarder.handleKeyEvent(event);
+            }
+        }
+
+        long time = System.currentTimeMillis() - startTime;
+
+        fOut.println("Total time: " + time);
+        fOut.println("Millis per character: " + (time / (fInsText.length*times)));
+        fOut.flush();
+    }
+
+    private void forwardDelete(final int times) throws IOException {
+
+        System.gc();
+
+        long startTime = System.currentTimeMillis();
+
+        for (int t=0; t < times; t++) {
+            for (int i=0; i < fInsText.length; i++) {
+
+                KeyEvent event = new KeyEvent(fTextFrame, 0, 0, 0, KeyEvent.VK_DELETE, '\u00FF');
+                fKeyEventForwarder.handleKeyEvent(event);
+            }
+        }
+
+        long time = System.currentTimeMillis() - startTime;
+
+        fOut.println("Total time: " + time);
+        fOut.println("Millis per character: " + (time / (fInsText.length*times)));
+        fOut.flush();
+    }
+
+    private void backspace(final int times) throws IOException {
+
+        System.gc();
+
+        long startTime = System.currentTimeMillis();
+
+        for (int t=0; t < times; t++) {
+            for (int i=0; i < fInsText.length; i++) {
+
+                KeyEvent event = new KeyEvent(fTextFrame, 0, 0, 0, KeyEvent.VK_BACK_SPACE, '\u0010');
+                fKeyEventForwarder.handleKeyEvent(event);
+            }
+        }
+
+        long time = System.currentTimeMillis() - startTime;
+
+        fOut.println("Total time: " + time);
+        fOut.println("Millis per character: " + (time / (fInsText.length*times)));
+        fOut.flush();
+    }
+}
diff --git a/src/com/ibm/richtext/textapps/AppCloser.java b/src/com/ibm/richtext/textapps/AppCloser.java
new file mode 100755
index 0000000..63d7a7e
--- /dev/null
+++ b/src/com/ibm/richtext/textapps/AppCloser.java
@@ -0,0 +1,46 @@
+/*
+ * @(#)$RCSfile: AppCloser.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:48:51 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textapps;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.Frame;
+import java.awt.Window;
+
+class AppCloser {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private int fCount = 0;
+
+    private WindowAdapter fAdapter = new WindowAdapter() {
+
+        public void windowClosing(WindowEvent e) {
+            --fCount;
+            if (fCount == 0) {
+                System.exit(0);
+            }
+            Window w = e.getWindow();
+            w.setVisible(false);
+            w.dispose();
+        }
+    };
+
+    public void listenToFrame(Frame frame) {
+
+        ++fCount;
+        frame.addWindowListener(fAdapter);
+    }
+}
diff --git a/src/com/ibm/richtext/textapps/BidiDemo.java b/src/com/ibm/richtext/textapps/BidiDemo.java
new file mode 100755
index 0000000..3ca5d04
--- /dev/null
+++ b/src/com/ibm/richtext/textapps/BidiDemo.java
@@ -0,0 +1,88 @@
+/*
+ * @(#)$RCSfile: BidiDemo.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:48:51 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textapps;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.richtext.awtui.TextFrame;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.Toolkit;
+
+import java.io.*;
+import java.net.URL;
+import java.util.ResourceBundle;
+import java.util.Date;
+
+public class BidiDemo {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final AppCloser fgListener = new AppCloser();
+
+    private static final String BUNDLE_NAME = "textapps.resources.Sample";
+    
+    public static void main(String[] args) {
+
+        String docName;
+        
+        if (args.length == 0) {
+            docName = "default";
+        }
+        else {
+            docName = args[0];
+        }
+        
+        openText(docName);
+    }
+
+    private static void openText(String docName) {
+
+        try {
+            ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_NAME);
+
+            Object document = bundle.getObject(docName+".sample");
+            MConstText text;
+            
+            if (document instanceof String) {
+                text = new StyledText((String)document, 
+                                      AttributeMap.EMPTY_ATTRIBUTE_MAP);
+            }
+            else {
+                URL url = (URL) document;
+                ObjectInputStream in = new ObjectInputStream(url.openStream());
+                text = (MConstText) in.readObject();
+            }
+            
+            String name = bundle.getString(docName+".name");
+            
+            makeFrame(text, name);
+        }
+        catch(Throwable t) {
+            t.printStackTrace();
+        }
+    }
+
+    private static void makeFrame(MConstText text, String title) {
+
+        TextFrame frame = new TextFrame(text, title, 
+                Toolkit.getDefaultToolkit().getSystemClipboard());
+        frame.setSize(550, 700);
+        frame.show();
+        fgListener.listenToFrame(frame);
+    }
+}
diff --git a/src/com/ibm/richtext/textapps/FileUtils.java b/src/com/ibm/richtext/textapps/FileUtils.java
new file mode 100755
index 0000000..0f78be8
--- /dev/null
+++ b/src/com/ibm/richtext/textapps/FileUtils.java
@@ -0,0 +1,130 @@
+/*
+ * @(#)$RCSfile: FileUtils.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:48:51 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textapps;
+
+import java.awt.FileDialog;
+import java.awt.Frame;
+import java.io.*;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+
+public class FileUtils {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * Present the user with a file dialog, and replace
+     * dest with the MText in the selected file, and return
+     * the file objct.  If any errors occur, return null and
+     * do not modify dest.
+     */
+    public static File userLoadMText(String title, MText dest, Frame owner) {
+
+        FileDialog dialog = new FileDialog(owner, title, FileDialog.LOAD);
+        dialog.show();
+        String fileStr = dialog.getFile();
+        String dirStr = dialog.getDirectory();
+
+        if (fileStr != null) {
+            File rval = new File(dirStr, fileStr);
+            MConstText src = loadMText(rval);
+            if (src != null) {
+                dest.replaceAll(src);
+                return rval;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Return the MText serialized in the given file.
+     * In case of an error return null.
+     */
+    public static MConstText loadMText(File file) {
+
+        Throwable error;
+
+        try {
+            FileInputStream inStream = new FileInputStream(file);
+            ObjectInputStream objStream = new ObjectInputStream(inStream);
+
+            MConstText text = (MConstText) objStream.readObject();
+            inStream.close();
+            return text;
+        }
+        catch(IOException e) {
+            error = e;
+        }
+        catch(ClassNotFoundException e) {
+            error = e;
+        }
+        catch(ClassCastException e) {
+            error = e;
+        }
+
+        error.printStackTrace();
+        return null;
+    }
+
+    /**
+     * Prompt the user for the file if file is null.  Then save the
+     * text in the file, if any.
+     */
+    public static File userSaveMText(File file, String title, MConstText text, Frame owner) {
+
+        if (file == null) {
+
+            FileDialog dialog = new FileDialog(owner, title, FileDialog.SAVE);
+            dialog.show();
+            String fileStr = dialog.getFile();
+            String dirStr = dialog.getDirectory();
+
+            if (fileStr != null) {
+                file = new File(dirStr, fileStr);
+            }
+        }
+
+        if (file != null) {
+
+            saveMText(file, text);
+        }
+
+        return file;
+    }
+
+    public static void saveMText(File file, MConstText text) {
+
+        Throwable error;
+
+        try {
+            OutputStream outStream = new FileOutputStream(file);
+            ObjectOutputStream objStream = new ObjectOutputStream(outStream);
+
+            objStream.writeObject(text);
+            outStream.close();
+            return;
+        }
+        catch(IOException e) {
+            error = e;
+        }
+        catch(ClassCastException e) {
+            error = e;
+        }
+
+        error.printStackTrace();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textapps/MTextToString.java b/src/com/ibm/richtext/textapps/MTextToString.java
new file mode 100755
index 0000000..552d770
--- /dev/null
+++ b/src/com/ibm/richtext/textapps/MTextToString.java
@@ -0,0 +1,84 @@
+/*
+ * @(#)$RCSfile: MTextToString.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:48:51 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textapps;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import java.io.*;
+
+public final class MTextToString {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static void main(String[] args) {
+
+
+        if (args.length != 2) {
+            usage();
+        }
+        else {
+            writeMTextAsString(args[0], args[1]);
+        }
+    }
+
+    private static void usage() {
+
+        System.out.println("Usage: MTextToString inFile outFile");
+        System.out.println("inFile must be a serialized MConstText");
+        System.out.println("On exit, outFile will be a serialized String ");
+        System.out.println("containing the characters in the text.");
+        System.out.println("inFile and outFile must not be the same.");
+        System.exit(1);
+    }
+
+    public static void writeMTextAsString(String inFile, String outFile) {
+
+        File file = new File(inFile);
+        MConstText text = FileUtils.loadMText(file);
+
+        if (text != null) {
+            char[] ch = new char[text.length()];
+            text.extractChars(0, ch.length, ch, 0);
+            String str = new String(ch);
+            writeString(str, outFile);
+        }
+        else {
+            System.out.println("Can't read inFile.");
+        }
+    }
+
+    public static void writeString(String stringToWrite, String outFile) {
+
+        File file = new File(outFile);
+        Throwable error = null;
+
+        try {
+            OutputStream outStream = new FileOutputStream(file);
+            ObjectOutputStream objStream = new ObjectOutputStream(outStream);
+
+            objStream.writeObject(stringToWrite);
+            outStream.close();
+            return;
+        }
+        catch(IOException e) {
+            error = e;
+        }
+        catch(ClassCastException e) {
+            error = e;
+        }
+
+        error.printStackTrace();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textapps/StringToMText.java b/src/com/ibm/richtext/textapps/StringToMText.java
new file mode 100755
index 0000000..022efe4
--- /dev/null
+++ b/src/com/ibm/richtext/textapps/StringToMText.java
@@ -0,0 +1,78 @@
+/*
+ * @(#)$RCSfile: StringToMText.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:48:51 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textapps;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import java.io.*;
+
+public final class StringToMText {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static void main(String[] args) {
+
+
+        if (args.length != 2 || args[0].equals(args[1])) {
+            usage();
+        }
+        else {
+            String str = loadString(new File(args[0]));
+            if (str == null) {
+                throw new Error("Couldn't load String from file " + args[0]);
+            }
+            MConstText text = new StyledText(str, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+            FileUtils.saveMText(new File(args[1]), text);
+        }
+    }
+
+    private static void usage() {
+
+        System.out.println("Usage: StringToMText inFile outFile");
+        System.out.println("inFile must be a serialized String");
+        System.out.println("On exit, outFile will be a serialized MText ");
+        System.out.println("containing the characters in the string.");
+        System.out.println("inFile and outFile must not be the same.");
+        System.exit(1);
+    }
+
+    public static String loadString(File file) {
+
+        Throwable error;
+
+        try {
+            FileInputStream inStream = new FileInputStream(file);
+            ObjectInputStream objStream = new ObjectInputStream(inStream);
+
+            String str = (String) objStream.readObject();
+            inStream.close();
+            return str;
+        }
+        catch(IOException e) {
+            error = e;
+        }
+        catch(ClassNotFoundException e) {
+            error = e;
+        }
+        catch(ClassCastException e) {
+            error = e;
+        }
+
+        error.printStackTrace();
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textapps/TestMTextToString.java b/src/com/ibm/richtext/textapps/TestMTextToString.java
new file mode 100755
index 0000000..690468b
--- /dev/null
+++ b/src/com/ibm/richtext/textapps/TestMTextToString.java
@@ -0,0 +1,77 @@
+/*
+ * @(#)$RCSfile: TestMTextToString.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:48:51 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textapps;
+
+import com.ibm.richtext.styledtext.MConstText;
+import java.io.File;
+
+public final class TestMTextToString {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static void main(String[] args) {
+
+        if (args.length != 2 || args[0].equals(args[1])) {
+            usage();
+        }
+        else {
+            boolean success = testMTextToString(args[0], args[1]);
+            System.out.println(success? "PASSED" : "FAILED");
+        }
+    }
+
+    private static void usage() {
+
+        System.out.println("Usage: TestMTextToString mtextFile stringFile");
+        System.out.println("Compares the characters in mtextFile to the");
+        System.out.println("String in stringFile.");
+        System.exit(0);
+    }
+
+    public static boolean testMTextToString(String mtextFile, String stringFile) {
+
+        boolean success = false;
+
+        File mtext = new File(mtextFile);
+        MConstText text = FileUtils.loadMText(mtext);
+        if (text != null) {
+            String str = StringToMText.loadString(new File(stringFile));
+            if (str != null) {
+                success = compareMTextToString(text, str);
+            }
+            else {
+                System.out.println("Couldn't load String.");
+            }
+        }
+        else {
+            System.out.println("Couldn't load MText.");
+        }
+
+        return success;
+    }
+
+    public static boolean compareMTextToString(MConstText text, String str) {
+
+        if (text.length() != str.length()) {
+            return false;
+        }
+        for (int i=str.length()-1; i >= 0; i--) {
+            if (text.at(i) != str.charAt(i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textapps/resources/Sample.java b/src/com/ibm/richtext/textapps/resources/Sample.java
new file mode 100755
index 0000000..8328b57
--- /dev/null
+++ b/src/com/ibm/richtext/textapps/resources/Sample.java
@@ -0,0 +1,16 @@
+package com.ibm.richtext.textapps.resources;
+
+import java.util.ListResourceBundle;
+
+public final class Sample extends ListResourceBundle {
+    
+    public Object[][] getContents() {
+        
+        return new Object[][] {
+            { "default.sample", this.getClass().getResource("hagan") },
+            { "default.name", "The Garden" },
+            { "japanese.sample", "\u6ce8: {1} \u306e\u30e1\u30bd\u30c3\u30c9 {0} \u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002" },
+            { "japanese.name", "Japanese Message" },
+        };
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textformat/AsyncFormatter.java b/src/com/ibm/richtext/textformat/AsyncFormatter.java
new file mode 100755
index 0000000..6ca3cf9
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/AsyncFormatter.java
@@ -0,0 +1,2053 @@
+/*
+ * @(#)$RCSfile: AsyncFormatter.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+// Revision: 70 1.38 richtext/AsyncFormatter.java, richtext, richtext
+
+package com.ibm.richtext.textformat;
+
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.Point;
+import java.awt.Color;
+
+import java.text.BreakIterator;
+import java.text.CharacterIterator;
+
+import java.util.Hashtable;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.textlayout.Graphics2DConversion;
+
+///*JDK12IMPORTS
+import java.awt.Graphics2D;
+import java.awt.font.LineBreakMeasurer;
+import java.awt.font.FontRenderContext;
+//JDK12IMPORTS*/
+
+/*JDK11IMPORTS
+import com.ibm.textlayout.Graphics2D;
+import com.ibm.textlayout.LineBreakMeasurer;
+import com.ibm.textlayout.FontRenderContext;
+JDK11IMPORTS*/
+
+/*
+    Change history:
+
+    7/25/96 -
+
+    8/15/96
+        Fixed bug in textOffsetToPoint (fPixHeight wasn't added to negative heights). {jbr}
+
+    8/19/96
+        Removed references to JustificationStyle constants, and moved them into MFormatter {sfb}
+
+    8/23/96
+        Modified findLineAt and getLineContaining - added optimization in search loop.  Also,
+            they were failing when fLTPosEnd+1 == fLTNegStart.  Fixed.
+
+    8/26/96
+        Moved FormatDaemon stuff into this class.
+
+    9/11/96
+        Shortened line returned from textOffsetToPoint by 1 pixel
+
+    9/23/96
+        textOffsetToPoint line length restored (see above).  drawText() now draws only lines
+        which fall in rectangle param.
+
+    9/26/96
+        whitespace at end of line is used for caret positioning
+
+    10/4/96
+        Added static TextBox method.
+
+    10/8/96
+        Line 1300 - less than changed to less than or equal in textOffsetToPoint.  Watch for
+            hangs in formatText.
+
+    10/9/96
+        Changed sync. model.  fFormatInBackground is used to start/stop bg formatting
+
+    10/17/96
+        Added new flags:  fLineInc, fFillInc for bidi support.  updateFormat, pointToTextOffset, getBoundingRect,
+        and findNewInsertionOffset should now function correctly for non-Roman documents.  Nothing else has been
+        modified to support intl text.
+
+    10/21/96
+        Pushed paragraph formatting and caret positioning into LineLayout.  In process of pushing
+        highlighting into LineLayout.
+
+    10/24/96
+        Now getting paragraph styles from paragraph buffer.
+
+    7/7/97
+        Up-arrow doesn't move to beginning of text if you're on the first line.
+
+    7/1/98
+        No longer intersecting damaged rect with view rect in updateFormat.
+*/
+
+/**
+* This class implements MFormatter.  It maintains a table of
+* <tt>LayoutInfo</tt> instances which contain layout information
+* for each line in the text.  This class formats lines on demand,
+* and creates a low-priority thread to format text in the background.
+* Note that, at times, some text may not have been formatted, especially
+* if the text is large.
+* <p>
+* The line table is an array of <tt>LayoutInfo</tt> objects, which expands as needed to hold
+* all computed lines in the text.  The line table consists of three
+* regions:  a "positive" region, a "gap," and a "negative" region.
+* In the positive region, character and graphics offsets are positive
+* integers, computed from the beginning of the text / display.  In the
+* gap, line table entries are null.  New lines may be inserted into the gap.
+* In the negative region, character and graphics offsets are negative;
+* their absolute values indicate distances from the end of the text / display.
+* The <tt>fLTPosEnd</tt> member gives the index in the line table of the
+* last positive entry.  The <tt>fLTNegStart</tt> gives the index of first
+* negative entry.  If there are no negative entries, <tt>fLTNegStart</tt> is
+* equal to <tt>fLTSize</tt>, the size of the line table.
+* <p>
+* Changes to the line table occur only in the <tt>formatText()</tt> method.
+* This method calls <tt>LineLayout.layout()</tt> for each line to format.
+*
+* @author John Raley
+*
+* @see MFormatter
+* @see LineLayout
+* @see LayoutContext
+* @see LayoutInfo
+*/
+
+final class AsyncFormatter extends MFormatter implements Runnable
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+    * Text to format.
+    */
+    private MConstText fText;
+
+    /**
+    * Default values.
+    */
+    private AttributeMap fDefaultValues;
+    
+    /**
+    * Font resolver.
+    */
+    private FontResolver fFontResolver;
+    
+    /**
+    * Default character metric - used to set height of empty paragraphs
+    */
+    private DefaultCharacterMetric fDefaultCharMetric;
+    
+    /**
+    * Length to which lines are formatted.
+    */
+    private int fLineDim;
+
+    /**
+    * Table of formatted lines.
+    */
+    private LayoutInfo fLineTable[];
+
+    /**
+    * Size of line table.
+    */
+    private int fLTSize = 10; // initial size must be > 0
+
+    /**
+    * Index of last positive entry in line table.
+    */
+    private int fLTPosEnd;
+
+    /**
+    * Index of first negative entry in line table.
+    */
+    private int fLTNegStart;
+
+    /**
+    * Length of text on which negative line offsets are based.
+    * @see #formatText
+    */
+    private int fLTCurTextLen;
+
+    /**
+    * Length of formatted text in fill direction, in pixels.
+    */
+    private int fPixHeight;
+
+    /**
+    * Length of formatted text including pseudoline.
+    */
+    private int fFullPixHeight;
+
+    private int fMinX;
+    private int fMaxX;
+
+    /**
+    * <tt>true</tt> if lines should be formatted to fit line dimension.
+    */
+    private boolean fWrap;
+
+    /**
+    * <tt>true</tt> if characters run horizontally.
+    */
+    private boolean fHLine = true;
+
+    /**
+     * <tt>true</tt> if characters run from from low to high coordinates on line.
+     */
+    private boolean fLineInc = true;
+
+    /**
+     * <tt>true</tt> if lines run from low to high coordinates within page.
+     */
+    private boolean fFillInc = true;
+
+    /**
+    * Value returned from <tt>findLineAt()</tt>
+    * if pixel height precedes topmost line.
+    */
+    private static final int kBeforeFirstLine = -2;
+
+    /**
+    * Value returned from <tt>findLineAt()</tt> and <tt>getLineContaining()</tt>
+    * if offset / pixel height is after all existing lines.
+    */
+    private static final int kAfterLastLine = -1;
+
+    /**
+    * Thread which invokes formatter in the background.
+    */
+    private Thread fDaemon;
+
+    /**
+    * FontRenderContext to measure with.  Currently not settable after
+    * construction.
+    */
+    private FontRenderContext fFontRenderContext;
+
+    /**
+    * Controls whether background formatting can run.
+    */
+    private boolean fBgFormatAllowed = false;
+    
+    /**
+    * Cached line break object.
+    */
+    private BreakIterator fLineBreak = null;
+    
+    /**
+    * Cached LineBreakMeasurer.
+    */
+    private LineBreakMeasurer fCachedMeasurer = null;
+    private int fCachedMeasurerStart;
+    private int fCachedMeasurerLimit;
+    
+    // Some JDK's (Sun's 1.2.2) throw exceptions from 
+    // LineBreakMeasurer.insertChar and deleteChar.  This class
+    // detects this condition and doesn't use these two methods
+    // if they throw exceptions.
+    private static boolean fgCacheMeasurers = true;
+    
+    /**
+    * Current text time stamp.  Used to maintain modification invariant.
+    */
+    private int fCurTimeStamp;
+    
+    /**
+    * Cache of ParagraphRenderers.
+    */
+    private Hashtable fRendererCache = new Hashtable();
+    
+    /**
+    * Draw text inside a rectangle. Does not cache any formatting information.
+    * This is convenient for small amounts of text; comparable to TETextBox on the Mac.
+    * <p>
+    * @param text the text to draw
+    * @param g Graphics on which to draw
+    * @param drawRect rectangle in which text will be drawn
+    * @param fillInc if true, lines run from low to high coordinates in page.
+    * @param hLine if true, characters run horizontally within a line.
+    */
+
+    private static boolean isParagraphSeparator(char ch) {
+
+        return ch == '\n' || ch == '\u2029';
+    }
+
+    /**
+    * Create an <tt>AsyncFormatter</tt>.
+    * @param text the text to format
+    * @param lineBound length to which lines are foramtted
+    * @param wrap <tt>true</tt> if text should be "line wrapped" (formatted to fit destination area)
+    */
+    AsyncFormatter(MConstText text, 
+                   AttributeMap defaultValues,
+                   int lineBound,
+                   boolean wrap,
+                   Graphics g)
+    {
+        fText = text;
+        fDefaultValues = defaultValues;
+        fFontResolver = new FontResolver(fDefaultValues);
+        
+        fLineDim = lineBound;
+        fWrap = wrap;
+        Graphics2D g2d = Graphics2DConversion.getGraphics2D(g);
+        fFontRenderContext = g2d.getFontRenderContext();
+        
+        fDefaultCharMetric = new DefaultCharacterMetric(fFontResolver, 
+                                                        fFontRenderContext);
+        fLTCurTextLen = text.length();
+        removeAllLines();
+
+        fDaemon = new Thread(this);
+        fDaemon.start();
+    }
+    
+    public AttributeMap getDefaultValues() {
+    
+        return fDefaultValues;
+    }
+    
+    public void checkTimeStamp() {
+        String admonition = "Probably, you modified " +
+                            "the text before calling stopBackgroundFormatting().";
+                            
+        if (fText.getTimeStamp() != fCurTimeStamp) {
+            throw new Error("Time stamp is out of sync.  " + admonition);
+        }
+        if (fText.length() != fLTCurTextLen) {
+            throw new Error("Length changed unexpectedly.  " +
+                            "fText.length()="+fText.length()+";  "+
+                            "fLTCurTextLen="+fLTCurTextLen+";  "+
+                            "formatter="+this+";  "+
+                            "text="+fText);
+        }
+    }
+
+    /**
+    * Specify whether to wrap lines using the line dimension.
+    * @param wrap if <tt>true</tt> lines will be wrapped; otherwise new lines will only be
+    * started when a newline is encountered.
+    */
+    public synchronized void setWrap(boolean wrap)
+    {
+        if (wrap != fWrap) {
+            fWrap = wrap;
+            removeAllLines();
+        }
+    }
+
+    /**
+    * Return true if lines are wrapped using the line dimension.
+    * @see #setWrap
+    */
+    public synchronized boolean wrap()
+    {
+        return fWrap;
+    }
+
+    /**
+    * Specify the lineBound in pixels.  If line wrapping is on, lines
+    * will be wrapped to this value.
+    * <p>
+    *
+    * @param lineBound the distance, in pixels, used to wrap lines.
+    */
+    public synchronized void setLineBound(int lineBound)
+    {
+        if (fLineDim != lineBound) {
+            fLineDim = lineBound;                
+            if (fWrap) {
+                removeAllLines();
+            }
+        }
+    }
+
+    /**
+    * Return the number of pixels along the line dimension.
+    */
+    public synchronized int lineBound()
+    {
+        return fLineDim;
+    }
+
+    /**
+    * Return <tt>true</tt> if characters run from low to high coordinates on line.
+    */
+    private boolean lineInc()
+    {
+        return fLineInc;
+    }
+
+    /**
+    * Return <tt>true</tt> if lines run from low to high coordinates on page.
+    */
+    private boolean fillInc()
+    {
+        return fFillInc;
+    }
+
+    /**
+    * Remove all lines in the line table.  Used after an operation that
+    * invalidates all existing lines, such as changing line wrapping or the
+    * line dim.
+    */
+    private synchronized void removeAllLines()
+    {
+        fCurTimeStamp = fText.getTimeStamp();
+        stopBackgroundFormatting();
+
+        fMinX = 0;
+        fMaxX = fLineDim;
+        
+        fLineTable = new LayoutInfo[fLTSize]; // fLTSize must be > 0
+        fLTNegStart = fLTSize;
+        fLTPosEnd = 0;
+
+        fLineTable[0] = pseudoLineInfo(null, 0);
+
+        fPixHeight = fLineTable[0].getHeight(); // ??? or should it be zero?
+        fFullPixHeight = fPixHeight;
+
+        // format at least one line:
+        formatToHeight(fPixHeight + 1);
+
+        enableBGFormat();
+    }
+
+    /**
+     * Fill the layout info with information appropriate to the pseudoline.
+     */
+    private synchronized LayoutInfo pseudoLineInfo(LayoutInfo info, int offset)
+    {
+        AttributeMap st = fText.paragraphStyleAt(fLTCurTextLen); // ??? if text is empty or this is the end of the text, what happens?
+        ParagraphRenderer renderer = getRendererFor(st);
+        info = renderer.layout(fText,
+                               info,
+                               (LineBreakMeasurer)null,
+                               fFontRenderContext,
+                               offset,
+                               offset,
+                               fLineDim,
+                               fLineDim);
+
+        return info;
+    }
+
+    /**
+    * Return the index of the last valid line in the line table.
+    */
+    private int lastLine()
+    {
+        return (fLTNegStart == fLTSize) ? fLTPosEnd : fLTSize - 1;
+    }
+
+    /**
+    * Shift line table such that <tt>lastPos</tt> is the last positive
+    * entry in the table. <b>NOTE: <tt>lastPos</tt> must be a valid line!</b>
+    * <p>
+    * @param lastPos the index of the line which will become the last positive
+    * entry in the line table
+    */
+    private void shiftTableTo(int lastPos)
+    {
+        LayoutInfo li;
+
+        while (lastPos < fLTPosEnd)    { // shift +'s to -'s
+            li = fLineTable[fLTPosEnd];
+            fLineTable[fLTPosEnd--] = null;
+
+            li.makeRelativeToEnd(fLTCurTextLen, fPixHeight);
+
+            fLineTable[--fLTNegStart] = li;
+        }
+
+        while (lastPos >= fLTNegStart) { // shift -'s to +'s
+            li = fLineTable[fLTNegStart];
+            fLineTable[fLTNegStart++] =    null;
+
+            li.makeRelativeToBeginning(fLTCurTextLen, fPixHeight);
+
+            fLineTable[++fLTPosEnd]    = li;
+        }
+    }
+
+    /**
+    * Increase the size of the line table.
+    */
+    private void expandLineTable()
+    {
+        // This just doubles the size of the line table.
+
+        LayoutInfo newLineTable[] = new LayoutInfo[fLineTable.length * 2];
+        int newNegStart = newLineTable.length - (fLineTable.length - fLTNegStart);
+
+        System.arraycopy(fLineTable, 0, newLineTable, 0, fLTPosEnd + 1);
+        System.arraycopy(fLineTable, fLTNegStart, newLineTable, newNegStart, fLTSize - fLTNegStart);
+
+        fLTNegStart = newNegStart;
+        fLTSize = newLineTable.length;
+        fLineTable = newLineTable;
+    }
+
+    /**
+    * Return the index of the line containing the pixel position <tt>fillCoord</tt>.
+    * If fillCoord exceeds the bottom of the text, return kAfterLastLine.
+    * If fillCoord is less than the top of the text, return kBeforeFirstLine.
+    * <p>
+    * @param fillCoord "height" of line to locate.
+    */
+    private int findLineAt(int fillCoord)
+    {
+        int low, high, mid;
+        int lowStart, highStart, midStart;
+
+        if (fillCoord >= fPixHeight)
+            return kAfterLastLine;
+        else if (fillCoord < 0)
+            return kBeforeFirstLine;
+
+        if ((fLTNegStart < fLTSize) && (fillCoord >= fLineTable[fLTNegStart].getGraphicStart(fPixHeight))) {
+            fillCoord -= fPixHeight;
+
+            low = fLTNegStart;
+            high = fLTSize;
+            highStart = 0;
+        }
+        else {
+            low = 0;
+            high = fLTPosEnd + 1;
+            highStart = fLineTable[fLTPosEnd].getGraphicStart(0) + fLineTable[fLTPosEnd].getHeight();
+        }
+        lowStart = fLineTable[low].getGraphicStart(0);
+
+        do {
+            if (lowStart == highStart)
+                return low;
+
+            mid = low + (fillCoord - lowStart) / (highStart - lowStart) * (high - low);
+            midStart = fLineTable[mid].getGraphicStart(0);
+
+            if (midStart > fillCoord) {
+                high = mid;
+                highStart = fLineTable[high].getGraphicStart(0);
+            }
+            else if (midStart + fLineTable[mid].getHeight() <= fillCoord) {
+                low = mid + 1;
+                lowStart = fLineTable[low].getGraphicStart(0);
+            }
+            else
+                return mid;
+
+        } while (low < high);
+
+        return 0;
+    }
+
+    /**
+     * Return the index of the first character in the line.
+     * @param line the internal index of the line (direct index into linetable).
+     */
+    private int lineCharStartInternal(int line)
+    {
+        return fLineTable[line].getCharStart(fLTCurTextLen);
+    }
+
+    /**
+     * Return the index of the character following the last character in the line.
+     * @param line the internal index of the line (direct index into linetable).
+     */
+    private int lineCharLimitInternal(int line)
+    {
+        return lineCharStartInternal(line) + fLineTable[line].getCharLength();
+    }
+
+    /**
+     * Return the graphic start of the line, unadjusted for fill direction.
+     * @param line the internal index of the line (direct index into linetable).
+     */
+    private int lineGraphicStartInternal(int line)
+    {
+        return fLineTable[line].getGraphicStart(fPixHeight);
+    }
+
+    /**
+     * Return the graphic limit of the line, unadjusted for fill direction.
+     * @param line the internal index of the line (direct index into linetable).
+     */
+    private int lineGraphicLimitInternal(int line)
+    {
+        return lineGraphicStartInternal(line) + fLineTable[line].getHeight();
+    }
+
+    /**
+    * Return the offset of the first character which has not been formatted.
+    * If all text has been formatted, return the current text length.
+    */
+    private int lastLineCharStop()
+    {
+        return lineCharLimitInternal(lastLine());
+    }
+
+    /**
+     * Return a 'valid' line containing offset.  This differs from getLineContaining in
+     * this maps kAfterLastLine to lastLine(), so that the result is always a valid
+     * linetable index.
+     */
+    private int getValidLineContaining(TextOffset offset) {
+
+        return getValidLineContaining(offset.fOffset, offset.fPlacement);
+    }
+
+    /**
+     * Return a 'valid' line containing offset.  This differs from getLineContaining in
+     * this maps kAfterLastLine to lastLine(), so that the result is always a valid
+     * linetable index.
+     */
+    private int getValidLineContaining(int insOffset, boolean placement)
+    {
+        int line = getLineContaining(insOffset, placement);
+        if (line == kAfterLastLine)
+            line = lastLine();
+        else if (line == kBeforeFirstLine)
+            throw new IllegalArgumentException("Debug: getLineContaining returned kBeforeFirstLine");
+
+        return line;
+    }
+
+    /**
+    * Return index of line containing <tt>offset</tt>.
+    * ??? If offset is after last formatted line, returns kAfterLastLine.  Is that good?
+    * <p>
+    * @param offset the offset whose line should be located
+    * @returns line containing <tt>offset</tt>
+    */
+    private int getLineContaining(TextOffset offset) {
+
+        return getLineContaining(offset.fOffset, offset.fPlacement);
+    }
+
+    private int getLineContaining(int insOffset, boolean placement)
+    {
+        int pos = insOffset;
+        if (placement == TextOffset.BEFORE_OFFSET && pos > 0)
+            --pos;
+
+        if (pos < 0) {
+            throw new IllegalArgumentException("Debug: getLineContaining offset < 0: " + pos);
+        }
+
+        if (pos >= lastLineCharStop()) {
+            return emptyParagraphAtEndOfText()? kAfterLastLine : lastLine();
+        }
+
+        int low, high, mid;
+        int lowStart, highStart, midStart;
+
+        if ((fLTNegStart < fLTSize) && (pos >= fLineTable[fLTNegStart].getCharStart(fLTCurTextLen))) {
+            pos -= fLTCurTextLen;
+
+            low = fLTNegStart;
+            high = fLTSize;
+            highStart = 0;
+        }
+        else {
+            low = 0;
+            high = fLTPosEnd + 1;
+            highStart = fLineTable[fLTPosEnd].getCharStart(0) + fLineTable[fLTPosEnd].getCharLength();
+        }
+        lowStart = fLineTable[low].getCharStart(0);
+
+        do {
+            if (highStart == lowStart) {
+                return low;
+            }
+
+            mid = low + (pos - lowStart) / (highStart - lowStart) * (high - low);
+            midStart = fLineTable[mid].getCharStart(0);
+
+            if (midStart > pos) {
+                high = mid;
+                highStart = fLineTable[high].getCharStart(0);
+            }
+            else if (midStart + fLineTable[mid].getCharLength() <= pos) {
+                low = mid + 1;
+                lowStart = fLineTable[low].getCharStart(0);
+            }
+            else {
+                return mid;
+            }
+
+        } while (low < high);
+
+        return 0;
+    }
+
+    /**
+    * Display text in drawArea. Does not reformat text.
+    * <p>
+    * @param g the Graphics object in which to draw
+    * @param drawArea the rectangle, in g's coordinate system, in which to draw
+    * @param origin the top-left corner of the text, in g's coordinate system
+    */
+    public synchronized void draw(Graphics g, Rectangle drawArea, Point origin)
+    {
+        draw(g, drawArea, origin, null, null, null);
+    }
+
+    public synchronized void draw(Graphics g, Rectangle drawArea, Point origin,
+                TextOffset selStart, TextOffset selStop, Color highlight) {
+
+        checkTimeStamp();
+        Graphics2D g2d = Graphics2DConversion.getGraphics2D(g);
+
+        // Get starting and ending fill 'heights.'
+
+        int startFill;
+        int endFill;
+
+        if (fFillInc)
+            startFill = drawArea.y - origin.y;
+        else
+            startFill = origin.y - (drawArea.y + drawArea.height);
+
+        endFill = startFill + drawArea.height;
+
+        // We're drawing one more line than necessary when we update because of a
+        // selection change.  But we're drawing the right amount of lines when we
+        // refresh the whole display.  This affects rendering speed significantly,
+        // and creating a new paragraph renderer for each line doesn't help either.
+        // For now, I'm going to subtract one from the fill height, on the theory
+        // that we're picking up the extra line because of a one-pixel slop.
+        // This seems to work, although perhaps if one pixel of a line at the
+        // bottom should draw, it won't.
+
+        --endFill;
+
+        // Format to ending fill height, so line table is valid for all lines we need to draw.
+
+        formatToHeight(endFill);
+
+        // Get starting and ending lines for fill height.  If the start of the fill is after the last line,
+        // or the end of the fill is before the first line, return.
+
+        int curLine = findLineAt(startFill);
+        if (curLine == kAfterLastLine)
+            return;
+        else if (curLine == kBeforeFirstLine)
+            curLine = 0;
+
+        int lastLine = findLineAt(endFill);
+        if (lastLine == kBeforeFirstLine)
+            return;
+        else if (lastLine == kAfterLastLine)
+            lastLine = lastLine();
+
+        // Get the base coordinates (lineX, lineY) for the starting line.
+
+        int lineX, lineY;
+
+        int gStart = lineGraphicStartInternal(curLine);
+
+        if (fHLine) {
+            if (fLineInc)
+                lineX = origin.x;
+            else
+                lineX = origin.x - fLineDim;
+            if (fFillInc)
+                lineY = origin.y + gStart;
+            else
+                lineY = origin.y - (gStart + fLineTable[curLine].getHeight());
+        }
+        else {
+            if (fLineInc)
+                lineY = origin.y;
+            else
+                lineY = origin.y - fLineDim;
+            if (fFillInc)
+                lineX = origin.x + gStart;
+            else
+                lineX = origin.x - (gStart + fLineTable[curLine].getHeight());
+        }
+
+        // Iterate through lines, drawing each one and incrementing the base coordinate by the line height.
+
+
+        for (; curLine <= lastLine; curLine++) {
+            // Adjust curLine around gap in line table.
+            if ((curLine > fLTPosEnd) && (curLine < fLTNegStart))
+                curLine = fLTNegStart;
+
+            fLineTable[curLine].renderWithHighlight(fLTCurTextLen, g2d, fLineDim, lineX, lineY, selStart, selStop, highlight);
+
+            // Increment line base for next iteration.
+            int lineInc = fLineTable[curLine].getHeight();
+            if (fFillInc) {
+                if (fHLine)
+                    lineY += lineInc;
+                else
+                    lineX += lineInc;
+            } else {
+                if (fHLine)
+                    lineY -= lineInc;
+                else
+                    lineX -= lineInc;
+            }
+        }
+    }
+
+    /**
+    * Format text to given height.
+    * @param height the height to which text will be formatted.
+    */
+    public synchronized void formatToHeight(int reqHeight)
+    {
+        checkTimeStamp();
+        if (reqHeight <= fPixHeight) // already formatted to this height
+            return;
+
+        if (fText.length() == lastLineCharStop()) // already formatted all the text
+            return;
+
+        // +++ should disable update thread here
+
+        if (fLTNegStart < fLTSize)
+            shiftTableTo(fLTSize - 1);
+
+        formatText(0, 0, reqHeight, false);
+    }
+
+    /**
+     * Format text to given offset.
+     * @param offset the offset to which text will be formatted.
+     */
+     private void formatToOffset(TextOffset offset)
+     {
+        formatToOffset(offset.fOffset, offset.fPlacement);
+     }
+     
+     private synchronized void formatToOffset(int offset, boolean placement) {
+        
+        checkTimeStamp();
+        int llcs = lastLineCharStop();
+        if (llcs < fLTCurTextLen) {
+            int limit = offset;
+            if (placement == TextOffset.AFTER_OFFSET) // format to past character offset is associated with
+                limit++;
+            if (limit >= llcs) { // ??? would '>' be ok instead or '>='?
+                if (limit > fLTCurTextLen)
+                    limit = fLTCurTextLen;
+
+                shiftTableTo(lastLine());
+                formatText(llcs, limit - llcs, Integer.MAX_VALUE, true);
+            }
+        }
+     }
+
+/**
+* Reformat text after a change.
+* After the formatter's text changes, call this method to reformat.  Does
+* not redraw.
+* @param afStart the offset into the text where modification began;  ie, the
+* first character in the text which is "different" in some way.  Does not
+* have to be nonnegative.
+* @param afLength the number of new or changed characters in the text.  Should never
+* be less than 0.
+* @param viewRect the Rectangle in which the text will be displayed.  This is needed for
+* returning the "damaged" area - the area of the screen in which the text must be redrawn.
+* @param origin the top-left corner of the text, in the display's coordinate system
+* @returns a <tt>Rectangle</tt> which specifies the area in which text must be
+* redrawn to reflect the change to the text.
+*/
+    public Rectangle updateFormat(final int afStart,
+                                               final int afLength,
+                                               Rectangle viewRect,
+                                               Point origin)
+    {
+        if (afStart < 0) {
+            throw new IllegalArgumentException("Debug: updateFormat afStart < 0: " + afStart);
+        }
+        if (fBgFormatAllowed) {
+            throw new IllegalArgumentException("Background formatting should have been disabled");
+        }
+        fCurTimeStamp = fText.getTimeStamp();
+        
+        int curLine = getValidLineContaining(afStart, TextOffset.AFTER_OFFSET);
+        int lineStartPos = lineCharStartInternal(curLine);
+
+        // optimize by finding out whether change occurred
+        // after first word break on curline
+
+        int firstPossibleBreak;
+
+        if (lineStartPos < fText.length()) {
+
+            if (fLineBreak == null) {
+                fLineBreak = BreakIterator.getLineInstance();
+            }
+            CharacterIterator charIter = fText.createCharacterIterator();
+            charIter.setIndex(lineStartPos);
+            fLineBreak.setText(charIter);
+
+            firstPossibleBreak = fLineBreak.following(lineStartPos);
+        }
+        else
+            firstPossibleBreak = afStart;
+
+        if ((curLine > 0) && (firstPossibleBreak == BreakIterator.DONE || afStart <= firstPossibleBreak)) {
+            curLine--;
+            if (curLine < fLTNegStart && curLine > fLTPosEnd)
+                curLine = fLTPosEnd;
+        }
+
+        shiftTableTo(curLine);
+
+        int pixHeight; // after the formatText call, at least pixHeight text must be formatted
+
+        if (fHLine) {
+            if (fFillInc)
+                pixHeight = viewRect.y + viewRect.height - origin.y;
+            else
+                pixHeight = origin.y - viewRect.y;
+        }
+        else {
+            if (fFillInc)
+                pixHeight = viewRect.x + viewRect.width - origin.x;
+            else
+                pixHeight = origin.x - viewRect.x;
+        }
+
+        Rectangle r = formatText(afStart, afLength, pixHeight, false);
+
+        //dumpLineTable();
+
+        if ((fPixHeight < pixHeight) && (fLTNegStart < fLTSize) && (fLTCurTextLen > lastLineCharStop())) {
+            shiftTableTo(lastLine());
+            Rectangle s = formatText(0, 0, pixHeight, false);
+            r = r.union(s);
+        }
+
+        intlRect(origin, r);
+        //System.out.println("Damaged rect: "+r+"; origin: "+origin);
+
+        // don't need to synchronized here, b/c the daemon shouldn't be running when
+        // this is executing
+
+        if (fText.length() < lastLineCharStop())
+            enableBGFormat();
+        else
+            stopBackgroundFormatting();
+
+        //dumpLineTable();
+
+        return r;
+    }
+    
+    private LineBreakMeasurer makeMeasurer(int paragraphStart, int paragraphLimit) {
+
+        MTextIterator iter = new MTextIterator(fText,
+                                               fFontResolver,
+                                               paragraphStart,
+                                               paragraphLimit);
+        LineBreakMeasurer measurer = new LineBreakMeasurer(iter, fFontRenderContext);
+        if (fgCacheMeasurers) {
+            fCachedMeasurerStart = paragraphStart;
+            fCachedMeasurerLimit = paragraphLimit;
+            fCachedMeasurer = measurer;
+        }
+        return measurer;
+    }        
+
+/**
+* Compute text format.  This method calculates text format;  it can be
+* called for various purposes:  to reformat text after an edit, to
+* format text to a particular height, or to format text up to a
+* particular offset.
+* <p>
+* The calling method must ensure that <tt>fLineTable</tt> has been shifted
+* such that the last positive line is where the formatting operation will
+* begin.
+* <p>
+* Called by: <tt>formatToHeight()</tt>, <tt>updateFormat()</tt>,
+* <tt>textOffsetToPoint()</tt>, <tt>getBoundingRect()</tt>
+* @param afStart the offset of the first character in the text which has changed
+* @param afLength the number of new or changed characters in the text
+* @param reqHeight the pixel height to which text must be formatted.  Ignored
+* if <tt>formatAllNewText</tt> is <tt>true</tt>, or if old lines remain in the
+* line table after all changed text has been formatted.
+* @param seekOffsetAtEnd if <tt>true</tt>, formatting continues until the line
+* containing afStart+afLength has been formatted.  If false, formatting may stop
+* when reqHeight has been reached.  This parameter should be <tt>true</tt> <b>only</b>
+* if the object of the formatting operation is to extend formatting to a particular
+* offset within the text;  it should be <tt>false</tt> everywhere else.
+* @returns a rectangle, relative to the top-left of the text, which encloses the
+* screen area whose appearance has changed due to the reformatting.
+*/
+
+    private Rectangle formatText(int afStart, final int afLength, int reqHeight, boolean seekOffsetAtEnd)
+    {
+    /* assumes line table shifted such that first line to format is
+    last positive line */
+
+        if (afLength < 0) {
+            throw new IllegalArgumentException("afLength < 0.  afLength=" + afLength);
+        }
+
+        int newTextEnd = afStart + afLength;
+
+        final int newCurTextLen = fText.length();
+
+        int oldPixHeight = fPixHeight;
+        int oldFullPixHeight = fFullPixHeight;
+        fPixHeight -= fLineTable[fLTPosEnd].getHeight();
+
+        int curGraphicStart = fLineTable[fLTPosEnd].getGraphicStart(fPixHeight);
+        int curLineStart = fLineTable[fLTPosEnd].getCharStart(newCurTextLen);
+        
+        int curParagraphStart = fText.paragraphStart(curLineStart);
+        int curParagraphLimit = Integer.MIN_VALUE; // dummy value
+
+        int damageStart = curGraphicStart;
+
+        ParagraphRenderer renderer = null;
+        LineBreakMeasurer measurer = null;
+        
+        // try to use cached LineBreakMeasurer if possible
+        if (fCachedMeasurer != null && 
+            curParagraphStart == fCachedMeasurerStart) {
+
+            curParagraphLimit = fText.paragraphLimit(curParagraphStart);
+            
+            try {
+                if (newCurTextLen - fLTCurTextLen == 1 && afLength == 1) {
+                    if (curParagraphLimit == fCachedMeasurerLimit+1) {
+                        MTextIterator iter = new MTextIterator(fText,
+                                                               fFontResolver, 
+                                                               curParagraphStart,
+                                                               curParagraphLimit);
+                        fCachedMeasurer.insertChar(iter, afStart);
+                        fCachedMeasurerLimit += 1;
+                        measurer = fCachedMeasurer;
+                    }
+                }
+                else if (fLTCurTextLen - newCurTextLen == 1 && afLength == 0) {
+                    if (fCachedMeasurerLimit > fCachedMeasurerStart + 1 &&
+                                curParagraphLimit == fCachedMeasurerLimit-1) {
+                        MTextIterator iter = new MTextIterator(fText,
+                                                               fFontResolver,
+                                                               curParagraphStart,
+                                                               curParagraphLimit);
+                        fCachedMeasurer.deleteChar(iter, afStart);
+                        fCachedMeasurerLimit -= 1;
+                        measurer = fCachedMeasurer;
+                    }
+                }
+            }
+            catch(ArrayIndexOutOfBoundsException e) {
+                fCachedMeasurer = null;
+                fgCacheMeasurers = false;
+            }
+            
+            if (measurer != null) {
+                // need to set up renderer since the paragraph update in the
+                // formatting loop will not happen
+                AttributeMap style = fText.paragraphStyleAt(curParagraphStart);
+                renderer = getRendererFor(style);
+                measurer.setPosition(curLineStart);
+            }
+        }
+        
+        if (measurer == null) {
+            // trigger paragraph update at start of formatting loop
+            curParagraphLimit = curParagraphStart;
+            curParagraphStart = 0;
+        }
+
+        fLTCurTextLen = newCurTextLen;
+        
+        while (true) {
+            // System.out.println("line: " + fLTPosEnd + ", cls: " + curLineStart);
+
+
+            if (curLineStart >= curParagraphLimit) {
+                curParagraphStart = curParagraphLimit;
+                curParagraphLimit = fText.paragraphLimit(curParagraphStart);
+
+                AttributeMap style = fText.paragraphStyleAt(curParagraphStart);
+                renderer = getRendererFor(style);
+
+                if (curParagraphStart < curParagraphLimit) {
+                    measurer = makeMeasurer(curParagraphStart, curParagraphLimit);
+                    measurer.setPosition(curLineStart);
+                }
+                else {
+                    measurer = null;
+                }
+            }
+
+            {
+                boolean haveOldDirection = fLineTable[fLTPosEnd] != null;
+                boolean oldDirection = false; //  dummy value for compiler
+                if (haveOldDirection) {
+                    oldDirection = fLineTable[fLTPosEnd].isLeftToRight();
+                }
+
+                fLineTable[fLTPosEnd] = renderer.layout(fText,
+                                                        fLineTable[fLTPosEnd],
+                                                        measurer,
+                                                        fFontRenderContext,
+                                                        curParagraphStart,
+                                                        curParagraphLimit,
+                                                        fWrap ? fLineDim : Integer.MAX_VALUE,
+                                                        fLineDim);
+                if (haveOldDirection) {
+                    if (fLineTable[fLTPosEnd].isLeftToRight() != oldDirection) {
+                        newTextEnd = Math.max(newTextEnd, curParagraphLimit);
+                    }
+                }
+            }
+
+            {
+                LayoutInfo theLine = fLineTable[fLTPosEnd];
+
+                theLine.setGraphicStart(curGraphicStart);
+                curGraphicStart += theLine.getHeight();
+
+                fPixHeight += theLine.getHeight();
+                curLineStart += theLine.getCharLength();
+
+                if (!fWrap) {
+                    int lineWidth = theLine.getTotalAdvance() + theLine.getLeadingMargin();
+                    if (theLine.isLeftToRight()) {
+                        if (fMaxX < lineWidth) {
+                            fMaxX = lineWidth;
+                        }
+                    }
+                    else {
+                        if (fLineDim-lineWidth < fMinX) {
+                            fMinX = fLineDim-lineWidth;
+                        }
+                    }
+                }
+            }
+            /*
+                Next, discard obsolete lines.  A line is obsolete if it
+                contains new text or text which has been formatted.
+            */
+
+            while (fLTNegStart < fLTSize) {
+                int linePos = fLineTable[fLTNegStart].getCharStart(newCurTextLen);
+                if (linePos >= curLineStart && linePos >= newTextEnd)
+                    break;
+
+                // System.out.println("delete neg line: " + fLTNegStart);
+                fPixHeight -= fLineTable[fLTNegStart].getHeight();
+                fLineTable[fLTNegStart++] = null;
+            }
+
+            int stopAt;
+            if (fLTNegStart < fLTSize)
+                stopAt = fLineTable[fLTNegStart].getCharStart(newCurTextLen);
+            else
+                stopAt = newCurTextLen;
+
+            /*
+                Now, if exit conditions aren't met, create a new line.
+            */
+
+            if (seekOffsetAtEnd) {
+                if ((curLineStart >= newTextEnd) && (fLTNegStart == fLTSize)) {
+                    // System.out.println("break 1");
+                    break;
+                }
+            }
+            else {
+                if (curLineStart >= stopAt) {
+                    // System.out.println("curLineStart: " + curLineStart + " >= stopAt: " + stopAt);
+                    break;
+                }
+                else if (fLTNegStart==fLTSize && fPixHeight >= reqHeight) {
+                    // System.out.println("break 3");
+                    break;
+                }
+            }
+
+            if (fLTPosEnd + 1 == fLTNegStart)
+                expandLineTable();
+
+            fLineTable[++fLTPosEnd] = null; // will be created by Renderer
+        }
+        //System.out.print("\n");
+
+        if (newCurTextLen == 0) {
+            fLineTable[0] = pseudoLineInfo(fLineTable[0], 0);
+            fPixHeight = fLineTable[0].getHeight();
+        }
+        fFullPixHeight = fPixHeight;
+
+        if (isParaBreakBefore(newCurTextLen)) {
+            fFullPixHeight += lastCharHeight();
+        }
+/*
+        System.out.println("curLineStart: " + curLineStart +
+            ", fLTPosEnd: " + fLTPosEnd +
+            ", fLTNegStart: " + fLTNegStart +
+            ", fLTSize: " + fLTSize);
+
+        System.out.println("oldFullPixHeight: " + oldFullPixHeight + ", newFullPixHeight: " + fFullPixHeight);
+*/
+        int damageLength;
+        if (fFullPixHeight == oldFullPixHeight) {
+            damageLength = fLineTable[fLTPosEnd].getGraphicStart(fPixHeight)
+                            + fLineTable[fLTPosEnd].getHeight() - damageStart;
+        }
+        else {
+            damageLength = Math.max(fFullPixHeight, oldFullPixHeight);
+        }
+
+        return new Rectangle(fMinX, damageStart, fMaxX-fMinX, damageLength);
+    }
+
+    private void dumpLineTable()
+    {
+        int i;
+
+        System.out.println("fLTCurTextLen=" + fLTCurTextLen + " " );
+        for (i=0; i<= fLTPosEnd; i++)
+            System.out.println("Line " + i + " starts at "
+                                + fLineTable[i].getCharStart(fLTCurTextLen)
+                                + " and extends " + fLineTable[i].getCharLength());
+
+        for (i=fLTNegStart; i< fLTSize; i++)
+            System.out.println("Line " + (i-fLTNegStart+fLTPosEnd+1) + " starts at "
+                                + fLineTable[i].getCharStart(fLTCurTextLen)
+                                + " and extends " + fLineTable[i].getCharLength());
+    }
+
+    public synchronized int minX() {
+    
+        return fMinX;
+    }
+    
+    /**
+    * Return the horizontal extent of the text, in pixels.
+    * <p>
+    * This returns an approximation based on the currently formatted text.
+    */
+    public synchronized int maxX()
+    {
+        checkTimeStamp();
+
+        return fMaxX;
+    }
+
+    /**
+    * Return the height of the last character in the text.
+    *
+    * This is used for the 'extra height' needed to display a caret at the end of the text when the
+    * text is empty or ends with a newline.
+    */
+    private int lastCharHeight()
+    {
+        int charIndex = lastLineCharStop() - 1;
+        AttributeMap st = fText.characterStyleAt(charIndex);
+        DefaultCharacterMetric.Metric metric = fDefaultCharMetric.getMetricForStyle(st);
+
+        int height = metric.getAscent();
+        height += metric.getDescent();
+        height += metric.getLeading();
+
+        return height;
+    }
+
+    /**
+     * Return true if the character at pos is a paragraph separator.
+     */
+    private boolean isParaBreakBefore(int pos)
+    {
+        return pos > 0 && (fText.at(pos - 1) == '\u2029' || fText.at(pos - 1) == '\n');
+        // we really need to take look at this and determine what this function
+        // should be doing.  What I've got here right now is a temporary implementation.
+    }
+
+    public synchronized int minY() {
+    
+        return 0;
+    }
+    
+    /**
+    * Return the vertical extent of the text, in pixels.
+    * <p>
+    * This returns an approximation based on the currently formatted text.
+    */
+    public synchronized int maxY()
+    {
+        checkTimeStamp();
+
+        int numChars = lastLineCharStop();
+
+        int pixHeight = fPixHeight;
+        if (numChars == fLTCurTextLen && isParaBreakBefore(fLTCurTextLen)) {
+            pixHeight += lastCharHeight();
+        }
+
+        if (numChars != 0)
+            return pixHeight * fText.length() / numChars;
+        else
+            return 0;
+    }
+
+    /**
+    * Return the actual pixel length of the text which has been formatted.
+    */
+    public synchronized int formattedHeight()
+    {
+        checkTimeStamp();
+        return fPixHeight;
+    }
+
+    /**
+     * There are two modes for dealing with carriage returns at the end of a line.  In the 'infinite width'
+     * mode, the last character is considered to have infinite width.  Thus if the point is past the 'real'
+     * end of the line, the offset is the position before that last character, and the offset is associated
+     * with that character (placement after). In the 'actual width' mode, the offset is positioned after
+     * that character, but still associated with it (placement before).
+     */
+
+    private TextOffset lineDimToOffset(TextOffset result, int line, int lineX, int lineY, TextOffset anchor, boolean infiniteMode)
+    {
+    // temporarily adjust line info to remove the negative char starts used in the line table.
+    // then call through to the paragraph renderer to get the offset.  Don't put line end
+    // optimization here, let the renderer do it (perhaps it does fancy stuff with the margins).
+
+        LayoutInfo lineInfo = fLineTable[line];
+
+        result = lineInfo.pixelToOffset(fLTCurTextLen, result, fLineDim, lineX, lineY);
+
+        if (infiniteMode &&
+            (result.fOffset > lineInfo.getCharStart(fLTCurTextLen)) &&
+            isParaBreakBefore(result.fOffset) &&
+            (anchor == null || anchor.fOffset == result.fOffset - 1)) {
+
+            result.setOffset(result.fOffset - 1, TextOffset.AFTER_OFFSET);
+        }
+
+        return result;
+    }
+
+    /**
+    * Given a screen location p, return the offset of the character in the text nearest to p.
+    */
+    public synchronized TextOffset pointToTextOffset(TextOffset result, int px, int py, Point origin, TextOffset anchor, boolean infiniteMode)
+    {
+        checkTimeStamp();
+        if (result == null)
+            result = new TextOffset();
+
+        int fillD;
+
+        if (fHLine)
+            fillD = py - origin.y;
+        else
+            fillD = px - origin.x;
+
+        if (!fFillInc)
+            fillD = -fillD;
+
+        if (fillD < 0) {
+            result.setOffset(0, TextOffset.AFTER_OFFSET);
+            return result;
+        }
+
+        formatToHeight(fillD);
+
+        if (fillD >= fPixHeight) {
+            boolean bias = fLTCurTextLen==0? TextOffset.AFTER_OFFSET : TextOffset.BEFORE_OFFSET;
+            result.setOffset(fLTCurTextLen, bias);
+            return result;
+        }
+
+        int line = findLineAt(fillD); // always a valid line
+        int gStart = lineGraphicStartInternal(line);
+
+        int lineX, lineY;  // upper-left corner of line
+        if (fHLine) {
+            lineX = origin.x;
+            lineY = fFillInc? origin.y + gStart : origin.y - (gStart + fLineTable[line].getHeight());
+        }
+        else {
+            lineY = origin.y;
+            lineX = fFillInc? origin.x + gStart : origin.x - (gStart + fLineTable[line].getHeight());
+        }
+
+        return lineDimToOffset(result, line, px - lineX, py - lineY, anchor, infiniteMode);
+    }
+
+    private boolean emptyParagraphAtEndOfText() {
+
+        return fLTCurTextLen > 0 &&
+                isParagraphSeparator(fText.at(fLTCurTextLen-1));
+    }
+
+    /**
+     * Return true if the offset designates a point on the pseudoline following a paragraph
+     * separator at the end of text.  This is true if the offset is the end of text
+     * and the last character in the text is a paragraph separator.
+     */
+    private boolean afterLastParagraph(TextOffset offset)
+    {
+        return offset.fOffset == fLTCurTextLen &&
+            emptyParagraphAtEndOfText();
+    }
+
+    /**
+    * Given an offset, return the Rectangle bounding the caret at the offset.
+    * @param offset an offset into the text
+    * @param origin the top-left corner of the text, in the display's coordinate system
+    * @return a Rectangle bounding the caret.
+    */
+    public synchronized Rectangle getCaretRect(TextOffset offset, Point origin) {
+
+        Rectangle r = new Rectangle();
+        getCaretRect(r, offset, origin);
+        return r;
+    }
+    
+    private void getCaretRect(Rectangle r, TextOffset offset, Point origin) {
+        
+        checkTimeStamp();
+        formatToOffset(offset);
+
+        if (afterLastParagraph(offset)) {
+            int pseudoLineHeight = lastCharHeight();
+            if (fHLine) {
+                int lineY = fFillInc ? origin.y + fPixHeight : origin.y - fPixHeight - pseudoLineHeight;
+                r.setBounds(origin.x, lineY, 0, pseudoLineHeight);
+            }
+            else {
+                int lineX = fFillInc? origin.x + fPixHeight : origin.x - fPixHeight - pseudoLineHeight;
+                r.setBounds(lineX, origin.y, pseudoLineHeight, 0);
+            }
+            return;
+        }
+
+        int line = getValidLineContaining(offset);
+
+        int gStart = lineGraphicStartInternal(line);
+
+        int lineX, lineY;
+
+        if (fHLine) {
+            lineX = origin.x;
+            if (fFillInc)
+                lineY = origin.y + gStart;
+            else
+                lineY = origin.y - (gStart + fLineTable[line].getHeight());
+        }
+        else {
+            lineY = origin.y;
+            if (fFillInc)
+                lineX = origin.x + gStart;
+            else
+                lineX = origin.x - (gStart + fLineTable[line].getHeight());
+        }
+
+        Rectangle bounds = fLineTable[line].caretBounds(fText, fLTCurTextLen, fLineDim, offset.fOffset, lineX, lineY);
+
+        r.setBounds(bounds);
+    }
+
+    /**
+    * Draw the caret(s) associated with the given offset into the given Graphics.
+    * @param g the Graphics to draw into
+    * @param offset the offset in the text for which the caret is drawn
+    * @param origin the top-left corner of the text, in the display's coordinate system
+    * @param strongCaretColor the color of the strong caret
+    * @param weakCaretColor the color of the weak caret (if any)
+    */
+    public synchronized void drawCaret(Graphics g,
+                                       TextOffset offset,
+                                       Point origin,
+                                       Color strongCaretColor,
+                                       Color weakCaretColor) {
+
+        checkTimeStamp();
+        Graphics2D g2d = Graphics2DConversion.getGraphics2D(g);
+        formatToOffset(offset);
+
+        LayoutInfo line;
+        int gStart;
+        
+        if (afterLastParagraph(offset)) {
+            gStart = fPixHeight;
+            line = pseudoLineInfo(null, offset.fOffset);
+        }
+        else {
+            int lineIndex = getValidLineContaining(offset);
+            gStart = lineGraphicStartInternal(lineIndex);
+            line = fLineTable[lineIndex];
+        }
+        
+        int lineX, lineY;
+
+        if (fHLine) {
+            lineX = origin.x;
+            if (fFillInc)
+                lineY = origin.y + gStart;
+            else
+                lineY = origin.y - (gStart + line.getHeight());
+        }
+        else {
+            lineY = origin.y;
+            if (fFillInc)
+                lineX = origin.x + gStart;
+            else
+                lineX = origin.x - (gStart + line.getHeight());
+        }
+
+        line.renderCaret(fText, fLTCurTextLen, g2d, fLineDim, lineX, lineY,
+                                offset.fOffset, strongCaretColor, weakCaretColor);
+    }
+
+/**
+* Given two offsets in the text, return a rectangle which encloses the lines containing the offsets.
+* Offsets do not need to be ordered or nonnegative.
+* @param offset1,offset2 offsets into the text
+* @param origin the top-left corner of the text, in the display's coordinate system
+* @returns a <tt>Rectangle</tt>, relative to <tt>origin</tt>, which encloses the lines containing the offsets
+*/
+    public synchronized Rectangle getBoundingRect(TextOffset offset1,
+                                                  TextOffset offset2,
+                                                  Point origin,
+                                                  boolean tight) {
+
+        Rectangle r = new Rectangle();
+        getBoundingRect(r, offset1, offset2, origin, tight);
+        return r;
+    }
+
+/*
+    Transform r from "text" coordinates to "screen" coordinates.
+*/
+
+    private void intlRect(Point origin, Rectangle r) {
+
+        int lineOrig, fillOrig;
+
+        if (fHLine) {
+            lineOrig = origin.x;
+            fillOrig = origin.y;
+        }
+        else {
+            lineOrig = origin.y;
+            fillOrig = origin.x;
+        }
+
+        if (fLineInc)
+            r.x += lineOrig;
+        else
+            r.x = lineOrig - (r.x + r.width);
+
+        if (fFillInc)
+            r.y += fillOrig;
+        else
+            r.y = fillOrig - (r.y + r.height);
+
+
+        if (!fHLine) {
+            int t = r.x;
+            r.x = r.y;
+            r.y = t;
+            t = r.width;
+            r.width = r.height;
+            r.height = t;
+        }
+    }
+
+
+    public synchronized void getBoundingRect(Rectangle r, 
+                                             TextOffset offset1,
+                                             TextOffset offset2,
+                                             Point origin,
+                                             boolean tight)
+    {
+        checkTimeStamp();
+        if (offset1.equals(offset2)) {
+            getCaretRect(r, offset1, origin);
+            return;
+        }
+        if (offset1.greaterThan(offset2)) {
+            TextOffset t; t = offset1; offset1 = offset2; offset2 = t;
+        }
+
+        formatToOffset(offset2);
+
+        int line = getValidLineContaining(offset1);
+        r.y = lineGraphicStartInternal(line);
+        
+        int gLimit;
+        boolean sameLine = false;
+                
+        if (afterLastParagraph(offset2))
+            gLimit = fPixHeight + lastCharHeight();
+        else {
+            int line2 = getValidLineContaining(offset2);
+            gLimit = lineGraphicLimitInternal(line2);
+            sameLine = (line == line2);
+        }
+
+        r.height = gLimit - r.y;
+
+        if (sameLine && tight==TIGHT) {
+            Rectangle rt = new Rectangle();
+            getCaretRect(rt, offset1, origin);
+            r.setBounds(rt);
+            if (!offset1.equals(offset2)) {
+                getCaretRect(rt, offset2, origin);
+                r.add(rt);
+            }
+        }
+        else {
+            r.x = fMinX;
+            r.width = fMaxX - fMinX;
+            intlRect(origin, r);
+        }
+
+        // System.out.print("gbr: " + r.x + ", " + r.y + ", " + r.width + ", " + r.height);
+
+        // System.out.println(" --> " + r.x + ", " + r.y + ", " + r.width + ", " + r.height);
+    }
+
+    /**
+    * Compute the offset resulting from moving from a previous offset in direction dir.
+    * For arrow keys.
+    * @param result the offset to modify and return.  may be null, if so a new offset is allocated, modified, and returned.
+    * @param previousOffset the insertion offset prior to the arrow key press.
+    * @param direction the direction of the arrow key (eUp, eDown, eLeft, or eRight)
+    * @returns new offset based on direction and previous offset.
+    */
+    public synchronized TextOffset findInsertionOffset(TextOffset result, TextOffset prevOffset, short dir)
+    {
+        return findNewInsertionOffset(result, prevOffset, prevOffset, dir);
+    }
+
+    /**
+     * Transform key direction:  after this step, "left" means previous glyph, "right" means next glyph,
+     *"up" means previous line, "down" means next line
+     */
+    private short remapArrowKey(short dir) {
+
+        if (!fLineInc) {
+            if (dir == eLeft)
+                dir = eRight;
+            else if (dir == eRight)
+                dir = eLeft;
+        }
+
+        if (!fFillInc) {
+            if (dir == eUp)
+                dir = eDown;
+            else if (dir == eDown)
+                dir = eUp;
+        }
+
+        if (!fHLine) {
+            if (dir == eLeft)
+                dir = eUp;
+            else if (dir == eRight)
+                dir = eDown;
+            else if (dir == eUp)
+                dir = eLeft;
+            else if (dir == eDown)
+                dir = eRight;
+        }
+
+        return dir;
+    }
+
+    /**
+    * Compute the offset resulting from moving from a previous offset, starting at an original offset, in direction dir.
+    * For arrow keys.  Use this for "smart" up/down keys.
+    * @param result the offset to modify and return.  May be null, if so a new offset is allocated, modified, and returned.
+    * @param origOffset the offset at which an up-down arrow key sequence began.
+    * @param prevOffset the insertion offset prior to the arrow key press
+    * @param dir the direction of the arrow key (eUp, eDown, eLeft, or eRight)
+    * @returns new offset based on direction, original offset, and previous offset.
+    */
+    public synchronized TextOffset findNewInsertionOffset(TextOffset result, TextOffset origOffset, TextOffset prevOffset, short dir)
+    {
+        checkTimeStamp();
+        if (result == null)
+            result = new TextOffset();
+
+        dir = remapArrowKey(dir);
+
+        // assume that text at origOffset and prevOffset has already been formatted
+
+        if (dir == eLeft || dir == eRight) {
+            formatToOffset(prevOffset);
+            int line = getValidLineContaining(prevOffset);
+
+            result.fPlacement = TextOffset.AFTER_OFFSET;
+            result.fOffset = fLineTable[line].getNextOffset(fLTCurTextLen, prevOffset.fOffset, dir);
+            if (result.fOffset < 0) {
+                result.fOffset = 0;
+            }
+            else if (result.fOffset >= fLTCurTextLen) {
+                result.setOffset(fLTCurTextLen, TextOffset.BEFORE_OFFSET);
+            }
+        }
+        else {
+            int distOnLine;
+
+            if (afterLastParagraph(origOffset))
+                distOnLine = 0;
+            else {
+                int line = getValidLineContaining(origOffset);
+
+                distOnLine = fLineTable[line].strongCaretBaselinePosition(fLTCurTextLen, fLineDim, origOffset.fOffset);
+            }
+
+            // get prevOffset's line
+            int line;
+            if (afterLastParagraph(prevOffset))
+                line = lastLine() + 1;
+            else {
+                line = getLineContaining(prevOffset);
+
+                if (dir == eDown && (line == kAfterLastLine || line == lastLine())
+                        && (lastLineCharStop() < fText.length())) {
+                    shiftTableTo(lastLine());
+                    formatText(lastLineCharStop(), 1, Integer.MAX_VALUE, true);
+                    line = getLineContaining(prevOffset);
+                }
+
+                if (line == kBeforeFirstLine)
+                    line = 0;
+                else if (line == kAfterLastLine)
+                    line = lastLine();
+            }
+
+            if (dir == eUp)
+                line--;
+            else if (dir == eDown)
+                line++;
+            else
+                throw new IllegalArgumentException("Debug: Illegal direction parameter in findNewInsertionOffset");
+
+            if (line < 0) {
+                //result.setOffset(0, TextOffset.AFTER_OFFSET);
+                result.assign(prevOffset);
+            }
+            else if (line > lastLine()) {
+                result.setOffset(fLTCurTextLen, TextOffset.BEFORE_OFFSET);
+            }
+            else {
+                if (fLineTable[line] == null)
+                    line = (dir == eUp)? fLTPosEnd : fLTNegStart;
+
+                // anchor is null since we never want a position after newline.  If we used the real anchor,
+                // we might not ignore the newline even though infiniteMode is true.
+                lineDimToOffset(result, line, distOnLine, 0, null, true);
+            }
+        }
+
+        // System.out.println("fnio prev: " + prevOffset + ", new: " + result);
+
+        return result;
+    }
+
+    public synchronized void stopBackgroundFormatting()
+    {
+        checkTimeStamp();
+        fBgFormatAllowed = false;
+    }
+
+    private synchronized void enableBGFormat()
+    {
+        try {
+            fBgFormatAllowed = true;
+            notify();
+        }
+        catch (IllegalMonitorStateException e) {
+        }
+    }
+
+    private int lineIndexToNumber(int lineIndex) {
+
+        if (lineIndex <= fLTPosEnd) {
+            return lineIndex;
+        }
+        else {
+            return lineIndex - (fLTNegStart-fLTPosEnd-1);
+        }
+    }
+
+    private int lineNumberToIndex(int lineNumber) {
+
+        if (lineNumber <= fLTPosEnd) {
+            return lineNumber;
+        }
+        else {
+            return lineNumber + (fLTNegStart-fLTPosEnd-1);
+        }
+    }
+
+    private void formatToLineNumber(int lineNumber) {
+
+        while (lastLineCharStop() < fLTCurTextLen &&
+                lineNumber >= lineIndexToNumber(fLTSize)) {
+            // could be smarter and choose larger amounts for
+            // larger lines, but probably not worth the effort
+            formatToHeight(fPixHeight + kPixIncrement);
+        }
+    }
+
+    private static final boolean STRICT = true;
+    private static final boolean LENIENT = false;
+
+    /**
+     * Insure that at least lineNumber lines exist, doing
+     * extra formatting if necessary.
+     * Throws exception if lineNumber is not valid.
+     * @param strict if STRICT, only lines [0...maxLineNumber()]
+     *        are permitted.  If LENIENT, maxLineNumber()+1 is
+     *        the greatest valid value.
+     */
+    private void validateLineNumber(int lineNumber, boolean strict) {
+
+        formatToLineNumber(lineNumber);
+
+        int maxNumber = lineIndexToNumber(fLTSize);
+        if (strict == STRICT) {
+            maxNumber -= 1;
+        }
+
+        if (lineNumber > maxNumber+1 ||
+                (lineNumber == maxNumber+1 && !emptyParagraphAtEndOfText())) {
+            throw new IllegalArgumentException("Invalid line number: " + lineNumber);
+        }
+    }
+
+    public synchronized int getLineCount() {
+
+        // format all text:
+        formatToHeight(Integer.MAX_VALUE);
+
+        int lineCount = lineIndexToNumber(fLTSize);
+
+        if (emptyParagraphAtEndOfText()) {
+            lineCount += 1;
+        }
+
+        return lineCount;
+    }
+    
+    public synchronized int lineContaining(int charIndex) {
+        
+        formatToOffset(charIndex, TextOffset.AFTER_OFFSET);
+        
+        boolean placement = TextOffset.AFTER_OFFSET;
+        if (charIndex == fLTCurTextLen && charIndex > 0) {
+            placement = emptyParagraphAtEndOfText()? TextOffset.AFTER_OFFSET :
+                                                     TextOffset.BEFORE_OFFSET;
+        }
+        
+        return lineContaining(charIndex, placement);
+    }
+
+    public synchronized int lineContaining(TextOffset offset) {
+
+        formatToOffset(offset);
+
+        if (afterLastParagraph(offset)) {
+            return lineIndexToNumber(fLTSize);
+        }
+        
+        return lineContaining(offset.fOffset, offset.fPlacement);
+    }
+    
+    private int lineContaining(int off, boolean placement) {
+        
+        int line = off==0? 0 : getLineContaining(off, placement);
+        
+        if (line == kAfterLastLine) {
+            line = fLTSize;
+        }
+        else if (line == kBeforeFirstLine) {
+            throw new Error("lineContaining got invalid result from getLineContaining().");
+        }
+
+        return lineIndexToNumber(line);
+    }
+
+    public synchronized int lineRangeLow(int lineNumber) {
+
+        validateLineNumber(lineNumber, STRICT);
+        int index = lineNumberToIndex(lineNumber);
+
+        if (index == fLTSize) {
+            if (emptyParagraphAtEndOfText()) {
+                return lastLineCharStop();
+            }
+        }
+
+        if (index >= fLTSize) {
+            throw new IllegalArgumentException("lineNumber is invalid.");
+        }
+        else {
+            return lineCharStartInternal(index);
+        }
+    }
+
+    public synchronized int lineRangeLimit(int lineNumber) {
+
+        validateLineNumber(lineNumber, STRICT);
+        int index = lineNumberToIndex(lineNumber);
+
+        if (index == fLTSize) {
+            if (emptyParagraphAtEndOfText()) {
+                return lastLineCharStop();
+            }
+        }
+
+        if (index >= fLTSize) {
+            throw new IllegalArgumentException("lineNumber is invalid.");
+        }
+        else {
+            return lineCharLimitInternal(index);
+        }
+    }
+
+    /**
+     * Return the number of the line at the given graphic height.
+     * If height is greater than full height, return line count.
+     */
+    public synchronized int lineAtHeight(int height) {
+
+        if (height >= fPixHeight) {
+
+            int line = getLineCount();
+            if (height < fFullPixHeight) {
+                line -= 1;
+            }
+            return line;
+        }
+        else if (height < 0) {
+            return -1;
+        }
+        else {
+            return lineIndexToNumber(findLineAt(height));
+        }
+    }
+
+    public synchronized int lineGraphicStart(int lineNumber) {
+
+        checkTimeStamp();
+        validateLineNumber(lineNumber, LENIENT);
+
+        int index = lineNumberToIndex(lineNumber);
+
+        if (index < fLTSize) {
+            return lineGraphicStartInternal(index);
+        }
+        else {
+            if (index == fLTSize+1) {
+                return fFullPixHeight;
+            }
+            else {
+                return fPixHeight;
+            }
+        }
+    }
+
+    public synchronized boolean lineIsLeftToRight(int lineNumber) {
+        
+        validateLineNumber(lineNumber, STRICT);
+        
+        int index = lineNumberToIndex(lineNumber);
+        
+        if (index < fLTSize) {
+            return fLineTable[index].isLeftToRight();
+        }
+        else {
+            AttributeMap st = fText.paragraphStyleAt(fLTCurTextLen);
+            return !TextAttribute.RUN_DIRECTION_RTL.equals(st.get(TextAttribute.RUN_DIRECTION));
+        }
+    }
+
+    /**
+    * Number of pixels by which to advance formatting in the background.
+    */
+    private static final int kPixIncrement = 100;
+
+    /**
+    * Time to sleep between background formatting operations.
+    */
+    private static final int kInterval = 100;
+
+    /**
+    * Perform periodic background formatting.
+    */
+    public void run()
+    {
+        while (true) {
+            synchronized (this) {
+                while(!fBgFormatAllowed) {
+                    try {
+                        wait();
+                    } catch(InterruptedException e) {
+                    }
+                }
+
+                checkTimeStamp();                
+                formatToHeight(fPixHeight + kPixIncrement);
+
+                if (lastLineCharStop() == fLTCurTextLen) {
+                    stopBackgroundFormatting();
+                }
+            }
+
+            try {
+                Thread.sleep(kInterval);
+            }
+            catch(InterruptedException e) {
+            }
+        }
+    }
+
+    private ParagraphRenderer getRendererFor(AttributeMap s) {
+    
+        // Note:  eventually we could let clients put their own renderers
+        // on the text.
+        BidiParagraphRenderer renderer = (BidiParagraphRenderer) fRendererCache.get(s);
+        if (renderer == null) {
+            renderer = new BidiParagraphRenderer(fDefaultValues.addAttributes(s), fDefaultCharMetric);
+            fRendererCache.put(s, renderer);
+        }
+        return renderer;
+    }
+
+}
diff --git a/src/com/ibm/richtext/textformat/BidiParagraphRenderer.java b/src/com/ibm/richtext/textformat/BidiParagraphRenderer.java
new file mode 100755
index 0000000..5023845
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/BidiParagraphRenderer.java
@@ -0,0 +1,1150 @@
+/*
+ * @(#)$RCSfile: BidiParagraphRenderer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.richtext.textformat;
+
+import java.awt.Color;
+import java.awt.Rectangle;
+import java.awt.Shape;
+
+import java.util.Vector;
+import java.util.Hashtable;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MTabRuler;
+import com.ibm.richtext.styledtext.TabStop;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import com.ibm.textlayout.Graphics2DConversion;
+
+///*JDK12IMPORTS
+import java.awt.Graphics2D;
+
+import java.awt.font.FontRenderContext;
+import java.awt.font.TextLayout;
+import java.awt.font.LineBreakMeasurer;
+import java.awt.font.TextHitInfo;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Rectangle2D;
+//JDK12IMPORTS*/
+/*JDK11IMPORTS
+import com.ibm.textlayout.Graphics2D;
+
+import com.ibm.textlayout.FontRenderContext;
+import com.ibm.textlayout.TextLayout;
+import com.ibm.textlayout.LineBreakMeasurer;
+import com.ibm.textlayout.TextHitInfo;
+
+import com.ibm.textlayout.AffineTransform;
+import com.ibm.textlayout.GeneralPath;
+import com.ibm.textlayout.Rectangle2D;
+JDK11IMPORTS*/
+
+final class BidiParagraphRenderer extends ParagraphRenderer {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private final class BidiSegment {
+        TextLayout fLayout;
+        Rectangle2D.Float fBounds;
+        int fDistanceFromLeadingMargin;
+    }
+
+    private final class BidiLayoutInfo extends LayoutInfo
+    {                    
+        int fCharLength;      // number of characters on line (was fLength)
+        int fAscent;
+        int fDescent;
+        int fLeading;
+        int fVisibleAdvance;  // distance along line direction ie width
+        int fTotalAdvance;    // distance along line direction including trailing whitespace
+
+        int fLeadingMargin;   // screen distance from leading margin
+
+        boolean fLeftToRight; // true iff the orientation is left-to-right
+
+        final Vector fSegments = new Vector(); // segments to render, in logical order
+
+        public int getCharLength() {
+            return fCharLength;
+        }
+
+        public int getAscent() {
+            return fAscent;
+        }
+
+        public int getDescent() {
+            return fDescent;
+        }
+
+        public int getLeading() {
+            return fLeading;
+        }
+
+        public int getVisibleAdvance() {
+            return fVisibleAdvance;
+        }
+
+        public int getTotalAdvance() {
+            return fTotalAdvance;
+        }
+
+        public int getLeadingMargin() {
+            return fLeadingMargin;
+        }
+
+        public boolean isLeftToRight() {
+            return fLeftToRight;
+        }
+
+        public int getHeight() {
+            return fAscent + fDescent + fLeading;
+        }
+
+        public String toString()
+        {
+            return "LayoutInfo(charStart: " + getCharStart(0) +
+                ", fCharLength: " + fCharLength +
+                ", fAscent: " + fAscent +
+                ", fDescent: " + fDescent +
+                ", fVisibleAdvance: " + fVisibleAdvance +
+                ", fTotalAdvance: " + fTotalAdvance +
+                ", fLeadingMargin: " + fLeadingMargin +
+                ")";
+        }
+
+        BidiParagraphRenderer fRenderer;
+
+        // just delegate to renderer for now
+
+        public void renderWithHighlight(int lengthBasis,
+                                        Graphics2D g,
+                                        int lineBound,
+                                        int x,
+                                        int y,
+                                        TextOffset selStart,
+                                        TextOffset selStop,
+                                        Color highlightColor) {
+
+            fRenderer.renderWithHighlight(this,
+                                          lengthBasis,
+                                          g,
+                                          lineBound,
+                                          x,
+                                          y,
+                                          selStart,
+                                          selStop,
+                                          highlightColor);
+        }
+
+        public void render(int lengthBasis,
+                           Graphics2D g,
+                           int lineBound,
+                           int x,
+                           int y) {
+            fRenderer.render(this, lengthBasis, g, lineBound, x, y);
+        }
+
+        public void renderCaret(MConstText text,
+                                int lengthBasis,
+                                Graphics2D g,
+                                int lineBound,
+                                int x,
+                                int y,
+                                int charOffset,
+                                Color strongCaretColor,
+                                Color weakCaretColor) {
+            fRenderer.renderCaret(this, text, lengthBasis, g, lineBound, x, y, charOffset,
+                                        strongCaretColor, weakCaretColor);
+        }
+
+        public TextOffset pixelToOffset(int lengthBasis,
+                                        TextOffset result,
+                                        int lineBound,
+                                        int x,
+                                        int y) {
+            return fRenderer.pixelToOffset(this, lengthBasis, result, lineBound, x, y);
+        }
+
+        public Rectangle caretBounds(MConstText text,
+                                     int lengthBasis,
+                                     int lineBound,
+                                     int charOffset,
+                                     int x,
+                                     int y) {
+            return fRenderer.caretBounds(this, text, lengthBasis, lineBound, charOffset, x, y);
+        }
+        
+        public int strongCaretBaselinePosition(int lengthBasis,
+                                               int lineBound,
+                                               int charOffset) {
+
+            return fRenderer.strongCaretBaselinePosition(this, lengthBasis, lineBound, charOffset);
+        }
+
+        public int getNextOffset(int lengthBasis,
+                                 int charOffset,
+                                 short dir) {
+
+            return fRenderer.getNextOffset(this, lengthBasis, charOffset, dir);
+        }
+    }
+
+    private static final int FLUSH_LEADING = TextAttribute.FLUSH_LEADING.intValue();
+    private static final int FLUSH_CENTER = TextAttribute.FLUSH_CENTER.intValue();
+    private static final int FLUSH_TRAILING = TextAttribute.FLUSH_TRAILING.intValue();
+    private static final int FULLY_JUSTIFIED = TextAttribute.FULLY_JUSTIFIED.intValue();
+
+    private AttributeMap cacheStyle = null;
+
+    private float fLeadingMargin;
+    private float fTrailingMargin;
+    private float fFirstLineIndent;
+    private float fMinLineSpacing;
+    private float fExtraLineSpacing;
+    
+    private int fFlush = -1;
+    private MTabRuler fTabRuler;
+    
+    private boolean fLtrDefault;
+    private DefaultCharacterMetric fDefaultCharMetric;
+    
+    BidiParagraphRenderer(AttributeMap pStyle, DefaultCharacterMetric defaultCharMetric) {
+
+        fDefaultCharMetric = defaultCharMetric;
+        initRenderer(pStyle);
+    }
+
+    private float getFloatValue(Object key, AttributeMap style) {
+        return ((Float)style.get(key)).floatValue();
+    }
+    
+    private int getIntValue(Object key, AttributeMap style) {
+        return ((Integer)style.get(key)).intValue();
+    }
+    
+    /**
+     * NOTE:  it is illegal to initialize a StandardParagraphRenderer for any style
+     * other than the one it was created with.
+     */
+    public void initRenderer(AttributeMap pStyle) {
+
+        if (cacheStyle == null) {
+
+            fLeadingMargin = getFloatValue(TextAttribute.LEADING_MARGIN, pStyle);
+            fTrailingMargin = getFloatValue(TextAttribute.TRAILING_MARGIN, pStyle);
+            fFirstLineIndent = getFloatValue(TextAttribute.FIRST_LINE_INDENT, pStyle);
+            fMinLineSpacing = getFloatValue(TextAttribute.MIN_LINE_SPACING, pStyle);
+            fExtraLineSpacing = getFloatValue(TextAttribute.EXTRA_LINE_SPACING, pStyle);
+
+            fFlush = getIntValue(TextAttribute.LINE_FLUSH, pStyle);
+
+            fTabRuler = (MTabRuler) pStyle.get(TextAttribute.TAB_RULER);
+            
+            Object runDir = pStyle.get(TextAttribute.RUN_DIRECTION);
+            fLtrDefault = !TextAttribute.RUN_DIRECTION_RTL.equals(runDir);
+
+            cacheStyle = pStyle;
+        }
+        else if (pStyle != cacheStyle) {
+            if (!pStyle.equals(cacheStyle)) {
+                throw new Error("Attempt to share BidiParagraphRenderer between styles!");
+            }
+            else {
+                cacheStyle = pStyle;
+            }
+        }
+    }
+
+    private static boolean isTab(char ch) {
+        return ch == '\t';
+    }
+
+    /**
+     * Fill in info with the next line.
+     * @param measurer the LineBreakMeasurer for this paragraph.
+     *  Current position should be the first character on the line.
+     *  If null, a 0-length line is generated.  If measurer is null
+     *  then paragraphStart and paragraphLimit should be equal.
+     */
+    // Usually totalFormatWidth and lineBound will be the same.
+    // totalFormatWidth is used for wrapping, but lineBound is
+    // for flushing.  These may be different for unwrapped text,
+    // for example.
+    public LayoutInfo layout(MConstText text,
+                             LayoutInfo layoutToReuse,
+                             LineBreakMeasurer measurer,
+                             FontRenderContext frc,
+                             int paragraphStart,
+                             int paragraphLimit,
+                             int totalFormatWidth,
+                             int lineBound) {
+
+        if ((measurer==null) != (paragraphStart==paragraphLimit)) {
+            throw new IllegalArgumentException(
+                    "measurer, paragraphStart, paragraphLimit are wrong.");
+        }
+        BidiLayoutInfo line = null;
+
+        try {
+            line = (BidiLayoutInfo) layoutToReuse;
+        }
+        catch(ClassCastException e) {
+        }
+
+        if (line == null) {
+            line = new BidiLayoutInfo();
+        }
+
+        line.fRenderer = this;
+
+        final int lineCharStart = measurer==null? paragraphStart : measurer.getPosition();
+        line.setCharStart(lineCharStart);
+
+        final int lineIndent = (lineCharStart==paragraphStart)? (int) fFirstLineIndent : 0;
+
+        int formatWidth = totalFormatWidth - (int) (fLeadingMargin + fTrailingMargin);
+        computeLineMetrics(text, line, measurer, frc,
+                            paragraphStart, paragraphLimit, formatWidth, lineIndent);
+
+        // position the line according to the line flush
+        if (fFlush == FLUSH_TRAILING || fFlush == FLUSH_CENTER) {
+            int lineArea = lineBound - (int) (fLeadingMargin + fTrailingMargin);
+            int advanceDifference = lineArea - line.fVisibleAdvance;
+
+            if (fFlush == FLUSH_TRAILING) {
+                line.fLeadingMargin = ((int) (fLeadingMargin)) + advanceDifference;
+            }
+            else if (fFlush == FLUSH_CENTER) {
+                line.fLeadingMargin = (int) (fLeadingMargin + advanceDifference/2);
+            }
+        }
+        else {
+            line.fLeadingMargin = (int) fLeadingMargin;
+        }
+
+        return line;
+    }
+
+    /**
+     * Fill in the following fields in line:
+     * fCharLength, fAscent, fDescent, fLeading, fVisibleAdvance,
+     * fTotalAdvance.
+     * Uses: line.fLeadingMargin
+     * @param formatWidth the width to fit the line into.
+     */
+    private void computeLineMetrics(MConstText text,
+                                    BidiLayoutInfo line,
+                                    LineBreakMeasurer measurer,
+                                    FontRenderContext frc,
+                                    final int paragraphStart,
+                                    final int paragraphLimit,
+                                    final int formatWidth,
+                                    final int lineIndent) {
+
+        int segmentCount = 0;
+        boolean firstLine = measurer==null ||
+                            measurer.getPosition() == paragraphStart;
+
+        if (measurer != null) {
+            computeSegments(text, line, measurer, paragraphLimit, formatWidth, lineIndent);
+
+            // iterate through segments and accumulate ascent, descent,
+            // leading, char length
+            float ascent = 0;
+            float descent = 0;
+            float descentPlusLeading = 0;
+
+            segmentCount = line.fSegments.size();
+            for (int i=0; i < segmentCount; i++) {
+                TextLayout layout = ((BidiSegment)line.fSegments.elementAt(i)).fLayout;
+                ascent = Math.max(ascent, layout.getAscent());
+                float segDescent = layout.getDescent();
+                descent = Math.max(descent, segDescent);
+                descentPlusLeading = Math.max(descentPlusLeading, segDescent+layout.getLeading());
+                line.fCharLength += layout.getCharacterCount();
+            }
+
+            line.fAscent = (int) Math.ceil(ascent);
+            line.fDescent = (int) Math.ceil(descent);
+            line.fLeading = (int) Math.ceil(descentPlusLeading) - line.fDescent;
+        }
+        else {
+            line.fLeftToRight = fLtrDefault;
+            line.fSegments.removeAllElements();
+
+            line.fCharLength = 0;
+
+            AttributeMap style = text.characterStyleAt(paragraphStart);
+            DefaultCharacterMetric.Metric cm = fDefaultCharMetric.getMetricForStyle(style);
+            line.fAscent = cm.getAscent();
+            line.fDescent = cm.getDescent();
+            line.fLeading = cm.getLeading();
+
+            line.fVisibleAdvance = line.fTotalAdvance = 0;
+        }
+
+        if (fExtraLineSpacing != 0) {
+            line.fAscent += (int) Math.ceil(fExtraLineSpacing);
+        }
+
+        if (fMinLineSpacing != 0){
+            int height = line.getHeight();
+            if (height < fMinLineSpacing) {
+                line.fAscent += Math.ceil(fMinLineSpacing - height);
+            }
+        }
+
+        final int lineNaturalAdvance = line.fTotalAdvance;
+
+        line.fTotalAdvance += lineIndent;
+        line.fVisibleAdvance += lineIndent;
+
+        if (measurer != null) {
+            // Now fill in fBounds field of BidiSegments.  fBounds should tile
+            // the line.
+            final float lineHeight = line.getHeight();
+
+            for (int i=1; i < segmentCount; i++) {
+
+                BidiSegment currentSegment = (BidiSegment) line.fSegments.elementAt(i-1);
+                BidiSegment nextSegment = (BidiSegment) line.fSegments.elementAt(i);
+
+                float origin;
+                float width;
+
+                if (line.fLeftToRight) {
+                    origin = 0;
+                    width = nextSegment.fDistanceFromLeadingMargin -
+                                currentSegment.fDistanceFromLeadingMargin;
+                }
+                else {
+                    origin = currentSegment.fDistanceFromLeadingMargin;
+                    origin -= nextSegment.fDistanceFromLeadingMargin;
+                    origin += (float) Math.ceil(nextSegment.fLayout.getAdvance());
+                    width = (float) Math.ceil(currentSegment.fLayout.getAdvance()) - origin;
+                }
+                currentSegment.fBounds = new Rectangle2D.Float(origin, -line.fAscent, width, lineHeight);
+            }
+
+            // set last segment's bounds
+            {
+                BidiSegment currentSegment = (BidiSegment) line.fSegments.elementAt(segmentCount-1);
+                float origin;
+                float width;
+
+                if (line.fLeftToRight) {
+                    origin = 0;
+                    width = lineNaturalAdvance - currentSegment.fDistanceFromLeadingMargin;
+                }
+                else {
+                    origin = currentSegment.fDistanceFromLeadingMargin - lineNaturalAdvance;
+                    width = (float) Math.ceil(currentSegment.fLayout.getAdvance()) - origin;
+                }
+
+                currentSegment.fBounds = new Rectangle2D.Float(origin, -line.fAscent, width, lineHeight);
+            }
+        }
+    }
+
+    /**
+     * Fill in fSegments, fLeftToRight.  measurer must not be null
+     */
+    private void computeSegments(MConstText text,
+                                 BidiLayoutInfo line,
+                                 LineBreakMeasurer measurer,
+                                 final int paragraphLimit,
+                                 final int formatWidth,
+                                 final int lineIndent) {
+
+        // Note on justification:  only the last segment of a line is
+        // justified.  
+        // Also, if a line ends in a tab it will not be justified.
+        // This behavior is consistent with other word processors
+        // I tried (MS Word and Lotus Word Pro).
+        
+        line.fSegments.removeAllElements();
+        line.fCharLength = 0;
+
+        TabStop currentTabStop = new TabStop((int)fLeadingMargin+lineIndent, TabStop.kLeading);
+
+        int segmentLimit = measurer.getPosition();
+        boolean firstSegment = true;
+
+        int advanceFromLeadingMargin = lineIndent;
+
+        boolean computeSegs = true;
+        
+        computeTabbedSegments: do {
+
+            // compute sementLimit:
+            if (segmentLimit <= measurer.getPosition()) {
+                while (segmentLimit < paragraphLimit) {
+                    if (isTab(text.at(segmentLimit++))) {
+                        break;
+                    }
+                }
+            }
+
+            // NOTE:  adjust available width for center tab!!!
+            //System.out.println("Format width: " + (formatWidth-advanceFromLeadingMargin) +
+            //                   ";  segmentLimit: " + segmentLimit);
+
+            int wrappingWidth = Math.max(formatWidth-advanceFromLeadingMargin, 0);
+            TextLayout layout = null;
+            if (firstSegment || wrappingWidth > 0 || segmentLimit > measurer.getPosition()+1) {
+                layout = measurer.nextLayout(wrappingWidth, segmentLimit, !firstSegment);
+            }
+
+            if (layout == null) {
+                if (firstSegment) {
+                    // I doubt this would happen, but check anyway
+                    throw new Error("First layout is null!");
+                }
+                break computeTabbedSegments;
+            }
+            
+            final int measurerPos = measurer.getPosition();
+            if (measurerPos < segmentLimit) {
+                computeSegs = false;
+                if (fFlush == FULLY_JUSTIFIED) {
+                    layout = layout.getJustifiedLayout(wrappingWidth);
+                }
+            }
+            else {
+                computeSegs = !(measurerPos == paragraphLimit);
+            }
+
+            if (firstSegment) {
+                firstSegment = false;
+                // Have to get ltr off of layout.  Not available from measurer,
+                // unfortunately.
+                line.fLeftToRight = layout.isLeftToRight();
+            }
+
+            BidiSegment segment = new BidiSegment();
+            segment.fLayout = layout;
+            int layoutAdvance = (int) Math.ceil(layout.getAdvance());
+
+            // position layout relative to leading margin, update logicalPositionOnLine
+            
+            int relativeTabPosition = currentTabStop.getPosition()-(int)fLeadingMargin;
+            int logicalPositionOfLayout;
+            switch (currentTabStop.getType()) {
+                case TabStop.kTrailing:
+                    logicalPositionOfLayout = Math.max(
+                                    relativeTabPosition-layoutAdvance,
+                                    advanceFromLeadingMargin);
+                    break;
+                case TabStop.kCenter:
+                    logicalPositionOfLayout = Math.max(
+                                    relativeTabPosition-(layoutAdvance/2),
+                                    advanceFromLeadingMargin);
+                    break;
+                default:  // includes decimal tab right now
+                    logicalPositionOfLayout = relativeTabPosition;
+                    break;
+            }
+
+            // position layout in segment
+            if (line.fLeftToRight) {
+                segment.fDistanceFromLeadingMargin = logicalPositionOfLayout;
+            }
+            else {
+                segment.fDistanceFromLeadingMargin = logicalPositionOfLayout+layoutAdvance;
+            }
+
+            // update advanceFromLeadingMargin
+            advanceFromLeadingMargin = logicalPositionOfLayout + layoutAdvance;
+
+            // add segment to segment Vector
+            line.fSegments.addElement(segment);
+
+            // get next tab
+            currentTabStop = fTabRuler.nextTab((int)fLeadingMargin+advanceFromLeadingMargin);
+            if (currentTabStop.getType() == TabStop.kLeading ||
+                            currentTabStop.getType() == TabStop.kAuto)  {
+                advanceFromLeadingMargin = currentTabStop.getPosition();
+                //System.out.println("Advance from leading margin:" + advanceFromLeadingMargin);
+
+            }
+            else {
+               //System.out.println("Non-leading tab, type=" + currentTabStop.getType());
+            }
+
+        } while (computeSegs);
+
+        // Now compute fTotalAdvance, fVisibleAdvance.  These metrics may be affected
+        // by a trailing tab.
+
+        {
+            BidiSegment lastSegment = (BidiSegment) line.fSegments.lastElement();
+            TextLayout lastLayout = lastSegment.fLayout;
+
+            if (line.fLeftToRight) {
+                line.fTotalAdvance = (int) Math.ceil(lastLayout.getAdvance()) +
+                                        lastSegment.fDistanceFromLeadingMargin;
+                line.fVisibleAdvance = (int) Math.ceil(lastLayout.getVisibleAdvance()) +
+                                        lastSegment.fDistanceFromLeadingMargin;
+            }
+            else {
+                line.fTotalAdvance = lastSegment.fDistanceFromLeadingMargin;
+                line.fVisibleAdvance = lastSegment.fDistanceFromLeadingMargin -
+                                        (int) Math.ceil(lastLayout.getAdvance() -
+                                            lastLayout.getVisibleAdvance());
+            }
+
+            if (isTab(text.at(measurer.getPosition()-1))) {
+                line.fTotalAdvance = Math.max(line.fTotalAdvance,
+                                                currentTabStop.getPosition());
+            }
+        }
+    }
+
+    /**
+     * Return the highlight shape for the given character offsets.
+     * The Shape returned is relative to the leftmost point on the
+     * baseline of line.
+     */
+    private Shape getHighlightShape(BidiLayoutInfo line,
+                                    int lengthBasis,
+                                    int lineBound,
+                                    int hlStart,
+                                    int hlLimit) {
+
+        if (hlStart >= hlLimit) {
+            throw new IllegalArgumentException("Highlight range length is not positive.");
+        }
+
+        final int leadingMargin = (line.fLeftToRight)?
+                line.fLeadingMargin : lineBound - line.fLeadingMargin;
+        final int segmentCount = line.fSegments.size();
+
+        Shape rval = null;
+        GeneralPath highlightPath = null;
+
+        int currentLayoutStart = line.getCharStart(lengthBasis);
+
+        for (int i=0; i < segmentCount; i++) {
+
+            BidiSegment segment = (BidiSegment) line.fSegments.elementAt(i);
+            TextLayout layout = segment.fLayout;
+            int charCount = layout.getCharacterCount();
+            int currentLayoutLimit = currentLayoutStart + charCount;
+            boolean rangesIntersect;
+            if (hlStart <= currentLayoutStart) {
+                rangesIntersect = hlLimit > currentLayoutStart;
+            }
+            else {
+                rangesIntersect = hlStart < currentLayoutLimit;
+            }
+
+            if (rangesIntersect) {
+
+                Shape currentHl = layout.getLogicalHighlightShape(
+                                        Math.max(hlStart-currentLayoutStart, 0),
+                                        Math.min(hlLimit-currentLayoutStart, charCount),
+                                        segment.fBounds);
+
+                float xTranslate;
+                if (line.fLeftToRight) {
+                    xTranslate = leadingMargin +
+                                 segment.fDistanceFromLeadingMargin;
+                }
+                else {
+                    xTranslate = leadingMargin -
+                                 segment.fDistanceFromLeadingMargin;
+                }
+
+                if (xTranslate != 0) {
+                    AffineTransform xform =
+                        AffineTransform.getTranslateInstance(xTranslate, 0);
+                    currentHl = xform.createTransformedShape(currentHl);
+                }
+
+                if (rval == null) {
+                    rval = currentHl;
+                }
+                else {
+                    if (highlightPath == null) {
+                        highlightPath = new GeneralPath();
+                        highlightPath.append(rval, false);
+                        rval = highlightPath;
+                    }
+                    highlightPath.append(currentHl, false);
+                }
+            }
+            currentLayoutStart = currentLayoutLimit;
+        }
+
+        return rval;
+    }
+
+    private void renderWithHighlight(BidiLayoutInfo line,
+                                     int lengthBasis,
+                                     Graphics2D g,
+                                     int lineBound,
+                                     int x,
+                                     int y,
+                                     TextOffset selStart,
+                                     TextOffset selStop,
+                                     Color highlightColor) {
+
+        final int lineCharStart = line.getCharStart(lengthBasis);
+
+        if (selStart != null && selStop != null && !selStart.equals(selStop) &&
+                line.fCharLength != 0 &&
+                selStart.fOffset < lineCharStart + line.fCharLength &&
+                selStop.fOffset > lineCharStart) {
+
+            Shape highlight = getHighlightShape(line, lengthBasis, lineBound, selStart.fOffset, selStop.fOffset);
+            if (highlight != null) {
+                Graphics2D hl = (Graphics2D) g.create();
+                hl.setColor(highlightColor);
+                hl.translate(x, y + line.fAscent);
+                hl.fill(highlight);
+            }
+        }
+
+        render(line, lengthBasis, g, lineBound, x, y);
+    }
+
+    /**
+     * Draw the line into the graphics.  (x, y) is the upper-left corner
+     * of the line.  The leading edge of a right-aligned line is aligned
+     * to (x + lineBound).
+     */
+    private void render(BidiLayoutInfo line,
+                        int lengthBasis,
+                        Graphics2D g,
+                        int lineBound,
+                        int x,
+                        int y) {
+
+        final int leadingMargin = (line.fLeftToRight)?
+                x + line.fLeadingMargin : x + lineBound - line.fLeadingMargin;
+        final int baseline = y + line.fAscent;
+        final int segmentCount = line.fSegments.size();
+
+        for (int i=0; i < segmentCount; i++) {
+
+            BidiSegment segment = (BidiSegment) line.fSegments.elementAt(i);
+
+            float drawX;
+            if (line.fLeftToRight) {
+                drawX = leadingMargin + segment.fDistanceFromLeadingMargin;
+            }
+            else {
+                drawX = leadingMargin - segment.fDistanceFromLeadingMargin;
+            }
+
+            segment.fLayout.draw(g, drawX, baseline);
+        }
+    }
+
+    private TextOffset hitTestSegment(TextOffset result,
+                                      int segmentCharStart,
+                                      BidiSegment segment,
+                                      int xInSegment,
+                                      int yInSegment) {
+
+        final TextLayout layout = segment.fLayout;
+        final int charCount = layout.getCharacterCount();
+        final int layoutAdvance = (int) Math.ceil(layout.getAdvance());
+        Rectangle2D bounds = segment.fBounds;
+
+        final boolean ltr = layout.isLeftToRight();
+
+        if (ltr && (xInSegment >= layoutAdvance) || !ltr && (xInSegment <= 0)) {
+
+            // pretend the extra space at the end of the line is a
+            // tab and 'hit-test' it.
+            double tabCenter;
+            if (ltr) {
+                tabCenter = (layoutAdvance+bounds.getMaxX()) / 2;
+            }
+            else {
+                tabCenter = bounds.getX() / 2;
+            }
+
+            if ((xInSegment >= tabCenter) == ltr) {
+                result.fOffset = charCount;
+                result.fPlacement = TextOffset.BEFORE_OFFSET;
+            }
+            else {
+                result.fOffset = charCount-1;
+                result.fPlacement = TextOffset.AFTER_OFFSET;
+            }
+        }
+        else {
+            TextHitInfo info = layout.hitTestChar(xInSegment, yInSegment, segment.fBounds);
+            result.fOffset = info.getInsertionIndex();
+            if (result.fOffset == 0) {
+                result.fPlacement = TextOffset.AFTER_OFFSET;
+            }
+            else if (result.fOffset == charCount) {
+                result.fPlacement = TextOffset.BEFORE_OFFSET;
+            }
+            else {
+                result.fPlacement = info.isLeadingEdge()?
+                        TextOffset.AFTER_OFFSET : TextOffset.BEFORE_OFFSET;
+            }
+        }
+
+        result.fOffset += segmentCharStart;
+        return result;
+    }
+
+    /**
+     * Return the offset at the point (x, y).  (x, y) is relative to the top-left
+     * of the line.  The leading edge of a right-aligned line is aligned
+     * to lineBound.
+     */
+    private TextOffset pixelToOffset(BidiLayoutInfo line,
+                                     int lengthBasis,
+                                     TextOffset result,
+                                     int lineBound,
+                                     int x,
+                                     int y) {
+
+        if (result == null) {
+            result = new TextOffset();
+        }
+
+        final int yInSegment = y - line.fAscent;
+        final int leadingMargin = (line.fLeftToRight)?
+                line.fLeadingMargin : lineBound - line.fLeadingMargin;
+        final int lineCharStart = line.getCharStart(lengthBasis);
+
+        // first see if point is before leading edge of line
+        final int segmentCount = line.fSegments.size();
+        {
+            int segLeadingMargin = leadingMargin;
+            if (segmentCount > 0) {
+                BidiSegment firstSeg = (BidiSegment) line.fSegments.elementAt(0);
+                if (line.fLeftToRight) {
+                    segLeadingMargin += firstSeg.fDistanceFromLeadingMargin;
+                }
+                else {
+                    segLeadingMargin -= firstSeg.fDistanceFromLeadingMargin;
+                    segLeadingMargin += (float) firstSeg.fBounds.getMaxX();
+                }
+            }
+            if (line.fLeftToRight == (x <= segLeadingMargin)) {
+                result.fOffset = lineCharStart;
+                result.fPlacement = TextOffset.AFTER_OFFSET;
+                return result;
+            }
+        }
+
+        int segmentCharStart = lineCharStart;
+
+        for (int i=0; i < segmentCount; i++) {
+
+            BidiSegment segment = (BidiSegment) line.fSegments.elementAt(i);
+            int segmentOrigin = line.fLeftToRight?
+                            leadingMargin+segment.fDistanceFromLeadingMargin :
+                            leadingMargin-segment.fDistanceFromLeadingMargin;
+            int xInSegment = x - segmentOrigin;
+            if (line.fLeftToRight) {
+                if (segment.fBounds.getMaxX() > xInSegment) {
+                    return hitTestSegment(result, segmentCharStart, segment, xInSegment, yInSegment);
+                }
+            }
+            else {
+                if (segment.fBounds.getX() < xInSegment) {
+                    return hitTestSegment(result, segmentCharStart, segment, xInSegment, yInSegment);
+                }
+            }
+            segmentCharStart += segment.fLayout.getCharacterCount();
+        }
+
+        result.fOffset = lineCharStart + line.fCharLength;
+        result.fPlacement = TextOffset.BEFORE_OFFSET;
+        return result;
+    }
+
+    private void renderCaret(BidiLayoutInfo line,
+                             MConstText text,
+                             int lengthBasis,
+                             Graphics2D g,
+                             int lineBound,
+                             int x,
+                             int y,
+                             final int charOffset,
+                             Color strongCaretColor,
+                             Color weakCaretColor)
+    {
+        final int segmentCount = line.fSegments.size();
+        final int lineStart = line.getCharStart(lengthBasis);
+
+        int currentStart = lineStart;
+        BidiSegment segment = null;
+        int segmentIndex;
+
+        for (segmentIndex=0; segmentIndex < segmentCount; segmentIndex++) {
+            segment = (BidiSegment) line.fSegments.elementAt(segmentIndex);
+            int currentEndpoint = currentStart + segment.fLayout.getCharacterCount();
+            if (currentEndpoint > charOffset) {
+                break;
+            }
+            currentStart = currentEndpoint;
+        }
+
+        /*
+            There are two choices here:
+            1. get carets from a TextLayout and render them, or
+            2. make up a caret ourselves and render it.
+            We want to do 2 when:
+                * there is no text on the line, or
+                * the line ends with a tab and we are drawing the last caret on the line
+            Otherwise, we want 1.
+        */
+
+        if (segmentIndex == segmentCount && segmentCount > 0) {
+            // If we get here, line length is not 0, and charOffset is at end of line
+            if (!isTab(text.at(charOffset-1))) {
+                segmentIndex = segmentCount-1;
+                segment = (BidiSegment) line.fSegments.elementAt(segmentIndex);
+                currentStart = lineStart + line.getCharLength() -
+                                    segment.fLayout.getCharacterCount();
+            }
+        }
+
+        Object savedPaint = Graphics2DConversion.getColorState(g);
+
+        try {
+            if (segmentIndex < segmentCount) {
+                TextLayout layout = segment.fLayout;
+                int offsetInLayout = charOffset - currentStart;
+                Shape[] carets = layout.getCaretShapes(offsetInLayout, segment.fBounds);
+                g.setColor(strongCaretColor);
+                int layoutPos = line.fLeadingMargin + segment.fDistanceFromLeadingMargin;
+                int layoutX = line.fLeftToRight?
+                        x + layoutPos : x + lineBound - layoutPos;
+                int layoutY = y + line.fAscent;
+
+                // Translating and then clipping doesn't work.  Try this:
+                Rectangle2D.Float clipRect = new Rectangle2D.Float();
+                clipRect.setRect(segment.fBounds);
+                clipRect.x += layoutX;
+                clipRect.y += layoutY;
+                clipRect.width += 1;
+                clipRect.height -= 1;
+
+                Object savedClip = ClipWorkaround.saveClipState(g);
+                try {
+                    ClipWorkaround.translateAndDrawShapeWithClip(g,
+                                                                layoutX,
+                                                                layoutY,
+                                                                clipRect,
+                                                                carets[0]);
+                    if (carets[1] != null) {
+                        g.setColor(weakCaretColor);
+                        ClipWorkaround.translateAndDrawShapeWithClip(g,
+                                                                    layoutX,
+                                                                    layoutY,
+                                                                    clipRect,
+                                                                    carets[1]);
+                    }
+                }
+                finally {
+                    ClipWorkaround.restoreClipState(g, savedClip);
+                }
+            }
+            else {
+                int lineEnd = line.fLeadingMargin + line.fTotalAdvance;
+                int endX = line.fLeftToRight? lineEnd : lineBound-lineEnd;
+                endX += x;
+                g.drawLine(endX, y, endX, y+line.getHeight()-1);
+            }
+        }
+        finally {
+            Graphics2DConversion.restoreColorState(g, savedPaint);
+        }
+    }
+
+    private Rectangle caretBounds(BidiLayoutInfo line,
+                                  MConstText text,
+                                  int lengthBasis,
+                                  int lineBound,
+                                  int charOffset,
+                                  int x,
+                                  int y) {
+
+        final int segmentCount = line.fSegments.size();
+        final int lineStart = line.getCharStart(lengthBasis);
+        int currentStart = lineStart;
+        BidiSegment segment = null;
+        int segmentIndex;
+
+        for (segmentIndex=0; segmentIndex < segmentCount; segmentIndex++) {
+            segment = (BidiSegment) line.fSegments.elementAt(segmentIndex);
+            int currentEndpoint = currentStart + segment.fLayout.getCharacterCount();
+            if (currentEndpoint > charOffset) {
+                break;
+            }
+            currentStart = currentEndpoint;
+        }
+
+        if (segmentIndex == segmentCount && segmentCount > 0) {
+            // If we get here, line length is not 0, and charOffset is at end of line
+            if (!isTab(text.at(charOffset-1))) {
+                segmentIndex = segmentCount-1;
+                segment = (BidiSegment) line.fSegments.elementAt(segmentIndex);
+                currentStart = lineStart + line.getCharLength() -
+                                    segment.fLayout.getCharacterCount();
+            }
+        }
+
+        Rectangle r;
+        
+        if (segmentIndex < segmentCount) {
+            TextLayout layout = segment.fLayout;
+            int offsetInLayout = charOffset - currentStart;
+            Shape[] carets = layout.getCaretShapes(offsetInLayout, segment.fBounds);
+            r = carets[0].getBounds();
+            if (carets[1] != null) {
+                r.add(carets[1].getBounds());
+            }
+            r.width += 1;
+            
+            int layoutPos = line.fLeadingMargin + segment.fDistanceFromLeadingMargin;
+            if (line.fLeftToRight) {
+                r.x += layoutPos;
+            }
+            else {
+                r.x += lineBound - layoutPos;
+            }
+            r.y += line.fAscent;
+        }
+        else {
+            r = new Rectangle();
+            r.height = line.getHeight();
+            r.width = 1;
+            int lineEnd = line.fLeadingMargin + line.fTotalAdvance;
+            if (line.fLeftToRight) {
+                r.x = lineEnd;
+            }
+            else {
+                r.x = lineBound - lineEnd;
+            }
+        }
+        
+        r.translate(x, y);
+        return r;
+    }
+
+    private int strongCaretBaselinePosition(BidiLayoutInfo line,
+                                            int lengthBasis,
+                                            int lineBound,
+                                            int charOffset) {
+
+        final int segmentCount = line.fSegments.size();
+        int currentStart = line.getCharStart(lengthBasis);
+        BidiSegment segment = null;
+        int segmentIndex;
+
+        for (segmentIndex=0; segmentIndex < segmentCount; segmentIndex++) {
+            segment = (BidiSegment) line.fSegments.elementAt(segmentIndex);
+            int currentEndpoint = currentStart + segment.fLayout.getCharacterCount();
+            if (currentEndpoint > charOffset) {
+                break;
+            }
+            currentStart = currentEndpoint;
+        }
+
+        if (segmentIndex < segmentCount) {
+            TextLayout layout = segment.fLayout;
+            int offsetInLayout = charOffset - currentStart;
+            TextHitInfo hit = TextHitInfo.afterOffset(offsetInLayout);
+            hit = layout.DEFAULT_CARET_POLICY.getStrongCaret(hit, hit.getOtherHit(), layout);
+            float[] info = layout.getCaretInfo(hit);
+            int layoutPos = line.fLeadingMargin + segment.fDistanceFromLeadingMargin;
+            if (line.fLeftToRight) {
+                return layoutPos + (int) info[0];
+            }
+            else {
+                return lineBound - layoutPos + (int) info[0];
+            }
+        }
+        else {
+            int lineEnd = line.fLeadingMargin + line.fTotalAdvance;
+            if (line.fLeftToRight) {
+                return lineEnd;
+            }
+            else {
+                return lineBound - lineEnd;
+            }
+        }
+    }
+
+    private int getNextOffset(BidiLayoutInfo line,
+                              int lengthBasis,
+                              int charOffset,
+                              short dir) {
+
+        if (dir != MFormatter.eLeft && dir != MFormatter.eRight) {
+            throw new IllegalArgumentException("Invalid direction.");
+        }
+
+        // find segment containing offset:
+        final int segmentCount = line.fSegments.size();
+        final int lineCharStart = line.getCharStart(lengthBasis);
+
+        int currentStart = lineCharStart;
+        BidiSegment segment = null;
+        int segmentIndex;
+
+        for (segmentIndex=0; segmentIndex < segmentCount; segmentIndex++) {
+            segment = (BidiSegment) line.fSegments.elementAt(segmentIndex);
+            int currentEndpoint = currentStart + segment.fLayout.getCharacterCount();
+            if (currentEndpoint > charOffset ||
+                    (segmentIndex == segmentCount-1 && currentEndpoint==charOffset)) {
+                break;
+            }
+            currentStart = currentEndpoint;
+        }
+
+        final boolean logAdvance = (dir==MFormatter.eRight)==(line.fLeftToRight);
+
+        int result;
+
+        if (segmentIndex < segmentCount) {
+            TextLayout layout = segment.fLayout;
+            int offsetInLayout = charOffset - currentStart;
+            TextHitInfo hit = (dir==MFormatter.eLeft)?
+                        layout.getNextLeftHit(offsetInLayout) :
+                        layout.getNextRightHit(offsetInLayout);
+            if (hit == null) {
+                result = logAdvance?
+                    currentStart+layout.getCharacterCount()+1 : currentStart-1;
+            }
+            else {
+                result = hit.getInsertionIndex() + currentStart;
+            }
+        }
+        else {
+            result = logAdvance? lineCharStart + line.fCharLength + 1 :
+                                         lineCharStart - 1;
+        }
+
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textformat/ClipWorkaround.java b/src/com/ibm/richtext/textformat/ClipWorkaround.java
new file mode 100755
index 0000000..327ec48
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/ClipWorkaround.java
@@ -0,0 +1,142 @@
+/*
+ * @(#)$RCSfile: ClipWorkaround.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+
+package com.ibm.richtext.textformat;
+
+import java.awt.Shape;
+///*JDK12IMPORTS
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Line2D;
+//JDK12IMPORTS*/
+/*JDK11IMPORTS
+import com.ibm.textlayout.Graphics2D;
+import com.ibm.textlayout.Rectangle2D;
+JDK11IMPORTS*/
+
+/**
+ * This class exists to work around a clipping bug in JDK 1.2.
+ */
+final class ClipWorkaround {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+///*JDK12IMPORTS
+    private static final String excuse =
+        "Sorry, this method is a very limited workaround for a JDK 1.2 bug.";
+//JDK12IMPORTS*/
+    
+    static Object saveClipState(Graphics2D g) {
+///*JDK12IMPORTS
+        return null;
+//JDK12IMPORTS*/
+/*JDK11IMPORTS
+        return g.getClip();
+JDK11IMPORTS*/
+    }
+    
+    static void restoreClipState(Graphics2D g, Object state) {
+///*JDK12IMPORTS
+        if (state != null) {
+            throw new Error("Invalid clip state for this class.");
+        }
+//JDK12IMPORTS*/
+/*JDK11IMPORTS
+        g.setClip((Shape)state);
+JDK11IMPORTS*/
+    }
+    
+    /**
+     * Draw the given Shape into the Graphics, translated by (dx, dy)
+     * and clipped to clipRect.
+     */
+    static void translateAndDrawShapeWithClip(Graphics2D g,
+                                              int dx,
+                                              int dy,
+                                              Rectangle2D clipRect,
+                                              Shape shape) {
+///*JDK12IMPORTS
+        // really bogus implementation right now:  basically only
+        // draws carets from a TextLayout.
+        // Oh yeah, it doesn't really clip correctly either...
+
+        PathIterator pathIter = shape.getPathIterator(null);
+        float[] points = new float[6];
+
+        int type = pathIter.currentSegment(points);
+        if (type != PathIterator.SEG_MOVETO) {
+            throw new Error(excuse);
+        }
+        float x1 = points[0] + dx;
+        float y1 = points[1] + dy;
+
+        if (pathIter.isDone()) {
+            throw new Error(excuse);
+        }
+
+        pathIter.next();
+        type = pathIter.currentSegment(points);
+        if (type != PathIterator.SEG_LINETO) {
+            throw new Error(excuse);
+        }
+        float x2 = points[0] + dx;
+        float y2 = points[1] + dy;
+
+        float minY = (float) clipRect.getY();
+        float maxY = (float) clipRect.getMaxY();
+
+        // Now clip within vertical limits in clipRect
+        if (y1 == y2) {
+            if (y1 < minY || y1 >= maxY) {
+                return;
+            }
+        }
+        else {
+            if (y1 > y2) {
+                float t = x1;
+                x1 = x2;
+                x2 = t;
+                t = y1;
+                y1 = y2;
+                y2 = t;
+            }
+
+            float invSlope = (x2-x1) / (y2-y1);
+            if (y1 < minY) {
+                x1 -= (minY-y1) * invSlope;
+                y1 = minY;
+            }
+            if (y2 >= maxY) {
+                x1 += (y2-maxY) * invSlope;
+                y2 = maxY;
+            }
+        }
+
+        g.draw(new Line2D.Float(x1, y1, x2, y2));
+//JDK12IMPORTS*/
+/*JDK11IMPORTS
+        g.setClip(clipRect);
+        g.translate(dx, dy);
+        try {
+            g.draw(shape);
+        }
+        finally {
+            g.translate(-dx, -dy);
+        }
+JDK11IMPORTS*/
+    }
+}
diff --git a/src/com/ibm/richtext/textformat/DefaultCharacterMetric.java b/src/com/ibm/richtext/textformat/DefaultCharacterMetric.java
new file mode 100755
index 0000000..2aef245
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/DefaultCharacterMetric.java
@@ -0,0 +1,95 @@
+/*
+ * @(#)$RCSfile: DefaultCharacterMetric.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.richtext.textformat;
+
+import java.util.Hashtable;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+///*JDK12IMPORTS
+import java.awt.font.FontRenderContext;
+import java.awt.font.TextLayout;
+//JDK12IMPORTS*/
+
+/*JDK11IMPORTS
+import com.ibm.textlayout.FontRenderContext;
+import com.ibm.textlayout.TextLayout;
+JDK11IMPORTS*/
+
+/**
+ * This class is used by the Formatter to estimate the height
+ * of characters in a particular style.
+ */
+final class DefaultCharacterMetric {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    
+    final class Metric {
+    
+        private float fAscent;
+        private float fDescent;
+        private float fLeading;
+    
+        private Metric(float ascent, float descent, float leading) {
+    
+            fAscent = ascent;
+            fDescent = descent;
+            fLeading = leading;
+        }
+    
+        public int getAscent() {
+            return (int) Math.ceil(fAscent);
+        }
+    
+        public int getDescent() {
+            return (int) Math.ceil(fDescent);
+        }
+    
+        public int getLeading() {
+            return (int) Math.ceil(fLeading);
+        }
+    }
+    
+    private final Hashtable fCache = new Hashtable();
+    private /*final*/ FontResolver fResolver;
+    private /*final*/ FontRenderContext fFrc;
+    
+    public DefaultCharacterMetric(FontResolver resolver,
+                                  FontRenderContext frc) {
+    
+        fResolver = resolver;
+        fFrc = frc;
+    }
+    
+    /**
+     * Get a DefaultCharacterMetric instance for the given style.  The
+     * style is first resolved with FontResolver.
+     */
+    public Metric getMetricForStyle(AttributeMap style) {
+
+        style = fResolver.applyFont(style);
+        Metric metric = (Metric) fCache.get(style);
+        if (metric == null) {
+            TextLayout layout = new TextLayout(" ", style, fFrc);
+            metric = new Metric(layout.getAscent(),
+                                layout.getDescent(),
+                                layout.getLeading());
+            fCache.put(style, metric);
+        }
+        return metric;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textformat/FontResolver.java b/src/com/ibm/richtext/textformat/FontResolver.java
new file mode 100755
index 0000000..9e86cae
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/FontResolver.java
@@ -0,0 +1,85 @@
+/*
+ * @(#)$RCSfile: FontResolver.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.richtext.textformat;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import com.ibm.textlayout.FontUtils;
+
+import java.util.Hashtable;
+import java.awt.Font;
+
+final class FontResolver {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    static {
+// Even though it violates the Prime Directive I'll conditionalize
+// this anyway, since it is just a 1.2 workaround which I greatly
+// resent.
+///*JDK12IMPORTS
+        java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
+//JDK12IMPORTS*/
+    }
+
+    private Hashtable styleMap;
+    private final AttributeMap fDefaultFontMap;
+
+    public FontResolver(AttributeMap defaults) {
+
+        styleMap = new Hashtable();
+        Hashtable tempMap = new Hashtable();
+        tempMap.put(TextAttribute.FAMILY, defaults.get(TextAttribute.FAMILY));
+        tempMap.put(TextAttribute.WEIGHT, defaults.get(TextAttribute.WEIGHT));
+        tempMap.put(TextAttribute.POSTURE, defaults.get(TextAttribute.POSTURE));
+        tempMap.put(TextAttribute.SIZE, defaults.get(TextAttribute.SIZE));
+        fDefaultFontMap = new AttributeMap(tempMap);
+    }
+
+    /**
+     * Fetch result of resolve(style) from cache, if present.
+     */
+    public AttributeMap applyFont(AttributeMap style) {
+
+        Object cachedMap = styleMap.get(style);
+
+        if (cachedMap == null) {
+            AttributeMap resolvedMap = resolve(style);
+            styleMap.put(style, resolvedMap);
+            return resolvedMap;
+        }
+        else {
+            return (AttributeMap) cachedMap;
+        }
+    }
+
+    /**
+     * Return an AttributeMap containing a Font computed from the
+     * attributes in <tt>style</tt>.
+     */
+    public AttributeMap resolve(AttributeMap style) {
+
+        if (style.get(TextAttribute.FONT) != null) {
+            return style;
+        }
+
+        Font font = FontUtils.getFont(fDefaultFontMap.addAttributes(style));
+
+        return style.addAttribute(TextAttribute.FONT, font);
+    }
+}
diff --git a/src/com/ibm/richtext/textformat/LayoutInfo.java b/src/com/ibm/richtext/textformat/LayoutInfo.java
new file mode 100755
index 0000000..0a690ea
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/LayoutInfo.java
@@ -0,0 +1,199 @@
+/*
+ * @(#)$RCSfile: LayoutInfo.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+/** LayoutInfo
+
+    A line of text, possibly containing tab-segments.
+*/
+
+package com.ibm.richtext.textformat;
+
+import java.awt.Color;
+import java.awt.Rectangle;
+
+///*JDK12IMPORTS
+import java.awt.Graphics2D;
+//JDK12IMPORTS*/
+
+/*JDK11IMPORTS
+import com.ibm.textlayout.Graphics2D;
+JDK11IMPORTS*/
+
+import com.ibm.richtext.styledtext.MConstText;
+
+abstract class LayoutInfo
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private int fCharStart;       // offset in text to start of line (was fStart)
+                                  // neg. values indicate distance from end of text
+    private int fGraphicStart;    // min pixel offset in fill direction
+                                  // negative values indicate distance from bottom of text view
+
+    /*
+        These methods are for storing Layouts in a gap-storage,
+        relative to either the start of end of text.  See AsyncFormatter.
+
+        If you just want absolute (that is, start-relative) char and
+        graphic starts, don't make them end-relative.
+    */
+
+    public final int getCharStart(int lengthBasis) {
+
+        if (fCharStart >= 0) {
+            return fCharStart;
+        }
+        else {
+            return lengthBasis + fCharStart;
+        }
+    }
+
+    public final int getGraphicStart(int graphicBasis) {
+
+        if (fGraphicStart >= 0) {
+            return fGraphicStart;
+        }
+        else {
+            return graphicBasis + fGraphicStart;
+        }
+    }
+
+    public final void setCharStart(int beginningRelativeStart) {
+
+        if (beginningRelativeStart < 0) {
+            throw new IllegalArgumentException("charStart must be nonnegavitve");
+        }
+        fCharStart = beginningRelativeStart;
+    }
+
+    public final void setGraphicStart(int beginningRelativeStart) {
+
+        if (beginningRelativeStart < 0) {
+            throw new IllegalArgumentException("charStart must be nonnegavitve");
+        }
+        fGraphicStart = beginningRelativeStart;
+    }
+
+    public final void makeRelativeToBeginning(int lengthBasis,
+                                              int graphicBasis) {
+
+        if (lengthBasis < 0 || graphicBasis < 0) {
+            throw new IllegalArgumentException("Bases must be positive.");
+        }
+        if (fCharStart >= 0 || fGraphicStart >= 0) {
+            throw new Error("Already start-relative.");
+        }
+
+        fCharStart += lengthBasis;
+        fGraphicStart += graphicBasis;
+    }
+
+    public final void makeRelativeToEnd(int lengthBasis,
+                                        int graphicBasis) {
+
+        if (lengthBasis < 0 || graphicBasis < 0) {
+            throw new IllegalArgumentException("Bases must be positive.");
+        }
+        if (fCharStart < 0 || fGraphicStart < 0) {
+            throw new Error("Already end-relative.");
+        }
+
+        fCharStart -= lengthBasis;
+        fGraphicStart -= graphicBasis;
+    }
+
+
+    public abstract int getCharLength();
+    public abstract int getAscent();
+    public abstract int getDescent();
+    public abstract int getLeading();
+
+    public abstract int getVisibleAdvance();
+    public abstract int getTotalAdvance();
+    public abstract int getLeadingMargin();
+
+    public abstract boolean isLeftToRight();
+
+    public int getHeight() {
+
+        return getAscent()+getDescent()+getLeading();
+    }
+
+    /**
+    * Draws text with highlighting.
+    */
+    public void renderWithHighlight(int lengthBasis,
+                                    Graphics2D g,
+                                    int lineBound,
+                                    int x,
+                                    int y,
+                                    TextOffset selStart,
+                                    TextOffset selStop,
+                                    Color highlightColor)
+    {
+    }
+
+    /** Use layout information to render the line at x, y.*/
+
+    public void render(int lengthBasis,
+                       Graphics2D g,
+                       int lineBound,
+                       int x,
+                       int y)
+    {
+    }
+
+    public void renderCaret(MConstText text,
+                            int lengthBasis,
+                            Graphics2D g,
+                            int lineBound,
+                            int x,
+                            int y,
+                            int charOffset,
+                            Color strongCaretColor,
+                            Color weakCaretColor)
+    {
+    }
+
+    /**
+     * Given a point within this line, return the character offset corresponding to that point.
+     *
+     * @param result.  This may be null, in which case a new TextOffset will be allocated.
+     *        This object is modified in place, and also returned as the function result.
+     * @param text Text to inspect.
+     * @param lineX Position on this line relative to top left corner of this line.
+     * @param lineY Position on this line relative to top left corner of this line.
+     */
+    public abstract TextOffset pixelToOffset(int lengthBasis,
+                                             TextOffset result,
+                                             int lineBound,
+                                             int x,
+                                             int y);
+
+    public abstract int strongCaretBaselinePosition(int lengthBasis,
+                                                    int lineBound,
+                                                    int charOffset);
+
+    public abstract Rectangle caretBounds(MConstText text,
+                                          int lengthBasis,
+                                          int lineBound,
+                                          int charOffset,
+                                          int x,
+                                          int y);
+    
+    public abstract int getNextOffset(int lengthBasis,
+                                      int charOffset,
+                                      short dir);
+}
diff --git a/src/com/ibm/richtext/textformat/MFormatter.java b/src/com/ibm/richtext/textformat/MFormatter.java
new file mode 100755
index 0000000..77c3593
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/MFormatter.java
@@ -0,0 +1,351 @@
+/*
+ * @(#)$RCSfile: MFormatter.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+
+package com.ibm.richtext.textformat;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Rectangle;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+/**
+*
+* This class formats lines of text to a given length.
+* It provides services needed for static text display,
+* and also editable text, including:  displaying text,
+* reformatting text after an edit, converting between
+* screen locations and offsets into the text, calculating
+* areas of the screen for "highlighting,"  and computing
+* offsets into the text resulting from arrow keys.
+* <p>
+* Text clients instantiate this class with an
+* <tt>MConstText</tt> object and a format width.  Text
+* can be formatted such that all lines fit within the
+* format length.  Alternatively, text can be formatted
+* such that lines end only at the end of paragraphs.
+* <p>
+* The format length is specified with the <tt>setLineBound()</tt>
+* method.
+* <p>
+* Methods in the formatter which interact with the graphics
+* system generally take as a paramter a <tt>Point</tt> object
+* which represents the "origin" of the text display.  The
+* origin represents the location, in the graphics system used to display the text, of
+* the top-left corner of the text.
+* <p>
+* To display the text, call <tt>draw()</tt>, passing the
+* a rectangle in which to draw as a parameter.  Only lines
+* of text in the draw rectangle will be drawn.
+* <p>
+* When the formatter's text changes, it is important to first call
+* <tt>stopBackgroundFormatting()</tt> to prevent the Formatter from
+* accessing the text from a background thread.  After modifications are
+* complete,
+* call the <tt>updateFormat()</tt> method before invoking any other
+* methods of the formatter.  <tt>updateFormat()</tt> reformats the
+* new text, formatting no more text than is necessary.
+* <p>
+* The formatter provides services for responding to user input from the
+* mouse and keyboard.  The method <tt>pointToTextOffset()</tt> converts
+* a screen location to an offset in the text.  The method <tt>textOffsetToPoint</tt>
+* converts an offset in the text to an array of two <tt>Point</tt> objects, which can be
+* used to draw a verticle caret, denoting an insertion point.  <tt>highlightArea</tt>
+* accepts two offsets into the text as paramters, and returns an array of <tt>Polygon</tt>
+* objects representing areas where visual highlighting should be applied.
+* <p>
+* Finally, for
+* keyboard handling, the <tt>findNewInsertionOffset()</tt> method accepts an "initial"
+* offset, a "previous" offset, as well as a direction, and returns a new offset.  The direction
+* can be up, down, left, or right.  The previous offset is the insertion point location, before
+* the arrow key is processed.  The initial offset is the offset where an up or down arrow
+* key sequence began.  Using the initial offset allows for "intelligent" handling of up and down
+* arrow keys.
+* <p>
+* Examples of using the MFormatter class
+* are given in the <tt>AsyncFormatter</tt> class
+* documentation.
+* <p>
+* @author John Raley
+*
+* @see MText
+*/
+
+public abstract class MFormatter {
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    public abstract AttributeMap getDefaultValues();
+
+/**
+* Display text in drawArea, with highlighting.
+* Does not reformat text
+* @param g the Graphics object in which to draw
+* @param drawArea the rectangle, in g's coordinate system, in which to draw
+* @param origin the top-left corner of the text, in g's coordinate system
+* @param selStart the offset where the current selection begins;  pass <tt>null</tt> if no selection
+* @param selStop the offset where the current selection ends
+* @param highlight the color of the highlighting
+*/
+    public abstract void draw(Graphics g, Rectangle drawArea, Point origin,
+            TextOffset selStart, TextOffset selStop, Color highlight);
+
+    public abstract void draw(Graphics g, Rectangle drawArea, Point origin);
+
+/**
+* Specify whether to wrap line at the edge of the destination area.
+* <tt>true</tt> means wrap lines;  <tt>false</tt> means to break lines
+* only when an end-of-line character is reached.
+* @param wrap <tt>true</tt> to break lines at the edge of the destination
+* area;  <tt>false</tt> otherwise.
+*/
+
+    public abstract void setWrap(boolean wrap);
+
+/**
+* Return whether text is wrapped at the edge of the destination area.
+* @see #setWrap
+*/
+    public abstract boolean wrap();
+
+/**
+* Specify the number of pixels along the "line dimension".
+* Lines are formatted to fit within the line dimension.  The
+* line dimension in Roman script is horizontal.
+* @param lineWidth the length, in pixels, to which lines will be formatted
+*/
+    public abstract void setLineBound(int lineBound);
+
+/**
+* Return the number of pixels along the line dimension.
+*/
+    public abstract int lineBound();
+    
+/**
+* Format text down to given height.
+* @param height the height to which text will be formatted
+*/
+    public abstract void formatToHeight(int height);
+
+/**
+* Reformat text after a change.
+* After the formatter's text changes, call this method to reformat.  Does
+* not redraw.
+* @param afStart the offset into the text where modification began;  ie, the
+* first character in the text which is "different" in some way.  Does not
+* have to be nonnegative.
+* @param afLength the number of new or changed characters in the text.  Should never
+* be less than 0.
+* @param viewRect the Rectangle in which the text will be displayed.  This is needed for
+* returning the "damaged" area - the area of the screen in which the text must be redrawn.
+* @param origin the top-left corner of the text, in the display's coordinate system
+* @returns a <tt>Rectangle</tt> which specifies the area in which text must be
+* redrawn to reflect the change to the text.
+*/
+    public abstract Rectangle updateFormat(int afStart,
+                                  int afLength,
+                                  Rectangle viewRect,
+                                  Point origin);
+
+
+    public abstract int minY();
+    
+/**
+ * Return the maximum vertical coordinate of the document area.
+ */
+    public abstract int maxY();
+
+    public abstract int minX();
+
+/**
+ * Return the maximum horizontal coordinate of the document area.
+ */
+    public abstract int maxX();
+
+/**
+* Return the actual pixel length of the text which has been formatted.
+*/
+    public abstract int formattedHeight();
+
+    public static final short eUp = -10, eDown = 10, eLeft = -1, eRight = 1;
+
+/**
+* Given a screen location p, return the offset of the character in the text nearest to p.
+*
+* The offset may or may not include a newline at the end of a line, determined by anchor and infiniteMode.
+* The newline is not included if infiniteMode is true and the anchor is the position before the newline.
+*
+* @param result TextOffset to modify and return.  If null, one will be allocated, modified, and returned.
+* @param px the x component of the point.
+* @param py the y component of the point.
+* @param origin the top-left corner of the text, in the display's coordinate system
+* @param anchor the previous offset.  May be null.  Used to determine whether newlines are included.
+* @param infiniteMode if true, treat newlines at end of line as having infinite width.
+*/
+    public abstract TextOffset pointToTextOffset(TextOffset result, int px, int py, Point origin, TextOffset anchor, boolean infiniteMode);
+
+/**
+* Given an offset, return the Rectangle bounding the caret at the offset.
+* @param offset an offset into the text
+* @param origin the top-left corner of the text, in the display's coordinate system
+* @return a Rectangle bounding the caret.
+*/
+    public abstract Rectangle getCaretRect(TextOffset offset, Point origin);
+
+/**
+* Draw the caret(s) associated with the given offset into the given Graphics.
+* @param g the Graphics to draw into
+* @param offset the offset in the text for which the caret is drawn
+* @param origin the top-left corner of the text, in the display's coordinate system
+* @param strongCaretColor the color of the strong caret
+* @param weakCaretColor the color of the weak caret (if any)
+*/
+    public abstract void drawCaret(Graphics g,
+                                   TextOffset offset,
+                                   Point origin,
+                                   Color strongCaretColor,
+                                   Color weakCaretColor);
+
+    /**
+     * @see #getBoundingRect
+     */
+    public static final boolean LOOSE = false;
+    /**
+     * @see #getBoundingRect
+     */
+    public static final boolean TIGHT = true;
+
+/**
+* Given two offsets in the text, return a rectangle which encloses the lines containing the offsets.
+* Offsets do not need to be ordered or nonnegative.
+* @param offset1,offset2 offsets into the text
+* @param origin the top-left corner of the text, in the display's coordinate system
+* @param tight if equal to TIGHT, the bounds is as small as possible.  If LOOSE, the width
+* of the bounds is allowed to be wider than necesary.  Loose bounds are easier to compute.
+* @returns a <tt>Rectangle</tt>, relative to <tt>origin</tt>, which encloses the lines containing the offsets
+*/
+    public abstract Rectangle getBoundingRect(TextOffset offset1,
+                                              TextOffset offset2, 
+                                              Point origin,
+                                              boolean tight);
+
+    public abstract void getBoundingRect(Rectangle boundingRect,
+                                         TextOffset offset1,
+                                         TextOffset offset2,
+                                         Point origin,
+                                         boolean tight);
+
+/**
+* Compute the offset resulting from moving from a previous offset in direction dir.
+* For arrow keys.
+* @param previousOffset the insertion offset prior to the arrow key press
+* @param direction the direction of the arrow key (eUp, eDown, eLeft, or eRight)
+* @returns new offset based on direction and previous offset.
+*/
+    public abstract TextOffset findInsertionOffset(TextOffset result,
+                                          TextOffset previousOffset,
+                                          short direction);
+
+/**
+* Compute the offset resulting from moving from a previous offset, starting at an original offset, in direction dir.
+* For arrow keys.  Use this for "smart" up/down keys.
+* @param result TextOffset to modify and return.  If null, a new TextOffset is created, modified, and returned.
+* @param initialOffset The offset at which an up-down arrow key sequence began.
+* @param previousOffset The insertion offset prior to the arrow key press.
+* @param direction The direction of the arrow key (eUp, eDown, eLeft, or eRight)
+* @returns new offset based on direction and previous offset(s).
+*/
+    public abstract TextOffset findNewInsertionOffset(TextOffset result,
+                                             TextOffset initialOffset,
+                                             TextOffset previousOffset,
+                                             short direction);
+
+/**
+* Return the index of the line containing the given character index.
+* This method has complicated semantics, arising from not knowing 
+* which side of the index to check.  The index will be given an
+* implicit AFTER bias, unless the index is the last index in the text,
+* the text length is non-zero, and there is not a paragraph separator
+* at the end of the text.
+*/
+    public abstract int lineContaining(int index);
+    
+/**
+* Return the index of the line containing the given offset.
+*/
+    public abstract int lineContaining(TextOffset offset);
+
+/**
+* Return the number of lines.
+*/
+    public abstract int getLineCount();
+
+/**
+* Return the index of the first character on the given line.
+*/
+    public abstract int lineRangeLow(int lineNumber);
+
+/**
+* Return the index of the first character following the given line.
+*/
+    public abstract int lineRangeLimit(int lineNumber);
+
+/**
+* Tells the formatter to stop accessing the text until updateFormat is called.
+*/
+    public abstract void stopBackgroundFormatting();
+
+/**
+* Return the line number at the given graphic height.  If height is greater than
+* the text height, maxLineNumber + 1 is returned.
+*/
+    public abstract int lineAtHeight(int height);
+
+/**
+* Return the graphic height where the given line begins.  If the lineNumber is
+* maxLineNumber the entire text height is returned.
+*/
+    public abstract int lineGraphicStart(int lineNumber);
+
+/**
+* Return true if the given line is left-to-right.
+* @param lineNumber a valid line
+* @return true if lineNumber is left-to-right
+*/
+    public abstract boolean lineIsLeftToRight(int lineNumber);
+
+/**
+* Return a new <tt>MFormatter</tt>.
+* @param text the text to format
+* @param defaultValues values to use when certain attributes are not specified. 
+*    <tt>defaultValues</tt> must contain values for the following attributes:
+*    <tt>FAMILY</tt>, <tt>WEIGHT</tt>, <tt>POSTURE</tt>, <tt>SIZE</tt>, <tt>SUPERSCRIPT</tt>, 
+*    <tt>FOREGROUND</tt>, <tt>UNDERLINE</tt>, <tt>STRIKETHROUGH</tt>,
+*    <tt>EXTRA_LINE_SPACING</tt>, <tt>FIRST_LINE_INDENT</tt>,<tt>MIN_LINE_SPACING</tt>,
+*    <tt>LINE_FLUSH</tt>, <tt>LEADING_MARGIN</tt>, <tt>TRAILING_MARGIN</tt>, <tt>TAB_RULER</tt>
+* @param lineBound length to which lines are formatted
+* @param wrap <tt>true</tt> if text should be "line wrapped" (formatted to fit destination area)
+*/
+    public static MFormatter createFormatter(MConstText text,
+                                             AttributeMap defaultValues,
+                                             int lineBound, 
+                                             boolean wrap, 
+                                             Graphics g) {
+                                                
+        return new AsyncFormatter(text, defaultValues, lineBound, wrap, g);
+    }
+}
diff --git a/src/com/ibm/richtext/textformat/MTextIterator.java b/src/com/ibm/richtext/textformat/MTextIterator.java
new file mode 100755
index 0000000..9552d9e
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/MTextIterator.java
@@ -0,0 +1,402 @@
+/*
+ * @(#)$RCSfile: MTextIterator.java,v $ $Revision: 1.2 $ $Date: 2000/04/20 19:23:12 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.richtext.textformat;
+
+import com.ibm.richtext.styledtext.MConstText;
+import java.text.CharacterIterator;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+///*JDK12IMPORTS
+import java.text.AttributedCharacterIterator;
+import java.text.AttributedCharacterIterator.Attribute;
+import java.util.Map;
+import java.util.Set;
+//JDK12IMPORTS*/
+
+/*JDK11IMPORTS
+import com.ibm.textlayout.attributes.AttributedCharacterIterator;
+import com.ibm.textlayout.attributes.AttributedCharacterIterator.Attribute;
+import com.ibm.textlayout.attributes.Map;
+JDK11IMPORTS*/
+
+public final class MTextIterator implements AttributedCharacterIterator,
+                                            Cloneable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    // memory leak, since this cache is never flushed
+
+    private static class Matcher {
+        
+        boolean matches(Map lhs, Map rhs, Object query) {
+            
+            Object lhsVal = lhs.get(query);
+            Object rhsVal = rhs.get(query);
+            
+            if (lhsVal == null) {
+                return rhsVal == null;
+            }
+            else {
+                return lhsVal.equals(rhsVal);
+            }
+        }
+    }
+    
+    private static final Matcher ATTR_MATCHER = new Matcher();
+    
+    // Not quite optimal.  Could have a matcher that would decompose
+    // a set once for repeated queries.  Of course that would require
+    // allocation...
+///*JDK12IMPORTS
+    private static final Matcher SET_MATCHER = new Matcher() {
+        
+        boolean matches(Map lhs, Map rhs, Object query) {
+            
+            // Not using Iterator to simplify 1.1 port.
+            Object[] elements = ((Set)query).toArray();
+            for (int i=0; i < elements.length; i++) {
+                if (!super.matches(lhs, rhs, elements[i])) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    };
+//JDK12IMPORTS*/
+    
+    private final class StyleCache {
+
+        private int fRunStart = 0;
+        private int fRunLimit = -1;
+        private int fRangeStart;
+        private int fRangeLimit;
+        private AttributeMap fStyle;
+
+        StyleCache(MConstText text, int start, int limit) {
+            fText = text;
+            fRangeStart = start;
+            fRangeLimit = limit;
+            update(start);
+        }
+
+        private void update(int pos) {
+            if (pos < fRunStart || pos >= fRunLimit) {
+                AttributeMap style = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+                if (pos < fRangeStart) {
+                    fRunLimit = fRangeStart;
+                    fRunStart = Integer.MIN_VALUE;
+                }
+                else if (pos > fRangeLimit) {
+                    fRunStart = fRangeLimit;
+                    fRunLimit = Integer.MAX_VALUE;
+                }
+                else {
+                    fRunStart = Math.max(fRangeStart, fText.characterStyleStart(pos));
+                    fRunStart = Math.max(fRunStart, fText.paragraphStart(pos));
+                    
+                    fRunLimit = Math.min(fRangeLimit, fText.characterStyleLimit(pos));
+                    fRunLimit = Math.min(fRunLimit, fText.paragraphLimit(pos));
+                    if (fRunStart < fRunLimit) {
+                        style = fText.paragraphStyleAt(pos);
+                        style = style.addAttributes(fText.characterStyleAt(pos));
+                    }
+                }
+                fStyle = fFontResolver.applyFont(style);
+            }
+        }
+
+        int getRunStart(int pos) {
+            update(pos);
+            return fRunStart;
+        }
+
+        int getRunLimit(int pos) {
+            update(pos);
+            return fRunLimit;
+        }
+
+        Map getStyle(int pos) {
+            update(pos);
+            return fStyle;
+        }
+    }
+
+    private MConstText fText;
+    private CharacterIterator fCharIter;
+    private FontResolver fFontResolver;
+    
+    private StyleCache fStyleCache;
+
+    /**
+     * Create an MTextIterator over the range [start, limit).
+     */
+    public MTextIterator(MConstText text, 
+                         FontResolver resolver,
+                         int start, 
+                         int limit) {
+
+        fText = text;
+        fFontResolver = resolver;
+        fCharIter = text.createCharacterIterator(start, limit);
+
+        fStyleCache = new StyleCache(text, start, limit);
+    }
+
+    /**
+     * Sets the position to getBeginIndex() and returns the character at that
+     * position.
+     * @return the first character in the text, or DONE if the text is empty
+     * @see getBeginIndex
+     */
+    public char first() {
+        return fCharIter.first();
+    }
+
+    /**
+     * Sets the position to getEndIndex()-1 (getEndIndex() if the text is empty)
+     * and returns the character at that position.
+     * @return the last character in the text, or DONE if the text is empty
+     * @see getEndIndex
+     */
+    public char last() {
+        return fCharIter.last();
+    }
+
+    /**
+     * Gets the character at the current position (as returned by getIndex()).
+     * @return the character at the current position or DONE if the current
+     * position is off the end of the text.
+     * @see getIndex
+     */
+    public char current() {
+        return fCharIter.current();
+    }
+
+    /**
+     * Increments the iterator's index by one and returns the character
+     * at the new index.  If the resulting index is greater or equal
+     * to getEndIndex(), the current index is reset to getEndIndex() and
+     * a value of DONE is returned.
+     * @return the character at the new position or DONE if the new
+     * position is off the end of the text range.
+     */
+    public char next() {
+        return fCharIter.next();
+    }
+
+    /**
+     * Decrements the iterator's index by one and returns the character
+     * at the new index. If the current index is getBeginIndex(), the index
+     * remains at getBeginIndex() and a value of DONE is returned.
+     * @return the character at the new position or DONE if the current
+     * position is equal to getBeginIndex().
+     */
+    public char previous() {
+        return fCharIter.previous();
+    }
+
+    /**
+     * Sets the position to the specified position in the text and returns that
+     * character.
+     * @param position the position within the text.  Valid values range from
+     * getBeginIndex() to getEndIndex().  An IllegalArgumentException is thrown
+     * if an invalid value is supplied.
+     * @return the character at the specified position or DONE if the specified position is equal to getEndIndex()
+     */
+    public char setIndex(int position) {
+        return fCharIter.setIndex(position);
+    }
+
+    /**
+     * Returns the start index of the text.
+     * @return the index at which the text begins.
+     */
+    public int getBeginIndex() {
+        return fCharIter.getBeginIndex();
+    }
+
+    /**
+     * Returns the end index of the text.  This index is the index of the first
+     * character following the end of the text.
+     * @return the index after the last character in the text
+     */
+    public int getEndIndex() {
+        return fCharIter.getEndIndex();
+    }
+
+    /**
+     * Returns the current index.
+     * @return the current index.
+     */
+    public int getIndex() {
+        return fCharIter.getIndex();
+    }
+
+    /**
+     * Returns the index of the first character of the run
+     * with respect to all attributes containing the current character.
+     */
+    public int getRunStart() {
+        return fStyleCache.getRunStart(fCharIter.getIndex());
+    }
+
+    /**
+     * Returns the index of the first character of the run
+     * with respect to the given attribute containing the current character.
+     */
+    public int getRunStart(Object attribute) {
+
+        return getRunStart(attribute, ATTR_MATCHER);
+    }
+
+    /**
+     * Returns the index of the first character of the run
+     * with respect to the given attribute containing the current character.
+     */
+///*JDK12IMPORTS
+    public int getRunStart(Attribute attribute) {
+
+        return getRunStart(attribute, ATTR_MATCHER);
+    }
+//JDK12IMPORTS*/
+
+    /**
+     * Returns the index of the first character of the run
+     * with respect to the given attributes containing the current character.
+     */
+///*JDK12IMPORTS
+    public int getRunStart(Set attributes) {
+
+        return getRunStart(attributes, SET_MATCHER);
+    }
+//JDK12IMPORTS*/
+    
+    private int getRunStart(Object query, Matcher matcher) {
+
+        int runStart = getRunStart();
+        int rangeStart = getBeginIndex();
+        Map initialStyle = getAttributes();
+        
+        while (runStart > rangeStart) {
+            AttributeMap style = fText.characterStyleAt(runStart-1);
+            if (!matcher.matches(initialStyle, style, query)) {
+                return runStart;
+            }
+            runStart = fText.characterStyleStart(runStart-1);
+        }
+        return rangeStart;
+    }
+    
+    /**
+     * Returns the index of the first character following the run
+     * with respect to all attributes containing the current character.
+     */
+    public int getRunLimit() {
+        return fStyleCache.getRunLimit(fCharIter.getIndex());
+    }
+
+    /**
+     * Returns the index of the first character following the run
+     * with respect to the given attribute containing the current character.
+     */
+    public int getRunLimit(Object attribute) {
+        
+        return getRunLimit(attribute, ATTR_MATCHER);
+    }
+
+    /**
+     * Returns the index of the first character following the run
+     * with respect to the given attribute containing the current character.
+     */
+///*JDK12IMPORTS
+    public int getRunLimit(Attribute attribute) {
+        
+        return getRunLimit(attribute, ATTR_MATCHER);
+    }
+//JDK12IMPORTS*/
+
+    /**
+     * Returns the index of the first character following the run
+     * with respect to the given attributes containing the current character.
+     */
+///*JDK12IMPORTS
+    public int getRunLimit(Set attributes) {
+        
+        return getRunLimit(attributes, SET_MATCHER);
+    }
+//JDK12IMPORTS*/
+
+    private int getRunLimit(Object query, Matcher matcher) {
+
+        int runLimit = getRunLimit();
+        int rangeLimit = getEndIndex();
+        Map initialStyle = getAttributes();
+        
+        while (runLimit < rangeLimit) {
+            AttributeMap style = fText.characterStyleAt(runLimit);
+            if (!matcher.matches(initialStyle, style, query)) {
+                return runLimit;
+            }
+            runLimit = fText.characterStyleLimit(runLimit);
+        }
+        return rangeLimit;
+    }
+    
+    /**
+     * Returns a map with the attributes defined on the current
+     * character.
+     */
+    public Map getAttributes() {
+        return fStyleCache.getStyle(fCharIter.getIndex());
+    }
+
+    /**
+     * Returns the value of the named attribute for the current character.
+     * Returns null if the attribute is not defined.
+     * @param attribute the key of the attribute whose value is requested.
+     */
+    public Object getAttribute(Object attribute) {
+        return getAttributes().get(attribute);
+    }
+
+    /**
+     * Returns the value of the named attribute for the current character.
+     * Returns null if the attribute is not defined.
+     * @param attribute the key of the attribute whose value is requested.
+     */
+    public Object getAttribute(Attribute attribute) {
+        return getAttributes().get(attribute);
+    }
+
+    /**
+     * Returns the keys of all attributes defined on the
+     * iterator's text range. The set is empty if no
+     * attributes are defined.
+     */
+///*JDK12IMPORTS
+    public Set getAllAttributeKeys() {
+        throw new Error("Implement this method!");
+    }
+//JDK12IMPORTS*/
+
+    public Object clone() {
+        return new MTextIterator(fText,
+                                 fFontResolver,
+                                 getBeginIndex(),
+                                 getEndIndex());
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textformat/ParagraphRenderer.java b/src/com/ibm/richtext/textformat/ParagraphRenderer.java
new file mode 100755
index 0000000..f80db02
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/ParagraphRenderer.java
@@ -0,0 +1,84 @@
+/*
+ * @(#)$RCSfile: ParagraphRenderer.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.richtext.textformat;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import java.awt.Color;
+
+///*JDK12IMPORTS
+import java.awt.font.FontRenderContext;
+import java.awt.font.LineBreakMeasurer;
+import java.awt.Graphics2D;
+//JDK12IMPORTS*/
+
+/*JDK11IMPORTS
+import com.ibm.textlayout.FontRenderContext;
+import com.ibm.textlayout.LineBreakMeasurer;
+import com.ibm.textlayout.Graphics2D;
+JDK11IMPORTS*/
+
+/**
+ * ParagraphRenderer is a factory for LayoutInfo objects.
+ */
+abstract class ParagraphRenderer {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    // If renderers can ever travel with their styles, then this attribute will denote a
+    // renderer.  For now, renderers are not added as styles so this isn't needed.
+    //static final TextAttribute PARAGRAPH_RENDERER = new TextAttribute("Paragraph_Renderer") {};
+
+    /**
+     * Reset the renderer to use information from this style. Since renderers may be shared, you should
+     * make sure the renderer is initialized for the style you wish to render before you use it.
+     */
+    public void initRenderer(AttributeMap pStyle) {
+    }
+
+    /**
+     * Return a LayoutInfo for the paragraph represented by
+     * measurer.
+     * @param text the text containing the paragraph
+     * @param layoutToReuse clients can pass in a LayoutInfo
+     * which the ParagraphRenderer may choose to reuse
+     * and return.  If null, a new LayoutInfo will be
+     * created and returned.
+     * @param measurer the LineBreakMeasurer for this paragraph.
+     *  Current position should be the first character on the line.
+     *  If null, a 0-length line is generated.  If measurer is null
+     *  then paragraphStart and paragraphLimit should be equal.
+     * @param frc the FontRenderContext used for measurerment
+     * @param paragraphStart the index in the text where the
+     * current paragraph begins
+     * @param paragraphLimit the index of the first character
+     * after the current paragraph
+     * @param totalFormatWidth the width in which the line should fit
+     * @param lineBound where right-aligned lines are aligned
+     */
+    public abstract LayoutInfo layout(MConstText text,
+                                      LayoutInfo layoutToReuse,
+                                      LineBreakMeasurer measurer,
+                                      FontRenderContext frc,
+                                      int paragraphStart,
+                                      int paragraphLimit,
+                                      int totalFormatWidth,
+                                      int lineBound);
+
+}
diff --git a/src/com/ibm/richtext/textformat/TestMTextIterator.java b/src/com/ibm/richtext/textformat/TestMTextIterator.java
new file mode 100755
index 0000000..edec49c
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/TestMTextIterator.java
@@ -0,0 +1,117 @@
+/*
+ * @(#)$RCSfile: TestMTextIterator.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.richtext.textformat;
+
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+
+import com.ibm.textlayout.attributes.TextAttribute;
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.textpanel.TextPanel;
+
+public class TestMTextIterator {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final FontResolver FONT_MAPPER;
+    static {
+        AttributeMap attrs = TextPanel.getDefaultSettings().getDefaultValues();
+        FONT_MAPPER = new FontResolver(attrs);
+    }
+
+    public static void compareIterToText(MTextIterator iter,
+                                         MConstText text) {
+
+        //System.out.println("Text: " + text);
+        final int beginIndex = iter.getBeginIndex();
+        final int endIndex = iter.getEndIndex();
+
+        char ch = iter.setIndex(beginIndex);
+
+        for (int i=beginIndex; i < endIndex; i++) {
+            //System.out.print(ch+ " ");
+            if (ch != text.at(i)) {
+                throw new Error("Characters are not the same.");
+            }
+            ch = iter.next();
+        }
+
+        if (ch != iter.DONE) {
+            throw new Error("Iterator is not done.");
+        }
+
+        for (int i=endIndex-1; i >= beginIndex; i--) {
+            ch = iter.previous();
+            //System.out.print(ch+ " ");
+            if (ch != text.at(i)) {
+                throw new Error("Backward iteration failed.");
+            }
+        }
+
+        iter.setIndex(beginIndex);
+
+        int runLimit;
+        for (int runStart = beginIndex; runStart < endIndex; runStart = runLimit) {
+
+            runLimit = Math.min(endIndex, text.characterStyleLimit(runStart));
+
+            if (iter.getRunStart() != runStart) {
+                System.out.println(iter.getRunStart() + "; " + runStart);
+                throw new Error("getRunStart is wrong.");
+            }
+            if (iter.getRunLimit() != runLimit) {
+                System.out.println(iter.getRunLimit() + "; " + runLimit);
+                throw new Error("getRunLimit is wrong.");
+            }
+
+            AttributeMap style = text.characterStyleAt(runStart);
+
+            while (iter.getIndex() < runLimit) {
+                AttributeMap resolved = FONT_MAPPER.applyFont(style);
+                if (!iter.getAttributes().equals(resolved)) {
+                    throw new Error("Style is wrong.");
+                }
+                iter.next();
+            }
+        }
+    }
+
+    public void test() {
+
+        AttributeMap bold = new AttributeMap(TextAttribute.WEIGHT,
+                                             TextAttribute.WEIGHT_BOLD);
+        MText text = new StyledText("Hello there!", AttributeMap.EMPTY_ATTRIBUTE_MAP);
+        text.replace(2, 2, 'V', bold);
+
+        MTextIterator iter = new MTextIterator(text, FONT_MAPPER, 0, text.length());
+        compareIterToText(iter, text);
+
+        text.replace(6, 8, new StyledText("ALL_BOLD", bold), 0, 8);
+        iter = new MTextIterator(text, FONT_MAPPER, 1, text.length()-3);
+        compareIterToText(iter, text);
+
+        iter = new MTextIterator(text, FONT_MAPPER, 0, text.length());
+        compareIterToText(iter, text);
+    }
+
+    public static void main(String[] args) {
+
+        new TestMTextIterator().test();
+        System.out.println("PASSED");
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textformat/TextOffset.java b/src/com/ibm/richtext/textformat/TextOffset.java
new file mode 100755
index 0000000..9d1c3eb
--- /dev/null
+++ b/src/com/ibm/richtext/textformat/TextOffset.java
@@ -0,0 +1,198 @@
+/*
+ * @(#)$RCSfile: TextOffset.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:50:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Revision: 03 1.16 richtext/TextOffset.java, richtext, richtext
+
+/*
+    9/5/96 {jbr} added set and equals methods
+*/
+
+package com.ibm.richtext.textformat;
+
+/**
+ * A TextOffset indicates both an integer offset into text and a placement
+ * on one of the characters adjacent to the offset.  An offset is a
+ * position between two characters;  offset n
+ * is between character n-1 and character n.  The placement specifies whether
+ * it is associated with the character
+ * after the offset
+ * (character n) or the character before the offset (character n-1).
+ * <p>
+ * Knowing which character the TextOffset is associated with is necessary
+ * when displaying carets.  In bidirectional text, a single offset may
+ * have two distinct carets.  Also, in multiline text, an offset at a line
+ * break has a possible caret on each line.
+ * <p>
+ * Most clients will not be interested in the placement, and will just use
+ * the offset.
+ */
+public final class TextOffset
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * Indicates that the TextOffset is associated with character
+     * <code>fOffset - 1</code> - ie the character before its offset.
+     */
+    public final static boolean BEFORE_OFFSET = true;
+
+    /**
+     * Indicates that the TextOffset is associated with character
+     * <code>fOffset</code> - ie the character after its offset.
+     */
+    public final static boolean AFTER_OFFSET = false;
+
+    /**
+     * The offset into the text.
+     */
+    public int fOffset = 0;
+
+    /**
+     * The placement - before or after.
+     */
+    public boolean fPlacement = AFTER_OFFSET;
+
+    /**
+    * Constructs a new TextOffset
+    * @param offset the offset into the text to represent.  Placement is implicitly AFTER_OFFSET.
+    */
+    public TextOffset(int offset)
+    {
+        if (offset < 0)
+            throw new IllegalArgumentException("Offset is negative in TextOffset constructor.");
+
+        fOffset = offset;
+
+        fPlacement = AFTER_OFFSET;
+    }
+
+    /**
+    * Constructs a new TextOffset at 0, with placement AFTER_OFFSET.
+    */
+    public TextOffset() {
+        this(0);
+    }
+
+    /**
+    * Constructs a new TextOffset with the given offset and placement.
+    * @param offset the offset into the text
+    * @param placement indicates the position of the caret; one of BEFORE_OFFSET or AFTER_OFFSET
+    */
+    public TextOffset(int offset, boolean placement)
+    {
+        if (offset < 0)
+            throw new IllegalArgumentException("TextOffset constructor offset < 0: " + offset);
+
+        fOffset = offset;
+        fPlacement = placement;
+    }
+
+    /**
+    * Constructs a new TextOffset from an existing one.
+    * @param ths the TextOffset to copy
+    */
+    public TextOffset(TextOffset rhs) {
+
+        this(rhs.fOffset, rhs.fPlacement);
+    }
+
+    /**
+    * Set the value of the TextOffset
+    * @param offset the offset into the text
+    * @param placement indicates the position of the caret; one of BEFORE_OFFSET or AFTER_OFFSET
+    */
+    public void setOffset(int offset, boolean placement)
+    {
+        if (offset < 0)
+            throw new IllegalArgumentException("TextOffset setOffset offset < 0: " + offset);
+
+        fOffset = offset;
+        fPlacement = placement;
+    }
+
+    /**
+     * Compare this to another Object.
+     */
+    public boolean equals(Object other) {
+
+        try {
+            return equals((TextOffset)other);
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+    }
+
+    /**
+    * Return true if offset and placement are the same.
+    *
+    * @param other offset to compare against
+    * @return true if both offsets are equal
+    */
+    public boolean equals(TextOffset other) {
+
+        return fOffset == other.fOffset && fPlacement == other.fPlacement;
+    }
+
+    /**
+     * Return the hashCode for this object.
+     */
+    public int hashCode() {
+
+        return fPlacement==AFTER_OFFSET? fOffset : -fOffset;
+    }
+
+    /**
+    * Return true if this offset is 'greaterThan' other.  If the fOffset fields are equal, the
+    * placement field is considered, and AFTER_OFFSET is considered 'greaterThan' BEFORE_OFFSET.
+    *
+    * @param other the other offset
+    * @return true if this offset appears after other
+    */
+    public boolean greaterThan(TextOffset other)
+    {
+        return fOffset > other.fOffset ||
+            (fOffset == other.fOffset && fPlacement == AFTER_OFFSET && other.fPlacement == BEFORE_OFFSET);
+    }
+
+    /**
+    * Return true if this offset is 'lessThan' other.  If the fOffset fields are equal, the
+    * placement field is considered, and BEFORE_OFFSET is considered 'lessThan' AFTER_OFFSET.
+    *
+    * @param other the other offset
+    * @return true if this offset appears before other
+    */
+    public boolean lessThan(TextOffset other) {
+
+        return fOffset < other.fOffset ||
+            (fOffset == other.fOffset && fPlacement == BEFORE_OFFSET && other.fPlacement == AFTER_OFFSET);
+    }
+
+    /**
+    * Copy the value of another TextOffset into this
+    * @param other the TextOffset to copy
+    */
+    public void assign(TextOffset other) {
+        fOffset = other.fOffset;
+        fPlacement = other.fPlacement;
+    }
+
+    /**
+    * Return a string representation of this object.
+    */
+    public String toString() {
+
+        return "[" + (fPlacement ? "before " : "after ") + fOffset + "]";
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/ATextPanelImpl.java b/src/com/ibm/richtext/textpanel/ATextPanelImpl.java
new file mode 100755
index 0000000..e142700
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/ATextPanelImpl.java
@@ -0,0 +1,755 @@
+/*
+ * @(#)$RCSfile: ATextPanelImpl.java,v $ $Revision: 1.2 $ $Date: 2000/04/22 17:10:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Adjustable;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.datatransfer.Clipboard;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.AttributeSet;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.textformat.TextOffset;
+
+/**
+ * Implementation class for TextPanel and JTextPanel.
+ */
+final class ATextPanelImpl {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+                
+    private RunStrategy fRunStrategy = null;
+    private TextComponent fTextComponent = null;
+    private TextSelection fSelection = null;
+    private TextEditBehavior fEditBehavior = null;
+    private MText fText = null;
+
+    private PanelEventBroadcaster fBroadcaster;
+    private KeyRemap fRemap = KeyRemap.getIdentityRemap();
+
+    // This is a little ugly.  TextPanel supports its modified
+    // flag whether or not it is editable, or even selectable.
+    // So if there's no command log to keep track of the flag
+    // state then its done right here in TextPanel.  If the
+    // panel is editable this flag is ignored.
+    private boolean fModified = false;
+
+    static final TextPanelSettings fgDefaultSettings = new TextPanelSettings();
+
+    static TextPanelSettings getDefaultSettings() {
+
+        return (TextPanelSettings) fgDefaultSettings.clone();
+    }
+    
+    ATextPanelImpl(RunStrategy runStrategy,
+                   TextPanelSettings settings,
+                   MConstText initialText,
+                   Clipboard clipboard,
+                   MTextPanel client,
+                   Adjustable horzSb,
+                   Adjustable vertSb) {
+                    
+        fRunStrategy = runStrategy;
+        fBroadcaster = new PanelEventBroadcaster(client);
+
+        Scroller scroller = null;
+        if (settings.getScrollable()) {
+            scroller = new Scroller(horzSb, vertSb);
+        }
+
+        StyledTextClipboard textClipboard =
+                            StyledTextClipboard.getClipboardFor(clipboard);
+
+        fText = new StyledText();
+        if (initialText != null) {
+            fText.append(initialText);
+        }
+
+        fTextComponent = new TextComponent(fText,
+                                           settings.getDefaultValues(),
+                                           settings.getWraps(),
+                                           TextComponent.WINDOW_WIDTH,
+                                           TextComponent.DEFAULT_INSET,
+                                           textClipboard,
+                                           settings.getScrollable(),
+                                           scroller,
+                                           fBroadcaster);
+
+        if (scroller != null) {
+            scroller.setClient(fTextComponent);
+        }
+        
+        // May have to wait until component has host to do this:
+        if (settings.getSelectable()) {
+            fSelection = new TextSelection(fTextComponent, 
+                                           fBroadcaster,
+                                           fRunStrategy);
+            fSelection.addToOwner(fTextComponent);
+            if (settings.getEditable()) {
+                fEditBehavior = new TextEditBehavior(
+                            fTextComponent, fSelection, fBroadcaster, fRemap);
+                fEditBehavior.addToOwner(fTextComponent);
+            }
+        }
+    }
+    
+    FakeComponent getTextComponent() {
+        
+        return fTextComponent;
+    }
+    
+    /**
+     * Add the given TextPanelListener to the listeners which will
+     * receive update notifications from this TextPanel.
+     * @param listener the listener to add
+     */
+    public void addListener(TextPanelListener listener) {
+
+        fBroadcaster.addListener(listener);
+    }
+
+    /**
+     * Remove the given TextPanelListener from the listeners which will
+     * receive update notifications from this TextPanel.
+     * @param listener the listener to remove
+     */
+    public void removeListener(TextPanelListener listener) {
+
+        fBroadcaster.removeListener(listener);
+    }
+
+    /**
+     * You know what this does...
+     */
+    private static int pin(int value, int min, int max) {
+
+        if (min > max) {
+            throw new IllegalArgumentException("Invalid range");
+        }
+
+        if (value < min) {
+            value = min;
+        }
+        else if (value > max) {
+            value = max;
+        }
+        return value;
+    }
+
+//============
+// Text Access
+//============
+
+    /**
+     * Set the document to <tt>newText</tt>.  This operation
+     * modifies the text in the TextPanel.  It does not modify or adopt
+     * <tt>newText</tt>.  This method sets the selection an insertion point at
+     * the end of the text.
+     * @param newText the text which will replace the current text.
+     */
+    public void setText(MConstText newText) {
+
+        replaceRange(newText, 0, getTextLength());
+    }
+
+    /**
+     * Append the given text to the end of the document.  Equivalent to
+     * <tt>insert(newText, getTextLength())</tt>.
+     * @param newText the text to append to the document
+     */
+    public void append(MConstText newText) {
+
+        int length = getTextLength();
+        replaceRange(newText, length, length);
+    }
+
+    /**
+     * Insert the given text into the document at the given position.
+     * Equivalent to
+     * <tt>replaceRange(newText, position, position)</tt>.
+     * @param newText the text to insert into the document.
+     * @param position the position in the document where the
+     *     text will be inserted
+     */
+    public void insert(MConstText newText, int position) {
+
+        replaceRange(newText, position, position);
+    }
+
+    /**
+     * Replace the given range with <tt>newText</tt>.  After this
+     * operation the selection range is an insertion point at the
+     * end of the new text.
+     * @param newText the text with which to replace the range
+     * @param start the beginning of the range to replace
+     * @param end the end of the range to replace
+     */
+    public void replaceRange(MConstText newText, int start, int end) {
+
+        int length = getTextLength();
+
+        start = pin(start, 0, length);
+        end = pin(end, start, length);
+
+        if (fSelection != null) {
+
+            // If we're selectable, but not editable, we'll temporarily
+            // make ourselves editable to change the text.  A little funny
+            // but there's a lot of code for getting caret stuff right,
+            // and this is not a common operation anyway.
+
+            TextEditBehavior behavior;
+
+            if (fEditBehavior == null) {
+                behavior = new TextEditBehavior(fTextComponent, fSelection, fBroadcaster, fRemap);
+                behavior.addToOwner(fTextComponent);
+            }
+            else {
+                behavior = fEditBehavior;
+            }
+
+            TextOffset newSelection = new TextOffset(start + newText.length(),
+                                                     TextOffset.AFTER_OFFSET);
+
+            TextReplacement replacement = new TextReplacement(start, end,
+                                                              newText,
+                                                              newSelection,
+                                                              newSelection);
+
+            fTextComponent.textControlEventOccurred(Behavior.REPLACE,
+                                                    replacement);
+            if (fEditBehavior == null) {
+                behavior.removeFromOwner();
+            }
+        }
+        else {
+
+            MText oldText = fTextComponent.getModifiableText();
+            fTextComponent.stopBackgroundFormatting();
+            oldText.replaceAll(newText);
+            fTextComponent.reformatAndDrawText(0, newText.length(), null, null, null, null);
+        }
+    }
+
+    /**
+     * Return the length of the text document in the TextPanel.
+     * @return the length of the text document in the TextPanel
+     */
+    public int getTextLength() {
+
+        return fTextComponent.getText().length();
+    }
+
+    /**
+     * Return the text document in the TextPanel.
+     * @return the text document in the TextPanel.
+     */
+    public MConstText getText() {
+
+        return fTextComponent.getText();
+    }
+
+//============
+// Selection Access
+//============
+
+    /**
+     * Return the offset of the start of the selection.
+     */
+    public int getSelectionStart() {
+
+        if (fSelection != null) {
+            return fSelection.getStart().fOffset;
+        }
+        else {
+            return 0;
+        }
+    }
+
+    /**
+     * Return the offset of the end of the selection.
+     */
+    public int getSelectionEnd() {
+
+        if (fSelection != null) {
+            return fSelection.getEnd().fOffset;
+        }
+        else {
+            return 0;
+        }
+    }
+
+    /**
+     * Set the beginning of the selection range.  This is
+     * equivalent to <tt>select(selectionStart, getSelectionEnd())</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionStart(int selectionStart) {
+
+        select(selectionStart, getSelectionEnd());
+    }
+
+    /**
+     * Set the end of the selection range.  This is
+     * equivalent to <tt>select(getSelectionStart(), selectionEnd)</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionEnd(int selectionEnd) {
+
+        select(getSelectionStart(), selectionEnd);
+    }
+
+    /**
+     * Set the selection range to an insertion point at the given
+     * offset.  This is equivalent to
+     * <tt>select(position, position)</tt>.
+     * @param position the offset of the new insertion point
+     */
+    public void setCaretPosition(int position) {
+
+        select(position, position);
+    }
+
+    /**
+     * Set the selection range to the given range.  The range start
+     * is pinned between 0 and the text length;  the range end is pinned
+     * between the range start and the end of the text.  These semantics
+     * are identical to those of <tt>java.awt.TextComponent</tt>.
+     * This method has no effect if the text is not selectable.
+     * @param selectionStart the beginning of the selection range
+     * @param selectionEnd the end of the selection range
+     */
+    public void select(int selectionStart, int selectionEnd) {
+
+        int length = getTextLength();
+
+        selectionStart = pin(selectionStart, 0, length);
+        selectionEnd = pin(selectionEnd, selectionStart, length);
+
+        TextRange range = new TextRange(selectionStart, selectionEnd);
+        fTextComponent.textControlEventOccurred(Behavior.SELECT, range);
+    }
+
+    /**
+     * Select all of the text in the document.  This method has no effect if
+     * the text is not selectable.
+     */
+    public void selectAll() {
+
+        select(0, getTextLength());
+    }
+
+
+//============
+// Format Width
+//============
+
+    /**
+     * Return the total format width, in pixels.  The format width is the
+     * width to which text is wrapped.
+     * @return the format width
+     */
+    public int getFormatWidth() {
+
+        return fTextComponent.getFormatWidth();
+    }
+
+    /**
+     * Return true if the paragraph at the given offset is left-to-right.
+     * @param offset an offset in the text
+     * @return true if the paragraph at the given offset is left-to-right
+     */
+    public boolean paragraphIsLeftToRight(int offset) {
+        
+        return fTextComponent.paragraphIsLeftToRight(offset);
+    }
+
+    /**
+     * Return true if there is a change which can be undone.
+     * @return true if there is a change which can be undone.
+     */
+    public boolean canUndo() {
+
+        if (fEditBehavior != null) {
+            return fEditBehavior.canUndo();
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * Return true if there is a change which can be redone.
+     * @return true if there is a change which can be redone.
+     */
+    public boolean canRedo() {
+
+        if (fEditBehavior != null) {
+            return fEditBehavior.canRedo();
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * Return true if the clipboard contains contents which could be
+     * transfered into the text.
+     * @return true if the clipboard has text content.
+     */
+    public boolean clipboardNotEmpty() {
+
+        return fTextComponent.getClipboard().hasContents();
+    }
+
+    /**
+     * Return an AttributeMap of keys with default values.  The default
+     * values are used when displaying text for values which are not
+     * specified in the text.
+     * @return an AttributeMap of default key-value pairs
+     */
+    public AttributeMap getDefaultValues() {
+
+        return fTextComponent.getDefaultValues();
+    }
+    
+    private static boolean objectsAreEqual(Object lhs, Object rhs) {
+    
+        if (lhs == null) {
+            return rhs == null;
+        }
+        else {
+            return lhs.equals(rhs);
+        }
+    }
+
+    private static Object consistentCharStyle(MConstText text,
+                                              int start,
+                                              int limit,
+                                              Object key,
+                                              Object defaultValue) {
+
+        if (start >= limit) {
+            throw new IllegalArgumentException("Invalid range.");
+        }
+
+        int runStart = start;
+        Object initialValue = text.characterStyleAt(runStart).get(key);
+
+        if (initialValue == null) {
+            initialValue = defaultValue;
+        }
+
+        for (runStart = text.characterStyleLimit(runStart);
+             runStart < limit;
+             runStart = text.characterStyleLimit(runStart)) {
+
+            Object nextValue = text.characterStyleAt(runStart).get(key);
+
+            if (nextValue == null) {
+                nextValue = defaultValue;
+            }
+
+            if (!objectsAreEqual(initialValue, nextValue)) {
+                return MTextPanel.MULTIPLE_VALUES;
+            }
+        }
+
+        return initialValue;
+    }
+
+    /**
+     * This method inspects the character style runs in the selection
+     * range (or the typing style at the insertion point) and returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li>null, if two or more style runs have different values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be <tt>defaultStyle</tt>.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @param defaultValue the implicit value of <tt>key</tt> in
+     *     style runs where <tt>key</tt> is not defined
+     */
+    public Object getCharacterStyleOverSelection(Object key) {
+
+        TextRange selRange;
+        if (fSelection != null)
+            selRange = fSelection.getSelectionRange();
+        else
+            selRange = new TextRange(0, 0);
+
+        if (selRange.start == selRange.limit) {
+
+            AttributeMap compStyle;
+
+            if (fEditBehavior != null) {
+                compStyle = fEditBehavior.getInsertionPointStyle();
+            }
+            else {
+                compStyle = TextEditBehavior.typingStyleAt(fText, selRange.start, selRange.limit);
+            }
+
+            Object value = compStyle.get(key);
+            return value==null? getDefaultValues().get(key) : value;
+        }
+        else {
+            return consistentCharStyle(fText, 
+                                       selRange.start,
+                                       selRange.limit,
+                                       key,
+                                       getDefaultValues().get(key));
+        }
+    }
+
+    /**
+     * This method inspects the paragraph style runs in the selection
+     * range (or the typing style at the insertion point) and returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li>null, if two or more style runs have different values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be <tt>defaultStyle</tt>.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @param defaultValue the implicit value of <tt>key</tt> in
+     *     style runs where <tt>key</tt> is not defined
+     */
+    public Object getParagraphStyleOverSelection(Object key) {
+
+        TextRange selRange;
+        if (fSelection != null) {
+            selRange = fSelection.getSelectionRange();
+        }
+        else {
+            selRange = new TextRange(0, 0);
+        }
+
+        if (selRange.start == selRange.limit) {
+            AttributeMap pStyle = fText.paragraphStyleAt(selRange.start);
+            Object value = pStyle.get(key);
+            return value==null? getDefaultValues().get(key) : value;
+        }
+        else {
+            int paragraphStart = selRange.start;
+            Object defaultValue = getDefaultValues().get(key);
+            Object initialValue = fText.paragraphStyleAt(paragraphStart).get(key);
+            if (initialValue == null) {
+                initialValue = defaultValue;
+            }
+
+            for (paragraphStart = fText.paragraphLimit(paragraphStart);
+                 paragraphStart < selRange.limit;
+                 paragraphStart = fText.paragraphLimit(paragraphStart)) {
+
+                Object nextValue = fText.paragraphStyleAt(paragraphStart).get(key);
+                if (nextValue == null) {
+                    nextValue = defaultValue;
+                }
+
+                if (!objectsAreEqual(initialValue, nextValue)) {
+                    return MTextPanel.MULTIPLE_VALUES;
+                }
+            }
+
+            return initialValue;
+        }
+    }
+
+    /**
+     * Remove the selected text from the document and place it
+     * on the clipboard.  This method has no effect if the text
+     * is not editable, or if no text is selected.
+     */
+    public void cut() {
+        fTextComponent.textControlEventOccurred(Behavior.CUT, null);
+    }
+
+    /**
+     * Place the selected text on the clipboard.  This method has
+     * no effect if no text is selected.
+     */
+    public void copy() {
+        fTextComponent.textControlEventOccurred(Behavior.COPY, null);
+    }
+
+    /**
+     * Replace the currently selected text with the text on the clipboard.
+     * This method has no effect if the text is not editable, or if no
+     * text is on the clipboard.
+     */
+    public void paste() {
+        fTextComponent.textControlEventOccurred(Behavior.PASTE, null);
+    }
+
+    /**
+     * Remove selected text from the document, without altering the clipboard.
+     * This method has no effect if the
+     * text is not editable.
+     */
+    public void clear() {
+        fTextComponent.textControlEventOccurred(Behavior.CLEAR, null);
+    }
+
+    /**
+     * Undo the most recent text change.  This method has no effect if
+     * there is no change to undo.
+     */
+    public void undo() {
+        fTextComponent.textControlEventOccurred(Behavior.UNDO, null);
+    }
+
+    /**
+     * Redo the most recent text change.  This method has no effect if
+     * there is no change to redo.
+     */
+    public void redo() {
+        fTextComponent.textControlEventOccurred(Behavior.REDO, null);
+    }
+
+    /**
+     * Return the number of commands the command log can hold.
+     * @return the number of commands the command log can hold
+     */
+    public int getCommandLogSize() {
+
+        if (fEditBehavior != null) {
+            return fEditBehavior.getCommandLogSize();
+        }
+        else {
+            return 0;
+        }
+    }
+
+    /**
+     * Set the number of commands the command log can hold.  All
+     * redoable commands are removed when this method is called.
+     * @param size the number of commands kept in the command log
+     */
+    public void setCommandLogSize(int size) {
+        fTextComponent.textControlEventOccurred(Behavior.SET_COMMAND_LOG_SIZE,
+                                                new Integer(size));
+    }
+
+    /**
+     * Remove all commands from the command log.
+     */
+    public void clearCommandLog() {
+        fTextComponent.textControlEventOccurred(Behavior.CLEAR_COMMAND_LOG, null);
+    }
+
+    /**
+     * Modify the character styles on the selected characters.  If no characters
+     * are selected, modify the typing style.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyCharacterStyleOnSelection(StyleModifier modifier) {
+        fTextComponent.textControlEventOccurred(Behavior.CHARACTER_STYLE_MOD, modifier);
+    }
+
+    /**
+     * Modify the paragraph styles in paragraphs containing selected characters, or
+     * the paragraph containing the insertion point.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyParagraphStyleOnSelection(StyleModifier modifier) {
+        fTextComponent.textControlEventOccurred(Behavior.PARAGRAPH_STYLE_MOD, modifier);
+    }
+
+    /**
+     * Return the KeyRemap used to process key events.
+     * @return the key remap used to process key events
+     * @see #setKeyRemap
+     */
+    public KeyRemap getKeyRemap() {
+
+        return fRemap;
+    }
+
+    /**
+     * Use the given KeyRemap to map key events to characters.
+     * Only key
+     * events are affected by the remap;  other text entering the
+     * control (via the clipboard, for example) is not affected
+     * by the KeyRemap.
+     * <p>
+     * Do not pass <tt>null</tt> to this method to leave key
+     * events unmapped.  Instead, use <tt>KeyRemap.getIdentityRemap()</tt>
+     * @param remap the KeyRemap to use for mapping key events to characters
+     * @exception java.lang.NullPointerException if parameter is null
+     * @see KeyRemap
+     */
+    public void setKeyRemap(KeyRemap remap) {
+
+        if (remap == null) {
+            throw new NullPointerException("remap can't be null");
+        }
+
+        fRemap = remap;
+        if (fEditBehavior != null) {
+            fEditBehavior.setKeyRemap(remap);
+        }
+
+        fBroadcaster.textStateChanged(TextPanelEvent.KEYREMAP_CHANGED);
+    }
+
+    /**
+     * Return the modification flag of the current text change.
+     * @see #setModified
+     */
+    public boolean isModified() {
+
+        if (fEditBehavior != null) {
+            return fEditBehavior.isModified();
+        }
+        else {
+            return fModified;
+        }
+    }
+
+    /**
+     * Set the modification flag of the current text change.
+     */
+    public void setModified(boolean modified) {
+
+        boolean handled = fTextComponent.textControlEventOccurred(
+                                    Behavior.SET_MODIFIED,
+                                    modified? Boolean.TRUE : Boolean.FALSE);
+        if (!handled) {
+            fModified = modified;
+        }
+    }
+
+    /**
+     * This method is for perf-testing only!
+     */
+    void handleKeyEvent(java.awt.event.KeyEvent keyEvent) {
+    
+        Component host = fTextComponent.getHost();
+        if (host != null) {
+            host.dispatchEvent(keyEvent);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/ArabicTransliteration.java b/src/com/ibm/richtext/textpanel/ArabicTransliteration.java
new file mode 100755
index 0000000..3e2831b
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/ArabicTransliteration.java
@@ -0,0 +1,180 @@
+/*
+ * @(#)$RCSfile: ArabicTransliteration.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+ *
+ * (C) Copyright IBM Corp. 1998, All Rights Reserved
+ */
+
+package com.ibm.richtext.textpanel;
+
+/*
+For any incoming character C
+if you can map C using the following FakeArabicTable, return
+FakeArabicTable(C)
+else if C is from A through Z, return FakeArabicTable(lowercase(C))
+else just return C
+
+
+FakeArabicTable is defined by the following mapping
+
+0   0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+1   0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+2   0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+3   0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+4   0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+5   0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+6   0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+7   0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+8   0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+9   0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+
+%   066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+.   066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+,   060C;ARABIC COMMA;Po;0;R;;;;;N;;;;;
+-   0640;ARABIC TATWEEL;Lm;0;R;;;;;N;;;;;
+'   0652;ARABIC SUKUN;Mn;34;R;;;;;N;;;;;
+"   0651;ARABIC SHADDA;Mn;33;R;;;;;N;ARABIC SHADDAH;;;;
+;   061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;;
+?   061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;;
+
+a   0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;;
+A   0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+b   0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+c   0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;;
+d   062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;;
+D   0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;;
+E   064B;ARABIC FATHATAN;Mn;27;R;;;;;N;;;;;
+e   064E;ARABIC FATHA;Mn;30;R;;;;;N;ARABIC FATHAH;;;;
+f   0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+g   063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;;
+h   062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;;
+H   0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;;
+I   064D;ARABIC KASRATAN;Mn;29;R;;;;;N;;;;;
+i   0650;ARABIC KASRA;Mn;32;R;;;;;N;ARABIC KASRAH;;;;
+j   062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;;
+K   062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;;
+k   0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;;
+l   0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;;
+m   0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;;
+n   0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;;
+o   064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;;
+p   0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+q   0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;;
+r   0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;;
+s   0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+S   0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;;
+t   062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;;
+T   062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;;
+U   064C;ARABIC DAMMATAN;Mn;28;R;;;;;N;;;;;
+u   064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;;
+v   0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+w   0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+x   0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+y   064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;;
+z   0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;;
+Z   0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;;
+
+*/
+
+/**
+ * This class implements KeyRemap to produce transliterated Arabic
+ * characters from Latin-1 characters.
+ */
+
+final class ArabicTransliteration extends KeyRemap {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public char remap(char c) {
+
+        switch (c) {
+            case '0': return '\u0660'; // ARABIC-INDIC DIGIT ZERO
+            case '1': return '\u0661'; // ARABIC-INDIC DIGIT ONE
+            case '2': return '\u0662'; // ARABIC-INDIC DIGIT TWO
+            case '3': return '\u0663'; // ARABIC-INDIC DIGIT THREE
+            case '4': return '\u0664'; // ARABIC-INDIC DIGIT FOUR
+            case '5': return '\u0665'; // ARABIC-INDIC DIGIT FIVE
+            case '6': return '\u0666'; // ARABIC-INDIC DIGIT SIX
+            case '7': return '\u0667'; // ARABIC-INDIC DIGIT SEVEN
+            case '8': return '\u0668'; // ARABIC-INDIC DIGIT EIGHT
+            case '9': return '\u0669'; // ARABIC-INDIC DIGIT NINE
+
+            case '%': return '\u066A'; // ARABIC PERCENT SIGN
+            // the Traditional Arabic font does not contain this character
+            // case '.': return '\u066B'; // ARABIC DECIMAL SEPARATOR
+            case ',': return '\u060C'; // ARABIC COMMA
+            case '-': return '\u0640'; // ARABIC TATWEEL
+            case '\'': return '\u0652'; // ARABIC SUKUN
+            case '"': return '\u0651'; // ARABIC SHADDA
+            case ';': return '\u061B'; // ARABIC SEMICOLON
+            case '?': return '\u061F'; // ARABIC QUESTION MARK
+
+            case 'a': return '\u0627'; // ARABIC LETTER ALEF
+            case 'A': return '\u0639'; // ARABIC LETTER AIN
+            case 'b': return '\u0628'; // ARABIC LETTER BEH
+            case 'B': return '\u0628'; // ARABIC LETTER BEH
+            case 'c': return '\u0635'; // ARABIC LETTER SAD
+            case 'C': return '\u0635'; // ARABIC LETTER SAD
+            case 'd': return '\u062F'; // ARABIC LETTER DAL
+            case 'D': return '\u0630'; // ARABIC LETTER THAL
+            case 'e': return '\u064E'; // ARABIC FATHA
+            case 'E': return '\u064B'; // ARABIC FATHATAN
+            case 'f': return '\u0641'; // ARABIC LETTER FEH
+            case 'F': return '\u0641'; // ARABIC LETTER FEH
+            case 'g': return '\u063A'; // ARABIC LETTER GHAIN
+            case 'G': return '\u063A'; // ARABIC LETTER GHAIN
+            case 'h': return '\u062D'; // ARABIC LETTER HAH
+            case 'H': return '\u0647'; // ARABIC LETTER HEH
+            case 'i': return '\u0650'; // ARABIC KASRA
+            case 'I': return '\u064D'; // ARABIC KASRATAN
+            case 'j': return '\u062C'; // ARABIC LETTER JEEM
+            case 'J': return '\u062C'; // ARABIC LETTER JEEM
+            case 'k': return '\u0643'; // ARABIC LETTER KAF
+            case 'K': return '\u062E'; // ARABIC LETTER KHAH
+            case 'l': return '\u0644'; // ARABIC LETTER LAM
+            case 'L': return '\u0644'; // ARABIC LETTER LAM
+            case 'm': return '\u0645'; // ARABIC LETTER MEEM
+            case 'M': return '\u0645'; // ARABIC LETTER MEEM
+            case 'n': return '\u0646'; // ARABIC LETTER NOON
+            case 'N': return '\u0646'; // ARABIC LETTER NOON
+            case 'o': return '\u064F'; // ARABIC DAMMA
+            case 'O': return '\u064F'; // ARABIC DAMMA
+            case 'p': return '\u0628'; // ARABIC LETTER BEH
+            case 'P': return '\u0628'; // ARABIC LETTER BEH
+            case 'q': return '\u0642'; // ARABIC LETTER QAF
+            case 'Q': return '\u0642'; // ARABIC LETTER QAF
+            case 'r': return '\u0631'; // ARABIC LETTER REH
+            case 'R': return '\u0631'; // ARABIC LETTER REH
+            case 's': return '\u0633'; // ARABIC LETTER SEEN
+            case 'S': return '\u0634'; // ARABIC LETTER SHEEN
+            case 't': return '\u062A'; // ARABIC LETTER TEH
+            case 'T': return '\u062B'; // ARABIC LETTER THEH
+            case 'U': return '\u064C'; // ARABIC DAMMATAN
+            case 'u': return '\u064F'; // ARABIC DAMMA
+            case 'v': return '\u0641'; // ARABIC LETTER FEH
+            case 'V': return '\u0641'; // ARABIC LETTER FEH
+            case 'w': return '\u0648'; // ARABIC LETTER WAW
+            case 'W': return '\u0648'; // ARABIC LETTER WAW
+            case 'x': return '\u0633'; // ARABIC LETTER SEEN
+            case 'X': return '\u0633'; // ARABIC LETTER SEEN
+            case 'y': return '\u064A'; // ARABIC LETTER YEH
+            case 'Y': return '\u064A'; // ARABIC LETTER YEH
+            case 'z': return '\u0632'; // ARABIC LETTER ZAIN
+            case 'Z': return '\u0638'; // ARABIC LETTER ZAH
+        }
+
+        return c;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/Behavior.java b/src/com/ibm/richtext/textpanel/Behavior.java
new file mode 100755
index 0000000..23c78d4
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/Behavior.java
@@ -0,0 +1,203 @@
+/*
+ * @(#)$RCSfile: Behavior.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Graphics;
+import java.awt.Rectangle;
+
+import java.awt.event.FocusEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+/** A class that handles events for a BehaviorOwner.
+* A behavior enacpsulates some piece of the event-handling logic for a component.
+* This allows the client to separate event-handling logic out into separate classes
+* according to function, or to dynamically change the way a component handles
+* events without adding a lot of special-case code to the panel itself.
+* Behaviors are stored in a linked list, and all behaviors get a crack at an event before
+* the owner gets a crack at them (right now, we rely on objects that implement
+* BehaviorOwner to support these semantics).
+* Behavior provides all the same event-handling functions that Component provides, and
+* they all have exactly the same syntax and semantics. */
+abstract class Behavior {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private Behavior fNextBehavior = null;
+    private BehaviorOwner fOwner = null;
+
+    static class EventType {
+
+        EventType() {
+        }
+    }
+
+    // events - should these be in TextPanel (or elsewhere)?
+
+    // This event's WHAT parameter is a TextRange instance
+    static final EventType SELECT = new EventType();
+
+    // No WHAT param for these:
+    static final EventType CUT = new EventType();
+    static final EventType COPY = new EventType();
+    static final EventType PASTE = new EventType();
+    static final EventType CLEAR = new EventType();
+    static final EventType UNDO = new EventType();
+    static final EventType REDO = new EventType();
+    static final EventType CLEAR_COMMAND_LOG = new EventType();
+
+    // WHAT param is a StyleModifier
+    static final EventType CHARACTER_STYLE_MOD = new EventType();
+    static final EventType PARAGRAPH_STYLE_MOD = new EventType();
+
+    // With this event, values of the WHAT parameter are
+    // either Boolean.TRUE or Boolean.FALSE
+    static final EventType SET_MODIFIED = new EventType();
+
+    // WHAT param is a TextReplacement
+    static final EventType REPLACE = new EventType();
+
+    // WHAT param is an Integer
+    static final EventType SET_COMMAND_LOG_SIZE = new EventType();
+
+    public Behavior() {
+    }
+
+    public void addToOwner(BehaviorOwner owner) {
+        removeFromOwner();
+        fOwner = owner;
+        setNextBehavior(owner.getBehavior());
+        owner.setBehavior(this);
+    }
+
+    public boolean focusGained(FocusEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.focusGained(e);
+        else
+            return false;
+    }
+
+    public boolean focusLost(FocusEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.focusLost(e);
+        else
+            return false;
+    }
+
+    public boolean keyPressed(KeyEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.keyPressed(e);
+        else
+            return false;
+    }
+
+    public boolean keyTyped(KeyEvent e) {
+
+        if (fNextBehavior != null) {
+            return fNextBehavior.keyTyped(e);
+        }
+        else {
+            return false;
+        }
+    }
+
+    public boolean keyReleased(KeyEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.keyReleased(e);
+        else
+            return false;
+    }
+
+    public boolean mouseDragged(MouseEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.mouseDragged(e);
+        else
+            return false;
+    }
+
+    public boolean mouseEntered(MouseEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.mouseEntered(e);
+        else
+            return false;
+    }
+
+    public boolean mouseExited(MouseEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.mouseExited(e);
+        else
+            return false;
+    }
+
+    public boolean mouseMoved(MouseEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.mouseMoved(e);
+        else
+            return false;
+    }
+
+    public boolean mousePressed(MouseEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.mousePressed(e);
+        else
+            return false;
+    }
+
+    public boolean mouseReleased(MouseEvent e) {
+        if (fNextBehavior != null)
+            return fNextBehavior.mouseReleased(e);
+        else
+            return false;
+    }
+
+    public final Behavior nextBehavior() {
+        return fNextBehavior;
+    }
+
+    public boolean paint(Graphics g, Rectangle drawRect) {
+        if (fNextBehavior != null)
+            return fNextBehavior.paint(g, drawRect);
+        else
+            return false;
+    }
+
+    public void removeFromOwner() {
+        if (fOwner != null) {
+            if (fOwner.getBehavior() == this)
+                fOwner.setBehavior(nextBehavior());
+            else {
+                Behavior    current = fOwner.getBehavior();
+
+                while (current != null && current.nextBehavior() != this)
+                    current = current.nextBehavior();
+                if (current != null)
+                    current.setNextBehavior(nextBehavior());
+            }
+            setNextBehavior(null);
+            fOwner = null;
+        }
+    }
+
+    public final void setNextBehavior(Behavior next) {
+        fNextBehavior = next;
+    }
+
+    public boolean textControlEventOccurred(EventType event, Object data) {
+        if (fNextBehavior != null)
+            return fNextBehavior.textControlEventOccurred(event, data);
+        else
+            return false;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/BehaviorOwner.java b/src/com/ibm/richtext/textpanel/BehaviorOwner.java
new file mode 100755
index 0000000..41665a0
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/BehaviorOwner.java
@@ -0,0 +1,22 @@
+/*
+ * @(#)$RCSfile: BehaviorOwner.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+interface BehaviorOwner {
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public Behavior getBehavior();
+    public void setBehavior(Behavior b);
+}
diff --git a/src/com/ibm/richtext/textpanel/Command.java b/src/com/ibm/richtext/textpanel/Command.java
new file mode 100755
index 0000000..6f76bfc
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/Command.java
@@ -0,0 +1,55 @@
+/*
+ * @(#)$RCSfile: Command.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+abstract class Command {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private Command fPreviousCommand = null;
+
+    // fModified is used to keep a textModified flag for
+    // clients
+    private boolean fModified;
+
+    public Command() {
+        fModified = true;
+    }
+
+    public Command previousCommand() {
+        return fPreviousCommand;
+    }
+
+    public void setPreviousCommand(Command  previousCommand) {
+        fPreviousCommand = previousCommand;
+    }
+
+    public abstract void execute();
+    public abstract void undo();
+
+    public void redo() {
+        execute();
+    }
+
+    public final boolean isModified() {
+
+        return fModified;
+    }
+
+    public final void setModified(boolean modified) {
+
+        fModified = modified;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/FakeComponent.java b/src/com/ibm/richtext/textpanel/FakeComponent.java
new file mode 100755
index 0000000..dad575d
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/FakeComponent.java
@@ -0,0 +1,32 @@
+/*
+ * @(#)$RCSfile: FakeComponent.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Component;
+import java.awt.Graphics;
+
+abstract class FakeComponent {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    protected Component fHost;
+    
+    abstract void addNotify();
+    abstract void paint(Graphics g);
+    void setHost(Component host) {   
+        fHost = host;
+    }
+    abstract void requestFocus();
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textpanel/HackArabicTransliteration.java b/src/com/ibm/richtext/textpanel/HackArabicTransliteration.java
new file mode 100755
index 0000000..cc031e4
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/HackArabicTransliteration.java
@@ -0,0 +1,183 @@
+/*
+ * @(#)$RCSfile: HackArabicTransliteration.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+ *
+ * (C) Copyright IBM Corp. 1998, All Rights Reserved
+ */
+
+package com.ibm.richtext.textpanel;
+
+/*
+For any incoming character C
+if you can map C using the following FakeArabicTable, return
+FakeArabicTable(C)
+else if C is from A through Z, return FakeArabicTable(lowercase(C))
+else just return C
+
+
+FakeArabicTable is defined by the following mapping
+
+0   0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+1   0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+2   0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+3   0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+4   0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+5   0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+6   0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+7   0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+8   0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+9   0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+
+%   066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+.   066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+,   060C;ARABIC COMMA;Po;0;R;;;;;N;;;;;
+-   0640;ARABIC TATWEEL;Lm;0;R;;;;;N;;;;;
+'   0652;ARABIC SUKUN;Mn;34;R;;;;;N;;;;;
+"   0651;ARABIC SHADDA;Mn;33;R;;;;;N;ARABIC SHADDAH;;;;
+;   061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;;
+?   061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;;
+
+a   0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;;
+A   0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+b   0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+c   0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;;
+d   062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;;
+D   0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;;
+E   064B;ARABIC FATHATAN;Mn;27;R;;;;;N;;;;;
+e   064E;ARABIC FATHA;Mn;30;R;;;;;N;ARABIC FATHAH;;;;
+f   0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+g   063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;;
+h   062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;;
+H   0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;;
+I   064D;ARABIC KASRATAN;Mn;29;R;;;;;N;;;;;
+i   0650;ARABIC KASRA;Mn;32;R;;;;;N;ARABIC KASRAH;;;;
+j   062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;;
+K   062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;;
+k   0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;;
+l   0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;;
+m   0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;;
+n   0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;;
+o   064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;;
+p   0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+q   0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;;
+r   0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;;
+s   0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+S   0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;;
+t   062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;;
+T   062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;;
+U   064C;ARABIC DAMMATAN;Mn;28;R;;;;;N;;;;;
+u   064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;;
+v   0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+w   0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+x   0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+y   064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;;
+z   0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;;
+Z   0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;;
+
+*/
+
+/**
+ * This class implements KeyRemap to produce transliterated Arabic
+ * characters from Latin-1 characters.
+ */
+
+// NOTE: this class eliminates Arabic vowels which look ugly
+// in the font in which we happen to be demo'ing.  It's totally
+// bogus otherwise.
+final class HackArabicTransliteration extends KeyRemap {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public char remap(char c) {
+
+        switch (c) {
+            case '0': return '\u0660'; // ARABIC-INDIC DIGIT ZERO
+            case '1': return '\u0661'; // ARABIC-INDIC DIGIT ONE
+            case '2': return '\u0662'; // ARABIC-INDIC DIGIT TWO
+            case '3': return '\u0663'; // ARABIC-INDIC DIGIT THREE
+            case '4': return '\u0664'; // ARABIC-INDIC DIGIT FOUR
+            case '5': return '\u0665'; // ARABIC-INDIC DIGIT FIVE
+            case '6': return '\u0666'; // ARABIC-INDIC DIGIT SIX
+            case '7': return '\u0667'; // ARABIC-INDIC DIGIT SEVEN
+            case '8': return '\u0668'; // ARABIC-INDIC DIGIT EIGHT
+            case '9': return '\u0669'; // ARABIC-INDIC DIGIT NINE
+
+            case '%': return '\u066A'; // ARABIC PERCENT SIGN
+            // the Traditional Arabic font does not contain this character
+            // case '.': return '\u066B'; // ARABIC DECIMAL SEPARATOR
+            case ',': return '\u060C'; // ARABIC COMMA
+            case '-': return '\u0640'; // ARABIC TATWEEL
+            case '\'': return '\u0652'; // ARABIC SUKUN
+            case '"': return '\u0651'; // ARABIC SHADDA
+            case ';': return '\u061B'; // ARABIC SEMICOLON
+            case '?': return '\u061F'; // ARABIC QUESTION MARK
+
+            case 'a': return '\u0627'; // ARABIC LETTER ALEF
+            case 'A': return '\u0639'; // ARABIC LETTER AIN
+            case 'b': return '\u0628'; // ARABIC LETTER BEH
+            case 'B': return '\u0628'; // ARABIC LETTER BEH
+            case 'c': return '\u0635'; // ARABIC LETTER SAD
+            case 'C': return '\u0635'; // ARABIC LETTER SAD
+            case 'd': return '\u062F'; // ARABIC LETTER DAL
+            case 'D': return '\u0630'; // ARABIC LETTER THAL
+            case 'e': //return '\u064E'; // ARABIC FATHA
+            case 'E': //return '\u064B'; // ARABIC FATHATAN
+            case 'f': return '\u0641'; // ARABIC LETTER FEH
+            case 'F': return '\u0641'; // ARABIC LETTER FEH
+            case 'g': return '\u063A'; // ARABIC LETTER GHAIN
+            case 'G': return '\u063A'; // ARABIC LETTER GHAIN
+            case 'h': return '\u062D'; // ARABIC LETTER HAH
+            case 'H': return '\u0647'; // ARABIC LETTER HEH
+            case 'i': //return '\u0650'; // ARABIC KASRA
+            case 'I': //return '\u064D'; // ARABIC KASRATAN
+            case 'j': return '\u062C'; // ARABIC LETTER JEEM
+            case 'J': return '\u062C'; // ARABIC LETTER JEEM
+            case 'k': return '\u0643'; // ARABIC LETTER KAF
+            case 'K': return '\u062E'; // ARABIC LETTER KHAH
+            case 'l': return '\u0644'; // ARABIC LETTER LAM
+            case 'L': return '\u0644'; // ARABIC LETTER LAM
+            case 'm': return '\u0645'; // ARABIC LETTER MEEM
+            case 'M': return '\u0645'; // ARABIC LETTER MEEM
+            case 'n': return '\u0646'; // ARABIC LETTER NOON
+            case 'N': return '\u0646'; // ARABIC LETTER NOON
+            case 'o': //return '\u064F'; // ARABIC DAMMA
+            case 'O': //return '\u064F'; // ARABIC DAMMA
+            case 'p': return '\u0628'; // ARABIC LETTER BEH
+            case 'P': return '\u0628'; // ARABIC LETTER BEH
+            case 'q': return '\u0642'; // ARABIC LETTER QAF
+            case 'Q': return '\u0642'; // ARABIC LETTER QAF
+            case 'r': return '\u0631'; // ARABIC LETTER REH
+            case 'R': return '\u0631'; // ARABIC LETTER REH
+            case 's': return '\u0633'; // ARABIC LETTER SEEN
+            case 'S': return '\u0634'; // ARABIC LETTER SHEEN
+            case 't': return '\u062A'; // ARABIC LETTER TEH
+            case 'T': return '\u062B'; // ARABIC LETTER THEH
+            case 'U': //return '\u064C'; // ARABIC DAMMATAN
+            case 'u': //return '\u064F'; // ARABIC DAMMA
+            case 'v': return '\u0641'; // ARABIC LETTER FEH
+            case 'V': return '\u0641'; // ARABIC LETTER FEH
+            case 'w': return '\u0648'; // ARABIC LETTER WAW
+            case 'W': return '\u0648'; // ARABIC LETTER WAW
+            case 'x': return '\u0633'; // ARABIC LETTER SEEN
+            case 'X': return '\u0633'; // ARABIC LETTER SEEN
+            case 'y': return '\u064A'; // ARABIC LETTER YEH
+            case 'Y': return '\u064A'; // ARABIC LETTER YEH
+            case 'z': return '\u0632'; // ARABIC LETTER ZAIN
+            case 'Z': return '\u0638'; // ARABIC LETTER ZAH
+        }
+
+        return c;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/HebrewTransliteration.java b/src/com/ibm/richtext/textpanel/HebrewTransliteration.java
new file mode 100755
index 0000000..ca67bea
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/HebrewTransliteration.java
@@ -0,0 +1,90 @@
+/*
+ * @(#)$RCSfile: HebrewTransliteration.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+ *
+ * (C) Copyright IBM Corp. 1998, All Rights Reserved
+ */
+
+package com.ibm.richtext.textpanel;
+
+/**
+ * This class implements KeyRemap to produce transliterated Hebrew
+ * characters from Latin-1 characters.
+ */
+
+final class HebrewTransliteration extends KeyRemap {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public char remap(char c) {
+
+        switch (c) {
+            case 'a': return '\u05D0'; // HEBREW LETTER ALEF
+            case 'A': return '\u05E2'; // HEBREW LETTER AYIN
+            case 'b': return '\u05D1'; // HEBREW LETTER BET
+            case 'B': return '\u05D1'; // HEBREW LETTER BET
+            case 'c': return '\u05E6'; // HEBREW LETTER TSADI
+            case 'C': return '\u05E5'; // HEBREW LETTER FINAL TSADI
+            case 'd': return '\u05D3'; // HEBREW LETTER DALET
+            case 'D': return '\u05BC'; // HEBREW POINT DAGESH
+            case 'e': return '\u05B5'; // HEBREW POINT TSERE
+            case 'E': return '\u05B6'; // HEBREW POINT SEGOL
+            case 'f': return '\u05E4'; // HEBREW LETTER PE
+            case 'F': return '\u05E4'; // HEBREW LETTER PE
+            case 'g': return '\u05D2'; // HEBREW LETTER GIMEL
+            case 'G': return '\u05D2'; // HEBREW LETTER GIMEL
+            case 'h': return '\u05D4'; // HEBREW LETTER HE
+            case 'H': return '\u05D7'; // HEBREW LETTER HET
+            case 'i': return '\u05D9'; // HEBREW LETTER YOD
+            case 'I': return '\u05B4'; // HEBREW POINT HIRIQ
+            case 'j': return '\u05D9'; // HEBREW LETTER YOD
+            case 'J': return '\u05C1'; // HEBREW POINT SHIN DOT
+            case 'k': return '\u05DB'; // HEBREW LETTER KAF
+            case 'K': return '\u05DA'; // HEBREW LETTER FINAL KAF
+            case 'l': return '\u05DC'; // HEBREW LETTER LAMED
+            case 'L': return '\u05DC'; // HEBREW LETTER LAMED
+            case 'm': return '\u05DE'; // HEBREW LETTER MEM
+            case 'M': return '\u05DD'; // HEBREW LETTER FINAL MEM
+            case 'n': return '\u05E0'; // HEBREW LETTER NUN
+            case 'N': return '\u05DF'; // HEBREW LETTER FINAL NUN
+            case 'o': return '\u05D5'; // HEBREW LETTER VAV
+            case 'O': return '\u05B9'; // HEBREW POINT HOLAM
+            case 'p': return '\u05E4'; // HEBREW LETTER PE
+            case 'P': return '\u05E3'; // HEBREW LETTER FINAL PE
+            case 'q': return '\u05E7'; // HEBREW LETTER QOF
+            case 'Q': return '\u05E7'; // HEBREW LETTER QOF
+            case 'r': return '\u05E8'; // HEBREW LETTER RESH
+            case 'R': return '\u05BF'; // HEBREW POINT RAFE
+            case 's': return '\u05E9'; // HEBREW LETTER SHIN
+            case 'S': return '\u05E1'; // HEBREW LETTER SAMEKH
+            case 't': return '\u05EA'; // HEBREW LETTER TAV
+            case 'T': return '\u05D8'; // HEBREW LETTER TET
+            case 'u': return '\u05D5'; // HEBREW LETTER VAV
+            case 'U': return '\u05BB'; // HEBREW POINT QUBUTS
+            case 'v': return '\u05D5'; // HEBREW LETTER VAV
+            case 'V': return '\u05B7'; // HEBREW POINT PATAH
+            case 'w': return '\u05D5'; // HEBREW LETTER VAV
+            case 'W': return '\u05B8'; // HEBREW POINT QAMATS
+            case 'x': return '\u05E6'; // HEBREW LETTER TSADI
+            case 'X': return '\u05E5'; // HEBREW LETTER FINAL TSADI
+            case 'y': return '\u05D9'; // HEBREW LETTER YOD
+            case 'Y': return '\u05D9'; // HEBREW LETTER YOD
+            case 'z': return '\u05D6'; // HEBREW LETTER ZAYIN
+            case 'Z': return '\u05C2'; // HEBREW POINT SIN DOT
+        }
+
+        return c;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/IsraelNikudKeyboard.java b/src/com/ibm/richtext/textpanel/IsraelNikudKeyboard.java
new file mode 100755
index 0000000..7e0b1a5
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/IsraelNikudKeyboard.java
@@ -0,0 +1,84 @@
+/*
+ * @(#)$RCSfile: IsraelNikudKeyboard.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+ *
+ * (C) Copyright IBM Corp. 1998, All Rights Reserved
+ */
+
+package com.ibm.richtext.textpanel;
+
+import java.awt.event.KeyEvent;
+
+/**
+ * This class simulates a Nikud keyboard on a US-English
+ * keyboard.  It is very much a work in progress.
+ */
+
+final class IsraelNikudKeyboard extends KeyRemap {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public char remap(char c) {
+
+        switch(c) {
+            case 't': return '\u05D0'; // alef
+            case 'c': return '\u05D1'; // bet
+            case 'd': return '\u05D2'; // gimel
+            case 's': return '\u05D3'; // dalet
+            case 'v': return '\u05D4'; // he
+            case 'u': return '\u05D5'; // vav
+            case 'z': return '\u05D6'; // zayin
+            case 'j': return '\u05D7'; // het
+            case 'y': return '\u05D8'; // tet
+            case 'h': return '\u05D9'; // yod
+            case 'l': return '\u05DA'; // final kaf
+            case 'f': return '\u05DB'; // kaf
+            case 'k': return '\u05DC'; // lamed
+            case 'o': return '\u05DD'; // final mem
+            case 'n': return '\u05DE'; // mem
+            case 'i': return '\u05DF'; // final nun
+            case 'b': return '\u05E0'; // nun
+            case 'x': return '\u05E1'; // samech
+            case 'g': return '\u05E2'; // ayin
+            case ';': return '\u05E3'; // final pe
+            case 'p': return '\u05E4'; // pe
+            case '.': return '\u05E5'; // final tsadi
+            case 'm': return '\u05E6'; // tsadi
+            case 'e': return '\u05E7'; // qof
+            case 'r': return '\u05E8'; // resh
+            case 'a': return '\u05E9'; // shin
+            case ',': return '\u05EA'; // tav
+            case 'w': return ',';
+            case 'q': return '/';
+            case '/': return '.';
+        }
+
+        return c;
+    }
+
+    public char remap(KeyEvent keyEvent) {
+
+        //  Note:  only one ctrl case now (ctrl-/ -> dagesh).
+        //  Better implementation will be needed for more cases.
+
+        if (keyEvent.isControlDown()) {
+            if (keyEvent.getKeyCode() == KeyEvent.VK_SLASH) {
+                return '\u05BC'; // dagesh
+            }
+        }
+
+        return remap(keyEvent.getKeyChar());
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textpanel/JTextPanel.java b/src/com/ibm/richtext/textpanel/JTextPanel.java
new file mode 100755
index 0000000..fa136ac
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/JTextPanel.java
@@ -0,0 +1,582 @@
+/*
+ * @(#)$RCSfile: JTextPanel.java,v $ $Revision: 1.3 $ $Date: 2001/03/07 02:39:01 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.lang.reflect.InvocationTargetException;
+
+import javax.swing.JPanel;
+import javax.swing.JComponent;
+import javax.swing.JScrollBar;
+import javax.swing.SwingUtilities;
+
+import java.awt.datatransfer.Clipboard;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+
+/**
+ * JTextPanel is an implementation of MTextPanel in a Swing JPanel.
+ * @see MTextPanel
+ */
+public final class JTextPanel extends JPanel implements MTextPanel {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private ATextPanelImpl fImpl;
+    
+    /**
+     * Return a TextPanelSettings instance with all settings set
+     * to the default values.  Clients can modify this object;
+     * modifications will not affect the default values.
+     * @return a TextPanelSettings instance set to default values
+     * @see TextPanelSettings
+     */
+    public static TextPanelSettings getDefaultSettings() {
+
+        return ATextPanelImpl.getDefaultSettings();
+    }
+
+    /**
+     * Create a new JTextPanel with the default settings.
+     * @param initialText the text document.  If null document text is empty.
+     * @param clipboard the clipboard to use for cut, copy, and paste
+     *  operations.  If null this panel will use a private clipboard.
+     */
+    public JTextPanel(MConstText initialText,
+                      java.awt.datatransfer.Clipboard clipboard) {
+
+        this(ATextPanelImpl.fgDefaultSettings, initialText, clipboard);
+    }
+
+    /**
+     * Create a new JTextPanel.
+     * @param settings the settings for this JTextPanel
+     * @param initialText the text document.  If null document text is empty.
+     * @param clipboard the clipboard to use for cut, copy, and paste
+     *  operations.  If null this panel will use a private clipboard.
+     * @see TextPanelSettings
+     */
+    public JTextPanel(TextPanelSettings settings,
+                      MConstText initialText,
+                      Clipboard clipboard) {
+        
+        super(false);
+        
+        JScrollBar horzSb = null;
+        JScrollBar vertSb = null;
+        
+        if (settings.getScrollable()) {
+
+            setLayout(new ScrollBarLayout());
+
+            boolean scrollBarsVisible = settings.getScrollBarsVisible();
+
+            if (scrollBarsVisible) {
+                horzSb = new JScrollBar(JScrollBar.HORIZONTAL);
+                vertSb = new JScrollBar(JScrollBar.VERTICAL);
+                add("South", horzSb);
+                add("East", vertSb);
+            }
+        }
+        else {
+            setLayout(new BorderLayout());
+        }
+        
+        RunStrategy runStrategy = new RunStrategy() {
+            void doIt(Runnable r) {
+                try {
+                    SwingUtilities.invokeAndWait(r);
+                }
+                catch(InterruptedException e) {
+                    // If operation was interrupted, then client
+                    // called wait or sleep (or something similar)
+                    // which is inappropriate for a client of this
+                    // class.  Rethrow error and let client handle it.
+                    e.printStackTrace();
+                    throw new Error("Interrupted in RunStrategy: " + e);
+                }
+                catch(InvocationTargetException e) {
+                    // Who knows how this one happens...
+                    e.printStackTrace();
+                    throw new Error("InvocationTargetException in RunStrategy: " + e);
+                }
+            }
+        };
+        
+        fImpl = new ATextPanelImpl(runStrategy,
+                                   settings,
+                                   initialText,
+                                   clipboard,
+                                   this,
+                                   horzSb,
+                                   vertSb);
+                                   
+        final FakeComponent textComponent = fImpl.getTextComponent();
+        
+        JComponent textHost = new JComponent() {
+            {
+                textComponent.setHost(this);
+            }
+            public void addNotify() {
+                super.addNotify();
+                textComponent.addNotify();
+            }
+            public void paint(Graphics g) {
+                textComponent.paint(g);
+            }
+        };
+        
+        add("Center", textHost);
+
+        textHost.requestFocus();
+    }
+
+    /**
+     * Add the given TextPanelListener to the listeners which will
+     * receive update notifications from this JTextPanel.
+     * @param listener the listener to add
+     */
+    public void addListener(TextPanelListener listener) {
+
+        fImpl.addListener(listener);
+    }
+
+    /**
+     * Remove the given TextPanelListener from the listeners which will
+     * receive update notifications from this JTextPanel.
+     * @param listener the listener to remove
+     */
+    public void removeListener(TextPanelListener listener) {
+
+        fImpl.removeListener(listener);
+    }
+
+//============
+// Text Access
+//============
+
+    /**
+     * Set the document to <tt>newText</tt>.  This operation
+     * modifies the text in the JTextPanel.  It does not modify or adopt
+     * <tt>newText</tt>.  This method sets the selection an insertion point at
+     * the end of the text.
+     * @param newText the text which will replace the current text.
+     */
+    public void setText(MConstText newText) {
+
+        fImpl.setText(newText);
+    }
+
+    /**
+     * Append the given text to the end of the document.  Equivalent to
+     * <tt>insert(newText, getTextLength())</tt>.
+     * @param newText the text to append to the document
+     */
+    public void append(MConstText newText) {
+
+        fImpl.append(newText);
+    }
+
+    /**
+     * Insert the given text into the document at the given position.
+     * Equivalent to
+     * <tt>replaceRange(newText, position, position)</tt>.
+     * @param newText the text to insert into the document.
+     * @param position the position in the document where the
+     *     text will be inserted
+     */
+    public void insert(MConstText newText, int position) {
+
+        fImpl.insert(newText, position);
+    }
+
+    /**
+     * Replace the given range with <tt>newText</tt>.  After this
+     * operation the selection range is an insertion point at the
+     * end of the new text.
+     * @param newText the text with which to replace the range
+     * @param start the beginning of the range to replace
+     * @param end the end of the range to replace
+     */
+    public void replaceRange(MConstText newText, int start, int end) {
+
+        fImpl.replaceRange(newText, start, end);
+    }
+
+    /**
+     * Return the length of the text document in the JTextPanel.
+     * @return the length of the text document in the JTextPanel
+     */
+    public int getTextLength() {
+
+        return fImpl.getTextLength();
+    }
+
+    /**
+     * Return the text document in the JTextPanel.
+     * @return the text document in the JTextPanel.
+     */
+    public MConstText getText() {
+
+        return fImpl.getText();
+    }
+
+//============
+// Selection Access
+//============
+
+    /**
+     * Return the offset of the start of the selection.
+     */
+    public int getSelectionStart() {
+
+        return fImpl.getSelectionStart();
+    }
+
+    /**
+     * Return the offset of the end of the selection.
+     */
+    public int getSelectionEnd() {
+
+        return fImpl.getSelectionEnd();
+    }
+
+    /**
+     * Set the beginning of the selection range.  This is
+     * equivalent to <tt>select(selectionStart, getSelectionEnd())</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionStart(int selectionStart) {
+
+        fImpl.setSelectionStart(selectionStart);
+    }
+
+    /**
+     * Set the end of the selection range.  This is
+     * equivalent to <tt>select(getSelectionStart(), selectionEnd)</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionEnd(int selectionEnd) {
+
+        fImpl.setSelectionEnd(selectionEnd);
+    }
+
+    /**
+     * Set the selection range to an insertion point at the given
+     * offset.  This is equivalent to
+     * <tt>select(position, position)</tt>.
+     * @param position the offset of the new insertion point
+     */
+    public void setCaretPosition(int position) {
+
+        fImpl.setCaretPosition(position);
+    }
+
+    /**
+     * Set the selection range to the given range.  The range start
+     * is pinned between 0 and the text length;  the range end is pinned
+     * between the range start and the end of the text.  These semantics
+     * are identical to those of <tt>java.awt.TextComponent</tt>.
+     * This method has no effect if the text is not selectable.
+     * @param selectionStart the beginning of the selection range
+     * @param selectionEnd the end of the selection range
+     */
+    public void select(int selectionStart, int selectionEnd) {
+
+        fImpl.select(selectionStart, selectionEnd);
+    }
+
+    /**
+     * Select all of the text in the document.  This method has no effect if
+     * the text is not selectable.
+     */
+    public void selectAll() {
+
+        fImpl.selectAll();
+    }
+
+
+//============
+// Format Width
+//============
+
+    /**
+     * Return the total format width, in pixels.  The format width is the
+     * width to which text is wrapped.
+     * @return the format width
+     */
+    public int getFormatWidth() {
+
+        return fImpl.getFormatWidth();
+    }
+
+    /**
+     * Return true if the paragraph at the given offset is left-to-right.
+     * @param offset an offset in the text
+     * @return true if the paragraph at the given offset is left-to-right
+     */
+    public boolean paragraphIsLeftToRight(int offset) {
+        
+        return fImpl.paragraphIsLeftToRight(offset);
+    }
+
+    /**
+     * Return true if there is a change which can be undone.
+     * @return true if there is a change which can be undone.
+     */
+    public boolean canUndo() {
+
+        return fImpl.canUndo();
+    }
+
+    /**
+     * Return true if there is a change which can be redone.
+     * @return true if there is a change which can be redone.
+     */
+    public boolean canRedo() {
+
+        return fImpl.canRedo();
+    }
+
+    /**
+     * Return true if the clipboard contains contents which could be
+     * transfered into the text.
+     * @return true if the clipboard has text content.
+     */
+    public boolean clipboardNotEmpty() {
+
+        return fImpl.clipboardNotEmpty();
+    }
+
+    /**
+     * Return an AttributeMap of keys with default values.  The default
+     * values are used when displaying text for values which are not
+     * specified in the text.
+     * @return an AttributeMap of default key-value pairs
+     */
+    public AttributeMap getDefaultValues() {
+
+        return fImpl.getDefaultValues();
+    }
+
+    /**
+     * This method inspects the character style runs in the selection
+     * range (or the typing style at the insertion point).  It returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li><tt>MULTIPLE_VALUES</tt>, if two or more style runs have different 
+     * values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be the default style for <tt>key</tt>,
+     * as defined by the default values AttributeMap.  Note that if
+     * <tt>key</tt> does not have a default value this method may return
+     * null.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @see MTextPanel#MULTIPLE_VALUES
+     */
+    public Object getCharacterStyleOverSelection(Object key) {
+        
+        return fImpl.getCharacterStyleOverSelection(key);
+    }
+
+    /**
+     * This method inspects the paragraph style runs in the selection
+     * range (or the typing style at the insertion point).  It returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li><tt>MULTIPLE_VALUES</tt>, if two or more style runs have 
+     * different values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be the default style for <tt>key</tt>,
+     * as defined by the default values AttributeMap.  Note that if
+     * <tt>key</tt> does not have a default value this method may return
+     * null.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @see MTextPanel#MULTIPLE_VALUES
+     */
+    public Object getParagraphStyleOverSelection(Object key) {
+        
+        return fImpl.getParagraphStyleOverSelection(key);
+    }
+
+    /**
+     * Remove the selected text from the document and place it
+     * on the clipboard.  This method has no effect if the text
+     * is not editable, or if no text is selected.
+     */
+    public void cut() {
+        fImpl.cut();
+    }
+
+    /**
+     * Place the selected text on the clipboard.  This method has
+     * no effect if no text is selected.
+     */
+    public void copy() {
+        fImpl.copy();
+    }
+
+    /**
+     * Replace the currently selected text with the text on the clipboard.
+     * This method has no effect if the text is not editable, or if no
+     * text is on the clipboard.
+     */
+    public void paste() {
+        fImpl.paste();
+    }
+
+    /**
+     * Remove selected text from the document, without altering the clipboard.
+     * This method has no effect if the
+     * text is not editable.
+     */
+    public void clear() {
+        fImpl.clear();
+    }
+
+    /**
+     * Undo the most recent text change.  This method has no effect if
+     * there is no change to undo.
+     */
+    public void undo() {
+        fImpl.undo();
+    }
+
+    /**
+     * Redo the most recent text change.  This method has no effect if
+     * there is no change to redo.
+     */
+    public void redo() {
+        fImpl.redo();
+    }
+
+    /**
+     * Return the number of commands the command log can hold.
+     * @return the number of commands the command log can hold
+     */
+    public int getCommandLogSize() {
+
+        return fImpl.getCommandLogSize();
+    }
+
+    /**
+     * Set the number of commands the command log can hold.  All
+     * redoable commands are removed when this method is called.
+     * @param size the number of commands kept in the command log
+     */
+    public void setCommandLogSize(int size) {
+        fImpl.setCommandLogSize(size);
+    }
+
+    /**
+     * Remove all commands from the command log.
+     */
+    public void clearCommandLog() {
+        fImpl.clearCommandLog();
+    }
+
+    /**
+     * Modify the character styles on the selected characters.  If no characters
+     * are selected, modify the typing style.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyCharacterStyleOnSelection(StyleModifier modifier) {
+        fImpl.modifyCharacterStyleOnSelection(modifier);
+    }
+
+    /**
+     * Modify the paragraph styles in paragraphs containing selected characters, or
+     * the paragraph containing the insertion point.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyParagraphStyleOnSelection(StyleModifier modifier) {
+        fImpl.modifyParagraphStyleOnSelection(modifier);
+    }
+
+    /**
+     * Return the KeyRemap used to process key events.
+     * @return the key remap used to process key events
+     * @see #setKeyRemap
+     */
+    public KeyRemap getKeyRemap() {
+
+        return fImpl.getKeyRemap();
+    }
+
+    /**
+     * Use the given KeyRemap to map key events to characters.
+     * Only key
+     * events are affected by the remap;  other text entering the
+     * control (via the clipboard, for example) is not affected
+     * by the KeyRemap.
+     * <p>
+     * Do not pass <tt>null</tt> to this method to leave key
+     * events unmapped.  Instead, use <tt>KeyRemap.getIdentityRemap()</tt>
+     * @param remap the KeyRemap to use for mapping key events to characters
+     * @exception java.lang.NullPointerException if parameter is null
+     * @see KeyRemap
+     */
+    public void setKeyRemap(KeyRemap remap) {
+
+        fImpl.setKeyRemap(remap);
+    }
+
+    /**
+     * Return the modification flag of the current text change.
+     * @see #setModified
+     */
+    public boolean isModified() {
+
+        return fImpl.isModified();
+    }
+
+    /**
+     * Set the modification flag of the current text change.
+     */
+    public void setModified(boolean modified) {
+        
+        fImpl.setModified(modified);
+    }
+
+    /**
+     * This method is for KeyEventForwarder's use only!
+     */
+    ATextPanelImpl getImpl() {
+        
+        return fImpl;
+    }
+
+    public void setBackground(Color color) {
+        super.setBackground (color);
+        java.awt.Component[] compList = getComponents();
+        for (int i = 0; i < compList.length; i++) {
+            if (!(compList[i] instanceof JScrollBar)) {
+                compList[i].setBackground (color);
+            }
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/KeyEventForwarder.java b/src/com/ibm/richtext/textpanel/KeyEventForwarder.java
new file mode 100755
index 0000000..c4d1d63
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/KeyEventForwarder.java
@@ -0,0 +1,46 @@
+/*
+ * @(#)$RCSfile: KeyEventForwarder.java,v $ $Revision: 1.2 $ $Date: 2000/04/22 17:10:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.event.KeyEvent;
+
+/**
+ * This class forwards key events to a TextPanel component for
+ * testing purposes.
+ * Its sole reason for existence is to prevent the key-event
+ * API from being public on MTextPanel, and being mistaken for
+ * standard API.  This class is only for testing!  It may be
+ * removed from public API at any time.  Do not depend on this
+ * class.
+ */
+public final class KeyEventForwarder {
+
+    private ATextPanelImpl fPanelImpl;
+
+    public KeyEventForwarder(TextPanel textPanel) {
+
+        fPanelImpl = textPanel.getImpl();
+    }
+    
+    public KeyEventForwarder(JTextPanel textPanel) {
+    
+        fPanelImpl = textPanel.getImpl();
+    }
+
+    public void handleKeyEvent(KeyEvent keyEvent) {
+
+        fPanelImpl.handleKeyEvent(keyEvent);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textpanel/KeyRemap.java b/src/com/ibm/richtext/textpanel/KeyRemap.java
new file mode 100755
index 0000000..ab6ff8a
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/KeyRemap.java
@@ -0,0 +1,118 @@
+/*
+ * @(#)$RCSfile: KeyRemap.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+ *
+ * (C) Copyright IBM Corp. 1998, All Rights Reserved
+ */
+
+package com.ibm.richtext.textpanel;
+
+import java.awt.event.KeyEvent;
+
+/**
+ * KeyRemap maps keys on a standard US keyboard to characters
+ * in other alphabets.  Currently, mappings to Arabic, Hebrew
+ * and Thai are supported.  In the future, clients may be
+ * to define their own mappings by subclassing this class.
+ * <P>
+ * @see TextPanel#setKeyRemap
+ */
+
+public class KeyRemap {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * Create a new KeyRemap.
+     */
+    protected KeyRemap() {
+    }
+
+    /**
+     * This method returns the character on the simulated keyboard
+     * which is (most likely) generated by typing the character c
+     * on the actual keyboard.  For greater accuracy, use the remap
+     * method which takes a KeyEvent, since it can take modifier
+     * keys into account.
+     * @arg c a character on the actual keyboard
+     * @return the character on the simulated keyboard which would
+     *         result from the key combination which produced the
+     *         given character on the actual keyboard
+     */
+    /*public*/ char remap(char c) {
+
+        return c;
+    }
+
+    /**
+     * Return the character on the simulated keyboard
+     * which keyEvent generates.
+     * @arg keyEvent a key event from the actual keyboard
+     * @return the character on the simulated keyboard generated by
+     *         keyEvent
+     */
+    /*public*/ char remap(KeyEvent keyEvent) {
+
+        return remap(keyEvent.getKeyChar());
+    }
+
+    private static final KeyRemap IDENTITY = new KeyRemap();
+    private static final KeyRemap ARABIC_TRANSLITERATION = new ArabicTransliteration();
+    private static final KeyRemap HEBREW_TRANSLITERATION = new HebrewTransliteration();
+    private static final KeyRemap ISRAEL_NIKUD = new IsraelNikudKeyboard();
+    private static final KeyRemap THAI = new ThaiKeyRemap();
+
+    /**
+     * Return a KeyRemap which maps every character to itself.
+     */
+    public static KeyRemap getIdentityRemap() {
+
+        return IDENTITY;
+    }
+
+    /**
+     * Return a KeyRemap which maps keys to
+     * characters in the Arabic alphabet, using a simple transliteration.
+     */
+    public static KeyRemap getArabicTransliteration() {
+
+        return ARABIC_TRANSLITERATION;
+    }
+
+    /**
+     * Return a KeyRemap which maps keys to
+     * characters in the Hebrew alphabet, using a simple transliteration.
+     */
+    public static KeyRemap getHebrewTransliteration() {
+
+        return HEBREW_TRANSLITERATION;
+    }
+
+    /**
+     * Return a KeyRemap which emulates a standard Hebrew keyboard.
+     */
+    public static KeyRemap getIsraelNikud() {
+
+        return ISRAEL_NIKUD;
+    }
+    
+    /**
+     * Return a KeyRemap which emulates a Thai Ketmanee keyboard.
+     */
+    public static KeyRemap getThaiKetmanee() {
+        
+        return THAI;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/MTextPanel.java b/src/com/ibm/richtext/textpanel/MTextPanel.java
new file mode 100755
index 0000000..87a92ee
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/MTextPanel.java
@@ -0,0 +1,375 @@
+/*
+ * @(#)$RCSfile: MTextPanel.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.styledtext.MConstText;
+
+/**
+ * MTextPanel is implemented by Components which provide selectable
+ * editable styled text.
+ * <p>
+ * Implementations of MTextPanel provide a simple, standard user interface
+ * for text editing.  MTextPanel supplies scrollable display, typing, 
+ * arrow-key support, character selection, word-
+ * and sentence-selection (by double-clicking and triple-clicking, 
+ * respectively), text styles, clipboard operations (cut, copy and paste)
+ * and a log of changes for undo-redo.
+ * <p>
+ * MTextPanel implementations do not provide user interface elements
+ * such as an edit menu or style menu.  This support is provided in
+ * different packages, and is implemented with MTextPanel's API.
+ * MTextPanel includes methods for setting selections and styles on text,
+ * and using the clipboard and command-log functionality.
+ * MTextPanel's API for selection and text handling is similar to that
+ * of <tt>java.awt.TextArea</tt> and
+ * <tt>java.awt.TextComponent</tt>.
+ * <p>
+ * MTextPanel supports bidirectional and complex text.  In bidirectional
+ * text, offsets at direction boundaries have dual carets.  Logical selection
+ * is used, so selections across run directions may not be contiguous in
+ * display.
+ */
+public interface MTextPanel {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    /**
+     * This value is returned from <tt>getCharacterStyleOverSelection</tt>
+     * and <tt>getParagraphStyleOverSelection</tt> to indicate that the
+     * selection range contains multiple values for a key.
+     * <p>
+     * There is no reason for this Object ever to appear in an AttributeMap
+     * as a value.  Obviously, if it does there will be no way to distinguish
+     * between multiple values across the selection and a consistent value of
+     * <tt>MULTIPLE_VALUES</tt> for the key.
+     * @see #getCharacterStyleOverSelection
+     * @see #getParagraphStyleOverSelection
+     */
+    public static final Object MULTIPLE_VALUES = new Object();
+    
+    /**
+     * Add the given TextPanelListener to the listeners which will
+     * receive update notifications from this MTextPanel.
+     * @param listener the listener to add
+     */
+    public void addListener(TextPanelListener listener);
+
+    /**
+     * Remove the given TextPanelListener from the listeners which will
+     * receive update notifications from this MTextPanel.
+     * @param listener the listener to remove
+     */
+    public void removeListener(TextPanelListener listener);
+
+    /**
+     * Set the document to <tt>newText</tt>.  This operation
+     * modifies the text in the MTextPanel.  It does not modify or adopt
+     * <tt>newText</tt>.  This method sets the selection an insertion point at
+     * the end of the text.
+     * @param newText the text which will replace the current text.
+     */
+    public void setText(MConstText newText);
+    
+    /**
+     * Append the given text to the end of the document.  Equivalent to
+     * <tt>insert(newText, getTextLength())</tt>.
+     * @param newText the text to append to the document
+     */
+    public void append(MConstText newText);
+    
+    /**
+     * Insert the given text into the document at the given position.
+     * Equivalent to
+     * <tt>replaceRange(newText, position, position)</tt>.
+     * @param newText the text to insert into the document.
+     * @param position the position in the document where the
+     *     text will be inserted
+     */
+    public void insert(MConstText newText, int position);
+
+    /**
+     * Replace the given range with <tt>newText</tt>.  After this
+     * operation the selection range is an insertion point at the
+     * end of the new text.
+     * @param newText the text with which to replace the range
+     * @param start the beginning of the range to replace
+     * @param end the end of the range to replace
+     */
+    public void replaceRange(MConstText newText, int start, int end);
+
+    /**
+     * Return the length of the text document in the MTextPanel.
+     * @return the length of the text document in the MTextPanel
+     */
+    public int getTextLength();
+
+    /**
+     * Return the text document in the MTextPanel.
+     * @return the text document in the MTextPanel.
+     */
+    public MConstText getText();
+    
+//============
+// Selection Access
+//============
+
+    /**
+     * Return the offset of the start of the selection.
+     */
+    public int getSelectionStart();
+
+    /**
+     * Return the offset of the end of the selection.
+     */
+    public int getSelectionEnd();
+    
+    /**
+     * Set the beginning of the selection range.  This is
+     * equivalent to <tt>select(selectionStart, getSelectionEnd())</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionStart(int selectionStart);
+    
+    /**
+     * Set the end of the selection range.  This is
+     * equivalent to <tt>select(getSelectionStart(), selectionEnd)</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionEnd(int selectionEnd);
+    
+    /**
+     * Set the selection range to an insertion point at the given
+     * offset.  This is equivalent to
+     * <tt>select(position, position)</tt>.
+     * @param position the offset of the new insertion point
+     */
+    public void setCaretPosition(int position);
+    
+    /**
+     * Set the selection range to the given range.  The range start
+     * is pinned between 0 and the text length;  the range end is pinned
+     * between the range start and the end of the text.  These semantics
+     * are identical to those of <tt>java.awt.TextComponent</tt>.
+     * This method has no effect if the text is not selectable.
+     * @param selectionStart the beginning of the selection range
+     * @param selectionEnd the end of the selection range
+     */
+    public void select(int selectionStart, int selectionEnd);
+    
+    /**
+     * Select all of the text in the document.  This method has no effect if
+     * the text is not selectable.
+     */
+    public void selectAll();
+    
+
+//============
+// Format Width
+//============
+
+    /**
+     * Return the total format width, in pixels.  The format width is the
+     * width to which text is wrapped.
+     * @return the format width
+     */
+    public int getFormatWidth();
+    
+    /**
+     * Return true if the paragraph at the given offset is left-to-right.
+     * @param offset an offset in the text
+     * @return true if the paragraph at the given offset is left-to-right
+     */
+    public boolean paragraphIsLeftToRight(int offset);
+
+    /**
+     * Return true if there is a change which can be undone.
+     * @return true if there is a change which can be undone.
+     */
+    public boolean canUndo();
+    
+    /**
+     * Return true if there is a change which can be redone.
+     * @return true if there is a change which can be redone.
+     */
+    public boolean canRedo();
+    
+    /**
+     * Return true if the clipboard contains contents which could be
+     * transfered into the text.
+     * @return true if the clipboard has text content.
+     */
+    public boolean clipboardNotEmpty();
+    
+
+//============
+// Styles
+//============
+
+    /**
+     * Return an AttributeMap of keys with default values.  The default
+     * values are used when displaying text for values which are not
+     * specified in the text.
+     * @return an AttributeMap of default key-value pairs
+     */
+    public AttributeMap getDefaultValues();
+    
+    /**
+     * This method inspects the character style runs in the selection
+     * range (or the typing style at the insertion point).  It returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li><tt>MULTIPLE_VALUES</tt>, if two or more style runs have different 
+     * values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be the default style for <tt>key</tt>,
+     * as defined by the default values AttributeMap.  Note that if
+     * <tt>key</tt> does not have a default value this method may return
+     * null.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @see #MULTIPLE_VALUES
+     */
+    public Object getCharacterStyleOverSelection(Object key);
+    
+    /**
+     * This method inspects the paragraph style runs in the selection
+     * range (or the typing style at the insertion point).  It returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li><tt>MULTIPLE_VALUES</tt>, if two or more style runs have 
+     * different values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be the default style for <tt>key</tt>,
+     * as defined by the default values AttributeMap.  Note that if
+     * <tt>key</tt> does not have a default value this method may return
+     * null.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @see #MULTIPLE_VALUES
+     */
+    public Object getParagraphStyleOverSelection(Object key);
+    
+    /**
+     * Remove the selected text from the document and place it
+     * on the clipboard.  This method has no effect if the text
+     * is not editable, or if no text is selected.
+     */
+    public void cut();
+    
+    /**
+     * Place the selected text on the clipboard.  This method has
+     * no effect if no text is selected.
+     */
+    public void copy();
+    
+    /**
+     * Replace the currently selected text with the text on the clipboard.
+     * This method has no effect if the text is not editable, or if no
+     * text is on the clipboard.
+     */
+    public void paste();
+    
+    /**
+     * Remove selected text from the document, without altering the clipboard.
+     * This method has no effect if the
+     * text is not editable.
+     */
+    public void clear();
+    
+    /**
+     * Undo the most recent text change.  This method has no effect if
+     * there is no change to undo.
+     */
+    public void undo();
+    
+    /**
+     * Redo the most recent text change.  This method has no effect if
+     * there is no change to redo.
+     */
+    public void redo();
+    
+    /**
+     * Return the number of commands the command log can hold.
+     * @return the number of commands the command log can hold
+     */
+    public int getCommandLogSize();
+    
+    /**
+     * Set the number of commands the command log can hold.  All
+     * redoable commands are removed when this method is called.
+     * @param size the number of commands kept in the command log
+     */
+    public void setCommandLogSize(int size);
+    
+    /**
+     * Remove all commands from the command log.
+     */
+    public void clearCommandLog();
+    
+    /**
+     * Modify the character styles on the selected characters.  If no characters
+     * are selected, modify the typing style.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyCharacterStyleOnSelection(StyleModifier modifier);
+    
+    /**
+     * Modify the paragraph styles in paragraphs containing selected characters, or
+     * the paragraph containing the insertion point.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyParagraphStyleOnSelection(StyleModifier modifier);
+    
+    /**
+     * Return the KeyRemap used to process key events.
+     * @return the key remap used to process key events
+     * @see #setKeyRemap
+     */
+    public KeyRemap getKeyRemap();
+    
+    /**
+     * Use the given KeyRemap to map key events to characters.
+     * Only key
+     * events are affected by the remap;  other text entering the
+     * control (via the clipboard, for example) is not affected
+     * by the KeyRemap.
+     * <p>
+     * Do not pass <tt>null</tt> to this method to leave key
+     * events unmapped.  Instead, use <tt>KeyRemap.getIdentityRemap()</tt>
+     * @param remap the KeyRemap to use for mapping key events to characters
+     * @exception java.lang.NullPointerException if parameter is null
+     * @see KeyRemap
+     */
+    public void setKeyRemap(KeyRemap remap);
+    
+    /**
+     * Return the modification flag of the current text change.
+     * @see #setModified
+     */
+    public boolean isModified();
+    
+    /**
+     * Set the modification flag of the current text change.
+     */
+    public void setModified(boolean modified);
+}
diff --git a/src/com/ibm/richtext/textpanel/OffscreenBufferCache.java b/src/com/ibm/richtext/textpanel/OffscreenBufferCache.java
new file mode 100755
index 0000000..7344bef
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/OffscreenBufferCache.java
@@ -0,0 +1,52 @@
+/*
+ * @(#)$RCSfile: OffscreenBufferCache.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Image;
+import java.awt.Component;
+
+class OffscreenBufferCache {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private Image fOffscreenBuffer = null;
+    private Component fHost;
+
+    OffscreenBufferCache(Component host) {
+
+        fHost = host;
+    }
+
+    private Image makeBuffer(int width, int height) {
+
+        return fHost.createImage(Math.max(width, 1), Math.max(height, 1));
+    }
+
+    Image getBuffer(int width, int height) {
+
+        Image buffer = fOffscreenBuffer;
+
+        if (buffer != null) {
+            if (buffer.getWidth(fHost) >= width &&
+                    buffer.getHeight(fHost) >= height) {
+                return buffer;
+            }
+        }
+
+        buffer = makeBuffer(width, height);
+        fOffscreenBuffer = buffer;
+        return buffer;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textpanel/PanelEventBroadcaster.java b/src/com/ibm/richtext/textpanel/PanelEventBroadcaster.java
new file mode 100755
index 0000000..8f25253
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/PanelEventBroadcaster.java
@@ -0,0 +1,100 @@
+/*
+ * @(#)$RCSfile: PanelEventBroadcaster.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.util.Vector;
+
+/**
+ * This class listens for text state change notifications
+ * and broadcasts them to all of its listeners.
+ */
+final class PanelEventBroadcaster {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final int FIRST = TextPanelEvent.TEXT_PANEL_FIRST;
+
+    private final Vector[] fListeners;
+    private final TextPanelEvent[] fEvents;
+
+    /**
+     * Construct a new PanelEventBroadcaster.
+     * @param panel the TextPanel for which events are broadcasted
+     */
+    public PanelEventBroadcaster(MTextPanel panel) {
+
+        int count = TextPanelEvent.TEXT_PANEL_LAST - FIRST + 1;
+
+        fEvents = new TextPanelEvent[count];
+        fListeners = new Vector[count];
+        
+        for (int i=0; i < fListeners.length; i++) {
+            fEvents[i] = new TextPanelEvent(panel, i+FIRST);
+            fListeners[i] = new Vector();
+        }
+    }
+
+    /**
+     * Add the given TextPanelListener to the TextPanelListeners to
+     * which notifications are forwarded.
+     * @param listener the listener to add
+     */
+    public synchronized void addListener(TextPanelListener listener) {
+
+        for (int i=FIRST; i <= TextPanelEvent.TEXT_PANEL_LAST; i++) {
+            Vector listeners = fListeners[i-FIRST];
+            if (listener.respondsToEventType(i)) {
+                if (!listeners.contains(listener)) {
+                    listeners.addElement(listener);
+                }
+            }
+        }
+    }
+
+    /**
+     * Remove the given TextPanelListener from the TextPanelListeners to
+     * which notifications are forwarded.
+     * @param listener the listener to remove
+     */
+    public synchronized void removeListener(TextPanelListener listener) {
+
+        for (int i=FIRST; i <= TextPanelEvent.TEXT_PANEL_LAST; i++) {
+            Vector listeners = fListeners[i-FIRST];
+            if (listener.respondsToEventType(i)) {
+                listeners.removeElement(listener);
+            }
+        }
+    }
+
+    /**
+     * Receive a notification and forward it to all listeners.
+     * @changeCode one of the constants in the TextPanelListener class
+     */
+    public synchronized void textStateChanged(int id) {
+
+        int index = id-FIRST;
+        TextPanelEvent event = fEvents[index];
+        Vector listeners = fListeners[index];
+        
+        int size = listeners.size();
+
+        for (int i=0; i < size; i++) {
+
+            TextPanelListener listener =
+                            (TextPanelListener) listeners.elementAt(i);
+            listener.textEventOccurred(event);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/RunStrategy.java b/src/com/ibm/richtext/textpanel/RunStrategy.java
new file mode 100755
index 0000000..a7b1290
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/RunStrategy.java
@@ -0,0 +1,22 @@
+/*
+ * @(#)$RCSfile: RunStrategy.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+class RunStrategy {
+    
+    void doIt(Runnable r) {
+        r.run();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textpanel/ScrollBarLayout.java b/src/com/ibm/richtext/textpanel/ScrollBarLayout.java
new file mode 100755
index 0000000..c06ff6b
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/ScrollBarLayout.java
@@ -0,0 +1,153 @@
+/*
+ * @(#)$RCSfile: ScrollBarLayout.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.awt.LayoutManager;
+
+class ScrollBarLayout implements LayoutManager {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    Component   fHorizScrollBar = null;
+    Component   fVertScrollBar = null;
+    Component   fChild = null;
+
+    public ScrollBarLayout() {
+    }
+
+    public void addLayoutComponent(String name, Component comp) {
+
+        if ("Center".equals(name))
+            fChild = comp;
+        else if ("South".equals(name))
+            fHorizScrollBar = comp;
+        else if ("East".equals(name))
+            fVertScrollBar = comp;
+    }
+
+    public void layoutContainer(Container target) {
+
+        Insets      insets = target.getInsets();
+        Dimension   targetSize = target.getSize();
+        int         hsbHeight = (fHorizScrollBar != null) ? fHorizScrollBar.getPreferredSize().
+                            height : 0;
+        int         vsbWidth = (fVertScrollBar != null) ? fVertScrollBar.getPreferredSize().
+                            width : 0;
+
+        if (fHorizScrollBar != null)
+            fHorizScrollBar.setBounds(insets.left, targetSize.height - insets.bottom -
+                                hsbHeight, targetSize.width - vsbWidth, hsbHeight);
+
+        if (fVertScrollBar != null)
+            fVertScrollBar.setBounds(targetSize.width - insets.right - vsbWidth,
+                                insets.top, vsbWidth, targetSize.height - hsbHeight);
+
+        if (fChild != null)
+            fChild.setBounds(insets.left, insets.top, targetSize.width - insets.right - vsbWidth,
+                                targetSize.height - insets.bottom - hsbHeight);
+    }
+
+    public Dimension minimumLayoutSize(Container target) {
+
+        Dimension   returnVal = new Dimension(0, 0);
+        Dimension   hsbSize;
+        Dimension   vsbSize;
+        Dimension   childSize;
+
+        if (fHorizScrollBar != null && fHorizScrollBar.isVisible()) {
+            hsbSize = fHorizScrollBar.getMinimumSize();
+        }
+        else {
+            hsbSize = new Dimension(0, 0);
+        }
+
+        if (fVertScrollBar != null && fVertScrollBar.isVisible()) {
+            vsbSize = fVertScrollBar.getMinimumSize();
+        }
+        else {
+            vsbSize = new Dimension(0, 0);
+        }
+
+        if (fChild != null && fChild.isVisible()) {
+            childSize = fChild.getMinimumSize();
+        }
+        else {
+            childSize = new Dimension(0, 0);
+        }
+
+        returnVal.width = Math.max(childSize.width, hsbSize.width) + vsbSize.width;
+        returnVal.height = Math.max(childSize.height, vsbSize.height) + hsbSize.height;
+
+        Insets  insets = target.getInsets();
+
+        returnVal.width += insets.left + insets.right;
+        returnVal.height += insets.top + insets.bottom;
+
+        return returnVal;
+    }
+
+    public Dimension preferredLayoutSize(Container target) {
+
+        Dimension   returnVal = new Dimension(0, 0);
+        Dimension   hsbSize;
+        Dimension   vsbSize;
+        Dimension   childSize;
+
+        if (fHorizScrollBar != null && fHorizScrollBar.isVisible()) {
+            hsbSize = fHorizScrollBar.getPreferredSize();
+        }
+        else {
+            hsbSize = new Dimension(0, 0);
+        }
+
+        if (fVertScrollBar != null && fVertScrollBar.isVisible()) {
+            vsbSize = fVertScrollBar.getPreferredSize();
+        }
+        else {
+            vsbSize = new Dimension(0, 0);
+        }
+
+        if (fChild != null && fChild.isVisible()) {
+            childSize = fChild.getPreferredSize();
+        }
+        else {
+            childSize = new Dimension(0, 0);
+        }
+
+        returnVal.width = Math.max(childSize.width, hsbSize.width) + vsbSize.width;
+        returnVal.height = Math.max(childSize.height, vsbSize.height) + hsbSize.height;
+
+        Insets  insets = target.getInsets();
+
+        returnVal.width += insets.left + insets.right;
+        returnVal.height += insets.top + insets.bottom;
+
+        return returnVal;
+    }
+
+    public void removeLayoutComponent(Component comp) {
+
+        if (comp == fChild)
+            fChild = null;
+        else if (comp == fHorizScrollBar)
+            fHorizScrollBar = null;
+        else if (comp == fVertScrollBar)
+            fVertScrollBar = null;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/Scroller.java b/src/com/ibm/richtext/textpanel/Scroller.java
new file mode 100755
index 0000000..60a79cc
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/Scroller.java
@@ -0,0 +1,208 @@
+/*
+ * @(#)$RCSfile: Scroller.java,v $ $Revision: 1.3 $ $Date: 2000/05/11 18:08:42 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+/*
+    7/9/97 - changed some deprecated methods in Scrollbar
+            Also setting Unit and Block increment values.  Maybe
+            it matters...
+    6/29/98 - reimplemented this class.  Now this class talks to
+              any component which implements Scroller.Client.
+              ScrollHolder is gone, too.
+    2/4/99 - No longer a Panel.  Also, doesn't create Scrollbars,
+             and in fact doesn't even use the Scrollbar class
+             directly.
+*/
+
+import java.awt.Component;
+import java.awt.Rectangle;
+import java.awt.Dimension;
+
+import java.awt.event.AdjustmentListener;
+import java.awt.event.AdjustmentEvent;
+import java.awt.Adjustable;
+
+/**
+* This class manages the interaction between a scrollable client
+* and vertical and horizontal scrollbars.  It calls the client's
+* scrollTo method in response to manipulation of the scroll bars.
+*
+* This class used to be a Panel containing the scrollbars and
+* the client panel.  As part of the migration away from direct
+* AWT dependencies, this class is no longer part of the view
+* hierarchy.  Instead it simply keeps a reference to its
+* client and scroll bars.  It is the responsibility of higher-
+* level classes to set up the view hierarchy.
+*/
+final class Scroller implements AdjustmentListener
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    static interface Client {
+        void scrollTo(int x, int y);
+        Rectangle getScrollSize();
+        Rectangle getBounds();
+    }
+
+    private Adjustable fHorizScrollBar = null;
+    private Adjustable fVertScrollBar = null;
+    private Client fClient = null;
+
+    /**
+     * These are used if the respective Scrollbar is not present.
+     */
+    private int fHorizValue, fVertValue;
+
+    private static final int DEFAULT_UNIT_INC = 10;
+
+    /**
+     * Construct a new Scroller with the given Adjustables,
+     * which really should be scrollbars of some ilk.
+     * Also, the Adjustables are required to be AWT Components,
+     * so the Scroller can enable and disable them.
+     * However, a Scroller can work with either AWT Scrollbars
+     * or JFC JScrollbars.
+     * @param horizScrollbar the horizontal scrollbar.  null if
+     * there is no horizontal scrollbar.
+     * @param vertScrollbar the vertical scrollbar.  null if
+     * there is no vertical scrollbar.
+     */
+    public Scroller(Adjustable horizScrollBar,
+                    Adjustable vertScrollBar) {
+
+        //setLayout(new ScrollBarLayout());
+
+        fHorizScrollBar = horizScrollBar;
+        fVertScrollBar = vertScrollBar;
+
+        if (fVertScrollBar != null) {
+            fVertScrollBar.setUnitIncrement(DEFAULT_UNIT_INC);
+            fVertScrollBar.addAdjustmentListener(this);
+        }
+        if (fHorizScrollBar != null) {
+            fHorizScrollBar.setUnitIncrement(DEFAULT_UNIT_INC);
+            fHorizScrollBar.addAdjustmentListener(this);
+        }
+    }
+
+    public void setClient(Client client) {
+
+        fClient = client;
+        clientScrollSizeChanged();
+    }
+
+    public void adjustmentValueChanged(AdjustmentEvent event) {
+
+        boolean horizontal;
+        if (event.getAdjustable() == fHorizScrollBar) {
+            int vertVal = fVertScrollBar == null? fVertValue :
+                                        fVertScrollBar.getValue();
+            scrollTo(event.getValue(), vertVal);
+        }
+        else {
+            int horizVal = fHorizScrollBar == null? fHorizValue :
+                                        fHorizScrollBar.getValue();
+            scrollTo(horizVal, event.getValue());
+        }
+    }
+
+    private void setValues(Adjustable scrollbar,
+                           int visible,
+                           int minimum,
+                           int height) {
+
+        int maximum = minimum+height;
+        
+        if (scrollbar != null) {
+
+            Component scrollbarToo = (Component) scrollbar;
+
+            if (maximum <= visible) {
+                scrollbarToo.setEnabled(false);
+            }
+            else {
+                scrollbarToo.setEnabled(true);
+            }
+            
+            scrollbar.setMinimum(minimum);
+            scrollbar.setMaximum(maximum);
+            scrollbar.setVisibleAmount(visible);
+	    // workaround setBlockIncrement warnings for increments < 1
+	    scrollbar.setBlockIncrement(Math.max(1, visible - DEFAULT_UNIT_INC));
+        }
+    }
+
+
+    public void clientScrollSizeChanged()
+    {
+        Rectangle bounds = fClient.getBounds();
+        Rectangle preferredSize = fClient.getScrollSize();
+
+        setValues(fHorizScrollBar, bounds.width, preferredSize.x, preferredSize.width);
+        setValues(fVertScrollBar, bounds.height, preferredSize.y, preferredSize.height);
+    }
+
+    public void setPosition(int x, int y) {
+
+        if (fHorizScrollBar != null) {
+            fHorizScrollBar.setValue(x);
+        }
+        else {
+            fHorizValue = x;
+        }
+        if (fVertScrollBar != null) {
+            fVertScrollBar.setValue(y);
+        }
+        else {
+            fVertValue = y;
+        }
+    }
+
+    private void scrollTo(int x, int y)
+    {
+        fClient.scrollTo(x, y);
+    }
+
+    public void setHorizLineDistance(int newDistance)
+    {
+        if (fHorizScrollBar != null) {
+            fHorizScrollBar.setUnitIncrement(newDistance);
+        }
+    }
+
+    public void setHorizPageOverlap(int newOverlap)
+    {
+        if (fHorizScrollBar != null) {
+            fHorizScrollBar.setBlockIncrement( // workaround warnings for values < 1 on unix
+                    Math.max(1, fHorizScrollBar.getVisibleAmount()-newOverlap));
+        }
+    }
+
+    public void setVertLineDistance(int newDistance)
+    {
+        if (fVertScrollBar != null) {
+            fVertScrollBar.setUnitIncrement(newDistance);
+        }
+    }
+
+    public void setVertPageOverlap(int newOverlap)
+    {
+        if (fVertScrollBar != null) {
+            fVertScrollBar.setBlockIncrement( // workaround warnings for values < 1 on unix
+                    Math.max(1, fVertScrollBar.getVisibleAmount()-newOverlap));
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/SelectionDragInteractor.java b/src/com/ibm/richtext/textpanel/SelectionDragInteractor.java
new file mode 100755
index 0000000..7f9ed1f
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/SelectionDragInteractor.java
@@ -0,0 +1,206 @@
+/*
+ * @(#)$RCSfile: SelectionDragInteractor.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.text.BreakIterator;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+import com.ibm.richtext.textformat.TextOffset;
+
+final class SelectionDragInteractor extends Behavior implements Runnable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private TextComponent fTextComponent;
+    private TextSelection fSelection;
+    private RunStrategy fRunStrategy;
+    
+    private TextOffset fAnchorStart; // aliases text offsets - client beware
+    private TextOffset fAnchorEnd;
+    private TextOffset fCurrent;
+
+    private final boolean fWasZeroLength;
+
+    private int fCurrentX;
+    private int fCurrentY;
+    private boolean fMouseOutside;
+
+    private Thread fAutoscrollThread = null;
+    private boolean fThreadRun = true;
+
+    private static final int kScrollSleep = 300;
+
+    public SelectionDragInteractor(TextSelection selection,
+                                   TextComponent textComponent,
+                                   RunStrategy runStrategy,
+                                   TextOffset anchorStart,
+                                   TextOffset anchorEnd,
+                                   TextOffset current,
+                                   int initialX,
+                                   int initialY,
+                                   boolean wasZeroLength) {
+
+        fTextComponent = textComponent;
+        fSelection = selection;
+        fRunStrategy = runStrategy;
+        fAnchorStart = anchorStart;
+        fAnchorEnd = anchorEnd;
+        fCurrent = current;
+
+        fCurrentX = initialX;
+        fCurrentY = initialY;
+        fMouseOutside = false;
+
+        fWasZeroLength = wasZeroLength;
+        
+        setSelection();
+    }
+    
+    public boolean textControlEventOccurred(Behavior.EventType event, Object what) {
+
+        return true;
+    }
+
+    public boolean focusGained(FocusEvent event) {
+
+        return true;
+    }
+
+    public boolean focusLost(FocusEvent event) {
+
+        return true;
+    }
+
+    public boolean keyPressed(KeyEvent event) {
+
+        return true;
+    }
+
+    public boolean keyTyped(KeyEvent event) {
+
+        return true;
+    }
+
+    public boolean keyReleased(KeyEvent event) {
+
+        return true;
+    }
+
+    public synchronized boolean mouseDragged(MouseEvent e) {
+
+        int x = e.getX(), y = e.getY();
+        if (fCurrentX != x || fCurrentY != y) {
+            fCurrentX = x;
+            fCurrentY = y;
+            processMouseLocation();
+        }
+        return true;
+    }
+
+    public synchronized boolean mouseEnter(MouseEvent e) {
+
+        fMouseOutside = false;
+        return true;
+    }
+
+    public synchronized boolean mouseExited(MouseEvent e) {
+
+        if (fAutoscrollThread == null) {
+            fAutoscrollThread = new Thread(this);
+            fAutoscrollThread.start();
+        }
+        fMouseOutside = true;
+        notify();
+
+        return true;
+    }
+
+    public synchronized boolean mouseReleased(MouseEvent e) {
+
+        fMouseOutside = false;
+        fThreadRun = false;
+        if (fAutoscrollThread != null) {
+            fAutoscrollThread.interrupt();
+        }
+        
+        removeFromOwner();
+        boolean isZeroLength = TextSelection.rangeIsZeroLength(fAnchorStart,
+                                                               fAnchorEnd,
+                                                               fCurrent);
+        fSelection.mouseReleased(isZeroLength != fWasZeroLength);
+
+        return true;
+    }
+
+    private void processMouseLocation() {
+
+        fTextComponent.scrollToShow(fCurrentX, fCurrentY);
+        fTextComponent.pointToTextOffset(fCurrent, fCurrentX, fCurrentY, null, true);
+        setSelection();
+    }
+
+    private void setSelection() {
+
+        if (fCurrent.greaterThan(fAnchorEnd)) {
+            fSelection.advanceToNextBoundary(fCurrent);
+            fSelection.setSelRangeAndDraw(fAnchorStart, fCurrent, fAnchorStart);
+        }
+        else if (fCurrent.lessThan(fAnchorStart)) {
+            fSelection.advanceToPreviousBoundary(fCurrent);
+            fSelection.setSelRangeAndDraw(fCurrent, fAnchorEnd, fAnchorStart);
+        }
+        else {
+            fCurrent.assign(fAnchorEnd);
+            fSelection.setSelRangeAndDraw(fAnchorStart, fAnchorEnd, fAnchorStart);
+        }
+    }
+
+    public void run() {
+
+        Runnable doMouseLoc = new Runnable() {
+            public void run() {
+                processMouseLocation();
+            }
+        };
+        
+        while (fThreadRun) {
+
+            try {
+                Thread.sleep(kScrollSleep);
+            }
+            catch(InterruptedException e) {
+                return; // just quit scrolling
+            }
+
+            synchronized(this) {
+
+                while (!fMouseOutside) {
+                    try {
+                        wait();
+                    }
+                    catch(InterruptedException e) {
+                        return; // just quit scrolling
+                    }
+                }
+
+                fRunStrategy.doIt(doMouseLoc);
+            }
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/SimpleCommandLog.java b/src/com/ibm/richtext/textpanel/SimpleCommandLog.java
new file mode 100755
index 0000000..06caa0f
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/SimpleCommandLog.java
@@ -0,0 +1,177 @@
+/*
+ * @(#)$RCSfile: SimpleCommandLog.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+final class SimpleCommandLog {
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private Command fLastCommand = null;
+    private Command fCurrentCommand = null;
+    private PanelEventBroadcaster fListener;
+
+    private boolean fBaseIsModified;
+
+    private int fLogSize = 14;
+
+    public SimpleCommandLog(PanelEventBroadcaster listener) {
+        fListener = listener;
+        fBaseIsModified = false;
+    }
+
+    /** adds the specfied command to the top of the command stack
+    * (any undone commands on the stack are removed)
+    * This function assumes the command has already been executed (i.e., its execute() method
+    * has been called, or an equivalent action has been taken) */
+    void add(Command newCommand) {
+        // if there are commands on the stack that have been undone, they are
+        // dropped on the floor here
+        newCommand.setPreviousCommand(fCurrentCommand);
+        
+        final Command oldLastCommand = fLastCommand;
+        fLastCommand = null;
+        
+        fCurrentCommand = newCommand;
+        limitCommands(fLogSize);
+        
+        if (oldLastCommand != null) {
+            fListener.textStateChanged(TextPanelEvent.UNDO_STATE_CHANGED);
+        }
+    }
+
+    /**
+     * If the command list is longer than logSize, truncate it.
+     * This method traverses the list each time, and is not a model
+     * of efficiency.  It's a temporary way to plug this memory leak
+     * until I can implement a bounded command log.
+     */
+    private void limitCommands(int logSize) {
+
+        if (logSize == 0) {
+            fCurrentCommand = null;
+        }
+        else {
+            Command currentCommand = fCurrentCommand;
+            int remaining = logSize-1;
+            while (currentCommand != null && remaining > 0) {
+                currentCommand = currentCommand.previousCommand();
+                remaining -= 1;
+            }
+            if (currentCommand != null) {
+                currentCommand.setPreviousCommand(null);
+            }
+        }
+    }
+
+    /** adds the specfied command to the top of the command stack and executes it */
+    void addAndDo(Command newCommand) {
+        add(newCommand);
+        newCommand.execute();
+
+        fListener.textStateChanged(TextPanelEvent.UNDO_STATE_CHANGED);
+    }
+
+    /** undoes the command on the top of the command stack, if there is one */
+    void undo() {
+        if (fCurrentCommand != null) {
+            Command current = fCurrentCommand;
+            current.undo();
+
+            fCurrentCommand = current.previousCommand();
+
+            current.setPreviousCommand(fLastCommand);
+            fLastCommand = current;
+
+            fListener.textStateChanged(TextPanelEvent.UNDO_STATE_CHANGED);
+        }
+    }
+
+    /** redoes the last undone command on the command stack, if there are any */
+    void redo() {
+        if (fLastCommand != null) {
+            Command last = fLastCommand;
+            last.redo();
+
+            fLastCommand = last.previousCommand();
+
+            last.setPreviousCommand(fCurrentCommand);
+            fCurrentCommand = last;
+
+            fListener.textStateChanged(TextPanelEvent.UNDO_STATE_CHANGED);
+        }
+    }
+
+    public boolean canUndo() {
+        return fCurrentCommand != null;
+    }
+
+    public boolean canRedo() {
+        return fLastCommand != null;
+    }
+
+    public boolean isModified() {
+
+        if (fCurrentCommand == null) {
+            return fBaseIsModified;
+        }
+        else {
+            return fCurrentCommand.isModified();
+        }
+    }
+
+    public void setModified(boolean modified) {
+
+        if (fCurrentCommand == null) {
+            fBaseIsModified = modified;
+        }
+        else {
+            fCurrentCommand.setModified(modified);
+        }
+    }
+
+    public void clearLog() {
+
+        if (fCurrentCommand != null) {
+            fBaseIsModified = fCurrentCommand.isModified();
+        }
+        boolean changed = fCurrentCommand != null || fLastCommand != null;
+        fCurrentCommand = null;
+        fLastCommand = null;
+        
+        fListener.textStateChanged(TextPanelEvent.UNDO_STATE_CHANGED);
+    }
+
+    public void setLogSize(int size) {
+
+        if (size < 0) {
+            throw new IllegalArgumentException("log size cannot be negative");
+        }
+        
+        if (size < fLogSize) {
+            limitCommands(size);
+        }
+        
+        fLogSize = size;
+        
+        if (fLastCommand != null || size == 0) {
+            fLastCommand = null;
+            fListener.textStateChanged(TextPanelEvent.UNDO_STATE_CHANGED);
+        }
+    }
+
+    public int getLogSize() {
+
+        return fLogSize;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/StyleChangeCommand.java b/src/com/ibm/richtext/textpanel/StyleChangeCommand.java
new file mode 100755
index 0000000..84771ab
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/StyleChangeCommand.java
@@ -0,0 +1,49 @@
+/*
+ * @(#)$RCSfile: StyleChangeCommand.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.textformat.TextOffset;
+
+class StyleChangeCommand extends TextCommand {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private boolean fCharacter;
+    private StyleModifier fModifier;
+
+    public StyleChangeCommand(TextEditBehavior behavior,
+                              MText originalText,
+                              TextOffset selStartBefore,
+                              TextOffset selEndBefore,
+                              StyleModifier modifier,
+                              boolean character) {
+
+        super(behavior, originalText, selStartBefore.fOffset, selStartBefore, selEndBefore);
+        fModifier = modifier;
+        fCharacter = character;
+    }
+
+    public int affectedRangeEnd() {
+        return fSelEndBefore.fOffset;
+    }
+
+    public void execute() {
+        fBehavior.doModifyStyles(fAffectedRangeStart, fSelEndBefore.fOffset,
+                                 fModifier, fCharacter, fSelStartBefore, fSelEndBefore);
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/StyledTextClipboard.java b/src/com/ibm/richtext/textpanel/StyledTextClipboard.java
new file mode 100755
index 0000000..68258cc
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/StyledTextClipboard.java
@@ -0,0 +1,219 @@
+/*
+ * @(#)$RCSfile: StyledTextClipboard.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.awt.Toolkit;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+
+/**
+* Wrapper for java.awt.datatransfer.Clipboard
+* Packages an MConstText in a transferable, and puts it on the clipboard.
+*/
+
+class StyledTextClipboard implements ClipboardOwner {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    // This class has a workaround for a bug in the Windows system clipboard.
+    // The system clipboard will only return String content, even
+    // though it has a reference to the contents.  So if our
+    // clipboard is the system clipboard, we'll keep a reference
+    // to the content and use that instead of what the Clipboard returns.
+
+    private static Clipboard SYSTEM = null;
+    static {
+        try {
+            SYSTEM = Toolkit.getDefaultToolkit().getSystemClipboard();
+        }
+        catch(Throwable th) {
+        }
+    }
+
+    private static StyledTextClipboard fgSystemClipboard = null;
+
+    public static StyledTextClipboard getClipboardFor(Clipboard clipboard) {
+
+        if (clipboard == SYSTEM && SYSTEM != null) {
+            synchronized(SYSTEM) {
+                if (fgSystemClipboard == null) {
+                    fgSystemClipboard = new StyledTextClipboard(SYSTEM, true);
+                }
+            }
+            return fgSystemClipboard;
+        }
+        else {
+            return new StyledTextClipboard(clipboard, false);
+        }
+    }
+
+    private Clipboard fClipboard;
+    private boolean fUseLocalContents;
+    private Transferable fContents = null;
+
+    private StyledTextClipboard(Clipboard clipboard, boolean useLocalContents) {
+
+        if (clipboard == null) {
+            fClipboard = new Clipboard("TextPanel clipboard");
+        }
+        else {
+            fClipboard = clipboard;
+        }
+
+        fUseLocalContents = useLocalContents;
+    }
+
+    public void lostOwnership(Clipboard clipboard,
+                              Transferable contents) {
+        if (contents == fContents) {
+            this.fContents = null;
+        }
+    }
+
+    public void setContents(MConstText newContents) {
+
+        TransferableText contents = new TransferableText(newContents);
+        if (fClipboard == SYSTEM) {
+            fContents = contents;
+        }
+        fClipboard.setContents(contents, this);
+    }
+
+    private Transferable getClipboardContents() {
+
+        if (fUseLocalContents && fContents != null) {
+            return fContents;
+        }
+
+        return fClipboard.getContents(this);
+    }
+
+    /**
+     * Has contents - faster than getContents for finding out whether the
+     * clipboard has text.
+     */
+    public boolean hasContents() {
+
+        Transferable contents = getClipboardContents();
+
+        if (contents == null) {
+            return false;
+        }
+
+        return contents.isDataFlavorSupported(MConstText.styledTextFlavor) ||
+               contents.isDataFlavorSupported(DataFlavor.stringFlavor) ||
+               contents.isDataFlavorSupported(DataFlavor.plainTextFlavor);
+    }
+
+    private String getString(InputStream inStream) throws IOException {
+
+        String value = new String();
+        int bytesRead;
+
+        do {
+            byte inBytes[] = new byte[inStream.available()];
+            bytesRead = inStream.read(inBytes);
+
+            if (bytesRead != -1)
+                value = value + new String(inBytes);
+
+        } while (bytesRead != -1);
+
+        return value;
+    }
+
+    /**
+     * If the Clipboard has text content, return it as an
+     * MConstText.  Otherwise return null.
+     * @param defaultStyle the style to apply to unstyled
+     *      text (such as a String).  If the clipboard
+     *      has styled text this parameter is not used.
+     */
+    public MConstText getContents(AttributeMap defaultStyle) {
+
+        Transferable contents = getClipboardContents();
+
+        if (contents == null) {
+            return null;
+        }
+
+        DataFlavor flavors[] = contents.getTransferDataFlavors();
+
+        // search flavors for our flavor, String flavor and raw text flavor
+
+        Exception ex = null;
+
+        try {
+           int i;
+
+            for (i=0; i < flavors.length; i++) {
+                if (flavors[i].equals(MConstText.styledTextFlavor))
+                    break;
+            }
+
+            if (i < flavors.length) {
+
+                Object data = contents.getTransferData(MConstText.styledTextFlavor);
+                if (data == null)
+                    System.out.println("Data is null.");
+                return (MConstText) data;
+            }
+
+            for (i=0; i < flavors.length; i++) {
+                if (flavors[i].equals(DataFlavor.stringFlavor))
+                    break;
+            }
+
+            if (i < flavors.length) {
+
+                Object data = contents.getTransferData(DataFlavor.stringFlavor);
+                return new StyledText((String) data, defaultStyle);
+            }
+
+            for (i=0; i < flavors.length; i++) {
+                if (flavors[i].equals(DataFlavor.plainTextFlavor))
+                    break;
+            }
+
+            if (i < flavors.length) {
+
+                Object data = contents.getTransferData(DataFlavor.plainTextFlavor);
+
+                String textString = getString((InputStream) data);
+                return new StyledText(textString, defaultStyle);
+            }
+        }
+        catch(UnsupportedFlavorException e) {
+            ex = e;
+        }
+        catch(IOException e) {
+            ex = e;
+        }
+
+        System.out.println("Exception when retrieving data.  Exception:" + ex);
+        return null;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextChangeCommand.java b/src/com/ibm/richtext/textpanel/TextChangeCommand.java
new file mode 100755
index 0000000..4f8bab7
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextChangeCommand.java
@@ -0,0 +1,81 @@
+/*
+ * @(#)$RCSfile: TextChangeCommand.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.textformat.TextOffset;
+
+class TextChangeCommand extends TextCommand {
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private MConstText fNewText;
+    private TextOffset fSelStartAfter;
+    private TextOffset fSelEndAfter;
+
+    public TextChangeCommand(TextEditBehavior behavior,
+                             MText originalText,
+                             MConstText newText,
+                             int affectedRangeStart,
+                             TextOffset selStartBefore,
+                             TextOffset selEndBefore,
+                             TextOffset selStartAfter,
+                             TextOffset selEndAfter) {
+        super(behavior, originalText, affectedRangeStart, selStartBefore, selEndBefore);
+        fNewText = newText;
+        fSelStartAfter = new TextOffset();
+        fSelStartAfter.assign(selStartAfter);
+        fSelEndAfter = new TextOffset();
+        fSelEndAfter.assign(selEndAfter);
+    }
+
+    public int affectedRangeEnd() {
+        if (fNewText == null)
+            return fAffectedRangeStart;
+        else
+            return fAffectedRangeStart + fNewText.length();
+    }
+
+    public void execute() {
+        fBehavior.doReplaceText(fAffectedRangeStart, fAffectedRangeStart + fOriginalText.length(),
+                            fNewText, fSelStartAfter, fSelEndAfter);
+    }
+
+    public int affectedRangeStart() {
+        return fAffectedRangeStart;
+    }
+
+    public void setNewText(MConstText newText) {
+        fNewText = newText;
+    }
+
+    public void setSelRangeAfter(TextOffset start, TextOffset end) {
+        if (fSelStartAfter == null)
+            fSelStartAfter = new TextOffset();
+        if (fSelEndAfter == null)
+            fSelEndAfter = new TextOffset();
+        fSelStartAfter.assign(start);
+        fSelEndAfter.assign(end);
+    }
+
+    public void prependToOldText(MConstText newText) {
+        fOriginalText.insert(0, newText);
+        fAffectedRangeStart -= newText.length();
+    }
+
+    public void appendToOldText(MConstText newText) {
+        fOriginalText.append(newText);
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextCommand.java b/src/com/ibm/richtext/textpanel/TextCommand.java
new file mode 100755
index 0000000..4a5c573
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextCommand.java
@@ -0,0 +1,51 @@
+/*
+ * @(#)$RCSfile: TextCommand.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.textformat.TextOffset;
+
+abstract class TextCommand extends Command {
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    protected TextEditBehavior fBehavior;
+    protected MText fOriginalText;
+    protected int fAffectedRangeStart;
+    protected TextOffset fSelStartBefore;
+    protected TextOffset fSelEndBefore;
+
+    public TextCommand(TextEditBehavior behavior,
+                       MText originalText,
+                       int affectedRangeStart,
+                       TextOffset selStartBefore,
+                       TextOffset selEndBefore) {
+
+        fBehavior = behavior;
+        fOriginalText = originalText;
+        fAffectedRangeStart = affectedRangeStart;
+        fSelStartBefore = new TextOffset();
+        fSelStartBefore.assign(selStartBefore);
+        fSelEndBefore = new TextOffset();
+        fSelEndBefore.assign(selEndBefore);
+    }
+
+    public abstract int affectedRangeEnd();
+
+    public void undo() {
+        fBehavior.doReplaceText(fAffectedRangeStart, affectedRangeEnd(), fOriginalText,
+                            fSelStartBefore, fSelEndBefore);
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextComponent.java b/src/com/ibm/richtext/textpanel/TextComponent.java
new file mode 100755
index 0000000..d6fcb92
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextComponent.java
@@ -0,0 +1,982 @@
+/*
+ * @(#)$RCSfile: TextComponent.java,v $ $Revision: 1.3 $ $Date: 2001/03/07 02:39:01 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Rectangle;
+
+import java.awt.event.ComponentAdapter;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowEvent;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.textformat.TextOffset;
+
+import com.ibm.richtext.textformat.MFormatter;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+class TextComponent extends FakeComponent
+                    implements BehaviorOwner,
+                    FocusListener,
+                    KeyListener,
+                    MouseListener,
+                    MouseMotionListener,
+                    Scroller.Client {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    public static final int WINDOW_WIDTH = -10;
+    public static final int DEFAULT_INSET = 10;
+
+    private static final Color STRONG_CARET_COLOR = Color.black;
+    private static final Color WEAK_CARET_COLOR = Color.darkGray;
+
+    private Behavior fBehavior;
+    private MText fText;
+    private StyledTextClipboard fClipboard;
+    private boolean fScrolls;
+    private Scroller fScroller;
+
+    private DocumentView fDocumentView = null;
+
+    // sigh - can't create DocumentView until addNotify() is called.
+    // These values hold DocumentView ctor args
+    private AttributeMap fDefaultValues;
+    private boolean fViewWraps;
+    private int fViewWrapWidth;
+    private int fViewInsetAmount;
+    
+    private PanelEventBroadcaster fListener;
+
+    /**
+     * Create a new TextComponent.
+     * @param text the text model.  This model will be used for
+     * the life of the component, even if setText is called
+     * @param wraps if true, the text is wrapped to the specified
+     * wrapping width.  If false, the text wraps only at paragraph breaks.
+     * @param wrapWidth ignored if wraps is false.  Text wraps to this width
+     * unless the width is WINDOW_WIDTH, in which case text wraps to width
+     * of this component. Should not be negative (unless it is WINDOW_WIDTH).
+     * @param insetAmount the size of the margins around the text
+     * @param clipboard the clipboard to use for cut/copy/paste operations.
+     * If null, the component will use its own clipboard.
+     */
+    public TextComponent(MText text,
+                         AttributeMap defaultValues,
+                         boolean wraps,
+                         int wrapWidth,
+                         int insetAmount,
+                         StyledTextClipboard clipboard,
+                         boolean scrolls,
+                         Scroller scroller,
+                         PanelEventBroadcaster listener) {
+
+        fBehavior = null;
+
+        if (text == null) {
+            throw new IllegalArgumentException("Text is null.");
+        }
+
+        fText = text;
+        fDefaultValues = defaultValues;
+        
+        if (clipboard == null) {
+            throw new IllegalArgumentException("Clipboard is null.");
+        }
+        fClipboard = clipboard;
+
+        fScrolls = scrolls;
+
+        fScroller = scroller;
+
+        fDocumentView = null;
+
+        fViewWrapWidth = wrapWidth;
+        fViewWraps = wraps;
+        fViewInsetAmount = insetAmount;
+        fListener = listener;
+    }
+    
+    AttributeMap getDefaultValues() {
+    
+        return fDefaultValues;
+    }
+    
+    void setHost(Component component) {
+        
+        super.setHost(component);
+        
+        component.addFocusListener(this);
+        component.addKeyListener(this);
+        component.addMouseListener(this);
+        component.addMouseMotionListener(this);
+        
+        component.addComponentListener(new ComponentAdapter() {        
+            public void componentResized(ComponentEvent e) {
+                if (fDocumentView != null) {
+                    fDocumentView.hostSizeChanged();
+                    scrollToShow(fDocumentView.getDocumentBounds());
+                }
+            }
+        });
+    }
+    
+    /**
+     * ATextPanelImpl's use only!
+     */
+    Component getHost() {
+    
+        return fHost;
+    }
+    
+    // Create document view here.  TextComponent isn't fully constructed
+    // until this is called.
+    // This must be called by host component!
+    void addNotify() {
+
+        Graphics g = getGraphics();
+        if (g == null) {
+            throw new Error("Graphics should be valid here but isn't.");
+        }
+
+        fDocumentView = new DocumentView(this,
+                                         fText,
+                                         fDefaultValues,
+                                         fViewWraps,
+                                         fViewWrapWidth,
+                                         fViewInsetAmount,
+                                         fListener);
+        documentSizeChanged();
+        fListener.textStateChanged(TextPanelEvent.FORMAT_WIDTH_CHANGED);
+    }
+    
+    public Rectangle getBounds() {
+        
+        if (fHost != null) {
+            return fHost.getBounds();
+        }
+        else {
+            return new Rectangle(0, 0, 0, 0);
+        }
+    }
+    
+    Graphics getGraphics() {
+        
+        return (fHost==null)? null : fHost.getGraphics();
+    }
+    
+    void requestFocus() {
+        
+        if (fHost != null) {
+            fHost.requestFocus();
+        }
+    }
+
+    // *** Behavior management ***
+    public Behavior getBehavior() {
+        return fBehavior;
+    }
+
+    public void setBehavior(Behavior b) {
+        fBehavior = b;
+    }
+
+
+    // *** Events - just forward to behavior ***
+    public void focusGained(FocusEvent event) {
+        if (fBehavior != null)
+            fBehavior.focusGained(event);
+    }
+
+    public void focusLost(FocusEvent event) {
+        if (fBehavior != null)
+            fBehavior.focusLost(event);
+    }
+
+    public void keyPressed(KeyEvent event) {
+        if (fBehavior != null)
+            fBehavior.keyPressed(event);
+    }
+
+    public void keyTyped(KeyEvent event) {
+
+        if (fBehavior != null) {
+            fBehavior.keyTyped(event);
+        }
+    }
+
+    public void keyReleased(KeyEvent event) {
+        if (fBehavior != null)
+            fBehavior.keyReleased(event);
+    }
+
+    public void mouseClicked(MouseEvent event) {
+        return;  // no behavior method for this
+    }
+
+    public void mouseDragged(MouseEvent event) {
+        if (fBehavior != null)
+            fBehavior.mouseDragged(event);
+    }
+
+    public void mouseEntered(MouseEvent event)  {
+        if (fBehavior != null)
+            fBehavior.mouseEntered(event);
+    }
+
+    public void mouseExited(MouseEvent event)  {
+        if (fBehavior != null)
+            fBehavior.mouseExited(event);
+    }
+
+    public void mouseMoved(MouseEvent event) {
+        if (fBehavior != null)
+            fBehavior.mouseMoved(event);
+    }
+
+    public void mousePressed(MouseEvent event) {
+        if (fBehavior != null)
+            fBehavior.mousePressed(event);
+    }
+
+    public void mouseReleased(MouseEvent event)  {
+        if (fBehavior != null)
+            fBehavior.mouseReleased(event);
+    }
+
+    public boolean textControlEventOccurred(Behavior.EventType event, Object what) {
+
+        boolean handled = false;
+
+        if (fBehavior != null) {
+            handled = fBehavior.textControlEventOccurred(event, what);
+        }
+        return handled;
+    }
+
+
+    // *** Scroll methods - called by Behaviors
+
+    // viewStart, viewLimit is visible bounds of window
+    // targetStart, targetLimit is the region to scroll into view
+    private static int getScrollDifference(int viewStart,
+                                           int viewLimit,
+                                           int targetStart,
+                                           int targetLimit) {
+
+        if (viewStart <= targetStart) {
+            if (viewLimit >= targetLimit) {
+                return 0;
+            }
+            else {
+                return Math.max(viewStart-targetStart, viewLimit-targetLimit);
+            }
+        }
+        else if (viewLimit > targetLimit) {
+
+            return viewLimit - targetLimit;
+        }
+        else {
+            return 0;
+        }
+    }
+
+    void scrollToShow(Rectangle showRect) {
+
+        if (fDocumentView != null) {
+            Rectangle bounds = getBounds();
+
+            int dx = getScrollDifference(showRect.x, showRect.x + showRect.width,
+                                         bounds.x, bounds.x + bounds.width);
+            int dy = getScrollDifference(showRect.y, showRect.y + showRect.height,
+                                         bounds.y, bounds.y + bounds.height);
+
+            scrollSelf(dx, dy);
+        }
+    }
+
+    void scrollToShow(int showX, int showY) {
+
+        if (fDocumentView != null) {
+            int dx = 0, dy = 0;
+
+            Rectangle bounds = getBounds();
+            if (showX < bounds.x) {
+                dx = showX - bounds.x;
+            }
+            else if (showX > bounds.x + bounds.width) {
+                dx = showX - (bounds.x + bounds.width);
+            }
+
+            if (showY < bounds.y) {
+                dy = showY - bounds.y;
+            }
+            else if (showY > bounds.y + bounds.height) {
+                dy = showY - (bounds.y + bounds.height);
+            }
+
+            scrollSelf(dx, dy);
+        }
+    }
+
+    private int pinScrollOffset(int delta,
+                                int contentStart,
+                                int contentLength,
+                                int viewStart,
+                                int viewLength) {
+
+        if (delta > 0) {
+            int viewLimit = viewStart + viewLength;
+            int contentLimit = contentStart + contentLength;
+
+            if (viewLimit + delta > contentLimit) {
+                delta = Math.max(0, contentLimit-viewLimit);
+            }
+        }
+        else {
+            if (viewStart + delta < contentStart) {
+                delta = Math.min(0, contentStart-viewStart);
+            }
+        }
+
+        return delta;
+    }
+
+    private void scrollSelf(int dx, int dy) {
+
+        boolean scrolled = scrollBy(dx, dy);
+
+        if (scrolled && fScroller != null) {
+            Rectangle documentBounds = fDocumentView.getDocumentBounds();
+            fScroller.setPosition(-documentBounds.x,
+                                  -documentBounds.y);
+        }
+    }
+
+    private synchronized boolean scrollBy(int dx, int dy) {
+
+        boolean scrolled = false;
+
+        if (fScrolls) {
+            Rectangle documentBounds = fDocumentView.getDocumentBounds();
+            Rectangle viewBounds = getBounds();
+            
+            int oldDx = dx;
+            dx = pinScrollOffset(dx, 
+                                 documentBounds.x,
+                                 documentBounds.width,
+                                 viewBounds.x,
+                                 viewBounds.width);
+            dy = pinScrollOffset(dy, 
+                                 documentBounds.y,
+                                 documentBounds.height,
+                                 viewBounds.y,
+                                 viewBounds.height);
+
+            if (dx != 0 || dy != 0) {
+                scrolled = true;
+                fDocumentView.moveBy(-dx, -dy);
+            }
+        }
+
+        return scrolled;
+    }
+
+    // implementation of Scroller.Client - called by Scroller
+    // they have to be public since they're in an interface
+    // no one else should call these methods
+    public Rectangle getScrollSize() {
+
+        if (fDocumentView != null) {
+            return fDocumentView.getScrollableArea();
+        }
+        else {
+            return new Rectangle(0, 0, 0, 0);
+        }
+    }
+
+    public void scrollTo(int x, int y) {
+
+        if (fDocumentView != null) {
+            scrollBy(x + fDocumentView.getDocX(), y + fDocumentView.getDocY());
+        }
+    }
+
+    // *** Text access ***
+    MConstText getText() {
+        return fText;
+    }
+
+    MText getModifiableText() {
+        return fText;
+    }
+
+    StyledTextClipboard getClipboard() {
+        return fClipboard;
+    }
+
+    public synchronized void paint(Graphics g) {
+
+        if (fDocumentView != null) {
+            fDocumentView.paint(g);
+        }
+    }
+
+
+    // *** Metric info - used by Behaviors
+    Rectangle getCaretRect(TextOffset offset) {
+
+        if (fDocumentView != null) {
+            return fDocumentView.getCaretRect(offset);
+        }
+        else {
+            return new Rectangle(0, 0);
+        }
+    }
+
+    TextOffset pointToTextOffset(TextOffset result,
+                                 int x,
+                                 int y,
+                                 TextOffset anchor,
+                                 boolean infiniteMode) {
+
+        if (fDocumentView != null) {
+            return fDocumentView.pointToTextOffset(result, x, y, anchor, infiniteMode);
+        }
+        else {
+            return new TextOffset();
+        }
+    }
+
+    // *** Other stuff used by Behaviors - mostly formatter exports
+    int lineContaining(TextOffset offset) {
+
+        if (fDocumentView != null) {
+            return fDocumentView.lineContaining(offset);
+        }
+        else {
+            return 0;
+        }
+    }
+
+    int lineRangeLow(int lineNumber) {
+
+        if (fDocumentView != null) {
+            return fDocumentView.lineRangeLow(lineNumber);
+        }
+        else {
+            return 0;
+        }
+    }
+
+    int lineRangeLimit(int lineNumber) {
+
+        if (fDocumentView != null) {
+            return fDocumentView.lineRangeLimit(lineNumber);
+        }
+        else {
+            return 0;
+        }
+    }
+
+    void stopBackgroundFormatting() {
+
+        if (fDocumentView != null) {
+            fDocumentView.stopBackgroundFormatting();
+        }
+    }
+
+    Rectangle getBoundingRect(TextOffset offset1, TextOffset offset2) {
+
+        if (fDocumentView != null) {
+            return fDocumentView.getBoundingRect(offset1, offset2);
+        }
+        else {
+            return new Rectangle(0, 0, 0, 0);
+        }
+    }
+
+    synchronized void reformatAndDrawText(int reformatStart,
+                             int reformatLength,
+                             TextOffset selStart,
+                             TextOffset selEnd,
+                             Rectangle additionalUpdateRect,
+                             Color hiliteColor) {
+
+        if (fDocumentView != null) {
+            fDocumentView.reformatAndDrawText(reformatStart,
+                                              reformatLength,
+                                              selStart,
+                                              selEnd,
+                                              additionalUpdateRect,
+                                              hiliteColor);
+        }
+    }
+
+    TextOffset findNewInsertionOffset(TextOffset result,
+                                      TextOffset initialOffset,
+                                      TextOffset previousOffset,
+                                      short direction) {
+
+        if (fDocumentView != null) {
+            return fDocumentView.findNewInsertionOffset(result, initialOffset, previousOffset, direction);
+        }
+        else {
+            return new TextOffset(initialOffset);
+        }
+    }
+
+    synchronized void drawText(Graphics g,
+                  Rectangle damagedRect,
+                  boolean selectionVisible,
+                  TextOffset selStart,
+                  TextOffset selEnd,
+                  Color hiliteColor) {
+
+        if (fDocumentView != null) {
+            fDocumentView.drawText(g, damagedRect, selectionVisible, selStart, selEnd, hiliteColor);
+        }
+    }
+
+    private void documentSizeChanged() {
+
+        if (fScroller != null) {
+            fScroller.clientScrollSizeChanged();
+        }
+    }
+
+    int getFormatWidth() {
+
+        if (fDocumentView != null) {
+            return fDocumentView.getFormatWidth();
+        }
+        else {
+            return 0;
+        }
+    }
+
+    /**
+     * Return true if the paragraph at the given offset is left-to-right.
+     * @param offset an offset in the text
+     * @return true if the paragraph at the given offset is left-to-right
+     */
+    boolean paragraphIsLeftToRight(int offset) {
+        
+        if (fDocumentView != null) {
+            return fDocumentView.paragraphIsLeftToRight(offset);
+        }
+        else {
+            return true;
+        }
+    }
+    
+    private static final class DocumentView {
+
+        private TextComponent fHost;
+        private boolean fWraps;
+        private boolean fWrapToWindowWidth;
+        private int fInsetAmount;
+        private PanelEventBroadcaster fListener;
+
+        // fBounds is the total scrollable area of the document (including insets)
+        private Rectangle fBounds = new Rectangle();
+        
+        private Point fOrigin;
+
+        private MFormatter fFormatter;
+
+        private OffscreenBufferCache fBufferCache;
+
+        // Note, when this is true the caret won't blink in 1.1.  Looks like an AWT bug.
+        private static boolean fNoOffscreenBuffer =
+                            Boolean.getBoolean("TextComponent.NoOffscreenBuffer");
+
+        // Amount by which to reduce the format width to allow for right-aligned carets.
+        private final int CARET_SLOP = 1;
+
+        DocumentView(TextComponent host,
+                     MConstText text,
+                     AttributeMap defaultValues,
+                     boolean wraps,
+                     int wrapWidth,
+                     int insetAmount,
+                     PanelEventBroadcaster listener) {
+
+            fHost = host;
+            fWrapToWindowWidth = wrapWidth == WINDOW_WIDTH;
+            fInsetAmount = insetAmount;
+            fListener = listener;
+
+            initFormatterAndSize(text, defaultValues, wraps, wrapWidth);
+
+            fBufferCache = new OffscreenBufferCache(host.fHost);
+        }
+        
+        /**
+         * Note: this computes the bounds rectangle relative to fOrigin
+         */
+        private void calcBoundsRect() {
+        
+            final int insetDim = 2 * fInsetAmount;
+
+            final int minX = fFormatter.minX();
+            final int minY = fFormatter.minY();
+
+            fBounds.setBounds(fOrigin.x + minX - fInsetAmount,
+                              fOrigin.y + minY - fInsetAmount,
+                              fFormatter.maxX() - minX + insetDim, 
+                              fFormatter.maxY() - minY + insetDim);
+            //if (minX <= 0) {
+            //    System.out.println("calcBoundsRect: minX="+minX+
+            //                       "; bounds.x="+fBounds.x+"; width="+fBounds.width);
+            //}
+        }
+
+        private void initFormatterAndSize(MConstText text, 
+                                          AttributeMap defaultValues,
+                                          boolean wraps,
+                                          int wrapWidth) {
+
+            Rectangle hostBounds = fHost.getBounds();
+            int formatWidth;
+
+            if (!wraps || fWrapToWindowWidth) {
+                formatWidth = hostBounds.width - 2 * fInsetAmount;
+                if (formatWidth <= CARET_SLOP) {
+                    formatWidth = CARET_SLOP+1;
+                }
+            }
+            else {
+                formatWidth = wrapWidth;
+            }
+
+            fFormatter = MFormatter.createFormatter(text,
+                                                    defaultValues,
+                                                    formatWidth-CARET_SLOP,
+                                                    wraps,
+                                                    fHost.getGraphics());
+
+            fFormatter.formatToHeight(hostBounds.height * 2);
+            fOrigin = new Point(fInsetAmount, fInsetAmount);
+            calcBoundsRect();
+        }
+
+        // notification method called by TextComponent
+        void hostSizeChanged() {
+
+            final boolean wrap = fFormatter.wrap();
+            if (fWrapToWindowWidth || !wrap) {
+
+                Rectangle hostBounds = fHost.getBounds();
+                final int insetDim = 2 * fInsetAmount;
+
+                int formatWidth = hostBounds.width - 2*fInsetAmount;
+                if (formatWidth <= CARET_SLOP) {
+                    formatWidth = CARET_SLOP+1;
+                }
+                fFormatter.setLineBound(formatWidth-CARET_SLOP);
+
+                fFormatter.formatToHeight(hostBounds.y + (hostBounds.height*2) - fOrigin.y);
+
+                calcBoundsRect();
+                
+                //System.out.println("Window bounds="+hostBounds+"; document bounds="+fBounds);
+
+                fHost.documentSizeChanged();
+                fListener.textStateChanged(TextPanelEvent.FORMAT_WIDTH_CHANGED);
+                //System.out.println("formatWidth="+formatWidth);
+                //System.out.println("document bounds="+fBounds);
+                //System.out.println();
+            }
+            //dumpWidthInfo();
+        }
+
+        int getFormatWidth() {
+
+            return fFormatter.lineBound();
+        }
+        
+        boolean paragraphIsLeftToRight(int offset) {
+            
+            int lineNumber = fFormatter.lineContaining(offset);
+            return fFormatter.lineIsLeftToRight(lineNumber);
+        }
+
+        private void textSizeMightHaveChanged() {
+
+            boolean changed = false;
+            final int insetDim = 2 * fInsetAmount;
+            
+            int textHeight = fFormatter.maxY() - fFormatter.minY() + insetDim;
+            if (textHeight != fBounds.height) {
+                fBounds.height = textHeight;
+                changed = true;
+            }
+
+            if (!fFormatter.wrap()) {
+                int textWidth = fFormatter.maxX() - fFormatter.minX() + insetDim;
+                if (textWidth != fBounds.width) {
+                    fBounds.width = textWidth;
+                    changed = true;
+                }
+            }
+
+            if (changed) {
+                //System.out.println("Text size changed.  fBounds: " + fBounds);
+                calcBoundsRect();
+                fHost.documentSizeChanged();
+                fHost.scrollToShow(getDocumentBounds());
+            }
+        }
+
+        private void doDrawText(Graphics g,
+                                Rectangle drawRect,
+                                boolean selectionVisible,
+                                TextOffset selStart,
+                                TextOffset selEnd,
+                                Color hiliteColor) {
+
+            Color oldColor = g.getColor();
+            g.setColor(fHost.getHost().getBackground());
+            g.fillRect(drawRect.x, drawRect.y, drawRect.width, drawRect.height);
+            g.setColor(oldColor);
+
+            //            g.clearRect(drawRect.x, drawRect.y, drawRect.width, drawRect.height);
+
+            if (selectionVisible) {
+                fFormatter.draw(g, drawRect, fOrigin, selStart, selEnd, hiliteColor);
+            }
+            else {
+                fFormatter.draw(g, drawRect, fOrigin, null, null, null);
+            }
+
+            if (selStart != null && selStart.equals(selEnd) && selectionVisible) {
+
+                fFormatter.drawCaret(g, selStart, fOrigin,
+                                    STRONG_CARET_COLOR, WEAK_CARET_COLOR);
+            }
+        }
+
+        void drawText(Graphics g,
+                      Rectangle drawRect,
+                      boolean selectionVisible,
+                      TextOffset selStart,
+                      TextOffset selEnd,
+                      Color hiliteColor) {
+
+            if (g != null) {
+                drawRect = drawRect.intersection(fHost.getBounds());
+                //System.out.println("drawText:drawRect: " + drawRect);
+                g.clipRect(drawRect.x, drawRect.y, drawRect.width, drawRect.height);
+                if (fNoOffscreenBuffer) {
+                    doDrawText(g, drawRect, selectionVisible, selStart, selEnd, hiliteColor);
+                }
+                else {
+                    Image offscreenBuffer = fBufferCache.getBuffer(drawRect.width, drawRect.height);
+                    Graphics offscreenGraphics = offscreenBuffer.getGraphics();
+                    offscreenGraphics.translate(-drawRect.x, -drawRect.y);
+    
+                    doDrawText(offscreenGraphics, drawRect, selectionVisible, selStart, selEnd, hiliteColor);
+    
+                    g.drawImage(offscreenBuffer, drawRect.x, drawRect.y, fHost.fHost);
+                }
+            }
+            textSizeMightHaveChanged();
+        }
+
+        void reformatAndDrawText(int reformatStart,
+                                 int reformatLength,
+                                 TextOffset selStart,
+                                 TextOffset selEnd,
+                                 Rectangle additionalUpdateRect,
+                                 Color hiliteColor) {
+
+            Rectangle visibleBounds = fHost.getBounds();
+            Rectangle redrawRect = fFormatter.updateFormat(reformatStart,
+                                                           reformatLength,
+                                                           visibleBounds,
+                                                           fOrigin);
+            //System.out.println("[1] redrawRect: " + redrawRect);
+
+            if (additionalUpdateRect != null) {
+                redrawRect.add(additionalUpdateRect);
+                //System.out.println("[2] redrawRect: " + redrawRect);
+            }
+
+            boolean haveSelection;
+
+            if (selStart != null && selEnd != null) {
+                haveSelection = true;
+                redrawRect.add(fFormatter.getBoundingRect(selStart, selEnd, fOrigin, fFormatter.LOOSE));
+                //System.out.println("[3] redrawRect: " + redrawRect);
+            }
+            else {
+                haveSelection = false;
+            }
+
+            drawText(fHost.getGraphics(), redrawRect, haveSelection, selStart, selEnd, hiliteColor);
+        }
+
+        private void letBehaviorDraw(Graphics g, Rectangle drawRect) {
+
+            boolean result = false;
+
+            if (fHost.fBehavior != null) {
+                result = fHost.fBehavior.paint(g, drawRect);
+            }
+
+            if (!result) {
+                drawText(g, drawRect, false, null, null, null);
+            }
+        }
+
+        void moveBy(int dx, int dy) {
+
+            Rectangle visibleBounds = fHost.getBounds();
+            Graphics g = fHost.getGraphics();
+
+            fBounds.x += dx;
+            fBounds.y += dy;
+            fOrigin.x += dx;
+            fOrigin.y += dy;
+
+            Rectangle refreshRect = new Rectangle(visibleBounds);
+
+            if (dx == 0) {
+                if (g != null) {
+                    g.copyArea(visibleBounds.x, visibleBounds.y, visibleBounds.width, visibleBounds.height, dx, dy);
+                }
+                if (dy < 0) {
+                    refreshRect.y = visibleBounds.y + visibleBounds.height + dy;
+                }
+                refreshRect.height = Math.abs(dy);
+                //System.out.println("refreshRect=" + refreshRect);
+            }
+
+            letBehaviorDraw(g, refreshRect);
+        }
+        
+        private Rectangle getInsetBounds() {
+            
+            int insetDim = 2 * fInsetAmount;
+            return new Rectangle(fBounds.x-fInsetAmount,
+                                 fBounds.y-fInsetAmount,
+                                 fBounds.width+insetDim,
+                                 fBounds.height+insetDim);
+        }
+
+        void paint(Graphics g) {
+
+            Rectangle hostBounds = fHost.getBounds();
+            Rectangle textRefreshRect = hostBounds.intersection(getInsetBounds());
+            letBehaviorDraw(g, textRefreshRect);
+        }
+
+        Rectangle getCaretRect(TextOffset offset) {
+
+            return fFormatter.getCaretRect(offset, fOrigin);
+        }
+
+        TextOffset pointToTextOffset(TextOffset result,
+                                     int x,
+                                     int y,
+                                     TextOffset anchor,
+                                     boolean infiniteMode) {
+
+            return fFormatter.pointToTextOffset(result, x, y, fOrigin, anchor, infiniteMode);
+        }
+
+        Rectangle getScrollableArea() {
+
+            Rectangle area = new Rectangle(fBounds);
+            area.x += fInsetAmount - fOrigin.x;
+            area.y += fInsetAmount - fOrigin.y;
+            return area;
+        }
+
+        /**
+         * Doesn't clone so TextComponent needs to be nice.  TextComponent
+         * is the only class which can access this anyway.
+         */
+        Rectangle getDocumentBounds() {
+
+            return fBounds;
+        }
+        
+        int getDocX() {
+        
+            return fOrigin.x - fInsetAmount;
+        }
+        
+        int getDocY() {
+        
+            return fOrigin.y - fInsetAmount;
+        }
+
+        int lineContaining(TextOffset offset) {
+
+            return fFormatter.lineContaining(offset);
+        }
+
+        int lineRangeLow(int lineNumber) {
+
+            return fFormatter.lineRangeLow(lineNumber);
+        }
+
+        int lineRangeLimit(int lineNumber) {
+
+            return fFormatter.lineRangeLimit(lineNumber);
+        }
+
+        void stopBackgroundFormatting() {
+
+            fFormatter.stopBackgroundFormatting();
+        }
+
+        Rectangle getBoundingRect(TextOffset offset1, TextOffset offset2) {
+
+            Rectangle r = fFormatter.getBoundingRect(offset1, offset2, fOrigin, fFormatter.TIGHT);
+            //r.width += CARET_SLOP;
+            //System.out.println("offset1="+offset1+"; offset2="+offset2);
+            //System.out.println("bounds width="+r.width+"; host width="+(fHost.getBounds().width));
+            return r;
+        }
+
+        TextOffset findNewInsertionOffset(TextOffset result,
+                                          TextOffset initialOffset,
+                                          TextOffset previousOffset,
+                                          short direction) {
+
+            return fFormatter.findNewInsertionOffset(
+                        result, initialOffset, previousOffset, direction);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextEditBehavior.java b/src/com/ibm/richtext/textpanel/TextEditBehavior.java
new file mode 100755
index 0000000..d9f6de0
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextEditBehavior.java
@@ -0,0 +1,484 @@
+/*
+ * @(#)$RCSfile: TextEditBehavior.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Rectangle;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.textformat.TextOffset;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+// All changes to the text should happen in this class, or in
+// its TypingInteractor.
+
+class TextEditBehavior extends Behavior {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private TextComponent fTextComponent;
+    private TextSelection fSelection;
+    private MText fText;
+    private SimpleCommandLog fCommandLog;
+    private PanelEventBroadcaster fListener;
+    private TypingInteractor fTypingInteractor = null;
+    private KeyRemap fRemap;
+    
+    private AttributeMap fSavedTypingStyle = null;
+    private int fSavedInsPt = 0;
+    
+    public TextEditBehavior(TextComponent textComponent,
+                            TextSelection selection,
+                            PanelEventBroadcaster listener,
+                            KeyRemap remap) {
+
+        fTextComponent = textComponent;
+        fSelection = selection;
+        fText = textComponent.getModifiableText();
+        fCommandLog = new SimpleCommandLog(listener);
+        fListener = listener;
+        fRemap = remap;
+    }
+
+    public KeyRemap getKeyRemap() {
+
+        return fRemap;
+    }
+
+    public void setKeyRemap(KeyRemap remap) {
+
+        fRemap = remap;
+    }
+
+    public boolean textControlEventOccurred(Behavior.EventType event, Object what) {
+
+        boolean handled = true;
+        
+        if (event == Behavior.CHARACTER_STYLE_MOD ||
+            event == Behavior.PARAGRAPH_STYLE_MOD) {
+            doStyleChange(event, what);
+        }
+        else if (event == Behavior.CUT) {
+            doCut();
+        }
+        else if (event == Behavior.PASTE) {
+            doPaste();
+        }
+        else if (event == Behavior.CLEAR) {
+            doClear();
+        }
+        else if (event == Behavior.REPLACE) {
+            doUndoableReplace((TextReplacement) what);
+        }
+        else if (event == Behavior.UNDO) {
+            fCommandLog.undo();
+        }
+        else if (event == Behavior.REDO) {
+            fCommandLog.redo();
+        }
+        else if (event == Behavior.SET_MODIFIED) {
+            fCommandLog.setModified(what == Boolean.TRUE);
+        }
+        else if (event == Behavior.CLEAR_COMMAND_LOG) {
+            fCommandLog.clearLog();
+        }
+        else if (event == Behavior.SET_COMMAND_LOG_SIZE) {
+            fCommandLog.setLogSize(((Integer)what).intValue());
+        }
+        else {
+            handled = super.textControlEventOccurred(event, what);
+        }
+
+        checkSavedTypingStyle();
+        
+        return handled;
+    }
+
+    /**
+     * It's unfortunate that the text is modified and reformatted in
+     * three different methods.  This method is the "common prologue"
+     * for all text modifications.
+     *
+     * This method should be called before modifying and reformatting
+     * the text.  It does three things:  stops caret blinking, stops
+     * background formatting, and returns the Rectangle containing the
+     * current (soon-to-be obsolete) selection.
+     */
+    private Rectangle prepareForTextEdit() {
+
+        fSelection.stopCaretBlinking();
+        fTextComponent.stopBackgroundFormatting();
+        return fTextComponent.getBoundingRect(fSelection.getStart(), fSelection.getEnd());
+    }
+
+    private void doClear() {
+        TextRange selRange = fSelection.getSelectionRange();
+
+        if (selRange.start == selRange.limit)
+            return;
+
+        doUndoableTextChange(selRange.start, selRange.limit, null, new TextOffset(selRange.
+                            start), new TextOffset(selRange.start));
+    }
+
+    private void doCut() {
+        TextRange selRange = fSelection.getSelectionRange();
+
+        if (selRange.start == selRange.limit)
+            return;
+
+        fTextComponent.getClipboard().setContents(fText.extract(selRange.start, selRange.limit));
+        doUndoableTextChange(selRange.start, selRange.limit, null, new TextOffset(selRange.start), new TextOffset(selRange.start));
+
+        fListener.textStateChanged(TextPanelEvent.CLIPBOARD_CHANGED);
+    }
+
+    private void doPaste() {
+        TextRange selRange = fSelection.getSelectionRange();
+        MConstText clipText = fTextComponent.getClipboard().getContents(AttributeMap.EMPTY_ATTRIBUTE_MAP);
+
+        if (clipText != null) {
+            doUndoableTextChange(selRange.start, selRange.limit, clipText,
+                                new TextOffset(selRange.start + clipText.length()),
+                                new TextOffset(selRange.start + clipText.length()));
+        }
+        else {
+            fListener.textStateChanged(TextPanelEvent.CLIPBOARD_CHANGED);
+        }
+    }
+
+    private void doUndoableReplace(TextReplacement replacement) {
+
+        doUndoableTextChange(replacement.getStart(),
+                             replacement.getLimit(),
+                             replacement.getText(),
+                             replacement.getSelectionStart(),
+                             replacement.getSelectionLimit());
+    }
+
+    /**
+     * Only TypingInteractor and TextCommand should call this!
+     */
+    void doReplaceText(int start,
+                       int limit,
+                       MConstText newText,
+                       TextOffset newSelStart,
+                       TextOffset newSelEnd) {
+
+        int textLength;
+
+        fText.resetDamagedRange();
+
+        Rectangle oldSelRect = prepareForTextEdit();
+
+        if (newText == null) {
+            textLength = 0;
+            fText.remove(start, limit);
+        }
+        else {
+            textLength = newText.length();
+            fText.replace(start, limit, newText, 0, textLength);
+        }
+        fSelection.setSelectionRange(newSelStart, newSelEnd, newSelStart);
+        reformatAndDrawText(fSelection.getStart(),
+                            fSelection.getEnd(),
+                            oldSelRect);
+    }
+
+    /**
+     * Only the typing interactor should call this!
+     */
+    void doReplaceSelectedText(char ch, AttributeMap charStyle) {
+
+        int start = fSelection.getStart().fOffset;
+        int limit = fSelection.getEnd().fOffset;
+        TextOffset newOffset = new TextOffset(start + 1);
+        doReplaceText(start, limit, ch, charStyle, newOffset, newOffset);
+    }
+
+    private void doReplaceText(int start,
+                               int limit,
+                               char ch,
+                               AttributeMap charStyle,
+                               TextOffset newSelStart,
+                               TextOffset newSelEnd) {
+
+        fText.resetDamagedRange();
+
+        Rectangle oldSelRect = prepareForTextEdit();
+
+        fText.replace(start, limit, ch, charStyle);
+
+        fSelection.setSelectionRange(newSelStart, newSelEnd, newSelStart);
+        reformatAndDrawText(fSelection.getStart(),
+                            fSelection.getEnd(),
+                            oldSelRect);
+    }
+
+    private void doStyleChange(Behavior.EventType event, Object what) {
+
+        TextRange selRange = fSelection.getSelectionRange();
+        boolean character = (event == Behavior.CHARACTER_STYLE_MOD);
+
+        if (selRange.start != selRange.limit || !character) {
+            doUndoableStyleChange(what, character);
+        }
+        else {
+            TypingInteractor interactor =
+                new TypingInteractor(fTextComponent, 
+                                     fSelection,
+                                     fSavedTypingStyle,
+                                     this,
+                                     fCommandLog,
+                                     fListener);
+
+            interactor.addToOwner(fTextComponent);
+            interactor.textControlEventOccurred(event, what);
+        }
+    }
+
+    /**
+     * Only text commands should call this method!
+     */
+    void doModifyStyles(int start,
+                        int limit,
+                        StyleModifier modifier,
+                        boolean character,
+                        TextOffset newSelStart,
+                        TextOffset newSelEnd) {
+
+        fText.resetDamagedRange();
+
+        Rectangle oldSelRect = prepareForTextEdit();
+
+        if (character) {
+            fText.modifyCharacterStyles(start, limit, modifier);
+        }
+        else {
+            fText.modifyParagraphStyles(start, limit, modifier);
+        }
+
+        fSelection.setSelectionRange(newSelStart, newSelEnd, newSelStart);
+        reformatAndDrawText(newSelStart,
+                            newSelEnd,
+                            oldSelRect);
+    }
+
+    private void doUndoableStyleChange(Object what,
+                                       boolean character) {
+
+        TextOffset selStart = fSelection.getStart();
+        TextOffset selEnd = fSelection.getEnd();
+
+        MText oldText = fText.extractWritable(selStart.fOffset, selEnd.fOffset);
+        StyleChangeCommand command = new StyleChangeCommand(
+                this, oldText, selStart, selEnd, (StyleModifier) what, character);
+
+        fCommandLog.addAndDo(command);
+
+        fListener.textStateChanged(TextPanelEvent.SELECTION_STYLES_CHANGED);
+    }
+
+    private void doUndoableTextChange(int start,
+                                      int limit,
+                                      MConstText newText,
+                                      TextOffset newSelStart,
+                                      TextOffset newSelEnd) {
+
+        TextChangeCommand command = new TextChangeCommand(this, fText.extractWritable(start, limit),
+                                newText, start, fSelection.getStart(), fSelection.getEnd(),
+                                newSelStart, newSelEnd);
+
+        fCommandLog.addAndDo(command);
+    }
+
+    public boolean canUndo() {
+
+        boolean canUndo = false;
+
+        if (fTypingInteractor != null) {
+            canUndo = fTypingInteractor.hasPendingCommand();
+        }
+
+        if (!canUndo) {
+            canUndo = fCommandLog.canUndo();
+        }
+
+        return canUndo;
+    }
+
+    public boolean canRedo() {
+
+        return fCommandLog.canRedo();
+    }
+
+    public boolean isModified() {
+
+        if (fTypingInteractor != null) {
+            if (fTypingInteractor.hasPendingCommand()) {
+                return true;
+            }
+        }
+        return fCommandLog.isModified();
+    }
+
+    public int getCommandLogSize() {
+
+        return fCommandLog.getLogSize();
+    }
+
+    public AttributeMap getInsertionPointStyle() {
+
+        if (fTypingInteractor != null) {
+            return fTypingInteractor.getTypingStyle();
+        }
+
+        if (fSavedTypingStyle != null) {
+            return fSavedTypingStyle;
+        }
+        
+        TextRange range = fSelection.getSelectionRange();
+        return typingStyleAt(fText, range.start, range.limit);
+    }
+    
+    public boolean keyPressed(KeyEvent e) {
+
+        boolean handled = true;
+        if (TypingInteractor.handledByTypingInteractor(e)) {
+            TypingInteractor interactor = new TypingInteractor(fTextComponent,
+                                                               fSelection,
+                                                               fSavedTypingStyle,
+                                                               this,
+                                                               fCommandLog,
+                                                               fListener);
+
+            interactor.addToOwner(fTextComponent);
+            interactor.keyPressed(e);
+        }
+        else {
+            handled = super.keyPressed(e);
+            checkSavedTypingStyle();
+        }
+        
+        return handled;
+    }
+
+    public boolean keyTyped(KeyEvent e) {
+        
+        boolean handled = true;
+        if (TypingInteractor.handledByTypingInteractor(e)) {
+            TypingInteractor interactor = new TypingInteractor(fTextComponent, 
+                                                               fSelection,
+                                                               fSavedTypingStyle,
+                                                               this,
+                                                               fCommandLog,
+                                                               fListener);
+
+            interactor.addToOwner(fTextComponent);
+            interactor.keyTyped(e);
+        }
+        else {
+            handled = super.keyTyped(e);
+            checkSavedTypingStyle();
+        }
+        
+        return handled;
+    }
+
+    public boolean mouseReleased(MouseEvent e) {
+        
+        boolean result = super.mouseReleased(e);
+        checkSavedTypingStyle();
+        return result;
+    }
+    
+    private void reformatAndDrawText(TextOffset selStart,
+                                     TextOffset selLimit,
+                                     Rectangle oldSelRect)
+    {
+        if (!fSelection.enabled()) {
+            selStart = selLimit = null;
+        }
+
+        int reformatStart = fText.damagedRangeStart();
+        int reformatLength = fText.damagedRangeLimit() - reformatStart;
+
+        if (reformatStart != Integer.MAX_VALUE) {
+            fTextComponent.reformatAndDrawText(reformatStart,
+                                               reformatLength,
+                                               selStart,
+                                               selLimit,
+                                               oldSelRect,
+                                               fSelection.getHighlightColor());
+        }
+
+        fSelection.scrollToShowSelection();
+        
+        // sometimes this should send SELECTION_STYLES_CHANGED
+        fListener.textStateChanged(TextPanelEvent.TEXT_CHANGED);
+
+        fSelection.restartCaretBlinking(true);
+    }
+
+    /**
+     * Only TypingInteractor should call this.
+     */
+    void setTypingInteractor(TypingInteractor interactor) {
+        fTypingInteractor = interactor;
+    }
+
+    /**
+     * Only TypingInteractor should call this.
+     */
+    void setSavedTypingStyle(AttributeMap style, int insPt) {
+    
+        fSavedTypingStyle = style;
+        fSavedInsPt = insPt;
+    }
+    
+    private void checkSavedTypingStyle() {
+    
+        if (fSavedTypingStyle != null) {
+            int selStart = fSelection.getStart().fOffset;
+            int selLimit = fSelection.getEnd().fOffset;
+            if (selStart != fSavedInsPt || selStart != selLimit) {
+                fSavedTypingStyle = null;
+            }
+        }            
+    }
+    
+    /**
+     * Return the style appropriate for typing on the given selection
+     * range.
+     */
+    public static AttributeMap typingStyleAt(MConstText text, int start, int limit) {
+
+        if (start < limit) {
+            return text.characterStyleAt(start);
+        }
+        else if (start > 0) {
+            return text.characterStyleAt(start - 1);
+        }
+        else {
+            return text.characterStyleAt(0);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextPanel.java b/src/com/ibm/richtext/textpanel/TextPanel.java
new file mode 100755
index 0000000..179b289
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextPanel.java
@@ -0,0 +1,543 @@
+/*
+ * @(#)$RCSfile: TextPanel.java,v $ $Revision: 1.2 $ $Date: 2000/04/22 17:10:10 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Panel;
+import java.awt.Scrollbar;
+
+import java.awt.datatransfer.Clipboard;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+
+/**
+ * TextPanel is an implementation of MTextPanel in an AWT Panel.
+ * @see MTextPanel
+ */
+public final class TextPanel extends Panel implements MTextPanel {
+
+    private ATextPanelImpl fImpl;
+    
+    /**
+     * Return a TextPanelSettings instance with all settings set
+     * to the default values.  Clients can modify this object;
+     * modifications will not affect the default values.
+     * @return a TextPanelSettings instance set to default values
+     * @see TextPanelSettings
+     */
+    public static TextPanelSettings getDefaultSettings() {
+
+        return ATextPanelImpl.getDefaultSettings();
+    }
+
+    /**
+     * Create a new TextPanel with the default settings.
+     * @param initialText the text document.  If null document text is empty.
+     * @param clipboard the clipboard to use for cut, copy, and paste
+     *  operations.  If null this panel will use a private clipboard.
+     */
+    public TextPanel(MConstText initialText,
+                     Clipboard clipboard) {
+
+        this(ATextPanelImpl.fgDefaultSettings, initialText, clipboard);
+    }
+
+    /**
+     * Create a new TextPanel.
+     * @param settings the settings for this TextPanel
+     * @param initialText the text document.  If null document text is empty.
+     * @param clipboard the clipboard to use for cut, copy, and paste
+     *  operations.  If null this panel will use a private clipboard.
+     * @see TextPanelSettings
+     */
+    public TextPanel(TextPanelSettings settings,
+                     MConstText initialText,
+                     Clipboard clipboard) {
+
+        Scrollbar horzSb = null;
+        Scrollbar vertSb = null;
+        
+        if (settings.getScrollable()) {
+
+            setLayout(new ScrollBarLayout());
+
+            boolean scrollBarsVisible = settings.getScrollBarsVisible();
+
+            if (scrollBarsVisible) {
+                horzSb = new Scrollbar(Scrollbar.HORIZONTAL);
+                vertSb = new Scrollbar(Scrollbar.VERTICAL);
+                add("South", horzSb);
+                add("East", vertSb);
+            }
+        }
+        else {
+            setLayout(new BorderLayout());
+        }
+
+        fImpl = new ATextPanelImpl(new RunStrategy(),
+                                   settings,
+                                   initialText,
+                                   clipboard,
+                                   this,
+                                   horzSb,
+                                   vertSb);
+                                   
+        final FakeComponent textComponent = fImpl.getTextComponent();
+        
+        Component textHost = new Component() {
+            {
+                textComponent.setHost(this);
+            }
+            public void addNotify() {
+                super.addNotify();
+                textComponent.addNotify();
+            }
+            public void paint(Graphics g) {
+                textComponent.paint(g);
+            }
+        };
+        
+        add("Center", textHost);
+
+        textHost.requestFocus();
+    }
+
+    /**
+     * Add the given TextPanelListener to the listeners which will
+     * receive update notifications from this TextPanel.
+     * @param listener the listener to add
+     */
+    public void addListener(TextPanelListener listener) {
+
+        fImpl.addListener(listener);
+    }
+
+    /**
+     * Remove the given TextPanelListener from the listeners which will
+     * receive update notifications from this TextPanel.
+     * @param listener the listener to remove
+     */
+    public void removeListener(TextPanelListener listener) {
+
+        fImpl.removeListener(listener);
+    }
+
+//============
+// Text Access
+//============
+
+    /**
+     * Set the document to <tt>newText</tt>.  This operation
+     * modifies the text in the TextPanel.  It does not modify or adopt
+     * <tt>newText</tt>.  This method sets the selection an insertion point at
+     * the end of the text.
+     * @param newText the text which will replace the current text.
+     */
+    public void setText(MConstText newText) {
+
+        fImpl.setText(newText);
+    }
+
+    /**
+     * Append the given text to the end of the document.  Equivalent to
+     * <tt>insert(newText, getTextLength())</tt>.
+     * @param newText the text to append to the document
+     */
+    public void append(MConstText newText) {
+
+        fImpl.append(newText);
+    }
+
+    /**
+     * Insert the given text into the document at the given position.
+     * Equivalent to
+     * <tt>replaceRange(newText, position, position)</tt>.
+     * @param newText the text to insert into the document.
+     * @param position the position in the document where the
+     *     text will be inserted
+     */
+    public void insert(MConstText newText, int position) {
+
+        fImpl.insert(newText, position);
+    }
+
+    /**
+     * Replace the given range with <tt>newText</tt>.  After this
+     * operation the selection range is an insertion point at the
+     * end of the new text.
+     * @param newText the text with which to replace the range
+     * @param start the beginning of the range to replace
+     * @param end the end of the range to replace
+     */
+    public void replaceRange(MConstText newText, int start, int end) {
+
+        fImpl.replaceRange(newText, start, end);
+    }
+
+    /**
+     * Return the length of the text document in the TextPanel.
+     * @return the length of the text document in the TextPanel
+     */
+    public int getTextLength() {
+
+        return fImpl.getTextLength();
+    }
+
+    /**
+     * Return the text document in the TextPanel.
+     * @return the text document in the TextPanel.
+     */
+    public MConstText getText() {
+
+        return fImpl.getText();
+    }
+
+//============
+// Selection Access
+//============
+
+    /**
+     * Return the offset of the start of the selection.
+     */
+    public int getSelectionStart() {
+
+        return fImpl.getSelectionStart();
+    }
+
+    /**
+     * Return the offset of the end of the selection.
+     */
+    public int getSelectionEnd() {
+
+        return fImpl.getSelectionEnd();
+    }
+
+    /**
+     * Set the beginning of the selection range.  This is
+     * equivalent to <tt>select(selectionStart, getSelectionEnd())</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionStart(int selectionStart) {
+
+        fImpl.setSelectionStart(selectionStart);
+    }
+
+    /**
+     * Set the end of the selection range.  This is
+     * equivalent to <tt>select(getSelectionStart(), selectionEnd)</tt>.
+     * @param selectionStart the start of the new selection range
+     */
+    public void setSelectionEnd(int selectionEnd) {
+
+        fImpl.setSelectionEnd(selectionEnd);
+    }
+
+    /**
+     * Set the selection range to an insertion point at the given
+     * offset.  This is equivalent to
+     * <tt>select(position, position)</tt>.
+     * @param position the offset of the new insertion point
+     */
+    public void setCaretPosition(int position) {
+
+        fImpl.setCaretPosition(position);
+    }
+
+    /**
+     * Set the selection range to the given range.  The range start
+     * is pinned between 0 and the text length;  the range end is pinned
+     * between the range start and the end of the text.  These semantics
+     * are identical to those of <tt>java.awt.TextComponent</tt>.
+     * This method has no effect if the text is not selectable.
+     * @param selectionStart the beginning of the selection range
+     * @param selectionEnd the end of the selection range
+     */
+    public void select(int selectionStart, int selectionEnd) {
+
+        fImpl.select(selectionStart, selectionEnd);
+    }
+
+    /**
+     * Select all of the text in the document.  This method has no effect if
+     * the text is not selectable.
+     */
+    public void selectAll() {
+
+        fImpl.selectAll();
+    }
+
+
+//============
+// Format Width
+//============
+
+    /**
+     * Return the total format width, in pixels.  The format width is the
+     * width to which text is wrapped.
+     * @return the format width
+     */
+    public int getFormatWidth() {
+
+        return fImpl.getFormatWidth();
+    }
+    
+    /**
+     * Return true if the paragraph at the given offset is left-to-right.
+     * @param offset an offset in the text
+     * @return true if the paragraph at the given offset is left-to-right
+     */
+    public boolean paragraphIsLeftToRight(int offset) {
+        
+        return fImpl.paragraphIsLeftToRight(offset);
+    }
+
+    /**
+     * Return true if there is a change which can be undone.
+     * @return true if there is a change which can be undone.
+     */
+    public boolean canUndo() {
+
+        return fImpl.canUndo();
+    }
+
+    /**
+     * Return true if there is a change which can be redone.
+     * @return true if there is a change which can be redone.
+     */
+    public boolean canRedo() {
+
+        return fImpl.canRedo();
+    }
+
+    /**
+     * Return true if the clipboard contains contents which could be
+     * transfered into the text.
+     * @return true if the clipboard has text content.
+     */
+    public boolean clipboardNotEmpty() {
+
+        return fImpl.clipboardNotEmpty();
+    }
+
+    /**
+     * Return an AttributeMap of keys with default values.  The default
+     * values are used when displaying text for values which are not
+     * specified in the text.
+     * @return an AttributeMap of default key-value pairs
+     */
+    public AttributeMap getDefaultValues() {
+
+        return fImpl.getDefaultValues();
+    }
+
+    /**
+     * This method inspects the character style runs in the selection
+     * range (or the typing style at the insertion point).  It returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li><tt>MULTIPLE_VALUES</tt>, if two or more style runs have different 
+     * values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be the default style for <tt>key</tt>,
+     * as defined by the default values AttributeMap.  Note that if
+     * <tt>key</tt> does not have a default value this method may return
+     * null.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @see MTextPanel#MULTIPLE_VALUES
+     */
+    public Object getCharacterStyleOverSelection(Object key) {
+        
+        return fImpl.getCharacterStyleOverSelection(key);
+    }
+
+    /**
+     * This method inspects the paragraph style runs in the selection
+     * range (or the typing style at the insertion point).  It returns:
+     * <ul>
+     * <li>The value of <tt>key</tt>, if the value of <tt>key</tt>
+     * is the same in all of the style runs in the selection, or</li>
+     * <li><tt>MULTIPLE_VALUES</tt>, if two or more style runs have 
+     * different values for <tt>key</tt>.</li>
+     * </ul>
+     * If a style run does not contain <tt>key</tt>,
+     * its value is considered to be the default style for <tt>key</tt>,
+     * as defined by the default values AttributeMap.  Note that if
+     * <tt>key</tt> does not have a default value this method may return
+     * null.
+     * This method is useful for configuring style menus.
+     * @param key the key used to retrieve values for comparison
+     * @see MTextPanel#MULTIPLE_VALUES
+     */
+    public Object getParagraphStyleOverSelection(Object key) {
+        
+        return fImpl.getParagraphStyleOverSelection(key);
+    }
+
+    /**
+     * Remove the selected text from the document and place it
+     * on the clipboard.  This method has no effect if the text
+     * is not editable, or if no text is selected.
+     */
+    public void cut() {
+        fImpl.cut();
+    }
+
+    /**
+     * Place the selected text on the clipboard.  This method has
+     * no effect if no text is selected.
+     */
+    public void copy() {
+        fImpl.copy();
+    }
+
+    /**
+     * Replace the currently selected text with the text on the clipboard.
+     * This method has no effect if the text is not editable, or if no
+     * text is on the clipboard.
+     */
+    public void paste() {
+        fImpl.paste();
+    }
+
+    /**
+     * Remove selected text from the document, without altering the clipboard.
+     * This method has no effect if the
+     * text is not editable.
+     */
+    public void clear() {
+        fImpl.clear();
+    }
+
+    /**
+     * Undo the most recent text change.  This method has no effect if
+     * there is no change to undo.
+     */
+    public void undo() {
+        fImpl.undo();
+    }
+
+    /**
+     * Redo the most recent text change.  This method has no effect if
+     * there is no change to redo.
+     */
+    public void redo() {
+        fImpl.redo();
+    }
+
+    /**
+     * Return the number of commands the command log can hold.
+     * @return the number of commands the command log can hold
+     */
+    public int getCommandLogSize() {
+
+        return fImpl.getCommandLogSize();
+    }
+
+    /**
+     * Set the number of commands the command log can hold.  All
+     * redoable commands are removed when this method is called.
+     * @param size the number of commands kept in the command log
+     */
+    public void setCommandLogSize(int size) {
+        fImpl.setCommandLogSize(size);
+    }
+
+    /**
+     * Remove all commands from the command log.
+     */
+    public void clearCommandLog() {
+        fImpl.clearCommandLog();
+    }
+
+    /**
+     * Modify the character styles on the selected characters.  If no characters
+     * are selected, modify the typing style.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyCharacterStyleOnSelection(StyleModifier modifier) {
+        fImpl.modifyCharacterStyleOnSelection(modifier);
+    }
+
+    /**
+     * Modify the paragraph styles in paragraphs containing selected characters, or
+     * the paragraph containing the insertion point.
+     * @param modifier the StyleModifier with which to modify the styles
+     */
+    public void modifyParagraphStyleOnSelection(StyleModifier modifier) {
+        fImpl.modifyParagraphStyleOnSelection(modifier);
+    }
+
+    /**
+     * Return the KeyRemap used to process key events.
+     * @return the key remap used to process key events
+     * @see #setKeyRemap
+     */
+    public KeyRemap getKeyRemap() {
+
+        return fImpl.getKeyRemap();
+    }
+
+    /**
+     * Use the given KeyRemap to map key events to characters.
+     * Only key
+     * events are affected by the remap;  other text entering the
+     * control (via the clipboard, for example) is not affected
+     * by the KeyRemap.
+     * <p>
+     * Do not pass <tt>null</tt> to this method to leave key
+     * events unmapped.  Instead, use <tt>KeyRemap.getIdentityRemap()</tt>
+     * @param remap the KeyRemap to use for mapping key events to characters
+     * @exception java.lang.NullPointerException if parameter is null
+     * @see KeyRemap
+     */
+    public void setKeyRemap(KeyRemap remap) {
+
+        fImpl.setKeyRemap(remap);
+    }
+
+    /**
+     * Return the modification flag of the current text change.
+     * @see #setModified
+     */
+    public boolean isModified() {
+
+        return fImpl.isModified();
+    }
+
+    /**
+     * Set the modification flag of the current text change.
+     */
+    public void setModified(boolean modified) {
+        
+        fImpl.setModified(modified);
+    }
+
+    /**
+     * This method is for KeyEventForwarder's use only!
+     */
+    ATextPanelImpl getImpl() {
+        
+        return fImpl;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextPanelEvent.java b/src/com/ibm/richtext/textpanel/TextPanelEvent.java
new file mode 100755
index 0000000..ecd6618
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextPanelEvent.java
@@ -0,0 +1,157 @@
+/*
+ * @(#)$RCSfile: TextPanelEvent.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.util.EventObject;
+
+/**
+ * TextPanelEvent is generated by an MTextPanel to notify listeners
+ * of changes.  To receive TextPanelEvents from an MTextPanel, clients
+ * must implement TextPanelListener and add themselves to the MTextPanel's
+ * list of listeners.
+ * <p>
+ * Some event types are special cases of others.  This is intentional - it
+ * allows notifications to be sent less often in certain common cases.  For
+ * example, a change in the selection range generates a SELECTION_RANGE_CHANGED 
+ * event.  This is a very common occurrance, and if many clients listen for this
+ * event, there may be a significant performance penalty.  By
+ * listening for a more specialized event (such as SELECTION_EMPTY_CHANGED), clients
+ * can reduce the number of notifications sent.
+ * 
+ * @see MTextPanel
+ * @see TextPanelListener
+ */
+public final class TextPanelEvent extends EventObject {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    
+    /**
+     * The lower bound of TextPanelEvent ID's.
+     */
+    public static final int TEXT_PANEL_FIRST = 11;
+
+    /**
+     * Events of this type indicate a change in the selection range.
+     * This occurs quite often.  Most clients do not need to be 
+     * notified every time the selection range changes.
+     */
+    public static final int SELECTION_RANGE_CHANGED = 11;
+    
+    /**
+     * Events of this type are sent when the selection range becomes
+     * 0-length after not being 0-length, or vice versa.  This event
+     * is a special case of SELECTION_RANGE_CHANGED.
+     */
+    public static final int SELECTION_EMPTY_CHANGED = 12;
+    
+    /**
+     * Events of this type indicate that the text in the TextPanel changed.
+     * This type of event occurs often.
+     */
+    public static final int TEXT_CHANGED = 13;
+    
+    /**
+     * Events of this type are sent when the styles in the current
+     * selection change.
+     */
+    public static final int SELECTION_STYLES_CHANGED = 14;
+     
+    /**
+     * Events of this type are sent when the undo/redo state changes.
+     */
+    public static final int UNDO_STATE_CHANGED = 15;
+    
+    /**
+     * Events of this type are sent when the clipboard state changes.
+     */
+    public static final int CLIPBOARD_CHANGED = 16;
+    
+    /**
+     * Events of this type are sent when 
+     * the wrap width of the text changes.
+     */
+    public static final int FORMAT_WIDTH_CHANGED = 17;
+
+    /**
+     * Events of this type are sent when the key remap changes.
+     */
+    public static final int KEYREMAP_CHANGED = 18;
+
+    /**
+     * The upper bound of TextPanelEvent ID's.
+     */
+    public static final int TEXT_PANEL_LAST = 18;
+
+    private int fId;
+
+    /**
+     * Create a new TextPanelEvent.
+     * @param source the MTextPanel which generated the event
+     * @param id the ID for this event.  Must be within
+     * [TEXT_PANEL_FIRST, TEXT_PANEL_LAST].
+     */
+    TextPanelEvent(MTextPanel source, int id) {
+
+        super(source);
+        if (id < TEXT_PANEL_FIRST || id > TEXT_PANEL_LAST) {
+            throw new IllegalArgumentException("id out of range");
+        }
+        fId = id;
+    }
+
+    /**
+     * Return the event ID for this event.  Event ID's are
+     * one of the class constants.
+     * @return the event ID for this event
+     */
+    public int getID() {
+
+        return fId;
+    }
+    
+    public String toString() {
+        
+        String desc = null;
+        
+        switch(fId) {
+            case SELECTION_RANGE_CHANGED:
+                desc = "SELECTION_RANGE_CHANGED";
+                break;
+            case SELECTION_EMPTY_CHANGED:
+                desc = "SELECTION_EMPTY_CHANGED";
+                break;
+            case TEXT_CHANGED:
+                desc = "TEXT_CHANGED";
+                break;
+            case SELECTION_STYLES_CHANGED:
+                desc = "SELECTION_STYLES_CHANGED";
+                break;
+            case UNDO_STATE_CHANGED:
+                desc = "UNDO_STATE_CHANGED";
+                break;
+            case CLIPBOARD_CHANGED:
+                desc = "CLIPBOARD_CHANGED";
+                break;
+            case FORMAT_WIDTH_CHANGED:
+                desc = "FORMAT_WIDTH_CHANGED";
+                break;
+            case KEYREMAP_CHANGED:
+                desc = "KEYREMAP_CHANGED";
+                break;
+        }
+        return "[TextPanelEvent:"+desc+"]";
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextPanelListener.java b/src/com/ibm/richtext/textpanel/TextPanelListener.java
new file mode 100755
index 0000000..23e0700
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextPanelListener.java
@@ -0,0 +1,42 @@
+/*
+ * @(#)$RCSfile: TextPanelListener.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+/**
+ * This interface is implemented by classes which
+ * receive change notifications from an MTextPanel.
+ * @see MTextPanel
+ * @see TextPanelEvent
+ */
+public interface TextPanelListener {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * Notify listener of an MTextPanel change.
+     * @param event a TextPanelEvent indicating what happened
+     */
+    public void textEventOccurred(TextPanelEvent event);
+    
+    /**
+     * Return true if listener needs to be notified of 
+     * the given event type.  This allows a text panel to avoid
+     * sending events to uninterested parties.
+     * @param type an event ID from TextPanelEvent
+     * @return true if this listener needs to be notified of
+     * events of the given type
+     */
+    public boolean respondsToEventType(int type);
+}
diff --git a/src/com/ibm/richtext/textpanel/TextPanelSettings.java b/src/com/ibm/richtext/textpanel/TextPanelSettings.java
new file mode 100755
index 0000000..31d3f01
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextPanelSettings.java
@@ -0,0 +1,283 @@
+/*
+ * @(#)$RCSfile: TextPanelSettings.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.Color;
+import java.io.Serializable;
+import java.util.Hashtable;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+import com.ibm.richtext.styledtext.StandardTabRuler;
+
+/**
+ * This class contains settings used when constructing an MTextPanel.
+ * The settings controled by this class include:
+ * <ul>
+ * <li>whether the text in the MTextPanel can be scrolled</li>
+ * <li>whether scroll bars in the MTextPanel are visible</li>
+ * <li>whether the text in the MTextPanel can be selected</li>
+ * <li>whether the text in the MTextPanel can be edited</li>
+ * <li>whether lines of text wrap to the MTextPanel's width, or
+ * only end at paragraph separators</li>
+ * <li>the default values for unspecified styles</li>
+ * </ul>
+ * Some settings are dependent on others.  Scroll bars are visible
+ * only if the text is scrollable.  Also, text which is not editable
+ * if it is not selectable.
+ * <p>
+ *
+ * @see MTextPanel
+ */
+public final class TextPanelSettings implements Cloneable, Serializable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    
+    private static final AttributeMap DEFAULTS;
+    static {
+        final Float floatZero = new Float(0.0f);
+
+        Hashtable defaults = new Hashtable();
+        defaults.put(TextAttribute.FAMILY, "Serif");
+        defaults.put(TextAttribute.WEIGHT, new Float(1.0f));
+        defaults.put(TextAttribute.POSTURE, floatZero);
+        defaults.put(TextAttribute.SIZE, new Float(18.0f));
+        defaults.put(TextAttribute.SUPERSCRIPT, new Integer(0));
+        defaults.put(TextAttribute.FOREGROUND, Color.black);
+        defaults.put(TextAttribute.UNDERLINE, new Integer(-1));
+        defaults.put(TextAttribute.STRIKETHROUGH, Boolean.FALSE);
+
+        defaults.put(TextAttribute.EXTRA_LINE_SPACING, floatZero);
+        defaults.put(TextAttribute.FIRST_LINE_INDENT, floatZero);
+        defaults.put(TextAttribute.MIN_LINE_SPACING, floatZero);
+        defaults.put(TextAttribute.LINE_FLUSH, TextAttribute.FLUSH_LEADING);
+        defaults.put(TextAttribute.LEADING_MARGIN, floatZero);
+        defaults.put(TextAttribute.TRAILING_MARGIN, floatZero);
+        defaults.put(TextAttribute.TAB_RULER, new StandardTabRuler());
+
+        DEFAULTS = new AttributeMap(defaults);
+    }
+    
+    private boolean fScrollable = true;
+    private boolean fScrollBarsVisible = true;
+    private boolean fSelectable = true;
+    private boolean fEditable = true;
+    private boolean fWraps = true;
+    private AttributeMap fDefaultValues = DEFAULTS;
+    
+    /**
+     * Create a TextPanelSettings instance with all settings
+     * set to true.
+     */
+    public TextPanelSettings() {
+    }
+
+    /**
+     * Return a new TextPanelSettings instance with the
+     * same settings as this.
+     * @return a new TextPanelSettings instance
+     */
+    public Object clone() {
+
+        TextPanelSettings rhs = new TextPanelSettings();
+
+        rhs.fScrollable = fScrollable;
+        rhs.fScrollBarsVisible = fScrollBarsVisible;
+        rhs.fSelectable = fSelectable;
+        rhs.fEditable = fEditable;
+        rhs.fWraps = fWraps;
+        rhs.fDefaultValues = fDefaultValues;
+        
+        return rhs;
+    }
+
+    /**
+     * Return the scrollable setting, which determines whether text
+     * in an MTextPanel can be scrolled.
+     * @return the scrollable setting
+     */
+    public boolean getScrollable() {
+
+        return fScrollable;
+    }
+
+    /**
+     * Set the scrollable setting.
+     * @param scrollable the scrollable setting.  If false,
+     * the scrollBarsVisible setting is also set to false.
+     */
+    public void setScrollable(boolean scrollable) {
+
+        fScrollable = scrollable;
+        fScrollBarsVisible &= scrollable;
+    }
+
+    /**
+     * Return the scrollBarsVisible setting, which determines whether
+     * scroll bars in an MTextPanel are visible.
+     * @return the scrollBarsVisible setting
+     */
+    public boolean getScrollBarsVisible() {
+
+        return fScrollBarsVisible;
+    }
+
+    /**
+     * Set the scrollBarsVisible setting.
+     * @param vis the scrollBarsVisible setting.  If true,
+     * the scrollable setting is also set to true.
+     */
+    public void setScrollBarsVisible(boolean vis) {
+
+        fScrollBarsVisible = vis;
+        fScrollable |= vis;
+    }
+
+    /**
+     * Return the selectable setting, which determines whether
+     * text in an MTextPanel can be selected.
+     * @return the selectable setting
+     */
+    public boolean getSelectable() {
+
+        return fSelectable;
+    }
+
+    /**
+     * Set the selectable setting.
+     * @param selectable the selectable setting.  If false,
+     * the editable setting is also set to false.
+     */
+    public void setSelectable(boolean selectable) {
+
+        fSelectable = selectable;
+        fEditable &= selectable;
+    }
+
+    /**
+     * Return the editable setting, which determines whether
+     * text in an MTextPanel can be edited.
+     * @return the editable setting
+     */
+    public boolean getEditable() {
+
+        return fEditable;
+    }
+
+    /**
+     * Set the editable setting.
+     * @param selectable the selectable setting.  If true,
+     * the selectable setting is also set to true.
+     */
+    public void setEditable(boolean editable) {
+
+        fEditable = editable;
+        fSelectable |= editable;
+    }
+
+    /**
+     * Return the wraps setting, which determines whether
+     * lines of text wrap to the length of the MTextPanel,
+     * or only at paragraph separators.
+     * @return the wraps setting
+     */
+    public boolean getWraps() {
+
+        return fWraps;
+    }
+
+    /**
+     * Set the wraps setting.
+     * @param wraps the wraps setting
+     */
+    public void setWraps(boolean wraps) {
+
+        fWraps = wraps;
+    }
+    
+    /**
+     * Return the AttributeMap of default values for certain keys.
+     * When a key in this AttributeMap is not specified, its value
+     * is taken from this AttributeMap.
+     * @return the AttributeMap of default values
+     * @see MTextPanel#getDefaultValues
+     */
+    public AttributeMap getDefaultValues() {
+    
+        return fDefaultValues;
+    }
+    
+    /**
+     * Add the key-value pairs in the given AttributeMap to the
+     * default values.  If a key does not appear in the given
+     * AttributeMap, its value in the default value map is
+     * unchanged.
+     * @param map an AttributeMap containing new default values
+     */
+    public void addDefaultValues(AttributeMap map) {
+    
+        fDefaultValues = fDefaultValues.addAttributes(map);
+    }
+    
+    /**
+     * Compare this to another Object.  This is equal
+     * to another Object if the other Object is a
+     * TextPanelSettings instance with the same
+     * settings as this one.
+     * @param rhs the Object to compare to
+     */
+    public boolean equals(Object rhs) {
+
+        if (rhs == this) {
+            return true;
+        }
+
+        if (rhs == null) {
+            return false;
+        }
+
+        TextPanelSettings other;
+        try {
+            other = (TextPanelSettings) rhs;
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+        
+        return other.fScrollable == this.fScrollable &&
+               other.fScrollBarsVisible == this.fScrollBarsVisible &&
+               other.fSelectable == this.fSelectable &&
+               other.fEditable == this.fEditable &&
+               other.fWraps == this.fWraps &&
+               other.fDefaultValues.equals(this.fDefaultValues);
+    }
+
+    /**
+     * Return the hash code for this Object.
+     * @return the hash code for this Object
+     */
+    public int hashCode() {
+
+        int code = fDefaultValues.hashCode();
+        code = code*2 + (fScrollable? 1:0);
+        code = code*2 + (fScrollBarsVisible? 1:0);
+        code = code*2 + (fSelectable? 1:0);
+        code = code*2 + (fEditable? 1:0);
+        code = code*2 + (fWraps? 1:0);
+
+        return code;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textpanel/TextRange.java b/src/com/ibm/richtext/textpanel/TextRange.java
new file mode 100755
index 0000000..f1c7168
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextRange.java
@@ -0,0 +1,47 @@
+/*
+ * @(#)$RCSfile: TextRange.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+/**
+* A <TT>TextRange</TT> represents a range of text bounded by a
+* start (inclusive), and a limit (exclusive).  [start,limit)
+*/
+final class TextRange
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /** the start of the range */
+    public int start = 0;
+    /** the end of the range */
+    public int limit = 0;
+
+    /**
+    * Create a text range from two ints.
+    * @param start the start of the run
+    * @param limit the end of the run
+    */
+    public TextRange(int start, int limit)
+    {
+        this.start = start;
+        this.limit = limit;
+    }
+
+    /**
+    * Create a text range of 0, 0.
+    */
+    public TextRange() {
+        this.start = this.limit = 0;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextReplacement.java b/src/com/ibm/richtext/textpanel/TextReplacement.java
new file mode 100755
index 0000000..8ed3bbb
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextReplacement.java
@@ -0,0 +1,70 @@
+/*
+ * @(#)$RCSfile: TextReplacement.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.textformat.TextOffset;
+
+/**
+ * This class is used to pass a REPLACE command to Behaviors.
+ */
+final class TextReplacement {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private int fStart;
+    private int fLimit;
+    private MConstText fText;
+    private TextOffset fSelStart;
+    private TextOffset fSelLimit;
+
+    TextReplacement(int start,
+                    int limit,
+                    MConstText text,
+                    TextOffset selStart,
+                    TextOffset selLimit) {
+
+        fStart = start;
+        fLimit = limit;
+        fText = text;
+        fSelStart = selStart;
+        fSelLimit = selLimit;
+    }
+
+    int getStart() {
+
+        return fStart;
+    }
+
+    int getLimit() {
+
+        return fLimit;
+    }
+
+    MConstText getText() {
+
+        return fText;
+    }
+
+    TextOffset getSelectionStart() {
+
+        return fSelStart;
+    }
+
+    TextOffset getSelectionLimit() {
+
+        return fSelLimit;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TextSelection.java b/src/com/ibm/richtext/textpanel/TextSelection.java
new file mode 100755
index 0000000..508b45a
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TextSelection.java
@@ -0,0 +1,926 @@
+/*
+ * @(#)$RCSfile: TextSelection.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+    7/1/97 - caret blinks
+
+    7/3/97 - fAnchor is no longer restricted to the start or end of the selection. {jbr}
+            Also, removed fVisible - it was identical to enabled().
+*/
+
+package com.ibm.richtext.textpanel;
+
+import java.awt.Graphics;
+import java.awt.Color;
+import java.awt.Rectangle;
+import java.awt.Point;
+
+import java.text.BreakIterator;
+import java.text.CharacterIterator;
+
+import java.awt.event.MouseEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.FocusEvent;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.textformat.TextOffset;
+
+import com.ibm.richtext.textformat.MFormatter;
+
+class TextSelection extends Behavior implements Runnable {
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    static final Color          HIGHLIGHTCOLOR = Color.pink;
+
+    private TextComponent       fTextComponent;
+    private MConstText          fText;
+    private TextOffset          fStart;
+    private TextOffset          fLimit;
+    private TextOffset          fAnchor;
+    private TextOffset          fUpDownAnchor = null;
+    private BreakIterator       fBoundaries = null;
+    private Color               fHighlightColor = HIGHLIGHTCOLOR;
+    private PanelEventBroadcaster   fListener;
+    private RunStrategy         fRunStrategy;
+    private boolean             fMouseDown = false;
+    private boolean             fHandlingKeyOrCommand = false;
+    
+    private boolean fCaretShouldBlink;
+    private boolean fCaretIsVisible;
+    private int fCaretCount;
+
+    // formerly in base class
+    private boolean fEnabled;
+
+    private MouseEvent fPendingMouseEvent = null;
+
+    private static final int kCaretInterval = 500;
+
+    public void run() {
+
+        final Runnable blinkCaret = new Runnable() {
+            public void run() {
+                fCaretIsVisible = !fCaretIsVisible;
+                Graphics g = fTextComponent.getGraphics();
+                if (g != null) {
+                    //System.out.println("caretIsVisible: " + fCaretIsVisible);
+                    drawSelection(g, fCaretIsVisible);
+                }
+                else {
+                    // Not sure what else to do:
+                    fCaretShouldBlink = false;
+                }
+            }
+        };
+        
+        // blink caret
+        while (true) {
+
+            synchronized(this) {
+
+                while (!fCaretShouldBlink) {
+                    try {
+                        wait();
+                    }
+                    catch(InterruptedException e) {
+                        System.out.println("Caught InterruptedException in caret thread.");
+                    }
+                }
+
+                ++fCaretCount;
+
+                if (fCaretCount % 2 == 0) {
+                    fRunStrategy.doIt(blinkCaret);
+                }
+            }
+
+            try {
+                Thread.sleep(kCaretInterval);
+            }
+            catch(InterruptedException e) {
+            }
+        }
+    }
+
+
+
+    public TextSelection(TextComponent textComponent,
+                         PanelEventBroadcaster listener,
+                         RunStrategy runStrategy) {
+                            
+        fTextComponent = textComponent;
+        fText = textComponent.getText();
+        fListener = listener;
+        fRunStrategy = runStrategy;
+        
+        fStart = new TextOffset();
+        fLimit = new TextOffset();
+        fAnchor = new TextOffset();
+        fMouseDown = false;
+
+        fCaretCount = 0;
+        fCaretIsVisible = true;
+        fCaretShouldBlink = false;
+        setEnabled(false);
+
+        Thread caretThread = new Thread(this);
+        caretThread.setDaemon(true);
+        caretThread.start();
+    }
+
+    boolean enabled() {
+
+        return fEnabled;
+    }
+
+    private void setEnabled(boolean enabled) {
+
+        fEnabled = enabled;
+    }
+
+    public boolean textControlEventOccurred(Behavior.EventType event, Object what) {
+
+        boolean result;
+        fHandlingKeyOrCommand = true;
+        
+        if (event == Behavior.SELECT) {
+            select((TextRange) what);
+            result = true;
+        }
+        else if (event == Behavior.COPY) {
+            fTextComponent.getClipboard().setContents(fText.extract(fStart.fOffset, fLimit.fOffset));
+            fListener.textStateChanged(TextPanelEvent.CLIPBOARD_CHANGED);
+            result = true;
+        }
+        else {
+            result = false;
+        }
+        
+        fHandlingKeyOrCommand = false;
+        return result;
+    }
+
+    protected void advanceToNextBoundary(TextOffset offset) {
+    
+        // If there's no boundaries object, or if position at the end of the
+        // document, return the offset unchanged
+        if (fBoundaries == null) {
+            return;
+        }
+        
+        int position = offset.fOffset;
+        
+        if (position >= fText.length()) {
+            return;
+        }
+
+        // If position is at a boundary and offset is before position,
+        // leave it unchanged.  Otherwise move to next boundary.
+        int nextPos = fBoundaries.following(position);
+        if (fBoundaries.previous() == position && 
+                offset.fPlacement==offset.BEFORE_OFFSET) {
+            return;
+        }
+        
+        offset.setOffset(nextPos, TextOffset.AFTER_OFFSET);
+    }
+
+    protected void advanceToPreviousBoundary(TextOffset offset) {
+    
+        advanceToPreviousBoundary(offset, false);
+    }
+    
+    private void advanceToPreviousBoundary(TextOffset offset, boolean alwaysMove) {
+        // if there's no boundaries object, or if we're sitting at the beginning
+        // of the document, return the offset unchanged
+        if (fBoundaries == null) {
+            return;
+        }
+        
+        int position = offset.fOffset;
+
+        if (position == 0) {
+            return;
+        }
+        
+        // If position is at a boundary, leave it unchanged.  Otherwise
+        // move to previous boundary.
+        if (position == fText.length()) {
+            fBoundaries.last();
+        }
+        else {
+            fBoundaries.following(position);
+        }
+        
+        int prevPos = fBoundaries.previous();
+        
+        if (prevPos == position) {
+            if (!alwaysMove && offset.fPlacement==offset.AFTER_OFFSET) {
+                return;
+            }
+
+            prevPos = fBoundaries.previous();
+        }
+                
+        // and finally update the real offset with this new position we've found
+        offset.setOffset(prevPos, TextOffset.AFTER_OFFSET);
+    }
+
+    private void doArrowKey(KeyEvent e, int key) {
+
+        // when there's a selection range, the left and up arrow keys place an
+        // insertion point at the beginning of the range, and the right and down
+        // keys place an insertion point at the end of the range (unless the shift
+        // key is down, of course)
+
+        if (!fStart.equals(fLimit) && !e.isShiftDown()) {
+            if (key == KeyEvent.VK_LEFT || key == KeyEvent.VK_UP)
+                setSelRangeAndDraw(fStart, fStart, fStart);
+            else
+                setSelRangeAndDraw(fLimit, fLimit, fLimit);
+        }
+        else {
+            if (!fAnchor.equals(fStart))
+                fAnchor.assign(fLimit);
+
+            TextOffset  liveEnd = (fStart.equals(fAnchor)) ? fLimit : fStart;
+            TextOffset  newPos = new TextOffset();
+
+            // if the control key is down, the left and right arrow keys move by whole
+            // word in the appropriate direction (we use a line break object so that we're
+            // not treating spaces and punctuation as words)
+            if (e.isControlDown() && (key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT)) {
+                fUpDownAnchor = null;
+                fBoundaries = BreakIterator.getLineInstance();
+                fBoundaries.setText(fText.createCharacterIterator());
+
+                newPos.assign(liveEnd);
+                if (key == KeyEvent.VK_RIGHT)
+                    advanceToNextBoundary(newPos);
+                else
+                    advanceToPreviousBoundary(newPos, true);
+            }
+
+            // if we get down to here, this is a plain-vanilla insertion-point move,
+            // or the shift key is down and we're extending or shortening the selection
+            else {
+
+                // fUpDownAnchor is used to keep track of the horizontal position
+                // across a run of up or down arrow keys (this prevents accumulated
+                // error from destroying our horizontal position)
+                if (key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT)
+                    fUpDownAnchor = null;
+                else {
+                    if (fUpDownAnchor == null) {
+                        fUpDownAnchor = new TextOffset(liveEnd);
+                    }
+                }
+
+                short   direction = MFormatter.eRight;  // just to have a default...
+
+                switch (key) {
+                    case KeyEvent.VK_UP: direction = MFormatter.eUp; break;
+                    case KeyEvent.VK_DOWN: direction = MFormatter.eDown; break;
+                    case KeyEvent.VK_LEFT: direction = MFormatter.eLeft; break;
+                    case KeyEvent.VK_RIGHT: direction = MFormatter.eRight; break;
+                }
+
+                // use the formatter to determine the actual effect of the arrow key
+                fTextComponent.findNewInsertionOffset(newPos, fUpDownAnchor, liveEnd, direction);
+            }
+
+            // if the shift key is down, the selection range is from the anchor point
+            // the site of the last insertion point or the beginning point of the last
+            // selection drag operation) to the newly-calculated position; if the
+            // shift key is down, the newly-calculated position is the insertion point position
+            if (!e.isShiftDown())
+                setSelRangeAndDraw(newPos, newPos, newPos);
+            else {
+                if (newPos.lessThan(fAnchor))
+                    setSelRangeAndDraw(newPos, fAnchor, fAnchor);
+                else
+                    setSelRangeAndDraw(fAnchor, newPos, fAnchor);
+            }
+        }
+
+        scrollToShowSelectionEnd();
+        fBoundaries = null;
+    }
+
+    private void doEndKey(KeyEvent e) {
+        // ctrl-end moves the insertsion point to the end of the document,
+        // ctrl-shift-end extends the selection so that it ends at the end
+        // of the document
+
+        TextOffset activeEnd, anchor;
+
+        if (fAnchor.equals(fStart)) {
+            activeEnd = new TextOffset(fStart);
+            anchor = new TextOffset(fLimit);
+        }
+        else {
+            activeEnd = new TextOffset(fLimit);
+            anchor = new TextOffset(fStart);
+        }
+
+        if (e.isControlDown()) {
+            TextOffset end = new TextOffset(fText.length(), TextOffset.BEFORE_OFFSET);
+
+            if (e.isShiftDown())
+                setSelRangeAndDraw(anchor, end, anchor);
+            else
+                setSelRangeAndDraw(end, end, end);
+        }
+
+        // end moves the insertion point to the end of the line containing
+        // the end of the current selection
+        // shift-end extends the selection to the end of the line containing
+        // the end of the current selection
+
+        else {
+
+            int oldOffset = activeEnd.fOffset;
+
+            activeEnd.fOffset = fTextComponent.lineRangeLimit(fTextComponent.lineContaining(activeEnd));
+            activeEnd.fPlacement = TextOffset.BEFORE_OFFSET;
+
+            if (fText.paragraphLimit(oldOffset) == activeEnd.fOffset &&
+                    activeEnd.fOffset != fText.length() && activeEnd.fOffset > oldOffset) {
+                activeEnd.fOffset--;
+                activeEnd.fPlacement = TextOffset.AFTER_OFFSET;
+            }
+
+            if (!e.isShiftDown())
+                setSelRangeAndDraw(activeEnd, activeEnd, activeEnd);
+            else {
+                if (activeEnd.lessThan(anchor))
+                    setSelRangeAndDraw(activeEnd, anchor, anchor);
+                else
+                    setSelRangeAndDraw(anchor, activeEnd, anchor);
+            }
+        }
+
+        scrollToShowSelectionEnd();
+        fBoundaries = null;
+        fUpDownAnchor = null;
+    }
+
+    private void doHomeKey(KeyEvent e) {
+        // ctrl-home moves the insertion point to the beginning of the document,
+        // ctrl-shift-home extends the selection so that it begins at the beginning
+        // of the document
+
+        TextOffset activeEnd, anchor;
+
+        if (fAnchor.equals(fStart)) {
+            activeEnd = new TextOffset(fStart);
+            anchor = new TextOffset(fLimit);
+        }
+        else {
+            activeEnd = new TextOffset(fLimit);
+            anchor = new TextOffset(fStart);
+        }
+
+        if (e.isControlDown()) {
+
+            TextOffset start = new TextOffset(0, TextOffset.AFTER_OFFSET);
+            if (e.isShiftDown())
+                setSelRangeAndDraw(start, anchor, anchor);
+            else
+                setSelRangeAndDraw(start, start, start);
+        }
+
+        // home moves the insertion point to the beginning of the line containing
+        // the beginning of the current selection
+        // shift-home extends the selection to the beginning of the line containing
+        // the beginning of the current selection
+
+        else {
+
+            activeEnd.fOffset = fTextComponent.lineRangeLow(fTextComponent.lineContaining(activeEnd));
+            activeEnd.fPlacement = TextOffset.AFTER_OFFSET;
+
+            if (!e.isShiftDown())
+                setSelRangeAndDraw(activeEnd, activeEnd, activeEnd);
+            else {
+                if (activeEnd.lessThan(anchor))
+                    setSelRangeAndDraw(activeEnd, anchor, anchor);
+                else
+                    setSelRangeAndDraw(anchor, activeEnd, anchor);
+            }
+        }
+
+        scrollToShowSelectionEnd();
+        fBoundaries = null;
+        fUpDownAnchor = null;
+    }
+
+    /** draws or erases the current selection
+    * Draws or erases the highlight region or insertion caret for the current selection
+    * range.
+    * @param g The graphics environment to draw into
+    * @param visible If true, draw the selection; if false, erase it
+    */
+    protected void drawSelection(Graphics g, boolean visible) {
+        drawSelectionRange(g, fStart, fLimit, visible);
+    }
+
+    /** draws or erases a selection highlight at the specfied positions
+    * Draws or erases a selection highlight or insertion caret corresponding to
+    * the specified selecion range
+    * @param g The graphics environment to draw into.  If null, this method does nothing.
+    * @param start The beginning of the range to highlight
+    * @param limit The end of the range to highlight
+    * @param vsible If true, draw; if false, erase
+    */
+    protected void drawSelectionRange(  Graphics    g,
+                                        TextOffset  start,
+                                        TextOffset  limit,
+                                        boolean     visible) {
+        if (g == null) {
+            return;
+        }
+        Rectangle   selBounds = fTextComponent.getBoundingRect(start, limit);
+
+        selBounds.width = Math.max(1, selBounds.width);
+        selBounds.height = Math.max(1, selBounds.height);
+
+        fTextComponent.drawText(g, selBounds, visible, start, limit, fHighlightColor);
+    }
+
+    protected TextOffset getAnchor() {
+        return fAnchor;
+    }
+
+    public TextOffset getEnd() {
+        return fLimit;
+    }
+
+    public Color getHighlightColor() {
+        return fHighlightColor;
+    }
+
+    public TextOffset getStart() {
+        return fStart;
+    }
+
+    public TextRange getSelectionRange() {
+
+        return new TextRange(fStart.fOffset, fLimit.fOffset);
+    }
+
+    public boolean focusGained(FocusEvent e) {
+
+        setEnabled(true);
+        drawSelection(fTextComponent.getGraphics(), true);
+
+        restartCaretBlinking(true);
+        if (fPendingMouseEvent != null) {
+            mousePressed(fPendingMouseEvent);
+            fPendingMouseEvent = null;
+        }
+        fListener.textStateChanged(TextPanelEvent.CLIPBOARD_CHANGED);
+ 
+        return true;
+    }
+
+    public boolean focusLost(FocusEvent e) {
+        stopCaretBlinking();
+        setEnabled(false);
+        drawSelection(fTextComponent.getGraphics(), false);
+        return true;
+    }
+
+    /**
+     * Return true if the given key event can affect the selection
+     * range.
+     */
+    public static boolean keyAffectsSelection(KeyEvent e) {
+
+        if (e.getID() != e.KEY_PRESSED) {
+            return false;
+        }
+
+        int key = e.getKeyCode();
+
+        switch (key) {
+            case KeyEvent.VK_HOME:
+            case KeyEvent.VK_END:
+            case KeyEvent.VK_LEFT:
+            case KeyEvent.VK_RIGHT:
+            case KeyEvent.VK_UP:
+            case KeyEvent.VK_DOWN:
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    public boolean keyPressed(KeyEvent e) {
+
+        fHandlingKeyOrCommand = true;
+        int key = e.getKeyCode();
+        boolean result = true;
+        
+        switch (key) {
+            case KeyEvent.VK_HOME:
+                doHomeKey(e);
+                break;
+                
+            case KeyEvent.VK_END:
+                doEndKey(e);
+                break;
+
+            case KeyEvent.VK_LEFT:
+            case KeyEvent.VK_RIGHT:
+            case KeyEvent.VK_UP:
+            case KeyEvent.VK_DOWN:
+                doArrowKey(e, key);
+                break;
+                
+            default:
+                fUpDownAnchor = null;
+                result = false;
+                break;
+        }
+        
+        fHandlingKeyOrCommand = false;
+        return result;
+    }
+
+    public boolean mousePressed(MouseEvent e) {
+
+        if (!enabled()) {
+            fPendingMouseEvent = e;
+            fTextComponent.requestFocus();
+            return false;
+        }
+
+        if (fMouseDown)
+            throw new Error("fMouseDown is out of sync with mouse in TextSelection.");
+
+        fMouseDown = true;
+        stopCaretBlinking();
+
+        int x = e.getX(), y = e.getY();
+        boolean wasZeroLength = rangeIsZeroLength(fStart, fLimit, fAnchor);
+        
+        TextOffset current = fTextComponent.pointToTextOffset(null, x, y, null, true);
+        TextOffset anchorStart = new TextOffset();
+        TextOffset anchorEnd = new TextOffset();
+
+        fUpDownAnchor = null;
+
+        // if we're not extending the selection...
+        if (!e.isShiftDown()) {
+
+            // if there are multiple clicks, create the appopriate type of BreakIterator
+            // object for finding text boundaries (single clicks don't use a BreakIterator
+            // object)
+            if (e.getClickCount() == 2)
+                fBoundaries = BreakIterator.getWordInstance();
+            else if (e.getClickCount() == 3)
+                fBoundaries = BreakIterator.getSentenceInstance();
+            else
+                fBoundaries = null;
+
+            // if we're using a BreakIterator object, use it to find the nearest boundaries
+            // on either side of the mouse-click position and make them our anchor range
+            if (fBoundaries != null)
+                fBoundaries.setText(fText.createCharacterIterator());
+
+            anchorStart.assign(current);
+            advanceToPreviousBoundary(anchorStart);
+            anchorEnd.assign(current);
+            advanceToNextBoundary(anchorEnd);
+        }
+
+        // if we _are_ extending the selection, determine our anchor range as follows:
+        // fAnchor is the start of the anchor range;
+        // the next boundary (after fAnchor) is the limit of the anchor range.
+
+        else {
+
+            if (fBoundaries != null)
+                fBoundaries.setText(fText.createCharacterIterator());
+
+            anchorStart.assign(fAnchor);
+            anchorEnd.assign(anchorStart);
+
+            advanceToNextBoundary(anchorEnd);
+        }
+
+        SelectionDragInteractor interactor = new SelectionDragInteractor(this, 
+                                                                         fTextComponent,
+                                                                         fRunStrategy,
+                                                                         anchorStart,
+                                                                         anchorEnd,
+                                                                         current,
+                                                                         x,
+                                                                         y,
+                                                                         wasZeroLength);
+
+        interactor.addToOwner(fTextComponent);
+
+        return true;
+    }
+
+    public boolean mouseReleased(MouseEvent e) {
+
+        fPendingMouseEvent = null;
+        return false;
+    }
+
+    // drag interactor calls this
+    void mouseReleased(boolean zeroLengthChange) {
+
+        fMouseDown = false;
+
+        if (zeroLengthChange) {
+            fListener.textStateChanged(TextPanelEvent.SELECTION_EMPTY_CHANGED);
+        }
+        fListener.textStateChanged(TextPanelEvent.SELECTION_RANGE_CHANGED);
+        fListener.textStateChanged(TextPanelEvent.SELECTION_STYLES_CHANGED);
+
+        // if caret drawing during mouse drags is supressed, draw caret now.
+
+        restartCaretBlinking(true);
+    }
+
+
+    /** draws the selection
+    * Provided, of course, that the selection is visible, the adorner is enabled,
+    * and we're calling it to adorn the view it actually belongs to
+    * @param g The graphics environment to draw into
+    * @return true if we actually drew
+    */
+    public boolean paint(Graphics g, Rectangle drawRect) {
+        // don't draw anything unless we're enabled and the selection is visible
+        if (!enabled())
+            return false;
+
+        fTextComponent.drawText(g, drawRect, true, fStart, fLimit, fHighlightColor);
+        return true;
+    }
+
+    /** scrolls the view to reveal the live end of the selection
+    * (i.e., the end that moves if you use the arrow keys with the shift key down)
+    */
+    public void scrollToShowSelection() {
+        Rectangle   selRect = fTextComponent.getBoundingRect(fStart, fLimit);
+
+        fTextComponent.scrollToShow(selRect);
+    }
+
+    /** scrolls the view to reveal the live end of the selection
+    * (i.e., the end that moves if you use the arrow keys with the shift key down)
+    */
+    public void scrollToShowSelectionEnd() {
+        TextOffset  liveEnd;
+        Point[]     points;
+        Rectangle   caret;
+
+        if (fAnchor.equals(fStart))
+            liveEnd = fLimit;
+        else
+            liveEnd = fStart;
+
+        //points = fTextComponent.textOffsetToPoint(liveEnd);
+        //caret = new Rectangle(points[0]);
+        //caret = caret.union(new Rectangle(points[1]));
+        caret = fTextComponent.getCaretRect(liveEnd);
+        fTextComponent.scrollToShow(caret);
+    }
+
+    private void select(TextRange range) {
+        int textLength = fTextComponent.getText().length();
+
+        TextOffset start = new TextOffset(range.start);
+
+        stopCaretBlinking();
+        setSelRangeAndDraw(start, new TextOffset(range.limit), start);
+        restartCaretBlinking(true);
+    }
+
+    public void setHighlightColor(Color newColor) {
+        fHighlightColor = newColor;
+        if (enabled())
+            drawSelection(fTextComponent.getGraphics(), true);
+    }
+    
+    static boolean rangeIsZeroLength(TextOffset start, TextOffset limit, TextOffset anchor) {
+        
+        return start.fOffset == limit.fOffset && anchor.fOffset == limit.fOffset;
+    }
+
+    // sigh... look out for aliasing
+    public void setSelectionRange(TextOffset newStart, TextOffset newLimit, TextOffset newAnchor) {
+
+        boolean zeroLengthChange = rangeIsZeroLength(newStart, newLimit, newAnchor) != 
+                                    rangeIsZeroLength(fStart, fLimit, fAnchor);
+        TextOffset tempNewAnchor;
+        if (newAnchor == fStart || newAnchor == fLimit) {
+            tempNewAnchor = new TextOffset(newAnchor); // clone in case of aliasing
+        }
+        else {
+            tempNewAnchor = newAnchor;
+        }
+
+        // DEBUG {jbr}
+
+        if (newStart.greaterThan(newLimit))
+            throw new IllegalArgumentException("Selection limit is before selection start.");
+
+        if (newLimit != fStart) {
+            fStart.assign(newStart);
+            fLimit.assign(newLimit);
+        }
+        else {
+            fLimit.assign(newLimit);
+            fStart.assign(newStart);
+        }
+
+        fAnchor.assign(tempNewAnchor);
+
+        if (fStart.fOffset == fLimit.fOffset) {
+            fStart.fPlacement = fAnchor.fPlacement;
+            fLimit.fPlacement = fAnchor.fPlacement;
+        }
+        
+        if (!fMouseDown) {
+            if (zeroLengthChange) {
+                fListener.textStateChanged(TextPanelEvent.SELECTION_EMPTY_CHANGED);
+            }
+            fListener.textStateChanged(TextPanelEvent.SELECTION_RANGE_CHANGED);
+            if (fHandlingKeyOrCommand) {
+                fListener.textStateChanged(TextPanelEvent.SELECTION_STYLES_CHANGED);
+            }
+        }
+    }
+
+    private void sortOffsets(TextOffset offsets[]) {
+
+        int i, j;
+
+        for (i=0; i < offsets.length-1; i++) {
+            for (j=i+1; j < offsets.length; j++) {
+                if (offsets[j].lessThan(offsets[i])) {
+                    TextOffset temp = offsets[j];
+                    offsets[j] = offsets[i];
+                    offsets[i] = temp;
+                }
+            }
+        }
+
+        // DEBUG {jbr}
+        for (i=0; i < offsets.length-1; i++)
+            if (offsets[i].greaterThan(offsets[i+1]))
+                throw new Error("sortOffsets failed!");
+    }
+
+    private Rectangle getSelectionChangeRect(
+                                    TextOffset rangeStart, TextOffset rangeLimit,
+                                    TextOffset oldStart, TextOffset oldLimit,
+                                    TextOffset newStart, TextOffset newLimit,
+                                    boolean drawIfInsPoint) {
+
+        if (!rangeStart.equals(rangeLimit))
+            return fTextComponent.getBoundingRect(rangeStart, rangeLimit);
+
+        // here, rangeStart and rangeLimit are equal
+
+        if (rangeStart.equals(oldLimit)) {
+
+            // range start is OLD insertion point.  Redraw if caret is currently visible.
+
+            if (fCaretIsVisible)
+                return fTextComponent.getBoundingRect(rangeStart, rangeStart);
+        }
+        else if (rangeStart.equals(newLimit)) {
+
+            // range start is NEW insertion point.
+
+            if (drawIfInsPoint)
+                return fTextComponent.getBoundingRect(rangeStart, rangeStart);
+        }
+
+        return null;
+    }
+
+    private static boolean rectanglesOverlapVertically(Rectangle r1, Rectangle r2) {
+        
+        if (r1 == null || r2 == null) {
+            return false;
+        }
+        
+        return r1.y <= r2.y + r2.height || r2.y <= r1.y + r1.height;
+    }
+    
+    // Update to show new selection, redrawing as little as possible
+
+    private void updateSelectionDisplay(
+                            TextOffset oldStart, TextOffset oldLimit,
+                            TextOffset newStart, TextOffset newLimit, boolean drawIfInsPoint) {
+
+        //System.out.println("newStart:" + newStart + "; newLimit:" + newLimit);
+
+        TextOffset off[] = new TextOffset[4];
+
+        off[0] = oldStart;
+        off[1] = oldLimit;
+        off[2] = newStart;
+        off[3] = newLimit;
+
+        sortOffsets(off);
+
+        Rectangle r1 = getSelectionChangeRect(off[0], off[1], oldStart, oldLimit, newStart, newLimit, drawIfInsPoint);
+        Rectangle r2 = getSelectionChangeRect(off[2], off[3], oldStart, oldLimit, newStart, newLimit, drawIfInsPoint);
+
+        boolean drawSelection = drawIfInsPoint || !newStart.equals(newLimit);
+
+        if (rectanglesOverlapVertically(r1, r2)) {
+
+            fTextComponent.drawText(fTextComponent.getGraphics(), r1.union(r2), drawSelection, newStart, newLimit, fHighlightColor);
+        }
+        else {
+            if (r1 != null)
+                fTextComponent.drawText(fTextComponent.getGraphics(), r1, drawSelection, newStart, newLimit, fHighlightColor);
+            if (r2 != null)
+                fTextComponent.drawText(fTextComponent.getGraphics(), r2, drawSelection, newStart, newLimit, fHighlightColor);
+        }
+    }
+
+    public void setSelRangeAndDraw(TextOffset newStart, TextOffset newLimit, TextOffset newAnchor) {
+
+        // if the old and new selection ranges are the same, don't do anything
+        if (fStart.equals(newStart) && fLimit.equals(newLimit) && fAnchor.equals(newAnchor))
+            return;
+
+        if (enabled())
+            stopCaretBlinking();
+
+        // update the selection on screen if we're enabled and visible
+
+        TextOffset oldStart = new TextOffset(fStart), oldLimit = new TextOffset(fLimit);
+
+        setSelectionRange(newStart, newLimit, newAnchor);
+
+        if (enabled()) {
+
+                // To supress drawing a caret during a mouse drag, pass !fMouseDown instead of true:
+                updateSelectionDisplay(oldStart, oldLimit, fStart, fLimit, true);
+        }
+
+        if (!fMouseDown && enabled())
+            restartCaretBlinking(true);
+    }
+
+    public void stopCaretBlinking() {
+
+        synchronized(this) {
+            fCaretShouldBlink = false;
+        }
+    }
+
+/**
+* Resume blinking the caret, if the selection is an insertion point.
+* @param caretIsVisible true if the caret is displayed when this is called.
+* This method relies on the client to display (or not display) the caret.
+*/
+    public void restartCaretBlinking(boolean caretIsVisible) {
+
+        synchronized(this) {
+            fCaretShouldBlink = fStart.equals(fLimit);
+            fCaretCount = 0;
+            fCaretIsVisible = caretIsVisible;
+
+            if (fCaretShouldBlink) {
+                try {
+                    notify();
+                }
+                catch (IllegalMonitorStateException e) {
+                    System.out.println("Caught IllegalMonitorStateException: "+e);
+                }
+            }
+        }
+    }
+
+    public void removeFromOwner() {
+
+        stopCaretBlinking();
+        super.removeFromOwner();
+    }
+
+}
diff --git a/src/com/ibm/richtext/textpanel/ThaiKeyRemap.java b/src/com/ibm/richtext/textpanel/ThaiKeyRemap.java
new file mode 100755
index 0000000..25f2b2f
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/ThaiKeyRemap.java
@@ -0,0 +1,106 @@
+package com.ibm.richtext.textpanel;
+
+final class ThaiKeyRemap extends KeyRemap {
+
+    public char remap(char c) {
+
+        switch (c) {
+            case '`': return '\u005f';
+            case '~': return '\u0025';
+            case '1': return '\u0e45';
+            case '!': return '\u002b';
+            case '2': return '\u002f';
+            case '@': return '\u0e51';
+            case '3': return '\u002d';
+            case '#': return '\u0e52';
+            case '4': return '\u0e20';
+            case '$': return '\u0e53';
+            case '5': return '\u0e16';
+            case '%': return '\u0e54';
+            case '6': return '\u0e38';
+            case '^': return '\u0e39';
+            case '7': return '\u0e36';
+            case '&': return '\u0e3f';
+            case '8': return '\u0e04';
+            case '*': return '\u0e55';
+            case '9': return '\u0e15';
+            case '(': return '\u0e56';
+            case '0': return '\u0e08';
+            case ')': return '\u0e57';
+            case '-': return '\u0e02';
+            case '_': return '\u0e58';
+            case '=': return '\u0e08';
+            case '+': return '\u0e59';
+            case 'q': return '\u0e46';
+            case 'Q': return '\u0e50';
+            case 'w': return '\u0e44';
+            case 'W': return '\u0022';
+            case 'e': return '\u0e33';
+            case 'E': return '\u0e0e';
+            case 'r': return '\u0e1e';
+            case 'R': return '\u0e11';
+            case 't': return '\u0e30';
+            case 'T': return '\u0e18';
+            case 'y': return '\u0e31';
+            case 'Y': return '\u0e4d';
+            case 'u': return '\u0e35';
+            case 'U': return '\u0e4a';
+            case 'i': return '\u0e23';
+            case 'I': return '\u0e13';
+            case 'o': return '\u0e19';
+            case 'O': return '\u0e2f';
+            case 'p': return '\u0e22';
+            case 'P': return '\u0e0d';
+            case '[': return '\u0e1a';
+            case '{': return '\u0e10';
+            case ']': return '\u0e25';
+            case '}': return '\u002c';
+            case '\\': return '\u0e03';
+            case '|': return '\u0e05';
+            case 'a': return '\u0e1f';
+            case 'A': return '\u0e24';
+            case 's': return '\u0e2b';
+            case 'S': return '\u0e06';
+            case 'd': return '\u0e01';
+            case 'D': return '\u0e0f';
+            case 'f': return '\u0e14';
+            case 'F': return '\u0e42';
+            case 'g': return '\u0e40';
+            case 'G': return '\u0e0c';
+            case 'h': return '\u0e49';
+            case 'H': return '\u0e47';
+            case 'j': return '\u0e48';
+            case 'J': return '\u0e4b';
+            case 'k': return '\u0e32';
+            case 'K': return '\u0e29';
+            case 'l': return '\u0e2a';
+            case 'L': return '\u0e28';
+            case ';': return '\u0e27';
+            case ':': return '\u0e0b';
+            case '\'': return '\u0e07';
+            case '\"': return '\u002e';
+            case 'z': return '\u0e1c';
+            case 'Z': return '\u0028';
+            case 'x': return '\u0e1b';
+            case 'X': return '\u0029';
+            case 'c': return '\u0e41';
+            case 'C': return '\u0e09';
+            case 'v': return '\u0e2d';
+            case 'V': return '\u0e2e';
+            case 'b': return '\u0e34';
+            case 'B': return '\u0e3a';
+            case 'n': return '\u0e37';
+            case 'N': return '\u0e4c';
+            case 'm': return '\u0e17';
+            case 'M': return '\u003f';
+            case ',': return '\u0e21';
+            case '<': return '\u0e12';
+            case '.': return '\u0e43';
+            case '>': return '\u0e2c';
+            case '/': return '\u0e1d';
+            case '?': return '\u0e26';
+        }
+
+        return c;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/textpanel/TransferableText.java b/src/com/ibm/richtext/textpanel/TransferableText.java
new file mode 100755
index 0000000..4081ac6
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TransferableText.java
@@ -0,0 +1,90 @@
+/*
+ * @(#)$RCSfile: TransferableText.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.textpanel;
+
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.io.ByteArrayInputStream;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+/**
+ * This class allows MConstText instances to be the contents
+ * of a Clipboard.  To store an MConstText on the clipboard,
+ * construct a TransferableText from the MConstText, and make
+ * the TransferableText the clipboard contents.
+ *
+ */
+/*
+ * Note:  this class inherits from StringSelection because of
+ * a bug in the 1.1.7 system clipboard implementation.  The
+ * system clipboard won't put text on the OS clipboard unless
+ * the content is a StringSelection.
+ */
+final class TransferableText extends StringSelection
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private MConstText fText;
+
+    private static String textToString(MConstText text) {
+        char[] chars = new char[text.length()];
+        text.extractChars(0, chars.length, chars, 0);
+        return new String(chars);
+    }
+
+    /**
+     * Create a TransferableText for the given text.
+     * @param text the text to go on the Clipboard.  The text is
+     *     adopted by this object.
+     */
+    public TransferableText(MConstText text) {
+
+        super(textToString(text));
+
+        fText = text;
+    }
+
+    public DataFlavor[] getTransferDataFlavors() {
+
+        DataFlavor[] flavors = super.getTransferDataFlavors();
+        DataFlavor[] result = new DataFlavor[flavors.length+1];
+        result[0] = MConstText.styledTextFlavor;
+        System.arraycopy(flavors, 0, result, 1, flavors.length);
+        return result;
+    }
+
+    public boolean isDataFlavorSupported(DataFlavor flavor) {
+
+        if (flavor.equals(MConstText.styledTextFlavor)) {
+            return true;
+        }
+        else {
+            return super.isDataFlavorSupported(flavor);
+        }
+    }
+
+    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
+
+        if (flavor.equals(MConstText.styledTextFlavor)) {
+            return fText;
+        }
+        else {
+            return super.getTransferData(flavor);
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/TypingInteractor.java b/src/com/ibm/richtext/textpanel/TypingInteractor.java
new file mode 100755
index 0000000..9441081
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/TypingInteractor.java
@@ -0,0 +1,356 @@
+/*
+ * @(#)$RCSfile: TypingInteractor.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:51:23 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+/*
+    2/25/99 - Now processing characters from keyTyped method (not keyPressed).
+              This new way is input-method friendly on 1.2, and is generally
+              more correct.
+
+    7/7/97 - the mouseDidSomething methods used to remove the typing interactor.
+            This is definitely wrong, but maybe that made sense at one time.  Anyway,
+            now the mousePressed / mouseReleased methods remove the interactor;  the
+            others do nothing.
+*/
+
+package com.ibm.richtext.textpanel;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.FocusEvent;
+
+import java.text.BreakIterator;
+
+import com.ibm.richtext.styledtext.StyleModifier;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.textformat.TextOffset;
+
+final class TypingInteractor extends Behavior {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private static final char BACKSPACE = 8;
+    private static final char TAB = '\t';
+    private static final char RETURN = '\r';
+    private static final char LINE_FEED = '\n';
+    private static final char PARAGRAPH_SEP = '\u2029';
+    
+    private TextComponent fTextComponent;
+    private TextSelection fSelection;
+    private AttributeMap fTypingStyle;
+    private MConstText fText;
+    private TextEditBehavior fParent;
+    private TextChangeCommand fCommand = null;
+    private SimpleCommandLog fCommandLog;
+    private PanelEventBroadcaster fListener;
+    private BreakIterator fCharBreak = null;
+    
+    /**
+     * Not all characters that come from the keyboard are handled
+     * as input.  For example, ctrl-c is not a typable character.
+     * This method determines whether a particular character from
+     * the keyboard will affect the text.
+     */
+    private static boolean isTypingInteractorChar(char ch) {
+
+        return ch >= ' ' || 
+               ch == LINE_FEED || 
+               ch == RETURN ||
+               ch == TAB || 
+               ch == BACKSPACE;
+    }
+    
+    /**
+     * This method determines whether a TypingInteractor should
+     * handle the given KeyEvent.
+     */
+    static boolean handledByTypingInteractor(KeyEvent event) {
+
+        final int id = event.getID();
+        
+        if (id == event.KEY_TYPED) {
+            return isTypingInteractorChar(event.getKeyChar());
+        }
+        else {
+            return (id == KeyEvent.KEY_PRESSED && 
+                    event.getKeyCode() == KeyEvent.VK_DELETE);
+        }
+    }
+
+    public TypingInteractor(TextComponent textComponent,
+                            TextSelection selection,
+                            AttributeMap typingStyle,
+                            TextEditBehavior parent,
+                            SimpleCommandLog commandLog,
+                            PanelEventBroadcaster listener) {
+                            
+        fTextComponent = textComponent;
+        fText = textComponent.getText();
+        fSelection = selection;
+        fTypingStyle = typingStyle;
+        fParent = parent;
+        fCommandLog = commandLog;
+        fListener = listener;
+
+        fParent.setTypingInteractor(this);
+    }
+
+    private void endInteraction() {
+
+        removeFromOwner();
+        postTextChangeCommand();
+
+        int selStart = fSelection.getStart().fOffset;
+        int selLimit = fSelection.getEnd().fOffset;
+        fParent.setSavedTypingStyle(selStart==selLimit? fTypingStyle : null, selStart);
+        
+        fParent.setTypingInteractor(null);
+    }
+
+    public boolean textControlEventOccurred(Behavior.EventType event, Object what) {
+
+        if (fCommand == null && event == Behavior.CHARACTER_STYLE_MOD) {
+
+            pickUpTypingStyle();
+            fTypingStyle = ((StyleModifier)what).modifyStyle(fTypingStyle);
+
+            fListener.textStateChanged(TextPanelEvent.SELECTION_STYLES_CHANGED);
+
+            return true;
+        }
+        else {
+            Behavior next = nextBehavior(); // save because removeFromOwner() will trash this
+
+            endInteraction();
+
+            if (next != null)
+                return next.textControlEventOccurred(event, what);
+            else
+                return false;
+        }
+    }
+
+    private void doBackspace() {
+
+        int selStart = fSelection.getStart().fOffset;
+        int selLimit = fSelection.getEnd().fOffset;
+
+        if (selStart == selLimit) {
+            if (selStart != 0) {
+                fTypingStyle = null;
+                pickUpTypingStyle();
+                makeTextChangeCommand();
+                if (selStart <= fCommand.affectedRangeStart()) {
+                    fCommand.prependToOldText(fText.extract(selStart - 1, selStart));
+                }
+                TextOffset insPt = new TextOffset(selStart - 1);
+                fParent.doReplaceText(selStart - 1, selStart, null, insPt, insPt);
+            }
+        }
+        else {
+            fTypingStyle = null;
+            makeTextChangeCommand();
+            TextOffset insPt = new TextOffset(selStart);
+            fParent.doReplaceText(selStart, selLimit, null, insPt, insPt);
+        }
+    }
+
+    private void doFwdDelete(boolean ignoreCharBreak) {
+
+        int selStart = fSelection.getStart().fOffset;
+        int selLimit = fSelection.getEnd().fOffset;
+
+        TextOffset insPt = new TextOffset(selStart);
+
+        if (selStart == selLimit) {
+            if (selStart != fText.length()) {
+                fTypingStyle = null;
+                makeTextChangeCommand();
+                int numChars;
+                if (ignoreCharBreak) {
+                    numChars = 1;
+                }
+                else {
+                    if (fCharBreak == null) {
+                        fCharBreak = BreakIterator.getCharacterInstance();
+                    }
+                    fCharBreak.setText(fText.createCharacterIterator());
+                    numChars = fCharBreak.following(selStart) - selStart;
+                }
+                fCommand.appendToOldText(fText.extract(selStart, selStart + numChars));
+                fParent.doReplaceText(selStart, selStart + numChars, null, insPt, insPt);
+            }
+        }
+        else {
+            fTypingStyle = null;
+            makeTextChangeCommand();
+            fParent.doReplaceText(selStart, selLimit, null, insPt, insPt);
+        }
+    }
+
+    private void doNormalKey(char ch) {
+
+        // Sigh - 1.1 reports enter key events as return chars, but
+        // 1.2 reports them as linefeeds.
+        if (ch == RETURN) {
+            ch = LINE_FEED;
+        }
+        pickUpTypingStyle();
+        makeTextChangeCommand();
+        fParent.doReplaceSelectedText(ch, fTypingStyle);
+    }
+
+    public boolean focusGained(FocusEvent e) {
+
+        // pass through, but stick around...
+        return super.focusGained(e);
+    }
+
+    public boolean focusLost(FocusEvent e) {
+
+        // pass through, but stick around...
+        return super.focusLost(e);
+    }
+
+    public boolean keyTyped(KeyEvent e) {
+
+        if (e.getKeyChar() == BACKSPACE) {
+            doBackspace();
+        }
+        else {
+            if (isTypingInteractorChar(e.getKeyChar())) {
+                KeyRemap remap = fParent.getKeyRemap();
+                doNormalKey(remap.remap(e));
+            }
+        }
+
+        return true;
+    }
+
+    public boolean keyPressed(KeyEvent e) {
+
+        int key = e.getKeyCode();
+        if (key == KeyEvent.VK_DELETE) {
+            doFwdDelete(e.isShiftDown());
+            return true;
+        }
+
+        Behavior next = nextBehavior();
+
+        if (TextSelection.keyAffectsSelection(e)) {
+
+            endInteraction();
+        }
+
+        return next.keyPressed(e);
+    }
+
+    public boolean keyReleased(KeyEvent e) {
+        return true;
+    }
+
+    private void makeTextChangeCommand() {
+        if (fCommand == null) {
+            TextOffset  selStart = fSelection.getStart();
+            TextOffset  selEnd = fSelection.getEnd();
+
+            MText writableText = new StyledText();
+            writableText.replace(0, 0, fText, selStart.fOffset, selEnd.fOffset);
+            fCommand = new TextChangeCommand(fParent,
+                                writableText,
+                                null, selStart.fOffset, selStart, selEnd,
+                                new TextOffset(), new TextOffset());
+
+            fListener.textStateChanged(TextPanelEvent.UNDO_STATE_CHANGED);
+        }
+    }
+
+    public boolean mouseDragged(MouseEvent e) {
+
+        return true;
+    }
+
+    public boolean mouseEntered(MouseEvent e) {
+
+        return true;
+    }
+
+    public boolean mouseExited(MouseEvent e) {
+
+        return true;
+    }
+
+    public boolean mouseMoved(MouseEvent e) {
+
+        return true;
+    }
+
+    public boolean mousePressed(MouseEvent e) {
+
+        Behavior next = nextBehavior(); // save because removeFromOwner() will trash this
+
+        endInteraction();
+
+        if (next != null)
+            return next.mousePressed(e);
+        else
+            return false;
+    }
+
+    public boolean mouseReleased(MouseEvent e) {
+
+        Behavior next = nextBehavior(); // save because removeFromOwner() will trash this
+
+        endInteraction();
+
+        if (next != null)
+            return next.mouseReleased(e);
+        else
+            return false;
+    }
+
+    private void pickUpTypingStyle() {
+        if (fTypingStyle == null) {
+            int selStart = fSelection.getStart().fOffset;
+            int selLimit = fSelection.getEnd().fOffset;
+            fTypingStyle = TextEditBehavior.typingStyleAt(fText, selStart, selLimit);
+        }
+    }
+
+    private void postTextChangeCommand() {
+        if (fCommand != null) {
+            TextOffset  selStart = fSelection.getStart();
+            TextOffset  selEnd = fSelection.getEnd();
+
+            fCommand.setNewText(fText.extract(fCommand.affectedRangeStart(), selStart.fOffset));
+            fCommand.setSelRangeAfter(selStart, selEnd);
+            fCommandLog.add(fCommand);
+        }
+    }
+
+    boolean hasPendingCommand() {
+
+        return fCommand != null;
+    }
+
+    AttributeMap getTypingStyle() {
+
+        pickUpTypingStyle();
+        return fTypingStyle;
+    }
+}
diff --git a/src/com/ibm/richtext/textpanel/package.html b/src/com/ibm/richtext/textpanel/package.html
new file mode 100755
index 0000000..a6a1878
--- /dev/null
+++ b/src/com/ibm/richtext/textpanel/package.html
@@ -0,0 +1,7 @@
+<html>
+<body bgcolor="white">
+Provides components (for both AWT and Swing)
+in which styled text is displayed and edited, and
+related classes.
+</body>
+</html>
diff --git a/src/com/ibm/richtext/uiimpl/AboutText.java b/src/com/ibm/richtext/uiimpl/AboutText.java
new file mode 100755
index 0000000..6b2047c
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/AboutText.java
@@ -0,0 +1,65 @@
+/*
+ * @(#)$RCSfile: AboutText.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.awt.Color;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+public final class AboutText {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final Color[] COLORS = {
+        Color.red, Color.blue, Color.white, Color.green
+    };
+    
+    public static MConstText getAboutText() {
+
+        String text = ResourceUtils.getResourceString(FrameResources.ABOUT_TEXT);
+        StyledText styledText = new StyledText(text, AttributeMap.EMPTY_ATTRIBUTE_MAP);
+
+        int length = styledText.length();
+        int i=0;
+
+        for (int paragraphStart = 0, paragraphLimit;
+                    paragraphStart < length;
+                    paragraphStart = paragraphLimit) {
+
+            paragraphLimit = styledText.paragraphLimit(paragraphStart);
+            StyleModifier modifier = StyleModifier.createAddModifier(
+                                             TextAttribute.FOREGROUND,
+                                             COLORS[(i++)%COLORS.length]);
+            styledText.modifyCharacterStyles(paragraphStart,
+                                             paragraphLimit,
+                                             modifier);
+        }
+
+        StyleModifier modifier = StyleModifier.createAddModifier(
+                                            TextAttribute.LINE_FLUSH,
+                                            TextAttribute.FLUSH_CENTER);
+
+        styledText.modifyParagraphStyles(0, text.length(), modifier);
+
+        return styledText;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/uiimpl/BooleanStyleMenuItem.java b/src/com/ibm/richtext/uiimpl/BooleanStyleMenuItem.java
new file mode 100755
index 0000000..208d283
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/BooleanStyleMenuItem.java
@@ -0,0 +1,99 @@
+/*
+ * @(#)$RCSfile: BooleanStyleMenuItem.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.util.EventObject;
+
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public final class BooleanStyleMenuItem extends SingleCheckMenuItem {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private final Object fKey;
+    private final boolean fCharacter;
+
+    private final Object fOnValue;
+    
+    public BooleanStyleMenuItem(Object style,
+                                Object onValue,
+                                MenuData menuData,
+                                boolean character) {
+        
+        super(menuData);
+        if (onValue == null) {
+            throw new IllegalArgumentException("On value cannot be null");
+        }
+
+        fKey = style;
+        fCharacter = character;
+        
+        fOnValue = onValue;
+        fItem.addListener(new EventListener() {
+            public void eventOccurred(EventObject event) {
+                StyleModifier modifier;
+                MTextPanel panel = getTextPanel();
+                if (panel == null) {
+                    throw new Error("Menu item is enabled when panel is null!");
+                }
+                if (continuousAndCommand()) {
+                    AttributeSet set = new AttributeSet(fKey);
+                    modifier = StyleModifier.createRemoveModifier(set);
+                }
+                else {
+                    modifier = StyleModifier.createAddModifier(fKey, fOnValue);
+                }
+                
+                if (fCharacter == CHARACTER) {
+                    panel.modifyCharacterStyleOnSelection(modifier);
+                }
+                else {
+                    panel.modifyParagraphStyleOnSelection(modifier);
+                }
+            }
+        });
+    }
+    
+    private boolean continuousAndCommand() {
+        
+        MTextPanel panel = getTextPanel();
+
+        Object value = (fCharacter == CHARACTER)? 
+                            panel.getCharacterStyleOverSelection(fKey) :
+                            panel.getParagraphStyleOverSelection(fKey);
+        return fOnValue.equals(value);
+    }
+    
+    protected void setChecked() {
+        
+        fItem.setState(continuousAndCommand());
+    }
+    
+    public boolean respondsToEventType(int type) {
+        
+        return type == TextPanelEvent.SELECTION_STYLES_CHANGED;
+    }
+    
+    public final void textEventOccurred(TextPanelEvent event) {
+        
+        setChecked();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/uiimpl/ChoiceMenuItemSet.java b/src/com/ibm/richtext/uiimpl/ChoiceMenuItemSet.java
new file mode 100755
index 0000000..369dc46
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/ChoiceMenuItemSet.java
@@ -0,0 +1,96 @@
+/*
+ * @(#)$RCSfile: ChoiceMenuItemSet.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.util.EventObject;
+
+import java.util.Hashtable;
+
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public abstract class ChoiceMenuItemSet extends MenuItemSet {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private MItem[] fItems;
+    private Hashtable fItemToStyleMap;
+    
+    ChoiceMenuItemSet(Object[] values,
+                      MenuData[] menuData) {
+        
+        if (values.length != menuData.length) {
+            throw new IllegalArgumentException(
+                                "Values and names must have equal length");
+        }
+        
+        fItems = new MItem[menuData.length];
+        fItemToStyleMap = new Hashtable(menuData.length);
+        
+        EventListener listener = new EventListener() {
+            public void eventOccurred(EventObject event) {
+                handleValueSelected(fItemToStyleMap.get(event.getSource()));
+            }
+        };
+        
+        for (int i=0; i < menuData.length; i++) {
+            fItems[i] = MItem.createCheckboxItem(menuData[i]);
+            if (values[i] != null) {
+                fItemToStyleMap.put(fItems[i], values[i]);
+            }
+            fItems[i].addListener(listener);
+            fItems[i].setEnabled(false);
+        }
+    }
+    
+    protected abstract void handleValueSelected(Object item);
+    protected abstract Object getCurrentValue();
+    
+    protected final void setChecked() {
+        
+        Object value = getCurrentValue();
+        
+        for (int i=0; i < fItems.length; i++) {
+            Object itemVal = fItemToStyleMap.get(fItems[i]);
+            if (itemVal == null) {
+                fItems[i].setState(value == null);
+            }
+            else {
+                fItems[i].setState(itemVal.equals(value));
+            }
+        }
+    }
+
+    protected final void textPanelChanged() {
+        
+        MTextPanel textPanel = getTextPanel();
+        if (textPanel == null) {
+            for (int i=0; i < fItems.length; i++) {
+                fItems[i].setEnabled(false);
+                fItems[i].setState(false);
+            }
+        }
+        else {
+            for (int i=0; i < fItems.length; i++) {
+                fItems[i].setEnabled(true);
+                setChecked();
+            }
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/CommandMenuItem.java b/src/com/ibm/richtext/uiimpl/CommandMenuItem.java
new file mode 100755
index 0000000..dc89b85
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/CommandMenuItem.java
@@ -0,0 +1,195 @@
+/*
+ * @(#)$RCSfile: CommandMenuItem.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.util.EventObject;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public abstract class CommandMenuItem extends MenuItemSet {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private /*final*/ MItem fItem;
+    
+    protected abstract boolean isEnabled();
+    protected abstract void performAction();
+
+    protected CommandMenuItem(MenuData data) {
+        
+        this(data, false);
+    }
+    
+    protected CommandMenuItem(MenuData data, boolean enableByDefault) {
+        
+        fItem = MItem.createItem(data);
+        fItem.addListener(new EventListener() {
+            public void eventOccurred(EventObject event) {
+                performAction();
+            }
+        });
+        fItem.setEnabled(enableByDefault);
+    }
+    
+    protected void textPanelChanged() {
+        
+        MTextPanel textPanel = getTextPanel();
+        if (textPanel == null) {
+            fItem.setEnabled(false);
+        }
+        else {
+            fItem.setEnabled(isEnabled());
+        }
+    }
+    
+    public final void textEventOccurred(TextPanelEvent event) {
+        
+        fItem.setEnabled(isEnabled());
+    }
+    
+    public static final class CutCopyClear extends CommandMenuItem {
+        
+        public static final int CUT = 0;
+        public static final int COPY = 1;
+        public static final int CLEAR = 2;
+
+        private final int fKind;
+        
+        public CutCopyClear(MenuData menuData, int kind) {
+            
+            super(menuData);
+            if (kind != CUT && kind != COPY && kind != CLEAR) {
+                throw new IllegalArgumentException("Invalid menu kind");
+            }
+            fKind = kind;
+        }
+        
+        protected boolean isEnabled() {
+            
+            MTextPanel panel = getTextPanel();
+            return panel.getSelectionStart() != panel.getSelectionEnd();
+        }
+        
+        public boolean respondsToEventType(int type) {
+            
+            return type == TextPanelEvent.SELECTION_EMPTY_CHANGED;
+        }
+        
+        protected void performAction() {
+            
+            MTextPanel panel = getTextPanel();
+            switch (fKind) {
+                case CUT:
+                    panel.cut();
+                    break;
+                case COPY:
+                    panel.copy();
+                    break;
+                case CLEAR:
+                    panel.clear();
+                    break;
+            }
+        }
+    }
+    
+    public static final class UndoRedo extends CommandMenuItem {
+        
+        public static final boolean UNDO = true;
+        public static final boolean REDO = false;
+        
+        private boolean fKind;
+        
+        public UndoRedo(MenuData menuData, boolean kind) {
+            
+            super(menuData);
+            fKind = kind;
+        }
+        
+        protected boolean isEnabled() {
+            
+            MTextPanel panel = getTextPanel();
+            if (fKind == UNDO) {
+                return panel.canUndo();
+            }
+            else {
+                return panel.canRedo();
+            }
+        }
+
+        public boolean respondsToEventType(int type) {
+            
+            return type == TextPanelEvent.UNDO_STATE_CHANGED;
+        }
+
+        protected void performAction() {
+            
+            MTextPanel panel = getTextPanel();
+            if (fKind == UNDO) {
+                panel.undo();
+            }
+            else {
+                panel.redo();
+            }
+        }
+    }
+
+    public static final class Paste extends CommandMenuItem {
+        
+        public Paste(MenuData menuData) {
+            
+            super(menuData);
+        }
+        
+        protected boolean isEnabled() {
+            
+            return getTextPanel().clipboardNotEmpty();
+        }
+
+        public boolean respondsToEventType(int type) {
+            
+            return type == TextPanelEvent.CLIPBOARD_CHANGED;
+        }
+
+        protected void performAction() {
+            
+            getTextPanel().paste();
+        }
+    }
+
+    public static final class SelectAll extends CommandMenuItem {
+        
+        public SelectAll(MenuData menuData) {
+            
+            super(menuData);
+        }
+        
+        protected boolean isEnabled() {
+            
+            return true;
+        }
+
+        public boolean respondsToEventType(int type) {
+            
+            return false;
+        }
+
+        protected void performAction() {
+            
+            getTextPanel().selectAll();
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/DialogItem.java b/src/com/ibm/richtext/uiimpl/DialogItem.java
new file mode 100755
index 0000000..073ae2b
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/DialogItem.java
@@ -0,0 +1,74 @@
+/*
+ * @(#)$RCSfile: DialogItem.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.awt.Window;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public final class DialogItem extends CommandMenuItem {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static abstract class DialogFactory {
+        
+        public abstract Window createDialog(MTextPanel textPanel);
+    }
+    
+    private DialogFactory fDialogFactory;
+    private Window fDialog = null;
+    
+    public DialogItem(MenuData menuData,
+                      DialogFactory dialogFactory) {
+        
+        super(menuData, true);
+        fDialogFactory = dialogFactory;
+    }
+    
+    protected void textPanelChanged() {
+        // do nothing
+    }
+        
+    protected boolean isEnabled() {
+            
+        // should never get called...
+        return true;
+    }
+
+    public boolean respondsToEventType(int type) {
+            
+        return false;
+    }
+
+    protected void performAction() {
+
+        if (fDialog == null) {
+            MTextPanel panel = getTextPanel();
+            if (panel != null) {
+                fDialog = fDialogFactory.createDialog(panel);
+                fDialog.addWindowListener(new WindowAdapter() {
+                    public void windowClosed(WindowEvent e) {
+                        fDialog = null;
+                    }
+                });
+            }
+        }
+        fDialog.show();
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/uiimpl/EventListener.java b/src/com/ibm/richtext/uiimpl/EventListener.java
new file mode 100755
index 0000000..805bce9
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/EventListener.java
@@ -0,0 +1,24 @@
+/*
+ * @(#)$RCSfile: EventListener.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.util.EventObject;
+
+public interface EventListener {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public void eventOccurred(EventObject event);
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/uiimpl/FontList.java b/src/com/ibm/richtext/uiimpl/FontList.java
new file mode 100755
index 0000000..1b07563
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/FontList.java
@@ -0,0 +1,66 @@
+/*
+ * @(#)$RCSfile: FontList.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.richtext.uiimpl;
+
+import java.awt.GraphicsEnvironment;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Vector;
+
+final class FontList {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private static final String[] stripThese = {
+        ".bold", ".bolditalic", ".italic"
+    };
+
+    public static String[] getFontList() {
+
+        String[] names = GraphicsEnvironment.getLocalGraphicsEnvironment()
+                                            .getAvailableFontFamilyNames();
+        Vector v = new Vector(names.length);
+        for (int i=0; i < names.length; i++) {
+            v.addElement(names[i]);
+        }
+
+        Collections.sort(v);
+                
+        String last = "";
+        
+        Iterator iter = v.listIterator();
+        while (iter.hasNext()) {
+            String current = (String) iter.next();
+            testSuffixes: for (int i=0; i < stripThese.length; i++) {
+                if (current.endsWith(stripThese[i])) {
+                    int baseLen = current.length()-stripThese[i].length();
+                    String base = current.substring(0, baseLen);
+                    if (base.equalsIgnoreCase(last)) {
+                        iter.remove();
+                        current = last;
+                        break testSuffixes;
+                    }
+                }
+            }
+            last = current;
+        }
+        
+        String[] result = new String[v.size()];
+        v.copyInto(result);
+        return result;
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/KeymapMenuItemSet.java b/src/com/ibm/richtext/uiimpl/KeymapMenuItemSet.java
new file mode 100755
index 0000000..574faa0
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/KeymapMenuItemSet.java
@@ -0,0 +1,61 @@
+/*
+ * @(#)$RCSfile: KeymapMenuItemSet.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import com.ibm.richtext.textpanel.KeyRemap;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public final class KeymapMenuItemSet extends ChoiceMenuItemSet {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public KeymapMenuItemSet(KeyRemap[] values,
+                             MenuData[] menuData) {
+        
+        super(values, menuData);
+    }
+    
+    protected void handleValueSelected(Object value) {
+        
+        MTextPanel textPanel = getTextPanel();
+        if (textPanel == null) {
+            throw new Error("Menu item is enabled when panel is null!");
+        }
+
+        textPanel.setKeyRemap((KeyRemap) value);
+    }
+    
+    protected Object getCurrentValue() {
+        
+        MTextPanel textPanel = getTextPanel();
+        if (textPanel == null) {
+            throw new Error("Shouldn't call this without a text panel!");
+        }
+        return textPanel.getKeyRemap();
+    }
+    
+    public void textEventOccurred(TextPanelEvent event) {
+        
+        setChecked();
+    }
+    
+    public boolean respondsToEventType(int type) {
+        
+        return type == TextPanelEvent.KEYREMAP_CHANGED;
+    }
+
+}
diff --git a/src/com/ibm/richtext/uiimpl/MItem.java b/src/com/ibm/richtext/uiimpl/MItem.java
new file mode 100755
index 0000000..fdf1d68
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/MItem.java
@@ -0,0 +1,87 @@
+/*
+ * @(#)$RCSfile: MItem.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.util.Vector;
+import java.util.EventObject;
+
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public abstract class MItem {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private Vector fListeners = new Vector(2);
+    private EventObject fEvent = new EventObject(this);
+    
+    public abstract void setEnabled(boolean enabled);
+    public abstract void setState(boolean checked);
+    
+    public final void addListener(EventListener listener) {
+        
+        fListeners.addElement(listener);
+    }
+    
+    public final void removeListener(EventListener listener) {
+        
+        fListeners.removeElement(listener);
+    }
+    
+    protected void handleSelected() {
+            
+        int length = fListeners.size();
+        for (int i=0; i < length; i++) {
+            EventListener l = (EventListener) fListeners.elementAt(i);
+            l.eventOccurred(fEvent);
+        }
+    }
+    
+    // factory stuff
+    
+    /**
+     * Clients should synchronize on LOCK while setting and using
+     * global factory.
+     */
+    public static final Object LOCK = new Object();
+    
+    public static interface ItemFactory {
+        
+        public MItem createItem(MenuData menuData);
+        public MItem createCheckboxItem(MenuData menuData);
+        public void createSeparator();
+    }
+    
+    private static ItemFactory fgFactory;
+    
+    public static MItem createItem(MenuData menuData) {
+        
+        return fgFactory.createItem(menuData);
+    }
+    
+    public static MItem createCheckboxItem(MenuData menuData) {
+        
+        return fgFactory.createCheckboxItem(menuData);
+    }
+    
+    public static void setItemFactory(ItemFactory factory) {
+        
+        fgFactory = factory;
+    }
+    
+    public static ItemFactory getItemFactory() {
+        
+        return fgFactory;
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/MenuBuilder.java b/src/com/ibm/richtext/uiimpl/MenuBuilder.java
new file mode 100755
index 0000000..1d89abc
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/MenuBuilder.java
@@ -0,0 +1,368 @@
+/*
+ * @(#)$RCSfile: MenuBuilder.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.awt.Color;
+import java.awt.Frame;
+
+import java.awt.Window;
+import java.text.NumberFormat;
+
+import com.ibm.richtext.styledtext.MConstText;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.KeyRemap;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+import com.ibm.richtext.uiimpl.DialogItem.DialogFactory;
+
+public abstract class MenuBuilder {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    
+    protected static final int EDIT = 0;
+    protected static final int SIZE = 1;
+    protected static final int STYLE = 2;
+    protected static final int FLUSH = 3;
+    protected static final int KEYMAP = 4;
+    protected static final int BIDI = 5;
+    protected static final int ABOUT = 6;
+    
+    private Color[] colors = { Color.black, Color.white, Color.green, Color.blue,
+                                Color.cyan, Color.gray, Color.darkGray, Color.lightGray,
+                                Color.magenta, Color.orange, Color.pink, Color.red,
+                                Color.yellow, null };
+    private String[] colorNames = {
+                        ResourceUtils.getResourceString(FrameResources.BLACK),
+                        ResourceUtils.getResourceString(FrameResources.WHITE),
+                        ResourceUtils.getResourceString(FrameResources.GREEN),
+                        ResourceUtils.getResourceString(FrameResources.BLUE),
+                        ResourceUtils.getResourceString(FrameResources.CYAN),
+                        ResourceUtils.getResourceString(FrameResources.GRAY),
+                        ResourceUtils.getResourceString(FrameResources.DARK_GRAY),
+                        ResourceUtils.getResourceString(FrameResources.LIGHT_GRAY),
+                        ResourceUtils.getResourceString(FrameResources.MAGENTA),
+                        ResourceUtils.getResourceString(FrameResources.ORANGE),
+                        ResourceUtils.getResourceString(FrameResources.PINK),
+                        ResourceUtils.getResourceString(FrameResources.RED),
+                        ResourceUtils.getResourceString(FrameResources.YELLOW),
+                        ResourceUtils.getResourceString(FrameResources.NONE)
+    };
+    
+    protected int[] defaultMenus = { EDIT, 
+                                     SIZE,
+                                     STYLE,
+                                     FLUSH, 
+                                     KEYMAP,
+                                     BIDI,
+                                     ABOUT };
+
+    protected MTextPanel fTextPanel;
+    protected Frame fDialogParent;
+
+    protected MenuBuilder() {
+    }
+    
+    protected final void doCreateMenus(MTextPanel textPanel, Frame frame, int[] menus) {
+    
+        fTextPanel = textPanel;
+        fDialogParent = frame;
+        
+        for (int i=0; i < menus.length; i++) {
+            switch(menus[i]) {
+                case EDIT:
+                    createEditMenu();
+                    break;
+                case SIZE:
+                    createSizeMenu();
+                    break;
+                case STYLE:
+                    createStyleMenu();
+                    break;
+                case FLUSH:
+                    createFlushMenu();
+                    break;
+                case KEYMAP:
+                    createKeymapMenu();
+                    break;
+                case BIDI:
+                    createBidiMenu();
+                    break;
+                case ABOUT:
+                    createAboutMenu();
+                    break;
+                default:
+                    throw new IllegalArgumentException("Illegal menu: " + menus[i]);
+            }
+        }
+                    
+        fTextPanel = null;
+        fDialogParent = null;
+    }
+    
+    protected abstract void handleAddMenu(String key);
+    
+    protected abstract DialogFactory createObjectDialogFactory(String dialogTitle,
+                                                               String dialogText,
+                                                               Object key,
+                                                               boolean character,
+                                                               String[] names,
+                                                               Object[] values);
+
+    protected abstract DialogFactory createNumberDialogFactory(String dialogTitle,
+                                                               String dialogText,
+                                                               Object key,
+                                                               boolean character);
+
+    protected abstract DialogFactory createAboutDialogFactory();
+
+    private void createEditMenu() {
+        
+        handleAddMenu(FrameResources.EDIT);
+        
+        new CommandMenuItem.UndoRedo(ResourceUtils.getMenuData(FrameResources.UNDO),
+                                    CommandMenuItem.UndoRedo.UNDO).setTextPanel(fTextPanel);
+        new CommandMenuItem.UndoRedo(ResourceUtils.getMenuData(FrameResources.REDO),
+                                    CommandMenuItem.UndoRedo.REDO).setTextPanel(fTextPanel);
+        MItem.getItemFactory().createSeparator();
+        new CommandMenuItem.CutCopyClear(ResourceUtils.getMenuData(FrameResources.CUT),
+                                        CommandMenuItem.CutCopyClear.CUT).setTextPanel(fTextPanel);
+        new CommandMenuItem.CutCopyClear(ResourceUtils.getMenuData(FrameResources.COPY),
+                                        CommandMenuItem.CutCopyClear.COPY).setTextPanel(fTextPanel);
+        new CommandMenuItem.Paste(ResourceUtils.getMenuData(FrameResources.PASTE)).setTextPanel(fTextPanel);
+        new CommandMenuItem.CutCopyClear(ResourceUtils.getMenuData(FrameResources.CLEAR),
+                                        CommandMenuItem.CutCopyClear.CLEAR).setTextPanel(fTextPanel);
+        MItem.getItemFactory().createSeparator();
+        new CommandMenuItem.SelectAll(ResourceUtils.getMenuData(FrameResources.SELECT_ALL)).setTextPanel(fTextPanel);
+    }
+    
+    private static final float[] DEFAULT_SIZES =
+                                    {9, 10, 12, 14, 18, 24, 36, 48, 72};
+
+    private void createSizeMenu() {
+        
+        createSizeMenu(DEFAULT_SIZES);
+    }
+    
+    private void createSizeMenu(float[] sizes) {
+                
+        handleAddMenu(FrameResources.SIZE);
+
+        if (sizes != DEFAULT_SIZES) {
+
+            sizes = (float[]) sizes.clone();
+            if (sizes.length == 0) {
+                throw new IllegalArgumentException("sizes array has zero length");
+            }
+
+            float lastValue = sizes[0];
+            for (int i=1; i < sizes.length; i++) {
+                if (sizes[i] >= lastValue) {
+                    throw new IllegalArgumentException(
+                                                "sizes array must be increasing");
+                }
+                lastValue = sizes[i];
+            }
+        }
+        
+        Float[] values = new Float[sizes.length];
+        MenuData[] mData = new MenuData[sizes.length];
+        NumberFormat fmt = NumberFormat.getNumberInstance();
+        
+        for (int i=0; i < sizes.length; i++) {
+            values[i] = new Float(sizes[i]);
+            mData[i] = new MenuData(fmt.format(sizes[i]));
+        }
+        
+        new StyleMenuItemSet(TextAttribute.SIZE,
+                                values,
+                                mData,
+                                MenuItemSet.CHARACTER).setTextPanel(fTextPanel);
+            
+        if (fDialogParent != null) {
+            String dialogTitle = ResourceUtils.getResourceString(FrameResources.SET_SIZE_TITLE);
+            String dialogText = ResourceUtils.getResourceString(FrameResources.SET_SIZE_LABEL);
+            DialogFactory factory = createNumberDialogFactory(dialogTitle,
+                                                              dialogText,
+                                                              TextAttribute.SIZE,
+                                                              MenuItemSet.CHARACTER);
+                                                              
+            new DialogItem(ResourceUtils.getMenuData(FrameResources.OTHER_DIALOG), 
+                            factory).setTextPanel(fTextPanel);
+        }
+    }
+    
+    private void createStyleMenu() {
+        
+        handleAddMenu(FrameResources.STYLE);
+
+        Object[] keys =    { TextAttribute.WEIGHT,
+                            TextAttribute.POSTURE,
+                            TextAttribute.UNDERLINE,
+                            TextAttribute.STRIKETHROUGH };
+        Object[] values =  { TextAttribute.WEIGHT_BOLD,
+                            TextAttribute.POSTURE_OBLIQUE,
+                            TextAttribute.UNDERLINE_ON,
+                            TextAttribute.STRIKETHROUGH_ON };
+        MenuData[] mData = { ResourceUtils.getMenuData(FrameResources.BOLD),
+                            ResourceUtils.getMenuData(FrameResources.ITALIC),
+                            ResourceUtils.getMenuData(FrameResources.UNDERLINE),
+                            ResourceUtils.getMenuData(FrameResources.STRIKETHROUGH) };
+
+        new SubtractStyleMenuItem(keys, 
+                                    ResourceUtils.getMenuData(FrameResources.PLAIN),
+                                    MenuItemSet.CHARACTER).setTextPanel(fTextPanel);
+                                                 
+        for (int i=0; i < keys.length; i++) {
+            new BooleanStyleMenuItem(keys[i],
+                                        values[i],
+                                        mData[i],
+                                        MenuItemSet.CHARACTER).setTextPanel(fTextPanel);
+        }
+            
+        if (fDialogParent != null) {
+            
+            MItem.getItemFactory().createSeparator();
+            
+            String[] fonts = FontList.getFontList();
+            String title = ResourceUtils.getResourceString(FrameResources.SET_FONT_TITLE);
+            String label = ResourceUtils.getResourceString(FrameResources.SET_FONT_LABEL);
+            
+            DialogFactory fontF = createObjectDialogFactory(title, 
+                                                            label,
+                                                            TextAttribute.FAMILY,
+                                                            StyleMenuItemSet.CHARACTER,
+                                                            fonts,
+                                                            fonts);
+            new DialogItem(ResourceUtils.getMenuData(FrameResources.FONT_DIALOG),
+                                    fontF).setTextPanel(fTextPanel);
+
+            DialogFactory foregroundF = createColorDialogFactory(true);
+            DialogFactory backgroundF = createColorDialogFactory(false);
+            
+            new DialogItem(ResourceUtils.getMenuData(FrameResources.FORECOLOR_DIALOG),
+                                    foregroundF).setTextPanel(fTextPanel);
+            new DialogItem(ResourceUtils.getMenuData(FrameResources.BACKCOLOR_DIALOG),
+                                    backgroundF).setTextPanel(fTextPanel);
+            }
+    }
+
+    private DialogFactory createColorDialogFactory(boolean foreground) {
+        
+        String title;
+        String message;
+        Object key;
+        
+        if (foreground) {
+            title = ResourceUtils.getResourceString(FrameResources.SET_FOREGROUND_TITLE);
+            message = ResourceUtils.getResourceString(FrameResources.SET_FOREGROUND_LABEL);
+            key = TextAttribute.FOREGROUND;
+        }
+        else {
+            title = ResourceUtils.getResourceString(FrameResources.SET_BACKGROUND_TITLE);
+            message = ResourceUtils.getResourceString(FrameResources.SET_BACKGROUND_LABEL);
+            key = TextAttribute.BACKGROUND;
+        }
+        return createObjectDialogFactory(title, 
+                                         message,
+                                         key,
+                                         StyleMenuItemSet.CHARACTER,
+                                         colorNames,
+                                         colors);
+    }
+    
+    private void createFontMenu() {
+        
+        handleAddMenu(FrameResources.FONT);
+        
+        String[] fonts = FontList.getFontList();
+        MenuData[] mData = new MenuData[fonts.length];
+        for (int i=0; i < mData.length; i++) {
+            mData[i] = new MenuData(fonts[i]);
+        }
+        
+        new StyleMenuItemSet(TextAttribute.FAMILY,
+                                fonts,
+                                mData,
+                                StyleMenuItemSet.CHARACTER).setTextPanel(fTextPanel);
+    }
+    
+    private void createFlushMenu() {
+        
+        handleAddMenu(FrameResources.FLUSH);
+        
+        Object[] values = {  TextAttribute.FLUSH_LEADING,
+                             TextAttribute.FLUSH_CENTER,
+                             TextAttribute.FLUSH_TRAILING,
+                             TextAttribute.FULLY_JUSTIFIED };
+        MenuData[] mData = { ResourceUtils.getMenuData(FrameResources.LEADING),
+                             ResourceUtils.getMenuData(FrameResources.CENTER),
+                             ResourceUtils.getMenuData(FrameResources.TRAILING),
+                             ResourceUtils.getMenuData(FrameResources.JUSTIFIED) };
+        
+        new StyleMenuItemSet(TextAttribute.LINE_FLUSH,
+                                values,
+                                mData,
+                                MenuItemSet.PARAGRAPH).setTextPanel(fTextPanel);
+    }
+    
+    private void createKeymapMenu() {
+        
+        handleAddMenu(FrameResources.KEYMAP);
+        
+        KeyRemap[] values = { KeyRemap.getIdentityRemap(),
+                             KeyRemap.getArabicTransliteration(),
+                             KeyRemap.getHebrewTransliteration(),
+                             KeyRemap.getIsraelNikud(),
+                             KeyRemap.getThaiKetmanee() };
+        MenuData[] mData = { ResourceUtils.getMenuData(FrameResources.DEFAULT),
+                             ResourceUtils.getMenuData(FrameResources.ARABIC),
+                             ResourceUtils.getMenuData(FrameResources.HEBREW),
+                             ResourceUtils.getMenuData(FrameResources.ISRAEL_NIKUD),
+                             ResourceUtils.getMenuData(FrameResources.THAI_KETMANEE) };
+        
+        new KeymapMenuItemSet(values, mData).setTextPanel(fTextPanel);
+    }
+    
+    private void createBidiMenu() {
+        
+        handleAddMenu(FrameResources.BIDI);
+        
+        Object[] values = {  null,
+                             TextAttribute.RUN_DIRECTION_LTR,
+                             TextAttribute.RUN_DIRECTION_RTL };
+        MenuData[] mData = { ResourceUtils.getMenuData(FrameResources.DEFAULT_DIRECTION),
+                             ResourceUtils.getMenuData(FrameResources.LTR_DIRECTION),
+                             ResourceUtils.getMenuData(FrameResources.RTL_DIRECTION), };
+
+        new StyleMenuItemSet(TextAttribute.RUN_DIRECTION,
+                                values,
+                                mData,
+                                MenuItemSet.PARAGRAPH).setTextPanel(fTextPanel);
+    }
+    
+    private void createAboutMenu() {
+        
+        handleAddMenu(FrameResources.ABOUT_MENU);
+        
+        new DialogItem(ResourceUtils.getMenuData(FrameResources.ABOUT_ITEM), 
+                       createAboutDialogFactory()).setTextPanel(fTextPanel);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/uiimpl/MenuItemSet.java b/src/com/ibm/richtext/uiimpl/MenuItemSet.java
new file mode 100755
index 0000000..0cd96d4
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/MenuItemSet.java
@@ -0,0 +1,54 @@
+/*
+ * @(#)$RCSfile: MenuItemSet.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.textpanel.TextPanelListener;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public abstract class MenuItemSet implements TextPanelListener {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static final boolean CHARACTER = true;
+    public static final boolean PARAGRAPH = false;
+
+    private MTextPanel fTextPanel = null;
+    
+    public abstract void textEventOccurred(TextPanelEvent event);
+    public abstract boolean respondsToEventType(int type);
+    
+    public final void setTextPanel(MTextPanel textPanel) {
+        
+        if (fTextPanel != null) {
+            fTextPanel.removeListener(this);
+        }
+        fTextPanel = textPanel;
+        if (fTextPanel != null) {
+            fTextPanel.addListener(this);
+        }
+        
+        textPanelChanged();
+    }
+    
+    public final MTextPanel getTextPanel() {
+        
+        return fTextPanel;
+    }
+    
+    protected void textPanelChanged() {
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/ResourceUtils.java b/src/com/ibm/richtext/uiimpl/ResourceUtils.java
new file mode 100755
index 0000000..6157ebf
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/ResourceUtils.java
@@ -0,0 +1,48 @@
+/*
+ * @(#)$RCSfile: ResourceUtils.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.util.ResourceBundle;
+import java.util.MissingResourceException;
+
+import com.ibm.richtext.uiimpl.resources.FrameResources;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public class ResourceUtils {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static ResourceBundle BUNDLE;
+    static {
+        try {
+            BUNDLE = ResourceBundle.getBundle("com.ibm.richtext.uiimpl.resources.FrameResources");
+        }
+        catch(MissingResourceException e) {
+            System.out.println("Couldn't load resourceXXX.  " +
+                               "Exception: " + e);
+            BUNDLE = new FrameResources();
+        }
+    }
+
+    public static MenuData getMenuData(String key) {
+        
+        return (MenuData) BUNDLE.getObject(key);
+    }
+    
+    public static String getResourceString(String key) {
+        
+        return BUNDLE.getString(key);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/uiimpl/SingleCheckMenuItem.java b/src/com/ibm/richtext/uiimpl/SingleCheckMenuItem.java
new file mode 100755
index 0000000..be5ac87
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/SingleCheckMenuItem.java
@@ -0,0 +1,46 @@
+/*
+ * @(#)$RCSfile: SingleCheckMenuItem.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public abstract class SingleCheckMenuItem extends MenuItemSet {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    protected MItem fItem;
+    
+    SingleCheckMenuItem(MenuData menuData) {
+        
+        fItem = MItem.createCheckboxItem(menuData);
+    }
+    
+    abstract void setChecked();
+    
+    protected final void textPanelChanged() {
+        
+        MTextPanel textPanel = getTextPanel();
+        if (textPanel == null) {
+            fItem.setEnabled(false);
+            fItem.setState(false);
+        }
+        else {
+            fItem.setEnabled(true);
+            setChecked();
+        }
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/StyleMenuItemSet.java b/src/com/ibm/richtext/uiimpl/StyleMenuItemSet.java
new file mode 100755
index 0000000..fcfffab
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/StyleMenuItemSet.java
@@ -0,0 +1,90 @@
+/*
+ * @(#)$RCSfile: StyleMenuItemSet.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public final class StyleMenuItemSet extends ChoiceMenuItemSet {
+    
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    private Object fKey;
+    private boolean fCharacter;
+
+    public StyleMenuItemSet(Object style,
+                            Object[] values,
+                            MenuData[] menuData,
+                            boolean character) {
+        
+        super(values, menuData);
+        fKey = style;
+        fCharacter = character;
+    }
+    
+    protected void handleValueSelected(Object value) {
+        
+        MTextPanel textPanel = getTextPanel();
+        if (textPanel == null) {
+            throw new Error("Menu item is enabled when panel is null!");
+        }
+        
+        StyleModifier modifier;
+        if (value == null) {
+            AttributeSet set = new AttributeSet(fKey);
+            modifier = StyleModifier.createRemoveModifier(set);
+        }
+        else {
+            modifier = StyleModifier.createAddModifier(fKey, value);
+        }
+                    
+        if (fCharacter == CHARACTER) {
+            textPanel.modifyCharacterStyleOnSelection(modifier);
+        }
+        else {
+            textPanel.modifyParagraphStyleOnSelection(modifier);
+        }
+    }
+    
+    protected Object getCurrentValue() {
+        
+        MTextPanel textPanel = getTextPanel();
+        if (textPanel == null) {
+            throw new Error("Shouldn't call this without a text panel!");
+        }
+        
+        if (fCharacter == CHARACTER) {
+            return textPanel.getCharacterStyleOverSelection(fKey);
+        }
+        else {
+            return textPanel.getParagraphStyleOverSelection(fKey);
+        }
+    }
+
+    public void textEventOccurred(TextPanelEvent event) {
+        
+        setChecked();
+    }
+    
+    public boolean respondsToEventType(int type) {
+        
+        return type == TextPanelEvent.SELECTION_STYLES_CHANGED;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/richtext/uiimpl/SubtractStyleMenuItem.java b/src/com/ibm/richtext/uiimpl/SubtractStyleMenuItem.java
new file mode 100755
index 0000000..2e57be8
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/SubtractStyleMenuItem.java
@@ -0,0 +1,104 @@
+/*
+ * @(#)$RCSfile: SubtractStyleMenuItem.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:32 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.util.EventObject;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+import com.ibm.richtext.uiimpl.resources.MenuData;
+
+public final class SubtractStyleMenuItem extends SingleCheckMenuItem {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private final Object[] fKeys;
+    
+    private final boolean fCharacter;
+    
+    public SubtractStyleMenuItem(Object[] keys,
+                                 MenuData menuData,
+                                 boolean character) {
+        
+        super(menuData);
+        
+        fKeys = (Object[]) keys.clone();
+        fCharacter = character;
+        
+        AttributeSet keySet = new AttributeSet(keys);
+        final StyleModifier modifier = StyleModifier.createRemoveModifier(keySet);
+        
+        fItem.addListener(new EventListener() {
+            public void eventOccurred(EventObject event) {
+                MTextPanel panel = getTextPanel();
+                if (panel == null) {
+                    throw new Error("Menu item is enabled when panel is null!");
+                }
+
+                if (fCharacter == CHARACTER) {
+                    panel.modifyCharacterStyleOnSelection(modifier);
+                }
+                else {
+                    panel.modifyParagraphStyleOnSelection(modifier);
+                }
+            }
+        });
+    }
+    
+    private static boolean objectsAreEqual(Object lhs, Object rhs) {
+    
+        if (lhs == null) {
+            return rhs == null;
+        }
+        else {
+            return lhs.equals(rhs);
+        }
+    }
+
+    protected void setChecked() {
+
+        MTextPanel panel = getTextPanel();
+        AttributeMap defaults = panel.getDefaultValues();
+        
+        for (int i=0; i < fKeys.length; i++) {
+            Object defaultV = defaults.get(fKeys[i]);
+            
+            Object value = (fCharacter == CHARACTER)? 
+                    panel.getCharacterStyleOverSelection(fKeys[i]) :
+                    panel.getParagraphStyleOverSelection(fKeys[i]);
+                    
+            if (!objectsAreEqual(defaultV, value)) {
+                fItem.setState(false);
+                return;
+            }
+        }
+
+        fItem.setState(true);
+    }
+
+    public boolean respondsToEventType(int type) {
+        
+        return type == TextPanelEvent.SELECTION_STYLES_CHANGED;
+    }
+    
+    public final void textEventOccurred(TextPanelEvent event) {
+        
+        setChecked();
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/TabRulerImpl.java b/src/com/ibm/richtext/uiimpl/TabRulerImpl.java
new file mode 100755
index 0000000..d6981b7
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/TabRulerImpl.java
@@ -0,0 +1,909 @@
+/*
+ * @(#)$RCSfile: TabRulerImpl.java,v $ $Revision: 1.2 $ $Date: 2000/05/10 21:52:50 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Image;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.InputEvent;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import com.ibm.richtext.styledtext.MTabRuler;
+import com.ibm.richtext.styledtext.StandardTabRuler;
+import com.ibm.richtext.styledtext.TabStop;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.richtext.textpanel.TextPanelListener;
+import com.ibm.richtext.textpanel.MTextPanel;
+import com.ibm.richtext.textpanel.TextPanel;
+import com.ibm.richtext.textpanel.TextPanelEvent;
+
+/**
+ * TabRuler is a Component which presents a user interface for
+ * setting the leading margin, trailing margin, first line indent,
+ * and tab types and positions.
+ * <p>
+ * TabRuler does not implement TextPanelListener directly;  however,
+ * it can receive updates from a MTextPanel.  To have a TabRuler listen
+ * to a panel, call <code>listenToPanel</code>.  TabRuler responds to
+ * user manipulation by modifying the paragraph styles on its MTextPanel
+ * (if any).
+ */
+public final class TabRulerImpl implements MouseListener, MouseMotionListener
+{
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final class TabStopBuffer {
+        public int fPosition;
+        public byte fType;
+
+        TabStopBuffer(int position, byte type) {
+            fPosition = position;
+            fType = type;
+        }
+
+        TabStopBuffer(TabStop tab) {
+            this(tab.getPosition(), tab.getType());
+        }
+
+        TabStop getTabStop() {
+            return new TabStop(fPosition, fType);
+        }
+    }
+
+    private static final class TabRulerModifier extends StyleModifier {
+
+        private TabStop fOldTab; // tab to remove
+        private TabStop fNewTab; // tab to add
+        private AttributeMap fPanelDefaults;
+        
+        TabRulerModifier(TabStop oldTab,
+                         TabStop newTab,
+                         AttributeMap panelDefaults) {
+            fOldTab = oldTab;
+            fNewTab = newTab;
+            fPanelDefaults = panelDefaults;
+        }
+
+        public AttributeMap modifyStyle(AttributeMap oldStyle) {
+
+            MTabRuler oldRuler = (MTabRuler) getWithDefault(TextAttribute.TAB_RULER, 
+                                                            oldStyle, 
+                                                            fPanelDefaults);
+            MTabRuler ruler = oldRuler;
+
+            if (fOldTab != null) {
+                if (ruler.containsTab(fOldTab)) {
+                    ruler = ruler.removeTab(fOldTab.getPosition());
+                }
+            }
+            if (fNewTab != null) {
+                ruler = ruler.addTab(fNewTab);
+            }
+
+            if (ruler != oldRuler) {
+                return oldStyle.addAttribute(TextAttribute.TAB_RULER, ruler);
+            }
+            else {
+                return oldStyle;
+            }
+        }
+    }
+
+    private static final class ImageCache {
+
+        static final String COPYRIGHT =
+                    "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+        private Image fImage = null;
+        private boolean fIsValid = false;
+        private Component fComponent;   // workaround for compiler bug, 
+                                        // should just be able to say Component.this
+                                        // if this were not a static class
+        
+        ImageCache(Component component) {
+        
+            fComponent = component;
+        }
+
+        Graphics getGraphics(int width, int height) {
+
+            if (width <= 0 || height <= 0) {
+                return null;
+            }
+            
+            Image image = fImage;
+            if (image == null || image.getWidth(fComponent) < width
+                              || image.getHeight(fComponent) < height) {
+		if (!fComponent.isVisible()) { // fix race condition if component not fully initialized
+		    return null;
+		}
+                image = fComponent.createImage(width, height);
+            }
+            Graphics g = image.getGraphics();
+            fImage = image;
+            return g;
+        }
+
+        void drawImage(Graphics g, int x, int y, Color color) {
+
+            if (!fIsValid) {
+                throw new Error("Drawing image when not valid");
+            }
+            g.drawImage(fImage, x, y, color, fComponent);
+        }
+
+        boolean isValid() {
+
+            return fIsValid;
+        }
+
+        void setValid(boolean isValid) {
+
+            fIsValid = isValid;
+        }
+    }
+
+    /**
+    * This class listens to a MTextPanel for changes which
+    * affect a TabRuler's appearance, and updates the TabRuler
+    * as necessary.
+    * @see TabRuler
+    * @see com.ibm.richtext.textpanel.MTextPanel
+    */
+    private static final class Updater implements TextPanelListener {
+
+        static final String COPYRIGHT =
+                    "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+        private TabRulerImpl fTabRuler;
+        private MTextPanel fTextPanel;
+
+        /**
+        * Create a new TabRulerUpdater.
+        * @param tabRuler the TabRuler to update when a change occurs
+        *     in the MTextPanel
+        */
+        Updater(TabRulerImpl tabRuler) {
+
+            fTabRuler = tabRuler;
+        }
+
+        /**
+        * Remove self as listener from previous MTextPanel,
+        * set current MTextPanel and listen to it (if not null).
+        */
+        void setTextPanel(MTextPanel textPanel) {
+
+            if (fTextPanel != null) {
+                fTextPanel.removeListener(this);
+            }
+
+            fTextPanel = textPanel;
+
+            if (fTextPanel != null) {
+                fTextPanel.addListener(this);
+                setAll();
+            }
+        }
+
+        private void setAll() {
+
+            int offset = fTextPanel.getSelectionStart();
+            boolean leftToRight = fTextPanel.paragraphIsLeftToRight(offset);
+            AttributeMap style = fTextPanel.getText().paragraphStyleAt(offset);
+            fTabRuler.set(style, false);
+            fTabRuler.setFormatWidth(fTextPanel.getFormatWidth(), false);
+            fTabRuler.setLeftToRight(leftToRight, true);
+        }
+
+        /**
+        * TextPanelListener method.  This class responds to text
+        * changes by updating its TabRuler.
+        */
+        public void textEventOccurred(TextPanelEvent event) {
+
+            int changeCode = event.getID();
+
+            if (changeCode == event.SELECTION_STYLES_CHANGED ||
+                    changeCode == event.TEXT_CHANGED) {
+
+                int offset = fTextPanel.getSelectionStart();
+                AttributeMap style = fTextPanel.getText().paragraphStyleAt(offset);
+                boolean leftToRight = fTextPanel.paragraphIsLeftToRight(offset);
+                fTabRuler.set(style, false);
+                fTabRuler.setLeftToRight(leftToRight, true);
+            }
+            else if (changeCode == event.FORMAT_WIDTH_CHANGED) {
+                
+                fTabRuler.setFormatWidth(fTextPanel.getFormatWidth(), true);
+            }
+        }
+        
+        /**
+        * TextPanelListener method.
+        */
+        public boolean respondsToEventType(int type) {
+            
+            return type == TextPanelEvent.SELECTION_STYLES_CHANGED ||
+                    type == TextPanelEvent.TEXT_CHANGED ||
+                    type == TextPanelEvent.FORMAT_WIDTH_CHANGED;
+        }
+    }
+
+    /**
+     * The default background color for TabRulers.
+     * @see #setBackColor
+     */
+    public static final Color DEFAULT_BACK_COLOR = Color.lightGray;
+
+    private static final int kTrackNone = 0;
+    private static final int kTrackTab = 1;
+    private static final int kTrackLM = 2;
+    private static final int kTrackFLI = 3;
+    private static final int kTrackTM = 4;
+
+    private Component fHost;
+    private MTabRuler fRuler;
+    private int fLeadingMargin;
+    private int fFirstLineIndent;
+    private int fFormatWidth;
+    private int fTrailingMarginPosition; // opposite of actual trailing margin
+    private boolean fLeftToRight;
+    private int fBaseline;
+    private int fOrigin;
+    private Color fBackColor = DEFAULT_BACK_COLOR;
+
+    private int fTrackItem; // 0 - none, 1 - tab, 2 - lm, 3 - fli, 4 - tm
+    private TabStopBuffer fTrackTab;
+    private TabStop fOldTab;
+    private int fTrackDelta;
+    private boolean fTrackVisible;
+    private Updater fUpdater;
+    private MTextPanel fTextPanel = null;
+
+    private ImageCache fImageCache;
+
+    /**
+     * Create a new TabRuler.
+     * @param baseline the y-coordinate of the ruler's baseline
+     * @param origin the x-coordinate in this Component where
+     *     the left margin appears
+     * @param textPanel the MTextPanel to listen to.  This TabRuler
+     *     will reflect the MTextPanel's paragraph styles, and update
+     *     the paragraph styles when manipulated.
+     */
+    public TabRulerImpl(int baseline, 
+                        int origin, 
+                        MTextPanel textPanel,
+                        Component host) {
+
+        fHost = host;
+        fImageCache = new ImageCache(host);
+        fUpdater = new Updater(this);
+        fBaseline = baseline;
+        fOrigin = origin;
+        host.addMouseListener(this);
+        host.addMouseMotionListener(this);
+        if (textPanel != null) {
+            listenToTextPanel(textPanel);
+        }
+        else {
+            fRuler = new StandardTabRuler();
+        }
+    }
+
+    /**
+     * Listen to the given MTextPanel and reflect its changes,
+     * and update its paragraph styles when TabRuler is
+     * manipulated.
+     * @param textPanel the MTextPanel to listen to
+     */
+    public void listenToTextPanel(MTextPanel textPanel) {
+
+        fTextPanel = textPanel;
+        fUpdater.setTextPanel(textPanel);
+    }
+
+    /**
+     * Return the background color of this TabRuler.
+     * @return the background color of this TabRuler
+     */
+    public Color getBackColor() {
+
+        return fBackColor;
+    }
+
+    /**
+     * Set the background color of this TabRuler.
+     * @param backColor the new background color of this TabRuler
+     */
+    public void setBackColor(Color backColor) {
+
+        if (!backColor.equals(fBackColor)) {
+            fBackColor = backColor;
+            Graphics g = fHost.getGraphics();
+            if (g != null) {
+                paint(g);
+            }
+        }
+    }
+
+    private static Object getWithDefault(Object key,
+                                         AttributeMap style,
+                                         AttributeMap defaults) {
+        Object value = style.get(key);
+        if (value == null) {
+            value = defaults.get(key);
+        }
+        return value;
+    }
+
+    private static float getFloatWithDefault(Object key,
+                                             AttributeMap style,
+                                             AttributeMap defaults) {
+        Object value = getWithDefault(key, style, defaults);
+        return ((Float)value).floatValue();
+    }
+    
+    private void setLeftToRight(boolean leftToRight, boolean update) {
+        
+        if (fLeftToRight != leftToRight) {
+            
+            fLeftToRight = leftToRight;
+            redrawSelf(update);
+        }
+    }
+
+    private void setFormatWidth(int formatWidth, boolean update) {
+        
+        if (fFormatWidth != formatWidth) {
+            
+            fTrailingMarginPosition += (formatWidth - fFormatWidth);
+            fFormatWidth = formatWidth;
+            redrawSelf(update);
+        }
+    }
+    
+    /**
+     * Set TabRuler from values in paragraphStyle.  Only TabRulerUpdater
+     * should call this method.
+     * @param paragraphStyle the paragraph style which the TabRuler will
+     *     reflect
+     */
+    private void set(AttributeMap paragraphStyle, boolean update) {
+
+        AttributeMap panelDefaults;
+        
+        if (fTextPanel==null) {
+            panelDefaults = TextPanel.getDefaultSettings().getDefaultValues();
+        }
+        else {
+             panelDefaults = fTextPanel.getDefaultValues();
+        }
+                                                         
+        int leadingMargin =  (int) getFloatWithDefault(TextAttribute.LEADING_MARGIN,
+                                                       paragraphStyle,
+                                                       panelDefaults);
+        int firstLineIndent = (int) getFloatWithDefault(TextAttribute.FIRST_LINE_INDENT,
+                                                        paragraphStyle,
+                                                        panelDefaults);
+        int trailingMargin = (int) getFloatWithDefault(TextAttribute.TRAILING_MARGIN,
+                                                       paragraphStyle,
+                                                       panelDefaults);
+
+        MTabRuler ruler = (MTabRuler) getWithDefault(TextAttribute.TAB_RULER,
+                                                     paragraphStyle,
+                                                     panelDefaults);
+
+        int ourFli = leadingMargin + firstLineIndent;
+        int ourTmp = fFormatWidth - trailingMargin;
+        
+        if (leadingMargin == fLeadingMargin &&
+                fFirstLineIndent == ourFli &&
+                fTrailingMarginPosition == ourTmp &&
+                ruler.equals(fRuler)) {
+            return;
+        }
+        
+        fLeadingMargin = leadingMargin;
+        fFirstLineIndent = ourFli;
+        fTrailingMarginPosition = ourTmp;
+        fRuler = ruler;
+    
+        redrawSelf(update);
+    }
+    
+    private void redrawSelf(boolean drawNow) {
+
+        fImageCache.setValid(false);
+
+        Graphics g = fHost.getGraphics();
+        if (g != null)
+            paint(g);
+    }
+
+    /**
+     * Return debugging info.
+     */
+    public String toString() {
+
+        return "TabRuler{fLeadingMargin="+fLeadingMargin+
+                "}{fFirstLineIndent="+fFirstLineIndent+
+                "}{fFormatWidth="+fFormatWidth+
+                "}{fTrailingMarginPosition="+fTrailingMarginPosition+
+                "}{fRuler="+fRuler+
+                "}";
+    }
+
+    /**
+     * Return the MTabRuler represented by this TabRuler.
+     * @return the MTabRuler represented by this TabRuler
+     */
+    public MTabRuler getRuler()
+    {
+        return fRuler;
+    }
+
+    /**
+     * Return the leading margin of this TabRuler.
+     * @return the leading margin of this TabRuler
+     */
+    public int getLeadingMargin()
+    {
+        return fLeadingMargin;
+    }
+
+    /**
+     * Return the first line indent of this TabRuler.
+     * @return the first line indent of this TabRuler
+     */
+    public int getFirstLineIndent()
+    {
+        return fFirstLineIndent - fLeadingMargin;
+    }
+
+    /**
+     * Return the trailing margin of this TabRuler.
+     * @return the trailing margin of this TabRuler
+     */
+    public final int getTrailingMargin()
+    {
+        return fFormatWidth - fTrailingMarginPosition;
+    }
+    
+    private int visualToRulerPos(int visPos) {
+        
+        if (fLeftToRight) {
+            return visPos - fOrigin;
+        }
+        else {
+            return fOrigin + fFormatWidth - visPos;
+        }
+    }
+    
+    private int rulerToVisualPos(int rulerPos) {
+        
+        if (fLeftToRight) {
+            return fOrigin + rulerPos;
+        }
+        else {
+            return fOrigin + fFormatWidth - rulerPos;
+        }
+    }
+    
+    private int dirMult() {
+        
+        return fLeftToRight? 1 : -1;
+    }
+
+    /**
+     * @param tabPosition the logical (ruler) position of the tab
+     */
+    private void drawTab(Graphics g, int tabPosition, byte tabType, int tabTop, int tabBottom)
+    {
+        int pos = rulerToVisualPos(tabPosition);
+        int wid = 0;
+        switch (tabType) {
+            case TabStop.kLeading: wid = 3; break;
+            case TabStop.kCenter: wid = 0; break;
+            case TabStop.kTrailing: wid = -3; break;
+            case TabStop.kDecimal: wid = 0; break;
+            default: break;
+        }
+        wid *= dirMult();
+        
+        if (tabType != TabStop.kAuto) {
+            g.drawLine(pos, tabTop, pos, tabBottom);
+            if (wid != 0)
+                g.drawLine(pos, tabBottom, pos + wid, tabBottom);
+        }
+        g.drawLine(pos-2, tabTop+2, pos, tabTop);
+        g.drawLine(pos, tabTop, pos+2, tabTop+2);
+        if (tabType == TabStop.kDecimal) {
+            g.drawLine(pos + 3, tabBottom, pos + 4, tabBottom);
+        }
+    }
+
+    private void drawLM(Graphics g)
+    {
+        int pos = rulerToVisualPos(fLeadingMargin);
+        int[] xpts = { pos, pos, pos + (4*dirMult()), pos };
+        int[] ypts = { fBaseline + 12, fBaseline + 7, fBaseline + 7, fBaseline + 12 };
+        g.fillPolygon(xpts, ypts, 3);
+        g.drawPolygon(xpts, ypts, 4);
+    }
+
+    private void drawFLI(Graphics g)
+    {
+        int pos = rulerToVisualPos(fFirstLineIndent);
+        int[] xpts = { pos, pos, pos + (4*dirMult()), pos };
+        int[] ypts = { fBaseline, fBaseline + 5, fBaseline + 5, fBaseline };
+        g.fillPolygon(xpts, ypts, 3);
+        g.drawPolygon(xpts, ypts, 4);
+    }
+
+    private void drawRM(Graphics g)
+    {
+        int pos = rulerToVisualPos(fTrailingMarginPosition);
+        int[] xpts = { pos, pos, pos - (6*dirMult()), pos };
+        int[] ypts = { fBaseline, fBaseline + 12, fBaseline + 6, fBaseline };
+        g.fillPolygon(xpts, ypts, 3);
+        g.drawPolygon(xpts, ypts, 4);
+    }
+
+    private static int alignInt(int value) {
+        
+        return (int)((int)(value / 4.5) * 4.5);
+    }
+
+    private static final int[] fgLengths = { 10, 2, 4, 2, 6, 2, 4, 2 };
+
+    /**
+     * Component method override.
+     */
+    public void paint(Graphics g)
+    {
+        Dimension size = fHost.getSize();
+
+        int width = size.width;
+        int baseline = fBaseline;
+        int baseline2 = baseline + 2;
+        int baseline10 = baseline + 10;
+        int baseline12 = baseline + 12;
+
+        if (!fImageCache.isValid()) {
+
+            Graphics gCache = fImageCache.getGraphics(width, baseline12 + 1);
+            if (gCache == null) {
+                return;
+            }
+            
+            // set background color
+
+            gCache.setColor(fBackColor);
+            gCache.setPaintMode();
+            gCache.fillRect(0, 0, width, baseline12 + 1);
+
+            // paint ticks
+
+            gCache.setColor(Color.black);
+            gCache.drawLine(0, 0, width, 0);
+            gCache.drawLine(0, baseline, width, baseline);
+
+            int[] lengths = fgLengths;
+
+            int index = 0;
+            int inchnum = 0;
+            FontMetrics fm = null;
+            if (!fLeftToRight) {
+                fm = gCache.getFontMetrics();
+            }
+            
+            for (int i = 0; i < fFormatWidth; i += 9) {
+                int len = lengths[index];
+                int pos = rulerToVisualPos(i);
+                gCache.drawLine(pos, baseline, pos, baseline - len);
+
+                if (index == 0) {
+                    String str = Integer.toString(inchnum++);
+                    int drawX;
+                    if (fLeftToRight) {
+                        drawX = pos + 2;
+                    }
+                    else {
+                        drawX = pos - fm.stringWidth(str) - 2;
+                    }
+                        
+                    gCache.drawString(str, drawX, baseline - 2);
+                }
+
+                if (++index == lengths.length)
+                    index = 0;
+            }
+
+            // paint tabs
+            TabStop tab = fRuler.firstTab();
+            while (tab != null && tab.getPosition() < fTrailingMarginPosition) {
+                boolean dodraw = true;
+                if (tab.getType() == TabStop.kAuto) {
+                    if (tab.getPosition() <= Math.max(fLeadingMargin, fFirstLineIndent))
+                        dodraw = false;
+                    else if (tab.getPosition() >= fTrailingMarginPosition)
+                        dodraw = false;
+                }
+
+                if (dodraw)
+                    drawTab(gCache, tab.getPosition(), tab.getType(), baseline2, baseline10);
+
+                tab = fRuler.nextTab(tab.getPosition());
+            }
+
+            gCache.drawLine(0, baseline12, width, baseline12);
+
+            // paint others except for tracked item
+            if (fTrackItem != kTrackLM) drawLM(gCache);
+            if (fTrackItem != kTrackTM) drawRM(gCache);
+            if (fTrackItem != kTrackFLI && fTrackItem != kTrackLM) drawFLI(gCache);
+            fImageCache.setValid(true);
+        }
+
+        fImageCache.drawImage(g, 0, 0, Color.lightGray);
+
+        switch (fTrackItem) {
+            case kTrackTab: if (fTrackVisible) drawTab(g, fTrackTab.fPosition, fTrackTab.fType, baseline2, baseline10); break;
+            case kTrackLM: drawLM(g); drawFLI(g); break;
+            case kTrackTM: drawRM(g); break;
+            case kTrackFLI: drawFLI(g); break;
+            default: break;
+        }
+    }
+
+    /**
+     * MouseListener method.
+     */
+    public void mouseClicked(MouseEvent e) {}
+    /**
+     * MouseListener method.
+     */
+    public void mouseEntered(MouseEvent e) {}
+    /**
+     * MouseListener method.
+     */
+    public void mouseExited(MouseEvent e) {}
+
+    /**
+     * MouseListener method.
+     */
+    public void mousePressed(MouseEvent e)
+    {
+        // find out if we hit a tabstop
+        int x = visualToRulerPos(e.getX());
+        int y = e.getY();
+
+        if (y > fBaseline && y < fBaseline + 12) {
+            if (y >= fBaseline + 7 && x >= fLeadingMargin - 3 && x <= fLeadingMargin + 3) {
+                fTrackItem = kTrackLM;
+                fTrackDelta = fLeadingMargin - x;
+            } else if (y < fBaseline + 7 && x >= fFirstLineIndent - 3 && x <= fFirstLineIndent + 3) {
+                fTrackItem = kTrackFLI;
+                fTrackDelta = fFirstLineIndent - x;
+            } else if (x >= fTrailingMarginPosition - 3 && x <= fTrailingMarginPosition + 3) {
+                fTrackItem = kTrackTM;
+                fTrackDelta = fTrailingMarginPosition - x;
+            } else if (e.isControlDown()) {
+                fTrackItem = kTrackTab;
+                fTrackTab = new TabStopBuffer(alignInt(x), TabStop.kLeading);
+                fTrackDelta = fTrackTab.fPosition - x;
+                fTrackVisible = true;
+            } else {
+                TabStop tab = fRuler.firstTab();
+                while (tab.getType() != TabStop.kAuto) {
+                    if (x < tab.getPosition() - 3)
+                        break;
+                    if (x < tab.getPosition() + 3) {
+                        fOldTab = tab;
+                        fTrackTab = new TabStopBuffer(tab);
+                        fRuler = fRuler.removeTab(fOldTab.getPosition());
+
+                        if (e.getClickCount() > 1) {
+                            switch (fTrackTab.fType) {
+                                case TabStop.kLeading: fTrackTab.fType = TabStop.kCenter; break;
+                                case TabStop.kCenter: fTrackTab.fType = TabStop.kTrailing; break;
+                                case TabStop.kTrailing: fTrackTab.fType = TabStop.kDecimal; break;
+                                case TabStop.kDecimal: fTrackTab.fType = TabStop.kLeading; break;
+                                default: break;
+                            }
+                        }
+                        fTrackItem = kTrackTab;
+                        fTrackDelta = tab.getPosition() - x;
+                        fTrackVisible = true;
+                        break;
+                    }
+
+                    tab = fRuler.nextTab(tab.getPosition());
+                }
+            }
+
+            if (fTrackItem != kTrackNone) {
+                fImageCache.setValid(false);
+                paint(fHost.getGraphics());
+                return;
+            }
+        }
+    }
+
+    /**
+     * MouseListener method.
+     */
+    public void mouseDragged(MouseEvent e)
+    {
+        int x = visualToRulerPos(e.getX());
+        int y = e.getY();
+
+        if (fTrackItem != kTrackNone) {
+            boolean repaint = false;
+            boolean inrange = y > fBaseline && y < fBaseline + 12;
+            boolean inbigrange = y > 0 && y < fHost.getSize().height + 20;
+            int newpos = alignInt(x + fTrackDelta);
+            if (newpos < 0)
+                newpos = 0;
+
+            switch (fTrackItem) {
+                case kTrackTab: {
+                    if (inrange) {
+                        repaint = !fTrackVisible;
+                        fTrackVisible = true;
+                        if (newpos != fTrackTab.fPosition) {
+                            fTrackTab.fPosition = newpos;
+                            repaint = true;
+                        }
+                    } else if (fTrackVisible) {
+                        fTrackVisible = false;
+                        repaint = true;
+                    }
+                } break;
+
+/* It would be nice to optionally track the margin 'independently' of the first line indent.
+ Unfortunately this makes for more work when we have multiple paragraph styles selected.
+ Since internally the first line indent is relative to the margin, moving the margin
+ independently so that all affected paragraphs share the same margin but retain first
+ line indents in the 'same' positions means that I need to also adjust the first line
+ indents in each paragraph by some delta. I'm not ready to do that yet. */
+
+                case kTrackLM: {
+                    if (inbigrange && newpos != fLeadingMargin) {
+                        fFirstLineIndent += newpos - fLeadingMargin;
+                        fLeadingMargin = newpos;
+                        repaint = true;
+                    }
+                } break;
+
+                case kTrackFLI: {
+                    if (inbigrange && newpos != fFirstLineIndent) {
+                        fFirstLineIndent = newpos;
+                        repaint = true;
+                    }
+                } break;
+
+                case kTrackTM: {
+                    if (inbigrange && newpos != fTrailingMarginPosition) {
+                        fTrailingMarginPosition = newpos;
+                        repaint = true;
+                    }
+                } break;
+            }
+
+
+            if (repaint)
+                paint(fHost.getGraphics());
+        }
+    }
+
+    /**
+     * MouseListener method.
+     */
+    public void mouseReleased(MouseEvent e)
+    {
+        if (fTrackItem != kTrackNone) {
+            if (fTrackItem == kTrackTab && fTrackVisible) {
+                fRuler = fRuler.addTab(fTrackTab.getTabStop());
+            } else {
+                fTrackTab = null;
+            }
+
+            notify(fTrackItem);
+
+            fTrackItem = kTrackNone;
+            fTrackTab = null;
+            fOldTab = null;
+
+            fImageCache.setValid(false);
+            paint(fHost.getGraphics());
+        }
+    }
+
+    /**
+     * MouseListener method.
+     */
+    public void mouseMoved(MouseEvent e) {}
+
+    private void notify(int change)
+    {
+        if (fTextPanel != null) {
+
+            StyleModifier modifier;
+
+            if (change == kTrackTab) {
+                TabStop newTab = fTrackTab==null? null : fTrackTab.getTabStop();
+                modifier = new TabRulerModifier(fOldTab, newTab, fTextPanel.getDefaultValues());
+            }
+            else {
+                Object key;
+                Object value;
+
+                switch(change) {
+                    case kTrackLM:
+                        key = TextAttribute.LEADING_MARGIN;
+                        value = new Float(getLeadingMargin());
+                        break;
+
+                    case kTrackTM:
+                        key = TextAttribute.TRAILING_MARGIN;
+                        value = new Float(getTrailingMargin());
+                        break;
+
+                    case kTrackFLI:
+                        key = TextAttribute.FIRST_LINE_INDENT;
+                        value = new Float(getFirstLineIndent());
+                        break;
+
+                    default:
+                        throw new Error("Invalid change code.");
+                }
+
+                modifier = StyleModifier.createAddModifier(key, value);
+            }
+
+            fTextPanel.modifyParagraphStyleOnSelection(modifier);
+        }
+    }
+
+    /**
+     * Component override.
+     */
+    public Dimension getMinimumSize()
+    {
+        return new Dimension(100, fBaseline + 13);
+    }
+
+    /**
+     * Component override.
+     */
+    public Dimension getPreferredSize()
+    {
+        return getMinimumSize();
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/resources/FrameResources.java b/src/com/ibm/richtext/uiimpl/resources/FrameResources.java
new file mode 100755
index 0000000..27971bd
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/resources/FrameResources.java
@@ -0,0 +1,230 @@
+/*
+ * @(#)$RCSfile: FrameResources.java,v $ $Revision: 1.2 $ $Date: 2000/10/06 23:15:03 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl.resources;
+
+import java.util.ListResourceBundle;
+import java.awt.event.KeyEvent;
+
+public final class FrameResources extends ListResourceBundle {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+/*
+ * These Strings are keys to other String resources.
+ */
+    // Menu names
+    public static final String EDIT = "Edit";
+    public static final String SIZE = "Size";
+    public static final String FONT = "Font";
+    public static final String STYLE = "Style";
+    public static final String FLUSH = "Flush";
+    public static final String KEYMAP = "Keymap";
+    public static final String ABOUT_MENU = "About";
+    public static final String BIDI = "Bidi";
+    
+    // Buttons
+    public static final String OK = "OK";
+    public static final String CANCEL = "Cancel";
+
+    // Colors
+    public static final String BLACK = "Black";
+    public static final String WHITE = "White";
+    public static final String GREEN = "Green";
+    public static final String BLUE = "Blue";
+    public static final String CYAN = "Cyan";
+    public static final String GRAY = "Gray";
+    public static final String DARK_GRAY = "Dark Gray";
+    public static final String LIGHT_GRAY = "Light Gray";
+    public static final String MAGENTA = "Magenta";
+    public static final String ORANGE = "Orange";
+    public static final String PINK = "Pink";
+    public static final String RED = "Red";
+    public static final String YELLOW = "Yellow";
+    public static final String NONE = "None";
+
+    // Dialog titles and messages
+    public static final String SET_SIZE_TITLE = "Set Font Size";
+    public static final String SET_SIZE_LABEL = "Font Size:";
+
+    public static final String SET_SUPERSCRIPT_TITLE = "Set Superscript";
+    public static final String SET_SUPERSCRIPT_LABEL = "Superscript:";
+    public static final String SET_SUBSCRIPT_TITLE = "Set Subscript";
+    public static final String SET_SUBSCRIPT_LABEL = "Subscript:";
+    public static final String SET_FOREGROUND_TITLE = "Set Foreground";
+    public static final String SET_FOREGROUND_LABEL = "Foreground:";
+    public static final String SET_BACKGROUND_TITLE = "Set Background";
+    public static final String SET_BACKGROUND_LABEL = "Background:";
+    public static final String SET_FONT_TITLE = "Set Font";
+    public static final String SET_FONT_LABEL = "Font:";
+
+    public static final String ABOUT_TITLE = "About the RichEdit Control";
+
+    // This is the only String which is not its own value:
+    public static final String ABOUT_TEXT = "About text";
+    private static final String ACTUAL_ABOUT_TEXT =
+        "Copyright (C) Taligent, Inc. 1996 All rights reserved.\n" +
+        "Copyright (C) IBM Corp. 1996-1998\n\n" +
+        "John Raley\n" +
+        "Stephen F. Booth\n" +
+        "Doug Felt\n" +
+        "John Fitzpatrick\n" +
+        "Rich Gillam";
+/*
+ * The following Strings are keys to MenuData resources.  They
+ * also double as the default menu label text.
+ */
+    // Edit menu
+    public static final String UNDO = "Undo";
+    public static final String REDO = "Redo";
+    public static final String CUT = "Cut";
+    public static final String COPY = "Copy";
+    public static final String PASTE = "Paste";
+    public static final String CLEAR = "Clear";
+    public static final String SELECT_ALL = "Select All";
+
+    // Flush menu
+    public static final String LEADING = "Leading";
+    public static final String TRAILING = "Trailing";
+    public static final String CENTER = "Center";
+    public static final String JUSTIFIED = "Justified";
+
+    // About menu
+    public static final String ABOUT_ITEM = "About...";
+
+    // Keymap menu
+    public static final String DEFAULT = "Default";
+    public static final String ARABIC = "Arabic";
+    public static final String HEBREW = "Hebrew";
+    public static final String ISRAEL_NIKUD = "Israel Nikud";
+    public static final String THAI_KETMANEE = "Thai Ketmanee";
+
+    // Style menu
+    public static final String PLAIN = "Plain";
+    public static final String BOLD = "Bold";
+    public static final String ITALIC = "Italic";
+    public static final String UNDERLINE = "Underline";
+    public static final String STRIKETHROUGH = "Strikethrough";
+    public static final String SUPERSCRIPT = "Superscript";
+    public static final String SUBSCRIPT = "Subscript";
+    public static final String SUPERSCRIPT_DIALOG = "Superscript...";
+    public static final String SUBSCRIPT_DIALOG = "Subscript...";
+    public static final String FORECOLOR_DIALOG = "Forecolor...";
+    public static final String BACKCOLOR_DIALOG = "Backcolor...";
+    public static final String FONT_DIALOG = "Font...";
+    
+
+    // Size menu
+    public static final String OTHER_DIALOG = "Other...";
+    
+    // Bidi menu
+    public static final String DEFAULT_DIRECTION = "Default Paragraph Direction";
+    public static final String LTR_DIRECTION = "Left-to-right Paragraph Direction";
+    public static final String RTL_DIRECTION = "Right-to-left Paragraph Direction";
+
+    private static Object[] makeMenuData(String name,
+                                         char shortCutChar,
+                                         int shortCutKey) {
+
+        return new Object[] { name, new MenuData(name, shortCutChar, shortCutKey) };
+    }
+
+    private static Object[] makeMenuData(String name) {
+
+        return new Object[] { name, new MenuData(name) };
+    }
+
+    private static Object[] duplicate(Object obj) {
+
+        return new Object[] { obj, obj };
+    }
+
+    protected Object[][] getContents() {
+
+        return new Object[][] {
+            makeMenuData(UNDO, 'z', KeyEvent.VK_Z),
+            makeMenuData(REDO, 'r', KeyEvent.VK_R),
+            makeMenuData(CUT, 'x', KeyEvent.VK_X),
+            makeMenuData(COPY, 'c', KeyEvent.VK_C),
+            makeMenuData(PASTE, 'v', KeyEvent.VK_V),
+            makeMenuData(CLEAR),
+            makeMenuData(SELECT_ALL),
+            makeMenuData(LEADING),
+            makeMenuData(CENTER),
+            makeMenuData(TRAILING),
+            makeMenuData(JUSTIFIED),
+            makeMenuData(ABOUT_ITEM),
+            makeMenuData(DEFAULT),
+            makeMenuData(HEBREW),
+            makeMenuData(ARABIC),
+            makeMenuData(ISRAEL_NIKUD),
+            makeMenuData(THAI_KETMANEE),
+            makeMenuData(PLAIN),
+            makeMenuData(BOLD, 'b', KeyEvent.VK_B),
+            makeMenuData(ITALIC, 'i', KeyEvent.VK_I), // why doesn't this work in Swing?
+                                                      // this is a Tab in AWT!!!
+            makeMenuData(UNDERLINE, 'u', KeyEvent.VK_U),
+            makeMenuData(STRIKETHROUGH),
+            makeMenuData(SUPERSCRIPT),
+            makeMenuData(SUBSCRIPT),
+            makeMenuData(SUPERSCRIPT_DIALOG),
+            makeMenuData(SUBSCRIPT_DIALOG),
+            makeMenuData(FORECOLOR_DIALOG),
+            makeMenuData(BACKCOLOR_DIALOG),
+            makeMenuData(FONT_DIALOG),
+            makeMenuData(OTHER_DIALOG),
+            makeMenuData(DEFAULT_DIRECTION),
+            makeMenuData(LTR_DIRECTION),
+            makeMenuData(RTL_DIRECTION),
+            duplicate(OK),
+            duplicate(CANCEL),
+            duplicate(BLACK),
+            duplicate(WHITE),
+            duplicate(GREEN),
+            duplicate(BLUE),
+            duplicate(CYAN),
+            duplicate(GRAY),
+            duplicate(DARK_GRAY),
+            duplicate(LIGHT_GRAY),
+            duplicate(MAGENTA),
+            duplicate(ORANGE),
+            duplicate(PINK),
+            duplicate(RED),
+            duplicate(YELLOW),
+            duplicate(NONE),
+            duplicate(SET_SIZE_TITLE),
+            duplicate(SET_SIZE_LABEL),
+            duplicate(SET_SUPERSCRIPT_TITLE),
+            duplicate(SET_SUPERSCRIPT_LABEL),
+            duplicate(SET_SUBSCRIPT_TITLE),
+            duplicate(SET_SUBSCRIPT_LABEL),
+            duplicate(SET_FOREGROUND_TITLE),
+            duplicate(SET_FOREGROUND_LABEL),
+            duplicate(SET_BACKGROUND_TITLE),
+            duplicate(SET_BACKGROUND_LABEL),
+            duplicate(SET_FONT_TITLE),
+            duplicate(SET_FONT_LABEL),
+            duplicate(EDIT),
+            duplicate(SIZE),
+            duplicate(FONT),
+            duplicate(STYLE),
+            duplicate(FLUSH),
+            duplicate(KEYMAP),
+            duplicate(BIDI),
+            duplicate(ABOUT_MENU),
+            duplicate(ABOUT_TITLE),
+            { ABOUT_TEXT, ACTUAL_ABOUT_TEXT }
+        };
+    }
+}
diff --git a/src/com/ibm/richtext/uiimpl/resources/MenuData.java b/src/com/ibm/richtext/uiimpl/resources/MenuData.java
new file mode 100755
index 0000000..4db4b48
--- /dev/null
+++ b/src/com/ibm/richtext/uiimpl/resources/MenuData.java
@@ -0,0 +1,68 @@
+/*
+ * @(#)$RCSfile: MenuData.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:52:46 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.richtext.uiimpl.resources;
+
+/**
+ * This class is used in resources to represent a Menu.  It is
+ * just a name and an optional shortcut key.
+ */
+public final class MenuData {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private String fName;
+    private boolean fHasShortcut;
+    private char fShortcut;
+    private int fKeyCode;
+
+    public MenuData(String name) {
+
+        fName = name;
+        fHasShortcut = false;
+    }
+
+    public MenuData(String name, char ch, int keyCode) {
+
+        fName = name;
+        fHasShortcut = true;
+        fShortcut = ch;
+        fKeyCode = keyCode;
+    }
+
+    public String getName() {
+
+        return fName;
+    }
+
+    public char getShortcutChar() {
+
+        if (!fHasShortcut) {
+            throw new Error("Menu doesn't have shortcut");
+        }
+        return fShortcut;
+    }
+    
+    public int getShortcutKeyCode() {
+        if (!fHasShortcut) {
+            throw new Error("Menu doesn't have shortcut");
+        }
+        return fKeyCode;
+    }
+
+    public boolean hasShortcut() {
+
+        return fHasShortcut;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/TestAll.java b/src/com/ibm/test/TestAll.java
new file mode 100755
index 0000000..f771b37
--- /dev/null
+++ b/src/com/ibm/test/TestAll.java
@@ -0,0 +1,113 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/Attic/TestAll.java,v $ 
+ * $Date: 2001/03/08 01:48:36 $ 
+ * $Revision: 1.10 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test;
+import com.ibm.test.TestFmwk;
+import java.text.*;
+import java.util.*;
+
+/**
+ * Top level test used to run all other tests as a batch.
+ */
+ 
+public class TestAll extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new TestAll().run(args);
+    }
+
+    public void TestBigNumberFormat() throws Exception{
+        run(new com.ibm.test.bnf.BigNumberFormatTest());
+    }
+    
+    public void TestCompression() throws Exception{
+        run(new TestFmwk[] {
+            new com.ibm.test.compression.DecompressionTest(),
+            new com.ibm.test.compression.ExhaustiveTest()
+                });
+    }
+    
+    public void TestNormalizer() throws Exception{
+        run(new TestFmwk[] {
+            new com.ibm.test.normalizer.BasicTest(),
+            new com.ibm.test.normalizer.ExhaustiveTest(),
+            new com.ibm.test.normalizer.ConformanceTest(),
+        });
+    }
+
+    public void TestRuleBasedNumberFormat() throws Exception {
+        run(new TestFmwk[] {
+            new com.ibm.test.rbnf.RbnfTest(),
+            new com.ibm.test.rbnf.RbnfRoundTripTest()
+                });
+    }
+
+    public void TestRuleBasedBreakIterator() throws Exception {
+        run(new TestFmwk[] {
+            new com.ibm.test.rbbi.SimpleBITest(),
+            new com.ibm.test.rbbi.BreakIteratorTest(),
+            new com.ibm.test.rbbi.RBBITest()
+                });
+    }
+
+    public void TestTranslit() throws Exception {
+        run(new TestFmwk[] {
+            new com.ibm.test.translit.TransliteratorTest(),
+            new com.ibm.test.translit.UnicodeSetTest(),
+            new com.ibm.test.translit.UnicodeFilterLogicTest(),
+            new com.ibm.test.translit.CompoundTransliteratorTest(),
+            new com.ibm.test.translit.UnicodeToHexTransliteratorTest(),
+            new com.ibm.test.translit.HexToUnicodeTransliteratorTest(),
+            new com.ibm.test.translit.JamoTest()
+
+                });
+    }
+
+    public void TestSearch() throws Exception {
+        run(new com.ibm.test.search.SearchTest());
+    }
+	
+    public void TestRichEdit() throws Exception {
+        run(new com.ibm.test.richtext.TestAll());
+    }
+
+    public void TestArabicShaping() throws Exception {
+        run(new com.ibm.icu.test.text.ArabicShapingRegTest());
+    }
+
+    public void TestCalendar() throws Exception {
+        run(new TestFmwk[] {
+            new com.ibm.test.calendar.AstroTest(),
+            new com.ibm.test.calendar.CalendarRegression(),
+            new com.ibm.test.calendar.CompatibilityTest(),
+            new com.ibm.test.calendar.HebrewTest(),
+            new com.ibm.test.calendar.IBMCalendarTest(),
+            new com.ibm.test.calendar.IslamicTest(),
+            new com.ibm.test.calendar.ChineseTest()
+                });
+    }
+
+    public void TestTimeZone() throws Exception {
+        run(new TestFmwk[] {
+            new com.ibm.test.timezone.TimeZoneTest(),
+            new com.ibm.test.timezone.TimeZoneRegression(),
+            new com.ibm.test.timezone.TimeZoneBoundaryTest()
+                });
+    }
+
+    public void TestCharacter() throws Exception {
+        run(new TestFmwk[] {
+            new com.ibm.icu.test.text.UCharacterTest(),
+            new com.ibm.icu.test.text.UTF16Test()
+                });
+    }
+}
diff --git a/src/com/ibm/test/TestFmwk.java b/src/com/ibm/test/TestFmwk.java
new file mode 100755
index 0000000..8082853
--- /dev/null
+++ b/src/com/ibm/test/TestFmwk.java
@@ -0,0 +1,272 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/Attic/TestFmwk.java,v $ 
+ * $Date: 2001/02/28 20:37:24 $ 
+ * $Revision: 1.14 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test;
+
+import java.lang.reflect.*;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.Vector;
+import java.io.*;
+import java.text.*;
+
+
+
+/**
+ * TestFmwk is a base class for tests that can be run conveniently from
+ * the command line as well as under the Java test harness.
+ * <p>
+ * Sub-classes implement a set of methods named Test<something>. Each
+ * of these methods performs some test. Test methods should indicate
+ * errors by calling either err or errln.  This will increment the
+ * errorCount field and may optionally print a message to the log.
+ * Debugging information may also be added to the log via the log
+ * and logln methods.  These methods will add their arguments to the
+ * log only if the test is being run in verbose mode.
+ */
+
+public class TestFmwk implements TestLog {
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //------------------------------------------------------------------------
+    // Everything below here is boilerplate code that makes it possible
+    // to add a new test by simply adding a function to an existing class
+    //------------------------------------------------------------------------
+
+	protected TestFmwk() {
+        // Create a hashtable containing all the test methods.
+        testMethods = new Hashtable();
+        Method[] methods = getClass().getDeclaredMethods();
+        for( int i=0; i<methods.length; i++ ) {
+            if( methods[i].getName().startsWith("Test") 
+					|| methods[i].getName().startsWith("test")) {
+                testMethods.put( methods[i].getName(), methods[i] );
+            }
+        }
+    }
+
+    private void _run() throws Exception {
+        writeTestName(getClass().getName());
+        params.indentLevel++;
+		Enumeration methodsToRun;
+		
+		if (testsToRun != null && testsToRun.size() >= 1) {
+			methodsToRun = testsToRun.elements();
+		} else {
+			methodsToRun = testMethods.elements();
+		}
+
+        int oldClassCount = params.errorCount;
+
+        // Run the list of tests given in the test arguments
+        while (methodsToRun.hasMoreElements()) {
+            int oldCount = params.errorCount;
+
+           	Method testMethod = (Method)methodsToRun.nextElement();
+            writeTestName(testMethod.getName());
+
+            try {
+                testMethod.invoke(this, new Object[0]);
+            } catch( IllegalAccessException e ) {
+                errln("Can't access test method " + testMethod.getName());
+            } catch( InvocationTargetException e ) {
+                errln("Uncaught exception \""+e+"\" thrown in test method "
+                        + testMethod.getName());
+                e.getTargetException().printStackTrace(this.params.log);
+            }
+            writeTestResult(params.errorCount - oldCount);
+        }
+        params.indentLevel--;
+        writeTestResult(params.errorCount - oldClassCount);
+    }
+    
+    public void run(String[] args) throws Exception {
+    	if (params == null) params = new TestParams();
+        // Parse the test arguments.  They can be either the flag
+        // "-verbose" or names of test methods. Create a list of
+        // tests to be run.
+        testsToRun = new Vector(args.length);
+        for (int i = 0; i < args.length; i++) {
+            if (args[i].equals("-verbose") || args[i].equals("-v")) {
+                params.verbose = true;
+            }
+            else if (args[i].equals("-prompt")) {
+                params.prompt = true;
+            } else if (args[i].equals("-nothrow")) {
+                params.nothrow = true;
+            } else {
+                Object m = testMethods.get(args[i]);
+                if (m != null) {
+                    testsToRun.addElement(m);
+                } else {
+                    usage();
+                    return;
+                }
+            }
+        }
+
+    	if (params == null) params = new TestParams();
+        _run();
+
+        if (params.prompt) {
+            System.out.println("Hit RETURN to exit...");
+            try {
+                System.in.read();
+            } catch (IOException e) {
+                System.out.println("Exception: " + e.toString() + e.getMessage());
+            }
+        }
+        if (params.nothrow) {
+            System.exit(params.errorCount);
+        }
+    }
+
+	protected void run(TestFmwk childTest) throws Exception {
+        run(new TestFmwk[] { childTest });
+	}
+
+	protected void run(TestFmwk[] tests) throws Exception {
+        for (int i=0; i<tests.length; ++i) {
+            tests[i].params = this.params;
+            params.indentLevel++;
+            tests[i]._run();
+            params.indentLevel--;
+        }
+	}
+
+    protected boolean isVerbose() {
+        return params.verbose;
+    }
+
+    /**
+     * Adds given string to the log if we are in verbose mode.
+     */
+    public void log( String message ) {
+        if( params.verbose ) {
+            indent(params.indentLevel + 1);
+            params.log.print( message );
+            params.log.flush();
+        }
+    }
+
+    public void logln( String message ) {
+        log(message + System.getProperty("line.separator"));
+    }
+
+    /**
+     * Report an error
+     */
+    public void err( String message ) {
+        params.errorCount++;
+        indent(params.indentLevel + 1);
+        params.log.print( message );
+        params.log.flush();
+
+        if (!params.nothrow) {
+            throw new RuntimeException(message);
+        }
+    }
+
+    public void errln( String message ) {
+        err(message + System.getProperty("line.separator"));
+    }
+
+    protected int getErrorCount() {
+        return params.errorCount;
+    }
+
+    protected void writeTestName(String testName) {
+        indent(params.indentLevel);
+        params.log.print(testName);
+        params.log.flush();
+        params.needLineFeed = true;
+    }
+
+    protected void writeTestResult(int count) {
+        if (!params.needLineFeed) {
+            indent(params.indentLevel);
+            params.log.print("}");
+        }
+        params.needLineFeed = false;
+
+        if (count != 0) {
+            params.log.println(" FAILED (" + count + " failures)");
+        } else {
+            params.log.println(" Passed");
+        }
+    }
+
+    private final void indent(int distance) {
+        if (params.needLineFeed) {
+            params.log.println(" {");
+            params.needLineFeed = false;
+        }
+        params.log.print(spaces.substring(0, distance * 2));
+    }
+
+    /**
+     * Print a usage message for this test class.
+     */
+    void usage() {
+        System.out.println(getClass().getName() +
+                ": [-verbose] [-nothrow] [-prompt] [test names]");
+
+        System.out.println("test names:");
+        Enumeration methodNames = testMethods.keys();
+        while( methodNames.hasMoreElements() ) {
+            System.out.println("\t" + methodNames.nextElement() );
+        }
+    }
+
+    public static String hex(char ch) {
+        StringBuffer result = new StringBuffer();
+        String foo = Integer.toString(ch,16).toUpperCase();
+        for (int i = foo.length(); i < 4; ++i) {
+            result.append('0');
+        }
+        return result + foo;
+    }
+
+    public static String hex(String s) {
+        StringBuffer result = new StringBuffer();
+        for (int i = 0; i < s.length(); ++i) {
+            if (i != 0) result.append(',');
+            result.append(hex(s.charAt(i)));
+        }
+        return result.toString();
+    }
+
+    public static String hex(StringBuffer s) {
+        return hex(s.toString());
+    }
+
+	private static class TestParams {
+    	public boolean   prompt = false;
+    	public boolean   nothrow = false;
+    	public boolean   verbose = false;
+
+    	public PrintWriter log = new PrintWriter(System.out,true);
+    	public int         indentLevel = 0;
+    	public boolean     needLineFeed = false;
+    	public int         errorCount = 0;
+    }
+
+	private TestParams params = null;
+    private Hashtable testMethods;
+	private Vector testsToRun;
+    private final String spaces = "                                          ";
+}
diff --git a/src/com/ibm/test/TestLog.java b/src/com/ibm/test/TestLog.java
new file mode 100755
index 0000000..8e3a773
--- /dev/null
+++ b/src/com/ibm/test/TestLog.java
@@ -0,0 +1,18 @@
+package com.ibm.test;
+
+public interface TestLog {
+
+    /**
+     * Adds given string to the log if we are in verbose mode.
+     */
+    void log(String message);
+
+    void logln(String message);
+
+    /**
+     * Report an error
+     */
+    void err(String message);
+
+    void errln(String message);
+}
diff --git a/src/com/ibm/test/bigdec/DiagBigDecimal.java b/src/com/ibm/test/bigdec/DiagBigDecimal.java
new file mode 100755
index 0000000..2776a85
--- /dev/null
+++ b/src/com/ibm/test/bigdec/DiagBigDecimal.java
@@ -0,0 +1,5343 @@
+/* Generated from 'DiagBigDecimal.nrx' 27 Mar 2000 22:38:44 [v1.162] */
+/* Options: Binary Comments Crossref Format Java Logo Trace1 Verbose3 */
+package com.ibm.test.bigdec;
+import java.math.BigInteger;
+import com.ibm.math.*;
+
+/* ------------------------------------------------------------------ */
+/* Decimal diagnostic tests                                       mfc */
+/* Copyright (c) IBM Corporation 1996, 2000.  All Rights Reserved.    */
+/* ------------------------------------------------------------------ */
+/* DiagBigDecimal                                                     */
+/*                                                                    */
+/*   A class that tests the BigDecimal and MathContext classes.       */
+/*                                                                    */
+/*   The tests here are derived from or cover the same paths as:      */
+/*      -- ANSI X3-274 testcases                                      */
+/*      -- Java JCK testcases                                         */
+/*      -- NetRexx testcases                                          */
+/*      -- VM/CMS S/370 REXX implementation testcases [1981+]         */
+/*      -- IBM Vienna Laboratory Rexx compiler testcases [1988+]      */
+/*      -- New testcases                                              */
+/*                                                                    */
+/*   The authoritative sources for how the underlying technology      */
+/*   (arithmetic) should work are:                                    */
+/*      -- for digits=0 (fixed point): java.math.BigDecimal           */
+/*      -- for digits>0 (floating point): ANSI X3.274-1996 + errata   */
+/*                                                                    */
+/* ------------------------------------------------------------------ */
+/* Change list                                                        */
+/* 1997.09.05 Initial implementation, from DiagRexx [NetRexx tests]   */
+/* 1998.05.02 0.07 changes (e.g., compareTo)                          */
+/* 1998.06.06 Rounding modes and format additions                     */
+/* 1998.06.25 Rename from DiagDecimal; make stand-alone [add          */
+/*            DiagException as a Minor class]                         */
+/* 1998.06.27 Start adding testcases for DIGITS=0/FORM=PLAIN cases    */
+/*            Reorganize for faster trace compilation                 */
+/* 1998.06.28 new: valueof, scale, movePointX, unscaledValue, etc.    */
+/* 1998.07.07 Scaled divide                                           */
+/* 1998.07.08 setScale                                                */
+/* 1998.07.15 new scaffolding (Minor Test class) -- see diagabs       */
+/* 1998.12.14 add toBigDecimal and BigDecimal(java.math.BigDecimal)   */
+/* 1999.02.04 number preparation rounds instead of digits+1 trunc     */
+/* 1999.02.09 format method now only has two signatures               */
+/* 1999.02.27 no longer use Rexx class or RexxIO class                */
+/* 1999.03.05 add MathContext tests                                   */
+/* 1999.03.05 update for 0.96 [no null settings, etc.]                */
+/*            drop sundry constructors; no blanks; char[] gets ints   */
+/*            drop sundry converters, add Exact converters            */
+/* 1999.05.27 additional tests for scaled arithmetic                  */
+/* 1999.06.29 additional tests for exponent overflows                 */
+/* 1999.07.03 add 'continue' option                                   */
+/* 1999.07.10 additional tests for scaled arithmetic                  */
+/* 1999.07.18 randomly-generated tests added for base operators       */
+/* 1999.10.28 weird intValueExact bad cases                           */
+/* 1999.12.21 multiplication fast path failure and edge cases         */
+/* 2000.01.01 copyright update                                        */
+/* 2000.03.26 cosmetic updates; add extra format() testcases          */
+/* 2000.03.27 1.00 move to com.ibm.math package; open source release; */
+/*                 change to javadoc comments                         */
+/* ------------------------------------------------------------------ */
+
+// note BINARY for conversions checking
+
+
+
+
+/**
+ * The <code>DiagBigDecimal</code> class forms a standalone test suite
+ * for the <code>com.ibm.math.BigDecimal</code> and
+ * <code>com.ibm.math.MathContext</code> classes (or, by changing the
+ * <code>package</code> statement, other classes of the same names and
+ * definition in other packages).  It may also be used as a constructed
+ * object to embed the tests in an external test harness.
+ * <p>
+ * The tests are collected into <i>groups</i>, each corresponding to a
+ * tested method or a more general grouping.  By default, when run from
+ * the static {@link #main(java.lang.String[])} method, the run will end
+ * if any test fails in a group.  The <code>continue</code> argument may
+ * be specified to force the tests to run to completion.
+ * <p>
+ * Two minor (inner) classes are used; {@link
+ * DiagBigDecimal.DiagException} is used to signal the failure of a test
+ * group, and {@link DiagBigDecimal.Test}, a dependent minor class, is
+ * used to register tests so that a summary of failures (or success) can be
+ * presented as each group is completed.
+ *
+ * @see     com.ibm.math.BigDecimal
+ * @see     com.ibm.math.MathContext
+ * @version 1.00 2000.03.27
+ * @author  Mike Cowlishaw
+ */
+
+public class DiagBigDecimal{
+ private static final java.lang.String $0="DiagBigDecimal.nrx";
+ 
+ /* properties shared */
+ java.util.Vector Tests=new java.util.Vector(100); // scaffolding
+ 
+ /* properties private */
+ private int totalcount=0; // counts tests run
+ 
+ /* properties constant private */
+ 
+ /* Count of test groups */
+ private static final int testcount=38;
+ 
+ private static final com.ibm.math.BigDecimal zero=com.ibm.math.BigDecimal.ZERO;
+ private static final com.ibm.math.BigDecimal one=com.ibm.math.BigDecimal.ONE;
+ private static final com.ibm.math.BigDecimal two=new com.ibm.math.BigDecimal(2);
+ private static final com.ibm.math.BigDecimal ten=com.ibm.math.BigDecimal.TEN;
+ private static final com.ibm.math.BigDecimal tenlong=new com.ibm.math.BigDecimal((long)1234554321); // 10-digiter
+ 
+ /* Some context objects -- [some of these are checked later] */
+ private static final com.ibm.math.MathContext mcdef=com.ibm.math.MathContext.DEFAULT;
+ private static final com.ibm.math.MathContext mc3=new com.ibm.math.MathContext(3);
+ private static final com.ibm.math.MathContext mc6=new com.ibm.math.MathContext(6);
+ private static final com.ibm.math.MathContext mc9=new com.ibm.math.MathContext(9);
+ private static final com.ibm.math.MathContext mc50=new com.ibm.math.MathContext(50);
+ private static final com.ibm.math.MathContext mcs=new com.ibm.math.MathContext(9,com.ibm.math.MathContext.SCIENTIFIC);
+ private static final com.ibm.math.MathContext mce=new com.ibm.math.MathContext(9,com.ibm.math.MathContext.ENGINEERING);
+ private static final com.ibm.math.MathContext mcld=new com.ibm.math.MathContext(9,com.ibm.math.MathContext.SCIENTIFIC,true); // lost digits
+ private static final com.ibm.math.MathContext mcld0=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.SCIENTIFIC,true); // lost digits, digits=0
+ private static final com.ibm.math.MathContext mcfd=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN); // fixed decimal style
+ 
+ /* boundary primitive values */
+ private static final byte bmin=-128;
+ private static final byte bmax=127;
+ private static final byte bzer=0;
+ private static final byte bneg=-1;
+ private static final byte bpos=1;
+ private static final int imin=-2147483648;
+ private static final int imax=2147483647;
+ private static final int izer=0;
+ private static final int ineg=-1;
+ private static final int ipos=1;
+ private static final long lmin=-9223372036854775808L;
+ private static final long lmax=9223372036854775807L;
+ private static final long lzer=(long)0;
+ private static final long lneg=(long)-1;
+ private static final long lpos=(long)1;
+ private static final short smin=-32768;
+ private static final short smax=32767;
+ private static final short szer=(short)0;
+ private static final short sneg=(short)(-1);
+ private static final short spos=(short)1;
+ 
+ 
+ /* properties constant private unused */ // present but not referenced
+ private static final java.lang.String copyright=" Copyright (c) IBM Corporation 1996, 2000.  All rights reserved. ";
+
+ 
+ /** Constructs a <code>DiagBigDecimal</code> test suite.
+   * <p>
+   * Invoke its {@link #diagrun} method to run the tests.
+   */
+ 
+ public DiagBigDecimal(){super();
+  return;
+  }
+
+ /** Run the tests in the test suite.
+  *
+  * @param isContinue The <code>boolean</code> which determines whether
+  *                   to stop running after a group fails.  If 1 (true)
+  *                   then the tests should be run to completion if
+  *                   possible; if 0 (false) then the run will end if a
+  *                   group fails.
+  * @return an <code>int</code> which is 0 if all tests were
+  * successful, >0 (the count of failures) if some failures were
+  * detected, or <0 if an unexpected Exception was signalled.
+  */
+ 
+ public int diagrun(boolean isContinue){
+  int fails;
+  int num=0;
+  DiagException de=null;
+  java.lang.RuntimeException e=null;
+  java.lang.String rest=null;
+  
+  fails=0; // count of failures
+  try{num=1;num:for(;num<=testcount;num++){ // [testcount is constant set above]
+   try{
+    dotest(num);
+   }
+   catch (DiagException $1){de=$1;
+    say();
+    say("**** Failed:"+" "+de.getMessage()+" "+"****");
+    say();
+    fails=fails+de.failcount;
+    if ((!isContinue)) 
+     break num;
+   }
+   }
+  }
+  catch (java.lang.RuntimeException $2){e=$2; // any other exception is total failure; just show trace and quit
+   say();
+   say("**** Failed: unexpected exception ****");
+   e.printStackTrace();
+   return -1;
+  }/*num*/
+  
+  if (fails==0) 
+   say("--- All OK ---"+" "+right("["+totalcount+" "+"tests]",15));
+  else 
+   {
+    if (isContinue) 
+     {
+      if (fails>1) 
+       rest="tests";
+      else 
+       rest="test";
+      say("--- All run ---"+" "+right("["+totalcount+" "+"tests,",14)+" "+"failed"+" "+fails+" "+rest+"]");
+     
+     }
+   }
+  
+  return fails;
+  }
+
+ /* Run test by number -- method for development/private switching */
+ 
+ private void dotest(int num){
+  {/*select*/switch(num){
+   /* -------------------------------------------------------------- */
+   /* MathContext                                                    */
+   /* -------------------------------------------------------------- */
+  case 1:
+   diagmathcontext();break;
+   
+   /* -------------------------------------------------------------- */
+   /* Constructors                                                   */
+   /* -------------------------------------------------------------- */
+  case 2:
+   diagconstructors();break;
+   
+   /* -------------------------------------------------------------- */
+   /* Operator methods                                               */
+   /* -------------------------------------------------------------- */
+  case 3:
+   diagabs();break;
+  case 4:
+   diagadd();break;
+  case 5:
+   diagcompareto();break;
+  case 6:
+   diagdivide();break;
+  case 7:
+   diagdivideInteger();break;
+  case 8:
+   diagmax();break;
+  case 9:
+   diagmin();break;
+  case 10:
+   diagmultiply();break;
+  case 11:
+   diagnegate();break;
+  case 12:
+   diagplus();break;
+  case 13:
+   diagpow();break;
+  case 14:
+   diagremainder();break;
+  case 15:
+   diagsubtract();break;
+  case 16:
+   diagmath();break; // general math
+   
+   /* -------------------------------------------------------------- */
+   /* Other methods                                                  */
+   /* -------------------------------------------------------------- */
+  case 17:
+   diagbyteValue();break;
+  case 18:
+   diagcomparetoObj();break;
+  case 19:
+   diagdoublevalue();break;
+  case 20:
+   diagequals();break;
+  case 21:
+   diagfloatvalue();break;
+  case 22:
+   diagformat();break;
+  case 23:
+   diaghashcode();break;
+  case 24:
+   diagintvalue();break;
+  case 25:
+   diaglongvalue();break;
+  case 26:
+   diagmovepointleft();break;
+  case 27:
+   diagmovepointright();break;
+  case 28:
+   diagscale();break;
+  case 29:
+   diagsetscale();break;
+  case 30:
+   diagshortvalue();break;
+  case 31:
+   diagsignum();break;
+  case 32:
+   diagtobigdecimal();break;
+  case 33:
+   diagtobiginteger();break;
+  case 34:
+   diagtochararray();break;
+  case 35:
+   diagtostring();break;
+  case 36:
+   diagunscaledvalue();break;
+  case 37:
+   diagvalueof();break;
+   
+   /* -------------------------------------------------------------- */
+   /* Mutation test [must be the last test]                          */
+   /* -------------------------------------------------------------- */
+  case 38:
+   diagmutation();break;
+   // if any more, increase testcount above
+  default:{
+   say("*** dotest case not found:"+" "+num+" "+"***");
+  }}
+  }
+  return;
+  }
+
+ /*--------------------------------------------------------------------*/
+ /* Diagnostic group methods                                           */
+ /*--------------------------------------------------------------------*/
+ 
+ /** Test constructors (and {@link #toString()} for equalities). */
+ 
+ public void diagconstructors(){
+  boolean flag=false;
+  java.lang.String num;
+  java.math.BigInteger bip;
+  java.math.BigInteger biz;
+  java.math.BigInteger bin;
+  com.ibm.math.BigDecimal bda;
+  com.ibm.math.BigDecimal bdb;
+  com.ibm.math.BigDecimal bmc;
+  com.ibm.math.BigDecimal bmd;
+  com.ibm.math.BigDecimal bme;
+  java.lang.RuntimeException e=null;
+  char ca[];
+  double dzer;
+  double dpos;
+  double dneg;
+  double dpos5;
+  double dneg5;
+  double dmin;
+  double dmax;
+  double d;
+  java.lang.String badstrings[];
+  int i=0;
+  
+  // constants [statically-called constructors]
+  (new Test("con001")).ok=(com.ibm.math.BigDecimal.ZERO.toString()).equals("0");
+  (new Test("con002")).ok=(com.ibm.math.BigDecimal.ONE.toString()).equals("1");
+  (new Test("con003")).ok=(com.ibm.math.BigDecimal.TEN.toString()).equals("10");
+  (new Test("con004")).ok=(com.ibm.math.BigDecimal.ZERO.intValueExact())==0;
+  (new Test("con005")).ok=(com.ibm.math.BigDecimal.ONE.intValueExact())==1;
+  (new Test("con006")).ok=(com.ibm.math.BigDecimal.TEN.intValueExact())==10;
+  
+  // [java.math.] BigDecimal
+  (new Test("cbd001")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("0"))).toString()).equals("0");
+  (new Test("cbd002")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("1"))).toString()).equals("1");
+  (new Test("cbd003")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("10"))).toString()).equals("10");
+  (new Test("cbd004")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("1000"))).toString()).equals("1000");
+  (new Test("cbd005")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("10.0"))).toString()).equals("10.0");
+  (new Test("cbd006")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("10.1"))).toString()).equals("10.1");
+  (new Test("cbd007")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("-1.1"))).toString()).equals("-1.1");
+  (new Test("cbd008")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("-9.0"))).toString()).equals("-9.0");
+  (new Test("cbd009")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal("0.9"))).toString()).equals("0.9");
+  
+  num="123456789.123456789";
+  (new Test("cbd010")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="123456789.000000000";
+  (new Test("cbd011")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="123456789000000000";
+  (new Test("cbd012")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="0.00000123456789";
+  (new Test("cbd013")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  num="0.000000123456789";
+  (new Test("cbd014")).ok=((new com.ibm.math.BigDecimal(new java.math.BigDecimal(num))).toString()).equals(num);
+  
+  try{checknull:do{
+   new com.ibm.math.BigDecimal((java.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $3){
+   flag=true;
+  }/*checknull*/
+  (new Test("cbi015")).ok=flag;
+  
+  // BigInteger
+  bip=new BigInteger("987654321987654321987654321"); // biggie +ve
+  biz=new BigInteger("0"); // biggie 0
+  bin=new BigInteger("-12345678998765432112345678"); // biggie -ve
+  (new Test("cbi001")).ok=((new com.ibm.math.BigDecimal(bip)).toString()).equals(bip.toString());
+  (new Test("cbi002")).ok=((new com.ibm.math.BigDecimal(biz)).toString()).equals("0");
+  (new Test("cbi003")).ok=((new com.ibm.math.BigDecimal(bin)).toString()).equals(bin.toString());
+  try{checknull:do{
+   new com.ibm.math.BigDecimal((java.math.BigInteger)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $4){
+   flag=true;
+  }/*checknull*/
+  (new Test("cbi004")).ok=flag;
+  
+  // BigInteger with scale
+  bip=new BigInteger("123456789"); // bigish
+  bda=new com.ibm.math.BigDecimal(bip);
+  bdb=new com.ibm.math.BigDecimal(bip,5);
+  bmc=new com.ibm.math.BigDecimal(bip,15);
+  (new Test("cbs001")).ok=(bda.toString()).equals("123456789");
+  (new Test("cbs002")).ok=(bdb.toString()).equals("1234.56789");
+  (new Test("cbs003")).ok=(bmc.toString()).equals("0.000000123456789");
+  bip=new BigInteger("123456789123456789123456789"); // biggie
+  bda=new com.ibm.math.BigDecimal(bip);
+  bdb=new com.ibm.math.BigDecimal(bip,7);
+  bmc=new com.ibm.math.BigDecimal(bip,13);
+  bmd=new com.ibm.math.BigDecimal(bip,19);
+  bme=new com.ibm.math.BigDecimal(bip,29);
+  (new Test("cbs011")).ok=(bda.toString()).equals("123456789123456789123456789");
+  (new Test("cbs012")).ok=(bdb.toString()).equals("12345678912345678912.3456789");
+  (new Test("cbs013")).ok=(bmc.toString()).equals("12345678912345.6789123456789");
+  (new Test("cbs014")).ok=(bmd.toString()).equals("12345678.9123456789123456789");
+  (new Test("cbs015")).ok=(bme.toString()).equals("0.00123456789123456789123456789");
+  try{checknull:do{
+   new com.ibm.math.BigDecimal((java.math.BigInteger)null,1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $5){
+   flag=true;
+  }/*checknull*/
+  (new Test("cbs004")).ok=flag;
+  try{checkscale:do{
+   new com.ibm.math.BigDecimal(bip,-8);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $6){e=$6;
+   flag=(e.getMessage()).equals("Negative scale: -8");
+  }/*checkscale*/
+  (new Test("cbs005")).ok=flag;
+  
+  // char[]
+  // We just test it's there
+  // Functionality is tested by BigDecimal(String).
+  ca=("123.45").toCharArray();
+  (new Test("cca001")).ok=((new com.ibm.math.BigDecimal(ca)).toString()).equals("123.45");
+  try{checknull:do{
+   new com.ibm.math.BigDecimal((char[])null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $7){
+   flag=true;
+  }/*checknull*/
+  (new Test("cca010")).ok=flag;
+  
+  // char[],int,int
+  // We just test it's there, and that offsets work.
+  // Functionality is tested by BigDecimal(String).
+  ca=("123.45").toCharArray();
+  (new Test("cca101")).ok=((new com.ibm.math.BigDecimal(ca,0,6)).toString()).equals("123.45");
+  (new Test("cca102")).ok=((new com.ibm.math.BigDecimal(ca,1,5)).toString()).equals("23.45");
+  (new Test("cca103")).ok=((new com.ibm.math.BigDecimal(ca,2,4)).toString()).equals("3.45");
+  (new Test("cca104")).ok=((new com.ibm.math.BigDecimal(ca,3,3)).toString()).equals("0.45");
+  (new Test("cca105")).ok=((new com.ibm.math.BigDecimal(ca,4,2)).toString()).equals("45");
+  (new Test("cca106")).ok=((new com.ibm.math.BigDecimal(ca,5,1)).toString()).equals("5");
+  
+  (new Test("cca110")).ok=((new com.ibm.math.BigDecimal(ca,0,1)).toString()).equals("1");
+  (new Test("cca111")).ok=((new com.ibm.math.BigDecimal(ca,1,1)).toString()).equals("2");
+  (new Test("cca112")).ok=((new com.ibm.math.BigDecimal(ca,2,1)).toString()).equals("3");
+  (new Test("cca113")).ok=((new com.ibm.math.BigDecimal(ca,4,1)).toString()).equals("4");
+  
+  (new Test("cca120")).ok=((new com.ibm.math.BigDecimal(ca,0,2)).toString()).equals("12");
+  (new Test("cca121")).ok=((new com.ibm.math.BigDecimal(ca,1,2)).toString()).equals("23");
+  (new Test("cca122")).ok=((new com.ibm.math.BigDecimal(ca,2,2)).toString()).equals("3");
+  (new Test("cca123")).ok=((new com.ibm.math.BigDecimal(ca,3,2)).toString()).equals("0.4");
+  
+  (new Test("cca130")).ok=((new com.ibm.math.BigDecimal(ca,0,3)).toString()).equals("123");
+  (new Test("cca131")).ok=((new com.ibm.math.BigDecimal(ca,1,3)).toString()).equals("23");
+  (new Test("cca132")).ok=((new com.ibm.math.BigDecimal(ca,2,3)).toString()).equals("3.4");
+  
+  (new Test("cca140")).ok=((new com.ibm.math.BigDecimal(ca,0,4)).toString()).equals("123");
+  (new Test("cca141")).ok=((new com.ibm.math.BigDecimal(ca,1,4)).toString()).equals("23.4");
+  
+  (new Test("cca150")).ok=((new com.ibm.math.BigDecimal(ca,0,5)).toString()).equals("123.4");
+  
+  // a couple of oddies
+  ca=("x23.4x").toCharArray();
+  (new Test("cca160")).ok=((new com.ibm.math.BigDecimal(ca,1,4)).toString()).equals("23.4");
+  (new Test("cca161")).ok=((new com.ibm.math.BigDecimal(ca,1,1)).toString()).equals("2");
+  (new Test("cca162")).ok=((new com.ibm.math.BigDecimal(ca,4,1)).toString()).equals("4");
+  
+  ca=("0123456789.9876543210").toCharArray();
+  (new Test("cca163")).ok=((new com.ibm.math.BigDecimal(ca,0,21)).toString()).equals("123456789.9876543210");
+  (new Test("cca164")).ok=((new com.ibm.math.BigDecimal(ca,1,20)).toString()).equals("123456789.9876543210");
+  (new Test("cca165")).ok=((new com.ibm.math.BigDecimal(ca,2,19)).toString()).equals("23456789.9876543210");
+  (new Test("cca166")).ok=((new com.ibm.math.BigDecimal(ca,2,18)).toString()).equals("23456789.987654321");
+  (new Test("cca167")).ok=((new com.ibm.math.BigDecimal(ca,2,17)).toString()).equals("23456789.98765432");
+  (new Test("cca168")).ok=((new com.ibm.math.BigDecimal(ca,2,16)).toString()).equals("23456789.9876543");
+  
+  try{checknull:do{
+   new com.ibm.math.BigDecimal((char[])null,0,1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $8){
+   flag=true;
+  }/*checknull*/
+  (new Test("cca200")).ok=flag;
+  
+  try{checklen:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),0,0);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $9){
+   flag=true;
+  }/*checklen*/
+  (new Test("cca201")).ok=flag;
+  
+  try{checkbound:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),2,4);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $10){ // anything OK
+   flag=true;
+  }/*checkbound*/
+  (new Test("cca202")).ok=flag;
+  try{checkbound2:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),-1,2);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $11){ // anything OK
+   flag=true;
+  }/*checkbound2*/
+  (new Test("cca203")).ok=flag;
+  try{checkbound3:do{
+   new com.ibm.math.BigDecimal("123".toCharArray(),1,-2);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $12){ // anything OK
+   flag=true;
+  }/*checkbound3*/
+  (new Test("cca204")).ok=flag;
+  
+  // double [deprecated]
+  // Note that many of these differ from the valueOf(double) results.
+  dzer=(double)0;
+  dpos=(double)1;
+  dpos=dpos/((double)10);
+  dneg=(double)-dpos;
+  (new Test("cdo001")).ok=((new com.ibm.math.BigDecimal(dneg)).toString()).equals("-0.1000000000000000055511151231257827021181583404541015625");
+  
+  (new Test("cdo002")).ok=((new com.ibm.math.BigDecimal(dzer)).toString()).equals("0"); // NB, not '0.0'
+  (new Test("cdo003")).ok=((new com.ibm.math.BigDecimal(dpos)).toString()).equals("0.1000000000000000055511151231257827021181583404541015625");
+  
+  dpos5=(double)0.5D;
+  dneg5=(double)-dpos5;
+  (new Test("cdo004")).ok=((new com.ibm.math.BigDecimal(dneg5)).toString()).equals("-0.5");
+  (new Test("cdo005")).ok=((new com.ibm.math.BigDecimal(dpos5)).toString()).equals("0.5");
+  dmin=java.lang.Double.MIN_VALUE;
+  dmax=java.lang.Double.MAX_VALUE;
+  (new Test("cdo006")).ok=((new com.ibm.math.BigDecimal(dmin)).toString()).equals("0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359923797965646954457177309266567103559397963987747960107818781263007131903114045278458171678489821036887186360569987307230500063874091535649843873124733972731696151400317153853980741262385655911710266585566867681870395603106249319452715914924553293054565444011274801297099995419319894090804165633245247571478690147267801593552386115501348035264934720193790268107107491703332226844753335720832431936092382893458368060106011506169809753078342277318329247904982524730776375927247874656084778203734469699533647017972677717585125660551199131504891101451037862738167250955837389733598993664809941164205702637090279242767544565229087538682506419718265533447265625");
+  
+  (new Test("cdo007")).ok=((new com.ibm.math.BigDecimal(dmax)).toString()).equals("179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368");
+  
+  
+  // nasties
+  d=(double)9;
+  d=d/((double)10);
+  (new Test("cdo010")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.90000000000000002220446049250313080847263336181640625");
+  
+  d=d/((double)10);
+  (new Test("cdo011")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.0899999999999999966693309261245303787291049957275390625");
+  
+  d=d/((double)10);
+  (new Test("cdo012")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00899999999999999931998839741709161899052560329437255859375");
+  
+  d=d/((double)10);
+  (new Test("cdo013")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00089999999999999997536692664112933925935067236423492431640625");
+  
+  d=d/((double)10);
+  (new Test("cdo014")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00008999999999999999211568180168541175589780323207378387451171875");
+  
+  d=d/((double)10);
+  (new Test("cdo015")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.00000899999999999999853394182236510090433512232266366481781005859375");
+  
+  d=d/((double)10);
+  (new Test("cdo016")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.000000899999999999999853394182236510090433512232266366481781005859375");
+  
+  d=d/((double)10);
+  (new Test("cdo017")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.0000000899999999999999853394182236510090433512232266366481781005859375");
+  
+  d=d/((double)10);
+  (new Test("cdo018")).ok=((new com.ibm.math.BigDecimal(d)).toString()).equals("0.000000008999999999999997872197332322678764437995369007694534957408905029296875");
+  
+  
+  try{checkpin:do{
+   new com.ibm.math.BigDecimal(java.lang.Double.POSITIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $13){
+   flag=true;
+  }/*checkpin*/
+  (new Test("cdo101")).ok=flag;
+  try{checknin:do{
+   new com.ibm.math.BigDecimal(java.lang.Double.NEGATIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $14){
+   flag=true;
+  }/*checknin*/
+  (new Test("cdo102")).ok=flag;
+  try{checknan:do{
+   new com.ibm.math.BigDecimal(java.lang.Double.NaN);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $15){
+   flag=true;
+  }/*checknan*/
+  (new Test("cdo103")).ok=flag;
+  
+  // int
+  (new Test("cin001")).ok=((new com.ibm.math.BigDecimal(imin)).toString()).equals("-2147483648");
+  (new Test("cin002")).ok=((new com.ibm.math.BigDecimal(imax)).toString()).equals("2147483647");
+  (new Test("cin003")).ok=((new com.ibm.math.BigDecimal(ineg)).toString()).equals("-1");
+  (new Test("cin004")).ok=((new com.ibm.math.BigDecimal(izer)).toString()).equals("0");
+  (new Test("cin005")).ok=((new com.ibm.math.BigDecimal(ipos)).toString()).equals("1");
+  (new Test("cin006")).ok=((new com.ibm.math.BigDecimal(10)).toString()).equals("10");
+  (new Test("cin007")).ok=((new com.ibm.math.BigDecimal(9)).toString()).equals("9");
+  (new Test("cin008")).ok=((new com.ibm.math.BigDecimal(5)).toString()).equals("5");
+  (new Test("cin009")).ok=((new com.ibm.math.BigDecimal(2)).toString()).equals("2");
+  (new Test("cin010")).ok=((new com.ibm.math.BigDecimal(-2)).toString()).equals("-2");
+  (new Test("cin011")).ok=((new com.ibm.math.BigDecimal(-5)).toString()).equals("-5");
+  (new Test("cin012")).ok=((new com.ibm.math.BigDecimal(-9)).toString()).equals("-9");
+  (new Test("cin013")).ok=((new com.ibm.math.BigDecimal(-10)).toString()).equals("-10");
+  (new Test("cin014")).ok=((new com.ibm.math.BigDecimal(-11)).toString()).equals("-11");
+  (new Test("cin015")).ok=((new com.ibm.math.BigDecimal(-99)).toString()).equals("-99");
+  (new Test("cin016")).ok=((new com.ibm.math.BigDecimal(-100)).toString()).equals("-100");
+  (new Test("cin017")).ok=((new com.ibm.math.BigDecimal(-999)).toString()).equals("-999");
+  (new Test("cin018")).ok=((new com.ibm.math.BigDecimal(-1000)).toString()).equals("-1000");
+  
+  (new Test("cin019")).ok=((new com.ibm.math.BigDecimal(11)).toString()).equals("11");
+  (new Test("cin020")).ok=((new com.ibm.math.BigDecimal(99)).toString()).equals("99");
+  (new Test("cin021")).ok=((new com.ibm.math.BigDecimal(100)).toString()).equals("100");
+  (new Test("cin022")).ok=((new com.ibm.math.BigDecimal(999)).toString()).equals("999");
+  (new Test("cin023")).ok=((new com.ibm.math.BigDecimal(1000)).toString()).equals("1000");
+  
+  // long
+  (new Test("clo001")).ok=((new com.ibm.math.BigDecimal(lmin)).toString()).equals("-9223372036854775808");
+  (new Test("clo002")).ok=((new com.ibm.math.BigDecimal(lmax)).toString()).equals("9223372036854775807");
+  (new Test("clo003")).ok=((new com.ibm.math.BigDecimal(lneg)).toString()).equals("-1");
+  (new Test("clo004")).ok=((new com.ibm.math.BigDecimal(lzer)).toString()).equals("0");
+  (new Test("clo005")).ok=((new com.ibm.math.BigDecimal(lpos)).toString()).equals("1");
+  
+  // String [many more examples are elsewhere]
+  // strings without E cannot generate E in result
+  (new Test("cst001")).ok=((new com.ibm.math.BigDecimal("12")).toString()).equals("12");
+  (new Test("cst002")).ok=((new com.ibm.math.BigDecimal("-76")).toString()).equals("-76");
+  (new Test("cst003")).ok=((new com.ibm.math.BigDecimal("12.76")).toString()).equals("12.76");
+  (new Test("cst004")).ok=((new com.ibm.math.BigDecimal("+12.76")).toString()).equals("12.76");
+  (new Test("cst005")).ok=((new com.ibm.math.BigDecimal("012.76")).toString()).equals("12.76");
+  (new Test("cst006")).ok=((new com.ibm.math.BigDecimal("+0.003")).toString()).equals("0.003");
+  (new Test("cst007")).ok=((new com.ibm.math.BigDecimal("17.")).toString()).equals("17");
+  (new Test("cst008")).ok=((new com.ibm.math.BigDecimal(".5")).toString()).equals("0.5");
+  (new Test("cst009")).ok=((new com.ibm.math.BigDecimal("044")).toString()).equals("44");
+  (new Test("cst010")).ok=((new com.ibm.math.BigDecimal("0044")).toString()).equals("44");
+  (new Test("cst011")).ok=((new com.ibm.math.BigDecimal("0.0005")).toString()).equals("0.0005");
+  (new Test("cst012")).ok=((new com.ibm.math.BigDecimal("00.00005")).toString()).equals("0.00005");
+  (new Test("cst013")).ok=((new com.ibm.math.BigDecimal("0.000005")).toString()).equals("0.000005");
+  (new Test("cst014")).ok=((new com.ibm.math.BigDecimal("0.0000005")).toString()).equals("0.0000005"); // \NR
+  (new Test("cst015")).ok=((new com.ibm.math.BigDecimal("0.00000005")).toString()).equals("0.00000005"); // \NR
+  (new Test("cst016")).ok=((new com.ibm.math.BigDecimal("12345678.876543210")).toString()).equals("12345678.876543210");
+  (new Test("cst017")).ok=((new com.ibm.math.BigDecimal("2345678.876543210")).toString()).equals("2345678.876543210");
+  (new Test("cst018")).ok=((new com.ibm.math.BigDecimal("345678.876543210")).toString()).equals("345678.876543210");
+  (new Test("cst019")).ok=((new com.ibm.math.BigDecimal("0345678.87654321")).toString()).equals("345678.87654321");
+  (new Test("cst020")).ok=((new com.ibm.math.BigDecimal("345678.8765432")).toString()).equals("345678.8765432");
+  (new Test("cst021")).ok=((new com.ibm.math.BigDecimal("+345678.8765432")).toString()).equals("345678.8765432");
+  (new Test("cst022")).ok=((new com.ibm.math.BigDecimal("+0345678.8765432")).toString()).equals("345678.8765432");
+  (new Test("cst023")).ok=((new com.ibm.math.BigDecimal("+00345678.8765432")).toString()).equals("345678.8765432");
+  (new Test("cst024")).ok=((new com.ibm.math.BigDecimal("-345678.8765432")).toString()).equals("-345678.8765432");
+  (new Test("cst025")).ok=((new com.ibm.math.BigDecimal("-0345678.8765432")).toString()).equals("-345678.8765432");
+  (new Test("cst026")).ok=((new com.ibm.math.BigDecimal("-00345678.8765432")).toString()).equals("-345678.8765432");
+  
+  // exotics --
+  (new Test("cst035")).ok=((new com.ibm.math.BigDecimal("\u0e57.\u0e50")).toString()).equals("7.0");
+  (new Test("cst036")).ok=((new com.ibm.math.BigDecimal("\u0b66.\u0b67")).toString()).equals("0.1");
+  (new Test("cst037")).ok=((new com.ibm.math.BigDecimal("\u0b66\u0b66")).toString()).equals("0");
+  (new Test("cst038")).ok=((new com.ibm.math.BigDecimal("\u0b6a\u0b66")).toString()).equals("40");
+  
+  // strings with E
+  (new Test("cst040")).ok=((new com.ibm.math.BigDecimal("1E+9")).toString()).equals("1E+9");
+  (new Test("cst041")).ok=((new com.ibm.math.BigDecimal("1e+09")).toString()).equals("1E+9");
+  (new Test("cst042")).ok=((new com.ibm.math.BigDecimal("1E+90")).toString()).equals("1E+90");
+  (new Test("cst043")).ok=((new com.ibm.math.BigDecimal("+1E+009")).toString()).equals("1E+9");
+  (new Test("cst044")).ok=((new com.ibm.math.BigDecimal("0E+9")).toString()).equals("0");
+  (new Test("cst045")).ok=((new com.ibm.math.BigDecimal("1E+9")).toString()).equals("1E+9");
+  (new Test("cst046")).ok=((new com.ibm.math.BigDecimal("1E+09")).toString()).equals("1E+9");
+  (new Test("cst047")).ok=((new com.ibm.math.BigDecimal("1e+90")).toString()).equals("1E+90");
+  (new Test("cst048")).ok=((new com.ibm.math.BigDecimal("1E+009")).toString()).equals("1E+9");
+  (new Test("cst049")).ok=((new com.ibm.math.BigDecimal("0E+9")).toString()).equals("0");
+  (new Test("cst050")).ok=((new com.ibm.math.BigDecimal("1E9")).toString()).equals("1E+9");
+  (new Test("cst051")).ok=((new com.ibm.math.BigDecimal("1e09")).toString()).equals("1E+9");
+  (new Test("cst052")).ok=((new com.ibm.math.BigDecimal("1E90")).toString()).equals("1E+90");
+  (new Test("cst053")).ok=((new com.ibm.math.BigDecimal("1E009")).toString()).equals("1E+9");
+  (new Test("cst054")).ok=((new com.ibm.math.BigDecimal("0E9")).toString()).equals("0");
+  (new Test("cst055")).ok=((new com.ibm.math.BigDecimal("0.000e+0")).toString()).equals("0");
+  (new Test("cst056")).ok=((new com.ibm.math.BigDecimal("0.000E-1")).toString()).equals("0");
+  (new Test("cst057")).ok=((new com.ibm.math.BigDecimal("4E+9")).toString()).equals("4E+9");
+  (new Test("cst058")).ok=((new com.ibm.math.BigDecimal("44E+9")).toString()).equals("4.4E+10");
+  (new Test("cst059")).ok=((new com.ibm.math.BigDecimal("0.73e-7")).toString()).equals("7.3E-8");
+  (new Test("cst060")).ok=((new com.ibm.math.BigDecimal("00E+9")).toString()).equals("0");
+  (new Test("cst061")).ok=((new com.ibm.math.BigDecimal("00E-9")).toString()).equals("0");
+  (new Test("cst062")).ok=((new com.ibm.math.BigDecimal("10E+9")).toString()).equals("1.0E+10");
+  (new Test("cst063")).ok=((new com.ibm.math.BigDecimal("10E+09")).toString()).equals("1.0E+10");
+  (new Test("cst064")).ok=((new com.ibm.math.BigDecimal("10e+90")).toString()).equals("1.0E+91");
+  (new Test("cst065")).ok=((new com.ibm.math.BigDecimal("10E+009")).toString()).equals("1.0E+10");
+  (new Test("cst066")).ok=((new com.ibm.math.BigDecimal("100e+9")).toString()).equals("1.00E+11");
+  (new Test("cst067")).ok=((new com.ibm.math.BigDecimal("100e+09")).toString()).equals("1.00E+11");
+  (new Test("cst068")).ok=((new com.ibm.math.BigDecimal("100E+90")).toString()).equals("1.00E+92");
+  (new Test("cst069")).ok=((new com.ibm.math.BigDecimal("100e+009")).toString()).equals("1.00E+11");
+  
+  (new Test("cst070")).ok=((new com.ibm.math.BigDecimal("1.265")).toString()).equals("1.265");
+  (new Test("cst071")).ok=((new com.ibm.math.BigDecimal("1.265E-20")).toString()).equals("1.265E-20");
+  (new Test("cst072")).ok=((new com.ibm.math.BigDecimal("1.265E-8")).toString()).equals("1.265E-8");
+  (new Test("cst073")).ok=((new com.ibm.math.BigDecimal("1.265E-4")).toString()).equals("1.265E-4");
+  (new Test("cst074")).ok=((new com.ibm.math.BigDecimal("1.265E-3")).toString()).equals("1.265E-3");
+  (new Test("cst075")).ok=((new com.ibm.math.BigDecimal("1.265E-2")).toString()).equals("1.265E-2");
+  (new Test("cst076")).ok=((new com.ibm.math.BigDecimal("1.265E-1")).toString()).equals("1.265E-1");
+  (new Test("cst077")).ok=((new com.ibm.math.BigDecimal("1.265E-0")).toString()).equals("1.265");
+  (new Test("cst078")).ok=((new com.ibm.math.BigDecimal("1.265E+1")).toString()).equals("1.265E+1");
+  (new Test("cst079")).ok=((new com.ibm.math.BigDecimal("1.265E+2")).toString()).equals("1.265E+2");
+  (new Test("cst080")).ok=((new com.ibm.math.BigDecimal("1.265E+3")).toString()).equals("1.265E+3");
+  (new Test("cst081")).ok=((new com.ibm.math.BigDecimal("1.265E+4")).toString()).equals("1.265E+4");
+  (new Test("cst082")).ok=((new com.ibm.math.BigDecimal("1.265E+8")).toString()).equals("1.265E+8");
+  (new Test("cst083")).ok=((new com.ibm.math.BigDecimal("1.265E+20")).toString()).equals("1.265E+20");
+  
+  (new Test("cst090")).ok=((new com.ibm.math.BigDecimal("12.65")).toString()).equals("12.65");
+  (new Test("cst091")).ok=((new com.ibm.math.BigDecimal("12.65E-20")).toString()).equals("1.265E-19");
+  (new Test("cst092")).ok=((new com.ibm.math.BigDecimal("12.65E-8")).toString()).equals("1.265E-7");
+  (new Test("cst093")).ok=((new com.ibm.math.BigDecimal("12.65E-4")).toString()).equals("1.265E-3");
+  (new Test("cst094")).ok=((new com.ibm.math.BigDecimal("12.65E-3")).toString()).equals("1.265E-2");
+  (new Test("cst095")).ok=((new com.ibm.math.BigDecimal("12.65E-2")).toString()).equals("1.265E-1");
+  (new Test("cst096")).ok=((new com.ibm.math.BigDecimal("12.65E-1")).toString()).equals("1.265");
+  (new Test("cst097")).ok=((new com.ibm.math.BigDecimal("12.65E-0")).toString()).equals("1.265E+1");
+  (new Test("cst098")).ok=((new com.ibm.math.BigDecimal("12.65E+1")).toString()).equals("1.265E+2");
+  (new Test("cst099")).ok=((new com.ibm.math.BigDecimal("12.65E+2")).toString()).equals("1.265E+3");
+  (new Test("cst100")).ok=((new com.ibm.math.BigDecimal("12.65E+3")).toString()).equals("1.265E+4");
+  (new Test("cst101")).ok=((new com.ibm.math.BigDecimal("12.65E+4")).toString()).equals("1.265E+5");
+  (new Test("cst102")).ok=((new com.ibm.math.BigDecimal("12.65E+8")).toString()).equals("1.265E+9");
+  (new Test("cst103")).ok=((new com.ibm.math.BigDecimal("12.65E+20")).toString()).equals("1.265E+21");
+  
+  (new Test("cst110")).ok=((new com.ibm.math.BigDecimal("126.5")).toString()).equals("126.5");
+  (new Test("cst111")).ok=((new com.ibm.math.BigDecimal("126.5E-20")).toString()).equals("1.265E-18");
+  (new Test("cst112")).ok=((new com.ibm.math.BigDecimal("126.5E-8")).toString()).equals("1.265E-6");
+  (new Test("cst113")).ok=((new com.ibm.math.BigDecimal("126.5E-4")).toString()).equals("1.265E-2");
+  (new Test("cst114")).ok=((new com.ibm.math.BigDecimal("126.5E-3")).toString()).equals("1.265E-1");
+  (new Test("cst115")).ok=((new com.ibm.math.BigDecimal("126.5E-2")).toString()).equals("1.265");
+  (new Test("cst116")).ok=((new com.ibm.math.BigDecimal("126.5E-1")).toString()).equals("1.265E+1");
+  (new Test("cst117")).ok=((new com.ibm.math.BigDecimal("126.5E-0")).toString()).equals("1.265E+2");
+  (new Test("cst118")).ok=((new com.ibm.math.BigDecimal("126.5E+1")).toString()).equals("1.265E+3");
+  (new Test("cst119")).ok=((new com.ibm.math.BigDecimal("126.5E+2")).toString()).equals("1.265E+4");
+  (new Test("cst120")).ok=((new com.ibm.math.BigDecimal("126.5E+3")).toString()).equals("1.265E+5");
+  (new Test("cst121")).ok=((new com.ibm.math.BigDecimal("126.5E+4")).toString()).equals("1.265E+6");
+  (new Test("cst122")).ok=((new com.ibm.math.BigDecimal("126.5E+8")).toString()).equals("1.265E+10");
+  (new Test("cst123")).ok=((new com.ibm.math.BigDecimal("126.5E+20")).toString()).equals("1.265E+22");
+  
+  (new Test("cst130")).ok=((new com.ibm.math.BigDecimal("1265")).toString()).equals("1265");
+  (new Test("cst131")).ok=((new com.ibm.math.BigDecimal("1265E-20")).toString()).equals("1.265E-17");
+  (new Test("cst132")).ok=((new com.ibm.math.BigDecimal("1265E-8")).toString()).equals("1.265E-5");
+  (new Test("cst133")).ok=((new com.ibm.math.BigDecimal("1265E-4")).toString()).equals("1.265E-1");
+  (new Test("cst134")).ok=((new com.ibm.math.BigDecimal("1265E-3")).toString()).equals("1.265");
+  (new Test("cst135")).ok=((new com.ibm.math.BigDecimal("1265E-2")).toString()).equals("1.265E+1");
+  (new Test("cst136")).ok=((new com.ibm.math.BigDecimal("1265E-1")).toString()).equals("1.265E+2");
+  (new Test("cst137")).ok=((new com.ibm.math.BigDecimal("1265E-0")).toString()).equals("1.265E+3");
+  (new Test("cst138")).ok=((new com.ibm.math.BigDecimal("1265E+1")).toString()).equals("1.265E+4");
+  (new Test("cst139")).ok=((new com.ibm.math.BigDecimal("1265E+2")).toString()).equals("1.265E+5");
+  (new Test("cst140")).ok=((new com.ibm.math.BigDecimal("1265E+3")).toString()).equals("1.265E+6");
+  (new Test("cst141")).ok=((new com.ibm.math.BigDecimal("1265E+4")).toString()).equals("1.265E+7");
+  (new Test("cst142")).ok=((new com.ibm.math.BigDecimal("1265E+8")).toString()).equals("1.265E+11");
+  (new Test("cst143")).ok=((new com.ibm.math.BigDecimal("1265E+20")).toString()).equals("1.265E+23");
+  
+  (new Test("cst150")).ok=((new com.ibm.math.BigDecimal("0.1265")).toString()).equals("0.1265");
+  (new Test("cst151")).ok=((new com.ibm.math.BigDecimal("0.1265E-20")).toString()).equals("1.265E-21");
+  (new Test("cst152")).ok=((new com.ibm.math.BigDecimal("0.1265E-8")).toString()).equals("1.265E-9");
+  (new Test("cst153")).ok=((new com.ibm.math.BigDecimal("0.1265E-4")).toString()).equals("1.265E-5");
+  (new Test("cst154")).ok=((new com.ibm.math.BigDecimal("0.1265E-3")).toString()).equals("1.265E-4");
+  (new Test("cst155")).ok=((new com.ibm.math.BigDecimal("0.1265E-2")).toString()).equals("1.265E-3");
+  (new Test("cst156")).ok=((new com.ibm.math.BigDecimal("0.1265E-1")).toString()).equals("1.265E-2");
+  (new Test("cst157")).ok=((new com.ibm.math.BigDecimal("0.1265E-0")).toString()).equals("1.265E-1");
+  (new Test("cst158")).ok=((new com.ibm.math.BigDecimal("0.1265E+1")).toString()).equals("1.265");
+  (new Test("cst159")).ok=((new com.ibm.math.BigDecimal("0.1265E+2")).toString()).equals("1.265E+1");
+  (new Test("cst160")).ok=((new com.ibm.math.BigDecimal("0.1265E+3")).toString()).equals("1.265E+2");
+  (new Test("cst161")).ok=((new com.ibm.math.BigDecimal("0.1265E+4")).toString()).equals("1.265E+3");
+  (new Test("cst162")).ok=((new com.ibm.math.BigDecimal("0.1265E+8")).toString()).equals("1.265E+7");
+  (new Test("cst163")).ok=((new com.ibm.math.BigDecimal("0.1265E+20")).toString()).equals("1.265E+19");
+  
+  (new Test("cst170")).ok=((new com.ibm.math.BigDecimal("0.09e999999999")).toString()).equals("9E+999999997");
+  (new Test("cst171")).ok=((new com.ibm.math.BigDecimal("0.9e999999999")).toString()).equals("9E+999999998");
+  (new Test("cst172")).ok=((new com.ibm.math.BigDecimal("9e999999999")).toString()).equals("9E+999999999");
+  (new Test("cst173")).ok=((new com.ibm.math.BigDecimal("9.9e999999999")).toString()).equals("9.9E+999999999");
+  (new Test("cst174")).ok=((new com.ibm.math.BigDecimal("9.99e999999999")).toString()).equals("9.99E+999999999");
+  (new Test("cst175")).ok=((new com.ibm.math.BigDecimal("9.99e-999999999")).toString()).equals("9.99E-999999999");
+  (new Test("cst176")).ok=((new com.ibm.math.BigDecimal("9.9e-999999999")).toString()).equals("9.9E-999999999");
+  (new Test("cst177")).ok=((new com.ibm.math.BigDecimal("9e-999999999")).toString()).equals("9E-999999999");
+  (new Test("cst179")).ok=((new com.ibm.math.BigDecimal("99e-999999999")).toString()).equals("9.9E-999999998");
+  (new Test("cst180")).ok=((new com.ibm.math.BigDecimal("999e-999999999")).toString()).equals("9.99E-999999997");
+  
+  // baddies --
+  badstrings=new java.lang.String[]{"1..2",".","..","++1","--1","-+1","+-1","12e","12e++","12f4"," +1","+ 1","12 "," + 1"," - 1 ","x","-1-","12-","3+","","1e-","7e1000000000","","e100","\u0e5a","\u0b65","99e999999999","999e999999999","0.9e-999999999","0.09e-999999999","0.1e1000000000","10e-1000000000","0.9e9999999999","99e-9999999999","111e9999999999","1111e-9999999999"+" "+"111e*123","111e123-","111e+12+","111e1-3-","111e1*23","111e1e+3","1e1.0","1e123e","ten","ONE","1e.1","1e1.","1ee","e+1"}; // 200-203
+  // 204-207
+  // 208-211
+  // 211-214
+  // 215-219
+  // 220-222
+  // 223-224
+  // 225-226
+  // 227-228
+  // 229-230
+  // 231-232
+  // 233-234
+  // 235-237
+  // 238-240
+  // 241-244
+  // 245-248
+  
+  // watch out for commas on continuation lines
+  
+  {int $16=badstrings.length;i=0;i:for(;$16>0;$16--,i++){
+   try{
+    new com.ibm.math.BigDecimal(badstrings[i]);
+    say(">>> cst"+(200+i)+":"+" "+badstrings[i]+" "+(new com.ibm.math.BigDecimal(badstrings[i])).toString());
+    flag=false;
+   }
+   catch (java.lang.NumberFormatException $17){
+    flag=true;
+   }
+   (new Test("cst"+(200+i))).ok=flag;
+   }
+  }/*i*/
+  
+  try{checknull:do{
+   new com.ibm.math.BigDecimal((java.lang.String)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $18){
+   flag=true;
+  }/*checknull*/
+  (new Test("cst301")).ok=flag;
+  
+  summary("Constructors");
+  return;
+  }
+
+ /** Mutation tests (checks that contents of constant objects are unchanged). */
+ 
+ public void diagmutation(){
+  /* ---------------------------------------------------------------- */
+  /* Final tests -- check constants haven't mutated                   */
+  /*             -- also that MC objects haven't mutated              */
+  /* ---------------------------------------------------------------- */
+  (new Test("cuc001")).ok=(com.ibm.math.BigDecimal.ZERO.toString()).equals("0");
+  (new Test("cuc002")).ok=(com.ibm.math.BigDecimal.ONE.toString()).equals("1");
+  (new Test("cuc003")).ok=(com.ibm.math.BigDecimal.TEN.toString()).equals("10");
+  
+  (new Test("cuc010")).ok=com.ibm.math.BigDecimal.ROUND_CEILING==com.ibm.math.MathContext.ROUND_CEILING;
+  (new Test("cuc011")).ok=com.ibm.math.BigDecimal.ROUND_DOWN==com.ibm.math.MathContext.ROUND_DOWN;
+  (new Test("cuc012")).ok=com.ibm.math.BigDecimal.ROUND_FLOOR==com.ibm.math.MathContext.ROUND_FLOOR;
+  (new Test("cuc013")).ok=com.ibm.math.BigDecimal.ROUND_HALF_DOWN==com.ibm.math.MathContext.ROUND_HALF_DOWN;
+  (new Test("cuc014")).ok=com.ibm.math.BigDecimal.ROUND_HALF_EVEN==com.ibm.math.MathContext.ROUND_HALF_EVEN;
+  (new Test("cuc015")).ok=com.ibm.math.BigDecimal.ROUND_HALF_UP==com.ibm.math.MathContext.ROUND_HALF_UP;
+  (new Test("cuc016")).ok=com.ibm.math.BigDecimal.ROUND_UNNECESSARY==com.ibm.math.MathContext.ROUND_UNNECESSARY;
+  (new Test("cuc017")).ok=com.ibm.math.BigDecimal.ROUND_UP==com.ibm.math.MathContext.ROUND_UP;
+  
+  (new Test("cuc020")).ok=(com.ibm.math.MathContext.DEFAULT.getDigits())==9;
+  (new Test("cuc021")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new Test("cuc022")).ok=(com.ibm.math.MathContext.DEFAULT.getLostDigits()?1:0)==0;
+  (new Test("cuc023")).ok=(com.ibm.math.MathContext.DEFAULT.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  // mc9  =MathContext(9)
+  // mcld =MathContext(9, SCIENTIFIC, 1)
+  // mcfd =MathContext(0, PLAIN)
+  (new Test("cuc030")).ok=(mc9.getDigits())==9;
+  (new Test("cuc031")).ok=(mc9.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new Test("cuc032")).ok=(mc9.getLostDigits()?1:0)==0;
+  (new Test("cuc033")).ok=(mc9.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  (new Test("cuc034")).ok=(mcld.getDigits())==9;
+  (new Test("cuc035")).ok=(mcld.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new Test("cuc036")).ok=(mcld.getLostDigits()?1:0)==1;
+  (new Test("cuc037")).ok=(mcld.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  (new Test("cuc038")).ok=(mcfd.getDigits())==0;
+  (new Test("cuc039")).ok=(mcfd.getForm())==com.ibm.math.MathContext.PLAIN;
+  (new Test("cuc040")).ok=(mcfd.getLostDigits()?1:0)==0;
+  (new Test("cuc041")).ok=(mcfd.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  summary("No mutation");
+  return;}
+
+ 
+ /* ----------------------------------------------------------------- */
+ /* Operator test methods                                             */
+ /* ----------------------------------------------------------------- */
+ // The use of context in these tests are primarily to show that they
+ // are correctly passed to the methods, except that we check that
+ // each method checks for lostDigits.
+ 
+ /** Test the {@link BigDecimal#abs} method. */
+ 
+ public void diagabs(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  // most of the function of this is tested by add
+  (new Test("abs001")).ok=((new com.ibm.math.BigDecimal("2")).abs().toString()).equals("2");
+  (new Test("abs002")).ok=((new com.ibm.math.BigDecimal("-2")).abs().toString()).equals("2");
+  (new Test("abs003")).ok=((new com.ibm.math.BigDecimal("+0.000")).abs().toString()).equals("0.000");
+  (new Test("abs004")).ok=((new com.ibm.math.BigDecimal("00.000")).abs().toString()).equals("0.000");
+  (new Test("abs005")).ok=((new com.ibm.math.BigDecimal("-0.000")).abs().toString()).equals("0.000");
+  (new Test("abs006")).ok=((new com.ibm.math.BigDecimal("+0.000")).abs(mcdef).toString()).equals("0");
+  (new Test("abs007")).ok=((new com.ibm.math.BigDecimal("00.000")).abs(mcdef).toString()).equals("0");
+  (new Test("abs008")).ok=((new com.ibm.math.BigDecimal("-0.000")).abs(mcdef).toString()).equals("0");
+  (new Test("abs009")).ok=((new com.ibm.math.BigDecimal("-2000000")).abs().toString()).equals("2000000");
+  (new Test("abs010")).ok=((new com.ibm.math.BigDecimal("-2000000")).abs(mcdef).toString()).equals("2000000");
+  (new Test("abs011")).ok=((new com.ibm.math.BigDecimal("-2000000")).abs(mc6).toString()).equals("2.00000E+6");
+  (new Test("abs012")).ok=((new com.ibm.math.BigDecimal("2000000")).abs(mc6).toString()).equals("2.00000E+6");
+  (new Test("abs013")).ok=((new com.ibm.math.BigDecimal("0.2")).abs().toString()).equals("0.2");
+  (new Test("abs014")).ok=((new com.ibm.math.BigDecimal("-0.2")).abs().toString()).equals("0.2");
+  (new Test("abs015")).ok=((new com.ibm.math.BigDecimal("0.01")).abs().toString()).equals("0.01");
+  (new Test("abs016")).ok=((new com.ibm.math.BigDecimal("-0.01")).abs().toString()).equals("0.01");
+  try{checkdigits:do{
+   tenlong.abs(mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $19){ae=$19;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("abs020")).ok=flag;
+  // check lostdigits not raised if digits=0 [monadic method]
+  try{checkdigits:do{
+   tenlong.abs(mcld0);
+   flag=true;
+  }while(false);}
+  catch (java.lang.ArithmeticException $20){ae=$20;
+   flag=false;
+  }/*checkdigits*/
+  (new Test("abs021")).ok=flag;
+  try{checknull:do{
+   com.ibm.math.BigDecimal.TEN.abs((com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $21){
+   flag=true;
+  }/*checknull*/
+  (new Test("abs022")).ok=flag;
+  
+  summary("abs");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#add} method. */
+ 
+ public void diagadd(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal alhs;
+  com.ibm.math.BigDecimal arhs;
+  java.lang.ArithmeticException ae=null;
+  
+  // [first group are 'quick confidence check']
+  (new Test("add001")).ok=((new com.ibm.math.BigDecimal(2)).add(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("5");
+  (new Test("add003")).ok=((new com.ibm.math.BigDecimal("5.75")).add(new com.ibm.math.BigDecimal("3.3"),mcdef).toString()).equals("9.05");
+  (new Test("add004")).ok=((new com.ibm.math.BigDecimal("5")).add(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("2");
+  (new Test("add005")).ok=((new com.ibm.math.BigDecimal("-5")).add(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("-8");
+  (new Test("add006")).ok=((new com.ibm.math.BigDecimal("-7")).add(new com.ibm.math.BigDecimal("2.5"),mcdef).toString()).equals("-4.5");
+  (new Test("add007")).ok=((new com.ibm.math.BigDecimal("0.7")).add(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("1.0");
+  (new Test("add008")).ok=((new com.ibm.math.BigDecimal("1.25")).add(new com.ibm.math.BigDecimal("1.25"),mcdef).toString()).equals("2.50");
+  (new Test("add009")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000000"),mcdef).toString()).equals("2.23456789");
+  
+  (new Test("add010")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000011"),mcdef).toString()).equals("2.23456800");
+  
+  
+  (new Test("add011")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555555"),mcdef).toString()).equals("1.00000000");
+  
+  (new Test("add012")).ok=((new com.ibm.math.BigDecimal("0.4444444440")).add(new com.ibm.math.BigDecimal("0.5555555555"),mcdef).toString()).equals("1.00000000");
+  
+  (new Test("add013")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555550"),mcdef).toString()).equals("0.999999999");
+  
+  (new Test("add014")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).add(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444444");
+  
+  (new Test("add015")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).add(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444445");
+  
+  
+  (new Test("add016")).ok=((new com.ibm.math.BigDecimal("70")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("add017")).ok=((new com.ibm.math.BigDecimal("700")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("add018")).ok=((new com.ibm.math.BigDecimal("7000")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("add019")).ok=((new com.ibm.math.BigDecimal("70000")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000001E+13");
+  
+  (new Test("add020")).ok=((new com.ibm.math.BigDecimal("700000")).add(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("1.00000007E+13");
+  
+  
+  // [Now the same group with fixed arithmetic]
+  (new Test("add030")).ok=((new com.ibm.math.BigDecimal(2)).add(new com.ibm.math.BigDecimal(3)).toString()).equals("5");
+  (new Test("add031")).ok=((new com.ibm.math.BigDecimal("5.75")).add(new com.ibm.math.BigDecimal("3.3")).toString()).equals("9.05");
+  (new Test("add032")).ok=((new com.ibm.math.BigDecimal("5")).add(new com.ibm.math.BigDecimal("-3")).toString()).equals("2");
+  (new Test("add033")).ok=((new com.ibm.math.BigDecimal("-5")).add(new com.ibm.math.BigDecimal("-3")).toString()).equals("-8");
+  (new Test("add034")).ok=((new com.ibm.math.BigDecimal("-7")).add(new com.ibm.math.BigDecimal("2.5")).toString()).equals("-4.5");
+  (new Test("add035")).ok=((new com.ibm.math.BigDecimal("0.7")).add(new com.ibm.math.BigDecimal("0.3")).toString()).equals("1.0");
+  (new Test("add036")).ok=((new com.ibm.math.BigDecimal("1.25")).add(new com.ibm.math.BigDecimal("1.25")).toString()).equals("2.50");
+  (new Test("add037")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000000")).toString()).equals("2.23456789");
+  
+  (new Test("add038")).ok=((new com.ibm.math.BigDecimal("1.23456789")).add(new com.ibm.math.BigDecimal("1.00000011")).toString()).equals("2.23456800");
+  
+  
+  (new Test("add039")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555555")).toString()).equals("0.9999999999");
+  
+  (new Test("add040")).ok=((new com.ibm.math.BigDecimal("0.4444444440")).add(new com.ibm.math.BigDecimal("0.5555555555")).toString()).equals("0.9999999995");
+  
+  (new Test("add041")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).add(new com.ibm.math.BigDecimal("0.5555555550")).toString()).equals("0.9999999994");
+  
+  (new Test("add042")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).add(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444444999");
+  
+  (new Test("add043")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).add(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444445000");
+  
+  
+  (new Test("add044")).ok=((new com.ibm.math.BigDecimal("70")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000000070");
+  
+  (new Test("add045")).ok=((new com.ibm.math.BigDecimal("700")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000000700");
+  
+  (new Test("add046")).ok=((new com.ibm.math.BigDecimal("7000")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000007000");
+  
+  (new Test("add047")).ok=((new com.ibm.math.BigDecimal("70000")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000070000");
+  
+  (new Test("add048")).ok=((new com.ibm.math.BigDecimal("700000")).add(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("10000000700000");
+  
+  
+  // symmetry:
+  (new Test("add049")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("add050")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("add051")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("7000"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("add052")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("1.00000001E+13");
+  
+  (new Test("add053")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700000"),mcdef).toString()).equals("1.00000007E+13");
+  
+  
+  (new Test("add054")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70")).toString()).equals("10000000000070");
+  
+  (new Test("add055")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700")).toString()).equals("10000000000700");
+  
+  (new Test("add056")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("7000")).toString()).equals("10000000007000");
+  
+  (new Test("add057")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000")).toString()).equals("10000000070000");
+  
+  (new Test("add058")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("700000")).toString()).equals("10000000700000");
+  
+  // some rounding effects
+  (new Test("add059")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0000")).toString()).equals("0.9998");
+  
+  (new Test("add060")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0001")).toString()).equals("0.9999");
+  
+  (new Test("add061")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0002")).toString()).equals("1.0000");
+  
+  (new Test("add062")).ok=((new com.ibm.math.BigDecimal("0.9998")).add(new com.ibm.math.BigDecimal("0.0003")).toString()).equals("1.0001");
+  
+  
+  // MC
+  (new Test("add070")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mcfd).toString()).equals("10000000070000");
+  
+  (new Test("add071")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("1.00000001E+13");
+  
+  (new Test("add072")).ok=((new com.ibm.math.BigDecimal("10000e+9")).add(new com.ibm.math.BigDecimal("70000"),mc6).toString()).equals("1.00000E+13");
+  
+  
+  // zero preservation
+  (new Test("add080")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.0001"),mc6).toString()).equals("1.0001");
+  
+  (new Test("add081")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.00001"),mc6).toString()).equals("1.00001");
+  
+  (new Test("add082")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.000001"),mc6).toString()).equals("1.00000");
+  
+  (new Test("add083")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.0000001"),mc6).toString()).equals("1.00000");
+  
+  (new Test("add084")).ok=(com.ibm.math.BigDecimal.ONE.add(new com.ibm.math.BigDecimal("0.00000001"),mc6).toString()).equals("1.00000");
+  
+  
+  // more fixed, LHS swaps
+  (new Test("add090")).ok=((new com.ibm.math.BigDecimal("-56267E-10")).add(zero).toString()).equals("-0.0000056267");
+  (new Test("add091")).ok=((new com.ibm.math.BigDecimal("-56267E-6")).add(zero).toString()).equals("-0.056267");
+  (new Test("add092")).ok=((new com.ibm.math.BigDecimal("-56267E-5")).add(zero).toString()).equals("-0.56267");
+  (new Test("add093")).ok=((new com.ibm.math.BigDecimal("-56267E-4")).add(zero).toString()).equals("-5.6267");
+  (new Test("add094")).ok=((new com.ibm.math.BigDecimal("-56267E-3")).add(zero).toString()).equals("-56.267");
+  (new Test("add095")).ok=((new com.ibm.math.BigDecimal("-56267E-2")).add(zero).toString()).equals("-562.67");
+  (new Test("add096")).ok=((new com.ibm.math.BigDecimal("-56267E-1")).add(zero).toString()).equals("-5626.7");
+  (new Test("add097")).ok=((new com.ibm.math.BigDecimal("-56267E-0")).add(zero).toString()).equals("-56267");
+  (new Test("add098")).ok=((new com.ibm.math.BigDecimal("-5E-10")).add(zero).toString()).equals("-0.0000000005");
+  (new Test("add099")).ok=((new com.ibm.math.BigDecimal("-5E-5")).add(zero).toString()).equals("-0.00005");
+  (new Test("add100")).ok=((new com.ibm.math.BigDecimal("-5E-1")).add(zero).toString()).equals("-0.5");
+  (new Test("add101")).ok=((new com.ibm.math.BigDecimal("-5E-10")).add(zero).toString()).equals("-0.0000000005");
+  (new Test("add102")).ok=((new com.ibm.math.BigDecimal("-5E-5")).add(zero).toString()).equals("-0.00005");
+  (new Test("add103")).ok=((new com.ibm.math.BigDecimal("-5E-1")).add(zero).toString()).equals("-0.5");
+  (new Test("add104")).ok=((new com.ibm.math.BigDecimal("-5E10")).add(zero).toString()).equals("-50000000000");
+  (new Test("add105")).ok=((new com.ibm.math.BigDecimal("-5E5")).add(zero).toString()).equals("-500000");
+  (new Test("add106")).ok=((new com.ibm.math.BigDecimal("-5E1")).add(zero).toString()).equals("-50");
+  (new Test("add107")).ok=((new com.ibm.math.BigDecimal("-5E0")).add(zero).toString()).equals("-5");
+  
+  // more fixed, RHS swaps
+  (new Test("add108")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-10")).toString()).equals("-0.0000056267");
+  (new Test("add109")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-6")).toString()).equals("-0.056267");
+  (new Test("add110")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-5")).toString()).equals("-0.56267");
+  (new Test("add111")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-4")).toString()).equals("-5.6267");
+  (new Test("add112")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-3")).toString()).equals("-56.267");
+  (new Test("add113")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-2")).toString()).equals("-562.67");
+  (new Test("add114")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-1")).toString()).equals("-5626.7");
+  (new Test("add115")).ok=(zero.add(new com.ibm.math.BigDecimal("-56267E-0")).toString()).equals("-56267");
+  (new Test("add116")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-10")).toString()).equals("-0.0000000005");
+  (new Test("add117")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-5")).toString()).equals("-0.00005");
+  (new Test("add118")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-1")).toString()).equals("-0.5");
+  (new Test("add129")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-10")).toString()).equals("-0.0000000005");
+  (new Test("add130")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-5")).toString()).equals("-0.00005");
+  (new Test("add131")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E-1")).toString()).equals("-0.5");
+  (new Test("add132")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E10")).toString()).equals("-50000000000");
+  (new Test("add133")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E5")).toString()).equals("-500000");
+  (new Test("add134")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E1")).toString()).equals("-50");
+  (new Test("add135")).ok=(zero.add(new com.ibm.math.BigDecimal("-5E0")).toString()).equals("-5");
+  
+  // [some of the next group are really constructor tests]
+  (new Test("add140")).ok=((new com.ibm.math.BigDecimal("00.0")).add(new com.ibm.math.BigDecimal("0.00"),mcdef).toString()).equals("0");
+  (new Test("add141")).ok=((new com.ibm.math.BigDecimal("0.00")).add(new com.ibm.math.BigDecimal("00.0"),mcdef).toString()).equals("0");
+  (new Test("add142")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.3");
+  (new Test("add143")).ok=((new com.ibm.math.BigDecimal("3.")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.3");
+  (new Test("add144")).ok=((new com.ibm.math.BigDecimal("3.0")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.3");
+  (new Test("add145")).ok=((new com.ibm.math.BigDecimal("3.00")).add(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("3.30");
+  (new Test("add146")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("6");
+  (new Test("add147")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("+3"),mcdef).toString()).equals("6");
+  (new Test("add148")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("0");
+  (new Test("add149")).ok=((new com.ibm.math.BigDecimal("0.03")).add(new com.ibm.math.BigDecimal("-0.03"),mcdef).toString()).equals("0");
+  
+  (new Test("add150")).ok=((new com.ibm.math.BigDecimal("00.0")).add(new com.ibm.math.BigDecimal("0.00")).toString()).equals("0.00");
+  (new Test("add151")).ok=((new com.ibm.math.BigDecimal("0.00")).add(new com.ibm.math.BigDecimal("00.0")).toString()).equals("0.00");
+  (new Test("add152")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.3");
+  (new Test("add153")).ok=((new com.ibm.math.BigDecimal("3.")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.3");
+  (new Test("add154")).ok=((new com.ibm.math.BigDecimal("3.0")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.3");
+  (new Test("add155")).ok=((new com.ibm.math.BigDecimal("3.00")).add(new com.ibm.math.BigDecimal(".3")).toString()).equals("3.30");
+  (new Test("add156")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("3")).toString()).equals("6");
+  (new Test("add157")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("+3")).toString()).equals("6");
+  (new Test("add158")).ok=((new com.ibm.math.BigDecimal("3")).add(new com.ibm.math.BigDecimal("-3")).toString()).equals("0");
+  (new Test("add159")).ok=((new com.ibm.math.BigDecimal("0.3")).add(new com.ibm.math.BigDecimal("-0.3")).toString()).equals("0.0");
+  (new Test("add160")).ok=((new com.ibm.math.BigDecimal("0.03")).add(new com.ibm.math.BigDecimal("-0.03")).toString()).equals("0.00");
+  (new Test("add161")).ok=((new com.ibm.math.BigDecimal("7E+12")).add(new com.ibm.math.BigDecimal("-1"),mcfd).toString()).equals("6999999999999");
+  
+  (new Test("add162")).ok=((new com.ibm.math.BigDecimal("7E+12")).add(new com.ibm.math.BigDecimal("1.11"),mcfd).toString()).equals("7000000000001.11");
+  
+  (new Test("add163")).ok=((new com.ibm.math.BigDecimal("1.11")).add(new com.ibm.math.BigDecimal("7E+12"),mcfd).toString()).equals("7000000000001.11");
+  
+  
+  // input preparation tests
+  alhs=new com.ibm.math.BigDecimal("12345678900000");
+  arhs=new com.ibm.math.BigDecimal("9999999999999");
+  (new Test("add170")).ok=(alhs.add(arhs,mc3).toString()).equals("2.23E+13");
+  (new Test("add171")).ok=(arhs.add(alhs,mc3).toString()).equals("2.23E+13");
+  (new Test("add172")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3456"),mc3).toString()).equals("1.55E+4");
+  // next was 1.54E+4 under old [truncate to digits+1] rules
+  (new Test("add173")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3446"),mc3).toString()).equals("1.55E+4");
+  (new Test("add174")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3454"),mc3).toString()).equals("1.55E+4");
+  (new Test("add175")).ok=((new com.ibm.math.BigDecimal("12E+3")).add(new com.ibm.math.BigDecimal("3444"),mc3).toString()).equals("1.54E+4");
+  
+  (new Test("add176")).ok=((new com.ibm.math.BigDecimal("3456")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.55E+4");
+  // next was 1.54E+4 under old [truncate to digits+1] rules
+  (new Test("add177")).ok=((new com.ibm.math.BigDecimal("3446")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.55E+4");
+  (new Test("add178")).ok=((new com.ibm.math.BigDecimal("3454")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.55E+4");
+  (new Test("add179")).ok=((new com.ibm.math.BigDecimal("3444")).add(new com.ibm.math.BigDecimal("12E+3"),mc3).toString()).equals("1.54E+4");
+  
+  try{checknull:do{
+   ten.add((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $22){
+   flag=true;
+  }/*checknull*/
+  (new Test("add200")).ok=flag;
+  try{checknull2:do{
+   ten.add(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $23){
+   flag=true;
+  }/*checknull2*/
+  (new Test("add201")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.add(com.ibm.math.BigDecimal.ZERO,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $24){ae=$24;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("add202")).ok=flag;
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ZERO.add(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $25){ae=$25;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("add203")).ok=flag;
+  
+  // check lostdigits not raised if digits=0 [dyadic method]
+  try{checkdigits:do{
+   tenlong.add(com.ibm.math.BigDecimal.ZERO,mcld0);
+   flag=true;
+  }while(false);}
+  catch (java.lang.ArithmeticException $26){ae=$26;
+   flag=false;
+  }/*checkdigits*/
+  (new Test("add204")).ok=flag;
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ZERO.add(tenlong,mcld0);
+   flag=true;
+  }while(false);}
+  catch (java.lang.ArithmeticException $27){ae=$27;
+   flag=false;
+  }/*checkdigits*/
+  (new Test("add205")).ok=flag;
+  
+  summary("add");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ /** Test the {@link BigDecimal#compareTo(BigDecimal)} method. */
+ 
+ public void diagcompareto(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  // we assume add/subtract test function; this just
+  // tests existence, exceptions, and possible results
+  
+  (new Test("cpt001")).ok=((new com.ibm.math.BigDecimal("5")).compareTo(new com.ibm.math.BigDecimal("2")))==1;
+  (new Test("cpt002")).ok=((new com.ibm.math.BigDecimal("5")).compareTo(new com.ibm.math.BigDecimal("5")))==0;
+  (new Test("cpt003")).ok=((new com.ibm.math.BigDecimal("5")).compareTo(new com.ibm.math.BigDecimal("5.00")))==0;
+  (new Test("cpt004")).ok=((new com.ibm.math.BigDecimal("0.5")).compareTo(new com.ibm.math.BigDecimal("0.5")))==0;
+  (new Test("cpt005")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5")))==(-1);
+  (new Test("cpt006")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5"),mcdef))==(-1);
+  (new Test("cpt007")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5"),mc6))==(-1);
+  (new Test("cpt008")).ok=((new com.ibm.math.BigDecimal("2")).compareTo(new com.ibm.math.BigDecimal("5"),mcfd))==(-1);
+  try{checknull:do{
+   ten.compareTo((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $28){
+   flag=true;
+  }/*checknull*/
+  (new Test("cpt100")).ok=flag;
+  try{checknull2:do{
+   ten.compareTo(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $29){
+   flag=true;
+  }/*checknull2*/
+  (new Test("cpt101")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.compareTo(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $30){ae=$30;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("cpt102")).ok=flag;
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.compareTo(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $31){ae=$31;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("cpt103")).ok=flag;
+  
+  summary("compareTo");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#divide} method. */
+ 
+ public void diagdivide(){
+  boolean flag=false;
+  com.ibm.math.MathContext rmcd;
+  int rhu;
+  int rd;
+  int ru;
+  java.lang.RuntimeException e=null;
+  java.lang.ArithmeticException ae=null;
+  
+  (new Test("div301")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("0.333333333");
+  (new Test("div302")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("0.666666667");
+  (new Test("div303")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2.4");
+  (new Test("div304")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("-1"),mcdef).toString()).equals("-2.4");
+  (new Test("div305")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("-2.4");
+  (new Test("div306")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("-1"),mcdef).toString()).equals("2.4");
+  (new Test("div307")).ok=((new com.ibm.math.BigDecimal("2.40")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2.4");
+  (new Test("div308")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2.4");
+  (new Test("div309")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1.2");
+  (new Test("div310")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1.2");
+  (new Test("div311")).ok=((new com.ibm.math.BigDecimal("2.")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new Test("div312")).ok=((new com.ibm.math.BigDecimal("20")).divide(new com.ibm.math.BigDecimal("20"),mcdef).toString()).equals("1");
+  (new Test("div313")).ok=((new com.ibm.math.BigDecimal("187")).divide(new com.ibm.math.BigDecimal("187"),mcdef).toString()).equals("1");
+  (new Test("div314")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("2.5");
+  (new Test("div315")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.0"),mcdef).toString()).equals("2.5");
+  (new Test("div316")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.000"),mcdef).toString()).equals("2.5");
+  (new Test("div317")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("0.200"),mcdef).toString()).equals("25");
+  (new Test("div318")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("999999999");
+  (new Test("div319")).ok=((new com.ibm.math.BigDecimal("999999999.4")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("999999999");
+  (new Test("div320")).ok=((new com.ibm.math.BigDecimal("999999999.5")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1E+9");
+  (new Test("div321")).ok=((new com.ibm.math.BigDecimal("999999999.9")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1E+9");
+  (new Test("div322")).ok=((new com.ibm.math.BigDecimal("999999999.999")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1E+9");
+  (new Test("div323")).ok=((new com.ibm.math.BigDecimal("0.0000E-50")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("0");
+  // MC
+  (new Test("div325")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("999999999");
+  (new Test("div326")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1"),mc6).toString()).equals("1E+9");
+  (new Test("div327")).ok=((new com.ibm.math.BigDecimal("9999999")).divide(new com.ibm.math.BigDecimal("1"),mc6).toString()).equals("1E+7");
+  (new Test("div328")).ok=((new com.ibm.math.BigDecimal("999999")).divide(new com.ibm.math.BigDecimal("1"),mc6).toString()).equals("999999");
+  
+  // check rounding explicitly [note: digits+1 truncation]
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_CEILING);
+  (new Test("div330")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div331")).ok=((new com.ibm.math.BigDecimal("1.51")).divide(one,rmcd).toString()).equals("1.6");
+  (new Test("div332")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_DOWN);
+  (new Test("div333")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div334")).ok=((new com.ibm.math.BigDecimal("1.59")).divide(one,rmcd).toString()).equals("1.5");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_FLOOR);
+  (new Test("div335")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div336")).ok=((new com.ibm.math.BigDecimal("1.59")).divide(one,rmcd).toString()).equals("1.5");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_DOWN);
+  (new Test("div337")).ok=((new com.ibm.math.BigDecimal("1.45")).divide(one,rmcd).toString()).equals("1.4");
+  (new Test("div338")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div339")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.5");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_EVEN);
+  (new Test("div340")).ok=((new com.ibm.math.BigDecimal("1.45")).divide(one,rmcd).toString()).equals("1.4");
+  (new Test("div341")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div342")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_UP);
+  (new Test("div343")).ok=((new com.ibm.math.BigDecimal("1.45")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div344")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div345")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  rmcd=new com.ibm.math.MathContext(2,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_UP);
+  (new Test("div346")).ok=((new com.ibm.math.BigDecimal("1.50")).divide(one,rmcd).toString()).equals("1.5");
+  (new Test("div347")).ok=((new com.ibm.math.BigDecimal("1.51")).divide(one,rmcd).toString()).equals("1.6");
+  (new Test("div348")).ok=((new com.ibm.math.BigDecimal("1.55")).divide(one,rmcd).toString()).equals("1.6");
+  
+  // fixed point...
+  (new Test("div350")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new Test("div351")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("1");
+  (new Test("div352")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("2.4");
+  (new Test("div353")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("-1")).toString()).equals("-2.4");
+  (new Test("div354")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("-2.4");
+  (new Test("div355")).ok=((new com.ibm.math.BigDecimal("-2.4")).divide(new com.ibm.math.BigDecimal("-1")).toString()).equals("2.4");
+  (new Test("div356")).ok=((new com.ibm.math.BigDecimal("2.40")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("2.40");
+  (new Test("div357")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("2.400");
+  (new Test("div358")).ok=((new com.ibm.math.BigDecimal("2.4")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("1.2");
+  (new Test("div359")).ok=((new com.ibm.math.BigDecimal("2.400")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("1.200");
+  (new Test("div360")).ok=((new com.ibm.math.BigDecimal("2.")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new Test("div361")).ok=((new com.ibm.math.BigDecimal("20")).divide(new com.ibm.math.BigDecimal("20")).toString()).equals("1");
+  (new Test("div362")).ok=((new com.ibm.math.BigDecimal("187")).divide(new com.ibm.math.BigDecimal("187")).toString()).equals("1");
+  (new Test("div363")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("3");
+  (new Test("div364")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.0")).toString()).equals("3");
+  (new Test("div365")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("2.000")).toString()).equals("3");
+  (new Test("div366")).ok=((new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("0.200")).toString()).equals("25");
+  (new Test("div367")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("2")).toString()).equals("2.5");
+  (new Test("div368")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("2.0")).toString()).equals("2.5");
+  (new Test("div369")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("2.000")).toString()).equals("2.5");
+  (new Test("div370")).ok=((new com.ibm.math.BigDecimal("5.0")).divide(new com.ibm.math.BigDecimal("0.200")).toString()).equals("25.0");
+  (new Test("div371")).ok=((new com.ibm.math.BigDecimal("999999999")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999");
+  (new Test("div372")).ok=((new com.ibm.math.BigDecimal("999999999.4")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.4");
+  (new Test("div373")).ok=((new com.ibm.math.BigDecimal("999999999.5")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.5");
+  (new Test("div374")).ok=((new com.ibm.math.BigDecimal("999999999.9")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.9");
+  (new Test("div375")).ok=((new com.ibm.math.BigDecimal("999999999.999")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("999999999.999");
+  (new Test("div376")).ok=((new com.ibm.math.BigDecimal("0.0000E-5")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("0");
+  (new Test("div377")).ok=((new com.ibm.math.BigDecimal("0.000000000")).divide(new com.ibm.math.BigDecimal("1")).toString()).equals("0.000000000");
+  
+  //- Fixed point; explicit scales & rounds [old BigDecimal divides]
+  rhu=com.ibm.math.MathContext.ROUND_HALF_UP;
+  rd=com.ibm.math.MathContext.ROUND_DOWN;
+  (new Test("div001")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new Test("div002")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),rhu).toString()).equals("0");
+  (new Test("div003")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),0,rhu).toString()).equals("0");
+  (new Test("div004")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),1,rhu).toString()).equals("0.0");
+  (new Test("div005")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),2,rhu).toString()).equals("0.00");
+  (new Test("div006")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),3,rhu).toString()).equals("0.000");
+  (new Test("div007")).ok=((new com.ibm.math.BigDecimal("0")).divide(new com.ibm.math.BigDecimal("3"),4,rhu).toString()).equals("0.0000");
+  (new Test("div008")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new Test("div009")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),rhu).toString()).equals("0");
+  (new Test("div010")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),0,rhu).toString()).equals("0");
+  (new Test("div011")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),1,rhu).toString()).equals("0.3");
+  (new Test("div012")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),2,rhu).toString()).equals("0.33");
+  (new Test("div013")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),3,rhu).toString()).equals("0.333");
+  (new Test("div014")).ok=((new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),4,rhu).toString()).equals("0.3333");
+  (new Test("div015")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3")).toString()).equals("1");
+  (new Test("div016")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),rhu).toString()).equals("1");
+  (new Test("div017")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),0,rhu).toString()).equals("1");
+  (new Test("div018")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),1,rhu).toString()).equals("0.7");
+  (new Test("div019")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),2,rhu).toString()).equals("0.67");
+  (new Test("div020")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),3,rhu).toString()).equals("0.667");
+  (new Test("div021")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),4,rhu).toString()).equals("0.6667");
+  
+  (new Test("div030")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),4,rhu).toString()).equals("0.5000");
+  (new Test("div031")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),3,rhu).toString()).equals("0.500");
+  (new Test("div032")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),2,rhu).toString()).equals("0.50");
+  (new Test("div033")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),1,rhu).toString()).equals("0.5");
+  (new Test("div034")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("2000"),0,rhu).toString()).equals("1");
+  
+  (new Test("div035")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),4,rhu).toString()).equals("0.0200");
+  (new Test("div036")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),3,rhu).toString()).equals("0.020");
+  (new Test("div037")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),2,rhu).toString()).equals("0.02");
+  (new Test("div038")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),1,rhu).toString()).equals("0.0");
+  (new Test("div039")).ok=((new com.ibm.math.BigDecimal("100")).divide(new com.ibm.math.BigDecimal("5000"),0,rhu).toString()).equals("0");
+  
+  (new Test("div040")).ok=((new com.ibm.math.BigDecimal("9.99999999")).divide(new com.ibm.math.BigDecimal("9.77777777"),4,rhu).toString()).equals("1.0227");
+  (new Test("div041")).ok=((new com.ibm.math.BigDecimal("9.9999999")).divide(new com.ibm.math.BigDecimal("9.7777777"),4,rhu).toString()).equals("1.0227");
+  (new Test("div042")).ok=((new com.ibm.math.BigDecimal("9.999999")).divide(new com.ibm.math.BigDecimal("9.777777"),4,rhu).toString()).equals("1.0227");
+  (new Test("div043")).ok=((new com.ibm.math.BigDecimal("9.77777777")).divide(new com.ibm.math.BigDecimal("9.99999999"),4,rhu).toString()).equals("0.9778");
+  (new Test("div044")).ok=((new com.ibm.math.BigDecimal("9.7777777")).divide(new com.ibm.math.BigDecimal("9.9999999"),4,rhu).toString()).equals("0.9778");
+  (new Test("div045")).ok=((new com.ibm.math.BigDecimal("9.777777")).divide(new com.ibm.math.BigDecimal("9.999999"),4,rhu).toString()).equals("0.9778");
+  (new Test("div046")).ok=((new com.ibm.math.BigDecimal("9.77777")).divide(new com.ibm.math.BigDecimal("9.99999"),4,rhu).toString()).equals("0.9778");
+  (new Test("div047")).ok=((new com.ibm.math.BigDecimal("9.7777")).divide(new com.ibm.math.BigDecimal("9.9999"),4,rhu).toString()).equals("0.9778");
+  (new Test("div048")).ok=((new com.ibm.math.BigDecimal("9.777")).divide(new com.ibm.math.BigDecimal("9.999"),4,rhu).toString()).equals("0.9778");
+  (new Test("div049")).ok=((new com.ibm.math.BigDecimal("9.77")).divide(new com.ibm.math.BigDecimal("9.99"),4,rhu).toString()).equals("0.9780");
+  (new Test("div050")).ok=((new com.ibm.math.BigDecimal("9.7")).divide(new com.ibm.math.BigDecimal("9.9"),4,rhu).toString()).equals("0.9798");
+  (new Test("div051")).ok=((new com.ibm.math.BigDecimal("9.")).divide(new com.ibm.math.BigDecimal("9."),4,rhu).toString()).equals("1.0000");
+  
+  (new Test("div060")).ok=((new com.ibm.math.BigDecimal("9.99999999")).divide(new com.ibm.math.BigDecimal("9.77777777"),rhu).toString()).equals("1.02272727");
+  (new Test("div061")).ok=((new com.ibm.math.BigDecimal("9.9999999")).divide(new com.ibm.math.BigDecimal("9.7777777"),rhu).toString()).equals("1.0227273");
+  (new Test("div062")).ok=((new com.ibm.math.BigDecimal("9.999999")).divide(new com.ibm.math.BigDecimal("9.777777"),rhu).toString()).equals("1.022727");
+  (new Test("div063")).ok=((new com.ibm.math.BigDecimal("9.77777777")).divide(new com.ibm.math.BigDecimal("9.99999999"),rhu).toString()).equals("0.97777778");
+  (new Test("div064")).ok=((new com.ibm.math.BigDecimal("9.7777777")).divide(new com.ibm.math.BigDecimal("9.9999999"),rhu).toString()).equals("0.9777778");
+  (new Test("div065")).ok=((new com.ibm.math.BigDecimal("9.777777")).divide(new com.ibm.math.BigDecimal("9.999999"),rhu).toString()).equals("0.977778");
+  (new Test("div066")).ok=((new com.ibm.math.BigDecimal("9.77777")).divide(new com.ibm.math.BigDecimal("9.99999"),rhu).toString()).equals("0.97778");
+  (new Test("div067")).ok=((new com.ibm.math.BigDecimal("9.7777")).divide(new com.ibm.math.BigDecimal("9.9999"),rhu).toString()).equals("0.9778");
+  (new Test("div068")).ok=((new com.ibm.math.BigDecimal("9.777")).divide(new com.ibm.math.BigDecimal("9.999"),rhu).toString()).equals("0.978");
+  (new Test("div069")).ok=((new com.ibm.math.BigDecimal("9.77")).divide(new com.ibm.math.BigDecimal("9.99"),rhu).toString()).equals("0.98");
+  (new Test("div070")).ok=((new com.ibm.math.BigDecimal("9.7")).divide(new com.ibm.math.BigDecimal("9.9"),rhu).toString()).equals("1.0");
+  (new Test("div071")).ok=((new com.ibm.math.BigDecimal("9.")).divide(new com.ibm.math.BigDecimal("9."),rhu).toString()).equals("1");
+  
+  rd=com.ibm.math.MathContext.ROUND_DOWN; // test this is actually being used
+  (new Test("div080")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),0,rd).toString()).equals("0");
+  (new Test("div081")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),1,rd).toString()).equals("0.6");
+  (new Test("div082")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),2,rd).toString()).equals("0.66");
+  (new Test("div083")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),3,rd).toString()).equals("0.666");
+  (new Test("div084")).ok=((new com.ibm.math.BigDecimal("2")).divide(new com.ibm.math.BigDecimal("3"),4,rd).toString()).equals("0.6666");
+  
+  ru=com.ibm.math.MathContext.ROUND_UNNECESSARY; // check for some 0 residues
+  (new Test("div090")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5"),4,ru).toString()).equals("200.0000");
+  (new Test("div091")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("50"),4,ru).toString()).equals("20.0000");
+  (new Test("div092")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("500"),4,ru).toString()).equals("2.0000");
+  (new Test("div093")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),4,ru).toString()).equals("0.2000");
+  (new Test("div094")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),3,ru).toString()).equals("0.200");
+  (new Test("div095")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),2,ru).toString()).equals("0.20");
+  (new Test("div096")).ok=((new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),1,ru).toString()).equals("0.2");
+  
+  // check rounding explicitly
+  (new Test("div101")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.06");
+  (new Test("div102")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.1");
+  (new Test("div103")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("1");
+  (new Test("div104")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.05");
+  (new Test("div105")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.0");
+  (new Test("div106")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0");
+  (new Test("div107")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.05");
+  (new Test("div108")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.0");
+  (new Test("div109")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0");
+  
+  (new Test("div110")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.04");
+  (new Test("div111")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.0");
+  (new Test("div112")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  (new Test("div113")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.05");
+  (new Test("div114")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.0");
+  (new Test("div115")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  (new Test("div116")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.05");
+  (new Test("div117")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.1");
+  (new Test("div118")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  
+  (new Test("div120")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.04");
+  (new Test("div121")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new Test("div122")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new Test("div123")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.05");
+  (new Test("div124")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new Test("div125")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new Test("div126")).ok=((new com.ibm.math.BigDecimal("0.150")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.15");
+  (new Test("div127")).ok=((new com.ibm.math.BigDecimal("0.150")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.2");
+  (new Test("div128")).ok=((new com.ibm.math.BigDecimal("0.150")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new Test("div129")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.06");
+  (new Test("div130")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.1");
+  (new Test("div131")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  
+  (new Test("div140")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.05");
+  (new Test("div141")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.0");
+  (new Test("div142")).ok=((new com.ibm.math.BigDecimal("0.045")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new Test("div143")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.05");
+  (new Test("div144")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.1");
+  (new Test("div145")).ok=((new com.ibm.math.BigDecimal("0.050")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new Test("div146")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.06");
+  (new Test("div147")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.1");
+  (new Test("div148")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  
+  (new Test("div150")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,2,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.06");
+  (new Test("div151")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,1,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.1");
+  (new Test("div52.")).ok=((new com.ibm.math.BigDecimal("0.055")).divide(one,0,com.ibm.math.MathContext.ROUND_UP).toString()).equals("1");
+  
+  //- error conditions ---
+  try{checknull:do{
+   ten.divide((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $32){
+   flag=true;
+  }/*checknull*/
+  (new Test("div201")).ok=flag;
+  try{checknull2:do{
+   ten.divide(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $33){
+   flag=true;
+  }/*checknull2*/
+  (new Test("div202")).ok=flag;
+  
+  try{checkscale:do{
+   (new com.ibm.math.BigDecimal("1")).divide(new com.ibm.math.BigDecimal("3"),-8,0);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $34){e=$34;
+   flag=flag&(e.getMessage()).equals("Negative scale: -8");
+  }/*checkscale*/
+  (new Test("div203")).ok=flag;
+  
+  try{rounn:do{
+   (new com.ibm.math.BigDecimal("1000")).divide(new com.ibm.math.BigDecimal("5000"),0,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $35){ae=$35;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }/*rounn*/
+  (new Test("div204")).ok=flag;
+  try{rounn:do{
+   (new com.ibm.math.BigDecimal("1001")).divide(new com.ibm.math.BigDecimal("10"),0,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $36){ae=$36;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }/*rounn*/
+  (new Test("div205")).ok=flag;
+  try{rounn:do{
+   (new com.ibm.math.BigDecimal("1001")).divide(new com.ibm.math.BigDecimal("100"),1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $37){ae=$37;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }/*rounn*/
+  (new Test("div206")).ok=flag;
+  try{rounn:do{
+   (new com.ibm.math.BigDecimal("10001")).divide(new com.ibm.math.BigDecimal("10000"),1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $38){ae=$38;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }/*rounn*/
+  (new Test("div207")).ok=flag;
+  try{rounn:do{
+   (new com.ibm.math.BigDecimal("1.0001")).divide(new com.ibm.math.BigDecimal("1"),1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $39){ae=$39;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }/*rounn*/
+  (new Test("div208")).ok=flag;
+  
+  try{div0:do{
+   (new com.ibm.math.BigDecimal("5")).divide(new com.ibm.math.BigDecimal("0.00"));
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $40){ae=$40;
+   flag=(ae.getMessage()).equals("Divide by 0");
+  }/*div0*/
+  (new Test("div209")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.divide(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $41){ae=$41;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("div210")).ok=flag;
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.divide(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $42){ae=$42;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("div211")).ok=flag;
+  
+  summary("divide");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#divideInteger} method. */
+ 
+ public void diagdivideInteger(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  (new Test("dvI001")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("101");
+  (new Test("dvI002")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("101");
+  (new Test("dvI003")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("33");
+  (new Test("dvI004")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("33");
+  (new Test("dvI005")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2");
+  (new Test("dvI006")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("2");
+  (new Test("dvI007")).ok=((new com.ibm.math.BigDecimal("18")).divideInteger(new com.ibm.math.BigDecimal("18"),mcdef).toString()).equals("1");
+  (new Test("dvI008")).ok=((new com.ibm.math.BigDecimal("1120")).divideInteger(new com.ibm.math.BigDecimal("1000"),mcdef).toString()).equals("1");
+  (new Test("dvI009")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new Test("dvI010")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new Test("dvI011")).ok=((new com.ibm.math.BigDecimal("0.5")).divideInteger(new com.ibm.math.BigDecimal("2.000"),mcdef).toString()).equals("0");
+  (new Test("dvI012")).ok=((new com.ibm.math.BigDecimal("8.005")).divideInteger(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("1");
+  (new Test("dvI013")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("2");
+  (new Test("dvI014")).ok=((new com.ibm.math.BigDecimal("0")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0");
+  (new Test("dvI015")).ok=((new com.ibm.math.BigDecimal("0.00")).divideInteger(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0");
+  // MC
+  (new Test("dvI016")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2"),mce).toString()).equals("2");
+  (new Test("dvI017")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2"),mc6).toString()).equals("2");
+  
+  // Fixed --
+  (new Test("dvI021")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("101");
+  (new Test("dvI022")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("101");
+  (new Test("dvI023")).ok=((new com.ibm.math.BigDecimal("101.3")).divideInteger(new com.ibm.math.BigDecimal("3")).toString()).equals("33");
+  (new Test("dvI024")).ok=((new com.ibm.math.BigDecimal("101.0")).divideInteger(new com.ibm.math.BigDecimal("3")).toString()).equals("33");
+  (new Test("dvI025")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("2");
+  (new Test("dvI026")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("1")).toString()).equals("2");
+  (new Test("dvI027")).ok=((new com.ibm.math.BigDecimal("18")).divideInteger(new com.ibm.math.BigDecimal("18")).toString()).equals("1");
+  (new Test("dvI028")).ok=((new com.ibm.math.BigDecimal("1120")).divideInteger(new com.ibm.math.BigDecimal("1000")).toString()).equals("1");
+  (new Test("dvI029")).ok=((new com.ibm.math.BigDecimal("2.4")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new Test("dvI030")).ok=((new com.ibm.math.BigDecimal("2.400")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new Test("dvI031")).ok=((new com.ibm.math.BigDecimal("0.5")).divideInteger(new com.ibm.math.BigDecimal("2.000")).toString()).equals("0");
+  (new Test("dvI032")).ok=((new com.ibm.math.BigDecimal("8.005")).divideInteger(new com.ibm.math.BigDecimal("7")).toString()).equals("1");
+  (new Test("dvI033")).ok=((new com.ibm.math.BigDecimal("5")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("2");
+  (new Test("dvI034")).ok=((new com.ibm.math.BigDecimal("0")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("0");
+  (new Test("dvI035")).ok=((new com.ibm.math.BigDecimal("0.00")).divideInteger(new com.ibm.math.BigDecimal("2")).toString()).equals("0");
+  
+  try{checknull:do{
+   ten.divideInteger((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $43){
+   flag=true;
+  }/*checknull*/
+  (new Test("dvI101")).ok=flag;
+  try{checknull2:do{
+   ten.divideInteger(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $44){
+   flag=true;
+  }/*checknull2*/
+  (new Test("dvI102")).ok=flag;
+  
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.divideInteger(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $45){ae=$45;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("dvI103")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.divideInteger(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $46){ae=$46;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("dvI104")).ok=flag;
+  
+  summary("divideInteger");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#max} method. */
+ 
+ public void diagmax(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  // we assume add/subtract test function; this and min just
+  // test existence and test the truth table
+  (new Test("max001")).ok=((new com.ibm.math.BigDecimal("5")).max(new com.ibm.math.BigDecimal("2")).toString()).equals("5");
+  (new Test("max002")).ok=((new com.ibm.math.BigDecimal("5")).max(new com.ibm.math.BigDecimal("5")).toString()).equals("5");
+  (new Test("max003")).ok=((new com.ibm.math.BigDecimal("2")).max(new com.ibm.math.BigDecimal("7")).toString()).equals("7");
+  (new Test("max004")).ok=((new com.ibm.math.BigDecimal("2")).max(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("7");
+  (new Test("max005")).ok=((new com.ibm.math.BigDecimal("2")).max(new com.ibm.math.BigDecimal("7"),mc6).toString()).equals("7");
+  (new Test("max006")).ok=((new com.ibm.math.BigDecimal("2E+3")).max(new com.ibm.math.BigDecimal("7")).toString()).equals("2000");
+  (new Test("max007")).ok=((new com.ibm.math.BigDecimal("2E+3")).max(new com.ibm.math.BigDecimal("7"),mc3).toString()).equals("2E+3");
+  (new Test("max008")).ok=((new com.ibm.math.BigDecimal("7")).max(new com.ibm.math.BigDecimal("2E+3")).toString()).equals("2000");
+  (new Test("max009")).ok=((new com.ibm.math.BigDecimal("7")).max(new com.ibm.math.BigDecimal("2E+3"),mc3).toString()).equals("2E+3");
+  try{checknull:do{
+   ten.max((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $47){
+   flag=true;
+  }/*checknull*/
+  (new Test("max010")).ok=flag;
+  try{checknull2:do{
+   ten.max(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $48){
+   flag=true;
+  }/*checknull2*/
+  (new Test("max011")).ok=flag;
+  try{checkdigits:do{
+   tenlong.max(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $49){ae=$49;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("max012")).ok=flag;
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.max(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $50){ae=$50;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("max013")).ok=flag;
+  summary("max");
+  return;}
+
+ /** Test the {@link BigDecimal#min} method. */
+ 
+ public void diagmin(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal minx=null;
+  java.lang.ArithmeticException ae=null;
+  // we assume add/subtract test function; this and max just
+  // test existence and test the truth table
+  
+  (new Test("min001")).ok=((new com.ibm.math.BigDecimal("5")).min(new com.ibm.math.BigDecimal("2")).toString()).equals("2");
+  (new Test("min002")).ok=((new com.ibm.math.BigDecimal("5")).min(new com.ibm.math.BigDecimal("5")).toString()).equals("5");
+  (new Test("min003")).ok=((new com.ibm.math.BigDecimal("2")).min(new com.ibm.math.BigDecimal("7")).toString()).equals("2");
+  (new Test("min004")).ok=((new com.ibm.math.BigDecimal("2")).min(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("2");
+  (new Test("min005")).ok=((new com.ibm.math.BigDecimal("1")).min(new com.ibm.math.BigDecimal("7"),mc6).toString()).equals("1");
+  (new Test("min006")).ok=((new com.ibm.math.BigDecimal("-2E+3")).min(new com.ibm.math.BigDecimal("7")).toString()).equals("-2000");
+  (new Test("min007")).ok=((new com.ibm.math.BigDecimal("-2E+3")).min(new com.ibm.math.BigDecimal("7"),mc3).toString()).equals("-2E+3");
+  (new Test("min008")).ok=((new com.ibm.math.BigDecimal("7")).min(new com.ibm.math.BigDecimal("-2E+3")).toString()).equals("-2000");
+  (new Test("min009")).ok=((new com.ibm.math.BigDecimal("7")).min(new com.ibm.math.BigDecimal("-2E+3"),mc3).toString()).equals("-2E+3");
+  try{checknull:do{
+   minx=ten;
+   minx.min((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $51){
+   flag=true;
+  }/*checknull*/
+  (new Test("min010")).ok=flag;
+  try{checknull2:do{
+   minx=ten;
+   minx.min(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $52){
+   flag=true;
+  }/*checknull2*/
+  (new Test("min011")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.min(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $53){ae=$53;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("min012")).ok=flag;
+  try{checkdigits:do{
+   (new com.ibm.math.BigDecimal(9)).min(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $54){ae=$54;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("min013")).ok=flag;
+  summary("min");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#multiply} method. */
+ 
+ public void diagmultiply(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal l9;
+  com.ibm.math.BigDecimal l77e;
+  com.ibm.math.BigDecimal l12345;
+  com.ibm.math.BigDecimal edge;
+  com.ibm.math.BigDecimal tenedge;
+  com.ibm.math.BigDecimal hunedge;
+  com.ibm.math.BigDecimal opo;
+  com.ibm.math.BigDecimal d1=null;
+  com.ibm.math.BigDecimal d2=null;
+  java.lang.ArithmeticException oe=null;
+  java.lang.ArithmeticException ae=null;
+  
+  (new Test("mul001")).ok=((new com.ibm.math.BigDecimal("2")).multiply(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("6");
+  (new Test("mul002")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("5");
+  (new Test("mul003")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("10");
+  (new Test("mul004")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("2.40");
+  (new Test("mul005")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0");
+  (new Test("mul006")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("-2"),mcdef).toString()).equals("-2.40");
+  (new Test("mul007")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("-2.40");
+  (new Test("mul008")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0");
+  (new Test("mul009")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("-2"),mcdef).toString()).equals("2.40");
+  (new Test("mul010")).ok=((new com.ibm.math.BigDecimal("5.09")).multiply(new com.ibm.math.BigDecimal("7.1"),mcdef).toString()).equals("36.139");
+  (new Test("mul011")).ok=((new com.ibm.math.BigDecimal("2.5")).multiply(new com.ibm.math.BigDecimal("4"),mcdef).toString()).equals("10.0");
+  (new Test("mul012")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4"),mcdef).toString()).equals("10.00");
+  (new Test("mul013")).ok=((new com.ibm.math.BigDecimal("1.23456789")).multiply(new com.ibm.math.BigDecimal("1.00000000"),mcdef).toString()).equals("1.23456789");
+  
+  (new Test("mul014")).ok=((new com.ibm.math.BigDecimal("9.999999999")).multiply(new com.ibm.math.BigDecimal("9.999999999"),mcdef).toString()).equals("100.000000");
+  
+  (new Test("mul015")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4"),mcdef).toString()).equals("10.00");
+  (new Test("mul016")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4"),mc6).toString()).equals("10.00");
+  (new Test("mul017")).ok=((new com.ibm.math.BigDecimal("9.999999999")).multiply(new com.ibm.math.BigDecimal("9.999999999"),mc6).toString()).equals("100.000");
+  
+  
+  (new Test("mul020")).ok=((new com.ibm.math.BigDecimal("2")).multiply(new com.ibm.math.BigDecimal("3")).toString()).equals("6");
+  (new Test("mul021")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("1")).toString()).equals("5");
+  (new Test("mul022")).ok=((new com.ibm.math.BigDecimal("5")).multiply(new com.ibm.math.BigDecimal("2")).toString()).equals("10");
+  (new Test("mul023")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("2")).toString()).equals("2.40");
+  (new Test("mul024")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("0")).toString()).equals("0.00");
+  (new Test("mul025")).ok=((new com.ibm.math.BigDecimal("1.20")).multiply(new com.ibm.math.BigDecimal("-2")).toString()).equals("-2.40");
+  (new Test("mul026")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("2")).toString()).equals("-2.40");
+  (new Test("mul027")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("0")).toString()).equals("0.00");
+  (new Test("mul028")).ok=((new com.ibm.math.BigDecimal("-1.20")).multiply(new com.ibm.math.BigDecimal("-2")).toString()).equals("2.40");
+  (new Test("mul029")).ok=((new com.ibm.math.BigDecimal("5.09")).multiply(new com.ibm.math.BigDecimal("7.1")).toString()).equals("36.139");
+  (new Test("mul030")).ok=((new com.ibm.math.BigDecimal("2.5")).multiply(new com.ibm.math.BigDecimal("4")).toString()).equals("10.0");
+  (new Test("mul031")).ok=((new com.ibm.math.BigDecimal("2.50")).multiply(new com.ibm.math.BigDecimal("4")).toString()).equals("10.00");
+  (new Test("mul032")).ok=((new com.ibm.math.BigDecimal("1.23456789")).multiply(new com.ibm.math.BigDecimal("1.00000000")).toString()).equals("1.2345678900000000");
+  
+  (new Test("mul033")).ok=((new com.ibm.math.BigDecimal("1234.56789")).multiply(new com.ibm.math.BigDecimal("-1000.00000")).toString()).equals("-1234567.8900000000");
+  
+  (new Test("mul034")).ok=((new com.ibm.math.BigDecimal("-1234.56789")).multiply(new com.ibm.math.BigDecimal("1000.00000")).toString()).equals("-1234567.8900000000");
+  
+  (new Test("mul035")).ok=((new com.ibm.math.BigDecimal("9.999999999")).multiply(new com.ibm.math.BigDecimal("9.999999999")).toString()).equals("99.999999980000000001");
+  
+  (new Test("mul036")).ok=((new com.ibm.math.BigDecimal("5.00")).multiply(new com.ibm.math.BigDecimal("1E-3")).toString()).equals("0.00500");
+  (new Test("mul037")).ok=((new com.ibm.math.BigDecimal("00.00")).multiply(new com.ibm.math.BigDecimal("0.000")).toString()).equals("0.00000");
+  (new Test("mul038")).ok=((new com.ibm.math.BigDecimal("00.00")).multiply(new com.ibm.math.BigDecimal("0E-3")).toString()).equals("0.00"); // rhs is '0'
+  // 1999.12.21: next one is a edge case if intermediate longs are used
+  (new Test("mul039")).ok=((new com.ibm.math.BigDecimal("999999999999")).multiply(new com.ibm.math.BigDecimal("9765625")).toString()).equals("9765624999990234375");
+  
+  l9=new com.ibm.math.BigDecimal("123456789E+10");
+  l77e=new com.ibm.math.BigDecimal("77E-20");
+  (new Test("mul040")).ok=(l9.multiply(new com.ibm.math.BigDecimal("3456757")).toString()).equals("4267601195732730000000000");
+  (new Test("mul041")).ok=(l9.multiply(new com.ibm.math.BigDecimal("3456757"),mc3).toString()).equals("4.26E+24");
+  (new Test("mul042")).ok=(l9.multiply(l77e).toString()).equals("0.95061727530000000000");
+  (new Test("mul043")).ok=(l9.multiply(l77e,mc3).toString()).equals("0.947");
+  (new Test("mul044")).ok=(l77e.multiply(l9,mc3).toString()).equals("0.947");
+  
+  l12345=new com.ibm.math.BigDecimal("123.45");
+  (new Test("mul050")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e11"),mcdef).toString()).equals("1.2345E+13");
+  (new Test("mul051")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e11"),mcs).toString()).equals("1.2345E+13");
+  (new Test("mul052")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e+9"),mce).toString()).equals("123.45E+9");
+  (new Test("mul053")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e10"),mce).toString()).equals("1.2345E+12");
+  (new Test("mul054")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e11"),mce).toString()).equals("12.345E+12");
+  (new Test("mul055")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e12"),mce).toString()).equals("123.45E+12");
+  (new Test("mul056")).ok=(l12345.multiply(new com.ibm.math.BigDecimal("1e13"),mce).toString()).equals("1.2345E+15");
+  
+  // test some cases that are close to exponent overflow
+  (new Test("mul060")).ok=(one.multiply(new com.ibm.math.BigDecimal("9e999999999"),mcs).toString()).equals("9E+999999999");
+  (new Test("mul061")).ok=(one.multiply(new com.ibm.math.BigDecimal("9.9e999999999"),mcs).toString()).equals("9.9E+999999999");
+  (new Test("mul062")).ok=(one.multiply(new com.ibm.math.BigDecimal("9.99e999999999"),mcs).toString()).equals("9.99E+999999999");
+  (new Test("mul063")).ok=(ten.multiply(new com.ibm.math.BigDecimal("9e999999999"),mce).toString()).equals("90E+999999999");
+  (new Test("mul064")).ok=(ten.multiply(new com.ibm.math.BigDecimal("9.9e999999999"),mce).toString()).equals("99.0E+999999999");
+  edge=new com.ibm.math.BigDecimal("9.999e999999999");
+  tenedge=ten.multiply(edge,mce);
+  (new Test("mul065")).ok=(tenedge.toString()).equals("99.990E+999999999");
+  hunedge=ten.multiply(tenedge,mce);
+  (new Test("mul066")).ok=(hunedge.toString()).equals("999.900E+999999999");
+  opo=new com.ibm.math.BigDecimal("0.1"); // one tenth
+  (new Test("mul067")).ok=(opo.multiply(new com.ibm.math.BigDecimal("9e-999999998"),mcs).toString()).equals("9E-999999999");
+  (new Test("mul068")).ok=(opo.multiply(new com.ibm.math.BigDecimal("99e-999999998"),mcs).toString()).equals("9.9E-999999998");
+  (new Test("mul069")).ok=(opo.multiply(new com.ibm.math.BigDecimal("999e-999999998"),mcs).toString()).equals("9.99E-999999997");
+  
+  (new Test("mul070")).ok=(opo.multiply(new com.ibm.math.BigDecimal("9e-999999998"),mce).toString()).equals("9E-999999999");
+  (new Test("mul071")).ok=(opo.multiply(new com.ibm.math.BigDecimal("99e-999999998"),mce).toString()).equals("99E-999999999");
+  (new Test("mul072")).ok=(opo.multiply(new com.ibm.math.BigDecimal("999e-999999998"),mce).toString()).equals("999E-999999999");
+  (new Test("mul073")).ok=(opo.multiply(new com.ibm.math.BigDecimal("999e-999999997"),mce).toString()).equals("9.99E-999999996");
+  (new Test("mul074")).ok=(opo.multiply(new com.ibm.math.BigDecimal("9999e-999999997"),mce).toString()).equals("99.99E-999999996");
+  (new Test("mul074")).ok=(opo.multiply(new com.ibm.math.BigDecimal("99999e-999999997"),mce).toString()).equals("999.99E-999999996");
+  
+  // test some intermediate lengths
+  (new Test("mul080")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789"),mcs).toString()).equals("12345678.9");
+  (new Test("mul081")).ok=(opo.multiply(new com.ibm.math.BigDecimal("12345678901234"),mcs).toString()).equals("1.23456789E+12");
+  (new Test("mul082")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789123456789"),mcs).toString()).equals("1.23456789E+16");
+  (new Test("mul083")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789"),mcfd).toString()).equals("12345678.9");
+  (new Test("mul084")).ok=(opo.multiply(new com.ibm.math.BigDecimal("12345678901234"),mcfd).toString()).equals("1234567890123.4");
+  (new Test("mul085")).ok=(opo.multiply(new com.ibm.math.BigDecimal("123456789123456789"),mcfd).toString()).equals("12345678912345678.9");
+  
+  (new Test("mul090")).ok=((new com.ibm.math.BigDecimal("123456789")).multiply(opo,mcs).toString()).equals("12345678.9");
+  (new Test("mul091")).ok=((new com.ibm.math.BigDecimal("12345678901234")).multiply(opo,mcs).toString()).equals("1.23456789E+12");
+  (new Test("mul092")).ok=((new com.ibm.math.BigDecimal("123456789123456789")).multiply(opo,mcs).toString()).equals("1.23456789E+16");
+  (new Test("mul093")).ok=((new com.ibm.math.BigDecimal("123456789")).multiply(opo,mcfd).toString()).equals("12345678.9");
+  (new Test("mul094")).ok=((new com.ibm.math.BigDecimal("12345678901234")).multiply(opo,mcfd).toString()).equals("1234567890123.4");
+  (new Test("mul095")).ok=((new com.ibm.math.BigDecimal("123456789123456789")).multiply(opo,mcfd).toString()).equals("12345678912345678.9");
+  
+  // test some more edge cases and carries
+  (new Test("mul101")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9")).toString()).equals("81");
+  (new Test("mul102")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90")).toString()).equals("810");
+  (new Test("mul103")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900")).toString()).equals("8100");
+  (new Test("mul104")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000")).toString()).equals("81000");
+  (new Test("mul105")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000")).toString()).equals("810000");
+  (new Test("mul106")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000")).toString()).equals("8100000");
+  (new Test("mul107")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000")).toString()).equals("81000000");
+  (new Test("mul108")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000")).toString()).equals("810000000");
+  (new Test("mul109")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000")).toString()).equals("8100000000");
+  (new Test("mul110")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000")).toString()).equals("81000000000");
+  (new Test("mul111")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000")).toString()).equals("810000000000");
+  (new Test("mul112")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000")).toString()).equals("8100000000000");
+  (new Test("mul113")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000")).toString()).equals("81000000000000");
+  (new Test("mul114")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000")).toString()).equals("810000000000000");
+  (new Test("mul115")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000000")).toString()).equals("8100000000000000");
+  (new Test("mul116")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000000")).toString()).equals("81000000000000000");
+  (new Test("mul117")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000000")).toString()).equals("810000000000000000");
+  (new Test("mul118")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000000000")).toString()).equals("8100000000000000000");
+  (new Test("mul119")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000000000")).toString()).equals("81000000000000000000");
+  (new Test("mul120")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000000000")).toString()).equals("810000000000000000000");
+  (new Test("mul121")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("900000000000000000000")).toString()).equals("8100000000000000000000");
+  (new Test("mul122")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("9000000000000000000000")).toString()).equals("81000000000000000000000");
+  (new Test("mul123")).ok=((new com.ibm.math.BigDecimal("9")).multiply(new com.ibm.math.BigDecimal("90000000000000000000000")).toString()).equals("810000000000000000000000");
+  // test some more edge cases without carries
+  (new Test("mul131")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3")).toString()).equals("9");
+  (new Test("mul132")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30")).toString()).equals("90");
+  (new Test("mul133")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300")).toString()).equals("900");
+  (new Test("mul134")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000")).toString()).equals("9000");
+  (new Test("mul135")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000")).toString()).equals("90000");
+  (new Test("mul136")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000")).toString()).equals("900000");
+  (new Test("mul137")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000")).toString()).equals("9000000");
+  (new Test("mul138")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000")).toString()).equals("90000000");
+  (new Test("mul139")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000")).toString()).equals("900000000");
+  (new Test("mul140")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000")).toString()).equals("9000000000");
+  (new Test("mul141")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000")).toString()).equals("90000000000");
+  (new Test("mul142")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000")).toString()).equals("900000000000");
+  (new Test("mul143")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000")).toString()).equals("9000000000000");
+  (new Test("mul144")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000")).toString()).equals("90000000000000");
+  (new Test("mul145")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000000")).toString()).equals("900000000000000");
+  (new Test("mul146")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000000")).toString()).equals("9000000000000000");
+  (new Test("mul147")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000000")).toString()).equals("90000000000000000");
+  (new Test("mul148")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000000000")).toString()).equals("900000000000000000");
+  (new Test("mul149")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000000000")).toString()).equals("9000000000000000000");
+  (new Test("mul150")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000000000")).toString()).equals("90000000000000000000");
+  (new Test("mul151")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("300000000000000000000")).toString()).equals("900000000000000000000");
+  (new Test("mul152")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("3000000000000000000000")).toString()).equals("9000000000000000000000");
+  (new Test("mul153")).ok=((new com.ibm.math.BigDecimal("3")).multiply(new com.ibm.math.BigDecimal("30000000000000000000000")).toString()).equals("90000000000000000000000");
+  
+  try{checknull:do{
+   ten.multiply((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $55){
+   flag=true;
+  }/*checknull*/
+  (new Test("mul200")).ok=flag;
+  try{checknull2:do{
+   ten.multiply(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $56){
+   flag=true;
+  }/*checknull2*/
+  (new Test("mul201")).ok=flag;
+  
+  try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("-1.23456789012345E-0");
+   d2=new com.ibm.math.BigDecimal("9E+999999999");
+   d1.multiply(d2,mcdef); // marginal overflow
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $57){oe=$57;
+   flag=(oe.getMessage()).equals("Exponent Overflow: 1000000000");
+  }/*checkover*/
+  (new Test("mul202")).ok=flag;
+  try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("112");
+   d2=new com.ibm.math.BigDecimal("9E+999999999");
+   d1.multiply(d2,mce); // marginal overflow, engineering
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $58){oe=$58;
+   flag=(oe.getMessage()).equals("Exponent Overflow: 1000000002");
+  }/*checkover*/
+  (new Test("mul203")).ok=flag;
+  
+  try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("0.9");
+   d2=new com.ibm.math.BigDecimal("1E-999999999");
+   d1.multiply(d2,mcdef); // marginal negative overflow
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $59){oe=$59;
+   flag=(oe.getMessage()).equals("Exponent Overflow: -1000000000");
+  }/*checkover*/
+  (new Test("mul204")).ok=flag;
+  try{checkover:do{
+   d1=new com.ibm.math.BigDecimal("0.9");
+   d2=new com.ibm.math.BigDecimal("1E-999999999");
+   d1.multiply(d2,mce); // marginal negative overflow, engineering
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $60){oe=$60;
+   flag=(oe.getMessage()).equals("Exponent Overflow: -1000000002");
+  }/*checkover*/
+  (new Test("mul205")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.multiply(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $61){ae=$61;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("mul206")).ok=flag;
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.TEN.multiply(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $62){ae=$62;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("mul207")).ok=flag;
+  
+  summary("multiply");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#negate} method. */
+ 
+ public void diagnegate(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  (new Test("neg001")).ok=((new com.ibm.math.BigDecimal("2")).negate().toString()).equals("-2");
+  (new Test("neg002")).ok=((new com.ibm.math.BigDecimal("-2")).negate().toString()).equals("2");
+  (new Test("neg003")).ok=((new com.ibm.math.BigDecimal("2.00")).negate(mcdef).toString()).equals("-2.00");
+  (new Test("neg004")).ok=((new com.ibm.math.BigDecimal("-2.00")).negate(mcdef).toString()).equals("2.00");
+  (new Test("neg005")).ok=((new com.ibm.math.BigDecimal("0")).negate(mcdef).toString()).equals("0");
+  (new Test("neg006")).ok=((new com.ibm.math.BigDecimal("0.00")).negate(mcdef).toString()).equals("0");
+  (new Test("neg007")).ok=((new com.ibm.math.BigDecimal("00.0")).negate(mcdef).toString()).equals("0");
+  (new Test("neg008")).ok=((new com.ibm.math.BigDecimal("00")).negate(mcdef).toString()).equals("0");
+  
+  (new Test("neg010")).ok=((new com.ibm.math.BigDecimal("2.00")).negate().toString()).equals("-2.00");
+  (new Test("neg011")).ok=((new com.ibm.math.BigDecimal("-2.00")).negate().toString()).equals("2.00");
+  (new Test("neg012")).ok=((new com.ibm.math.BigDecimal("0")).negate().toString()).equals("0");
+  (new Test("neg013")).ok=((new com.ibm.math.BigDecimal("0.00")).negate().toString()).equals("0.00");
+  (new Test("neg014")).ok=((new com.ibm.math.BigDecimal("00.0")).negate().toString()).equals("0.0");
+  (new Test("neg015")).ok=((new com.ibm.math.BigDecimal("00.00")).negate().toString()).equals("0.00");
+  (new Test("neg016")).ok=((new com.ibm.math.BigDecimal("00")).negate().toString()).equals("0");
+  
+  (new Test("neg020")).ok=((new com.ibm.math.BigDecimal("-2000000")).negate().toString()).equals("2000000");
+  (new Test("neg021")).ok=((new com.ibm.math.BigDecimal("-2000000")).negate(mcdef).toString()).equals("2000000");
+  (new Test("neg022")).ok=((new com.ibm.math.BigDecimal("-2000000")).negate(mc6).toString()).equals("2.00000E+6");
+  (new Test("neg023")).ok=((new com.ibm.math.BigDecimal("2000000")).negate(mc6).toString()).equals("-2.00000E+6");
+  
+  try{checknull:do{
+   ten.negate((com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $63){
+   flag=true;
+  }/*checknull*/
+  (new Test("neg100")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.negate(mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $64){ae=$64;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("neg101")).ok=flag;
+  summary("negate");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#plus} method. */
+ 
+ public void diagplus(){
+  boolean flag=false;
+  com.ibm.math.MathContext mche1;
+  java.lang.ArithmeticException ae=null;
+  
+  (new Test("plu001")).ok=((new com.ibm.math.BigDecimal("2")).plus(mcdef).toString()).equals("2");
+  (new Test("plu002")).ok=((new com.ibm.math.BigDecimal("-2")).plus(mcdef).toString()).equals("-2");
+  (new Test("plu003")).ok=((new com.ibm.math.BigDecimal("2.00")).plus(mcdef).toString()).equals("2.00");
+  (new Test("plu004")).ok=((new com.ibm.math.BigDecimal("-2.00")).plus(mcdef).toString()).equals("-2.00");
+  (new Test("plu005")).ok=((new com.ibm.math.BigDecimal("0")).plus(mcdef).toString()).equals("0");
+  (new Test("plu006")).ok=((new com.ibm.math.BigDecimal("0.00")).plus(mcdef).toString()).equals("0");
+  (new Test("plu007")).ok=((new com.ibm.math.BigDecimal("00.0")).plus(mcdef).toString()).equals("0");
+  (new Test("plu008")).ok=((new com.ibm.math.BigDecimal("00")).plus(mcdef).toString()).equals("0");
+  
+  (new Test("plu010")).ok=((new com.ibm.math.BigDecimal("2")).plus().toString()).equals("2");
+  (new Test("plu011")).ok=((new com.ibm.math.BigDecimal("-2")).plus().toString()).equals("-2");
+  (new Test("plu012")).ok=((new com.ibm.math.BigDecimal("2.00")).plus().toString()).equals("2.00");
+  (new Test("plu013")).ok=((new com.ibm.math.BigDecimal("-2.00")).plus().toString()).equals("-2.00");
+  (new Test("plu014")).ok=((new com.ibm.math.BigDecimal("0")).plus().toString()).equals("0");
+  (new Test("plu015")).ok=((new com.ibm.math.BigDecimal("0.00")).plus().toString()).equals("0.00");
+  (new Test("plu016")).ok=((new com.ibm.math.BigDecimal("00.0")).plus().toString()).equals("0.0");
+  (new Test("plu017")).ok=((new com.ibm.math.BigDecimal("00.00")).plus().toString()).equals("0.00");
+  (new Test("plu018")).ok=((new com.ibm.math.BigDecimal("00")).plus().toString()).equals("0");
+  
+  (new Test("plu020")).ok=((new com.ibm.math.BigDecimal("-2000000")).plus().toString()).equals("-2000000");
+  (new Test("plu021")).ok=((new com.ibm.math.BigDecimal("-2000000")).plus(mcdef).toString()).equals("-2000000");
+  (new Test("plu022")).ok=((new com.ibm.math.BigDecimal("-2000000")).plus(mc6).toString()).equals("-2.00000E+6");
+  (new Test("plu023")).ok=((new com.ibm.math.BigDecimal("2000000")).plus(mc6).toString()).equals("2.00000E+6");
+  
+  // try some exotic but silly rounding [format checks more varieties]
+  // [this mostly ensures we can set up and pass the setting]
+  mche1=new com.ibm.math.MathContext(1,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_HALF_EVEN);
+  (new Test("plu030")).ok=((new com.ibm.math.BigDecimal("0.24")).plus(mche1).toString()).equals("0.2");
+  (new Test("plu031")).ok=((new com.ibm.math.BigDecimal("0.25")).plus(mche1).toString()).equals("0.2");
+  (new Test("plu032")).ok=((new com.ibm.math.BigDecimal("0.26")).plus(mche1).toString()).equals("0.3");
+  (new Test("plu033")).ok=((new com.ibm.math.BigDecimal("0.14")).plus(mche1).toString()).equals("0.1");
+  (new Test("plu034")).ok=((new com.ibm.math.BigDecimal("0.15")).plus(mche1).toString()).equals("0.2");
+  (new Test("plu035")).ok=((new com.ibm.math.BigDecimal("0.16")).plus(mche1).toString()).equals("0.2");
+  
+  (new Test("plu040")).ok=((new com.ibm.math.BigDecimal("0.251")).plus(mche1).toString()).equals("0.3");
+  (new Test("plu041")).ok=((new com.ibm.math.BigDecimal("0.151")).plus(mche1).toString()).equals("0.2");
+  
+  (new Test("plu050")).ok=((new com.ibm.math.BigDecimal("-0.24")).plus(mche1).toString()).equals("-0.2");
+  (new Test("plu051")).ok=((new com.ibm.math.BigDecimal("-0.25")).plus(mche1).toString()).equals("-0.2");
+  (new Test("plu052")).ok=((new com.ibm.math.BigDecimal("-0.26")).plus(mche1).toString()).equals("-0.3");
+  (new Test("plu053")).ok=((new com.ibm.math.BigDecimal("-0.14")).plus(mche1).toString()).equals("-0.1");
+  (new Test("plu054")).ok=((new com.ibm.math.BigDecimal("-0.15")).plus(mche1).toString()).equals("-0.2");
+  (new Test("plu055")).ok=((new com.ibm.math.BigDecimal("-0.16")).plus(mche1).toString()).equals("-0.2");
+  
+  // more fixed, potential LHS swaps if done by add 0
+  (new Test("plu060")).ok=((new com.ibm.math.BigDecimal("-56267E-10")).plus().toString()).equals("-0.0000056267");
+  (new Test("plu061")).ok=((new com.ibm.math.BigDecimal("-56267E-5")).plus().toString()).equals("-0.56267");
+  (new Test("plu062")).ok=((new com.ibm.math.BigDecimal("-56267E-2")).plus().toString()).equals("-562.67");
+  (new Test("plu063")).ok=((new com.ibm.math.BigDecimal("-56267E-1")).plus().toString()).equals("-5626.7");
+  (new Test("plu065")).ok=((new com.ibm.math.BigDecimal("-56267E-0")).plus().toString()).equals("-56267");
+  
+  try{checknull:do{
+   ten.plus((com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $65){
+   flag=true;
+  }/*checknull*/
+  (new Test("plu100")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.plus(mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $66){ae=$66;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("plu101")).ok=flag;
+  summary("plus");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#pow} method. */
+ 
+ public void diagpow(){
+  boolean flag;
+  com.ibm.math.BigDecimal x;
+  com.ibm.math.BigDecimal temp;
+  int n=0;
+  com.ibm.math.BigDecimal vx;
+  com.ibm.math.BigDecimal vn;
+  java.lang.ArithmeticException ae=null;
+  flag=true;
+  (new Test("pow001")).ok="1".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString());
+  (new Test("pow002")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString());
+  (new Test("pow003")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1.00"),mcdef).toString());
+  (new Test("pow004")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2.00"),mcdef).toString());
+  (new Test("pow005")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2.000000000"),mcdef).toString());
+  (new Test("pow006")).ok=("1E-8").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-8"),mcdef).toString());
+  (new Test("pow007")).ok=("1E-7").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-7"),mcdef).toString());
+  (new Test("pow008")).ok="0.000001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-6"),mcdef).toString());
+  (new Test("pow009")).ok="0.00001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-5"),mcdef).toString());
+  (new Test("pow010")).ok="0.0001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-4"),mcdef).toString());
+  (new Test("pow011")).ok="0.001".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-3"),mcdef).toString());
+  (new Test("pow012")).ok="0.01".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-2"),mcdef).toString());
+  (new Test("pow013")).ok="0.1".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-1"),mcdef).toString());
+  (new Test("pow014")).ok="1".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString());
+  (new Test("pow015")).ok="10".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString());
+  (new Test("pow016")).ok="100000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("8"),mcdef).toString());
+  (new Test("pow017")).ok=("1E+9").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("9"),mcdef).toString());
+  (new Test("pow018")).ok=("1E+99").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("99"),mcdef).toString());
+  (new Test("pow019")).ok=("1E+999999999").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999999"),mcdef).toString());
+  (new Test("pow020")).ok=("1E+999999998").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999998"),mcdef).toString());
+  (new Test("pow021")).ok=("1E+999999997").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999997"),mcdef).toString());
+  (new Test("pow022")).ok=("1E+333333333").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("333333333"),mcdef).toString());
+  (new Test("pow023")).ok=("1E-333333333").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-333333333"),mcdef).toString());
+  (new Test("pow024")).ok=("1E-999999998").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-999999998"),mcdef).toString());
+  (new Test("pow025")).ok=("1E-999999999").equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-999999999"),mcdef).toString());
+  (new Test("pow026")).ok="0.5".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-1"),mcdef).toString());
+  (new Test("pow027")).ok="0.25".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-2"),mcdef).toString());
+  (new Test("pow028")).ok="0.0625".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-4"),mcdef).toString());
+  
+  (new Test("pow050")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("1");
+  (new Test("pow051")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("0");
+  (new Test("pow052")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0");
+  (new Test("pow053")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("1");
+  (new Test("pow054")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("1"),mcdef).toString()).equals("1");
+  (new Test("pow055")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new Test("pow056")).ok=((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("1");
+  (new Test("pow057")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999999"),mcdef).toString()).equals("1E+999999999");
+  (new Test("pow058")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999998"),mcdef).toString()).equals("1E+999999998");
+  (new Test("pow059")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("999999997"),mcdef).toString()).equals("1E+999999997");
+  (new Test("pow060")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("333333333"),mcdef).toString()).equals("1E+333333333");
+  (new Test("pow061")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("77"),mcdef).toString()).equals("1E+77");
+  (new Test("pow062")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("22"),mcdef).toString()).equals("1E+22");
+  (new Test("pow063")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-77"),mcdef).toString()).equals("1E-77");
+  (new Test("pow064")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("-22"),mcdef).toString()).equals("1E-22");
+  (new Test("pow065")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-1"),mcdef).toString()).equals("0.5");
+  (new Test("pow066")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-2"),mcdef).toString()).equals("0.25");
+  (new Test("pow067")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("-4"),mcdef).toString()).equals("0.0625");
+  (new Test("pow068")).ok=((new com.ibm.math.BigDecimal("6.0")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("36");
+  (new Test("pow069")).ok=((new com.ibm.math.BigDecimal("-3")).pow(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("9");/* from book */
+  (new Test("pow070")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("2"),mcdef).pow(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("64");/* from book */
+  
+  // 1998.12.14 Next test removed as pow() no longer rounds RHS [as per ANSI]
+  // Test('pow071').ok=BigDecimal('2').pow(BigDecimal('2.000000001'),mcdef).toString == '4'/* check input rounding */
+  
+  /* General tests from original Rexx diagnostics */
+  x=new com.ibm.math.BigDecimal("0.5");
+  temp=com.ibm.math.BigDecimal.ONE;
+  flag=true;
+  {n=1;n:for(;n<=10;n++){
+   temp=temp.multiply(x).divide(com.ibm.math.BigDecimal.ONE);
+   flag=flag&(x.pow(new com.ibm.math.BigDecimal(n),mcdef).toString()).equals(temp.toString());
+   }
+  }/*n*/
+  (new Test("pow080")).ok=flag;
+  
+  x=new com.ibm.math.BigDecimal("2");
+  temp=com.ibm.math.BigDecimal.ONE;
+  flag=true;
+  {n=1;n:for(;n<=29;n++){
+   temp=temp.multiply(x).divide(com.ibm.math.BigDecimal.ONE);
+   flag=flag&(x.pow(new com.ibm.math.BigDecimal(n),mcdef).toString()).equals(temp.toString());
+   flag=flag&(x.pow(new com.ibm.math.BigDecimal((int)-n),mcdef).toString()).equals(com.ibm.math.BigDecimal.ONE.divide(temp,mcdef).toString());
+   /* Note that rounding errors are possible for larger "n" */
+   /* due to the information content of the exponent        */
+   }
+  }/*n*/
+  (new Test("pow081")).ok=flag;
+  
+  /* The Vienna case.  Checks both setup and 1/acc working precision */
+  // Modified 1998.12.14 as RHS no longer rounded before use (must fit)
+  // Modified 1990.02.04 as LHS is now rounded (instead of truncated to guard)
+  vx=new com.ibm.math.BigDecimal("123456789E+10"); // lhs .. rounded to 1.23E+18
+  vn=new com.ibm.math.BigDecimal("-1.23000e+2"); // rhs .. [was: -1.23455e+2, rounds to -123]
+  (new Test("pow090")).ok=(vx.pow(vn,mc3).toString()).equals("8.74E-2226");
+  
+  //- fixed point versions ---
+  (new Test("pow101")).ok="1".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0")).toString());
+  (new Test("pow102")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1")).toString());
+  (new Test("pow103")).ok="0.3".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("1.00")).toString());
+  (new Test("pow104")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2")).toString());
+  (new Test("pow105")).ok="0.09".equals((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("2.00")).toString());
+  (new Test("pow106")).ok="10".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("1")).toString());
+  (new Test("pow107")).ok="100000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("8")).toString());
+  (new Test("pow108")).ok="1000000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("9")).toString());
+  (new Test("pow109")).ok="10000000000".equals((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("10")).toString());
+  (new Test("pow110")).ok="1".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("0")).toString());
+  (new Test("pow111")).ok="16".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("4")).toString());
+  (new Test("pow112")).ok="256".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("8")).toString());
+  (new Test("pow113")).ok="1024".equals((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("10")).toString());
+  (new Test("pow114")).ok="1.0510100501".equals((new com.ibm.math.BigDecimal("1.01")).pow(new com.ibm.math.BigDecimal("5")).toString());
+  
+  (new Test("pow120")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("0")).toString()).equals("1");
+  (new Test("pow121")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("1")).toString()).equals("0");
+  (new Test("pow122")).ok=((new com.ibm.math.BigDecimal("0")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("0");
+  (new Test("pow123")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("0")).toString()).equals("1");
+  (new Test("pow144")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("1")).toString()).equals("1");
+  (new Test("pow125")).ok=((new com.ibm.math.BigDecimal("1")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new Test("pow126")).ok=((new com.ibm.math.BigDecimal("0.3")).pow(new com.ibm.math.BigDecimal("0")).toString()).equals("1");
+  (new Test("pow127")).ok=((new com.ibm.math.BigDecimal("10")).pow(new com.ibm.math.BigDecimal("7")).toString()).equals("10000000");
+  (new Test("pow128")).ok=((new com.ibm.math.BigDecimal("6.0")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("36.00");
+  (new Test("pow129")).ok=((new com.ibm.math.BigDecimal("6.00")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("36.0000");
+  (new Test("pow130")).ok=((new com.ibm.math.BigDecimal("6.000")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("36.000000");
+  (new Test("pow131")).ok=((new com.ibm.math.BigDecimal("-3")).pow(new com.ibm.math.BigDecimal("2")).toString()).equals("9");
+  (new Test("pow132")).ok=((new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("2")).pow(new com.ibm.math.BigDecimal("3")).toString()).equals("64");
+  
+  /* errors */
+  try{checknull:do{
+   ten.pow((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $67){
+   flag=true;
+  }/*checknull*/
+  (new Test("pow150")).ok=flag;
+  try{checknull2:do{
+   ten.pow(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $68){
+   flag=true;
+  }/*checknull2*/
+  (new Test("pow151")).ok=flag;
+  
+  flag=true;
+  try{checkdigits:do{
+   tenlong.pow(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $69){ae=$69;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("pow152")).ok=flag;
+  
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.pow(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $70){ae=$70;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("pow153")).ok=flag;
+  
+  try{checkpos:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("-71"));
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $71){ae=$71;
+   flag=(ae.getMessage()).equals("Negative power: -71");
+  }/*checkpos*/
+  (new Test("pow154")).ok=flag;
+  
+  try{checkwhole:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1234"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $72){ae=$72;
+   flag=(ae.getMessage()).equals("Too many digits: 1234");
+  }/*checkwhole*/
+  (new Test("pow155")).ok=flag;
+  
+  try{checkwhole1:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("12.34e+2"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $73){ae=$73;
+   flag=(ae.getMessage()).equals("Too many digits: 1.234E+3");
+  }/*checkwhole1*/
+  (new Test("pow156")).ok=flag;
+  
+  try{checkwhole2:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("12.4"),mcdef);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $74){ae=$74;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 12.4");
+  }/*checkwhole2*/
+  (new Test("pow157")).ok=flag;
+  
+  try{checkwhole3:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1.01"),mcdef);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $75){ae=$75;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 1.01");
+  }/*checkwhole3*/
+  (new Test("pow158")).ok=flag;
+  
+  try{checkwhole4:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1.000000001"),mcdef);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $76){ae=$76;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 1.000000001");
+  }/*checkwhole4*/
+  (new Test("pow159")).ok=flag;
+  
+  try{checkwhole5:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("1.000000001"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $77){ae=$77;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 1.000000001");
+  }/*checkwhole5*/
+  (new Test("pow160")).ok=flag;
+  
+  try{checkwhole6:do{
+   com.ibm.math.BigDecimal.ONE.pow(new com.ibm.math.BigDecimal("5.67E-987654321"),mc3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $78){ae=$78;
+   flag=(ae.getMessage()).equals("Decimal part non-zero: 5.67E-987654321");
+  }/*checkwhole6*/
+  (new Test("pow161")).ok=flag;
+  
+  summary("pow");
+  return;}
+
+ /*--------------------------------------------------------------------*/
+ 
+ /** Test the {@link BigDecimal#remainder} method. */
+ 
+ public void diagremainder(){
+  boolean flag=false;
+  java.lang.ArithmeticException ae=null;
+  
+  (new Test("rem001")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("1");
+  (new Test("rem002")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("5"),mcdef).toString()).equals("0");
+  (new Test("rem003")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("10"),mcdef).toString()).equals("3");
+  (new Test("rem004")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("50"),mcdef).toString()).equals("13");
+  (new Test("rem005")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("100"),mcdef).toString()).equals("13");
+  (new Test("rem006")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("1000"),mcdef).toString()).equals("13");
+  (new Test("rem007")).ok=((new com.ibm.math.BigDecimal(".13")).remainder(one).toString()).equals("0.13");
+  (new Test("rem008")).ok=((new com.ibm.math.BigDecimal("0.133")).remainder(one).toString()).equals("0.133");
+  (new Test("rem009")).ok=((new com.ibm.math.BigDecimal("0.1033")).remainder(one).toString()).equals("0.1033");
+  (new Test("rem010")).ok=((new com.ibm.math.BigDecimal("1.033")).remainder(one).toString()).equals("0.033");
+  (new Test("rem011")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(one).toString()).equals("0.33");
+  (new Test("rem012")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("0.33");
+  (new Test("rem013")).ok=((new com.ibm.math.BigDecimal("103.3")).remainder(com.ibm.math.BigDecimal.ONE).toString()).equals("0.3");
+  (new Test("rem014")).ok=((new com.ibm.math.BigDecimal("133")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new Test("rem015")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new Test("rem016")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(new com.ibm.math.BigDecimal(50),mcdef).toString()).equals("33");
+  (new Test("rem017")).ok=((new com.ibm.math.BigDecimal("101.0")).remainder(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("2.0");
+  (new Test("rem018")).ok=((new com.ibm.math.BigDecimal("102.0")).remainder(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("0");
+  (new Test("rem019")).ok=((new com.ibm.math.BigDecimal("103.0")).remainder(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("1.0");
+  (new Test("rem020")).ok=((new com.ibm.math.BigDecimal("2.40")).remainder(one).toString()).equals("0.40");
+  (new Test("rem021")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(one).toString()).equals("0.400");
+  (new Test("rem022")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(one).toString()).equals("0.4");
+  (new Test("rem023")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.4");
+  (new Test("rem024")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.400");
+  (new Test("rem025")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.1");
+  (new Test("rem026")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.30"),mcdef).toString()).equals("0.10");
+  (new Test("rem027")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.300"),mcdef).toString()).equals("0.100");
+  (new Test("rem028")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3000"),mcdef).toString()).equals("0.1000");
+  (new Test("rem029")).ok=((new com.ibm.math.BigDecimal("1.0")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.1");
+  (new Test("rem030")).ok=((new com.ibm.math.BigDecimal("1.00")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.10");
+  (new Test("rem031")).ok=((new com.ibm.math.BigDecimal("1.000")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.100");
+  (new Test("rem032")).ok=((new com.ibm.math.BigDecimal("1.0000")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.1000");
+  (new Test("rem033")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("2.001"),mcdef).toString()).equals("0.5");
+  
+  (new Test("rem040")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.5000001"),mcdef).toString()).equals("0.5");
+  (new Test("rem041")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.50000001"),mcdef).toString()).equals("0.5");
+  (new Test("rem042")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.500000001"),mcdef).toString()).equals("0.5");
+  (new Test("rem043")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.5000000001"),mcdef).toString()).equals("0");
+  (new Test("rem044")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.50000000001"),mcdef).toString()).equals("0");
+  (new Test("rem045")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.4999999"),mcdef).toString()).equals("1E-7");
+  (new Test("rem046")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.49999999"),mcdef).toString()).equals("1E-8");
+  (new Test("rem047")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.499999999"),mcdef).toString()).equals("1E-9");
+  (new Test("rem048")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.4999999999"),mcdef).toString()).equals("0");
+  (new Test("rem049")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.49999999999"),mcdef).toString()).equals("0");
+  
+  (new Test("rem050")).ok=((new com.ibm.math.BigDecimal("0.03")).remainder(new com.ibm.math.BigDecimal("7"),mcdef).toString()).equals("0.03");
+  (new Test("rem051")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1");
+  (new Test("rem052")).ok=((new com.ibm.math.BigDecimal("4.1")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.1");
+  (new Test("rem053")).ok=((new com.ibm.math.BigDecimal("4.01")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.01");
+  (new Test("rem054")).ok=((new com.ibm.math.BigDecimal("4.001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.001");
+  (new Test("rem055")).ok=((new com.ibm.math.BigDecimal("4.0001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.0001");
+  (new Test("rem056")).ok=((new com.ibm.math.BigDecimal("4.00001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.00001");
+  (new Test("rem057")).ok=((new com.ibm.math.BigDecimal("4.000001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("0.000001");
+  (new Test("rem058")).ok=((new com.ibm.math.BigDecimal("4.0000001")).remainder(new com.ibm.math.BigDecimal("2"),mcdef).toString()).equals("1E-7");
+  
+  (new Test("rem060")).ok=((new com.ibm.math.BigDecimal("1.2")).remainder(new com.ibm.math.BigDecimal("0.7345"),mcdef).toString()).equals("0.4655");
+  (new Test("rem061")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("12"),mcdef).toString()).equals("0.8");
+  (new Test("rem062")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.2"),mcdef).toString()).equals("0");
+  (new Test("rem063")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.2");
+  (new Test("rem064")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("12"),mcdef).toString()).equals("0.800");
+  (new Test("rem065")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("1.7"),mcdef).toString()).equals("0.800");
+  (new Test("rem066")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.400");
+  
+  // MC --
+  (new Test("rem071")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mc6).toString()).equals("0.400");
+  (new Test("rem072")).ok=((new com.ibm.math.BigDecimal("12345678900000")).remainder(new com.ibm.math.BigDecimal("12e+12"),mc3).toString()).equals("3E+11");
+  
+  // Fixed --
+  (new Test("rem101")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("3")).toString()).equals("1");
+  (new Test("rem102")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("5")).toString()).equals("0");
+  (new Test("rem103")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("10")).toString()).equals("3");
+  (new Test("rem104")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("50")).toString()).equals("13");
+  (new Test("rem105")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("100")).toString()).equals("13");
+  (new Test("rem106")).ok=((new com.ibm.math.BigDecimal("13")).remainder(new com.ibm.math.BigDecimal("1000")).toString()).equals("13");
+  (new Test("rem107")).ok=((new com.ibm.math.BigDecimal(".13")).remainder(one).toString()).equals("0.13");
+  (new Test("rem108")).ok=((new com.ibm.math.BigDecimal("0.133")).remainder(one).toString()).equals("0.133");
+  (new Test("rem109")).ok=((new com.ibm.math.BigDecimal("0.1033")).remainder(one).toString()).equals("0.1033");
+  (new Test("rem110")).ok=((new com.ibm.math.BigDecimal("1.033")).remainder(one).toString()).equals("0.033");
+  (new Test("rem111")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(one).toString()).equals("0.33");
+  (new Test("rem112")).ok=((new com.ibm.math.BigDecimal("10.33")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("0.33");
+  (new Test("rem113")).ok=((new com.ibm.math.BigDecimal("103.3")).remainder(com.ibm.math.BigDecimal.ONE).toString()).equals("0.3");
+  (new Test("rem114")).ok=((new com.ibm.math.BigDecimal("133")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new Test("rem115")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(com.ibm.math.BigDecimal.TEN).toString()).equals("3");
+  (new Test("rem116")).ok=((new com.ibm.math.BigDecimal("1033")).remainder(new com.ibm.math.BigDecimal(50)).toString()).equals("33");
+  (new Test("rem117")).ok=((new com.ibm.math.BigDecimal("101.0")).remainder(new com.ibm.math.BigDecimal(3)).toString()).equals("2.0");
+  (new Test("rem118")).ok=((new com.ibm.math.BigDecimal("102.0")).remainder(new com.ibm.math.BigDecimal(3)).toString()).equals("0");
+  (new Test("rem119")).ok=((new com.ibm.math.BigDecimal("103.0")).remainder(new com.ibm.math.BigDecimal(3)).toString()).equals("1.0");
+  (new Test("rem120")).ok=((new com.ibm.math.BigDecimal("2.40")).remainder(one).toString()).equals("0.40");
+  (new Test("rem121")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(one).toString()).equals("0.400");
+  (new Test("rem122")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(one).toString()).equals("0.4");
+  (new Test("rem123")).ok=((new com.ibm.math.BigDecimal("2.4")).remainder(new com.ibm.math.BigDecimal(2)).toString()).equals("0.4");
+  (new Test("rem124")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2)).toString()).equals("0.400");
+  (new Test("rem125")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.1");
+  (new Test("rem126")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.30")).toString()).equals("0.10");
+  (new Test("rem127")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.300")).toString()).equals("0.100");
+  (new Test("rem128")).ok=((new com.ibm.math.BigDecimal("1")).remainder(new com.ibm.math.BigDecimal("0.3000")).toString()).equals("0.1000");
+  (new Test("rem129")).ok=((new com.ibm.math.BigDecimal("1.0")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.1");
+  (new Test("rem130")).ok=((new com.ibm.math.BigDecimal("1.00")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.10");
+  (new Test("rem131")).ok=((new com.ibm.math.BigDecimal("1.000")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.100");
+  (new Test("rem132")).ok=((new com.ibm.math.BigDecimal("1.0000")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.1000");
+  (new Test("rem133")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("2.001")).toString()).equals("0.5");
+  (new Test("rem134")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.500000001")).toString()).equals("0.5");
+  (new Test("rem135")).ok=((new com.ibm.math.BigDecimal("0.5")).remainder(new com.ibm.math.BigDecimal("0.5000000001")).toString()).equals("0.5");
+  (new Test("rem136")).ok=((new com.ibm.math.BigDecimal("0.03")).remainder(new com.ibm.math.BigDecimal("7")).toString()).equals("0.03");
+  (new Test("rem137")).ok=((new com.ibm.math.BigDecimal("5")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("1");
+  (new Test("rem138")).ok=((new com.ibm.math.BigDecimal("4.1")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.1");
+  (new Test("rem139")).ok=((new com.ibm.math.BigDecimal("4.01")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.01");
+  (new Test("rem140")).ok=((new com.ibm.math.BigDecimal("4.001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.001");
+  (new Test("rem141")).ok=((new com.ibm.math.BigDecimal("4.0001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.0001");
+  (new Test("rem142")).ok=((new com.ibm.math.BigDecimal("4.00001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.00001");
+  (new Test("rem143")).ok=((new com.ibm.math.BigDecimal("4.000001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.000001");
+  (new Test("rem144")).ok=((new com.ibm.math.BigDecimal("4.0000001")).remainder(new com.ibm.math.BigDecimal("2")).toString()).equals("0.0000001"); // 1E-7, plain
+  (new Test("rem145")).ok=((new com.ibm.math.BigDecimal("1.2")).remainder(new com.ibm.math.BigDecimal("0.7345")).toString()).equals("0.4655");
+  (new Test("rem146")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("12")).toString()).equals("0.8");
+  (new Test("rem147")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.2")).toString()).equals("0");
+  (new Test("rem148")).ok=((new com.ibm.math.BigDecimal("0.8")).remainder(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.2");
+  (new Test("rem149")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("12")).toString()).equals("0.800");
+  (new Test("rem150")).ok=((new com.ibm.math.BigDecimal("0.800")).remainder(new com.ibm.math.BigDecimal("1.7")).toString()).equals("0.800");
+  (new Test("rem151")).ok=((new com.ibm.math.BigDecimal("2.400")).remainder(new com.ibm.math.BigDecimal(2),mcdef).toString()).equals("0.400");
+  
+  try{checknull:do{
+   ten.remainder((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $79){
+   flag=true;
+  }/*checknull*/
+  (new Test("rem200")).ok=flag;
+  try{checknull2:do{
+   ten.remainder(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $80){
+   flag=true;
+  }/*checknull2*/
+  (new Test("rem201")).ok=flag;
+  
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.remainder(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $81){ae=$81;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("rem202")).ok=flag;
+  
+  try{checkdigits:do{
+   tenlong.remainder(one,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $82){ae=$82;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("rem203")).ok=flag;
+  
+  summary("remainder");
+  return;}
+/*--------------------------------------------------------------------*/
+ 
+ /** Test the {@link BigDecimal#subtract} method. */
+ 
+ public void diagsubtract(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal alhs;
+  com.ibm.math.BigDecimal arhs;
+  java.lang.ArithmeticException ae=null;
+  
+  // [first group are 'quick confidence check']
+  (new Test("sub301")).ok=((new com.ibm.math.BigDecimal(2)).subtract(new com.ibm.math.BigDecimal(3),mcdef).toString()).equals("-1");
+  (new Test("sub302")).ok=((new com.ibm.math.BigDecimal("5.75")).subtract(new com.ibm.math.BigDecimal("3.3"),mcdef).toString()).equals("2.45");
+  (new Test("sub303")).ok=((new com.ibm.math.BigDecimal("5")).subtract(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("8");
+  (new Test("sub304")).ok=((new com.ibm.math.BigDecimal("-5")).subtract(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("-2");
+  (new Test("sub305")).ok=((new com.ibm.math.BigDecimal("-7")).subtract(new com.ibm.math.BigDecimal("2.5"),mcdef).toString()).equals("-9.5");
+  (new Test("sub306")).ok=((new com.ibm.math.BigDecimal("0.7")).subtract(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("0.4");
+  (new Test("sub307")).ok=((new com.ibm.math.BigDecimal("1.3")).subtract(new com.ibm.math.BigDecimal("0.3"),mcdef).toString()).equals("1.0");
+  (new Test("sub308")).ok=((new com.ibm.math.BigDecimal("1.25")).subtract(new com.ibm.math.BigDecimal("1.25"),mcdef).toString()).equals("0");
+  (new Test("sub309")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000000"),mcdef).toString()).equals("0.23456789");
+  
+  (new Test("sub310")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000089"),mcdef).toString()).equals("0.23456700");
+  
+  (new Test("sub311")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000001"),mcdef).toString()).equals("0.555555556");
+  
+  (new Test("sub312")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000005"),mcdef).toString()).equals("0.555555556");
+  
+  (new Test("sub313")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).subtract(new com.ibm.math.BigDecimal("0.1111111111"),mcdef).toString()).equals("0.333333333");
+  
+  (new Test("sub314")).ok=((new com.ibm.math.BigDecimal("1.0000000000")).subtract(new com.ibm.math.BigDecimal("0.00000001"),mcdef).toString()).equals("0.99999999");
+  
+  (new Test("sub315")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).subtract(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444444");
+  
+  (new Test("sub316")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).subtract(new com.ibm.math.BigDecimal("0"),mcdef).toString()).equals("0.444444445");
+  
+  
+  (new Test("sub317")).ok=((new com.ibm.math.BigDecimal("70")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-1.00000000E+13");
+  
+  (new Test("sub318")).ok=((new com.ibm.math.BigDecimal("700")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-1.00000000E+13");
+  
+  (new Test("sub319")).ok=((new com.ibm.math.BigDecimal("7000")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-1.00000000E+13");
+  
+  (new Test("sub320")).ok=((new com.ibm.math.BigDecimal("70000")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-9.9999999E+12");
+  
+  (new Test("sub321")).ok=((new com.ibm.math.BigDecimal("700000")).subtract(new com.ibm.math.BigDecimal("10000e+9"),mcdef).toString()).equals("-9.9999993E+12");
+  
+  // symmetry:
+  (new Test("sub322")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("sub323")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("sub324")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("7000"),mcdef).toString()).equals("1.00000000E+13");
+  
+  (new Test("sub325")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("9.9999999E+12");
+  
+  (new Test("sub326")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700000"),mcdef).toString()).equals("9.9999993E+12");
+  
+  
+  // [same with fixed point arithmetic]
+  (new Test("sub001")).ok=((new com.ibm.math.BigDecimal(2)).subtract(new com.ibm.math.BigDecimal(3)).toString()).equals("-1");
+  (new Test("sub002")).ok=((new com.ibm.math.BigDecimal("5.75")).subtract(new com.ibm.math.BigDecimal("3.3")).toString()).equals("2.45");
+  (new Test("sub003")).ok=((new com.ibm.math.BigDecimal("5")).subtract(new com.ibm.math.BigDecimal("-3")).toString()).equals("8");
+  (new Test("sub004")).ok=((new com.ibm.math.BigDecimal("-5")).subtract(new com.ibm.math.BigDecimal("-3")).toString()).equals("-2");
+  (new Test("sub005")).ok=((new com.ibm.math.BigDecimal("-7")).subtract(new com.ibm.math.BigDecimal("2.5")).toString()).equals("-9.5");
+  (new Test("sub006")).ok=((new com.ibm.math.BigDecimal("0.7")).subtract(new com.ibm.math.BigDecimal("0.3")).toString()).equals("0.4");
+  (new Test("sub007")).ok=((new com.ibm.math.BigDecimal("1.3")).subtract(new com.ibm.math.BigDecimal("0.3")).toString()).equals("1.0");
+  (new Test("sub008")).ok=((new com.ibm.math.BigDecimal("1.25")).subtract(new com.ibm.math.BigDecimal("1.25")).toString()).equals("0.00");
+  (new Test("sub009")).ok=((new com.ibm.math.BigDecimal("0.02")).subtract(new com.ibm.math.BigDecimal("0.02")).toString()).equals("0.00");
+  
+  (new Test("sub010")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000000")).toString()).equals("0.23456789");
+  
+  (new Test("sub011")).ok=((new com.ibm.math.BigDecimal("1.23456789")).subtract(new com.ibm.math.BigDecimal("1.00000089")).toString()).equals("0.23456700");
+  
+  (new Test("sub012")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000001")).toString()).equals("0.5555555558");
+  
+  (new Test("sub013")).ok=((new com.ibm.math.BigDecimal("0.5555555559")).subtract(new com.ibm.math.BigDecimal("0.0000000005")).toString()).equals("0.5555555554");
+  
+  (new Test("sub014")).ok=((new com.ibm.math.BigDecimal("0.4444444444")).subtract(new com.ibm.math.BigDecimal("0.1111111111")).toString()).equals("0.3333333333");
+  
+  (new Test("sub015")).ok=((new com.ibm.math.BigDecimal("1.0000000000")).subtract(new com.ibm.math.BigDecimal("0.00000001")).toString()).equals("0.9999999900");
+  
+  (new Test("sub016")).ok=((new com.ibm.math.BigDecimal("0.4444444444999")).subtract(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444444999");
+  
+  (new Test("sub017")).ok=((new com.ibm.math.BigDecimal("0.4444444445000")).subtract(new com.ibm.math.BigDecimal("0")).toString()).equals("0.4444444445000");
+  
+  
+  (new Test("sub018")).ok=((new com.ibm.math.BigDecimal("70")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999999930");
+  
+  (new Test("sub019")).ok=((new com.ibm.math.BigDecimal("700")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999999300");
+  
+  (new Test("sub020")).ok=((new com.ibm.math.BigDecimal("7000")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999993000");
+  
+  (new Test("sub021")).ok=((new com.ibm.math.BigDecimal("70000")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999930000");
+  
+  (new Test("sub022")).ok=((new com.ibm.math.BigDecimal("700000")).subtract(new com.ibm.math.BigDecimal("10000e+9")).toString()).equals("-9999999300000");
+  
+  // symmetry:
+  (new Test("sub023")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70")).toString()).equals("9999999999930");
+  
+  (new Test("sub024")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700")).toString()).equals("9999999999300");
+  
+  (new Test("sub025")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("7000")).toString()).equals("9999999993000");
+  
+  (new Test("sub026")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000")).toString()).equals("9999999930000");
+  
+  (new Test("sub027")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("700000")).toString()).equals("9999999300000");
+  
+  // MC
+  (new Test("sub030")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000"),mcdef).toString()).equals("9.9999999E+12");
+  
+  (new Test("sub031")).ok=((new com.ibm.math.BigDecimal("10000e+9")).subtract(new com.ibm.math.BigDecimal("70000"),mc6).toString()).equals("1.00000E+13");
+  
+  
+  // some of the next group are really constructor tests
+  (new Test("sub040")).ok=((new com.ibm.math.BigDecimal("00.0")).subtract(new com.ibm.math.BigDecimal("0.0")).toString()).equals("0.0");
+  (new Test("sub041")).ok=((new com.ibm.math.BigDecimal("00.0")).subtract(new com.ibm.math.BigDecimal("0.00")).toString()).equals("0.00");
+  (new Test("sub042")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("00.0")).toString()).equals("0.00");
+  (new Test("sub043")).ok=((new com.ibm.math.BigDecimal("00.0")).subtract(new com.ibm.math.BigDecimal("0.00"),mcdef).toString()).equals("0");
+  (new Test("sub044")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("00.0"),mcdef).toString()).equals("0");
+  (new Test("sub045")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.7");
+  (new Test("sub046")).ok=((new com.ibm.math.BigDecimal("3.")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.7");
+  (new Test("sub047")).ok=((new com.ibm.math.BigDecimal("3.0")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.7");
+  (new Test("sub048")).ok=((new com.ibm.math.BigDecimal("3.00")).subtract(new com.ibm.math.BigDecimal(".3"),mcdef).toString()).equals("2.70");
+  (new Test("sub049")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("3"),mcdef).toString()).equals("0");
+  (new Test("sub050")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("+3"),mcdef).toString()).equals("0");
+  (new Test("sub051")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("-3"),mcdef).toString()).equals("6");
+  (new Test("sub052")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.7");
+  (new Test("sub053")).ok=((new com.ibm.math.BigDecimal("3.")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.7");
+  (new Test("sub054")).ok=((new com.ibm.math.BigDecimal("3.0")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.7");
+  (new Test("sub055")).ok=((new com.ibm.math.BigDecimal("3.00")).subtract(new com.ibm.math.BigDecimal(".3")).toString()).equals("2.70");
+  (new Test("sub056")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("3")).toString()).equals("0");
+  (new Test("sub057")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("+3")).toString()).equals("0");
+  (new Test("sub058")).ok=((new com.ibm.math.BigDecimal("3")).subtract(new com.ibm.math.BigDecimal("-3")).toString()).equals("6");
+  
+  // the above all from add; massaged and extended.  Now some new ones...
+  // [particularly important for comparisons]
+  // NB: -1E-7 below were non-exponents pre-ANSI
+  (new Test("sub080")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456784")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub081")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456785")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub082")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456786")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub083")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456787")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub084")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456788")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub085")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456789")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub086")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456790")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub087")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456791")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub088")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456792")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub089")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456793")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub090")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456794")).subtract(new com.ibm.math.BigDecimal("10.23456789"),mcdef).toString());
+  (new Test("sub091")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456781")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub092")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456782")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub093")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456783")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub094")).ok=("-1E-7").equals((new com.ibm.math.BigDecimal("10.23456784")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub095")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456785")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub096")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456786")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub097")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456787")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub098")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456788")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub099")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456789")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub100")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456790")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub101")).ok="0".equals((new com.ibm.math.BigDecimal("10.23456791")).subtract(new com.ibm.math.BigDecimal("10.23456786"),mcdef).toString());
+  (new Test("sub102")).ok="0".equals(com.ibm.math.BigDecimal.ONE.subtract(new com.ibm.math.BigDecimal("0.999999999"),mcdef).toString());
+  (new Test("sub103")).ok="0".equals((new com.ibm.math.BigDecimal("0.999999999")).subtract(com.ibm.math.BigDecimal.ONE,mcdef).toString());
+  
+  alhs=new com.ibm.math.BigDecimal("12345678900000");
+  arhs=new com.ibm.math.BigDecimal("9999999999999");
+  (new Test("sub110")).ok=(alhs.subtract(arhs,mc3).toString()).equals("2.3E+12");
+  (new Test("sub111")).ok=(arhs.subtract(alhs,mc3).toString()).equals("-2.3E+12");
+  (new Test("sub112")).ok=(alhs.subtract(arhs).toString()).equals("2345678900001");
+  (new Test("sub113")).ok=(arhs.subtract(alhs).toString()).equals("-2345678900001");
+  
+  // additional scaled arithmetic tests [0.97 problem]
+  (new Test("sub120")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".1")).toString()).equals("-0.1");
+  (new Test("sub121")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal(".97983")).toString()).equals("-0.97983");
+  (new Test("sub122")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".9")).toString()).equals("-0.9");
+  (new Test("sub123")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("0.102")).toString()).equals("-0.102");
+  (new Test("sub124")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".4")).toString()).equals("-0.4");
+  (new Test("sub125")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".307")).toString()).equals("-0.307");
+  (new Test("sub126")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".43822")).toString()).equals("-0.43822");
+  (new Test("sub127")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".911")).toString()).equals("-0.911");
+  (new Test("sub128")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal(".02")).toString()).equals("-0.02");
+  (new Test("sub129")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal(".392")).toString()).equals("-0.392");
+  (new Test("sub130")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".26")).toString()).equals("-0.26");
+  (new Test("sub131")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("0.51")).toString()).equals("-0.51");
+  (new Test("sub132")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".2234")).toString()).equals("-0.2234");
+  (new Test("sub133")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal(".2")).toString()).equals("-0.2");
+  (new Test("sub134")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal(".0008")).toString()).equals("-0.0008");
+  // 0. on left
+  (new Test("sub140")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.1")).toString()).equals("0.1");
+  (new Test("sub141")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("-.97983")).toString()).equals("0.97983");
+  (new Test("sub142")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.9")).toString()).equals("0.9");
+  (new Test("sub143")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-0.102")).toString()).equals("0.102");
+  (new Test("sub144")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.4")).toString()).equals("0.4");
+  (new Test("sub145")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.307")).toString()).equals("0.307");
+  (new Test("sub146")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.43822")).toString()).equals("0.43822");
+  (new Test("sub147")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.911")).toString()).equals("0.911");
+  (new Test("sub148")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.02")).toString()).equals("0.02");
+  (new Test("sub149")).ok=((new com.ibm.math.BigDecimal("0.00")).subtract(new com.ibm.math.BigDecimal("-.392")).toString()).equals("0.392");
+  (new Test("sub150")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.26")).toString()).equals("0.26");
+  (new Test("sub151")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-0.51")).toString()).equals("0.51");
+  (new Test("sub152")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.2234")).toString()).equals("0.2234");
+  (new Test("sub153")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.2")).toString()).equals("0.2");
+  (new Test("sub154")).ok=((new com.ibm.math.BigDecimal("0.0")).subtract(new com.ibm.math.BigDecimal("-.0008")).toString()).equals("0.0008");
+  // negatives of same
+  (new Test("sub160")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.1")).toString()).equals("0.1");
+  (new Test("sub161")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal("-.97983")).toString()).equals("0.97983");
+  (new Test("sub162")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.9")).toString()).equals("0.9");
+  (new Test("sub163")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-0.102")).toString()).equals("0.102");
+  (new Test("sub164")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.4")).toString()).equals("0.4");
+  (new Test("sub165")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.307")).toString()).equals("0.307");
+  (new Test("sub166")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.43822")).toString()).equals("0.43822");
+  (new Test("sub167")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.911")).toString()).equals("0.911");
+  (new Test("sub168")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal("-.02")).toString()).equals("0.02");
+  (new Test("sub169")).ok=((new com.ibm.math.BigDecimal("00")).subtract(new com.ibm.math.BigDecimal("-.392")).toString()).equals("0.392");
+  (new Test("sub170")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.26")).toString()).equals("0.26");
+  (new Test("sub171")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-0.51")).toString()).equals("0.51");
+  (new Test("sub172")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.2234")).toString()).equals("0.2234");
+  (new Test("sub173")).ok=((new com.ibm.math.BigDecimal("0")).subtract(new com.ibm.math.BigDecimal("-.2")).toString()).equals("0.2");
+  (new Test("sub174")).ok=((new com.ibm.math.BigDecimal(".0")).subtract(new com.ibm.math.BigDecimal("-.0008")).toString()).equals("0.0008");
+  
+  // more fixed, LHS swaps [really same as testcases under add]
+  (new Test("sub180")).ok=((new com.ibm.math.BigDecimal("-56267E-10")).subtract(zero).toString()).equals("-0.0000056267");
+  (new Test("sub181")).ok=((new com.ibm.math.BigDecimal("-56267E-5")).subtract(zero).toString()).equals("-0.56267");
+  (new Test("sub182")).ok=((new com.ibm.math.BigDecimal("-56267E-2")).subtract(zero).toString()).equals("-562.67");
+  (new Test("sub183")).ok=((new com.ibm.math.BigDecimal("-56267E-1")).subtract(zero).toString()).equals("-5626.7");
+  (new Test("sub185")).ok=((new com.ibm.math.BigDecimal("-56267E-0")).subtract(zero).toString()).equals("-56267");
+  
+  try{checknull:do{
+   ten.subtract((com.ibm.math.BigDecimal)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $83){
+   flag=true;
+  }/*checknull*/
+  (new Test("sub200")).ok=flag;
+  try{checknull2:do{
+   ten.subtract(ten,(com.ibm.math.MathContext)null);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NullPointerException $84){
+   flag=true;
+  }/*checknull2*/
+  (new Test("sub201")).ok=flag;
+  
+  try{checkdigits:do{
+   com.ibm.math.BigDecimal.ONE.subtract(tenlong,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $85){ae=$85;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("sub202")).ok=flag;
+  try{checkdigits:do{
+   tenlong.subtract(com.ibm.math.BigDecimal.ONE,mcld);
+   flag=false;
+  }while(false);}
+  catch (java.lang.ArithmeticException $86){ae=$86;
+   flag=(ae.getMessage()).equals("Too many digits:"+" "+tenlong.toString());
+  }/*checkdigits*/
+  (new Test("sub203")).ok=flag;
+  summary("subtract");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /* ----------------------------------------------------------------- */
+ /* Other methods                                                     */
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the <code>BigDecimal.byteValue()</code> method. */
+ 
+ public void diagbyteValue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  
+  
+  (new Test("byv001")).ok=((((byte)-128)))==((new com.ibm.math.BigDecimal("-128")).byteValue());
+  (new Test("byv002")).ok=((0))==((new com.ibm.math.BigDecimal("0")).byteValue());
+  (new Test("byv003")).ok=((1))==((new com.ibm.math.BigDecimal("1")).byteValue());
+  (new Test("byv004")).ok=((99))==((new com.ibm.math.BigDecimal("99")).byteValue());
+  (new Test("byv005")).ok=((127))==((new com.ibm.math.BigDecimal("127")).byteValue());
+  (new Test("byv006")).ok=((-128))==((new com.ibm.math.BigDecimal("128")).byteValue());
+  (new Test("byv007")).ok=((-127))==((new com.ibm.math.BigDecimal("129")).byteValue());
+  (new Test("byv008")).ok=((127))==((new com.ibm.math.BigDecimal("-129")).byteValue());
+  (new Test("byv009")).ok=((126))==((new com.ibm.math.BigDecimal("-130")).byteValue());
+  (new Test("byv010")).ok=((bmax))==((new com.ibm.math.BigDecimal(bmax)).byteValue());
+  (new Test("byv011")).ok=((bmin))==((new com.ibm.math.BigDecimal(bmin)).byteValue());
+  (new Test("byv012")).ok=((bneg))==((new com.ibm.math.BigDecimal(bneg)).byteValue());
+  (new Test("byv013")).ok=((bzer))==((new com.ibm.math.BigDecimal(bzer)).byteValue());
+  (new Test("byv014")).ok=((bpos))==((new com.ibm.math.BigDecimal(bpos)).byteValue());
+  (new Test("byv015")).ok=((bmin))==((new com.ibm.math.BigDecimal(bmax+1)).byteValue());
+  (new Test("byv016")).ok=((bmax))==((new com.ibm.math.BigDecimal(bmin-1)).byteValue());
+  
+  (new Test("byv021")).ok=((((byte)-128)))==((new com.ibm.math.BigDecimal("-128")).byteValueExact());
+  (new Test("byv022")).ok=((0))==((new com.ibm.math.BigDecimal("0")).byteValueExact());
+  (new Test("byv023")).ok=((1))==((new com.ibm.math.BigDecimal("1")).byteValueExact());
+  (new Test("byv024")).ok=((99))==((new com.ibm.math.BigDecimal("99")).byteValueExact());
+  (new Test("byv025")).ok=((127))==((new com.ibm.math.BigDecimal("127")).byteValueExact());
+  (new Test("byv026")).ok=((bmax))==((new com.ibm.math.BigDecimal(bmax)).byteValueExact());
+  (new Test("byv027")).ok=((bmin))==((new com.ibm.math.BigDecimal(bmin)).byteValueExact());
+  (new Test("byv028")).ok=((bneg))==((new com.ibm.math.BigDecimal(bneg)).byteValueExact());
+  (new Test("byv029")).ok=((bzer))==((new com.ibm.math.BigDecimal(bzer)).byteValueExact());
+  (new Test("byv030")).ok=((bpos))==((new com.ibm.math.BigDecimal(bpos)).byteValueExact());
+  try{
+   v="-129";
+   (new com.ibm.math.BigDecimal(v)).byteValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $87){ae=$87;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }
+  (new Test("byv100")).ok=flag;
+  try{
+   v="128";
+   (new com.ibm.math.BigDecimal(v)).byteValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $88){ae=$88;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }
+  (new Test("byv101")).ok=flag;
+  try{
+   v="1.5";
+   (new com.ibm.math.BigDecimal(v)).byteValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $89){ae=$89;
+   flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+v);
+  }
+  (new Test("byv102")).ok=flag;
+  
+  badstrings=new java.lang.String[]{"1234",(new com.ibm.math.BigDecimal(bmax)).add(one).toString(),(new com.ibm.math.BigDecimal(bmin)).subtract(one).toString(),"170","270","370","470","570","670","770","870","970","-170","-270","-370","-470","-570","-670","-770","-870","-970",(new com.ibm.math.BigDecimal(bmin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(bmax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(bmin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(bmax)).multiply(ten).toString(),"-1234"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225
+  // 226
+  // 227
+  // 228
+  // 229
+  // 230
+  // 231
+  // 232
+  // 233
+  // 234
+  // 235
+  // 236
+  // 237
+  // 238
+  // 239
+  // 240
+  // 241
+  // 242
+  // 243
+  // 244
+  // 245
+  {int $90=badstrings.length;i=0;i:for(;$90>0;$90--,i++){
+   try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).byteValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $91){ae=$91;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("byv"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("byteValue+");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#compareTo(java.lang.Object)} method. */
+ 
+ public void diagcomparetoObj(){
+  boolean flag=false;
+  com.ibm.math.BigDecimal d;
+  com.ibm.math.BigDecimal long1;
+  com.ibm.math.BigDecimal long2;
+  
+  d=new com.ibm.math.BigDecimal(17);
+  (new Test("cto001")).ok=(d.compareTo((java.lang.Object)(new com.ibm.math.BigDecimal(66))))==(-1);
+  (new Test("cto002")).ok=(d.compareTo((java.lang.Object)((new com.ibm.math.BigDecimal(10)).add(new com.ibm.math.BigDecimal(7)))))==0;
+  (new Test("cto003")).ok=(d.compareTo((java.lang.Object)(new com.ibm.math.BigDecimal(10))))==1;
+  long1=new com.ibm.math.BigDecimal("12345678903");
+  long2=new com.ibm.math.BigDecimal("12345678900");
+  (new Test("cto004")).ok=(long1.compareTo((java.lang.Object)long2))==1;
+  (new Test("cto005")).ok=(long2.compareTo((java.lang.Object)long1))==(-1);
+  (new Test("cto006")).ok=(long2.compareTo((java.lang.Object)long2))==0;
+  try{
+   d.compareTo((java.lang.Object)null);
+   flag=false;
+  }
+  catch (java.lang.NullPointerException $92){
+   flag=true; // should get here
+  }
+  (new Test("cto101")).ok=flag;
+  try{
+   d.compareTo((java.lang.Object)"foo");
+   flag=false;
+  }
+  catch (java.lang.ClassCastException $93){
+   flag=true; // should get here
+  }
+  (new Test("cto102")).ok=flag;
+  summary("compareTo(Obj)");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#doubleValue} method. */
+ 
+ public void diagdoublevalue(){
+  java.lang.String val;
+  // 1999.03.07 Infinities no longer errors
+  val="-1";
+  (new Test("dov001")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="-0.1";
+  (new Test("dov002")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="0";
+  (new Test("dov003")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="0.1";
+  (new Test("dov004")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="1";
+  (new Test("dov005")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==((new java.lang.Double(val)).doubleValue());
+  val="1e1000";
+  (new Test("dov006")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==java.lang.Double.POSITIVE_INFINITY;
+  val="-1e1000";
+  (new Test("dov007")).ok=((new com.ibm.math.BigDecimal(val)).doubleValue())==java.lang.Double.NEGATIVE_INFINITY;
+  summary("doubleValue");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#equals} method. */
+ 
+ public void diagequals(){
+  com.ibm.math.BigDecimal d;
+  d=new com.ibm.math.BigDecimal(17);
+  (new Test("equ001")).ok=(!(d.equals((java.lang.Object)null)));
+  (new Test("equ002")).ok=(!(d.equals((java.lang.Object)"foo")));
+  (new Test("equ003")).ok=(!(d.equals((java.lang.Object)(new com.ibm.math.BigDecimal(66)))));
+  (new Test("equ004")).ok=d.equals((java.lang.Object)d);
+  (new Test("equ005")).ok=d.equals((java.lang.Object)((new com.ibm.math.BigDecimal(10)).add(new com.ibm.math.BigDecimal(7))));
+  summary("equals");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#floatValue} method. */
+ 
+ public void diagfloatvalue(){
+  java.lang.String val;
+  // 1999.03.07 Infinities no longer errors
+  val="-1";
+  (new Test("flv001")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="-0.1";
+  (new Test("flv002")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="0";
+  (new Test("flv003")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="0.1";
+  (new Test("flv004")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="1";
+  (new Test("flv005")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==((new java.lang.Float(val)).floatValue());
+  val="1e200";
+  (new Test("flv006")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.POSITIVE_INFINITY;
+  val="-1e200";
+  (new Test("flv007")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.NEGATIVE_INFINITY;
+  val="1e1000";
+  (new Test("flv008")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.POSITIVE_INFINITY;
+  val="-1e1000";
+  (new Test("flv009")).ok=((new com.ibm.math.BigDecimal(val)).floatValue())==java.lang.Float.NEGATIVE_INFINITY;
+  summary("floatValue");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#format} method. */
+ 
+ public void diagformat(){
+  boolean flag=false;
+  int eng;
+  int sci;
+  com.ibm.math.BigDecimal d04;
+  com.ibm.math.BigDecimal d05;
+  com.ibm.math.BigDecimal d06;
+  com.ibm.math.BigDecimal d15;
+  java.lang.IllegalArgumentException iae=null;
+  com.ibm.math.BigDecimal d050;
+  com.ibm.math.BigDecimal d150;
+  com.ibm.math.BigDecimal m050;
+  com.ibm.math.BigDecimal m150;
+  com.ibm.math.BigDecimal d051;
+  com.ibm.math.BigDecimal d151;
+  com.ibm.math.BigDecimal d000;
+  com.ibm.math.BigDecimal d500;
+  java.lang.ArithmeticException ae=null;
+  // 1999.02.09 now only two signatures for format(), so some tests below
+  //            may now be redundant
+  
+  (new Test("for001")).ok=((new com.ibm.math.BigDecimal("12.3")).format(-1,-1)).equals("12.3");
+  (new Test("for002")).ok=((new com.ibm.math.BigDecimal("-12.73")).format(-1,-1)).equals("-12.73");
+  (new Test("for003")).ok=((new com.ibm.math.BigDecimal("0.000")).format(-1,-1)).equals("0.000");
+  (new Test("for004")).ok=((new com.ibm.math.BigDecimal("3E+3")).format(-1,-1)).equals("3000");
+  (new Test("for005")).ok=((new com.ibm.math.BigDecimal("3")).format(4,-1)).equals("   3");
+  (new Test("for006")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,0)).equals("   2");
+  (new Test("for007")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,1)).equals("   1.7");
+  (new Test("for008")).ok=((new com.ibm.math.BigDecimal("1.75")).format(4,1)).equals("   1.8");
+  (new Test("for009")).ok=((new com.ibm.math.BigDecimal("0.5")).format(4,1)).equals("   0.5");
+  (new Test("for010")).ok=((new com.ibm.math.BigDecimal("0.05")).format(4,1)).equals("   0.1");
+  (new Test("for011")).ok=((new com.ibm.math.BigDecimal("0.04")).format(4,1)).equals("   0.0");
+  (new Test("for012")).ok=((new com.ibm.math.BigDecimal("0")).format(4,0)).equals("   0");
+  (new Test("for013")).ok=((new com.ibm.math.BigDecimal("0")).format(4,1)).equals("   0.0");
+  (new Test("for014")).ok=((new com.ibm.math.BigDecimal("0")).format(4,2)).equals("   0.00");
+  (new Test("for015")).ok=((new com.ibm.math.BigDecimal("0")).format(4,3)).equals("   0.000");
+  (new Test("for016")).ok=((new com.ibm.math.BigDecimal("0")).format(4,4)).equals("   0.0000");
+  (new Test("for017")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,0)).equals("   0");
+  (new Test("for018")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,1)).equals("   0.0");
+  (new Test("for019")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,2)).equals("   0.01");
+  (new Test("for020")).ok=((new com.ibm.math.BigDecimal("0.004")).format(4,2)).equals("   0.00");
+  (new Test("for021")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,3)).equals("   0.005");
+  (new Test("for022")).ok=((new com.ibm.math.BigDecimal("0.005")).format(4,4)).equals("   0.0050");
+  
+  (new Test("for023")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,2)).equals("   1.73");
+  (new Test("for024")).ok=((new com.ibm.math.BigDecimal("1.73")).format(4,3)).equals("   1.730");
+  (new Test("for025")).ok=((new com.ibm.math.BigDecimal("-.76")).format(4,1)).equals("  -0.8");
+  (new Test("for026")).ok=((new com.ibm.math.BigDecimal("-12.73")).format(-1,4)).equals("-12.7300");
+  
+  (new Test("for027")).ok=((new com.ibm.math.BigDecimal("3.03")).format(4,-1)).equals("   3.03");
+  (new Test("for028")).ok=((new com.ibm.math.BigDecimal("3.03")).format(4,1)).equals("   3.0");
+  (new Test("for029")).ok=((new com.ibm.math.BigDecimal("3.03")).format(4,-1,3,-1,-1,-1)).equals("   3.03     ");
+  (new Test("for030")).ok=((new com.ibm.math.BigDecimal("3.03")).format(-1,-1,3,-1,-1,-1)).equals("3.03     ");
+  (new Test("for031")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,-1,4,-1,-1)).equals("1.234573E+4");
+  (new Test("for032")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,-1,5,-1,-1)).equals("12345.73");
+  (new Test("for033")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,-1,6,-1,-1)).equals("12345.73");
+  
+  (new Test("for034")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,8,-1,3,-1,-1)).equals("1.23457300E+4");
+  (new Test("for035")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,7,-1,3,-1,-1)).equals("1.2345730E+4");
+  (new Test("for036")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,6,-1,3,-1,-1)).equals("1.234573E+4");
+  (new Test("for037")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,5,-1,3,-1,-1)).equals("1.23457E+4");
+  (new Test("for038")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,4,-1,3,-1,-1)).equals("1.2346E+4");
+  (new Test("for039")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,3,-1,3,-1,-1)).equals("1.235E+4");
+  (new Test("for040")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,2,-1,3,-1,-1)).equals("1.23E+4");
+  (new Test("for041")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,1,-1,3,-1,-1)).equals("1.2E+4");
+  (new Test("for042")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,0,-1,3,-1,-1)).equals("1E+4");
+  
+  (new Test("for043")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,6,-1,3,-1,-1)).equals("9.999999E+4");
+  (new Test("for044")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,5,-1,3,-1,-1)).equals("1.00000E+5");
+  (new Test("for045")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,2,-1,3,-1,-1)).equals("1.00E+5");
+  (new Test("for046")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(-1,0,-1,3,-1,-1)).equals("1E+5");
+  (new Test("for047")).ok=((new com.ibm.math.BigDecimal("99999.99")).format(3,0,-1,3,-1,-1)).equals("  1E+5");
+  
+  (new Test("for048")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,2,2,-1,-1)).equals("1.234573E+04");
+  (new Test("for049")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,3,-1,0,-1,-1)).equals("1.235E+4");
+  (new Test("for050")).ok=((new com.ibm.math.BigDecimal("1.234573")).format(-1,3,-1,0,-1,-1)).equals("1.235");
+  (new Test("for051")).ok=((new com.ibm.math.BigDecimal("123.45")).format(-1,3,2,0,-1,-1)).equals("1.235E+02");
+  
+  (new Test("for052")).ok=((new com.ibm.math.BigDecimal("0.444")).format(-1,0)).equals("0");
+  (new Test("for053")).ok=((new com.ibm.math.BigDecimal("-0.444")).format(-1,0)).equals("0");
+  (new Test("for054")).ok=((new com.ibm.math.BigDecimal("0.4")).format(-1,0)).equals("0");
+  (new Test("for055")).ok=((new com.ibm.math.BigDecimal("-0.4")).format(-1,0)).equals("0");
+  
+  eng=com.ibm.math.MathContext.ENGINEERING;
+  sci=com.ibm.math.MathContext.SCIENTIFIC;
+  (new Test("for060")).ok=((new com.ibm.math.BigDecimal("1234.5")).format(-1,3,2,0,eng,-1)).equals("1.235E+03");
+  (new Test("for061")).ok=((new com.ibm.math.BigDecimal("12345")).format(-1,3,3,0,eng,-1)).equals("12.345E+003");
+  (new Test("for062")).ok=((new com.ibm.math.BigDecimal("12345")).format(-1,3,3,0,sci,-1)).equals("1.235E+004");
+  (new Test("for063")).ok=((new com.ibm.math.BigDecimal("1234.5")).format(4,3,2,0,eng,-1)).equals("   1.235E+03");
+  (new Test("for064")).ok=((new com.ibm.math.BigDecimal("12345")).format(5,3,3,0,eng,-1)).equals("   12.345E+003");
+  (new Test("for065")).ok=((new com.ibm.math.BigDecimal("12345")).format(6,3,3,0,sci,-1)).equals("     1.235E+004");
+  
+  (new Test("for066")).ok=((new com.ibm.math.BigDecimal("1.2345")).format(-1,3,2,0,-1,-1)).equals("1.235    ");
+  (new Test("for067")).ok=((new com.ibm.math.BigDecimal("12345.73")).format(-1,-1,3,6,-1,-1)).equals("12345.73     ");
+  (new Test("for068")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,0)).equals("1234500000");
+  (new Test("for069")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,1)).equals("1234500000.0");
+  (new Test("for070")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,2)).equals("1234500000.00");
+  (new Test("for071")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,3)).equals("1234500000.000");
+  (new Test("for072")).ok=((new com.ibm.math.BigDecimal("12345e+5")).format(-1,4)).equals("1234500000.0000");
+  
+  // some from ANSI Dallas [Nov 1998]
+  (new Test("for073")).ok=((new com.ibm.math.BigDecimal("99.999")).format(-1,2,-1,2,-1,-1)).equals("100.00");
+  (new Test("for074")).ok=((new com.ibm.math.BigDecimal("0.99999")).format(-1,4,2,2,-1,-1)).equals("1.0000    ");
+  
+  // try some rounding modes [default ROUND_HALF_UP widely tested above]
+  // the first few also tests that defaults are accepted for the others
+  d04=new com.ibm.math.BigDecimal("0.04");
+  d05=new com.ibm.math.BigDecimal("0.05");
+  d06=new com.ibm.math.BigDecimal("0.06");
+  d15=new com.ibm.math.BigDecimal("0.15");
+  (new Test("for080")).ok=(d05.format(-1,1)).equals("0.1");
+  (new Test("for081")).ok=(d05.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_UP)).equals("0.1");
+  (new Test("for082")).ok=(d05.format(-1,1,-1,-1,-1,-1)).equals("0.1");
+  (new Test("for083")).ok=(d05.format(-1,-1,-1,-1,-1,-1)).equals("0.05");
+  (new Test("for084")).ok=(d05.format(-1,-1)).equals("0.05");
+  try{
+   d05.format(-1,-1,-1,-1,-1,30); // bad mode
+   flag=false; // shouldn't get here
+  }
+  catch (java.lang.IllegalArgumentException $94){iae=$94;
+   flag=(iae.getMessage()).equals("Bad argument 6 to format: 30");
+  }
+  (new Test("for085")).ok=flag;
+  
+  (new Test("for090")).ok=(d04.format(-1,1)).equals("0.0");
+  (new Test("for091")).ok=(d06.format(-1,1)).equals("0.1");
+  (new Test("for092")).ok=(d04.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_DOWN)).equals("0.0");
+  (new Test("for093")).ok=(d05.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_DOWN)).equals("0.0");
+  (new Test("for094")).ok=(d06.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_DOWN)).equals("0.1");
+  
+  (new Test("for095")).ok=(d04.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new Test("for096")).ok=(d05.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new Test("for097")).ok=(d06.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.1");
+  (new Test("for098")).ok=(d15.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.2");
+  d050=new com.ibm.math.BigDecimal("0.050");
+  d150=new com.ibm.math.BigDecimal("0.150");
+  (new Test("for099")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new Test("for100")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.2");
+  m050=new com.ibm.math.BigDecimal("-0.050");
+  m150=new com.ibm.math.BigDecimal("-0.150");
+  (new Test("for101")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.0");
+  (new Test("for102")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("-0.2");
+  d051=new com.ibm.math.BigDecimal("0.051");
+  d151=new com.ibm.math.BigDecimal("0.151");
+  (new Test("for103")).ok=(d051.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.1");
+  (new Test("for104")).ok=(d151.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_HALF_EVEN)).equals("0.2");
+  
+  (new Test("for105")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("0.0");
+  (new Test("for106")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("-0.1");
+  (new Test("for107")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("0.1");
+  (new Test("for108")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_CEILING)).equals("0.2");
+  
+  (new Test("for109")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("-0.1");
+  (new Test("for110")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("-0.2");
+  (new Test("for111")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("0.0");
+  (new Test("for112")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_FLOOR)).equals("0.1");
+  
+  (new Test("for113")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("-0.1");
+  (new Test("for114")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("-0.2");
+  (new Test("for115")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("0.1");
+  (new Test("for116")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UP)).equals("0.2");
+  
+  (new Test("for117")).ok=(m050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("0.0");
+  (new Test("for118")).ok=(m150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("-0.1");
+  (new Test("for119")).ok=(d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("0.0");
+  (new Test("for120")).ok=(d150.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_DOWN)).equals("0.1");
+  
+  d000=new com.ibm.math.BigDecimal("0.000");
+  d500=new com.ibm.math.BigDecimal("0.500");
+  (new Test("for121")).ok=(d000.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.0");
+  (new Test("for122")).ok=(d000.format(-1,2,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.00");
+  (new Test("for123")).ok=(d000.format(-1,3,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.000");
+  try{ // this should trap..
+   d050.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $95){ae=$95;
+   flag=(ae.getMessage()).equals("Rounding necessary");
+  }
+  (new Test("for124")).ok=flag;
+  (new Test("for125")).ok=(d050.format(-1,2,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.05");
+  (new Test("for126")).ok=(d050.format(-1,3,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.050");
+  (new Test("for127")).ok=(d500.format(-1,1,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.5");
+  (new Test("for128")).ok=(d500.format(-1,2,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.50");
+  (new Test("for129")).ok=(d500.format(-1,3,-1,-1,-1,com.ibm.math.MathContext.ROUND_UNNECESSARY)).equals("0.500");
+  
+  // bad negs --
+  try{
+   d050.format(-2,-1,-1,-1,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $96){
+   flag=true;
+  }
+  (new Test("for131")).ok=flag;
+  try{
+   d050.format(-1,-2,-1,-1,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $97){
+   flag=true;
+  }
+  (new Test("for132")).ok=flag;
+  try{
+   d050.format(-1,-1,-2,-1,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $98){
+   flag=true;
+  }
+  (new Test("for133")).ok=flag;
+  try{
+   d050.format(-1,-1,-1,-2,-1,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $99){
+   flag=true;
+  }
+  (new Test("for134")).ok=flag;
+  try{
+   d050.format(-1,-1,-1,-1,-2,-1);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $100){
+   flag=true;
+  }
+  (new Test("for135")).ok=flag;
+  try{
+   d050.format(-1,-1,-1,-1,-1,-2);
+   flag=false;
+  }
+  catch (java.lang.IllegalArgumentException $101){
+   flag=true;
+  }
+  (new Test("for136")).ok=flag;
+  
+  summary("format");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#hashCode} method. */
+ 
+ public void diaghashcode(){
+  java.lang.String hs;
+  com.ibm.math.BigDecimal d;
+  hs="27827817";
+  d=new com.ibm.math.BigDecimal(hs);
+  (new Test("has001")).ok=(d.hashCode())==(hs.hashCode());
+  hs="1.265E+200";
+  d=new com.ibm.math.BigDecimal(hs);
+  (new Test("has002")).ok=(d.hashCode())==(hs.hashCode());
+  hs="126.5E+200";
+  d=new com.ibm.math.BigDecimal(hs);
+  (new Test("has003")).ok=(d.hashCode())!=(hs.hashCode());
+  summary("hashCode");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#intValue} method. */
+ 
+ public void diagintvalue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  com.ibm.math.BigDecimal dimax;
+  com.ibm.math.BigDecimal num=null;
+  com.ibm.math.BigDecimal dv=null;
+  com.ibm.math.BigDecimal dimin;
+  
+  
+  // intValue --
+  
+  (new Test("inv001")).ok=imin==((new com.ibm.math.BigDecimal(imin)).intValue());
+  (new Test("inv002")).ok=((99))==((new com.ibm.math.BigDecimal("99")).intValue());
+  (new Test("inv003")).ok=((1))==((new com.ibm.math.BigDecimal("1")).intValue());
+  (new Test("inv004")).ok=((0))==((new com.ibm.math.BigDecimal("0")).intValue());
+  (new Test("inv005")).ok=((-1))==((new com.ibm.math.BigDecimal("-1")).intValue());
+  (new Test("inv006")).ok=((-99))==((new com.ibm.math.BigDecimal("-99")).intValue());
+  (new Test("inv007")).ok=imax==((new com.ibm.math.BigDecimal(imax)).intValue());
+  (new Test("inv008")).ok=((5))==((new com.ibm.math.BigDecimal("5.0")).intValue());
+  (new Test("inv009")).ok=((5))==((new com.ibm.math.BigDecimal("5.3")).intValue());
+  (new Test("inv010")).ok=((5))==((new com.ibm.math.BigDecimal("5.5")).intValue());
+  (new Test("inv011")).ok=((5))==((new com.ibm.math.BigDecimal("5.7")).intValue());
+  (new Test("inv012")).ok=((5))==((new com.ibm.math.BigDecimal("5.9")).intValue());
+  (new Test("inv013")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.0")).intValue());
+  (new Test("inv014")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.3")).intValue());
+  (new Test("inv015")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.5")).intValue());
+  (new Test("inv016")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.7")).intValue());
+  (new Test("inv017")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.9")).intValue());
+  (new Test("inv018")).ok=((new com.ibm.math.BigDecimal("88888888888")).intValue())==(-1305424328); // ugh
+  (new Test("inv019")).ok=((new com.ibm.math.BigDecimal("-88888888888")).intValue())==1305424328; // ugh
+  (new Test("inv020")).ok=((imin))==((new com.ibm.math.BigDecimal((((long)imax))+1)).intValue());
+  (new Test("inv021")).ok=((imax))==((new com.ibm.math.BigDecimal((((long)imin))-1)).intValue());
+  
+  // intValueExact --
+  
+  (new Test("inv101")).ok=imin==((new com.ibm.math.BigDecimal(imin)).intValueExact());
+  (new Test("inv102")).ok=((99))==((new com.ibm.math.BigDecimal("99")).intValue());
+  (new Test("inv103")).ok=((1))==((new com.ibm.math.BigDecimal("1")).intValue());
+  (new Test("inv104")).ok=((0))==((new com.ibm.math.BigDecimal("0")).intValue());
+  (new Test("inv105")).ok=((-1))==((new com.ibm.math.BigDecimal("-1")).intValue());
+  (new Test("inv106")).ok=((-99))==((new com.ibm.math.BigDecimal("-99")).intValue());
+  (new Test("inv107")).ok=imax==((new com.ibm.math.BigDecimal(imax)).intValue());
+  (new Test("inv108")).ok=((5))==((new com.ibm.math.BigDecimal("5.0")).intValue());
+  (new Test("inv109")).ok=((-5))==((new com.ibm.math.BigDecimal("-5.0")).intValue());
+  (new Test("inv110")).ok=imax==((new com.ibm.math.BigDecimal(imax)).intValueExact());
+  
+  try{
+   v="-88588688888";
+   (new com.ibm.math.BigDecimal(v)).intValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $102){ae=$102;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }
+  (new Test("inv200")).ok=flag;
+  
+  // this one could raise either overflow or bad decimal part
+  try{
+   v="88088818888.00001";
+   (new com.ibm.math.BigDecimal(v)).intValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $103){
+   flag=true;
+  }
+  (new Test("inv201")).ok=flag;
+  
+  // 1999.10.28: the testcases marked '*' failed
+  badstrings=new java.lang.String[]{"12345678901",(new com.ibm.math.BigDecimal(imax)).add(one).toString(),(new com.ibm.math.BigDecimal(imin)).subtract(one).toString(),"3731367293","4731367293","5731367293","6731367293","7731367293","8731367293","9731367293","-3731367293","-4731367293","-5731367293","-6731367293","-7731367293","-8731367293","-9731367293",(new com.ibm.math.BigDecimal(imin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(imax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(imin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(imax)).multiply(ten).toString(),"4731367293","4831367293","4931367293","5031367293","5131367293","5231367293","5331367293","5431367293","5531367293","5631367293","5731367293","5831367293","5931367293","6031367293","6131367293","6231367293","6331367293","6431367293","6531367293","6631367293","6731367293","2200000000","2300000000","2400000000","2500000000","2600000000","2700000000","2800000000","2900000000","-2200000000","-2300000000","-2400000000","-2500000000","-2600000000","-2700000000","-2800000000","-2900000000","25E+8","-25E+8","-12345678901"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225  *
+  // 226
+  // 227
+  // 228
+  // 229  *
+  // 230
+  // 231
+  // 232  *
+  // 233
+  // 234
+  // 235
+  // 236  *
+  // 237
+  // 238
+  // 239
+  // 240
+  // 241
+  // 242  *
+  // 243  *
+  // 244  *
+  // 245  *
+  // 246  *
+  // 247  *
+  // 248  *
+  // 249  *
+  // 250  *
+  // 251  *
+  // 252  *
+  // 253  *
+  // 254  *
+  // 255  *
+  // 256  *
+  // 257  *
+  // 258  *
+  // 259
+  // 260
+  // 261
+  // 262
+  // 263
+  // 264
+  // 265
+  // 266
+  // 267
+  // 268
+  // 269
+  // 270
+  // 271
+  // 272
+  // 273
+  // 274
+  // 275
+  // 276
+  // 277
+  // 278
+  // 279
+  // 280
+  {int $104=badstrings.length;i=0;i:for(;$104>0;$104--,i++){
+   try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $105){ae=$105;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("inv"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  // now slip in some single bits...
+  dimax=new com.ibm.math.BigDecimal(imax);
+  {i=0;i:for(;i<=49;i++){
+   try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dimax.add(num,mc50);
+    dv.intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $106){ae=$106;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("inv"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  dimin=new com.ibm.math.BigDecimal(imin);
+  {i=50;i:for(;i<=99;i++){
+   try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dimin.subtract(num,mc50);
+    dv.intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $107){ae=$107;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("inv"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  
+  // the following should all raise bad-decimal-part exceptions
+  badstrings=new java.lang.String[]{"0.09","0.9","0.01","0.1","-0.01","-0.1","1.01","-1.01","-1.1","-111.111","+111.111","1.09","1.05","1.04","1.99","1.9","1.5","1.4","-1.09","-1.05","-1.04","-1.99","-1.9","-1.5","-1.4","1E-1000","-1E-1000","11E-1","1.5"}; // 400-403
+  // 404-407
+  // 408-411
+  // 412-416
+  // 417-420
+  // 421-424
+  // 425-428
+  
+  {int $108=badstrings.length;i=0;i:for(;$108>0;$108--,i++){
+   try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).intValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $109){ae=$109;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+norm);
+   }
+   (new Test("inv"+(400+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("intValue+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#longValue} method. */
+ 
+ public void diaglongvalue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  com.ibm.math.BigDecimal dlmax;
+  com.ibm.math.BigDecimal num=null;
+  com.ibm.math.BigDecimal dv=null;
+  com.ibm.math.BigDecimal dlmin;
+  
+  
+  // longValue --
+  
+  (new Test("lov001")).ok=lmin==((new com.ibm.math.BigDecimal(lmin)).longValue());
+  (new Test("lov002")).ok=(((long)99))==((new com.ibm.math.BigDecimal("99")).longValue());
+  (new Test("lov003")).ok=(((long)1))==((new com.ibm.math.BigDecimal("1")).longValue());
+  (new Test("lov004")).ok=(((long)0))==((new com.ibm.math.BigDecimal("0")).longValue());
+  (new Test("lov005")).ok=(((long)-1))==((new com.ibm.math.BigDecimal("-1")).longValue());
+  (new Test("lov006")).ok=(((long)-99))==((new com.ibm.math.BigDecimal("-99")).longValue());
+  (new Test("lov007")).ok=lmax==((new com.ibm.math.BigDecimal(lmax)).longValue());
+  (new Test("lov008")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.0")).longValue());
+  (new Test("lov009")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.3")).longValue());
+  (new Test("lov010")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.5")).longValue());
+  (new Test("lov011")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.7")).longValue());
+  (new Test("lov012")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.9")).longValue());
+  (new Test("lov013")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.0")).longValue());
+  (new Test("lov014")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.3")).longValue());
+  (new Test("lov015")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.5")).longValue());
+  (new Test("lov016")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.7")).longValue());
+  (new Test("lov017")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.9")).longValue());
+  (new Test("lov018")).ok=((new com.ibm.math.BigDecimal("888888888899999999998")).longValue())==3445173361941522430L; // ugh
+  (new Test("lov019")).ok=((new com.ibm.math.BigDecimal("-888888888899999999998")).longValue())==(-3445173361941522430L); // ugh
+  
+  // longValueExact --
+  
+  (new Test("lov101")).ok=lmin==((new com.ibm.math.BigDecimal(lmin)).longValue());
+  (new Test("lov102")).ok=(((long)99))==((new com.ibm.math.BigDecimal("99")).longValue());
+  (new Test("lov103")).ok=(((long)1))==((new com.ibm.math.BigDecimal("1")).longValue());
+  (new Test("lov104")).ok=(((long)0))==((new com.ibm.math.BigDecimal("0")).longValue());
+  (new Test("lov105")).ok=(((long)-1))==((new com.ibm.math.BigDecimal("-1")).longValue());
+  (new Test("lov106")).ok=(((long)-99))==((new com.ibm.math.BigDecimal("-99")).longValue());
+  (new Test("lov107")).ok=lmax==((new com.ibm.math.BigDecimal(lmax)).longValue());
+  (new Test("lov108")).ok=(((long)5))==((new com.ibm.math.BigDecimal("5.0")).longValue());
+  (new Test("lov109")).ok=(((long)-5))==((new com.ibm.math.BigDecimal("-5.0")).longValue());
+  
+  try{
+   v="-888888888899999999998";
+   (new com.ibm.math.BigDecimal(v)).longValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $110){ae=$110;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }
+  (new Test("lov200")).ok=flag;
+  try{
+   v="88888887487487479488888";
+   (new com.ibm.math.BigDecimal(v)).longValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $111){ae=$111;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }
+  (new Test("lov201")).ok=flag;
+  try{
+   v="1.5";
+   (new com.ibm.math.BigDecimal(v)).longValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $112){ae=$112;
+   flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+v);
+  }
+  (new Test("lov202")).ok=flag;
+  
+  badstrings=new java.lang.String[]{"1234567890110987654321","-1234567890110987654321",(new com.ibm.math.BigDecimal(lmax)).add(one).toString(),(new com.ibm.math.BigDecimal(lmin)).subtract(one).toString(),(new com.ibm.math.BigDecimal(lmin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(lmax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(lmin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(lmax)).multiply(ten).toString(),"9223372036854775818","9323372036854775818","9423372036854775818","9523372036854775818","9623372036854775818","9723372036854775818","9823372036854775818","9923372036854775818","-9223372036854775818","-9323372036854775818","-9423372036854775818","-9523372036854775818","-9623372036854775818","-9723372036854775818","-9823372036854775818","-9923372036854775818","12345678901234567890"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225
+  // 226
+  // 227
+  // 228
+  // 229
+  // 230
+  // 231
+  // 232
+  // 233
+  // 234
+  // 235
+  // 236
+  // 237
+  // 238
+  // 239
+  // 240
+  // 241
+  // 242
+  // 243
+  // 244
+  {int $113=badstrings.length;i=0;i:for(;$113>0;$113--,i++){
+   try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).longValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $114){ae=$114;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("lov"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  // now slip in some single bits...
+  dlmax=new com.ibm.math.BigDecimal(lmax);
+  {i=0;i:for(;i<=99;i++){
+   try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dlmax.add(num,mc50);
+    dv.longValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $115){ae=$115;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("lov"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  dlmin=new com.ibm.math.BigDecimal(lmin);
+  {i=0;i:for(;i<=99;i++){
+   try{
+    num=two.pow(new com.ibm.math.BigDecimal(i),mc50);
+    dv=dlmin.subtract(num,mc50);
+    dv.longValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $116){ae=$116;
+    norm=dv.toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("lov"+(400+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("longValue+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#movePointLeft} method. */
+ 
+ public void diagmovepointleft(){
+  (new Test("mpl001")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(-10).toString()).equals("-10000000000");
+  (new Test("mpl002")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(-5).toString()).equals("-100000");
+  (new Test("mpl003")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(-1).toString()).equals("-10");
+  (new Test("mpl004")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(0).toString()).equals("-1");
+  (new Test("mpl005")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(+1).toString()).equals("-0.1");
+  (new Test("mpl006")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(+5).toString()).equals("-0.00001");
+  (new Test("mpl007")).ok=((new com.ibm.math.BigDecimal("-1")).movePointLeft(+10).toString()).equals("-0.0000000001");
+  
+  (new Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(-10).toString()).equals("0");
+  (new Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(-5).toString()).equals("0");
+  (new Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(-1).toString()).equals("0");
+  (new Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(0).toString()).equals("0");
+  (new Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(+1).toString()).equals("0.0");
+  (new Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(+5).toString()).equals("0.00000");
+  (new Test("mpl010")).ok=((new com.ibm.math.BigDecimal("0")).movePointLeft(+10).toString()).equals("0.0000000000");
+  
+  (new Test("mpl020")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(-10).toString()).equals("10000000000");
+  (new Test("mpl021")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(-5).toString()).equals("100000");
+  (new Test("mpl022")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(-1).toString()).equals("10");
+  (new Test("mpl023")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(0).toString()).equals("1");
+  (new Test("mpl024")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(+1).toString()).equals("0.1");
+  (new Test("mpl025")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(+5).toString()).equals("0.00001");
+  (new Test("mpl026")).ok=((new com.ibm.math.BigDecimal("+1")).movePointLeft(+10).toString()).equals("0.0000000001");
+  
+  (new Test("mpl030")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(-10).toString()).equals("50000000000");
+  (new Test("mpl031")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(-5).toString()).equals("500000");
+  (new Test("mpl032")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(-1).toString()).equals("50");
+  (new Test("mpl033")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(0).toString()).equals("5");
+  (new Test("mpl034")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(+1).toString()).equals("0.5");
+  (new Test("mpl035")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(+5).toString()).equals("0.00005");
+  (new Test("mpl036")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointLeft(+10).toString()).equals("0.0000000005");
+  
+  summary("movePointLeft");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#movePointRight} method. */
+ 
+ public void diagmovepointright(){
+  (new Test("mpr001")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(+10).toString()).equals("-10000000000");
+  (new Test("mpr002")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(+5).toString()).equals("-100000");
+  (new Test("mpr003")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(+1).toString()).equals("-10");
+  (new Test("mpr004")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(0).toString()).equals("-1");
+  (new Test("mpr005")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(-1).toString()).equals("-0.1");
+  (new Test("mpr006")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(-5).toString()).equals("-0.00001");
+  (new Test("mpr007")).ok=((new com.ibm.math.BigDecimal("-1")).movePointRight(-10).toString()).equals("-0.0000000001");
+  
+  (new Test("mpr010")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(+10).toString()).equals("0");
+  (new Test("mpr011")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(+5).toString()).equals("0");
+  (new Test("mpr012")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(+1).toString()).equals("0");
+  (new Test("mpr013")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(0).toString()).equals("0");
+  (new Test("mpr014")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(-1).toString()).equals("0.0");
+  (new Test("mpr015")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(-5).toString()).equals("0.00000");
+  (new Test("mpr016")).ok=((new com.ibm.math.BigDecimal("0")).movePointRight(-10).toString()).equals("0.0000000000");
+  
+  (new Test("mpr020")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(+10).toString()).equals("10000000000");
+  (new Test("mpr021")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(+5).toString()).equals("100000");
+  (new Test("mpr022")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(+1).toString()).equals("10");
+  (new Test("mpr023")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(0).toString()).equals("1");
+  (new Test("mpr024")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(-1).toString()).equals("0.1");
+  (new Test("mpr025")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(-5).toString()).equals("0.00001");
+  (new Test("mpr026")).ok=((new com.ibm.math.BigDecimal("+1")).movePointRight(-10).toString()).equals("0.0000000001");
+  
+  (new Test("mpr030")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(+10).toString()).equals("50000000000");
+  (new Test("mpr031")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(+5).toString()).equals("500000");
+  (new Test("mpr032")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(+1).toString()).equals("50");
+  (new Test("mpr033")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(0).toString()).equals("5");
+  (new Test("mpr034")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(-1).toString()).equals("0.5");
+  (new Test("mpr035")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(-5).toString()).equals("0.00005");
+  (new Test("mpr036")).ok=((new com.ibm.math.BigDecimal("0.5E+1")).movePointRight(-10).toString()).equals("0.0000000005");
+  
+  summary("movePointRight");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#scale} method. */
+ 
+ public void diagscale(){
+  (new Test("sca001")).ok=((new com.ibm.math.BigDecimal("-1")).scale())==0;
+  (new Test("sca002")).ok=((new com.ibm.math.BigDecimal("-10")).scale())==0;
+  (new Test("sca003")).ok=((new com.ibm.math.BigDecimal("+1")).scale())==0;
+  (new Test("sca004")).ok=((new com.ibm.math.BigDecimal("+10")).scale())==0;
+  (new Test("sca005")).ok=((new com.ibm.math.BigDecimal("1E+10")).scale())==0;
+  (new Test("sca006")).ok=((new com.ibm.math.BigDecimal("1E-10")).scale())==10;
+  (new Test("sca007")).ok=((new com.ibm.math.BigDecimal("0E-10")).scale())==0;
+  (new Test("sca008")).ok=((new com.ibm.math.BigDecimal("0.000")).scale())==3;
+  (new Test("sca009")).ok=((new com.ibm.math.BigDecimal("0.00")).scale())==2;
+  (new Test("sca010")).ok=((new com.ibm.math.BigDecimal("0.0")).scale())==1;
+  (new Test("sca011")).ok=((new com.ibm.math.BigDecimal("0.1")).scale())==1;
+  (new Test("sca012")).ok=((new com.ibm.math.BigDecimal("0.12")).scale())==2;
+  (new Test("sca013")).ok=((new com.ibm.math.BigDecimal("0.123")).scale())==3;
+  (new Test("sca014")).ok=((new com.ibm.math.BigDecimal("-0.0")).scale())==1;
+  (new Test("sca015")).ok=((new com.ibm.math.BigDecimal("-0.1")).scale())==1;
+  (new Test("sca016")).ok=((new com.ibm.math.BigDecimal("-0.12")).scale())==2;
+  (new Test("sca017")).ok=((new com.ibm.math.BigDecimal("-0.123")).scale())==3;
+  summary("scale");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#setScale} method. */
+ 
+ public void diagsetscale(){
+  boolean flag=false;
+  java.lang.RuntimeException e=null;
+  
+  (new Test("ssc001")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(0).toString()).equals("-1");
+  (new Test("ssc002")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(1).toString()).equals("-1.0");
+  (new Test("ssc003")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(2).toString()).equals("-1.00");
+  (new Test("ssc004")).ok=((new com.ibm.math.BigDecimal("0")).setScale(0).toString()).equals("0");
+  (new Test("ssc005")).ok=((new com.ibm.math.BigDecimal("0")).setScale(1).toString()).equals("0.0");
+  (new Test("ssc006")).ok=((new com.ibm.math.BigDecimal("0")).setScale(2).toString()).equals("0.00");
+  (new Test("ssc007")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(0).toString()).equals("1");
+  (new Test("ssc008")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(1).toString()).equals("1.0");
+  (new Test("ssc009")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(2).toString()).equals("1.00");
+  (new Test("ssc010")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-1");
+  (new Test("ssc011")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-1.0");
+  (new Test("ssc012")).ok=((new com.ibm.math.BigDecimal("-1")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-1.00");
+  (new Test("ssc013")).ok=((new com.ibm.math.BigDecimal("0")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new Test("ssc014")).ok=((new com.ibm.math.BigDecimal("0")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.0");
+  (new Test("ssc015")).ok=((new com.ibm.math.BigDecimal("0")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.00");
+  (new Test("ssc016")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  (new Test("ssc017")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.0");
+  (new Test("ssc018")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.00");
+  
+  (new Test("ssc020")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.040");
+  (new Test("ssc021")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.04");
+  (new Test("ssc022")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.0");
+  (new Test("ssc023")).ok=((new com.ibm.math.BigDecimal("1.04")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  (new Test("ssc024")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.050");
+  (new Test("ssc025")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.05");
+  (new Test("ssc026")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.1");
+  (new Test("ssc027")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  (new Test("ssc028")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1.050");
+  (new Test("ssc029")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1.05");
+  (new Test("ssc030")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1.0");
+  (new Test("ssc031")).ok=((new com.ibm.math.BigDecimal("1.05")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("1");
+  (new Test("ssc032")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(3,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.060");
+  (new Test("ssc033")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.06");
+  (new Test("ssc034")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.1");
+  (new Test("ssc035")).ok=((new com.ibm.math.BigDecimal("1.06")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1");
+  
+  (new Test("ssc040")).ok=((new com.ibm.math.BigDecimal("-10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("-10.00");
+  (new Test("ssc041")).ok=((new com.ibm.math.BigDecimal("+1")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("1.00");
+  (new Test("ssc042")).ok=((new com.ibm.math.BigDecimal("+10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("10.00");
+  (new Test("ssc043")).ok=((new com.ibm.math.BigDecimal("1E+10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("10000000000.00");
+  (new Test("ssc044")).ok=((new com.ibm.math.BigDecimal("1E-10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.00");
+  (new Test("ssc045")).ok=((new com.ibm.math.BigDecimal("1E-2")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.01");
+  (new Test("ssc046")).ok=((new com.ibm.math.BigDecimal("0E-10")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.00");
+  
+  // check rounding
+  (new Test("ssc050")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.01");
+  (new Test("ssc051")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("0.1");
+  (new Test("ssc052")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_CEILING).toString()).equals("1");
+  (new Test("ssc053")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.00");
+  (new Test("ssc054")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0.0");
+  (new Test("ssc055")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_DOWN).toString()).equals("0");
+  (new Test("ssc056")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.00");
+  (new Test("ssc057")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0.0");
+  (new Test("ssc058")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_FLOOR).toString()).equals("0");
+  (new Test("ssc059")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.00");
+  (new Test("ssc060")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0.0");
+  (new Test("ssc061")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_DOWN).toString()).equals("0");
+  (new Test("ssc062")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.00");
+  (new Test("ssc063")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new Test("ssc064")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new Test("ssc065")).ok=((new com.ibm.math.BigDecimal("0.015")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.02");
+  (new Test("ssc066")).ok=((new com.ibm.math.BigDecimal("0.015")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0.0");
+  (new Test("ssc067")).ok=((new com.ibm.math.BigDecimal("0.015")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_EVEN).toString()).equals("0");
+  (new Test("ssc068")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.01");
+  (new Test("ssc069")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.0");
+  (new Test("ssc070")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new Test("ssc071")).ok=((new com.ibm.math.BigDecimal("0.095")).setScale(2,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.10");
+  (new Test("ssc072")).ok=((new com.ibm.math.BigDecimal("0.095")).setScale(1,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0.1");
+  (new Test("ssc073")).ok=((new com.ibm.math.BigDecimal("0.095")).setScale(0,com.ibm.math.MathContext.ROUND_HALF_UP).toString()).equals("0");
+  (new Test("ssc074")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(2,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.01");
+  (new Test("ssc075")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(1,com.ibm.math.MathContext.ROUND_UP).toString()).equals("0.1");
+  (new Test("ssc076")).ok=((new com.ibm.math.BigDecimal("0.005")).setScale(0,com.ibm.math.MathContext.ROUND_UP).toString()).equals("1");
+  
+  try{checkscale:do{
+   (new com.ibm.math.BigDecimal(1)).setScale(-8);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $117){e=$117;
+   flag=(e.getMessage()).equals("Negative scale: -8");
+  }/*checkscale*/
+  (new Test("ssc100")).ok=flag;
+  try{checkrunn:do{
+   (new com.ibm.math.BigDecimal(1.0001D)).setScale(3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $118){e=$118;
+   flag=(e.getMessage()).equals("Rounding necessary");
+  }/*checkrunn*/
+  (new Test("ssc101")).ok=flag;
+  try{checkrunn:do{
+   (new com.ibm.math.BigDecimal(1E-8D)).setScale(3);
+   flag=false;
+  }while(false);}
+  catch (java.lang.RuntimeException $119){e=$119;
+   flag=(e.getMessage()).equals("Rounding necessary");
+  }/*checkrunn*/
+  (new Test("ssc102")).ok=flag;
+  summary("setScale");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the <code>BigDecimal.shortValue()</code> method. */
+ 
+ public void diagshortvalue(){
+  boolean flag=false;
+  java.lang.String v=null;
+  java.lang.ArithmeticException ae=null;
+  java.lang.String badstrings[];
+  int i=0;
+  java.lang.String norm=null;
+  
+  (new Test("shv002")).ok=(((short)0))==((new com.ibm.math.BigDecimal("0")).shortValue());
+  (new Test("shv003")).ok=(((short)1))==((new com.ibm.math.BigDecimal("1")).shortValue());
+  (new Test("shv004")).ok=(((short)99))==((new com.ibm.math.BigDecimal("99")).shortValue());
+  (new Test("shv006")).ok=((smax))==((new com.ibm.math.BigDecimal(smax)).shortValue());
+  (new Test("shv007")).ok=((smin))==((new com.ibm.math.BigDecimal(smin)).shortValue());
+  (new Test("shv008")).ok=((sneg))==((new com.ibm.math.BigDecimal(sneg)).shortValue());
+  (new Test("shv009")).ok=((szer))==((new com.ibm.math.BigDecimal(szer)).shortValue());
+  (new Test("shv010")).ok=((spos))==((new com.ibm.math.BigDecimal(spos)).shortValue());
+  (new Test("shv011")).ok=((smin))==((new com.ibm.math.BigDecimal(smax+1)).shortValue());
+  (new Test("shv012")).ok=((smax))==((new com.ibm.math.BigDecimal(smin-1)).shortValue());
+  
+  (new Test("shv022")).ok=(((short)0))==((new com.ibm.math.BigDecimal("0")).shortValueExact());
+  (new Test("shv023")).ok=(((short)1))==((new com.ibm.math.BigDecimal("1")).shortValueExact());
+  (new Test("shv024")).ok=(((short)99))==((new com.ibm.math.BigDecimal("99")).shortValueExact());
+  (new Test("shv026")).ok=((smax))==((new com.ibm.math.BigDecimal(smax)).shortValueExact());
+  (new Test("shv027")).ok=((smin))==((new com.ibm.math.BigDecimal(smin)).shortValueExact());
+  (new Test("shv028")).ok=((sneg))==((new com.ibm.math.BigDecimal(sneg)).shortValueExact());
+  (new Test("shv029")).ok=((szer))==((new com.ibm.math.BigDecimal(szer)).shortValueExact());
+  (new Test("shv030")).ok=((spos))==((new com.ibm.math.BigDecimal(spos)).shortValueExact());
+  try{
+   v="-88888888888";
+   (new com.ibm.math.BigDecimal(v)).shortValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $120){ae=$120;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }
+  (new Test("shv100")).ok=flag;
+  try{
+   v="88888888888";
+   (new com.ibm.math.BigDecimal(v)).shortValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $121){ae=$121;
+   flag=(ae.getMessage()).equals("Conversion overflow:"+" "+v);
+  }
+  (new Test("shv101")).ok=flag;
+  try{
+   v="1.5";
+   (new com.ibm.math.BigDecimal(v)).shortValueExact();
+   flag=false;
+  }
+  catch (java.lang.ArithmeticException $122){ae=$122;
+   flag=(ae.getMessage()).equals("Decimal part non-zero:"+" "+v);
+  }
+  (new Test("shv102")).ok=flag;
+  
+  badstrings=new java.lang.String[]{"123456",(new com.ibm.math.BigDecimal(smax)).add(one).toString(),(new com.ibm.math.BigDecimal(smin)).subtract(one).toString(),"71111","81111","91111","-71111","-81111","-91111",(new com.ibm.math.BigDecimal(smin)).multiply(two).toString(),(new com.ibm.math.BigDecimal(smax)).multiply(two).toString(),(new com.ibm.math.BigDecimal(smin)).multiply(ten).toString(),(new com.ibm.math.BigDecimal(smax)).multiply(ten).toString(),"-123456"}; // 220
+  // 221
+  // 222
+  // 223
+  // 224
+  // 225
+  // 226
+  // 227
+  // 228
+  // 229
+  // 230
+  // 231
+  // 232
+  // 233
+  {int $123=badstrings.length;i=0;i:for(;$123>0;$123--,i++){
+   try{
+    v=badstrings[i];
+    (new com.ibm.math.BigDecimal(v)).shortValueExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $124){ae=$124;
+    norm=(new com.ibm.math.BigDecimal(v)).toString();
+    flag=(ae.getMessage()).equals("Conversion overflow:"+" "+norm);
+   }
+   (new Test("shv"+(220+i))).ok=flag;
+   }
+  }/*i*/
+  
+  
+  summary("shortValue+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#signum} method. */
+ 
+ public void diagsignum(){
+  // necessarily checks some obscure constructions, too
+  (new Test("sig001")).ok=(-1)==((new com.ibm.math.BigDecimal("-1")).signum());
+  (new Test("sig002")).ok=(-1)==((new com.ibm.math.BigDecimal("-0.0010")).signum());
+  (new Test("sig003")).ok=(-1)==((new com.ibm.math.BigDecimal("-0.001")).signum());
+  (new Test("sig004")).ok=0==((new com.ibm.math.BigDecimal("-0.00")).signum());
+  (new Test("sig005")).ok=0==((new com.ibm.math.BigDecimal("-0")).signum());
+  (new Test("sig006")).ok=0==((new com.ibm.math.BigDecimal("0")).signum());
+  (new Test("sig007")).ok=0==((new com.ibm.math.BigDecimal("00")).signum());
+  (new Test("sig008")).ok=0==((new com.ibm.math.BigDecimal("00.0")).signum());
+  (new Test("sig009")).ok=1==((new com.ibm.math.BigDecimal("00.01")).signum());
+  (new Test("sig010")).ok=1==((new com.ibm.math.BigDecimal("00.01")).signum());
+  (new Test("sig011")).ok=1==((new com.ibm.math.BigDecimal("00.010")).signum());
+  (new Test("sig012")).ok=1==((new com.ibm.math.BigDecimal("01.01")).signum());
+  (new Test("sig013")).ok=1==((new com.ibm.math.BigDecimal("+0.01")).signum());
+  (new Test("sig014")).ok=1==((new com.ibm.math.BigDecimal("+0.001")).signum());
+  (new Test("sig015")).ok=1==((new com.ibm.math.BigDecimal("1")).signum());
+  (new Test("sig016")).ok=1==((new com.ibm.math.BigDecimal("1e+12")).signum());
+  (new Test("sig017")).ok=0==((new com.ibm.math.BigDecimal("00e+12")).signum());
+  summary("signum");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toBigDecimal} method. */
+ 
+ public void diagtobigdecimal(){
+  (new Test("tbd001")).ok=((new com.ibm.math.BigDecimal("0")).toBigDecimal().toString()).equals("0");
+  (new Test("tbd002")).ok=((new com.ibm.math.BigDecimal("-1")).toBigDecimal().toString()).equals("-1");
+  (new Test("tbd003")).ok=((new com.ibm.math.BigDecimal("+1")).toBigDecimal().toString()).equals("1");
+  (new Test("tbd004")).ok=((new com.ibm.math.BigDecimal("1")).toBigDecimal().toString()).equals("1");
+  (new Test("tbd005")).ok=((new com.ibm.math.BigDecimal("1E+2")).toBigDecimal().toString()).equals("100");
+  (new Test("tbd006")).ok=((new com.ibm.math.BigDecimal("1E-2")).toBigDecimal().toString()).equals("0.01");
+  (new Test("tbd007")).ok=((new com.ibm.math.BigDecimal("1E-8")).toBigDecimal().toString()).equals("0.00000001");
+  (new Test("tbd008")).ok=((new com.ibm.math.BigDecimal("1E-9")).toBigDecimal().toString()).equals("0.000000001");
+  (new Test("tbd009")).ok=((new com.ibm.math.BigDecimal("1E10")).toBigDecimal().toString()).equals("10000000000");
+  (new Test("tbd010")).ok=((new com.ibm.math.BigDecimal("1E12")).toBigDecimal().toString()).equals("1000000000000");
+  summary("toBigDecimal");
+  return;}
+/* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toBigInteger} method. */
+ 
+ public void diagtobiginteger(){
+  boolean flag=false;
+  java.lang.String badstrings[];
+  int i=0;
+  (new Test("tbi001")).ok=((new com.ibm.math.BigDecimal("-1")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi002")).ok=((new com.ibm.math.BigDecimal("0")).toBigInteger().toString()).equals("0");
+  (new Test("tbi003")).ok=((new com.ibm.math.BigDecimal("+1")).toBigInteger().toString()).equals("1");
+  (new Test("tbi004")).ok=((new com.ibm.math.BigDecimal("10")).toBigInteger().toString()).equals("10");
+  (new Test("tbi005")).ok=((new com.ibm.math.BigDecimal("1000")).toBigInteger().toString()).equals("1000");
+  (new Test("tbi006")).ok=((new com.ibm.math.BigDecimal("-1E+0")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi007")).ok=((new com.ibm.math.BigDecimal("0E+0")).toBigInteger().toString()).equals("0");
+  (new Test("tbi008")).ok=((new com.ibm.math.BigDecimal("+1E+0")).toBigInteger().toString()).equals("1");
+  (new Test("tbi009")).ok=((new com.ibm.math.BigDecimal("10E+0")).toBigInteger().toString()).equals("10");
+  (new Test("tbi010")).ok=((new com.ibm.math.BigDecimal("1E+3")).toBigInteger().toString()).equals("1000");
+  (new Test("tbi011")).ok=((new com.ibm.math.BigDecimal("0.00")).toBigInteger().toString()).equals("0");
+  (new Test("tbi012")).ok=((new com.ibm.math.BigDecimal("0.01")).toBigInteger().toString()).equals("0");
+  (new Test("tbi013")).ok=((new com.ibm.math.BigDecimal("0.0")).toBigInteger().toString()).equals("0");
+  (new Test("tbi014")).ok=((new com.ibm.math.BigDecimal("0.1")).toBigInteger().toString()).equals("0");
+  (new Test("tbi015")).ok=((new com.ibm.math.BigDecimal("-0.00")).toBigInteger().toString()).equals("0");
+  (new Test("tbi016")).ok=((new com.ibm.math.BigDecimal("-0.01")).toBigInteger().toString()).equals("0");
+  (new Test("tbi017")).ok=((new com.ibm.math.BigDecimal("-0.0")).toBigInteger().toString()).equals("0");
+  (new Test("tbi018")).ok=((new com.ibm.math.BigDecimal("-0.1")).toBigInteger().toString()).equals("0");
+  (new Test("tbi019")).ok=((new com.ibm.math.BigDecimal("1.00")).toBigInteger().toString()).equals("1");
+  (new Test("tbi020")).ok=((new com.ibm.math.BigDecimal("1.01")).toBigInteger().toString()).equals("1");
+  (new Test("tbi021")).ok=((new com.ibm.math.BigDecimal("1.0")).toBigInteger().toString()).equals("1");
+  (new Test("tbi022")).ok=((new com.ibm.math.BigDecimal("1.1")).toBigInteger().toString()).equals("1");
+  (new Test("tbi023")).ok=((new com.ibm.math.BigDecimal("-1.00")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi024")).ok=((new com.ibm.math.BigDecimal("-1.01")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi025")).ok=((new com.ibm.math.BigDecimal("-1.0")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi026")).ok=((new com.ibm.math.BigDecimal("-1.1")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi027")).ok=((new com.ibm.math.BigDecimal("-111.111")).toBigInteger().toString()).equals("-111");
+  (new Test("tbi028")).ok=((new com.ibm.math.BigDecimal("+111.111")).toBigInteger().toString()).equals("111");
+  (new Test("tbi029")).ok=((new com.ibm.math.BigDecimal("0.09")).toBigInteger().toString()).equals("0");
+  (new Test("tbi030")).ok=((new com.ibm.math.BigDecimal("0.9")).toBigInteger().toString()).equals("0");
+  (new Test("tbi031")).ok=((new com.ibm.math.BigDecimal("1.09")).toBigInteger().toString()).equals("1");
+  (new Test("tbi032")).ok=((new com.ibm.math.BigDecimal("1.05")).toBigInteger().toString()).equals("1");
+  (new Test("tbi033")).ok=((new com.ibm.math.BigDecimal("1.04")).toBigInteger().toString()).equals("1");
+  (new Test("tbi034")).ok=((new com.ibm.math.BigDecimal("1.99")).toBigInteger().toString()).equals("1");
+  (new Test("tbi034")).ok=((new com.ibm.math.BigDecimal("1.9")).toBigInteger().toString()).equals("1");
+  (new Test("tbi035")).ok=((new com.ibm.math.BigDecimal("1.5")).toBigInteger().toString()).equals("1");
+  (new Test("tbi036")).ok=((new com.ibm.math.BigDecimal("1.4")).toBigInteger().toString()).equals("1");
+  (new Test("tbi037")).ok=((new com.ibm.math.BigDecimal("-1.09")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi038")).ok=((new com.ibm.math.BigDecimal("-1.05")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi039")).ok=((new com.ibm.math.BigDecimal("-1.04")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi040")).ok=((new com.ibm.math.BigDecimal("-1.99")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi041")).ok=((new com.ibm.math.BigDecimal("-1.9")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi042")).ok=((new com.ibm.math.BigDecimal("-1.5")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi043")).ok=((new com.ibm.math.BigDecimal("-1.4")).toBigInteger().toString()).equals("-1");
+  (new Test("tbi044")).ok=((new com.ibm.math.BigDecimal("1E-1000")).toBigInteger().toString()).equals("0");
+  (new Test("tbi045")).ok=((new com.ibm.math.BigDecimal("-1E-1000")).toBigInteger().toString()).equals("0");
+  
+  // Exact variety --
+  (new Test("tbi101")).ok=((new com.ibm.math.BigDecimal("-1")).toBigIntegerExact().toString()).equals("-1");
+  (new Test("tbi102")).ok=((new com.ibm.math.BigDecimal("0")).toBigIntegerExact().toString()).equals("0");
+  (new Test("tbi103")).ok=((new com.ibm.math.BigDecimal("+1")).toBigIntegerExact().toString()).equals("1");
+  (new Test("tbi104")).ok=((new com.ibm.math.BigDecimal("10")).toBigIntegerExact().toString()).equals("10");
+  (new Test("tbi105")).ok=((new com.ibm.math.BigDecimal("1000")).toBigIntegerExact().toString()).equals("1000");
+  (new Test("tbi106")).ok=((new com.ibm.math.BigDecimal("-1E+0")).toBigIntegerExact().toString()).equals("-1");
+  (new Test("tbi107")).ok=((new com.ibm.math.BigDecimal("0E+0")).toBigIntegerExact().toString()).equals("0");
+  (new Test("tbi108")).ok=((new com.ibm.math.BigDecimal("+1E+0")).toBigIntegerExact().toString()).equals("1");
+  (new Test("tbi109")).ok=((new com.ibm.math.BigDecimal("10E+0")).toBigIntegerExact().toString()).equals("10");
+  (new Test("tbi110")).ok=((new com.ibm.math.BigDecimal("1E+3")).toBigIntegerExact().toString()).equals("1000");
+  (new Test("tbi111")).ok=((new com.ibm.math.BigDecimal("0.00")).toBigIntegerExact().toString()).equals("0");
+  (new Test("tbi112")).ok=((new com.ibm.math.BigDecimal("0.0")).toBigIntegerExact().toString()).equals("0");
+  (new Test("tbi113")).ok=((new com.ibm.math.BigDecimal("-0.00")).toBigIntegerExact().toString()).equals("0");
+  (new Test("tbi114")).ok=((new com.ibm.math.BigDecimal("-0.0")).toBigIntegerExact().toString()).equals("0");
+  (new Test("tbi115")).ok=((new com.ibm.math.BigDecimal("1.00")).toBigIntegerExact().toString()).equals("1");
+  (new Test("tbi116")).ok=((new com.ibm.math.BigDecimal("1.0")).toBigIntegerExact().toString()).equals("1");
+  (new Test("tbi117")).ok=((new com.ibm.math.BigDecimal("-1.00")).toBigIntegerExact().toString()).equals("-1");
+  (new Test("tbi118")).ok=((new com.ibm.math.BigDecimal("-1.0")).toBigIntegerExact().toString()).equals("-1");
+  (new Test("tbi119")).ok=((new com.ibm.math.BigDecimal("1.00000000000000000000000000000")).toBigIntegerExact().toString()).equals("1");
+  
+  // the following should all raise exceptions
+  
+  badstrings=new java.lang.String[]{"0.09","0.9","0.01","0.1","-0.01","-0.1","1.01","-1.01","-1.1","-111.111","+111.111","1.09","1.05","1.04","1.99","1.9","1.5","1.4","-1.09","-1.05","-1.04","-1.99","-1.9","-1.5","-1.4","1E-1000","-1E-1000","11E-1","1.1","127623156123656561356123512315631231551312356.000001","0.000000000000000000000000000000000000000000000001"}; // 300-303
+  // 304-307
+  // 308-311
+  // 312-316
+  // 317-320
+  // 321-324
+  // 325-328
+  // 329
+  // 330
+  
+  {int $125=badstrings.length;i=0;i:for(;$125>0;$125--,i++){
+   try{
+    (new com.ibm.math.BigDecimal(badstrings[i])).toBigIntegerExact();
+    flag=false;
+   }
+   catch (java.lang.ArithmeticException $126){
+    flag=true;
+   }
+   (new Test("tbi"+(300+i))).ok=flag;
+   }
+  }/*i*/
+  
+  summary("toBigInteger+");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toCharArray} method. */
+ 
+ public void diagtochararray(){
+  java.lang.String str;
+  char car[];
+  com.ibm.math.BigDecimal d;
+  char ca[];
+  // the function of this has been tested above, this is simply an
+  // existence proof and type-check
+  str="-123.45";
+  car=(str).toCharArray();
+  d=new com.ibm.math.BigDecimal(str);
+  ca=d.toCharArray();
+  (new Test("tca001")).ok=ca.length==car.length;
+  (new Test("tca002")).ok=(new java.lang.String(ca)).equals((java.lang.Object)(new java.lang.String(car)));
+  (new Test("tca003")).ok=(d.toCharArray() instanceof char[]);
+  (new Test("tca004")).ok=(ca instanceof char[]);
+  summary("toCharArray");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#toString} method. */
+ 
+ public void diagtostring(){
+  java.lang.String str;
+  char car[];
+  com.ibm.math.BigDecimal d;
+  char ca[];
+  java.lang.String cs;
+  // the function of this has been tested above, this is simply an
+  // existence proof and type-check
+  str="123.45";
+  car=(str).toCharArray();
+  d=new com.ibm.math.BigDecimal(car,0,car.length);
+  ca=d.toCharArray();
+  cs=d.toString();
+  (new Test("tos001")).ok=(str.toCharArray().length)==ca.length;
+  (new Test("tos002")).ok=(str.length())==(cs.length());
+  (new Test("tos003")).ok=str.equals((java.lang.Object)(new java.lang.String(ca)));
+  (new Test("tos004")).ok=str.equals((java.lang.Object)cs);
+  (new Test("tos005")).ok=(cs instanceof java.lang.String);
+  (new Test("tos006")).ok=(d.toString() instanceof java.lang.String);
+  summary("toString");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#unscaledValue} method. */
+ 
+ public void diagunscaledvalue(){
+  // just like toBigInteger, but scaly bits are preserved [without dots]
+  (new Test("uns001")).ok=((new com.ibm.math.BigDecimal("-1")).unscaledValue().toString()).equals("-1");
+  (new Test("uns002")).ok=((new com.ibm.math.BigDecimal("0")).unscaledValue().toString()).equals("0");
+  (new Test("uns003")).ok=((new com.ibm.math.BigDecimal("+1")).unscaledValue().toString()).equals("1");
+  (new Test("uns004")).ok=((new com.ibm.math.BigDecimal("10")).unscaledValue().toString()).equals("10");
+  (new Test("uns005")).ok=((new com.ibm.math.BigDecimal("1000")).unscaledValue().toString()).equals("1000");
+  (new Test("uns006")).ok=((new com.ibm.math.BigDecimal("-1E+0")).unscaledValue().toString()).equals("-1");
+  (new Test("uns007")).ok=((new com.ibm.math.BigDecimal("0E+0")).unscaledValue().toString()).equals("0");
+  (new Test("uns008")).ok=((new com.ibm.math.BigDecimal("+1E+0")).unscaledValue().toString()).equals("1");
+  (new Test("uns009")).ok=((new com.ibm.math.BigDecimal("10E+0")).unscaledValue().toString()).equals("10");
+  (new Test("uns010")).ok=((new com.ibm.math.BigDecimal("1E+3")).unscaledValue().toString()).equals("1000");
+  (new Test("uns011")).ok=((new com.ibm.math.BigDecimal("0.00")).unscaledValue().toString()).equals("0");
+  (new Test("uns012")).ok=((new com.ibm.math.BigDecimal("0.01")).unscaledValue().toString()).equals("1");
+  (new Test("uns013")).ok=((new com.ibm.math.BigDecimal("0.0")).unscaledValue().toString()).equals("0");
+  (new Test("uns014")).ok=((new com.ibm.math.BigDecimal("0.1")).unscaledValue().toString()).equals("1");
+  (new Test("uns015")).ok=((new com.ibm.math.BigDecimal("-0.00")).unscaledValue().toString()).equals("0");
+  (new Test("uns016")).ok=((new com.ibm.math.BigDecimal("-0.01")).unscaledValue().toString()).equals("-1");
+  (new Test("uns017")).ok=((new com.ibm.math.BigDecimal("-0.0")).unscaledValue().toString()).equals("0");
+  (new Test("uns018")).ok=((new com.ibm.math.BigDecimal("-0.1")).unscaledValue().toString()).equals("-1");
+  (new Test("uns019")).ok=((new com.ibm.math.BigDecimal("1.00")).unscaledValue().toString()).equals("100");
+  (new Test("uns020")).ok=((new com.ibm.math.BigDecimal("1.01")).unscaledValue().toString()).equals("101");
+  (new Test("uns021")).ok=((new com.ibm.math.BigDecimal("1.0")).unscaledValue().toString()).equals("10");
+  (new Test("uns022")).ok=((new com.ibm.math.BigDecimal("1.1")).unscaledValue().toString()).equals("11");
+  (new Test("uns023")).ok=((new com.ibm.math.BigDecimal("-1.00")).unscaledValue().toString()).equals("-100");
+  (new Test("uns024")).ok=((new com.ibm.math.BigDecimal("-1.01")).unscaledValue().toString()).equals("-101");
+  (new Test("uns025")).ok=((new com.ibm.math.BigDecimal("-1.0")).unscaledValue().toString()).equals("-10");
+  (new Test("uns026")).ok=((new com.ibm.math.BigDecimal("-1.1")).unscaledValue().toString()).equals("-11");
+  (new Test("uns027")).ok=((new com.ibm.math.BigDecimal("-111.111")).unscaledValue().toString()).equals("-111111");
+  (new Test("uns028")).ok=((new com.ibm.math.BigDecimal("+111.111")).unscaledValue().toString()).equals("111111");
+  summary("unscaledValue");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link BigDecimal#valueOf} method [long and double]. */
+ 
+ public void diagvalueof(){
+  boolean flag=false;
+  java.lang.NumberFormatException e=null;
+  double dzer;
+  double dpos;
+  double dneg;
+  double dpos5;
+  double dneg5;
+  double dmin;
+  double dmax;
+  double d;
+  
+  // valueOf(long [,scale]) --
+  
+  (new Test("val001")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)-2)).toString()).equals("-2");
+  (new Test("val002")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)-1)).toString()).equals("-1");
+  (new Test("val003")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)-0)).toString()).equals("0");
+  (new Test("val004")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)+1)).toString()).equals("1");
+  (new Test("val005")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)+2)).toString()).equals("2");
+  (new Test("val006")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)10)).toString()).equals("10");
+  (new Test("val007")).ok=(com.ibm.math.BigDecimal.valueOf((long)((byte)11)).toString()).equals("11");
+  (new Test("val008")).ok=(com.ibm.math.BigDecimal.valueOf(lmin).toString()).equals("-9223372036854775808");
+  (new Test("val009")).ok=(com.ibm.math.BigDecimal.valueOf(lmax).toString()).equals("9223372036854775807");
+  (new Test("val010")).ok=(com.ibm.math.BigDecimal.valueOf(lneg).toString()).equals("-1");
+  (new Test("val011")).ok=(com.ibm.math.BigDecimal.valueOf(lzer).toString()).equals("0");
+  (new Test("val012")).ok=(com.ibm.math.BigDecimal.valueOf(lpos).toString()).equals("1");
+  (new Test("val013")).ok=(com.ibm.math.BigDecimal.valueOf(lmin,0).toString()).equals("-9223372036854775808");
+  (new Test("val014")).ok=(com.ibm.math.BigDecimal.valueOf(lmax,0).toString()).equals("9223372036854775807");
+  (new Test("val015")).ok=(com.ibm.math.BigDecimal.valueOf(lneg,0).toString()).equals("-1");
+  (new Test("val016")).ok=(com.ibm.math.BigDecimal.valueOf(lpos,0).toString()).equals("1");
+  
+  (new Test("val017")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,0).toString()).equals("0");
+  (new Test("val018")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,1).toString()).equals("0.0");
+  (new Test("val019")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,2).toString()).equals("0.00");
+  (new Test("val020")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,3).toString()).equals("0.000");
+  (new Test("val021")).ok=(com.ibm.math.BigDecimal.valueOf(lzer,10).toString()).equals("0.0000000000");
+  
+  (new Test("val022")).ok=(com.ibm.math.BigDecimal.valueOf(lmin,7).toString()).equals("-922337203685.4775808");
+  (new Test("val023")).ok=(com.ibm.math.BigDecimal.valueOf(lmax,11).toString()).equals("92233720.36854775807");
+  
+  
+  try{checkscale:do{
+   com.ibm.math.BigDecimal.valueOf((long)23,-8);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $127){e=$127;
+   flag=(e.getMessage()).equals("Negative scale: -8");
+  }/*checkscale*/
+  (new Test("val100")).ok=flag;
+  
+  // valueOf(double) --
+  
+  dzer=(double)0;
+  dpos=(double)1;
+  dpos=dpos/((double)10);
+  dneg=(double)-dpos;
+  (new Test("val201")).ok=(com.ibm.math.BigDecimal.valueOf(dneg).toString()).equals("-0.1");
+  (new Test("val202")).ok=(com.ibm.math.BigDecimal.valueOf(dzer).toString()).equals("0.0"); // cf. constructor
+  (new Test("val203")).ok=(com.ibm.math.BigDecimal.valueOf(dpos).toString()).equals("0.1");
+  dpos5=(double)0.5D;
+  dneg5=(double)-dpos5;
+  (new Test("val204")).ok=(com.ibm.math.BigDecimal.valueOf(dneg5).toString()).equals("-0.5");
+  (new Test("val205")).ok=(com.ibm.math.BigDecimal.valueOf(dpos5).toString()).equals("0.5");
+  dmin=java.lang.Double.MIN_VALUE;
+  dmax=java.lang.Double.MAX_VALUE;
+  (new Test("val206")).ok=(com.ibm.math.BigDecimal.valueOf(dmin).toString()).equals("4.9E-324");
+  (new Test("val207")).ok=(com.ibm.math.BigDecimal.valueOf(dmax).toString()).equals("1.7976931348623157E+308");
+  
+  // nasties
+  d=(double)9;
+  d=d/((double)10);
+  (new Test("val210")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("0.9");
+  d=d/((double)10);
+  (new Test("val211")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("0.09");
+  d=d/((double)10);
+  (new Test("val212")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("0.0090");
+  d=d/((double)10);
+  (new Test("val213")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("9.0E-4");
+  d=d/((double)10);
+  (new Test("val214")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-5");
+  d=d/((double)10);
+  (new Test("val215")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-6");
+  d=d/((double)10);
+  (new Test("val216")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-7");
+  d=d/((double)10);
+  (new Test("val217")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999999E-8");
+  d=d/((double)10);
+  (new Test("val218")).ok=(com.ibm.math.BigDecimal.valueOf(d).toString()).equals("8.999999999999998E-9");
+  
+  try{checkpin:do{
+   com.ibm.math.BigDecimal.valueOf(java.lang.Double.POSITIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $128){
+   flag=true;
+  }/*checkpin*/
+  (new Test("val301")).ok=flag;
+  try{checknin:do{
+   com.ibm.math.BigDecimal.valueOf(java.lang.Double.NEGATIVE_INFINITY);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $129){
+   flag=true;
+  }/*checknin*/
+  (new Test("val302")).ok=flag;
+  try{checknan:do{
+   com.ibm.math.BigDecimal.valueOf(java.lang.Double.NaN);
+   flag=false;
+  }while(false);}
+  catch (java.lang.NumberFormatException $130){
+   flag=true;
+  }/*checknan*/
+  (new Test("val303")).ok=flag;
+  
+  summary("valueOf");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test the {@link MathContext} class. */
+ 
+ public void diagmathcontext(){
+  com.ibm.math.MathContext mccon1;
+  com.ibm.math.MathContext mccon2;
+  com.ibm.math.MathContext mccon3;
+  com.ibm.math.MathContext mccon4;
+  com.ibm.math.MathContext mcrmc;
+  com.ibm.math.MathContext mcrmd;
+  com.ibm.math.MathContext mcrmf;
+  com.ibm.math.MathContext mcrmhd;
+  com.ibm.math.MathContext mcrmhe;
+  com.ibm.math.MathContext mcrmhu;
+  com.ibm.math.MathContext mcrmun;
+  com.ibm.math.MathContext mcrmu;
+  boolean flag=false;
+  java.lang.IllegalArgumentException e=null;
+  // these tests are mostly existence checks
+  (new Test("mcn001")).ok=(com.ibm.math.MathContext.DEFAULT.getDigits())==9;
+  (new Test("mcn002")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new Test("mcn003")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())!=com.ibm.math.MathContext.ENGINEERING;
+  (new Test("mcn004")).ok=(com.ibm.math.MathContext.DEFAULT.getForm())!=com.ibm.math.MathContext.PLAIN;
+  (new Test("mcn005")).ok=(com.ibm.math.MathContext.DEFAULT.getLostDigits()?1:0)==0;
+  (new Test("mcn006")).ok=(com.ibm.math.MathContext.DEFAULT.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  (new Test("mcn010")).ok=com.ibm.math.MathContext.ROUND_CEILING>=0;
+  (new Test("mcn011")).ok=com.ibm.math.MathContext.ROUND_DOWN>=0;
+  (new Test("mcn012")).ok=com.ibm.math.MathContext.ROUND_FLOOR>=0;
+  (new Test("mcn013")).ok=com.ibm.math.MathContext.ROUND_HALF_DOWN>=0;
+  (new Test("mcn014")).ok=com.ibm.math.MathContext.ROUND_HALF_EVEN>=0;
+  (new Test("mcn015")).ok=com.ibm.math.MathContext.ROUND_HALF_UP>=0;
+  (new Test("mcn016")).ok=com.ibm.math.MathContext.ROUND_UNNECESSARY>=0;
+  (new Test("mcn017")).ok=com.ibm.math.MathContext.ROUND_UP>=0;
+  
+  mccon1=new com.ibm.math.MathContext(111);
+  (new Test("mcn021")).ok=(mccon1.getDigits())==111;
+  (new Test("mcn022")).ok=(mccon1.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new Test("mcn023")).ok=(mccon1.getLostDigits()?1:0)==0;
+  (new Test("mcn024")).ok=(mccon1.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  mccon2=new com.ibm.math.MathContext(78,com.ibm.math.MathContext.ENGINEERING);
+  (new Test("mcn031")).ok=(mccon2.getDigits())==78;
+  (new Test("mcn032")).ok=(mccon2.getForm())==com.ibm.math.MathContext.ENGINEERING;
+  (new Test("mcn033")).ok=(mccon2.getLostDigits()?1:0)==0;
+  (new Test("mcn034")).ok=(mccon2.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  mccon3=new com.ibm.math.MathContext(5,com.ibm.math.MathContext.PLAIN,true);
+  (new Test("mcn041")).ok=(mccon3.getDigits())==5;
+  (new Test("mcn042")).ok=(mccon3.getForm())==com.ibm.math.MathContext.PLAIN;
+  (new Test("mcn043")).ok=(mccon3.getLostDigits()?1:0)==1;
+  (new Test("mcn044")).ok=(mccon3.getRoundingMode())==com.ibm.math.MathContext.ROUND_HALF_UP;
+  
+  mccon4=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.SCIENTIFIC,false,com.ibm.math.MathContext.ROUND_FLOOR);
+  (new Test("mcn051")).ok=(mccon4.getDigits())==0;
+  (new Test("mcn052")).ok=(mccon4.getForm())==com.ibm.math.MathContext.SCIENTIFIC;
+  (new Test("mcn053")).ok=(mccon4.getLostDigits()?1:0)==0;
+  (new Test("mcn054")).ok=(mccon4.getRoundingMode())==com.ibm.math.MathContext.ROUND_FLOOR;
+  
+  (new Test("mcn061")).ok=(mccon1.toString()).equals("digits=111 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP");
+  
+  (new Test("mcn062")).ok=(mccon2.toString()).equals("digits=78 form=ENGINEERING lostDigits=0 roundingMode=ROUND_HALF_UP");
+  
+  (new Test("mcn063")).ok=(mccon3.toString()).equals("digits=5 form=PLAIN lostDigits=1 roundingMode=ROUND_HALF_UP");
+  
+  (new Test("mcn064")).ok=(mccon4.toString()).equals("digits=0 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_FLOOR");
+  
+  
+  // complete testing rounding modes round trips
+  mcrmc=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_CEILING);
+  mcrmd=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_DOWN);
+  mcrmf=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_FLOOR);
+  mcrmhd=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_HALF_DOWN);
+  mcrmhe=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_HALF_EVEN);
+  mcrmhu=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_HALF_UP);
+  mcrmun=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_UNNECESSARY);
+  mcrmu=new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,com.ibm.math.MathContext.ROUND_UP);
+  
+  (new Test("mcn071")).ok=(mcrmc.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_CEILING");
+  
+  (new Test("mcn072")).ok=(mcrmd.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_DOWN");
+  
+  (new Test("mcn073")).ok=(mcrmf.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_FLOOR");
+  
+  (new Test("mcn074")).ok=(mcrmhd.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_HALF_DOWN");
+  
+  (new Test("mcn075")).ok=(mcrmhe.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_HALF_EVEN");
+  
+  (new Test("mcn076")).ok=(mcrmhu.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_HALF_UP");
+  
+  (new Test("mcn077")).ok=(mcrmun.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_UNNECESSARY");
+  
+  (new Test("mcn078")).ok=(mcrmu.toString()).equals("digits=0 form=PLAIN lostDigits=0 roundingMode=ROUND_UP");
+  
+  
+  // [get methods tested already]
+  
+  // errors...
+  
+  try{checkdig:do{
+   new com.ibm.math.MathContext(-1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $131){e=$131;
+   flag=(e.getMessage()).equals("Digits too small: -1");
+  }/*checkdig*/
+  (new Test("mcn101")).ok=flag;
+  try{checkdigbig:do{
+   new com.ibm.math.MathContext(1000000000);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $132){e=$132;
+   flag=(e.getMessage()).equals("Digits too large: 1000000000");
+  }/*checkdigbig*/
+  (new Test("mcn102")).ok=flag;
+  
+  try{checkform:do{
+   new com.ibm.math.MathContext(0,5);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $133){e=$133;
+   flag=(e.getMessage()).equals("Bad form value: 5");
+  }/*checkform*/
+  (new Test("mcn111")).ok=flag;
+  try{checkformneg:do{
+   new com.ibm.math.MathContext(0,-1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $134){e=$134;
+   flag=(e.getMessage()).equals("Bad form value: -1");
+  }/*checkformneg*/
+  (new Test("mcn112")).ok=flag;
+  
+  // [lostDigits cannot be invalid]
+  
+  try{checkround:do{
+   new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,12);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $135){e=$135;
+   flag=(e.getMessage()).equals("Bad roundingMode value: 12");
+  }/*checkround*/
+  (new Test("mcn121")).ok=flag;
+  try{checkroundneg:do{
+   new com.ibm.math.MathContext(0,com.ibm.math.MathContext.PLAIN,false,-1);
+   flag=false;
+  }while(false);}
+  catch (java.lang.IllegalArgumentException $136){e=$136;
+   flag=(e.getMessage()).equals("Bad roundingMode value: -1");
+  }/*checkroundneg*/
+  (new Test("mcn122")).ok=flag;
+  
+  summary("MathContext");
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ 
+ /** Test general arithmetic (base operators).
+  * <p>Unlike the specific method tests, these tests were randomly
+  * generated by an IBM Object Rexx procedure, then manually corrected
+  * for known differences from ANSI X3-274.  These differences are:
+  * <ol>
+  * <li>the trigger point in exponential notation is fixed in ANSI
+  *     X3-274 but varies with DIGITS in Classic and Object Rexx
+  * <li>some trailing zeros were missing (e.g., 1.3 + 1E-60 should show
+  *     seven trailing zeros)
+  * <li>the power operator is less accurate in Object Rexx
+  * <li>ANSI X3-274 [errata 1999] rounds input numbers to DIGITS (rather
+  *     than truncating to DIGITS+1).
+  * </ol>
+  */
+ 
+ public void diagmath(){
+  com.ibm.math.MathContext def;
+  def=com.ibm.math.MathContext.DEFAULT;
+  mathtest(1,def,"-9375284.42","5516.99832E+27276984","5.51699832E+27276987","-5.51699832E+27276987","-5.17234284E+27276994","-1.69934516E-27276981","0","-9375284.42","6.79057752E+41");
+  mathtest(2,def,"-410.832710","99.3588243E-502740862","-410.832710","-410.832710","-4.08198550E-502740858","-4.13483868E+502740862","","","1.36977786E+26");
+  mathtest(3,def,"80025.2340","-8.03097581","80017.2030","80033.2650","-642680.718","-9964.57167","-9964","4.59102916","5.94544517E-40");
+  mathtest(4,def,"81052020.2","-464525495","-383473475","545577515","-3.76507298E+16","-0.17448347","0","81052020.2","");
+  mathtest(5,def,"715.069294E-26923151","85.4404128E+796388557","8.54404128E+796388558","-8.54404128E+796388558","6.10958157E+769465410","8.36921628E-823311708","0","7.15069294E-26923149","4.88802213E-242308334");
+  mathtest(6,def,"-21971575.0E+31454441","-70944960.3E+111238221","-7.09449603E+111238228","7.09449603E+111238228","1.55877252E+142692677","3.09698884E-79783781","0","-2.19715750E+31454448","-4.04549502E-220181139");
+  mathtest(7,def,"682.25316","54470185.6","54470867.9","-54469503.4","3.71624563E+10","0.0000125252586","0","682.25316","3.48578699E+154365541");
+  mathtest(8,def,"-257586757.","2082888.71","-255503868","-259669646","-5.36524548E+14","-123.668036","-123","-1391445.67","-1.26879515E+17519020");
+  mathtest(9,def,"319577540.E+242599761","60.7124561","3.19577540E+242599769","3.19577540E+242599769","1.94023374E+242599771","5.26378869E+242599767","","","");
+  mathtest(10,def,"-13769977.0","24371.3381","-13745605.7","-13794348.3","-3.35592765E+11","-565.007015","-565","-170.9735","-8.73734001E+173982");
+  mathtest(11,def,"-475.434972E-725464311","-3.22214066E-865476836","-4.75434972E-725464309","-4.75434972E-725464309","","1.47552519E+140012527","","","");
+  mathtest(12,def,"842.01250","197199893","197200735","-197199051","1.66044775E+11","0.00000426984258","0","842.01250","7.00674164E+576872502");
+  mathtest(13,def,"572.173103E+280128428","-7140.19428","5.72173103E+280128430","5.72173103E+280128430","-4.08542712E+280128434","-8.01341085E+280128426","","","");
+  mathtest(14,def,"674235.954E+476135291","9684.82245","6.74235954E+476135296","6.74235954E+476135296","6.52985550E+476135300","6.96177919E+476135292","","","");
+  mathtest(15,def,"-360557.921E+437116514","930428850","-3.60557921E+437116519","-3.60557921E+437116519","-3.35473492E+437116528","-3.87517993E+437116510","","","");
+  mathtest(16,def,"957165918E-394595705","1676.59073E-829618944","9.57165918E-394595697","9.57165918E-394595697","","5.70900161E+435023244","","","9.16166595E-789191393");
+  mathtest(17,def,"-2610864.40","31245912.7","28635048.3","-33856777.1","-8.15788411E+13","-0.0835585897","0","-2610864.40","-3.12008905E+200498284");
+  mathtest(18,def,"959.548461","98.994577E+776775426","9.89945770E+776775427","-9.89945770E+776775427","9.49900940E+776775430","9.69293965E-776775426","0","959.548461","6.61712185E+29");
+  mathtest(19,def,"-41085.0268","3115477.61","3074392.58","-3156562.64","-1.27999481E+11","-0.0131873927","0","-41085.0268","4.73844173E+14373829");
+  mathtest(20,def,"-723420285.","2681660.35","-720738625","-726101945","-1.93996749E+15","-269.765813","-269","-2053650.85","4.14324113E+23757873");
+  mathtest(21,def,"63542018.0E-817732230","-8836243.22","-8836243.22","8836243.22","-5.61472726E-817732216","-7.19106711E-817732230","0","6.35420180E-817732223","");
+  mathtest(22,def,"-96051.7108","-291201.955","-387253.666","195150.244","2.79704460E+10","0.329845694","0","-96051.7108","3.53617153E-1450916");
+  mathtest(23,def,"108490.853","91685996.5","91794487.4","-91577505.7","9.94709197E+12","0.00118328706","0","108490.853","6.98124265E+461675038");
+  mathtest(24,def,"-27489.1735","-9835835.4E-506411649","-27489.1735","-27489.1735","2.70378986E-506411638","2.79479804E+506411646","","","4.05866472E-45");
+  mathtest(25,def,"-89220406.6","993391.008E-611041175","-89220406.6","-89220406.6","-8.86307496E-611041162","-8.98139865E+611041176","","","3.19625913E+79");
+  mathtest(26,def,"4.75502020","-17089144.9","-17089140.2","17089149.7","-81259229.2","-2.78247989E-7","0","4.75502020","1.0630191E-11571955");
+  mathtest(27,def,"68027916.2","-796883.839","67231032.4","68824800.0","-5.42103470E+13","-85.3674185","-85","292789.885","8.29415374E-6241744");
+  mathtest(28,def,"-8.01969439E+788605478","92154156.0","-8.01969439E+788605478","-8.01969439E+788605478","-7.39048168E+788605486","-8.70247717E+788605470","","","");
+  mathtest(29,def,"-8012.98341","96188.8651","88175.8817","-104201.849","-770759780","-0.0833046881","0","-8012.98341","-1.16010156E+375502");
+  mathtest(30,def,"21761476E+592330677","-9.70744506","2.17614760E+592330684","2.17614760E+592330684","-2.11248333E+592330685","-2.24173053E+592330683","","","");
+  mathtest(31,def,"-9840778.51","-17907.219","-9858685.73","-9822871.29","1.76220976E+11","549.542534","549","-9715.279","-6.62997437E-125225");
+  mathtest(32,def,"-4.1097614","-819.225776E-145214751","-4.10976140","-4.10976140","3.36682247E-145214748","5.01664074E+145214748","","","0.0000122876018");
+  mathtest(33,def,"-448.880985","-394.087374E-442511435","-448.880985","-448.880985","1.76898329E-442511430","1.13903925E+442511435","","","2.46306099E-11");
+  mathtest(34,def,"779.445304E+882688544","-797868519","7.79445304E+882688546","7.79445304E+882688546","-6.21894870E+882688555","-9.7690946E+882688537","","","");
+  mathtest(35,def,"799995477","-6.23675208E+156309440","-6.23675208E+156309440","6.23675208E+156309440","-4.98937346E+156309449","-1.28271169E-156309432","0","799995477","3.81482667E-54");
+  mathtest(36,def,"-51932.8170","591840275E-278480289","-51932.8170","-51932.8170","-3.07359327E-278480276","-8.7748028E+278480284","","","1.96178443E+28");
+  mathtest(37,def,"70.3552392","-4228656.73","-4228586.38","4228727.09","-297508156","-0.0000166377277","0","70.3552392","9.14742382E-7811584");
+  mathtest(38,def,"1588359.34","-12232799.2","-10644439.9","13821158.5","-1.94300809E+13","-0.129844307","0","1588359.34","1.56910086E-75854960");
+  mathtest(39,def,"2842.16206","-3.23234345","2838.92972","2845.39440","-9186.84392","-879.288388","-879","0.93216745","4.35565514E-11");
+  mathtest(40,def,"29960.2305","45.2735747E-95205475","29960.2305","29960.2305","1.35640673E-95205469","6.61759773E+95205477","","","2.413936E+22");
+  mathtest(41,def,"2916565.77","1151935.43E-787118724","2916565.77","2916565.77","3.35969544E-787118712","2.53188303E+787118724","","","2916565.77");
+  mathtest(42,def,"-52723012.9E-967143787","79.4088237","79.4088237","-79.4088237","-4.18667244E-967143778","-6.63944011E-967143782","0","-5.27230129E-967143780","");
+  mathtest(43,def,"-167473465","793646.597","-166679819","-168267112","-1.32914746E+14","-211.017682","-211","-14033.033","-1.19053789E+6526910");
+  mathtest(44,def,"-31769071.0","133.4360","-31768937.6","-31769204.4","-4.23913776E+9","-238084.707","-238084","-94.3760","-5.84252432E+997");
+  mathtest(45,def,"45960.6383","-93352.7468","-47392.1085","139313.385","-4.29055183E+9","-0.492333004","0","45960.6383","1.88335323E-435248");
+  mathtest(46,def,"606.175648","5.28528458E-981983620","606.175648","606.175648","3.20381081E-981983617","1.14691203E+981983622","","","8.18450516E+13");
+  mathtest(47,def,"171578.617E+643006110","-407774.293","1.71578617E+643006115","1.71578617E+643006115","-6.99653492E+643006120","-4.20768597E+643006109","","","");
+  mathtest(48,def,"-682286332.","-464.871699","-682286797","-682285867","3.17175606E+11","1467687.39","1467687","-182.709787","-1.6050843E-4108");
+  mathtest(49,def,"492088.428","653.72170","492742.150","491434.706","321688884","752.74911","752","489.70960","3.94658596E+3722");
+  mathtest(50,def,"74303782.5","1141.68058","74304924.2","74302640.8","8.48311855E+10","65082.812","65082","926.99244","4.94849869E+8988");
+  mathtest(51,def,"74.7794084E+119375329","-34799355.6","7.47794084E+119375330","7.47794084E+119375330","-2.60227522E+119375338","-2.14887337E+119375323","","","");
+  mathtest(52,def,"-9432.08369","33735.5058","24303.4221","-43167.5895","-318196114","-0.279589218","0","-9432.08369","2.309567E+134087");
+  mathtest(53,def,"4249198.78E-112433155","418673051.","418673051","-418673051","1.77902502E-112433140","1.01492054E-112433157","0","4.24919878E-112433149","");
+  mathtest(54,def,"-2960933.02","-207933.38","-3168866.40","-2752999.64","6.15676811E+11","14.2398158","14","-49865.70","-2.75680397E-1345624");
+  mathtest(55,def,"29317.7519E+945600035","1.43555750","2.93177519E+945600039","2.93177519E+945600039","4.20873186E+945600039","2.04225549E+945600039","","","2.93177519E+945600039");
+  mathtest(56,def,"-51.1693770","-638055.414","-638106.583","638004.245","32648898.0","0.0000801958198","0","-51.1693770","-3.48266075E-1090443");
+  mathtest(57,def,"-756343055.","-68.9248344E+217100975","-6.89248344E+217100976","6.89248344E+217100976","5.21308198E+217100985","1.09734475E-217100968","0","-756343055","-7.06265897E-63");
+  mathtest(58,def,"2538.80406E+694185197","-3386499.65","2.53880406E+694185200","2.53880406E+694185200","-8.59765906E+694185206","-7.49683839E+694185193","","","");
+  mathtest(59,def,"-54344.0672","-8086.45235","-62430.5196","-46257.6149","439450710","6.72038427","6","-5825.35310","3.62916861E-38289");
+  mathtest(60,def,"3.31600054","217481648","217481651","-217481645","721169262","1.5247266E-8","0","3.31600054","3.73134969E+113224119");
+  mathtest(61,def,"681832.671","320341.161E+629467560","3.20341161E+629467565","-3.20341161E+629467565","2.18419069E+629467571","2.12845789E-629467560","0","681832.671","3.16981139E+17");
+  mathtest(62,def,"832689481","348040024E-882122501","832689481","832689481","2.89809267E-882122484","2.3925107E+882122501","","","5.77363381E+26");
+  mathtest(63,def,"14.5512326E+257500811","60.9979577E-647314724","1.45512326E+257500812","1.45512326E+257500812","8.87595471E-389813911","2.38552784E+904815534","","","");
+  mathtest(64,def,"-901.278844","449461667.","449460766","-449462568","-4.05090292E+11","-0.00000200524074","0","-901.278844","");
+  mathtest(65,def,"-5.32627675","-738860216E-238273224","-5.32627675","-5.32627675","3.93537399E-238273215","7.20877459E+238273215","","","-0.00000822306838");
+  mathtest(66,def,"-505383463.","3.18756328","-505383460","-505383466","-1.61094177E+9","-158548527","-158548527","-0.23671144","-1.29081226E+26");
+  mathtest(67,def,"769241.44E-720927320","-145382631.","-145382631","145382631","-1.11834344E-720927306","-5.29115091E-720927323","0","7.6924144E-720927315","");
+  mathtest(68,def,"-6.45038910","56736.4411E+440937167","5.67364411E+440937171","-5.67364411E+440937171","-3.65972121E+440937172","-1.13690407E-440937171","0","-6.45038910","72030.3421");
+  mathtest(69,def,"58.4721075","-712186829","-712186771","712186887","-4.16430648E+10","-8.21022028E-8","0","58.4721075","");
+  mathtest(70,def,"8244.08357","245.302828E+652007959","2.45302828E+652007961","-2.45302828E+652007961","2.02229701E+652007965","3.36077804E-652007958","0","8244.08357","67964913.9");
+  mathtest(71,def,"45.5361397","-76579063.9","-76579018.4","76579109.4","-3.48711495E+9","-5.94629098E-7","0","45.5361397","3.98335374E-126995367");
+  mathtest(72,def,"594420.54E+685263039","-952420.179","5.94420540E+685263044","5.94420540E+685263044","-5.66138117E+685263050","-6.24115861E+685263038","","","");
+  mathtest(73,def,"-841310701.","9398110.4","-831912591","-850708811","-7.90673085E+15","-89.5191337","-89","-4878875.4","1.30001466E+83877722");
+  mathtest(74,def,"904392146E-140100276","168116093.","168116093","-168116093","1.52042874E-140100259","5.37956914E-140100276","0","9.04392146E-140100268","");
+  mathtest(75,def,"-907324792E+685539670","-15.6902171","-9.07324792E+685539678","-9.07324792E+685539678","1.42361230E+685539680","5.78274211E+685539677","","","");
+  mathtest(76,def,"987013606.","-26818.3572E+560907442","-2.68183572E+560907446","2.68183572E+560907446","-2.64700834E+560907455","-3.68036565E-560907438","0","987013606","1.0399934E-27");
+  mathtest(77,def,"-741317564","630.241530E-212782946","-741317564","-741317564","-4.67209116E-212782935","-1.1762436E+212782952","","","1.65968527E+53");
+  mathtest(78,def,"61867907.2","-139204670","-77336763","201072577","-8.61230161E+15","-0.444438446","0","61867907.2","");
+  mathtest(79,def,"-273.622743E+531282717","-4543.68684","-2.73622743E+531282719","-2.73622743E+531282719","1.24325606E+531282723","6.02204229E+531282715","","","");
+  mathtest(80,def,"-383588949.","-428640583.","-812229532","45051634","1.64421791E+17","0.89489648","0","-383588949","");
+  mathtest(81,def,"-56182.2686","32.7741649","-56149.4944","-56215.0428","-1841326.94","-1714.22426","-1714","-7.3499614","-5.45476402E+156");
+  mathtest(82,def,"-6366384.30","332014.980","-6034369.32","-6698399.28","-2.11373496E+12","-19.1749911","-19","-58099.680","-3.05392399E+2258994");
+  mathtest(83,def,"-1.27897702","-8213776.03E-686519123","-1.27897702","-1.27897702","1.05052308E-686519116","1.55711212E+686519116","","","0.139668371");
+  mathtest(84,def,"65.4059036","401162145E+884155506","4.01162145E+884155514","-4.01162145E+884155514","2.62383726E+884155516","1.63041066E-884155513","0","65.4059036","18300704.1");
+  mathtest(85,def,"-20630916.8","158987411.E-480500612","-20630916.8","-20630916.8","-3.28005605E-480500597","-1.29764468E+480500611","","","4.25634728E+14");
+  mathtest(86,def,"-4.72705853","-97626742.4","-97626747.1","97626737.7","461487325","4.84197097E-8","0","-4.72705853","2.92654449E-65858120");
+  mathtest(87,def,"8.43528169","-4573.45752","-4565.02224","4581.89280","-38578.4025","-0.00184439927","0","8.43528169","8.84248688E-4236");
+  mathtest(88,def,"1.91075189","-704247089.","-704247087","704247091","-1.34564146E+9","-2.71318394E-9","0","1.91075189","6.84547494E-198037309");
+  mathtest(89,def,"31997198E-551746308","326.892584","326.892584","-326.892584","1.04596467E-551746298","9.78829119E-551746304","0","3.1997198E-551746301","");
+  mathtest(90,def,"127589.213","84184304.","84311893.2","-84056714.8","1.07410091E+13","0.00151559385","0","127589.213","2.87917042E+429829394");
+  mathtest(91,def,"714494248","-7025063.59","707469185","721519312","-5.01936753E+15","-101.706446","-101","4962825.41","1.65018516E-62199908");
+  mathtest(92,def,"-52987680.2E+279533503","-42014114.8","-5.29876802E+279533510","-5.29876802E+279533510","2.22623048E+279533518","1.26118759E+279533503","","","");
+  mathtest(93,def,"-8795.0513","-225294.394E-884414238","-8795.05130","-8795.05130","1.98147575E-884414229","3.90380388E+884414236","","","1.2927759E-8");
+  mathtest(94,def,"83280.1394","161566354.","161649634","-161483074","1.34552685E+13","0.000515454718","0","83280.1394","5.30774809E+794993940");
+  mathtest(95,def,"112.877897","-9.96481666","102.913080","122.842714","-1124.80755","-11.3276441","-11","3.26491374","2.97790545E-21");
+  mathtest(96,def,"-572542.121E+847487397","433.843420","-5.72542121E+847487402","-5.72542121E+847487402","-2.48393632E+847487405","-1.3196976E+847487400","","","");
+  mathtest(97,def,"4709649.89","20949266.4","25658916.3","-16239616.5","9.86637102E+13","0.224812163","0","4709649.89","4.85293644E+139794213");
+  mathtest(98,def,"-9475.19322","-30885.2475E+584487341","-3.08852475E+584487345","3.08852475E+584487345","2.92643688E+584487349","3.06787026E-584487342","0","-9475.19322","-1.17553557E-12");
+  mathtest(99,def,"-213230447.","864.815822E+127783046","8.64815822E+127783048","-8.64815822E+127783048","-1.84405064E+127783057","-2.46561686E-127783041","0","-213230447","-9.11261361E+74");
+  mathtest(100,def,"-89.1168786E+403375873","6464.05744","-8.91168786E+403375874","-8.91168786E+403375874","-5.76056622E+403375878","-1.37865233E+403375871","","","");
+  mathtest(101,def,"61774.4958","-14000.7706","47773.7252","75775.2664","-864890545","-4.41222112","-4","5771.4134","7.59030407E-67077");
+  mathtest(102,def,"1.60731414","7.04330293E-427033419","1.60731414","1.60731414","1.13208004E-427033418","2.28204602E+427033418","","","27.7143921");
+  mathtest(103,def,"7955012.51","-230117662.","-222162650","238072675","-1.83058888E+15","-0.0345693261","0","7955012.51","");
+  mathtest(104,def,"4086661.08","1.77621994","4086662.86","4086659.30","7258808.90","2300762.98","2300762","1.73840572","1.67007988E+13");
+  mathtest(105,def,"-610.076931","-207.658306","-817.735237","-402.418625","126687.542","2.93788841","2","-194.760319","4.36518377E-580");
+  mathtest(106,def,"-98.6353697","-99253.3899E-716309653","-98.6353697","-98.6353697","9.78989481E-716309647","9.93773309E+716309649","","","1.14729007E-20");
+  mathtest(107,def,"-959923730","409.125542E-900295528","-959923730","-959923730","-3.92729316E-900295517","-2.3462816E+900295534","","","8.49076677E+35");
+  mathtest(108,def,"379965133","-8.15869657","379965125","379965141","-3.10002023E+9","-46571793.6","-46571793","5.19214999","2.30170697E-69");
+  mathtest(109,def,"833.646797","1389499.46E-443407251","833.646797","833.646797","1.15835177E-443407242","5.99961944E+443407247","","","833.646797");
+  mathtest(110,def,"2314933.4E-646489194","-7401538.17","-7401538.17","7401538.17","-1.71340679E-646489181","-3.12763826E-646489195","0","2.3149334E-646489188","");
+  mathtest(111,def,"808525347","-5959.74667E+58232168","-5.95974667E+58232171","5.95974667E+58232171","-4.81860624E+58232180","-1.35664382E-58232163","0","808525347","3.5796302E-54");
+  mathtest(112,def,"-17220490.6E+726428704","19.9855688","-1.72204906E+726428711","-1.72204906E+726428711","-3.44161300E+726428712","-8.61646259E+726428709","","","");
+  mathtest(113,def,"59015.9705","-72070405.4E+322957279","-7.20704054E+322957286","7.20704054E+322957286","-4.25330492E+322957291","-8.18865527E-322957283","0","59015.9705","4.01063488E-34");
+  mathtest(114,def,"16411470E+578192008","497470.005E-377473621","1.64114700E+578192015","1.64114700E+578192015","8.16421406E+200718399","3.29898684E+955665630","","","");
+  mathtest(115,def,"-107.353544E+609689808","-659.50136E-456711743","-1.07353544E+609689810","-1.07353544E+609689810","7.07998083E+152978069","","","","");
+  mathtest(116,def,"786.134163","-53.0292275E-664419768","786.134163","786.134163","-4.16880874E-664419764","-1.48245449E+664419769","","","3.33055532E-15");
+  mathtest(117,def,"23.5414714","5000786.91","5000810.45","-5000763.37","117725882","0.0000047075534","0","23.5414714","4.4895618E+6860247");
+  mathtest(118,def,"-69775.6113","561292120.","561222344","-561361896","-3.91645008E+13","-0.000124312473","0","-69775.6113","");
+  mathtest(119,def,"919043.871","-71606613.7","-70687569.8","72525657.6","-6.58096194E+13","-0.0128346227","0","919043.871","3.05862429E-427014317");
+  mathtest(120,def,"-27667.1915","-293455.107E-789181924","-27667.1915","-27667.1915","8.11907864E-789181915","9.42808315E+789181922","","","-4.72176938E-14");
+  mathtest(121,def,"-908603625.","-982.409273E+449441134","-9.82409273E+449441136","9.82409273E+449441136","8.92620627E+449441145","9.2487281E-449441129","0","-908603625","2.60768632E-90");
+  mathtest(122,def,"847.113351","5.71511268","852.828464","841.398238","4841.34825","148.223386","148","1.27667436","3.69529538E+17");
+  mathtest(123,def,"-992140475","3.82918218","-992140471","-992140479","-3.79908663E+9","-259099836","-259099836","-0.14787752","9.68930595E+35");
+  mathtest(124,def,"-12606437.5","268123145E+362798858","2.68123145E+362798866","-2.68123145E+362798866","-3.38007767E+362798873","-4.70173416E-362798860","0","-12606437.5","-2.00344362E+21");
+  mathtest(125,def,"3799470.64","-264.703992","3799205.94","3799735.34","-1.00573505E+9","-14353.6583","-14353","174.242824","2.3625466E-1744");
+  mathtest(126,def,"-8.11070247","-931284056.E-654288974","-8.11070247","-8.11070247","7.55336789E-654288965","8.70916067E+654288965","","","-6.58375662E-9");
+  mathtest(127,def,"-242660177.","-6.09832715E-943742415","-242660177","-242660177","1.47982115E-943742406","3.97912692E+943742422","","","4.89788901E-51");
+  mathtest(128,def,"76.1463803","-45.6758006E-636907996","76.1463803","76.1463803","-3.47804688E-636907993","-1.66710554E+636907996","","","3.90619287E-10");
+  mathtest(129,def,"761185.862","-70878470.9E+221214712","-7.08784709E+221214719","7.08784709E+221214719","-5.39516900E+221214725","-1.07393099E-221214714","0","761185.862","6.75406144E-42");
+  mathtest(130,def,"6203606.54","-195.92748E-833512061","6203606.54","6203606.54","-1.21545700E-833512052","-3.1662769E+833512065","","","2.59843292E-14");
+  mathtest(131,def,"-163274837.","95.0448550E+887876533","9.50448550E+887876534","-9.50448550E+887876534","-1.55184332E+887876543","-1.71787139E-887876527","0","-163274837","1.34645731E+82");
+  mathtest(132,def,"2.38638190","-807986179.","-807986177","807986181","-1.92816359E+9","-2.95349347E-9","0","2.38638190","1.19029305E-305208656");
+  mathtest(133,def,"-109022296E-811981158","7.19685680","7.19685680","-7.19685680","-7.84617852E-811981150","-1.51485988E-811981151","0","-1.09022296E-811981150","");
+  mathtest(134,def,"-559250.780E-273710421","-393780811.","-393780811","393780811","2.20222226E-273710407","1.42020831E-273710424","0","-5.59250780E-273710416","");
+  mathtest(135,def,"-88021.9966E+555334642","7599686.64E+818884053","7.59968664E+818884059","-7.59968664E+818884059","","-1.15823192E-263549413","0","-8.80219966E+555334646","");
+  mathtest(136,def,"194.317648E-197450009","-930.979064","-930.979064","930.979064","-1.80905662E-197450004","-2.08723972E-197450010","0","1.94317648E-197450007","");
+  mathtest(137,def,"9495479.65","7405697.96","16901177.6","2089781.69","7.03206543E+13","1.28218565","1","2089781.69","1.0135446E+51673383");
+  mathtest(138,def,"-1656.28925","-163050511E-682882380","-1656.28925","-1656.28925","2.70058809E-682882369","1.01581359E+682882375","","","3.64525265E-7");
+  mathtest(139,def,"95581.3784E+64262149","-99.2879365","9.55813784E+64262153","9.55813784E+64262153","-9.49007783E+64262155","-9.62668596E+64262151","","","");
+  mathtest(140,def,"643761.452","3.73446939","643765.186","643757.718","2404107.44","172383.647","172383","2.41514363","1.71751236E+23");
+  mathtest(141,def,"7960.49866E-129827423","3220.22850","3220.22850","-3220.22850","2.56346247E-129827416","2.47202913E-129827423","0","7.96049866E-129827420","");
+  mathtest(142,def,"-6356.64112E-707203818","1805054.98","1805054.98","-1805054.98","-1.14740867E-707203808","-3.52157756E-707203821","0","-6.35664112E-707203815","");
+  mathtest(143,def,"2.3904042","8476.52006","8478.91046","-8474.12966","20262.3092","0.000282003013","0","2.3904042","2.00251752E+3208");
+  mathtest(144,def,"-713298.658","-957.782729","-714256.441","-712340.875","683185135","744.739528","744","-708.307624","3.68122321E-5608");
+  mathtest(145,def,"607779233.E-820497365","-20.1188742E-857318323","6.07779233E-820497357","6.07779233E-820497357","","-3.02094057E+36820965","","","");
+  mathtest(146,def,"-205888251","-908.792922E+250680613","-9.08792922E+250680615","9.08792922E+250680615","1.87109785E+250680624","2.26551336E-250680608","0","-205888251","-1.5042358E-75");
+  mathtest(147,def,"51542399.1","-23212.2414","51519186.9","51565611.3","-1.19641461E+12","-2220.4835","-2220","11223.1920","1.71641348E-179015");
+  mathtest(148,def,"4.44287230","158923023","158923027","-158923019","706074697","2.79561275E-8","0","4.44287230","7.12573416E+102928693");
+  mathtest(149,def,"-79123682.6","-3.8571770","-79123686.5","-79123678.8","305194049","20513365.8","20513365","-2.9293950","2.55137345E-32");
+  mathtest(150,def,"-80.3324347E-569715030","883142.351","883142.351","-883142.351","-7.09449752E-569715023","-9.09620455E-569715035","0","-8.03324347E-569715029","");
+  mathtest(151,def,"13637.483","-52798.5631","-39161.0801","66436.0461","-720039507","-0.258292692","0","13637.483","1.47163791E-218310");
+  mathtest(152,def,"6.42934843E-276476458","84057440.0E-388039782","6.42934843E-276476458","6.42934843E-276476458","5.40434570E-664516232","7.64875593E+111563316","","","");
+  mathtest(153,def,"-5.64133087","-17401297.","-17401302.6","17401291.4","98166473.9","3.24190253E-7","0","-5.64133087","-1.25908916E-13075014");
+  mathtest(154,def,"95469.7057E+865733824","198.829749","9.54697057E+865733828","9.54697057E+865733828","1.89822176E+865733831","4.80158056E+865733826","","","");
+  mathtest(155,def,"-416466.209","-930153427","-930569893","929736961","3.87377472E+14","0.000447739262","0","-416466.209","");
+  mathtest(156,def,"-1541733.85","-1.99208708","-1541735.84","-1541731.86","3071268.08","773928.944","773928","-1.88034976","4.20708401E-13");
+  mathtest(157,def,"-39152691.8","-645131748.","-684284440","605979056","2.52586445E+16","0.0606894513","0","-39152691.8","");
+  mathtest(158,def,"113.939979","-58282550.4","-58282436.5","58282664.3","-6.64071257E+9","-0.0000019549587","0","113.939979","2.106557E-119868330");
+  mathtest(159,def,"-324971.736","-9517.15154","-334488.888","-315454.585","3.09280526E+9","34.1459033","34","-1388.58364","-5.82795263E-52457");
+  mathtest(160,def,"-76.9436744","-9548122.75E-273599728","-76.9436744","-76.9436744","7.34667648E-273599720","8.05851332E+273599722","","","1.37489895E-19");
+  mathtest(161,def,"-430393.282","-70.2551505","-430463.537","-430323.027","30237344.8","6126.14561","6126","-10.2300370","4.26006409E-395");
+  mathtest(162,def,"-3308051.90","-349433799.E+397813188","-3.49433799E+397813196","3.49433799E+397813196","1.15594514E+397813203","9.46689161E-397813191","0","-3308051.90","-2.76237768E-20");
+  mathtest(163,def,"23.1543212E-655822712","5848.20853","5848.20853","-5848.20853","1.35411299E-655822707","3.95921607E-655822715","0","2.31543212E-655822711","");
+  mathtest(164,def,"-174.261308E-82902077","-200096204.","-200096204","200096204","3.48690262E-82902067","8.70887626E-82902084","0","-1.74261308E-82902075","");
+  mathtest(165,def,"-50669105.2","9105789.01E+609889700","9.10578901E+609889706","-9.10578901E+609889706","-4.61382181E+609889714","-5.56449366E-609889700","0","-50669105.2","-2.20135008E+69");
+  mathtest(166,def,"424768856.","-971.71757","424767884","424769828","-4.12755361E+11","-437132.012","-437132","11.19076","2.72651473E-8387");
+  mathtest(167,def,"7181.2767","999117.918","1006299.19","-991936.641","7.17494223E+9","0.00718761677","0","7181.2767","3.09655124E+3852800");
+  mathtest(168,def,"8096417.07E-433694528","-68.4863363","-68.4863363","68.4863363","-5.54493942E-433694520","-1.18219451E-433694523","0","8.09641707E-433694522","");
+  mathtest(169,def,"1236287.5","-7119.97299E-176200498","1236287.50","1236287.50","-8.80233361E-176200489","-1.73636544E+176200500","","","2.26549784E-43");
+  mathtest(170,def,"-752995833E-654401067","-15.2736930E+803939983","-1.52736930E+803939984","1.52736930E+803939984","1.15010272E+149538926","","0","-7.52995833E-654401059","");
+  mathtest(171,def,"702992.459","-312.689474","702679.770","703305.148","-219818342","-2248.21274","-2248","66.521448","8.02493322E-1831");
+  mathtest(172,def,"-4414.38805","-17680.4630E-584364536","-4414.38805","-4414.38805","7.80484246E-584364529","2.49676044E+584364535","","","5.13167312E-8");
+  mathtest(173,def,"9.46350807","7826.65424","7836.11775","-7817.19073","74067.6056","0.00120913839","0","9.46350807","3.63271495E+7639");
+  mathtest(174,def,"2078153.7","-16934607.3E+233594439","-1.69346073E+233594446","1.69346073E+233594446","-3.51927168E+233594452","-1.2271638E-233594440","0","2078153.7","2.31549939E-13");
+  mathtest(175,def,"-9359.74629","7.07761788E+252457696","7.07761788E+252457696","-7.07761788E+252457696","-6.62447077E+252457700","-1.32244301E-252457693","0","-9359.74629","-6.29286677E+27");
+  mathtest(176,def,"66.2319284E+730468479","25.9391685E+221147044","6.62319284E+730468480","6.62319284E+730468480","1.71800115E+951615526","2.55335588E+509321435","","","");
+  mathtest(177,def,"317997088.E-90968742","-977426.461","-977426.461","977426.461","-3.10818768E-90968728","-3.2534119E-90968740","0","3.17997088E-90968734","");
+  mathtest(178,def,"227473386","-6759.61390","227466626","227480146","-1.53763226E+12","-33651.8312","-33651","5618.65110","1.40992627E-56493");
+  mathtest(179,def,"-392019.462","-245456.503","-637475.965","-146562.959","9.62237263E+10","1.59710359","1","-146562.959","-3.08656533E-1372917");
+  mathtest(180,def,"-3619556.28E+587673583","-3.45236972","-3.61955628E+587673589","-3.61955628E+587673589","1.24960465E+587673590","1.04842661E+587673589","","","");
+  mathtest(181,def,"-249.400704E-923930848","831102.919","831102.919","-831102.919","-2.07277653E-923930840","-3.00084019E-923930852","0","-2.49400704E-923930846","");
+  mathtest(182,def,"65234.2739E+154949914","-694581895","6.52342739E+154949918","6.52342739E+154949918","-4.53105456E+154949927","-9.39187652E+154949909","","","");
+  mathtest(183,def,"45.2316213","-88775083.4","-88775038.2","88775128.6","-4.01544095E+9","-5.09508069E-7","0","45.2316213","1.92314254E-146962015");
+  mathtest(184,def,"331100375.","442.343378","331100817","331099933","1.46460058E+11","748514.37","748514","163.759708","6.64011043E+3765");
+  mathtest(185,def,"81.8162765","5.61239515E+467372163","5.61239515E+467372163","-5.61239515E+467372163","4.59185273E+467372165","1.45777826E-467372162","0","81.8162765","2.99942677E+11");
+  mathtest(186,def,"-5738.13069E+789464078","33969715.0","-5.73813069E+789464081","-5.73813069E+789464081","-1.94922664E+789464089","-1.68919012E+789464074","","","");
+  mathtest(187,def,"-7413.03911","2.70630320E-254858264","-7413.03911","-7413.03911","-2.00619315E-254858260","-2.73917539E+254858267","","","-4.07369842E+11");
+  mathtest(188,def,"-417696.182","27400.6002","-390295.582","-445096.782","-1.14451261E+10","-15.2440523","-15","-6687.1790","-1.58020334E+154017");
+  mathtest(189,def,"68.8538735E+655647287","3198.17933E-132454826","6.88538735E+655647288","6.88538735E+655647288","2.20207035E+523192466","2.15290846E+788102111","","","");
+  mathtest(190,def,"-6817.04246","434420.439","427603.397","-441237.481","-2.96146258E+9","-0.0156922692","0","-6817.04246","5.94143518E+1665390");
+  mathtest(191,def,"8578.27511","647042.341E-490924334","8578.27511","8578.27511","5.55050721E-490924325","1.3257672E+490924332","","","3.98473846E+23");
+  mathtest(192,def,"4124.11615E+733109424","597385828E+375928745","4.12411615E+733109427","4.12411615E+733109427","","6.9036056E+357180673","","","");
+  mathtest(193,def,"102.714400","-919017.468","-918914.754","919120.182","-94396327.8","-0.000111765449","0","102.714400","4.04295689E-1848724");
+  mathtest(194,def,"-4614.33015E+996778733","-433.560812E+22860599","-4.61433015E+996778736","-4.61433015E+996778736","","1.06428672E+973918135","","","");
+  mathtest(195,def,"457455170.","3709230.48E+677010879","3.70923048E+677010885","-3.70923048E+677010885","1.69680666E+677010894","1.23328861E-677010877","0","457455170","4.37919376E+34");
+  mathtest(196,def,"-2522468.15","-48482043.5","-51004511.7","45959575.4","1.22294411E+14","0.0520289156","0","-2522468.15","1.42348178E-310373595");
+  mathtest(197,def,"-659811384","62777.6118","-659748606","-659874162","-4.14213829E+13","-10510.2976","-10510","-18683.9820","3.4393524E+553665");
+  mathtest(198,def,"4424.94176","-825848.20","-821423.258","830273.142","-3.65433019E+9","-0.00535805704","0","4424.94176","3.42152775E-3010966");
+  mathtest(199,def,"43.6441884","-6509.89663E-614169377","43.6441884","43.6441884","-2.84119155E-614169372","-6.70428286E+614169374","","","3.31524056E-12");
+  mathtest(200,def,"897.388381E-843864876","84195.1369","84195.1369","-84195.1369","7.55557376E-843864869","1.06584348E-843864878","0","8.97388381E-843864874","");
+  mathtest(201,def,"796199825","496.76834","796200322","796199328","3.95526865E+11","1602758.79","1602758","393.91828","6.42647264E+4423");
+  mathtest(202,def,"573583582","1598.69521","573585181","573581983","9.16985325E+11","358782.323","358782","517.16578","9.91156302E+14004");
+  mathtest(203,def,"-783144270.","6347.71496","-783137922","-783150618","-4.97117660E+12","-123374.202","-123374","-1284.52496","1.28110803E+56458");
+  mathtest(204,def,"26909234.7","52411.5081","26961646.2","26856823.2","1.41035357E+12","513.422255","513","22131.0447","9.75836528E+389415");
+  mathtest(205,def,"8.21915282","24859.7841E-843282959","8.21915282","8.21915282","2.04326365E-843282954","3.30620443E+843282955","","","67.5544731");
+  mathtest(206,def,"-688.387710","82783.5207E-831870858","-688.387710","-688.387710","-5.69871582E-831870851","-8.31551623E+831870855","","","5.04272012E+22");
+  mathtest(207,def,"-9792232.","-1749.01166","-9793981.01","-9790482.99","1.71267279E+10","5598.72311","5598","-1264.72732","-8.86985674E-12228");
+  mathtest(208,def,"-130.765600","8.67437427","-122.091226","-139.439974","-1134.30976","-15.0749317","-15","-0.64998595","-1.11799947E+19");
+  mathtest(209,def,"917.259102","-368640.426","-367723.167","369557.685","-338138786","-0.00248822169","0","917.259102","8.67104255E-1092094");
+  mathtest(210,def,"-4.9725631","-294563717.","-294563722","294563712","1.46473667E+9","1.6881112E-8","0","-4.9725631","-6.27962584E-205187284");
+  mathtest(211,def,"-60962887.2E-514249661","-243021.407","-243021.407","243021.407","1.48152866E-514249648","2.5085398E-514249659","0","-6.09628872E-514249654","");
+  mathtest(212,def,"-55389219.8","-3772200E+981866393","-3.77220000E+981866399","3.77220000E+981866399","2.08939215E+981866407","1.46835321E-981866392","0","-55389219.8","1.06242678E-31");
+  mathtest(213,def,"681.666010","626886700","626887382","-626886018","4.27327356E+11","0.00000108738311","0","681.666010","");
+  mathtest(214,def,"6.42652138","53465894.5","53465900.9","-53465888.1","343599714","1.2019852E-7","0","6.42652138","4.61155532E+43199157");
+  mathtest(215,def,"561546656","651408.476","562198064","560895248","3.65796251E+14","862.049968","862","32549.688","8.6052377E+5699419");
+  mathtest(216,def,"7845778.36E-79951139","9.45859047","9.45859047","-9.45859047","7.42100044E-79951132","8.29487056E-79951134","0","7.84577836E-79951133","1.12648216E-719560189");
+  mathtest(217,def,"54486.2112","10.7565078","54496.9677","54475.4547","586081.356","5065.41828","5065","4.4991930","1.25647168E+52");
+  mathtest(218,def,"16576482.5","-2217720.83","14358761.7","18794203.3","-3.67620105E+13","-7.47455779","-7","1052436.69","1.38259374E-16010820");
+  mathtest(219,def,"61.2793787E-392070111","6.22575651","6.22575651","-6.22575651","3.81510491E-392070109","9.84288072E-392070111","0","6.12793787E-392070110","");
+  mathtest(220,def,"5115136.39","-653674372.","-648559236","658789508","-3.34363357E+15","-0.00782520565","0","5115136.39","");
+  mathtest(221,def,"-7.84238366E-416477339","-37432758.9E+97369393","-3.74327589E+97369400","3.74327589E+97369400","2.93562057E-319107938","2.09505895E-513846739","0","-7.84238366E-416477339","");
+  mathtest(222,def,"-387781.3E+284108380","-218085.592","-3.87781300E+284108385","-3.87781300E+284108385","8.45695144E+284108390","1.77811517E+284108380","","","");
+  mathtest(223,def,"-5353.17736","3.39332346E+546685359","3.39332346E+546685359","-3.39332346E+546685359","-1.81650623E+546685363","-1.57756177E-546685356","0","-5353.17736","-1.53403369E+11");
+  mathtest(224,def,"-20837.2900E-168652772","-8236.78305E-712819173","-2.08372900E-168652768","-2.08372900E-168652768","1.71632237E-881471937","2.52978497E+544166401","","","");
+  mathtest(225,def,"-98573.8722E+829022366","309011.007","-9.85738722E+829022370","-9.85738722E+829022370","-3.04604115E+829022376","-3.18997932E+829022365","","","");
+  mathtest(226,def,"49730750.7","-5315.10636E-299586991","49730750.7","49730750.7","-2.64324229E-299586980","-9.35649211E+299586994","","","3.28756936E-39");
+  mathtest(227,def,"1539523.40","-962388.581","577134.82","2501911.98","-1.48161974E+12","-1.59969001","-1","577134.819","3.10144834E-5954673");
+  mathtest(228,def,"81596.2121","-37600.9653","43995.2468","119197.177","-3.06809634E+9","-2.17005631","-2","6394.2815","1.97878299E-184684");
+  mathtest(229,def,"590146199","-1425404.61","588720794","591571604","-8.41197113E+14","-414.020128","-414","28690.46","2.04650994E-12502170");
+  mathtest(230,def,"196.05543","505.936305","701.991735","-309.880875","99191.5598","0.387510104","0","196.05543","8.78437397E+1159");
+  mathtest(231,def,"77.8058449","-642.275274","-564.469429","720.081119","-49972.7704","-0.121140963","0","77.8058449","9.33582626E-1215");
+  mathtest(232,def,"1468.60684","10068.138","11536.7448","-8599.5312","14786136.3","0.145866777","0","1468.60684","2.54122484E+31884");
+  mathtest(233,def,"4.98774767E-387968632","4.41731439E-578812376","4.98774767E-387968632","4.98774767E-387968632","2.20324496E-966781007","1.12913577E+190843744","","","");
+  mathtest(234,def,"981.091059","-92238.9930","-91257.9020","93220.0841","-90494851.3","-0.0106364025","0","981.091059","5.29943342E-275953");
+  mathtest(235,def,"-3606.24992","8290224.70","8286618.45","-8293830.95","-2.98966222E+10","-0.000435000262","0","-3606.24992","-1.23747107E+29488793");
+  mathtest(236,def,"-8978571.35","92243.4796","-8886327.87","-9070814.83","-8.28214663E+11","-97.3355666","-97","-30953.8288","-4.95762813E+641384");
+  mathtest(237,def,"-61968.1992E+810060478","474294671.E+179263414","-6.19681992E+810060482","-6.19681992E+810060482","-2.93911867E+989323905","-1.30653374E+630797060","","","");
+  mathtest(238,def,"61298431.6E-754429041","-2584862.79","-2584862.79","2584862.79","-1.58448035E-754429027","-2.37143851E-754429040","0","6.12984316E-754429034","");
+  mathtest(239,def,"621039.064","-5351539.62","-4730500.56","5972578.68","-3.32351516E+12","-0.116048672","0","621039.064","2.41163312E-31002108");
+  mathtest(240,def,"-19.6007605","-57905696.","-57905715.6","57905676.4","1.13499568E+9","3.38494515E-7","0","-19.6007605","1.05663646E-74829963");
+  mathtest(241,def,"3626.13109E+687030346","189.896004","3.62613109E+687030349","3.62613109E+687030349","6.88587804E+687030351","1.90953523E+687030347","","","");
+  mathtest(242,def,"-249334.026","-7.54735834E-14137188","-249334.026","-249334.026","1.88181324E-14137182","3.30359332E+14137192","","","6.69495408E-44");
+  mathtest(243,def,"417613928.","-925213.216","416688715","418539141","-3.86381925E+14","-451.370474","-451","342767.584","8.38430085E-7976054");
+  mathtest(244,def,"23.8320309","-50074996.1","-50074972.3","50075019.9","-1.19338885E+9","-4.75926765E-7","0","23.8320309","5.81466387E-68961335");
+  mathtest(245,def,"49789677.7","-131827812E+156412534","-1.31827812E+156412542","1.31827812E+156412542","-6.56366427E+156412549","-3.77687204E-156412535","0","49789677.7","2.00844843E-8");
+  mathtest(246,def,"-8907163.61E-741867246","773651.288E-472033282","7.73651288E-472033277","-7.73651288E-472033277","","-1.15131504E-269833963","0","-8.90716361E-741867240","");
+  mathtest(247,def,"514021711.E+463536646","617441659.","5.14021711E+463536654","5.14021711E+463536654","3.17378418E+463536663","8.32502478E+463536645","","","");
+  mathtest(248,def,"998175750","2.39285478","998175752","998175748","2.38848961E+9","417148487","417148486","1.30513692","9.96354828E+17");
+  mathtest(249,def,"873575426.","647853.152E+497450781","6.47853152E+497450786","-6.47853152E+497450786","5.65948593E+497450795","1.3484158E-497450778","0","873575426","4.44429064E+53");
+  mathtest(250,def,"4352626.8","-130338048.E-744560911","4352626.80","4352626.80","-5.67312881E-744560897","-3.33949055E+744560909","","","2.29746322E-7");
+  mathtest(251,def,"437.286960","7.37560835","444.662568","429.911352","3225.25735","59.2882565","59","2.12606735","3.05749452E+18");
+  mathtest(252,def,"8498280.45E+220511522","588617612","8.49828045E+220511528","8.49828045E+220511528","5.00223754E+220511537","1.44376931E+220511520","","","");
+  mathtest(253,def,"-5320387.77","-7673237.46","-12993625.2","2352849.69","4.08245987E+13","0.693369363","0","-5320387.77","-1.30113745E-51609757");
+  mathtest(254,def,"587655375","-4.9748366","587655370","587655380","-2.92348947E+9","-118125563","-118125563","0.7919942","1.42687667E-44");
+  mathtest(255,def,"1266098.44","-2661.64904E-642601142","1266098.44","1266098.44","-3.36990970E-642601133","-4.75681963E+642601144","","","4.92717036E-19");
+  mathtest(256,def,"3.92737463E+482873483","-685.522747","3.92737463E+482873483","3.92737463E+482873483","-2.69230464E+482873486","-5.72902161E+482873480","","","");
+  mathtest(257,def,"22826494.1","986189474.","1.00901597E+9","-963362980","2.25112482E+16","0.0231461547","0","22826494.1","");
+  mathtest(258,def,"-647342.380","-498816386","-499463728","498169044","3.22904986E+14","0.00129775685","0","-647342.380","");
+  mathtest(259,def,"393092373.","-25.7226822","393092347","393092399","-1.01113902E+10","-15281935.6","-15281935","15.5939430","3.49252839E-224");
+  mathtest(260,def,"2.96253492","20.7444888","23.7070237","-17.7819539","61.4562725","0.142810698","0","2.96253492","8.03402246E+9");
+  mathtest(261,def,"53553.3750E+386955423","-732470876","5.35533750E+386955427","5.35533750E+386955427","-3.92262875E+386955436","-7.31133165E+386955418","","","");
+  mathtest(262,def,"-696451.406E-286535917","-73086090.8","-73086090.8","73086090.8","5.09009107E-286535904","9.52919219E-286535920","0","-6.96451406E-286535912","");
+  mathtest(263,def,"1551.29957","-580358622.E+117017265","-5.80358622E+117017273","5.80358622E+117017273","-9.00310081E+117017276","-2.67300168E-117017271","0","1551.29957","7.17506711E-20");
+  mathtest(264,def,"-205123006.E-213752799","-78638468.6","-78638468.6","78638468.6","1.61305591E-213752783","2.60843083E-213752799","0","-2.05123006E-213752791","");
+  mathtest(265,def,"77632.8073","-3378542.88E+677441319","-3.37854288E+677441325","3.37854288E+677441325","-2.62285768E+677441330","-2.29781921E-677441321","0","77632.8073","2.13729331E-15");
+  mathtest(266,def,"3068999.37","2.21006212","3069001.58","3068997.16","6782679.25","1388648.46","1388648","1.02718624","9.41875713E+12");
+  mathtest(267,def,"625524274.","55.2468624","625524329","625524219","3.45582535E+10","11322349.3","11322349","16.7522224","6.21482943E+483");
+  mathtest(268,def,"61269134.9","-845761303.","-784492168","907030438","-5.18190634E+16","-0.0724425848","0","61269134.9","");
+  mathtest(269,def,"-2840.12099","-2856.76731E-82743650","-2840.12099","-2840.12099","8.11356480E-82743644","9.94173022E+82743649","","","-4.36505254E-11");
+  mathtest(270,def,"8.9538781","-7.56603391","1.38784419","16.5199120","-67.7453453","-1.18343087","-1","1.38784419","2.42053061E-8");
+  mathtest(271,def,"-56233547.2","509752530","453518983","-565986077","-2.86651930E+16","-0.110315386","0","-56233547.2","");
+  mathtest(272,def,"-3167.47853E-854859497","-110852115","-110852115","110852115","3.51121694E-854859486","2.85739116E-854859502","0","-3.16747853E-854859494","");
+  mathtest(273,def,"-5652.52092","-632243244.","-632248897","632237592","3.57376816E+12","0.00000894042123","0","-5652.52092","");
+  mathtest(274,def,"-946.009928","820090.66E-589278015","-946.009928","-946.009928","-7.75813906E-589278007","-1.15354311E+589278012","","","6.41454053E+23");
+  mathtest(275,def,"-367.757758","-959.626016","-1327.38377","591.868258","352909.912","0.383230292","0","-367.757758","1.14982199E-2463");
+  mathtest(276,def,"809926721.E-744611554","-67.6560549","-67.6560549","67.6560549","-5.47964467E-744611544","-1.19712378E-744611547","0","8.09926721E-744611546","");
+  mathtest(277,def,"-1725.08555","75586.3031","73861.2176","-77311.3887","-130392839","-0.0228227269","0","-1725.08555","3.70540587E+244657");
+  mathtest(278,def,"2659.84191E+29314492","-74372.4551E+518196680","-7.43724551E+518196684","7.43724551E+518196684","-1.97818973E+547511180","-3.5763804E-488882190","0","2.65984191E+29314495","1.06171811E-205201468");
+  mathtest(279,def,"-91.1431113","12147507.0","12147415.9","-12147598.1","-1.10716158E+9","-0.00000750303015","0","-91.1431113","-1.52417006E+23805759");
+  mathtest(280,def,"-1136778.91E+697783878","-801552569.","-1.13677891E+697783884","-1.13677891E+697783884","9.11188056E+697783892","1.41822128E+697783875","","","");
+  mathtest(281,def,"73123773.0E+433334149","63.3548930","7.31237730E+433334156","7.31237730E+433334156","4.63274881E+433334158","1.15419298E+433334155","","","");
+  mathtest(282,def,"-9765484.8","7979.90802E-234029715","-9765484.80","-9765484.80","-7.79276705E-234029705","-1.22375907E+234029718","","","8.27085614E+55");
+  mathtest(283,def,"-695010288","-8.26582820","-695010296","-695010280","5.74483564E+9","84082353.4","84082353","-3.45024540","1.83683495E-71");
+  mathtest(284,def,"23975643.3E-155955264","-505547.692E+137258948","-5.05547692E+137258953","5.05547692E+137258953","-1.21208311E-18696303","-4.7425087E-293214211","0","2.39756433E-155955257","1.26225952E+779776283");
+  mathtest(285,def,"2862.95921","-32601248.6E-605861333","2862.95921","2862.95921","-9.33360449E-605861323","-8.78174712E+605861328","","","4.26142175E-11");
+  mathtest(286,def,"-13.133518E+246090516","-8.71269925E-945092108","-1.31335180E+246090517","-1.31335180E+246090517","1.14428392E-699001590","","","","");
+  mathtest(287,def,"-34671.2232","817710.762","783039.539","-852381.985","-2.83510323E+10","-0.0424003508","0","-34671.2232","-5.30788828E+3712382");
+  mathtest(288,def,"-22464769","62.4366060","-22464706.6","-22464831.4","-1.40262393E+9","-359801.252","-359801","-15.7245940","6.21042536E+455");
+  mathtest(289,def,"-9458.60887E-563051963","5676056.01","5676056.01","-5676056.01","-5.36875937E-563051953","-1.66640513E-563051966","0","-9.45860887E-563051960","");
+  mathtest(290,def,"-591.924123E-95331874","-134.596188","-134.596188","134.596188","7.96707305E-95331870","4.39777777E-95331874","0","-5.91924123E-95331872","");
+  mathtest(291,def,"-182566085.E+68870646","-960345993.","-1.82566085E+68870654","-1.82566085E+68870654","1.75326608E+68870663","1.9010449E+68870645","","","");
+  mathtest(292,def,"8232.54893","-99822004E+891979845","-9.98220040E+891979852","9.98220040E+891979852","-8.21789532E+891979856","-8.24722867E-891979850","0","8232.54893","6.99289156E-40");
+  mathtest(293,def,"-4336.94317","-819373.601E+563233430","-8.19373601E+563233435","8.19373601E+563233435","3.55357674E+563233439","5.29299841E-563233433","0","-4336.94317","7.98969405E-30");
+  mathtest(294,def,"-2.09044362E-876527908","-6515463.33","-6515463.33","6515463.33","1.36202087E-876527901","3.20843433E-876527915","0","-2.09044362E-876527908","");
+  mathtest(295,def,"-194343.344","1.95929977","-194341.385","-194345.303","-380776.869","-99190.2041","-99190","-0.39981370","3.77693354E+10");
+  mathtest(296,def,"-326002.927","4215.99030","-321786.937","-330218.917","-1.37442518E+9","-77.3253503","-77","-1371.67390","5.51875821E+23243");
+  mathtest(297,def,"-12037.8590E+876429044","314.81827","-1.20378590E+876429048","-1.20378590E+876429048","-3.78973794E+876429050","-3.82374854E+876429045","","","");
+  mathtest(298,def,"21036045.4E-162804809","-91.7149219","-91.7149219","91.7149219","-1.92931926E-162804800","-2.2936339E-162804804","0","2.10360454E-162804802","");
+  mathtest(299,def,"-947019.534","9916.29280","-937103.241","-956935.827","-9.39092299E+9","-95.5013686","-95","-4971.71800","3.76029022E+59261");
+  mathtest(300,def,"-5985.84136","-12.4090184E-12364204","-5985.84136","-5985.84136","7.42784156E-12364200","4.82378313E+12364206","","","-0.000167060893");
+  mathtest(301,def,"-85344379.4","-6783.08669E+218840215","-6.78308669E+218840218","6.78308669E+218840218","5.78898324E+218840226","1.25819385E-218840211","0","-85344379.4","-3.03232347E-56");
+  mathtest(302,def,"-94.1947070E-938257103","15003.240","15003.2400","-15003.2400","-1.41322580E-938257097","-6.27829102E-938257106","0","-9.41947070E-938257102","");
+  mathtest(303,def,"-4846233.6","-8289769.76","-13136003.4","3443536.16","4.01741607E+13","0.584604125","0","-4846233.6","4.25077524E-55420465");
+  mathtest(304,def,"67.9147198","-108373645.E+291715415","-1.08373645E+291715423","1.08373645E+291715423","-7.36016573E+291715424","-6.26671916E-291715422","0","67.9147198","0.0147243485");
+  mathtest(305,def,"1958.77994","5.57285137E+690137826","5.57285137E+690137826","-5.57285137E+690137826","1.09159895E+690137830","3.51486126E-690137824","0","1958.77994","5.64824968E+19");
+  mathtest(306,def,"22780314.3","8805279.83","31585594.1","13975034.5","2.00587042E+14","2.58711986","2","5169754.64","2.39132169E+64785373");
+  mathtest(307,def,"596745.184","197602423.","198199168","-197005678","1.17918294E+14","0.00301992848","0","596745.184","");
+  mathtest(308,def,"171.340497","-480349.924","-480178.584","480521.264","-82303394.7","-0.000356699332","0","171.340497","2.17914102E-1073035");
+  mathtest(309,def,"824.65555","-379287.530","-378462.875","380112.186","-312781567","-0.00217422268","0","824.65555","6.35829256E-1106108");
+  mathtest(310,def,"19.3164031","-9207644.24E+988115069","-9.20764424E+988115075","9.20764424E+988115075","-1.77858568E+988115077","-2.09786592E-988115075","0","19.3164031","2.67093711E-12");
+  mathtest(311,def,"-3123.77646E+177814265","973284435.E+383256112","9.73284435E+383256120","-9.73284435E+383256120","-3.04032301E+561070389","-3.20952062E-205441853","0","-3.12377646E+177814268","");
+  mathtest(312,def,"-850.123915E+662955309","6774849.81E-846576865","-8.50123915E+662955311","-8.50123915E+662955311","-5.75946184E-183621547","","","","");
+  mathtest(313,def,"-23349.7724","2921.35355","-20428.4189","-26271.1260","-68212940.5","-7.99279238","-7","-2900.29755","-5.6705546E+12759");
+  mathtest(314,def,"18886653.3","568707476.","587594129","-549820823","1.07409809E+16","0.0332097855","0","18886653.3","");
+  mathtest(315,def,"-90552818.0","-542.03563E-986606878","-90552818.0","-90552818.0","4.90828538E-986606868","1.67060638E+986606883","","","-1.64244241E-40");
+  mathtest(316,def,"41501126.1E+791838765","-69.6651675E+204268348","4.15011261E+791838772","4.15011261E+791838772","-2.89118290E+996107122","-5.95722763E+587570422","","","");
+  mathtest(317,def,"76783193.3E-271488154","3765.01829E-520346003","7.67831933E-271488147","7.67831933E-271488147","2.89090127E-791834146","2.03938434E+248857853","","","");
+  mathtest(318,def,"4192.9928","987822007E-146560989","4192.99280","4192.99280","4.14193056E-146560977","4.24468454E+146560983","","","1.67973653E+36");
+  mathtest(319,def,"-891845.629","48277955.","47386109.4","-49169800.6","-4.30564831E+13","-0.0184731443","0","-891845.629","-6.32964147E+287267817");
+  mathtest(320,def,"334.901176","-7609296.55E+447340228","-7.60929655E+447340234","7.60929655E+447340234","-2.54836236E+447340237","-4.40121073E-447340233","0","334.901176","6.31926575E-21");
+  mathtest(321,def,"4.49868636","-341880896E-447251873","4.49868636","4.49868636","-1.53801492E-447251864","-1.31586363E+447251865","","","0.010983553");
+  mathtest(322,def,"807615.58","-314286480","-313478865","315094096","-2.53822658E+14","-0.00256967968","0","807615.58","");
+  mathtest(323,def,"-37.7457954","53277.8129E-859225538","-37.7457954","-37.7457954","-2.01101343E-859225532","-7.08471188E+859225534","","","-76620134.1");
+  mathtest(324,def,"-28671081.","98.8819623","-28670982.1","-28671179.9","-2.83505275E+9","-289952.589","-289952","-58.2671904","-1.93625566E+738");
+  mathtest(325,def,"-89752.2106E-469496896","99.9879961","99.9879961","-99.9879961","-8.97414368E-469496890","-8.97629857E-469496894","0","-8.97522106E-469496892","");
+  mathtest(326,def,"-497983567E-13538052","39.4578742","39.4578742","-39.4578742","-1.96493729E-13538042","-1.26206385E-13538045","0","-4.97983567E-13538044","-1.55376543E-527983689");
+  mathtest(327,def,"845739221E-654202565","-33313.1551","-33313.1551","33313.1551","-2.81742418E-654202552","-2.53875449E-654202561","0","8.45739221E-654202557","");
+  mathtest(328,def,"742.332067E+537827843","-4532.70023E-855387414","7.42332067E+537827845","7.42332067E+537827845","-3.36476873E-317559565","","","","");
+  mathtest(329,def,"-893.48654","670389960","670389067","-670390853","-5.98984406E+11","-0.00000133278628","0","-893.48654","");
+  mathtest(330,def,"1.37697162","-915.737474E-351578724","1.37697162","1.37697162","-1.26094451E-351578721","-1.50367508E+351578721","","","0.0561920784");
+  mathtest(331,def,"-65.2839808E+550288403","-121389.306","-6.52839808E+550288404","-6.52839808E+550288404","7.92477712E+550288409","5.37806689E+550288399","","","");
+  mathtest(332,def,"-30346603.E+346067390","792661.544","-3.03466030E+346067397","-3.03466030E+346067397","-2.40545852E+346067403","-3.82844396E+346067391","","","");
+  mathtest(333,def,"-61170.7065","-453731131.","-453792302","453669960","2.77550538E+13","0.000134817081","0","-61170.7065","");
+  mathtest(334,def,"6569.51133","13.8706351E+399434914","1.38706351E+399434915","-1.38706351E+399434915","9.11232944E+399434918","4.73627291E-399434912","0","6569.51133","6569.51133");
+  mathtest(335,def,"300703925.","-3156736.8","297547188","303860662","-9.49243146E+14","-95.2578387","-95","813929.0","4.18609114E-26763256");
+  mathtest(336,def,"192138216E+353011592","-473.080633","1.92138216E+353011600","1.92138216E+353011600","-9.08968688E+353011602","-4.06142637E+353011597","","","");
+  mathtest(337,def,"8607.64794","-34740.3367","-26132.6888","43347.9846","-299032588","-0.247770999","0","8607.64794","1.29604519E-136698");
+  mathtest(338,def,"-67913.8241","-93815.4229","-161729.247","25901.5988","6.37136413E+9","0.723908948","0","-67913.8241","-6.96355203E-453311");
+  mathtest(339,def,"34.5559455","-998799398.","-998799364","998799433","-3.45144576E+10","-3.45974833E-8","0","34.5559455","");
+  mathtest(340,def,"387995.328","990199543.E-124623607","387995.328","387995.328","3.84192796E-124623593","3.91835495E+124623603","","","7.73152138E+55");
+  mathtest(341,def,"-471.09166E-83521919","-441222368","-441222368","441222368","2.07856178E-83521908","1.06769669E-83521925","0","-4.7109166E-83521917","");
+  mathtest(342,def,"-97834.3858","70779789.8E+502166065","7.07797898E+502166072","-7.07797898E+502166072","-6.92469726E+502166077","-1.38223617E-502166068","0","-97834.3858","-8.57907886E+34");
+  mathtest(343,def,"7732331.06","-952719.482E+115325505","-9.52719482E+115325510","9.52719482E+115325510","-7.36674244E+115325517","-8.11606271E-115325505","0","7732331.06","1.30886724E-69");
+  mathtest(344,def,"23.2745547","2.23194245E-221062592","23.2745547","23.2745547","5.19474666E-221062591","1.04279368E+221062593","","","541.704896");
+  mathtest(345,def,"671.083363E-218324205","-787150031","-787150031","787150031","-5.28243290E-218324194","-8.52548227E-218324212","0","6.71083363E-218324203","");
+  mathtest(346,def,"365167.80","-80263.6516","284904.148","445431.452","-2.93097011E+10","-4.54960362","-4","44113.1936","1.27052227E-446468");
+  mathtest(347,def,"-1.43297604E-65129780","56.598733E-135581942","-1.43297604E-65129780","-1.43297604E-65129780","-8.11046283E-200711721","-2.53181646E+70452160","","","8.65831881E-390778680");
+  mathtest(348,def,"416998859.","260.220323E-349285593","416998859","416998859","1.08511578E-349285582","1.60248383E+349285599","","","7.25111178E+25");
+  mathtest(349,def,"7267.17611E+862630607","4021.56861","7.26717611E+862630610","7.26717611E+862630610","2.92254473E+862630614","1.80705014E+862630607","","","");
+  mathtest(350,def,"12.2142434E+593908740","5.27236571E-396050748","1.22142434E+593908741","1.22142434E+593908741","6.43979581E+197857993","2.3166533E+989959488","","","");
+  mathtest(351,def,"-28.591932","-1.79153238E-817064576","-28.5919320","-28.5919320","5.12233720E-817064575","1.59594838E+817064577","","","0.00122324372");
+  mathtest(352,def,"590.849666","753424.306E+277232744","7.53424306E+277232749","-7.53424306E+277232749","4.45160500E+277232752","7.84219014E-277232748","0","590.849666","1.48530607E+22");
+  mathtest(353,def,"1.7270628","-1325026.67","-1325024.94","1325028.40","-2288404.27","-0.00000130341739","0","1.7270628","2.09260036E-314440");
+  mathtest(354,def,"33402118.","-5534.83745","33396583.2","33407652.8","-1.84875294E+11","-6034.8869","-6034","4908.82670","8.14473913E-41645");
+  mathtest(355,def,"-439842.506","-775110.807","-1214953.31","335268.301","3.40926680E+11","0.567457584","0","-439842.506","-1.84678472E-4374182");
+  mathtest(356,def,"-248664.779","-440890.44E+666433944","-4.40890440E+666433949","4.40890440E+666433949","1.09633924E+666433955","5.64005831E-666433945","0","-248664.779","2.61542877E-22");
+  mathtest(357,def,"-14161.9142","8306.49493","-5855.4193","-22468.4091","-117635869","-1.70492059","-1","-5855.41927","1.65573372E+34479");
+  mathtest(358,def,"-6417227.13","16679.8842","-6400547.25","-6433907.01","-1.07038605E+11","-384.728518","-384","-12151.5972","3.58767978E+113546");
+  mathtest(359,def,"514825024.","-25.0446345E-103809457","514825024","514825024","-1.28936046E-103809447","-2.05563002E+103809464","","","7.32860062E-27");
+  mathtest(360,def,"525948196","219450390","745398586","306497806","1.15419537E+17","2.39666102","2","87047416","");
+  mathtest(361,def,"-638509.181","45580189.0E+269212559","4.55801890E+269212566","-4.55801890E+269212566","-2.91033691E+269212572","-1.40084803E-269212561","0","-638509.181","-1.06129405E+29");
+  mathtest(362,def,"330590422","74.359928E+535377965","7.43599280E+535377966","-7.43599280E+535377966","2.45826800E+535377975","4.44581418E-535377959","0","330590422","4.31550742E+59");
+  mathtest(363,def,"-3.48593871E-940579904","-20265.9640E-322988987","-2.02659640E-322988983","2.02659640E-322988983","","1.72009519E-617590921","0","-3.48593871E-940579904","");
+  mathtest(364,def,"-328103480.","-721.949371E-923938665","-328103480","-328103480","2.36874101E-923938654","4.54468822E+923938670","","","-2.4430038E-60");
+  mathtest(365,def,"-1857.01448","19081578.1","19079721.1","-19083435.1","-3.54347668E+10","-0.0000973197537","0","-1857.01448","8.44397087E+62374153");
+  mathtest(366,def,"347.28720E+145930771","-62821.9906E-676564106","3.47287200E+145930773","3.47287200E+145930773","-2.18172732E-530633328","-5.52811518E+822494874","","","5.69990135E-875584642");
+  mathtest(367,def,"-643.211399E+441807003","-50733419.2","-6.43211399E+441807005","-6.43211399E+441807005","3.26323135E+441807013","1.26782584E+441806998","","","");
+  mathtest(368,def,"-53991661.4E-843339554","20718.7346","20718.7346","-20718.7346","-1.11863890E-843339542","-2.60593431E-843339551","0","-5.39916614E-843339547","");
+  mathtest(369,def,"-900181424","-105763982.","-1.00594541E+9","-794417442","9.52067719E+16","8.51122856","8","-54069568","1.32627061E-947045602");
+  mathtest(370,def,"94218.7462E+563233951","19262.6382E+765263890","1.92626382E+765263894","-1.92626382E+765263894","","4.89126906E-202029939","0","9.42187462E+563233955","");
+  mathtest(371,def,"28549.271E+921331828","-2150590.40","2.85492710E+921331832","2.85492710E+921331832","-6.13977881E+921331838","-1.32750853E+921331826","","","");
+  mathtest(372,def,"810.7080E+779625763","5957.94044","8.10708000E+779625765","8.10708000E+779625765","4.83014998E+779625769","1.36071854E+779625762","","","");
+  mathtest(373,def,"-23.7357549E+77116908","351.100649E+864348022","3.51100649E+864348024","-3.51100649E+864348024","-8.33363895E+941464933","-6.7603848E-787231116","0","-2.37357549E+77116909","3.17403853E+308467637");
+  mathtest(374,def,"40216102.2E+292724544","661.025962","4.02161022E+292724551","4.02161022E+292724551","2.65838876E+292724554","6.08389148E+292724548","","","");
+  mathtest(375,def,"22785024.3E+783719168","399.505989E+137478666","2.27850243E+783719175","2.27850243E+783719175","9.10275367E+921197843","5.70329981E+646240506","","","");
+  mathtest(376,def,"515.591819E+821371364","-692137914.E-149498690","5.15591819E+821371366","5.15591819E+821371366","-3.56860646E+671872685","-7.44926421E+970870047","","","");
+  mathtest(377,def,"-536883072E+477911251","624996.301","-5.36883072E+477911259","-5.36883072E+477911259","-3.35549934E+477911265","-8.59017999E+477911253","","","");
+  mathtest(378,def,"-399492.914E-334369192","5202119.87E+442442258","5.20211987E+442442264","-5.20211987E+442442264","-2.07821003E+108073078","-7.67942539E-776811452","0","-3.99492914E-334369187","");
+  mathtest(379,def,"762.071184","9851631.37","9852393.44","-9850869.30","7.50764438E+9","0.0000773548213","0","762.071184","4.02198436E+28392356");
+  mathtest(380,def,"5626.12471","72989818.3","72995444.4","-72984192.2","4.10649820E+11","0.0000770809524","0","5626.12471","1.79814757E+273727098");
+  mathtest(381,def,"-47207260.1","-2073.3152","-47209333.4","-47205186.8","9.78755299E+10","22768.9741","22768","-2019.6264","-6.02238319E-15909");
+  mathtest(382,def,"207.740860","-51.0390090","156.701851","258.779869","-10602.8876","-4.07023694","-4","3.5848240","6.40297515E-119");
+  mathtest(383,def,"-572.812464E-745934021","-182805872.E+604508681","-1.82805872E+604508689","1.82805872E+604508689","1.04713482E-141425329","","0","-5.72812464E-745934019","");
+  mathtest(384,def,"-6418504E+3531407","8459416.1","-6.41850400E+3531413","-6.41850400E+3531413","-5.42967961E+3531420","-7.58740784E+3531406","","","");
+  mathtest(385,def,"280689.531","-128212543","-127931854","128493233","-3.59879186E+13","-0.00218925173","0","280689.531","1.42173809E-698530938");
+  mathtest(386,def,"15.803551E-783422793","239108038E-489186308","2.39108038E-489186300","-2.39108038E-489186300","","6.60937672E-294236493","0","1.5803551E-783422792","");
+  mathtest(387,def,"26.515922","-9418242.96E-105481628","26.5159220","26.5159220","-2.49733396E-105481620","-2.81537885E+105481622","","","1.54326108E-13");
+  mathtest(388,def,"-88.1094557","-54029934.1","-54030022.2","54029846.0","4.76054809E+9","0.0000016307526","0","-88.1094557","5.05289826E-105089439");
+  mathtest(389,def,"6770.68602E-498420397","-6.11248908E-729616908","6.77068602E-498420394","6.77068602E-498420394","","-1.10768067E+231196514","","","");
+  mathtest(390,def,"-892973818.E-781904441","555201299.","555201299","-555201299","-4.95780224E-781904424","-1.60837847E-781904441","0","-8.92973818E-781904433","");
+  mathtest(391,def,"670175802E+135430680","27355195.4","6.70175802E+135430688","6.70175802E+135430688","1.83327900E+135430696","2.44990318E+135430681","","","");
+  mathtest(392,def,"-440950.26","205.477469E-677345561","-440950.260","-440950.260","-9.06053434E-677345554","-2.14597864E+677345564","","","1.94437132E+11");
+  mathtest(393,def,"-8.2335779","573665010E+742722075","5.73665010E+742722083","-5.73665010E+742722083","-4.72331555E+742722084","-1.43525886E-742722083","0","-8.2335779","311552.753");
+  mathtest(394,def,"452943.863","7022.23629","459966.099","445921.627","3.18067883E+9","64.5013703","64","3520.74044","5.54158976E+39716");
+  mathtest(395,def,"62874.1079","-52719654.1","-52656780.0","52782528.2","-3.31470122E+12","-0.0011926123","0","62874.1079","1.18819936E-252973775");
+  mathtest(396,def,"-7428.41741E+609772037","-46024819.3","-7.42841741E+609772040","-7.42841741E+609772040","3.41891569E+609772048","1.61400251E+609772033","","","");
+  mathtest(397,def,"2.27959297","41937.019","41939.2986","-41934.7394","95599.3337","0.0000543575348","0","2.27959297","2.89712423E+15007");
+  mathtest(398,def,"508692408E-671967782","8491989.20","8491989.20","-8491989.20","4.31981043E-671967767","5.99026207E-671967781","0","5.08692408E-671967774","");
+  mathtest(399,def,"940.533705E-379310421","-4.01176961E+464620037","-4.01176961E+464620037","4.01176961E+464620037","-3.77320453E+85309619","-2.34443599E-843930456","0","9.40533705E-379310419","");
+  mathtest(400,def,"97.0649652","-92.4485649E-151989098","97.0649652","97.0649652","-8.97351673E-151989095","-1.0499348E+151989098","","","1.30748728E-18");
+  mathtest(401,def,"297544.536E+360279473","8.80275007","2.97544536E+360279478","2.97544536E+360279478","2.61921019E+360279479","3.38013159E+360279477","","","");
+  mathtest(402,def,"-28861028.","82818.820E+138368758","8.28188200E+138368762","-8.28188200E+138368762","-2.39023628E+138368770","-3.48483932E-138368756","0","-28861028","4.81387013E+59");
+  mathtest(403,def,"36.2496238E+68828039","49243.00","3.62496238E+68828040","3.62496238E+68828040","1.78504022E+68828045","7.36137599E+68828035","","","");
+  mathtest(404,def,"22.447828E-476014683","-56067.5520","-56067.5520","56067.5520","-1.25859476E-476014677","-4.00371109E-476014687","0","2.2447828E-476014682","");
+  mathtest(405,def,"282688.791E+75011952","5.99789051","2.82688791E+75011957","2.82688791E+75011957","1.69553642E+75011958","4.7131369E+75011956","","","5.10330507E+450071744");
+  mathtest(406,def,"-981.860310E-737387002","-994046289","-994046289","994046289","9.76014597E-737386991","9.87741035E-737387009","0","-9.81860310E-737387000","");
+  mathtest(407,def,"-702.91210","-6444903.55","-6445606.46","6444200.64","4.53020069E+9","0.000109064797","0","-702.91210","1.70866703E-18348004");
+  mathtest(408,def,"972456720E-17536823","16371.2590","16371.2590","-16371.2590","1.59203408E-17536810","5.94002404E-17536819","0","9.72456720E-17536815","");
+  mathtest(409,def,"71471.2045","-74303278.4","-74231807.2","74374749.6","-5.31054481E+12","-0.00096188494","0","71471.2045","2.14535374E-360677853");
+  mathtest(410,def,"643.103951E+439708441","788251925.","6.43103951E+439708443","6.43103951E+439708443","5.06927927E+439708452","8.15860933E+439708434","","","");
+  mathtest(411,def,"4.30838663","-7.43110827","-3.12272164","11.7394949","-32.0160875","-0.579777131","0","4.30838663","0.0000362908645");
+  mathtest(412,def,"823.678025","-513.581840E-324453141","823.678025","823.678025","-4.23026076E-324453136","-1.60379118E+324453141","","","2.63762228E-15");
+  mathtest(413,def,"4461.81162","3.22081680","4465.03244","4458.59080","14370.6778","1385.30438","1385","0.98035200","8.8824688E+10");
+  mathtest(414,def,"-4458527.10","-99072605","-103531132","94614077.9","4.41717894E+14","0.0450026231","0","-4458527.10","-6.23928099E-658752715");
+  mathtest(415,def,"-577964618","487424368.","-90540250","-1.06538899E+9","-2.81714039E+17","-1.18575241","-1","-90540250","");
+  mathtest(416,def,"-867.036184","-57.1768608","-924.213045","-809.859323","49574.4072","15.1641096","15","-9.3832720","-3.40312837E-168");
+  mathtest(417,def,"771871921E-330504770","5.34285236","5.34285236","-5.34285236","4.12399771E-330504761","1.44468136E-330504762","0","7.71871921E-330504762","");
+  mathtest(418,def,"-338683.062E-728777518","166441931","166441931","-166441931","-5.63710628E-728777505","-2.03484218E-728777521","0","-3.38683062E-728777513","");
+  mathtest(419,def,"-512568743","-416376887.E-965945295","-512568743","-512568743","2.13421778E-965945278","1.23102112E+965945295","","","1.44874358E-35");
+  mathtest(420,def,"7447181.99","5318438.52","12765620.5","2128743.47","3.96073796E+13","1.40025723","1","2128743.47","1.21634782E+36548270");
+  mathtest(421,def,"54789.8207","93165435.2","93220225.0","-93110645.4","5.10451749E+12","0.000588091716","0","54789.8207","3.80769825E+441483035");
+  mathtest(422,def,"41488.5960","146.797094","41635.3931","41341.7989","6090405.33","282.625459","282","91.815492","6.84738153E+678");
+  mathtest(423,def,"785741.663E+56754529","-461.531732","7.85741663E+56754534","7.85741663E+56754534","-3.62644711E+56754537","-1.70246509E+56754532","","","");
+  mathtest(424,def,"-4.95436786","-3132.4233","-3137.37767","3127.46893","15519.1773","0.0015816406","0","-4.95436786","1.98062422E-2177");
+  mathtest(425,def,"77321.8478E+404626874","82.4797688","7.73218478E+404626878","7.73218478E+404626878","6.37748813E+404626880","9.3746441E+404626876","","","");
+  mathtest(426,def,"-7.99307725","-29153.7273","-29161.7204","29145.7342","233027.994","0.000274169994","0","-7.99307725","1.88688028E-26318");
+  mathtest(427,def,"-61.6337401E+474999517","5254.87092","-6.16337401E+474999518","-6.16337401E+474999518","-3.23877349E+474999522","-1.1728878E+474999515","","","");
+  mathtest(428,def,"-16.4043088","35.0064812","18.6021724","-51.4107900","-574.257128","-0.468607762","0","-16.4043088","-3.33831843E+42");
+  mathtest(429,def,"-8.41156520","-56508958.9","-56508967.3","56508950.5","475328792","1.48853657E-7","0","-8.41156520","-8.86365458E-52263827");
+  mathtest(430,def,"-360165.79E+503559835","-196688.515","-3.60165790E+503559840","-3.60165790E+503559840","7.08404744E+503559845","1.83114805E+503559835","","","");
+  mathtest(431,def,"-653236480.E+565648495","-930.445274","-6.53236480E+565648503","-6.53236480E+565648503","6.07800796E+565648506","7.02068674E+565648500","","","");
+  mathtest(432,def,"-3.73342903","855.029289","851.295860","-858.762718","-3192.19117","-0.00436643408","0","-3.73342903","-1.41988961E+489");
+  mathtest(433,def,"-5.14890532E+562048011","10847127.8E-390918910","-5.14890532E+562048011","-5.14890532E+562048011","-5.58508340E+171129108","-4.74679142E+952966914","","","-5.14890532E+562048011");
+  mathtest(434,def,"653311907","-810.036965E+744537823","-8.10036965E+744537825","8.10036965E+744537825","-5.29206794E+744537834","-8.06521104E-744537818","0","653311907","3.01325171E-71");
+  mathtest(435,def,"-1.31557907","98.9139300E-579281802","-1.31557907","-1.31557907","-1.30129096E-579281800","-1.33002406E+579281800","","","15.529932");
+  mathtest(436,def,"-875192389","-72071565.6","-947263955","-803120823","6.30764857E+16","12.1433797","12","-10333601.8","1.25564408E-644471405");
+  mathtest(437,def,"-72838078.8","-391.398423","-72838470.2","-72837687.4","2.85087092E+10","186097.017","186097","-6.474969","-6.574057E-3075");
+  mathtest(438,def,"29186560.9","-79.7419988","29186481.2","29186640.6","-2.32739470E+9","-366012.407","-366012","32.4352144","6.10050869E-598");
+  mathtest(439,def,"-329801660E-730249465","-6489.9256","-6489.92560","6489.92560","2.14038824E-730249453","5.08174793E-730249461","0","-3.29801660E-730249457","");
+  mathtest(440,def,"91.8429117E+103164883","7131455.16","9.18429117E+103164884","9.18429117E+103164884","6.54973607E+103164891","1.28785654E+103164878","","","");
+  mathtest(441,def,"3943866.38E+150855113","-31927007.3","3.94386638E+150855119","3.94386638E+150855119","-1.25915851E+150855127","-1.23527594E+150855112","","","");
+  mathtest(442,def,"-7002.0468E-795962156","-5937891.05","-5937891.05","5937891.05","4.15773910E-795962146","1.17921443E-795962159","0","-7.0020468E-795962153","");
+  mathtest(443,def,"696504605.","54506.4617","696559111","696450099","3.79640016E+13","12778.386","12778","21037.3974","2.6008532E+481992");
+  mathtest(444,def,"-5115.76467","690.960979E+815126701","6.90960979E+815126703","-6.90960979E+815126703","-3.53479376E+815126707","-7.4038402E-815126701","0","-5115.76467","-9.17009655E+25");
+  mathtest(445,def,"-261.279392","-613.079357","-874.358749","351.799965","160185.002","0.426175484","0","-261.279392","-2.06318841E-1482");
+  mathtest(446,def,"-591407763","-80145822.8","-671553586","-511261940","4.73988618E+16","7.37914644","7","-30387003.4","-2.79334522E-703030105");
+  mathtest(447,def,"615630407","-69.4661869","615630338","615630476","-4.27654969E+10","-8862303.15","-8862303","10.4375693","3.44283102E-607");
+  mathtest(448,def,"1078757.50","27402569.0E-713742082","1078757.50","1078757.50","2.95607268E-713742069","3.93670207E+713742080","","","1.25536924E+18");
+  mathtest(449,def,"-4865.60358E-401116515","66952.5315","66952.5315","-66952.5315","-3.25764477E-401116507","-7.26724363E-401116517","0","-4.86560358E-401116512","");
+  mathtest(450,def,"-87805.3921E-934896690","-1875.14745","-1875.14745","1875.14745","1.64648057E-934896682","4.68258601E-934896689","0","-8.78053921E-934896686","");
+  mathtest(451,def,"-232540609.E+602702520","68.0834223","-2.32540609E+602702528","-2.32540609E+602702528","-1.58321605E+602702530","-3.41552468E+602702526","","","");
+  mathtest(452,def,"-320610803.","-863871235.","-1.18448204E+9","543260432","2.76966450E+17","0.37113263","0","-320610803","");
+  mathtest(453,def,"-303956364E+278139979","229537.920E+479603725","2.29537920E+479603730","-2.29537920E+479603730","-6.97695116E+757743717","-1.3242098E-201463743","0","-3.03956364E+278139987","9.23894712E+556279974");
+  mathtest(454,def,"-439.747348","74.9494457E-353117582","-439.747348","-439.747348","-3.29588200E-353117578","-5.86725284E+353117582","","","-3.17996693E+18");
+  mathtest(455,def,"-89702231.9","1.28993993","-89702230.6","-89702233.2","-115710491","-69539852.1","-69539852","-0.07890964","-89702231.9");
+  mathtest(456,def,"-5856939.14","-6743375.34","-12600314.5","886436.20","3.94955390E+13","0.868547107","0","-5856939.14","-3.29213248E-45636942");
+  mathtest(457,def,"733317.669E+100381349","-13832.6792E+174055607","-1.38326792E+174055611","1.38326792E+174055611","-1.01437481E+274436966","-5.30134227E-73674257","0","7.33317669E+100381354","1.36366549E-100381355");
+  mathtest(458,def,"87.4798787E-80124704","108497.32","108497.320","-108497.320","9.49133239E-80124698","8.06286079E-80124708","0","8.74798787E-80124703","");
+  mathtest(459,def,"-694562052","310681.319E+549445264","3.10681319E+549445269","-3.10681319E+549445269","-2.15787454E+549445278","-2.23560932E-549445261","0","-694562052","-3.35068155E+26");
+  mathtest(460,def,"-9744135.85","1797016.04","-7947119.81","-11541151.9","-1.75103684E+13","-5.42239782","-5","-759055.65","3.83848006E+12558883");
+  mathtest(461,def,"3625.87308","-50.2208536E+658627487","-5.02208536E+658627488","5.02208536E+658627488","-1.82094441E+658627492","-7.21985554E-658627486","0","3625.87308","1.5956477E-18");
+  mathtest(462,def,"365347.52","-3655414.47","-3290066.95","4020761.99","-1.33549661E+12","-0.099946948","0","365347.52","1.02663257E-20333994");
+  mathtest(463,def,"-19706333.6E-816923050","-383858032.","-383858032","383858032","7.56443443E-816923035","5.1337557E-816923052","0","-1.97063336E-816923043","");
+  mathtest(464,def,"-86346.2616","-98.8063785","-86445.0680","-86247.4552","8531561.41","873.893598","873","-88.2931695","-2.05064086E-489");
+  mathtest(465,def,"-445588.160E-496592215","328.822976","328.822976","-328.822976","-1.46519625E-496592207","-1.35510044E-496592212","0","-4.45588160E-496592210","");
+  mathtest(466,def,"-9709213.71","-34.6690137","-9709248.38","-9709179.04","336608863","280054.512","280054","-17.7472602","-2.80903974E-245");
+  mathtest(467,def,"742395536.","-43533.6889","742352002","742439070","-3.23192163E+13","-17053.3569","-17053","15539.1883","5.7622734E-386175");
+  mathtest(468,def,"-878849193.","-5842982.47E-972537342","-878849193","-878849193","5.13510043E-972537327","1.50411061E+972537344","","","2.17027042E-54");
+  mathtest(469,def,"-78014142.1","-624658.522","-78638800.6","-77389483.6","4.87321987E+13","124.890863","124","-556485.372","-7.86063865E-4929918");
+  mathtest(470,def,"857039.371","454.379672","857493.751","856584.991","389421268","1886.17454","1886","79.309608","3.82253101E+2693");
+  mathtest(471,def,"166534010.","-173.012236","166533837","166534183","-2.88124214E+10","-962556.255","-962556","44.164784","4.78620664E-1423");
+  mathtest(472,def,"-810.879063","43776.610","42965.7309","-44587.4891","-35497536.5","-0.0185231123","0","-810.879063","-2.34758691E+127345");
+  mathtest(473,def,"-327.127935","93458944","93458616.9","-93459271.1","-3.05730314E+10","-0.00000350023145","0","-327.127935","2.29323021E+235022854");
+  mathtest(474,def,"539295218.","-9587941.10E-309643098","539295218","539295218","-5.17073079E-309643083","-5.62472394E+309643099","","","4.80545269E-88");
+  mathtest(475,def,"-3862702.65","879616.733","-2983085.92","-4742319.38","-3.39769789E+12","-4.3913474","-4","-344235.718","-3.50650167E+5793941");
+  mathtest(476,def,"-8.25290500","992.091584E+256070257","9.92091584E+256070259","-9.92091584E+256070259","-8.18763759E+256070260","-8.31869268E-256070260","0","-8.25290500","1.46577888E+9");
+  mathtest(477,def,"546875205.","447.52857E+557357101","4.47528570E+557357103","-4.47528570E+557357103","2.44742278E+557357112","1.22198948E-557357095","0","546875205","8.94443542E+34");
+  mathtest(478,def,"177623437","-7779116.14","169844321","185402553","-1.38175335E+15","-22.83337","-22","6482881.92","2.90085309E-64173820");
+  mathtest(479,def,"377204735.","13768.1401","377218503","377190967","5.19340764E+12","27396.9274","27396","12768.8204","2.06065297E+118082");
+  mathtest(480,def,"-2435.49239","-11732.0640E-23331504","-2435.49239","-2435.49239","2.85733526E-23331497","2.07592832E+23331503","","","-0.00041059459");
+  mathtest(481,def,"-6128465.14E-137123294","-5742264.27","-5742264.27","5742264.27","3.51912664E-137123281","1.06725585E-137123294","0","-6.12846514E-137123288","");
+  mathtest(482,def,"-2898065.44","-5.11638105","-2898070.56","-2898060.32","14827607.1","566428.773","566428","-3.95461060","-4.89169151E-33");
+  mathtest(483,def,"1851395.31E+594383160","-550301.475","1.85139531E+594383166","1.85139531E+594383166","-1.01882557E+594383172","-3.36432918E+594383160","","","");
+  mathtest(484,def,"536412589.E+379583977","899.601161","5.36412589E+379583985","5.36412589E+379583985","4.82557388E+379583988","5.96278231E+379583982","","","");
+  mathtest(485,def,"185.85297","867419480.","867419666","-867419294","1.61212487E+11","2.14259622E-7","0","185.85297","");
+  mathtest(486,def,"-5.26631053","-3815941.35E+183291763","-3.81594135E+183291769","3.81594135E+183291769","2.00959321E+183291770","1.38008162E-183291769","0","-5.26631053","0.00130009218");
+  mathtest(487,def,"-8.11587021E-245942806","4553.06753E+943412048","4.55306753E+943412051","-4.55306753E+943412051","-3.69521051E+697469246","","0","-8.11587021E-245942806","");
+  mathtest(488,def,"-405765.352","854963231","854557466","-855368996","-3.46914456E+14","-0.000474599769","0","-405765.352","");
+  mathtest(489,def,"-159.609757","-43356.7567","-43516.3665","43197.1470","6920161.40","0.00368131219","0","-159.609757","-8.95397849E-95519");
+  mathtest(490,def,"-564240.241E-501316672","-557.781977","-557.781977","557.781977","3.14723037E-501316664","1.01157847E-501316669","0","-5.64240241E-501316667","");
+  mathtest(491,def,"318847.270","582107878.E+399633412","5.82107878E+399633420","-5.82107878E+399633420","1.85603508E+399633426","5.47746014E-399633416","0","318847.270","1.0507423E+33");
+  mathtest(492,def,"-4426.59663","95.1096765","-4331.48695","-4521.70631","-421012.173","-46.5420217","-46","-51.5515110","-2.38037379E+346");
+  mathtest(493,def,"6037.28310","578264.105","584301.388","-572226.822","3.49114411E+9","0.010440356","0","6037.28310","3.57279483E+2186324");
+  mathtest(494,def,"-66.9556692","-53.8519404","-120.807610","-13.1037288","3605.69271","1.24332881","1","-13.1037288","2.55554086E-99");
+  mathtest(495,def,"-92486.0222","-59935.8544","-152421.877","-32550.1678","5.54322876E+9","1.5430834","1","-32550.1678","1.83152656E-297647");
+  mathtest(496,def,"852136219.E+917787351","9246221.91","8.52136219E+917787359","8.52136219E+917787359","7.87904058E+917787366","9.21604767E+917787352","","","");
+  mathtest(497,def,"-2120096.16E-269253718","9437.00514","9437.00514","-9437.00514","-2.00073584E-269253708","-2.24657731E-269253716","0","-2.12009616E-269253712","");
+  mathtest(498,def,"-524653.169E-865784226","228054.698","228054.698","-228054.698","-1.19649620E-865784215","-2.30055848E-865784226","0","-5.24653169E-865784221","");
+  mathtest(499,def,"-288193133","-312268737.","-600461870","24075604","8.99937057E+16","0.922901011","0","-288193133","");
+  mathtest(500,def,"-373484759E-113589964","844101958E-852538240","-3.73484759E-113589956","-3.73484759E-113589956","-3.15259216E-966128187","-4.42464036E+738948275","","","3.78602147E-908719644");
+  
+  summary("Arithmetic");
+  return;}
+
+ /* mathtest -- general arithmetic test routine
+    Arg1  is test number
+    Arg2  is MathContext
+    Arg3  is left hand side (LHS)
+    Arg4  is right hand side (RHS)
+    Arg5  is the expected result for add
+    Arg6  is the expected result for subtract
+    Arg7  is the expected result for multiply
+    Arg8  is the expected result for divide
+    Arg9  is the expected result for integerDivide
+    Arg10 is the expected result for remainder
+    Arg11 is the expected result for power
+ 
+  For power RHS, 0 is added to the number, any exponent is removed and
+  the number is then rounded to an integer, using format(rhs+0,,0)
+ 
+  If an error should result for an operation, the 'expected result' is
+  an empty string.
+  */
+ 
+ private void mathtest(int test,com.ibm.math.MathContext mc,java.lang.String slhs,java.lang.String srhs,java.lang.String add,java.lang.String sub,java.lang.String mul,java.lang.String div,java.lang.String idv,java.lang.String rem,java.lang.String pow){
+  com.ibm.math.BigDecimal lhs;
+  com.ibm.math.BigDecimal rhs;
+  java.lang.String res=null;
+  java.lang.String sn=null;
+  int e=0;
+  
+  
+  
+  lhs=new com.ibm.math.BigDecimal(slhs);
+  rhs=new com.ibm.math.BigDecimal(srhs);
+  
+  try{
+   res=lhs.add(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $137){
+   res="";
+  }
+  mathtestcheck(test,lhs,rhs,"add",res,add);
+  
+  try{
+   res=lhs.subtract(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $138){
+   res="";
+  }
+  mathtestcheck(test,lhs,rhs,"sub",res,sub);
+  
+  try{
+   res=lhs.multiply(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $139){
+   res="";
+  }
+  mathtestcheck(test,lhs,rhs,"mul",res,mul);
+  
+  try{
+   res=lhs.divide(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $140){
+   res="";
+  }
+  mathtestcheck(test,lhs,rhs,"div",res,div);
+  
+  try{
+   res=lhs.divideInteger(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $141){
+   res="";
+  }
+  mathtestcheck(test,lhs,rhs,"idv",res,idv);
+  
+  try{
+   res=lhs.remainder(rhs,mc).toString();
+  }
+  catch (java.lang.ArithmeticException $142){
+   res="";
+  }
+  mathtestcheck(test,lhs,rhs,"rem",res,rem);
+  
+  try{
+   // prepare an integer from the rhs
+   // in Rexx:
+   //   n=rhs+0
+   //   e=pos('E', n)
+   //   if e>0 then n=left(n,e-1)
+   //   n=format(n,,0)
+   
+   sn=rhs.plus(mc).toString();
+   e=sn.indexOf("E",0);
+   if (e>0) 
+    sn=sn.substring(0,e);
+   sn=(new com.ibm.math.BigDecimal(sn)).format(-1,0);
+   
+   res=lhs.pow(new com.ibm.math.BigDecimal(sn),mc).toString();
+  }
+  catch (java.lang.ArithmeticException $143){
+   res="";
+  }
+  mathtestcheck(test,lhs,rhs,"pow",res,pow);
+  return;
+  }
+
+ /* mathtestcheck -- check for general mathtest error
+    Arg1  is test number
+    Arg2  is left hand side (LHS)
+    Arg3  is right hand side (RHS)
+    Arg4  is the operation
+    Arg5  is the actual result
+    Arg6  is the expected result
+    Show error message if a problem, otherwise return quietly
+    */
+ 
+ private void mathtestcheck(int test,com.ibm.math.BigDecimal lhs,com.ibm.math.BigDecimal rhs,java.lang.String op,java.lang.String got,java.lang.String want){
+  boolean flag;
+  java.lang.String testnum;
+  
+  flag=want.equals((java.lang.Object)got);
+  
+  if ((!flag)) 
+   say(">"+test+">"+" "+lhs.toString()+" "+op+" "+rhs.toString()+" "+"="+" "+want+" "+"[got"+" "+got+"]");
+  
+  testnum="gen"+right((new com.ibm.math.BigDecimal(test+1000)).toString(),3);
+  
+  (new Test(testnum)).ok=flag;
+  return;
+  }
+
+ 
+ /* ------------------------------------------------------------------ */
+ /* Support routines and minor classes follow                          */
+ /* ------------------------------------------------------------------ */
+ 
+ /* ----------------------------------------------------------------- */
+ /* Method called to summarise pending tests                          */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is section name */
+ 
+ private void summary(java.lang.String section){
+  int bad;
+  int count;
+  int i=0;
+  Test item=null;
+  bad=0;
+  count=Tests.size();
+  {int $144=count;i=0;i:for(;$144>0;$144--,i++){
+   item=(Test)(Tests.elementAt(i));
+   if ((!item.ok)) 
+    {
+     bad++;
+     say("Failed:"+" "+item.name);
+    }
+   }
+  }/*i*/
+  totalcount=totalcount+count;
+  Tests=new java.util.Vector(100); // reinitialize
+  if (bad==0) 
+   say("OK"+" "+left(section,14)+" "+right("["+count+" "+"tests]",12));
+  else 
+   throw new DiagException(section+" "+"[failed"+" "+bad+" "+"of"+" "+count+" "+"tests]",bad);
+  return;}
+
+ 
+ /* ----------------------------------------------------------------- */
+ /* right - Utility to do a 'right' on a Java String                  */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is string to right-justify */
+ /* Arg2 is desired length */
+ 
+ private static java.lang.String right(java.lang.String s,int len){
+  int slen;
+  slen=s.length();
+  if (slen==len) 
+   return s; // length just right
+  if (slen>len) 
+   return s.substring(slen-len); // truncate on left
+  // too short
+  return (new java.lang.String(new char[len-slen])).replace('\000',' ').concat(s);
+  }
+
+ /* ----------------------------------------------------------------- */
+ /* left - Utility to do a 'left' on a Java String                    */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is string to left-justify */
+ /* Arg2 is desired length */
+ 
+ private static java.lang.String left(java.lang.String s,int len){
+  int slen;
+  slen=s.length();
+  if (slen==len) 
+   return s; // length just right
+  if (slen>len) 
+   return s.substring(0,len); // truncate on right
+  // too short
+  return s.concat((new java.lang.String(new char[len-slen])).replace('\000',' '));
+  }
+
+ /* ----------------------------------------------------------------- */
+ /* say - Utility to do a display                                     */
+ /* ----------------------------------------------------------------- */
+ /* Arg1 is string to display, omitted if none */
+ /*         [null or omitted gives blank line] */
+ // this version doesn't heed continuation final character
+ 
+ private static void say(){
+  say((java.lang.String)null);return;
+  }
+ private static void say(java.lang.String s){
+  if (s==null) 
+   s="";
+  java.lang.System.out.println(s);
+  return;}
+
+ /* ----------------------------------------------------------------- */
+ /* Scaffolding for stand-alone run                                   */
+ /* ----------------------------------------------------------------- */
+ /** Entry point for stand-alone run.  It constructs a
+  *  <code>DiagBigDecimal</code> object and then invokes its
+  *  {@link #diagrun(boolean)} method to run the test
+  *  suite.
+  *
+  * @param args The command line argument string array.
+  *   if the first word is '<code>continue</code>' then try and run
+  *   all tests, otherwise stop after the first failing test group.
+  */
+ 
+ public static void main(java.lang.String args[]){
+  boolean $continue;
+  DiagBigDecimal dbd;
+  int fails;
+  $continue=false;
+  if (args.length>0) 
+   $continue=args[0].equals("continue");
+  dbd=new DiagBigDecimal(); // make the runner
+  fails=dbd.diagrun($continue); // and run the tests
+  if (fails==0) 
+   {System.exit(0);return;}
+  {System.exit(1);return;}
+  }
+
+/* ------------------------------------------------------------------ */
+/* Test -- represents a test and its status                           */
+/* ------------------------------------------------------------------ */
+/* Copyright IBM Corporation 1998, 2000.  All rights reserved.        */
+/* Author: Mike Cowlishaw                                             */
+/* ------------------------------------------------------------------ */
+/* 1998.07.15 Initial version                                         */
+/* 2000.03.27 Change to javadoc comments                              */
+
+/**
+ * The <code>Test</code> class is used to record a specific test.
+ * When constructed, it notes the name of the test and adds the test
+ * to the list of tests held by the parent.
+ *
+ * Its <code>ok</flag> is assigned directly to record whether the
+ * test succeeded (1) or failed (0).
+ *
+ * @see     com.ibm.math.DiagBigDecimal
+ * @version 1.00 2000.03.27
+ * @author  Mike Cowlishaw
+ */
+ 
+ public class Test{
+  private final transient java.lang.String $0="DiagBigDecimal.nrx";
+  /* properties shared transient */
+ /** The name of the test. */
+  transient java.lang.String name;
+ /** Success flag; will be set to 1 (true) if the test succeeded, or 0
+  * (false) if the test failed.
+  */
+  transient boolean ok;
+
+ 
+ /**
+  * Constructs a new <code>Test</code> with a specified name.
+  *
+  * @param testname The <code>String</code> naming the test.
+  */
+  
+  public Test(java.lang.String testname){super();
+   name=testname; // save the name
+   DiagBigDecimal.this.Tests.addElement((java.lang.Object)this); // and add to parent's list
+   return;}
+  }
+
+ /* ------------------------------------------------------------------ */
+ /* DiagException                                                      */
+ /* ------------------------------------------------------------------ */
+ /* Copyright IBM Corporation 1996, 2000.  All rights reserved.        */
+ /* Author: Mike Cowlishaw                                             */
+ /* ------------------------------------------------------------------ */
+ /* 1996.05.27 Initial version in NetRexx (as DiagX)                   */
+ /* 1998.06.25 Copied from NetRexx test suite                          */
+ /* 1999.07.03 Add fail count                                          */
+ /* 2000.03.27 Change to javadoc comments                              */
+ 
+ /**
+  * The <code>DiagException</code> class is used to signal the failure
+  * of a test group.  It records the number of failures in the group.
+  *
+  * @see     com.ibm.math.DiagBigDecimal
+  * @version 1.00 2000.03.27
+  * @author  Mike Cowlishaw
+  */
+ 
+ public static class DiagException extends java.lang.RuntimeException{
+  private final transient java.lang.String $0="DiagBigDecimal.nrx";
+ 
+  /* properties shared transient */
+ /** the count of failed tests in the group which signalled this
+   * exception.
+   */
+  transient int failcount=0;
+ // number of tests which failed
+ 
+ /**
+  * Constructs a new <code>DiagException</code> with a message and
+  * failure count.  This is thrown when a group of tests fails.
+  *
+  * @param message The <code>String</code> message describing the group.
+  * @param fails   The <code>int</code> number of failed tests in the  group.
+  */
+  
+  public DiagException(java.lang.String message,int fails){
+   super(message);
+   failcount=fails;
+   return;}
+ }}
diff --git a/src/com/ibm/test/bnf/BigNumberFormatTest.java b/src/com/ibm/test/bnf/BigNumberFormatTest.java
new file mode 100755
index 0000000..ce59e77
--- /dev/null
+++ b/src/com/ibm/test/bnf/BigNumberFormatTest.java
@@ -0,0 +1,398 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/bnf/Attic/BigNumberFormatTest.java,v $ 
+ * $Date: 2000/12/06 00:01:27 $ 
+ * $Revision: 1.9 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.bnf;
+
+import com.ibm.test.*;
+import com.ibm.text.*;
+import java.text.ParseException;
+import java.util.*;
+import java.math.BigInteger;
+import com.ibm.util.Utility;
+
+/**
+ * @test
+ * General test of Big NumberFormat
+ */
+public class BigNumberFormatTest extends TestFmwk {
+
+    static final int ILLEGAL = -1;
+
+    public static void main(String[] args) throws Exception {
+        new BigNumberFormatTest().run(args);
+    }
+    	
+    public void TestExponent() {
+        DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US);
+        DecimalFormat fmt1 = new DecimalFormat("0.###E0", US);
+        DecimalFormat fmt2 = new DecimalFormat("0.###E+0", US);
+        Number n = new Long(1234);
+        expect(fmt1, n, "1.234E3");
+        expect(fmt2, n, "1.234E+3");
+        expect(fmt1, "1.234E3", n);
+        expect(fmt1, "1.234E+3", n); // Either format should parse "E+3"
+        expect(fmt2, "1.234E+3", n);
+    }
+
+    /**
+     * Test the functioning of the secondary grouping value.
+     */
+    public void TestSecondaryGrouping() {
+        DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US);
+        DecimalFormat f = new DecimalFormat("#,##,###", US);
+        expect(f, new Long(123456789), "12,34,56,789");
+        expectPat(f, "#,##,###");
+        f.applyPattern("#,###");
+        f.setSecondaryGroupingSize(4);
+        expect(f, new Long(123456789), "12,3456,789");
+        expectPat(f, "#,####,###");
+
+        // On Sun JDK 1.2-1.3, the hi_IN locale uses '0' for a zero digit,
+        // but on IBM JDK 1.2-1.3, the locale uses U+0966.
+        f = (DecimalFormat) NumberFormat.getInstance(new Locale("hi", "IN"));
+        String str = transmute("1,87,65,43,210",
+                               f.getDecimalFormatSymbols().getZeroDigit());
+        expect(f, new Long(1876543210), str);
+    }
+
+    private void expectPad(DecimalFormat fmt, String pat, int pos) {
+        expectPad(fmt, pat, pos, 0, (char)0);
+    }
+
+    private void expectPad(DecimalFormat fmt, String pat,
+                           int pos, int width, char pad) {
+        int apos = 0, awidth = 0;
+        char apad = 0;
+        try {
+            fmt.applyPattern(pat);
+            apos = fmt.getPadPosition();
+            awidth = fmt.getFormatWidth();
+            apad = fmt.getPadCharacter();
+        } catch (IllegalArgumentException e) {
+            apos = -1;
+            awidth = width;
+            apad = pad;
+        }
+        if (apos == pos && awidth == width && apad == pad) {
+            logln("Ok   \"" + pat + "\" pos=" + apos +
+                  ((pos == -1) ? "" : " width=" + awidth + " pad=" + apad));
+        } else {
+            logln("FAIL \"" + pat + "\" pos=" + apos +
+                  " width=" + awidth + " pad=" + apad +
+                  ", expected " + pos + " " + width + " " + pad);
+        }
+    }
+
+    /**
+     */
+    public void TestPatterns() {
+        DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US);
+        DecimalFormat fmt = new DecimalFormat("#", US);
+
+        expectPad(fmt, "*^#", DecimalFormat.PAD_BEFORE_PREFIX, 1, '^');
+        expectPad(fmt, "$*^#", DecimalFormat.PAD_AFTER_PREFIX, 2, '^');
+        expectPad(fmt, "#*^", DecimalFormat.PAD_BEFORE_SUFFIX, 1, '^');
+        expectPad(fmt, "#$*^", DecimalFormat.PAD_AFTER_SUFFIX, 2, '^');
+        expectPad(fmt, "$*^$#", ILLEGAL);
+        expectPad(fmt, "#$*^$", ILLEGAL);
+        expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat.PAD_BEFORE_SUFFIX,
+                  12, 'x');
+        expectPad(fmt, "''#0*x", DecimalFormat.PAD_BEFORE_SUFFIX,
+                  3, 'x');
+        expectPad(fmt, "'I''ll'*a###.##", DecimalFormat.PAD_AFTER_PREFIX,
+                  10, 'a');
+
+        fmt.applyPattern("AA#,##0.00ZZ");
+        fmt.setPadCharacter('^');
+
+        fmt.setFormatWidth(10);
+
+        fmt.setPadPosition(DecimalFormat.PAD_BEFORE_PREFIX);
+        expectPat(fmt, "*^AA#,##0.00ZZ");
+
+        fmt.setPadPosition(DecimalFormat.PAD_BEFORE_SUFFIX);
+        expectPat(fmt, "AA#,##0.00*^ZZ");
+
+        fmt.setPadPosition(DecimalFormat.PAD_AFTER_SUFFIX);
+        expectPat(fmt, "AA#,##0.00ZZ*^");
+
+        //            12  3456789012
+        String exp = "AA*^#,##0.00ZZ";
+        fmt.setFormatWidth(12);
+        fmt.setPadPosition(DecimalFormat.PAD_AFTER_PREFIX);
+        expectPat(fmt, exp);
+
+        fmt.setFormatWidth(13);
+        //              12  34567890123
+        expectPat(fmt, "AA*^##,##0.00ZZ");
+
+        fmt.setFormatWidth(14);
+        //              12  345678901234
+        expectPat(fmt, "AA*^###,##0.00ZZ");
+
+        fmt.setFormatWidth(15);
+        //              12  3456789012345
+        expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case
+
+        fmt.setFormatWidth(16);
+        //              12  34567890123456
+        expectPat(fmt, "AA*^#,###,##0.00ZZ");
+    }
+
+    private void expectPat(DecimalFormat fmt, String exp) {
+        String pat = fmt.toPattern();
+        if (pat.equals(exp)) {
+            logln("Ok   \"" + pat + '"');
+        } else {
+            errln("FAIL \"" + pat + "\", expected \"" + exp + '"');
+        }
+    }
+
+    /**
+     * Test the handling of the AlphaWorks BigDecimal
+     */
+    public void TestAlphaBigDecimal() {
+        DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US);
+        expect(NumberFormat.getScientificInstance(Locale.US),
+               new Number[] { new com.ibm.math.BigDecimal("12345.678901"),
+                           },
+               "1.234568E4");
+        expect(new DecimalFormat("##0.####E0", US),
+               new Number[] { new com.ibm.math.BigDecimal("12345.4999"),
+                              new com.ibm.math.BigDecimal("12344.5001"),
+                            },
+               "12.345E3");
+        expect(new DecimalFormat("##0.####E0", US),
+               new Number[] { new com.ibm.math.BigDecimal("12345.5000"),
+                              new com.ibm.math.BigDecimal("12346.5000"),
+                            },
+               "12.346E3");
+    }
+
+    /**
+     */
+    public void TestScientific() {
+        DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US);
+        expect(NumberFormat.getScientificInstance(Locale.US),
+               new Number[] { new Double(12345.678901),
+                              new java.math.BigDecimal("12345.678901"),
+                            },
+               "1.234568E4");
+        expect(new DecimalFormat("##0.###E0", US),
+               new Double(12345),
+               "12.34E3");
+        expect(new DecimalFormat("##0.###E0", US),
+               new Double(12345.00001),
+               "12.35E3");
+        expect(new DecimalFormat("##0.####E0", US),
+               new Number[] { new Integer(12345),
+                              new Long(12345),
+                              new java.math.BigDecimal("12345.4999"),
+                              new java.math.BigDecimal("12344.5001"),
+                            },
+               "12.345E3");
+        expect(new DecimalFormat("##0.####E0", US),
+               new Number[] { new java.math.BigDecimal("12345.5000"),
+                              new java.math.BigDecimal("12346.5000"),
+                            },
+               "12.346E3");
+        expect(NumberFormat.getScientificInstance(Locale.FRANCE),
+               new Double(12345.678901),
+               "1,234568E4");
+        expect(new DecimalFormat("##0.####E0", US),
+               new Double(789.12345e-9),
+               "789.12E-9");
+        expect(new DecimalFormat("##0.####E0", US),
+               new Double(780.e-9),
+               "780E-9");
+        expect(new DecimalFormat(".###E0", US),
+               new Double(45678),
+               ".457E5");
+        expect(new DecimalFormat(".###E0", US),
+               new Long(0),
+               ".0E0");
+        expect(new DecimalFormat[] { new DecimalFormat("#E0", US),
+                                     new DecimalFormat("##E0", US),
+                                     new DecimalFormat("####E0", US),
+                                     new DecimalFormat("0E0", US),    
+                                     new DecimalFormat("00E0", US),   
+                                     new DecimalFormat("000E0", US), 
+                                   },
+               new Long(45678000),
+               new String[] { "4.5678E7",
+                              "45.678E6",
+                              "4567.8E4",
+                              "5E7",
+                              "46E6",  
+                              "457E5",
+                            }
+               );
+        expect(new DecimalFormat("###E0", US),
+               new Object[] { new Double(0.0000123), "12.3E-6",
+                              new Double(0.000123), "123E-6",
+                              new java.math.BigDecimal("0.00123"), "1.23E-3", // Cafe VM messes up Double(0.00123)
+                              new Double(0.0123), "12.3E-3",
+                              new Double(0.123), "123E-3",
+                              new Double(1.23), "1.23E0",
+                              new Double(12.3), "12.3E0",
+                              new Double(123), "123E0",
+                              new Double(1230), "1.23E3",
+                             });
+        expect(new DecimalFormat("0.#E+00", US),
+               new Object[] { new Double(0.00012), "1.2E-04",
+                              new Long(12000),     "1.2E+04",
+                             });
+    }
+
+    /**
+     */
+    public void TestPad() {
+        DecimalFormatSymbols US = new DecimalFormatSymbols(Locale.US);
+        expect(new DecimalFormat("*^##.##", US),
+               new Object[] { new Long(0),      "^^^^0",
+                              new Double(-1.3), "^-1.3",
+                            }
+               );
+        expect(new DecimalFormat("##0.0####E0*_ g-m/s^2", US),
+               new Object[] { new Long(0),       "0.0E0______ g-m/s^2",
+                              new Double(1.0/3), "333.333E-3_ g-m/s^2",
+                            }
+               );
+        expect(new DecimalFormat("##0.0####*_ g-m/s^2", US),
+               new Object[] { new Long(0),       "0.0______ g-m/s^2",
+                              new Double(1.0/3), "0.33333__ g-m/s^2",
+                            }
+               );
+        expect(new DecimalFormat("*x#,###,###,##0.00;*x(#,###,###,##0.00)", US),
+               new Object[] {
+                   new Long(-100),        "xxxxxxxx(100.00)",
+                   new Long(-1000),       "xxxxxx(1,000.00)",
+                   new Long(-1000000),    "xx(1,000,000.00)",
+                   new Long(-1000000000), "(1,000,000,000.00)",
+               });
+    }
+    
+    private void expect(NumberFormat fmt, Object[] data) {
+        for (int i=0; i<data.length; i+=2) {
+            expect(fmt, (Number) data[i], (String) data[i+1]);
+        }
+    }
+    
+    private void expect(Object fmto, Object numo, Object expo) {
+        NumberFormat fmt = null, fmts[] = null;
+        Number num = null, nums[] = null;
+        String exp = null, exps[] = null;
+        if (fmto instanceof NumberFormat[]) {
+            fmts = (NumberFormat[]) fmto;
+        } else {
+            fmt = (NumberFormat) fmto;
+        }
+        if (numo instanceof Number[]) {
+            nums = (Number[]) numo;
+        } else {
+            num = (Number) numo;
+        }
+        if (expo instanceof String[]) {
+            exps = (String[]) expo;
+        } else {
+            exp = (String) expo;
+        }
+        int n = 1;
+        if (fmts != null) {
+            n = Math.max(n, fmts.length);
+        }
+        if (nums != null) {
+            n = Math.max(n, nums.length);
+        }
+        if (exps != null) {
+            n = Math.max(n, exps.length);
+        }
+        for (int i=0; i<n; ++i) {
+            expect(fmts == null ? fmt : fmts[i],
+                   nums == null ? num : nums[i],
+                   exps == null ? exp : exps[i]);
+        }
+    }
+
+    private static String showNumber(Number n) {
+        String cls = n.getClass().getName();
+        if (!(n instanceof com.ibm.math.BigDecimal
+              || n instanceof java.math.BigDecimal)) {
+            int i = cls.lastIndexOf('.');
+            cls = cls.substring(i+1);
+        }
+        return n.toString() + " (" + cls + ')';
+    }
+
+    private void expect(NumberFormat fmt, Number n, String exp) {
+        String saw = fmt.format(n);
+        String pat = ((DecimalFormat) fmt).toPattern();
+        if (saw.equals(exp)) {
+            logln("Ok   " + showNumber(n) + " x " +
+                  pat + " = " +
+                  Utility.escape(saw));
+        } else {
+            errln("FAIL " + showNumber(n) + " x " +
+                  pat + " = \"" +
+                  Utility.escape(saw) + ", expected " + Utility.escape(exp));
+        }
+    }
+
+    private void expect(NumberFormat fmt, String str, Number exp) {
+        Number saw = null;
+        try {
+            saw = fmt.parse(str);
+        } catch (ParseException e) {
+            saw = null;
+        }
+        String pat = ((DecimalFormat) fmt).toPattern();
+        if (saw.equals(exp)) {
+            logln("Ok   \"" + str + "\" x " +
+                  pat + " = " +
+                  showNumber(saw));
+        } else {
+            errln("FAIL \"" + str + "\" x " +
+                  pat + " = " +
+                  showNumber(saw) + ", expected " + showNumber(exp));
+        }
+    }
+
+    /**
+     * Given a string composed of [0-9] and other chars, convert the
+     * [0-9] chars to be offsets 0..9 from 'zero'.
+     */
+    private static String transmute(String str, char zero) {
+        StringBuffer buf = new StringBuffer();
+        for (int i=0; i<str.length(); ++i) {
+            char c = str.charAt(i);
+            if (c >= '0' && c <= '9') {
+                c = (char) (c - '0' + zero);
+            }
+            buf.append(c);
+        }
+        return buf.toString();
+    }
+
+    public void Test4161100() {
+        NumberFormat f = NumberFormat.getInstance();
+        f.setMinimumFractionDigits(1);
+        f.setMaximumFractionDigits(1);
+        double a = -0.09;
+        String s = f.format(a);
+        logln(a + " x " +
+              ((DecimalFormat) f).toPattern() + " = " +
+              s);
+        if (!s.equals("-0.1")) {
+            errln("FAIL");
+        }
+    }        
+}
diff --git a/src/com/ibm/test/bnf/package.html b/src/com/ibm/test/bnf/package.html
new file mode 100755
index 0000000..645256e
--- /dev/null
+++ b/src/com/ibm/test/bnf/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/bnf/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:48 $
+-->
+</head>
+<body bgcolor="white">
+BigNumberFormat tests.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/calendar/AstroTest.java b/src/com/ibm/test/calendar/AstroTest.java
new file mode 100755
index 0000000..d7ca4b9
--- /dev/null
+++ b/src/com/ibm/test/calendar/AstroTest.java
@@ -0,0 +1,73 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/AstroTest.java,v $ 
+ * $Date: 2000/05/12 23:19:12 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.calendar;
+
+// AstroTest
+
+import com.ibm.test.*;
+import com.ibm.util.*;
+
+import com.ibm.util.CalendarAstronomer.*;
+
+// TODO: try finding next new moon after  07/28/1984 16:00 GMT
+
+public class AstroTest extends TestFmwk {
+    public static void main(String[] args) throws Exception {
+        new AstroTest().run(args);
+    }
+
+    static final double PI = Math.PI;
+    
+    static GregorianCalendar gc = new GregorianCalendar(new SimpleTimeZone(0, "UTC"));
+    static CalendarAstronomer astro = new CalendarAstronomer();
+    
+    public void TestSolarLongitude() {
+        final double tests[][] = {
+            { 1980, 7, 27, 00, 00, 124.114347 },
+            { 1988, 7, 27, 00, 00, 124.187732 },
+        };
+        logln("");
+        for (int i = 0; i < tests.length; i++) {
+            gc.clear();
+            gc.set((int)tests[i][0], (int)tests[i][1]-1, (int)tests[i][2], (int)tests[i][3], (int) tests[i][4]);
+            
+            astro.setDate(gc.getTime());
+            
+            double longitude = astro.getSunLongitude();
+            
+            Equatorial result = astro.getSunPosition();
+        }
+    }
+    
+    public void TestLunarPosition() {
+        final double tests[][] = {
+            { 1979, 2, 26, 16, 00,  0, 0 },
+        };
+        logln("");
+        
+        for (int i = 0; i < tests.length; i++) {
+            gc.clear();
+            gc.set((int)tests[i][0], (int)tests[i][1]-1, (int)tests[i][2], (int)tests[i][3], (int) tests[i][4]);
+            astro.setDate(gc.getTime());
+            
+            Equatorial result = astro.getMoonPosition();
+        }
+
+    }
+    
+    public void TestCoordinates() {
+        Equatorial result = astro.eclipticToEquatorial(139.686111 * PI/ 180.0, 4.875278* PI / 180.0);
+        logln("result is " + result + ";  " + result.toHmsString());
+    }
+    
+}
diff --git a/src/com/ibm/test/calendar/CalendarRegression.java b/src/com/ibm/test/calendar/CalendarRegression.java
new file mode 100755
index 0000000..778bc48
--- /dev/null
+++ b/src/com/ibm/test/calendar/CalendarRegression.java
@@ -0,0 +1,1722 @@
+package com.ibm.test.calendar;
+import com.ibm.util.*;
+import java.util.Date;
+import java.util.Locale;
+import com.ibm.text.*;
+
+/**
+ * @test 1.32 99/11/14
+ * @bug 4031502 4035301 4040996 4051765 4059654 4061476 4070502 4071197 4071385
+ * 4073929 4083167 4086724 4092362 4095407 4096231 4096539 4100311 4103271
+ * 4106136 4108764 4114578 4118384 4125881 4125892 4136399 4141665 4142933
+ * 4145158 4145983 4147269 4149677 4162587 4165343 4166109 4167060 4173516
+ * 4174361 4177484 4197699 4209071 4288792
+ */
+public class CalendarRegression extends com.ibm.test.TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new CalendarRegression().run(args);
+    }
+
+    static final String[] FIELD_NAME = {
+        "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH",
+        "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK",
+        "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", "HOUR_OF_DAY",
+        "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",
+        "DST_OFFSET", "YEAR_WOY", "DOW_LOCAL", "EXTENDED_YEAR",
+        "JULIAN_DAY", "MILLISECONDS_IN_DAY",
+    };
+
+    /*
+      Synopsis: java.sql.Timestamp constructor works wrong on Windows 95
+
+      ==== Here is the test ==== 
+      public static void main (String args[]) { 
+        java.sql.Timestamp t= new java.sql.Timestamp(0,15,5,5,8,13,123456700); 
+        logln("expected=1901-04-05 05:08:13.1234567"); 
+        logln(" result="+t); 
+      } 
+      
+      ==== Here is the output of the test on Solaris or NT ==== 
+      expected=1901-04-05 05:08:13.1234567 
+      result=1901-04-05 05:08:13.1234567 
+      
+      ==== Here is the output of the test on Windows95 ==== 
+      expected=1901-04-05 05:08:13.1234567 
+      result=1901-04-05 06:08:13.1234567 
+      */
+
+    public void Test4031502() {
+        // This bug actually occurs on Windows NT as well, and doesn't
+        // require the host zone to be set; it can be set in Java.
+        String[] ids = TimeZone.getAvailableIDs();
+        boolean bad = false;
+        for (int i=0; i<ids.length; ++i) {
+            TimeZone zone = TimeZone.getTimeZone(ids[i]);
+            GregorianCalendar cal = new GregorianCalendar(zone);
+            cal.clear();
+            cal.set(1900, 15, 5, 5, 8, 13);
+            if (cal.get(Calendar.HOUR) != 5) {
+                logln("Fail: " + zone.getID() + " " +
+                      zone.useDaylightTime() + " " +
+                      cal.get(Calendar.DST_OFFSET) / (60*60*1000) + " " +
+                      zone.getRawOffset() / (60*60*1000) +
+                      ": HOUR = " + cal.get(Calendar.HOUR));
+                bad = true;
+            } else if (false) { // Change to true to debug
+                logln("OK: " + zone.getID() + " " +
+                      zone.useDaylightTime() + " " +
+                      cal.get(Calendar.DST_OFFSET) / (60*60*1000) + " " +
+                      zone.getRawOffset() / (60*60*1000) +
+                      ": HOUR = " + cal.get(Calendar.HOUR));
+            }
+        }
+        if (bad) errln("TimeZone problems with GC");
+    }
+
+    public void Test4035301() {
+        GregorianCalendar c = new GregorianCalendar(98, 8, 7);
+        GregorianCalendar d = new GregorianCalendar(98, 8, 7);
+        if (c.after(d) ||
+            c.after(c) ||
+            c.before(d) ||
+            c.before(c) ||
+            !c.equals(c) ||
+            !c.equals(d))
+            errln("Fail");
+    }
+
+    public void Test4040996() {
+        String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
+        SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
+        pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+        pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+        Calendar calendar = new GregorianCalendar(pdt);
+
+        calendar.set(Calendar.MONTH,3);
+        calendar.set(Calendar.DAY_OF_MONTH,18);
+        calendar.set(Calendar.SECOND, 30);
+
+        logln("MONTH: " + calendar.get(Calendar.MONTH));
+        logln("DAY_OF_MONTH: " + 
+                           calendar.get(Calendar.DAY_OF_MONTH));
+        logln("MINUTE: " + calendar.get(Calendar.MINUTE));
+        logln("SECOND: " + calendar.get(Calendar.SECOND));
+
+        calendar.add(Calendar.SECOND,6);
+        //This will print out todays date for MONTH and DAY_OF_MONTH
+        //instead of the date it was set to.
+        //This happens when adding MILLISECOND or MINUTE also
+        logln("MONTH: " + calendar.get(Calendar.MONTH));
+        logln("DAY_OF_MONTH: " + 
+                           calendar.get(Calendar.DAY_OF_MONTH));
+        logln("MINUTE: " + calendar.get(Calendar.MINUTE));
+        logln("SECOND: " + calendar.get(Calendar.SECOND));
+        if (calendar.get(Calendar.MONTH) != 3 ||
+            calendar.get(Calendar.DAY_OF_MONTH) != 18 ||
+            calendar.get(Calendar.SECOND) != 36)
+            errln("Fail: Calendar.add misbehaves");
+    }
+
+    public void Test4051765() {
+        Calendar cal = Calendar.getInstance();
+        cal.setLenient(false);
+        cal.set(Calendar.DAY_OF_WEEK, 0);
+        try {
+            cal.getTime();
+            errln("Fail: DAY_OF_WEEK 0 should be disallowed");
+        }
+        catch (IllegalArgumentException e) {
+            return;
+        }
+    }
+    
+    /* User error - no bug here
+    public void Test4059524() {
+        // Create calendar for April 10, 1997
+        GregorianCalendar calendar  = new GregorianCalendar();
+        // print out a bunch of interesting things
+        logln("ERA: " + calendar.get(calendar.ERA));
+        logln("YEAR: " + calendar.get(calendar.YEAR));
+        logln("MONTH: " + calendar.get(calendar.MONTH));
+        logln("WEEK_OF_YEAR: " + 
+                           calendar.get(calendar.WEEK_OF_YEAR));
+        logln("WEEK_OF_MONTH: " + 
+                           calendar.get(calendar.WEEK_OF_MONTH));
+        logln("DATE: " + calendar.get(calendar.DATE));
+        logln("DAY_OF_MONTH: " + 
+                           calendar.get(calendar.DAY_OF_MONTH));
+        logln("DAY_OF_YEAR: " + calendar.get(calendar.DAY_OF_YEAR));
+        logln("DAY_OF_WEEK: " + calendar.get(calendar.DAY_OF_WEEK));
+        logln("DAY_OF_WEEK_IN_MONTH: " +
+                           calendar.get(calendar.DAY_OF_WEEK_IN_MONTH));
+        logln("AM_PM: " + calendar.get(calendar.AM_PM));
+        logln("HOUR: " + calendar.get(calendar.HOUR));
+        logln("HOUR_OF_DAY: " + calendar.get(calendar.HOUR_OF_DAY));
+        logln("MINUTE: " + calendar.get(calendar.MINUTE));
+        logln("SECOND: " + calendar.get(calendar.SECOND));
+        logln("MILLISECOND: " + calendar.get(calendar.MILLISECOND));
+        logln("ZONE_OFFSET: "
+                           + (calendar.get(calendar.ZONE_OFFSET)/(60*60*1000)));
+        logln("DST_OFFSET: "
+                           + (calendar.get(calendar.DST_OFFSET)/(60*60*1000)));
+        calendar  = new GregorianCalendar(1997,3,10); 
+        calendar.getTime();                        
+        logln("April 10, 1997");
+        logln("ERA: " + calendar.get(calendar.ERA));
+        logln("YEAR: " + calendar.get(calendar.YEAR));
+        logln("MONTH: " + calendar.get(calendar.MONTH));
+        logln("WEEK_OF_YEAR: " + 
+                           calendar.get(calendar.WEEK_OF_YEAR));
+        logln("WEEK_OF_MONTH: " + 
+                           calendar.get(calendar.WEEK_OF_MONTH));
+        logln("DATE: " + calendar.get(calendar.DATE));
+        logln("DAY_OF_MONTH: " + 
+                           calendar.get(calendar.DAY_OF_MONTH));
+        logln("DAY_OF_YEAR: " + calendar.get(calendar.DAY_OF_YEAR));
+        logln("DAY_OF_WEEK: " + calendar.get(calendar.DAY_OF_WEEK));
+        logln("DAY_OF_WEEK_IN_MONTH: " + calendar.get(calendar.DAY_OF_WEEK_IN_MONTH));
+        logln("AM_PM: " + calendar.get(calendar.AM_PM));
+        logln("HOUR: " + calendar.get(calendar.HOUR));
+        logln("HOUR_OF_DAY: " + calendar.get(calendar.HOUR_OF_DAY));
+        logln("MINUTE: " + calendar.get(calendar.MINUTE));
+        logln("SECOND: " + calendar.get(calendar.SECOND));
+        logln("MILLISECOND: " + calendar.get(calendar.MILLISECOND));
+        logln("ZONE_OFFSET: "
+                           + (calendar.get(calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
+        logln("DST_OFFSET: "
+                           + (calendar.get(calendar.DST_OFFSET)/(60*60*1000))); // in hours
+    }
+    */
+
+    public void Test4059654() {
+        GregorianCalendar gc = new GregorianCalendar();
+        
+        gc.set(1997, 3, 1, 15, 16, 17); // April 1, 1997
+
+        gc.set(Calendar.HOUR, 0);
+        gc.set(Calendar.AM_PM, Calendar.AM);
+        gc.set(Calendar.MINUTE, 0);
+        gc.set(Calendar.SECOND, 0);
+        gc.set(Calendar.MILLISECOND, 0);
+
+        Date cd = gc.getTime();
+        Date exp = new Date(97, 3, 1, 0, 0, 0);
+        if (!cd.equals(exp))
+            errln("Fail: Calendar.set broken. Got " + cd + " Want " + exp);
+    }
+
+    public void Test4061476() {
+        SimpleDateFormat fmt = new SimpleDateFormat("ddMMMyy", Locale.UK);
+        Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"), 
+                                                     Locale.UK);
+        fmt.setCalendar(cal);
+        try
+            {
+                Date date = fmt.parse("29MAY97");
+                cal.setTime(date);
+            }
+        catch (Exception e) {;}
+        cal.set(Calendar.HOUR_OF_DAY, 13);
+        logln("Hour: "+cal.get(Calendar.HOUR_OF_DAY));
+        cal.add(Calendar.HOUR_OF_DAY, 6);
+        logln("Hour: "+cal.get(Calendar.HOUR_OF_DAY));
+        if (cal.get(Calendar.HOUR_OF_DAY) != 19)
+            errln("Fail: Want 19 Got " + cal.get(Calendar.HOUR_OF_DAY));
+    }
+
+    public void Test4070502() {
+        Date d = getAssociatedDate(new Date(98, 0, 30));
+        Calendar cal = new GregorianCalendar();
+        cal.setTime(d);
+        if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
+            cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
+            errln("Fail: Want weekday Got " + d);
+    }
+
+    /**
+     * Get the associated date starting from a specified date
+     * NOTE: the unnecessary "getTime()'s" below are a work-around for a
+     * bug in jdk 1.1.3 (and probably earlier versions also)
+     * <p>
+     * @param date The date to start from
+     */
+    public static Date getAssociatedDate(Date d) {
+        GregorianCalendar cal = new GregorianCalendar();
+        cal.setTime(d);
+        //cal.add(field, amount); //<-- PROBLEM SEEN WITH field = DATE,MONTH 
+        // cal.getTime();  // <--- REMOVE THIS TO SEE BUG
+        while (true) {
+            int wd = cal.get(Calendar.DAY_OF_WEEK);
+            if (wd == Calendar.SATURDAY || wd == Calendar.SUNDAY) {
+                cal.add(Calendar.DATE, 1);
+                // cal.getTime();
+            }
+            else
+                break;
+        }
+        return cal.getTime();
+    }
+
+    public void Test4071197() {
+        dowTest(false);
+        dowTest(true);
+    }
+
+    void dowTest(boolean lenient) {
+        GregorianCalendar cal = new GregorianCalendar();
+        cal.set(1997, Calendar.AUGUST, 12); // Wednesday
+        // cal.getTime(); // Force update
+        cal.setLenient(lenient);
+        cal.set(1996, Calendar.DECEMBER, 1); // Set the date to be December 1, 1996
+        int dow = cal.get(Calendar.DAY_OF_WEEK);
+        int min = cal.getMinimum(Calendar.DAY_OF_WEEK);
+        int max = cal.getMaximum(Calendar.DAY_OF_WEEK);
+        logln(cal.getTime().toString());
+        if (min != Calendar.SUNDAY || max != Calendar.SATURDAY)
+            errln("FAIL: Min/max bad");
+        if (dow < min || dow > max) 
+            errln("FAIL: Day of week " + dow + " out of range");
+        if (dow != Calendar.SUNDAY) 
+            errln("FAIL: Day of week should be SUNDAY Got " + dow);
+    }
+
+    public void Test4071385() {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date(98, Calendar.JUNE, 24));
+        cal.set(Calendar.MONTH, Calendar.NOVEMBER); // change a field
+        logln(cal.getTime().toString());
+        if (!cal.getTime().equals(new Date(98, Calendar.NOVEMBER, 24)))
+            errln("Fail");
+    }
+
+    public void Test4073929() {
+        GregorianCalendar foo1 = new GregorianCalendar(1997, 8, 27);
+        foo1.add(Calendar.DAY_OF_MONTH, +1);
+        int testyear = foo1.get(Calendar.YEAR);
+        int testmonth = foo1.get(Calendar.MONTH);
+        int testday = foo1.get(Calendar.DAY_OF_MONTH);
+        if (testyear != 1997 ||
+            testmonth != 8 ||
+            testday != 28)
+            errln("Fail: Calendar not initialized");
+    }
+
+    public void Test4083167() {
+        TimeZone saveZone = TimeZone.getDefault();
+        try {
+            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+            Date firstDate = new Date();
+            Calendar cal = new GregorianCalendar();
+            cal.setTime(firstDate);
+            long firstMillisInDay = cal.get(Calendar.HOUR_OF_DAY) * 3600000L +
+                cal.get(Calendar.MINUTE) * 60000L +
+                cal.get(Calendar.SECOND) * 1000L +
+                cal.get(Calendar.MILLISECOND);
+            
+            logln("Current time: " + firstDate.toString());
+
+            for (int validity=0; validity<30; validity++) {
+                Date lastDate = new Date(firstDate.getTime() +
+                                         (long)validity*1000*24*60*60);
+                cal.setTime(lastDate);
+                long millisInDay = cal.get(Calendar.HOUR_OF_DAY) * 3600000L +
+                    cal.get(Calendar.MINUTE) * 60000L +
+                    cal.get(Calendar.SECOND) * 1000L +
+                    cal.get(Calendar.MILLISECOND);
+                if (firstMillisInDay != millisInDay) 
+                    errln("Day has shifted " + lastDate);
+            }
+        }
+        finally {
+            TimeZone.setDefault(saveZone);
+        }
+    }
+
+    public void Test4086724() {
+        SimpleDateFormat date;
+        TimeZone saveZone = TimeZone.getDefault();
+        Locale saveLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.UK); 
+            TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
+            date=new SimpleDateFormat("dd MMM yyy (zzzz) 'is in week' ww"); 
+            Calendar cal=Calendar.getInstance(); 
+            cal.set(1997,Calendar.SEPTEMBER,30); 
+            Date now=cal.getTime(); 
+            logln(date.format(now)); 
+            cal.set(1997,Calendar.JANUARY,1); 
+            now=cal.getTime(); 
+            logln(date.format(now)); 
+            cal.set(1997,Calendar.JANUARY,8); 
+            now=cal.getTime(); 
+            logln(date.format(now)); 
+            cal.set(1996,Calendar.DECEMBER,31); 
+            now=cal.getTime(); 
+            logln(date.format(now)); 
+        }
+        finally {
+            Locale.setDefault(saveLocale);
+            TimeZone.setDefault(saveZone);
+        }
+        logln("*** THE RESULTS OF THIS TEST MUST BE VERIFIED MANUALLY ***");
+    }
+
+    public void Test4092362() {
+        GregorianCalendar cal1 = new GregorianCalendar(1997, 10, 11, 10, 20, 40); 
+        /*cal1.set( Calendar.YEAR, 1997 ); 
+        cal1.set( Calendar.MONTH, 10 ); 
+        cal1.set( Calendar.DATE, 11 ); 
+        cal1.set( Calendar.HOUR, 10 ); 
+        cal1.set( Calendar.MINUTE, 20 ); 
+        cal1.set( Calendar.SECOND, 40 ); */
+
+        logln( " Cal1 = " + cal1.getTime().getTime() ); 
+        logln( " Cal1 time in ms = " + cal1.get(Calendar.MILLISECOND) ); 
+        for( int k = 0; k < 100 ; k++ ); 
+
+        GregorianCalendar cal2 = new GregorianCalendar(1997, 10, 11, 10, 20, 40); 
+        /*cal2.set( Calendar.YEAR, 1997 ); 
+        cal2.set( Calendar.MONTH, 10 ); 
+        cal2.set( Calendar.DATE, 11 ); 
+        cal2.set( Calendar.HOUR, 10 ); 
+        cal2.set( Calendar.MINUTE, 20 ); 
+        cal2.set( Calendar.SECOND, 40 ); */
+
+        logln( " Cal2 = " + cal2.getTime().getTime() ); 
+        logln( " Cal2 time in ms = " + cal2.get(Calendar.MILLISECOND) ); 
+        if( !cal1.equals( cal2 ) ) 
+            errln("Fail: Milliseconds randomized");
+    }
+
+    public void Test4095407() {
+        GregorianCalendar a = new GregorianCalendar(1997,Calendar.NOVEMBER, 13);
+        int dow = a.get(Calendar.DAY_OF_WEEK);
+        if (dow != Calendar.THURSDAY)
+            errln("Fail: Want THURSDAY Got " + dow);
+    }
+
+    public void Test4096231() {
+        TimeZone GMT = TimeZone.getTimeZone("GMT");
+        TimeZone PST = TimeZone.getTimeZone("PST");
+        int sec = 0, min = 0, hr = 0, day = 1, month = 10, year = 1997;
+                            
+        Calendar cal1 = new GregorianCalendar(PST);
+        cal1.setTime(new Date(880698639000L));
+        int p;
+        logln("PST 1 is: " + (p=cal1.get(cal1.HOUR_OF_DAY)));
+        cal1.setTimeZone(GMT);
+        // Issue 1: Changing the timezone doesn't change the
+        //          represented time.
+        int h1,h2;
+        logln("GMT 1 is: " + (h1=cal1.get(cal1.HOUR_OF_DAY)));
+        cal1.setTime(new Date(880698639000L));
+        logln("GMT 2 is: " + (h2=cal1.get(cal1.HOUR_OF_DAY)));
+        // Note: This test had a bug in it.  It wanted h1!=h2, when
+        // what was meant was h1!=p.  Fixed this concurrent with fix
+        // to 4177484.
+        if (p == h1 || h1 != h2)
+            errln("Fail: Hour same in different zones");
+
+        Calendar cal2 = new GregorianCalendar(GMT);
+        Calendar cal3 = new GregorianCalendar(PST);
+        cal2.set(Calendar.MILLISECOND, 0);
+        cal3.set(Calendar.MILLISECOND, 0);
+
+        cal2.set(cal1.get(cal1.YEAR),
+                 cal1.get(cal1.MONTH),
+                 cal1.get(cal1.DAY_OF_MONTH),
+                 cal1.get(cal1.HOUR_OF_DAY),
+                 cal1.get(cal1.MINUTE),
+                 cal1.get(cal1.SECOND));
+
+        long t1,t2,t3,t4;
+        logln("RGMT 1 is: " + (t1=cal2.getTime().getTime()));
+        cal3.set(year, month, day, hr, min, sec);
+        logln("RPST 1 is: " + (t2=cal3.getTime().getTime()));
+        cal3.setTimeZone(GMT);
+        logln("RGMT 2 is: " + (t3=cal3.getTime().getTime()));
+        cal3.set(cal1.get(cal1.YEAR),
+                 cal1.get(cal1.MONTH),
+                 cal1.get(cal1.DAY_OF_MONTH),
+                 cal1.get(cal1.HOUR_OF_DAY),
+                 cal1.get(cal1.MINUTE),
+                 cal1.get(cal1.SECOND));
+        // Issue 2: Calendar continues to use the timezone in its
+        //          constructor for set() conversions, regardless
+        //          of calls to setTimeZone()
+        logln("RGMT 3 is: " + (t4=cal3.getTime().getTime()));
+        if (t1 == t2 ||
+            t1 != t4 ||
+            t2 != t3)
+            errln("Fail: Calendar zone behavior faulty");
+    }
+
+    public void Test4096539() {
+        int[] y = {31,28,31,30,31,30,31,31,30,31,30,31};
+
+        for (int x=0;x<12;x++) {
+            GregorianCalendar gc = new 
+                GregorianCalendar(1997,x,y[x]);
+            int m1,m2;
+            log((m1=gc.get(Calendar.MONTH)+1)+"/"+
+                             gc.get(Calendar.DATE)+"/"+gc.get(Calendar.YEAR)+
+                             " + 1mo = ");
+
+            gc.add(Calendar.MONTH, 1);
+            logln((m2=gc.get(Calendar.MONTH)+1)+"/"+
+                               gc.get(Calendar.DATE)+"/"+gc.get(Calendar.YEAR)
+                               );
+            int m = (m1 % 12) + 1;
+            if (m2 != m)
+                errln("Fail: Want " + m + " Got " + m2);
+        }
+        
+    }
+
+    public void Test4100311() {
+        GregorianCalendar cal = (GregorianCalendar)Calendar.getInstance();
+        cal.set(Calendar.YEAR, 1997);
+        cal.set(Calendar.DAY_OF_YEAR, 1);
+        Date d = cal.getTime();             // Should be Jan 1
+        logln(d.toString());
+        if (cal.get(Calendar.DAY_OF_YEAR) != 1)
+            errln("Fail: DAY_OF_YEAR not set");
+    }
+
+    public void Test4103271() {
+        SimpleDateFormat sdf = new SimpleDateFormat(); 
+        int numYears=40, startYear=1997, numDays=15; 
+        String output, testDesc; 
+        GregorianCalendar testCal = (GregorianCalendar)Calendar.getInstance(); 
+        testCal.clear();
+        sdf.setCalendar(testCal); 
+        sdf.applyPattern("d MMM yyyy"); 
+        boolean fail = false;
+        for (int firstDay=1; firstDay<=2; firstDay++) { 
+            for (int minDays=1; minDays<=7; minDays++) { 
+                testCal.setMinimalDaysInFirstWeek(minDays); 
+                testCal.setFirstDayOfWeek(firstDay); 
+                testDesc = ("Test" + String.valueOf(firstDay) + String.valueOf(minDays)); 
+                logln(testDesc + " => 1st day of week=" +
+                                   String.valueOf(firstDay) +
+                                   ", minimum days in first week=" +
+                                   String.valueOf(minDays)); 
+                for (int j=startYear; j<=startYear+numYears; j++) { 
+                    testCal.set(j,11,25); 
+                    for(int i=0; i<numDays; i++) { 
+                        testCal.add(Calendar.DATE,1); 
+                        String calWOY; 
+                        int actWOY = testCal.get(Calendar.WEEK_OF_YEAR);
+                        if (actWOY < 1 || actWOY > 53) {
+                            Date d = testCal.getTime(); 
+                            calWOY = String.valueOf(actWOY); 
+                            output = testDesc + " - " + sdf.format(d) + "\t"; 
+                            output = output + "\t" + calWOY; 
+                            logln(output); 
+                            fail = true;
+                        }
+                    } 
+                } 
+            } 
+        } 
+
+        int[] DATA = {
+            3, 52, 52, 52, 52, 52, 52, 52,
+                1,  1,  1,  1,  1,  1,  1,
+                2,  2,  2,  2,  2,  2,  2,
+            4, 52, 52, 52, 52, 52, 52, 52,
+               53, 53, 53, 53, 53, 53, 53,
+                1,  1,  1,  1,  1,  1,  1,
+        };
+        testCal.setFirstDayOfWeek(Calendar.SUNDAY);
+        for (int j=0; j<DATA.length; j+=22) {
+            logln("Minimal days in first week = " + DATA[j] +
+                               "  Week starts on Sunday");
+            testCal.setMinimalDaysInFirstWeek(DATA[j]);
+            testCal.set(1997, Calendar.DECEMBER, 21);
+            for (int i=0; i<21; ++i) {
+                int woy = testCal.get(Calendar.WEEK_OF_YEAR);
+                log(testCal.getTime() + " " + woy);
+                if (woy != DATA[j + 1 + i]) {
+                    log(" ERROR");
+                    fail = true;
+                }
+                //logln();
+                
+                // Now compute the time from the fields, and make sure we
+                // get the same answer back.  This is a round-trip test.
+                Date save = testCal.getTime();
+                testCal.clear();
+                testCal.set(Calendar.YEAR, DATA[j+1+i] < 25 ? 1998 : 1997);
+                testCal.set(Calendar.WEEK_OF_YEAR, DATA[j+1+i]);
+                testCal.set(Calendar.DAY_OF_WEEK, (i%7) + Calendar.SUNDAY);
+                if (!testCal.getTime().equals(save)) {
+                    logln("  Parse failed: " + testCal.getTime());
+                    fail= true;
+                }
+
+                testCal.setTime(save);
+                testCal.add(Calendar.DAY_OF_MONTH, 1);
+            }
+        }
+
+        // Test field disambiguation with a few special hard-coded cases.
+        // This shouldn't fail if the above cases aren't failing.
+        Object[] DISAM = {
+            new Integer(1998), new Integer(1), new Integer(Calendar.SUNDAY),
+                new Date(97, Calendar.DECEMBER, 28),
+            new Integer(1998), new Integer(2), new Integer(Calendar.SATURDAY),
+                new Date(98, Calendar.JANUARY, 10),
+            new Integer(1998), new Integer(53), new Integer(Calendar.THURSDAY),
+                new Date(98, Calendar.DECEMBER, 31),
+            new Integer(1998), new Integer(53), new Integer(Calendar.FRIDAY),
+                new Date(99, Calendar.JANUARY, 1),
+        };
+        testCal.setMinimalDaysInFirstWeek(3);
+        testCal.setFirstDayOfWeek(Calendar.SUNDAY);
+        for (int i=0; i<DISAM.length; i+=4) {
+            int y = ((Integer)DISAM[i]).intValue();
+            int woy = ((Integer)DISAM[i+1]).intValue();
+            int dow = ((Integer)DISAM[i+2]).intValue();
+            Date exp = (Date)DISAM[i+3];
+            testCal.clear();
+            testCal.set(Calendar.YEAR, y);
+            testCal.set(Calendar.WEEK_OF_YEAR, woy);
+            testCal.set(Calendar.DAY_OF_WEEK, dow);
+            log(y + "-W" + woy +
+                             "-DOW" + dow + " expect:" + exp +
+                             " got:" + testCal.getTime());
+            if (!testCal.getTime().equals(exp)) {
+                log("  FAIL");
+                fail = true;
+            }
+            //logln();
+        }
+
+        // Now try adding and rolling
+        Object ADD = new Object();
+        Object ROLL = new Object();
+        Object[] ADDROLL = {
+            ADD, new Integer(1), new Date(98, Calendar.DECEMBER, 25), new Date(99, Calendar.JANUARY, 1),
+            ADD, new Integer(1), new Date(97, Calendar.DECEMBER, 28), new Date(98, Calendar.JANUARY, 4),
+            ROLL, new Integer(1), new Date(98, Calendar.DECEMBER, 27), new Date(97, Calendar.DECEMBER, 28),
+            ROLL, new Integer(1), new Date(99, Calendar.JANUARY, 2), new Date(98, Calendar.JANUARY, 3),
+        };
+        testCal.setMinimalDaysInFirstWeek(3);
+        testCal.setFirstDayOfWeek(Calendar.SUNDAY);
+        for (int i=0; i<ADDROLL.length; i+=4) {
+            int amount = ((Integer)ADDROLL[i+1]).intValue();
+            Date before = (Date)ADDROLL[i+2];
+            Date after = (Date)ADDROLL[i+3];
+
+            testCal.setTime(before);
+            if (ADDROLL[i] == ADD) testCal.add(Calendar.WEEK_OF_YEAR, amount);
+            else testCal.roll(Calendar.WEEK_OF_YEAR, amount);
+            log((ADDROLL[i]==ADD?"add(WOY,":"roll(WOY,") +
+                             amount + ") " + before + " => " +
+                             testCal.getTime());
+            if (!after.equals(testCal.getTime())) {
+                logln("  exp:" + after + "  FAIL");
+                fail = true;
+            }
+            else logln(" ok");
+
+            testCal.setTime(after);
+            if (ADDROLL[i] == ADD) testCal.add(Calendar.WEEK_OF_YEAR, -amount);
+            else testCal.roll(Calendar.WEEK_OF_YEAR, -amount);
+            log((ADDROLL[i]==ADD?"add(WOY,":"roll(WOY,") +
+                             (-amount) + ") " + after + " => " +
+                             testCal.getTime());
+            if (!before.equals(testCal.getTime())) {
+                logln("  exp:" + before + "  FAIL");
+                fail = true;
+            }
+            else logln(" ok");
+        }
+
+        if (fail) errln("Fail: Week of year misbehaving");
+    } 
+
+    public void Test4106136() {
+        Locale saveLocale = Locale.getDefault();
+        try {
+            Locale[] locales = { Locale.CHINESE, Locale.CHINA };
+            for (int i=0; i<locales.length; ++i) {
+                Locale.setDefault(locales[i]);
+                int[] n = {
+                    Calendar.getAvailableLocales().length,
+                    DateFormat.getAvailableLocales().length,
+                    NumberFormat.getAvailableLocales().length
+                };
+                for (int j=0; j<n.length; ++j) {
+                    if (n[j] == 0)
+                        errln("Fail: No locales for " + locales[i]);
+                }
+            }
+        }
+        finally {
+            Locale.setDefault(saveLocale);
+        }
+    }
+
+    public void Test4108764() {
+        Date d00 = new Date(97, Calendar.MARCH, 15, 12, 00, 00);
+        Date d01 = new Date(97, Calendar.MARCH, 15, 12, 00, 56);
+        Date d10 = new Date(97, Calendar.MARCH, 15, 12, 34, 00);
+        Date d11 = new Date(97, Calendar.MARCH, 15, 12, 34, 56);
+        Date dM  = new Date(97, Calendar.JANUARY, 15, 12, 34, 56);
+        Date epoch = new Date(70, Calendar.JANUARY, 1);
+
+        Calendar cal = Calendar.getInstance(); 
+        cal.setTime(d11);
+
+        cal.clear( Calendar.MINUTE ); 
+        logln(cal.getTime().toString()); 
+        if (!cal.getTime().equals(d01)) {
+            errln("Fail: " + d11 + " clear(MINUTE) => expect " +
+                  d01 + ", got " + cal.getTime());
+        }
+
+        cal.set( Calendar.SECOND, 0 ); 
+        logln(cal.getTime().toString()); 
+        if (!cal.getTime().equals(d00))
+            errln("Fail: set(SECOND, 0) broken");
+
+        cal.setTime(d11);
+        cal.set( Calendar.SECOND, 0 ); 
+        logln(cal.getTime().toString()); 
+        if (!cal.getTime().equals(d10))
+            errln("Fail: set(SECOND, 0) broken #2");
+
+        cal.clear( Calendar.MINUTE ); 
+        logln(cal.getTime().toString()); 
+        if (!cal.getTime().equals(d00))
+            errln("Fail: clear(MINUTE) broken #2");
+
+        cal.clear();
+        logln(cal.getTime().toString());
+        if (!cal.getTime().equals(epoch))
+            errln("Fail: after clear() expect " + epoch + ", got " + cal.getTime());
+
+        cal.setTime(d11);
+        cal.clear( Calendar.MONTH ); 
+        logln(cal.getTime().toString()); 
+        if (!cal.getTime().equals(dM)) {
+            errln("Fail: " + d11 + " clear(MONTH) => expect " +
+                  dM + ", got " + cal.getTime());
+        }
+    }
+
+    public void Test4114578() {
+        int ONE_HOUR = 60*60*1000;
+        Calendar cal = Calendar.getInstance();
+        cal.setTimeZone(TimeZone.getTimeZone("PST"));
+        long onset = new Date(98, Calendar.APRIL, 5, 1, 0).getTime() + ONE_HOUR;
+        long cease = new Date(98, Calendar.OCTOBER, 25, 0, 0).getTime() + 2*ONE_HOUR;
+
+        boolean fail = false;
+        
+        final int ADD = 1;
+        final int ROLL = 2;
+
+        long[] DATA = {
+            // Start            Action   Amt    Expected_change
+            onset - ONE_HOUR,   ADD,      1,     ONE_HOUR,
+            onset,              ADD,     -1,    -ONE_HOUR,
+            onset - ONE_HOUR,   ROLL,     1,     ONE_HOUR,
+            onset,              ROLL,    -1,    -ONE_HOUR,
+            cease - ONE_HOUR,   ADD,      1,     ONE_HOUR,
+            cease,              ADD,     -1,    -ONE_HOUR,
+            cease - ONE_HOUR,   ROLL,     1,     ONE_HOUR,
+            cease,              ROLL,    -1,    -ONE_HOUR,
+        };
+
+        for (int i=0; i<DATA.length; i+=4) {
+            Date date = new Date(DATA[i]);
+            int amt = (int) DATA[i+2];
+            long expectedChange = DATA[i+3];
+            
+            log(date.toString());
+            cal.setTime(date);
+
+            switch ((int) DATA[i+1]) {
+            case ADD:
+                log(" add (HOUR," + (amt<0?"":"+")+amt + ")= ");
+                cal.add(Calendar.HOUR, amt);
+                break;
+            case ROLL:
+                log(" roll(HOUR," + (amt<0?"":"+")+amt + ")= ");
+                cal.roll(Calendar.HOUR, amt);
+                break;
+            }
+
+            log(cal.getTime().toString());
+
+            long change = cal.getTime().getTime() - date.getTime();
+            if (change != expectedChange) {
+                fail = true;
+                logln(" FAIL");
+            }
+            else logln(" OK");
+        }
+
+        if (fail) errln("Fail: roll/add misbehaves around DST onset/cease");
+    }
+
+    /**
+     * Make sure maximum for HOUR field is 11, not 12.
+     */
+    public void Test4118384() {
+        Calendar cal = Calendar.getInstance();
+        if (cal.getMaximum(Calendar.HOUR) != 11 ||
+            cal.getLeastMaximum(Calendar.HOUR) != 11 ||
+            cal.getActualMaximum(Calendar.HOUR) != 11)
+            errln("Fail: maximum of HOUR field should be 11");
+    }
+
+    /**
+     * Check isLeapYear for BC years.
+     */
+    public void Test4125881() {
+        GregorianCalendar cal = (GregorianCalendar) Calendar.getInstance();
+        DateFormat fmt = new SimpleDateFormat("MMMM d, yyyy G");
+        cal.clear();
+        for (int y=-20; y<=10; ++y) {
+            cal.set(Calendar.ERA, y < 1 ? GregorianCalendar.BC : GregorianCalendar.AD);
+            cal.set(Calendar.YEAR, y < 1 ? 1 - y : y);
+            logln(y + " = " + fmt.format(cal.getTime()) + " " +
+                               cal.isLeapYear(y));
+            if (cal.isLeapYear(y) != ((y+40)%4 == 0))
+                errln("Leap years broken");
+        }
+    }
+
+    // I am disabling this test -- it is currently failing because of a bug
+    // in Sun's latest change to STZ.getOffset().  I have filed a Sun bug
+    // against this problem.
+
+    // Re-enabled after 'porting' TZ and STZ from java.util to com.ibm.util.
+    /**
+     * Prove that GregorianCalendar is proleptic (it used to cut off
+     * at 45 BC, and not have leap years before then).
+     */
+    public void Test4125892() {
+        GregorianCalendar cal = (GregorianCalendar) Calendar.getInstance();
+        DateFormat fmt = new SimpleDateFormat("MMMM d, yyyy G");
+        cal.clear();
+        cal.set(Calendar.ERA, GregorianCalendar.BC);
+        cal.set(Calendar.YEAR, 81); // 81 BC is a leap year (proleptically)
+        cal.set(Calendar.MONTH, Calendar.FEBRUARY);
+        cal.set(Calendar.DATE, 28);
+        cal.add(Calendar.DATE, 1);
+        if (cal.get(Calendar.DATE) != 29 ||
+            !cal.isLeapYear(-80)) // -80 == 81 BC
+            errln("Calendar not proleptic");
+    }
+
+    /**
+     * Calendar and GregorianCalendar hashCode() methods need improvement.
+     * Calendar needs a good implementation that subclasses can override,
+     * and GregorianCalendar should use that implementation.
+     */
+    public void Test4136399() {
+        /* Note: This test is actually more strict than it has to be.
+         * Technically, there is no requirement that unequal objects have
+         * unequal hashes.  We only require equal objects to have equal hashes.
+         * It is desirable for unequal objects to have distributed hashes, but
+         * there is no hard requirement here.
+         *
+         * In this test we make assumptions about certain attributes of calendar
+         * objects getting represented in the hash, which need not always be the
+         * case (although it does work currently with the given test). */
+        Calendar a = Calendar.getInstance();
+        Calendar b = (Calendar)a.clone();
+        if (a.hashCode() != b.hashCode()) {
+            errln("Calendar hash code unequal for cloned objects");
+        }
+
+        b.setMinimalDaysInFirstWeek(7 - a.getMinimalDaysInFirstWeek());
+        if (a.hashCode() == b.hashCode()) {
+            errln("Calendar hash code ignores minimal days in first week");
+        }
+        b.setMinimalDaysInFirstWeek(a.getMinimalDaysInFirstWeek());
+
+        b.setFirstDayOfWeek((a.getFirstDayOfWeek() % 7) + 1); // Next day
+        if (a.hashCode() == b.hashCode()) {
+            errln("Calendar hash code ignores first day of week");
+        }
+        b.setFirstDayOfWeek(a.getFirstDayOfWeek());
+
+        b.setLenient(!a.isLenient());
+        if (a.hashCode() == b.hashCode()) {
+            errln("Calendar hash code ignores lenient setting");
+        }
+        b.setLenient(a.isLenient());
+        
+        // Assume getTimeZone() returns a reference, not a clone
+        // of a reference -- this is true as of this writing
+        b.getTimeZone().setRawOffset(a.getTimeZone().getRawOffset() + 60*60*1000);
+        if (a.hashCode() == b.hashCode()) {
+            errln("Calendar hash code ignores zone");
+        }
+        b.getTimeZone().setRawOffset(a.getTimeZone().getRawOffset());
+
+        GregorianCalendar c = new GregorianCalendar();
+        GregorianCalendar d = (GregorianCalendar)c.clone();
+        if (c.hashCode() != d.hashCode()) {
+            errln("GregorianCalendar hash code unequal for clones objects");
+        }
+        Date cutover = c.getGregorianChange();
+        d.setGregorianChange(new Date(cutover.getTime() + 24*60*60*1000));
+        if (c.hashCode() == d.hashCode()) {
+            errln("GregorianCalendar hash code ignores cutover");
+        }        
+    }
+
+    /**
+     * GregorianCalendar.equals() ignores cutover date
+     */
+    public void Test4141665() {
+        GregorianCalendar cal = new GregorianCalendar();
+        GregorianCalendar cal2 = (GregorianCalendar)cal.clone();
+        Date cut = cal.getGregorianChange();
+        Date cut2 = new Date(cut.getTime() + 100*24*60*60*1000L); // 100 days later
+        if (!cal.equals(cal2)) {
+            errln("Cloned GregorianCalendars not equal");
+        }
+        cal2.setGregorianChange(cut2);
+        if (cal.equals(cal2)) {
+            errln("GregorianCalendar.equals() ignores cutover");
+        }
+    }
+    
+    /**
+     * Bug states that ArrayIndexOutOfBoundsException is thrown by GregorianCalendar.roll()
+     * when IllegalArgumentException should be.
+     */
+    public void Test4142933() {
+        GregorianCalendar calendar = new GregorianCalendar();
+        try {
+            calendar.roll(-1, true);
+            errln("Test failed, no exception trown");
+        }
+        catch (IllegalArgumentException e) {
+            // OK: Do nothing
+            // logln("Test passed");
+        }
+        catch (Exception e) {
+            errln("Test failed. Unexpected exception is thrown: " + e);
+            e.printStackTrace();
+        } 
+    }
+
+    /**
+     * GregorianCalendar handling of Dates Long.MIN_VALUE and Long.MAX_VALUE is
+     * confusing; unless the time zone has a raw offset of zero, one or the
+     * other of these will wrap.  We've modified the test given in the bug
+     * report to therefore only check the behavior of a calendar with a zero raw
+     * offset zone.
+     */
+    public void Test4145158() {
+        GregorianCalendar calendar = new GregorianCalendar();
+
+        calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
+
+        calendar.setTime(new Date(Long.MIN_VALUE));
+        int year1 = calendar.get(Calendar.YEAR);
+        int era1 = calendar.get(Calendar.ERA);
+        
+        calendar.setTime(new Date(Long.MAX_VALUE));
+        int year2 = calendar.get(Calendar.YEAR);
+        int era2 = calendar.get(Calendar.ERA);
+        
+        if (year1 == year2 && era1 == era2) {
+            errln("Fail: Long.MIN_VALUE or Long.MAX_VALUE wrapping around");
+        }
+    }
+
+    /**
+     * Maximum value for YEAR field wrong.
+     */
+    public void Test4145983() {
+        GregorianCalendar calendar = new GregorianCalendar();
+        calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
+        Date[] DATES = { new Date(Long.MAX_VALUE), new Date(Long.MIN_VALUE) };
+        for (int i=0; i<DATES.length; ++i) {
+            calendar.setTime(DATES[i]);
+            int year = calendar.get(Calendar.YEAR);
+            int maxYear = calendar.getMaximum(Calendar.YEAR);
+            if (year > maxYear) {
+                errln("Failed for "+DATES[i].getTime()+" ms: year=" +
+                      year + ", maxYear=" + maxYear);
+            }
+        }
+    }
+
+    /**
+     * This is a bug in the validation code of GregorianCalendar.  As reported,
+     * the bug seems worse than it really is, due to a bug in the way the bug
+     * report test was written.  In reality the bug is restricted to the DAY_OF_YEAR
+     * field. - liu 6/29/98
+     */
+    public void Test4147269() {
+        GregorianCalendar calendar = new GregorianCalendar();
+        calendar.setLenient(false);
+        Date date = new Date(1996-1900, Calendar.JANUARY, 3); // Arbitrary date
+        for (int field = 0; field < calendar.getFieldCount(); field++) {
+            calendar.setTime(date);
+            // Note: In the bug report, getActualMaximum() was called instead
+            // of getMaximum() -- this was an error.  The validation code doesn't
+            // use getActualMaximum(), since that's too costly.
+            int max = calendar.getMaximum(field);
+            int value = max+1;
+            calendar.set(field, value); 
+            try {
+                calendar.getTime(); // Force time computation
+                // We expect an exception to be thrown. If we fall through
+                // to the next line, then we have a bug.
+                errln("Test failed with field " + FIELD_NAME[field] +
+                      ", date before: " + date +
+                      ", date after: " + calendar.getTime() +
+                      ", value: " + value + " (max = " + max +")");
+            } catch (IllegalArgumentException e) {} 
+        }
+    }
+
+    /**
+     * Reported bug is that a GregorianCalendar with a cutover of Date(Long.MAX_VALUE)
+     * doesn't behave as a pure Julian calendar.
+     * CANNOT REPRODUCE THIS BUG
+     */
+    public void Test4149677() {
+        TimeZone[] zones = { TimeZone.getTimeZone("GMT"),
+                             TimeZone.getTimeZone("PST"),
+                             TimeZone.getTimeZone("EAT") };
+        for (int i=0; i<zones.length; ++i) {
+            GregorianCalendar calendar = new GregorianCalendar(zones[i]);
+
+            // Make sure extreme values don't wrap around
+            calendar.setTime(new Date(Long.MIN_VALUE));
+            if (calendar.get(Calendar.ERA) != GregorianCalendar.BC) {
+                errln("Fail: Long.MIN_VALUE ms has an AD year");
+            }
+            calendar.setTime(new Date(Long.MAX_VALUE));
+            if (calendar.get(Calendar.ERA) != GregorianCalendar.AD) {
+                errln("Fail: Long.MAX_VALUE ms has a BC year");
+            }
+
+            calendar.setGregorianChange(new Date(Long.MAX_VALUE));
+            // to obtain a pure Julian calendar
+            
+            boolean is100Leap = calendar.isLeapYear(100);
+            if (!is100Leap) {
+                errln("test failed with zone " + zones[i].getID());
+                errln(" cutover date is Calendar.MAX_DATE");
+                errln(" isLeapYear(100) returns: " + is100Leap);
+            }
+        }
+    }
+
+    /**
+     * Calendar and Date HOUR broken.  If HOUR is out-of-range, Calendar
+     * and Date classes will misbehave.
+     */
+    public void Test4162587() {
+        TimeZone tz = TimeZone.getTimeZone("PST");
+        TimeZone.setDefault(tz);
+        GregorianCalendar cal = new GregorianCalendar(tz);
+        Date d;
+        
+        for (int i=0; i<5; ++i) {
+            if (i>0) logln("---");
+
+            cal.clear();
+            cal.set(1998, Calendar.APRIL, 5, i, 0);
+            d = cal.getTime();
+            String s0 = d.toString();
+            logln("0 " + i + ": " + s0);
+
+            cal.clear();
+            cal.set(1998, Calendar.APRIL, 4, i+24, 0);
+            d = cal.getTime();
+            String sPlus = d.toString();
+            logln("+ " + i + ": " + sPlus);
+
+            cal.clear();
+            cal.set(1998, Calendar.APRIL, 6, i-24, 0);
+            d = cal.getTime();
+            String sMinus = d.toString();
+            logln("- " + i + ": " + sMinus);
+
+            if (!s0.equals(sPlus) || !s0.equals(sMinus)) {
+                errln("Fail: All three lines must match");
+            }
+        }
+    }
+
+    /**
+     * Adding 12 months behaves differently from adding 1 year
+     */
+    public void Test4165343() {
+        GregorianCalendar calendar = new GregorianCalendar(1996, Calendar.FEBRUARY, 29);
+        Date start = calendar.getTime();
+        logln("init date: " + start);
+        calendar.add(Calendar.MONTH, 12); 
+        Date date1 = calendar.getTime();
+        logln("after adding 12 months: " + date1);
+        calendar.setTime(start);
+        calendar.add(Calendar.YEAR, 1);
+        Date date2 = calendar.getTime();
+        logln("after adding one year : " + date2);
+        if (date1.equals(date2)) {
+            logln("Test passed");
+        } else {
+            errln("Test failed");
+        }
+    }
+
+    /**
+     * GregorianCalendar.getActualMaximum() does not account for first day of week.
+     */
+    public void Test4166109() {
+        /* Test month:
+         *
+         *      March 1998
+         * Su Mo Tu We Th Fr Sa
+         *  1  2  3  4  5  6  7
+         *  8  9 10 11 12 13 14
+         * 15 16 17 18 19 20 21
+         * 22 23 24 25 26 27 28
+         * 29 30 31
+         */
+        boolean passed = true;
+        int field = Calendar.WEEK_OF_MONTH;
+
+        GregorianCalendar calendar = new GregorianCalendar(Locale.US);
+        calendar.set(1998, Calendar.MARCH, 1);
+        calendar.setMinimalDaysInFirstWeek(1);
+        logln("Date:  " + calendar.getTime());
+
+        int firstInMonth = calendar.get(Calendar.DAY_OF_MONTH);
+
+        for (int firstInWeek = Calendar.SUNDAY; firstInWeek <= Calendar.SATURDAY; firstInWeek++) {
+            calendar.setFirstDayOfWeek(firstInWeek);
+            int returned = calendar.getActualMaximum(field);
+            int expected = (31 + ((firstInMonth - firstInWeek + 7)% 7) + 6) / 7;
+
+            logln("First day of week = " + firstInWeek +
+                  "  getActualMaximum(WEEK_OF_MONTH) = " + returned +
+                  "  expected = " + expected +
+                  ((returned == expected) ? "  ok" : "  FAIL"));
+
+            if (returned != expected) {
+                passed = false;
+            }
+        }
+        if (!passed) {
+            errln("Test failed");
+        }
+    }
+
+    /**
+     * Calendar.getActualMaximum(YEAR) works wrong.
+     */
+    public void Test4167060() {
+        int field = Calendar.YEAR;
+        DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy G",
+                                                 Locale.US);
+
+        GregorianCalendar calendars[] = {
+            new GregorianCalendar(100, Calendar.NOVEMBER, 1),
+            new GregorianCalendar(-99 /*100BC*/, Calendar.JANUARY, 1),
+            new GregorianCalendar(1996, Calendar.FEBRUARY, 29),
+        };
+
+        String[] id = { "Hybrid", "Gregorian", "Julian" };
+
+        for (int k=0; k<3; ++k) {
+            logln("--- " + id[k] + " ---");
+
+            for (int j=0; j<calendars.length; ++j) {
+                GregorianCalendar calendar = calendars[j];
+                if (k == 1) {
+                    calendar.setGregorianChange(new Date(Long.MIN_VALUE));
+                } else if (k == 2) {
+                    calendar.setGregorianChange(new Date(Long.MAX_VALUE));
+                }
+
+                format.setCalendar((Calendar)calendar.clone());
+
+                Date dateBefore = calendar.getTime();
+
+                int maxYear = calendar.getActualMaximum(field);
+                logln("maxYear: " + maxYear + " for " + format.format(calendar.getTime()));
+                logln("date before: " + format.format(dateBefore));
+
+                int years[] = {2000, maxYear-1, maxYear, maxYear+1};
+
+                for (int i = 0; i < years.length; i++) {
+                    boolean valid = years[i] <= maxYear;
+                    calendar.set(field, years[i]);
+                    Date dateAfter = calendar.getTime();
+                    int newYear = calendar.get(field);
+                    calendar.setTime(dateBefore); // restore calendar for next use
+
+                    logln(" Year " + years[i] + (valid? " ok " : " bad") +
+                          " => " + format.format(dateAfter));
+                    if (valid && newYear != years[i]) {
+                        errln("  FAIL: " + newYear + " should be valid; date, month and time shouldn't change");
+                    } else if (!valid && newYear == years[i]) {
+                        // We no longer require strict year maxima.  That is, the calendar
+                        // algorithm may work for values > the stated maximum.
+                        //errln("  FAIL: " + newYear + " should be invalid");
+                        logln("  Note: " + newYear + " > maximum, but still valid");
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Calendar.roll broken
+     * This bug relies on the TimeZone bug 4173604 to also be fixed.
+     */
+    public void Test4173516() {
+        int fieldsList[][] = {
+            { 1997, Calendar.FEBRUARY,  1, 10, 45, 15, 900 },
+            { 1999, Calendar.DECEMBER, 22, 23, 59, 59, 999 }
+        };
+        int limit = 40;
+        GregorianCalendar cal = new GregorianCalendar();
+
+        cal.setTime(new Date(0));
+        cal.roll(Calendar.HOUR,  0x7F000000);
+        cal.roll(Calendar.HOUR, -0x7F000000);
+        if (cal.getTime().getTime() != 0) {
+            errln("Hour rolling broken");
+        }
+
+        for (int op=0; op<2; ++op) {
+            logln("Testing GregorianCalendar " +
+                  (op==0 ? "add" : "roll"));
+            for (int field=0; field < cal.getFieldCount(); ++field) {
+                if (field != Calendar.ZONE_OFFSET &&
+                    field != Calendar.DST_OFFSET) {
+                    for (int j=0; j<fieldsList.length; ++j) {
+                        int fields[] = fieldsList[j];
+                        cal.clear();
+                        cal.set(fields[0], fields[1], fields[2],
+                                fields[3], fields[4], fields[5]);
+                        cal.set(Calendar.MILLISECOND, fields[6]);
+                        for (int i = 0; i < 2*limit; i++) {
+                            if (op == 0) {
+                                cal.add(field, i < limit ? 1 : -1);
+                            } else {
+                                cal.roll(field, i < limit ? 1 : -1);
+                            }
+                        }
+                        if (cal.get(Calendar.YEAR) != fields[0] ||
+                            cal.get(Calendar.MONTH) != fields[1] ||
+                            cal.get(Calendar.DATE) != fields[2] ||
+                            cal.get(Calendar.HOUR_OF_DAY) != fields[3] ||
+                            cal.get(Calendar.MINUTE) != fields[4] ||
+                            cal.get(Calendar.SECOND) != fields[5] ||
+                            cal.get(Calendar.MILLISECOND) != fields[6]) {
+                            errln("Field " + field +
+                                  " (" + FIELD_NAME[field] +
+                                  ") FAIL, expected " +
+                                  fields[0] +
+                                  "/" + (fields[1] + 1) +
+                                  "/" + fields[2] +
+                                  " " + fields[3] +
+                                  ":" + fields[4] +
+                                  ":" + fields[5] +
+                                  "." + fields[6] +
+                                  ", got " + cal.get(Calendar.YEAR) +
+                                  "/" + (cal.get(Calendar.MONTH) + 1) +
+                                  "/" + cal.get(Calendar.DATE) +
+                                  " " + cal.get(Calendar.HOUR_OF_DAY) +
+                                  ":" + cal.get(Calendar.MINUTE) +
+                                  ":" + cal.get(Calendar.SECOND) +
+                                  "." + cal.get(Calendar.MILLISECOND));
+                            cal.clear();
+                            cal.set(fields[0], fields[1], fields[2],
+                                    fields[3], fields[4], fields[5]);
+                            cal.set(Calendar.MILLISECOND, fields[6]);
+                            logln("Start date: " + cal.get(Calendar.YEAR) +
+                                  "/" + (cal.get(Calendar.MONTH) + 1) +
+                                  "/" + cal.get(Calendar.DATE) +
+                                  " " + cal.get(Calendar.HOUR_OF_DAY) +
+                                  ":" + cal.get(Calendar.MINUTE) +
+                                  ":" + cal.get(Calendar.SECOND) +
+                                  "." + cal.get(Calendar.MILLISECOND));
+                            long prev = cal.getTime().getTime();
+                            for (int i = 0; i < 2*limit; i++) {
+                                if (op == 0) {
+                                    cal.add(field, i < limit ? 1 : -1);
+                                } else {
+                                    cal.roll(field, i < limit ? 1 : -1);
+                                }
+                                long t = cal.getTime().getTime();
+                                long delta = t - prev;
+                                prev = t;
+                                logln((op == 0 ? "add(" : "roll(") + FIELD_NAME[field] +
+                                      (i < limit ? ", +1) => " : ", -1) => ") +
+                                      cal.get(Calendar.YEAR) +
+                                      "/" + (cal.get(Calendar.MONTH) + 1) +
+                                      "/" + cal.get(Calendar.DATE) +
+                                      " " + cal.get(Calendar.HOUR_OF_DAY) +
+                                      ":" + cal.get(Calendar.MINUTE) +
+                                      ":" + cal.get(Calendar.SECOND) +
+                                      "." + cal.get(Calendar.MILLISECOND) +
+                                      " delta=" + delta + " ms");
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public void Test4174361() {
+        GregorianCalendar calendar = new GregorianCalendar(1996, 1, 29);
+
+        calendar.add(Calendar.MONTH, 10); 
+        Date date1 = calendar.getTime();
+        int d1 = calendar.get(Calendar.DAY_OF_MONTH);
+
+        calendar = new GregorianCalendar(1996, 1, 29);
+        calendar.add(Calendar.MONTH, 11); 
+        Date date2 = calendar.getTime();
+        int d2 = calendar.get(Calendar.DAY_OF_MONTH);
+
+        if (d1 != d2) {
+            errln("adding months to Feb 29 broken");
+        }
+    }
+
+    /**
+     * Calendar does not update field values when setTimeZone is called.
+     */
+    public void Test4177484() {
+        TimeZone PST = TimeZone.getTimeZone("PST");
+        TimeZone EST = TimeZone.getTimeZone("EST");
+
+        Calendar cal = Calendar.getInstance(PST, Locale.US);
+        cal.clear();
+        cal.set(1999, 3, 21, 15, 5, 0); // Arbitrary
+        int h1 = cal.get(Calendar.HOUR_OF_DAY);
+        cal.setTimeZone(EST);
+        int h2 = cal.get(Calendar.HOUR_OF_DAY);
+        if (h1 == h2) {
+            errln("FAIL: Fields not updated after setTimeZone");
+        }
+
+        // getTime() must NOT change when time zone is changed.
+        // getTime() returns zone-independent time in ms.
+        cal.clear();
+        cal.setTimeZone(PST);
+        cal.set(Calendar.HOUR_OF_DAY, 10);
+        Date pst10 = cal.getTime();
+        cal.setTimeZone(EST);
+        Date est10 = cal.getTime();
+        if (!pst10.equals(est10)) {
+            errln("FAIL: setTimeZone changed time");
+        }
+    }
+
+    /**
+     * Week of year is wrong at the start and end of the year.
+     */
+    public void Test4197699() {
+        GregorianCalendar cal = new GregorianCalendar();
+        cal.setFirstDayOfWeek(Calendar.MONDAY);
+        cal.setMinimalDaysInFirstWeek(4);
+        DateFormat fmt = new SimpleDateFormat("E dd MMM yyyy  'DOY='D 'WOY='w");
+        fmt.setCalendar(cal);
+
+        int[] DATA = {
+            2000,  Calendar.JANUARY,   1,   52,
+            2001,  Calendar.DECEMBER,  31,  1,
+        };
+
+        for (int i=0; i<DATA.length; ) {
+            cal.set(DATA[i++], DATA[i++], DATA[i++]);
+            int expWOY = DATA[i++];
+            int actWOY = cal.get(Calendar.WEEK_OF_YEAR);
+            if (expWOY == actWOY) {
+                logln("Ok: " + fmt.format(cal.getTime()));
+            } else {
+                errln("FAIL: " + fmt.format(cal.getTime())
+                      + ", expected WOY=" + expWOY);
+                cal.add(Calendar.DATE, -8);
+                for (int j=0; j<14; ++j) {
+                    cal.add(Calendar.DATE, 1);
+                    logln(fmt.format(cal.getTime()));
+                }
+            }
+        }
+    }
+
+    /**
+     * Calendar DAY_OF_WEEK_IN_MONTH fields->time broken.  The problem
+     * is in the field disambiguation code in GregorianCalendar.  This
+     * code is supposed to choose the most recent set of fields
+     * among the following:
+     *
+     *   MONTH + DAY_OF_MONTH
+     *   MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
+     *   MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
+     *   DAY_OF_YEAR
+     *   WEEK_OF_YEAR + DAY_OF_WEEK
+     */
+    public void Test4209071() {
+        Calendar cal = Calendar.getInstance(Locale.US);
+
+        // General field setting test
+        int Y = 1995 - 1900;
+
+        Object[] FIELD_DATA = {
+            // Add new test cases as needed.
+
+            // 0
+            new int[] {}, new Date(Y, Calendar.JANUARY, 1),
+            // 1
+            new int[] { Calendar.MONTH, Calendar.MARCH },
+            new Date(Y, Calendar.MARCH, 1),
+            // 2
+            new int[] { Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY },
+            new Date(Y, Calendar.JANUARY, 4),
+            // 3
+            new int[] { Calendar.DAY_OF_WEEK, Calendar.THURSDAY,
+                        Calendar.DAY_OF_MONTH, 18, },
+            new Date(Y, Calendar.JANUARY, 18),
+            // 4
+            new int[] { Calendar.DAY_OF_MONTH, 18,
+                        Calendar.DAY_OF_WEEK, Calendar.THURSDAY, },
+            new Date(Y, Calendar.JANUARY, 18),
+            // 5  (WOM -1 is in previous month)
+            new int[] { Calendar.DAY_OF_MONTH, 18,
+                        Calendar.WEEK_OF_MONTH, -1,
+                        Calendar.DAY_OF_WEEK, Calendar.THURSDAY, },
+            new Date(Y-1, Calendar.DECEMBER, 22),
+            // 6
+            new int[] { Calendar.DAY_OF_MONTH, 18,
+                        Calendar.WEEK_OF_MONTH, 4,
+                        Calendar.DAY_OF_WEEK, Calendar.THURSDAY, },
+            new Date(Y, Calendar.JANUARY, 26),
+            // 7  (DIM -1 is in same month)
+            new int[] { Calendar.DAY_OF_MONTH, 18,
+                        Calendar.DAY_OF_WEEK_IN_MONTH, -1,
+                        Calendar.DAY_OF_WEEK, Calendar.THURSDAY, },
+            new Date(Y, Calendar.JANUARY, 26),
+            // 8
+            new int[] { Calendar.WEEK_OF_YEAR, 9,
+                        Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY, },
+            new Date(Y, Calendar.MARCH, 1),
+            // 9
+            new int[] { Calendar.MONTH, Calendar.OCTOBER,
+                        Calendar.DAY_OF_WEEK_IN_MONTH, 1,
+                        Calendar.DAY_OF_WEEK, Calendar.FRIDAY, },
+            new Date(Y, Calendar.OCTOBER, 6),
+            // 10
+            new int[] { Calendar.MONTH, Calendar.OCTOBER,
+                        Calendar.WEEK_OF_MONTH, 2,
+                        Calendar.DAY_OF_WEEK, Calendar.FRIDAY, },
+            new Date(Y, Calendar.OCTOBER, 13),
+            // 11
+            new int[] { Calendar.MONTH, Calendar.OCTOBER,
+                        Calendar.DAY_OF_MONTH, 15,
+                        Calendar.DAY_OF_YEAR, 222, },
+            new Date(Y, Calendar.AUGUST, 10),
+            // 12
+            new int[] { Calendar.DAY_OF_WEEK, Calendar.THURSDAY,
+                        Calendar.MONTH, Calendar.DECEMBER, },
+            new Date(Y, Calendar.DECEMBER, 7),
+        };
+
+        for (int i=0; i<FIELD_DATA.length; i+=2) {
+            int[] fields = (int[]) FIELD_DATA[i];
+            Date exp = (Date) FIELD_DATA[i+1];
+            
+            cal.clear();
+            cal.set(Calendar.YEAR, Y + 1900);
+            for (int j=0; j<fields.length; j+=2) {
+                cal.set(fields[j], fields[j+1]);
+            }
+            
+            Date act = cal.getTime();
+            if (!act.equals(exp)) {
+                errln("FAIL: Test " + (i/2) + " got " + act +
+                      ", want " + exp +
+                      " (see test/java/util/Calendar/CalendarRegression.java");
+            }
+        }
+
+        // Test specific failure reported in bug
+        Object[] DATA = {
+            new Integer(1), new Date(1997-1900, Calendar.JANUARY, 5),
+            new Integer(4), new Date(1997-1900, Calendar.JANUARY, 26),
+            new Integer(8), new Date(1997-1900, Calendar.FEBRUARY, 23),
+            new Integer(-1), new Date(1997-1900, Calendar.JANUARY, 26),
+            new Integer(-4), new Date(1997-1900, Calendar.JANUARY, 5),
+            new Integer(-8), new Date(1996-1900, Calendar.DECEMBER, 8),
+        };
+        for (int i=0; i<DATA.length; i+=2) {
+            cal.clear();
+            cal.set(Calendar.DAY_OF_WEEK_IN_MONTH,
+                    ((Number) DATA[i]).intValue());
+            cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+            cal.set(Calendar.MONTH, Calendar.JANUARY);
+            cal.set(Calendar.YEAR, 1997);
+            Date actual = cal.getTime();
+            if (!actual.equals(DATA[i+1])) {
+                errln("FAIL: Sunday " + DATA[i] +
+                      " of Jan 1997 -> " + actual +
+                      ", want " + DATA[i+1]);
+            }
+        }
+    }
+
+    /**
+     * WEEK_OF_YEAR computed incorrectly.  A failure of this test can indicate
+     * a problem in several different places in the 
+     */
+    public void Test4288792() throws Exception 
+    {
+	TimeZone savedTZ = TimeZone.getDefault();
+	TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
+	GregorianCalendar cal = new GregorianCalendar();
+        
+	for (int i = 1900; i < 2100; i++) {
+	    for (int j1 = 1; j1 <= 7; j1++) {
+		// Loop for MinimalDaysInFirstWeek: 1..7
+		for (int j = Calendar.SUNDAY; j <= Calendar.SATURDAY; j++) {
+		    // Loop for FirstDayOfWeek: SUNDAY..SATURDAY
+		    cal.clear();
+		    cal.setMinimalDaysInFirstWeek(j1);
+		    cal.setFirstDayOfWeek(j);
+                    // Set the calendar to the first day of the last week
+                    // of the year.  This may overlap some of the start of
+                    // the next year; that is, the last week of 1999 may
+                    // include some of January 2000.  Use the add() method
+                    // to advance through the week.  For each day, call
+                    // get(WEEK_OF_YEAR).  The result should be the same
+                    // for the whole week.  Note that a bug in
+                    // getActualMaximum() will break this test.
+		    cal.set(Calendar.YEAR, i);
+		    int maxWeek = cal.getActualMaximum(Calendar.WEEK_OF_YEAR);
+		    cal.set(Calendar.WEEK_OF_YEAR, maxWeek);
+		    cal.set(Calendar.DAY_OF_WEEK, j);
+		    for (int k = 1; k < 7; k++) {
+			cal.add(Calendar.DATE, 1);
+			int WOY = cal.get(Calendar.WEEK_OF_YEAR);
+			if (WOY != maxWeek) {
+			    errln(cal.getTime() + ",got=" + WOY
+				  + ",expected=" + maxWeek 
+				  + ",min=" + j1 + ",first=" + j);
+			}
+		    }
+                    // Now advance the calendar one more day.  This should
+                    // put it at the first day of week 1 of the next year.
+		    cal.add(Calendar.DATE, 1);
+		    int WOY = cal.get(Calendar.WEEK_OF_YEAR);
+		    if (WOY != 1) {
+			errln(cal.getTime() + ",got=" + WOY 
+			      + ",expected=1,min=" + j1 + ",first" + j);
+		    }
+		}
+	    }
+	}
+	TimeZone.setDefault(savedTZ);
+    }
+
+    /**
+     * Test fieldDifference().
+     */
+    public void TestJ438() throws Exception {
+        int DATA[] = {
+            2000, Calendar.JANUARY, 20,   2010, Calendar.JUNE, 15,
+            2010, Calendar.JUNE, 15,      2000, Calendar.JANUARY, 20,
+            1964, Calendar.SEPTEMBER, 7,  1999, Calendar.JUNE, 4,
+            1999, Calendar.JUNE, 4,       1964, Calendar.SEPTEMBER, 7,
+        };
+        Calendar cal = Calendar.getInstance(Locale.US);
+        for (int i=0; i<DATA.length; i+=6) {
+            int y1 = DATA[i];
+            int m1 = DATA[i+1];
+            int d1 = DATA[i+2];
+            int y2 = DATA[i+3];
+            int m2 = DATA[i+4];
+            int d2 = DATA[i+5];
+
+            cal.clear();
+            cal.set(y1, m1, d1);
+            Date date1 = cal.getTime();
+            cal.set(y2, m2, d2);
+            Date date2 = cal.getTime();
+
+            cal.setTime(date1);
+            int dy = cal.fieldDifference(date2, Calendar.YEAR);
+            int dm = cal.fieldDifference(date2, Calendar.MONTH);
+            int dd = cal.fieldDifference(date2, Calendar.DATE);
+
+            logln("" + date2 + " - " + date1 + " = " +
+                  dy + "y " + dm + "m " + dd + "d");
+
+            cal.setTime(date1);
+            cal.add(Calendar.YEAR, dy);
+            cal.add(Calendar.MONTH, dm);
+            cal.add(Calendar.DATE, dd);
+            Date date22 = cal.getTime();
+            if (!date2.equals(date22)) {
+                errln("FAIL: " + date1 + " + " +
+                      dy + "y " + dm + "m " + dd + "d = " +
+                      date22 + ", exp " + date2);
+            } else {
+                logln("Ok: " + date1 + " + " +
+                      dy + "y " + dm + "m " + dd + "d = " +
+                      date22);
+            }
+        }
+    }
+
+    /**
+     * Set behavior of DST_OFFSET field.  ICU4J Jitterbug 9.
+     */
+    public void TestJ9() {
+        int HOURS = 60*60*1000;
+        Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("PST"),
+                                             Locale.US);
+
+        final int END_FIELDS = 0x1234;
+
+        int[] DATA = {
+            // With no explicit ZONE/DST expect 12:00 am
+            Calendar.MONTH, Calendar.JUNE,
+            END_FIELDS,
+            0, 0, // expected hour, min
+
+            // Normal ZONE/DST for June 1 Pacific is 8:00/1:00
+            Calendar.MONTH, Calendar.JUNE,
+            Calendar.ZONE_OFFSET, -8*HOURS,
+            Calendar.DST_OFFSET, HOURS,
+            END_FIELDS,
+            0, 0, // expected hour, min
+
+            // With ZONE/DST of 8:00/0:30 expect time of 12:30 am
+            Calendar.MONTH, Calendar.JUNE,
+            Calendar.ZONE_OFFSET, -8*HOURS,
+            Calendar.DST_OFFSET, HOURS/2,
+            END_FIELDS,
+            0, 30, // expected hour, min
+
+            // With ZONE/DST of 8:00/UNSET expect time of 1:00 am
+            Calendar.MONTH, Calendar.JUNE,
+            Calendar.ZONE_OFFSET, -8*HOURS,
+            END_FIELDS,
+            1, 0, // expected hour, min
+
+            // With ZONE/DST of UNSET/0:30 expect 4:30 pm (day before)
+            Calendar.MONTH, Calendar.JUNE,
+            Calendar.DST_OFFSET, HOURS/2,
+            END_FIELDS,
+            16, 30, // expected hour, min
+        };
+
+        for (int i=0; i<DATA.length; ) {
+            int start = i;
+            cal.clear();
+
+            // Set fields
+            while (DATA[i] != END_FIELDS) {
+                cal.set(DATA[i++], DATA[i++]);
+            }
+            ++i; // skip over END_FIELDS
+
+            // Get hour/minute
+            int h = cal.get(Calendar.HOUR_OF_DAY);
+            int m = cal.get(Calendar.MINUTE);
+
+            // Check
+            if (h != DATA[i] || m != DATA[i+1]) {
+                errln("Fail: expected " + DATA[i] + ":" + DATA[i+1] +
+                      ", got " + h + ":" + m + " after:");
+                while (DATA[start] != END_FIELDS) {
+                    logln("set(" + FIELD_NAME[DATA[start++]] +
+                          ", " + DATA[start++] + ");");
+                }
+            }
+
+            i += 2; // skip over expected hour, min
+        }
+    }
+
+    /**
+     * DateFormat class mistakes date style and time style as follows:
+     * - DateFormat.getDateTimeInstance takes date style as time
+     * style, and time style as date style
+     * - If a Calendar is passed to
+     * DateFormat.getDateInstance, it returns time instance
+     * - If a Calendar
+     * is passed to DateFormat.getTimeInstance, it returns date instance
+     */
+    public void TestDateFormatFactoryJ26() {
+        TimeZone zone = TimeZone.getDefault();
+        try {
+            Locale loc = Locale.US;
+            TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
+            Date date = new Date(2001, Calendar.APRIL, 5, 17, 43, 53);
+            Calendar cal = Calendar.getInstance(loc);
+            Object[] DATA = {
+                DateFormat.getDateInstance(DateFormat.SHORT, loc),
+                "DateFormat.getDateInstance(DateFormat.SHORT, loc)",
+                "4/5/01",
+
+                DateFormat.getTimeInstance(DateFormat.SHORT, loc),
+                "DateFormat.getTimeInstance(DateFormat.SHORT, loc)",
+                "5:43 PM",
+
+                DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, loc),
+                "DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, loc)",
+                "Friday, April 5, 3901 5:43 PM",
+
+                DateFormat.getDateInstance(cal, DateFormat.SHORT, loc),
+                "DateFormat.getDateInstance(cal, DateFormat.SHORT, loc)",
+                "4/5/01",
+
+                DateFormat.getTimeInstance(cal, DateFormat.SHORT, loc),
+                "DateFormat.getTimeInstance(cal, DateFormat.SHORT, loc)",
+                "5:43 PM",
+
+                DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.SHORT, loc),
+                "DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.SHORT, loc)",
+                "Friday, April 5, 3901 5:43 PM",
+            
+                cal.getDateTimeFormat(DateFormat.SHORT, DateFormat.FULL, loc),
+                "cal.getDateTimeFormat(DateFormat.SHORT, DateFormat.FULL, loc)",
+                "4/5/01 5:43:53 PM PST",
+
+                cal.getDateTimeFormat(DateFormat.FULL, DateFormat.SHORT, loc),
+                "cal.getDateTimeFormat(DateFormat.FULL, DateFormat.SHORT, loc)",
+                "Friday, April 5, 3901 5:43 PM",
+            };
+            for (int i=0; i<DATA.length; i+=3) {
+                DateFormat df = (DateFormat) DATA[i];
+                String desc = (String) DATA[i+1];
+                String exp = (String) DATA[i+2];
+                String got = df.format(date);
+                if (got.equals(exp)) {
+                    logln("Ok: " + desc + " => " + got);
+                } else {
+                    errln("FAIL: " + desc + " => " + got + ", expected " + exp);
+                }
+            }
+        } finally {
+            TimeZone.setDefault(zone);
+        }
+    }
+}
+
+//eof
diff --git a/src/com/ibm/test/calendar/CalendarTest.java b/src/com/ibm/test/calendar/CalendarTest.java
new file mode 100755
index 0000000..1e2466d
--- /dev/null
+++ b/src/com/ibm/test/calendar/CalendarTest.java
@@ -0,0 +1,360 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/CalendarTest.java,v $ 
+ * $Date: 2000/11/30 21:54:34 $ 
+ * $Revision: 1.11 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.test.calendar;
+
+import com.ibm.test.*;
+import com.ibm.text.DateFormat;
+import com.ibm.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import com.ibm.util.*;
+
+/**
+ * A base class for classes that test individual Calendar subclasses.
+ * Defines various useful utility methods and constants
+ */
+public class CalendarTest extends TestFmwk {
+    
+    // Constants for use by subclasses, solely to save typing
+    public final static int SUN = Calendar.SUNDAY;
+    public final static int MON = Calendar.MONDAY;
+    public final static int TUE = Calendar.TUESDAY;
+    public final static int WED = Calendar.WEDNESDAY;
+    public final static int THU = Calendar.THURSDAY;
+    public final static int FRI = Calendar.FRIDAY;
+    public final static int SAT = Calendar.SATURDAY;
+
+    public final static int ERA     = Calendar.ERA;
+    public final static int YEAR    = Calendar.YEAR;
+    public final static int MONTH   = Calendar.MONTH;
+    public final static int DATE    = Calendar.DATE;
+    public final static int HOUR    = Calendar.HOUR;
+    public final static int MINUTE  = Calendar.MINUTE;
+    public final static int SECOND  = Calendar.SECOND;
+    public final static int DOY     = Calendar.DAY_OF_YEAR;
+    public final static int WOY     = Calendar.WEEK_OF_YEAR;
+    public final static int WOM     = Calendar.WEEK_OF_MONTH;
+    public final static int DOW     = Calendar.DAY_OF_WEEK;
+    public final static int DOWM    = Calendar.DAY_OF_WEEK_IN_MONTH;
+    
+    public final static SimpleTimeZone UTC = new SimpleTimeZone(0, "GMT");
+
+    private static final String[] FIELD_NAME = {
+        "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH",
+        "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK",
+        "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", "HOUR_OF_DAY",
+        "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",
+        "DST_OFFSET", "YEAR_WOY", "DOW_LOCAL", "EXTENDED_YEAR",
+        "JULIAN_DAY", "MILLISECONDS_IN_DAY",
+        "IS_LEAP_MONTH" // (ChineseCalendar only)
+    };
+
+    public static final String fieldName(int f) {
+        return (f>=0 && f<FIELD_NAME.length) ?
+            FIELD_NAME[f] : ("<Field " + f + ">");
+    }
+
+    /**
+     * Iterates through a list of calendar <code>TestCase</code> objects and
+     * makes sure that the time-to-fields and fields-to-time calculations work
+     * correnctly for the values in each test case.
+     */
+    public void doTestCases(TestCase[] cases, Calendar cal)
+    {
+        cal.setTimeZone(UTC);
+        
+        // Get a format to use for printing dates in the calendar system we're testing
+        DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.SHORT, -1, Locale.getDefault());
+
+        final String pattern = (cal instanceof ChineseCalendar) ?
+            "E MMl/dd/y G HH:mm:ss.S z" :
+            "E, MM/dd/yyyy G HH:mm:ss.S z";
+    
+        ((SimpleDateFormat)format).applyPattern(pattern);
+
+        // This format is used for printing Gregorian dates.
+        DateFormat gregFormat = new SimpleDateFormat(pattern);
+        gregFormat.setTimeZone(UTC);
+
+        GregorianCalendar pureGreg = new GregorianCalendar(UTC);
+        pureGreg.setGregorianChange(new Date(Long.MIN_VALUE));
+        DateFormat pureGregFmt = new SimpleDateFormat("E M/d/yyyy G");
+        pureGregFmt.setCalendar(pureGreg);
+        
+        // Now iterate through the test cases and see what happens
+        for (int i = 0; i < cases.length; i++)
+        {
+            TestCase test = cases[i];
+            
+            //
+            // First we want to make sure that the millis -> fields calculation works
+            // test.applyTime will call setTime() on the calendar object, and
+            // test.fieldsEqual will retrieve all of the field values and make sure
+            // that they're the same as the ones in the testcase
+            //
+            test.applyTime(cal);
+            if (!test.fieldsEqual(cal, this)) {
+                errln("Fail: (millis=>fields) " +
+                      gregFormat.format(test.getTime()) + " => " +
+                      format.format(cal.getTime()) +
+                      ", expected " + test);
+            }
+
+            //
+            // If that was OK, check the fields -> millis calculation
+            // test.applyFields will set all of the calendar's fields to 
+            // match those in the test case.
+            //
+            cal.clear();
+            test.applyFields(cal);
+            if (!test.equals(cal)) {
+                errln("Fail: (fields=>millis) " + test + " => " +
+                      pureGregFmt.format(cal.getTime()) +
+                      ", expected " + pureGregFmt.format(test.getTime()));
+            }
+        }
+    }
+    
+    static public final boolean ROLL = true;
+    static public final boolean ADD = false;
+    
+    /**
+     * Process test cases for <code>add</code> and <code>roll</code> methods.
+     * Each test case is an array of integers, as follows:
+     * <ul>
+     *  <li>0: input year
+     *  <li>1:       month  (zero-based)
+     *  <li>2:       day
+     *  <li>3: field to roll or add to
+     *  <li>4: amount to roll or add
+     *  <li>5: result year
+     *  <li>6:        month (zero-based)
+     *  <li>7:        day
+     * </ul>
+     * For example:
+     * <pre>
+     *   //       input                add by          output
+     *   //  year  month     day     field amount    year  month     day
+     *   {   5759, HESHVAN,   2,     MONTH,   1,     5759, KISLEV,    2 },
+     * </pre>
+     *
+     * @param roll  <code>true</code> or <code>ROLL</code> to test the <code>roll</code> method;
+     *              <code>false</code> or <code>ADD</code> to test the <code>add</code method
+     */
+    public void doRollAdd(boolean roll, Calendar cal, int[][] tests)
+    {
+        String name = roll ? "rolling" : "adding";
+        
+        for (int i = 0; i < tests.length; i++) {
+            int[] test = tests[i];
+
+            cal.clear();
+            if (cal instanceof ChineseCalendar) {
+                cal.set(Calendar.EXTENDED_YEAR, test[0]);
+                cal.set(Calendar.MONTH, test[1]);
+                cal.set(Calendar.DAY_OF_MONTH, test[2]);
+            } else {
+                cal.set(test[0], test[1], test[2]);
+            }
+            if (roll) {
+                cal.roll(test[3], test[4]);
+            } else {
+                cal.add(test[3], test[4]);
+            }
+            int y = cal.get(cal instanceof ChineseCalendar ?
+                            Calendar.EXTENDED_YEAR : YEAR);
+            if (y != test[5] || cal.get(MONTH) != test[6]
+                    || cal.get(DATE) != test[7])
+            {
+                errln("Fail: " + name + " "+ ymdToString(test[0], test[1], test[2])
+                    + " " + FIELD_NAME[test[3]] + " by " + test[4]
+                    + ": expected " + ymdToString(test[5], test[6], test[7])
+                    + ", got " + ymdToString(cal));
+            } else if (isVerbose()) {
+                logln("OK: " + name + " "+ ymdToString(test[0], test[1], test[2])
+                    + " " + FIELD_NAME[test[3]] + " by " + test[4]
+                    + ": got " + ymdToString(cal));
+            }
+        }
+    }
+
+    /**
+     * Test the functions getXxxMinimum() and getXxxMaximum() by marching a
+     * test calendar 'cal' through 'numberOfDays' sequential days starting
+     * with 'startDate'.  For each date, read a field value along with its
+     * reported actual minimum and actual maximum.  These values are
+     * checked against one another as well as against getMinimum(),
+     * getGreatestMinimum(), getLeastMaximum(), and getMaximum().  We
+     * expect to see:
+     *
+     * 1. minimum <= actualMinimum <= greatestMinimum <=
+     *    leastMaximum <= actualMaximum <= maximum
+     *
+     * 2. actualMinimum <= value <= actualMaximum
+     *
+     * Note: In addition to outright failures, this test reports some
+     * results as warnings.  These are not generally of concern, but they
+     * should be evaluated by a human.  To see these, run this test in
+     * verbose mode.
+     * @param cal the calendar to be tested
+     * @param fieldsToTest an array of field values to be tested, e.g., new
+     * int[] { Calendar.MONTH, Calendar.DAY_OF_MONTH }.  It only makes
+     * sense to test the day fields; the time fields are not tested by this
+     * method.  If null, then test all standard fields.
+     * @param startDate the first date to test
+     * @param testDuration if positive, the number of days to be tested.
+     * If negative, the number of seconds to run the test.
+     */
+    protected void doLimitsTest(Calendar cal, int[] fieldsToTest,
+                                Date startDate, int testDuration) {
+        GregorianCalendar greg = new GregorianCalendar();
+        greg.setTime(startDate);
+        logln("Start: " + startDate);
+
+        if (fieldsToTest == null) {
+            fieldsToTest = new int[] {
+                Calendar.ERA, Calendar.YEAR, Calendar.MONTH,
+                Calendar.WEEK_OF_YEAR, Calendar.WEEK_OF_MONTH,
+                Calendar.DAY_OF_MONTH, Calendar.DAY_OF_YEAR,
+                Calendar.DAY_OF_WEEK_IN_MONTH, Calendar.YEAR_WOY,
+                Calendar.EXTENDED_YEAR
+            };
+        }
+
+        // Keep a record of minima and maxima that we actually see.
+        // These are kept in an array of arrays of hashes.
+        Hashtable[][] limits = new Hashtable[fieldsToTest.length][2];
+        Object nub = new Object(); // Meaningless placeholder
+
+        // This test can run for a long time; show progress.
+        long millis = System.currentTimeMillis();
+        long mark = millis + 5000; // 5 sec
+        millis -= testDuration * 1000; // stop time if testDuration<0
+
+        for (int i=0;
+             testDuration>0 ? i<testDuration
+                            : System.currentTimeMillis()<millis;
+             ++i) {
+            if (System.currentTimeMillis() >= mark) {
+                logln("(" + i + " days)");
+                mark += 5000; // 5 sec
+            }
+            cal.setTimeInMillis(greg.getTimeInMillis());
+            for (int j=0; j<fieldsToTest.length; ++j) {
+                int f = fieldsToTest[j];
+                int v = cal.get(f);
+                int minActual = cal.getActualMinimum(f);
+                int maxActual = cal.getActualMaximum(f);
+                int minLow = cal.getMinimum(f);
+                int minHigh = cal.getGreatestMinimum(f);
+                int maxLow = cal.getLeastMaximum(f);
+                int maxHigh = cal.getMaximum(f);
+
+                // Fetch the hash for this field and keep track of the
+                // minima and maxima.
+                Hashtable[] h = limits[j];
+                if (h[0] == null) {
+                    h[0] = new Hashtable();
+                    h[1] = new Hashtable();
+                }
+                h[0].put(new Integer(minActual), nub);
+                h[1].put(new Integer(maxActual), nub);
+
+                if (minActual < minLow || minActual > minHigh) {
+                    errln("Fail: " + ymdToString(cal) +
+                          " Range for min of " + FIELD_NAME[f] +
+                          "=" + minLow + ".." + minHigh +
+                          ", actual_min=" + minActual);
+                }
+                if (maxActual < maxLow || maxActual > maxHigh) {
+                    errln("Fail: " + ymdToString(cal) +
+                          " Range for max of " + FIELD_NAME[f] +
+                          "=" + maxLow + ".." + maxHigh +
+                          ", actual_max=" + maxActual);
+                }
+                if (v < minActual || v > maxActual) {
+                    errln("Fail: " + ymdToString(cal) +
+                          " " + FIELD_NAME[f] + "=" + v +
+                          ", actual range=" + minActual + ".." + maxActual +
+                          ", allowed=(" + minLow + ".." + minHigh + ")..(" +
+                          maxLow + ".." + maxHigh + ")");
+                }
+            }
+            greg.add(Calendar.DAY_OF_YEAR, 1);
+        }
+
+        // Check actual maxima and minima seen against ranges returned
+        // by API.
+        StringBuffer buf = new StringBuffer();
+        for (int j=0; j<fieldsToTest.length; ++j) {
+            int f = fieldsToTest[j];
+            buf.setLength(0);
+            buf.append(FIELD_NAME[f]);
+            Hashtable[] h = limits[j];
+            boolean fullRangeSeen = true;
+            for (int k=0; k<2; ++k) {
+                int rangeLow = (k==0) ?
+                    cal.getMinimum(f) : cal.getLeastMaximum(f);
+                int rangeHigh = (k==0) ?
+                    cal.getGreatestMinimum(f) : cal.getMaximum(f);
+                // If either the top of the range or the bottom was never
+                // seen, then there may be a problem.
+                if (h[k].get(new Integer(rangeLow)) == null ||
+                    h[k].get(new Integer(rangeHigh)) == null) {
+                    fullRangeSeen = false;
+                }
+                buf.append(k==0 ? " minima seen=(" : "; maxima seen=(");
+                for (Enumeration e=h[k].keys(); e.hasMoreElements(); ) {
+                    int v = ((Integer) e.nextElement()).intValue();
+                    buf.append(" " + v);
+                }
+                buf.append(") range=" + rangeLow + ".." + rangeHigh);
+            }
+            if (fullRangeSeen) {
+                logln("OK: " + buf.toString());
+            } else {
+                // This may or may not be an error -- if the range of dates
+                // we scan over doesn't happen to contain a minimum or
+                // maximum, it doesn't mean some other range won't.
+                logln("Warning: " + buf.toString());
+            }
+        }
+
+        logln("End: " + greg.getTime());
+    }
+
+    /**
+     * Convert year,month,day values to the form "year/month/day".
+     * On input the month value is zero-based, but in the result string it is one-based.
+     */
+    static public String ymdToString(int year, int month, int day) {
+        return "" + year + "/" + (month+1) + "/" + day;
+    }
+
+    /**
+     * Convert year,month,day values to the form "year/month/day".
+     */
+    static public String ymdToString(Calendar cal) {
+        if (cal instanceof ChineseCalendar) {
+            return "" + cal.get(Calendar.EXTENDED_YEAR) + "/" +
+                (cal.get(Calendar.MONTH)+1) +
+                (cal.get(ChineseCalendar.IS_LEAP_MONTH)==1?"(leap)":"") + "/" +
+                cal.get(Calendar.DATE);
+        }
+        return ymdToString(cal.get(Calendar.EXTENDED_YEAR),
+                           cal.get(MONTH), cal.get(DATE));
+    }
+}
diff --git a/src/com/ibm/test/calendar/ChineseTest.java b/src/com/ibm/test/calendar/ChineseTest.java
new file mode 100755
index 0000000..40ad2c1
--- /dev/null
+++ b/src/com/ibm/test/calendar/ChineseTest.java
@@ -0,0 +1,515 @@
+/*********************************************************************
+ * Copyright (C) 2000, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *********************************************************************
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/ChineseTest.java,v $
+ * $Date: 2000/11/29 21:58:01 $
+ * $Revision: 1.7 $
+ */
+package com.ibm.test.calendar;
+import com.ibm.util.*;
+import com.ibm.text.*;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * Test of ChineseCalendar.
+ *
+ * Leap months in this century:
+ * Wed May 23 2001 = 4638-04*-01, Year 18, Cycle 78
+ * Sun Mar 21 2004 = 4641-02*-01, Year 21, Cycle 78
+ * Thu Aug 24 2006 = 4643-07*-01, Year 23, Cycle 78
+ * Tue Jun 23 2009 = 4646-05*-01, Year 26, Cycle 78
+ * Mon May 21 2012 = 4649-04*-01, Year 29, Cycle 78
+ * Fri Oct 24 2014 = 4651-09*-01, Year 31, Cycle 78
+ * Sun Jul 23 2017 = 4654-06*-01, Year 34, Cycle 78
+ * Sat May 23 2020 = 4657-04*-01, Year 37, Cycle 78
+ * Wed Mar 22 2023 = 4660-02*-01, Year 40, Cycle 78
+ * Fri Jul 25 2025 = 4662-06*-01, Year 42, Cycle 78
+ * Fri Jun 23 2028 = 4665-05*-01, Year 45, Cycle 78
+ * Tue Apr 22 2031 = 4668-03*-01, Year 48, Cycle 78
+ * Thu Dec 22 2033 = 4670-11*-01, Year 50, Cycle 78
+ * Wed Jul 23 2036 = 4673-06*-01, Year 53, Cycle 78
+ * Wed Jun 22 2039 = 4676-05*-01, Year 56, Cycle 78
+ * Sat Mar 22 2042 = 4679-02*-01, Year 59, Cycle 78
+ * Tue Aug 23 2044 = 4681-07*-01, Year 01, Cycle 79
+ * Sun Jun 23 2047 = 4684-05*-01, Year 04, Cycle 79
+ * Thu Apr 21 2050 = 4687-03*-01, Year 07, Cycle 79
+ * Mon Sep 23 2052 = 4689-08*-01, Year 09, Cycle 79
+ * Sat Jul 24 2055 = 4692-06*-01, Year 12, Cycle 79
+ * Wed May 22 2058 = 4695-04*-01, Year 15, Cycle 79
+ * Wed Apr 20 2061 = 4698-03*-01, Year 18, Cycle 79
+ * Fri Aug 24 2063 = 4700-07*-01, Year 20, Cycle 79
+ * Wed Jun 23 2066 = 4703-05*-01, Year 23, Cycle 79
+ * Tue May 21 2069 = 4706-04*-01, Year 26, Cycle 79
+ * Thu Sep 24 2071 = 4708-08*-01, Year 28, Cycle 79
+ * Tue Jul 24 2074 = 4711-06*-01, Year 31, Cycle 79
+ * Sat May 22 2077 = 4714-04*-01, Year 34, Cycle 79
+ * Sat Apr 20 2080 = 4717-03*-01, Year 37, Cycle 79
+ * Mon Aug 24 2082 = 4719-07*-01, Year 39, Cycle 79
+ * Fri Jun 22 2085 = 4722-05*-01, Year 42, Cycle 79
+ * Fri May 21 2088 = 4725-04*-01, Year 45, Cycle 79
+ * Sun Sep 24 2090 = 4727-08*-01, Year 47, Cycle 79
+ * Thu Jul 23 2093 = 4730-06*-01, Year 50, Cycle 79
+ * Tue May 22 2096 = 4733-04*-01, Year 53, Cycle 79
+ * Sun Mar 22 2099 = 4736-02*-01, Year 56, Cycle 79
+ */
+public class ChineseTest extends CalendarTest {
+
+    public static void main(String args[]) throws Exception {
+        new ChineseTest().run(args);
+    }
+
+    /**
+     * Test basic mapping to and from Gregorian.
+     */
+    public void TestMapping() {
+
+        final int[] DATA = {
+            // (Note: months are 1-based)
+            // Gregorian    Chinese
+            1964,  9,  4,   4601,  7,0, 28,
+            1964,  9,  5,   4601,  7,0, 29,
+            1964,  9,  6,   4601,  8,0,  1,
+            1964,  9,  7,   4601,  8,0,  2,
+            1961, 12, 25,   4598, 11,0, 18,
+            1999,  6,  4,   4636,  4,0, 21,
+            
+            1990,  5, 23,   4627,  4,0, 29,
+            1990,  5, 24,   4627,  5,0,  1,
+            1990,  6, 22,   4627,  5,0, 30,
+            1990,  6, 23,   4627,  5,1,  1,
+            1990,  7, 20,   4627,  5,1, 28,
+            1990,  7, 21,   4627,  5,1, 29,
+            1990,  7, 22,   4627,  6,0,  1,
+        };
+
+        ChineseCalendar cal = new ChineseCalendar();
+        StringBuffer buf = new StringBuffer();
+
+        logln("Gregorian -> Chinese");
+        for (int i=0; i<DATA.length; ) {
+            Date date = new Date(DATA[i++]-1900, DATA[i++]-1, DATA[i++]);
+            cal.setTime(date);
+            int y = cal.get(Calendar.EXTENDED_YEAR);
+            int m = cal.get(Calendar.MONTH)+1; // 0-based -> 1-based
+            int L = cal.get(ChineseCalendar.IS_LEAP_MONTH);
+            int d = cal.get(Calendar.DAY_OF_MONTH);
+            int yE = DATA[i++]; // Expected y, m, isLeapMonth, d
+            int mE = DATA[i++]; // 1-based
+            int LE = DATA[i++];
+            int dE = DATA[i++];
+            buf.setLength(0);
+            buf.append(date + " -> ");
+            buf.append(y + "/" + m + (L==1?"(leap)":"") + "/" + d);
+            if (y == yE && m == mE && L == LE && d == dE) {
+                logln("OK: " + buf.toString());
+            } else {
+                errln("Fail: " + buf.toString() + ", expected " +
+                      yE + "/" + mE + (LE==1?"(leap)":"") + "/" + dE);
+            }
+        }
+
+        logln("Chinese -> Gregorian");
+        for (int i=0; i<DATA.length; ) {
+            Date dexp = new Date(DATA[i++]-1900, DATA[i++]-1, DATA[i++]);
+            int cyear = DATA[i++];
+            int cmonth = DATA[i++];
+            int cisleapmonth = DATA[i++];
+            int cdayofmonth = DATA[i++];
+            cal.clear();
+            cal.set(Calendar.EXTENDED_YEAR, cyear);
+            cal.set(Calendar.MONTH, cmonth-1);
+            cal.set(ChineseCalendar.IS_LEAP_MONTH, cisleapmonth);
+            cal.set(Calendar.DAY_OF_MONTH, cdayofmonth);
+            Date date = cal.getTime();
+            buf.setLength(0);
+            buf.append(cyear + "/" + cmonth +
+                       (cisleapmonth==1?"(leap)":"") + "/" + cdayofmonth);
+            buf.append(" -> " + date);
+            if (date.equals(dexp)) {
+                logln("OK: " + buf.toString());
+            } else {
+                errln("Fail: " + buf.toString() + ", expected " + dexp);
+            }
+        }
+    }
+
+    /**
+     * Make sure no Gregorian dates map to Chinese 1-based day of
+     * month zero.  This was a problem with some of the astronomical
+     * new moon determinations.
+     */
+    public void TestZeroDOM() {
+        ChineseCalendar cal = new ChineseCalendar();
+        GregorianCalendar greg = new GregorianCalendar(1989, Calendar.SEPTEMBER, 1);
+        logln("Start: " + greg.getTime());
+        for (int i=0; i<1000; ++i) {
+            cal.setTimeInMillis(greg.getTimeInMillis());
+            if (cal.get(Calendar.DAY_OF_MONTH) == 0) {
+                errln("Fail: " + greg.getTime() + " -> " +
+                      cal.get(Calendar.EXTENDED_YEAR) + "/" +
+                      cal.get(Calendar.MONTH) +
+                      (cal.get(ChineseCalendar.IS_LEAP_MONTH)==1?"(leap)":"") +
+                      "/" + cal.get(Calendar.DAY_OF_MONTH));
+            }
+            greg.add(Calendar.DAY_OF_YEAR, 1);
+        }
+        logln("End: " + greg.getTime());
+    }
+
+    /**
+     * Test minimum and maximum functions.
+     */
+    public void TestLimits() {
+        // The number of days and the start date can be adjusted
+        // arbitrarily to either speed up the test or make it more
+        // thorough, but try to test at least a full year, preferably a
+        // full non-leap and a full leap year.
+
+        // Final parameter is either number of days, if > 0, or test
+        // duration in seconds, if < 0.
+        doLimitsTest(new ChineseCalendar(), null,
+                     new Date(1989-1900, Calendar.NOVEMBER, 1), -10);
+    }
+
+    /**
+     * Run through several standard tests from Dershowitz & Reingold.
+     */
+    public void TestJulianDayMapping() {
+
+        final TestCase[] tests = {
+            //
+            // From Dershowitz & Reingold, "Calendrical Calculations".
+            //
+            // The months in this table are 1-based rather than 0-based.
+            //
+            // * Failing fields->millis
+            // ** Millis->fields gives 0-based month -1
+            // These failures were fixed by changing the start search date
+            // for the winter solstice from Dec 15 to Dec 1.
+            // 
+            //                  Julian Day   Era  Year Month  Leap   DOM WkDay
+            new ChineseTestCase(1507231.5,   35,   11,    6, false,   12,  SUN),
+            new ChineseTestCase(1660037.5,   42,    9,   10, false,   27,  WED),
+            new ChineseTestCase(1746893.5,   46,    7,    8, false,    4,  WED),
+            new ChineseTestCase(1770641.5,   47,   12,    8, false,    9,  SUN),
+            new ChineseTestCase(1892731.5,   52,   46,   11, false,   20,  WED),
+            new ChineseTestCase(1931579.5,   54,   33,    4, false,    5,  MON),
+            new ChineseTestCase(1974851.5,   56,   31,   10, false,   15,  SAT),
+            new ChineseTestCase(2091164.5,   61,   50,    3, false,    7,  SUN),
+            new ChineseTestCase(2121509.5,   63,   13,    4, false,   24,  SUN),
+            new ChineseTestCase(2155779.5,   64,   47,    2, false,    9,  FRI),
+            new ChineseTestCase(2174029.5,   65,   37,    2, false,    9,  SAT),
+            new ChineseTestCase(2191584.5,   66,   25,    2, false,   23,  FRI),
+            new ChineseTestCase(2195261.5,   66,   35,    3, false,    9,  SUN), //*
+            new ChineseTestCase(2229274.5,   68,    8,    5, false,    2,  SUN), //*
+            new ChineseTestCase(2245580.5,   68,   53,    1, false,    8,  WED), //**
+            new ChineseTestCase(2266100.5,   69,   49,    3, false,    4,  SAT), 
+            new ChineseTestCase(2288542.5,   70,   50,    8, false,    2,  SAT), //*
+            new ChineseTestCase(2290901.5,   70,   57,    1, false,   29,  SAT), //*
+            new ChineseTestCase(2323140.5,   72,   25,    4,  true,   20,  WED), //*
+            new ChineseTestCase(2334848.5,   72,   57,    6, false,    5,  SUN),
+            new ChineseTestCase(2348020.5,   73,   33,    6, false,    6,  FRI),
+            new ChineseTestCase(2366978.5,   74,   25,    5, false,    5,  SUN),
+            new ChineseTestCase(2385648.5,   75,   16,    6, false,   12,  MON),
+            new ChineseTestCase(2392825.5,   75,   36,    2, false,   13,  WED),
+            new ChineseTestCase(2416223.5,   76,   40,    3, false,   22,  SUN),
+            new ChineseTestCase(2425848.5,   77,    6,    7, false,   21,  SUN),
+            new ChineseTestCase(2430266.5,   77,   18,    8, false,    9,  MON),
+            new ChineseTestCase(2430833.5,   77,   20,    3, false,   15,  MON),
+            new ChineseTestCase(2431004.5,   77,   20,    9, false,    9,  THU),
+            new ChineseTestCase(2448698.5,   78,    9,    2, false,   14,  TUE),
+            new ChineseTestCase(2450138.5,   78,   13,    1, false,    7,  SUN),
+            new ChineseTestCase(2465737.5,   78,   55,   10, false,   14,  WED),
+            new ChineseTestCase(2486076.5,   79,   51,    6, false,    7,  SUN),
+
+            // Additional tests not from D&R
+            new ChineseTestCase(2467496.5,   78,   60,    8, false,    2,  FRI), // year 60
+        };
+
+        ChineseCalendar cal = new ChineseCalendar();
+        cal.setLenient(true);
+        doTestCases(tests, cal);
+    }
+
+    /**
+     * Test formatting.
+     */
+    public void TestFormat() {
+        ChineseCalendar cal = new ChineseCalendar();
+        DateFormat fmt = DateFormat.getDateTimeInstance(cal,
+                                    DateFormat.DEFAULT, DateFormat.DEFAULT);
+
+        Date[] DATA = {
+            // Wed May 23 2001 = Month 4(leap), Day 1, Year 18, Cycle 78
+            new Date(2001-1900, Calendar.MAY, 22),
+            new Date(2001-1900, Calendar.MAY, 23)
+        };
+        
+        for (int i=0; i<DATA.length; ++i) {
+            String s = fmt.format(DATA[i]);
+            try {
+                Date e = fmt.parse(s);
+                if (e.equals(DATA[i])) {
+                    logln("Ok: " + DATA[i] + " -> " + s + " -> " + e);
+                } else {
+                    errln("FAIL: " + DATA[i] + " -> " + s + " -> " + e);
+                }
+            } catch (java.text.ParseException e) {
+                errln("Fail: " + s + " -> parse failure at " + e.getErrorOffset());
+                errln(e.toString());
+            }
+        }
+    }
+
+    /**
+     * Make sure IS_LEAP_MONTH participates in field resolution.
+     */
+    public void TestResolution() {
+        ChineseCalendar cal = new ChineseCalendar();
+        DateFormat fmt = DateFormat.getDateInstance(cal, DateFormat.DEFAULT);
+
+        // May 22 2001 = y4638 m4 d30 doy119
+        // May 23 2001 = y4638 m4* d1 doy120
+
+        final int THE_YEAR = 4638;
+        final int END = -1;
+
+        int[] DATA = {
+            // Format:
+            // (field, value)+, END, exp.month, exp.isLeapMonth, exp.DOM
+            // Note: exp.month is ONE-BASED
+
+            // If we set DAY_OF_YEAR only, that should be used
+            Calendar.DAY_OF_YEAR, 1,
+            END,
+            1,0,1, // Expect 1-1
+            
+            // If we set MONTH only, that should be used
+            ChineseCalendar.IS_LEAP_MONTH, 1,
+            Calendar.DAY_OF_MONTH, 1,
+            Calendar.MONTH, 3,
+            END,
+            4,1,1, // Expect 4*-1
+            
+            // If we set the DOY last, that should take precedence
+            Calendar.MONTH, 1, // Should ignore
+            ChineseCalendar.IS_LEAP_MONTH, 1, // Should ignore
+            Calendar.DAY_OF_MONTH, 1, // Should ignore
+            Calendar.DAY_OF_YEAR, 121,
+            END,
+            4,1,2, // Expect 4*-2
+            
+            // I've disabled this test because it doesn't work this way,
+            // not even with a GregorianCalendar!  MONTH alone isn't enough
+            // to supersede DAY_OF_YEAR.  Some other month-related field is
+            // also required. - Liu 11/28/00
+            //! // If we set MONTH last, that should take precedence
+            //! ChineseCalendar.IS_LEAP_MONTH, 1,
+            //! Calendar.DAY_OF_MONTH, 1,
+            //! Calendar.DAY_OF_YEAR, 5, // Should ignore
+            //! Calendar.MONTH, 3,
+            //! END,
+            //! 4,1,1, // Expect 4*-1
+            
+            // If we set IS_LEAP_MONTH last, that should take precedence
+            Calendar.MONTH, 3,
+            Calendar.DAY_OF_MONTH, 1,
+            Calendar.DAY_OF_YEAR, 5, // Should ignore
+            ChineseCalendar.IS_LEAP_MONTH, 1,
+            END,
+            4,1,1, // Expect 4*-1
+        };
+
+        StringBuffer buf = new StringBuffer();
+        for (int i=0; i<DATA.length; ) {
+            cal.clear();
+            cal.set(Calendar.EXTENDED_YEAR, THE_YEAR);
+            buf.setLength(0);
+            buf.append("EXTENDED_YEAR=" + THE_YEAR);
+            while (DATA[i] != END) {
+                cal.set(DATA[i++], DATA[i++]);
+                buf.append(" " + fieldName(DATA[i-2]) + "=" + DATA[i-1]);
+            }
+            ++i; // Skip over END mark
+            int expMonth = DATA[i++]-1;
+            int expIsLeapMonth = DATA[i++];
+            int expDOM = DATA[i++];
+            int month = cal.get(Calendar.MONTH);
+            int isLeapMonth = cal.get(ChineseCalendar.IS_LEAP_MONTH);
+            int dom = cal.get(Calendar.DAY_OF_MONTH);
+            if (expMonth == month && expIsLeapMonth == isLeapMonth &&
+                dom == expDOM) {
+                logln("OK: " + buf + " => " + fmt.format(cal.getTime()));
+            } else {
+                String s = fmt.format(cal.getTime());
+                cal.clear();
+                cal.set(Calendar.EXTENDED_YEAR, THE_YEAR);
+                cal.set(Calendar.MONTH, expMonth);
+                cal.set(ChineseCalendar.IS_LEAP_MONTH, expIsLeapMonth);
+                cal.set(Calendar.DAY_OF_MONTH, expDOM);
+                errln("Fail: " + buf + " => " + s +
+                      "=" + (month+1) + "," + isLeapMonth + "," + dom +
+                      ", expected " + fmt.format(cal.getTime()) +
+                      "=" + (expMonth+1) + "," + expIsLeapMonth + "," + expDOM);
+            }
+        }
+    }
+
+    /**
+     * Test the behavior of fields that are out of range.
+     */
+    public void TestOutOfRange() {
+        int[] DATA = new int[] {
+            // Input       Output
+            4638, 13,  1,   4639,  1,  1,
+            4638, 18,  1,   4639,  6,  1,
+            4639,  0,  1,   4638, 12,  1,
+            4639, -6,  1,   4638,  6,  1,
+            4638,  1, 32,   4638,  2,  2, // 1-4638 has 30 days
+            4638,  2, -1,   4638,  1, 29,
+        };
+        ChineseCalendar cal = new ChineseCalendar();
+        for (int i=0; i<DATA.length; ) {
+            int y1 = DATA[i++];
+            int m1 = DATA[i++]-1;
+            int d1 = DATA[i++];
+            int y2 = DATA[i++];
+            int m2 = DATA[i++]-1;
+            int d2 = DATA[i++];
+            cal.clear();
+            cal.set(Calendar.EXTENDED_YEAR, y1);
+            cal.set(MONTH, m1);
+            cal.set(DATE, d1);
+            int y = cal.get(Calendar.EXTENDED_YEAR);
+            int m = cal.get(MONTH);
+            int d = cal.get(DATE);
+            if (y!=y2 || m!=m2 || d!=d2) {
+                errln("Fail: " + y1 + "/" + (m1+1) + "/" + d1 + " resolves to " +
+                      y + "/" + (m+1) + "/" + d + ", expected " +
+                      y2 + "/" + (m2+1) + "/" + d2);
+            } else  if (isVerbose()) {
+                logln("OK: " + y1 + "/" + (m1+1) + "/" + d1 + " resolves to " +
+                      y + "/" + (m+1) + "/" + d);
+            }
+        }
+    }
+
+    /**
+     * Test the behavior of ChineseCalendar.add().  The only real
+     * nastiness with roll is the MONTH field around leap months.
+     */
+    public void TestAdd() {
+        int[][] tests = new int[][] {
+            // MONTHS ARE 1-BASED HERE
+            // input               add           output
+            // year  mon    day    field amount  year  mon    day
+            {  4642,   3,0,  15,   MONTH,   3,   4642,   6,0,  15 }, // normal
+            {  4639,  12,0,  15,   MONTH,   1,   4640,   1,0,  15 }, // across year
+            {  4640,   1,0,  15,   MONTH,  -1,   4639,  12,0,  15 }, // across year
+            {  4638,   3,0,  15,   MONTH,   3,   4638,   5,0,  15 }, // 4=leap
+            {  4638,   3,0,  15,   MONTH,   2,   4638,   4,1,  15 }, // 4=leap
+            {  4638,   4,0,  15,   MONTH,   1,   4638,   4,1,  15 }, // 4=leap
+            {  4638,   4,1,  15,   MONTH,   1,   4638,   5,0,  15 }, // 4=leap
+            {  4638,   4,0,  30,   MONTH,   1,   4638,   4,1,  29 }, // dom should pin
+            {  4638,   4,0,  30,   MONTH,   2,   4638,   5,0,  30 }, // no dom pin
+            {  4638,   4,0,  30,   MONTH,   3,   4638,   6,0,  29 }, // dom should pin
+        };
+       
+        ChineseCalendar cal = new ChineseCalendar();
+        doRollAdd(ADD, cal, tests);
+    }
+
+    /**
+     * Test the behavior of ChineseCalendar.roll().  The only real
+     * nastiness with roll is the MONTH field around leap months.
+     */
+    public void TestRoll() {
+        int[][] tests = new int[][] {
+            // MONTHS ARE 1-BASED HERE
+            // input               add           output
+            // year  mon    day    field amount  year  mon    day
+            {  4642,   3,0,  15,   MONTH,   3,   4642,   6,0,  15 }, // normal
+            {  4642,   3,0,  15,   MONTH,  11,   4642,   2,0,  15 }, // normal
+            {  4639,  12,0,  15,   MONTH,   1,   4639,   1,0,  15 }, // across year
+            {  4640,   1,0,  15,   MONTH,  -1,   4640,  12,0,  15 }, // across year
+            {  4638,   3,0,  15,   MONTH,   3,   4638,   5,0,  15 }, // 4=leap
+            {  4638,   3,0,  15,   MONTH,  16,   4638,   5,0,  15 }, // 4=leap
+            {  4638,   3,0,  15,   MONTH,   2,   4638,   4,1,  15 }, // 4=leap
+            {  4638,   3,0,  15,   MONTH,  28,   4638,   4,1,  15 }, // 4=leap
+            {  4638,   4,0,  15,   MONTH,   1,   4638,   4,1,  15 }, // 4=leap
+            {  4638,   4,0,  15,   MONTH, -12,   4638,   4,1,  15 }, // 4=leap
+            {  4638,   4,1,  15,   MONTH,   1,   4638,   5,0,  15 }, // 4=leap
+            {  4638,   4,1,  15,   MONTH, -25,   4638,   5,0,  15 }, // 4=leap
+            {  4638,   4,0,  30,   MONTH,   1,   4638,   4,1,  29 }, // dom should pin
+            {  4638,   4,0,  30,   MONTH,  14,   4638,   4,1,  29 }, // dom should pin
+            {  4638,   4,0,  30,   MONTH,  15,   4638,   5,0,  30 }, // no dom pin
+            {  4638,   4,0,  30,   MONTH, -10,   4638,   6,0,  29 }, // dom should pin
+        };
+       
+        ChineseCalendar cal = new ChineseCalendar();
+        doRollAdd(ROLL, cal, tests);
+    }
+    
+    void doRollAdd(boolean roll, ChineseCalendar cal, int[][] tests) {
+        String name = roll ? "rolling" : "adding";
+        
+        for (int i = 0; i < tests.length; i++) {
+            int[] test = tests[i];
+
+            cal.clear();
+                cal.set(Calendar.EXTENDED_YEAR, test[0]);
+                cal.set(Calendar.MONTH, test[1]-1);
+                cal.set(ChineseCalendar.IS_LEAP_MONTH, test[2]);
+                cal.set(Calendar.DAY_OF_MONTH, test[3]);
+            if (roll) {
+                cal.roll(test[4], test[5]);
+            } else {
+                cal.add(test[4], test[5]);
+            }
+            if (cal.get(Calendar.EXTENDED_YEAR) != test[6] ||
+                cal.get(MONTH) != (test[7]-1) ||
+                cal.get(ChineseCalendar.IS_LEAP_MONTH) != test[8] ||
+                cal.get(DATE) != test[9]) {
+                errln("Fail: " + name + " " +
+                      ymdToString(test[0], test[1]-1, test[2], test[3])
+                      + " " + fieldName(test[4]) + " by " + test[5]
+                      + ": expected " +
+                      ymdToString(test[6], test[7]-1, test[8], test[9])
+                      + ", got " + ymdToString(cal));
+            } else if (isVerbose()) {
+                logln("OK: " + name + " " +
+                      ymdToString(test[0], test[1]-1, test[2], test[3])
+                    + " " + fieldName(test[4]) + " by " + test[5]
+                    + ": got " + ymdToString(cal));
+            }
+        }
+    }
+
+    /**
+     * Convert year,month,day values to the form "year/month/day".
+     * On input the month value is zero-based, but in the result string it is one-based.
+     */
+    static public String ymdToString(int year, int month, int isLeapMonth, int day) {
+        return "" + year + "/" + (month+1) +
+            ((isLeapMonth!=0)?"(leap)":"") +
+            "/" + day;
+    }
+
+//    public void TestFindLeapMonths() {
+//        ChineseCalendar cal = new ChineseCalendar();
+//        cal.setTime(new Date(2000-1900, Calendar.JANUARY, 1));
+//        long end = new Date(2100-1900, Calendar.JANUARY, 1).getTime();
+//        ChineseDateFormat fmt = (ChineseDateFormat) DateFormat.getInstance(cal);
+//        fmt.applyPattern("u-MMl-dd, 'Year' y, 'Cycle' G");
+//        while (cal.getTimeInMillis() < end) {
+//            if (cal.get(ChineseCalendar.IS_LEAP_MONTH) != 0) {
+//                cal.set(Calendar.DAY_OF_MONTH, 1);
+//                logln(cal.getTime() + " = " + fmt.format(cal.getTime()));
+//                cal.set(Calendar.DAY_OF_MONTH, 29);
+//            }
+//            cal.add(Calendar.DAY_OF_YEAR, 25);
+//        }
+//    }
+}
diff --git a/src/com/ibm/test/calendar/ChineseTestCase.java b/src/com/ibm/test/calendar/ChineseTestCase.java
new file mode 100755
index 0000000..8185dae
--- /dev/null
+++ b/src/com/ibm/test/calendar/ChineseTestCase.java
@@ -0,0 +1,48 @@
+
+package com.ibm.test.calendar;
+import com.ibm.util.*;
+import java.util.Date;
+
+public class ChineseTestCase extends TestCase {
+
+    /**
+     * Initialize an object using a Julian day number and
+     * the corresponding fields for the calendar being tested.
+     *
+     * @param era the ERA field of tested calendar on the given Julian
+     * day
+     * @param year the YEAR field of tested calendar on the given
+     * Julian day
+     * @param month the MONTH (1-based) field of tested calendar on
+     * the given Julian day
+     * @param isLeapMonth if true, treat month as a leap month
+     * @param dayOfMonth the DAY_OF_MONTH field of tested calendar on the
+     * given Julian day
+     * @param dayOfWeek the DAY_OF_WEEK field of tested calendar on given
+     * Julian day
+     */
+    public ChineseTestCase(double julian,
+                           int era, int year, int month,
+                           boolean isLeapMonth, int dayOfMonth, int dayOfWeek) {
+
+        setTime(new Date(JULIAN_EPOCH + (long)(ONE_DAY * julian)));
+        
+        set(Calendar.ERA, era);
+        set(Calendar.YEAR, year);
+        set(Calendar.MONTH, month - 1);
+        set(ChineseCalendar.IS_LEAP_MONTH, isLeapMonth?1:0);
+        set(Calendar.DAY_OF_MONTH, dayOfMonth);
+        set(Calendar.DAY_OF_WEEK, dayOfWeek);
+    }
+
+    /**
+     * Return a String representation of this test case's time.
+     */
+    public String toString() {
+        return dowToString(get(Calendar.DAY_OF_WEEK)) +
+            get(Calendar.YEAR) + "of" + get(Calendar.ERA) +
+            "/" + (get(Calendar.MONTH)+1) +
+            (get(ChineseCalendar.IS_LEAP_MONTH)==1?"(leap)":"") + "/" +
+            get(Calendar.DAY_OF_MONTH);
+    }
+}
diff --git a/src/com/ibm/test/calendar/CompatibilityTest.java b/src/com/ibm/test/calendar/CompatibilityTest.java
new file mode 100755
index 0000000..ecbba8a
--- /dev/null
+++ b/src/com/ibm/test/calendar/CompatibilityTest.java
@@ -0,0 +1,1020 @@
+/**
+ * @test 1.13 99/11/14
+ * @bug 4064654
+ * @summary test for Calendar
+ */
+
+package com.ibm.test.calendar;
+import com.ibm.util.*;
+import java.util.Date;
+import java.util.Locale;
+import java.text.*;
+import java.io.*;
+
+public class CompatibilityTest extends com.ibm.test.TestFmwk {
+
+    public static void main(String argv[]) throws Exception {
+        new CompatibilityTest().run(argv);
+    }
+
+    static final String[] FIELD_NAME = {
+        "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH",
+        "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK",
+        "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", "HOUR_OF_DAY",
+        "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",
+        "DST_OFFSET", "YEAR_WOY", "DOW_LOCAL", "EXTENDED_YEAR",
+        "JULIAN_DAY", "MILLISECONDS_IN_DAY",
+    };
+
+    /**
+     * Test the behavior of the GregorianCalendar around the changeover.
+     */
+    public void TestGregorianChangeover() {
+        Date co = new Date(1582-1900, Calendar.OCTOBER, 15);
+        final int ONE_DAY = 24*60*60*1000;
+        GregorianCalendar cal = new GregorianCalendar();
+        /*
+          Changeover -7 days: 1582/9/28 dow=6
+          Changeover -6 days: 1582/9/29 dow=7
+          Changeover -5 days: 1582/9/30 dow=1
+          Changeover -4 days: 1582/10/1 dow=2
+          Changeover -3 days: 1582/10/2 dow=3
+          Changeover -2 days: 1582/10/3 dow=4
+          Changeover -1 days: 1582/10/4 dow=5
+          Changeover +0 days: 1582/10/15 dow=6
+          Changeover +1 days: 1582/10/16 dow=7
+          Changeover +2 days: 1582/10/17 dow=1
+          Changeover +3 days: 1582/10/18 dow=2
+          Changeover +4 days: 1582/10/19 dow=3
+          Changeover +5 days: 1582/10/20 dow=4
+          Changeover +6 days: 1582/10/21 dow=5
+          Changeover +7 days: 1582/10/22 dow=6
+          */
+        int MON[] = {  9,  9,  9,10,10,10,10, 10, 10, 10, 10, 10, 10, 10, 10 };
+        int DOM[] = { 28, 29, 30, 1, 2, 3, 4, 15, 16, 17, 18, 19, 20, 21, 22 };
+        int DOW[] = {  6,  7,  1, 2, 3, 4, 5,  6,  7,  1,  2,  3,  4,  5,  6 };
+        //                                     ^ <-Changeover Fri Oct 15 1582
+        int j=0;
+        for (int i=-7; i<=7; ++i, ++j) {
+            Date d = new Date(co.getTime() + i*ONE_DAY);
+            cal.setTime(d);
+            int y = cal.get(Calendar.YEAR), mon = cal.get(Calendar.MONTH)+1-Calendar.JANUARY,
+                dom = cal.get(Calendar.DATE), dow = cal.get(Calendar.DAY_OF_WEEK);
+            logln("Changeover " + (i>=0?"+":"") +
+                  i + " days: " + y + "/" + mon + "/" + dom + " dow=" + dow);
+            if (y != 1582 || mon != MON[j] || dom != DOM[j] || dow != DOW[j])
+                errln(" Fail: Above line is wrong");
+        }
+    }
+
+    /**
+     * Test the mapping between millis and fields.  For the purposes
+     * of this test, we don't care about timezones and week data
+     * (first day of week, minimal days in first week).
+     */
+    public void TestMapping() {
+        if (false) {
+            Date PURE_GREGORIAN = new Date(Long.MIN_VALUE);
+            Date PURE_JULIAN = new Date(Long.MAX_VALUE);
+            GregorianCalendar cal =
+                new GregorianCalendar(TimeZone.getTimeZone("UTC"));
+            final int EPOCH_JULIAN = 2440588;
+            final long ONE_DAY = 24*60*60*1000L;
+            com.ibm.text.SimpleDateFormat fmt =
+                new com.ibm.text.SimpleDateFormat("EEE MMM dd yyyy G");
+                /*HH:mm:ss.SSS z*/
+
+            for (int type=0; type<2; ++type) {
+                System.out.println(type==0 ? "Gregorian" : "Julian");
+                cal.setGregorianChange(type==0 ? PURE_GREGORIAN : PURE_JULIAN);
+                fmt.setCalendar(cal);
+                int[] J = {
+                    0x7FFFFFFF,
+                    0x7FFFFFF0,
+                    0x7F000000,
+                    0x78000000,
+                    0x70000000,
+                    0x60000000,
+                    0x50000000,
+                    0x40000000,
+                    0x30000000,
+                    0x20000000,
+                    0x10000000,
+                };
+                for (int i=0; i<J.length; ++i) {
+                    String[] lim = new String[2];
+                    long[] ms = new long[2];
+                    int jd = J[i];
+                    for (int sign=0; sign<2; ++sign) {
+                        int julian = jd;
+                        if (sign==0) julian = -julian;
+                        long millis = ((long)julian - EPOCH_JULIAN) * ONE_DAY;
+                        ms[sign] = millis;
+                        cal.setTime(new Date(millis));
+                        lim[sign] = fmt.format(cal.getTime());
+                    }
+                    System.out.println("JD +/-" +
+                                       Long.toString(jd, 16) +
+                                       ": " + ms[0] + ".." + ms[1] +
+                                       ": " + lim[0] + ".." + lim[1]);
+                }
+            }
+        }
+
+        TimeZone saveZone = TimeZone.getDefault();
+        try {
+            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+            //NEWCAL
+            Date PURE_GREGORIAN = new Date(Long.MIN_VALUE);
+            Date PURE_JULIAN = new Date(Long.MAX_VALUE);
+            GregorianCalendar cal = new GregorianCalendar();
+            final int EPOCH_JULIAN = 2440588;
+            final long ONE_DAY = 24*60*60*1000L;
+            int[] DATA = {
+                // Julian#   Year  Month               DOM   JULIAN:Year, Month,       DOM
+                2440588,     1970, Calendar.JANUARY,   1,    1969, Calendar.DECEMBER,  19, 
+                2415080,     1900, Calendar.MARCH,     1,    1900, Calendar.FEBRUARY,  17,
+                2451604,     2000, Calendar.FEBRUARY,  29,   2000, Calendar.FEBRUARY,  16,
+                2452269,     2001, Calendar.DECEMBER,  25,   2001, Calendar.DECEMBER,  12,
+                2416526,     1904, Calendar.FEBRUARY,  15,   1904, Calendar.FEBRUARY,  2,
+                2416656,     1904, Calendar.JUNE,      24,   1904, Calendar.JUNE,      11,
+                1721426,        1, Calendar.JANUARY,   1,       1, Calendar.JANUARY,   3,
+                2000000,      763, Calendar.SEPTEMBER, 18,    763, Calendar.SEPTEMBER, 14,
+                4000000,     6239, Calendar.JULY,      12,   6239, Calendar.MAY,       28,
+                8000000,    17191, Calendar.FEBRUARY,  26,  17190, Calendar.OCTOBER,   22,
+                10000000,   22666, Calendar.DECEMBER,  20,  22666, Calendar.JULY,      5,
+            };
+            for (int i=0; i<DATA.length; i+=7) {
+                int julian = DATA[i];
+                int year = DATA[i+1];
+                int month = DATA[i+2];
+                int dom = DATA[i+3];
+                int year2, month2, dom2;
+                long millis = (julian - EPOCH_JULIAN) * ONE_DAY;
+                String s;
+
+                // Test Gregorian computation
+                cal.setGregorianChange(PURE_GREGORIAN);
+                cal.clear();
+                cal.set(year, month, dom);
+                long calMillis = cal.getTime().getTime();
+                long delta = calMillis - millis;
+                cal.setTime(new Date(millis));
+                year2 = cal.get(Calendar.YEAR);
+                month2 = cal.get(Calendar.MONTH);
+                dom2 = cal.get(Calendar.DAY_OF_MONTH);
+                s = "G " + year + "-" + (month+1-Calendar.JANUARY) + "-" + dom +
+                    " => " + calMillis +
+                    " (" + ((float)delta/ONE_DAY) + " day delta) => " +
+                    year2 + "-" + (month2+1-Calendar.JANUARY) + "-" + dom2;
+                if (delta != 0 || year != year2 || month != month2 ||
+                    dom != dom2) errln(s + " FAIL");
+                else logln(s);
+                
+                // Test Julian computation
+                year = DATA[i+4];
+                month = DATA[i+5];
+                dom = DATA[i+6];
+                cal.setGregorianChange(PURE_JULIAN);
+                cal.clear();
+                cal.set(year, month, dom);
+                calMillis = cal.getTime().getTime();
+                delta = calMillis - millis;
+                cal.setTime(new Date(millis));
+                year2 = cal.get(Calendar.YEAR);
+                month2 = cal.get(Calendar.MONTH);
+                dom2 = cal.get(Calendar.DAY_OF_MONTH);
+                s = "J " + year + "-" + (month+1-Calendar.JANUARY) + "-" + dom +
+                    " => " + calMillis +
+                    " (" + ((float)delta/ONE_DAY) + " day delta) => " +
+                    year2 + "-" + (month2+1-Calendar.JANUARY) + "-" + dom2;
+                if (delta != 0 || year != year2 || month != month2 ||
+                    dom != dom2) errln(s + " FAIL");
+                else logln(s);
+            }
+
+            cal.setGregorianChange(new Date(1582-1900, Calendar.OCTOBER, 15));
+            auxMapping(cal, 1582, Calendar.OCTOBER, 4);
+            auxMapping(cal, 1582, Calendar.OCTOBER, 15);
+            auxMapping(cal, 1582, Calendar.OCTOBER, 16);
+            for (int y=800; y<3000; y+=1+(int)100*Math.random()) {
+                for (int m=Calendar.JANUARY; m<=Calendar.DECEMBER; ++m) {
+                    auxMapping(cal, y, m, 15);
+                }
+            }
+        }
+        finally {
+            TimeZone.setDefault(saveZone);
+        }
+    }
+    private void auxMapping(Calendar cal, int y, int m, int d) {
+        cal.clear();
+        cal.set(y, m, d);
+        long millis = cal.getTime().getTime();
+        cal.setTime(new Date(millis));
+        int year2 = cal.get(Calendar.YEAR);
+        int month2 = cal.get(Calendar.MONTH);
+        int dom2 = cal.get(Calendar.DAY_OF_MONTH);
+        if (y != year2 || m != month2 || dom2 != d)
+            errln("Round-trip failure: " + y + "-" + (m+1) + "-"+d+" =>ms=> " +
+                  year2 + "-" + (month2+1) + "-" + dom2);
+    }
+
+    public void TestGenericAPI() {
+        String str;
+
+        Date when = new Date(90, Calendar.APRIL, 15);
+
+        String tzid = "TestZone";
+        int tzoffset = 123400;
+
+        SimpleTimeZone zone = new SimpleTimeZone(tzoffset, tzid);
+        Calendar cal = (Calendar)Calendar.getInstance((SimpleTimeZone)zone.clone());
+
+        if (!zone.equals(cal.getTimeZone())) errln("FAIL: Calendar.getTimeZone failed");
+
+        Calendar cal2 = Calendar.getInstance(cal.getTimeZone());
+
+        cal.setTime(when);
+        cal2.setTime(when);
+
+        if (!(cal.equals(cal2))) errln("FAIL: Calendar.operator== failed");
+        // if ((*cal != *cal2))  errln("FAIL: Calendar.operator!= failed");
+        if (!cal.equals(cal2) ||
+            cal.before(cal2) ||
+            cal.after(cal2)) errln("FAIL: equals/before/after failed");
+
+        cal2.setTime(new Date(when.getTime() + 1000));
+        if (cal.equals(cal2) ||
+            cal2.before(cal) ||
+            cal.after(cal2)) errln("FAIL: equals/before/after failed");
+
+        cal.roll(Calendar.SECOND, true);
+        if (!cal.equals(cal2) ||
+            cal.before(cal2) ||
+            cal.after(cal2)) errln("FAIL: equals/before/after failed");
+
+        // Roll back to January
+        cal.roll(Calendar.MONTH, (int)(1 + Calendar.DECEMBER - cal.get(Calendar.MONTH)));
+        if (cal.equals(cal2) ||
+            cal2.before(cal) ||
+            cal.after(cal2)) errln("FAIL: equals/before/after failed");
+
+        // C++ only
+        /* TimeZone z = cal.orphanTimeZone();
+           if (z.getID(str) != tzid ||
+           z.getRawOffset() != tzoffset)
+           errln("FAIL: orphanTimeZone failed");
+           */
+
+        for (int i=0; i<2; ++i) {
+            boolean lenient = ( i > 0 );
+            cal.setLenient(lenient);
+            if (lenient != cal.isLenient()) errln("FAIL: setLenient/isLenient failed");
+            // Later: Check for lenient behavior
+        }
+
+        int i;
+        for (i=Calendar.SUNDAY; i<=Calendar.SATURDAY; ++i) {
+            cal.setFirstDayOfWeek(i);
+            if (cal.getFirstDayOfWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed");
+        }
+
+        for (i=0; i<=7; ++i) {
+            cal.setMinimalDaysInFirstWeek(i);
+            if (cal.getMinimalDaysInFirstWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed");
+        }
+
+        for (i=0; i<cal.getFieldCount(); ++i) {
+            if (cal.getMinimum(i) != cal.getGreatestMinimum(i))
+                errln("FAIL: getMinimum doesn't match getGreatestMinimum for field " + i);
+            if (cal.getLeastMaximum(i) > cal.getMaximum(i))
+                errln("FAIL: getLeastMaximum larger than getMaximum for field " + i);
+            if (cal.getMinimum(i) >= cal.getMaximum(i))
+                errln("FAIL: getMinimum not less than getMaximum for field " + i);
+        }
+
+        cal.setTimeZone(TimeZone.getDefault());
+        cal.clear();
+        cal.set(1984, 5, 24);
+        if (cal.getTime().getTime() != new Date(84, 5, 24).getTime()) {
+            errln("FAIL: Calendar.set(3 args) failed");
+            logln(" Got: " + cal.getTime() + "  Expected: " + new Date(84, 5, 24));
+        }
+
+        cal.clear();
+        cal.set(1985, 3, 2, 11, 49);
+        if (cal.getTime().getTime() != new Date(85, 3, 2, 11, 49).getTime()) {
+            errln("FAIL: Calendar.set(5 args) failed");
+            logln(" Got: " + cal.getTime() + "  Expected: " + new Date(85, 3, 2, 11, 49));
+        }
+
+        cal.clear();
+        cal.set(1995, 9, 12, 1, 39, 55);
+        if (cal.getTime().getTime() != new Date(95, 9, 12, 1, 39, 55).getTime()) {
+            errln("FAIL: Calendar.set(6 args) failed");
+            logln(" Got: " + cal.getTime() + "  Expected: " + new Date(95, 9, 12, 1, 39, 55));
+        }
+
+        cal.getTime();
+        // This test is strange -- why do we expect certain fields to be set, and
+        // others not to be?  Revisit the appropriateness of this.  - Alan NEWCAL
+        for (i=0; i<cal.getFieldCount(); ++i) {
+            switch(i) {
+            case Calendar.YEAR: case Calendar.MONTH: case Calendar.DATE:
+            case Calendar.HOUR_OF_DAY: case Calendar.MINUTE: case Calendar.SECOND:
+            case Calendar.EXTENDED_YEAR:
+                if (!cal.isSet(i)) errln("FAIL: " + FIELD_NAME[i] + " is not set");
+                break;
+            default:
+                if (cal.isSet(i)) errln("FAIL: " + FIELD_NAME[i] + " is set");
+            }
+            cal.clear(i);
+            if (cal.isSet(i)) errln("FAIL: Calendar.clear/isSet failed");
+        }
+
+        // delete cal;
+        // delete cal2;
+
+        Locale[] loc = Calendar.getAvailableLocales();
+        long count = loc.length;
+        if (count < 1 || loc == null) {
+            errln("FAIL: getAvailableLocales failed");
+        }
+        else {
+            for (i=0; i<count; ++i) {
+                cal = Calendar.getInstance(loc[i]);
+                // delete cal;
+            }
+        }
+
+        cal = Calendar.getInstance(TimeZone.getDefault(), Locale.ENGLISH);
+        // delete cal;
+
+        cal = Calendar.getInstance(zone, Locale.ENGLISH);
+        // delete cal;
+
+        GregorianCalendar gc = new GregorianCalendar(zone);
+        // delete gc;
+
+        gc = new GregorianCalendar(Locale.ENGLISH);
+        // delete gc;
+
+        gc = new GregorianCalendar(Locale.ENGLISH);
+        // delete gc;
+
+        gc = new GregorianCalendar(zone, Locale.ENGLISH);
+        // delete gc;
+
+        gc = new GregorianCalendar(zone);
+        // delete gc;
+
+        gc = new GregorianCalendar(1998, 10, 14, 21, 43);
+        if (gc.getTime().getTime() != new Date(98, 10, 14, 21, 43).getTime())
+            errln("FAIL: new GregorianCalendar(ymdhm) failed");
+        // delete gc;
+
+        gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55);
+        if (gc.getTime().getTime() != new Date(98, 10, 14, 21, 43, 55).getTime())
+            errln("FAIL: new GregorianCalendar(ymdhms) failed");
+
+        // C++ only:
+        // GregorianCalendar gc2 = new GregorianCalendar(Locale.ENGLISH);
+        // gc2 = gc;
+        // if (gc2 != gc || !(gc2 == gc)) errln("FAIL: GregorianCalendar assignment/operator==/operator!= failed");
+        // delete gc;
+        // delete z;
+    }
+
+    // Verify Roger Webster's bug
+    public void TestRog() {
+        GregorianCalendar gc = new GregorianCalendar();
+
+        int year = 1997, month = Calendar.APRIL, date = 1;
+        gc.set(year, month, date); // April 1, 1997
+
+        gc.set(Calendar.HOUR_OF_DAY, 23);
+        gc.set(Calendar.MINUTE, 0);
+        gc.set(Calendar.SECOND, 0);
+        gc.set(Calendar.MILLISECOND, 0);
+
+        for (int i = 0; i < 9; i++, gc.add(Calendar.DATE, 1)) {
+            if (gc.get(Calendar.YEAR) != year ||
+                gc.get(Calendar.MONTH) != month ||
+                gc.get(Calendar.DATE) != (date + i))
+                errln("FAIL: Date " + gc.getTime() + " wrong");
+        }
+    }
+
+    // Verify DAY_OF_WEEK
+    public void TestDOW943() {
+        dowTest(false);
+        dowTest(true);
+    }
+
+    void dowTest(boolean lenient) {
+        GregorianCalendar cal = new GregorianCalendar();
+        cal.set(1997, Calendar.AUGUST, 12); // Wednesday
+        cal.getTime(); // Force update
+        cal.setLenient(lenient);
+        cal.set(1996, Calendar.DECEMBER, 1); // Set the date to be December 1, 1996
+        int dow = cal.get(Calendar.DAY_OF_WEEK);
+        int min = cal.getMinimum(Calendar.DAY_OF_WEEK);
+        int max = cal.getMaximum(Calendar.DAY_OF_WEEK);
+        if (dow < min || dow > max) errln("FAIL: Day of week " + dow + " out of range");
+        if (dow != Calendar.SUNDAY) {
+            errln("FAIL2: Day of week should be SUNDAY; is " + dow + ": " + cal.getTime());
+        }
+        if (min != Calendar.SUNDAY || max != Calendar.SATURDAY) errln("FAIL: Min/max bad");
+    }
+
+    // Verify that the clone method produces distinct objects with no
+    // unintentionally shared fields.
+    public void TestClonesUnique908() {
+        Calendar c = Calendar.getInstance();
+        Calendar d = (Calendar)c.clone();
+        c.set(Calendar.MILLISECOND, 123);
+        d.set(Calendar.MILLISECOND, 456);
+        if (c.get(Calendar.MILLISECOND) != 123 ||
+            d.get(Calendar.MILLISECOND) != 456) {
+            errln("FAIL: Clones share fields");
+        }
+    }
+
+    // Verify effect of Gregorian cutoff value
+    public void TestGregorianChange768() {
+        boolean b;
+        GregorianCalendar c = new GregorianCalendar();
+        logln("With cutoff " + c.getGregorianChange());
+        logln(" isLeapYear(1800) = " + (b=c.isLeapYear(1800)));
+        logln(" (should be FALSE)");
+        if (b != false) errln("FAIL");
+        c.setGregorianChange(new Date(0, 0, 1)); // Jan 1 1900
+        logln("With cutoff " + c.getGregorianChange());
+        logln(" isLeapYear(1800) = " + (b=c.isLeapYear(1800)));
+        logln(" (should be TRUE)");
+        if (b != true) errln("FAIL");
+    }
+
+    // Test the correct behavior of the disambiguation algorithm.
+    public void TestDisambiguation765() throws Exception {
+        Calendar c = Calendar.getInstance();
+        c.setLenient(false);
+
+        c.clear();
+        c.set(Calendar.YEAR, 1997);
+        c.set(Calendar.MONTH, Calendar.JUNE);
+        c.set(Calendar.DATE, 3);
+
+        verify765("1997 third day of June = ", c, 1997, Calendar.JUNE, 3);
+
+        c.clear();
+        c.set(Calendar.YEAR, 1997);
+        c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+        c.set(Calendar.MONTH, Calendar.JUNE);
+        c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
+        verify765("1997 first Tuesday in June = ", c, 1997, Calendar.JUNE, 3);
+
+        c.clear();
+        c.set(Calendar.YEAR, 1997);
+        c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+        c.set(Calendar.MONTH, Calendar.JUNE);
+        c.set(Calendar.DAY_OF_WEEK_IN_MONTH, -1);
+        verify765("1997 last Tuesday in June = ", c, 1997, Calendar.JUNE, 24);
+
+        IllegalArgumentException e = null;
+        try {
+            c.clear();
+            c.set(Calendar.YEAR, 1997);
+            c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+            c.set(Calendar.MONTH, Calendar.JUNE);
+            c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 0);
+            c.getTime();
+        }
+        catch (IllegalArgumentException ex) {
+            e = ex;
+        }
+        verify765("1997 zero-th Tuesday in June = ", e, c);
+
+        c.clear();
+        c.set(Calendar.YEAR, 1997);
+        c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+        c.set(Calendar.MONTH, Calendar.JUNE);
+        c.set(Calendar.WEEK_OF_MONTH, 1);
+        verify765("1997 Tuesday in week 1 of June = ", c, 1997, Calendar.JUNE, 3);
+
+        c.clear();
+        c.set(Calendar.YEAR, 1997);
+        c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+        c.set(Calendar.MONTH, Calendar.JUNE);
+        c.set(Calendar.WEEK_OF_MONTH, 5);
+        verify765("1997 Tuesday in week 5 of June = ", c, 1997, Calendar.JULY, 1);
+
+        try {
+            c.clear();
+            c.set(Calendar.YEAR, 1997);
+            c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+            c.set(Calendar.MONTH, Calendar.JUNE);
+            c.set(Calendar.WEEK_OF_MONTH, 0);
+            verify765("1997 Tuesday in week 0 of June = ", c, 1997, Calendar.MAY, 27);
+        }
+        catch (IllegalArgumentException ex) {
+            errln("FAIL: Exception seen:");
+            // ex.printStackTrace(log);
+        }
+
+        c.clear();
+        c.set(Calendar.YEAR, 1997);
+        c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+        c.set(Calendar.WEEK_OF_YEAR, 1);
+        verify765("1997 Tuesday in week 1 of year = ", c, 1996, Calendar.DECEMBER, 31);
+
+        c.clear();
+        c.set(Calendar.YEAR, 1997);
+        c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+        c.set(Calendar.WEEK_OF_YEAR, 10);
+        verify765("1997 Tuesday in week 10 of year = ", c, 1997, Calendar.MARCH, 4);
+
+        try {
+            c.clear();
+            c.set(Calendar.YEAR, 1997);
+            c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
+            c.set(Calendar.WEEK_OF_YEAR, 0);
+            verify765("1997 Tuesday in week 0 of year = ", c, 1996, Calendar.DECEMBER, 24);
+            throw new Exception("Fail: WEEK_OF_YEAR 0 should be illegal");
+        }
+        catch (IllegalArgumentException ex) {}
+    }
+    void verify765(String msg, Calendar c, int year, int month, int day) {
+        int cy = c.get(Calendar.YEAR); // NEWCAL
+        int cm = c.get(Calendar.MONTH);
+        int cd = c.get(Calendar.DATE);
+        if (cy == year &&
+            cm == month &&
+            cd == day) {
+            logln("PASS: " + msg + c.getTime());
+        }
+        else {
+            errln("FAIL: " + msg + cy + "/" + (cm+1) + "/" + cd +
+                  "=" + c.getTime() +
+                  "; expected " +
+                  year + "/" + (month+1) + "/" + day);
+        }
+    }
+    // Called when e expected to be non-null
+    void verify765(String msg, IllegalArgumentException e, Calendar c) {
+        if (e == null) errln("FAIL: No IllegalArgumentException for " + msg +
+                             c.getTime());
+        else logln("PASS: " + msg + "IllegalArgument as expected");
+    }
+
+    // Test the behavior of GMT vs. local time
+    public void TestGMTvsLocal4064654() {
+        // Sample output 1:
+        // % /usr/local/java/jdk1.1.3/solaris/bin/java test 1997 1 1 12 0 0
+        // date = Wed Jan 01 04:00:00 PST 1997
+        // offset for Wed Jan 01 04:00:00 PST 1997= -8hr
+        aux4064654(1997, 1, 1, 12, 0, 0);
+
+        // Sample output 2:
+        // % /usr/local/java/jdk1.1.3/solaris/bin/java test 1997 4 16 18 30 0
+        // date = Wed Apr 16 10:30:00 PDT 1997
+        // offset for Wed Apr 16 10:30:00 PDT 1997= -7hr
+
+        // Note that in sample output 2 according to the offset, the gmt time
+        // of the result would be 1997 4 16 17 30 0 which is different from the
+        // input of 1997 4 16 18 30 0.
+        aux4064654(1997, 4, 16, 18, 30, 0);
+    }
+    void aux4064654(int yr, int mo, int dt, int hr, int mn, int sc) {
+        Date date;
+        Calendar gmtcal = Calendar.getInstance();
+        gmtcal.setTimeZone(TimeZone.getTimeZone("Africa/Casablanca"));
+        gmtcal.set(yr, mo-1, dt, hr, mn, sc);
+        gmtcal.set(Calendar.MILLISECOND, 0);
+
+        date = gmtcal.getTime();
+        logln("date = "+date);
+
+        Calendar cal = Calendar.getInstance();
+	cal.setTimeZone(TimeZone.getTimeZone("America/Los_Angels"));
+        cal.setTime(date);
+
+        int offset = cal.getTimeZone().getOffset(cal.get(Calendar.ERA),
+                                                 cal.get(Calendar.YEAR),
+                                                 cal.get(Calendar.MONTH),
+                                                 cal.get(Calendar.DATE),
+                                                 cal.get(Calendar.DAY_OF_WEEK),
+                                                 cal.get(Calendar.MILLISECOND));
+
+        logln("offset for "+date+"= "+(offset/1000/60/60.0) + "hr");
+
+        int utc = ((cal.get(Calendar.HOUR_OF_DAY) * 60 +
+                    cal.get(Calendar.MINUTE)) * 60 +
+                   cal.get(Calendar.SECOND)) * 1000 +
+            cal.get(Calendar.MILLISECOND) - offset;
+
+        int expected = ((hr * 60 + mn) * 60 + sc) * 1000;
+
+        if (utc != expected)
+            errln("FAIL: Discrepancy of " +
+                  (utc - expected) + " millis = " +
+                  ((utc-expected)/1000/60/60.0) + " hr");
+    }
+
+    // Verify that add and set work regardless of the order in which
+    // they are called.
+    public void TestAddSetOrder621() {
+        Date d = new Date(97, 4, 14, 13, 23, 45);
+
+        Calendar cal = Calendar.getInstance ();
+        cal.setTime (d);
+        cal.add (Calendar.DATE, -5);
+        cal.set (Calendar.HOUR_OF_DAY, 0);
+        cal.set (Calendar.MINUTE, 0);
+        cal.set (Calendar.SECOND, 0);
+        // ma feb 03 00:00:00 GMT+00:00 1997
+        String s = cal.getTime ().toString ();
+
+        cal = Calendar.getInstance ();
+        cal.setTime (d);
+        cal.set (Calendar.HOUR_OF_DAY, 0);
+        cal.set (Calendar.MINUTE, 0);
+        cal.set (Calendar.SECOND, 0);
+        cal.add (Calendar.DATE, -5);
+        // ma feb 03 13:11:06 GMT+00:00 1997
+        String s2 = cal.getTime ().toString ();
+
+        if (s.equals(s2))
+            logln("Pass: " + s + " == " + s2);
+        else
+            errln("FAIL: " + s + " != " + s2);
+    }
+
+    // Verify that add works.
+    public void TestAdd520() {
+        int y = 1997, m = Calendar.FEBRUARY, d = 1;
+        GregorianCalendar temp = new GregorianCalendar( y, m, d );
+        check520(temp, y, m, d);
+
+        temp.add( temp.YEAR, 1 );
+        y++;
+        check520(temp, y, m, d);
+
+        temp.add( temp.MONTH, 1 );
+        m++;
+        check520(temp, y, m, d);
+
+        temp.add( temp.DATE, 1 );
+        d++;
+        check520(temp, y, m, d);
+
+        temp.add( temp.DATE, 2 );
+        d += 2;
+        check520(temp, y, m, d);
+
+        temp.add( temp.DATE, 28 );
+        d = 1; ++m;
+        check520(temp, y, m, d);
+    }
+    void check520(Calendar c, int y, int m, int d) {
+        if (c.get(Calendar.YEAR) != y ||
+            c.get(Calendar.MONTH) != m ||
+            c.get(Calendar.DATE) != d) {
+            errln("FAILURE: Expected YEAR/MONTH/DATE of " +
+                  y + "/" + (m+1) + "/" + d +
+                  "; got " +
+                  c.get(Calendar.YEAR) + "/" +
+                  (c.get(Calendar.MONTH)+1) + "/" +
+                  c.get(Calendar.DATE));
+        }
+        else logln("Confirmed: " +
+                   y + "/" + (m+1) + "/" + d);
+    }
+
+    // Verify that setting fields works.  This test fails when an exception is thrown.
+    public void TestFieldSet4781() {
+        try {
+            GregorianCalendar g = new GregorianCalendar();
+            GregorianCalendar g2 = new GregorianCalendar();
+            // At this point UTC value is set, various fields are not.
+            // Now set to noon.
+            g2.set(Calendar.HOUR, 12);
+            g2.set(Calendar.MINUTE, 0);
+            g2.set(Calendar.SECOND, 0);
+            // At this point the object thinks UTC is NOT set, but fields are set.
+            // The following line will result in IllegalArgumentException because
+            // it thinks the YEAR is set and it is NOT.
+            if (g2.equals(g))
+                logln("Same");
+            else
+                logln("Different");
+        }
+        catch (IllegalArgumentException e) {
+            errln("Unexpected exception seen: " + e);
+        }
+    }
+
+    // Test serialization of a Calendar object
+    public void TestSerialize337() {
+        Calendar cal = Calendar.getInstance();
+
+        boolean ok = false;
+
+        try {
+            FileOutputStream f = new FileOutputStream(FILENAME);
+            ObjectOutput s = new ObjectOutputStream(f);
+            s.writeObject(PREFIX);
+            s.writeObject(cal);
+            s.writeObject(POSTFIX);
+            f.close();
+
+            FileInputStream in = new FileInputStream(FILENAME);
+            ObjectInputStream t = new ObjectInputStream(in);
+            String pre = (String)t.readObject();
+            Calendar c = (Calendar)t.readObject();
+            String post = (String)t.readObject();
+            in.close();
+
+            ok = pre.equals(PREFIX) &&
+                post.equals(POSTFIX) &&
+                cal.equals(c);
+
+            File fl = new File(FILENAME);
+            fl.delete();
+        }
+        catch (IOException e) {
+            errln("FAIL: Exception received:");
+            // e.printStackTrace(log);
+        }
+        catch (ClassNotFoundException e) {
+            errln("FAIL: Exception received:");
+            // e.printStackTrace(log);
+        }
+
+        if (!ok) errln("Serialization of Calendar object failed.");
+    }
+    static final String PREFIX = "abc";
+    static final String POSTFIX = "def";
+    static final String FILENAME = "tmp337.bin";
+
+    // Try to zero out the seconds field
+    public void TestSecondsZero121() {
+        Calendar        cal = new GregorianCalendar();
+        // Initialize with current date/time
+        cal.setTime(new Date());
+        // Round down to minute
+        cal.set(Calendar.SECOND, 0);
+        Date    d = cal.getTime();
+        String s = d.toString();
+        if (s.indexOf(":00 ") < 0) errln("Expected to see :00 in " + s);
+    }
+
+    // Try various sequences of add, set, and get method calls.
+    public void TestAddSetGet0610() {
+        //
+        // Error case 1:
+        // - Upon initialization calendar fields, millis = System.currentTime
+        // - After set is called fields are initialized, time is not
+        // - Addition uses millis which are still *now*
+        //
+        {
+            Calendar calendar = new GregorianCalendar( ) ;
+            calendar.set( 1993, Calendar.JANUARY, 4 ) ;
+            logln( "1A) " + value( calendar ) ) ;
+            calendar.add( Calendar.DATE, 1 ) ;
+            String v = value(calendar);
+            logln( "1B) " + v );
+            logln( "--) 1993/0/5" ) ;
+            if (!v.equals(EXPECTED_0610)) errln("Expected " + EXPECTED_0610 +
+                                                "; saw " + v);
+        }
+
+        //
+        // Error case 2:
+        // - Upon initialization calendar fields set, millis = 0
+        // - Addition uses millis which are still 1970, 0, 1
+        //
+
+        {
+            Calendar calendar = new GregorianCalendar( 1993, Calendar.JANUARY, 4 ) ;
+            logln( "2A) " + value( calendar ) ) ;
+            calendar.add( Calendar.DATE, 1 ) ;
+            String v = value(calendar);
+            logln( "2B) " + v );
+            logln( "--) 1993/0/5" ) ;
+            if (!v.equals(EXPECTED_0610)) errln("Expected " + EXPECTED_0610 +
+                                                "; saw " + v);
+        }
+
+        //
+        // Error case 3:
+        // - Upon initialization calendar fields, millis = 0
+        // - getTime( ) is called which forces the millis to be set
+        // - Addition uses millis which are correct
+        //
+
+        {
+            Calendar calendar = new GregorianCalendar( 1993, Calendar.JANUARY, 4 ) ;
+            logln( "3A) " + value( calendar ) ) ;
+            calendar.getTime( ) ;
+            calendar.add( Calendar.DATE, 1 ) ;
+            String v = value(calendar);
+            logln( "3B) " + v ) ;
+            logln( "--) 1993/0/5" ) ;
+            if (!v.equals(EXPECTED_0610)) errln("Expected " + EXPECTED_0610 +
+                                                "; saw " + v);
+        }
+    }
+    static String value( Calendar calendar ) {
+        return( calendar.get( Calendar.YEAR )  + "/" +
+                calendar.get( Calendar.MONTH ) + "/" +
+                calendar.get( Calendar.DATE ) ) ;
+    }
+    static String EXPECTED_0610 = "1993/0/5";
+
+    // Test that certain fields on a certain date are as expected.
+    public void TestFields060() {
+        int year = 1997;
+        int month = java.util.Calendar.OCTOBER;  //october
+        int dDate = 22;   //DAYOFWEEK should return 3 for Wednesday
+        GregorianCalendar calendar = null;
+
+        calendar = new GregorianCalendar( year, month, dDate);
+        for (int i=0; i<EXPECTED_FIELDS.length; ) {
+            int field = EXPECTED_FIELDS[i++];
+            int expected = EXPECTED_FIELDS[i++];
+            if (calendar.get(field) != expected) {
+                errln("Expected field " + field + " to have value " + expected +
+                      "; received " + calendar.get(field) + " instead");
+            }
+        }
+    }
+    static int EXPECTED_FIELDS[] = {
+        Calendar.YEAR, 1997,
+        Calendar.MONTH, Calendar.OCTOBER,
+        Calendar.DAY_OF_MONTH, 22,
+        Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY,
+        Calendar.DAY_OF_WEEK_IN_MONTH, 4,
+        Calendar.DAY_OF_YEAR, 295
+    };
+
+    // Verify that the fields are as expected (mostly zero) at the epoch start.
+    // Note that we adjust for the default timezone to get most things to zero.
+    public void TestEpochStartFields() {
+        TimeZone z = TimeZone.getDefault();
+        Calendar c = Calendar.getInstance();
+        Date d = new Date(-z.getRawOffset());
+        if (z.inDaylightTime(d)) {
+            logln("Warning: Skipping test because " + d +
+                  " is in DST.");
+        }
+        else {
+            c.setTime(d);
+            for (int i=0; i<Calendar.ZONE_OFFSET; ++i) {
+                if (c.get(i) != EPOCH_FIELDS[i])
+                    errln("Expected field " + i + " to have value " + EPOCH_FIELDS[i] +
+                          "; saw " + c.get(i) + " instead");
+            }
+            if (c.get(Calendar.ZONE_OFFSET) != z.getRawOffset())
+                errln("Expected field ZONE_OFFSET to have value " + z.getRawOffset() +
+                      "; saw " + c.get(Calendar.ZONE_OFFSET) + " instead");
+            if (c.get(Calendar.DST_OFFSET) != 0)
+                errln("Expected field DST_OFFSET to have value 0" +
+                      "; saw " + c.get(Calendar.DST_OFFSET) + " instead");
+        }
+    }
+    // These are the fields at the epoch start
+    static int EPOCH_FIELDS[] = { 1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, -28800000, 0 };
+
+    // Verify that as you add days to the calendar (e.g., 24 day periods),
+    // the day of the week shifts in the expected pattern.
+    public void TestDOWProgression() {
+        Calendar cal =
+            new GregorianCalendar(1972, Calendar.OCTOBER, 26);
+        marchByDelta(cal, 24); // Last parameter must be != 0 modulo 7
+    }
+
+    // Supply a delta which is not a multiple of 7.
+    void marchByDelta(Calendar cal, int delta) {
+        Calendar cur = (Calendar)cal.clone();
+        int initialDOW = cur.get(Calendar.DAY_OF_WEEK);
+        int DOW, newDOW = initialDOW;
+        do {
+            DOW = newDOW;
+            logln("DOW = " + DOW + "  " + cur.getTime());
+
+            cur.add(Calendar.DAY_OF_WEEK, delta);
+            newDOW = cur.get(Calendar.DAY_OF_WEEK);
+            int expectedDOW = 1 + (DOW + delta - 1) % 7;
+            if (newDOW != expectedDOW) {
+                errln("Day of week should be " + expectedDOW +
+                      " instead of " + newDOW + " on " + cur.getTime());
+                return;
+            }
+        }
+        while (newDOW != initialDOW);
+    }
+
+    public void TestActualMinMax() {
+        Calendar cal = new GregorianCalendar(1967, Calendar.MARCH, 10);
+        cal.setFirstDayOfWeek(Calendar.SUNDAY);
+        cal.setMinimalDaysInFirstWeek(3);
+
+        if (cal.getActualMinimum(Calendar.DAY_OF_MONTH) != 1)
+            errln("Actual minimum date for 3/10/1967 should have been 1; got " +
+                  cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+        if (cal.getActualMaximum(Calendar.DAY_OF_MONTH) != 31)
+            errln("Actual maximum date for 3/10/1967 should have been 31; got " +
+                  cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+
+        cal.set(Calendar.MONTH, Calendar.FEBRUARY);
+        if (cal.getActualMaximum(Calendar.DAY_OF_MONTH) != 28)
+            errln("Actual maximum date for 2/10/1967 should have been 28; got " +
+                  cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+        if (cal.getActualMaximum(Calendar.DAY_OF_YEAR) != 365)
+            errln("Number of days in 1967 should have been 365; got " +
+                  cal.getActualMaximum(Calendar.DAY_OF_YEAR));
+
+        cal.set(Calendar.YEAR, 1968);
+        if (cal.getActualMaximum(Calendar.DAY_OF_MONTH) != 29)
+            errln("Actual maximum date for 2/10/1968 should have been 29; got " +
+                  cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+        if (cal.getActualMaximum(Calendar.DAY_OF_YEAR) != 366)
+            errln("Number of days in 1968 should have been 366; got " +
+                  cal.getActualMaximum(Calendar.DAY_OF_YEAR));
+        // Using week settings of SUNDAY/3 (see above)
+        if (cal.getActualMaximum(Calendar.WEEK_OF_YEAR) != 52)
+            errln("Number of weeks in 1968 should have been 52; got " +
+                  cal.getActualMaximum(Calendar.WEEK_OF_YEAR));
+
+        cal.set(Calendar.YEAR, 1976);
+        cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); // Added - Liu 11/6/00
+        // Using week settings of SUNDAY/3 (see above)
+        if (cal.getActualMaximum(Calendar.WEEK_OF_YEAR) != 53)
+            errln("Number of weeks in 1976 should have been 53; got " +
+                  cal.getActualMaximum(Calendar.WEEK_OF_YEAR));
+    }
+
+    public void TestRoll() {
+        Calendar cal = new GregorianCalendar(1997, Calendar.JANUARY, 31);
+
+        int[] dayValues = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 };
+        for (int i = 0; i < dayValues.length; i++) {
+            Calendar cal2 = (Calendar)cal.clone();
+            cal2.roll(Calendar.MONTH, i);
+            if (cal2.get(Calendar.DAY_OF_MONTH) != dayValues[i])
+                errln("Rolling the month in 1/31/1997 up by " + i + " should have yielded "
+                      + ((i + 1) % 12) + "/" + dayValues[i] + "/1997, but actually yielded "
+                      + ((i + 1) % 12) + "/" + cal2.get(Calendar.DAY_OF_MONTH) + "/1997.");
+        }
+
+        cal.set(1996, Calendar.FEBRUARY, 29);
+
+        //int[] monthValues = { 1, 2, 2, 2, 1, 2, 2, 2, 1, 2 };
+        //int[] dayValues2 = { 29, 1, 1, 1, 29, 1, 1, 1, 29, 1 };
+
+        // I've revised the expected values to make more sense -- rolling
+        // the year should pin the DAY_OF_MONTH. - Liu 11/6/00
+        int[] monthValues = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+        int[] dayValues2 = { 29, 28, 28, 28, 29, 28, 28, 28, 29, 28 };
+
+        for (int i = 0; i < dayValues2.length; i++) {
+            Calendar cal2 = (Calendar)cal.clone();
+            cal2.roll(Calendar.YEAR, i);
+            if (cal2.get(Calendar.DAY_OF_MONTH) != dayValues2[i] || cal2.get(Calendar.MONTH)
+                != monthValues[i])
+                errln("Roll 2/29/1996 by " + i + " year: expected "
+                      + (monthValues[i] + 1) + "/" + dayValues2[i] + "/"
+                      + (1996 + i) + ", got "
+                      + (cal2.get(Calendar.MONTH) + 1) + "/" +
+                      cal2.get(Calendar.DAY_OF_MONTH) + "/" + cal2.get(Calendar.YEAR));
+        }
+
+        // Test rolling hour of day
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.roll(Calendar.HOUR_OF_DAY, -2);
+        int f = cal.get(Calendar.HOUR_OF_DAY);
+        if (f != 22) errln("Rolling HOUR_OF_DAY=0 delta=-2 gave " + f + " Wanted 22");
+        cal.roll(Calendar.HOUR_OF_DAY, 5);
+        f = cal.get(Calendar.HOUR_OF_DAY);
+        if (f != 3) errln("Rolling HOUR_OF_DAY=22 delta=5 gave " + f + " Wanted 3");
+        cal.roll(Calendar.HOUR_OF_DAY, 21);
+        f = cal.get(Calendar.HOUR_OF_DAY);
+        if (f != 0) errln("Rolling HOUR_OF_DAY=3 delta=21 gave " + f + " Wanted 0");
+
+        // Test rolling hour
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.roll(Calendar.HOUR, -2);
+        f = cal.get(Calendar.HOUR);
+        if (f != 10) errln("Rolling HOUR=0 delta=-2 gave " + f + " Wanted 10");
+        cal.roll(Calendar.HOUR, 5);
+        f = cal.get(Calendar.HOUR);
+        if (f != 3) errln("Rolling HOUR=10 delta=5 gave " + f + " Wanted 3");
+        cal.roll(Calendar.HOUR, 9);
+        f = cal.get(Calendar.HOUR);
+        if (f != 0) errln("Rolling HOUR=3 delta=9 gave " + f + " Wanted 0");
+    }
+}
+
+//eof
diff --git a/src/com/ibm/test/calendar/HebrewTest.java b/src/com/ibm/test/calendar/HebrewTest.java
new file mode 100755
index 0000000..93745b8
--- /dev/null
+++ b/src/com/ibm/test/calendar/HebrewTest.java
@@ -0,0 +1,314 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/HebrewTest.java,v $ 
+ * $Date: 2000/11/18 00:17:58 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.test.calendar;
+
+import com.ibm.test.*;
+import com.ibm.util.*;
+import java.util.Locale;
+
+/**
+ * Tests for the <code>HebrewCalendar</code> class.
+ */
+public class HebrewTest extends CalendarTest {
+    public static void main(String args[]) throws Exception {
+        new HebrewTest().run(args);
+    }
+
+    // Constants to save typing.
+    public static final int TISHRI  = HebrewCalendar.TISHRI;
+    public static final int HESHVAN = HebrewCalendar.HESHVAN;
+    public static final int KISLEV  = HebrewCalendar.KISLEV;
+    public static final int TEVET   = HebrewCalendar.TEVET;
+    public static final int SHEVAT  = HebrewCalendar.SHEVAT;
+    public static final int ADAR_1  = HebrewCalendar.ADAR_1;
+    public static final int ADAR    = HebrewCalendar.ADAR;
+    public static final int NISAN   = HebrewCalendar.NISAN;
+    public static final int IYAR    = HebrewCalendar.IYAR;
+    public static final int SIVAN   = HebrewCalendar.SIVAN;
+    public static final int TAMUZ   = HebrewCalendar.TAMUZ;
+    public static final int AV      = HebrewCalendar.AV;
+    public static final int ELUL    = HebrewCalendar.ELUL;
+
+    /**
+     * Test the behavior of HebrewCalendar.roll
+     * The only real nastiness with roll is the MONTH field, since a year can
+     * have a variable number of months.
+     */
+    public void TestRoll() {
+        int[][] tests = new int[][] {
+            //       input                roll by          output
+            //  year  month     day     field amount    year  month     day
+    
+            {   5759, HESHVAN,   2,     MONTH,   1,     5759, KISLEV,    2 },   // non-leap years
+            {   5759, SHEVAT,    2,     MONTH,   1,     5759, ADAR,      2 },
+            {   5759, SHEVAT,    2,     MONTH,   2,     5759, NISAN,     2 },
+            {   5759, SHEVAT,    2,     MONTH,  12,     5759, SHEVAT,    2 },
+            {   5759, AV,        1,     MONTH,  12,     5759, AV,        1 }, // Alan
+
+            {   5757, HESHVAN,   2,     MONTH,   1,     5757, KISLEV,    2 },   // leap years
+            {   5757, SHEVAT,    2,     MONTH,   1,     5757, ADAR_1,    2 },
+            {   5757, SHEVAT,    2,     MONTH,   2,     5757, ADAR,      2 },
+            {   5757, SHEVAT,    2,     MONTH,   3,     5757, NISAN,     2 },
+            {   5757, SHEVAT,    2,     MONTH,  12,     5757, TEVET,     2 },
+            {   5757, SHEVAT,    2,     MONTH,  13,     5757, SHEVAT,    2 },
+            {   5757, AV,        1,     MONTH,  12,     5757, TAMUZ,     1 }, // Alan
+            
+            {   5757, KISLEV,    1,     DATE,   30,     5757, KISLEV,    2 },   // 29-day month
+            {   5758, KISLEV,    1,     DATE,   31,     5758, KISLEV,    2 },   // 30-day month
+            
+            // Try some other fields too
+            {   5757, TISHRI,    1,     YEAR,    1,     5758, TISHRI,    1 },
+   
+
+            // Try some rolls that require other fields to be adjusted
+            {   5757, TISHRI,   30,     MONTH,   1,     5757, HESHVAN,  29 },
+            {   5758, KISLEV,   30,     YEAR,   -1,     5757, KISLEV,   29 },
+        };
+       
+        HebrewCalendar cal = new HebrewCalendar(UTC, Locale.getDefault());
+
+        doRollAdd(ROLL, cal, tests);
+    }
+    
+    /**
+     * Test the behavior of HebrewCalendar.roll
+     * The only real nastiness with roll is the MONTH field, since a year can
+     * have a variable number of months.
+     */
+    public void TestAdd() {
+        int[][] tests = new int[][] {
+            //       input                add by          output
+            //  year  month     day     field amount    year  month     day
+            {   5759, HESHVAN,   2,     MONTH,   1,     5759, KISLEV,    2 },   // non-leap years
+            {   5759, SHEVAT,    2,     MONTH,   1,     5759, ADAR,      2 },
+            {   5759, SHEVAT,    2,     MONTH,   2,     5759, NISAN,     2 },
+            {   5759, SHEVAT,    2,     MONTH,  12,     5760, SHEVAT,    2 },
+
+            {   5757, HESHVAN,   2,     MONTH,   1,     5757, KISLEV,    2 },   // leap years
+            {   5757, SHEVAT,    2,     MONTH,   1,     5757, ADAR_1,    2 },
+            {   5757, SHEVAT,    2,     MONTH,   2,     5757, ADAR,      2 },
+            {   5757, SHEVAT,    2,     MONTH,   3,     5757, NISAN,     2 },
+            {   5757, SHEVAT,    2,     MONTH,  12,     5758, TEVET,     2 },
+            {   5757, SHEVAT,    2,     MONTH,  13,     5758, SHEVAT,    2 },
+            
+            {   5757, KISLEV,    1,     DATE,   30,     5757, TEVET,     2 },   // 29-day month
+            {   5758, KISLEV,    1,     DATE,   31,     5758, TEVET,     2 },   // 30-day month
+        };
+       
+        HebrewCalendar cal = new HebrewCalendar(UTC, Locale.getDefault());
+
+        doRollAdd(ADD, cal, tests);
+    }
+
+    /**
+     * A huge list of test cases to make sure that computeTime and computeFields
+     * work properly for a wide range of data.
+     */
+    public void TestCases() {
+        doTestCases(testCases, new HebrewCalendar());
+    }
+
+    static final TestCase[] testCases = {
+        //
+        // Most of these test cases were taken from the back of
+        // "Calendrical Calculations", with some extras added to help
+        // debug a few of the problems that cropped up in development.
+        //
+        // The months in this table are 1-based rather than 0-based,
+        // because it's easier to edit that way.
+        //
+        //         Julian Day  Era  Year  Month Day  WkDay Hour Min Sec
+        new TestCase(1507231.5,  0,  3174,   12,  10,  SUN,   0,  0,  0),
+        new TestCase(1660037.5,  0,  3593,    3,  25,  WED,   0,  0,  0),
+        new TestCase(1746893.5,  0,  3831,    1,   3,  WED,   0,  0,  0),
+        new TestCase(1770641.5,  0,  3896,    1,   9,  SUN,   0,  0,  0),
+        new TestCase(1892731.5,  0,  4230,    4,  18,  WED,   0,  0,  0),
+        new TestCase(1931579.5,  0,  4336,   10,   4,  MON,   0,  0,  0),
+        new TestCase(1974851.5,  0,  4455,    2,  13,  SAT,   0,  0,  0),
+        new TestCase(2091164.5,  0,  4773,    9,   6,  SUN,   0,  0,  0),
+        new TestCase(2121509.5,  0,  4856,    9,  23,  SUN,   0,  0,  0),
+        new TestCase(2155779.5,  0,  4950,    8,   7,  FRI,   0,  0,  0),
+        new TestCase(2174029.5,  0,  5000,    7,   8,  SAT,   0,  0,  0),
+        new TestCase(2191584.5,  0,  5048,    8,  21,  FRI,   0,  0,  0),
+        new TestCase(2195261.5,  0,  5058,    9,   7,  SUN,   0,  0,  0),
+        new TestCase(2229274.5,  0,  5151,   11,   1,  SUN,   0,  0,  0),
+        new TestCase(2245580.5,  0,  5196,    5,   7,  WED,   0,  0,  0),
+        new TestCase(2266100.5,  0,  5252,    8,   3,  SAT,   0,  0,  0),
+        new TestCase(2288542.5,  0,  5314,    1,   1,  SAT,   0,  0,  0),
+        new TestCase(2290901.5,  0,  5320,    6,  27,  SAT,   0,  0,  0),
+        new TestCase(2323140.5,  0,  5408,   10,  20,  WED,   0,  0,  0),
+        new TestCase(2334551.5,  0,  5440,    1,   1,  THU,   0,  0,  0),
+        new TestCase(2334581.5,  0,  5440,    2,   1,  SAT,   0,  0,  0),
+        new TestCase(2334610.5,  0,  5440,    3,   1,  SUN,   0,  0,  0),
+        new TestCase(2334639.5,  0,  5440,    4,   1,  MON,   0,  0,  0),
+        new TestCase(2334668.5,  0,  5440,    5,   1,  TUE,   0,  0,  0),
+        new TestCase(2334698.5,  0,  5440,    6,   1,  THU,   0,  0,  0),
+        new TestCase(2334728.5,  0,  5440,    7,   1,  SAT,   0,  0,  0),
+        new TestCase(2334757.5,  0,  5440,    8,   1,  SUN,   0,  0,  0),
+        new TestCase(2334787.5,  0,  5440,    9,   1,  TUE,   0,  0,  0),
+        new TestCase(2334816.5,  0,  5440,   10,   1,  WED,   0,  0,  0),
+        new TestCase(2334846.5,  0,  5440,   11,   1,  FRI,   0,  0,  0),
+        new TestCase(2334848.5,  0,  5440,   11,   3,  SUN,   0,  0,  0),
+        new TestCase(2334934.5,  0,  5441,    1,   1,  TUE,   0,  0,  0),
+        new TestCase(2348020.5,  0,  5476,   12,   5,  FRI,   0,  0,  0),
+        new TestCase(2366978.5,  0,  5528,   11,   4,  SUN,   0,  0,  0),
+        new TestCase(2385648.5,  0,  5579,   12,  11,  MON,   0,  0,  0),
+        new TestCase(2392825.5,  0,  5599,    8,  12,  WED,   0,  0,  0),
+        new TestCase(2416223.5,  0,  5663,    8,  22,  SUN,   0,  0,  0),
+        new TestCase(2425848.5,  0,  5689,   12,  19,  SUN,   0,  0,  0),
+        new TestCase(2430266.5,  0,  5702,    1,   8,  MON,   0,  0,  0),
+        new TestCase(2430833.5,  0,  5703,    8,  14,  MON,   0,  0,  0),
+        new TestCase(2431004.5,  0,  5704,    1,   8,  THU,   0,  0,  0),
+        new TestCase(2448698.5,  0,  5752,    7,  12,  TUE,   0,  0,  0),
+        new TestCase(2450138.5,  0,  5756,    7,   5,  SUN,   0,  0,  0),
+        new TestCase(2465737.5,  0,  5799,    2,  12,  WED,   0,  0,  0),
+        new TestCase(2486076.5,  0,  5854,   12,   5,  SUN,   0,  0,  0),
+
+        // Additional test cases for bugs found during development
+        //           G.YY/MM/DD  Era  Year  Month Day  WkDay Hour Min Sec
+        new TestCase(1013, 9, 8, 0,  4774,    1,   1,  TUE,   0,  0,  0),
+        new TestCase(1239, 9, 1, 0,  5000,    1,   1,  THU,   0,  0,  0),
+        new TestCase(1240, 9,18, 0,  5001,    1,   1,  TUE,   0,  0,  0),
+
+        // Test cases taken from a table of 14 "year types" in the Help file
+        // of the application "Hebrew Calendar"
+        new TestCase(2456187.5,  0,  5773,    1,   1,  MON,   0,  0,  0),
+        new TestCase(2459111.5,  0,  5781,    1,   1,  SAT,   0,  0,  0),
+        new TestCase(2453647.5,  0,  5766,    1,   1,  TUE,   0,  0,  0),
+        new TestCase(2462035.5,  0,  5789,    1,   1,  THU,   0,  0,  0),
+        new TestCase(2458756.5,  0,  5780,    1,   1,  MON,   0,  0,  0),
+        new TestCase(2460586.5,  0,  5785,    1,   1,  THU,   0,  0,  0),
+        new TestCase(2463864.5,  0,  5794,    1,   1,  SAT,   0,  0,  0),
+        new TestCase(2463481.5,  0,  5793,    1,   1,  MON,   0,  0,  0),
+        new TestCase(2470421.5,  0,  5812,    1,   1,  THU,   0,  0,  0),
+        new TestCase(2460203.5,  0,  5784,    1,   1,  SAT,   0,  0,  0),
+        new TestCase(2459464.5,  0,  5782,    1,   1,  TUE,   0,  0,  0),
+        new TestCase(2467142.5,  0,  5803,    1,   1,  MON,   0,  0,  0),
+        new TestCase(2455448.5,  0,  5771,    1,   1,  THU,   0,  0,  0),
+        new TestCase(2487223.5,  0,  5858,    1,   1,  SAT,   0,  0,  0),
+    };
+    
+    /**
+     * Problem reported by Armand Bendanan in which setting of the MONTH
+     * field in a Hebrew calendar causes the time fields to go negative.
+     */
+    public void TestTimeFields() {
+        HebrewCalendar calendar = new HebrewCalendar(5761, 0, 11, 12, 28, 15);
+		calendar.set(Calendar.YEAR, 5717);
+		calendar.set(Calendar.MONTH, 2);
+		calendar.set(Calendar.DAY_OF_MONTH, 23);
+        if (calendar.get(Calendar.HOUR_OF_DAY) != 12) {
+            errln("Fail: HebrewCalendar HOUR_OF_DAY = " + calendar.get(Calendar.HOUR_OF_DAY));
+        }
+    }
+
+    /**
+     * Test of the behavior of the month field.  This requires special
+     * handling in the Hebrew calendar because of the pattern of leap
+     * years.
+     */
+    public void TestMonthMovement() {
+        HebrewCalendar cal = new HebrewCalendar();
+        // Leap years are:
+        // 3 6 8 11 14 17 19 (and so on - 19-year cycle)
+        // We can't test complete() on some lines below because of ADAR_1 -- if
+        // the calendar is set to ADAR_1 on a non-leap year, the result is undefined.
+        int[] DATA = {
+            // c     - test complete() or not
+            // m/y   - before and after month/year
+            // delta - amount to add to month field
+            //c m1  y1 delta  m2  y2
+            1,  10,  2,  +24,  9,  4, // (year 2, month 10) + 24 months -> (y 4, m 9)
+            1,  10,  2,  +60,  8,  7, // (y 2, m 10) + 60 months -> (y 7, m 8)
+            1,   1,  2,  +12,  1,  3, // (y 2, m 1) + 12 months -> (y 3, m 1)
+            1,   3, 18,  -24,  4, 16, // (y 18, m 3) - 24 months -> (y 16, m 4)
+            1,   1,  6,  -24,  1,  4,
+            1,   4,  3,   +2,  6,  3, // Leap year - no skip 4,5,6,7,8
+            1,   8,  3,   -2,  6,  3, // Leap year - no skip
+            0,   4,  2,   +2,  7,  2, // Skip over leap month 4,5,(6),7,8
+            0,   8,  2,   -2,  5,  2, // Skip over leap month going backward
+        };
+        for (int i=0; i<DATA.length; ) {
+            boolean testComplete = DATA[i++] != 0;
+            int m = DATA[i++], y = DATA[i++];
+            int monthDelta = DATA[i++];
+            int m2 = DATA[i++], y2 = DATA[i++];
+            int mact, yact;
+
+            cal.clear();
+            cal.set(Calendar.YEAR, y);
+            cal.set(Calendar.MONTH, m-1);
+            cal.add(Calendar.MONTH, monthDelta);
+            yact = cal.get(Calendar.YEAR); mact = cal.get(Calendar.MONTH) + 1;
+            if (y2 != yact || m2 != mact) {
+                errln("Fail: " + m + "/" + y +
+                      " -> add(MONTH, " + monthDelta + ") -> " +
+                      mact + "/" + yact + ", expected " +
+                      m2 + "/" + y2);
+                cal.clear();
+                cal.set(Calendar.YEAR, y);
+                cal.set(Calendar.MONTH, m-1);
+                logln("Start: " + m + "/" + y);
+                int delta = monthDelta > 0 ? 1 : -1;
+                for (int c=0; c!=monthDelta; c+=delta) {
+                    cal.add(Calendar.MONTH, delta);
+                    logln("+ " + delta + " MONTH -> " +
+                          (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR));
+                }
+            }
+            
+            if (testComplete) {
+                cal.clear();
+                cal.set(Calendar.YEAR, y);
+                cal.set(Calendar.MONTH, m + monthDelta - 1);
+                yact = cal.get(Calendar.YEAR); mact = cal.get(Calendar.MONTH) + 1;
+                if (y2 != yact || m2 != mact) {
+                    errln("Fail: " + (m+monthDelta) + "/" + y +
+                          " -> complete() -> " +
+                          mact + "/" + yact + ", expected " +
+                          m2 + "/" + y2);
+                }
+            }
+        }
+    }
+
+    /**
+     * Test handling of ADAR_1.
+     */
+    /*
+    public void TestAdar1() {
+        HebrewCalendar cal = new HebrewCalendar();
+        cal.clear();
+        cal.set(Calendar.YEAR, 1903); // leap
+        cal.set(Calendar.MONTH, HebrewCalendar.ADAR_1);
+        logln("1903(leap)/ADAR_1 => " +
+              cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH)+1));
+
+        cal.clear();
+        cal.set(Calendar.YEAR, 1904); // non-leap
+        cal.set(Calendar.MONTH, HebrewCalendar.ADAR_1);
+        logln("1904(non-leap)/ADAR_1 => " +
+              cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH)+1));
+    }
+    */
+
+    /**
+     * With no fields set, the calendar should use default values.
+     */
+    public void TestDefaultFieldValues() {
+        HebrewCalendar cal = new HebrewCalendar();
+        cal.clear();
+        logln("cal.clear() -> " + cal.getTime());
+    }
+};
diff --git a/src/com/ibm/test/calendar/IBMCalendarTest.java b/src/com/ibm/test/calendar/IBMCalendarTest.java
new file mode 100755
index 0000000..57f0839
--- /dev/null
+++ b/src/com/ibm/test/calendar/IBMCalendarTest.java
@@ -0,0 +1,214 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 2000, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/IBMCalendarTest.java,v $ 
+ * $Date: 2000/11/18 00:17:58 $ 
+ * $Revision: 1.4 $
+ *******************************************************************************
+ */
+package com.ibm.test.calendar;
+import com.ibm.test.TestFmwk;
+import com.ibm.util.*;
+import java.text.*;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * @test
+ * @summary Tests of new functionality in IBMCalendar
+ */
+public class IBMCalendarTest extends CalendarTest {
+
+    public static void main(String[] args) throws Exception {
+        new IBMCalendarTest().run(args);
+    }
+
+    /**
+     * Test weekend support in IBMCalendar.
+     *
+     * NOTE: This test will have to be updated when the isWeekend() etc.
+     *       API is finalized later.
+     *
+     *       In particular, the test will have to be rewritten to instantiate
+     *       a Calendar in the given locale (using getInstance()) and call
+     *       that Calendar's isWeekend() etc. methods.
+     */
+    public void TestWeekend() {
+        SimpleDateFormat fmt = new SimpleDateFormat("EEE MMM dd yyyy G HH:mm:ss.SSS");
+        
+        // NOTE
+        // This test tests for specific locale data.  This is probably okay
+        // as far as US data is concerned, but if the Arabic/Bahrain data
+        // changes, this test will have to be updated.
+
+        // Test specific days
+        Object[] DATA1 = {
+            Locale.US, new int[] { // Saturday:Sunday
+                2000, Calendar.MARCH, 17, 23,  0, 0, // Fri 23:00
+                2000, Calendar.MARCH, 18,  0, -1, 0, // Fri 23:59:59.999
+                2000, Calendar.MARCH, 18,  0,  0, 1, // Sat 00:00
+                2000, Calendar.MARCH, 18, 15,  0, 1, // Sat 15:00
+                2000, Calendar.MARCH, 19, 23,  0, 1, // Sun 23:00
+                2000, Calendar.MARCH, 20,  0, -1, 1, // Sun 23:59:59.999
+                2000, Calendar.MARCH, 20,  0,  0, 0, // Mon 00:00
+                2000, Calendar.MARCH, 20,  8,  0, 0, // Mon 08:00
+            },
+            new Locale("ar", "BH"), new int[] { // Thursday:Friday
+                2000, Calendar.MARCH, 15, 23,  0, 0, // Wed 23:00
+                2000, Calendar.MARCH, 16,  0, -1, 0, // Wed 23:59:59.999
+                2000, Calendar.MARCH, 16,  0,  0, 1, // Thu 00:00
+                2000, Calendar.MARCH, 16, 15,  0, 1, // Thu 15:00
+                2000, Calendar.MARCH, 17, 23,  0, 1, // Fri 23:00
+                2000, Calendar.MARCH, 18,  0, -1, 1, // Fri 23:59:59.999
+                2000, Calendar.MARCH, 18,  0,  0, 0, // Sat 00:00
+                2000, Calendar.MARCH, 18,  8,  0, 0, // Sat 08:00
+            },
+        };
+
+        // Test days of the week
+        Object[] DATA2 = {
+            Locale.US, new int[] {
+                Calendar.MONDAY,   Calendar.WEEKDAY,
+                Calendar.FRIDAY,   Calendar.WEEKDAY,
+                Calendar.SATURDAY, Calendar.WEEKEND,
+                Calendar.SUNDAY,   Calendar.WEEKEND,
+            },
+            new Locale("ar", "BH"), new int[] { // Thursday:Friday
+                Calendar.WEDNESDAY,Calendar.WEEKDAY,
+                Calendar.SATURDAY, Calendar.WEEKDAY,
+                Calendar.THURSDAY, Calendar.WEEKEND,
+                Calendar.FRIDAY,   Calendar.WEEKEND,
+            },
+        };
+
+        // We only test the getDayOfWeekType() and isWeekend() APIs.
+        // The getWeekendTransition() API is tested indirectly via the
+        // isWeekend() API, which calls it.
+
+        for (int i1=0; i1<DATA1.length; i1+=2) {
+            Locale loc = (Locale)DATA1[i1];
+            int[] data = (int[]) DATA1[i1+1];
+            Calendar cal = Calendar.getInstance(loc);
+            logln("Locale: " + loc);
+            for (int i=0; i<data.length; i+=6) {
+                cal.clear();
+                cal.set(data[i], data[i+1], data[i+2], data[i+3], 0, 0);
+                if (data[i+4] != 0) {
+                    cal.setTime(new Date(cal.getTime().getTime() + data[i+4]));
+                }
+                boolean isWeekend = cal.isWeekend();
+                boolean ok = isWeekend == (data[i+5] != 0);
+                if (ok) {
+                    logln("Ok:   " + fmt.format(cal.getTime()) + " isWeekend=" + isWeekend);
+                } else {
+                    errln("FAIL: " + fmt.format(cal.getTime()) + " isWeekend=" + isWeekend +
+                          ", expected=" + (!isWeekend));
+                }
+            }
+        }
+
+        for (int i2=0; i2<DATA2.length; i2+=2) {
+            Locale loc = (Locale)DATA2[i2];
+            int[] data = (int[]) DATA2[i2+1];
+            logln("Locale: " + loc);
+            Calendar cal = Calendar.getInstance(loc);
+            for (int i=0; i<data.length; i+=2) {
+                int type = cal.getDayOfWeekType(data[i]);
+                int exp  = data[i+1];
+                if (type == exp) {
+                    logln("Ok:   DOW " + data[i] + " type=" + type);
+                } else {
+                    errln("FAIL: DOW " + data[i] + " type=" + type +
+                          ", expected=" + exp);
+                }
+            }
+        }
+    }
+
+    /**
+     * Run a test of a quasi-Gregorian calendar.  This is a calendar
+     * that behaves like a Gregorian but has different year/era mappings.
+     * The int[] data array should have the format:
+     * 
+     * { era, year, gregorianYear, month, dayOfMonth, ... }
+     */
+    void quasiGregorianTest(Calendar cal, int[] data) {
+        for (int i=0; i<data.length; ) {
+            int era = data[i++];
+            int year = data[i++];
+            int gregorianYear = data[i++];
+            int month = data[i++];
+            int dayOfMonth = data[i++];
+
+            Date D = new Date(gregorianYear - 1900, month, dayOfMonth);
+
+            cal.clear();
+            cal.set(Calendar.ERA, era);
+            cal.set(year, month, dayOfMonth);
+            Date d = cal.getTime();
+            if (d.equals(D)) {
+                logln("OK: " + era + ":" + year + "/" + (month+1) + "/" + dayOfMonth +
+                      " => " + d);
+            } else {
+                errln("Fail: " + era + ":" + year + "/" + (month+1) + "/" + dayOfMonth +
+                      " => " + d + ", expected " + D);
+            }
+
+            cal.clear();
+            cal.setTime(D);
+            int e = cal.get(Calendar.ERA);
+            int y = cal.get(Calendar.YEAR);
+            if (y == year && e == era) {
+                logln("OK: " + D + " => " + cal.get(Calendar.ERA) + ":" +
+                      cal.get(Calendar.YEAR) + "/" +
+                      (cal.get(Calendar.MONTH)+1) + "/" + cal.get(Calendar.DATE));
+            } else {
+                logln("Fail: " + D + " => " + cal.get(Calendar.ERA) + ":" +
+                      cal.get(Calendar.YEAR) + "/" +
+                      (cal.get(Calendar.MONTH)+1) + "/" + cal.get(Calendar.DATE) +
+                      ", expected " + era + ":" + year + "/" + (month+1) + "/" +
+                      dayOfMonth);
+            }
+        }
+    }
+
+    /**
+     * Verify that BuddhistCalendar shifts years to Buddhist Era but otherwise
+     * behaves like GregorianCalendar.
+     */
+    public void TestBuddhist() {
+        quasiGregorianTest(new BuddhistCalendar(),
+                           new int[] {
+                               // BE 2542 == 1999 CE
+                               0, 2542, 1999, Calendar.JUNE, 4
+                           });
+    }
+
+    /**
+     * Verify that JapaneseCalendar shifts years to Buddhist Era but otherwise
+     * behaves like GregorianCalendar.
+     */
+    public void TestJapanese() {
+        int[] data = {
+            JapaneseCalendar.MEIJI, 1, 1868, Calendar.SEPTEMBER, 8,
+            JapaneseCalendar.MEIJI, 1, 1868, Calendar.SEPTEMBER, 9,
+            JapaneseCalendar.MEIJI, 2, 1869, Calendar.JUNE, 4,
+            JapaneseCalendar.MEIJI, 45, 1912, Calendar.JULY, 29,
+            JapaneseCalendar.TAISHO, 1, 1912, Calendar.JULY, 30,
+            JapaneseCalendar.TAISHO, 1, 1912, Calendar.AUGUST, 1,
+        };
+        quasiGregorianTest(new JapaneseCalendar(), data);
+    }
+
+    /**
+     * Test limits of the Gregorian calendar.
+     */
+    public void TestGregorianLimits() {
+        // Final parameter is either number of days, if > 0, or test
+        // duration in seconds, if < 0.
+        doLimitsTest(new GregorianCalendar(), null,
+                     new Date(2004-1900, Calendar.JANUARY, 1), -10);
+    }
+}
diff --git a/src/com/ibm/test/calendar/IslamicTest.java b/src/com/ibm/test/calendar/IslamicTest.java
new file mode 100755
index 0000000..175cd5a
--- /dev/null
+++ b/src/com/ibm/test/calendar/IslamicTest.java
@@ -0,0 +1,144 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/IslamicTest.java,v $ 
+ * $Date: 2000/11/18 00:17:58 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.calendar;
+
+import com.ibm.test.*;
+import java.util.*;
+import java.text.*;
+import com.ibm.util.*;
+
+/**
+ * Tests for the <code>IslamicCalendar</code> class.
+ */
+public class IslamicTest extends CalendarTest {
+    public static void main(String args[]) throws Exception {
+        new IslamicTest().run(args);
+    }
+
+    /** Constants to save typing. */
+    public static final int MUHARRAM = IslamicCalendar.MUHARRAM;
+    public static final int SAFAR =  IslamicCalendar.SAFAR;
+    public static final int RABI_1 =  IslamicCalendar.RABI_1;
+    public static final int RABI_2 =  IslamicCalendar.RABI_2;
+    public static final int JUMADA_1 =  IslamicCalendar.JUMADA_1;
+    public static final int JUMADA_2 =  IslamicCalendar.JUMADA_2;
+    public static final int RAJAB =  IslamicCalendar.RAJAB;
+    public static final int SHABAN =  IslamicCalendar.SHABAN;
+    public static final int RAMADAN =  IslamicCalendar.RAMADAN;
+    public static final int SHAWWAL =  IslamicCalendar.SHAWWAL;
+    public static final int QIDAH =  IslamicCalendar.DHU_AL_QIDAH;
+    public static final int HIJJAH =  IslamicCalendar.DHU_AL_HIJJAH;
+
+    public void TestRoll() {
+        int[][] tests = new int[][] {
+            //       input                roll by          output
+            //  year  month     day     field amount    year  month     day
+    
+            {   0001, QIDAH,     2,     MONTH,   1,     0001, HIJJAH,    2 },   // non-leap years
+            {   0001, QIDAH,     2,     MONTH,   2,     0001, MUHARRAM,  2 },
+            {   0001, QIDAH,     2,     MONTH,  -1,     0001, SHAWWAL,   2 },
+            {   0001, MUHARRAM,  2,     MONTH,  12,     0001, MUHARRAM,  2 },
+            {   0001, MUHARRAM,  2,     MONTH,  13,     0001, SAFAR,     2 },
+
+            {   0001, HIJJAH,    1,     DATE,   30,     0001, HIJJAH,    2 },   // 29-day month
+            {   0002, HIJJAH,    1,     DATE,   31,     0002, HIJJAH,    2 },   // 30-day month
+
+            // Try some rolls that require other fields to be adjusted
+            {   0001, MUHARRAM, 30,     MONTH,   1,     0001, SAFAR,    29 },
+            {   0002, HIJJAH,   30,     YEAR,   -1,     0001, HIJJAH,   29 },
+        };
+       
+        IslamicCalendar cal = newCivil();
+
+        doRollAdd(ROLL, cal, tests);
+    }
+
+    /**
+     * A huge list of test cases to make sure that computeTime and computeFields
+     * work properly for a wide range of data in the civil calendar.
+     */
+    public void TestCivilCases()
+    {
+        final TestCase[] tests = {
+            //
+            // Most of these test cases were taken from the back of
+            // "Calendrical Calculations", with some extras added to help
+            // debug a few of the problems that cropped up in development.
+            //
+            // The months in this table are 1-based rather than 0-based,
+            // because it's easier to edit that way.
+            //                       Islamic
+            //          Julian Day  Era  Year  Month Day  WkDay Hour Min Sec
+            new TestCase(1507231.5,  0, -1245,   12,   9,  SUN,   0,  0,  0),
+            new TestCase(1660037.5,  0,  -813,    2,  23,  WED,   0,  0,  0),
+            new TestCase(1746893.5,  0,  -568,    4,   1,  WED,   0,  0,  0),
+            new TestCase(1770641.5,  0,  -501,    4,   6,  SUN,   0,  0,  0),
+            new TestCase(1892731.5,  0,  -157,   10,  17,  WED,   0,  0,  0),
+            new TestCase(1931579.5,  0,   -47,    6,   3,  MON,   0,  0,  0),
+            new TestCase(1974851.5,  0,    75,    7,  13,  SAT,   0,  0,  0),
+            new TestCase(2091164.5,  0,   403,   10,   5,  SUN,   0,  0,  0),
+            new TestCase(2121509.5,  0,   489,    5,  22,  SUN,   0,  0,  0),
+            new TestCase(2155779.5,  0,   586,    2,   7,  FRI,   0,  0,  0),
+            new TestCase(2174029.5,  0,   637,    8,   7,  SAT,   0,  0,  0),
+            new TestCase(2191584.5,  0,   687,    2,  20,  FRI,   0,  0,  0),
+            new TestCase(2195261.5,  0,   697,    7,   7,  SUN,   0,  0,  0),
+            new TestCase(2229274.5,  0,   793,    7,   1,  SUN,   0,  0,  0),
+            new TestCase(2245580.5,  0,   839,    7,   6,  WED,   0,  0,  0),
+            new TestCase(2266100.5,  0,   897,    6,   1,  SAT,   0,  0,  0),
+            new TestCase(2288542.5,  0,   960,    9,  30,  SAT,   0,  0,  0),
+            new TestCase(2290901.5,  0,   967,    5,  27,  SAT,   0,  0,  0),
+            new TestCase(2323140.5,  0,  1058,    5,  18,  WED,   0,  0,  0),
+            new TestCase(2334848.5,  0,  1091,    6,   2,  SUN,   0,  0,  0),
+            new TestCase(2348020.5,  0,  1128,    8,   4,  FRI,   0,  0,  0),
+            new TestCase(2366978.5,  0,  1182,    2,   3,  SUN,   0,  0,  0),
+            new TestCase(2385648.5,  0,  1234,   10,  10,  MON,   0,  0,  0),
+            new TestCase(2392825.5,  0,  1255,    1,  11,  WED,   0,  0,  0),
+            new TestCase(2416223.5,  0,  1321,    1,  21,  SUN,   0,  0,  0),
+            new TestCase(2425848.5,  0,  1348,    3,  19,  SUN,   0,  0,  0),
+            new TestCase(2430266.5,  0,  1360,    9,   8,  MON,   0,  0,  0),
+            new TestCase(2430833.5,  0,  1362,    4,  13,  MON,   0,  0,  0),
+            new TestCase(2431004.5,  0,  1362,   10,   7,  THU,   0,  0,  0),
+            new TestCase(2448698.5,  0,  1412,    9,  13,  TUE,   0,  0,  0),
+            new TestCase(2450138.5,  0,  1416,   10,   5,  SUN,   0,  0,  0),
+            new TestCase(2465737.5,  0,  1460,   10,  12,  WED,   0,  0,  0),
+            new TestCase(2486076.5,  0,  1518,    3,   5,  SUN,   0,  0,  0),
+        };
+        
+        IslamicCalendar civilCalendar = newCivil();
+        civilCalendar.setLenient(true);
+        doTestCases(tests, civilCalendar);
+    }
+
+    public void TestBasic() {
+        IslamicCalendar cal = newCivil();
+        cal.clear();
+        cal.set(1000, 0, 30);
+        logln("1000/0/30 -> " +
+              cal.get(YEAR) + "/" +
+              cal.get(MONTH) + "/" + 
+              cal.get(DATE));
+        cal.clear();
+        cal.set(1, 0, 30);
+        logln("1/0/30 -> " +
+              cal.get(YEAR) + "/" +
+              cal.get(MONTH) + "/" + 
+              cal.get(DATE));
+    }
+
+    private static IslamicCalendar newCivil() {
+        IslamicCalendar civilCalendar = new IslamicCalendar();
+        civilCalendar.setCivil(true);
+        return civilCalendar;
+    }
+    
+};
diff --git a/src/com/ibm/test/calendar/TestCase.java b/src/com/ibm/test/calendar/TestCase.java
new file mode 100755
index 0000000..516a5ac
--- /dev/null
+++ b/src/com/ibm/test/calendar/TestCase.java
@@ -0,0 +1,245 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/TestCase.java,v $ 
+ * $Date: 2000/11/18 00:17:58 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.calendar;
+
+import com.ibm.test.*;
+import com.ibm.util.Calendar;
+import com.ibm.util.GregorianCalendar;
+import java.util.Date;
+import com.ibm.util.SimpleTimeZone;
+import java.util.Locale;
+
+/**
+ * A pseudo <code>Calendar</code> that is useful for testing
+ * new calendars.  A <code>TestCase</code> object is used to hold the
+ * field and millisecond values that the calendar should have at one
+ * particular instant in time.  The applyFields and applyTime
+ * methods are used to apply these settings to the calendar object being
+ * tested, and the equals and fieldsEqual methods are used to ensure
+ * that the calendar has ended up in the right state.
+ */
+public class TestCase {
+
+    //------------------------------------------------------------------
+    // Pseudo-Calendar fields and methods
+    //------------------------------------------------------------------
+
+    protected int[] fields = new int[32];
+    protected boolean[] isSet = new boolean[32];
+    protected long time;
+
+    protected void set(int field, int value) {
+        fields[field] = value;
+        isSet[field] = true;
+    }
+
+    protected int get(int field) {
+        return fields[field];
+    }
+
+    protected boolean isSet(int field) {
+        return isSet[field];
+    }
+
+    protected void setTime(Date d) {
+        time = d.getTime();
+    }
+
+    public Date getTime() {
+        return new Date(time);
+    }
+
+    /**
+     * Return a String representation of this test case's time.
+     */
+    public String toString() {
+        return dowToString(get(Calendar.DAY_OF_WEEK)) +
+            get(Calendar.YEAR) + "/" + (get(Calendar.MONTH)+1) + "/" +
+            get(Calendar.DATE);
+    }
+
+    private static final String[] DOW_NAMES = {
+        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+    };
+
+    public static String dowToString(int dow) {
+        --dow;
+        return (dow < 0 || dow > 6) ?
+            ("<DOW " + dow + ">") : DOW_NAMES[dow];
+    }
+
+    /**
+     * Initialize a TestCase object using a julian day number and
+     * the corresponding fields for the calendar being tested.
+     *
+     * @param era       The ERA field of tested calendar on the given julian day
+     * @param year      The YEAR field of tested calendar on the given julian day
+     * @param month     The MONTH (1-based) field of tested calendar on the given julian day
+     * @param day       The DAY_OF_MONTH field of tested calendar on the given julian day
+     * @param dayOfWeek The DAY_OF_WEEK field of tested calendar on the given julian day
+     * @param hour      The HOUR field of tested calendar on the given julian day
+     * @param min       The MINUTE field of tested calendar on the given julian day
+     * @param sec       The SECOND field of tested calendar on the given julian day
+     */
+    public TestCase(double julian,
+                    int era, int year, int month, int day,
+                    int dayOfWeek,
+                    int hour, int min, int sec)
+    {
+        setTime(new Date(JULIAN_EPOCH + (long)(ONE_DAY * julian)));
+        
+        set(Calendar.ERA, era);
+        set(Calendar.YEAR, year);
+        set(Calendar.MONTH, month - 1);
+        set(Calendar.DATE, day);
+        set(Calendar.DAY_OF_WEEK, dayOfWeek);
+        set(Calendar.HOUR, hour);
+        set(Calendar.MINUTE, min);
+        set(Calendar.SECOND, sec);
+    }
+
+    /**
+     * Initialize a TestCase object using a Gregorian year/month/day and
+     * the corresponding fields for the calendar being tested.
+     *
+     * @param gregYear  The Gregorian year of the date to be tested
+     * @param gregMonth The Gregorian month of the date to be tested
+     * @param gregDay   The Gregorian day of the month of the date to be tested
+     *
+     * @param era       The ERA field of tested calendar on the given gregorian date
+     * @param year      The YEAR field of tested calendar on the given gregorian date
+     * @param month     The MONTH (0-based) field of tested calendar on the given gregorian date
+     * @param day       The DAY_OF_MONTH field of tested calendar on the given gregorian date
+     * @param dayOfWeek The DAY_OF_WEEK field of tested calendar on the given gregorian date
+     * @param hour      The HOUR field of tested calendar on the given gregorian date
+     * @param min       The MINUTE field of tested calendar on the given gregorian date
+     * @param sec       The SECOND field of tested calendar on the given gregorian date
+     */
+    public TestCase(int gregYear, int gregMonth, int gregDay,
+                    int era, int year, int month, int day,
+                    int dayOfWeek,
+                    int hour, int min, int sec)
+    {
+        GregorianCalendar greg = new GregorianCalendar(UTC, Locale.getDefault());
+        greg.clear();
+        greg.set(gregYear, gregMonth-1, gregDay);
+        setTime(greg.getTime());
+        
+        set(Calendar.ERA, era);
+        set(Calendar.YEAR, year);
+        set(Calendar.MONTH, month - 1);
+        set(Calendar.DATE, day);
+        set(Calendar.DAY_OF_WEEK, dayOfWeek);
+        set(Calendar.HOUR, hour);
+        set(Calendar.MINUTE, min);
+        set(Calendar.SECOND, sec);
+    }
+    
+    /**
+     * For subclasses.
+     */
+    protected TestCase() {}
+
+    /**
+     * Apply this test case's field values to another calendar
+     * by calling its set method for each field.  This is useful in combination
+     * with the equal method.
+     *
+     * @see #equal
+     */
+    public void applyFields(Calendar c) {
+        for (int i=0; i < c.getFieldCount(); i++) {
+            if (isSet(i)) {
+                c.set(i, get(i));
+            }
+        }
+    }
+    
+    /**
+     * Apply this test case's time in milliseconds to another calendar
+     * by calling its setTime method.  This is useful in combination
+     * with fieldsEqual
+     *
+     * @see #fieldsEqual
+     */
+    public void applyTime(Calendar c) {
+        c.setTime(new Date(time));
+    }
+
+    /**
+     * Determine whether the fields of this calendar
+     * are the same as that of the other calendar.  This method is useful
+     * for determining whether the other calendar's computeFields method
+     * works properly.  For example:
+     * <pre>
+     *    Calendar testCalendar = ...
+     *    TestCase case = ...
+     *    case.applyTime(testCalendar);
+     *    if (!case.fieldsEqual(testCalendar)) {
+     *        // Error!
+     *    }
+     * </pre>
+     * 
+     * @see #applyTime
+     */
+    public boolean fieldsEqual(Calendar c, TestLog log) {
+        for (int i=0; i < c.getFieldCount(); i++) {
+            if (isSet(i) && get(i) != c.get(i)) {
+                log.errln("Fail: " + CalendarTest.fieldName(i) + " = " + c.get(i) +
+                          ", expected " + get(i));
+                for (int j=0; j<c.getFieldCount(); ++j) {
+                    if (isSet(j)) {
+                        if (get(j) == c.get(j)) {
+                            log.errln(" OK: " + CalendarTest.fieldName(j) + " = " +
+                                      c.get(j));
+                        } else {
+                            log.errln(" Fail: " + CalendarTest.fieldName(j) + " = " +
+                                      c.get(j) + ", expected " + get(j));
+                        }
+                    }
+                }
+                return false;
+            }
+        }
+        
+        return true;
+    }
+    
+    /**
+     * Determine whether time in milliseconds of this calendar
+     * is the same as that of the other calendar.  This method is useful
+     * for determining whether the other calendar's computeTime method
+     * works properly.  For example:
+     * <pre>
+     *    Calendar testCalendar = ...
+     *    TestCase case = ...
+     *    case.applyFields(testCalendar);
+     *    if (!case.equals(testCalendar)) {
+     *        // Error!
+     *    }
+     * </pre>
+     * 
+     * @see #applyFields
+     */
+    public boolean equals(Object obj) {
+        return time == ((Calendar)obj).getTime().getTime();
+    }
+    
+    protected static final int  ONE_SECOND = 1000;
+    protected static final int  ONE_MINUTE = 60*ONE_SECOND;
+    protected static final int  ONE_HOUR   = 60*ONE_MINUTE;
+    protected static final long ONE_DAY    = 24*ONE_HOUR;
+    protected static final long JULIAN_EPOCH = -210866760000000L;   // 1/1/4713 BC 12:00
+
+    public final static SimpleTimeZone UTC = new SimpleTimeZone(0, "GMT");
+}
diff --git a/src/com/ibm/test/calendar/package.html b/src/com/ibm/test/calendar/package.html
new file mode 100755
index 0000000..14f0d50
--- /dev/null
+++ b/src/com/ibm/test/calendar/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/calendar/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:49 $
+-->
+</head>
+<body bgcolor="white">
+Tests for the calendar classes.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/compression/DecompressionTest.java b/src/com/ibm/test/compression/DecompressionTest.java
new file mode 100755
index 0000000..147f216
--- /dev/null
+++ b/src/com/ibm/test/compression/DecompressionTest.java
@@ -0,0 +1,130 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/compression/Attic/DecompressionTest.java,v $ 
+ * $Date: 2000/03/10 03:47:45 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.compression;
+
+import com.ibm.text.UnicodeCompressor;
+import com.ibm.text.UnicodeDecompressor;
+import com.ibm.test.TestFmwk;
+
+public class DecompressionTest extends TestFmwk {
+	public static void main(String[] args) throws Exception {
+		new DecompressionTest().run(args);
+	}
+
+    /** Print out a segment of a character array, if in verbose mode */
+    private void log(char [] chars, int start, int count) {
+        log("|");
+        for(int i = start; i < start + count; ++i) {
+            log(String.valueOf(chars[i]));
+        }
+        log("|");
+    }
+
+    /** Print out a segment of a character array, followed by a newline */
+    private void logln(char [] chars, int start, int count)
+    {
+        log(chars, start, count);
+        logln("");
+    }
+
+    /** Decompress the two segments */
+    private String decompressTest(byte [] segment1, byte [] segment2) {
+        StringBuffer s = new StringBuffer();
+        UnicodeDecompressor myDecompressor = new UnicodeDecompressor();
+
+        int [] bytesRead = new int[1];
+        char [] charBuffer = new char [2*(segment1.length + segment2.length)];
+        int count1 = 0, count2 = 0;
+
+        count1 = myDecompressor.decompress(segment1, 0, segment1.length,
+                                           bytesRead,
+                                           charBuffer, 0, charBuffer.length);
+        
+        logln("Segment 1 (" + segment1.length + " bytes) " +
+                "decompressed into " + count1  + " chars");
+        logln("Bytes consumed: " + bytesRead[0]);
+
+        logln("Got chars: ");
+        logln(charBuffer, 0, count1);
+        s.append(charBuffer, 0, count1);
+
+        count2 = myDecompressor.decompress(segment2, 0, segment2.length,
+                                           bytesRead,
+                                           charBuffer, count1, 
+                                           charBuffer.length);
+        
+        logln("Segment 2 (" + segment2.length + " bytes) " +
+                "decompressed into " + count2  + " chars");
+        logln("Bytes consumed: " + bytesRead[0]);
+
+        logln("Got chars: ");
+        logln(charBuffer, count1, count2);
+        
+        s.append(charBuffer, count1, count2);
+
+        logln("Result: ");
+        logln(charBuffer, 0, count1 + count2);
+        logln("====================");
+
+        return s.toString();
+    }
+
+
+    public void testDecompression() throws Exception {
+        String result;
+
+        // compressed segment breaking on a define window sequence
+        /*                   B     o     o     t     h     SD1  */
+        byte [] segment1 = { 0x42, 0x6f, 0x6f, 0x74, 0x68, 0x19 };
+
+        // continuation
+        /*                   IDX   ,           S     .          */
+        byte [] segment2 = { 0x01, 0x2c, 0x20, 0x53, 0x2e };
+        
+        result = decompressTest(segment1, segment2);
+        if(! result.equals("Booth, S.")) {
+        	errln("Decompression test failed");
+        	return;
+		}
+
+        // compressed segment breaking on a quote unicode sequence
+        /*                   B     o     o     t     SQU        */
+        byte [] segment3 = { 0x42, 0x6f, 0x6f, 0x74, 0x0e, 0x00 };
+
+        // continuation
+        /*                   h     ,           S     .          */
+        byte [] segment4 = { 0x68, 0x2c, 0x20, 0x53, 0x2e };
+
+        result = decompressTest(segment3, segment4);
+        if(! result.equals("Booth, S.")) {
+        	errln("Decompression test failed");
+        	return;
+		}
+
+
+        // compressed segment breaking on a quote unicode sequence
+        /*                   SCU   UQU                         */
+        byte [] segment5 = { 0x0f, (byte)0xf0, 0x00 };
+
+        // continuation
+        /*                   B                                 */
+        byte [] segment6 = { 0x42 };
+
+        result = decompressTest(segment5, segment6);
+        if(! result.equals("B")) {
+        	errln("Decompression test failed");
+        	return;
+		}
+    }
+
+};
diff --git a/src/com/ibm/test/compression/ExhaustiveTest.java b/src/com/ibm/test/compression/ExhaustiveTest.java
new file mode 100755
index 0000000..1596f42
--- /dev/null
+++ b/src/com/ibm/test/compression/ExhaustiveTest.java
@@ -0,0 +1,529 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/compression/Attic/ExhaustiveTest.java,v $ 
+ * $Date: 2000/10/06 23:15:50 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.compression;
+
+import com.ibm.text.UnicodeCompressor;
+import com.ibm.text.UnicodeDecompressor;
+import java.util.Random;
+import com.ibm.test.TestFmwk;
+
+public class ExhaustiveTest extends TestFmwk {
+	public static void main(String args[]) throws Exception {
+		new ExhaustiveTest().run(args);
+	}
+
+    /** Test simple compress/decompress API, returning # of errors */
+	public void testSimple() throws Exception {
+        for(int i = 0; i < fTestCases.length; i++) {
+            simpleTest(fTestCases[i]);
+        }
+	}
+    private void simpleTest(String s) throws Exception {
+        byte [] compressed = UnicodeCompressor.compress(s);
+        String res = UnicodeDecompressor.decompress(compressed);
+        if (logDiffs(s.toCharArray(), s.length(), 
+                res.toCharArray(), res.length()) == false) {
+            logln(s.length() + " chars ===> " 
+                    + compressed.length + " bytes ===> " 
+                    + res.length() + " chars");
+        } else {
+            logln("Compressed:");
+            printBytes(compressed, compressed.length);
+            errln("testSimple did not compress correctly");
+        }
+    }
+
+    /** Test iterative compress/decompress API, returning # of errors */
+    public void testIterative() throws Exception {
+        for(int i = 0; i < fTestCases.length; i++) {
+            myTest(fTestCases[i].toCharArray(), fTestCases[i].length());
+        }
+    }
+    private void myTest(char[] chars, int len) {
+        UnicodeCompressor myCompressor = new UnicodeCompressor();
+        UnicodeDecompressor myDecompressor = new UnicodeDecompressor();
+        
+        // variables for my compressor
+        int myByteCount = 0;
+        int myCharCount = 0;
+        int myCompressedSize = Math.max(512, 3*len);
+        byte[] myCompressed = new byte[myCompressedSize];
+        int myDecompressedSize = Math.max(2, 2 * len);
+        char[] myDecompressed = new char[myDecompressedSize];
+        int[] unicharsRead = new int[1];
+        int[] bytesRead = new int[1];
+        
+        myByteCount = myCompressor.compress(chars, 0, len, unicharsRead,
+                myCompressed, 0, myCompressedSize);
+
+        myCharCount = myDecompressor.decompress(myCompressed, 0, myByteCount,
+                bytesRead, myDecompressed, 0, myDecompressedSize);
+
+        if (logDiffs(chars, len, myDecompressed, myCharCount) == false) {
+            logln(len + " chars ===> " 
+                    + myByteCount + " bytes ===> " 
+                    + myCharCount + " chars");
+        } else {
+            logln("Compressed:");
+            printBytes(myCompressed, myByteCount);
+            errln("Iterative test failed");
+        }
+    }
+
+    /** Test iterative compress/decompress API */
+    public void testMultipass() throws Exception {
+        for(int i = 0; i < fTestCases.length; i++) {
+            myMultipassTest(fTestCases[i].toCharArray(), fTestCases[i].length());
+        }
+    }
+    private void myMultipassTest(char [] chars, int len) throws Exception {
+        UnicodeCompressor myCompressor = new UnicodeCompressor();
+        UnicodeDecompressor myDecompressor = new UnicodeDecompressor();
+        
+        // variables for my compressor
+        
+        // for looping
+        int byteBufferSize = 4;//Math.max(4, len / 4);
+        byte[] byteBuffer = new byte [byteBufferSize];
+        // real target
+        int compressedSize = Math.max(512, 3 * len);
+        byte[] compressed = new byte[compressedSize];
+
+        // for looping
+        int unicharBufferSize = 2;//byteBufferSize;
+        char[] unicharBuffer = new char[unicharBufferSize];
+        // real target
+        int decompressedSize = Math.max(2, 2 * len);
+        char[] decompressed = new char[decompressedSize];
+
+        int bytesWritten = 0;
+        int unicharsWritten = 0;
+
+        int[] unicharsRead = new int[1];
+        int[] bytesRead = new int[1];
+        
+        int totalCharsCompressed = 0;
+        int totalBytesWritten = 0;
+
+        int totalBytesDecompressed  = 0;
+        int totalCharsWritten = 0;
+
+        boolean err = false;
+
+
+        // perform the compression in a loop
+        do {
+            
+            // do the compression
+            bytesWritten = myCompressor.compress(chars, totalCharsCompressed, 
+                   len, unicharsRead, byteBuffer, 0, byteBufferSize);
+
+            // copy the current set of bytes into the target buffer
+            System.arraycopy(byteBuffer, 0, compressed, 
+                   totalBytesWritten, bytesWritten);
+            
+            // update the no. of characters compressed
+            totalCharsCompressed += unicharsRead[0];
+            
+            // update the no. of bytes written
+            totalBytesWritten += bytesWritten;
+            
+            /*System.out.logln("Compression pass complete.  Compressed "
+                               + unicharsRead[0] + " chars into "
+                               + bytesWritten + " bytes.");*/
+        } while(totalCharsCompressed < len);
+
+        if (totalCharsCompressed != len) {
+            errln("ERROR: Number of characters compressed("
+                    + totalCharsCompressed + ") != len(" + len + ")");
+        } else {
+            logln("MP: " + len + " chars ===> " + totalBytesWritten + " bytes.");
+        }
+        
+        // perform the decompression in a loop
+        do {
+            
+            // do the decompression
+            unicharsWritten = myDecompressor.decompress(compressed, 
+                    totalBytesDecompressed, totalBytesWritten, 
+                    bytesRead, unicharBuffer, 0, unicharBufferSize);
+
+            // copy the current set of chars into the target buffer
+            System.arraycopy(unicharBuffer, 0, decompressed, 
+                    totalCharsWritten, unicharsWritten);
+            
+            // update the no. of bytes decompressed
+            totalBytesDecompressed += bytesRead[0];
+            
+            // update the no. of chars written
+            totalCharsWritten += unicharsWritten;
+            
+            /*System.out.logln("Decompression pass complete.  Decompressed "
+                               + bytesRead[0] + " bytes into "
+                               + unicharsWritten + " chars.");*/
+        } while (totalBytesDecompressed < totalBytesWritten);
+
+        if (totalBytesDecompressed != totalBytesWritten) {
+            errln("ERROR: Number of bytes decompressed(" 
+                    + totalBytesDecompressed 
+                    + ") != totalBytesWritten(" 
+                    + totalBytesWritten + ")");
+        } else {
+            logln("MP: " + totalBytesWritten
+                    + " bytes ===> " + totalCharsWritten + " chars.");
+        }
+        
+        if (logDiffs(chars, len, decompressed, totalCharsWritten)) {
+            errln("ERROR: buffer contents incorrect");
+        }
+    }
+
+    /** Print differences between two character buffers */
+    private boolean logDiffs(char[] s1, int s1len, char[] s2, int s2len) {
+        boolean result  = false;
+        
+        if(s1len != s2len) {
+            logln("====================");
+            logln("Length doesn't match: expected " + s1len
+                               + ", got " + s2len);
+            logln("Expected:");
+            printChars(s1, s1len);
+            logln("Got:");
+            printChars(s2, s2len);
+            result = true;
+        }
+        
+        int len = Math.min(s1len, s2len);
+        for(int i = 0; i < len; ++i) {
+            if(s1[i] != s2[i]) {
+                if(result == false) {
+                    logln("====================");
+                }
+                logln("First difference at char " + i);
+                logln("Exp. char: " + Integer.toHexString(s1[i]));
+                logln("Got char : " + Integer.toHexString(s2[i]));
+                logln("Expected:");
+                printChars(s1, s1len);
+                logln("Got:");
+                printChars(s2, s2len);
+                result = true;
+                break;
+            }
+        }
+    
+        return result;
+    }
+
+    // generate a string of characters, with simulated runs of characters
+    private static char[] randomChars(int len, Random random) {
+        char[] result = new char [len];
+        int runLen = 0;
+        int used = 0;
+        
+        while(used < len) {
+            runLen = (int) (30 * random.nextDouble());
+            if(used + runLen >= len) {
+                runLen = len - used;
+            }
+            randomRun(result, used, runLen, random);
+            used += runLen;
+        }
+    
+        return result;
+    }
+
+    // generate a run of characters in a "window"
+    private static void randomRun(char[] target, int pos, int len, Random random) {
+        int offset = (int) (0xFFFF * random.nextDouble());
+
+        // don't overflow 16 bits
+        if(offset > 0xFF80) {
+            offset = 0xFF80;
+        }
+
+        for(int i = pos; i < pos + len; i++) {
+            target[i] = (char)(offset + (0x7F * random.nextDouble()));
+        }
+    }
+
+    private static final String [] fTestCases = {
+        "Hello \u9292 \u9192 World!",
+        "Hell\u0429o \u9292 \u9192 W\u0084rld!",
+        "Hell\u0429o \u9292 \u9292W\u0084rld!",
+
+        "\u0648\u06c8", // catch missing reset
+        "\u0648\u06c8",
+
+        "\u4444\uE001", // lowest quotable
+        "\u4444\uf2FF", // highest quotable
+        "\u4444\uf188\u4444",
+        "\u4444\uf188\uf288",
+        "\u4444\uf188abc\0429\uf288",
+        "\u9292\u2222",
+        "Hell\u0429\u04230o \u9292 \u9292W\u0084\u0192rld!",
+        "Hell\u0429o \u9292 \u9292W\u0084rld!",
+        "Hello World!123456",
+        "Hello W\u0081\u011f\u0082!", // Latin 1 run
+
+        "abc\u0301\u0302",  // uses SQn for u301 u302
+        "abc\u4411d",      // uses SQU
+        "abc\u4411\u4412d",// uses SCU
+        "abc\u0401\u0402\u047f\u00a5\u0405", // uses SQn for ua5
+        "\u9191\u9191\u3041\u9191\u3041\u3041\u3000", // SJIS like data
+        "\u9292\u2222",
+        "\u9191\u9191\u3041\u9191\u3041\u3041\u3000",
+        "\u9999\u3051\u300c\u9999\u9999\u3060\u9999\u3065\u3065\u3065\u300c",
+        "\u3000\u266a\u30ea\u30f3\u30b4\u53ef\u611b\u3044\u3084\u53ef\u611b\u3044\u3084\u30ea\u30f3\u30b4\u3002",
+
+        "", // empty input
+        "\u0000", // smallest BMP character
+        "\uFFFF", // largest BMP character
+
+        "\ud800\udc00", // smallest surrogate
+        "\ud8ff\udcff", // largest surrogate pair
+        
+        // regression tests
+        "\u6441\ub413\ua733\uf8fe\ueedb\u587f\u195f\u4899\uf23d\u49fd\u0aac\u5792\ufc22\ufc3c\ufc46\u00aa",
+        "\u30f9\u8321\u05e5\u181c\ud72b\u2019\u99c9\u2f2f\uc10c\u82e1\u2c4d\u1ebc\u6013\u66dc\ubbde\u94a5\u4726\u74af\u3083\u55b9\u000c",
+        "\u0041\u00df\u0401\u015f",
+        "\u9066\u2123abc",
+        "\ud266\u43d7\\\ue386\uc9c0\u4a6b\u9222\u901f\u7410\ua63f\u539b\u9596\u482e\u9d47\ucfe4\u7b71\uc280\uf26a\u982f\u862a\u4edd\uf513\ufda6\u869d\u2ee0\ua216\u3ff6\u3c70\u89c0\u9576\ud5ec\ubfda\u6cca\u5bb3\ubcea\u554c\u914e\ufa4a\uede3\u2990\ud2f5\u2729\u5141\u0f26\uccd8\u5413\ud196\ubbe2\u51b9\u9b48\u0dc8\u2195\u21a2\u21e9\u00e4\u9d92\u0bc0\u06c5",
+        "\uf95b\u2458\u2468\u0e20\uf51b\ue36e\ubfc1\u0080\u02dd\uf1b5\u0cf3\u6059\u7489"
+
+    };
+
+    //==========================
+    // Compression modes
+    //==========================
+    private final static int SINGLEBYTEMODE                 = 0;
+    private final static int UNICODEMODE                        = 1;
+    
+    //==========================
+    // Single-byte mode tags
+    //==========================
+    private final static int SDEFINEX                   = 0x0B;
+    private final static int SRESERVED                  = 0x0C;             // this is a reserved value
+    private final static int SQUOTEU                    = 0x0E;
+    private final static int SSWITCHU                   = 0x0F;
+
+        private final static int SQUOTE0                        = 0x01;
+        private final static int SQUOTE1                        = 0x02;
+        private final static int SQUOTE2                        = 0x03;
+        private final static int SQUOTE3                        = 0x04;
+        private final static int SQUOTE4                        = 0x05;
+        private final static int SQUOTE5                        = 0x06;
+        private final static int SQUOTE6                            = 0x07;
+        private final static int SQUOTE7                        = 0x08;
+
+        private final static int SSWITCH0                       = 0x10;
+        private final static int SSWITCH1                       = 0x11;
+        private final static int SSWITCH2                       = 0x12;
+        private final static int SSWITCH3                       = 0x13;
+        private final static int SSWITCH4                       = 0x14;
+        private final static int SSWITCH5                       = 0x15;
+        private final static int SSWITCH6                       = 0x16;
+        private final static int SSWITCH7                       = 0x17;
+
+        private final static int SDEFINE0                       = 0x18;
+        private final static int SDEFINE1                       = 0x19;
+        private final static int SDEFINE2                       = 0x1A;
+        private final static int SDEFINE3                       = 0x1B;
+        private final static int SDEFINE4                       = 0x1C;
+        private final static int SDEFINE5                       = 0x1D;
+        private final static int SDEFINE6                       = 0x1E;
+        private final static int SDEFINE7                       = 0x1F;
+
+        //==========================
+        // Unicode mode tags
+        //==========================
+        private final static int USWITCH0                       = 0xE0;
+        private final static int USWITCH1                       = 0xE1;
+        private final static int USWITCH2                       = 0xE2;
+        private final static int USWITCH3                       = 0xE3;
+        private final static int USWITCH4                       = 0xE4;
+        private final static int USWITCH5                       = 0xE5;
+        private final static int USWITCH6                       = 0xE6;
+        private final static int USWITCH7                       = 0xE7;
+
+        private final static int UDEFINE0                       = 0xE8;
+        private final static int UDEFINE1                       = 0xE9;
+        private final static int UDEFINE2                       = 0xEA;
+        private final static int UDEFINE3                       = 0xEB;
+        private final static int UDEFINE4                       = 0xEC;
+        private final static int UDEFINE5                       = 0xED;
+        private final static int UDEFINE6                       = 0xEE;
+        private final static int UDEFINE7                       = 0xEF;
+
+        private final static int UQUOTEU                        = 0xF0;
+        private final static int UDEFINEX                       = 0xF1;
+        private final static int URESERVED                      = 0xF2;         // this is a reserved value
+
+    /* Print out an array of characters, with non-printables (for me) 
+       displayed as hex values */
+    private void printChars(char[] chars, int len) {
+        for(int i = 0; i < len; i++) {
+            int c = (int)chars[i];
+            if(c < 0x0020 || c >= 0x7f) {
+                log("[0x");
+                log(Integer.toHexString(c));
+                log("]");
+            } else {
+                log(String.valueOf((char)c));
+            }
+        }
+        logln("");
+    }
+
+    private void printBytes(byte[] byteBuffer, int len) {
+        int curByteIndex = 0;
+        int byteBufferLimit = len;
+        int mode = SINGLEBYTEMODE;
+        int aByte = 0x00;
+        
+        if(len > byteBuffer.length) {
+            logln("Warning: printBytes called with length too large. Truncating");
+            byteBufferLimit = byteBuffer.length;;
+        }
+        
+        while(curByteIndex < byteBufferLimit) {
+            switch(mode) {  
+            case SINGLEBYTEMODE:
+                while(curByteIndex < byteBufferLimit 
+                      && mode == SINGLEBYTEMODE)  {
+                    aByte = ((int)byteBuffer[curByteIndex++]) & 0xFF;
+                    switch(aByte) {
+                    default:
+                        log(Integer.toHexString(((int) aByte) & 0xFF) + " ");
+                        break;
+                        // quote unicode
+                    case SQUOTEU:
+                        log("SQUOTEU ");
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        break;
+                        
+                        // switch to Unicode mode
+                    case SSWITCHU:
+                        log("SSWITCHU ");
+                        mode = UNICODEMODE;
+                        break;
+                        
+                        // handle all quote tags
+                    case SQUOTE0: case SQUOTE1: case SQUOTE2: case SQUOTE3:
+                    case SQUOTE4: case SQUOTE5: case SQUOTE6: case SQUOTE7:
+                        log("SQUOTE" + (aByte - SQUOTE0) + " ");
+                        if(curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        break;
+                        
+                        // handle all switch tags
+                    case SSWITCH0: case SSWITCH1: case SSWITCH2: case SSWITCH3:
+                    case SSWITCH4: case SSWITCH5: case SSWITCH6: case SSWITCH7:
+                        log("SSWITCH" + (aByte - SSWITCH0) + " ");
+                        break;
+                                        
+                        // handle all define tags
+                    case SDEFINE0: case SDEFINE1: case SDEFINE2: case SDEFINE3:
+                    case SDEFINE4: case SDEFINE5: case SDEFINE6: case SDEFINE7:
+                        log("SDEFINE" + (aByte - SDEFINE0) + " ");
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        break;
+                        
+                        // handle define extended tag
+                    case SDEFINEX:
+                        log("SDEFINEX ");
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        break;
+                        
+                    } // end switch
+                } // end while
+                break;
+                
+            case UNICODEMODE:
+                while(curByteIndex < byteBufferLimit && mode == UNICODEMODE) {
+                    aByte = ((int)byteBuffer[curByteIndex++]) & 0xFF;
+                    switch(aByte) {
+                        // handle all define tags
+                    case UDEFINE0: case UDEFINE1: case UDEFINE2: case UDEFINE3:
+                    case UDEFINE4: case UDEFINE5: case UDEFINE6: case UDEFINE7:
+                        log("UDEFINE" + (aByte - UDEFINE0) + " ");
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        mode = SINGLEBYTEMODE;
+                        break;
+                        
+                        // handle define extended tag
+                    case UDEFINEX:
+                        log("UDEFINEX ");
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        break;
+                        
+                        // handle all switch tags
+                    case USWITCH0: case USWITCH1: case USWITCH2: case USWITCH3:
+                    case USWITCH4: case USWITCH5: case USWITCH6: case USWITCH7:
+                        log("USWITCH" + (aByte - USWITCH0) + " ");
+                        mode = SINGLEBYTEMODE;
+                        break;
+                        
+                        // quote unicode
+                    case UQUOTEU:
+                        log("UQUOTEU ");
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        break;
+                        
+                    default:
+                        log(Integer.toHexString(((int) aByte) & 0xFF) + " ");
+                        if (curByteIndex < byteBufferLimit) {
+                            log(Integer.toHexString(((int) byteBuffer[curByteIndex++]) & 0xFF) + " ");
+                        }
+                        break;
+                        
+                    } // end switch
+                } // end while
+                break;
+                
+            } // end switch( mode )
+        } // end while
+        
+        logln("");
+    }    
+}
+
+
+
+
+
+
diff --git a/src/com/ibm/test/compression/package.html b/src/com/ibm/test/compression/package.html
new file mode 100755
index 0000000..6dfab86
--- /dev/null
+++ b/src/com/ibm/test/compression/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/compression/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:49 $
+-->
+</head>
+<body bgcolor="white">
+Tests for the compression classes.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/normalizer/BasicTest.java b/src/com/ibm/test/normalizer/BasicTest.java
new file mode 100755
index 0000000..124de11
--- /dev/null
+++ b/src/com/ibm/test/normalizer/BasicTest.java
@@ -0,0 +1,491 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/normalizer/Attic/BasicTest.java,v $ 
+ * $Date: 2001/04/02 19:21:06 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.normalizer;
+
+import com.ibm.test.*;
+import com.ibm.text.*;
+import com.ibm.util.Utility;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+
+public class BasicTest extends TestFmwk {
+    public static void main(String[] args) throws Exception {
+        new BasicTest().run(args);
+    }
+
+    String[][] canonTests = {
+        // Input                Decomposed              Composed
+        { "cat",                "cat",                  "cat"               },
+        { "\u00e0ardvark",      "a\u0300ardvark",       "\u00e0ardvark",    },
+
+        { "\u1e0a",             "D\u0307",              "\u1e0a"            }, // D-dot_above
+        { "D\u0307",            "D\u0307",              "\u1e0a"            }, // D dot_above
+
+        { "\u1e0c\u0307",       "D\u0323\u0307",        "\u1e0c\u0307"      }, // D-dot_below dot_above
+        { "\u1e0a\u0323",       "D\u0323\u0307",        "\u1e0c\u0307"      }, // D-dot_above dot_below
+        { "D\u0307\u0323",      "D\u0323\u0307",        "\u1e0c\u0307"      }, // D dot_below dot_above
+
+        { "\u1e10\u0307\u0323", "D\u0327\u0323\u0307",  "\u1e10\u0323\u0307"}, // D dot_below cedilla dot_above
+        { "D\u0307\u0328\u0323","D\u0328\u0323\u0307",  "\u1e0c\u0328\u0307"}, // D dot_above ogonek dot_below
+
+        { "\u1E14",             "E\u0304\u0300",        "\u1E14"            }, // E-macron-grave
+        { "\u0112\u0300",       "E\u0304\u0300",        "\u1E14"            }, // E-macron + grave
+        { "\u00c8\u0304",       "E\u0300\u0304",        "\u00c8\u0304"      }, // E-grave + macron
+
+        { "\u212b",             "A\u030a",              "\u00c5"            }, // angstrom_sign
+        { "\u00c5",             "A\u030a",              "\u00c5"            }, // A-ring
+
+//        { "\u00fdffin",              "A\u0308ffin",          "\u00fdffin"             },
+        { "\u00fdffin",              "y\u0301ffin",          "\u00fdffin"             },	//updated with 3.0
+//        { "\u00fd\uFB03n",           "A\u0308\uFB03n",       "\u00fd\uFB03n"          },
+        { "\u00fd\uFB03n",           "y\u0301\uFB03n",       "\u00fd\uFB03n"          },	//updated with 3.0
+
+        { "Henry IV",           "Henry IV",             "Henry IV"          },
+        { "Henry \u2163",       "Henry \u2163",         "Henry \u2163"      },
+
+        { "\u30AC",             "\u30AB\u3099",         "\u30AC"            }, // ga (Katakana)
+        { "\u30AB\u3099",       "\u30AB\u3099",         "\u30AC"            }, // ka + ten
+        { "\uFF76\uFF9E",       "\uFF76\uFF9E",         "\uFF76\uFF9E"      }, // hw_ka + hw_ten
+        { "\u30AB\uFF9E",       "\u30AB\uFF9E",         "\u30AB\uFF9E"      }, // ka + hw_ten
+        { "\uFF76\u3099",       "\uFF76\u3099",         "\uFF76\u3099"      }, // hw_ka + ten
+
+        { "A\u0300\u0316", "A\u0316\u0300", "\u00C0\u0316" },
+    };
+
+    String[][] compatTests = {
+            // Input                Decomposed              Composed
+        { "\uFB4f",             "\u05D0\u05DC",         "\u05D0\u05DC",     }, // Alef-Lamed vs. Alef, Lamed
+
+//        { "\u00fdffin",              "A\u0308ffin",          "\u00fdffin"             },
+//       { "\u00fd\uFB03n",           "A\u0308ffin",          "\u00fdffin"             }, // ffi ligature -> f + f + i
+        { "\u00fdffin",              "y\u0301ffin",          "\u00fdffin"             },	//updated for 3.0
+        { "\u00fd\uFB03n",           "y\u0301ffin",          "\u00fdffin"             }, // ffi ligature -> f + f + i
+
+        { "Henry IV",           "Henry IV",             "Henry IV"          },
+        { "Henry \u2163",       "Henry IV",             "Henry IV"          },
+
+        { "\u30AC",             "\u30AB\u3099",         "\u30AC"            }, // ga (Katakana)
+        { "\u30AB\u3099",       "\u30AB\u3099",         "\u30AC"            }, // ka + ten
+
+        { "\uFF76\u3099",       "\u30AB\u3099",         "\u30AC"            }, // hw_ka + ten
+
+        /* These two are broken in Unicode 2.1.2 but fixed in 2.1.5 and later
+        { "\uFF76\uFF9E",       "\u30AB\u3099",         "\u30AC"            }, // hw_ka + hw_ten
+        { "\u30AB\uFF9E",       "\u30AB\u3099",         "\u30AC"            }, // ka + hw_ten
+        */
+    };
+
+    // With Canonical decomposition, Hangul syllables should get decomposed
+    // into Jamo, but Jamo characters should not be decomposed into
+    // conjoining Jamo
+    String[][] hangulCanon = {
+        // Input                Decomposed              Composed
+        { "\ud4db",             "\u1111\u1171\u11b6",   "\ud4db"        },
+        { "\u1111\u1171\u11b6", "\u1111\u1171\u11b6",   "\ud4db"        },
+    };
+
+    // With compatibility decomposition turned on,
+    // it should go all the way down to conjoining Jamo characters.
+    // THIS IS NO LONGER TRUE IN UNICODE v2.1.8, SO THIS TEST IS OBSOLETE
+    String[][] hangulCompat = {
+        // Input        Decomposed                          Composed
+        // { "\ud4db",     "\u1111\u116e\u1175\u11af\u11c2",   "\ud478\u1175\u11af\u11c2"  },
+    };
+
+    public void TestHangulCompose() {
+        // Make sure that the static composition methods work
+        logln("Canonical composition...");
+        staticTest(Normalizer.COMPOSE,        0, hangulCanon,  2);
+        logln("Compatibility composition...");
+        staticTest(Normalizer.COMPOSE_COMPAT, 0, hangulCompat, 2);
+
+        // Now try iterative composition....
+        logln("Static composition...");
+        Normalizer norm = new Normalizer("", Normalizer.COMPOSE, 0);
+        iterateTest(norm, hangulCanon, 2);
+
+        norm.setMode(Normalizer.COMPOSE_COMPAT);
+        iterateTest(norm, hangulCompat, 2);
+
+        // And finally, make sure you can do it in reverse too
+        logln("Reverse iteration...");
+        norm.setMode(Normalizer.COMPOSE);
+        backAndForth(norm, hangulCanon);
+    }
+
+    public void TestHangulDecomp() {
+        // Make sure that the static decomposition methods work
+        logln("Canonical decomposition...");
+        staticTest(Normalizer.DECOMP,        0, hangulCanon,  1);
+        logln("Compatibility decomposition...");
+        staticTest(Normalizer.DECOMP_COMPAT, 0, hangulCompat, 1);
+
+        // Now the iterative decomposition methods...
+        logln("Iterative decomposition...");
+        Normalizer norm = new Normalizer("", Normalizer.DECOMP, 0);
+        iterateTest(norm, hangulCanon, 1);
+
+        norm.setMode(Normalizer.DECOMP_COMPAT);
+        iterateTest(norm, hangulCompat, 1);
+
+        // And finally, make sure you can do it in reverse too
+        logln("Reverse iteration...");
+        norm.setMode(Normalizer.DECOMP);
+        backAndForth(norm, hangulCanon);
+    }
+
+    public void TestPrevious() {
+        Normalizer norm = new Normalizer("", Normalizer.DECOMP, 0);
+
+        logln("testing decomp...");
+        backAndForth(norm, canonTests);
+
+        logln("testing compose...");
+        norm.setMode(Normalizer.COMPOSE);
+        backAndForth(norm, canonTests);
+    }
+
+    public void TestDecomp() {
+        Normalizer norm = new Normalizer("", Normalizer.DECOMP, 0);
+        iterateTest(norm, canonTests, 1);
+
+        staticTest(Normalizer.DECOMP, 0, canonTests, 1);
+    }
+
+    public void TestCompatDecomp() {
+        Normalizer norm = new Normalizer("", Normalizer.DECOMP_COMPAT, 0);
+        iterateTest(norm, compatTests, 1);
+
+        staticTest(Normalizer.DECOMP_COMPAT, 0, compatTests, 1);
+    }
+
+    public void TestCanonCompose() {
+        Normalizer norm = new Normalizer("", Normalizer.COMPOSE, 0);
+        iterateTest(norm, canonTests, 2);
+
+        staticTest(Normalizer.COMPOSE, 0, canonTests, 2);
+    }
+
+    public void TestCompatCompose() {
+        Normalizer norm = new Normalizer("", Normalizer.COMPOSE_COMPAT, 0);
+        iterateTest(norm, compatTests, 2);
+
+        staticTest(Normalizer.COMPOSE_COMPAT, 0, compatTests, 2);
+    }
+
+    public void TestExplodingBase() {
+        // \u017f - Latin small letter long s
+        // \u0307 - combining dot above
+        // \u1e61 - Latin small letter s with dot above
+        // \u1e9b - Latin small letter long s with dot above
+        String[][] canon = {
+            // Input                Decomposed              Composed
+            { "Tschu\u017f",        "Tschu\u017f",          "Tschu\u017f"       },
+            { "Tschu\u1e9b",        "Tschu\u017f\u0307",    "Tschu\u1e9b"       },
+        };
+        String[][] compat = {
+            // Input                Decomposed              Composed
+            { "\u017f",        "s",              "s"           },
+            { "\u1e9b",        "s\u0307",        "\u1e61"      },
+        };
+
+        staticTest(Normalizer.DECOMP,           0, canon,  1);
+        staticTest(Normalizer.COMPOSE,          0, canon,  2);
+
+        staticTest(Normalizer.DECOMP_COMPAT,    0, compat, 1);
+        staticTest(Normalizer.COMPOSE_COMPAT,   0, compat, 2);
+
+        Normalizer norm = new Normalizer("", Normalizer.DECOMP_COMPAT);
+        iterateTest(norm, compat, 1);
+        backAndForth(norm, compat);
+
+        norm.setMode(Normalizer.COMPOSE_COMPAT);
+        iterateTest(norm, compat, 2);
+        backAndForth(norm, compat);
+    }
+
+    /**
+     * The Tibetan vowel sign AA, 0f71, was messed up prior to Unicode version 2.1.9.
+     * Once 2.1.9 or 3.0 is released, uncomment this test.
+     */
+    public void TestTibetan() {
+        String[][] decomp = {
+            { "\u0f77", "\u0f77", "\u0fb2\u0f71\u0f80" }
+        };
+        String[][] compose = {
+            { "\u0fb2\u0f71\u0f80", "\u0fb2\u0f71\u0f80", "\u0fb2\u0f71\u0f80" }
+        };
+
+        staticTest(Normalizer.DECOMP,           0, decomp, 1);
+        staticTest(Normalizer.DECOMP_COMPAT,    0, decomp, 2);
+        staticTest(Normalizer.COMPOSE,          0, compose, 1);
+        staticTest(Normalizer.COMPOSE_COMPAT,   0, compose, 2);
+    }
+
+    /**
+     * Make sure characters in the CompositionExclusion.txt list do not get
+     * composed to.
+     */
+    public void TestCompositionExclusion() {
+        // This list is generated from CompositionExclusion.txt.
+        // Update whenever the normalizer tables are updated.  Note
+        // that we test all characters listed, even those that can be
+        // derived from the Unicode DB and are therefore commented
+        // out.
+        String EXCLUDED = 
+            "\u0340\u0341\u0343\u0344\u0374\u037E\u0387\u0958" +
+            "\u0959\u095A\u095B\u095C\u095D\u095E\u095F\u09DC" +
+            "\u09DD\u09DF\u0A33\u0A36\u0A59\u0A5A\u0A5B\u0A5E" +
+            "\u0B5C\u0B5D\u0F43\u0F4D\u0F52\u0F57\u0F5C\u0F69" +
+            "\u0F73\u0F75\u0F76\u0F78\u0F81\u0F93\u0F9D\u0FA2" +
+            "\u0FA7\u0FAC\u0FB9\u1F71\u1F73\u1F75\u1F77\u1F79" +
+            "\u1F7B\u1F7D\u1FBB\u1FBE\u1FC9\u1FCB\u1FD3\u1FDB" +
+            "\u1FE3\u1FEB\u1FEE\u1FEF\u1FF9\u1FFB\u1FFD\u2000" +
+            "\u2001\u2126\u212A\u212B\u2329\u232A\uF900\uFA10" +
+            "\uFA12\uFA15\uFA20\uFA22\uFA25\uFA26\uFA2A\uFB1F" +
+            "\uFB2A\uFB2B\uFB2C\uFB2D\uFB2E\uFB2F\uFB30\uFB31" +
+            "\uFB32\uFB33\uFB34\uFB35\uFB36\uFB38\uFB39\uFB3A" +
+            "\uFB3B\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46" +
+            "\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C\uFB4D\uFB4E";
+        for (int i=0; i<EXCLUDED.length(); ++i) {
+            String a = String.valueOf(EXCLUDED.charAt(i));
+            String b = Normalizer.normalize(a, Normalizer.DECOMP_COMPAT, 0);
+            String c = Normalizer.normalize(b, Normalizer.COMPOSE, 0);
+            if (c.equals(a)) {
+                errln("FAIL: " + hex(a) + " x DECOMP_COMPAT => " +
+                      hex(b) + " x COMPOSE => " +
+                      hex(c));
+            } else if (isVerbose()) {
+                logln("Ok: " + hex(a) + " x DECOMP_COMPAT => " +
+                      hex(b) + " x COMPOSE => " +
+                      hex(c));                
+            }
+        }
+        // The following method works too, but it is somewhat
+        // incestuous.  It uses UInfo, which is the same database that
+        // NormalizerBuilder uses, so if something is wrong with
+        // UInfo, the following test won't show it.  All it will show
+        // is that NormalizerBuilder has been run with whatever the
+        // current UInfo is.
+        // 
+        // We comment this out in favor of the test above, which
+        // provides independent verification (but also requires
+        // independent updating).
+//      logln("---");
+//      UInfo uinfo = new UInfo();
+//      for (int i=0; i<=0xFFFF; ++i) {
+//          if (!uinfo.isExcludedComposition((char)i) ||
+//              (!uinfo.hasCanonicalDecomposition((char)i) &&
+//               !uinfo.hasCompatibilityDecomposition((char)i))) continue;
+//          String a = String.valueOf((char)i);
+//          String b = Normalizer.normalize(a, Normalizer.DECOMP_COMPAT, 0);
+//          String c = Normalizer.normalize(b, Normalizer.COMPOSE, 0);
+//          if (c.equals(a)) {
+//              errln("FAIL: " + hex(a) + " x DECOMP_COMPAT => " +
+//                    hex(b) + " x COMPOSE => " +
+//                    hex(c));
+//          } else if (isVerbose()) {
+//              logln("Ok: " + hex(a) + " x DECOMP_COMPAT => " +
+//                    hex(b) + " x COMPOSE => " +
+//                    hex(c));                
+//          }
+//      }
+    }
+
+    /**
+     * Test for a problem that showed up just before ICU 1.6 release
+     * having to do with combining characters with an index of zero.
+     * Such characters do not participate in any canonical
+     * decompositions.  However, having an index of zero means that
+     * they all share one typeMask[] entry, that is, they all have to
+     * map to the same canonical class, which is not the case, in
+     * reality.
+     */
+    public void TestZeroIndex() {
+        String[] DATA = {
+            // Expect col1 x COMPOSE_COMPAT => col2
+            // Expect col2 x DECOMP => col3
+            "A\u0316\u0300", "\u00C0\u0316", "A\u0316\u0300",
+            "A\u0300\u0316", "\u00C0\u0316", "A\u0316\u0300",
+            "A\u0327\u0300", "\u00C0\u0327", "A\u0327\u0300",
+            "c\u0321\u0327", "c\u0321\u0327", "c\u0321\u0327",
+            "c\u0327\u0321", "\u00E7\u0321", "c\u0327\u0321",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            String a = DATA[i];
+            String b = Normalizer.normalize(a, Normalizer.COMPOSE_COMPAT, 0);
+            String exp = DATA[i+1];
+            if (b.equals(exp)) {
+                logln("Ok: " + hex(a) + " x COMPOSE_COMPAT => " + hex(b));
+            } else {
+                errln("FAIL: " + hex(a) + " x COMPOSE_COMPAT => " + hex(b) +
+                      ", expect " + hex(exp));
+            }
+            a = Normalizer.normalize(b, Normalizer.DECOMP, 0);
+            exp = DATA[i+2];
+            if (a.equals(exp)) {
+                logln("Ok: " + hex(b) + " x DECOMP => " + hex(a));
+            } else {
+                errln("FAIL: " + hex(b) + " x DECOMP => " + hex(a) +
+                      ", expect " + hex(exp));
+            }
+        }
+    }
+
+    /**
+     * Test for a problem found by Verisign.  Problem is that
+     * characters at the start of a string are not put in canonical
+     * order correctly by compose() if there is no starter.
+     */
+    public void TestVerisign() {
+        String[] inputs = {
+            "\u05b8\u05b9\u05b1\u0591\u05c3\u05b0\u05ac\u059f",
+            "\u0592\u05b7\u05bc\u05a5\u05b0\u05c0\u05c4\u05ad"
+        };
+        String[] outputs = {
+            "\u05b1\u05b8\u05b9\u0591\u05c3\u05b0\u05ac\u059f",
+            "\u05b0\u05b7\u05bc\u05a5\u0592\u05c0\u05ad\u05c4"
+        };
+
+        for (int i = 0; i < inputs.length; ++i) {
+            String input = inputs[i];
+            String output = outputs[i];
+            String result = Normalizer.decompose(input, false, 0);
+            if (!result.equals(output)) {
+                errln("FAIL input: " + Utility.escape(input));
+                errln(" decompose: " + Utility.escape(result));
+                errln("  expected: " + Utility.escape(output));
+            }
+            result = Normalizer.compose(input, false, 0);
+            if (!result.equals(output)) {
+                errln("FAIL input: " + Utility.escape(input));
+                errln("   compose: " + Utility.escape(result));
+                errln("  expected: " + Utility.escape(output));
+            }
+        }
+    }
+
+    //------------------------------------------------------------------------
+    // Internal utilities
+    //
+
+    private void backAndForth(Normalizer iter, String input)
+    {
+        iter.setText(input);
+
+        // Run through the iterator forwards and stick it into a StringBuffer
+        StringBuffer forward =  new StringBuffer();
+        for (char ch = iter.first(); ch != iter.DONE; ch = iter.next()) {
+            forward.append(ch);
+        }
+
+        // Now do it backwards
+        StringBuffer reverse = new StringBuffer();
+        for (char ch = iter.last(); ch != iter.DONE; ch = iter.previous()) {
+            reverse.insert(0, ch);
+        }
+
+        if (!forward.toString().equals(reverse.toString())) {
+            errln("FAIL: Forward/reverse mismatch for input " + hex(input)
+                  + ", forward: " + hex(forward) + ", backward: " + hex(reverse));
+        } else if (isVerbose()) {
+            logln("Ok: Forward/reverse for input " + hex(input)
+                  + ", forward: " + hex(forward) + ", backward: " + hex(reverse));
+        }
+    }
+
+    private void backAndForth(Normalizer iter, String[][] tests)
+    {
+        for (int i = 0; i < tests.length; i++)
+        {
+            iter.setText(tests[i][0]);
+
+            // Run through the iterator forwards and stick it into a StringBuffer
+            StringBuffer forward =  new StringBuffer();
+            for (char ch = iter.first(); ch != iter.DONE; ch = iter.next()) {
+                forward.append(ch);
+            }
+
+            // Now do it backwards
+            StringBuffer reverse = new StringBuffer();
+            for (char ch = iter.last(); ch != iter.DONE; ch = iter.previous()) {
+                reverse.insert(0, ch);
+            }
+
+            if (!forward.toString().equals(reverse.toString())) {
+                errln("FAIL: Forward/reverse mismatch for input " + hex(tests[i][0])
+                    + ", forward: " + hex(forward) + ", backward: " + hex(reverse));
+            } else if (isVerbose()) {
+                logln("Ok: Forward/reverse for input " + hex(tests[i][0])
+                      + ", forward: " + hex(forward) + ", backward: " + hex(reverse));
+            }
+        }
+    }
+
+    private void staticTest(Normalizer.Mode mode, int options, String[][] tests, int outCol)
+    {
+        for (int i = 0; i < tests.length; i++)
+        {
+            String input = tests[i][0];
+            String expect = tests[i][outCol];
+
+            logln("Normalizing '" + input + "' (" + hex(input) + ")" );
+
+            String output = Normalizer.normalize(input, mode, options);
+
+            if (!output.equals(expect)) {
+                errln("FAIL: case " + i
+                    + " expected '" + expect + "' (" + hex(expect) + ")"
+                    + " but got '" + output + "' (" + hex(output) + ")" );
+            }
+        }
+    }
+
+    private void iterateTest(Normalizer iter, String[][] tests, int outCol)
+    {
+        for (int i = 0; i < tests.length; i++)
+        {
+            String input = tests[i][0];
+            String expect = tests[i][outCol];
+
+            logln("Normalizing '" + input + "' (" + hex(input) + ")" );
+
+            iter.setText(input);
+            assertEqual(expect, iter, "case " + i + " ");
+        }
+    }
+
+    private void assertEqual(String expected, Normalizer iter, String msg)
+    {
+        int index = 0;
+        for (char ch = iter.first(); ch != iter.DONE; ch = iter.next())
+        {
+            if (index >= expected.length()) {
+                errln("FAIL: " + msg + "Unexpected character '" + ch + "' (" + hex(ch) + ")"
+                        + " at index " + index);
+                break;
+            }
+            char want = expected.charAt(index);
+            if (ch != want) {
+                errln("FAIL: " + msg + "got '" + ch + "' (" + hex(ch) + ")"
+                        + " but expected '" + want + "' (" + hex(want) + ")"
+                        + " at index " + index);
+            }
+            index++;
+        }
+        if (index < expected.length()) {
+            errln("FAIL: " + msg + "Only got " + index + " chars, expected " + expected.length());
+        }
+    }
+}
diff --git a/src/com/ibm/test/normalizer/ConformanceTest.java b/src/com/ibm/test/normalizer/ConformanceTest.java
new file mode 100755
index 0000000..2ada92a
--- /dev/null
+++ b/src/com/ibm/test/normalizer/ConformanceTest.java
@@ -0,0 +1,248 @@
+/*
+************************************************************************
+* Copyright (c) 1997-2000, International Business Machines
+* Corporation and others.  All Rights Reserved.
+************************************************************************
+*/
+
+package com.ibm.test.normalizer;
+
+import java.io.*;
+import com.ibm.test.*;
+import com.ibm.text.*;
+import com.ibm.util.Utility;
+
+public class ConformanceTest extends TestFmwk {
+
+    Normalizer normalizer;
+
+    static final String TEST_SUITE_FILE =
+        "src/data/unicode/Draft-TestSuite.txt";
+
+    public static void main(String[] args) throws Exception {
+        new ConformanceTest().run(args);
+    }
+
+    public ConformanceTest() {
+        // Doesn't matter what the string and mode are; we'll change
+        // them later as needed.
+        normalizer = new Normalizer("", Normalizer.COMPOSE);
+    }
+
+    /**
+     * Test the conformance of Normalizer to
+     * http://www.unicode.org/unicode/reports/tr15/conformance/Draft-TestSuite.txt.
+     * This file must be located at the path specified as TEST_SUITE_FILE.
+     */
+    public void TestConformance() {
+        BufferedReader input = null;
+        String line = null;
+        String[] fields = new String[5];
+        StringBuffer buf = new StringBuffer();
+        int passCount = 0;
+        int failCount = 0;
+
+        try {
+            input = new BufferedReader(new FileReader(TEST_SUITE_FILE),64*1024);
+            for (int count = 0;;++count) {
+                line = input.readLine();
+                if (line == null) break;
+                if (line.length() == 0) continue;
+
+                // Expect 5 columns of this format:
+                // 1E0C;1E0C;0044 0323;1E0C;0044 0323; # <comments>
+
+                // Skip comments
+                if (line.charAt(0) == '#') continue;
+
+                // Parse out the fields
+                hexsplit(line, ';', fields, buf);
+                if (checkConformance(fields, line)) {
+                    ++passCount;
+                } else {
+                    ++failCount;
+                }
+                if ((count % 1000) == 999) {
+                    logln("Line " + (count+1));
+                }
+            }
+        } catch (IOException ex) {
+            try {
+                input.close();
+            } catch (Exception ex2) {}
+            ex.printStackTrace();
+            throw new IllegalArgumentException("Couldn't read file "
+              + ex.getClass().getName() + " " + ex.getMessage()
+              + " line = " + line
+              );
+        }
+
+        if (failCount != 0) {
+            errln("Total: " + failCount + " lines failed, " +
+                  passCount + " lines passed");
+        } else {
+            logln("Total: " + passCount + " lines passed");
+        }
+    }
+
+    /**
+     * Verify the conformance of the given line of the Unicode
+     * normalization (UTR 15) test suite file.  For each line,
+     * there are five columns, corresponding to field[0]..field[4].
+     *
+     * The following invariants must be true for all conformant implementations
+     *  c2 == NFC(c1) == NFC(c2) == NFC(c3)
+     *  c3 == NFD(c1) == NFD(c2) == NFD(c3)
+     *  c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5)
+     *  c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5)
+     *
+     * @param field the 5 columns
+     * @param line the source line from the test suite file
+     * @return true if the test passes
+     */
+    private boolean checkConformance(String[] field, String line) {
+        boolean pass = true;
+        StringBuffer buf = new StringBuffer(); // scratch
+        String out;
+        
+        for (int i=0; i<5; ++i) {
+            if (i<3) {
+                out = Normalizer.normalize(field[i], Normalizer.COMPOSE, 0);
+                pass &= assertEqual("C", field[i], out, field[1], "c2!=C(c" + (i+1));
+                out = iterativeNorm(field[i], Normalizer.COMPOSE, buf, +1);
+                pass &= assertEqual("C(+1)", field[i], out, field[1], "c2!=C(c" + (i+1));
+                out = iterativeNorm(field[i], Normalizer.COMPOSE, buf, -1);
+                pass &= assertEqual("C(-1)", field[i], out, field[1], "c2!=C(c" + (i+1));
+
+                out = Normalizer.normalize(field[i], Normalizer.DECOMP, 0);
+                pass &= assertEqual("D", field[i], out, field[2], "c3!=D(c" + (i+1));
+                out = iterativeNorm(field[i], Normalizer.DECOMP, buf, +1);
+                pass &= assertEqual("D(+1)", field[i], out, field[2], "c3!=D(c" + (i+1));
+                out = iterativeNorm(field[i], Normalizer.DECOMP, buf, -1);
+                pass &= assertEqual("D(-1)", field[i], out, field[2], "c3!=D(c" + (i+1));
+            }
+            out = Normalizer.normalize(field[i], Normalizer.COMPOSE_COMPAT, 0);
+            pass &= assertEqual("KC", field[i], out, field[3], "c4!=KC(c" + (i+1));
+            out = iterativeNorm(field[i], Normalizer.COMPOSE_COMPAT, buf, +1);
+            pass &= assertEqual("KD(+1)", field[i], out, field[3], "c4!=KC(c" + (i+1));
+            out = iterativeNorm(field[i], Normalizer.COMPOSE_COMPAT, buf, -1);
+            pass &= assertEqual("KD(-1)", field[i], out, field[3], "c4!=KC(c" + (i+1));
+
+            out = Normalizer.normalize(field[i], Normalizer.DECOMP_COMPAT, 0);
+            pass &= assertEqual("KD", field[i], out, field[4], "c5!=KD(c" + (i+1));
+            out = iterativeNorm(field[i], Normalizer.DECOMP_COMPAT, buf, +1);
+            pass &= assertEqual("KD(+1)", field[i], out, field[4], "c5!=KD(c" + (i+1));
+            out = iterativeNorm(field[i], Normalizer.DECOMP_COMPAT, buf, -1);
+            pass &= assertEqual("KD(-1)", field[i], out, field[4], "c5!=KD(c" + (i+1));
+        }
+        if (!pass) {
+            errln("FAIL: " + line);
+        }
+        return pass;
+    }
+
+    /**
+     * Do a normalization using the iterative API in the given direction.
+     * @param buf scratch buffer
+     * @param dir either +1 or -1
+     */
+    private String iterativeNorm(String str, Normalizer.Mode mode,
+                                 StringBuffer buf, int dir) {
+        normalizer.setText(str);
+        normalizer.setMode(mode);
+        buf.setLength(0);
+        char ch;
+        if (dir > 0) {
+            for (ch = normalizer.first(); ch != Normalizer.DONE;
+                 ch = normalizer.next()) {
+                buf.append(ch);
+            }
+        } else {
+            for (ch = normalizer.last(); ch != Normalizer.DONE;
+                 ch = normalizer.previous()) {
+                buf.insert(0, ch);
+            }
+        }
+        return buf.toString();
+    }
+
+    /**
+     * @param op name of normalization form, e.g., "KC"
+     * @param s string being normalized
+     * @param got value received
+     * @param exp expected value
+     * @param msg description of this test
+     * @param return true if got == exp
+     */
+    private boolean assertEqual(String op, String s, String got,
+                                String exp, String msg) {
+        if (exp.equals(got)) {
+            return true;
+        }
+        errln(Utility.escape("      " + msg + ") " + op + "(" + s + ")=" + got +
+                             ", exp. " + exp));
+        return false;
+    }
+
+    /**
+     * Split a string into pieces based on the given delimiter
+     * character.  Then, parse the resultant fields from hex into
+     * characters.  That is, "0040 0400;0C00;0899" -> new String[] {
+     * "\u0040\u0400", "\u0C00", "\u0899" }.  The output is assumed to
+     * be of the proper length already, and exactly output.length
+     * fields are parsed.  If there are too few an exception is
+     * thrown.  If there are too many the extras are ignored.
+     *
+     * @param buf scratch buffer
+     */
+    private static void hexsplit(String s, char delimiter,
+                                 String[] output, StringBuffer buf) {
+        int i;
+        int pos = 0;
+        for (i=0; i<output.length; ++i) {
+            int delim = s.indexOf(delimiter, pos);
+            if (delim < 0) {
+                throw new IllegalArgumentException("Missing field in " + s);
+            }
+            // Our field is from pos..delim-1.
+            buf.setLength(0);
+            while (pos < delim) {
+                if (s.charAt(pos) == ' ') {
+                    ++pos;
+                } else if (pos+4 > delim) {
+                    throw new IllegalArgumentException("Premature eol in " + s);
+                } else {
+                    int hex = Integer.parseInt(s.substring(pos, pos+4), 16);
+                    if (hex < 0 || hex > 0xFFFF) {
+                        throw new IllegalArgumentException("Out of range hex " +
+                                                           hex + " in " + s);
+                    }
+                    buf.append((char) hex);
+                    pos += 4;
+                }
+            }
+            if (buf.length() < 1) {
+                throw new IllegalArgumentException("Empty field " + i + " in " + s);
+            }
+            output[i] = buf.toString();
+            ++pos; // Skip over delim
+        }
+    }
+
+    // Specific tests for debugging.  These are generally failures
+    // taken from the conformance file, but culled out to make
+    // debugging easier.  These can be eliminated without affecting
+    // coverage.
+
+    public void _hideTestCase6() {
+        _testOneLine("0385;0385;00A8 0301;0020 0308 0301;0020 0308 0301;");
+    }
+
+    public void _testOneLine(String line) {
+        String[] fields = new String[5];
+        StringBuffer buf = new StringBuffer();
+        // Parse out the fields
+        hexsplit(line, ';', fields, buf);
+        checkConformance(fields, line);
+    }
+}
diff --git a/src/com/ibm/test/normalizer/ExhaustiveTest.java b/src/com/ibm/test/normalizer/ExhaustiveTest.java
new file mode 100755
index 0000000..d4b52ad
--- /dev/null
+++ b/src/com/ibm/test/normalizer/ExhaustiveTest.java
@@ -0,0 +1,147 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/normalizer/Attic/ExhaustiveTest.java,v $ 
+ * $Date: 2001/03/15 23:35:50 $ 
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.normalizer;
+
+import com.ibm.test.*;
+import com.ibm.text.*;
+import com.ibm.icu.internal.UInfo;
+
+public class ExhaustiveTest extends TestFmwk
+{
+    private UInfo info;
+	
+    public static void main(String[] args) throws Exception
+    {
+    	UInfo tempInfo = null;
+        String[] tempArgs = new String[args.length];
+        int count = 0;
+
+        // Allow the test to be pointed at a specific version of the Unicode database
+        for (int i = 0; i < args.length; i++)
+        {
+            if (args[i].equals("-data")) {
+                tempInfo = new UInfo(args[++i], args[++i]);
+            } else {
+                tempArgs[count++] = args[i];
+            }
+        }
+
+        args = new String[count];
+        System.arraycopy(tempArgs, 0, args, 0, count);
+
+
+        if (tempInfo == null) {
+            tempInfo = new UInfo();
+	    }
+        new ExhaustiveTest(tempInfo).run(args);
+    }
+    
+    public ExhaustiveTest() {
+    	this.info = new UInfo();
+    }
+
+    public ExhaustiveTest(UInfo info) {
+    	this.info = info;
+    }
+
+
+    /**
+     * Run through all of the characters returned by a composed-char iterator
+     * and make sure that:
+     * <ul>
+     * <li>a) They do indeed have decompositions.
+     * <li>b) The decomposition according to the iterator is the same as
+     *          returned by Normalizer.decompose().
+     * <li>c) All characters <em>not</em> returned by the iterator do not
+     *          have decompositions.
+     * </ul>
+     */
+    public void TestComposedCharIter() {
+        doTestComposedChars(false);
+    }
+
+    public void doTestComposedChars(boolean compat) {
+        int options = Normalizer.IGNORE_HANGUL;
+        ComposedCharIter iter = new ComposedCharIter(compat, options);
+
+        char lastChar = 0;
+
+        while (iter.hasNext()) {
+            char ch = iter.next();
+
+            // Test all characters between the last one and this one to make
+            // sure that they don't have decompositions
+            assertNoDecomp(lastChar, ch, compat, options);
+            lastChar = ch;
+
+            // Now make sure that the decompositions for this character
+            // make sense
+            String chString   = new StringBuffer().append(ch).toString();
+            String iterDecomp = iter.decomposition();
+            String normDecomp = Normalizer.decompose(chString, compat, 0);
+
+            if (iterDecomp.equals(chString)) {
+                errln("ERROR: " + hex(ch) + " has identical decomp");
+            }
+            else if (!iterDecomp.equals(normDecomp)) {
+                errln("ERROR: Normalizer decomp for " + hex(ch) + " (" + hex(normDecomp) + ")"
+                    + " != iter decomp (" + hex(iterDecomp) + ")" );
+            }
+        }
+        assertNoDecomp(lastChar, '\uFFFF', compat, options);
+    }
+
+    void assertNoDecomp(char start, char limit, boolean compat, int options)
+    {
+        for (char x = ++start; x < limit; x++) {
+            String xString   = new StringBuffer().append(x).toString();
+            String decomp = Normalizer.decompose(xString, compat, options);
+            if (!decomp.equals(xString)) {
+                errln("ERROR: " + hex(x) + " has decomposition (" + hex(decomp) + ")"
+                    + " but was not returned by iterator");
+            }
+        }
+    }
+
+
+    public void TestRoundTrip() {
+        int options = Normalizer.IGNORE_HANGUL;
+        boolean compat = false;
+
+        ComposedCharIter iter = new ComposedCharIter(false, options);
+        while (iter.hasNext()) {
+            char ch = iter.next();
+
+            String chStr = new StringBuffer().append(ch).toString();
+            String decomp = Normalizer.decompose(chStr, compat, options);
+            String comp = Normalizer.compose(decomp, compat, options);
+
+            short cClass = info.getCanonicalClass(decomp.charAt(0));
+
+            if (info.isExcludedComposition(ch)) {
+                logln("Skipped excluded char " + hex(ch) + " (" + info.getName(ch,true) + ")" );
+                continue;
+            }
+
+            // Avoid disparaged characters
+            if (info.getDecomposition(ch).length() == 4) continue;
+
+            if (!comp.equals(chStr)) {
+                errln("ERROR: Round trip invalid: " + hex(chStr) + " --> " + hex(decomp)
+                    + " --> " + hex(comp));
+
+                errln("  char decomp is '" + info.getDecomposition(ch) + "'");
+            }
+        }
+    }
+}
diff --git a/src/com/ibm/test/normalizer/package.html b/src/com/ibm/test/normalizer/package.html
new file mode 100755
index 0000000..7544760
--- /dev/null
+++ b/src/com/ibm/test/normalizer/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/normalizer/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:49 $
+-->
+</head>
+<body bgcolor="white">
+Tests for Normalizer.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/package.html b/src/com/ibm/test/package.html
new file mode 100755
index 0000000..f00ee5b
--- /dev/null
+++ b/src/com/ibm/test/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:48 $
+-->
+</head>
+<body bgcolor="white">
+Shared utilities for tests.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/rbbi/BreakIteratorRules_en_US_TEST.java b/src/com/ibm/test/rbbi/BreakIteratorRules_en_US_TEST.java
new file mode 100755
index 0000000..27f6486
--- /dev/null
+++ b/src/com/ibm/test/rbbi/BreakIteratorRules_en_US_TEST.java
@@ -0,0 +1,222 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbbi/Attic/BreakIteratorRules_en_US_TEST.java,v $
+ * $Date: 2001/02/06 22:37:58 $
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.rbbi;
+
+import java.util.ListResourceBundle;
+import java.net.URL;
+
+/**
+ * This resource bundle is included for testing and demonstration purposes only.
+ * It applies the dictionary-based algorithm to English text that has had all the
+ * spaces removed.  Once we have good test cases for Thai, we will replace this
+ * with good resource data (and a good dictionary file) for Thai
+ */
+public class BreakIteratorRules_en_US_TEST extends ListResourceBundle {
+    private static final URL url =
+        BreakIteratorRules_en_US_TEST.class.getResource("/com/ibm/data/misc/english.dict");
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    static final Object[][] contents = {
+        // names of classes to instantiate for the different kinds of break
+        // iterator.  Notice we're now using DictionaryBasedBreakIterator
+        // for word and line breaking.
+        { "BreakIteratorClasses",
+            new String[] { "RuleBasedBreakIterator",           // character-break iterator class
+                           "DictionaryBasedBreakIterator",     // word-break iterator class
+                           "DictionaryBasedBreakIterator",     // line-break iterator class
+                           "RuleBasedBreakIterator" }          // sentence-break iterator class
+        },
+
+        // These are the same word-breaking rules as are specified in the default
+        // resource, except that the Latin letters, apostrophe, and hyphen are
+        // specified as dictionary characters
+        { "WordBreakRules",
+            // ignore non-spacing marks, enclosing marks, and format characters,
+            // all of which should not influence the algorithm
+            "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
+
+            // lower and upper case Roman letters, apostrophy and dash are
+            // in the English dictionary
+            + "$_dictionary_=[a-zA-Z\\'\\-];"
+
+            // Hindi phrase separator, kanji, katakana, hiragana, CJK diacriticals,
+            // other letters, and digits
+            + "$danda=[\u0964\u0965];"
+            + "$kanji=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
+            + "$kata=[\u3099-\u309c\u30a1-\u30fe];"
+            + "$hira=[\u3041-\u309e\u30fc];"
+            + "$let=[[[:L:][:Mc:]]-[$kanji$kata$hira]];"
+            + "$dgt=[:N:];"
+
+            // punctuation that can occur in the middle of a word: currently
+            // dashes, apostrophes, and quotation marks
+            + "$mid_word=[[:Pd:]\u00ad\u2027\\\"\\\'];"
+
+            // punctuation that can occur in the middle of a number: currently
+            // apostrophes, qoutation marks, periods, commas, and the Arabic
+            // decimal point
+            + "$mid_num=[\\\"\\\'\\,\u066b\\.];"
+
+            // punctuation that can occur at the beginning of a number: currently
+            // the period, the number sign, and all currency symbols except the cents sign
+            + "$pre_num=[[[:Sc:]-[\u00a2]]\\#\\.];"
+
+            // punctuation that can occur at the end of a number: currently
+            // the percent, per-thousand, per-ten-thousand, and Arabic percent
+            // signs, the cents sign, and the ampersand
+            + "$post_num=[\\%\\&\u00a2\u066a\u2030\u2031];"
+
+            // line separators: currently LF, FF, PS, and LS
+            + "$ls=[\n\u000c\u2028\u2029];"
+
+            // whitespace: all space separators and the tab character
+            + "$ws=[[:Zs:]\t];"
+
+            // a word is a sequence of letters that may contain internal
+            // punctuation, as long as it begins and ends with a letter and
+            // never contains two punctuation marks in a row
+            + "$word=($let+($mid_word$let+)*$danda?);"
+
+            // a number is a sequence of digits that may contain internal
+            // punctuation, as long as it begins and ends with a digit and
+            // never contains two punctuation marks in a row.
+            + "$number=($dgt+($mid_num$dgt+)*);"
+
+            // break after every character, with the following exceptions
+            // (this will cause punctuation marks that aren't considered
+            // part of words or numbers to be treated as words unto themselves)
+            + ".;"
+
+            // keep together any sequence of contiguous words and numbers
+            // (including just one of either), plus an optional trailing
+            // number-suffix character
+            + "$word?($number$word)*($number$post_num?)?;"
+
+            // keep together and sequence of contiguous words and numbers
+            // that starts with a number-prefix character and a number,
+            // and may end with a number-suffix character
+            + "$pre_num($number$word)*($number$post_num?)?;"
+
+            // keep together runs of whitespace (optionally with a single trailing
+            // line separator or CRLF sequence)
+            + "$ws*\r?$ls?;"
+
+            // keep together runs of Katakana
+            + "$kata*;"
+
+            // keep together runs of Hiragana
+            + "$hira*;"
+
+            // keep together runs of Kanji
+            + "$kanji*;"},
+
+        // These are the same line-breaking rules as are specified in the default
+        // resource, except that the Latin letters, apostrophe, and hyphen are
+        // specified as dictionary characters
+        { "LineBreakRules",
+            // ignore non-spacing marks, enclosing marks, and format characters
+            "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
+
+            // lower and upper case Roman letters, apostrophy and dash
+            // are in the English dictionary
+            + "$_dictionary_=[a-zA-Z\\'\\-];"
+
+            // Hindi phrase separators
+            + "$danda=[\u0964\u0965];"
+
+            // characters that always cause a break: ETX, tab, LF, FF, LS, and PS
+            + "$break=[\u0003\t\n\f\u2028\u2029];"
+
+            // characters that always prevent a break: the non-breaking space
+            // and similar characters
+            + "$nbsp=[\u00a0\u2007\u2011\ufeff];"
+
+            // whitespace: space separators and control characters, except for
+            // CR and the other characters mentioned above
+            + "$space=[[[:Zs:][:Cc:]]-[$nbsp$break\r]];"
+
+            // dashes: dash punctuation and the discretionary hyphen, except for
+            // non-breaking hyphens
+            + "$dash=[[[:Pd:]\u00ad]-[$nbsp]];"
+
+            // characters that stick to a word if they precede it: currency symbols
+            // (except the cents sign) and starting punctuation
+            + "$pre_word=[[[:Sc:]-[\u00a2]][:Ps:]\\\"\\\'];"
+
+            // characters that stick to a word if they follow it: ending punctuation,
+            // other punctuation that usually occurs at the end of a sentence,
+            // small Kana characters, some CJK diacritics, etc.
+            + "$post_word=[[:Pe:]\\!\\\"\\\'\\%\\.\\,\\:\\;\\?\u00a2\u00b0\u066a\u2030-\u2034"
+                    + "\u2103\u2105\u2109\u3001\u3002\u3005\u3041\u3043\u3045\u3047\u3049\u3063"
+                    + "\u3083\u3085\u3087\u308e\u3099-\u309e\u30a1\u30a3\u30a5\u30a7\u30a9"
+                    + "\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u30fc-\u30fe\uff01\uff0c"
+                    + "\uff0e\uff1f];"
+
+            // Kanji: actually includes both Kanji and Kana, except for small Kana and
+            // CJK diacritics
+            + "$kanji=[[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa]-[$post_word$_ignore_]];"
+
+            // digits
+            + "$digit=[[:Nd:][:No:]];"
+
+            // punctuation that can occur in the middle of a number: periods and commas
+            + "$mid_num=[\\.\\,];"
+
+            // everything not mentioned above, plus the quote marks (which are both
+            // <pre-word>, <post-word>, and <char>)
+            + "$char=[^$break$space$dash$kanji$nbsp$_ignore_$pre_word$post_word$mid_num$danda\r\\\"\\\'];"
+
+            // a "number" is a run of prefix characters and dashes, followed by one or
+            // more digits with isolated number-punctuation characters interspersed
+            + "$number=([$pre_word$dash]*$digit+($mid_num$digit+)*);"
+
+            // the basic core of a word can be either a "number" as defined above, a single
+            // "Kanji" character, or a run of any number of not-explicitly-mentioned
+            // characters (this includes Latin letters)
+            + "$word_core=([$pre_word$char]*|$kanji|$number);"
+
+            // a word may end with an optional suffix that be either a run of one or
+            // more dashes or a run of word-suffix characters, followed by an optional
+            // run of whitespace
+            + "$word_suffix=(($dash+|$post_word*)$space*);"
+
+            // a word, thus, is an optional run of word-prefix characters, followed by
+            // a word core and a word suffix (the syntax of <word-core> and <word-suffix>
+            // actually allows either of them to match the empty string, putting a break
+            // between things like ")(" or "aaa(aaa"
+            + "$word=($pre_word*$word_core$word_suffix);"
+
+            // finally, the rule that does the work: Keep together any run of words that
+            // are joined by runs of one of more non-spacing mark.  Also keep a trailing
+            // line-break character or CRLF combination with the word.  (line separators
+            // "win" over nbsp's)
+            + "$word($nbsp+$word)*\r?$break?;" },
+
+        // these two resources specify the pathnames of the dictionary files to
+        // use for word breaking and line breaking.  Both currently refer to
+        // a file called english.dict placed in com\ibm\text\resources
+        // somewhere in the class path.  It's important to note that
+        // english.dict was created for testing purposes only, and doesn't
+        // come anywhere close to being an exhaustive dictionary of English
+        // words (basically, it contains all the words in the Declaration of
+        // Independence, and the Revised Standard Version of the book of Genesis,
+        // plus a few other words thrown in to show more interesting cases).
+        // { "WordBreakDictionary", "com\\ibm\\text\\resources\\english.dict" },
+        // { "LineBreakDictionary", "com\\ibm\\text\\resources\\english.dict" }
+        { "WordBreakDictionary", url },
+        { "LineBreakDictionary", url }
+    };
+}
diff --git a/src/com/ibm/test/rbbi/BreakIteratorTest.java b/src/com/ibm/test/rbbi/BreakIteratorTest.java
new file mode 100755
index 0000000..6db51e7
--- /dev/null
+++ b/src/com/ibm/test/rbbi/BreakIteratorTest.java
@@ -0,0 +1,1308 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbbi/Attic/BreakIteratorTest.java,v $ 
+ * $Date: 2000/05/18 19:11:55 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.rbbi;
+
+import com.ibm.test.*;
+import com.ibm.text.BreakIterator;
+import java.text.CharacterIterator;
+import com.ibm.text.StringCharacterIterator;
+import java.util.Locale;
+import java.util.Vector;
+import java.util.Enumeration;
+import java.io.*;
+
+public class BreakIteratorTest extends TestFmwk
+{
+    private BreakIterator characterBreak;
+    private BreakIterator wordBreak;
+    private BreakIterator lineBreak;
+    private BreakIterator sentenceBreak;
+
+    public static void main(String[] args) throws Exception {
+        new BreakIteratorTest().run(args);
+    }
+
+    public BreakIteratorTest()
+    {
+        characterBreak = BreakIterator.getCharacterInstance();
+        wordBreak = BreakIterator.getWordInstance();
+        lineBreak = BreakIterator.getLineInstance();
+        //logln("Creating sentence iterator...");
+        sentenceBreak = BreakIterator.getSentenceInstance();
+        //logln("Finished creating sentence iterator...");
+    }
+
+    //=========================================================================
+    // general test subroutines
+    //=========================================================================
+
+    private void generalIteratorTest(BreakIterator bi, Vector expectedResult) {
+        StringBuffer buffer = new StringBuffer();
+        String text;
+        for (int i = 0; i < expectedResult.size(); i++) {
+            text = (String)expectedResult.elementAt(i);
+            buffer.append(text);
+        }
+        text = buffer.toString();
+
+        bi.setText(text);
+
+        Vector nextResults = _testFirstAndNext(bi, text);
+        Vector previousResults = _testLastAndPrevious(bi, text);
+
+        logln("comparing forward and backward...");
+        int errs = getErrorCount();
+        compareFragmentLists("forward iteration", "backward iteration", nextResults,
+                        previousResults);
+        if (getErrorCount() == errs) {
+            logln("comparing expected and actual...");
+            compareFragmentLists("expected result", "actual result", expectedResult,
+                            nextResults);
+        }
+
+        int[] boundaries = new int[expectedResult.size() + 3];
+        boundaries[0] = BreakIterator.DONE;
+        boundaries[1] = 0;
+        for (int i = 0; i < expectedResult.size(); i++)
+            boundaries[i + 2] = boundaries[i + 1] + ((String)expectedResult.elementAt(i)).
+                            length();
+        boundaries[boundaries.length - 1] = BreakIterator.DONE;
+
+        _testFollowing(bi, text, boundaries);
+        _testPreceding(bi, text, boundaries);
+        _testIsBoundary(bi, text, boundaries);
+
+        doMultipleSelectionTest(bi, text);
+    }
+
+    private Vector _testFirstAndNext(BreakIterator bi, String text) {
+        int p = bi.first();
+        int lastP = p;
+        Vector result = new Vector();
+
+        if (p != 0)
+            errln("first() returned " + p + " instead of 0");
+        while (p != BreakIterator.DONE) {
+            p = bi.next();
+            if (p != BreakIterator.DONE) {
+                if (p <= lastP)
+                    errln("next() failed to move forward: next() on position "
+                                    + lastP + " yielded " + p);
+
+                result.addElement(text.substring(lastP, p));
+            }
+            else {
+                if (lastP != text.length())
+                    errln("next() returned DONE prematurely: offset was "
+                                    + lastP + " instead of " + text.length());
+            }
+            lastP = p;
+        }
+        return result;
+    }
+
+    private Vector _testLastAndPrevious(BreakIterator bi, String text) {
+        int p = bi.last();
+        int lastP = p;
+        Vector result = new Vector();
+
+        if (p != text.length())
+            errln("last() returned " + p + " instead of " + text.length());
+        while (p != BreakIterator.DONE) {
+            p = bi.previous();
+            if (p != BreakIterator.DONE) {
+                if (p >= lastP)
+                    errln("previous() failed to move backward: previous() on position "
+                                    + lastP + " yielded " + p);
+
+                result.insertElementAt(text.substring(p, lastP), 0);
+            }
+            else {
+                if (lastP != 0)
+                    errln("previous() returned DONE prematurely: offset was "
+                                    + lastP + " instead of 0");
+            }
+            lastP = p;
+        }
+        return result;
+    }
+
+    private void compareFragmentLists(String f1Name, String f2Name, Vector f1, Vector f2) {
+        int p1 = 0;
+        int p2 = 0;
+        String s1;
+        String s2;
+        int t1 = 0;
+        int t2 = 0;
+
+        while (p1 < f1.size() && p2 < f2.size()) {
+            s1 = (String)f1.elementAt(p1);
+            s2 = (String)f2.elementAt(p2);
+            t1 += s1.length();
+            t2 += s2.length();
+
+            if (s1.equals(s2)) {
+                debugLogln("   >" + s1 + "<");
+                ++p1;
+                ++p2;
+            }
+            else {
+                int tempT1 = t1;
+                int tempT2 = t2;
+                int tempP1 = p1;
+                int tempP2 = p2;
+
+                while (tempT1 != tempT2 && tempP1 < f1.size() && tempP2 < f2.size()) {
+                    while (tempT1 < tempT2 && tempP1 < f1.size()) {
+                        tempT1 += ((String)f1.elementAt(tempP1)).length();
+                        ++tempP1;
+                    }
+                    while (tempT2 < tempT1 && tempP2 < f2.size()) {
+                        tempT2 += ((String)f2.elementAt(tempP2)).length();
+                        ++tempP2;
+                    }
+                }
+                logln("*** " + f1Name + " has:");
+                while (p1 <= tempP1 && p1 < f1.size()) {
+                    s1 = (String)f1.elementAt(p1);
+                    t1 += s1.length();
+                    debugLogln(" *** >" + s1 + "<");
+                    ++p1;
+                }
+                logln("***** " + f2Name + " has:");
+                while (p2 <= tempP2 && p2 < f2.size()) {
+                    s2 = (String)f2.elementAt(p2);
+                    t2 += s2.length();
+                    debugLogln(" ***** >" + s2 + "<");
+                    ++p2;
+                }
+                errln("Discrepancy between " + f1Name + " and " + f2Name);
+            }
+        }
+    }
+
+    private void _testFollowing(BreakIterator bi, String text, int[] boundaries) {
+        logln("testFollowing():");
+        int p = 2;
+        for (int i = 0; i <= text.length(); i++) {
+            if (i == boundaries[p])
+                ++p;
+
+            int b = bi.following(i);
+            logln("bi.following(" + i + ") -> " + b);
+            if (b != boundaries[p])
+                errln("Wrong result from following() for " + i + ": expected " + boundaries[p]
+                                + ", got " + b);
+        }
+    }
+
+    private void _testPreceding(BreakIterator bi, String text, int[] boundaries) {
+        logln("testPreceding():");
+        int p = 0;
+        for (int i = 0; i <= text.length(); i++) {
+            int b = bi.preceding(i);
+            logln("bi.preceding(" + i + ") -> " + b);
+            if (b != boundaries[p])
+                errln("Wrong result from preceding() for " + i + ": expected " + boundaries[p]
+                                + ", got " + b);
+
+            if (i == boundaries[p + 1])
+                ++p;
+        }
+    }
+
+    private void _testIsBoundary(BreakIterator bi, String text, int[] boundaries) {
+        logln("testIsBoundary():");
+        int p = 1;
+        boolean isB;
+        for (int i = 0; i <= text.length(); i++) {
+            isB = bi.isBoundary(i);
+            logln("bi.isBoundary(" + i + ") -> " + isB);
+
+            if (i == boundaries[p]) {
+                if (!isB)
+                    errln("Wrong result from isBoundary() for " + i + ": expected true, got false");
+                ++p;
+            }
+            else {
+                if (isB)
+                    errln("Wrong result from isBoundary() for " + i + ": expected false, got true");
+            }
+        }
+    }
+
+    private void doMultipleSelectionTest(BreakIterator iterator, String testText)
+    {
+        logln("Multiple selection test...");
+        BreakIterator testIterator = (BreakIterator)iterator.clone();
+        int offset = iterator.first();
+        int testOffset;
+        int count = 0;
+
+        do {
+            testOffset = testIterator.first();
+            testOffset = testIterator.next(count);
+            logln("next(" + count + ") -> " + testOffset);
+            if (offset != testOffset)
+                errln("next(n) and next() not returning consistent results: for step " + count + ", next(n) returned " + testOffset + " and next() had " + offset);
+
+            if (offset != BreakIterator.DONE) {
+                count++;
+                offset = iterator.next();
+            }
+        } while (offset != BreakIterator.DONE);
+
+        // now do it backwards...
+        offset = iterator.last();
+        count = 0;
+
+        do {
+            testOffset = testIterator.last();
+            testOffset = testIterator.next(count);
+            logln("next(" + count + ") -> " + testOffset);
+            if (offset != testOffset)
+                errln("next(n) and next() not returning consistent results: for step " + count + ", next(n) returned " + testOffset + " and next() had " + offset);
+
+            if (offset != BreakIterator.DONE) {
+                count--;
+                offset = iterator.previous();
+            }
+        } while (offset != BreakIterator.DONE);
+    }
+
+    private void doBreakInvariantTest(BreakIterator tb, String testChars)
+    {
+        StringBuffer work = new StringBuffer("aaa");
+//        int errorCount = 0;
+
+        // a break should always occur after CR (unless followed by LF), LF, PS, and LS,
+        // unless they're followed by a non-spacing mark or a format character
+        String breaks = "\r\n\u2029\u2028";
+
+        for (int i = 0; i < breaks.length(); i++) {
+            work.setCharAt(1, breaks.charAt(i));
+            for (int j = 0; j < testChars.length(); j++) {
+                work.setCharAt(0, testChars.charAt(j));
+                for (int k = 0; k < testChars.length(); k++) {
+                    char c = testChars.charAt(k);
+
+                    // if a cr is followed by lf, ps, ls or etx, don't do the check (that's
+                    // not supposed to work)
+                    if (work.charAt(1) == '\r' && (c == '\n' || c == '\u2029'
+                            || c == '\u2028' || c == '\u0003'))
+                        continue;
+
+                    work.setCharAt(2, c);
+                    tb.setText(work.toString());
+                    boolean seen2 = false;
+                    for (int l = tb.first(); l != BreakIterator.DONE; l = tb.next()) {
+                        if (l == 2)
+                            seen2 = true;
+                    }
+                    if (!seen2) {
+                        errln("No break between U+" + Integer.toHexString((int)(work.charAt(1)))
+                                    + " and U+" + Integer.toHexString((int)(work.charAt(2))));
+                    }
+                }
+            }
+        }
+    }
+
+    private void doOtherInvariantTest(BreakIterator tb, String testChars)
+    {
+        StringBuffer work = new StringBuffer("a\r\na");
+        int errorCount = 0;
+
+        // a break should never occur between CR and LF
+        for (int i = 0; i < testChars.length(); i++) {
+            work.setCharAt(0, testChars.charAt(i));
+            for (int j = 0; j < testChars.length(); j++) {
+                work.setCharAt(3, testChars.charAt(j));
+                tb.setText(work.toString());
+                for (int k = tb.first(); k != BreakIterator.DONE; k = tb.next())
+                    if (k == 2) {
+                        errln("Break between CR and LF in string U+" + Integer.toHexString(
+                                (int)(work.charAt(0))) + ", U+d U+a U+" + Integer.toHexString(
+                                (int)(work.charAt(3))));
+                        errorCount++;
+                        if (errorCount >= 75)
+                            return;
+                    }
+            }
+        }
+
+        // a break should never occur before a non-spacing mark, unless it's preceded
+        // by a line terminator
+        work.setLength(0);
+        work.append("aaaa");
+        for (int i = 0; i < testChars.length(); i++) {
+            char c = testChars.charAt(i);
+            if (c == '\n' || c == '\r' || c == '\u2029' || c == '\u2028' || c == '\u0003')
+                continue;
+            work.setCharAt(1, c);
+            for (int j = 0; j < testChars.length(); j++) {
+                c = testChars.charAt(j);
+                if (Character.getType(c) != Character.NON_SPACING_MARK && Character.getType(c)
+                        != Character.ENCLOSING_MARK)
+                    continue;
+                work.setCharAt(2, c);
+                tb.setText(work.toString());
+                for (int k = tb.first(); k != BreakIterator.DONE; k = tb.next())
+                    if (k == 2) {
+                        errln("Break between U+" + Integer.toHexString((int)(work.charAt(1)))
+                                + " and U+" + Integer.toHexString((int)(work.charAt(2))));
+                        errorCount++;
+                        if (errorCount >= 75)
+                            return;
+                    }
+            }
+        }
+    }
+
+    public void debugLogln(String s) {
+        final String zeros = "0000";
+        String temp;
+        StringBuffer out = new StringBuffer();
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if (c >= ' ' && c < '\u007f')
+                out.append(c);
+            else {
+                out.append("\\u");
+                temp = Integer.toHexString((int)c);
+                out.append(zeros.substring(0, 4 - temp.length()));
+                out.append(temp);
+            }
+        }
+        logln(out.toString());
+    }
+
+    //=========================================================================
+    // tests
+    //=========================================================================
+
+    public void TestWordBreak() {
+        Vector wordSelectionData = new Vector();
+
+        wordSelectionData.addElement("12,34");
+
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\u00A2"); //cent sign
+        wordSelectionData.addElement("\u00A3"); //pound sign
+        wordSelectionData.addElement("\u00A4"); //currency sign
+        wordSelectionData.addElement("\u00A5"); //yen sign
+        wordSelectionData.addElement("alpha-beta-gamma");
+        wordSelectionData.addElement(".");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("Badges");
+        wordSelectionData.addElement("?");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("BADGES");
+        wordSelectionData.addElement("!");
+        wordSelectionData.addElement("?");
+        wordSelectionData.addElement("!");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("We");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("don't");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("need");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("no");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("STINKING");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("BADGES");
+        wordSelectionData.addElement("!");
+        wordSelectionData.addElement("!");
+        wordSelectionData.addElement("!");
+
+        wordSelectionData.addElement("012.566,5");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("123.3434,900");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("1000,233,456.000");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("1,23.322%");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("123.1222");
+
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\u0024123,000.20");
+
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("179.01\u0025");
+
+        wordSelectionData.addElement("Hello");
+        wordSelectionData.addElement(",");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("how");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("are");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("you");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("X");
+        wordSelectionData.addElement(" ");
+
+        wordSelectionData.addElement("Now");
+        wordSelectionData.addElement("\r");
+        wordSelectionData.addElement("is");
+        wordSelectionData.addElement("\n");
+        wordSelectionData.addElement("the");
+        wordSelectionData.addElement("\r\n");
+        wordSelectionData.addElement("time");
+        wordSelectionData.addElement("\n");
+        wordSelectionData.addElement("\r");
+        wordSelectionData.addElement("for");
+        wordSelectionData.addElement("\r");
+        wordSelectionData.addElement("\r");
+        wordSelectionData.addElement("all");
+        wordSelectionData.addElement(" ");
+
+        generalIteratorTest(wordBreak, wordSelectionData);
+    }
+
+    /**
+     * @bug 4097779
+     */
+    public void TestBug4097779() {
+        Vector wordSelectionData = new Vector();
+
+        wordSelectionData.addElement("aa\u0300a");
+        wordSelectionData.addElement(" ");
+
+        generalIteratorTest(wordBreak, wordSelectionData);
+    }
+
+    /**
+     * @bug 4098467
+     */
+    public void TestBug4098467Words() {
+        Vector wordSelectionData = new Vector();
+
+        // What follows is a string of Korean characters (I found it in the Yellow Pages
+        // ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed
+        // it correctly), first as precomposed syllables, and then as conjoining jamo.
+        // Both sequences should be semantically identical and break the same way.
+        // precomposed syllables...
+        wordSelectionData.addElement("\uc0c1\ud56d");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\ud55c\uc778");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\uc5f0\ud569");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\uc7a5\ub85c\uad50\ud68c");
+        wordSelectionData.addElement(" ");
+        // conjoining jamo...
+        wordSelectionData.addElement("\u1109\u1161\u11bc\u1112\u1161\u11bc");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\u1112\u1161\u11ab\u110b\u1175\u11ab");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\u110b\u1167\u11ab\u1112\u1161\u11b8");
+        wordSelectionData.addElement(" ");
+        wordSelectionData.addElement("\u110c\u1161\u11bc\u1105\u1169\u1100\u116d\u1112\u116c");
+        wordSelectionData.addElement(" ");
+
+        generalIteratorTest(wordBreak, wordSelectionData);
+    }
+
+    /**
+     * @bug 4117554
+     */
+    public void TestBug4117554Words() {
+        Vector wordSelectionData = new Vector();
+
+        // this is a test for bug #4117554: the ideographic iteration mark (U+3005) should
+        // count as a Kanji character for the purposes of word breaking
+        wordSelectionData.addElement("abc");
+        wordSelectionData.addElement("\u4e01\u4e02\u3005\u4e03\u4e03");
+        wordSelectionData.addElement("abc");
+
+        generalIteratorTest(wordBreak, wordSelectionData);
+    }
+
+    public void TestSentenceBreak() {
+        Vector sentenceSelectionData = new Vector();
+
+        sentenceSelectionData.addElement("This is a simple sample sentence. ");
+        sentenceSelectionData.addElement("(This is it.) ");
+        sentenceSelectionData.addElement("This is a simple sample sentence. ");
+        sentenceSelectionData.addElement("\"This isn\'t it.\" ");
+        sentenceSelectionData.addElement("Hi! ");
+        sentenceSelectionData.addElement("This is a simple sample sentence. ");
+        sentenceSelectionData.addElement("It does not have to make any sense as you can see. ");
+        sentenceSelectionData.addElement("Nel mezzo del cammin di nostra vita, mi ritrovai in una selva oscura. ");
+        sentenceSelectionData.addElement("Che la dritta via aveo smarrita. ");
+        sentenceSelectionData.addElement("He said, that I said, that you said!! ");
+
+        sentenceSelectionData.addElement("Don't rock the boat.\u2029");
+
+        sentenceSelectionData.addElement("Because I am the daddy, that is why. ");
+        sentenceSelectionData.addElement("Not on my time (el timo.)! ");
+
+        sentenceSelectionData.addElement("So what!!\u2029");
+
+        sentenceSelectionData.addElement("\"But now,\" he said, \"I know!\" ");
+        sentenceSelectionData.addElement("Harris thumbed down several, including \"Away We Go\" (which became the huge success Oklahoma!). ");
+        sentenceSelectionData.addElement("One species, B. anthracis, is highly virulent.\n");
+        sentenceSelectionData.addElement("Wolf said about Sounder:\"Beautifully thought-out and directed.\" ");
+        sentenceSelectionData.addElement("Have you ever said, \"This is where \tI shall live\"? ");
+        sentenceSelectionData.addElement("He answered, \"You may not!\" ");
+        sentenceSelectionData.addElement("Another popular saying is: \"How do you do?\". ");
+        sentenceSelectionData.addElement("Yet another popular saying is: \'I\'m fine thanks.\' ");
+        sentenceSelectionData.addElement("What is the proper use of the abbreviation pp.? ");
+        sentenceSelectionData.addElement("Yes, I am definatelly 12\" tall!!");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    /**
+     * @bug 4113835
+     */
+    public void TestBug4113835() {
+        Vector sentenceSelectionData = new Vector();
+
+        // test for bug #4113835: \n and \r count as spaces, not as paragraph breaks
+        sentenceSelectionData.addElement("Now\ris\nthe\r\ntime\n\rfor\r\rall\u2029");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    /**
+     * @bug 4111338
+     */
+    public void TestBug4111338() {
+        Vector sentenceSelectionData = new Vector();
+
+        // test for bug #4111338: Don't break sentences at the boundary between CJK
+        // and other letters
+        sentenceSelectionData.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165:\"JAVA\u821c"
+                + "\u8165\u7fc8\u51ce\u306d,\u2494\u56d8\u4ec0\u60b1\u8560\u51ba"
+                + "\u611d\u57b6\u2510\u5d46\".\u2029");
+        sentenceSelectionData.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8"
+                + "\u97e4JAVA\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8\u4ec0"
+                + "\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u2029");
+        sentenceSelectionData.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8\u97e4"
+                + "\u6470\u8790JAVA\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8"
+                + "\u4ec0\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u2029");
+        sentenceSelectionData.addElement("He said, \"I can go there.\"\u2029");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    /**
+     * @bug 4117554
+     */
+    public void TestBug4117554Sentences() {
+        Vector sentenceSelectionData = new Vector();
+
+        // Treat fullwidth variants of .!? the same as their
+        // normal counterparts
+        sentenceSelectionData.addElement("I know I'm right\uff0e ");
+        sentenceSelectionData.addElement("Right\uff1f ");
+        sentenceSelectionData.addElement("Right\uff01 ");
+
+        // Don't break sentences at boundary between CJK and digits
+        sentenceSelectionData.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8"
+                + "\u97e48888\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8\u4ec0"
+                + "\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u2029");
+
+        // Break sentence between a sentence terminator and
+        // opening punctuation
+        sentenceSelectionData.addElement("no?");
+        sentenceSelectionData.addElement("(yes)");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    /**
+     * @bug 4158381
+     */
+    public void TestBug4158381() {
+        Vector sentenceSelectionData = new Vector();
+
+        // Don't break sentence after period if it isn't followed by a space
+        sentenceSelectionData.addElement("Test <code>Flags.Flag</code> class.  ");
+        sentenceSelectionData.addElement("Another test.\u2029");
+
+        // No breaks when there are no terminators around
+        sentenceSelectionData.addElement("<P>Provides a set of "
+                + "&quot;lightweight&quot; (all-java<FONT SIZE=\"-2\"><SUP>TM"
+                + "</SUP></FONT> language) components that, "
+                + "to the maximum degree possible, work the same on all platforms.  ");
+        sentenceSelectionData.addElement("Another test.\u2029");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    /**
+     * @bug 4143071
+     */
+    public void TestBug4143071() {
+        Vector sentenceSelectionData = new Vector();
+
+        // Make sure sentences that end with digits work right
+        sentenceSelectionData.addElement("Today is the 27th of May, 1998.  ");
+        sentenceSelectionData.addElement("Tomorrow will be 28 May 1998.  ");
+        sentenceSelectionData.addElement("The day after will be the 30th.\u2029");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    /**
+     * @bug 4152416
+     */
+    public void TestBug4152416() {
+        Vector sentenceSelectionData = new Vector();
+
+        // Make sure sentences ending with a capital letter are treated correctly
+        sentenceSelectionData.addElement("The type of all primitive "
+                + "<code>boolean</code> values accessed in the target VM.  ");
+        sentenceSelectionData.addElement("Calls to xxx will return an "
+                + "implementor of this interface.\u2029");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    /**
+     * @bug 4152117
+     */
+    public void TestBug4152117() {
+        Vector sentenceSelectionData = new Vector();
+
+        // Make sure sentence breaking is handling punctuation correctly
+        // [COULD NOT REPRODUCE THIS BUG, BUT TEST IS HERE TO MAKE SURE
+        // IT DOESN'T CROP UP]
+        sentenceSelectionData.addElement("Constructs a randomly generated "
+                + "BigInteger, uniformly distributed over the range <tt>0</tt> "
+                + "to <tt>(2<sup>numBits</sup> - 1)</tt>, inclusive.  ");
+        sentenceSelectionData.addElement("The uniformity of the distribution "
+                + "assumes that a fair source of random bits is provided in "
+                + "<tt>rnd</tt>.  ");
+        sentenceSelectionData.addElement("Note that this constructor always "
+                + "constructs a non-negative BigInteger.\u2029");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    public void TestLineBreak() {
+        Vector lineSelectionData = new Vector();
+
+        lineSelectionData.addElement("Multi-");
+        lineSelectionData.addElement("Level ");
+        lineSelectionData.addElement("example ");
+        lineSelectionData.addElement("of ");
+        lineSelectionData.addElement("a ");
+        lineSelectionData.addElement("semi-");
+        lineSelectionData.addElement("idiotic ");
+        lineSelectionData.addElement("non-");
+        lineSelectionData.addElement("sensical ");
+        lineSelectionData.addElement("(non-");
+        lineSelectionData.addElement("important) ");
+        lineSelectionData.addElement("sentence. ");
+
+        lineSelectionData.addElement("Hi  ");
+        lineSelectionData.addElement("Hello ");
+        lineSelectionData.addElement("How\n");
+        lineSelectionData.addElement("are\r");
+        lineSelectionData.addElement("you\u2028");
+        lineSelectionData.addElement("fine.\t");
+        lineSelectionData.addElement("good.  ");
+
+        lineSelectionData.addElement("Now\r");
+        lineSelectionData.addElement("is\n");
+        lineSelectionData.addElement("the\r\n");
+        lineSelectionData.addElement("time\n");
+        lineSelectionData.addElement("\r");
+        lineSelectionData.addElement("for\r");
+        lineSelectionData.addElement("\r");
+        lineSelectionData.addElement("all");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    /**
+     * @bug 4068133
+     */
+    public void TestBug4068133() {
+        Vector lineSelectionData = new Vector();
+
+        lineSelectionData.addElement("\u96f6");
+        lineSelectionData.addElement("\u4e00\u3002");
+        lineSelectionData.addElement("\u4e8c\u3001");
+        lineSelectionData.addElement("\u4e09\u3002\u3001");
+        lineSelectionData.addElement("\u56db\u3001\u3002\u3001");
+        lineSelectionData.addElement("\u4e94,");
+        lineSelectionData.addElement("\u516d.");
+        lineSelectionData.addElement("\u4e03.\u3001,\u3002");
+        lineSelectionData.addElement("\u516b");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    /**
+     * @bug 4086052
+     */
+    public void TestBug4086052() {
+        Vector lineSelectionData = new Vector();
+
+        lineSelectionData.addElement("foo\u00a0bar ");
+//        lineSelectionData.addElement("foo\ufeffbar");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    /**
+     * @bug 4097920
+     */
+    public void TestBug4097920() {
+        Vector lineSelectionData = new Vector();
+
+        lineSelectionData.addElement("dog,");
+        lineSelectionData.addElement("cat,");
+        lineSelectionData.addElement("mouse ");
+        lineSelectionData.addElement("(one)");
+        lineSelectionData.addElement("(two)\n");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    /**
+     * @bug 4035266
+     */
+    public void TestBug4035266() {
+        Vector lineSelectionData = new Vector();
+
+        lineSelectionData.addElement("The ");
+        lineSelectionData.addElement("balance ");
+        lineSelectionData.addElement("is ");
+        lineSelectionData.addElement("$-23,456.78, ");
+        lineSelectionData.addElement("not ");
+        lineSelectionData.addElement("-$32,456.78!\n");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    /**
+     * @bug 4098467
+     */
+    public void TestBug4098467Lines() {
+        Vector lineSelectionData = new Vector();
+
+        // What follows is a string of Korean characters (I found it in the Yellow Pages
+        // ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed
+        // it correctly), first as precomposed syllables, and then as conjoining jamo.
+        // Both sequences should be semantically identical and break the same way.
+        // precomposed syllables...
+        lineSelectionData.addElement("\uc0c1\ud56d ");
+        lineSelectionData.addElement("\ud55c\uc778 ");
+        lineSelectionData.addElement("\uc5f0\ud569 ");
+        lineSelectionData.addElement("\uc7a5\ub85c\uad50\ud68c ");
+        // conjoining jamo...
+        lineSelectionData.addElement("\u1109\u1161\u11bc\u1112\u1161\u11bc ");
+        lineSelectionData.addElement("\u1112\u1161\u11ab\u110b\u1175\u11ab ");
+        lineSelectionData.addElement("\u110b\u1167\u11ab\u1112\u1161\u11b8 ");
+        lineSelectionData.addElement("\u110c\u1161\u11bc\u1105\u1169\u1100\u116d\u1112\u116c");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    public void TestThaiLineBreak() {
+        Vector lineSelectionData = new Vector();
+
+        // \u0e2f-- the Thai paiyannoi character-- isn't a letter.  It's a symbol that
+        // represents elided letters at the end of a long word.  It should be bound to
+        // the end of the word and not treated as an independent punctuation mark.
+        lineSelectionData.addElement("\u0e2a\u0e16\u0e32\u0e19\u0e35\u0e2f");
+        lineSelectionData.addElement("\u0e08\u0e30");
+        lineSelectionData.addElement("\u0e23\u0e30\u0e14\u0e21");
+        lineSelectionData.addElement("\u0e40\u0e08\u0e49\u0e32");
+//        lineSelectionData.addElement("\u0e2b\u0e19\u0e49\u0e32");
+//        lineSelectionData.addElement("\u0e17\u0e35\u0e48");
+// I think the above two lines are the preferred reading of this text, but our current
+// dictionary yields the following:
+lineSelectionData.addElement("\u0e2b\u0e16\u0e49\u0e32\u0e17\u0e35\u0e48");
+        lineSelectionData.addElement("\u0e2d\u0e2d\u0e01");
+        lineSelectionData.addElement("\u0e21\u0e32");
+        lineSelectionData.addElement("\u0e40\u0e23\u0e48\u0e07");
+        lineSelectionData.addElement("\u0e23\u0e30\u0e1a\u0e32\u0e22");
+        lineSelectionData.addElement("\u0e2d\u0e22\u0e48\u0e32\u0e07");
+        lineSelectionData.addElement("\u0e40\u0e15\u0e47\u0e21");
+
+        // the one time where the paiyannoi occurs somewhere other than at the end
+        // of a word is in the Thai abbrevation for "etc.", which both begins and
+        // ends with a paiyannoi
+        lineSelectionData.addElement("\u0e2f\u0e25\u0e2f");
+        lineSelectionData.addElement("\u0e17\u0e35\u0e48");
+        lineSelectionData.addElement("\u0e19\u0e31\u0e49\u0e19");
+
+        generalIteratorTest(BreakIterator.getLineInstance(new Locale("th", "", "")),
+                lineSelectionData);
+    }
+
+    public void TestMixedThaiLineBreak() {
+        Vector lineSelectionData = new Vector();
+
+        // Arabic numerals should always be separated from surrounding Thai text
+/*
+        lineSelectionData.addElement("\u0e04\u0e48\u0e32");
+        lineSelectionData.addElement("\u0e40\u0e07\u0e34\u0e19");
+        lineSelectionData.addElement("\u0e1a\u0e32\u0e17");
+        lineSelectionData.addElement("\u0e41\u0e15\u0e30");
+        lineSelectionData.addElement("\u0e23\u0e30\u0e14\u0e31\u0e1a");
+        lineSelectionData.addElement("39");
+        lineSelectionData.addElement("\u0e1a\u0e32\u0e17 ");
+
+        // words in non-Thai scripts should always be separated from surrounding Thai text
+        lineSelectionData.addElement("\u0e17\u0e14");
+        lineSelectionData.addElement("\u0e2a\u0e2d\u0e1a");
+        lineSelectionData.addElement("Java");
+        lineSelectionData.addElement("\u0e1a\u0e19");
+        lineSelectionData.addElement("\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07");
+        lineSelectionData.addElement("\u0e44\u0e2d\u0e1a\u0e35\u0e40\u0e2d\u0e47\u0e21 ");
+
+        // Thai numerals should always be separated from the text surrounding them
+        lineSelectionData.addElement("\u0e04\u0e48\u0e32");
+        lineSelectionData.addElement("\u0e40\u0e07\u0e34\u0e19");
+        lineSelectionData.addElement("\u0e1a\u0e32\u0e17");
+        lineSelectionData.addElement("\u0e41\u0e15\u0e30");
+        lineSelectionData.addElement("\u0e23\u0e30\u0e14\u0e31\u0e1a");
+        lineSelectionData.addElement("\u0e53\u0e59");
+        lineSelectionData.addElement("\u0e1a\u0e32\u0e17 ");
+
+        // Thai text should interact correctly with punctuation and symbols
+        lineSelectionData.addElement("\u0e44\u0e2d\u0e1a\u0e35\u0e40\u0e2d\u0e47\u0e21");
+//        lineSelectionData.addElement("(\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28");
+//        lineSelectionData.addElement("\u0e44\u0e17\u0e22)");
+// I think the above lines represent the preferred reading for this text, but our current
+// dictionary file yields the following:
+lineSelectionData.addElement("(\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22)");
+        lineSelectionData.addElement("\u0e08\u0e33\u0e01\u0e31\u0e14");
+        lineSelectionData.addElement("\u0e40\u0e1b\u0e34\u0e14");
+        lineSelectionData.addElement("\u0e15\u0e31\u0e27\"");
+*/
+        lineSelectionData.addElement("\u0e2e\u0e32\u0e23\u0e4c\u0e14\u0e14\u0e34\u0e2a\u0e01\u0e4c\"");
+        lineSelectionData.addElement("\u0e23\u0e38\u0e48\u0e19");
+        lineSelectionData.addElement("\u0e43\u0e2b\u0e21\u0e48");
+        lineSelectionData.addElement("\u0e40\u0e14\u0e37\u0e2d\u0e19\u0e21\u0e34.");
+        lineSelectionData.addElement("\u0e22.");
+        lineSelectionData.addElement("\u0e19\u0e35\u0e49");
+        lineSelectionData.addElement("\u0e23\u0e32\u0e04\u0e32");
+        lineSelectionData.addElement("$200");
+        lineSelectionData.addElement("\u0e40\u0e17\u0e48\u0e32");
+        lineSelectionData.addElement("\u0e19\u0e31\u0e49\u0e19 ");
+        lineSelectionData.addElement("(\"\u0e2e\u0e32\u0e23\u0e4c\u0e14\u0e14\u0e34\u0e2a\u0e01\u0e4c\").");
+
+        generalIteratorTest(BreakIterator.getLineInstance(new Locale("th", "", "")),
+                lineSelectionData);
+    }
+
+    public void TestMaiyamok() {
+        Vector lineSelectionData = new Vector();
+
+        // the Thai maiyamok character is a shorthand symbol that means "repeat the previous
+        // word".  Instead of appearing as a word unto itself, however, it's kept together
+        // with the word before it
+        lineSelectionData.addElement("\u0e44\u0e1b\u0e46");
+        lineSelectionData.addElement("\u0e21\u0e32\u0e46");
+        lineSelectionData.addElement("\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07");
+        lineSelectionData.addElement("\u0e01\u0e23\u0e38\u0e07\u0e40\u0e17\u0e1e");
+        lineSelectionData.addElement("\u0e41\u0e25\u0e30");
+        lineSelectionData.addElement("\u0e40\u0e03\u0e35\u0e22\u0e07");
+        lineSelectionData.addElement("\u0e43\u0e2b\u0e21\u0e48");
+
+        generalIteratorTest(BreakIterator.getLineInstance(new Locale("th", "", "")),
+                lineSelectionData);
+    }
+
+    /**
+     * @bug 4117554
+     */
+    public void TestBug4117554Lines() {
+        Vector lineSelectionData = new Vector();
+
+        // Fullwidth .!? should be treated as postJwrd
+        lineSelectionData.addElement("\u4e01\uff0e");
+        lineSelectionData.addElement("\u4e02\uff01");
+        lineSelectionData.addElement("\u4e03\uff1f");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    public void TestLettersAndDigits() {
+        // a character sequence such as "X11" or "30F3" or "native2ascii" should
+        // be kept together as a single word
+        Vector lineSelectionData = new Vector();
+
+        lineSelectionData.addElement("X11 ");
+        lineSelectionData.addElement("30F3 ");
+        lineSelectionData.addElement("native2ascii");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    /**
+     * @bug 4217703
+     */
+    public void TestBug4217703() {
+        Vector lineSelectionData = new Vector();
+
+        // There shouldn't be a line break between sentence-ending punctuation
+        // and a closing quote
+        lineSelectionData.addElement("He ");
+        lineSelectionData.addElement("said ");
+        lineSelectionData.addElement("\"Go!\"  ");
+        lineSelectionData.addElement("I ");
+        lineSelectionData.addElement("went.  ");
+
+        lineSelectionData.addElement("Hashtable$Enumeration ");
+        lineSelectionData.addElement("getText().");
+        lineSelectionData.addElement("getIndex()");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    private static final String graveS = "S\u0300";
+    private static final String acuteBelowI = "i\u0317";
+    private static final String acuteE = "e\u0301";
+    private static final String circumflexA = "a\u0302";
+    private static final String tildeE = "e\u0303";
+
+    public void TestCharacterBreak() {
+        Vector characterSelectionData = new Vector();
+
+        characterSelectionData.addElement(graveS);
+        characterSelectionData.addElement(acuteBelowI);
+        characterSelectionData.addElement("m");
+        characterSelectionData.addElement("p");
+        characterSelectionData.addElement("l");
+        characterSelectionData.addElement(acuteE);
+        characterSelectionData.addElement(" ");
+        characterSelectionData.addElement("s");
+        characterSelectionData.addElement(circumflexA);
+        characterSelectionData.addElement("m");
+        characterSelectionData.addElement("p");
+        characterSelectionData.addElement("l");
+        characterSelectionData.addElement(tildeE);
+        characterSelectionData.addElement(".");
+        characterSelectionData.addElement("w");
+        characterSelectionData.addElement(circumflexA);
+        characterSelectionData.addElement("w");
+        characterSelectionData.addElement("a");
+        characterSelectionData.addElement("f");
+        characterSelectionData.addElement("q");
+        characterSelectionData.addElement("\n");
+        characterSelectionData.addElement("\r");
+        characterSelectionData.addElement("\r\n");
+        characterSelectionData.addElement("\n");
+
+        generalIteratorTest(characterBreak, characterSelectionData);
+    }
+
+    /**
+     * @bug 4098467
+     */
+    public void TestBug4098467Characters() {
+        Vector characterSelectionData = new Vector();
+
+        // What follows is a string of Korean characters (I found it in the Yellow Pages
+        // ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed
+        // it correctly), first as precomposed syllables, and then as conjoining jamo.
+        // Both sequences should be semantically identical and break the same way.
+        // precomposed syllables...
+        characterSelectionData.addElement("\uc0c1");
+        characterSelectionData.addElement("\ud56d");
+        characterSelectionData.addElement(" ");
+        characterSelectionData.addElement("\ud55c");
+        characterSelectionData.addElement("\uc778");
+        characterSelectionData.addElement(" ");
+        characterSelectionData.addElement("\uc5f0");
+        characterSelectionData.addElement("\ud569");
+        characterSelectionData.addElement(" ");
+        characterSelectionData.addElement("\uc7a5");
+        characterSelectionData.addElement("\ub85c");
+        characterSelectionData.addElement("\uad50");
+        characterSelectionData.addElement("\ud68c");
+        characterSelectionData.addElement(" ");
+        // conjoining jamo...
+        characterSelectionData.addElement("\u1109\u1161\u11bc");
+        characterSelectionData.addElement("\u1112\u1161\u11bc");
+        characterSelectionData.addElement(" ");
+        characterSelectionData.addElement("\u1112\u1161\u11ab");
+        characterSelectionData.addElement("\u110b\u1175\u11ab");
+        characterSelectionData.addElement(" ");
+        characterSelectionData.addElement("\u110b\u1167\u11ab");
+        characterSelectionData.addElement("\u1112\u1161\u11b8");
+        characterSelectionData.addElement(" ");
+        characterSelectionData.addElement("\u110c\u1161\u11bc");
+        characterSelectionData.addElement("\u1105\u1169");
+        characterSelectionData.addElement("\u1100\u116d");
+        characterSelectionData.addElement("\u1112\u116c");
+
+        generalIteratorTest(characterBreak, characterSelectionData);
+    }
+
+    /*
+     * @bug 4153072
+     */
+    public void TestBug4153072() {
+        BreakIterator iter = BreakIterator.getWordInstance();
+        String str = "...Hello, World!...";
+        int begin = 3;
+        int end = str.length() - 3;
+        boolean gotException = false;
+        boolean dummy;
+
+        iter.setText(new StringCharacterIterator(str, begin, end, begin));
+        for (int index = -1; index < begin + 1; ++index) {
+            try {
+                dummy = iter.isBoundary(index);
+                if (index < begin)
+                    errln("Didn't get exception with offset = " + index +
+                                    " and begin index = " + begin);
+            }
+            catch (IllegalArgumentException e) {
+                if (index >= begin)
+                    errln("Got exception with offset = " + index +
+                                    " and begin index = " + begin);
+            }
+        }
+    }
+
+    public void TestBug4146175Sentences() {
+        Vector sentenceSelectionData = new Vector();
+
+        // break between periods and opening punctuation even when there's no
+        // intervening space
+        sentenceSelectionData.addElement("end.");
+        sentenceSelectionData.addElement("(This is\u2029");
+
+        // treat the fullwidth period as an unambiguous sentence terminator
+        sentenceSelectionData.addElement("\u7d42\u308f\u308a\uff0e");
+        sentenceSelectionData.addElement("\u300c\u3053\u308c\u306f");
+
+        generalIteratorTest(sentenceBreak, sentenceSelectionData);
+    }
+
+    public void TestBug4146175Lines() {
+        Vector lineSelectionData = new Vector();
+
+        // the fullwidth comma should stick to the preceding Japanese character
+        lineSelectionData.addElement("\u7d42\uff0c");
+        lineSelectionData.addElement("\u308f");
+
+        generalIteratorTest(lineBreak, lineSelectionData);
+    }
+
+    public void TestBug4214367() {
+        Vector wordSelectionData = new Vector();
+
+        // the hiragana and katakana iteration marks and the long vowel mark
+        // are not being treated correctly by the word-break iterator
+        wordSelectionData.addElement("\u3042\u3044\u309d\u3042\u309e\u3042\u30fc\u3042");
+        wordSelectionData.addElement("\u30a2\u30a4\u30fd\u30a2\u30fe\u30a2\u30fc\u30a2");
+
+        generalIteratorTest(wordBreak, wordSelectionData);
+    }
+
+    private static final String cannedTestChars
+        = "\u0000\u0001\u0002\u0003\u0004 !\"#$%&()+-01234<=>ABCDE[]^_`abcde{}|\u00a0\u00a2"
+        + "\u00a3\u00a4\u00a5\u00a6\u00a7\u00a8\u00a9\u00ab\u00ad\u00ae\u00af\u00b0\u00b2\u00b3"
+        + "\u00b4\u00b9\u00bb\u00bc\u00bd\u02b0\u02b1\u02b2\u02b3\u02b4\u0300\u0301\u0302\u0303"
+        + "\u0304\u05d0\u05d1\u05d2\u05d3\u05d4\u0903\u093e\u093f\u0940\u0949\u0f3a\u0f3b\u2000"
+        + "\u2001\u2002\u200c\u200d\u200e\u200f\u2010\u2011\u2012\u2028\u2029\u202a\u203e\u203f"
+        + "\u2040\u20dd\u20de\u20df\u20e0\u2160\u2161\u2162\u2163\u2164";
+
+    public void TestSentenceInvariants()
+    {
+        BreakIterator e = BreakIterator.getSentenceInstance();
+        doOtherInvariantTest(e, cannedTestChars + ".,\u3001\u3002\u3041\u3042\u3043\ufeff");
+    }
+
+    public void TestWordInvariants()
+    {
+        BreakIterator e = BreakIterator.getWordInstance();
+        doBreakInvariantTest(e, cannedTestChars + "\',.\u3041\u3042\u3043\u309b\u309c\u30a1\u30a2"
+            + "\u30a3\u4e00\u4e01\u4e02");
+        doOtherInvariantTest(e, cannedTestChars + "\',.\u3041\u3042\u3043\u309b\u309c\u30a1\u30a2"
+            + "\u30a3\u4e00\u4e01\u4e02");
+    }
+
+    public void TestLineInvariants()
+    {
+        BreakIterator e = BreakIterator.getLineInstance();
+        String testChars = cannedTestChars + ".,;:\u3001\u3002\u3041\u3042\u3043\u3044\u3045"
+            + "\u30a3\u4e00\u4e01\u4e02";
+        doBreakInvariantTest(e, testChars);
+        doOtherInvariantTest(e, testChars);
+
+        int errorCount = 0;
+
+        // in addition to the other invariants, a line-break iterator should make sure that:
+        // it doesn't break around the non-breaking characters
+        String noBreak = "\u00a0\u2007\u2011\ufeff";
+        StringBuffer work = new StringBuffer("aaa");
+        for (int i = 0; i < testChars.length(); i++) {
+            char c = testChars.charAt(i);
+            if (c == '\r' || c == '\n' || c == '\u2029' || c == '\u2028' || c == '\u0003')
+                continue;
+            work.setCharAt(0, c);
+            for (int j = 0; j < noBreak.length(); j++) {
+                work.setCharAt(1, noBreak.charAt(j));
+                for (int k = 0; k < testChars.length(); k++) {
+                    work.setCharAt(2, testChars.charAt(k));
+                    e.setText(work.toString());
+                    for (int l = e.first(); l != BreakIterator.DONE; l = e.next())
+                        if (l == 1 || l == 2) {
+                            errln("Got break between U+" + Integer.toHexString((int)
+                                    (work.charAt(l - 1))) + " and U+" + Integer.toHexString(
+                                    (int)(work.charAt(l))));
+                            errorCount++;
+                            if (errorCount >= 75)
+                                return;
+                        }
+                }
+            }
+        }
+
+        // it does break after dashes (unless they're followed by a digit, a non-spacing mark,
+        // a currency symbol, a space, a format-control character, a regular control character,
+        // a line or paragraph separator, or another dash)
+        String dashes = "-\u00ad\u2010\u2012\u2013\u2014";
+        for (int i = 0; i < testChars.length(); i++) {
+            work.setCharAt(0, testChars.charAt(i));
+            for (int j = 0; j < dashes.length(); j++) {
+                work.setCharAt(1, dashes.charAt(j));
+                for (int k = 0; k < testChars.length(); k++) {
+                    char c = testChars.charAt(k);
+                    if (Character.getType(c) == Character.DECIMAL_DIGIT_NUMBER ||
+                        Character.getType(c) == Character.OTHER_NUMBER ||
+                        Character.getType(c) == Character.NON_SPACING_MARK ||
+                        Character.getType(c) == Character.ENCLOSING_MARK ||
+                        Character.getType(c) == Character.CURRENCY_SYMBOL ||
+                        Character.getType(c) == Character.DASH_PUNCTUATION ||
+                        Character.getType(c) == Character.SPACE_SEPARATOR ||
+                        Character.getType(c) == Character.FORMAT ||
+                        Character.getType(c) == Character.CONTROL ||
+                        c == '\n' || c == '\r' || c == '\u2028' || c == '\u2029' ||
+                        c == '\u0003' || c == '\u2007' || c == '\u2011' ||
+                        c == '\ufeff')
+                        continue;
+                    work.setCharAt(2, c);
+                    e.setText(work.toString());
+                    boolean saw2 = false;
+                    for (int l = e.first(); l != BreakIterator.DONE; l = e.next())
+                        if (l == 2)
+                            saw2 = true;
+                    if (!saw2) {
+                        errln("Didn't get break between U+" + Integer.toHexString((int)
+                                    (work.charAt(1))) + " and U+" + Integer.toHexString(
+                                    (int)(work.charAt(2))));
+                        errorCount++;
+                        if (errorCount >= 75)
+                            return;
+                    }
+                }
+            }
+        }
+    }
+
+    public void TestCharacterInvariants()
+    {
+        BreakIterator e = BreakIterator.getCharacterInstance();
+        doBreakInvariantTest(e, cannedTestChars + "\u1100\u1101\u1102\u1160\u1161\u1162\u11a8"
+            + "\u11a9\u11aa");
+        doOtherInvariantTest(e, cannedTestChars + "\u1100\u1101\u1102\u1160\u1161\u1162\u11a8"
+            + "\u11a9\u11aa");
+    }
+
+    public void TestEmptyString()
+    {
+        String text = "";
+        Vector x = new Vector();
+        x.addElement(text);
+
+        generalIteratorTest(lineBreak, x);
+    }
+
+    public void TestGetAvailableLocales()
+    {
+        Locale[] locList = BreakIterator.getAvailableLocales();
+
+        if (locList.length == 0)
+            errln("getAvailableLocales() returned an empty list!");
+        // I have no idea how to test this function...
+    }
+
+    /**
+     * @bug 4095322
+     */
+    public void TestJapaneseLineBreak()
+    {
+        StringBuffer testString = new StringBuffer("\u4e00x\u4e8c");
+        String precedingChars = "([{\u00ab$\u00a5\u00a3\u00a4\u2018\u201a\u201c\u201e\u201b\u201f";
+        String followingChars = ")]}\u00bb!%,.\u3001\u3002\u3063\u3083\u3085\u3087\u30c3\u30e3\u30e5\u30e7\u30fc:;\u309b\u309c\u3005\u309d\u309e\u30fd\u30fe\u2019\u201d\u00b0\u2032\u2033\u2034\u2030\u2031\u2103\u2109\u00a2\u0300\u0301\u0302";
+        BreakIterator iter = BreakIterator.getLineInstance(Locale.JAPAN);
+
+        for (int i = 0; i < precedingChars.length(); i++) {
+            testString.setCharAt(1, precedingChars.charAt(i));
+            iter.setText(testString.toString());
+            int j = iter.first();
+            if (j != 0)
+                errln("ja line break failure: failed to start at 0");
+            j = iter.next();
+            if (j != 1)
+                errln("ja line break failure: failed to stop before '" + precedingChars.charAt(i)
+                            + "' (" + ((int)(precedingChars.charAt(i))) + ")");
+            j = iter.next();
+            if (j != 3)
+                errln("ja line break failure: failed to skip position after '" + precedingChars.charAt(i)
+                            + "' (" + ((int)(precedingChars.charAt(i))) + ")");
+        }
+
+        for (int i = 0; i < followingChars.length(); i++) {
+            testString.setCharAt(1, followingChars.charAt(i));
+            iter.setText(testString.toString());
+            int j = iter.first();
+            if (j != 0)
+                errln("ja line break failure: failed to start at 0");
+            j = iter.next();
+            if (j != 2)
+                errln("ja line break failure: failed to skip position before '" + followingChars.charAt(i)
+                            + "' (" + ((int)(followingChars.charAt(i))) + ")");
+            j = iter.next();
+            if (j != 3)
+                errln("ja line break failure: failed to stop after '" + followingChars.charAt(i)
+                            + "' (" + ((int)(followingChars.charAt(i))) + ")");
+        }
+    }
+
+    /**
+     * @bug 4068137
+     */
+    public void TestEndBehavior()
+    {
+        String testString = "boo.";
+        BreakIterator wb = BreakIterator.getWordInstance();
+        wb.setText(testString);
+
+        if (wb.first() != 0)
+            errln("Didn't get break at beginning of string.");
+        if (wb.next() != 3)
+            errln("Didn't get break before period in \"boo.\"");
+        if (wb.current() != 4 && wb.next() != 4)
+            errln("Didn't get break at end of string.");
+    }
+}
+
diff --git a/src/com/ibm/test/rbbi/RBBITest.java b/src/com/ibm/test/rbbi/RBBITest.java
new file mode 100755
index 0000000..c9905de
--- /dev/null
+++ b/src/com/ibm/test/rbbi/RBBITest.java
@@ -0,0 +1,952 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbbi/Attic/RBBITest.java,v $ 
+ * $Date: 2001/02/06 22:37:58 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.rbbi;
+ 
+//Regression testing of RuleBasedBreakIterator
+import com.ibm.test.*;
+import com.ibm.text.RuleBasedBreakIterator;
+import java.util.Locale;
+import java.util.Vector;
+import java.io.*;  
+
+public class RBBITest extends TestFmwk 
+{  
+  private RuleBasedBreakIterator characterBreak;
+  private RuleBasedBreakIterator wordBreak;
+  private RuleBasedBreakIterator lineBreak;
+  private RuleBasedBreakIterator sentenceBreak;
+    
+  public static void main(String[] args) throws Exception {
+    new RBBITest().run(args);
+  }
+
+  public RBBITest() { 
+  }
+  
+   private static final String halfNA = "\u0928\u094d\u200d";  /*halfform NA = devanigiri NA + virama(supresses inherent vowel)+ zero width joiner */  
+  private static final String halfSA  = "\u0938\u094d\u200d"; 
+  private static final String halfCHA = "\u091a\u094d\u200d"; 
+  private static final String halfKA  = "\u0915\u094d\u200d"; 
+  private static final String deadTA  = "\u0924\u094d";
+
+  private static final String deadRA   = "\u0930\u094d";  /*deadform RA = devanagari RA + virama*/
+  private static final String deadPHA  = "\u092b\u094d";  /*deadform PHA = devanagari PHA + virama*/
+  private static final String deadTTHA = "\u0920\u094d"; 
+  private static final String deadPA   = "\u092a\u094d"; 
+  private static final String deadSA   = "\u0938\u094d";   /*devanagari visarga looks like a english colon*/
+  private static final String visarga  = "\u0903";
+
+
+  //tests default rules based character iteration
+  public void TestDefaultRuleBasedCharacterIteration(){
+      RuleBasedBreakIterator rbbi=(RuleBasedBreakIterator)RuleBasedBreakIterator.getCharacterInstance();
+      logln("Testing the RBBI for character iteration by using default rules");
+      //fetch the rules used to create the above RuleBasedBreakIterator
+      String defaultRules=rbbi.toString();
+      
+      RuleBasedBreakIterator charIterDefault=null;
+      try{
+      charIterDefault   = new RuleBasedBreakIterator(defaultRules); 
+      }catch(IllegalArgumentException iae){
+          errln("ERROR: failed construction in TestDefaultRuleBasedCharacterIteration()"+ iae.toString());
+      }
+
+      Vector chardata = new Vector();
+      chardata.addElement("H");
+      chardata.addElement("e");
+      chardata.addElement("l");
+      chardata.addElement("l");
+      chardata.addElement("o");
+      chardata.addElement("e\u0301");                   //acuteE
+      chardata.addElement("&");
+      chardata.addElement("e\u0303");                   //tildaE
+      //devanagiri characters for Hindi support
+      chardata.addElement("\u0906");                    //devanagiri AA
+      //chardata.addElement("\u093e\u0901");              //devanagiri vowelsign AA+ chandrabindhu
+      chardata.addElement("\u0916\u0947");              //devanagiri KHA+vowelsign E
+      chardata.addElement("\u0938\u0941\u0902");        //devanagiri SA+vowelsign U + anusvara(bindu)
+      chardata.addElement("\u0926");                    //devanagiri consonant DA
+      chardata.addElement("\u0930");                    //devanagiri consonant RA
+      chardata.addElement("\u0939\u094c");              //devanagiri HA+vowel sign AI
+      chardata.addElement("\u0964");                    //devanagiri danda
+      //end hindi characters      
+      chardata.addElement("A\u0302");                   // circumflexA 
+      chardata.addElement("i\u0301");                   // acuteBelowI   
+      // conjoining jamo... 
+      chardata.addElement("\u1109\u1161\u11bc");
+      chardata.addElement("\u1112\u1161\u11bc");
+      chardata.addElement("\n");
+      chardata.addElement("\r\n");                      // keep CRLF sequences together  
+      chardata.addElement("S\u0300");                   //graveS
+      chardata.addElement("i\u0301");                   // acuteBelowI
+      chardata.addElement("!");
+
+       // What follows is a string of Korean characters (I found it in the Yellow Pages
+      // ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed
+      // it correctly), first as precomposed syllables, and then as conjoining jamo.
+      // Both sequences should be semantically identical and break the same way.
+      // precomposed syllables...
+      chardata.addElement("\uc0c1");
+      chardata.addElement("\ud56d");
+      chardata.addElement(" ");
+      chardata.addElement("\ud55c");
+      chardata.addElement("\uc778");
+      chardata.addElement(" ");
+      chardata.addElement("\uc5f0");
+      chardata.addElement("\ud569");
+      chardata.addElement(" ");
+      chardata.addElement("\uc7a5");
+      chardata.addElement("\ub85c");
+      chardata.addElement("\uad50");
+      chardata.addElement("\ud68c");
+      chardata.addElement(" ");
+       // conjoining jamo...
+      chardata.addElement("\u1109\u1161\u11bc");
+      chardata.addElement("\u1112\u1161\u11bc");
+      chardata.addElement(" ");
+      chardata.addElement("\u1112\u1161\u11ab");
+      chardata.addElement("\u110b\u1175\u11ab");
+      chardata.addElement(" ");
+      chardata.addElement("\u110b\u1167\u11ab");
+      chardata.addElement("\u1112\u1161\u11b8");
+      chardata.addElement(" ");
+      chardata.addElement("\u110c\u1161\u11bc");
+      chardata.addElement("\u1105\u1169");
+      chardata.addElement("\u1100\u116d");
+      chardata.addElement("\u1112\u116c");
+
+      //Testing the BreakIterator for devanagari script
+      //devanagari characters for Hindi support
+      chardata.addElement("\u0906");                    //devanagari AA
+      //hindi character break should make sure that it 
+      // doesn't break in-between a vowelsign and a chandrabindu
+    //  chardata.addElement("\u093e\u0901");              //devanagari vowelsign AA+ chandrabindu
+      chardata.addElement("\u0916\u0947");              //devanagari KHA+vowelsign E
+      chardata.addElement("\u0938\u0941\u0902");        //devanagari SA+vowelsign U + anusvara(bindu)
+      chardata.addElement("\u0926");                    //devanagari consonant DA
+      chardata.addElement("\u0930");                    //devanagari consonant RA
+      chardata.addElement("\u0939\u094c");              //devanagari consonant HA+dependent vowel sign AI
+      chardata.addElement("\u0964");                    //devanagari danda
+      chardata.addElement("\u0950");                    //devanagari OM 
+      chardata.addElement("\u0915\u0943");              //devanagari KA+dependent vowel RI->KRI
+
+      //dependent half-forms
+      chardata.addElement(halfSA+ "\u0924");             //halfSA+base consonant TA->STA
+      chardata.addElement(halfSA+ "\u0925");             //halfSA+base consonant THA->STHA
+      chardata.addElement(halfSA+ "\u092e");             //halfSA+base consonant MA->SMA
+      chardata.addElement(halfCHA+ "\u091b");            //halfCHA+base consonant CHHA->CHHHA
+      chardata.addElement(halfNA+ "\u0917");             //halfNA+base consonant GA->NGA
+      chardata.addElement("\u092a\u094d\u200d\u092f");   //halfPA(PA+virama+zerowidthjoiner+base consonant YA->PYA
+
+
+      //consonant RA rules ----------
+      //if the dead consonant RA precedes either a consonant or an independent vowel,
+      //then it is replaced by its superscript non-spacing mark
+      chardata.addElement(deadRA+ "\u0915");             //deadRA+devanagari consonant KA->KA+superRA 
+      chardata.addElement(deadRA+ "\u0923");             //deadRA+devanagari consonant NNA->NNA+superRA
+      chardata.addElement(deadRA+ "\u0917");             //deadRA+devanagari consonant GA->GA+superRA
+   //   chardata.addElement(deadRA+ "\u0960");           //deadRA+devanagari cosonant RRI->RRI+superRA
+      
+      //if any dead consonant(other than dead RA)precedes the consonant RA, then
+      //it is replaced with its nominal forma nd RA is replaced by the subscript non-spacing mark.
+      chardata.addElement(deadPHA+ "\u0930");            //deadPHA+devanagari consonant RA->PHA+subRA
+      chardata.addElement(deadPA+ "\u0930");             //deadPA+devanagari consonant RA->PA+subRA
+      chardata.addElement(deadTTHA+ "\u0930");           //deadTTHA+devanagari consonant RA->TTHA+subRA
+      chardata.addElement(deadTA+ "\u0930");             //deadTA+RA->TRA 
+      chardata.addElement("\u0936\u094d\u0930");         //deadSHA(SHA+virama)+RA->SHRA 
+
+      //conjuct ligatures
+      chardata.addElement("\u0915\u094d\u0937");         //deadKA(KA+virama) followed by SSHA wraps up into a single character KSSHA
+      chardata.addElement(deadTA+ "\u0924");              //deadTA+TA wraps up into glyph TTHA
+      chardata.addElement("\u0926\u094d\u0935");         //deadDA(DA+virama)+VA wraps up into DVA
+      chardata.addElement("\u091c\u094d\u091e");         //deadJA(JA+virama)+NYA wraps up into JNYA
+     
+
+
+      generalIteratorTest(charIterDefault, chardata);
+
+  }
+
+  public void TestDefaultRuleBasedWordIteration(){
+      logln("Testing the RBBI for word iteration using default rules");
+      RuleBasedBreakIterator rbbi=(RuleBasedBreakIterator)RuleBasedBreakIterator.getWordInstance();
+      //fetch the rules used to create the above RuleBasedBreakIterator
+      String defaultRules=rbbi.toString();
+      
+      RuleBasedBreakIterator wordIterDefault=null;
+      try{
+      wordIterDefault   = new RuleBasedBreakIterator(defaultRules); 
+      }catch(IllegalArgumentException iae){
+          errln("ERROR: failed construction in TestDefaultRuleBasedWordIteration() -- custom rules"+ iae.toString());
+      }
+
+      Vector worddata = new Vector();
+      worddata.addElement ("Write");
+      worddata.addElement (" ");
+      worddata.addElement ("wordrules");
+      worddata.addElement (".");
+      worddata.addElement(" ");
+      worddata.addElement("alpha-beta-gamma");
+      worddata.addElement(" ");      
+      worddata.addElement("\u092f\u0939");
+      worddata.addElement(" ");
+      worddata.addElement("\u0939\u093f" + halfNA + "\u0926\u0940");
+      worddata.addElement(" ");
+      worddata.addElement("\u0939\u0948");
+      //  worddata.addElement("\u0964");   //danda followed by a space
+      worddata.addElement(" ");
+      worddata.addElement("\u0905\u093e\u092a");
+      worddata.addElement(" ");
+      worddata.addElement("\u0938\u093f\u0916\u094b\u0917\u0947");
+      worddata.addElement("?");
+      worddata.addElement(" ");
+      worddata.addElement("\u0968\u0966.\u0969\u096f");            //hindi numbers
+      worddata.addElement(" ");
+      worddata.addElement("\u0967\u0966\u0966.\u0966\u0966%");     //postnumeric
+      worddata.addElement(" ");
+      worddata.addElement("\u20a8\u0967,\u0967\u0966\u0966.\u0966\u0966"); //pre-number India currency symbol Rs.\u20aD
+      worddata.addElement(" ");
+      worddata.addElement("\u0905\u092e\u091c");
+      worddata.addElement("\n");
+      worddata.addElement(halfSA+"\u0935\u0924\u0902"+deadTA+"\u0930");
+      worddata.addElement("\r");
+      worddata.addElement("It's");
+      worddata.addElement(" ");
+      worddata.addElement("$30.10");
+      worddata.addElement(" ");  
+      worddata.addElement("\u00A2"); //cent sign
+      worddata.addElement("\u00A3"); //pound sign
+      worddata.addElement("\u00A4"); //currency sign
+      worddata.addElement("\u00A5"); //yen sign
+      worddata.addElement("alpha-beta-gamma");
+      worddata.addElement(" ");
+      worddata.addElement("Badges");
+      worddata.addElement("?");
+      worddata.addElement(" ");
+      worddata.addElement("BADGES");
+      worddata.addElement("!");
+      worddata.addElement("1000,233,456.000");
+      worddata.addElement(" ");
+      worddata.addElement("1,23.322%");
+      worddata.addElement(" ");
+      worddata.addElement("123.1222");
+      worddata.addElement(" ");
+      worddata.addElement("\u0024123,000.20");
+      worddata.addElement(" ");
+      worddata.addElement("179.01\u0025");
+      worddata.addElement("X");
+      worddata.addElement(" ");
+      worddata.addElement("Now");
+      worddata.addElement("\r");
+      worddata.addElement("is");
+      worddata.addElement("\n");
+      worddata.addElement("the");
+      worddata.addElement("\r\n");
+      worddata.addElement("time");
+      worddata.addElement(" ");
+      worddata.addElement("\uc5f0\ud569");
+      worddata.addElement(" ");
+      worddata.addElement("\uc7a5\ub85c\uad50\ud68c");
+      worddata.addElement(" ");
+      // conjoining jamo...
+      worddata.addElement("\u1109\u1161\u11bc\u1112\u1161\u11bc");
+      worddata.addElement(" ");
+      worddata.addElement("\u1112\u1161\u11ab\u110b\u1175\u11ab");
+      worddata.addElement(" ");
+      worddata.addElement("Hello");
+      worddata.addElement(",");
+      worddata.addElement(" ");
+      worddata.addElement("how");
+      worddata.addElement(" ");
+      worddata.addElement("are");
+      worddata.addElement(" ");
+      worddata.addElement("you");
+      worddata.addElement(" ");
+
+      //Testing the BreakIterator for devanagari script
+      //hindi
+      worddata.addElement("\u0917\u092a-\u0936\u092a");
+      worddata.addElement("!");
+      worddata.addElement("\u092f\u0939");
+      worddata.addElement(" ");
+      worddata.addElement("\u0939\u093f" + halfNA + "\u0926\u0940");
+      worddata.addElement(" ");
+      worddata.addElement("\u0939\u0948");
+      //danda is similar to full stop. danda is a hindi phrase seperator
+      //Make sure it breaks before danda and after danda when it is followed by a space
+      //worddata.addElement("\u0964");   //fails here doesn't break at danda
+      worddata.addElement(" ");
+      worddata.addElement("\u0905\u093e\u092a");
+      worddata.addElement(" ");
+      worddata.addElement("\u0938\u093f\u0916\u094b\u0917\u0947");
+      worddata.addElement("?");
+      worddata.addElement("\n"); 
+      worddata.addElement(":");
+      worddata.addElement(deadPA+"\u0930\u093e\u092f"+visarga);    //no break before visarga
+      worddata.addElement(" ");
+
+      worddata.addElement("\u0935" + deadRA+ "\u0937\u093e");
+      worddata.addElement("\r\n");
+      worddata.addElement(deadPA+ "\u0930\u0915\u093e\u0936");     //deadPA+RA+KA+vowel AA+SHA -> prakash
+      worddata.addElement(","); 
+      worddata.addElement("\u0924\u0941\u092e\u093e\u0930\u094b"); 
+      worddata.addElement(" ");
+      worddata.addElement("\u092e\u093f"+ deadTA+ "\u0930");       //MA+vowel I+ deadTA + RA 
+      worddata.addElement(" ");
+      worddata.addElement("\u0915\u093e");
+      worddata.addElement(" ");
+      worddata.addElement("\u092a"+ deadTA + "\u0930");            //PA + deadTA + RA
+      worddata.addElement(" ");
+      worddata.addElement("\u092a\u095d\u094b");
+      // worddata.addElement("\u0964"); //fails here doesn't break at danda
+      worddata.addElement(" ");
+      worddata.addElement(deadSA + deadTA + "\u0930\u093f");       //deadSA+deadTA+RA+vowel I->sthri
+      worddata.addElement(".");
+      worddata.addElement(" ");
+      worddata.addElement("\u0968\u0966.\u0969\u096f");            //hindi numbers
+      worddata.addElement(" ");
+      worddata.addElement("\u0967\u0966\u0966.\u0966\u0966%");     //postnumeric
+      worddata.addElement(" ");
+      worddata.addElement("\u20a8\u0967,\u0967\u0966\u0966.\u0966\u0966"); //pre-number India currency symbol Rs.\u20aD
+      worddata.addElement(" ");
+      worddata.addElement("\u0905\u092e\u091c");
+      worddata.addElement("\n");
+      worddata.addElement(halfSA + "\u0935\u0924\u0902" +deadTA+ "\u0930");
+      worddata.addElement("\r");
+
+      generalIteratorTest(wordIterDefault, worddata);
+  }
+  private static final String kParagraphSeparator = "\u2029";
+  private static final String kLineSeparator      = "\u2028";
+
+  public void TestDefaultRuleBasedSentenceIteration(){
+      logln("Testing the RBBI for sentence iteration using default rules");
+      RuleBasedBreakIterator rbbi=(RuleBasedBreakIterator)RuleBasedBreakIterator.getSentenceInstance();
+      //fetch the rules used to create the above RuleBasedBreakIterator
+      String defaultRules=rbbi.toString();
+      RuleBasedBreakIterator sentIterDefault=null;
+      try{
+      sentIterDefault   = new RuleBasedBreakIterator(defaultRules); 
+      }catch(IllegalArgumentException iae){
+          errln("ERROR: failed construction in TestDefaultRuleBasedSentenceIteration()" + iae.toString());
+      }
+
+      Vector sentdata = new Vector();
+      sentdata.addElement("(This is it.) ");
+      sentdata.addElement("Testing the sentence iterator. ");
+      sentdata.addElement("\"This isn\'t it.\" ");
+      sentdata.addElement("Hi! ");
+      sentdata.addElement("This is a simple sample sentence. ");
+      sentdata.addElement("(This is it.) ");
+      sentdata.addElement("This is a simple sample sentence. ");
+      sentdata.addElement("\"This isn\'t it.\" ");
+      sentdata.addElement("Hi! ");
+      sentdata.addElement("This is a simple sample sentence. ");
+      sentdata.addElement("It does not have to make any sense as you can see. ");
+      sentdata.addElement("Nel mezzo del cammin di nostra vita, mi ritrovai in una selva oscura. ");
+      sentdata.addElement("Che la dritta via aveo smarrita. ");
+      sentdata.addElement("He said, that I said, that you said!! ");
+      sentdata.addElement("Don't rock the boat." + kParagraphSeparator);
+      sentdata.addElement("Because I am the daddy, that is why. ");
+      sentdata.addElement("Not on my time (el timo.)! ");
+      sentdata.addElement("So what!!" + kParagraphSeparator);
+      sentdata.addElement("\"But now,\" he said, \"I know!\" ");
+      sentdata.addElement("Harris thumbed down several, including \"Away We Go\" (which became the huge success Oklahoma!). ");
+      sentdata.addElement("One species, B. anthracis, is highly virulent.\n");
+      sentdata.addElement("Wolf said about Sounder:\"Beautifully thought-out and directed.\" ");
+      sentdata.addElement("Have you ever said, \"This is where\tI shall live\"? ");
+      sentdata.addElement("He answered, \"You may not!\" ");
+      sentdata.addElement("Another popular saying is: \"How do you do?\". ");
+      sentdata.addElement("Yet another popular saying is: \'I\'m fine thanks.\' ");
+      sentdata.addElement("What is the proper use of the abbreviation pp.? ");
+      sentdata.addElement("Yes, I am definatelly 12\" tall!!");
+      sentdata.addElement("Now\ris\nthe\r\ntime\n\rfor\r\rall\u2029");
+      // Don't break sentences at the boundary between CJK
+      // and other letters
+      sentdata.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165:\"JAVA\u821c"
+                + "\u8165\u7fc8\u51ce\u306d,\u2494\u56d8\u4ec0\u60b1\u8560\u51ba"
+                + "\u611d\u57b6\u2510\u5d46\".\u2029");
+      sentdata.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8"
+                + "\u97e4JAVA\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8\u4ec0"
+                + "\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u2029");
+      sentdata.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8\u97e4"
+                + "\u6470\u8790JAVA\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8"
+                + "\u4ec0\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u2029");
+      sentdata.addElement("He said, \"I can go there.\"\u2029");
+      // Treat fullwidth variants of .!? the same as their
+      // normal counterparts
+      sentdata.addElement("I know I'm right\uff0e ");
+      sentdata.addElement("Right\uff1f ");
+      sentdata.addElement("Right\uff01 ");
+
+      // Don't break sentences at boundary between CJK and digits
+      sentdata.addElement("\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8"
+                + "\u97e48888\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8\u4ec0"
+                + "\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u2029");
+
+      // Break sentence between a sentence terminator and
+      // opening punctuation
+      sentdata.addElement("How do you do?");
+      sentdata.addElement("(fine).");
+      //sentence breaks for hindi
+      //make sure there is sentence break after ?,danda(hindi phrase separator),fullstop followed by space and no break after \n \r 
+      sentdata.addElement("\u0928\u092e"+halfSA+"\u0924\u0947 "  
+                                   + "\u0930\u092e\u0947\u0936, " 
+                                   + "\u0905\u093e\u092a"
+                                   + "\u0915\u0948\u0938\u0947 "
+                                   + "\u0939\u0948?");   
+      sentdata.addElement("\u092e\u0948 \u0905"
+                        + halfCHA
+                        + "\u091b\u093e \u0939\u0942\u0901\u0964 ");   
+      sentdata.addElement("\u0905\u093e\u092a\r\n \u0915\u0948\u0938\u0947 \u0939\u0948?");   
+      sentdata.addElement("\u0935\u0939 "
+                       + halfKA
+                       + "\u092f\u093e\n \u0939\u0948?");   
+      sentdata.addElement("\u092f\u0939 \u0905\u093e\u092e \u0939\u0948. ");   
+      sentdata.addElement("\u092f\u0939 means \"this\". "); 
+      sentdata.addElement("\"\u092a\u095d\u093e\u0908\" meaning \"education\" or \"studies\". ");
+      sentdata.addElement("\u0905\u093e\u091c" 
+                        + "("+halfSA+"\u0935\u0924\u0902"
+                        + deadTA
+                        + "\u0930 "
+                        + "\u0926\u093f\u0935\u093e\u0938) "
+                        + "\u0939\u0948\u0964 ");
+      sentdata.addElement("Let's end here. ");
+      generalIteratorTest(sentIterDefault, sentdata);
+  }
+   
+  public void TestDefaultRuleBasedLineIteration(){
+     logln("Testing the RBBI for line iteration using default rules");
+     RuleBasedBreakIterator rbbi=(RuleBasedBreakIterator)RuleBasedBreakIterator.getLineInstance();
+     //fetch the rules used to create the above RuleBasedBreakIterator
+     String defaultRules=rbbi.toString();
+     RuleBasedBreakIterator lineIterDefault=null;
+     try{
+     lineIterDefault   = new RuleBasedBreakIterator(defaultRules); 
+     }catch(IllegalArgumentException iae){
+         errln("ERROR: failed construction in TestDefaultRuleBasedLineIteration()" + iae.toString());
+     }
+
+     Vector linedata = new Vector();
+     linedata.addElement("Multi-");
+     linedata.addElement("Level ");
+     linedata.addElement("example ");
+     linedata.addElement("of ");
+     linedata.addElement("a ");
+     linedata.addElement("semi-");
+     linedata.addElement("idiotic ");
+     linedata.addElement("non-");
+     linedata.addElement("sensical ");
+     linedata.addElement("(non-");
+     linedata.addElement("important) ");
+     linedata.addElement("sentence. ");
+
+     linedata.addElement("Hi  ");
+     linedata.addElement("Hello ");
+     linedata.addElement("How\n");
+     linedata.addElement("are\r");
+     linedata.addElement("you" + kLineSeparator);
+     linedata.addElement("fine.\t");
+     linedata.addElement("good.  ");
+
+     linedata.addElement("Now\r");
+     linedata.addElement("is\n");
+     linedata.addElement("the\r\n");
+     linedata.addElement("time\n");
+     linedata.addElement("\r");
+     linedata.addElement("for\r");
+     linedata.addElement("\r");
+     linedata.addElement("all");
+
+    // to test for bug #4068133
+     linedata.addElement("\u96f6");
+     linedata.addElement("\u4e00\u3002");
+     linedata.addElement("\u4e8c\u3001");
+     linedata.addElement("\u4e09\u3002\u3001");
+     linedata.addElement("\u56db\u3001\u3002\u3001");
+     linedata.addElement("\u4e94,");
+     linedata.addElement("\u516d.");
+     linedata.addElement("\u4e03.\u3001,\u3002");
+     linedata.addElement("\u516b");
+
+    // to test for bug #4086052
+     linedata.addElement("foo\u00a0bar ");
+    // linedata.addElement("foo\ufeffbar");
+
+    // to test for bug #4097920
+     linedata.addElement("dog,");
+     linedata.addElement("cat,");
+     linedata.addElement("mouse ");
+     linedata.addElement("(one)");
+     linedata.addElement("(two)\n");
+
+    // to test for bug #4035266
+     linedata.addElement("The ");
+     linedata.addElement("balance ");
+     linedata.addElement("is ");
+     linedata.addElement("$-23,456.78, ");
+     linedata.addElement("not ");
+     linedata.addElement("-$32,456.78!\n");
+
+    // to test for bug #4098467
+    // What follows is a string of Korean characters (I found it in the Yellow Pages
+    // ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed
+    // it correctly), first as precomposed syllables, and then as conjoining jamo.
+    // Both sequences should be semantically identical and break the same way.
+    // precomposed syllables...
+     linedata.addElement("\uc0c1\ud56d ");
+     linedata.addElement("\ud55c\uc778 ");
+     linedata.addElement("\uc5f0\ud569 ");
+     linedata.addElement("\uc7a5\ub85c\uad50\ud68c ");
+    // conjoining jamo...
+     linedata.addElement("\u1109\u1161\u11bc\u1112\u1161\u11bc ");
+     linedata.addElement("\u1112\u1161\u11ab\u110b\u1175\u11ab ");
+     linedata.addElement("\u110b\u1167\u11ab\u1112\u1161\u11b8 ");
+     linedata.addElement("\u110c\u1161\u11bc\u1105\u1169\u1100\u116d\u1112\u116c");
+
+    // to test for bug #4117554: Fullwidth .!? should be treated as postJwrd
+     linedata.addElement("\u4e01\uff0e");
+     linedata.addElement("\u4e02\uff01");
+     linedata.addElement("\u4e03\uff1f");
+     generalIteratorTest(lineIterDefault, linedata);
+
+
+  }
+  public void TestCustomRuleBasedLineIterator(){
+
+    RuleBasedBreakIterator rbbi=(RuleBasedBreakIterator)RuleBasedBreakIterator.getLineInstance();
+    //fetch the rules used to create the above RuleBasedBreakIterator
+    String rules=//"$_ignore_=[e];"  + // [liu] Not sure what the intention was here.
+        // It's illegal to redefine variables, also, why prepend the ignore definition --
+        // even if it's legal to redefine variables, the prepended definition will just
+        // get overridden.
+                 rbbi.toString();
+    RuleBasedBreakIterator lineIter=null;
+    try{
+     lineIter   = new RuleBasedBreakIterator(rules); 
+       }catch(IllegalArgumentException iae){
+         errln("ERROR: failed construction in TestCustomRuleBasedLineIterator() -- custom rules\n" + iae.toString());
+       }
+    Vector linedata=new Vector();
+    linedata.addElement("SLhello! ");
+    linedata.addElement("How ");
+    generalIteratorTest(lineIter, linedata);
+  }
+  
+  //tests the behaviour of character iteration of RBBI with custom rules
+  public void TestCustomRuleBasedCharacterIteration(){
+      logln("Testing the RBBI by using custom rules for character iteration");
+
+      String crules2="$_ignore_=[e];"                                 + //ignore the character "e"
+                     ".;"                                            + 
+                     "$devVowelSign=[\u093e-\u094c\u0962\u0963];"   +  //devanagiri vowel = \u093e tp \u094c and \u0962.\u0963
+                     "$devConsonant=[\u0915-\u0939];"               +  //devanagiri consonant = \u0915 to \u0939
+                     "$devConsonant$devVowelSign;" ;                //break at all places except the  following 
+                                                                            //devanagiri consonants+ devanagiri vowelsign
+      
+      RuleBasedBreakIterator charIterRules=null;
+      try{
+      charIterRules   = new RuleBasedBreakIterator(crules2); 
+      }catch(IllegalArgumentException iae){
+          errln("ERROR: failed construction in TestCustomBasedCharacterIteration()-- custom rules" + iae.toString());
+      }
+
+      Vector chardata = new Vector();
+      chardata.addElement("He");              //ignores 'e'
+      chardata.addElement("l");                
+      chardata.addElement("l");
+      chardata.addElement("oe");              //ignores 'e' hence wraps it into 'o' instead of wrapping with
+      chardata.addElement("\u0301");          //'\u0301' to form 'acuteE '
+      chardata.addElement("&e");              //ignores 'e' hence wraps it into '&' instead of wrapping with
+      chardata.addElement("\u0303");          //'\u0303 to form 'tildaE'
+      //devanagiri characters 
+      chardata.addElement("\u0906");          //devanagiri AA
+      chardata.addElement("\u093e");          //devanagiri vowelsign AA:--breaks at \u0901 which is devanagiri 
+      chardata.addElement("\u0901");          //chandra bindhu since it is not mentioned in the rules
+      chardata.addElement("\u0916\u0947");    //devanagiri KHA+vowelsign E
+      chardata.addElement("\u0938\u0941");    //devanagiri SA+vowelsign U : - breaks at
+      chardata.addElement("\u0902");          //\u0902 devanagiri anusvara since it is not mentioned in the rules
+      chardata.addElement("\u0926");          //devanagiri consonant DA
+      chardata.addElement("\u0930");          //devanagiri consonant RA
+      chardata.addElement("\u0939\u094c");    //devanagiri HA+vowel sign AI
+      chardata.addElement("\u0964");          //devanagiri danda
+      // devanagiri chracters end
+      chardata.addElement("A");               //breaks in between since it is not mentioned in the rules
+      chardata.addElement("\u0302");          /* circumflexA */    
+      chardata.addElement("i");               //breaks in between since not mentioned in the rules
+      chardata.addElement("\u0301");          /* acuteBelowI */  
+      //Rules don't support conjoining jamo....
+      chardata.addElement("\u1109");          //break at every character since rules
+      chardata.addElement("\u1161");          //don't support conjoining jamo
+      chardata.addElement("\u11bc");
+      chardata.addElement("\u1112");
+      chardata.addElement("\u1161");
+      chardata.addElement("\u11bc");
+      chardata.addElement("\n");
+      chardata.addElement("\r");             //doesn't keep CRLGF together since rules do not mention it
+      chardata.addElement("\n");
+      chardata.addElement("S");              //graveS
+      chardata.addElement("\u0300");         //breaks in between since it is not mentioned in the rules
+      chardata.addElement("i");              //acuteBelowI
+      chardata.addElement("\u0301");         //breaks in between since it is not mentioned in the rules
+
+      generalIteratorTest(charIterRules, chardata);
+
+  }    
+  //tests custom rules based word iteration
+  public void TestCustomRuleBasedWordIteration(){
+      logln("Testing the RBBI by using custom rules for word iteration");
+      String wrules1="$_ignore_=[[:Mn:][:Me:][:Cf:]];"         + // ignore non-spacing marks, enclosing marks, and format characters,
+                      "$danda=[\u0964\u0965];"                + // Hindi Phrase seperator
+                      "$let=[[:L:][:Mc:]];"                   + // uppercase(Lu), lowercase(Ll), titlecase(Lt), modifier(Lm) letters, Mc-combining space mark
+                      "$mid_word=[[:Pd:]\\\"\\\'\\.];"        + // dashes, quotation, apostraphes, period
+                      "$ls=[\n\u000c\u2028\u2029];"           + // line separators:  LF, FF, PS, and LS
+                      "$ws=[[:Zs:]\t];"                       + // all space separators and the tab character
+                      "$word=(($let+($mid_word$let+)*));"  +  
+                      ".;"                                   + // break after every character, with the following exceptions
+                      "$word;"                              + 
+                      "$ws*\r$ls$danda?;" ;
+
+      RuleBasedBreakIterator wordIterRules=null;
+      try{
+      wordIterRules   = new RuleBasedBreakIterator(wrules1); 
+      }catch(IllegalArgumentException iae){
+          errln("ERROR: failed construction in TestCustomRuleBasedWordIteration() -- custom rules" + iae.toString());
+      }
+
+      Vector worddata = new Vector();
+      worddata.addElement("Write");
+      worddata.addElement(" ");
+      worddata.addElement("wordrules");
+      worddata.addElement(".");
+      worddata.addElement(" ");
+      //play with hindi
+      worddata.addElement("\u092f\u0939");
+      worddata.addElement(" ");
+      worddata.addElement("\u0939\u093f" + halfNA + "\u0926\u0940");
+      worddata.addElement(" ");
+      worddata.addElement("\u0939\u0948");
+      worddata.addElement("\u0964");   //Danda is similar to full stop. Danda followed by a space
+      worddata.addElement(" ");
+      worddata.addElement("\u0905\u093e\u092a");
+      worddata.addElement(" ");
+      worddata.addElement("\u0938\u093f\u0916\u094b\u0917\u0947");
+      worddata.addElement("?");
+      worddata.addElement(" ");
+      worddata.addElement("It's");
+      worddata.addElement(" ");
+      worddata.addElement("$");
+      worddata.addElement("3");
+      worddata.addElement("0");
+      worddata.addElement(".");
+      worddata.addElement("1");
+      worddata.addElement("0");
+      worddata.addElement(" ");
+      // worddata.addElement(" ");
+      generalIteratorTest(wordIterRules, worddata); 
+  } 
+  //adds extra rules to deal with abbrevations(limited) and test the word Iteration
+  public void TestAbbrRuleBasedWordIteration(){
+      logln("Testing the RBBI for word iteration by adding rules to support abbreviation");
+      RuleBasedBreakIterator rb =(RuleBasedBreakIterator)RuleBasedBreakIterator.getWordInstance();
+      
+      String wrules2="$abbr=((Mr.)|(Mrs.)|(Ms.)|(Dr.)|(U.S.));" + // abbreviations. 
+                     rb.toString()                             +
+                     "($abbr$ws)*$word;";
+      RuleBasedBreakIterator wordIter=null;
+      try{
+      wordIter   = new RuleBasedBreakIterator(wrules2); 
+      }catch(IllegalArgumentException iae){
+          errln("ERROR: failed construction in TestAbbrRuleBasedWordIteration() --custom rules" + iae.toString());
+      }
+      Vector worddata = new Vector();
+      worddata.addElement("Mr. George");
+      worddata.addElement(" ");
+      worddata.addElement("is");
+      worddata.addElement(" ");
+      worddata.addElement("from");
+      worddata.addElement(" ");
+      worddata.addElement("U.S. Navy");
+      worddata.addElement(".");
+      worddata.addElement(" ");
+      worddata.addElement("His");
+      worddata.addElement("\n");
+      worddata.addElement("friend");
+      worddata.addElement("\t");
+      worddata.addElement("Dr. Steven");
+      worddata.addElement(" ");
+      worddata.addElement("married");
+      worddata.addElement(" ");
+      worddata.addElement("Ms. Benneth");
+      worddata.addElement("!");
+      worddata.addElement(" ");
+      worddata.addElement("Mrs. Johnson");
+      worddata.addElement("\r\n");
+      worddata.addElement("paid");
+      worddata.addElement(" ");
+      worddata.addElement("$2,400.00");
+      generalIteratorTest(wordIter, worddata); 
+  } 
+      //=========================================================================
+     // general test subroutines
+     //=========================================================================
+
+     private void generalIteratorTest(RuleBasedBreakIterator rbbi, Vector expectedResult){
+         StringBuffer buffer = new StringBuffer();
+         String text;
+         for (int i = 0; i < expectedResult.size(); i++) {
+             text = (String)expectedResult.elementAt(i);
+             buffer.append(text);
+         }
+         text = buffer.toString();
+
+         rbbi.setText(text);
+
+         Vector nextResults = _testFirstAndNext(rbbi, text);
+         Vector previousResults = _testLastAndPrevious(rbbi, text);
+
+         logln("comparing forward and backward...");
+         int errs = getErrorCount();
+         compareFragmentLists("forward iteration", "backward iteration", nextResults,
+                         previousResults);
+         if (getErrorCount() == errs) {
+             logln("comparing expected and actual...");
+             compareFragmentLists("expected result", "actual result", expectedResult,
+                             nextResults);
+         }
+
+        int[] boundaries = new int[expectedResult.size() + 3];
+        boundaries[0] = RuleBasedBreakIterator.DONE;
+        boundaries[1] = 0;
+        for (int i = 0; i < expectedResult.size(); i++)
+         boundaries[i + 2] = boundaries[i + 1] + ((String)expectedResult.elementAt(i)).length();
+      
+        boundaries[boundaries.length - 1] = RuleBasedBreakIterator.DONE;
+      
+        _testFollowing(rbbi, text, boundaries);
+        _testPreceding(rbbi, text, boundaries);
+        _testIsBoundary(rbbi, text, boundaries);
+
+        doMultipleSelectionTest(rbbi, text);
+     }
+
+     private Vector _testFirstAndNext(RuleBasedBreakIterator rbbi, String text) {
+         int p = rbbi.first();
+         int lastP = p;
+         Vector result = new Vector();
+
+         if (p != 0)
+             errln("first() returned " + p + " instead of 0");
+         while (p != RuleBasedBreakIterator.DONE) {
+             p = rbbi.next();
+             if (p != RuleBasedBreakIterator.DONE) {
+                 if (p <= lastP)
+                     errln("next() failed to move forward: next() on position "
+                                     + lastP + " yielded " + p);
+
+                 result.addElement(text.substring(lastP, p));
+             }
+             else {
+                 if (lastP != text.length())
+                     errln("next() returned DONE prematurely: offset was "
+                                     + lastP + " instead of " + text.length());
+             }
+             lastP = p;
+         }
+         return result;
+     }
+
+     private Vector _testLastAndPrevious(RuleBasedBreakIterator rbbi, String text) {
+         int p = rbbi.last();
+         int lastP = p;
+         Vector result = new Vector();
+
+         if (p != text.length())
+             errln("last() returned " + p + " instead of " + text.length());
+         while (p != RuleBasedBreakIterator.DONE) {
+             p = rbbi.previous();
+             if (p != RuleBasedBreakIterator.DONE) {
+                 if (p >= lastP)
+                     errln("previous() failed to move backward: previous() on position "
+                                     + lastP + " yielded " + p);
+
+                 result.insertElementAt(text.substring(p, lastP), 0);
+             }
+             else {
+                 if (lastP != 0)
+                     errln("previous() returned DONE prematurely: offset was "
+                                     + lastP + " instead of 0");
+             }
+             lastP = p;
+         }
+         return result;
+     }
+
+     private void compareFragmentLists(String f1Name, String f2Name, Vector f1, Vector f2) {
+         int p1 = 0;
+         int p2 = 0;
+         String s1;
+         String s2;
+         int t1 = 0;
+         int t2 = 0;
+
+         while (p1 < f1.size() && p2 < f2.size()) {
+             s1 = (String)f1.elementAt(p1);
+             s2 = (String)f2.elementAt(p2);
+             t1 += s1.length();
+             t2 += s2.length();
+
+             if (s1.equals(s2)) {
+                 debugLogln("   >" + s1 + "<");
+                 ++p1;
+                 ++p2;
+             }
+             else {
+                 int tempT1 = t1;
+                 int tempT2 = t2;
+                 int tempP1 = p1;
+                 int tempP2 = p2;
+
+                 while (tempT1 != tempT2 && tempP1 < f1.size() && tempP2 < f2.size()) {
+                     while (tempT1 < tempT2 && tempP1 < f1.size()) {
+                         tempT1 += ((String)f1.elementAt(tempP1)).length();
+                         ++tempP1;
+                     }
+                     while (tempT2 < tempT1 && tempP2 < f2.size()) {
+                         tempT2 += ((String)f2.elementAt(tempP2)).length();
+                         ++tempP2;
+                     }
+                 }
+                 logln("*** " + f1Name + " has:");
+                 while (p1 <= tempP1 && p1 < f1.size()) {
+                     s1 = (String)f1.elementAt(p1);
+                     t1 += s1.length();
+                     debugLogln(" *** >" + s1 + "<");
+                     ++p1;
+                 }
+                 logln("***** " + f2Name + " has:");
+                 while (p2 <= tempP2 && p2 < f2.size()) {
+                     s2 = (String)f2.elementAt(p2);
+                     t2 += s2.length();
+                     debugLogln(" ***** >" + s2 + "<");
+                     ++p2;
+                 }
+                 errln("Discrepancy between " + f1Name + " and " + f2Name);
+             }
+         }
+     }
+
+    private void _testFollowing(RuleBasedBreakIterator rbbi, String text, int[] boundaries) {
+       logln("testFollowing():");
+       int p = 2;
+       for(int i = 0; i <= text.length(); i++) {
+           if (i == boundaries[p])
+               ++p;
+           int b = rbbi.following(i);
+           logln("rbbi.following(" + i + ") -> " + b);
+           if (b != boundaries[p])
+               errln("Wrong result from following() for " + i + ": expected " + boundaries[p]
+                               + ", got " + b);
+       }
+   }
+
+   private void _testPreceding(RuleBasedBreakIterator rbbi, String text, int[] boundaries) {
+       logln("testPreceding():");
+       int p = 0;
+       for(int i = 0; i <= text.length(); i++) {
+           int b = rbbi.preceding(i);
+           logln("rbbi.preceding(" + i + ") -> " + b);
+           if (b != boundaries[p])
+               errln("Wrong result from preceding() for " + i + ": expected " + boundaries[p]
+                              + ", got " + b);
+           if (i == boundaries[p + 1])
+               ++p;
+       }
+   }
+
+   private void _testIsBoundary(RuleBasedBreakIterator rbbi, String text, int[] boundaries) {
+       logln("testIsBoundary():");
+       int p = 1;
+       boolean isB;
+       for(int i = 0; i <= text.length(); i++) {
+           isB = rbbi.isBoundary(i);
+           logln("rbbi.isBoundary(" + i + ") -> " + isB);
+           if(i == boundaries[p]) {
+               if (!isB)
+                   errln("Wrong result from isBoundary() for " + i + ": expected true, got false");
+               ++p;
+           }
+           else {
+               if(isB)
+                   errln("Wrong result from isBoundary() for " + i + ": expected false, got true");
+           }
+       }
+   }
+   private void doMultipleSelectionTest(RuleBasedBreakIterator iterator, String testText)
+   {
+       logln("Multiple selection test...");
+       RuleBasedBreakIterator testIterator = (RuleBasedBreakIterator)iterator.clone();
+       int offset = iterator.first();
+       int testOffset;
+       int count = 0;
+
+       do {
+           testOffset = testIterator.first();
+           testOffset = testIterator.next(count);
+           logln("next(" + count + ") -> " + testOffset);
+           if (offset != testOffset)
+               errln("next(n) and next() not returning consistent results: for step " + count + ", next(n) returned " + testOffset + " and next() had " + offset);
+
+           if (offset != RuleBasedBreakIterator.DONE) {
+               count++;
+               offset = iterator.next();
+           }
+       } while (offset != RuleBasedBreakIterator.DONE);
+
+       // now do it backwards...
+       offset = iterator.last();
+       count = 0;
+
+       do {
+           testOffset = testIterator.last();
+           testOffset = testIterator.next(count);
+           logln("next(" + count + ") -> " + testOffset);
+           if (offset != testOffset)
+               errln("next(n) and next() not returning consistent results: for step " + count + ", next(n) returned " + testOffset + " and next() had " + offset);
+
+           if (offset != RuleBasedBreakIterator.DONE) {
+               count--;
+               offset = iterator.previous();
+           }
+       } while (offset != RuleBasedBreakIterator.DONE);
+   }
+
+   private void debugLogln(String s) {
+        final String zeros = "0000";
+        String temp;
+        StringBuffer out = new StringBuffer();
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if (c >= ' ' && c < '\u007f')
+                out.append(c);
+            else {
+                out.append("\\u");
+                temp = Integer.toHexString((int)c);
+                out.append(zeros.substring(0, 4 - temp.length()));
+                out.append(temp);
+            }
+        }
+         logln(out.toString());
+    }
+  
+}
diff --git a/src/com/ibm/test/rbbi/SimpleBITest.java b/src/com/ibm/test/rbbi/SimpleBITest.java
new file mode 100755
index 0000000..cc92283
--- /dev/null
+++ b/src/com/ibm/test/rbbi/SimpleBITest.java
@@ -0,0 +1,177 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbbi/Attic/SimpleBITest.java,v $ 
+ * $Date: 2000/03/10 03:47:46 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.rbbi;
+
+import java.util.Locale;
+import com.ibm.text.BreakIterator;
+import com.ibm.test.TestFmwk;
+
+public class SimpleBITest extends TestFmwk{
+    public static final String testText =
+//        "The rain in Spain stays mainly on the plain.  The plains in Spain are mainly pained with rain.";
+//"one-two now--  Hah!  You owe me exactly $1,345.67...  Pay up, huh?  By the way, why don't I send you my re\u0301sume\u0301?  This is a line\r\nbreak.";
+//"nowisthetimeforallgoodmen...  tocometothehelpoftheircountry";
+"When, in the course of human events, it becomes necessary for one people to dissolve the political bonds which have "
+//"When,inthecourseofhumanevents,itbecomesnecessaryforonepeopletodissolvethepoliticalbondswhichhave"
++ "connectedthemwithanother,andtoassumeamongthepowersoftheearth,theseparateandequalstationtowhichthelaws"
++ "ofnatureandofnature'sGodentitlethem,adecentrespecttotheopinionsofmankindrequiresthattheyshoulddeclarethe"
++ "causeswhichimpelthemtotheseparation\n"
++ "Weholdthesetruthstobeself-evident,thatallmenarecreatedequal,thattheyareendowedbytheirCreatorwithcertain"
++ "unalienablerights,thatamongthesearelife,libertyandthepursuitofhappiness.Thattosecuretheserights,governmentsare"
++ "institutedamongmen,derivingtheirjustpowersfromtheconsentofthegoverned.Thatwheneveranyformofgovernment"
++ "becomesdestructivetotheseends,itistherightofthepeopletoalterortoabolishit,andtoinstitutenewgovernment,laying"
++ "itsfoundationonsuchprinciplesandorganizingitspowersinsuchform,astothemshallseemmostlikelytoeffecttheirsafety"
++ "andhappiness.Prudence,indeed,willdictatethatgovernmentslongestablishedshouldnotbechangedforlightandtransient"
++ "causes;andaccordinglyallexperiencehathshownthatmankindaremoredisposedtosuffer,whileevilsaresufferable,than"
++ "torightthemselvesbyabolishingtheformstowhichtheyareaccustomed.Butwhenalongtrainofabusesandusurpations,"
++ "pursuinginvariablythesameobjectevincesadesigntoreducethemunderabsolutedespotism,itistheirright,itistheirduty,"
++ "tothrowoffsuchgovernment,andtoprovidenewguardsfortheirfuturesecurity.--Suchhasbeenthepatientsufferanceof"
++ "thesecolonies;andsuchisnowthenecessitywhichconstrainsthemtoaltertheirformersystemsofgovernment.Thehistory"
++ "ofthepresentKingofGreatBritainisahistoryofrepeatedinjuriesandusurpations,allhavingindirectobjectthe"
++ "establishmentofanabsolutetyrannyoverthesestates.Toprovethis,letfactsbesubmittedtoacandidworld.\n"
++ "Hehasrefusedhisassenttolaws,themostwholesomeandnecessaryforthepublicgood.\n"
++ "Hehasforbiddenhisgovernorstopasslawsofimmediateandpressingimportance,unlesssuspendedintheiroperationtill"
++ "hisassentshouldbeobtained;andwhensosuspended,hehasutterlyneglectedtoattendtothem.\n"
++ "Hehasrefusedtopassotherlawsfortheaccommodationoflargedistrictsofpeople,unlessthosepeoplewouldrelinquish"
++ "therightofrepresentationinthelegislature,arightinestimabletothemandformidabletotyrantsonly.\n"
++ "Hehascalledtogetherlegislativebodiesatplacesunusual,uncomfortable,anddistantfromthedepositoryoftheirpublic"
++ "records,forthesolepurposeoffatiguingthemintocompliancewithhismeasures.\n"
++ "Hehasdissolvedrepresentativehousesrepeatedly,foropposingwithmanlyfirmnesshisinvasionsontherightsofthepeople.\n"
++ "Hehasrefusedforalongtime,aftersuchdissolutions,tocauseotherstobeelected;wherebythelegislativepowers,"
++ "incapableofannihilation,havereturnedtothepeopleatlargefortheirexercise;thestateremaininginthemeantimeexposed"
++ "toallthedangersofinvasionfromwithout,andconvulsionswithin.\n"
++ "Hehasendeavoredtopreventthepopulationofthesestates;forthatpurposeobstructingthelawsfornaturalizationof"
++ "foreigners;refusingtopassotherstoencouragetheirmigrationhither,andraisingtheconditionsofnewappropriationsof"
++ "lands.\n"
++ "Hehasobstructedtheadministrationofjustice,byrefusinghisassenttolawsforestablishingjudiciarypowers.\n"
++ "Hehasmadejudgesdependentonhiswillalone,forthetenureoftheiroffices,andtheamountandpaymentoftheirsalaries.\n"
++ "Hehaserectedamultitudeofnewoffices,andsenthitherswarmsofofficerstoharassourpeople,andeatouttheir"
++ "substance.\n"
++ "Hehaskeptamongus,intimesofpeace,standingarmieswithouttheconsentofourlegislature.\n"
++ "Hehasaffectedtorenderthemilitaryindependentofandsuperiortocivilpower.\n"
++ "Hehascombinedwithotherstosubjectustoajurisdictionforeigntoourconstitution,andunacknowledgedbyourlaws;"
++ "givinghisassenttotheiractsofpretendedlegislation:\n"
++ "Forquarteringlargebodiesofarmedtroopsamongus:\n"
++ "Forprotectingthem,bymocktrial,frompunishmentforanymurderswhichtheyshouldcommitontheinhabitantsofthese"
++ "states:\n"
++ "Forcuttingoffourtradewithallpartsoftheworld:\n"
++ "Forimposingtaxesonuswithoutourconsent:\n"
++ "Fordeprivingusinmanycases,ofthebenefitsoftrialbyjury:\n"
++ "Fortransportingusbeyondseastobetriedforpretendedoffenses:\n"
++ "ForabolishingthefreesystemofEnglishlawsinaneighboringprovince,establishingthereinanarbitrarygovernment,and"
++ "enlargingitsboundariessoastorenderitatonceanexampleandfitinstrumentforintroducingthesameabsoluteruleinthese"
++ "colonies:\n"
++ "Fortakingawayourcharters,abolishingourmostvaluablelaws,andalteringfundamentallytheformsofourgovernments:\n"
++ "Forsuspendingourownlegislatures,anddeclaringthemselvesinvestedwithpowertolegislateforusinallcaseswhatsoever.\n"
++ "Hehasabdicatedgovernmenthere,bydeclaringusoutofhisprotectionandwagingwaragainstus.\n"
++ "Hehasplunderedourseas,ravagedourcoasts,burnedourtowns,anddestroyedthelivesofourpeople.\n"
++ "Heisatthistimetransportinglargearmiesofforeignmercenariestocompletetheworksofdeath,desolationandtyranny,"
++ "alreadybegunwithcircumstancesofcrueltyandperfidyscarcelyparalleledinthemostbarbarousages,andtotalyunworth"
++ "theheadofacivilizednation.\n"
++ "Hehasconstrainedourfellowcitizenstakencaptiveonthehighseastobeararmsagainsttheircountry,tobecomethe"
++ "executionersoftheirfriendsandbrethren,ortofallthemselvesbytheirhands.\n"
++ "Hehasexciteddomesticinsurrectionsamongstus,andhasendeavoredtobringontheinhabitantsofourfrontiers,the"
++ "mercilessIndiansavages,whoseknownruleofwarfare,isundistinguisheddestructionofallages,sexesandconditions.\n"
++ "Ineverystageoftheseoppressionswehavepetitionedforredressinthemosthumbleterms:ourrepeatedpetitionshave"
++ "beenansweredonlybyrepeatedinjury.Aprince,whosecharacteristhusmarkedbyeveryactwhichmaydefineatyrant,is"
++ "unfittobetherulerofafreepeople.\n"
++ "NorhavewebeenwantinginattentiontoourBritishbrethren.Wehavewarnedthemfromtimetotimeofattemptsbytheir"
++ "legislaturetoextendanunwarrantablejurisdictionoverus.Wehaveremindedthemofthecircumstancesofouremigration"
++ "andsettlementhere.Wehaveappealedtotheirnativejusticeandmagnanimity,andwehaveconjuredthembythetiesofour"
++ "commonkindredtodisavowtheseusurpations,which,wouldinevitablyinterruptourconnectionsandcorrespondence.We"
++ "must,therefore,acquiesceinthenecessity,whichdenouncesourseparation,andholdthem,asweholdtherestofmankind,"
++ "enemiesinwar,inpeacefriends.\n"
++ "We,therefore,therepresentativesoftheUnitedStatesofAmerica,inGeneralCongress,assembled,appealingtothe"
++ "SupremeJudgeoftheworldfortherectitudeofourintentions,do,inthename,andbytheauthorityofthegoodpeopleof"
++ "thesecolonies,solemnlypublishanddeclare,thattheseunitedcoloniesare,andofrightoughttobefreeandindependent"
++ "states;thattheyareabsolvedfromallallegiancetotheBritishCrown,andthatallpoliticalconnectionbetweenthemandthe"
++ "stateofGreatBritain,isandoughttobetotallydissolved;andthatasfreeandindependentstates,theyhavefullpowerto"
++ "leveywar,concludepeace,contractalliances,establishcommerce,andtodoallotheractsandthingswhichindependent"
++ "statesmayofrightdo.Andforthesupportofthisdeclaration,withafirmrelianceontheprotectionofDivineProvidence,we"
++ "mutuallypledgetoeachotherourlives,ourfortunesandoursacredhonor.\n";
+
+	public static void main(String[] args) throws Exception {
+		new SimpleBITest().run(args);
+	}
+
+    public void testWordBreak() throws Exception {
+        BreakIterator wordBreak = BreakIterator.getWordInstance(new Locale("en", "US", "TEST"));
+        int breaks = doTest(wordBreak);
+        logln(String.valueOf(breaks));
+	}
+
+    public void testLineBreak() throws Exception {
+        BreakIterator lineBreak = BreakIterator.getLineInstance(new Locale("en", "US", "TEST"));
+        int breaks = doTest(lineBreak);
+        logln(String.valueOf(breaks));
+	}
+
+    public void testSentenceBreak() throws Exception {
+        BreakIterator sentenceBreak = BreakIterator.getSentenceInstance(new Locale("en", "US", "TEST"));
+        int breaks = doTest(sentenceBreak);
+        logln(String.valueOf(breaks));
+    }
+
+    private int doTest(BreakIterator bi) {
+        // forward
+        bi.setText(testText);
+        int p = bi.first();
+        int lastP = p;
+        String fragment;
+        int breaks = 0;
+        logln("Forward...");
+        while (p != BreakIterator.DONE) {
+            p = bi.next();
+            if (p != BreakIterator.DONE) {
+                fragment = testText.substring(lastP, p);
+            } else {
+                fragment = testText.substring(lastP);
+			}
+            debugPrintln(": >" + fragment + "<");
+            ++breaks;
+            lastP = p;
+        }
+        return breaks;
+    }
+
+    private void debugPrintln(String s) {
+        final String zeros = "0000";
+        String temp;
+        StringBuffer out = new StringBuffer();
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if (c >= ' ' && c < '\u007f')
+                out.append(c);
+            else {
+                out.append("\\u");
+                temp = Integer.toHexString((int)c);
+                out.append(zeros.substring(0, 4 - temp.length()));
+                out.append(temp);
+            }
+        }
+        logln(out.toString());
+    }
+
+    private void debugPrintln2(String s) {
+        StringBuffer out = new StringBuffer();
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if (c >= '\u0100')
+                out.append("<" + ((int)c - 0x100) + ">");
+            else
+                out.append(c);
+        }
+        logln(out.toString());
+    }
+}
+
diff --git a/src/com/ibm/test/rbbi/package.html b/src/com/ibm/test/rbbi/package.html
new file mode 100755
index 0000000..636acfd
--- /dev/null
+++ b/src/com/ibm/test/rbbi/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbbi/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:49 $
+-->
+</head>
+<body bgcolor="white">
+Tests for the RuleBasedBreakIterator.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/rbnf/RbnfRoundTripTest.java b/src/com/ibm/test/rbnf/RbnfRoundTripTest.java
new file mode 100755
index 0000000..2505402
--- /dev/null
+++ b/src/com/ibm/test/rbnf/RbnfRoundTripTest.java
@@ -0,0 +1,220 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbnf/Attic/RbnfRoundTripTest.java,v $ 
+ * $Date: 2000/03/10 03:47:47 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.rbnf;
+
+import com.ibm.text.RuleBasedNumberFormat;
+import com.ibm.test.TestFmwk;
+
+import java.util.Locale;
+import java.text.NumberFormat;
+
+public class RbnfRoundTripTest extends TestFmwk {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public static void main(String[] args) {
+        RbnfRoundTripTest test = new RbnfRoundTripTest();
+
+        try {
+            test.run(args);
+        }
+        catch (Throwable e) {
+            System.out.println("Entire test failed because of exception: "
+                            + e.toString());
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the English spellout rules
+     */
+    public void TestEnglishSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.US,
+                        RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, -12345678, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the duration-formatting rules
+     */
+    public void TestDurationsRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.US,
+                        RuleBasedNumberFormat.DURATION);
+
+        doTest(formatter, 0, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Spanish spellout rules
+     */
+    public void TestSpanishSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("es", "es",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, -12345678, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the French spellout rules
+     */
+    public void TestFrenchSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.FRANCE,
+                        RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, -12345678, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Swiss French spellout rules
+     */
+    public void TestSwissFrenchSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("fr", "CH",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, -12345678, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Italian spellout rules
+     */
+    public void TestItalianSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.ITALIAN,
+                        RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, -999999, 999999);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the German spellout rules
+     */
+    public void TestGermanSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.GERMANY,
+                        RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, 0, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Swedish spellout rules
+     */
+    public void TestSwedishSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("sv", "SE",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, 0, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Dutch spellout rules
+     */
+    public void TestDutchSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("nl", "NL",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, -12345678, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Japanese spellout rules
+     */
+    public void TestJapaneseSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.JAPAN,
+                        RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, 0, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Russian spellout rules
+     */
+    public void TestRussianSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("ru", "RU",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, 0, 12345678);
+    }
+
+    /**
+     * Perform an exhaustive round-trip test on the Greek spellout rules
+     */
+    public void TestGreekSpelloutRT() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("el", "GR",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+
+        doTest(formatter, 0, 12345678);
+    }
+
+    void doTest(RuleBasedNumberFormat formatter,  long lowLimit,
+                    long highLimit) {
+        try {
+            long count = 0;
+            long increment = 1;
+            for (long i = lowLimit; i <= highLimit; i += increment) {
+                if (count % 1000 == 0)
+                    logln(Long.toString(i));
+
+                if (Math.abs(i) < 5000)
+                    increment = 1;
+                else if (Math.abs(i) < 500000)
+                    increment = 2737;
+                else
+                    increment = 267437;
+
+                String text = formatter.format(i);
+                long rt = formatter.parse(text).longValue();
+
+                if (rt != i) {
+                    errln("Round-trip failed: " + i + " -> " + text +
+                                    " -> " + rt);
+                }
+
+                ++count;
+            }
+
+            if (lowLimit < 0) {
+                double d = 1.234;
+                while (d < 1000) {
+                    String text = formatter.format(d);
+                    double rt = formatter.parse(text).doubleValue();
+
+                    if (rt != d) {
+                        errln("Round-trip failed: " + d + " -> " + text +
+                                        " -> " + rt);
+                    }
+                    d *= 10;
+                }
+            }
+        }
+        catch (Throwable e) {
+            errln("Test failed with exception: " + e.toString());
+            e.printStackTrace();
+        }
+    }
+}
+
diff --git a/src/com/ibm/test/rbnf/RbnfTest.java b/src/com/ibm/test/rbnf/RbnfTest.java
new file mode 100755
index 0000000..6e9ba34
--- /dev/null
+++ b/src/com/ibm/test/rbnf/RbnfTest.java
@@ -0,0 +1,390 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbnf/Attic/RbnfTest.java,v $ 
+ * $Date: 2000/03/10 03:47:47 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.rbnf;
+
+import com.ibm.text.RuleBasedNumberFormat;
+import com.ibm.test.TestFmwk;
+
+import java.util.Locale;
+import java.text.NumberFormat;
+
+public class RbnfTest extends TestFmwk {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1999 IBM Corp.  All rights reserved.";
+
+    public static void main(String[] args) {
+        RbnfTest test = new RbnfTest();
+
+        try {
+            test.run(args);
+        }
+        catch (Throwable e) {
+            System.out.println("Entire test failed because of exception: "
+                            + e.toString());
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Perform a simple spot check on the English spellout rules
+     */
+    public void TestEnglishSpellout() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.US,
+                        RuleBasedNumberFormat.SPELLOUT);
+        String[][] testData = {
+            { "1", "one" },
+            { "15", "fifteen" },
+            { "20", "twenty" },
+            { "23", "twenty-three" },
+            { "73", "seventy-three" },
+            { "88", "eighty-eight" },
+            { "100", "one hundred" },
+            { "106", "one hundred and six" },
+            { "127", "one hundred and twenty-seven" },
+            { "200", "two hundred" },
+            { "579", "five hundred and seventy-nine" },
+            { "1,000", "one thousand" },
+            { "2,000", "two thousand" },
+            { "3,004", "three thousand and four" },
+            { "4,567", "four thousand five hundred and sixty-seven" },
+            { "15,943", "fifteen thousand nine hundred and forty-three" },
+            { "2,345,678", "two million, three hundred and forty-five "
+                        + "thousand, six hundred and seventy-eight" },
+            { "-36", "minus thirty-six" },
+            { "234.567", "two hundred and thirty-four point five six seven" }
+        };
+
+        doTest(formatter, testData, true);
+
+        formatter.setLenientParseMode(true);
+        String[][] lpTestData = {
+            { "FOurhundred     thiRTY six", "436" },
+            { "2 thousand six HUNDRED fifty-7", "2,657" },
+            { "fifteen hundred and zero", "1,500" }
+        };
+        doLenientParseTest(formatter, lpTestData);
+    }
+
+    /**
+     * Perform a simple spot check on the English ordinal-abbreviation rules
+     */
+    public void TestOrdinalAbbreviations() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.US,
+                        RuleBasedNumberFormat.ORDINAL);
+        String[][] testData = {
+            { "1", "1st" },
+            { "2", "2nd" },
+            { "3", "3rd" },
+            { "4", "4th" },
+            { "7", "7th" },
+            { "10", "10th" },
+            { "11", "11th" },
+            { "13", "13th" },
+            { "20", "20th" },
+            { "21", "21st" },
+            { "22", "22nd" },
+            { "23", "23rd" },
+            { "24", "24th" },
+            { "33", "33rd" },
+            { "102", "102nd" },
+            { "312", "312th" },
+            { "12,345", "12,345th" }
+        };
+
+        doTest(formatter, testData, false);
+    }
+
+    /**
+     * Perform a simple spot check on the duration-formatting rules
+     */
+    public void TestDurations() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.US,
+                        RuleBasedNumberFormat.DURATION);
+        String[][] testData = {
+            { "3,600", "1:00:00" },		//move me and I fail
+            { "0", "0 sec." },
+            { "1", "1 sec." },
+            { "24", "24 sec." },
+            { "60", "1:00" },
+            { "73", "1:13" },
+            { "145", "2:25" },
+            { "666", "11:06" },
+//            { "3,600", "1:00:00" },
+            { "3,740", "1:02:20" },
+            { "10,293", "2:51:33" }
+        };
+
+        doTest(formatter, testData, true);
+
+        formatter.setLenientParseMode(true);
+        String[][] lpTestData = {
+            { "2-51-33", "10,293" }
+        };
+        doLenientParseTest(formatter, lpTestData);
+    }
+
+    /**
+     * Perform a simple spot check on the Spanish spellout rules
+     */
+    public void TestSpanishSpellout() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("es", "es",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+        String[][] testData = {
+            { "1", "uno" },
+            { "6", "seis" },
+            { "16", "diecis\u00e9is" },
+            { "20", "veinte" },
+            { "24", "veinticuatro" },
+            { "26", "veintis\u00e9is" },
+            { "73", "setenta y tres" },
+            { "88", "ochenta y ocho" },
+            { "100", "cien" },
+            { "106", "ciento seis" },
+            { "127", "ciento veintisiete" },
+            { "200", "doscientos" },
+            { "579", "quinientos setenta y nueve" },
+            { "1,000", "mil" },
+            { "2,000", "dos mil" },
+            { "3,004", "tres mil cuatro" },
+            { "4,567", "cuatro mil quinientos sesenta y siete" },
+            { "15,943", "quince mil novecientos cuarenta y tres" },
+            { "2,345,678", "dos mill\u00f3n trescientos cuarenta y cinco mil "
+                    + "seiscientos setenta y ocho"},
+            { "-36", "menos treinta y seis" },
+            { "234.567", "doscientos treinta y cuatro punto cinco seis siete" }
+        };
+
+        doTest(formatter, testData, true);
+    }
+
+    /**
+     * Perform a simple spot check on the French spellout rules
+     */
+    public void TestFrenchSpellout() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.FRANCE,
+                        RuleBasedNumberFormat.SPELLOUT);
+        String[][] testData = {
+            { "1", "un" },
+            { "15", "quinze" },
+            { "20", "vingt" },
+            { "21", "vingt-et-un" },
+            { "23", "vingt-trois" },
+            { "62", "soixante-deux" },
+            { "70", "soixante-dix" },
+            { "71", "soixante et onze" },
+            { "73", "soixante-treize" },
+            { "80", "quatre-vingts" },
+            { "88", "quatre-vingt-huit" },
+            { "100", "cent" },
+            { "106", "cent six" },
+            { "127", "cent vingt-sept" },
+            { "200", "deux cents" },
+            { "579", "cinq cents soixante-dix-neuf" },
+            { "1,000", "mille" },
+            { "1,123", "onze cents vingt-trois" },
+            { "1,594", "mille cinq cents quatre-vingt-quatorze" },
+            { "2,000", "deux mille" },
+            { "3,004", "trois mille quatre" },
+            { "4,567", "quatre mille cinq cents soixante-sept" },
+            { "15,943", "quinze mille neuf cents quarante-trois" },
+            { "2,345,678", "deux million trois cents quarante-cinq mille "
+                        + "six cents soixante-dix-huit" },
+            { "-36", "moins trente-six" },
+            { "234.567", "deux cents trente-quatre virgule cinq six sept" }
+        };
+
+        doTest(formatter, testData, true);
+
+        formatter.setLenientParseMode(true);
+        String[][] lpTestData = {
+            { "trente-un", "31" },
+            { "un cents quatre vingt dix huit", "198" }
+        };
+        doLenientParseTest(formatter, lpTestData);
+    }
+
+    /**
+     * Perform a simple spot check on the Swiss French spellout rules
+     */
+    public void TestSwissFrenchSpellout() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(new Locale("fr", "CH",
+                        ""), RuleBasedNumberFormat.SPELLOUT);
+        String[][] testData = {
+            { "1", "un" },
+            { "15", "quinze" },
+            { "20", "vingt" },
+            { "21", "vingt-et-un" },
+            { "23", "vingt-trois" },
+            { "62", "soixante-deux" },
+            { "70", "septante" },
+            { "71", "septante-et-un" },
+            { "73", "septante-trois" },
+            { "80", "octante" },
+            { "88", "octante-huit" },
+            { "100", "cent" },
+            { "106", "cent six" },
+            { "127", "cent vingt-sept" },
+            { "200", "deux cents" },
+            { "579", "cinq cents septante-neuf" },
+            { "1,000", "mille" },
+            { "1,123", "onze cents vingt-trois" },
+            { "1,594", "mille cinq cents nonante-quatre" },
+            { "2,000", "deux mille" },
+            { "3,004", "trois mille quatre" },
+            { "4,567", "quatre mille cinq cents soixante-sept" },
+            { "15,943", "quinze mille neuf cents quarante-trois" },
+            { "2,345,678", "deux million trois cents quarante-cinq mille "
+                        + "six cents septante-huit" },
+            { "-36", "moins trente-six" },
+            { "234.567", "deux cents trente-quatre virgule cinq six sept" }
+        };
+
+        doTest(formatter, testData, true);
+    }
+
+    /**
+     * Perform a simple spot check on the Italian spellout rules
+     */
+    public void TestItalianSpellout() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.ITALIAN,
+                        RuleBasedNumberFormat.SPELLOUT);
+        String[][] testData = {
+            { "1", "uno" },
+            { "15", "quindici" },
+            { "20", "venti" },
+            { "23", "ventitre" },
+            { "73", "settantatre" },
+            { "88", "ottantotto" },
+            { "100", "cento" },
+            { "106", "centosei" },
+            { "108", "centotto" },
+            { "127", "centoventisette" },
+            { "181", "centottantuno" },
+            { "200", "duecento" },
+            { "579", "cinquecentosettantanove" },
+            { "1,000", "mille" },
+            { "2,000", "duemila" },
+            { "3,004", "tremilaquattro" },
+            { "4,567", "quattromilacinquecentosessantasette" },
+            { "15,943", "quindicimilanovecentoquarantatre" },
+            { "-36", "meno trentisei" },
+            { "234.567", "duecentotrentiquattro virgola cinque sei sette" }
+        };
+
+        doTest(formatter, testData, true);
+    }
+
+    /**
+     * Perform a simple spot check on the German spellout rules
+     */
+    public void TestGermanSpellout() {
+        RuleBasedNumberFormat formatter
+                        = new RuleBasedNumberFormat(Locale.GERMANY,
+                        RuleBasedNumberFormat.SPELLOUT);
+        String[][] testData = {
+            { "1", "eins" },
+            { "15", "f\u00fcnfzehn" },
+            { "20", "zwanzig" },
+            { "23", "dreiundzwanzig" },
+            { "73", "dreiundsiebzig" },
+            { "88", "achtundachtzig" },
+            { "100", "hundert" },
+            { "106", "hundertsechs" },
+            { "127", "hundertsiebenundzwanzig" },
+            { "200", "zweihundert" },
+            { "579", "f\u00fcnfhundertneunundsiebzig" },
+            { "1,000", "tausend" },
+            { "2,000", "zweitausend" },
+            { "3,004", "dreitausendvier" },
+            { "4,567", "viertausendf\u00fcnfhundertsiebenundsechzig" },
+            { "15,943", "f\u00fcnfzehntausendneunhundertdreiundvierzig" },
+            { "2,345,678", "zwei Millionen dreihundertf\u00fcnfundvierzigtausend"
+                        + "sechshundertachtundsiebzig" }
+        };
+
+        doTest(formatter, testData, true);
+
+        formatter.setLenientParseMode(true);
+        String[][] lpTestData = {
+            { "ein Tausend sechs Hundert fuenfunddreissig", "1,635" }
+        };
+        doLenientParseTest(formatter, lpTestData);
+    }
+
+    void doTest(RuleBasedNumberFormat formatter, String[][] testData,
+                boolean testParsing) {
+        NumberFormat decFmt = NumberFormat.getInstance(Locale.US);
+
+        try {
+            for (int i = 0; i < testData.length; i++) {
+                String number = testData[i][0];
+                String expectedWords = testData[i][1];
+                String actualWords = formatter.format(decFmt.parse(number));
+
+                if (!actualWords.equals(expectedWords)) {
+                    errln("Spot check failed: for " + number + ", expected "
+                                + expectedWords + ", but got " +
+                                actualWords);
+                }
+                else if (testParsing) {
+                    String actualNumber = decFmt.format(formatter
+                                    .parse(actualWords));
+
+                    if (!actualNumber.equals(number)) {
+                        errln("Spot check failed: for " + actualWords +
+                                ", expected " + number + ", but got " +
+                                actualNumber);
+                    }
+                }
+            }
+        }
+        catch (Throwable e) {
+            errln("Test failed with exception: " + e.toString());
+            e.printStackTrace();
+        }
+    }
+
+    void doLenientParseTest(RuleBasedNumberFormat formatter,
+                    String[][] testData) {
+        NumberFormat decFmt = NumberFormat.getInstance(Locale.US);
+
+        try {
+            for (int i = 0; i < testData.length; i++) {
+                String words = testData[i][0];
+                String expectedNumber = testData[i][1];
+                String actualNumber = decFmt.format(formatter.parse(words));
+
+                if (!actualNumber.equals(expectedNumber)) {
+                    errln("Lenient-parse spot check failed: for "
+                                + words + ", expected " + expectedNumber
+                                + ", but got " + actualNumber);
+                }
+            }
+        }
+        catch (Throwable e) {
+            errln("Test failed with exception: " + e.toString());
+            e.printStackTrace();
+        }
+    }
+}
+
diff --git a/src/com/ibm/test/rbnf/package.html b/src/com/ibm/test/rbnf/package.html
new file mode 100755
index 0000000..d14dbbe
--- /dev/null
+++ b/src/com/ibm/test/rbnf/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/rbnf/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:50 $
+-->
+</head>
+<body bgcolor="white">
+Tests for the RuleBasedBreakIterator.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/FmwkTestTextPanel.java b/src/com/ibm/test/richtext/FmwkTestTextPanel.java
new file mode 100755
index 0000000..36e844f
--- /dev/null
+++ b/src/com/ibm/test/richtext/FmwkTestTextPanel.java
@@ -0,0 +1,52 @@
+/*
+ * @(#)$RCSfile: FmwkTestTextPanel.java,v $ $Revision: 1.2 $ $Date: 2000/04/26 17:39:58 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+import com.ibm.richtext.tests.TestTextPanel;
+
+public final class FmwkTestTextPanel extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+    
+        new FmwkTestTextPanel().run(args);
+    }
+    
+    private TTP ttp;
+    
+    public FmwkTestTextPanel() {
+    
+        ttp = new TTP();
+    }
+    
+    public void test() {
+    
+        ttp.test();
+        // If TestTextPanel gets more tests, add them here
+    }
+
+    private final class TTP extends TestTextPanel {
+    
+        protected void reportError(String message) {
+        
+            errln(message);
+        }
+        
+        protected void logMessage(String message) {
+        
+            logln(message);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/TestAll.java b/src/com/ibm/test/richtext/TestAll.java
new file mode 100755
index 0000000..c70c76f
--- /dev/null
+++ b/src/com/ibm/test/richtext/TestAll.java
@@ -0,0 +1,55 @@
+/*
+ * @(#)$RCSfile: TestAll.java,v $ $Revision: 1.2 $ $Date: 2000/04/24 21:11:30 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+
+public class TestAll extends TestFmwk {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    public static void main(String[] args) throws Exception {
+        new TestAll().run(args);
+    }
+    
+    public void TestAttributeSet() throws Exception {
+        run(new TestAttributeSet());
+    }
+    
+    public void TestAttributeMap() throws Exception {
+        run(new TestAttributeMap());
+    }
+    
+    public void TestFormatter() throws Exception {
+        run(new TestFormatter());
+    }
+    
+    public void TestMText() throws Exception {
+        run(new TestMText());
+    }
+    
+    public void TestParagraphStyles() throws Exception {
+        run(new TestParagraphStyles());
+    }
+    
+    public void TestMTextStreaming() throws Exception {
+        run(new TestMTextStreaming());
+    }
+    
+    public void TestTextPanel() throws Exception {
+        run(new FmwkTestTextPanel());
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/TestAttributeMap.java b/src/com/ibm/test/richtext/TestAttributeMap.java
new file mode 100755
index 0000000..3f88ec6
--- /dev/null
+++ b/src/com/ibm/test/richtext/TestAttributeMap.java
@@ -0,0 +1,409 @@
+/*
+ * @(#)$RCSfile: TestAttributeMap.java,v $ $Revision: 1.2 $ $Date: 2000/04/24 20:52:58 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+
+import com.ibm.textlayout.attributes.AttributeSet;
+import com.ibm.textlayout.attributes.TextAttribute;
+import com.ibm.textlayout.attributes.Map;
+import com.ibm.textlayout.attributes.AttributeMap;
+import java.util.Enumeration;
+
+// Java2 imports
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Map.Entry;
+
+
+public class TestAttributeMap extends TestFmwk  {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+
+    // There are JDK 1.1 versions of AttributeMap and AttributeSet.
+    // Some of the tests in this class require Java 2 API's.  I have
+    // tried to isolate these tests by conditionalizing them on
+    // this static variable.  If you are back-porting to 1.1, remove
+    // the Java 2 tests ONLY.
+    private static final boolean gJDK11 = false;
+
+    public static void main(String[] args) throws Exception {
+
+        new TestAttributeMap().run(args);
+    }
+
+    private AttributeSet maps;  // A Set of AttributeMaps
+    private AttributeSet sets;  // A Set of Sets
+
+    private static final class TestAttribute extends TextAttribute {
+
+        TestAttribute(String name) {
+            super(name);
+        }
+    }
+
+    private static final TestAttribute[] attributes = {
+        new TestAttribute("0"), new TestAttribute("1"), new TestAttribute("2")
+    };
+
+    private static final Object[] values = {
+        "Hello world", new Float(-42), new Object(), new AttributeMap(new TestAttribute("3"), "HH")
+    };
+
+    /**
+     * Returns lhs.equals(rhs) - but also checks for symmetry, and
+     * consistency with hashCode().
+     */
+    private boolean equalMaps(AttributeMap lhs, Object rhs) {
+
+        boolean equal = lhs.equals(rhs);
+        if (equal != (rhs.equals(lhs))) {
+            errln("AttributeMap.equals is not symetric");
+        }
+        if (equal) {
+            if (lhs.hashCode() != rhs.hashCode()) {
+                errln("AttributeMaps are equal but hashCodes differ");
+            }
+        }
+        return equal;
+    }
+
+    public TestAttributeMap() {
+
+        maps = AttributeSet.EMPTY_SET;
+        maps = maps.addElement(AttributeMap.EMPTY_ATTRIBUTE_MAP);
+        maps.addElement(new AttributeMap(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUB));
+        maps.addElement(new AttributeMap(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER));
+
+        for (int i=0; i < attributes.length; i++) {
+            for (int j=0; j < values.length; j++) {
+                maps = maps.addElement(new AttributeMap(attributes[i], values[j]));
+            }
+        }
+
+        AttributeMap bigMap = new AttributeMap(new TestAttribute("4"), "value");
+        for (int i=0; i < Math.min(attributes.length, values.length); i++) {
+            bigMap = bigMap.addAttribute(attributes[i], values[values.length-i-1]);
+        }
+        maps = maps.addElement(bigMap);
+
+        sets = AttributeSet.EMPTY_SET;
+
+        sets = new AttributeSet(AttributeSet.EMPTY_SET);
+
+        for (int i=0; i < attributes.length; i++) {
+            AttributeSet newSet = new AttributeSet(attributes[i]);
+            sets = sets.addElement(newSet);
+        }
+
+        AttributeSet allAttrs = AttributeSet.EMPTY_SET;
+        for (int i=0; i < attributes.length; i++) {
+            allAttrs = allAttrs.addElement(attributes[i]);
+        }
+
+        sets = sets.addElement(allAttrs);
+    }
+
+    /**
+     * Run tests on AttributeMap.  If a test fails an exception will propogate out
+     * of this method.
+     */
+    public void test() {
+
+        easyTests();
+
+        Enumeration mapIter = maps.elements();
+        while (mapIter.hasMoreElements()) {
+
+            AttributeMap testMap = (AttributeMap) mapIter.nextElement();
+
+            _testModifiers(testMap);
+            _testViews(testMap);
+
+            Enumeration unionIter = maps.elements();
+            while (unionIter.hasMoreElements()) {
+                _testUnionWith(testMap, (AttributeMap) unionIter.nextElement());
+            }
+
+            Enumeration setIter = sets.elements();
+            while (setIter.hasMoreElements()) {
+                AttributeSet testSet = (AttributeSet) setIter.nextElement();
+                _testIntersectWith(testMap, testSet);
+                _testRemoveAttributes(testMap, testSet);
+            }
+        }
+    }
+
+    /**
+     * Invoke modifiers on map.  All should throw
+     * UnsupportedOperationException, and leave map unmodified.
+     */
+    void _testModifiers(AttributeMap map) {
+
+        if (gJDK11) {
+            return;
+        }
+        
+        AttributeMap originalMap = new AttributeMap(map);
+
+        try {
+            map.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
+            errln("Put should throw UnsupportedOperationException.");
+        }
+        catch(UnsupportedOperationException e) {
+        }
+
+        try {
+            Object key = TextAttribute.WEIGHT;
+            Iterator iter = map.keySet().iterator();
+            if (iter.hasNext()) {
+                key = iter.next();
+            }
+            map.remove(key);
+            errln("Set should throw UnsupportedOperationException.");
+        }
+        catch(UnsupportedOperationException e) {
+        }
+
+        try {
+            map.putAll(map);
+            errln("putAll should throw UnsupportedOperationException.");
+        }
+        catch(UnsupportedOperationException e) {
+        }
+
+        try {
+            map.clear();
+            errln("clear should throw UnsupportedOperationException.");
+        }
+        catch(UnsupportedOperationException e) {
+        }
+
+        if (!originalMap.equals(map)) {
+            errln("Modifiers changed map.");
+        }
+    }
+
+    /**
+     * Ensure that map.addAttributes(addMap) is equivalent to calling
+     * map.add on all of addMap's entries.
+     */
+    void _testUnionWith(AttributeMap map, AttributeMap addMap) {
+
+        AttributeMap lhs = map.addAttributes(addMap);
+
+        AttributeMap rhs = map;
+
+        Enumeration iter = addMap.getKeySet().elements();
+        while (iter.hasMoreElements()) {
+            Object attr = iter.nextElement();
+            Object value = addMap.get(attr);
+            rhs = rhs.addAttribute(attr, value);
+        }
+
+        if (!equalMaps(lhs, rhs)) {
+            errln("Maps are not equal.");
+        }
+    }
+
+    /**
+     * Ensure that map.removeAttributes(remove) is equivalent to calling
+     * map.removeAttribute on remove's elements.
+     */
+    void _testRemoveAttributes(AttributeMap map, AttributeSet remove) {
+
+        AttributeMap lhs = map.removeAttributes(remove);
+
+        AttributeMap rhs = map;
+
+        Enumeration iter = remove.elements();
+        while (iter.hasMoreElements()) {
+            Object attr = iter.nextElement();
+            rhs = rhs.removeAttribute(attr);
+        }
+
+        if (!equalMaps(lhs, rhs)) {
+            errln("Maps are not equal.");
+        }
+    }
+
+    /**
+     * Ensure that map.intersectWith(intersect) is equivalent to
+     * map.removeAttributes(map.keySet() - intersect);
+     */
+    void _testIntersectWith(AttributeMap map, AttributeSet intersect) {
+
+        AttributeMap lhs = map.intersectWith(intersect);
+
+        AttributeSet keySet = map.getKeySet();
+        AttributeSet removeSet = keySet.subtract(intersect);
+        AttributeMap rhs = map.removeAttributes(removeSet);
+
+        if (!equalMaps(lhs, rhs)) {
+            map.intersectWith(intersect);
+            logln("intersect: " + intersect);
+            logln("keySet: " + keySet);
+            logln("removeSet: " + removeSet);
+            logln("map: " + map);
+            logln("lhs: " + lhs);
+            logln("rhs: " + rhs);
+            errln("Maps are not equal.");
+        }
+    }
+
+    /**
+     * Ensure that:
+     *    map, map.keySet(), and map.entrySet() are the same size;
+     *    map.containsKey() is true for every key in keySet();
+     *    map.containsValue() is true for every value in values;
+     *    every entry key is in keySet, every entry value is in map.values();
+     *    map.get() is consistent with entry's key, value;
+     *    sum of hashcodes of entries equals map.hashCode().
+     */
+    void _testViews(AttributeMap map) {
+
+        AttributeSet keySet = map.getKeySet();
+
+        Enumeration keyIter = keySet.elements();
+        while (keyIter.hasMoreElements()) {
+            if (!map.containsKey(keyIter.nextElement())) {
+                errln("keySet contains key not in map");
+            }
+        }
+
+        if (gJDK11) {
+            return;
+        }
+        
+        Collection values = map.values();
+        Set entrySet = map.entrySet();
+
+        if (keySet.size() != map.size() || entrySet.size() != map.size()) {
+            errln("Set sizes are inconsistent with map size.");
+        }
+
+        int hashCode = 0;
+
+        Iterator valueIter = values.iterator();
+        while (valueIter.hasNext()) {
+            if (!map.containsValue(valueIter.next())) {
+                errln("value set contains value not in map");
+            }
+        }
+
+        Iterator entryIter = entrySet.iterator();
+        while (entryIter.hasNext()) {
+
+            Entry entry = (Entry) entryIter.next();
+
+            Object key = entry.getKey();
+            if (!keySet.contains(key)) {
+                errln("Entry key is not in key set.");
+            }
+
+            Object value = map.get(entry.getKey());
+            if (!values.contains(value)) {
+                errln("Entry value is not in value set.");
+            }
+
+            if (map.get(key) != value) {
+                errln("map.get did not return entry value.");
+            }
+
+            hashCode += entry.hashCode();
+        }
+
+        if (hashCode != map.hashCode()) {
+            errln("map hashcode is not sum of entry hashcodes.");
+        }
+    }
+
+    /**
+     * Look for correct behavior in obvious cases.
+     */
+    void easyTests() {
+
+        AttributeMap map = new AttributeMap();
+        if (!map.equals(AttributeMap.EMPTY_ATTRIBUTE_MAP)) {
+            errln("Default-constructed map is not equal to empty map.");
+        }
+
+        map = map.addAttribute(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
+        Object otherMap = new AttributeMap(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
+        if (!map.equals(otherMap)) {
+            errln("Maps are inconsistent after map.add");
+        }
+
+        otherMap = map.addAttributes(map);
+        if (!equalMaps(map,otherMap)) {
+            errln("Maps are inconsistent after addAttributes");
+        }
+
+        map = map.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
+
+        if (map.size() != 2) {
+            errln("Map size is wrong.  map="+map);
+        }
+
+        if (equalMaps(map,otherMap)) {
+            errln("Maps should not be equal");
+        }
+
+        Object posture = new Float(0);
+        map = map.addAttribute(TextAttribute.POSTURE, posture);
+
+        if (map.size() != 2) {
+            errln("Map size is wrong");
+        }
+
+        if (!map.get(TextAttribute.POSTURE).equals(posture)) {
+            errln("Map element is wrong");
+        }
+
+        map = map.removeAttribute(TextAttribute.UNDERLINE);
+
+        if (map.size() != 1) {
+            errln("Map size is wrong");
+        }
+
+        if (map.get(TextAttribute.UNDERLINE) != null) {
+            errln("Map should not have element");
+        }
+
+        // map has POSTURE_REGULAR.  If we addAttributes a map with
+        // POSTURE_ITALIC the new map should have POSTURE_ITALIC
+
+        map = map.addAttributes(new AttributeMap(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE));
+        if (map.get(TextAttribute.POSTURE) != TextAttribute.POSTURE_OBLIQUE) {
+            errln("Map element is wrong");
+        }
+
+        _testModifiers(map);
+        _testViews(map);
+
+        Enumeration mapIter = maps.elements();
+        while (mapIter.hasMoreElements()) {
+            AttributeMap testMap = (AttributeMap) mapIter.nextElement();
+            Object newValue = new Object();
+            AttributeMap newMap = testMap.addAttribute(attributes[0], newValue);
+            if (newMap.get(attributes[0]) != newValue) {
+                errln("Did not get expected value back.  map=" + map);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/TestAttributeSet.java b/src/com/ibm/test/richtext/TestAttributeSet.java
new file mode 100755
index 0000000..fa9ed91
--- /dev/null
+++ b/src/com/ibm/test/richtext/TestAttributeSet.java
@@ -0,0 +1,91 @@
+/*
+ * @(#)$RCSfile: TestAttributeSet.java,v $ $Revision: 1.2 $ $Date: 2000/04/24 20:52:58 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+import com.ibm.textlayout.attributes.AttributeSet;
+import java.util.Enumeration;
+
+public class TestAttributeSet extends TestFmwk {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+                
+    public static void main(String[] args) throws Exception {
+
+        new TestAttributeSet().run(args);
+    }
+
+    public void test() {
+
+        final Object elem1 = new Object();
+        final Object elem2 = new Float(4);
+        final Object elem3 = "String";
+        final Object elem4 = Boolean.FALSE;
+
+        AttributeSet set1 = new AttributeSet(new Object[] {elem1, elem2, elem3});
+        if (set1.size() != 3) {
+            errln("Size is wrong.");
+        }
+
+        if (set1.contains(elem4)){
+            errln("Set contents are wrong.");
+        }
+
+        if (!set1.contains(elem1)) {
+            errln("Set contents are wrong.");
+        }
+
+        AttributeSet set2 = new AttributeSet(elem4);
+
+        if (set2.size() != 1) {
+            errln("Size is wrong.");
+        }
+
+        if (!set2.contains(elem4)){
+            errln("Set contents are wrong.");
+        }
+
+        if (set2.contains(elem1)) {
+            errln("Set contents are wrong.");
+        }
+
+        Enumeration iter = set2.elements();
+        if (!iter.nextElement().equals(elem4)) {
+            errln("Invalid object in iterator.");
+        }
+
+        AttributeSet union = set2.unionWith(set1);
+        if (!set1.unionWith(set2).equals(union)) {
+            errln("unionWith is not commutative.");
+        }
+
+        if (!union.contains(elem1) || !union.contains(elem4)) {
+            errln("Set contents are wrong.");
+        }
+
+        if (!set1.addElement(elem4).equals(union)) {
+            errln("addElement is wrong.");
+        }
+
+        if (!union.intersectWith(set1).equals(set1)) {
+            errln("intersectWith is wrong.");
+        }
+
+        if (!union.subtract(set1).equals(set2)) {
+            errln("subtract is wrong.");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/TestFormatter.java b/src/com/ibm/test/richtext/TestFormatter.java
new file mode 100755
index 0000000..9ba8324
--- /dev/null
+++ b/src/com/ibm/test/richtext/TestFormatter.java
@@ -0,0 +1,250 @@
+/*
+ * @(#)$RCSfile: TestFormatter.java,v $ $Revision: 1.2 $ $Date: 2000/04/24 20:52:58 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.StandardTabRuler;
+import com.ibm.richtext.styledtext.StyledText;
+
+import com.ibm.richtext.textformat.TextOffset;
+import com.ibm.richtext.textformat.MFormatter;
+
+import java.awt.Color;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.image.BufferedImage;
+
+import java.util.Hashtable;
+
+public final class TestFormatter extends TestFmwk {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static void main(String[] args) throws Exception {
+
+        new TestFormatter().run(args);
+    }
+
+    private static final Point ORIGIN = new Point(0, 0);
+
+    private static final AttributeMap DEFAULTS;
+    static {
+        final Float floatZero = new Float(0.0f);
+
+        Hashtable defaults = new Hashtable();
+        defaults.put(TextAttribute.FAMILY, "Serif");
+        defaults.put(TextAttribute.WEIGHT, new Float(1.0f));
+        defaults.put(TextAttribute.POSTURE, floatZero);
+        defaults.put(TextAttribute.SIZE, new Float(18.0f));
+        defaults.put(TextAttribute.SUPERSCRIPT, new Integer(0));
+        defaults.put(TextAttribute.FOREGROUND, Color.black);
+        defaults.put(TextAttribute.UNDERLINE, new Integer(-1));
+        defaults.put(TextAttribute.STRIKETHROUGH, Boolean.FALSE);
+
+        defaults.put(TextAttribute.EXTRA_LINE_SPACING, floatZero);
+        defaults.put(TextAttribute.FIRST_LINE_INDENT, floatZero);
+        defaults.put(TextAttribute.MIN_LINE_SPACING, floatZero);
+        defaults.put(TextAttribute.LINE_FLUSH, TextAttribute.FLUSH_LEADING);
+        defaults.put(TextAttribute.LEADING_MARGIN, floatZero);
+        defaults.put(TextAttribute.TRAILING_MARGIN, floatZero);
+        defaults.put(TextAttribute.TAB_RULER, new StandardTabRuler());
+
+        DEFAULTS = new AttributeMap(defaults);
+    }
+    
+    // arg to testLineExceptions
+    private static final int UNKNOWN = -1;
+
+    private Graphics fGraphics;
+
+    public TestFormatter() {
+
+        fGraphics = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR).getGraphics();
+        
+        //JDK 1.1:
+        //Frame f = new Frame();
+        //f.show();
+        //fGraphics = f.getGraphics();
+    }
+
+    private String fiveLines = "a\nb\nc\nd\ne";
+    private String twelveLines = fiveLines + "\n" + fiveLines + "\nf\n";
+    AttributeMap PLAIN = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+
+    public void test() {
+
+        MConstText text = new StyledText(fiveLines, PLAIN);
+        _testLineExceptions(makeFormatter(text, 100, true), 5);
+        _testLineAccess(makeFormatter(text, 100, true), 5);
+
+        text = new StyledText(twelveLines, PLAIN);
+        _testLineExceptions(makeFormatter(text, 3, false), 12);
+        _testLineAccess(makeFormatter(text, 100, true), 12);
+
+        _testWithModification();
+    }
+
+    private void _testWithModification() {
+
+        MText text = new StyledText(fiveLines, PLAIN);
+        MFormatter formatter = makeFormatter(text, 100, true);
+        Rectangle viewRect = new Rectangle(0, 0, 100, Integer.MAX_VALUE);
+
+        formatter.stopBackgroundFormatting();
+        text.append(new StyledText("\n", PLAIN));
+        formatter.updateFormat(text.length()-1, 1, viewRect, ORIGIN);
+
+        _testLineAccess(formatter, 6);
+
+        formatter.stopBackgroundFormatting();
+        text.append(new StyledText("ad", PLAIN));
+        formatter.updateFormat(text.length()-2, 2, viewRect, ORIGIN);
+        _testLineAccess(formatter, 6);
+        _testLineExceptions(formatter, 6);
+
+        formatter.stopBackgroundFormatting();
+        text.remove(0, 1);
+        formatter.updateFormat(0, 0, viewRect, ORIGIN);
+        _testLineAccess(formatter, 6);
+        _testLineExceptions(formatter, 6);
+    }
+
+
+    private MFormatter makeFormatter(MConstText text,
+                                     int lineBound,
+                                     boolean wrap) {
+
+        return MFormatter.createFormatter(text, 
+                                          DEFAULTS,
+                                          lineBound,
+                                          wrap,
+                                          fGraphics);
+    }
+
+    private void _testLineExceptions(MFormatter formatter,
+                                    int numLines) {
+
+        if (numLines == UNKNOWN) {
+            numLines = formatter.getLineCount();
+        }
+
+        boolean caught = false;
+
+        try {
+            formatter.lineRangeLow(numLines);
+        }
+        catch(IllegalArgumentException e) {
+            caught = true;
+        }
+
+        if (!caught) {
+            errln("Didn't get exception");
+        }
+        caught = false;
+
+        try {
+            formatter.lineRangeLimit(numLines);
+        }
+        catch(IllegalArgumentException e) {
+            caught = true;
+        }
+
+        if (!caught) {
+            errln("Didn't get exception");
+        }
+        caught = false;
+
+        try {
+            formatter.lineGraphicStart(numLines+1);
+        }
+        catch(IllegalArgumentException e) {
+            caught = true;
+        }
+
+        if (!caught) {
+            errln("Didn't get exception");
+        }
+        caught = false;
+    }
+
+    private void _testLineAccess(MFormatter formatter,
+                                 int numLines) {
+
+        if (numLines == UNKNOWN) {
+            numLines = formatter.getLineCount();
+        }
+
+        if (formatter.lineGraphicStart(0) != 0) {
+            errln("Line 0 doesn't start at height 0");
+        }
+        if (formatter.lineRangeLow(0) != 0) {
+            errln("Line 0 doesn't start at character 0");
+        }
+
+        int lastLimit = formatter.lineRangeLimit(0);
+        final int lineBound = formatter.lineBound();
+        int[] hitX = new int[] { -1, 1, lineBound + 2 };
+
+        TextOffset offset = new TextOffset();
+
+        for (int i=1; i < numLines; i++) {
+
+            int height = formatter.lineGraphicStart(i);
+            if (lastLimit != formatter.lineRangeLow(i)) {
+                errln("lastLine limit is not current line start");
+            }
+            int limit = formatter.lineRangeLimit(i);
+
+            if (limit < lastLimit || (limit == lastLimit && i != numLines-1)) {
+                errln("line has negative or 0 length");
+            }
+
+            int nextHeight = formatter.lineGraphicStart(i+1);
+            if (nextHeight <= height) {
+                errln("0-height line");
+            }
+            int incAmount = Math.max((nextHeight-height)/4, 1);
+            for (int hitY = height; hitY < nextHeight; hitY += incAmount) {
+
+                if (formatter.lineAtHeight(hitY) != i) {
+                    errln("lineAtHeight is wrong");
+                }
+
+                for (int j=0; j < hitX.length; j++) {
+                    offset = formatter.pointToTextOffset(offset,
+                                        hitX[j], hitY, ORIGIN, null, false);
+                    if (offset.fOffset < lastLimit || offset.fOffset > limit) {
+                        errln("Inconsistent offset from pointToTextOffset");
+                    }
+                    //if (formatter.lineContaining(offset) != i) {
+                    //    int debug = formatter.lineContaining(offset);
+                    //    errln("lineContaining is incorrect");
+                    //}
+                }
+            }
+
+            lastLimit = limit;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/TestMText.java b/src/com/ibm/test/richtext/TestMText.java
new file mode 100755
index 0000000..83f5364
--- /dev/null
+++ b/src/com/ibm/test/richtext/TestMText.java
@@ -0,0 +1,721 @@
+/*
+ * @(#)$RCSfile: TestMText.java,v $ $Revision: 1.3 $ $Date: 2000/04/26 17:39:58 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import java.text.CharacterIterator;
+import java.util.Random;
+
+import java.io.*;
+
+public class TestMText extends TestFmwk {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    public static void main(String[] args) throws Exception {
+
+        new TestMText().run(args);
+    }
+    
+    private static final int TEST_ITERATIONS = 5000;
+    private static final int STYLE_TEST_ITERATIONS = 5000;
+    private static final long RAND_SEED = 598436;
+
+    private static final int NOT_IN_MONKEY_TEST = -5000;
+    private int testIteration = NOT_IN_MONKEY_TEST;
+    private int theCase = NOT_IN_MONKEY_TEST;
+    
+    private static StyleModifier createMinusModifier(final Object attr) {
+        return new StyleModifier() {
+            public AttributeMap modifyStyle(AttributeMap style) {
+                return style.removeAttribute(attr);
+            }
+        };
+    }
+
+    public void test() {
+    
+        simpleTest();
+        styleTest();
+        monkeyTest(true);
+    }
+    
+    public void simpleTest() {
+
+        AttributeMap boldStyle = new AttributeMap(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
+        AttributeMap italicStyle = new AttributeMap(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
+
+        MConstText allBold = new StyledText("bbbbb", boldStyle);
+        MConstText allItalic = new StyledText("iii", italicStyle);
+        MConstText plain = new StyledText("pppppp", AttributeMap.EMPTY_ATTRIBUTE_MAP);
+
+        {
+            MText buf = new StyledText();
+            int ts = buf.getTimeStamp();
+            buf.append(allBold);
+            buf.append(allItalic);
+
+            if (ts == buf.getTimeStamp()) {
+                errln("Time stamp not incremented");
+            }
+
+            // should be bbbbbiii now
+
+            if (buf.length() != allBold.length() + allItalic.length()) {
+                errln("Length is wrong.");
+            }
+
+            for (int i=0; i < buf.length(); i++) {
+
+                char rightChar;
+                AttributeMap rightStyle;
+
+                if (i < allBold.length()) {
+                    rightChar = allBold.at(0);
+                    rightStyle = boldStyle;
+                }
+                else {
+                    rightChar = allItalic.at(0);
+                    rightStyle = italicStyle;
+                }
+
+                if (buf.at(i) != rightChar) {
+                    errln("Character is wrong.");
+                }
+                if (!buf.characterStyleAt(i).equals(rightStyle)) {
+                    errln("Style is wrong.");
+                }
+            }
+
+            int pos = 0;
+
+            if (!buf.characterStyleAt(pos).equals(boldStyle)) {
+                errln("First style is wrong.");
+            }
+            if (buf.characterStyleLimit(pos) != allBold.length()) {
+                errln("Run length is wrong.");
+            }
+
+            pos = allBold.length();
+
+            if (!buf.characterStyleAt(pos).equals(italicStyle)) {
+                errln("Second style is wrong.");
+            }
+            if (buf.characterStyleLimit(pos) != buf.length()) {
+                errln("Run length is wrong.");
+            }
+
+            {
+                buf.resetDamagedRange();
+                int oldLength = buf.length();
+                buf.replace(buf.length(), buf.length(), allBold, 0, allBold.length());
+                // bbbbbiiibbbbb
+
+                if (buf.damagedRangeStart() != oldLength) {
+                    errln("Damaged range start is incorrect");
+                }
+                if (buf.damagedRangeLimit() != buf.length()) {
+                    errln("Damaged range limit is incorrect");
+                }
+            }
+
+            int start = allBold.length();
+            int limit = start + allItalic.length();
+            buf.remove(start, limit);
+            // bbbbbbbbbb
+
+            if (buf.length() != 2 * allBold.length()) {
+                errln("Text should be twice the length of bold text.");
+            }
+
+            pos = buf.length() / 2;
+            if (buf.characterStyleStart(pos) != 0 ||
+                            buf.characterStyleLimit(pos) != buf.length()) {
+                errln("Run range is wrong.");
+            }
+            if (!buf.characterStyleAt(pos).equals(boldStyle)) {
+                errln("Run style is wrong.");
+            }
+
+            ts = buf.getTimeStamp();
+            CharacterIterator cIter = buf.createCharacterIterator();
+            for (char ch = cIter.first(); ch != cIter.DONE; ch = cIter.next()) {
+                if (ch != allBold.at(0)) {
+                    errln("Character is wrong.");
+                }
+            }
+
+            if (ts != buf.getTimeStamp()) {
+                errln("Time stamp should not have changed");
+            }
+
+            buf.replace(0, 1, plain, 0, plain.length());
+
+            if (ts == buf.getTimeStamp()) {
+                errln("Time stamp not incremented");
+            }
+
+            // ppppppbbbbbbbbb
+            buf.replace(plain.length(), buf.length(), allItalic, 0, allItalic.length());
+            // ppppppiii
+
+            if (buf.length() != allItalic.length()+plain.length()) {
+                errln("Length is wrong.");
+            }
+
+            pos = 0;
+            if (buf.characterStyleLimit(pos) != plain.length()) {
+                errln("Run limit is wrong.");
+            }
+
+            pos = plain.length();
+            if (buf.characterStyleLimit(pos) != buf.length()) {
+                errln("Run limit is wrong.");
+            }
+
+            buf.replace(plain.length(), plain.length(), allBold, 0, allBold.length());
+            // ppppppbbbbbiii
+
+            AttributeMap st = buf.characterStyleAt(1);
+            if (!st.equals(AttributeMap.EMPTY_ATTRIBUTE_MAP)) {
+                errln("Style is wrong.");
+            }
+            if (buf.characterStyleStart(1) != 0 || buf.characterStyleLimit(1) != plain.length()) {
+                errln("Style start is wrong.");
+            }
+
+            st = buf.characterStyleAt(buf.length() - 1);
+            if (!st.equals(italicStyle)) {
+                errln("Style is wrong.");
+            }
+            if (buf.characterStyleStart(buf.length() - 1) != plain.length()+allBold.length()) {
+                errln("Style start is wrong.");
+            }
+
+            if (buf.characterStyleLimit(buf.length() - 1) != buf.length()) {
+                errln("Style limit is wrong.");
+            }
+        }
+    }
+
+    private static int randInt(Random rand, int limit) {
+
+        return randInt(rand, 0, limit);
+    }
+
+    private static int randInt(Random rand, int start, int limit) {
+
+        if (start > limit) {
+            throw new IllegalArgumentException("Range length is negative.");
+        }
+        else if (start == limit) {
+            return start;
+        }
+
+        return start + (Math.abs(rand.nextInt())%(limit-start)) ;
+    }
+
+    public void styleTest() {
+
+        MText text = new StyledText("0123456789", AttributeMap.EMPTY_ATTRIBUTE_MAP);
+
+        AttributeMap[] styles = new AttributeMap[text.length()];
+        for (int i=0; i < styles.length; i++) {
+            styles[i] = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+        }
+        AttributeMap[] oldStyles = new AttributeMap[styles.length];
+        System.arraycopy(styles, 0, oldStyles, 0, styles.length);
+
+        AttributeMap bigStyle = new AttributeMap(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON).
+                                                    addAttribute(TextAttribute.SIZE, new Float(23.0f));
+
+        StyleModifier[] modifiers = {
+            StyleModifier.createReplaceModifier(new AttributeMap(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)),
+            StyleModifier.createAddModifier(new AttributeMap(TextAttribute.WEIGHT, new Float(1.0f))),
+            createMinusModifier(TextAttribute.WEIGHT),
+
+            StyleModifier.createAddModifier(new AttributeMap(TextAttribute.POSTURE, new Float(0.0f))),
+            StyleModifier.createReplaceModifier(new AttributeMap(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE)),
+            createMinusModifier(TextAttribute.POSTURE),
+
+            StyleModifier.createAddModifier(bigStyle),
+            StyleModifier.createReplaceModifier(bigStyle),
+            createMinusModifier(bigStyle.getKeySet())
+        };
+
+        Random rand = new Random(RAND_SEED);
+        final int stopAt = 4;
+
+        for (int testIteration=0; testIteration < STYLE_TEST_ITERATIONS + 1; testIteration++) {
+
+            System.arraycopy(styles, 0, oldStyles, 0, styles.length);
+
+            int startingAt = Integer.MAX_VALUE;
+            int endingAt = Integer.MIN_VALUE;
+            int oldTs = text.getTimeStamp();
+
+            // hack way to do an invariant check before starting...
+            if (testIteration != 0) {
+                // modify styles
+                text.resetDamagedRange();
+                startingAt = randInt(rand, styles.length+1);
+                endingAt = randInt(rand, startingAt, styles.length+1);
+                StyleModifier modifier = modifiers[randInt(rand, modifiers.length)];
+
+                if (testIteration == stopAt) {
+                    testIteration = stopAt;
+                }
+                text.modifyCharacterStyles(startingAt, endingAt, modifier);
+
+                for (int j=startingAt; j < endingAt; j++) {
+                    styles[j] = modifier.modifyStyle(styles[j]);
+                }
+            }
+
+            // check invariants
+            AttributeMap oldStyle = null;
+            int textLength = text.length();
+            for (int runStart = 0; runStart < textLength;) {
+
+                AttributeMap currentStyle = text.characterStyleAt(runStart);
+                int runLimit = text.characterStyleLimit(runStart);
+                if (runStart >= runLimit) {
+                    errln("Run length is not positive");
+                }
+                if (currentStyle.equals(oldStyle)) {
+                    errln("Styles didn't merge");
+                }
+
+                for (int pos=runStart; pos < runLimit; pos++) {
+                    AttributeMap charStyleAtPos = text.characterStyleAt(pos);
+                    if (currentStyle != charStyleAtPos) {
+                        errln("Iterator style is not equal to text style at " + pos + ".");
+                    }
+                    AttributeMap expected = styles[pos];
+                    if (!currentStyle.equals(expected)) {
+                        errln("Iterator style doesn't match expected style at " + pos + ".");
+                    }
+                    if (!(text.characterStyleStart(pos) == runStart) ||
+                            !(text.characterStyleLimit(pos) == runLimit)) {
+                        errln("style run start / limit is not consistent");
+                    }
+                }
+                runStart = runLimit;
+            }
+            if (textLength > 0) {
+                if (text.characterStyleAt(textLength) !=
+                            text.characterStyleAt(textLength-1)) {
+                    errln("Character styles at end aren't the same");
+                }
+            }
+
+            // check damaged range:
+            int damageStart = Integer.MAX_VALUE;
+            int damageLimit = Integer.MIN_VALUE;
+            for (int i=0; i < textLength; i++) {
+                if (!styles[i].equals(oldStyles[i])) {
+                    damageStart = Math.min(i, damageStart);
+                    damageLimit = Math.max(i+1, damageLimit);
+                }
+            }
+            if (damageStart != text.damagedRangeStart() ||
+                            damageLimit != text.damagedRangeLimit()) {
+                logln("Test iteration: " + testIteration);
+                logln("startingAt: " + startingAt + ";  endingAt: " + endingAt);
+                logln("damageStart: " + damageStart + ";  damageLimit: " + damageLimit);
+                logln("text.rangeStart: " + text.damagedRangeStart() +
+                                   "text.rangeLimit: " + text.damagedRangeLimit());
+                errln("Damage range start or limit is not expected value");
+            }
+
+            if ((damageLimit == Integer.MIN_VALUE) != (oldTs == text.getTimeStamp())) {
+
+                errln("timeStamp is incorrect");
+            }
+        }
+    }
+
+    public void err(String message) {
+    
+        if (testIteration != NOT_IN_MONKEY_TEST) {
+            message = "testIteration="+testIteration+"; testCase="+theCase+message;
+        }
+        super.err(message);
+    }
+    
+    /**
+    * Perform a random series of operations on an MText and
+    * check the result of each operation against a set of invariants.
+    */
+    public void monkeyTest(boolean streaming) {
+
+        /*
+            You can add any operation to the switch statement provided it
+            preserves the following invariants:
+            - The String plainText contains the same text as the StyledStringBuffer.
+              Obviously, for the test to be meaningful plainText must be computed
+              independently of the buffer (ie don't write:  plainText = buf.getStyledString().toString()).
+            - Every 'b' is bold, every 'i' is italic, every 'p' is plain, and
+              no other characters appear in the text.
+        */
+
+        AttributeMap boldAttrs = new AttributeMap(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
+        AttributeMap italicAttrs = new AttributeMap(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
+        AttributeMap emptyAttrs = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+
+        final String bold1Str_getString = "b";
+        MConstText bold1Str = new StyledText(bold1Str_getString, boldAttrs);
+
+        final String italic1Str_getString = "i";
+        MConstText italic1Str = new StyledText(italic1Str_getString, italicAttrs);
+
+        final String plain1Str_getString = "p";
+        MConstText plain1Str = new StyledText(plain1Str_getString, emptyAttrs);
+
+        StyledText temp = new StyledText();
+        temp.append(bold1Str);
+        temp.append(italic1Str);
+        final String boldItalicStr_getString = bold1Str_getString.concat(italic1Str_getString);
+        MConstText boldItalicStr = temp;
+
+        temp = new StyledText();
+        temp.append(bold1Str);
+        temp.append(bold1Str);
+        temp.append(bold1Str);
+        final String bold3Str_getString = "bbb";
+        MConstText bold3Str = temp;
+
+        MText buf = new StyledText();
+        String plainText = new String();
+        //int testIteration=0; - now instance variables so errln can report it
+        //int theCase=0;
+
+        final int NUM_CASES = 14;
+        boolean[] casesExecuted = new boolean[NUM_CASES];
+        final int stopAt = -1;
+        Random rand = new Random(RAND_SEED);
+
+        final String ALWAYS_DIFFERENT = "\uFEFF";
+
+            for (testIteration=0; testIteration < TEST_ITERATIONS; testIteration++) {
+
+                theCase = randInt(rand, NUM_CASES);
+
+                casesExecuted[theCase] = true;
+
+                if (testIteration == stopAt) {
+                    testIteration = stopAt;  // Convenient place to put breakpoint
+                }
+
+                int timeStamp = buf.getTimeStamp();
+                String oldPlainText = plainText;
+                if (oldPlainText == null) {
+                    errln("oldPlainText is null!");
+                }
+
+                switch (theCase) {
+
+                    case 0:
+                        // create new string; replace chars at start with different style
+                        buf = new StyledText();
+                        buf.append(bold3Str);
+                        buf.replace(0, 1, italic1Str, 0, italic1Str.length());
+                        buf.replace(0, 0, italic1Str, 0, italic1Str.length());
+
+                        plainText = bold3Str_getString.substring(1, bold3Str.length());
+                        plainText = italic1Str_getString.concat(plainText);
+                        plainText = italic1Str_getString.concat(plainText);
+                        oldPlainText = null;
+                        break;
+
+                    case 1:
+                        // delete the last character from the string
+                        if (buf.length() == 0) {
+                            buf.replace(0, 0, italic1Str, 0, italic1Str.length());
+                            plainText = italic1Str_getString;
+                            oldPlainText = ALWAYS_DIFFERENT;
+                        }
+                        buf.remove(buf.length()-1, buf.length());
+                        plainText = plainText.substring(0, plainText.length()-1);
+                        break;
+
+                    case 2:
+                        // replace some of the buffer with boldItalicStr
+                        int rStart = randInt(rand, buf.length()+1);
+                        int rStop = randInt(rand, rStart, buf.length()+1);
+                        buf.replace(rStart, rStop, boldItalicStr);
+                        {
+                            String newString = (rStart>0)? plainText.substring(0, rStart) : new String();
+                            newString = newString.concat(boldItalicStr_getString);
+                            if (rStop < plainText.length())
+                                newString = newString.concat(plainText.substring(rStop, plainText.length()));
+                            oldPlainText = ALWAYS_DIFFERENT;
+                            plainText = newString;
+                        }
+                        break;
+
+                    case 3:
+                        // repeatedly insert strings into the center of the buffer
+                        {
+                            int insPos = buf.length() / 2;
+                            String prefix = plainText.substring(0, insPos);
+                            String suffix = plainText.substring(insPos, plainText.length());
+                            String middle = new String();
+                            for (int ii=0; ii<4; ii++) {
+                                MConstText which = (ii%2==0)? boldItalicStr : bold3Str;
+                                String whichString = (ii%2==0)? boldItalicStr_getString : bold3Str_getString;
+                                int tempPos = insPos+middle.length();
+                                buf.insert(tempPos, which);
+                                middle = middle.concat(whichString);
+                            }
+                            plainText = prefix.concat(middle).concat(suffix);
+                            oldPlainText = ALWAYS_DIFFERENT;
+                        }
+                        break;
+
+                    case 4:
+                    // insert bold1Str at end
+                        buf.append(bold1Str);
+                        plainText = plainText.concat(bold1Str_getString);
+                        break;
+
+                    case 5:
+                    // delete a character from the string
+                        if (buf.length() > 0) {
+                            int delPos = randInt(rand, buf.length()-1);
+                            buf.remove(delPos, delPos+1);
+                            plainText = plainText.substring(0, delPos).concat(plainText.substring(delPos+1));
+                        }
+                        else {
+                            buf.replace(0, 0, plain1Str, 0, plain1Str.length());
+                            plainText = plain1Str_getString;
+                        }
+                        break;
+
+                    case 6:
+                    // replace the contents of the buffer (except the first character) with itself
+                        {
+                            int start = buf.length() > 1? 1 : 0;
+                            buf.replace(start, buf.length(), buf);
+                            plainText = plainText.substring(0, start).concat(plainText);
+                            if (buf.length() > 0) {
+                                oldPlainText = ALWAYS_DIFFERENT;
+                            }
+                        }
+                        break;
+
+                    case 7:
+                    // append the contents of the buffer to itself
+                        {
+                            MConstText content = buf;
+                            buf.insert(buf.length(), content);
+                            plainText = plainText.concat(plainText);
+                        }
+                        break;
+
+                    case 8:
+                    // replace the buffer with boldItalicStr+bold3Str
+                        {
+                            MText replacement = new StyledText();
+                            replacement.append(boldItalicStr);
+                            replacement.append(bold3Str);
+                            buf.replace(0, buf.length(), replacement, 0, replacement.length());
+                            plainText = boldItalicStr_getString.concat(bold3Str_getString);
+                            oldPlainText = ALWAYS_DIFFERENT;
+                        }
+                        break;
+
+                    case 9:
+                    // insert bold1Str at end - same as 4 but uses different API
+                        buf.replace(buf.length(),
+                                    buf.length(),
+                                    bold1Str_getString.toCharArray(),
+                                    0,
+                                    bold1Str_getString.length(),
+                                    boldAttrs);
+                        plainText = plainText.concat(bold1Str_getString);
+                        break;
+
+                    case 10:
+                    // remove all
+                        buf.remove();
+                        plainText = "";
+                        oldPlainText = ALWAYS_DIFFERENT;
+                        break;
+
+                    case 11:
+                    // remove all - different way
+                        buf.remove(0, buf.length());
+                        plainText = "";
+                        break;
+
+                    case 12:
+                        // insert 'i' at 3rd character (or last, if fewer than 3 chars)
+                        {
+                            int insPos = Math.min(buf.length(), 3);
+                            buf.replace(insPos, insPos, 'i', italicAttrs);
+                            plainText = (plainText.substring(0, insPos)).
+                                        concat(italic1Str_getString).
+                                        concat(plainText.substring(insPos));
+                        }
+                        break;
+
+                    case 13:
+                        if (streaming) {
+                            Throwable error = null;
+                            try {
+                                ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+                                ObjectOutputStream objOut = new ObjectOutputStream(bytesOut);
+                                objOut.writeObject(buf);
+
+                                ByteArrayInputStream bytesIn =
+                                                new ByteArrayInputStream(bytesOut.toByteArray());
+                                ObjectInputStream objIn = new ObjectInputStream(bytesIn);
+                                buf = (MText) objIn.readObject();
+                                oldPlainText = null;
+                            }
+                            catch(IOException e) {
+                                error = e;
+                            }
+                            catch(ClassNotFoundException e) {
+                                error = e;
+                            }
+                            if (error != null) {
+                                error.printStackTrace();
+                                errln("Streaming problem: " + error);
+                            }
+                        }
+                        break;
+
+                    default:
+                        errln("Invalid case.");
+                }
+
+                // Check time stamp if oldPlainText != null.
+                // Time stamp should be different iff
+                // oldPlainText == plainText
+                if (oldPlainText != null) {
+                    if ((timeStamp==buf.getTimeStamp()) !=
+                                    oldPlainText.equals(plainText)) {
+                        logln("plainText hashCode: " + plainText.hashCode());
+                        logln("oldPlainText hashCode: " + oldPlainText.hashCode());
+                        errln("Time stamp is incorrect");
+                    }
+                }
+
+                // now check invariants:
+                if (plainText.length() != buf.length()) {
+                    errln("Lengths don't match");
+                }
+
+                for (int j=0; j < buf.length(); j++) {
+                    if (buf.at(j) != plainText.charAt(j)) {
+                        errln("Characters don't match.");
+                    }
+                }
+
+                int start;
+                for (start = 0; start < buf.length();) {
+
+                    if (start != buf.characterStyleStart(start)) {
+                        errln("style start is wrong");
+                    }
+                    int limit = buf.characterStyleLimit(start);
+                    if (start >= limit) {
+                        errln("start >= limit");
+                    }
+                    char current = plainText.charAt(start);
+
+                    AttributeMap comp = null;
+                    if (current == 'p') {
+                        comp = emptyAttrs;
+                    }
+                    else if (current == 'b') {
+                        comp = boldAttrs;
+                    }
+                    else if (current == 'i') {
+                        comp = italicAttrs;
+                    }
+                    else {
+                        errln("An invalid character snuck in!");
+                    }
+
+                    AttributeMap startStyle = buf.characterStyleAt(start);
+                    if (!comp.equals(startStyle)) {
+                        errln("Style is not expected style.");
+                    }
+
+                    for (int j = start; j < limit; j++) {
+                        if (plainText.charAt(j) != current) {
+                            errln("Character doesn't match style.");
+                        }
+                        if (buf.characterStyleAt(j) != startStyle) {
+                            errln("Incorrect style in run");
+                        }
+                    }
+
+                    if (limit < buf.length()) {
+                        if (plainText.charAt(limit) == current) {
+                            errln("Style run ends too soon.");
+                        }
+                    }
+                    start = limit;
+                }
+                if (start != buf.length()) {
+                    errln("Last limit is not buffer length.");
+                }
+
+                // won't try to compute and check damaged range;  however,
+                // if nonempty it should always be within text
+                int damageStart = buf.damagedRangeStart();
+                int damageLimit = buf.damagedRangeLimit();
+                if (damageStart == Integer.MAX_VALUE) {
+                    if (damageLimit != Integer.MIN_VALUE) {
+                        errln("Invalid empty interval");
+                    }
+                }
+                else {
+                    if (damageStart > damageLimit) {
+                        errln("Damage range inverted");
+                    }
+                    if (damageStart < 0 || damageLimit > buf.length()) {
+                        errln("Damage range endpoint out of bounds");
+                    }
+                }
+            }
+
+        testIteration = NOT_IN_MONKEY_TEST;
+        
+        boolean allCasesExecuted = true;
+        for (int index=0; index < NUM_CASES; index++) {
+            allCasesExecuted &= casesExecuted[index];
+            if (casesExecuted[index] == false) {
+                logln("Case " + index + " not executed.");
+            }
+        }
+        //if (allCasesExecuted) {
+        //    logln("All cases executed.");
+        //}
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/TestMTextStreaming.java b/src/com/ibm/test/richtext/TestMTextStreaming.java
new file mode 100755
index 0000000..5208346
--- /dev/null
+++ b/src/com/ibm/test/richtext/TestMTextStreaming.java
@@ -0,0 +1,162 @@
+/*
+ * @(#)$RCSfile: TestMTextStreaming.java,v $ $Revision: 1.2 $ $Date: 2000/04/24 20:52:58 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+
+import java.io.*;
+import java.awt.Color;
+
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.richtext.styledtext.StandardTabRuler;
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.StyleModifier;
+
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.textlayout.attributes.TextAttribute;
+
+public class TestMTextStreaming extends TestFmwk {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+                
+    public static void main(String[] args) throws Exception {
+
+        new TestMTextStreaming().run(args);
+    }
+
+    public TestMTextStreaming() {
+    }
+
+    public void test() {
+
+        simpleTest();
+        allAttributesTest();
+    }
+
+    private void simpleTest() {
+
+        AttributeMap style = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+        MText text = new StyledText("Hello world!", style);
+
+        streamAndCompare(text);
+    }
+
+    private static class TestModifier extends StyleModifier {
+
+        private Object fKey;
+        private Object fValue;
+
+        public AttributeMap modifyStyle(AttributeMap style) {
+
+            return style.addAttribute(fKey, fValue);
+        }
+
+        TestModifier(Object key, Object value) {
+
+            fKey = key;
+            fValue = value;
+        }
+    }
+
+    private void allAttributesTest() {
+
+        AttributeMap style = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+        MText text = new StyledText("Hello world!", style);
+
+        int length = text.length();
+
+        final boolean CHARACTER = true;
+        final boolean PARAGRAPH = false;
+
+        addStyle(text, 0, length/2, TextAttribute.FAMILY, "Times", CHARACTER);
+        addStyle(text, length/2, length, TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, CHARACTER);
+        addStyle(text, 0, length/2, TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE, CHARACTER);
+        addStyle(text, 0, length/2, TextAttribute.SIZE, new Float(13.7f), CHARACTER);
+        addStyle(text, length/2, length, TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUB, CHARACTER);
+        addStyle(text, 0, length/2, TextAttribute.FOREGROUND, Color.blue, CHARACTER);
+        addStyle(text, 0, length/2, TextAttribute.BACKGROUND, Color.red, CHARACTER);
+        addStyle(text, 0, length-1, TextAttribute.STRIKETHROUGH, Boolean.TRUE, CHARACTER);
+
+        addStyle(text, 0, length, TextAttribute.EXTRA_LINE_SPACING, new Float(4), PARAGRAPH);
+        addStyle(text, 0, length, TextAttribute.FIRST_LINE_INDENT, new Float(6), PARAGRAPH);
+        addStyle(text, 0, length, TextAttribute.MIN_LINE_SPACING, new Float(7), PARAGRAPH);
+        addStyle(text, 0, length, TextAttribute.LINE_FLUSH, TextAttribute.FLUSH_TRAILING, PARAGRAPH);
+        addStyle(text, 0, length, TextAttribute.LEADING_MARGIN, new Float(9), PARAGRAPH);
+        addStyle(text, 0, length, TextAttribute.TRAILING_MARGIN, new Float(9), PARAGRAPH);
+        addStyle(text, 0, length, TextAttribute.TAB_RULER, new StandardTabRuler(), PARAGRAPH);
+
+        streamAndCompare(text);
+    }
+
+    private static void addStyle(MText text,
+                                 int start,
+                                 int limit,
+                                 Object key,
+                                 Object value,
+                                 boolean character) {
+
+        StyleModifier modifier = new TestModifier(key, value);
+
+        if (character) {
+            text.modifyCharacterStyles(start, limit, modifier);
+        }
+        else {
+            text.modifyParagraphStyles(start, limit, modifier);
+        }
+    }
+
+    public void streamAndCompare(MText text) {
+
+        Throwable error = null;
+
+        try {
+            ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+            ObjectOutputStream objOut = new ObjectOutputStream(bytesOut);
+            objOut.writeObject(text);
+
+            ByteArrayInputStream bytesIn =
+                            new ByteArrayInputStream(bytesOut.toByteArray());
+            ObjectInputStream objIn = new ObjectInputStream(bytesIn);
+            MText streamedText = (MText) objIn.readObject();
+            if (!isEqual(text, streamedText)) {
+                isEqual(text, streamedText);
+                errln("Streamed text is not equal");
+            }
+        }
+/*        catch(OptionalDataException e) {
+            error = e;
+        }
+        catch(StreamCorruptedException e) {
+            error = e;
+        }*/
+        catch(IOException e) {
+            error = e;
+        }
+        catch(ClassNotFoundException e) {
+            error = e;
+        }
+
+        if (error != null) {
+            error.printStackTrace();
+            errln("Serialization failed.");
+        }
+    }
+
+    public static boolean isEqual(MText lhs, MText rhs) {
+
+        return lhs.equals(rhs);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/richtext/TestParagraphStyles.java b/src/com/ibm/test/richtext/TestParagraphStyles.java
new file mode 100755
index 0000000..3f12b05
--- /dev/null
+++ b/src/com/ibm/test/richtext/TestParagraphStyles.java
@@ -0,0 +1,339 @@
+/*
+ * @(#)$RCSfile: TestParagraphStyles.java,v $ $Revision: 1.2 $ $Date: 2000/04/24 20:52:58 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.test.richtext;
+
+import com.ibm.test.TestFmwk;
+
+import com.ibm.richtext.styledtext.StyledText;
+import com.ibm.richtext.styledtext.MConstText;
+import com.ibm.richtext.styledtext.MText;
+import com.ibm.textlayout.attributes.AttributeMap;
+import com.ibm.richtext.styledtext.StyleModifier;
+import java.util.Random;
+
+public final class TestParagraphStyles extends TestFmwk {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+                
+    public static void main(String[] args) throws Exception {
+
+        new TestParagraphStyles().run(args);
+    }
+
+    private static final int RAND_SEED = 1234;
+    private static final int NUM_TESTS = 2500;
+
+    private static final boolean isParagraphBreak(char c) {
+
+        return c =='\u2029' || c == '\n';
+    }
+
+    private static final Object KEY = "KEY";
+    private static final AttributeMap PLAIN = AttributeMap.EMPTY_ATTRIBUTE_MAP;
+    private static final AttributeMap A_STYLE = new AttributeMap(KEY, new Character('a'));
+    private static final StyleModifier A_MOD =
+                            StyleModifier.createReplaceModifier(A_STYLE);
+    private static final AttributeMap B_STYLE = new AttributeMap(KEY, new Character('b'));
+    private static final StyleModifier B_MOD =
+                            StyleModifier.createReplaceModifier(B_STYLE);
+    private static final AttributeMap C_STYLE = new AttributeMap(KEY, new Character('c'));
+    private static final StyleModifier C_MOD =
+                            StyleModifier.createReplaceModifier(C_STYLE);
+    private static final AttributeMap D_STYLE = new AttributeMap(KEY, new Character('d'));
+    private static final StyleModifier D_MOD =
+                            StyleModifier.createReplaceModifier(D_STYLE);
+    private static final AttributeMap E_STYLE = new AttributeMap(KEY, new Character('e'));
+    private static final StyleModifier E_MOD =
+                            StyleModifier.createReplaceModifier(E_STYLE);
+
+    public void test() {
+
+        easyTests();
+        randomTest();
+    }
+
+    private void easyTests() {
+
+        MText text = new StyledText("a\nb\nc\nd\n", PLAIN);
+        text.modifyParagraphStyles(0, text.length(), A_MOD);
+        verifyParagraphCount(text);
+
+        MText src = new StyledText("XXX\nYYY", PLAIN);
+        src.modifyParagraphStyles(0, src.length(), B_MOD);
+        verifyParagraphCount(src);
+
+        MText temp = text.extractWritable(0, text.length());
+        temp.append(src);
+        verifyParagraphCount(temp);
+        for (int i=0; i < text.length(); i++) {
+            if (!temp.paragraphStyleAt(i).equals(text.paragraphStyleAt(i))) {
+                errln("Paragraph styles are wrong");
+            }
+        }
+        for (int i=0; i < src.length(); i++) {
+            if (!temp.paragraphStyleAt(i+text.length()).equals(src.paragraphStyleAt(i))) {
+                errln("Paragraph styles are wrong");
+            }
+        }
+
+        temp = text.extractWritable(0, text.length());
+        temp.replace(0, 1, src, 0, src.length());
+        verifyParagraphCount(temp);
+        if (temp.paragraphLimit(0) != 4) {
+            errln("Paragraph limit is wrong");
+        }
+        if (!temp.paragraphStyleAt(0).equals(B_STYLE)) {
+            errln("First style is wrong");
+        }
+        if (!temp.paragraphStyleAt(4).equals(A_STYLE)) {
+            errln("Style after insert is wrong");
+        }
+
+        // test append
+        MConstText newSrc = src.extract(4, 7);
+        MText initC = new StyledText("cccccc", PLAIN);
+        initC.modifyParagraphStyles(0, initC.length(), C_MOD);
+        initC.append(newSrc);
+        // now initC should be one paragraph with style B
+        if (initC.paragraphLimit(0) != initC.length()) {
+            errln("Should only be one paragraph");
+        }
+        if (initC.paragraphStyleAt(0) != initC.paragraphStyleAt(initC.length())) {
+            errln("Two different paragraph styles");
+        }
+        if (!initC.paragraphStyleAt(initC.length()/2).equals(B_STYLE)) {
+            errln("Incorrect paragraph style");
+        }
+        
+        text = new StyledText("aaa\n", PLAIN);
+        text.modifyParagraphStyles(0, text.length(), A_MOD);
+        text.modifyParagraphStyles(text.length(), text.length(), B_MOD);
+        if (text.paragraphStyleAt(text.length()) != B_STYLE) {
+            errln("0-length paragraph at end has incorrect style");
+        }
+    }
+
+    private static int randInt(Random rand, int limit) {
+
+        return randInt(rand, 0, limit);
+    }
+
+    private static int randInt(Random rand, int start, int limit) {
+
+        if (start > limit) {
+            throw new IllegalArgumentException("Range is 0-length.");
+        }
+        else if (start == limit) {
+            return start;
+        }
+
+        return start + (Math.abs(rand.nextInt())%(limit-start)) ;
+    }
+
+    private void randomTest() {
+
+        MText noParagraph = new StyledText("zzzz", PLAIN);
+        noParagraph.modifyParagraphStyles(0, noParagraph.length(), A_MOD);
+        MText twoParagraphs = new StyledText("aaa\nbbb", PLAIN);
+        twoParagraphs.modifyParagraphStyles(0, twoParagraphs.paragraphLimit(0), B_MOD);
+        MText threeParagraphs = new StyledText("cc\ndd\nee", PLAIN);
+        threeParagraphs.modifyParagraphStyles(0, 3, C_MOD);
+        threeParagraphs.modifyParagraphStyles(3, 6, D_MOD);
+        threeParagraphs.modifyParagraphStyles(6, 8, E_MOD);
+        MText trailingP1 = new StyledText("hhhh\n", PLAIN);
+        trailingP1.modifyParagraphStyles(0, trailingP1.paragraphLimit(0), C_MOD);
+        MText trailingP2 = new StyledText("iii\n", PLAIN);
+        trailingP2.modifyParagraphStyles(0, 0, D_MOD);
+        trailingP2.modifyParagraphStyles(trailingP2.length(), trailingP2.length(), B_MOD);
+
+        if (!trailingP2.paragraphStyleAt(trailingP2.length()-1).equals(D_STYLE)) {
+            errln("Style incorrect in trailingP2");
+        }
+        if (!trailingP2.paragraphStyleAt(trailingP2.length()).equals(B_STYLE)) {
+            errln("Ending style incorrect in trailingP2");
+        }
+
+        MConstText[] tests = { noParagraph, twoParagraphs,
+                                    threeParagraphs, trailingP1, trailingP2 };
+
+        Random random = new Random(RAND_SEED);
+
+        int stopAt = 465;
+        int i = 0;
+        try {
+            for (i=0; i < NUM_TESTS; i++) {
+
+                int srcIndex = randInt(random, tests.length);
+                int targetIndex = randInt(random, tests.length);
+                MText target = new StyledText(tests[targetIndex]);
+                MConstText src = tests[srcIndex];
+
+                int srcStart = randInt(random, src.length());
+                int srcLimit = randInt(random, srcStart, src.length());
+                int start = randInt(random, target.length());
+                int limit = randInt(random, start, target.length());
+
+                if (i == stopAt) {
+                    stopAt = i;
+                }
+
+                insertAndCheck(src, srcStart, srcLimit, target, start, limit);
+            }
+        }
+        finally {
+            if (i < NUM_TESTS) {
+                logln("iteration=" + i);
+            }
+        }
+    }
+
+    private void insertAndCheck(MConstText src, int srcStart, int srcLimit,
+                                MText target, int start, int limit) {
+
+        // p-style after insertion
+        AttributeMap after;
+        if (limit == target.length() && srcLimit > srcStart) {
+            after = src.paragraphStyleAt(srcLimit);
+        }
+        else {
+            after = target.paragraphStyleAt(limit);
+        }
+
+        AttributeMap before;
+        boolean srcHasPBreak = false;
+        for (int i=srcStart; i < srcLimit; i++) {
+            if (isParagraphBreak(src.at(i))) {
+                srcHasPBreak = true;
+                break;
+            }
+        }
+
+        if (start > 0 && isParagraphBreak(target.at(start-1))) {
+            before = target.paragraphStyleAt(start-1);
+        }
+        else {
+            before = srcHasPBreak? src.paragraphStyleAt(srcStart) : after;
+        }
+        boolean stylePropogated = !before.equals(target.paragraphStyleAt(Math.max(0, start-1)));
+
+
+        target.resetDamagedRange();
+        target.replace(start, limit, src, srcStart, srcLimit);
+        final int damageLimit = (start==limit && srcStart==srcLimit)?
+                        Integer.MIN_VALUE : start + (srcLimit-srcStart);
+
+        if (target.damagedRangeLimit() != damageLimit) {
+            logln("limit: " + damageLimit + ";  target.limit: " +
+                                target.damagedRangeLimit());
+            errln("Damaged range limit is incorrect");
+        }
+
+        final int damageStart = (damageLimit==Integer.MIN_VALUE)? Integer.MAX_VALUE :
+                (stylePropogated? target.paragraphStart(Math.max(0, start-1)) : start);
+        if (target.damagedRangeStart() > damageStart) {
+            logln("start: " + damageStart + ";  target.start: " +
+                                target.damagedRangeStart());
+            errln("Damaged range start is incorrect");
+        }
+
+        verifyParagraphCount(target);
+
+        // check endpoints
+        if (!before.equals(target.paragraphStyleAt(Math.max(start-1, 0)))) {
+            errln("Incorrect paragraph style before modified range");
+        }
+
+        int lengthDelta = (srcLimit-srcStart) - (limit-start);
+        int indexAfterInsert = Math.min(target.length(), limit + lengthDelta);
+        if (!after.equals(target.paragraphStyleAt(indexAfterInsert))) {
+            errln("Incorrect paragraph style after modified range");
+        }
+
+        if (srcHasPBreak) {
+            int startP = target.paragraphLimit(start);
+            int limitOfTest = target.paragraphStart(indexAfterInsert);
+
+            int offset = start - srcStart;
+
+            while (startP < limitOfTest) {
+                int limitP = target.paragraphLimit(startP);
+                if (src.paragraphLimit(startP-offset) + offset != limitP) {
+                    errln("paragraph limits are not consistent");
+                }
+                if (!src.paragraphStyleAt(startP-offset)
+                                    .equals(target.paragraphStyleAt(startP))) {
+                    errln("paragraph styles are not consistent");
+                }
+                startP = limitP;
+            }
+        }
+        else {
+            for (int i=start; i < start+(srcLimit-srcStart); i++) {
+                if (!after.equals(target.paragraphStyleAt(i))) {
+                    errln("paragraph style changed unexpectedly");
+                }
+            }
+        }
+    }
+
+    private void verifyParagraphCount(MConstText text) {
+
+        int pCount = 0;
+        int textLength = text.length();
+
+        if (textLength == 0) {
+            pCount = 1;
+        }
+        else {
+            for (int s=0; s < textLength; s = text.paragraphLimit(s)) {
+                pCount++;
+            }
+            if (isParagraphBreak(text.at(textLength-1))) {
+                pCount++;
+            }
+        }
+
+        int sepCount = 0;
+        for (int i=0; i < textLength; i++) {
+            if (isParagraphBreak(text.at(i))) {
+                sepCount++;
+            }
+        }
+
+        if (sepCount + 1 != pCount) {
+            logln("sepCount=" + sepCount + ";  pCount=" + pCount);
+            errln("Paragraph count is not consistent with characters");
+        }
+    }
+
+    private void checkEndpoint(MConstText text) {
+
+        boolean emptyFinalParagraph;
+        int length = text.length();
+
+        if (length != 0) {
+            char ch = text.at(length-1);
+            emptyFinalParagraph = isParagraphBreak(ch);
+        }
+        else {
+            emptyFinalParagraph = true;
+        }
+
+        if ((text.paragraphStart(length) == length) != emptyFinalParagraph) {
+            errln("Final paragraph length is incorrect");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/search/SearchTest.java b/src/com/ibm/test/search/SearchTest.java
new file mode 100755
index 0000000..7552033
--- /dev/null
+++ b/src/com/ibm/test/search/SearchTest.java
@@ -0,0 +1,493 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/search/Attic/SearchTest.java,v $ 
+ * $Date: 2001/03/23 20:28:21 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.search;
+
+import java.text.*;
+import java.util.*;
+
+//import com.ibm.text.*;
+import com.ibm.text.SearchIterator;
+import com.ibm.text.StringSearch;
+
+/**
+ * Unit and regression tests for the StringSearch and SearchIterator classes.
+ * This uses <code>IntlTest</code> as a framework for running the tests
+ * and displaying the output.  Basically, any method here that starts with
+ * <code>Test</code> is run as a test.
+ */
+public class SearchTest extends com.ibm.test.TestFmwk {
+    public static void main(String[] args) throws Exception {
+        new SearchTest().run(args);
+    }
+    
+    //-----------------------------------------------------------
+    // Static data: collators and break iterators to use for testing
+    //
+    static RuleBasedCollator enColl;        // Generic English collator
+    static RuleBasedCollator frColl;        // French accent rules
+    static RuleBasedCollator esColl;        // Has Spanish contracting "ch"
+    static RuleBasedCollator deColl;        // Has expansions, e.g. a-umlaut -> ae
+    
+    static {
+        try {
+            enColl = (RuleBasedCollator)Collator.getInstance(Locale.US);
+            frColl = (RuleBasedCollator)Collator.getInstance(Locale.FRANCE);
+            
+            esColl = new RuleBasedCollator(enColl.getRules() + " & C < ch ; cH ; Ch ; CH");
+            
+            deColl = new RuleBasedCollator(enColl.getRules() + " & ae ; \u00e4 & AE ; \u00c4"
+                                                             + " & oe ; \u00f6 & OE ; \u00d6"
+                                                             + " & ue ; \u00fc & UE ; \u00dc"); 
+        }
+        catch (ParseException e) {
+        }
+    }
+    
+    static BreakIterator enWord = BreakIterator.getWordInstance(Locale.US);
+    
+    static String testString = 
+            "blackbirds Pat p\u00E9ch\u00E9 " +
+            "p\u00EAche p\u00E9cher p\u00EAcher " +
+            "Tod T\u00F6ne black Tofu blackbirds " +
+            "Ton PAT toehold " +
+            "blackbird " +
+            "black-bird pat " +
+            "toe big Toe";
+    
+    //-------------------------------------------------------------------------
+    // The primary test consists of running through all of the strings in this
+    // table and making sure we find the proper matches
+    //
+    static class TestCase {
+        TestCase(RuleBasedCollator c, int strength, BreakIterator breaker,
+                    String pattern, String target, int[] matches) {
+            this.collator = c;
+            this.strength = strength;
+            this.breaker = breaker;
+            this.pattern = pattern;
+            this.target = target;
+            this.matches = matches;
+        }
+        RuleBasedCollator   collator;
+        int                 strength;
+        BreakIterator       breaker;
+        String              pattern;
+        String              target;
+        int[]               matches;
+    };
+    static TestCase[] testCases = {
+        new TestCase(enColl, Collator.PRIMARY, null, "fox",
+                //   012345678901234567890123456789012345678901234567890123456789
+                    "The quick brown fox jumps over the lazy foxes",
+                    new int[] { 16, 40 }
+                    ),
+
+        new TestCase(enColl, Collator.PRIMARY, enWord, "fox",
+                //   012345678901234567890123456789012345678901234567890123456789
+                    "The quick brown fox jumps over the lazy foxes",
+                    new int[] { 16 }
+                    ),
+
+        new TestCase(frColl, Collator.PRIMARY, null, "peche",
+                    testString,
+                    new int[] { 15, 21, 27, 34 }
+                    ),
+        new TestCase(frColl, Collator.PRIMARY, enWord, "blackbird",
+                    testString,
+                    new int[] { 88, 98 }
+                    ),
+
+        // NOTE: this case depends on a bug fix in JDK 1.2.2 ("Cricket")
+        new TestCase(deColl, Collator.PRIMARY, null, "toe",
+                //   012345678901234567890123456789012345678901234567890123456789
+                    "This is a toe T\u00F6ne",
+                    new int[] { 10, 14 }
+                    ),
+
+        /* Due to a bug in the JDK 1.2 FCS version of CollationElementIterator,
+         * searching through text containing contracting character sequences 
+         * isn't working properly right now.  This will probably be fixed in
+         * JDK 1.3 ("Kestrel").  When it is, uncomment these test cases.
+         *
+        new TestCase(esColl, Collator.PRIMARY, enWord, "channel",
+                //   0123456789012345678901234567890123456789012345678901234567890123456789
+                    "A channel, another CHANNEL, more Channels, and one last channel...",
+                    new int[] {  }
+                    ),
+
+        new TestCase(esColl, Collator.TERTIARY, enWord, "Channel",
+                //   0123456789012345678901234567890123456789012345678901234567890123456789
+                    "Channel, another channel, more channels, and one last Channel",
+                    new int[] {  }
+                    ),
+        */
+
+    };
+
+    /**
+     * Test using the test cases defined above
+     */
+    public void TestCases() {
+        for (int t = 0; t < testCases.length; t++)
+        {
+            logln("case " + t);
+            TestCase c = testCases[t];
+            StringSearch iter = new StringSearch(c.pattern,
+                                        new StringCharacterIterator(c.target),
+                                        c.collator, c.breaker);
+            iter.setStrength(c.strength);
+            doTestCase(iter, c.matches);
+        }
+    }
+    
+    /**
+     * Test for SearchIterator.setOverlapping()
+     */
+    public void TestOverlapping() {
+        // Create a search iterator. 
+        StringSearch iter = new StringSearch("abab",
+                                             new StringCharacterIterator("abababab"),
+                                             enColl, null);
+        
+        int[] overlap = new int[] { 0, 2, 4 };  // expected results
+        int[] novrlap = new int[] { 0, 4 };
+
+        
+        doTestCase(iter, overlap);          // Overlapping is allowed by default
+        if (iter.isOverlapping() != true) {
+            errln("ERROR: isOverlapping returned " + iter.isOverlapping());
+        }
+        
+        iter.setOverlapping(false);         // Turn 'em back off
+        doTestCase(iter, novrlap);
+        if (iter.isOverlapping() != false) {
+            errln("ERROR: isOverlapping returned " + iter.isOverlapping());
+        }
+
+        iter.setOverlapping(true);
+        doTestCase(iter, overlap);
+        if (iter.isOverlapping() != true) {
+            errln("ERROR: isOverlapping returned " + iter.isOverlapping());
+        }
+    }
+    
+    /**
+     * Test for SearchIterator.setBreakIterator
+     */
+    public void TestBreakIterator() {
+        StringSearch iter = new StringSearch("fox",
+                                 new StringCharacterIterator("foxy fox"),
+                                 enColl, null);
+
+        BreakIterator charBreaker = BreakIterator.getCharacterInstance(Locale.US);
+        BreakIterator wordBreaker = BreakIterator.getWordInstance(Locale.US);
+        
+        int[] chars = new int[] { 0, 5 };   // expected results
+        int[] words = new int[] { 5 };
+        
+        logln("default break iterator...");
+        doTestCase(iter, chars);            // character breaker by default
+        
+        logln("word break iterator...");
+        iter.setBreakIterator(wordBreaker); // word break detection
+        doTestCase(iter, words);
+        if (iter.getBreakIterator() != wordBreaker) {
+            errln("ERROR: getBreakIterator returned wrong object");
+        }
+
+        logln("char break iterator...");
+        iter.setBreakIterator(charBreaker); // char break detection
+        doTestCase(iter, chars);
+        if (iter.getBreakIterator() != charBreaker) {
+            errln("ERROR: getBreakIterator returned wrong object");
+        }
+
+        logln("null break iterator...");
+        iter.setBreakIterator(null);
+        doTestCase(iter, chars);
+        if (iter.getBreakIterator() != null) {
+            errln("ERROR: getBreakIterator returned wrong object");
+        }
+    }
+    
+    /**
+     * Test for SearchIterator.setTarget
+     */
+    public void TestSetTarget() {
+        String  pat = "fox";
+        String  targ1 = "the foxy brown fox";
+        String  targ2 = "the quick brown fox";
+        
+        int[] match1 = new int[] { 4, 15 };   // expected results
+        int[] match2 = new int[] { 16 };
+
+        StringSearch iter = new StringSearch(pat, new StringCharacterIterator(targ1),
+                                 enColl, null);
+
+        logln("initial text...");
+        doTestCase(iter, match1);
+        assertEqual(iter.getTarget(), targ1);
+        
+        logln("target #2...");
+        iter.setTarget(new StringCharacterIterator(targ2));
+        doTestCase(iter, match2);
+        assertEqual(iter.getTarget(), targ2);
+        
+        logln("back to target #1...");
+        iter.setTarget(new StringCharacterIterator(targ1));
+        doTestCase(iter, match1);
+        assertEqual(iter.getTarget(), targ1);
+    }
+    
+    /**
+     * Test for StringSearch.setStrength
+     */
+    public void TestSetStrength() {
+        String  pat = "fox";
+        String  targ = "the foxy brown Fox";
+        
+        int[] match1 = new int[] { 4, 15 };   // expected results
+        int[] match3 = new int[] { 4 };
+
+        StringSearch iter = new StringSearch(pat, new StringCharacterIterator(targ),
+                                 enColl, null);
+
+       /* logln("Trying primary strength...");
+        iter.setStrength(Collator.PRIMARY);
+        doTestCase(iter, match1);
+        if (iter.getStrength() != Collator.PRIMARY) {
+            errln("ERROR: getStrength: expected PRIMARY, got " + iter.getStrength());
+        } */
+        
+        logln("Trying tertiary strength...");
+        iter.setStrength(Collator.TERTIARY);
+        doTestCase(iter, match3);
+        if (iter.getStrength() != Collator.TERTIARY) {
+            errln("ERROR: getStrength: expected PRIMARY, got " + iter.getStrength());
+        }
+        
+    }
+
+    /**
+     * Test for StringSearch.setCollator
+     */
+    public void TestSetCollator() throws ParseException {
+        // Create a test collator that thinks "o" and "p" are the same thing
+        RuleBasedCollator testColl = new RuleBasedCollator(enColl.getRules()
+                                            + "& o,O ; p,P" );
+                                            
+        String  pat = "fox";
+        String  targ = "fox fpx ";
+        
+        int[] match1 = new int[] { 0 };     // English results
+        int[] match2 = new int[] { 0, 4 };  // Test collator results
+
+        StringSearch iter = new StringSearch(pat, new StringCharacterIterator(targ),
+                                 enColl, null);
+
+        logln("Trying English collator...");
+
+        iter.setStrength(Collator.PRIMARY);
+        doTestCase(iter, match1);
+        if (iter.getCollator() != enColl) {
+            errln("ERROR: getCollator returned wrong collator");
+        }
+        
+        logln("Trying test collator...");
+
+        iter.setCollator(testColl);
+        iter.setStrength(Collator.PRIMARY);
+        doTestCase(iter, match2);
+        if (iter.getCollator() != testColl) {
+            errln("ERROR: getCollator returned wrong collator");
+        }
+        
+        logln("Trying English collator again...");
+
+        iter.setCollator(enColl);
+        iter.setStrength(Collator.PRIMARY);
+        doTestCase(iter, match1);
+        if (iter.getCollator() != enColl) {
+            errln("ERROR: getCollator returned wrong collator");
+        }
+        
+    }
+
+    /**
+     * Test for StringSearch.setPattern
+     */
+    public void TestSetPattern() {
+                      // 01234567890123456789012345678901234567890123456789
+        String target = "The quick brown fox jumps over the lazy foxes";
+        String pat1 = "the";
+        String pat2 = "fox";
+        
+        int[] match1 = new int[] { 0, 31 };
+        int[] match2 = new int[] { 16, 40 };
+
+        StringSearch iter = new StringSearch(pat1, new StringCharacterIterator(target),
+                                 enColl, null);
+        iter.setStrength(Collator.PRIMARY);
+        
+        doTestCase(iter, match1);
+        if (!iter.getPattern().equals(pat1)) {
+            errln("getPattern returned '" + iter.getPattern() + "', expected '"
+                + pat1 + "'");
+        }
+        
+        iter.setPattern(pat2);
+        doTestCase(iter, match2);
+        if (!iter.getPattern().equals(pat2)) {
+            errln("getPattern returned '" + iter.getPattern() + "', expected '"
+                + pat1 + "'");
+        }
+        
+        iter.setPattern(pat1);
+        doTestCase(iter, match1);
+        if (!iter.getPattern().equals(pat1)) {
+            errln("getPattern returned '" + iter.getPattern() + "', expected '"
+                + pat1 + "'");
+        }
+    }
+    
+    /**
+     * Test for an infinite loop that happened when the target text started
+     * with an ignorable character.
+     * Reported by Muly Oved, <mulyoved@netvision.net.il>
+     */
+    public void TestIgnorableLoop() {
+        String pattern = "go";
+        String target  = "  on";
+
+        StringSearch search;
+        
+        try {
+            search=new StringSearch(pattern, new StringCharacterIterator(target), enColl);
+                                                
+            logln("searching... "+pattern);
+            search.first();
+            logln("Will never go here if searching for 'go'");
+        } catch (Exception e) {
+            errln("Caught exception: " + e.toString());
+        }
+
+        logln("end");
+    }
+    
+    //-------------------------------------------------------------------------
+    // Various internal utility methods....
+    //-------------------------------------------------------------------------
+
+    void assertEqual(CharacterIterator i1, String s2) {
+        CharacterIterator i2 = new StringCharacterIterator(s2);
+        char c1 = i1.first();
+        char c2 = i2.first();
+        int i = 0;
+        
+        while (c1 == c2 && c1 != CharacterIterator.DONE) {
+            c1 = i1.next();
+            c2 = i2.next();
+        }
+        if (c1 != CharacterIterator.DONE || c2 != CharacterIterator.DONE) {
+            errln("CharacterIterator mismatch at index " + i);
+        }
+    }
+    
+    void doTestCase(StringSearch iter, int[] expected) {
+        //
+        // The basic logic here is as follows...  We construct a search
+        // iterator and use it to find all of the matches in the target
+        // text.  Then we compare it to the expected matches
+        //
+        Vector matches = new Vector();
+
+        for (int i = iter.first(); i != SearchIterator.DONE; i = iter.next()) {
+            matches.addElement(new Integer(i));
+        }
+        compareMatches(expected, matches);
+        
+        // Now do the same exact thing as above, but in reverse
+        logln("Now searching in reverse...");
+        matches.removeAllElements();
+        for (int i = iter.last(); i != SearchIterator.DONE; i = iter.previous()) {
+            matches.insertElementAt(new Integer(i), 0);
+        }
+        compareMatches(expected, matches);
+    }
+    
+    /**
+     * Utility function used by TestCases to compare the matches that
+     * were found against the ones that were expected
+     */
+    void compareMatches(int[] expected, Vector found) {
+        // Step through the two arrays in parallel and make sure that they're
+        // the same
+        
+        int e=0, f=0;
+        
+        while (e < expected.length && f < found.size()) {
+            int eVal = expected[e];
+            int fVal = ((Integer)found.elementAt(f)).intValue();
+            
+            if (eVal < fVal) {
+                errln("Missed expected match at " + eVal);
+                e++;
+            } else if (eVal > fVal) {
+                errln("Found unexpected match at " + fVal);
+                f++;
+            } else {
+                e++;
+                f++;
+            }
+        }
+        while (e < expected.length) {
+            errln("Missed expected match at " + expected[e]);
+            e++;
+        }
+        while (f < found.size()) {
+            int fVal = ((Integer)found.elementAt(f)).intValue();
+            errln("Found unexpected match at " + fVal);
+            f++;
+        }
+    }
+
+    /**
+     * ICU4J Jitterbug 11
+     */
+    /*
+    Bug to be solved in later release.
+    Commented away for successful testing.
+    TODO.
+    public void TestJ11() {
+        AuxJ11("c", "Scott Ganyo", 1);
+        AuxJ11(" ", "Scott Ganyo", 5);
+    }
+    */
+
+    private void AuxJ11(String pattern, String text, int expectedLoc) {
+        try {
+            StringSearch ss = new StringSearch(pattern, text);
+            ss.setStrength(Collator.PRIMARY);
+            int loc = ss.next();
+            if (loc == expectedLoc) {
+                logln("Ok: StringSearch(\"" + pattern + "\", \"" + text + "\") = " + loc);
+            } else {
+                errln("FAIL: StringSearch(\"" + pattern + "\", \"" + text + "\") = " + loc +
+                      ", expected " + expectedLoc);
+            }
+        } catch (Exception e) {
+            errln("FAIL: StringSearch(\"" + pattern + "\", \"" + text + "\") threw ");
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/src/com/ibm/test/search/package.html b/src/com/ibm/test/search/package.html
new file mode 100755
index 0000000..180e579
--- /dev/null
+++ b/src/com/ibm/test/search/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/search/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:50 $
+-->
+</head>
+<body bgcolor="white">
+Tests for the international search classes.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/test/timezone/TimeZoneBoundaryTest.java b/src/com/ibm/test/timezone/TimeZoneBoundaryTest.java
new file mode 100755
index 0000000..a992d6f
--- /dev/null
+++ b/src/com/ibm/test/timezone/TimeZoneBoundaryTest.java
@@ -0,0 +1,676 @@
+/*
+    @test 1.9 99/06/15
+    @summary test Time Zone Boundary
+*/
+
+package com.ibm.test.timezone;
+import com.ibm.text.*;
+import com.ibm.util.*;
+import com.ibm.test.*;
+import java.util.Date;
+
+/**
+ * A test which discovers the boundaries of DST programmatically and verifies
+ * that they are correct.
+ */
+public class TimeZoneBoundaryTest extends TestFmwk
+{
+    static final int ONE_SECOND = 1000;
+    static final int ONE_MINUTE = 60*ONE_SECOND;
+    static final int ONE_HOUR = 60*ONE_MINUTE;
+    static final long ONE_DAY = 24*ONE_HOUR;
+    static final long ONE_YEAR = (long)(365.25 * ONE_DAY);
+    static final long SIX_MONTHS = ONE_YEAR / 2;
+
+    static final int MONTH_LENGTH[] = {31,29,31,30,31,30,31,31,30,31,30,31};
+
+    // These values are empirically determined to be correct
+    static final long PST_1997_BEG  = 860320800000L;
+    static final long PST_1997_END  = 877856400000L;
+
+    // Minimum interval for binary searches in ms; should be no larger
+    // than 1000.
+    static final long INTERVAL = 10; // Milliseconds
+
+    // [3Jan01 Liu] Updated for 2000f data
+    static final String AUSTRALIA = "Australia/Adelaide";
+    static final long AUSTRALIA_1997_BEG = 877797000000L;
+    static final long AUSTRALIA_1997_END = 859653000000L;
+    
+    public static void main(String[] args) throws Exception {
+        new TimeZoneBoundaryTest().run(args);
+    }
+
+    /**
+     * Date.toString().substring() Boundary Test
+     * Look for a DST changeover to occur within 6 months of the given Date.
+     * The initial Date.toString() should yield a string containing the
+     * startMode as a SUBSTRING.  The boundary will be tested to be
+     * at the expectedBoundary value.
+     */
+    void findDaylightBoundaryUsingDate(Date d, String startMode, long expectedBoundary)
+    {
+        // Given a date with a year start, find the Daylight onset
+        // and end.  The given date should be 1/1/xx in some year.
+
+        if (d.toString().indexOf(startMode) == -1)
+        {
+            logln("Error: " + startMode + " not present in " + d);
+        }
+
+        // Use a binary search, assuming that we have a Standard
+        // time at the midpoint.
+        long min = d.getTime();
+        long max = min + SIX_MONTHS;
+
+        while ((max - min) >  INTERVAL)
+        {
+            long mid = (min + max) >> 1;
+            String s = new Date(mid).toString();
+            // logln(s);
+            if (s.indexOf(startMode) != -1)
+            {
+                min = mid;
+            }
+            else
+            {
+                max = mid;
+            }
+        }
+
+        logln("Date Before: " + showDate(min));
+        logln("Date After:  " + showDate(max));
+        long mindelta = expectedBoundary - min;
+        long maxdelta = max - expectedBoundary;
+        if (mindelta >= 0 && mindelta <= INTERVAL &&
+            mindelta >= 0 && mindelta <= INTERVAL)
+            logln("PASS: Expected boundary at " + expectedBoundary);
+        else
+            errln("FAIL: Expected boundary at " + expectedBoundary);
+    }
+
+    // This test cannot be compiled until the inDaylightTime() method of GregorianCalendar
+    // becomes public.
+    //    static void findDaylightBoundaryUsingCalendar(Date d, boolean startsInDST)
+    //    {
+    //  // Given a date with a year start, find the Daylight onset
+    //  // and end.  The given date should be 1/1/xx in some year.
+    //
+    //  GregorianCalendar cal = new GregorianCalendar();
+    //  cal.setTime(d);
+    //  if (cal.inDaylightTime() != startsInDST)
+    //  {
+    //      logln("Error: inDaylightTime(" + d + ") != " + startsInDST);
+    //  }
+    //
+    //  // Use a binary search, assuming that we have a Standard
+    //  // time at the midpoint.
+    //  long min = d.getTime();
+    //  long max = min + (long)(365.25 / 2 * 24*60*60*1000);
+    //
+    //  while ((max - min) >  INTERVAL)
+    //  {
+    //      long mid = (min + max) >> 1;
+    //      cal.setTime(new Date(mid));
+    //      if (cal.inDaylightTime() == startsInDST)
+    //      {
+    //      min = mid;
+    //      }
+    //      else
+    //      {
+    //      max = mid;
+    //      }
+    //  }
+    //
+    //  logln("Calendar Before: " + showDate(min));
+    //  logln("Calendar After:  " + showDate(max));
+    //    }
+
+    void findDaylightBoundaryUsingTimeZone(Date d, boolean startsInDST, long expectedBoundary)
+    {
+        findDaylightBoundaryUsingTimeZone(d, startsInDST, expectedBoundary,
+                                          TimeZone.getDefault());
+    }
+
+    void findDaylightBoundaryUsingTimeZone(Date d, boolean startsInDST,
+                                           long expectedBoundary, TimeZone tz)
+    {
+        // Given a date with a year start, find the Daylight onset
+        // and end.  The given date should be 1/1/xx in some year.
+
+        // Use a binary search, assuming that we have a Standard
+        // time at the midpoint.
+        long min = d.getTime();
+        long max = min + SIX_MONTHS;
+
+        if (tz.inDaylightTime(d) != startsInDST)
+        {
+            errln("FAIL: " + tz.getID() + " inDaylightTime(" +
+                  d + ") != " + startsInDST);
+            startsInDST = !startsInDST; // Flip over; find the apparent value
+        }
+
+        if (tz.inDaylightTime(new Date(max)) == startsInDST)
+        {
+            errln("FAIL: " + tz.getID() + " inDaylightTime(" +
+                  (new Date(max)) + ") != " + (!startsInDST));
+            return;
+        }
+
+        while ((max - min) >  INTERVAL)
+        {
+            long mid = (min + max) >> 1;
+            boolean isIn = tz.inDaylightTime(new Date(mid));
+            if (isIn == startsInDST)
+            {
+                min = mid;
+            }
+            else
+            {
+                max = mid;
+            }
+        }
+
+        logln(tz.getID() + " Before: " + showDate(min, tz));
+        logln(tz.getID() + " After:  " + showDate(max, tz));
+
+        long mindelta = expectedBoundary - min;
+        long maxdelta = max - expectedBoundary; 
+        DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
+        fmt.setTimeZone(tz);
+        if (mindelta >= 0 && mindelta <= INTERVAL &&
+            mindelta >= 0 && mindelta <= INTERVAL)
+            logln("PASS: Expected boundary at " + expectedBoundary + " = " + fmt.format(new Date(expectedBoundary)));
+        else
+            errln("FAIL: Expected boundary at " + expectedBoundary + " = " + fmt.format(new Date(expectedBoundary)));
+    }
+
+    private static String showDate(long l)
+    {
+        return showDate(new Date(l));
+    }
+
+    private static String showDate(Date d)
+    {
+        return "" + d.getYear() + "/" + showNN(d.getMonth()+1) + "/" + showNN(d.getDate()) +
+            " " + showNN(d.getHours()) + ":" + showNN(d.getMinutes()) +
+            " \"" + d + "\" = " +
+            d.getTime();
+    }
+
+    private static String showDate(long l, TimeZone z)
+    {
+        return showDate(new Date(l), z);
+    }
+
+    private static String showDate(Date d, TimeZone zone)
+    {
+        DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
+        fmt.setTimeZone(zone);
+        return "" + d.getYear() + "/" + showNN(d.getMonth()+1) + "/" + showNN(d.getDate()) +
+            " " + showNN(d.getHours()) + ":" + showNN(d.getMinutes()) +
+            " \"" + d + "\" = " +
+            fmt.format(d) + " = " + d.getTime();
+    }
+
+    private static String showNN(int n)
+    {
+        return ((n < 10) ? "0" : "") + n;
+    }
+
+    /**
+     * Given a date, a TimeZone, and expected values for inDaylightTime,
+     * useDaylightTime, zone and DST offset, verify that this is the case.
+     */
+    void verifyDST(Date d, TimeZone time_zone,
+                   boolean expUseDaylightTime, boolean expInDaylightTime,
+                   int expZoneOffset, int expDSTOffset)
+    {
+        logln("-- Verifying time " + d +
+              " in zone " + time_zone.getID());
+
+        if (time_zone.inDaylightTime(d) == expInDaylightTime)
+            logln("PASS: inDaylightTime = " + time_zone.inDaylightTime(d));
+        else
+            errln("FAIL: inDaylightTime = " + time_zone.inDaylightTime(d));
+
+        if (time_zone.useDaylightTime() == expUseDaylightTime)
+            logln("PASS: useDaylightTime = " + time_zone.useDaylightTime());
+        else
+            errln("FAIL: useDaylightTime = " + time_zone.useDaylightTime());
+
+        if (time_zone.getRawOffset() == expZoneOffset)
+            logln("PASS: getRawOffset() = " + expZoneOffset/(double)ONE_HOUR);
+        else
+            errln("FAIL: getRawOffset() = " + time_zone.getRawOffset()/(double)ONE_HOUR +
+                  "; expected " + expZoneOffset/(double)ONE_HOUR);
+
+        GregorianCalendar gc = new GregorianCalendar(time_zone);
+        gc.setTime(d);
+        int offset = time_zone.getOffset(gc.get(gc.ERA), gc.get(gc.YEAR), gc.get(gc.MONTH),
+                                         gc.get(gc.DAY_OF_MONTH), gc.get(gc.DAY_OF_WEEK),
+                                         ((gc.get(gc.HOUR_OF_DAY) * 60 +
+                                           gc.get(gc.MINUTE)) * 60 +
+                                          gc.get(gc.SECOND)) * 1000 +
+                                         gc.get(gc.MILLISECOND));
+        if (offset == expDSTOffset)
+            logln("PASS: getOffset() = " + offset/(double)ONE_HOUR);
+        else
+            errln("FAIL: getOffset() = " + offset/(double)ONE_HOUR +
+                  "; expected " + expDSTOffset/(double)ONE_HOUR);
+    }
+
+    public void TestBoundaries()
+    {
+        TimeZone pst = TimeZone.getTimeZone("PST");
+        TimeZone save = TimeZone.getDefault();
+        try {
+            TimeZone.setDefault(pst);
+
+            // DST changeover for PST is 4/6/1997 at 2 hours past midnight
+            Date d = new Date(97,Calendar.APRIL,6);
+
+            // i is minutes past midnight standard time
+            for (int i=60; i<=180; i+=15)
+            {
+                boolean inDST = (i >= 120);
+                Date e = new Date(d.getTime() + i*60*1000);
+                verifyDST(e, pst, true, inDST, -8*ONE_HOUR,
+                          inDST ? -7*ONE_HOUR : -8*ONE_HOUR);
+            }
+        } finally {
+            TimeZone.setDefault(save);
+        }
+
+        if (true)
+        {
+            // This only works in PST/PDT
+            TimeZone.setDefault(TimeZone.getTimeZone("PST"));
+            logln("========================================");
+            findDaylightBoundaryUsingDate(new Date(97,0,1), "PST", PST_1997_BEG);
+            logln("========================================");
+            findDaylightBoundaryUsingDate(new Date(97,6,1), "PDT", PST_1997_END);
+        }
+
+        //  if (true)
+        //  {
+        //      logln("========================================");
+        //      findDaylightBoundaryUsingCalendar(new Date(97,0,1), false);
+        //      logln("========================================");
+        //      findDaylightBoundaryUsingCalendar(new Date(97,6,1), true);
+        //  }
+
+        if (true)
+        {
+            // Southern hemisphere test
+            logln("========================================");
+            TimeZone z = TimeZone.getTimeZone(AUSTRALIA);
+            findDaylightBoundaryUsingTimeZone(new Date(97,0,1), true, AUSTRALIA_1997_END, z);
+            logln("========================================");
+            findDaylightBoundaryUsingTimeZone(new Date(97,6,1), false, AUSTRALIA_1997_BEG, z);
+        }
+
+        if (true)
+        {
+            logln("========================================");
+            findDaylightBoundaryUsingTimeZone(new Date(97,0,1), false, PST_1997_BEG);
+            logln("========================================");
+            findDaylightBoundaryUsingTimeZone(new Date(97,6,1), true, PST_1997_END);
+        }
+
+        // This just shows the offset for April 4-7 in 1997.  This is redundant
+        // with a test above, so we disable it.
+        if (false)
+        {
+            TimeZone z = TimeZone.getDefault();
+            logln(z.getOffset(1, 97, 3, 4, 6, 0) + " " + new Date(97, 3, 4));
+            logln(z.getOffset(1, 97, 3, 5, 7, 0) + " " + new Date(97, 3, 5));
+            logln(z.getOffset(1, 97, 3, 6, 1, 0) + " " + new Date(97, 3, 6));
+            logln(z.getOffset(1, 97, 3, 7, 2, 0) + " " + new Date(97, 3, 7));
+        }
+    }
+
+
+    //----------------------------------------------------------------------
+    // Can't do any of these without a public inDaylightTime in GC
+    //----------------------------------------------------------------------
+
+
+    //    static GregorianCalendar cal = new GregorianCalendar();
+    //
+    //    static void _testUsingBinarySearch(Date d, boolean startsInDST)
+    //    {
+    //  // Given a date with a year start, find the Daylight onset
+    //  // and end.  The given date should be 1/1/xx in some year.
+    //
+    //  // Use a binary search, assuming that we have a Standard
+    //  // time at the midpoint.
+    //  long min = d.getTime();
+    //  long max = min + (long)(365.25 / 2 * ONE_DAY);
+    //
+    //  // First check the max
+    //  cal.setTime(new Date(max));
+    //  if (cal.inDaylightTime() == startsInDST)
+    //  {
+    //      logln("Error: inDaylightTime(" + (new Date(max)) + ") != " + (!startsInDST));
+    //  }
+    //
+    //  cal.setTime(d);
+    //  if (cal.inDaylightTime() != startsInDST)
+    //  {
+    //      logln("Error: inDaylightTime(" + d + ") != " + startsInDST);
+    //  }
+    //
+    //  while ((max - min) >  INTERVAL)
+    //  {
+    //      long mid = (min + max) >> 1;
+    //      cal.setTime(new Date(mid));
+    //      if (cal.inDaylightTime() == startsInDST)
+    //      {
+    //      min = mid;
+    //      }
+    //      else
+    //      {
+    //      max = mid;
+    //      }
+    //  }
+    //
+    //  logln("Binary Search Before: " + showDate(min));
+    //  logln("Binary Search After:  " + showDate(max));
+    //    }
+    //
+    //    static void _testUsingMillis(Date d, boolean startsInDST)
+    //    {
+    //  long millis = d.getTime();
+    //  long max = millis + (long)(370 * ONE_DAY); // A year plus extra
+    //
+    //  boolean lastDST = startsInDST;
+    //  while (millis < max)
+    //  {
+    //      cal.setTime(new Date(millis));
+    //      boolean inDaylight = cal.inDaylightTime();
+    //
+    //      if (inDaylight != lastDST)
+    //      {
+    //      logln("Switch " + (inDaylight ? "into" : "out of")
+    //                 + " DST at " + (new Date(millis)));
+    //      lastDST = inDaylight;
+    //      }
+    //
+    //      millis += 15*ONE_MINUTE;
+    //  }
+    //    }
+    //
+    //    static void _testUsingFields(int y, boolean startsInDST)
+    //    {
+    //  boolean lastDST = startsInDST;
+    //  for (int m = 0; m < 12; ++m)
+    //  {
+    //      for (int d = 1; d <= MONTH_LENGTH[m]; ++d)
+    //      {
+    //      for (int h = 0; h < 24; ++h)
+    //      {
+    //          for (int min = 0; min < 60; min += 15)
+    //          {
+    //          cal.clear();
+    //          cal.set(y, m, d, h, min);
+    //          boolean inDaylight = cal.inDaylightTime();
+    //          if (inDaylight != lastDST)
+    //          {
+    //              lastDST = inDaylight;
+    //              log("Switch " + (lastDST ? "into" : "out of")
+    //                       + " DST at " + y + "/" + (m+1) + "/" + d
+    //                       + " " + showNN(h) + ":" + showNN(min));
+    //              logln(" " + cal.getTime());
+    //
+    //              cal.set(y, m, d, h-1, 45);
+    //              log("Before = "
+    //+ y + "/" + (m+1) + "/" + d
+    //+ " " + showNN(h-1) + ":" + showNN(45));
+    //              logln(" " + cal.getTime());
+    //          }
+    //          }
+    //      }
+    //      }
+    //  }
+    //    }
+    //
+    //    public void Test1()
+    //    {
+    //  logln(Locale.getDefault().getDisplayName());
+    //  logln(TimeZone.getDefault().getID());
+    //  logln(new Date(0));
+    //
+    //  if (true)
+    //  {
+    //      logln("========================================");
+    //      _testUsingBinarySearch(new Date(97,0,1), false);
+    //      logln("========================================");
+    //      _testUsingBinarySearch(new Date(97,6,1), true);
+    //  }
+    //
+    //  if (true)
+    //  {
+    //      logln("========================================");
+    //      logln("Stepping using millis");
+    //      _testUsingMillis(new Date(97,0,1), false);
+    //  }
+    //
+    //  if (true)
+    //  {
+    //      logln("========================================");
+    //      logln("Stepping using fields");
+    //      _testUsingFields(1997, false);
+    //  }
+    //
+    //  if (false)
+    //  {
+    //      cal.clear();
+    //      cal.set(1997, 3, 5, 10, 0);
+    //      //  cal.inDaylightTime();
+    //      logln("Date = " + cal.getTime());
+    //      logln("Millis = " + cal.getTime().getTime()/3600000);
+    //  }
+    //    }
+
+    //----------------------------------------------------------------------
+    //----------------------------------------------------------------------
+    //----------------------------------------------------------------------
+
+    void _testUsingBinarySearch(SimpleTimeZone tz, Date d, long expectedBoundary)
+    {
+        // Given a date with a year start, find the Daylight onset
+        // and end.  The given date should be 1/1/xx in some year.
+
+        // Use a binary search, assuming that we have a Standard
+        // time at the midpoint.
+        long min = d.getTime();
+        long max = min + (long)(365.25 / 2 * ONE_DAY);
+
+        // First check the boundaries
+        boolean startsInDST = tz.inDaylightTime(d);
+
+        if (tz.inDaylightTime(new Date(max)) == startsInDST)
+        {
+            logln("Error: inDaylightTime(" + (new Date(max)) + ") != " + (!startsInDST));
+        }
+
+        while ((max - min) >  INTERVAL)
+        {
+            long mid = (min + max) >> 1;
+            if (tz.inDaylightTime(new Date(mid)) == startsInDST)
+            {
+                min = mid;
+            }
+            else
+            {
+                max = mid;
+            }
+        }
+
+        logln("Binary Search Before: " + showDate(min));
+        logln("Binary Search After:  " + showDate(max));
+
+        long mindelta = expectedBoundary - min;
+        long maxdelta = max - expectedBoundary;
+        if (mindelta >= 0 && mindelta <= INTERVAL &&
+            mindelta >= 0 && mindelta <= INTERVAL)
+            logln("PASS: Expected boundary at " + expectedBoundary);
+        else
+            errln("FAIL: Expected boundary at " + expectedBoundary);
+    }
+
+    /*
+      static void _testUsingMillis(Date d, boolean startsInDST)
+      {
+      long millis = d.getTime();
+      long max = millis + (long)(370 * ONE_DAY); // A year plus extra
+
+      boolean lastDST = startsInDST;
+      while (millis < max)
+      {
+      cal.setTime(new Date(millis));
+      boolean inDaylight = cal.inDaylightTime();
+
+      if (inDaylight != lastDST)
+      {
+      logln("Switch " + (inDaylight ? "into" : "out of")
+      + " DST at " + (new Date(millis)));
+      lastDST = inDaylight;
+      }
+
+      millis += 15*ONE_MINUTE;
+      }
+      }
+      */
+
+    /**
+     * Test new rule formats.
+     */
+    public void TestNewRules()
+    {
+        //logln(Locale.getDefault().getDisplayName());
+        //logln(TimeZone.getDefault().getID());
+        //logln(new Date(0));
+
+        if (true)
+        {
+            // Doesn't matter what the default TimeZone is here, since we
+            // are creating our own TimeZone objects.
+
+            SimpleTimeZone tz;
+
+            logln("-----------------------------------------------------------------");
+            logln("Aug 2ndTues .. Mar 15");
+            tz = new SimpleTimeZone(-8*ONE_HOUR, "Test_1",
+                                    Calendar.AUGUST, 2, Calendar.TUESDAY, 2*ONE_HOUR,
+                                    Calendar.MARCH, 15, 0, 2*ONE_HOUR);
+            //logln(tz.toString());
+            logln("========================================");
+            _testUsingBinarySearch(tz, new Date(97,0,1), 858416400000L);
+            logln("========================================");
+            _testUsingBinarySearch(tz, new Date(97,6,1), 871380000000L);
+
+            logln("-----------------------------------------------------------------");
+            logln("Apr Wed>=14 .. Sep Sun<=20");
+            tz = new SimpleTimeZone(-8*ONE_HOUR, "Test_2",
+                                    Calendar.APRIL, 14, -Calendar.WEDNESDAY, 2*ONE_HOUR,
+                                    Calendar.SEPTEMBER, -20, -Calendar.SUNDAY, 2*ONE_HOUR);
+            //logln(tz.toString());
+            logln("========================================");
+            _testUsingBinarySearch(tz, new Date(97,0,1), 861184800000L);
+            logln("========================================");
+            _testUsingBinarySearch(tz, new Date(97,6,1), 874227600000L);
+        }
+
+        /*
+          if (true)
+          {
+          logln("========================================");
+          logln("Stepping using millis");
+          _testUsingMillis(new Date(97,0,1), false);
+          }
+
+          if (true)
+          {
+          logln("========================================");
+          logln("Stepping using fields");
+          _testUsingFields(1997, false);
+          }
+
+          if (false)
+          {
+          cal.clear();
+          cal.set(1997, 3, 5, 10, 0);
+          //    cal.inDaylightTime();
+          logln("Date = " + cal.getTime());
+          logln("Millis = " + cal.getTime().getTime()/3600000);
+          }
+          */
+    }
+
+    //----------------------------------------------------------------------
+    //----------------------------------------------------------------------
+    //----------------------------------------------------------------------
+    // Long Bug
+    //----------------------------------------------------------------------
+    //----------------------------------------------------------------------
+    //----------------------------------------------------------------------
+
+    //public void Test3()
+    //{
+    //    findDaylightBoundaryUsingTimeZone(new Date(97,6,1), true);
+    //}
+
+    /**
+     * Find boundaries by stepping.
+     */
+    void findBoundariesStepwise(int year, long interval, TimeZone z, int expectedChanges)
+    {
+        Date d = new Date(year - 1900, Calendar.JANUARY, 1);
+        long time = d.getTime(); // ms
+        long limit = time + ONE_YEAR + ONE_DAY;
+        boolean lastState = z.inDaylightTime(d);
+        int changes = 0;
+        logln("-- Zone " + z.getID() + " starts in " + year + " with DST = " + lastState);
+        logln("useDaylightTime = " + z.useDaylightTime());
+        while (time < limit)
+        {
+            d.setTime(time);
+            boolean state = z.inDaylightTime(d);
+            if (state != lastState)
+            {
+                logln((state ? "Entry " : "Exit ") +
+                      "at " + d);
+                lastState = state;
+                ++changes;
+            }
+            time += interval;
+        }
+        if (changes == 0)
+        {
+            if (!lastState && !z.useDaylightTime()) logln("No DST");
+            else errln("FAIL: DST all year, or no DST with true useDaylightTime");
+        }
+        else if (changes != 2)
+        {
+            errln("FAIL: " + changes + " changes seen; should see 0 or 2");
+        }
+        else if (!z.useDaylightTime())
+        {
+            errln("FAIL: useDaylightTime false but 2 changes seen");
+        }
+        if (changes != expectedChanges)
+        {
+            errln("FAIL: " + changes + " changes seen; expected " + expectedChanges);
+        }
+    }
+
+    public void TestStepwise()
+    {
+        findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("EST"), 2);
+        findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("ACT"), 2); // Updated 3Jan01
+        findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("America/Phoenix"), 0); // Added 3Jan01
+        findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone(AUSTRALIA), 2);
+    }
+}
diff --git a/src/com/ibm/test/timezone/TimeZoneRegression.java b/src/com/ibm/test/timezone/TimeZoneRegression.java
new file mode 100755
index 0000000..75c1d79
--- /dev/null
+++ b/src/com/ibm/test/timezone/TimeZoneRegression.java
@@ -0,0 +1,900 @@
+/**
+ * @test 1.18 99/09/21
+ * @bug 4052967 4073209 4073215 4084933 4096952 4109314 4126678 4151406 4151429
+ * @bug 4154525 4154537 4154542 4154650 4159922 4162593 4173604 4176686 4184229 4208960
+ */
+
+package com.ibm.test.timezone;
+import com.ibm.util.*;
+import java.io.*;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import java.util.Date;
+import java.util.Locale;
+
+public class TimeZoneRegression extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new TimeZoneRegression().run(args);
+    }
+
+    public void Test4052967() {
+        logln("*** CHECK TIMEZONE AGAINST HOST OS SETTING ***");
+	String id = TimeZone.getDefault().getID();
+        logln("user.timezone: " + System.getProperty("user.timezone", "<not set>"));
+	logln("TimeZone.getDefault().getID(): " + id);
+        logln(new Date().toString());
+        logln("*** THE RESULTS OF THIS TEST MUST BE VERIFIED MANUALLY ***");
+    }
+
+    public void Test4073209() {
+        TimeZone z1 = TimeZone.getTimeZone("PST");
+        TimeZone z2 = TimeZone.getTimeZone("PST");
+        if (z1 == z2) errln("Fail: TimeZone should return clones");
+    }
+
+    public void Test4073215() {
+        SimpleTimeZone z = (SimpleTimeZone) TimeZone.getTimeZone("GMT");
+        if (z.useDaylightTime())
+            errln("Fail: Fix test to start with non-DST zone");
+        z.setStartRule(Calendar.FEBRUARY, 1, Calendar.SUNDAY, 0);
+        z.setEndRule(Calendar.MARCH, -1, Calendar.SUNDAY, 0);
+        if (!z.useDaylightTime())
+            errln("Fail: DST not active");
+        if (z.inDaylightTime(new Date(97, Calendar.JANUARY, 31)) ||
+            !z.inDaylightTime(new Date(97, Calendar.MARCH, 1)) ||
+            z.inDaylightTime(new Date(97, Calendar.MARCH, 31))) {
+            errln("Fail: DST not working as expected");
+        }
+    }
+
+    /**
+     * The expected behavior of TimeZone around the boundaries is:
+     * (Assume transition time of 2:00 AM)
+     *    day of onset 1:59 AM STD  = display name 1:59 AM ST
+     *                 2:00 AM STD  = display name 3:00 AM DT
+     *    day of end   0:59 AM STD  = display name 1:59 AM DT
+     *                 1:00 AM STD  = display name 1:00 AM ST
+     */
+    public void Test4084933() {
+        TimeZone tz = TimeZone.getTimeZone("PST");
+
+        long offset1 = tz.getOffset(1,
+            1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (2*60*60*1000));
+        long offset2 = tz.getOffset(1,
+            1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (2*60*60*1000)-1);
+
+        long offset3 = tz.getOffset(1,
+            1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (1*60*60*1000));
+        long offset4 = tz.getOffset(1,
+            1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (1*60*60*1000)-1);
+
+        /*
+         *  The following was added just for consistency.  It shows that going *to* Daylight
+         *  Savings Time (PDT) does work at 2am.
+         */
+
+        long offset5 = tz.getOffset(1,
+            1997, Calendar.APRIL, 6, Calendar.SUNDAY, (2*60*60*1000));
+        long offset6 = tz.getOffset(1,
+            1997, Calendar.APRIL, 6, Calendar.SUNDAY, (2*60*60*1000)-1);
+
+        long offset7 = tz.getOffset(1,
+            1997, Calendar.APRIL, 6, Calendar.SUNDAY, (1*60*60*1000));
+        long offset8 = tz.getOffset(1,
+            1997, Calendar.APRIL, 6, Calendar.SUNDAY, (1*60*60*1000)-1);
+
+        long SToffset = -8 * 60*60*1000L;
+        long DToffset = -7 * 60*60*1000L;
+        if (offset1 != SToffset || offset2 != SToffset ||
+            offset3 != SToffset || offset4 != DToffset ||
+            offset5 != DToffset || offset6 != SToffset ||
+            offset7 != SToffset || offset8 != SToffset)
+            errln("Fail: TimeZone misbehaving");
+    }
+
+    public void Test4096952() {
+        String[] ZONES = { "GMT", "MET", "IST" };
+        boolean pass = true;
+        try {
+            for (int i=0; i<ZONES.length; ++i) {
+                TimeZone zone = TimeZone.getTimeZone(ZONES[i]);
+                if (!zone.getID().equals(ZONES[i]))
+                    errln("Fail: Test broken; zones not instantiating");
+
+                ByteArrayOutputStream baos;
+                ObjectOutputStream ostream =
+                    new ObjectOutputStream(baos = new 
+                                           ByteArrayOutputStream());
+                ostream.writeObject(zone);
+                ostream.close();
+                baos.close();
+                ObjectInputStream istream =
+                    new ObjectInputStream(new 
+                                          ByteArrayInputStream(baos.toByteArray()));
+                TimeZone frankenZone = (TimeZone) istream.readObject();
+                //logln("Zone:        " + zone);
+                //logln("FrankenZone: " + frankenZone);
+                if (!zone.equals(frankenZone)) {
+                    logln("TimeZone " + zone.getID() +
+                          " not equal to serialized/deserialized one");
+                    pass = false;
+                }
+            }
+            if (!pass) errln("Fail: TimeZone serialization/equality bug");
+        }
+        catch (IOException e) {
+            errln("Fail: " + e);
+            e.printStackTrace();
+        }
+        catch (ClassNotFoundException e) {
+            errln("Fail: " + e);
+            e.printStackTrace();
+        }
+    }
+
+    public void Test4109314() {
+        GregorianCalendar testCal = (GregorianCalendar)Calendar.getInstance(); 
+        TimeZone PST = TimeZone.getTimeZone("PST");
+        Object[] testData = {
+            PST, new Date(98,Calendar.APRIL,4,22,0), new Date(98, Calendar.APRIL, 5,6,0),
+            PST, new Date(98,Calendar.OCTOBER,24,22,0), new Date(98,Calendar.OCTOBER,25,6,0),
+        };
+        boolean pass=true;
+        for (int i=0; i<testData.length; i+=3) {
+            testCal.setTimeZone((TimeZone) testData[i]);
+            long t = ((Date)testData[i+1]).getTime();
+            Date end = (Date) testData[i+2];
+            while (t < end.getTime()) { 
+                testCal.setTime(new Date(t));
+                if (!checkCalendar314(testCal, (TimeZone) testData[i]))
+                    pass = false;
+                t += 60*60*1000L;
+            } 
+        }
+        if (!pass) errln("Fail: TZ API inconsistent");
+    } 
+
+    boolean checkCalendar314(GregorianCalendar testCal, TimeZone testTZ) { 
+        // GregorianCalendar testCal = (GregorianCalendar)aCal.clone(); 
+
+        final int ONE_DAY = 24*60*60*1000;
+
+        int tzOffset, tzRawOffset; 
+        Float tzOffsetFloat,tzRawOffsetFloat; 
+        // Here is where the user made an error.  They were passing in the value of
+        // the MILLSECOND field; you need to pass in the millis in the day in STANDARD
+        // time.
+        int millis = testCal.get(Calendar.MILLISECOND) +
+            1000 * (testCal.get(Calendar.SECOND) +
+                    60 * (testCal.get(Calendar.MINUTE) +
+                          60 * (testCal.get(Calendar.HOUR_OF_DAY)))) -
+            testCal.get(Calendar.DST_OFFSET);
+
+        /* Fix up millis to be in range.  ASSUME THAT WE ARE NOT AT THE
+         * BEGINNING OR END OF A MONTH.  We must add this code because
+         * getOffset() has been changed to be more strict about the parameters
+         * it receives -- it turns out that this test was passing in illegal
+         * values. */
+        int date = testCal.get(Calendar.DATE);
+        int dow  = testCal.get(Calendar.DAY_OF_WEEK);
+        while (millis < 0) {
+            millis += ONE_DAY;
+            --date;
+            dow = Calendar.SUNDAY + ((dow - Calendar.SUNDAY + 6) % 7);
+        }
+        while (millis >= ONE_DAY) {
+            millis -= ONE_DAY;
+            ++date;
+            dow = Calendar.SUNDAY + ((dow - Calendar.SUNDAY + 1) % 7);
+        }
+
+        tzOffset = testTZ.getOffset(testCal.get(Calendar.ERA), 
+                                    testCal.get(Calendar.YEAR), 
+                                    testCal.get(Calendar.MONTH), 
+                                    date, 
+                                    dow, 
+                                    millis); 
+        tzRawOffset = testTZ.getRawOffset(); 
+        tzOffsetFloat = new Float((float)tzOffset/(float)3600000); 
+        tzRawOffsetFloat = new Float((float)tzRawOffset/(float)3600000); 
+
+        Date testDate = testCal.getTime(); 
+
+        boolean inDaylightTime = testTZ.inDaylightTime(testDate); 
+        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm"); 
+        sdf.setCalendar(testCal); 
+        String inDaylightTimeString; 
+
+        boolean passed; 
+
+        if (inDaylightTime) 
+        { 
+            inDaylightTimeString = " DST "; 
+            passed = (tzOffset == (tzRawOffset + 3600000));
+        } 
+        else 
+        { 
+            inDaylightTimeString = "     "; 
+            passed = (tzOffset == tzRawOffset);
+        } 
+
+        String output = testTZ.getID() + " " + sdf.format(testDate) +
+            " Offset(" + tzOffsetFloat + ")" +
+            " RawOffset(" + tzRawOffsetFloat + ")" + 
+            " " + millis/(float)3600000 + " " +
+            inDaylightTimeString; 
+
+        if (passed) 
+            output += "     "; 
+        else 
+            output += "ERROR"; 
+
+        if (passed) logln(output); else errln(output);
+        return passed;
+    } 
+
+    /**
+     * CANNOT REPRODUDE
+     *
+     * Yet another _alleged_ bug in TimeZone.getOffset(), a method that never
+     * should have been made public.  It's simply too hard to use correctly.
+     *
+     * The original test code failed to do the following:
+     * (1) Call Calendar.setTime() before getting the fields!
+     * (2) Use the right millis (as usual) for getOffset(); they were passing
+     *     in the MILLIS field, instead of the STANDARD MILLIS IN DAY.
+     * When you fix these two problems, the test passes, as expected.
+     */
+    public void Test4126678() {
+	// Note: this test depends on the PST time zone.
+	TimeZone initialZone = TimeZone.getDefault();
+        Calendar cal = Calendar.getInstance();
+        TimeZone tz = TimeZone.getTimeZone("PST");
+	TimeZone.setDefault(tz);
+        cal.setTimeZone(tz);
+
+        Date dt = new Date(1998-1900, Calendar.APRIL, 5, 10, 0);
+	// the dt value is local time in PST.
+        if (!tz.inDaylightTime(dt))
+            errln("We're not in Daylight Savings Time and we should be.\n");
+
+        cal.setTime(dt);
+        int era = cal.get(Calendar.ERA);
+        int year = cal.get(Calendar.YEAR);
+        int month = cal.get(Calendar.MONTH);
+        int day = cal.get(Calendar.DATE);
+        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
+        int millis = cal.get(Calendar.MILLISECOND) +
+            (cal.get(Calendar.SECOND) +
+             (cal.get(Calendar.MINUTE) +
+              (cal.get(Calendar.HOUR) * 60) * 60) * 1000) -
+            cal.get(Calendar.DST_OFFSET);
+
+        long offset = tz.getOffset(era, year, month, day, dayOfWeek, millis);
+        long raw_offset = tz.getRawOffset();
+        if (offset == raw_offset)
+            errln("Offsets should not match when in DST");
+
+	// restore the initial time zone so that this test case
+	// doesn't affect the others.
+	TimeZone.setDefault(initialZone);
+    }
+    
+    /**
+     * TimeZone.getAvailableIDs(int) throws exception for certain values,
+     * due to a faulty constant in TimeZone.java.
+     */
+    public void Test4151406() {
+        int max = 0;
+        for (int h=-28; h<=30; ++h) {
+            // h is in half-hours from GMT; rawoffset is in millis
+            int rawoffset = h * 1800000;
+            int hh = (h<0) ? -h : h;
+            String hname = ((h<0) ? "GMT-" : "GMT+") +
+                ((hh/2 < 10) ? "0" : "") +
+                (hh/2) + ':' +
+                ((hh%2==0) ? "00" : "30");
+            try {
+                String[] ids = TimeZone.getAvailableIDs(rawoffset);
+                if (ids.length > max) max = ids.length;
+                logln(hname + ' ' + ids.length +
+                      ((ids.length > 0) ? (" e.g. " + ids[0]) : ""));
+            } catch (Exception e) {
+                errln(hname + ' ' + "Fail: " + e);
+            }
+        }
+        logln("Maximum zones per offset = " + max);
+    }
+
+    public void Test4151429() {
+        try {
+            TimeZone tz = TimeZone.getTimeZone("GMT");
+            String name = tz.getDisplayName(true, Integer.MAX_VALUE,
+                                            Locale.getDefault());
+            errln("IllegalArgumentException not thrown by TimeZone.getDisplayName()");
+        } catch(IllegalArgumentException e) {}
+    }
+
+    /**
+     * SimpleTimeZone accepts illegal DST savings values.  These values
+     * must be non-zero.  There is no upper limit at this time.
+     */
+    public void Test4154525() {
+        final int GOOD = 1, BAD = 0;
+        int[] DATA = {
+            1, GOOD,
+            0, BAD,
+            -1, BAD,
+            60*60*1000, GOOD,
+            Integer.MIN_VALUE, BAD,
+            // Integer.MAX_VALUE, ?, // no upper limit on DST savings at this time
+        };
+        for (int i=0; i<DATA.length; i+=2) {
+            int savings = DATA[i];
+            boolean valid = DATA[i+1] == GOOD;
+            String method = null;
+            for (int j=0; j<2; ++j) {
+                try {
+                    switch (j) {
+                    case 0:
+                        method = "constructor";
+                        SimpleTimeZone z = new SimpleTimeZone(0, "id",
+                            Calendar.JANUARY, 1, 0, 0,
+                            Calendar.MARCH, 1, 0, 0,
+                            savings); // <- what we're interested in
+                        break;
+                    case 1:
+                        method = "setDSTSavings()";
+                        z = new SimpleTimeZone(0, "GMT");
+                        z.setDSTSavings(savings);
+                        break;
+                    }
+                    if (valid) {
+                        logln("Pass: DST savings of " + savings + " accepted by " + method);
+                    } else {
+                        errln("Fail: DST savings of " + savings + " accepted by " + method);
+                    }
+                } catch (IllegalArgumentException e) {
+                    if (valid) {
+                        errln("Fail: DST savings of " + savings + " to " + method + " gave " + e);
+                    } else {
+                        logln("Pass: DST savings of " + savings + " to " + method + " gave " + e);
+                    }               
+                }
+            }
+        }
+    }
+
+    /**
+     * SimpleTimeZone.hasSameRules() doesn't work for zones with no DST
+     * and different DST parameters.
+     */
+    public void Test4154537() {
+        // tz1 and tz2 have no DST and different rule parameters
+        SimpleTimeZone tz1 = new SimpleTimeZone(0, "1", 0, 0, 0, 0, 2, 0, 0, 0);
+        SimpleTimeZone tz2 = new SimpleTimeZone(0, "2", 1, 0, 0, 0, 3, 0, 0, 0);
+        // tza and tzA have the same rule params
+        SimpleTimeZone tza = new SimpleTimeZone(0, "a", 0, 1, 0, 0, 3, 2, 0, 0);
+        SimpleTimeZone tzA = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 3, 2, 0, 0);
+        // tzb differs from tza
+        SimpleTimeZone tzb = new SimpleTimeZone(0, "b", 0, 1, 0, 0, 3, 1, 0, 0);
+        if (tz1.useDaylightTime() || tz2.useDaylightTime() ||
+            !tza.useDaylightTime() || !tzA.useDaylightTime() ||
+            !tzb.useDaylightTime()) {
+            errln("Test is broken -- rewrite it");
+        }
+        if (!tza.hasSameRules(tzA) || tza.hasSameRules(tzb)) {
+            errln("Fail: hasSameRules() broken for zones with rules");
+        }
+        if (!tz1.hasSameRules(tz2)) {
+            errln("Fail: hasSameRules() returns false for zones without rules");
+            errln("zone 1 = " + tz1);
+            errln("zone 2 = " + tz2);
+        }
+    }
+
+    /**
+     * SimpleTimeZone constructors, setStartRule(), and setEndRule() don't
+     * check for out-of-range arguments.
+     */
+    public void Test4154542() {
+        final int GOOD = 1;
+        final int BAD  = 0;
+
+        final int GOOD_MONTH       = Calendar.JANUARY;
+        final int GOOD_DAY         = 1;
+        final int GOOD_DAY_OF_WEEK = Calendar.SUNDAY;
+        final int GOOD_TIME        = 0;
+
+        int[] DATA = {
+            GOOD, Integer.MIN_VALUE,    0,  Integer.MAX_VALUE,   Integer.MIN_VALUE,
+            GOOD, Calendar.JANUARY,    -5,  Calendar.SUNDAY,     0,
+            GOOD, Calendar.DECEMBER,    5,  Calendar.SATURDAY,   24*60*60*1000-1,
+            BAD,  Calendar.DECEMBER,    5,  Calendar.SATURDAY,   24*60*60*1000,
+            BAD,  Calendar.DECEMBER,    5,  Calendar.SATURDAY,  -1,
+            BAD,  Calendar.JANUARY,    -6,  Calendar.SUNDAY,     0,
+            BAD,  Calendar.DECEMBER,    6,  Calendar.SATURDAY,   24*60*60*1000,
+            GOOD, Calendar.DECEMBER,    1,  0,                   0,
+            GOOD, Calendar.DECEMBER,   31,  0,                   0,
+            BAD,  Calendar.APRIL,      31,  0,                   0,
+            BAD,  Calendar.DECEMBER,   32,  0,                   0,
+            BAD,  Calendar.JANUARY-1,   1,  Calendar.SUNDAY,     0,
+            BAD,  Calendar.DECEMBER+1,  1,  Calendar.SUNDAY,     0,
+            GOOD, Calendar.DECEMBER,   31, -Calendar.SUNDAY,     0,
+            GOOD, Calendar.DECEMBER,   31, -Calendar.SATURDAY,   0,
+            BAD,  Calendar.DECEMBER,   32, -Calendar.SATURDAY,   0,
+            BAD,  Calendar.DECEMBER,  -32, -Calendar.SATURDAY,   0,
+            BAD,  Calendar.DECEMBER,   31, -Calendar.SATURDAY-1, 0,
+        };
+        SimpleTimeZone zone = new SimpleTimeZone(0, "Z");
+        for (int i=0; i<DATA.length; i+=5) {
+            boolean shouldBeGood = (DATA[i] == GOOD);
+            int month     = DATA[i+1];
+            int day       = DATA[i+2];
+            int dayOfWeek = DATA[i+3];
+            int time      = DATA[i+4];
+
+            Exception ex = null;
+            try {
+                zone.setStartRule(month, day, dayOfWeek, time);
+            } catch (IllegalArgumentException e) {
+                ex = e;
+            }
+            if ((ex == null) != shouldBeGood) {
+                errln("setStartRule(month=" + month + ", day=" + day +
+                      ", dayOfWeek=" + dayOfWeek + ", time=" + time +
+                      (shouldBeGood ? (") should work but throws " + ex)
+                       : ") should fail but doesn't"));
+            }
+
+            ex = null;
+            try {
+                zone.setEndRule(month, day, dayOfWeek, time);
+            } catch (IllegalArgumentException e) {
+                ex = e;
+            }
+            if ((ex == null) != shouldBeGood) {
+                errln("setEndRule(month=" + month + ", day=" + day +
+                      ", dayOfWeek=" + dayOfWeek + ", time=" + time +
+                      (shouldBeGood ? (") should work but throws " + ex)
+                       : ") should fail but doesn't"));
+            }
+
+            ex = null;
+            try {
+                SimpleTimeZone temp = new SimpleTimeZone(0, "Z",
+                        month, day, dayOfWeek, time,
+                        GOOD_MONTH, GOOD_DAY, GOOD_DAY_OF_WEEK, GOOD_TIME);
+            } catch (IllegalArgumentException e) {
+                ex = e;
+            }
+            if ((ex == null) != shouldBeGood) {
+                errln("SimpleTimeZone(month=" + month + ", day=" + day +
+                      ", dayOfWeek=" + dayOfWeek + ", time=" + time +
+                      (shouldBeGood ? (", <end>) should work but throws " + ex)
+                       : ", <end>) should fail but doesn't"));
+            }            
+
+            ex = null;
+            try {
+                SimpleTimeZone temp = new SimpleTimeZone(0, "Z",
+                        GOOD_MONTH, GOOD_DAY, GOOD_DAY_OF_WEEK, GOOD_TIME,
+                        month, day, dayOfWeek, time);
+            } catch (IllegalArgumentException e) {
+                ex = e;
+            }
+            if ((ex == null) != shouldBeGood) {
+                errln("SimpleTimeZone(<start>, month=" + month + ", day=" + day +
+                      ", dayOfWeek=" + dayOfWeek + ", time=" + time +
+                      (shouldBeGood ? (") should work but throws " + ex)
+                       : ") should fail but doesn't"));
+            }            
+        }
+    }
+
+    /**
+     * SimpleTimeZone.getOffset accepts illegal arguments.
+     */
+    public void Test4154650() {
+        final int GOOD=1, BAD=0;
+        final int GOOD_ERA=GregorianCalendar.AD, GOOD_YEAR=1998, GOOD_MONTH=Calendar.AUGUST;
+        final int GOOD_DAY=2, GOOD_DOW=Calendar.SUNDAY, GOOD_TIME=16*3600000;
+        int[] DATA = {
+            GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+
+            GOOD, GregorianCalendar.BC, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+            GOOD, GregorianCalendar.AD, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+            BAD,  GregorianCalendar.BC-1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+            BAD,  GregorianCalendar.AD+1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+
+            GOOD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+            GOOD, GOOD_ERA, GOOD_YEAR, Calendar.DECEMBER, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+            BAD,  GOOD_ERA, GOOD_YEAR, Calendar.JANUARY-1, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+            BAD,  GOOD_ERA, GOOD_YEAR, Calendar.DECEMBER+1, GOOD_DAY, GOOD_DOW, GOOD_TIME,
+            
+            GOOD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 1, GOOD_DOW, GOOD_TIME,
+            GOOD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 31, GOOD_DOW, GOOD_TIME,
+            BAD,  GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 0, GOOD_DOW, GOOD_TIME,
+            BAD,  GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 32, GOOD_DOW, GOOD_TIME,
+
+            GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SUNDAY, GOOD_TIME,
+            GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SATURDAY, GOOD_TIME,
+            BAD,  GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SUNDAY-1, GOOD_TIME,
+            BAD,  GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SATURDAY+1, GOOD_TIME,
+
+            GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 0,
+            GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000-1,
+            BAD,  GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, -1,
+            BAD,  GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000,
+        };
+
+        TimeZone tz = TimeZone.getDefault();
+        for (int i=0; i<DATA.length; i+=7) {
+            boolean good = DATA[i] == GOOD;
+            IllegalArgumentException e = null;
+            try {
+                int offset = tz.getOffset(DATA[i+1], DATA[i+2], DATA[i+3],
+                                          DATA[i+4], DATA[i+5], DATA[i+6]); 
+           } catch (IllegalArgumentException ex) {
+                e = ex;
+            }
+            if (good != (e == null)) {
+                errln("Fail: getOffset(" +
+                      DATA[i+1] + ", " + DATA[i+2] + ", " + DATA[i+3] + ", " +
+                      DATA[i+4] + ", " + DATA[i+5] + ", " + DATA[i+6] +
+                      (good ? (") threw " + e) : ") accepts invalid args"));
+            }
+        }
+    }
+
+    /**
+     * TimeZone constructors allow null IDs.
+     */
+    public void Test4159922() {
+        TimeZone z = null;
+
+        // TimeZone API.  Only hasSameRules() and setDefault() should
+        // allow null.
+        try {
+            z = TimeZone.getTimeZone(null);
+            errln("FAIL: Null allowed in getTimeZone");
+        } catch (NullPointerException e) {}
+        z = TimeZone.getTimeZone("GMT");
+        try {
+            z.getDisplayName(false, TimeZone.SHORT, null);
+            errln("FAIL: Null allowed in getDisplayName(3)");
+        } catch (NullPointerException e) {}
+        try {
+            z.getDisplayName(null);
+            errln("FAIL: Null allowed in getDisplayName(1)");
+        } catch (NullPointerException e) {}
+        try {
+            if (z.hasSameRules(null)) {
+                errln("FAIL: hasSameRules returned true");
+            }
+        } catch (NullPointerException e) {
+            errln("FAIL: Null NOT allowed in hasSameRules");
+        }
+        try {
+            z.inDaylightTime(null);
+            errln("FAIL: Null allowed in inDaylightTime");
+        } catch (NullPointerException e) {}
+        try {
+            z.setID(null);
+            errln("FAIL: Null allowed in setID");
+        } catch (NullPointerException e) {}
+
+        TimeZone save = TimeZone.getDefault();
+        try {
+            TimeZone.setDefault(null);
+        } catch (NullPointerException e) {
+            errln("FAIL: Null NOT allowed in setDefault");
+        } finally {
+            TimeZone.setDefault(save);
+        }
+
+        // SimpleTimeZone API
+        SimpleTimeZone s = null;
+        try {
+            s = new SimpleTimeZone(0, null);
+            errln("FAIL: Null allowed in SimpleTimeZone(2)");
+        } catch (NullPointerException e) {}
+        try {
+            s = new SimpleTimeZone(0, null, 0, 1, 0, 0, 0, 1, 0, 0);
+            errln("FAIL: Null allowed in SimpleTimeZone(10)");
+        } catch (NullPointerException e) {}
+        try {
+            s = new SimpleTimeZone(0, null, 0, 1, 0, 0, 0, 1, 0, 0, 1000);
+            errln("FAIL: Null allowed in SimpleTimeZone(11)");
+        } catch (NullPointerException e) {}
+    }
+
+    /**
+     * TimeZone broken at midnight.  The TimeZone code fails to handle
+     * transitions at midnight correctly.
+     */
+    public void Test4162593() {
+        SimpleDateFormat fmt = new SimpleDateFormat("z", Locale.US);
+        final int ONE_HOUR = 60*60*1000;
+	TimeZone initialZone = TimeZone.getDefault();
+        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm z"); 
+
+        SimpleTimeZone asuncion = new SimpleTimeZone(-4*ONE_HOUR, "America/Asuncion" /*PY%sT*/,
+            Calendar.OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR,
+            Calendar.MARCH, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR);
+
+        /* Zone
+         * Starting time
+         * Transition expected between start+1H and start+2H
+         */
+        Object[] DATA = {
+            new SimpleTimeZone(2*ONE_HOUR, "Asia/Damascus" /*EE%sT*/,
+                Calendar.APRIL, 1, 0 /*DOM*/, 0*ONE_HOUR,
+                Calendar.OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
+            new int[] {98, Calendar.SEPTEMBER, 30, 22, 0},
+            Boolean.TRUE,
+
+            asuncion,
+            new int[] {100, Calendar.FEBRUARY, 28, 22, 0},
+            Boolean.FALSE,
+
+            asuncion,
+            new int[] {100, Calendar.FEBRUARY, 29, 22, 0},
+            Boolean.TRUE,
+        };
+        
+        String[] zone = new String[4];
+
+        for (int j=0; j<DATA.length; j+=3) {
+            TimeZone tz = (TimeZone)DATA[j];
+            TimeZone.setDefault(tz);
+            fmt.setTimeZone(tz);
+            sdf.setTimeZone(tz);
+
+            // Must construct the Date object AFTER setting the default zone
+            int[] p = (int[])DATA[j+1];
+            Date d = new Date(p[0], p[1], p[2], p[3], p[4]);
+            boolean transitionExpected = ((Boolean)DATA[j+2]).booleanValue();
+
+            logln(tz.getID() + ":");
+            for (int i=0; i<4; ++i) {
+                zone[i] = fmt.format(d);
+                logln("" + i + ": " + sdf.format(d) + " => " + zone[i]);
+                d = new Date(d.getTime() + ONE_HOUR);
+            }
+            if (zone[0].equals(zone[1]) &&
+                (zone[1].equals(zone[2]) != transitionExpected) &&
+                zone[2].equals(zone[3])) {
+                logln("Ok: transition " + transitionExpected);
+            } else {
+                errln("Fail: boundary transition incorrect");
+            }
+        }
+
+	// restore the initial time zone so that this test case
+	// doesn't affect the others.
+	TimeZone.setDefault(initialZone);
+    }
+
+    /**
+     * TimeZone broken in last hour of year
+     */
+    public void Test4173604() {
+        SimpleTimeZone pst = (SimpleTimeZone)TimeZone.getTimeZone("PST");
+        int o22 = pst.getOffset(1, 1998, 11, 31, Calendar.THURSDAY, 22*60*60*1000);
+        int o23 = pst.getOffset(1, 1998, 11, 31, Calendar.THURSDAY, 23*60*60*1000);
+        int o00 = pst.getOffset(1, 1999, 0, 1, Calendar.FRIDAY, 0);
+        if (o22 != o23 || o22 != o00) {
+            errln("Offsets should be the same (for PST), but got: " +
+                  "12/31 22:00 " + o22 +
+                  ", 12/31 23:00 " + o23 +
+                  ", 01/01 00:00 " + o00);
+        }
+
+        GregorianCalendar cal = new GregorianCalendar();
+        cal.setTimeZone(pst);
+        cal.clear();
+        cal.set(1998, Calendar.JANUARY, 1);
+        int lastDST = cal.get(Calendar.DST_OFFSET);
+        int transitions = 0;
+        int delta = 5;
+        while (cal.get(Calendar.YEAR) < 2000) {
+            cal.add(Calendar.MINUTE, delta);
+            if (cal.get(Calendar.DST_OFFSET) != lastDST) {
+                ++transitions;
+                Calendar t = (Calendar)cal.clone();
+                t.add(Calendar.MINUTE, -delta);
+                logln(t.getTime() + "  " + t.get(Calendar.DST_OFFSET));
+                logln(cal.getTime() + "  " + (lastDST=cal.get(Calendar.DST_OFFSET)));
+            }
+        }
+        if (transitions != 4) {
+            errln("Saw " + transitions + " transitions; should have seen 4");
+        }
+    }
+
+    /**
+     * getDisplayName doesn't work with unusual savings/offsets.
+     */
+    public void Test4176686() {
+        // Construct a zone that does not observe DST but
+        // that does have a DST savings (which should be ignored).
+        int offset = 90 * 60000; // 1:30
+        SimpleTimeZone z1 = new SimpleTimeZone(offset, "_std_zone_");
+        z1.setDSTSavings(45 * 60000); // 0:45
+
+        // Construct a zone that observes DST for the first 6 months.
+        SimpleTimeZone z2 = new SimpleTimeZone(offset, "_dst_zone_");
+        z2.setDSTSavings(45 * 60000); // 0:45
+        z2.setStartRule(Calendar.JANUARY, 1, 0);
+        z2.setEndRule(Calendar.JULY, 1, 0);
+
+        // Also check DateFormat
+        DateFormat fmt1 = new SimpleDateFormat("z");
+        fmt1.setTimeZone(z1); // Format uses standard zone
+        DateFormat fmt2 = new SimpleDateFormat("z");
+        fmt2.setTimeZone(z2); // Format uses DST zone
+        Date dst = new Date(1970-1900, Calendar.FEBRUARY, 1); // Time in DST
+        Date std = new Date(1970-1900, Calendar.AUGUST, 1); // Time in standard
+
+        // Description, Result, Expected Result
+        String[] DATA = {
+            "getDisplayName(false, SHORT)/std zone",
+            z1.getDisplayName(false, TimeZone.SHORT), "GMT+01:30",
+            "getDisplayName(false, LONG)/std zone",
+            z1.getDisplayName(false, TimeZone.LONG ), "GMT+01:30",
+            "getDisplayName(true, SHORT)/std zone",
+            z1.getDisplayName(true, TimeZone.SHORT), "GMT+01:30",
+            "getDisplayName(true, LONG)/std zone",
+            z1.getDisplayName(true, TimeZone.LONG ), "GMT+01:30",
+            "getDisplayName(false, SHORT)/dst zone",
+            z2.getDisplayName(false, TimeZone.SHORT), "GMT+01:30",
+            "getDisplayName(false, LONG)/dst zone",
+            z2.getDisplayName(false, TimeZone.LONG ), "GMT+01:30",
+            "getDisplayName(true, SHORT)/dst zone",
+            z2.getDisplayName(true, TimeZone.SHORT), "GMT+02:15",
+            "getDisplayName(true, LONG)/dst zone",
+            z2.getDisplayName(true, TimeZone.LONG ), "GMT+02:15",
+            "DateFormat.format(std)/std zone", fmt1.format(std), "GMT+01:30",
+            "DateFormat.format(dst)/std zone", fmt1.format(dst), "GMT+01:30",
+            "DateFormat.format(std)/dst zone", fmt2.format(std), "GMT+01:30",
+            "DateFormat.format(dst)/dst zone", fmt2.format(dst), "GMT+02:15",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            if (!DATA[i+1].equals(DATA[i+2])) {
+                errln("FAIL: " + DATA[i] + " -> " + DATA[i+1] + ", exp " + DATA[i+2]);
+            }
+        }
+    }
+
+    /**
+     * SimpleTimeZone allows invalid DOM values.
+     */
+    public void Test4184229() {
+        SimpleTimeZone zone = null;
+        try {
+            zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0);
+            errln("Failed. No exception has been thrown for DOM -1 startDay");
+        } catch(IllegalArgumentException e) {
+            logln("(a) " + e.getMessage());
+        }
+        try {
+            zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0);
+            errln("Failed. No exception has been thrown for DOM -1 endDay");
+        } catch(IllegalArgumentException e) {
+            logln("(b) " + e.getMessage());
+        }
+        try {
+            zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0, 1000);
+            errln("Failed. No exception has been thrown for DOM -1 startDay +savings");
+        } catch(IllegalArgumentException e) {
+            logln("(c) " + e.getMessage());
+        }
+        try {
+            zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0, 1000);
+            errln("Failed. No exception has been thrown for DOM -1 endDay +savings");
+        } catch(IllegalArgumentException e) {
+            logln("(d) " + e.getMessage());
+        }
+        // Make a valid constructor call for subsequent tests.
+        zone = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 0, 1, 0, 0);
+        try {
+            zone.setStartRule(0, -1, 0, 0);
+            errln("Failed. No exception has been thrown for DOM -1 setStartRule +savings");
+        } catch(IllegalArgumentException e) {
+            logln("(e) " + e.getMessage());
+        }
+        try {
+            zone.setStartRule(0, -1, 0);
+            errln("Failed. No exception has been thrown for DOM -1 setStartRule");
+        } catch(IllegalArgumentException e) {
+            logln("(f) " + e.getMessage());
+        }
+        try {
+            zone.setEndRule(0, -1, 0, 0);
+            errln("Failed. No exception has been thrown for DOM -1 setEndRule +savings");
+        } catch(IllegalArgumentException e) {
+            logln("(g) " + e.getMessage());
+        }
+        try {
+            zone.setEndRule(0, -1, 0);
+            errln("Failed. No exception has been thrown for DOM -1 setEndRule");
+        } catch(IllegalArgumentException e) {
+            logln("(h) " + e.getMessage());
+        }
+    }
+
+    /**
+     * SimpleTimeZone.getOffset() throws IllegalArgumentException when to get
+     * of 2/29/1996 (leap day).
+     */
+    public void Test4208960 () {
+	SimpleTimeZone tz = (SimpleTimeZone)TimeZone.getTimeZone("PST");
+	try {
+	    int offset = tz.getOffset(GregorianCalendar.AD, 1996, Calendar.FEBRUARY, 29, 
+				      Calendar.THURSDAY, 0);
+	} catch (IllegalArgumentException e) {
+	    errln("FAILED: to get TimeZone.getOffset(2/29/96)");
+	}
+	try {
+	    int offset = tz.getOffset(GregorianCalendar.AD, 1997, Calendar.FEBRUARY, 29, 
+				      Calendar.THURSDAY, 0);
+	    errln("FAILED: TimeZone.getOffset(2/29/97) expected to throw Exception.");
+	} catch (IllegalArgumentException e) {
+	    logln("got IllegalArgumentException");
+	}
+    }
+
+    /**
+     * Test to see if DateFormat understands zone equivalency groups.  It
+     * might seem that this should be a DateFormat test, but it's really a
+     * TimeZone test -- the changes to DateFormat are minor.
+     *
+     * We use two known, stable zones that shouldn't change much over time
+     * -- America/Vancouver and America/Los_Angeles.  However, they MAY
+     * change at some point -- if that happens, replace them with any two
+     * zones in an equivalency group where one zone has localized name
+     * data, and the other doesn't, in some locale.
+     */
+    public void TestJ449() {
+        String str;
+
+        // Modify the following three as necessary.  The two IDs must
+        // specify two zones in the same equivalency group.  One must have
+        // locale data in 'loc'; the other must not.
+        String idWithLocaleData = "America/Los_Angeles";
+        String idWithoutLocaleData = "America/Vancouver";
+        Locale loc = new Locale("en", "", "");
+
+        TimeZone zoneWith = TimeZone.getTimeZone(idWithLocaleData);
+        TimeZone zoneWithout = TimeZone.getTimeZone(idWithoutLocaleData);
+        // Make sure we got valid zones
+        if (!(zoneWith.getID().equals(idWithLocaleData) &&
+              zoneWithout.getID().equals(idWithoutLocaleData))) {
+            errln("Fail: Unable to create zones");
+        } else {
+            GregorianCalendar calWith = new GregorianCalendar(zoneWith);
+            GregorianCalendar calWithout = new GregorianCalendar(zoneWithout);
+            SimpleDateFormat fmt =
+                new SimpleDateFormat("MMM d yyyy hh:mm a zzz", loc);
+            Date date = new Date(0L);
+            fmt.setCalendar(calWith);
+            String strWith = fmt.format(date);
+            fmt.setCalendar(calWithout);
+            String strWithout = fmt.format(date);
+            if (strWith.equals(strWithout)) {
+                logln("Ok: " + idWithLocaleData + " -> " +
+                      strWith + "; " + idWithoutLocaleData + " -> " +
+                      strWithout);
+            } else {
+                errln("FAIL: " + idWithLocaleData + " -> " +
+                      strWith + "; " + idWithoutLocaleData + " -> " +
+                      strWithout);
+            }
+        }
+    }
+}
+
+//eof
diff --git a/src/com/ibm/test/timezone/TimeZoneTest.java b/src/com/ibm/test/timezone/TimeZoneTest.java
new file mode 100755
index 0000000..fe7f681
--- /dev/null
+++ b/src/com/ibm/test/timezone/TimeZoneTest.java
@@ -0,0 +1,767 @@
+/**
+ * @test 1.22 99/09/21
+ * @bug 4028006 4044013 4096694 4107276 4107570 4112869 4130885
+ * @summary test TimeZone
+ * @build TimeZoneTest
+ */
+
+package com.ibm.test.timezone;
+import com.ibm.text.*;
+import com.ibm.util.*;
+import com.ibm.test.*;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Hashtable;
+import java.util.ResourceBundle;
+
+public class TimeZoneTest extends TestFmwk
+{
+    static final int millisPerHour = 3600000;
+
+    public static void main(String[] args) throws Exception {
+        new TimeZoneTest().run(args);
+    }
+
+    /**
+     * Bug 4130885
+     * Certain short zone IDs, used since 1.1.x, are incorrect.
+     *  
+     * The worst of these is:
+     *
+     * "CAT" (Central African Time) should be GMT+2:00, but instead returns a
+     * zone at GMT-1:00. The zone at GMT-1:00 should be called EGT, CVT, EGST,
+     * or AZOST, depending on which zone is meant, but in no case is it CAT.
+     *
+     * Other wrong zone IDs:
+     *
+     * ECT (European Central Time) GMT+1:00: ECT is Ecuador Time,
+     * GMT-5:00. European Central time is abbreviated CEST.
+     *
+     * SST (Solomon Island Time) GMT+11:00. SST is actually Samoa Standard Time,
+     * GMT-11:00. Solomon Island time is SBT.
+     *
+     * NST (New Zealand Time) GMT+12:00. NST is the abbreviation for
+     * Newfoundland Standard Time, GMT-3:30. New Zealanders use NZST.
+     *
+     * AST (Alaska Standard Time) GMT-9:00. [This has already been noted in
+     * another bug.] It should be "AKST". AST is Atlantic Standard Time,
+     * GMT-4:00.
+     *
+     * PNT (Phoenix Time) GMT-7:00. PNT usually means Pitcairn Time,
+     * GMT-8:30. There is no standard abbreviation for Phoenix time, as distinct
+     * from MST with daylight savings.
+     *
+     * In addition to these problems, a number of zones are FAKE. That is, they
+     * don't match what people use in the real world.
+     *
+     * FAKE zones:
+     *
+     * EET (should be EEST)
+     * ART (should be EEST)
+     * MET (should be IRST)
+     * NET (should be AMST)
+     * PLT (should be PKT)
+     * BST (should be BDT)
+     * VST (should be ICT)
+     * CTT (should be CST) +
+     * ACT (should be CST) +
+     * AET (should be EST) +
+     * MIT (should be WST) +
+     * IET (should be EST) +
+     * PRT (should be AST) +
+     * CNT (should be NST)
+     * AGT (should be ARST)
+     * BET (should be EST) +
+     *
+     * + A zone with the correct name already exists and means something
+     * else. E.g., EST usually indicates the US Eastern zone, so it cannot be
+     * used for Brazil (BET).
+     */
+    public void TestShortZoneIDs() throws Exception {
+
+        ZoneDescriptor[] JDK_116_REFERENCE_LIST = {
+            new ZoneDescriptor("MIT", -660, false),
+            new ZoneDescriptor("HST", -600, false),
+            new ZoneDescriptor("AST", -540, true),
+            new ZoneDescriptor("PST", -480, true),
+            new ZoneDescriptor("PNT", -420, false),
+            new ZoneDescriptor("MST", -420, true),
+            new ZoneDescriptor("CST", -360, true),
+            new ZoneDescriptor("IET", -300, false),
+            new ZoneDescriptor("EST", -300, true),
+            new ZoneDescriptor("PRT", -240, false),
+            new ZoneDescriptor("CNT", -210, true),
+            new ZoneDescriptor("AGT", -180, false),
+            new ZoneDescriptor("BET", -180, true),
+            // new ZoneDescriptor("CAT", -60, false), // Wrong:
+            // As of bug 4130885, fix CAT (Central Africa)
+            new ZoneDescriptor("CAT", 120, false), // Africa/Harare
+            new ZoneDescriptor("GMT", 0, false),
+            new ZoneDescriptor("UTC", 0, false),
+            new ZoneDescriptor("ECT", 60, true),
+            new ZoneDescriptor("ART", 120, true),
+            new ZoneDescriptor("EET", 120, true),
+            new ZoneDescriptor("EAT", 180, false),
+            // new ZoneDescriptor("MET", 210, true),
+            // This is a standard Unix zone, so don't remap it - Liu 3Jan01
+            // new ZoneDescriptor("NET", 240, false);
+            // As of bug 4191164, fix NET
+            new ZoneDescriptor("NET", 240, true),
+            new ZoneDescriptor("PLT", 300, false),
+            new ZoneDescriptor("IST", 330, false),
+            new ZoneDescriptor("BST", 360, false),
+            new ZoneDescriptor("VST", 420, false),
+            new ZoneDescriptor("CTT", 480, true), // Revised Liu 3Jan01, std->dst
+            new ZoneDescriptor("JST", 540, false),
+            new ZoneDescriptor("ACT", 570, true), // Revised Liu 3Jan01, std->dst
+            new ZoneDescriptor("AET", 600, true),
+            new ZoneDescriptor("SST", 660, false),
+            // new ZoneDescriptor("NST", 720, false),
+            // As of bug 4130885, fix NST (New Zealand)
+            new ZoneDescriptor("NST", 720, true), // Pacific/Auckland
+
+            // [3Jan01 Liu] Three of these zones have been updated.
+            // The CTT and ACT zones just remap to Asia/Shanghai
+            // and Australia/Darwin.  Since those zones have changed,
+            // I have updated the table.  The MET zone used to be mapped
+            // to Asia/Tehran but since MET is a standard Unix zone named
+            // in the source data we no longer do this in icu or icu4j.
+        };
+
+        Hashtable hash = new Hashtable();
+
+        String[] ids = TimeZone.getAvailableIDs();
+        for (int i=0; i<ids.length; ++i) {
+            String id = ids[i];
+            if (id.length() == 3) {
+                hash.put(id, new ZoneDescriptor(TimeZone.getTimeZone(id)));
+            }
+        }
+
+        for (int i=0; i<JDK_116_REFERENCE_LIST.length; ++i) {
+            ZoneDescriptor referenceZone = JDK_116_REFERENCE_LIST[i];
+            ZoneDescriptor currentZone = (ZoneDescriptor)hash.get(referenceZone.getID());
+            if (referenceZone.equals(currentZone)) {
+                logln("ok " + referenceZone);
+            }
+            else {
+                errln("Fail: Expected " + referenceZone +
+                      "; got " + currentZone);
+            }
+        }
+    }
+
+    /**
+     * A descriptor for a zone; used to regress the short zone IDs.
+     */
+    static class ZoneDescriptor {
+        String id;
+        int offset; // In minutes
+        boolean daylight;
+
+        ZoneDescriptor(TimeZone zone) {
+            this.id = zone.getID();
+            this.offset = zone.getRawOffset() / 60000;
+            this.daylight = zone.useDaylightTime();
+        }
+
+        ZoneDescriptor(String id, int offset, boolean daylight) {
+            this.id = id;
+            this.offset = offset;
+            this.daylight = daylight;
+        }
+
+        public String getID() { return id; }
+
+        public boolean equals(Object o) {
+            ZoneDescriptor that = (ZoneDescriptor)o;
+            return that != null &&
+                id.equals(that.id) &&
+                offset == that.offset &&
+                daylight == that.daylight;
+        }
+
+        public String toString() {
+            int min = offset;
+            char sign = '+';
+            if (min < 0) { sign = '-'; min = -min; }
+
+            return "Zone[\"" + id + "\", GMT" + sign + (min/60) + ':' +
+                (min%60<10?"0":"") + (min%60) + ", " +
+                (daylight ? "Daylight" : "Standard") + "]";
+        }
+
+        public static int compare(Object o1, Object o2) {
+            ZoneDescriptor i1 = (ZoneDescriptor)o1;
+            ZoneDescriptor i2 = (ZoneDescriptor)o2;
+            if (i1.offset > i2.offset) return 1;
+            if (i1.offset < i2.offset) return -1;
+            if (i1.daylight && !i2.daylight) return 1;
+            if (!i1.daylight && i2.daylight) return -1;
+            return i1.id.compareTo(i2.id);
+        }
+    }
+
+    static final String EXPECTED_CUSTOM_ID = "Custom";
+    static final String formatMinutes(int min) {
+        char sign = '+';
+        if (min < 0) { sign = '-'; min = -min; }
+        int h = min/60;
+        min = min%60;
+        return "" + sign + h + ":" + ((min<10) ? "0" : "") + min;
+    }
+    /**
+     * As part of the VM fix (see CCC approved RFE 4028006, bug
+     * 4044013), TimeZone.getTimeZone() has been modified to recognize
+     * generic IDs of the form GMT[+-]hh:mm, GMT[+-]hhmm, and
+     * GMT[+-]hh.  Test this behavior here.
+     *
+     * Bug 4044013
+     */
+    public void TestCustomParse() throws Exception {
+        Object[] DATA = {
+            // ID        Expected offset in minutes
+            "GMT",       null,
+            "GMT0",      null,
+            "GMT+0",     new Integer(0),
+            "GMT+1",     new Integer(60),
+            "GMT-0030",  new Integer(-30),
+            "GMT+15:99", new Integer(15*60+99),
+            "GMT+",      null,
+            "GMT-",      null,
+            "GMT+0:",    null,
+            "GMT-:",     null,
+            "GMT+0010",  new Integer(10), // Interpret this as 00:10
+            "GMT-10",    new Integer(-10*60),
+            "GMT+30",    new Integer(30),
+            "GMT-3:30",  new Integer(-(3*60+30)),
+            "GMT-230",   new Integer(-(2*60+30)),
+        };
+        for (int i=0; i<DATA.length; i+=2) {
+            String id = (String)DATA[i];
+            Integer exp = (Integer)DATA[i+1];
+            TimeZone zone = TimeZone.getTimeZone(id);
+            if (zone.getID().equals("GMT")) {
+                logln(id + " -> generic GMT");
+                // When TimeZone.getTimeZone() can't parse the id, it
+                // returns GMT -- a dubious practice, but required for
+                // backward compatibility.
+                if (exp != null) {
+                    throw new Exception("Expected offset of " + formatMinutes(exp.intValue()) +
+                                        " for " + id + ", got parse failure");
+                }
+            }
+            else {
+                int ioffset = zone.getRawOffset()/60000;
+                String offset = formatMinutes(ioffset);
+                logln(id + " -> " + zone.getID() + " GMT" + offset);
+                if (exp == null) {
+                    throw new Exception("Expected parse failure for " + id +
+                                        ", got offset of " + offset +
+                                        ", id " + zone.getID());
+                }
+                else if (ioffset != exp.intValue() ||
+                         !zone.getID().equals(EXPECTED_CUSTOM_ID)) {
+                    throw new Exception("Expected offset of " + formatMinutes(exp.intValue()) +
+                                        ", id Custom, for " + id +
+                                        ", got offset of " + offset +
+                                        ", id " + zone.getID());
+                }
+            }
+        }
+    }
+
+    /**
+     * Test the basic functionality of the getDisplayName() API.
+     *
+     * Bug 4112869
+     * Bug 4028006
+     *
+     * See also API change request A41.
+     *
+     * 4/21/98 - make smarter, so the test works if the ext resources
+     * are present or not.
+     */
+    public void TestDisplayName() {
+        TimeZone zone = TimeZone.getTimeZone("PST");
+        String name = zone.getDisplayName(Locale.ENGLISH);
+        logln("PST->" + name);
+        if (!name.equals("Pacific Standard Time"))
+            errln("Fail: Expected \"Pacific Standard Time\", got " + name +
+                  " for " + zone);
+
+        //*****************************************************************
+        // THE FOLLOWING LINES MUST BE UPDATED IF THE LOCALE DATA CHANGES
+        // THE FOLLOWING LINES MUST BE UPDATED IF THE LOCALE DATA CHANGES
+        // THE FOLLOWING LINES MUST BE UPDATED IF THE LOCALE DATA CHANGES
+        //*****************************************************************
+        Object[] DATA = {
+            new Boolean(false), new Integer(TimeZone.SHORT), "PST",
+            new Boolean(true),  new Integer(TimeZone.SHORT), "PDT",
+            new Boolean(false), new Integer(TimeZone.LONG),  "Pacific Standard Time",
+            new Boolean(true),  new Integer(TimeZone.LONG),  "Pacific Daylight Time",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            name = zone.getDisplayName(((Boolean)DATA[i]).booleanValue(),
+                                       ((Integer)DATA[i+1]).intValue(),
+                                       Locale.ENGLISH);
+            if (!name.equals(DATA[i+2]))
+                errln("Fail: Expected " + DATA[i+2] + "; got " + name);
+        }
+
+        // Make sure that we don't display the DST name by constructing a fake
+        // PST zone that has DST all year long.
+        SimpleTimeZone zone2 = new SimpleTimeZone(0, "PST");
+        zone2.setStartRule(Calendar.JANUARY, 1, 0);
+        zone2.setEndRule(Calendar.DECEMBER, 31, 0);
+        logln("Modified PST inDaylightTime->" + zone2.inDaylightTime(new Date()));
+        name = zone2.getDisplayName(Locale.ENGLISH);
+        logln("Modified PST->" + name);
+        if (!name.equals("Pacific Standard Time"))
+            errln("Fail: Expected \"Pacific Standard Time\"");
+
+        // Make sure we get the default display format for Locales
+        // with no display name data.
+        Locale zh_CN = Locale.SIMPLIFIED_CHINESE;
+        name = zone.getDisplayName(zh_CN);
+        //*****************************************************************
+        // THE FOLLOWING LINE MUST BE UPDATED IF THE LOCALE DATA CHANGES
+        // THE FOLLOWING LINE MUST BE UPDATED IF THE LOCALE DATA CHANGES
+        // THE FOLLOWING LINE MUST BE UPDATED IF THE LOCALE DATA CHANGES
+        //*****************************************************************
+        logln("PST(zh_CN)->" + name);
+
+        // Now be smart -- check to see if zh resource is even present.
+        // If not, we expect the en fallback behavior.
+        ResourceBundle enRB = ResourceBundle.getBundle("java.text.resources.DateFormatZoneData",
+                                                       Locale.ENGLISH);
+        ResourceBundle zhRB = ResourceBundle.getBundle("java.text.resources.DateFormatZoneData",
+                                                       zh_CN);
+        boolean noZH = enRB == zhRB;
+
+        if (noZH) {
+            logln("Warning: Not testing the zh_CN behavior because resource is absent");
+            if (!name.equals("Pacific Standard Time"))
+                errln("Fail: Expected Pacific Standard Time");
+        }
+        else if (!name.equals("Pacific Standard Time") &&
+		 !name.equals("GMT-08:00") &&
+                 !name.equals("GMT-8:00") &&
+                 !name.equals("GMT-0800") &&
+                 !name.equals("GMT-800")) {
+            errln("Fail: Expected GMT-08:00 or something similar");
+            errln("************************************************************");
+            errln("THE ABOVE FAILURE MAY JUST MEAN THE LOCALE DATA HAS CHANGED");
+            errln("************************************************************");
+        }
+        
+        // Now try a non-existent zone
+        zone2 = new SimpleTimeZone(90*60*1000, "xyzzy");
+        name = zone2.getDisplayName(Locale.ENGLISH);
+        logln("GMT+90min->" + name);
+        if (!name.equals("GMT+01:30") &&
+            !name.equals("GMT+1:30") &&
+            !name.equals("GMT+0130") &&
+            !name.equals("GMT+130"))
+            errln("Fail: Expected GMT+01:30 or something similar");
+    }
+
+    public void TestGenericAPI() {
+        String id = "NewGMT";
+        int offset = 12345;
+
+        SimpleTimeZone zone = new SimpleTimeZone(offset, id);
+        if (zone.useDaylightTime()) errln("FAIL: useDaylightTime should return false");
+
+        TimeZone zoneclone = (TimeZone)zone.clone();
+        if (!zoneclone.equals(zone)) errln("FAIL: clone or operator== failed");
+        zoneclone.setID("abc");
+        if (zoneclone.equals(zone)) errln("FAIL: clone or operator!= failed");
+        // delete zoneclone;
+
+        zoneclone = (TimeZone)zone.clone();
+        if (!zoneclone.equals(zone)) errln("FAIL: clone or operator== failed");
+        zoneclone.setRawOffset(45678);
+        if (zoneclone.equals(zone)) errln("FAIL: clone or operator!= failed");
+
+        // C++ only
+        /*
+          SimpleTimeZone copy(*zone);
+          if (!(copy == *zone)) errln("FAIL: copy constructor or operator== failed");
+          copy = *(SimpleTimeZone*)zoneclone;
+          if (!(copy == *zoneclone)) errln("FAIL: assignment operator or operator== failed");
+          */
+
+        TimeZone saveDefault = TimeZone.getDefault();
+        TimeZone.setDefault(zone);
+        TimeZone defaultzone = TimeZone.getDefault();
+        if (defaultzone == zone) errln("FAIL: Default object is identical, not clone");
+        if (!defaultzone.equals(zone)) errln("FAIL: Default object is not equal");
+        TimeZone.setDefault(saveDefault);
+        // delete defaultzone;
+        // delete zoneclone;
+    }
+
+    public void TestRuleAPI()
+    {
+        // ErrorCode status = ZERO_ERROR;
+
+        int offset = (int)(60*60*1000*1.75); // Pick a weird offset
+        SimpleTimeZone zone = new SimpleTimeZone(offset, "TestZone");
+        if (zone.useDaylightTime()) errln("FAIL: useDaylightTime should return false");
+
+        // Establish our expected transition times.  Do this with a non-DST
+        // calendar with the (above) declared local offset.
+        GregorianCalendar gc = new GregorianCalendar(zone);
+        gc.clear();
+        gc.set(1990, Calendar.MARCH, 1);
+        long marchOneStd = gc.getTime().getTime(); // Local Std time midnight
+        gc.clear();
+        gc.set(1990, Calendar.JULY, 1);
+        long julyOneStd = gc.getTime().getTime(); // Local Std time midnight
+
+        // Starting and ending hours, WALL TIME
+        int startHour = (int)(2.25 * 3600000);
+        int endHour   = (int)(3.5  * 3600000);
+
+        zone.setStartRule(Calendar.MARCH, 1, 0, startHour);
+        zone.setEndRule  (Calendar.JULY,  1, 0, endHour);
+
+        gc = new GregorianCalendar(zone);
+        // if (failure(status, "new GregorianCalendar")) return;
+
+        long marchOne = marchOneStd + startHour;
+        long julyOne = julyOneStd + endHour - 3600000; // Adjust from wall to Std time
+
+        long expMarchOne = 636251400000L;
+        if (marchOne != expMarchOne)
+        {
+            errln("FAIL: Expected start computed as " + marchOne +
+                  " = " + new Date(marchOne));
+            logln("      Should be                  " + expMarchOne +
+                  " = " + new Date(expMarchOne));
+        }
+
+        long expJulyOne = 646793100000L;
+        if (julyOne != expJulyOne)
+        {
+            errln("FAIL: Expected start computed as " + julyOne +
+                  " = " + new Date(julyOne));
+            logln("      Should be                  " + expJulyOne +
+                  " = " + new Date(expJulyOne));
+        }
+
+        _testUsingBinarySearch(zone, new Date(90, Calendar.JANUARY, 1).getTime(),
+                              new Date(90, Calendar.JUNE, 15).getTime(), marchOne);
+        _testUsingBinarySearch(zone, new Date(90, Calendar.JUNE, 1).getTime(),
+                              new Date(90, Calendar.DECEMBER, 31).getTime(), julyOne);
+
+        if (zone.inDaylightTime(new Date(marchOne - 1000)) ||
+            !zone.inDaylightTime(new Date(marchOne)))
+            errln("FAIL: Start rule broken");
+        if (!zone.inDaylightTime(new Date(julyOne - 1000)) ||
+            zone.inDaylightTime(new Date(julyOne)))
+            errln("FAIL: End rule broken");
+
+        zone.setStartYear(1991);
+        if (zone.inDaylightTime(new Date(marchOne)) ||
+            zone.inDaylightTime(new Date(julyOne - 1000)))
+            errln("FAIL: Start year broken");
+
+        // failure(status, "TestRuleAPI");
+        // delete gc;
+        // delete zone;
+    }
+
+    void _testUsingBinarySearch(SimpleTimeZone tz, long min, long max, long expectedBoundary)
+    {
+        // ErrorCode status = ZERO_ERROR;
+        boolean startsInDST = tz.inDaylightTime(new Date(min));
+        // if (failure(status, "SimpleTimeZone::inDaylightTime")) return;
+        if (tz.inDaylightTime(new Date(max)) == startsInDST) {
+            logln("Error: inDaylightTime(" + new Date(max) + ") != " + (!startsInDST));
+            return;
+        }
+        // if (failure(status, "SimpleTimeZone::inDaylightTime")) return;
+        while ((max - min) > INTERVAL) {
+            long mid = (min + max) / 2;
+            if (tz.inDaylightTime(new Date(mid)) == startsInDST) {
+                min = mid;
+            }
+            else {
+                max = mid;
+            }
+            // if (failure(status, "SimpleTimeZone::inDaylightTime")) return;
+        }
+        logln("Binary Search Before: " + min + " = " + new Date(min));
+        logln("Binary Search After:  " + max + " = " + new Date(max));
+        long mindelta = expectedBoundary - min;
+        long maxdelta = max - expectedBoundary;
+        if (mindelta >= 0 &&
+            mindelta <= INTERVAL &&
+            mindelta >= 0 &&
+            mindelta <= INTERVAL)
+            logln("PASS: Expected bdry:  " + expectedBoundary + " = " + new Date(expectedBoundary));
+        else
+            errln("FAIL: Expected bdry:  " + expectedBoundary + " = " + new Date(expectedBoundary));
+    }
+
+    static final int INTERVAL = 100;
+
+    // Bug 006; verify the offset for a specific zone.
+    public void TestPRTOffset()
+    {
+        TimeZone tz = TimeZone.getTimeZone( "PRT" );
+        if( tz == null ) {
+            errln( "FAIL: TimeZone(PRT) is null" );
+        }
+        else{
+            if (tz.getRawOffset() != (-4*millisPerHour))
+                errln("FAIL: Offset for PRT should be -4, got " +
+                      tz.getRawOffset() / (double)millisPerHour);
+        }
+
+    }
+
+    // Test various calls
+    public void TestVariousAPI518()
+    {
+        TimeZone time_zone = TimeZone.getTimeZone("PST");
+        Date d = new Date(97, Calendar.APRIL, 30);
+
+        logln("The timezone is " + time_zone.getID());
+
+        if (time_zone.inDaylightTime(d) != true)
+            errln("FAIL: inDaylightTime returned false");
+
+        if (time_zone.useDaylightTime() != true)
+            errln("FAIL: useDaylightTime returned false");
+
+        if (time_zone.getRawOffset() != -8*millisPerHour)
+            errln( "FAIL: getRawOffset returned wrong value");
+
+        GregorianCalendar gc = new GregorianCalendar();
+        gc.setTime(d);
+        if (time_zone.getOffset(gc.AD, gc.get(gc.YEAR), gc.get(gc.MONTH),
+                                gc.get(gc.DAY_OF_MONTH),
+                                gc.get(gc.DAY_OF_WEEK), 0)
+            != -7*millisPerHour)
+            errln("FAIL: getOffset returned wrong value");
+    }
+
+    // Test getAvailableID API
+    public void TestGetAvailableIDs913()
+    {
+        StringBuffer buf = new StringBuffer("TimeZone.getAvailableIDs() = { ");
+        String[] s = TimeZone.getAvailableIDs();
+        for (int i=0; i<s.length; ++i)
+        {
+            if (i > 0) buf.append(", ");
+            buf.append(s[i]);
+        }
+        buf.append(" };");
+        logln(buf.toString());
+
+        buf.setLength(0);
+        buf.append("TimeZone.getAvailableIDs(GMT+02:00) = { ");
+        s = TimeZone.getAvailableIDs(+2 * 60 * 60 * 1000);
+        for (int i=0; i<s.length; ++i)
+        {
+            if (i > 0) buf.append(", ");
+            buf.append(s[i]);
+        }
+        buf.append(" };");
+        logln(buf.toString());
+
+        TimeZone tz = TimeZone.getTimeZone("PST");
+        if (tz != null)
+            logln("getTimeZone(PST) = " + tz.getID());
+        else
+            errln("FAIL: getTimeZone(PST) = null");
+
+        tz = TimeZone.getTimeZone("America/Los_Angeles");
+        if (tz != null)
+            logln("getTimeZone(America/Los_Angeles) = " + tz.getID());
+        else
+            errln("FAIL: getTimeZone(PST) = null");
+
+        // Bug 4096694
+        tz = TimeZone.getTimeZone("NON_EXISTENT");
+        if (tz == null)
+            errln("FAIL: getTimeZone(NON_EXISTENT) = null");
+        else if (!tz.getID().equals("GMT"))
+            errln("FAIL: getTimeZone(NON_EXISTENT) = " + tz.getID());
+    }
+
+    /**
+     * Bug 4107276
+     */
+    public void TestDSTSavings() {
+        // It might be better to find a way to integrate this test into the main TimeZone
+        // tests above, but I don't have time to figure out how to do this (or if it's
+        // even really a good idea).  Let's consider that a future.  --rtg 1/27/98
+        SimpleTimeZone tz = new SimpleTimeZone(-5 * millisPerHour, "dstSavingsTest",
+                                               Calendar.MARCH, 1, 0, 0, Calendar.SEPTEMBER, 1, 0, 0,
+                                               (int)(0.5 * millisPerHour));
+
+        if (tz.getRawOffset() != -5 * millisPerHour)
+            errln("Got back a raw offset of " + (tz.getRawOffset() / millisPerHour) +
+                  " hours instead of -5 hours.");
+        if (!tz.useDaylightTime())
+            errln("Test time zone should use DST but claims it doesn't.");
+        if (tz.getDSTSavings() != 0.5 * millisPerHour)
+            errln("Set DST offset to 0.5 hour, but got back " + (tz.getDSTSavings() /
+                                                                 millisPerHour) + " hours instead.");
+
+        int offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JANUARY, 1,
+                                  Calendar.THURSDAY, 10 * millisPerHour);
+        if (offset != -5 * millisPerHour)
+            errln("The offset for 10 AM, 1/1/98 should have been -5 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JUNE, 1, Calendar.MONDAY,
+                              10 * millisPerHour);
+        if (offset != -4.5 * millisPerHour)
+            errln("The offset for 10 AM, 6/1/98 should have been -4.5 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        tz.setDSTSavings(millisPerHour);
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JANUARY, 1,
+                              Calendar.THURSDAY, 10 * millisPerHour);
+        if (offset != -5 * millisPerHour)
+            errln("The offset for 10 AM, 1/1/98 should have been -5 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JUNE, 1, Calendar.MONDAY,
+                              10 * millisPerHour);
+        if (offset != -4 * millisPerHour)
+            errln("The offset for 10 AM, 6/1/98 (with a 1-hour DST offset) should have been -4 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+    }
+
+    /**
+     * Bug 4107570
+     */
+    public void TestAlternateRules() {
+        // Like TestDSTSavings, this test should probably be integrated somehow with the main
+        // test at the top of this class, but I didn't have time to figure out how to do that.
+        //                      --rtg 1/28/98
+
+        SimpleTimeZone tz = new SimpleTimeZone(-5 * millisPerHour, "alternateRuleTest");
+
+        // test the day-of-month API
+        tz.setStartRule(Calendar.MARCH, 10, 12 * millisPerHour);
+        tz.setEndRule(Calendar.OCTOBER, 20, 12 * millisPerHour);
+
+        int offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 5,
+                                  Calendar.THURSDAY, 10 * millisPerHour);
+        if (offset != -5 * millisPerHour)
+            errln("The offset for 10AM, 3/5/98 should have been -5 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 15,
+                              Calendar.SUNDAY, 10 * millisPerHour);
+        if (offset != -4 * millisPerHour)
+            errln("The offset for 10AM, 3/15/98 should have been -4 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 15,
+                              Calendar.THURSDAY, 10 * millisPerHour);
+        if (offset != -4 * millisPerHour)
+            errln("The offset for 10AM, 10/15/98 should have been -4 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 25,
+                              Calendar.SUNDAY, 10 * millisPerHour);
+        if (offset != -5 * millisPerHour)
+            errln("The offset for 10AM, 10/25/98 should have been -5 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        // test the day-of-week-after-day-in-month API
+        tz.setStartRule(Calendar.MARCH, 10, Calendar.FRIDAY, 12 * millisPerHour, true);
+        tz.setEndRule(Calendar.OCTOBER, 20, Calendar.FRIDAY, 12 * millisPerHour, false);
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 11,
+                              Calendar.WEDNESDAY, 10 * millisPerHour);
+        if (offset != -5 * millisPerHour)
+            errln("The offset for 10AM, 3/11/98 should have been -5 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 14,
+                              Calendar.SATURDAY, 10 * millisPerHour);
+        if (offset != -4 * millisPerHour)
+            errln("The offset for 10AM, 3/14/98 should have been -4 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 15,
+                              Calendar.THURSDAY, 10 * millisPerHour);
+        if (offset != -4 * millisPerHour)
+            errln("The offset for 10AM, 10/15/98 should have been -4 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+
+        offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 17,
+                              Calendar.SATURDAY, 10 * millisPerHour);
+        if (offset != -5 * millisPerHour)
+            errln("The offset for 10AM, 10/17/98 should have been -5 hours, but we got "
+                  + (offset / millisPerHour) + " hours.");
+    }
+
+    public void TestEquivalencyGroups() {
+        String id = "America/Los_Angeles";
+        int n = TimeZone.countEquivalentIDs(id);
+        if (n < 2) {
+            errln("FAIL: countEquivalentIDs(" + id + ") returned " + n +
+                  ", expected >= 2");
+        }
+        for (int i=0; i<n; ++i) {
+            String s = TimeZone.getEquivalentID(id, i);
+            if (s.length() == 0) {
+                errln("FAIL: getEquivalentID(" + id + ", " + i +
+                      ") returned \"" + s + "\", expected valid ID");
+            } else {
+                logln("" + i + ":" + s);
+            }
+        }
+    }
+
+    public void TestCountries() {
+        // Make sure America/Los_Angeles is in the "US" group, and
+        // Asia/Tokyo isn't.  Vice versa for the "JP" group.
+
+        String[] s = TimeZone.getAvailableIDs("US");
+        boolean la = false, tokyo = false;
+        String laZone = "America/Los_Angeles", tokyoZone = "Asia/Tokyo";
+
+        for (int i=0; i<s.length; ++i) {
+            if (s[i].equals(laZone)) {
+                la = true;
+            }
+            if (s[i].equals(tokyoZone)) {
+                tokyo = true;
+            }
+        }
+        if (!la || tokyo) {
+            errln("FAIL: " + laZone + " in US = " + la);
+            errln("FAIL: " + tokyoZone + " in US = " + tokyo);
+        }
+
+        s = TimeZone.getAvailableIDs("JP");
+        la = false; tokyo = false;
+
+        for (int i=0; i<s.length; ++i) {
+            if (s[i].equals(laZone)) {
+                la = true;
+            }
+            if (s[i].equals(tokyoZone)) {
+                tokyo = true;
+            }
+        }
+        if (la || !tokyo) {
+            errln("FAIL: " + laZone + " in JP = " + la);
+            errln("FAIL: " + tokyoZone + " in JP = " + tokyo);
+        }
+    }
+}
+
+//eof
diff --git a/src/com/ibm/test/translit/CompoundTransliteratorTest.java b/src/com/ibm/test/translit/CompoundTransliteratorTest.java
new file mode 100755
index 0000000..f396b27
--- /dev/null
+++ b/src/com/ibm/test/translit/CompoundTransliteratorTest.java
@@ -0,0 +1,282 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/CompoundTransliteratorTest.java,v $ 
+ * $Date: 2000/10/06 21:42:22 $ 
+ * $Revision: 1.1 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import com.ibm.util.Utility;
+import java.text.*;
+import java.util.*;
+
+
+/**
+ * @test
+ * @summary General test of CompoundTransliterator
+ */
+public class CompoundTransliteratorTest extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new CompoundTransliteratorTest().run(args);
+    }
+
+    public void TestConstruction(){
+        logln("Testing the construction of the compound Transliterator");
+        String names[]={"Greek-Latin", "Latin-Devanagari", "Devanagari-Latin", "Latin-Greek"};
+        Transliterator t1=null;
+        Transliterator t2=null;
+        Transliterator t3=null;
+        Transliterator t4=null;
+
+        try {
+            t1=Transliterator.getInstance(names[0]);
+            t2=Transliterator.getInstance(names[1]);
+            t3=Transliterator.getInstance(names[2]);
+            t4=Transliterator.getInstance(names[3]);
+        }catch(IllegalArgumentException ex) {
+            errln("FAIL: Transliterator construction failed");
+            throw ex;
+        }
+  
+        Transliterator[] transarray1={t1};
+        Transliterator[] transarray2={t1, t4};
+        Transliterator[] transarray3={t4, t1, t2};
+        Transliterator[] transarray4={t1, t2, t3, t4};
+
+        Transliterator[][] transarray={transarray1, transarray2, transarray3, transarray4}; 
+        final String IDs[]={
+            names[0], 
+            names[0]+";"+names[3], 
+            names[3]+";"+names[1]+";"+names[2], 
+            names[0]+";"+names[1]+";"+names[2]+";"+names[3] 
+        };
+
+   
+        for(int i=0; i<4; i++){
+            try{
+                CompoundTransliterator cpdtrans=new CompoundTransliterator(IDs[i]);
+            }catch(IllegalArgumentException ex1) {
+                errln("FAIL: construction using CompoundTransliterator(String ID) failed for " + IDs[i]);
+                throw ex1;
+            }
+
+            try{
+                CompoundTransliterator cpdtrans=new CompoundTransliterator(IDs[i], Transliterator.FORWARD);
+            }catch(IllegalArgumentException ex2) {
+                errln("FAIL: construction using CompoundTransliterator(String ID, int direction=FORWARD) failed for " + IDs[i]);
+                throw ex2;
+            }
+
+            try{
+                CompoundTransliterator cpdtrans=new CompoundTransliterator(IDs[i], Transliterator.REVERSE);
+            }catch(IllegalArgumentException ex3) {
+                errln("FAIL: construction using CompoundTransliterator(String ID, int direction=REVERSE) failed for " + IDs[i]);
+                throw ex3;
+            }
+
+            try{
+                CompoundTransliterator cpdtrans=new CompoundTransliterator(IDs[i], Transliterator.FORWARD, null);
+            }catch(IllegalArgumentException ex4) {
+                errln("FAIL: construction using CompoundTransliterator(String ID, int direction=FORWARD," +
+                        "UnicodeFilter adoptedFilter=0) failed for " + IDs[i]);
+                throw ex4;
+            }
+  
+       
+            try{
+                CompoundTransliterator cpdtrans2=new CompoundTransliterator(transarray[i], null);
+            }catch(IllegalArgumentException ex5) {
+                errln("FAIL: Construction using CompoundTransliterator(Transliterator transliterators[]," +
+                       "UnicodeFilter adoptedFilter = 0)  failed");
+                throw ex5;
+            }
+
+            
+        }
+   
+    }
+ 
+    public void TestGetTransliterator(){
+        logln("Testing the getTransliterator() API of CompoundTransliterator");
+        String ID="Latin-Greek;Greek-Latin;Latin-Devanagari;Devanagari-Latin;Latin-Cyrillic;Cyrillic-Latin;Unicode-Hex;Hex-Unicode";
+        CompoundTransliterator ct1=null;
+        try{
+            ct1=new CompoundTransliterator(ID);
+        }catch(IllegalArgumentException iae) {
+            errln("CompoundTransliterator construction failed for ID=" + ID);
+            throw iae;
+         }
+        int count=ct1.getCount();
+        String array[]=split(ID, ';');
+        if (count != array.length) {
+            errln("Error: getCount() failed. Expected:" + array.length + " got:" + count);
+        }
+        for(int i=0; i < count; i++){
+            String child= ct1.getTransliterator(i).getID();
+            if(!child.equals(array[i])){
+                errln("Error getTransliterator() failed: Expected->" + array[i] + " Got->" + child);
+            }else {
+                logln("OK: getTransliterator() passed: Expected->" + array[i] + " Got->" + child);
+            }
+        }
+
+        
+    }
+ 
+       
+    public void TestTransliterate(){
+        logln("Testing the handleTransliterate() API of CompoundTransliterator");
+        CompoundTransliterator ct1=null;
+        try{
+            ct1=new CompoundTransliterator("Unicode-Hex;Hex-Unicode");
+        }catch(IllegalArgumentException iae){
+            errln("FAIL: construction using CompoundTransliterator(String ID) failed for " + "Unicode-Hex;Hex-Unicode");
+            throw iae;
+        }
+    
+        String s="abcabc";
+        expect(ct1, s, s);
+        Transliterator.Position index = new Transliterator.Position();
+        ReplaceableString rsource2=new ReplaceableString(s);
+        String expectedResult=s;
+        ct1.transliterate(rsource2, index);
+        ct1.finishTransliteration(rsource2, index);
+        String result=rsource2.toString();
+        expectAux(ct1.getID() + ":ReplaceableString, index(0,0,0,0)", s + "->" + rsource2, result.equals(expectedResult), expectedResult);
+     
+        Transliterator.Position index2 = new Transliterator.Position(1,3,2,3);
+        ReplaceableString rsource3=new ReplaceableString(s);
+        ct1.transliterate(rsource3, index2); 
+        ct1.finishTransliteration(rsource3, index2);
+        result=rsource3.toString();
+        expectAux(ct1.getID() + ":String, index2(1,2,2,3)", s + "->" + rsource3, result.equals(expectedResult), expectedResult);
+
+       
+        String Data[]={
+             //ID, input string, transliterated string
+             "Unicode-Hex;Hex-Unicode;Unicode-Hex",     "hello",  "\\u0068\\u0065\\u006C\\u006C\\u006F", 
+             "Unicode-Hex;Hex-Unicode",                 "hello! How are you?",  "hello! How are you?",
+             "Devanagari-Latin;Latin-Devanagari",       "\u092D\u0948'\u0930'\u0935",  "\u092D\u0948\u0930\u0935", // quotes lost
+             "Latin-Cyrillic;Cyrillic-Latin",           "a'b'k'd'e'f'g'h'i'j'Shch'shch'zh'h", "abkdefghijShchshchzhh",
+             "Latin-Greek;Greek-Latin",                 "ABGabgAKLMN", "ABGabgAKLMN",
+             "Latin-Arabic;Arabic-Latin",               "Ad'r'a'b'i'k'dh'dd'gh", "Adrabikdhddgh",
+             "Hiragana-Katakana",                       "\u3041\u308f\u3099\u306e\u304b\u3092\u3099", 
+                                                                 "\u30A1\u30f7\u30ce\u30ab\u30fa",  
+             "Hiragana-Katakana;Katakana-Hiragana",     "\u3041\u308f\u3099\u306e\u304b\u3051", 
+                                                                 "\u3041\u308f\u3099\u306e\u304b\u3051",
+             "Katakana-Hiragana;Hiragana-Katakana",     "\u30A1\u30f7\u30ce\u30f5\u30f6", 
+                                                                 "\u30A1\u30f7\u30ce\u30ab\u30b1",  
+             "Latin-Kana;Kana-Latin",                   "VAVIVUVEVOhuZIZUZONINUNAsesuzezu", 
+                                                                 "VAVIVUVEVOhuZIZUZONINUNAsesuzezu",  
+        };
+        CompoundTransliterator ct2=null;
+        for(int i=0; i<Data.length; i+=3){
+            try{
+                ct2=new CompoundTransliterator(Data[i+0]);
+            }catch(IllegalArgumentException iae2){
+                errln("FAIL: CompoundTransliterator construction failed for " + Data[i+0]);
+                throw iae2;
+            }
+        expect(ct2, Data[i+1], Data[i+2]);
+        }
+   
+    }
+ 
+
+    //======================================================================
+    // Support methods
+    //======================================================================
+
+     /**
+     * Splits a string,
+    */
+    private static String[] split(String s, char divider) {
+      
+	// see how many there are
+        int count = 1;
+	for (int i = 0; i < s.length(); ++i) {
+	   if (s.charAt(i) == divider) ++count;
+	}
+	    
+	// make an array with them
+	String[] result = new String[count];
+	int last = 0;
+	int current = 0;
+	int i;
+	for (i = 0; i < s.length(); ++i) {
+	    if (s.charAt(i) == divider) {
+	        result[current++] = s.substring(last,i);
+	        last = i+1;
+	    }
+	}
+	result[current++] = s.substring(last,i);
+	return result;
+    }
+
+    private void expect(CompoundTransliterator t, String source, String expectedResult) {
+        String result = t.transliterate(source);
+        expectAux(t.getID() + ":String", source, result, expectedResult);
+
+        ReplaceableString rsource = new ReplaceableString(source);
+        t.transliterate(rsource);
+        result = rsource.toString();
+        expectAux(t.getID() + ":Replaceable", source, result, expectedResult);
+
+        // Test keyboard (incremental) transliteration -- this result
+        // must be the same after we finalize (see below).
+        rsource.replace(0, rsource.length(), "");
+        Transliterator.Position index = new Transliterator.Position();
+        StringBuffer log = new StringBuffer();
+
+        for (int i=0; i<source.length(); ++i) {
+            if (i != 0) {
+                log.append(" + ");
+            }
+            log.append(source.charAt(i)).append(" -> ");
+            t.transliterate(rsource, index,
+                            String.valueOf(source.charAt(i)));
+            // Append the string buffer with a vertical bar '|' where
+            // the committed index is.
+            String s = rsource.toString();
+            log.append(s.substring(0, index.start)).
+                append('|').
+                append(s.substring(index.start));
+        }
+        
+        // As a final step in keyboard transliteration, we must call
+        // transliterate to finish off any pending partial matches that
+        // were waiting for more input.
+        t.finishTransliteration(rsource, index);
+        result = rsource.toString();
+        log.append(" => ").append(rsource.toString());
+        expectAux(t.getID() + ":Keyboard", log.toString(),
+                 result.equals(expectedResult),
+                 expectedResult);
+
+    }
+    private void expectAux(String tag, String source,
+                  String result, String expectedResult) {
+        expectAux(tag, source + " -> " + result,
+                 result.equals(expectedResult),
+                 expectedResult);
+    }
+
+    private void expectAux(String tag, String summary, boolean pass, String expectedResult) {
+        if (pass) {
+            logln("(" + tag + ") " + Utility.escape(summary));
+        } else {
+            errln("FAIL: (" + tag+ ") "
+                + Utility.escape(summary)
+                + ", expected " + Utility.escape(expectedResult));
+        }
+    }  
+}
+
diff --git a/src/com/ibm/test/translit/HexToUnicodeTransliteratorTest.java b/src/com/ibm/test/translit/HexToUnicodeTransliteratorTest.java
new file mode 100755
index 0000000..0e4c491
--- /dev/null
+++ b/src/com/ibm/test/translit/HexToUnicodeTransliteratorTest.java
@@ -0,0 +1,261 @@
+
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/HexToUnicodeTransliteratorTest.java,v $ 
+ * $Date: 2000/10/09 16:32:07 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import com.ibm.util.Utility;
+import java.text.*;
+import java.util.*;
+
+
+/**
+ * @test
+ * @summary General test of HexToUnicodeTransliterator
+ */
+public class HexToUnicodeTransliteratorTest extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new HexToUnicodeTransliteratorTest().run(args);
+    }
+
+    /**
+    * Used by TestConstruction() and TestTransliterate.
+    */
+    UnicodeFilter HexFilter=new UnicodeFilter() {
+        public boolean contains(char c) {
+            if(c == 0x0061 || c == 0x0063 )
+                return false;
+            else
+                return true;
+       }
+    };
+
+    public void TestConstruction(){
+        logln("Testing the construction HexToUnicodeTransliterator()");
+        HexToUnicodeTransliterator trans1=new HexToUnicodeTransliterator();
+       
+
+        logln("Testing the cosntruction HexToUnicodeTransliterator(pattern)");
+        String pattern="\\\\U+0000abc";
+        try{
+            trans1=new HexToUnicodeTransliterator(pattern);
+        }catch(IllegalArgumentException ex2) {
+            errln("FAIL: HexToUnicodeTransliterator construction failed with pattern=" + pattern + " Exception= " + ex2.toString());
+        }
+
+        logln("Testing the cosntruction HexToUnicodeTransliterator(pattern) with illegal pattern");
+        String pattern2="\\X+";
+        try{
+            trans1=new HexToUnicodeTransliterator(pattern2);
+        }catch(IllegalArgumentException ex3) {
+            logln("OK: construction with Illegal pattern handled correctly");
+        }  
+        
+        logln("Testing the construction HexToUnicodeTransliterator(pattern, adoptedFilter=null)");
+        try{
+            trans1=new HexToUnicodeTransliterator(pattern, null);
+        }catch(IllegalArgumentException ex4) {
+            errln("FAIL: HexToUnicodeTransliterator(pattern, adoptedFilter=null) construction failed. Exception= " + ex4.toString());
+        }
+
+        logln("Testing the construction HexToUnicodeTransliterator(pattern, adoptedFilter)");
+        try{
+            trans1=new HexToUnicodeTransliterator(pattern, HexFilter);
+        }catch(IllegalArgumentException ex4) {
+            errln("FAIL: HexToUnicodeTransliterator(pattern, adoptedFilter) construction failed. Exception= " + ex4.toString());
+        }
+
+    }
+    public void TestPattern(){
+        logln("Testing the applyPattern() and toPattern() API of HexToUnicodeTransliterator");
+        /*default transliterator has pattern \\u0000*/
+        HexToUnicodeTransliterator transdefault=new HexToUnicodeTransliterator();
+                
+        String defaultpattern=transdefault.toPattern();
+        String pattern1="\\\\U+0000";
+        
+        HexToUnicodeTransliterator trans1=null;
+        try{
+            trans1=new HexToUnicodeTransliterator(pattern1, null);
+        }catch(IllegalArgumentException ex1) {
+            errln("FAIL: HexToUnicodeTransliterator construction failed with pattern =" + pattern1 +
+                   "Exception:" + ex1.toString());
+        }
+
+        /*test toPattern() */
+        if(transdefault.toPattern().equals(trans1.toPattern()) == true ||
+            transdefault.toPattern().equals("\\\\u0000;\\\\U0000;u+0000;U+0000") != true ||
+            trans1.toPattern().equals(pattern1) != true ){
+            errln("Error: toPattern() failed");
+        }
+
+        /*apply patterns for transdefault*/
+        String str="abKf";
+        expectPattern(transdefault,  pattern1, "\\U+0061\\U+0062\\U+004B\\U+0066", str);
+        expectPattern(transdefault,  "\\U##00,", "U61,U62,U4B,U66,", str);
+        expectPattern(transdefault, defaultpattern, "\\u0061\\u0062\\u004B\\u0066", str);
+        expectPattern(trans1, "\\uni0000", "uni0061uni0062uni004Buni0066", str);
+        expectPattern(trans1, "\\\\S-0000-E", "\\S-0061-E\\S-0062-E\\S-004B-E\\S-0066-E", str);
+        
+        expectPattern(trans1, "\\\\S-0000-E", "\\S-0061-E\\S-0062-E\\S-004B-E\\S-0066-E",  str);
+        expectPattern(trans1, "\\u##0000", "\\u##0061\\u##0062", "FAIL");
+        expectPattern(trans1, "\\*0000",  "*0061*0062*004B*0066",  str); 
+        expectPattern(trans1, "\\u####", "\\u##0061\\u##0062", "FAIL");
+  
+
+    }
+
+    public void TestSimpleTransliterate(){ 
+        String pattern1="\\\\U+0000";
+        HexToUnicodeTransliterator trans1=null;
+        try{
+            trans1=new HexToUnicodeTransliterator(pattern1, null);
+        }catch(IllegalArgumentException iae){
+            errln("HexToUnicodeTransliterator(pattern1, null) construction failed with pattern =" 
+                  + pattern1 + "Exception:" + iae.toString());
+        }
+        String source="He\\U+006C\\U+006C\\U+006F";
+        String expected="Hello";
+
+        expectTranslit(trans1, ":Replaceable ", source,  1, source.length(), 2, expected); 
+        expect(trans1, "", "\\U+0048\\U+0065\\U+006C\\U+006C\\U+006F", expected);
+
+        HexToUnicodeTransliterator transdefault=new HexToUnicodeTransliterator();
+        
+        HexToUnicodeTransliterator trans2=null;
+        try{
+            trans2=new HexToUnicodeTransliterator(transdefault.toPattern(), HexFilter);
+        }catch(IllegalArgumentException ex2){
+            errln("HexToUnicodeTransliterator(pattern1, HexFilter) construction failed with pattern =" 
+                  + pattern1 + "Exception:" + ex2.toString());
+        }
+        expect(trans2, "with Filter(0x0061, 0x0063) ", "\u0061\u0062\u0063",   "\u0061b\u0063");
+    }
+   
+    public void TestTransliterate(){
+        String Data[]={
+            //pattern, source, index.contextStart, index.contextLimit, index.start, expectedResult,
+       //     "U+##00",    "abU+63", "1", "7", "2",  "abc", 
+            "\\\\u0000", "a\\u0062c", "1", "7", "1",  "abc", 
+            "Uni0000",   "abUni0063", "1", "9", "2",  "abc", 
+            "U[0000]",   "heU[006C]U[006C]o", "0", "16", "2", "hello", 
+       //     "prefix-0000-suffix", "aprefix-0062-suffixprefix-0063-suffix", "1", "39", "1", "abc", 
+            "*##00*",    "hell*6F**74**68**65*re",  "1", "20", "4", "hellothere", 
+
+        };
+        HexToUnicodeTransliterator trans1=null;
+        for(int i=0; i<Data.length; i+=6){
+            try{
+                trans1=new HexToUnicodeTransliterator(Data[i+0], null);
+            }catch(IllegalArgumentException ex1){
+                errln("HexToUnicodeTransliterator(pattern1, null) construction failed with pattern =" 
+                     + Data[i+0] + "Exception:" + ex1.toString());
+            }
+            expectTranslit(trans1, "", Data[i+1], Integer.parseInt(Data[i+2]), 
+                       Integer.parseInt(Data[i+3]), Integer.parseInt(Data[i+4]), Data[i+5] );
+            expect(trans1, "", Data[i+1], Data[i+5]);
+        }
+    }
+        
+    //======================================================================
+    // Support methods
+    //======================================================================
+
+    private void expectTranslit(HexToUnicodeTransliterator t,
+                                   String message, String source, 
+                                   int start, int limit, int cursor,  
+                                   String expectedResult){
+    
+
+        ReplaceableString rsource = new ReplaceableString(source);
+        Transliterator.Position index = new Transliterator.Position(start, limit, cursor, limit);
+        t.transliterate(rsource, index);
+        t.finishTransliteration(rsource, index);
+        String result=rsource.toString();
+        expectAux(t.getID() + ":keyboard " + message, source + "->" + result, result.equals(expectedResult), expectedResult);
+    }
+    private void expectPattern(HexToUnicodeTransliterator t,
+                                 String pattern, String source, String expectedResult){
+
+        try{
+            t.applyPattern(pattern);
+        }catch(IllegalArgumentException iae){
+            if(expectedResult.equals("FAIL")){
+                logln("OK: calling applyPattern() with illegal pattern failed as expected." + iae.toString());
+            } else{
+                errln("FAIL: applyPattern() failed with pattern =" + pattern + "--->" + iae.toString());
+            }
+        }
+        if(!expectedResult.equals("FAIL")){
+            if(!t.toPattern().equals(pattern)) {
+                errln("FAIL: applyPattern or toPatten failed.  Expected: " + pattern + "Got: " + t.toPattern());
+            }else{
+                logln("OK: applyPattern passed. Testing transliteration");
+                expect(t, " with pattern "+pattern, source, expectedResult);
+            }
+        }
+    }
+    private void expect(HexToUnicodeTransliterator t,  String message, String source, String expectedResult) {
+    
+        String result=t.transliterate(source);
+        expectAux(t.getID() + ":String " + message, source + "->" + result, result.equals(expectedResult), expectedResult);
+
+        ReplaceableString rsource = new ReplaceableString(source);
+        t.transliterate(rsource);
+        result = rsource.toString();
+        expectAux(t.getID() + ":Replaceable" + message, source + "->" + result, result.equals(expectedResult), expectedResult);
+
+        // Test keyboard (incremental) transliteration -- this result
+        // must be the same after we finalize (see below).
+        rsource.replace(0, rsource.length(), "");
+        Transliterator.Position index = new Transliterator.Position();
+        StringBuffer log = new StringBuffer();
+
+        for (int i=0; i<source.length(); ++i) {
+            if (i != 0) {
+                log.append(" + ");
+            }
+            log.append(source.charAt(i)).append(" -> ");
+            t.transliterate(rsource, index,
+                            String.valueOf(source.charAt(i)));
+            // Append the string buffer with a vertical bar '|' where
+            // the committed index is.
+            String s = rsource.toString();
+            log.append(s.substring(0, index.start)).
+                append('|').
+                append(s.substring(index.start));
+        }
+        
+        // As a final step in keyboard transliteration, we must call
+        // transliterate to finish off any pending partial matches that
+        // were waiting for more input.
+        t.finishTransliteration(rsource, index);
+        result = rsource.toString();
+        log.append(" => ").append(rsource.toString());
+        expectAux(t.getID() + ":Keyboard", log.toString() + "\n" + source + " -> " + result, result.equals(expectedResult), expectedResult);
+
+    }
+    private void expectAux(String tag, String summary, boolean pass,  String expectedResult) {
+        if (pass) {
+            logln("(" + tag + ") " + Utility.escape(summary));
+        } else {
+            errln("FAIL: (" + tag+ ") "
+                + Utility.escape(summary)
+                + ", expected " + Utility.escape(expectedResult));
+        }
+    }  
+}
+
+
+
diff --git a/src/com/ibm/test/translit/JamoTest.java b/src/com/ibm/test/translit/JamoTest.java
new file mode 100755
index 0000000..8784f1b
--- /dev/null
+++ b/src/com/ibm/test/translit/JamoTest.java
@@ -0,0 +1,417 @@
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import com.ibm.util.Utility;
+import java.text.*;
+import java.util.*;
+
+/**
+ * @test
+ * @summary Test the Latin-Jamo transliterator
+ */
+public class JamoTest extends TransliteratorTest {
+
+    public static void main(String[] args) throws Exception {
+        new JamoTest().run(args);
+    }
+
+    public void TestJamo() {
+        Transliterator latinJamo = Transliterator.getInstance("Latin-Jamo");
+        Transliterator jamoLatin = latinJamo.getInverse();
+
+        String[] CASE = {
+            // Column 1 is the latin text L1 to be fed to Latin-Jamo
+            // to yield output J.
+
+            // Column 2 is expected value of J.  J is fed to
+            // Jamo-Latin to yield output L2.
+
+            // Column 3 is expected value of L2.  If the expected
+            // value of L2 is L1, then L2 is null.
+            "bab", "(Bi)(A)(Bf)", null,
+            "babb", "(Bi)(A)(Bf)(Bi)(EU)", "bab-beu",
+            "babbba", "(Bi)(A)(Bf)(BB)(A)", null,
+            "bagg", "(Bi)(A)(GGf)", null,
+            "baggga", "(Bi)(A)(GGf)(Gi)(A)", null,
+            "bag-gga", "(Bi)(A)(Gf)(GGi)(A)", null,
+            "kabsa", "(Ki)(A)(Bf)(Si)(A)", null,
+            "kabska", "(Ki)(A)(BS)(Ki)(A)", null,
+            "gabsbka", "(Gi)(A)(BS)(Bi)(EU)(Ki)(A)", "gabsbeuka", // not (Kf)
+            "gga", "(GGi)(A)", null,
+            "bsa", "(Bi)(EU)(Si)(A)", "beusa",
+            "agg", "(IEUNG)(A)(GGf)", null,
+            "agga", "(IEUNG)(A)(GGi)(A)", null,
+            "la", "(R)(A)", "ra",
+            "bs", "(Bi)(EU)(Sf)", "beus",
+            "kalgga", "(Ki)(A)(L)(GGi)(A)", null,
+
+            // 'r' in a final position is treated like 'l'
+            "karka", "(Ki)(A)(L)(Ki)(A)", "kalka",
+        };
+
+        for (int i=0; i<CASE.length; i+=3) {
+            String jamo = nameToJamo(CASE[i+1]);
+            if (CASE[i+2] == null) {
+                expect(latinJamo, CASE[i], jamo, jamoLatin);
+            } else {
+                // Handle case where round-trip is expected to fail
+                expect(latinJamo, CASE[i], jamo);
+                expect(jamoLatin, jamo, CASE[i+2]);
+            }
+        }
+    }
+
+    /**
+     * These are problems turned up by the Hangul-Jamo;Jamo-Latin
+     * round trip test.
+     */
+    public void TestRoundTrip() {
+        String HANGUL[] = { "\uAC03\uC2F8",
+                            "\uC544\uC5B4"};
+        
+        Transliterator latinJamo = Transliterator.getInstance("Latin-Jamo");
+        Transliterator jamoLatin = latinJamo.getInverse();
+        Transliterator jamoHangul = Transliterator.getInstance("Jamo-Hangul");
+        Transliterator hangulJamo = jamoHangul.getInverse();
+
+        StringBuffer buf = new StringBuffer();
+        for (int i=0; i<HANGUL.length; ++i) {
+            String hangul = HANGUL[i];
+            String jamo = hangulJamo.transliterate(hangul);
+            String latin = jamoLatin.transliterate(jamo);
+            String jamo2 = latinJamo.transliterate(latin);
+            String hangul2 = jamoHangul.transliterate(jamo2);
+            buf.setLength(0);
+            buf.append(hangul + " => " +
+                       jamoToName(jamo) + " => " +
+                       latin + " => " + jamoToName(jamo2)
+                       + " => " + hangul2
+                       );
+            if (!hangul.equals(hangul2)) {
+                errln("FAIL: " + Utility.escape(buf.toString()));
+            } else {
+                logln(Utility.escape(buf.toString()));
+            }
+        }
+    }
+
+    public void TestRealText() {
+        Transliterator latinJamo = Transliterator.getInstance("Latin-Jamo");
+        Transliterator jamoLatin = latinJamo.getInverse();
+        Transliterator jamoHangul = Transliterator.getInstance("Jamo-Hangul");
+        Transliterator hangulJamo = jamoHangul.getInverse();
+        Transliterator rt = new CompoundTransliterator(new Transliterator[] {
+            hangulJamo, jamoLatin, latinJamo, jamoHangul });
+
+        int pos = 0;
+        StringBuffer buf = new StringBuffer();
+        int total = 0;
+        int errors = 0;
+        while (pos < WHAT_IS_UNICODE.length()) {
+            int space = WHAT_IS_UNICODE.indexOf(' ', pos+1);
+            if (space < 0) {
+                space = WHAT_IS_UNICODE.length();
+            }
+            if (pos < space) {
+                ++total;
+                String hangul = WHAT_IS_UNICODE.substring(pos, space);
+                String hangulX = rt.transliterate(hangul);
+                if (!hangul.equals(hangulX)) {
+                    ++errors;
+                    String jamo = hangulJamo.transliterate(hangul);
+                    String latin = jamoLatin.transliterate(jamo);
+                    String jamo2 = latinJamo.transliterate(latin);
+                    String hangul2 = jamoHangul.transliterate(jamo2);
+                    
+                    buf.setLength(0);
+                    buf.append("FAIL: ");
+                    if (!hangul2.equals(hangulX)) {
+                        buf.append("(Weird: " + hangulX + " != " + hangul2 + ")");
+                    }
+                    // The Hangul-Jamo conversion is not usually the
+                    // bug here, so we hide it from display.
+                    // Uncomment lines to see the Hangul.
+                    buf.append(//hangul + " => " +
+                               jamoToName(jamo) + " => " +
+                               latin + " => " + jamoToName(jamo2)
+                               //+ " => " + hangul2
+                               );
+                    errln(Utility.escape(buf.toString()));
+                }
+            }
+            pos = space+1;
+        }
+        if (errors != 0) {
+            errln("Test word failures: " + errors + " out of " + total);
+        } else {
+            logln("All " + total + " test words passed");
+        }
+    }
+
+    // Test text taken from the Unicode web site
+    static final String WHAT_IS_UNICODE =
+
+        "\uc720\ub2c8\ucf54\ub4dc\uc5d0 \ub300\ud574 ? " +
+
+        "\uc5b4\ub5a4 \ud50c\ub7ab\ud3fc, \uc5b4\ub5a4 " +
+        "\ud504\ub85c\uadf8\ub7a8, \uc5b4\ub5a4 \uc5b8\uc5b4\uc5d0\ub3c4 " +
+        "\uc0c1\uad00\uc5c6\uc774 \uc720\ub2c8\ucf54\ub4dc\ub294 \ubaa8\ub4e0 " +
+        "\ubb38\uc790\uc5d0 \ub300\ud574 \uace0\uc720 \ubc88\ud638\ub97c " +
+        "\uc81c\uacf5\ud569\ub2c8\ub2e4. " +
+        
+        "\uae30\ubcf8\uc801\uc73c\ub85c \ucef4\ud4e8\ud130\ub294 " +
+        "\uc22b\uc790\ub9cc \ucc98\ub9ac\ud569\ub2c8\ub2e4. \uae00\uc790\ub098 " +
+        "\ub2e4\ub978 \ubb38\uc790\uc5d0\ub3c4 \uc22b\uc790\ub97c " +
+        "\uc9c0\uc815\ud558\uc5ec " +
+        "\uc800\uc7a5\ud569\ub2c8\ub2e4. \uc720\ub2c8\ucf54\ub4dc\uac00 " +
+        "\uac1c\ubc1c\ub418\uae30 \uc804\uc5d0\ub294 \uc774\ub7ec\ud55c " +
+        "\uc22b\uc790\ub97c \uc9c0\uc815\ud558\uae30 \uc704\ud574 \uc218\ubc31 " +
+        "\uac00\uc9c0\uc758 \ub2e4\ub978 \uae30\ud638\ud654 " +
+        "\uc2dc\uc2a4\ud15c\uc744 " +
+        "\uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. \ub2e8\uc77c \uae30\ud638\ud654 " +
+        "\ubc29\ubc95\uc73c\ub85c\ub294 \ubaa8\ub4e0 \ubb38\uc790\ub97c " +
+        "\ud3ec\ud568\ud560 \uc218 \uc5c6\uc5c8\uc2b5\ub2c8\ub2e4. \uc608\ub97c " +
+        "\ub4e4\uc5b4 \uc720\ub7fd \uc5f0\ud569\uc5d0\uc11c\ub9cc " +
+        "\ubcf4\ub354\ub77c\ub3c4 \ubaa8\ub4e0 \uac01 \ub098\ub77c\ubcc4 " +
+        "\uc5b8\uc5b4\ub97c \ucc98\ub9ac\ud558\ub824\uba74 \uc5ec\ub7ec " +
+        "\uac1c\uc758 \ub2e4\ub978 \uae30\ud638\ud654 \ubc29\ubc95\uc774 " +
+        "\ud544\uc694\ud569\ub2c8\ub2e4. \uc601\uc5b4\uc640 \uac19\uc740 " +
+        "\ub2e8\uc77c \uc5b8\uc5b4\uc758 \uacbd\uc6b0\ub3c4 " +
+        "\uacf5\ud1b5\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \ubaa8\ub4e0 " +
+        "\uae00\uc790, \ubb38\uc7a5 \ubd80\ud638 \ubc0f " +
+        "\ud14c\ud06c\ub2c8\uceec \uae30\ud638\uc5d0 \ub9de\ub294 \ub2e8\uc77c " +
+        "\uae30\ud638\ud654 \ubc29\ubc95\uc744 \uac16\uace0 \uc788\uc9c0 " +
+        "\ubabb\ud558\uc600\uc2b5\ub2c8\ub2e4. " +
+        
+        "\uc774\ub7ec\ud55c \uae30\ud638\ud654 \uc2dc\uc2a4\ud15c\uc740 " +
+        "\ub610\ud55c \ub2e4\ub978 \uae30\ud638\ud654 \uc2dc\uc2a4\ud15c\uacfc " +
+        "\ucda9\ub3cc\ud569\ub2c8\ub2e4. \uc989 \ub450 \uac00\uc9c0 " +
+        "\uae30\ud638\ud654 \ubc29\ubc95\uc774 \ub450 \uac1c\uc758 \ub2e4\ub978 " +
+        "\ubb38\uc790\uc5d0 \ub300\ud574 \uac19\uc740 \ubc88\ud638\ub97c " +
+        "\uc0ac\uc6a9\ud558\uac70\ub098 \uac19\uc740 \ubb38\uc790\uc5d0 " +
+        "\ub300\ud574 \ub2e4\ub978 \ubc88\ud638\ub97c \uc0ac\uc6a9\ud560 \uc218 " +
+        "\uc788\uc2b5\ub2c8\ub2e4. \uc8fc\uc5b4\uc9c4 \ubaa8\ub4e0 " +
+        "\ucef4\ud4e8\ud130(\ud2b9\ud788 \uc11c\ubc84)\ub294 \uc11c\ub85c " +
+        "\ub2e4\ub978 \uc5ec\ub7ec \uac00\uc9c0 \uae30\ud638\ud654 " +
+        "\ubc29\ubc95\uc744 \uc9c0\uc6d0\ud574\uc57c " +
+        "\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098, \ub370\uc774\ud130\ub97c " +
+        "\uc11c\ub85c \ub2e4\ub978 \uae30\ud638\ud654 \ubc29\ubc95\uc774\ub098 " +
+        "\ud50c\ub7ab\ud3fc \uac04\uc5d0 \uc804\ub2ec\ud560 \ub54c\ub9c8\ub2e4 " +
+        "\uadf8 \ub370\uc774\ud130\ub294 \ud56d\uc0c1 \uc190\uc0c1\uc758 " +
+        "\uc704\ud5d8\uc744 \uacaa\uac8c \ub429\ub2c8\ub2e4. " +
+        
+        "\uc720\ub2c8\ucf54\ub4dc\ub85c \ubaa8\ub4e0 \uac83\uc744 " +
+        "\ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4! " +
+        "\uc720\ub2c8\ucf54\ub4dc\ub294 \uc0ac\uc6a9 \uc911\uc778 " +
+        "\ud50c\ub7ab\ud3fc, \ud504\ub85c\uadf8\ub7a8, \uc5b8\uc5b4\uc5d0 " +
+        "\uad00\uacc4\uc5c6\uc774 \ubb38\uc790\ub9c8\ub2e4 \uace0\uc720\ud55c " +
+        "\uc22b\uc790\ub97c " +
+        "\uc81c\uacf5\ud569\ub2c8\ub2e4. \uc720\ub2c8\ucf54\ub4dc " +
+        "\ud45c\uc900\uc740 " + // "Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, " +
+        // "Sun, Sybase, Unisys " + 
+        "\ubc0f \uae30\ud0c0 \uc5ec\ub7ec " +
+        "\ud68c\uc0ac\uc640 \uac19\uc740 \uc5c5\uacc4 " +
+        "\uc120\ub450\uc8fc\uc790\uc5d0 \uc758\ud574 " +
+        "\ucc44\ud0dd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc720\ub2c8\ucf54\ub4dc\ub294 " +
+        // "XML, Java, ECMAScript(JavaScript), LDAP, CORBA 3.0, WML " +
+        "\ub4f1\uacfc " +
+        "\uac19\uc774 \ud604\uc7ac \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 " +
+        "\ud45c\uc900\uc5d0\uc11c \ud544\uc694\ud558\uba70 \uc774\ub294 ISO/IEC " +
+        "10646\uc744 \uad6c\ud604\ud558\ub294 \uacf5\uc2dd\uc801\uc778 " +
+        "\ubc29\ubc95\uc785\ub2c8\ub2e4. \uc774\ub294 \ub9ce\uc740 \uc6b4\uc601 " +
+        "\uccb4\uc81c, \uc694\uc998 \uc0ac\uc6a9\ub418\ub294 \ubaa8\ub4e0 " +
+        "\ube0c\ub77c\uc6b0\uc800 \ubc0f \uae30\ud0c0 \ub9ce\uc740 " +
+        "\uc81c\ud488\uc5d0\uc11c " +
+        "\uc9c0\uc6d0\ub429\ub2c8\ub2e4. \uc720\ub2c8\ucf54\ub4dc " +
+        "\ud45c\uc900\uc758 \ubd80\uc0c1\uacfc \uc774\ub97c " +
+        "\uc9c0\uc6d0\ud558\ub294 \ub3c4\uad6c\uc758 \uac00\uc6a9\uc131\uc740 " +
+        "\ucd5c\uadfc \uc804 \uc138\uacc4\uc5d0 \ubd88\uace0 \uc788\ub294 " +
+        "\uae30\uc220 \uacbd\ud5a5\uc5d0\uc11c \uac00\uc7a5 \uc911\uc694\ud55c " +
+        "\ubd80\ubd84\uc744 \ucc28\uc9c0\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. " +
+        
+        "\uc720\ub2c8\ucf54\ub4dc\ub97c " +
+        "\ud074\ub77c\uc774\uc5b8\ud2b8-\uc11c\ubc84 \ub610\ub294 " +
+        "\ub2e4\uc911-\uc5f0\uacb0 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uacfc " +
+        "\uc6f9 \uc0ac\uc774\ud2b8\uc5d0 \ud1b5\ud569\ud558\uba74 " +
+        "\ub808\uac70\uc2dc \ubb38\uc790 \uc138\ud2b8 \uc0ac\uc6a9\uc5d0 " +
+        "\uc788\uc5b4\uc11c \uc0c1\ub2f9\ud55c \ube44\uc6a9 \uc808\uac10 " +
+        "\ud6a8\uacfc\uac00 " +
+        "\ub098\ud0c0\ub0a9\ub2c8\ub2e4. \uc720\ub2c8\ucf54\ub4dc\ub97c " +
+        "\ud1b5\ud574 \ub9ac\uc5d4\uc9c0\ub2c8\uc5b4\ub9c1 \uc5c6\uc774 " +
+        "\ub2e4\uc911 \ud50c\ub7ab\ud3fc, \uc5b8\uc5b4 \ubc0f \uad6d\uac00 " +
+        "\uac04\uc5d0 \ub2e8\uc77c \uc18c\ud504\ud2b8\uc6e8\uc5b4 " +
+        "\ud50c\ub7ab\ud3fc \ub610\ub294 \ub2e8\uc77c \uc6f9 " +
+        "\uc0ac\uc774\ud2b8\ub97c \ubaa9\ud45c\ub85c \uc0bc\uc744 \uc218 " +
+        "\uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc0ac\uc6a9\ud558\uba74 " +
+        "\ub370\uc774\ud130\ub97c \uc190\uc0c1 \uc5c6\uc774 \uc5ec\ub7ec " +
+        "\uc2dc\uc2a4\ud15c\uc744 \ud1b5\ud574 \uc804\uc1a1\ud560 \uc218 " +
+        "\uc788\uc2b5\ub2c8\ub2e4. " +
+        
+        "\uc720\ub2c8\ucf54\ub4dc \ucf58\uc18c\uc2dc\uc5c4\uc5d0 \ub300\ud574 " +
+        "\uc720\ub2c8\ucf54\ub4dc \ucf58\uc18c\uc2dc\uc5c4\uc740 " +
+        "\ube44\uc601\ub9ac \uc870\uc9c1\uc73c\ub85c\uc11c \ud604\ub300 " +
+        "\uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uacfc " +
+        "\ud45c\uc900\uc5d0\uc11c \ud14d\uc2a4\ud2b8\uc758 \ud45c\ud604\uc744 " +
+        "\uc9c0\uc815\ud558\ub294 \uc720\ub2c8\ucf54\ub4dc \ud45c\uc900\uc758 " +
+        "\uc0ac\uc6a9\uc744 \uac1c\ubc1c\ud558\uace0 \ud655\uc7a5\ud558\uba70 " +
+        "\uc7a5\ub824\ud558\uae30 \uc704\ud574 " +
+        "\uc138\uc6cc\uc84c\uc2b5\ub2c8\ub2e4. \ucf58\uc18c\uc2dc\uc5c4 " +
+        "\uba64\ubc84\uc27d\uc740 \ucef4\ud4e8\ud130\uc640 \uc815\ubcf4 " +
+        "\ucc98\ub9ac \uc0b0\uc5c5\uc5d0 \uc885\uc0ac\ud558\uace0 \uc788\ub294 " +
+        "\uad11\ubc94\uc704\ud55c \ud68c\uc0ac \ubc0f \uc870\uc9c1\uc758 " +
+        "\ubc94\uc704\ub97c " +
+        "\ub098\ud0c0\ub0c5\ub2c8\ub2e4. \ucf58\uc18c\uc2dc\uc5c4\uc758 " +
+        "\uc7ac\uc815\uc740 \uc804\uc801\uc73c\ub85c \ud68c\ube44\uc5d0 " +
+        "\uc758\ud574 \ucda9\ub2f9\ub429\ub2c8\ub2e4. \uc720\ub2c8\ucf54\ub4dc " +
+        "\ucee8\uc18c\uc2dc\uc5c4\uc5d0\uc11c\uc758 \uba64\ubc84\uc27d\uc740 " +
+        "\uc804 \uc138\uacc4 \uc5b4\ub290 \uacf3\uc5d0\uc11c\ub098 " +
+        "\uc720\ub2c8\ucf54\ub4dc \ud45c\uc900\uc744 \uc9c0\uc6d0\ud558\uace0 " +
+        "\uadf8 \ud655\uc7a5\uacfc \uad6c\ud604\uc744 " +
+        "\uc9c0\uc6d0\ud558\uace0\uc790\ud558\ub294 \uc870\uc9c1\uacfc " +
+        "\uac1c\uc778\uc5d0\uac8c \uac1c\ubc29\ub418\uc5b4 " +
+        "\uc788\uc2b5\ub2c8\ub2e4. " +
+        
+        "\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc6a9\uc5b4\uc9d1, " +
+        "\uc608\uc81c \uc720\ub2c8\ucf54\ub4dc \uc0ac\uc6a9 \uac00\ub2a5 " +
+        "\uc81c\ud488, \uae30\uc220 \uc815\ubcf4 \ubc0f \uae30\ud0c0 " +
+        "\uc720\uc6a9\ud55c \uc815\ubcf4\ub97c " +
+        "\ucc38\uc870\ud558\uc2ed\uc2dc\uc624.";
+
+    // TransliteratorTest override
+    void expectAux(String tag, String summary, boolean pass,
+                   String expectedResult) {
+        super.expectAux(tag, jamoToName(summary),
+                        pass, jamoToName(expectedResult));
+    }
+
+    // UTILITIES
+
+    // Note: The following could more easily be done with a transliterator!
+    static final String[] JAMO_NAMES = {
+        "(Gi)", "\u1100",
+        "(GGi)", "\u1101",
+        "(Ni)", "\u1102",
+        "(Di)", "\u1103",
+        "(DD)", "\u1104",
+        "(R)", "\u1105",
+        "(Mi)", "\u1106",
+        "(Bi)", "\u1107",
+        "(BB)", "\u1108",
+        "(Si)", "\u1109",
+        "(SSi)", "\u110A",
+        "(IEUNG)", "\u110B",
+        "(Ji)", "\u110C",
+        "(JJ)", "\u110D",
+        "(Ci)", "\u110E",
+        "(Ki)", "\u110F",
+        "(Ti)", "\u1110",
+        "(Pi)", "\u1111",
+        "(Hi)", "\u1112",
+        
+        "(A)", "\u1161",
+        "(AE)", "\u1162",
+        "(YA)", "\u1163",
+        "(YAE)", "\u1164",
+        "(EO)", "\u1165",
+        "(E)", "\u1166",
+        "(YEO)", "\u1167",
+        "(YE)", "\u1168",
+        "(O)", "\u1169",
+        "(WA)", "\u116A",
+        "(WAE)", "\u116B",
+        "(OE)", "\u116C",
+        "(YO)", "\u116D",
+        "(U)", "\u116E",
+        "(WEO)", "\u116F",
+        "(WE)", "\u1170",
+        "(WI)", "\u1171",
+        "(YU)", "\u1172",
+        "(EU)", "\u1173",
+        "(YI)", "\u1174",
+        "(I)", "\u1175",
+
+        "(Gf)", "\u11A8",
+        "(GGf)", "\u11A9",
+        "(GS)", "\u11AA",
+        "(Nf)", "\u11AB",
+        "(NJ)", "\u11AC",
+        "(NH)", "\u11AD",
+        "(Df)", "\u11AE",
+        "(L)", "\u11AF",
+        "(LG)", "\u11B0",
+        "(LM)", "\u11B1",
+        "(LB)", "\u11B2",
+        "(LS)", "\u11B3",
+        "(LT)", "\u11B4",
+        "(LP)", "\u11B5",
+        "(LH)", "\u11B6",
+        "(Mf)", "\u11B7",
+        "(Bf)", "\u11B8",
+        "(BS)", "\u11B9",
+        "(Sf)", "\u11BA",
+        "(SSf)", "\u11BB",
+        "(NG)", "\u11BC",
+        "(Jf)", "\u11BD",
+        "(Cf)", "\u11BE",
+        "(Kf)", "\u11BF",
+        "(Tf)", "\u11C0",
+        "(Pf)", "\u11C1",
+        "(Hf)", "\u11C2",
+    };
+
+    static Hashtable JAMO_TO_NAME;
+    static Hashtable NAME_TO_JAMO;
+
+    static {
+        JAMO_TO_NAME = new Hashtable();
+        NAME_TO_JAMO = new Hashtable();
+        for (int i=0; i<JAMO_NAMES.length; i+=2) {
+            JAMO_TO_NAME.put(JAMO_NAMES[i+1], JAMO_NAMES[i]);
+            NAME_TO_JAMO.put(JAMO_NAMES[i], JAMO_NAMES[i+1]);
+        }
+    }
+
+    /**
+     * Convert short names to actual jamo.  E.g., "x(LG)y" returns
+     * "x\u11B0y".  See JAMO_NAMES for table of names.
+     */
+    static String nameToJamo(String input) {
+        StringBuffer buf = new StringBuffer();
+        for (int i=0; i<input.length(); ++i) {
+            char c = input.charAt(i);
+            if (c == '(') {
+                int j = input.indexOf(')', i+1);
+                if ((j-i) >= 2 && (j-i) <= 6) { // "(A)", "(IEUNG)"
+                    String jamo = (String) NAME_TO_JAMO.get(input.substring(i, j+1));
+                    if (jamo != null) {
+                        buf.append(jamo);
+                        i = j;
+                        continue;
+                    }
+                }
+            }
+            buf.append(c);
+        }
+        return buf.toString();
+    }
+
+    /**
+     * Convert jamo to short names.  E.g., "x\u11B0y" returns
+     * "x(LG)y".  See JAMO_NAMES for table of names.
+     */
+    static String jamoToName(String input) {
+        StringBuffer buf = new StringBuffer();
+        for (int i=0; i<input.length(); ++i) {
+            char c = input.charAt(i);
+            if (c >= 0x1100 && c <= 0x11C2) {
+                String name = (String) JAMO_TO_NAME.get(input.substring(i, i+1));
+                if (name != null) {
+                    buf.append(name);
+                    continue;
+                }
+            }
+            buf.append(c);
+        }
+        return buf.toString();
+    }
+}
diff --git a/src/com/ibm/test/translit/RoundTripTest.java b/src/com/ibm/test/translit/RoundTripTest.java
new file mode 100755
index 0000000..fb3ffdf
--- /dev/null
+++ b/src/com/ibm/test/translit/RoundTripTest.java
@@ -0,0 +1,348 @@
+package com.ibm.test.translit;
+import com.ibm.test.*;
+import com.ibm.text.*;
+import com.ibm.util.Utility;
+import java.io.*;
+import java.text.ParseException;
+
+/**
+ * @test
+ * @summary Round trip test of Transliterator
+ */
+public class RoundTripTest extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new RoundTripTest().run(args);
+    }
+
+    public void TestHiragana() throws IOException, ParseException {
+        new Test("Latin-Kana", 
+          TestUtility.LATIN_SCRIPT, TestUtility.HIRAGANA_SCRIPT)
+          .test("[a-z]", "[\u3040-\u3094]", this);
+    }
+
+    public void TestKatakana() throws IOException, ParseException {
+        new Test("Latin-Kana", 
+          TestUtility.LATIN_SCRIPT, TestUtility.KATAKANA_SCRIPT)
+          .test("[A-Z]", "[\u30A1-\u30FA]", this);
+    }
+
+    public void TestArabic() throws IOException, ParseException {
+        new Test("Latin-Arabic", 
+          TestUtility.LATIN_SCRIPT, TestUtility.ARABIC_SCRIPT)
+          .test("[a-z]", "[\u0620-\u065F-[\u0640]]", this);
+    }
+
+    public void TestHebrew() throws IOException, ParseException {
+        new Test("Latin-Hebrew", 
+          TestUtility.LATIN_SCRIPT, TestUtility.HEBREW_SCRIPT)
+          .test(null, "[\u05D0-\u05EF]", this);
+    }
+
+    public void TestHangul() throws IOException, ParseException {
+        Test t = new TestHangul();
+        t.setPairLimit(30); // Don't run full test -- too long
+        t.test(null, null, this);
+    }
+
+    public void TestJamo() throws IOException, ParseException {
+        Test t = new Test("Latin-Jamo", 
+          TestUtility.LATIN_SCRIPT, TestUtility.JAMO_SCRIPT);
+        t.setErrorLimit(200); // Don't run full test -- too long
+        //t.test("[[a-z]-[fqvxz]]", null, this);
+        t.test("[a-z]", null, this);
+    }
+
+    public void TestJamoHangul() throws IOException, ParseException {
+        Test t = new Test("Latin-Hangul", 
+          TestUtility.LATIN_SCRIPT, TestUtility.HANGUL_SCRIPT);
+        t.setErrorLimit(50); // Don't run full test -- too long
+        t.test("[a-z]", null, this);
+    }
+
+    public void TestGreek() throws IOException, ParseException {
+        new Test("Latin-Greek", 
+          TestUtility.LATIN_SCRIPT, TestUtility.GREEK_SCRIPT)
+          .test(null, "[\u0380-\u03CF]", this);
+    }
+
+    public void TestCyrillic() throws IOException, ParseException {
+        new Test("Latin-Cyrillic", 
+          TestUtility.LATIN_SCRIPT, TestUtility.CYRILLIC_SCRIPT)
+          .test(null, "[\u0401\u0410-\u044F\u0451]", this);
+    }
+
+    static class Test {
+    
+        PrintWriter out;
+    
+        private String transliteratorID; 
+        private byte sourceScript;
+        private byte targetScript;
+        private int errorLimit = Integer.MAX_VALUE;
+        private int errorCount = 0;
+        private int pairLimit  = 0x10000;
+        UnicodeSet sourceRange;
+        UnicodeSet targetRange;
+        TestLog log;
+    
+        /*
+         * create a test for the given script transliterator.
+         */
+        Test(String transliteratorID, 
+             byte sourceScript, byte targetScript) {
+            this.transliteratorID = transliteratorID;
+            this.sourceScript = sourceScript;
+            this.targetScript = targetScript;
+        }
+    
+        public void setErrorLimit(int limit) {
+            errorLimit = limit;
+        }
+    
+        public void setPairLimit(int limit) {
+            pairLimit = limit;
+        }
+      
+        public void test(String sourceRange, String targetRange, TestLog log) 
+            throws java.io.IOException, java.text.ParseException {
+      
+            if (sourceRange != null && sourceRange.length() > 0) {
+                this.sourceRange = new UnicodeSet(sourceRange);
+            }
+            if (targetRange != null && targetRange.length() > 0) {
+                this.targetRange = new UnicodeSet(targetRange);
+            }
+
+            if (this.sourceRange == null) this.sourceRange = new UnicodeSet("[a-zA-Z]");
+
+            this.log = log;
+
+            log.logln(Utility.escape("Source: " + this.sourceRange));
+            log.logln(Utility.escape("Target: " + this.targetRange));
+
+            // make a UTF-8 output file we can read with a browser
+
+            // note: check that every transliterator transliterates the null string correctly!
+
+            String logFileName = "test_" + transliteratorID + "_"
+                + sourceScript + "_" + targetScript + ".html";
+
+            log.logln("Creating log file " + logFileName);
+
+            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
+                      new FileOutputStream(logFileName), "UTF8"), 4*1024));
+            //out.write('\uFFEF');    // BOM
+            out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
+            out.println("<HTML><HEAD>");
+            out.println("<META content=\"text/html; charset=utf-8\" http-equiv=Content-Type></HEAD>");
+            out.println("<BODY>");
+            out.println("<TABLE>");
+            try {
+                test2();
+                out.println("</TABLE>");
+            } catch (TestTruncated e) {
+                out.println("</TABLE>" + e.getMessage());
+            }
+            out.println("</BODY></HTML>");
+            out.close();
+
+            if (errorCount > 0) {
+                log.errln(transliteratorID + " errors: " + errorCount + ", see " + logFileName);
+            } else {
+                log.logln(transliteratorID + " ok");
+                new File(logFileName).delete();
+            }
+        }
+
+        public void test2() {
+
+            Transliterator sourceToTarget = Transliterator.getInstance(transliteratorID);
+            Transliterator targetToSource = sourceToTarget.getInverse();
+
+            log.logln("Checking that source characters convert to target - Singles");
+
+            for (char c = 0; c < 0xFFFF; ++c) {
+                if (TestUtility.isUnassigned(c) ||
+                    !isSource(c)) continue;
+                String cs = String.valueOf(c);
+                String targ = sourceToTarget.transliterate(String.valueOf(cs));
+                if (!isReceivingTarget(targ)) {
+                    logWrongScript("Source-Target", cs, targ);
+                }
+            }
+
+            log.logln("Checking that source characters convert to target - Doubles");
+
+            for (char c = 0; c < 0xFFFF; ++c) { 
+                if (TestUtility.isUnassigned(c) ||
+                    !isSource(c)) continue;
+                for (char d = 0; d < 0xFFFF; ++d) {
+                    if (TestUtility.isUnassigned(d) ||
+                        !isSource(d)) continue;
+                    String cs = String.valueOf(c) + d;
+                    String targ = sourceToTarget.transliterate(cs);
+                    if (!isReceivingTarget(targ)) {
+                        logWrongScript("Source-Target", cs, targ);
+                    }
+                }
+            }
+
+            log.logln("Checking that target characters convert to source and back - Singles");
+
+            for (char c = 0; c < 0xFFFF; ++c) {
+                if (TestUtility.isUnassigned(c) ||
+                    !isTarget(c)) continue;
+                String cs = String.valueOf(c);
+                String targ = targetToSource.transliterate(cs);
+                String reverse = sourceToTarget.transliterate(targ);
+                if (!isReceivingSource(targ)) {
+                    logWrongScript("Target-Source", cs, targ);
+                } else if (!cs.equals(reverse)) {
+                    logRoundTripFailure(cs, targ, reverse);
+                }
+            }
+
+            log.logln("Checking that target characters convert to source and back - Doubles");
+            int count = 0;
+            StringBuffer buf = new StringBuffer("aa");
+            for (char c = 0; c < 0xFFFF; ++c) {
+                if (TestUtility.isUnassigned(c) ||
+                    !isTarget(c)) continue;
+                if (++count > pairLimit) {
+                    throw new TestTruncated("Test truncated at " + pairLimit + " x 64k pairs");
+                }
+                buf.setCharAt(0, c);
+                log.log(TestUtility.hex(c));
+                for (char d = 0; d < 0xFFFF; ++d) {
+                    if (TestUtility.isUnassigned(d) ||
+                        !isTarget(d)) continue;
+                    buf.setCharAt(1, d);
+                    String cs = buf.toString();
+                    String targ = targetToSource.transliterate(cs);
+                    String reverse = sourceToTarget.transliterate(targ);
+                    if (!isReceivingSource(targ)) {
+                        logWrongScript("Target-Source", cs, targ);
+                    } else if (!cs.equals(reverse)) {
+                        logRoundTripFailure(cs, targ, reverse);
+                    }
+                }
+            }
+            log.logln("");
+        }
+
+        final void logWrongScript(String label, String from, String to) {
+            out.println("<TR><TD>Fail " + label + ":</TD><TD><FONT SIZE=\"6\">" +
+                        from + "</FONT></TD><TD>(" +
+                        TestUtility.hex(from) + ") =></TD><TD><FONT SIZE=\"6\">" +
+                        to + "</FONT></TD><TD>(" +
+                        TestUtility.hex(to) + ")</TD></TR>" );
+            if (++errorCount >= errorLimit) {
+                throw new TestTruncated("Test truncated; too many failures");
+            }
+        }
+
+        final void logRoundTripFailure(String from, String to, String back) {
+            out.println("<TR><TD>Fail Roundtrip:</TD><TD><FONT SIZE=\"6\">" +
+                        from + "</FONT></TD><TD>(" +
+                        TestUtility.hex(from) + ") =></TD><TD>" +
+                        to + "</TD><TD>(" +
+                        TestUtility.hex(to) + ") =></TD><TD><FONT SIZE=\"6\">" +
+                        back + "</TD><TD>(" +
+                        TestUtility.hex(back) + ")</TD></TR>" );
+            if (++errorCount >= errorLimit) {
+                throw new TestTruncated("Test truncated; too many failures");
+            }
+        }
+
+        /*
+         * Characters to filter for source-target mapping completeness
+         * Typically is base alphabet, minus extended characters
+         * Default is ASCII letters for Latin
+         */
+        public boolean isSource(char c) {
+            byte script = TestUtility.getScript(c);
+            if (script != sourceScript) return false;
+            if (!TestUtility.isLetter(c)) return false;
+            if (!sourceRange.contains(c)) return false;
+            return true;
+        }
+
+        /*
+         * Characters to check for target back to source mapping.
+         * Typically the same as the target script, plus punctuation
+         */
+        public boolean isReceivingSource(char c) {
+            byte script = TestUtility.getScript(c);
+            return (script == sourceScript || script == TestUtility.COMMON_SCRIPT);
+        }
+
+        /*
+         * Characters to filter for target-source mapping
+         * Typically is base alphabet, minus extended characters
+         */
+        public boolean isTarget(char c) {
+            byte script = TestUtility.getScript(c);
+            if (script != targetScript) return false;
+            if (!TestUtility.isLetter(c)) return false;
+            if (targetRange != null && !targetRange.contains(c)) return false;
+            return true;
+        }
+
+        /*
+         * Characters to check for target-source mapping
+         * Typically the same as the source script, plus punctuation
+         */
+        public boolean isReceivingTarget(char c) {
+            byte script = TestUtility.getScript(c);
+            return (script == targetScript || script == TestUtility.COMMON_SCRIPT);
+        }
+
+        final boolean isSource(String s) {
+            for (int i = 0; i < s.length(); ++i) {
+                if (!isSource(s.charAt(i))) return false;
+            }
+            return true;
+        }
+
+        final boolean isTarget(String s) {
+            for (int i = 0; i < s.length(); ++i) {
+                if (!isTarget(s.charAt(i))) return false;
+            }
+            return true;
+        }
+
+        final boolean isReceivingSource(String s) {
+            for (int i = 0; i < s.length(); ++i) {
+                if (!isReceivingSource(s.charAt(i))) return false;
+            }
+            return true;
+        }
+
+        final boolean isReceivingTarget(String s) {
+            for (int i = 0; i < s.length(); ++i) {
+                if (!isReceivingTarget(s.charAt(i))) return false;
+            }
+            return true;
+        }
+
+        static class TestTruncated extends RuntimeException {
+            TestTruncated(String msg) {
+                super(msg);
+            }
+        }
+    }
+
+    static class TestHangul extends Test {
+        TestHangul () {
+            super("Jamo-Hangul", TestUtility.JAMO_SCRIPT, TestUtility.HANGUL_SCRIPT);
+        }
+  
+        public boolean isSource(char c) {
+            if (0x1113 <= c && c <= 0x1160) return false;
+            if (0x1176 <= c && c <= 0x11F9) return false;
+            if (0x3131 <= c && c <= 0x318E) return false;
+            return super.isSource(c);
+        }
+    }
+}
diff --git a/src/com/ibm/test/translit/TestUtility.java b/src/com/ibm/test/translit/TestUtility.java
new file mode 100755
index 0000000..54f9916
--- /dev/null
+++ b/src/com/ibm/test/translit/TestUtility.java
@@ -0,0 +1,399 @@
+package com.ibm.test.translit;
+import com.ibm.text.UCharacter;
+import com.ibm.text.UCharacterCategory;
+
+public final class TestUtility {
+
+    public static byte getScript(char c) {
+      return getScript(getBlock(c));
+    }
+    
+    public static byte getScript(byte block) {
+      return blockToScript[block];
+    }
+    
+    public static byte getBlock(char c) {
+      int index = c >> 7;
+      byte block = charToBlock[index];
+      while (block < 0) { // take care of exceptions, blocks split across 128 boundaries
+          int[] tuple = split[-block-1];
+          if (c < tuple[0]) block = (byte)tuple[1];
+          else block = (byte)tuple[2];
+      }
+      return block;
+    }
+               
+    // returns next letter of script, or 0xFFFF if done
+    
+    public static char getNextLetter(char c, byte script) {
+        while (c < 0xFFFF) {
+            ++c;
+            if (getScript(c) == script && Character.isLetter(c)) {
+                return c;
+            }
+        }
+        return c;
+    }
+    
+    // Supplements to Character methods; these methods go through
+    // UCharacter if possible.  If not, they fall back to Character.
+
+    public static boolean isUnassigned(char c) {
+        try {
+            return UCharacter.getType(c) == UCharacterCategory.UNASSIGNED;
+        } catch (NullPointerException e) {}
+        return Character.getType(c) == Character.UNASSIGNED;
+    }
+
+    public static boolean isLetter(char c) {
+        try {
+            return UCharacter.isLetter(c);
+        } catch (NullPointerException e) {}
+        return Character.isLetter(c);
+    }
+
+	public static String hex(char ch) {
+		String foo = Integer.toString(ch,16).toUpperCase();
+		return "0000".substring(0,4-foo.length()) + foo;
+	}
+    
+	public static String hex(String s) {
+	  return hex(s,",");
+	}
+	
+	public static String hex(String s, String sep) {
+	  if (s.length() == 0) return "";
+	  String result = hex(s.charAt(0));
+	  for (int i = 1; i < s.length(); ++i) {
+	    result += sep;
+	    result += hex(s.charAt(i));
+	  }
+	  return result;
+	}
+	
+  public static void main(String[] args) {
+    System.out.println("Blocks: ");
+    byte lastblock = -128;
+    for (char cc = 0; cc < 0xFFFF; ++cc) {
+      byte block = TestUtility.getBlock(cc);
+      if (block != lastblock) {
+        System.out.println(TestUtility.hex(cc) + "\t" + block);
+        lastblock = block;
+      }
+    }
+    System.out.println();
+    System.out.println("Scripts: ");
+    byte lastScript = -128;
+    for (char cc = 0; cc < 0xFFFF; ++cc) {
+      byte script = TestUtility.getScript(cc);
+      if (script != lastScript) {
+        System.out.println(TestUtility.hex(cc) + "\t" + script);
+        lastScript = script;
+      }
+    }
+  }
+      
+	
+    
+    public static final byte // SCRIPT CODE
+        COMMON_SCRIPT = 0,
+        LATIN_SCRIPT = 1,
+        GREEK_SCRIPT = 2,
+        CYRILLIC_SCRIPT = 3,
+        ARMENIAN_SCRIPT = 4,
+        HEBREW_SCRIPT = 5,
+        ARABIC_SCRIPT = 6,
+        SYRIAC_SCRIPT = 7,
+        THAANA_SCRIPT = 8, 
+        DEVANAGARI_SCRIPT = 9,
+        BENGALI_SCRIPT = 10,
+        GURMUKHI_SCRIPT = 11,
+        GUJARATI_SCRIPT = 12,
+        ORIYA_SCRIPT = 13,
+        TAMIL_SCRIPT = 14,
+        TELUGU_SCRIPT = 15,
+        KANNADA_SCRIPT = 16,
+        MALAYALAM_SCRIPT = 17,
+        SINHALA_SCRIPT = 18,
+        THAI_SCRIPT = 19,
+        LAO_SCRIPT = 20,
+        TIBETAN_SCRIPT = 21,
+        MYANMAR_SCRIPT = 22,
+        GEORGIAN_SCRIPT = 23,
+        JAMO_SCRIPT = 24,
+        HANGUL_SCRIPT = 25,
+        ETHIOPIC_SCRIPT = 26,
+        CHEROKEE_SCRIPT = 27,
+        ABORIGINAL_SCRIPT = 28,
+        OGHAM_SCRIPT = 29,
+        RUNIC_SCRIPT = 30,
+        KHMER_SCRIPT = 31,
+        MONGOLIAN_SCRIPT = 32,
+        HIRAGANA_SCRIPT = 33,
+        KATAKANA_SCRIPT = 34,
+        BOPOMOFO_SCRIPT = 35,
+        HAN_SCRIPT = 36,
+        YI_SCRIPT = 37;
+    
+    public static final byte // block code
+        RESERVED_BLOCK = 0,
+        BASIC_LATIN = 1,
+        LATIN_1_SUPPLEMENT = 2,
+        LATIN_EXTENDED_A = 3,
+        LATIN_EXTENDED_B = 4,
+        IPA_EXTENSIONS = 5,
+        SPACING_MODIFIER_LETTERS = 6,
+        COMBINING_DIACRITICAL_MARKS = 7,
+        GREEK = 8,
+        CYRILLIC = 9,
+        ARMENIAN = 10,
+        HEBREW = 11,
+        ARABIC = 12,
+        SYRIAC = 13,
+        THAANA = 14,
+        DEVANAGARI = 15,
+        BENGALI = 16,
+        GURMUKHI = 17,
+        GUJARATI = 18,
+        ORIYA = 19,
+        TAMIL = 20,
+        TELUGU = 21,
+        KANNADA = 22,
+        MALAYALAM = 23,
+        SINHALA = 24,
+        THAI = 25,
+        LAO = 26,
+        TIBETAN = 27,
+        MYANMAR = 28,
+        GEORGIAN = 29,
+        HANGUL_JAMO = 30,
+        ETHIOPIC = 31,
+        CHEROKEE = 32,
+        UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS = 33,
+        OGHAM = 34,
+        RUNIC = 35,
+        KHMER = 36,
+        MONGOLIAN = 37,
+        LATIN_EXTENDED_ADDITIONAL = 38,
+        GREEK_EXTENDED = 39,
+        GENERAL_PUNCTUATION = 40,
+        SUPERSCRIPTS_AND_SUBSCRIPTS = 41,
+        CURRENCY_SYMBOLS = 42,
+        COMBINING_MARKS_FOR_SYMBOLS = 43,
+        LETTERLIKE_SYMBOLS = 44,
+        NUMBER_FORMS = 45,
+        ARROWS = 46,
+        MATHEMATICAL_OPERATORS = 47,
+        MISCELLANEOUS_TECHNICAL = 48,
+        CONTROL_PICTURES = 49,
+        OPTICAL_CHARACTER_RECOGNITION = 50,
+        ENCLOSED_ALPHANUMERICS = 51,
+        BOX_DRAWING = 52,
+        BLOCK_ELEMENTS = 53,
+        GEOMETRIC_SHAPES = 54,
+        MISCELLANEOUS_SYMBOLS = 55,
+        DINGBATS = 56,
+        BRAILLE_PATTERNS = 57,
+        CJK_RADICALS_SUPPLEMENT = 58,
+        KANGXI_RADICALS = 59,
+        IDEOGRAPHIC_DESCRIPTION_CHARACTERS = 60,
+        CJK_SYMBOLS_AND_PUNCTUATION = 61,
+        HIRAGANA = 62,
+        KATAKANA = 63,
+        BOPOMOFO = 64,
+        HANGUL_COMPATIBILITY_JAMO = 65,
+        KANBUN = 66,
+        BOPOMOFO_EXTENDED = 67,
+        ENCLOSED_CJK_LETTERS_AND_MONTHS = 68,
+        CJK_COMPATIBILITY = 69,
+        CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A = 70,
+        CJK_UNIFIED_IDEOGRAPHS = 71,
+        YI_SYLLABLES = 72,
+        YI_RADICALS = 73,
+        HANGUL_SYLLABLES = 74,
+        HIGH_SURROGATES = 75,
+        HIGH_PRIVATE_USE_SURROGATES = 76,
+        LOW_SURROGATES = 77,
+        PRIVATE_USE = 78,
+        CJK_COMPATIBILITY_IDEOGRAPHS = 79,
+        ALPHABETIC_PRESENTATION_FORMS = 80,
+        ARABIC_PRESENTATION_FORMS_A = 81,
+        COMBINING_HALF_MARKS = 82,
+        CJK_COMPATIBILITY_FORMS = 83,
+        SMALL_FORM_VARIANTS = 84,
+        ARABIC_PRESENTATION_FORMS_B = 85,
+        SPECIALS = 86,
+        HALFWIDTH_AND_FULLWIDTH_FORMS = 87;
+        
+    static final byte[] blockToScript = {
+        COMMON_SCRIPT, // 0, <RESERVED_BLOCK>
+        LATIN_SCRIPT, // 1, BASIC_LATIN
+        LATIN_SCRIPT, // 2, LATIN_1_SUPPLEMENT
+        LATIN_SCRIPT, // 3, LATIN_EXTENDED_A
+        LATIN_SCRIPT, // 4, LATIN_EXTENDED_B
+        LATIN_SCRIPT, // 5, IPA_EXTENSIONS
+        COMMON_SCRIPT, // 6, SPACING_MODIFIER_LETTERS
+        COMMON_SCRIPT, // 7, COMBINING_DIACRITICAL_MARKS
+        GREEK_SCRIPT, // 8, GREEK
+        CYRILLIC_SCRIPT, // 9, CYRILLIC
+        ARMENIAN_SCRIPT, // 10, ARMENIAN
+        HEBREW_SCRIPT, // 11, HEBREW
+        ARABIC_SCRIPT, // 12, ARABIC
+        SYRIAC_SCRIPT, // 13, SYRIAC
+        THAANA_SCRIPT, // 14, THAANA
+        DEVANAGARI_SCRIPT, // 15, DEVANAGARI
+        BENGALI_SCRIPT, // 16, BENGALI
+        GURMUKHI_SCRIPT, // 17, GURMUKHI
+        GUJARATI_SCRIPT, // 18, GUJARATI
+        ORIYA_SCRIPT, // 19, ORIYA
+        TAMIL_SCRIPT, // 20, TAMIL
+        TELUGU_SCRIPT, // 21, TELUGU
+        KANNADA_SCRIPT, // 22, KANNADA
+        MALAYALAM_SCRIPT, // 23, MALAYALAM
+        SINHALA_SCRIPT, // 24, SINHALA
+        THAI_SCRIPT, // 25, THAI
+        LAO_SCRIPT, // 26, LAO
+        TIBETAN_SCRIPT, // 27, TIBETAN
+        MYANMAR_SCRIPT, // 28, MYANMAR
+        GEORGIAN_SCRIPT, // 29, GEORGIAN
+        JAMO_SCRIPT, // 30, HANGUL_JAMO
+        ETHIOPIC_SCRIPT, // 31, ETHIOPIC
+        CHEROKEE_SCRIPT, // 32, CHEROKEE
+        ABORIGINAL_SCRIPT, // 33, UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
+        OGHAM_SCRIPT, // 34, OGHAM
+        RUNIC_SCRIPT, // 35, RUNIC
+        KHMER_SCRIPT, // 36, KHMER
+        MONGOLIAN_SCRIPT, // 37, MONGOLIAN
+        LATIN_SCRIPT, // 38, LATIN_EXTENDED_ADDITIONAL
+        GREEK_SCRIPT, // 39, GREEK_EXTENDED
+        COMMON_SCRIPT, // 40, GENERAL_PUNCTUATION
+        COMMON_SCRIPT, // 41, SUPERSCRIPTS_AND_SUBSCRIPTS
+        COMMON_SCRIPT, // 42, CURRENCY_SYMBOLS
+        COMMON_SCRIPT, // 43, COMBINING_MARKS_FOR_SYMBOLS
+        COMMON_SCRIPT, // 44, LETTERLIKE_SYMBOLS
+        COMMON_SCRIPT, // 45, NUMBER_FORMS
+        COMMON_SCRIPT, // 46, ARROWS
+        COMMON_SCRIPT, // 47, MATHEMATICAL_OPERATORS
+        COMMON_SCRIPT, // 48, MISCELLANEOUS_TECHNICAL
+        COMMON_SCRIPT, // 49, CONTROL_PICTURES
+        COMMON_SCRIPT, // 50, OPTICAL_CHARACTER_RECOGNITION
+        COMMON_SCRIPT, // 51, ENCLOSED_ALPHANUMERICS
+        COMMON_SCRIPT, // 52, BOX_DRAWING
+        COMMON_SCRIPT, // 53, BLOCK_ELEMENTS
+        COMMON_SCRIPT, // 54, GEOMETRIC_SHAPES
+        COMMON_SCRIPT, // 55, MISCELLANEOUS_SYMBOLS
+        COMMON_SCRIPT, // 56, DINGBATS
+        COMMON_SCRIPT, // 57, BRAILLE_PATTERNS
+        HAN_SCRIPT, // 58, CJK_RADICALS_SUPPLEMENT
+        HAN_SCRIPT, // 59, KANGXI_RADICALS
+        HAN_SCRIPT, // 60, IDEOGRAPHIC_DESCRIPTION_CHARACTERS
+        COMMON_SCRIPT, // 61, CJK_SYMBOLS_AND_PUNCTUATION
+        HIRAGANA_SCRIPT, // 62, HIRAGANA
+        KATAKANA_SCRIPT, // 63, KATAKANA
+        BOPOMOFO_SCRIPT, // 64, BOPOMOFO
+        JAMO_SCRIPT, // 65, HANGUL_COMPATIBILITY_JAMO
+        HAN_SCRIPT, // 66, KANBUN
+        BOPOMOFO_SCRIPT, // 67, BOPOMOFO_EXTENDED
+        COMMON_SCRIPT, // 68, ENCLOSED_CJK_LETTERS_AND_MONTHS
+        COMMON_SCRIPT, // 69, CJK_COMPATIBILITY
+        HAN_SCRIPT, // 70, CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
+        HAN_SCRIPT, // 71, CJK_UNIFIED_IDEOGRAPHS
+        YI_SCRIPT, // 72, YI_SYLLABLES
+        YI_SCRIPT, // 73, YI_RADICALS
+        HANGUL_SCRIPT, // 74, HANGUL_SYLLABLES
+        COMMON_SCRIPT, // 75, HIGH_SURROGATES
+        COMMON_SCRIPT, // 76, HIGH_PRIVATE_USE_SURROGATES
+        COMMON_SCRIPT, // 77, LOW_SURROGATES
+        COMMON_SCRIPT, // 78, PRIVATE_USE
+        HAN_SCRIPT, // 79, CJK_COMPATIBILITY_IDEOGRAPHS
+        COMMON_SCRIPT, // 80, ALPHABETIC_PRESENTATION_FORMS
+        ARABIC_SCRIPT, // 81, ARABIC_PRESENTATION_FORMS_A
+        COMMON_SCRIPT, // 82, COMBINING_HALF_MARKS
+        COMMON_SCRIPT, // 83, CJK_COMPATIBILITY_FORMS
+        COMMON_SCRIPT, // 84, SMALL_FORM_VARIANTS
+        ARABIC_SCRIPT, // 85, ARABIC_PRESENTATION_FORMS_B
+        COMMON_SCRIPT, // 86, SPECIALS
+        COMMON_SCRIPT, // 87, HALFWIDTH_AND_FULLWIDTH_FORMS
+        COMMON_SCRIPT, // 88, SPECIALS
+    };
+        
+    // could be further reduced to a byte array, but I didn't bother.
+    static final int[][] split = {
+        {0x0250, 4, 5}, // -1
+        {0x02B0, 5, 6}, // -2
+        {0x0370, 7, 8}, // -3
+        {0x0530, 0, 10}, // -4
+        {0x0590, 10, 11}, // -5
+        {0x0750, 13, 0}, // -6
+        {0x07C0, 14, 0}, // -7
+        {0x10A0, 28, 29}, // -8
+        {0x13A0, 0, 32}, // -9
+        {0x16A0, 34, 35}, // -10
+        {0x18B0, 37, 0}, // -11
+        {0x2070, 40, 41}, // -12
+        {0x20A0, 41, -31}, // -13
+        {0x2150, 44, 45}, // -14
+        {0x2190, 45, 46}, // -15
+        {0x2440, 49, -32}, // -16
+        {0x25A0, 53, 54}, // -17
+        {0x27C0, 56, 0}, // -18
+        {0x2FE0, 59, -33}, // -19
+        {0x3040, 61, 62}, // -20
+        {0x30A0, 62, 63}, // -21
+        {0x3130, 64, 65}, // -22
+        {0x3190, 65, -34}, // -23
+        {0x4DB6, 70, 0}, // -24
+        {0xA490, 72, -35}, // -25
+        {0xD7A4, 74, 0}, // -26
+        {0xFB50, 80, 81}, // -27
+        {0xFE20, 0, -36}, // -28
+        {0xFEFF, 85, 86}, // -29
+        {0xFFF0, 87, -37}, // -30
+        {0x20D0, 42, 43}, // -31
+        {0x2460, 50, 51}, // -32
+        {0x2FF0, 0, 60}, // -33
+        {0x31A0, 66, -38}, // -34
+        {0xA4D0, 73, 0}, //-35
+        {0xFE30, 82, -39}, //-36
+        {0xFFFE, 88, 0}, //-37
+        {0x31C0, 67, 0}, // -38
+        {0xFE50, 83, -40}, //-39
+        {0xFE70, 84, 85} // -40
+    };
+        
+    static final byte[] charToBlock = {
+      1, 2, 3, 4, -1, -2, -3, 8, 9, 9, -4, -5, 12, 12, -6, -7,
+      0, 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27,
+      28, -8, 30, 30, 31, 31, 31, -9, 33, 33, 33, 33, 33, -10, 0, 36,
+      37, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 39, 39,
+      -12, -13, -14, -15, 47, 47, 48, 48, -16, 51, 52, -17, 55, 55, 56, -18,
+      57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, -19,
+      -20, -21, -22, -23, 68, 68, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, -24, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+      72, 72, 72, 72, 72, 72, 72, 72, 72, -25, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 74, 74, 74, 74, 74, 74, 74, 74,
+      74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+      74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+      74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+      74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+      74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, -26,
+      75, 75, 75, 75, 75, 75, 75, 76, 77, 77, 77, 77, 77, 77, 77, 77,
+      78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+      78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+      78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+      78, 78, 79, 79, 79, 79, -27, 81, 81, 81, 81, 81, -28, -29, 87, -30
+    };
+
+}
diff --git a/src/com/ibm/test/translit/TransliteratorTest.java b/src/com/ibm/test/translit/TransliteratorTest.java
new file mode 100755
index 0000000..82d10ae
--- /dev/null
+++ b/src/com/ibm/test/translit/TransliteratorTest.java
@@ -0,0 +1,772 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/TransliteratorTest.java,v $ 
+ * $Date: 2001/03/30 22:56:47 $ 
+ * $Revision: 1.28 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import com.ibm.util.Utility;
+import java.text.*;
+import java.util.*;
+
+/**
+ * @test
+ * @summary General test of Transliterator
+ */
+public class TransliteratorTest extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new TransliteratorTest().run(args);
+    }
+
+    public void TestInstantiation() {
+        long ms = System.currentTimeMillis();
+        String ID;
+        for (Enumeration e = Transliterator.getAvailableIDs(); e.hasMoreElements(); ) {
+            ID = (String) e.nextElement();
+            try {
+                Transliterator t = Transliterator.getInstance(ID);
+                // We should get a new instance if we try again
+                Transliterator t2 = Transliterator.getInstance(ID);
+                if (t != t2) {
+                    logln(ID + ":" + t);
+                } else {
+                    errln("FAIL: " + ID + " returned identical instances");
+                }
+            } catch (IllegalArgumentException ex) {
+                errln("FAIL: " + ID);
+                throw ex;
+            }
+        }
+
+        // Now test the failure path
+        try {
+            ID = "<Not a valid Transliterator ID>";
+            Transliterator t = Transliterator.getInstance(ID);
+            errln("FAIL: " + ID + " returned " + t);
+        } catch (IllegalArgumentException ex) {
+            logln("OK: Bogus ID handled properly");
+        }
+        
+        ms = System.currentTimeMillis() - ms;
+        logln("Elapsed time: " + ms + " ms");
+    }
+
+    public void TestDisplayName() {
+        String ID;
+        for (Enumeration e = Transliterator.getAvailableIDs(); e.hasMoreElements(); ) {
+            ID = (String) e.nextElement();
+            logln(ID + " -> " + Transliterator.getDisplayName(ID));
+        }
+    }
+
+    public void TestSimpleRules() {
+        /* Example: rules 1. ab>x|y
+         *                2. yc>z
+         *
+         * []|eabcd  start - no match, copy e to tranlated buffer
+         * [e]|abcd  match rule 1 - copy output & adjust cursor
+         * [ex|y]cd  match rule 2 - copy output & adjust cursor
+         * [exz]|d   no match, copy d to transliterated buffer
+         * [exzd]|   done
+         */
+        expect("ab>x|y;" +
+               "yc>z",
+               "eabcd", "exzd");
+
+        /* Another set of rules:
+         *    1. ab>x|yzacw
+         *    2. za>q
+         *    3. qc>r
+         *    4. cw>n
+         *
+         * []|ab       Rule 1
+         * [x|yzacw]   No match
+         * [xy|zacw]   Rule 2
+         * [xyq|cw]    Rule 4
+         * [xyqn]|     Done
+         */
+        expect("ab>x|yzacw;" +
+               "za>q;" +
+               "qc>r;" +
+               "cw>n",
+               "ab", "xyqn");
+
+        /* Test categories
+         */
+        Transliterator t = new RuleBasedTransliterator("<ID>",
+                                                       "$dummy=\uE100;" +
+                                                       "$vowel=[aeiouAEIOU];" +
+                                                       "$lu=[:Lu:];" +
+                                                       "$vowel } $lu > '!';" +
+                                                       "$vowel > '&';" +
+                                                       "'!' { $lu > '^';" +
+                                                       "$lu > '*';" +
+                                                       "a>ERROR");
+        expect(t, "abcdefgABCDEFGU", "&bcd&fg!^**!^*&");
+    }
+
+    /**
+     * Test undefined variable.
+     */
+    public void TestUndefinedVariable() {
+        String rule = "$initial } a <> \u1161;";
+        try {
+            Transliterator t = new RuleBasedTransliterator("<ID>", rule);
+        } catch (IllegalArgumentException e) {
+            logln("OK: Got exception for " + rule + ", as expected: " +
+                  e.getMessage());
+            return;
+        }
+        errln("Fail: bogus rule " + rule + " compiled without error");
+    }
+
+    /**
+     * Test empty context.
+     */
+    public void TestEmptyContext() {
+        expect(" { a } > b;", "xay a ", "xby b ");
+    }
+
+    /**
+     * Test inline set syntax and set variable syntax.
+     */
+    public void TestInlineSet() {
+        expect("{ [:Ll:] } x > y; [:Ll:] > z;", "aAbxq", "zAyzz");
+        expect("a[0-9]b > qrs", "1a7b9", "1qrs9");
+
+        expect("$digit = [0-9];" +
+               "$alpha = [a-zA-Z];" +
+               "$alphanumeric = [$digit $alpha];" + // ***
+               "$special = [^$alphanumeric];" +     // ***
+               "$alphanumeric > '-';" +
+               "$special > '*';",
+
+               "thx-1138", "---*----");
+    }
+
+    /**
+     * Create some inverses and confirm that they work.  We have to be
+     * careful how we do this, since the inverses will not be true
+     * inverses -- we can't throw any random string at the composition
+     * of the transliterators and expect the identity function.  F x
+     * F' != I.  However, if we are careful about the input, we will
+     * get the expected results.
+     */
+    public void TestRuleBasedInverse() {
+        String RULES =
+            "abc>zyx;" +
+            "ab>yz;" +
+            "bc>zx;" +
+            "ca>xy;" +
+            "a>x;" +
+            "b>y;" +
+            "c>z;" +
+
+            "abc<zyx;" +
+            "ab<yz;" +
+            "bc<zx;" +
+            "ca<xy;" +
+            "a<x;" +
+            "b<y;" +
+            "c<z;" +
+
+            "";
+
+        String[] DATA = {
+            // Careful here -- random strings will not work.  If we keep
+            // the left side to the domain and the right side to the range
+            // we will be okay though (left, abc; right xyz).
+            "a", "x",
+            "abcacab", "zyxxxyy",
+            "caccb", "xyzzy",
+        };
+
+        Transliterator fwd = new RuleBasedTransliterator("<ID>", RULES);
+        Transliterator rev = new RuleBasedTransliterator("<ID>", RULES,
+                                     RuleBasedTransliterator.REVERSE, null);
+        for (int i=0; i<DATA.length; i+=2) {
+            expect(fwd, DATA[i], DATA[i+1]);
+            expect(rev, DATA[i+1], DATA[i]);
+        }
+    }
+
+    /**
+     * Basic test of keyboard.
+     */
+    public void TestKeyboard() {
+        Transliterator t = new RuleBasedTransliterator("<ID>", 
+                                                       "psch>Y;"
+                                                       +"ps>y;"
+                                                       +"ch>x;"
+                                                       +"a>A;");
+        String DATA[] = {
+            // insertion, buffer
+            "a", "A",
+            "p", "Ap",
+            "s", "Aps",
+            "c", "Apsc",
+            "a", "AycA",
+            "psch", "AycAY",
+            null, "AycAY", // null means finishKeyboardTransliteration
+        };
+
+        keyboardAux(t, DATA);
+    }
+
+    /**
+     * Basic test of keyboard with cursor.
+     */
+    public void TestKeyboard2() {
+        Transliterator t = new RuleBasedTransliterator("<ID>", 
+                                                       "ych>Y;"
+                                                       +"ps>|y;"
+                                                       +"ch>x;"
+                                                       +"a>A;");
+        String DATA[] = {
+            // insertion, buffer
+            "a", "A",
+            "p", "Ap",
+            "s", "Ay",
+            "c", "Ayc",
+            "a", "AycA",
+            "p", "AycAp",
+            "s", "AycAy",
+            "c", "AycAyc",
+            "h", "AycAY",
+            null, "AycAY", // null means finishKeyboardTransliteration
+        };
+
+        keyboardAux(t, DATA);
+    }
+
+    /**
+     * Test keyboard transliteration with back-replacement.
+     */
+    public void TestKeyboard3() {
+        // We want th>z but t>y.  Furthermore, during keyboard
+        // transliteration we want t>y then yh>z if t, then h are
+        // typed.
+        String RULES =
+            "t>|y;" +
+            "yh>z;" +
+            "";
+
+        String[] DATA = {
+            // Column 1: characters to add to buffer (as if typed)
+            // Column 2: expected appearance of buffer after
+            //           keyboard xliteration.
+            "a", "a",
+            "b", "ab",
+            "t", "aby",
+            "c", "abyc",
+            "t", "abycy",
+            "h", "abycz",
+            null, "abycz", // null means finishKeyboardTransliteration
+        };
+
+        Transliterator t = new RuleBasedTransliterator("<ID>", RULES);
+        keyboardAux(t, DATA);
+    }
+
+    private void keyboardAux(Transliterator t, String[] DATA) {
+        Transliterator.Position index = new Transliterator.Position();
+        ReplaceableString s = new ReplaceableString();
+        for (int i=0; i<DATA.length; i+=2) {
+            StringBuffer log;
+            if (DATA[i] != null) {
+                log = new StringBuffer(s.toString() + " + "
+                                       + DATA[i]
+                                       + " -> ");
+                t.transliterate(s, index, DATA[i]);
+            } else {
+                log = new StringBuffer(s.toString() + " => ");
+                t.finishTransliteration(s, index);
+            }
+            String str = s.toString();
+            // Show the start index '{' and the cursor '|'
+            log.append(str.substring(0, index.contextStart)).
+                append('{').
+                append(str.substring(index.contextStart,
+                                     index.start)).
+                append('|').
+                append(str.substring(index.start));
+            if (str.equals(DATA[i+1])) {
+                logln(log.toString());
+            } else {
+                errln("FAIL: " + log.toString() + ", expected " + DATA[i+1]);
+            }
+        }
+    }
+
+    public void TestArabic() {
+        String DATA[] = {
+            "Arabic",
+                "\u062a\u062a\u0645\u062a\u0639 "+
+                "\u0627\u0644\u0644\u063a\u0629 "+
+                "\u0627\u0644\u0639\u0631\u0628\u0628\u064a\u0629 "+
+                "\u0628\u0628\u0646\u0638\u0645 "+
+                "\u0643\u062a\u0627\u0628\u0628\u064a\u0629 "+
+                "\u062c\u0645\u064a\u0644\u0629"
+        };
+
+        Transliterator t = Transliterator.getInstance("Latin-Arabic");
+        for (int i=0; i<DATA.length; i+=2) {
+            expect(t, DATA[i], DATA[i+1]);
+        }
+    }
+
+    /**
+     * Compose the Kana transliterator forward and reverse and try
+     * some strings that should come out unchanged.
+     */
+    public void TestCompoundKana() {
+        Transliterator t = new CompoundTransliterator("Latin-Kana;Kana-Latin");
+        expect(t, "aaaaa", "aaaaa");
+    }
+
+    /**
+     * Compose the hex transliterators forward and reverse.
+     */
+    public void TestCompoundHex() {
+        Transliterator a = Transliterator.getInstance("Unicode-Hex");
+        Transliterator b = Transliterator.getInstance("Hex-Unicode");
+        Transliterator[] trans = { a, b };
+        Transliterator ab = new CompoundTransliterator(trans);
+
+        // Do some basic tests of b
+        expect(b, "\\u0030\\u0031", "01");
+
+        String s = "abcde";
+        expect(ab, s, s);
+
+        trans = new Transliterator[] { b, a };
+        Transliterator ba = new CompoundTransliterator(trans);
+        ReplaceableString str = new ReplaceableString(s);
+        a.transliterate(str);
+        expect(ba, str.toString(), str.toString());
+    }
+
+    /**
+     * Do some basic tests of filtering.
+     */
+    public void TestFiltering() {
+        Transliterator hex = Transliterator.getInstance("Unicode-Hex");
+        hex.setFilter(new UnicodeFilter() {
+            public boolean contains(char c) {
+                return c != 'c';
+            }
+        });
+        String s = "abcde";
+        String out = hex.transliterate(s);
+        String exp = "\\u0061\\u0062c\\u0064\\u0065";
+        if (out.equals(exp)) {
+            logln("Ok:   \"" + exp + "\"");
+        } else {
+            logln("FAIL: \"" + out + "\", wanted \"" + exp + "\"");
+        }
+    }
+
+    /**
+     * Test anchors
+     */
+    public void TestAnchors() { 
+        expect("^ab  > 01 ;" +
+               " ab  > |8 ;" +
+               "  b  > k ;" +
+               " 8x$ > 45 ;" +
+               " 8x  > 77 ;",
+
+               "ababbabxabx",
+               "018k7745");  
+        expect("$s = [z$] ;" +
+               "$s{ab    > 01 ;" +
+               "   ab    > |8 ;" +
+               "    b    > k ;" +
+               "   8x}$s > 45 ;" +
+               "   8x    > 77 ;",
+
+               "abzababbabxzabxabx",
+               "01z018k45z01x45");
+    }
+
+    /**
+     * Test pattern quoting and escape mechanisms.
+     */
+    public void TestPatternQuoting() {
+        // Array of 3n items
+        // Each item is <rules>, <input>, <expected output>
+        String[] DATA = {
+            "\u4E01>'[male adult]'", "\u4E01", "[male adult]",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            logln("Pattern: " + Utility.escape(DATA[i]));
+            Transliterator t = new RuleBasedTransliterator("<ID>", DATA[i]);
+            expect(t, DATA[i+1], DATA[i+2]);
+        }
+    }
+
+    /**
+     * Regression test for bugs found in Greek transliteration.
+     */
+    public void TestJ277() {
+        Transliterator gl = Transliterator.getInstance("Greek-Latin");
+        
+        char sigma = (char)0x3C3;
+        char upsilon = (char)0x3C5;
+        char nu = (char)0x3BD;
+        char PHI = (char)0x3A6;
+        char alpha = (char)0x3B1;
+        char omega = (char)0x3C9;
+        char omicron = (char)0x3BF;
+        char epsilon = (char)0x3B5;
+
+        // sigma upsilon nu -> syn
+        StringBuffer buf = new StringBuffer();
+        buf.append(sigma).append(upsilon).append(nu);
+        String syn = buf.toString();
+        expect(gl, syn, "syn");
+
+        // sigma alpha upsilon nu -> saun
+        buf.setLength(0);
+        buf.append(sigma).append(alpha).append(upsilon).append(nu);
+        String sayn = buf.toString();
+        expect(gl, sayn, "saun");
+
+        // Again, using a smaller rule set
+        String rules =
+                    "$alpha   = \u03B1;" +
+                    "$nu      = \u03BD;" +
+                    "$sigma   = \u03C3;" +
+                    "$ypsilon = \u03C5;" +
+                    "$vowel   = [aeiouAEIOU$alpha$ypsilon];" +
+                    "s <>           $sigma;" +
+                    "a <>           $alpha;" +
+                    "u <>  $vowel { $ypsilon;" +
+                    "y <>           $ypsilon;" +
+                    "n <>           $nu;";
+        RuleBasedTransliterator mini = new RuleBasedTransliterator
+            ("mini", rules, Transliterator.REVERSE, null);
+        expect(mini, syn, "syn");
+        expect(mini, sayn, "saun");
+
+//|    // Transliterate the Greek locale data
+//|    Locale el("el");
+//|    DateFormatSymbols syms(el, status);
+//|    if (U_FAILURE(status)) { errln("FAIL: Transliterator constructor failed"); return; }
+//|    int32_t i, count;
+//|    const UnicodeString* data = syms.getMonths(count);
+//|    for (i=0; i<count; ++i) {
+//|        if (data[i].length() == 0) {
+//|            continue;
+//|        }
+//|        UnicodeString out(data[i]);
+//|        gl->transliterate(out);
+//|        bool_t ok = TRUE;
+//|        if (data[i].length() >= 2 && out.length() >= 2 &&
+//|            u_isupper(data[i].charAt(0)) && u_islower(data[i].charAt(1))) {
+//|            if (!(u_isupper(out.charAt(0)) && u_islower(out.charAt(1)))) {
+//|                ok = FALSE;
+//|            }
+//|        }
+//|        if (ok) {
+//|            logln(prettify(data[i] + " -> " + out));
+//|        } else {
+//|            errln(UnicodeString("FAIL: ") + prettify(data[i] + " -> " + out));
+//|        }
+//|    }
+    }
+
+    /**
+     * Prefix, suffix support in hex transliterators
+     */
+    public void TestJ243() {
+        // Test default Hex-Unicode, which should handle
+        // \\u, \\U, u+, and U+
+        HexToUnicodeTransliterator hex = new HexToUnicodeTransliterator();
+        expect(hex, "\\u0041+\\U0042,u+0043uu+0044z", "A+B,CuDz");
+
+        // Try a custom Hex-Unicode
+        // \\uXXXX and &#xXXXX;
+        HexToUnicodeTransliterator hex2 = new HexToUnicodeTransliterator("\\\\u###0;&\\#x###0\\;"); 
+        expect(hex2, "\\u61\\u062\\u0063\\u00645\\u66x&#x30;&#x031;&#x0032;&#x00033;",
+               "abcd5fx012&#x00033;");
+
+        // Try custom Unicode-Hex (default is tested elsewhere)
+        UnicodeToHexTransliterator hex3 = new UnicodeToHexTransliterator("&\\#x###0;");
+        expect(hex3, "012", "&#x30;&#x31;&#x32;");
+    }
+
+    /**
+     * Test segments and segment references.
+     */
+    public void TestSegments() {
+        // Array of 3n items
+        // Each item is <rules>, <input>, <expected output>
+        String[] DATA = {
+            "([a-z]) '.' ([0-9]) > $2 '-' $1",
+            "abc.123.xyz.456",
+            "ab1-c23.xy4-z56",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            logln("Pattern: " + Utility.escape(DATA[i]));
+            Transliterator t = new RuleBasedTransliterator("<ID>", DATA[i]);
+            expect(t, DATA[i+1], DATA[i+2]);
+        }
+    }
+
+    /**
+     * Test cursor positioning outside of the key
+     */
+    public void TestCursorOffset() {
+        // Array of 3n items
+        // Each item is <rules>, <input>, <expected output>
+        String[] DATA = {
+            "pre {alpha} post > | @ ALPHA ;" +
+            "eALPHA > beta ;" +
+            "pre {beta} post > BETA @@ | ;" +
+            "post > xyz",
+
+            "prealphapost prebetapost",
+            "prbetaxyz preBETApost",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            logln("Pattern: " + Utility.escape(DATA[i]));
+            Transliterator t = new RuleBasedTransliterator("<ID>", DATA[i]);
+            expect(t, DATA[i+1], DATA[i+2]);
+        }
+    }
+
+    /**
+     * Test zero length and > 1 char length variable values.  Test
+     * use of variable refs in UnicodeSets.
+     */
+    public void TestArbitraryVariableValues() {
+        // Array of 3n items
+        // Each item is <rules>, <input>, <expected output>
+        String[] DATA = {
+            "$abe = ab;" +
+            "$pat = x[yY]z;" +
+            "$ll  = 'a-z';" +
+            "$llZ = [$ll];" +
+            "$llY = [$ll$pat];" +
+            "$emp = ;" +
+
+            "$abe > ABE;" +
+            "$pat > END;" +
+            "$llZ > 1;" +
+            "$llY > 2;" +
+            "7$emp 8 > 9;" +
+            "",
+
+            "ab xYzxyz stY78",
+            "ABE ENDEND 1129",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            logln("Pattern: " + Utility.escape(DATA[i]));
+            Transliterator t = new RuleBasedTransliterator("<ID>", DATA[i]);
+            expect(t, DATA[i+1], DATA[i+2]);
+        }
+    }
+
+    /**
+     * Confirm that the contextStart, contextLimit, start, and limit
+     * behave correctly.
+     */
+    public void TestPositionHandling() {
+        // Array of 3n items
+        // Each item is <rules>, <input>, <expected output>
+        String[] DATA = {
+            "a{t} > SS ; {t}b > UU ; {t} > TT ;",
+            "xtat txtb", // pos 0,9,0,9
+            "xTTaSS TTxUUb",
+
+            "a{t} > SS ; {t}b > UU ; {t} > TT ;",
+            "xtat txtb", // pos 2,9,3,8
+            "xtaSS TTxUUb",
+
+            "a{t} > SS ; {t}b > UU ; {t} > TT ;",
+            "xtat txtb", // pos 3,8,3,8
+            "xtaTT TTxTTb",
+        };
+
+        // Array of 4n positions -- these go with the DATA array
+        // They are: contextStart, contextLimit, start, limit
+        int[] POS = {
+            0, 9, 0, 9,
+            2, 9, 3, 8,
+            3, 8, 3, 8,
+        };
+
+        int n = DATA.length/3;
+        for (int i=0; i<n; i++) {
+            Transliterator t = new RuleBasedTransliterator("<ID>", DATA[3*i]);
+            Transliterator.Position pos = new Transliterator.Position(
+                POS[4*i], POS[4*i+1], POS[4*i+2], POS[4*i+3]);
+            ReplaceableString rsource = new ReplaceableString(DATA[3*i+1]);
+            t.transliterate(rsource, pos);
+            t.finishTransliteration(rsource, pos);
+            String result = rsource.toString();
+            String exp = DATA[3*i+2];
+            expectAux(Utility.escape(DATA[3*i]),
+                      DATA[3*i+1] + " -> " + result,
+                      result.equals(exp),
+                      exp);
+        }
+    }
+
+    /**
+     * Test the Hiragana-Katakana transliterator.
+     */
+    public void TestHiraganaKatakana() {
+        Transliterator hk = Transliterator.getInstance("Hiragana-Katakana");
+        Transliterator kh = Transliterator.getInstance("Katakana-Hiragana");
+
+        // Array of 3n items
+        // Each item is "hk"|"kh"|"both", <Hiragana>, <Katakana>
+        String[] DATA = {
+            "both",
+            "\u3042\u3090\u3099\u3092\u3050",
+            "\u30A2\u30F8\u30F2\u30B0",
+
+            "kh",
+            "\u307C\u3051\u3060\u3042\u3093\u30FC",
+            "\u30DC\u30F6\u30C0\u30FC\u30F3\u30FC",
+        };
+
+        for (int i=0; i<DATA.length; i+=3) {
+            switch (DATA[i].charAt(0)) {
+            case 'h': // Hiragana-Katakana
+                expect(hk, DATA[i+1], DATA[i+2]);
+                break;
+            case 'k': // Katakana-Hiragana
+                expect(kh, DATA[i+2], DATA[i+1]);
+                break;
+            case 'b': // both
+                expect(hk, DATA[i+1], DATA[i+2]);
+                expect(kh, DATA[i+2], DATA[i+1]);
+                break;
+            }
+        }
+
+    }
+
+    /**
+     * Test inter-Indic transliterators.  These are composed.
+     */
+    public void TestInterIndic() {
+        String ID = "Devanagari-Gujarati";
+        Transliterator dg = Transliterator.getInstance(ID);
+        if (dg == null) {
+            errln("FAIL: getInstance(" + ID + ") returned null");
+            return;
+        }
+        String id = dg.getID();
+        if (!id.equals(ID)) {
+            errln("FAIL: getInstance(" + ID + ").getID() => " + id);
+        }
+        String dev = "\u0901\u090B\u0925";
+        String guj = "\u0A81\u0A8B\u0AA5";
+        expect(dg, dev, guj);
+    }
+
+    /**
+     * Test filter syntax in IDs.
+     */
+    public void TestFilterIDs() {
+        String ID = "Unicode-Hex[aeiou]";
+        expect(Transliterator.getInstance(ID), "quizzical",
+               "q\\u0075\\u0069zz\\u0069c\\u0061l");
+        ID = "Unicode-Hex[aeiou];Hex-Unicode[^5]";
+        expect(Transliterator.getInstance(ID), "quizzical",
+               "q\\u0075izzical");
+    }
+
+    //======================================================================
+    // Support methods
+    //======================================================================
+
+    void expect(String rules, String source, String expectedResult) {
+        expect(new RuleBasedTransliterator("<ID>", rules), source, expectedResult);
+    }
+
+    void expect(Transliterator t, String source, String expectedResult,
+                Transliterator reverseTransliterator) {
+        expect(t, source, expectedResult);
+        if (reverseTransliterator != null) {
+            expect(reverseTransliterator, expectedResult, source);
+        }
+    }
+
+    void expect(Transliterator t, String source, String expectedResult) {
+        String result = t.transliterate(source);
+        expectAux(t.getID() + ":String", source, result, expectedResult);
+
+        ReplaceableString rsource = new ReplaceableString(source);
+        t.transliterate(rsource);
+        result = rsource.toString();
+        expectAux(t.getID() + ":Replaceable", source, result, expectedResult);
+
+        // Test keyboard (incremental) transliteration -- this result
+        // must be the same after we finalize (see below).
+        rsource.replace(0, rsource.length(), "");
+        Transliterator.Position index = new Transliterator.Position();
+        StringBuffer log = new StringBuffer();
+
+        for (int i=0; i<source.length(); ++i) {
+            if (i != 0) {
+                log.append(" + ");
+            }
+            log.append(source.charAt(i)).append(" -> ");
+            t.transliterate(rsource, index,
+                            String.valueOf(source.charAt(i)));
+            // Append the string buffer with a vertical bar '|' where
+            // the committed index is.
+            String s = rsource.toString();
+            log.append(s.substring(0, index.start)).
+                append('|').
+                append(s.substring(index.start));
+        }
+        
+        // As a final step in keyboard transliteration, we must call
+        // transliterate to finish off any pending partial matches that
+        // were waiting for more input.
+        t.finishTransliteration(rsource, index);
+        result = rsource.toString();
+        log.append(" => ").append(rsource.toString());
+
+        expectAux(t.getID() + ":Keyboard", log.toString(),
+                  result.equals(expectedResult),
+                  expectedResult);
+    }
+
+    void expectAux(String tag, String source,
+                   String result, String expectedResult) {
+        expectAux(tag, source + " -> " + result,
+                  result.equals(expectedResult),
+                  expectedResult);
+    }
+    
+    void expectAux(String tag, String summary, boolean pass,
+                   String expectedResult) {
+        if (pass) {
+            logln("("+tag+") " + Utility.escape(summary));
+        } else {
+            errln("FAIL: ("+tag+") "
+                  + Utility.escape(summary)
+                  + ", expected " + Utility.escape(expectedResult));
+        }
+    }
+}
diff --git a/src/com/ibm/test/translit/UnicodeFilterLogicTest.java b/src/com/ibm/test/translit/UnicodeFilterLogicTest.java
new file mode 100755
index 0000000..51932b9
--- /dev/null
+++ b/src/com/ibm/test/translit/UnicodeFilterLogicTest.java
@@ -0,0 +1,196 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/UnicodeFilterLogicTest.java,v $ 
+ * $Date: 2000/10/04 23:12:33 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import com.ibm.util.Utility;
+import java.text.*;
+import java.util.*;
+
+/**
+ * @test
+ * @summary UnicodeFilterLogic test 
+ */
+public class UnicodeFilterLogicTest extends TestFmwk {
+
+   public static void main(String[] args) throws Exception {
+        new UnicodeFilterLogicTest().run(args);
+   }
+
+
+   UnicodeFilter Filter1=new UnicodeFilter() {
+        public boolean contains(char c) {
+            if(c == 0x0061 || c == 0x0041 || c == 0x0063 || c == 0x0043)
+                return false;
+            else
+                return true;
+       }
+   };
+   UnicodeFilter Filter2=new UnicodeFilter() {
+        public boolean contains(char c) {
+            if(c == 0x0079 || c == 0x0059 || c == 0x007a || c == 0x005a  || c == 0x0061 || c == 0x0063)
+                return false;
+            else
+                return true;
+        }
+   };
+
+   public void TestAllFilters() {
+
+        Transliterator t1 = Transliterator.getInstance("Unicode-Hex");
+        String source="abcdABCDyzYZ";
+
+        //sanity testing wihtout any filter
+        expect(t1, "without any Filter", source, "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        //sanity testing using the Filter1(acAC) and Filter2(acyzYZ)
+        t1.setFilter(Filter1);
+        expect(t1, "with Filter(acAC)", source, "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
+        t1.setFilter(Filter2);
+        expect(t1, "with Filter2(acyzYZ)", source, "a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
+
+        UnicodeFilter filterNOT=UnicodeFilterLogic.not(Filter1);
+        UnicodeFilter filterAND=UnicodeFilterLogic.and(Filter1, Filter2);
+        UnicodeFilter filterOR=UnicodeFilterLogic.or(Filter1, Filter2);
+
+        checkNOT(t1, Filter1, "Filter(acAC)",  source, "\u0061b\u0063d\u0041B\u0043DyzYZ");
+        checkNOT(t1, Filter2, "Filter(acyzYZ)", source, "\u0061b\u0063dABCD\u0079\u007A\u0059\u005A");
+       // checkNOT(t1, null, "NULL", source, "abcdABCDyzYZ");
+        checkNOT(t1, filterNOT, "FilterNOT(Fitler1(acAC))", source, 
+                 "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
+        checkNOT(t1, filterAND, "FilterAND(Fitler1(acAC),  Filter2(acyzYZ))",  source, 
+                  "\u0061b\u0063d\u0041B\u0043D\u0079\u007A\u0059\u005A");
+        checkNOT(t1, filterOR, "FilterOR(Fitler1(acAC),  Filter2(acyzYZ))",  source, 
+                 "\u0061b\u0063dABCDyzYZ");
+
+        checkAND(t1, Filter1, Filter2, "Filter1(a,c,A,C), Filter2(acyzYZ)",  source, 
+                 "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkAND(t1, Filter2, Filter1, "Filter2(acyzYZ), Filter1(a,c,A,C), ", source, 
+                 "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkAND(t1, Filter1, null, "Filter1(a,c,A,C), NULL",  source, 
+                 "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
+        checkAND(t1, null, Filter2, "NULL, Filter2(acyzYZ)",   source, 
+                 "a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
+        checkAND(t1, null, null, "NULL, NULL",  source, 
+                 "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        checkAND(t1, filterAND, null, "FilterAND(Fitler1(acAC),  Filter2(acyzYZ)), NULL",  source,
+                  "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkAND(t1, filterAND, Filter1, "FilterAND(Fitler1(acAC),  Filter2(acyzYZ)), Filter1(acAC)", source, 
+                 "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkAND(t1, filterAND, Filter2, "FilterAND(Fitler1(acAC),  Filter2(acyzYZ)), Filter2(acyzYZ)", source, 
+                 "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkAND(t1, Filter1, filterAND, "Filter1(acAC), FilterAND(Filter1(acAC), Fitler1(acAC))", source,
+                  "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkAND(t1, Filter2, filterAND, "Filter2(acyzYZ), FilterAND(Filter1(acAC), Fitler1(acAC))", source, 
+                 "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkAND(t1, filterOR, null, "FilterOR(Fitler1(acAC),  Filter2(acyzYZ)), NULL",  source, 
+                 "a\u0062c\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        checkAND(t1, filterOR, Filter1, "FilterOR(Fitler1(acAC),  Filter2(acyzYZ)), Fitler1(acAC)", source,
+                 "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
+        checkAND(t1, filterOR, Filter2, "FilterOR(Fitler1(acAC),  Filter2(acyzYZ)), Fitler2(acyzYZ)", source, 
+                 "a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
+        checkAND(t1, filterNOT, Filter1, "FilterNOT(Fitler1(acAC)), Fitler1(acAC)", source, 
+                 "abcdABCDyzYZ");
+        checkAND(t1, Filter1, filterNOT, "Fitler1(acAC), FilterNOT(Fitler1(acAC))", source, 
+                 "abcdABCDyzYZ");
+        checkAND(t1, filterNOT, Filter2, "FilterNOT(Fitler1(acAC)), Fitler2(acyzYZ)", source, 
+                 "abcd\u0041B\u0043DyzYZ");
+        checkAND(t1, Filter2, filterNOT, "Fitler2(acyzYZ), FilterNOT(Fitler1(acAC))", source, 
+                 "abcd\u0041B\u0043DyzYZ");
+
+        checkOR(t1, Filter1, Filter2, "Filter1(a,c,A,C), Filter2(acyzYZ)",  source,
+                "a\u0062c\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, Filter2, Filter1, "Filter2(acyzYZ), Filter1(a,c,A,C)", source, 
+                "a\u0062c\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, Filter1, null, "Filter1(a,c,A,C), NULL", source, 
+                "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, null, Filter2, "NULL, Filter2(acyzYZ)",  source, 
+                "a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
+        checkOR(t1, null, null, "NULL, NULL",   source, 
+                "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, filterAND, null, "FilterAND(Fitler1(acAC),  Filter2(acyzYZ)), NULL", source, 
+                "a\u0062c\u0064A\u0042C\u0044yzYZ");
+        checkOR(t1, filterAND, Filter1, "FilterAND(Fitler1(acAC),  Filter2(acyzYZ)), Filter1(acAC)", source, 
+                "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, filterAND, Filter2, "FilterAND(Fitler1(acAC),  Filter2(acyzYZ)), Filter2(acyzYZ)", source, 
+                "a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
+        checkOR(t1, Filter1, filterAND, "Filter1(acAC), FilterAND(Filter1(acAC), Fitler1(acAC))", source, 
+                "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, Filter2, filterAND, "Filter2(acyzYZ), FilterAND(Filter1(acAC), Fitler1(acAC))", source, 
+                "a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
+        checkOR(t1, filterNOT, Filter1, "FilterNOT(Fitler1(acAC)), Fitler1(acAC)", source, 
+                "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, Filter1, filterNOT, "Fitler1(acAC), FilterNOT(Fitler1(acAC))",  source, 
+                "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
+        checkOR(t1, filterNOT, Filter2, "FilterNOT(Fitler1(acAC)), Fitler1(acyzYZ)",  source, 
+                "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044yzYZ");
+        checkOR(t1, Filter2, filterNOT, "Fitler2(acyzYZ), FilterNOT(Fitler1(acAC))", source, 
+                "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044yzYZ");
+
+  
+}
+    //======================================================================
+    // Support methods
+    //======================================================================
+
+    void checkOR(Transliterator t,
+                   UnicodeFilter f1, 
+                   UnicodeFilter f2, 
+                   String message,
+                   String source,
+                   String expected){
+        UnicodeFilter filter=UnicodeFilterLogic.or(f1, f2);
+        t.setFilter(filter);
+        expect(t, "with FilterOR(" + message + ")", source, expected);
+
+    }
+    void checkAND(Transliterator t,
+                   UnicodeFilter f1, 
+                   UnicodeFilter f2, 
+                   String message,
+                   String source,
+                   String expected){
+        UnicodeFilter filter=UnicodeFilterLogic.and(f1, f2);
+        t.setFilter(filter);
+        expect(t, "with FilterAND(" + message + ")", source, expected);
+
+    }
+    void checkNOT(Transliterator t,
+                   UnicodeFilter f1, 
+                   String message,
+                   String source,
+                   String expected){
+        UnicodeFilter filter=UnicodeFilterLogic.not(f1);
+        t.setFilter(filter);
+        expect(t, "with FilterNOT(" + message + ")", source, expected);
+
+    }  
+    void expect(Transliterator t,  String message,  String source,  String expectedResult) {
+        String rsource = source;
+        t.transliterate(rsource);
+        expectAux(t.getID() + ":Replaceable " + message, source + "->" + rsource, expectedResult.equals(rsource), expectedResult);
+
+    }
+    void expectAux(String tag, String summary, boolean pass, String expectedResult) {
+        if (pass) {
+            logln("(" + tag+ ") " + Utility.escape(summary));
+        } else {
+            errln("FAIL: ("+ tag+ ") "
+                + Utility.escape(summary)
+                + ", expected " + Utility.escape(expectedResult));
+        }
+    }
+
+}
+
+
+
diff --git a/src/com/ibm/test/translit/UnicodeSetTest.java b/src/com/ibm/test/translit/UnicodeSetTest.java
new file mode 100755
index 0000000..56c5738
--- /dev/null
+++ b/src/com/ibm/test/translit/UnicodeSetTest.java
@@ -0,0 +1,465 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/UnicodeSetTest.java,v $ 
+ * $Date: 2000/05/26 20:57:44 $ 
+ * $Revision: 1.9 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import com.ibm.util.Utility;
+import java.text.*;
+import java.util.*;
+
+/**
+ * @test
+ * @summary General test of UnicodeSet
+ */
+public class UnicodeSetTest extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new UnicodeSetTest().run(args);
+    }
+
+    public void TestPatterns() {
+        UnicodeSet set = new UnicodeSet();
+        expectPattern(set, "[[a-m]&[d-z]&[k-y]]",  "km");
+        expectPattern(set, "[[a-z]-[m-y]-[d-r]]",  "aczz");
+        expectPattern(set, "[a\\-z]",  "--aazz");
+        expectPattern(set, "[-az]",  "--aazz");
+        expectPattern(set, "[az-]",  "--aazz");
+        expectPattern(set, "[[[a-z]-[aeiou]i]]", "bdfnptvz");
+
+        // Throw in a test of complement
+        set.complement();
+        String exp = '\u0000' + "aeeoouu" + (char)('z'+1) + '\uFFFF';
+        expectPairs(set, exp);
+    }
+
+    public void TestCategories() {
+        int failures = 0;
+        UnicodeSet set = new UnicodeSet("[:Lu:]");
+        expectContainment(set, "ABC", "abc");
+
+        // Make sure generation of L doesn't pollute cached Lu set
+        // First generate L, then Lu
+        int TOP = 0x200; // Don't need to go over the whole range:
+        set = new UnicodeSet("[:L:]");
+        for (int i=0; i<0x200; ++i) {
+            boolean l = Character.isLetter((char)i);
+            if (l != set.contains((char)i)) {
+                errln("FAIL: L contains " + (char)i + " = " + 
+                      set.contains((char)i));
+                if (++failures == 10) break;
+            }
+        }
+
+        set = new UnicodeSet("[:Lu:]");
+        for (int i=0; i<0x200; ++i) {
+            boolean lu = (Character.getType((char)i) == Character.UPPERCASE_LETTER);
+            if (lu != set.contains((char)i)) {
+                errln("FAIL: Lu contains " + (char)i + " = " + 
+                      set.contains((char)i));
+                if (++failures == 20) break;
+            }
+        }
+    }
+
+    public void TestAddRemove() {
+        UnicodeSet set = new UnicodeSet();
+        set.add('a', 'z');
+        expectPairs(set, "az");
+        set.remove('m', 'p');
+        expectPairs(set, "alqz");
+        set.remove('e', 'g');
+        expectPairs(set, "adhlqz");
+        set.remove('d', 'i');
+        expectPairs(set, "acjlqz");
+        set.remove('c', 'r');
+        expectPairs(set, "absz");
+        set.add('f', 'q');
+        expectPairs(set, "abfqsz");
+        set.remove('a', 'g');
+        expectPairs(set, "hqsz");
+        set.remove('a', 'z');
+        expectPairs(set, "");
+
+        // Try removing an entire set from another set
+        expectPattern(set, "[c-x]", "cx");
+        UnicodeSet set2 = new UnicodeSet();
+        expectPattern(set2, "[f-ky-za-bc[vw]]", "acfkvwyz");
+        set.removeAll(set2);
+        expectPairs(set, "deluxx");
+
+        // Try adding an entire set to another set
+        expectPattern(set, "[jackiemclean]", "aacceein");
+        expectPattern(set2, "[hitoshinamekatajamesanderson]", "aadehkmort");
+        set.addAll(set2);
+        expectPairs(set, "aacehort");
+
+        // Test commutativity
+        expectPattern(set, "[hitoshinamekatajamesanderson]", "aadehkmort");
+        expectPattern(set2, "[jackiemclean]", "aacceein");
+        set.addAll(set2);
+        expectPairs(set, "aacehort");
+    }
+
+    /**
+     * Make sure minimal representation is maintained.
+     */
+    public void TestMinimalRep() {
+        // This is pretty thoroughly tested by checkCanonicalRep()
+        // run against the exhaustive operation results.  Use the code
+        // here for debugging specific spot problems.
+       
+        // 1 overlap against 2
+        UnicodeSet set = new UnicodeSet("[h-km-q]");
+        UnicodeSet set2 = new UnicodeSet("[i-o]");
+        set.addAll(set2);
+        expectPairs(set, "hq");
+        // right
+        set.applyPattern("[a-m]");
+        set2.applyPattern("[e-o]");
+        set.addAll(set2);
+        expectPairs(set, "ao");
+        // left
+        set.applyPattern("[e-o]");
+        set2.applyPattern("[a-m]");
+        set.addAll(set2);
+        expectPairs(set, "ao");
+        // 1 overlap against 3
+        set.applyPattern("[a-eg-mo-w]");
+        set2.applyPattern("[d-q]");
+        set.addAll(set2);
+        expectPairs(set, "aw");
+    }
+
+    public void TestAPI() {
+        // default ct
+        UnicodeSet set = new UnicodeSet();
+        if (!set.isEmpty() || set.getRangeCount() != 0) {
+            errln("FAIL, set should be empty but isn't: " +
+                  set);
+        }
+
+        // clear(), isEmpty()
+        set.add('a');
+        if (set.isEmpty()) {
+            errln("FAIL, set shouldn't be empty but is: " +
+                  set);
+        }
+        set.clear();
+        if (!set.isEmpty()) {
+            errln("FAIL, set should be empty but isn't: " +
+                  set);
+        }
+
+        // size()
+        set.clear();
+        if (set.size() != 0) {
+            errln("FAIL, size should be 0, but is " + set.size() +
+                  ": " + set);
+        }
+        set.add('a');
+        if (set.size() != 1) {
+            errln("FAIL, size should be 1, but is " + set.size() +
+                  ": " + set);
+        }
+        set.add('1', '9');
+        if (set.size() != 10) {
+            errln("FAIL, size should be 10, but is " + set.size() +
+                  ": " + set);
+        }
+
+        // contains(first, last)
+        set.clear();
+        set.applyPattern("[A-Y 1-8 b-d l-y]");
+        for (int i = 0; i<set.getRangeCount(); ++i) {
+            char a = set.getRangeStart(i);
+            char b = set.getRangeEnd(i);
+            if (!set.contains(a, b)) {
+                errln("FAIL, should contain " + (char)a + '-' + (char)b +
+                      " but doesn't: " + set);
+            }
+            if (set.contains((char)(a-1), b)) {
+                errln("FAIL, shouldn't contain " +
+                      (char)(a-1) + '-' + (char)b +
+                      " but does: " + set);
+            }
+            if (set.contains(a, (char)(b+1))) {
+                errln("FAIL, shouldn't contain " +
+                      (char)a + '-' + (char)(b+1) +
+                      " but does: " + set);
+            }
+        }
+
+        // Ported InversionList test.
+        UnicodeSet a = new UnicodeSet((char)3,(char)10);
+        UnicodeSet b = new UnicodeSet((char)7,(char)15);
+        UnicodeSet c = new UnicodeSet();
+
+        logln("a [3-10]: " + a);
+        logln("b [7-15]: " + b);
+        c.set(a); c.addAll(b);
+        UnicodeSet exp = new UnicodeSet((char)3,(char)15);
+        if (c.equals(exp)) {
+            logln("c.set(a).add(b): " + c);
+        } else {
+            errln("FAIL: c.set(a).add(b) = " + c + ", expect " + exp);
+        }
+        c.complement();
+        exp.set((char)0, (char)2);
+        exp.add((char)16, UnicodeSet.MAX_VALUE);
+        if (c.equals(exp)) {
+            logln("c.complement(): " + c);
+        } else {
+            errln("FAIL: c.complement() = " + c + ", expect " + exp);
+        }
+        c.complement();
+        exp.set((char)3, (char)15);
+        if (c.equals(exp)) {
+            logln("c.complement(): " + c);
+        } else {
+            errln("FAIL: c.complement() = " + c + ", expect " + exp);
+        }
+        c.set(a); c.complementAll(b);
+        exp.set((char)3,(char)6);
+        exp.add((char)11,(char) 15);
+        if (c.equals(exp)) {
+            logln("c.set(a).complement(b): " + c);
+        } else {
+            errln("FAIL: c.set(a).complement(b) = " + c + ", expect " + exp);
+        }
+
+        exp.set(c);
+        c = bitsToSet(setToBits(c));
+        if (c.equals(exp)) {
+            logln("bitsToSet(setToBits(c)): " + c);
+        } else {
+            errln("FAIL: bitsToSet(setToBits(c)) = " + c + ", expect " + exp);
+        }
+    }
+
+    public void TestExhaustive() {
+        // exhaustive tests. Simulate UnicodeSets with integers.
+        // That gives us very solid tests (except for large memory tests).
+
+        char limit = (char)128;
+
+        for (char i = 0; i < limit; ++i) {
+            logln("Testing " + i + ", " + bitsToSet(i));
+            _testComplement(i);
+            for (char j = 0; j < limit; ++j) {
+                _testAdd(i,j);
+                _testXor(i,j);
+                _testRetain(i,j);
+                _testRemove(i,j);
+            }
+        }
+    }
+    
+    void _testComplement(int a) {
+        UnicodeSet x = bitsToSet(a);
+        UnicodeSet z = bitsToSet(a);
+        z.complement();
+        int c = setToBits(z);
+        if (c != (~a)) {
+            errln("FAILED: add: ~" + x +  " != " + z);
+            errln("FAILED: add: ~" + a + " != " + c);
+        }
+        checkCanonicalRep(z, "complement " + a);
+    }
+
+    void _testAdd(int a, int b) {
+        UnicodeSet x = bitsToSet(a);
+        UnicodeSet y = bitsToSet(b);
+        UnicodeSet z = bitsToSet(a);
+        z.addAll(y);
+        int c = setToBits(z);
+        if (c != (a | b)) {
+            errln(Utility.escape("FAILED: add: " + x + " | " + y + " != " + z));
+            errln("FAILED: add: " + a + " | " + b + " != " + c);
+        }
+        checkCanonicalRep(z, "add " + a + "," + b);
+    }
+
+    void _testRetain(int a, int b) {
+        UnicodeSet x = bitsToSet(a);
+        UnicodeSet y = bitsToSet(b);
+        UnicodeSet z = bitsToSet(a);
+        z.retainAll(y);
+        int c = setToBits(z);
+        if (c != (a & b)) {
+            errln("FAILED: retain: " + x + " & " + y + " != " + z);
+            errln("FAILED: retain: " + a + " & " + b + " != " + c);
+        }
+        checkCanonicalRep(z, "retain " + a + "," + b);
+    }
+
+    void _testRemove(int a, int b) {
+        UnicodeSet x = bitsToSet(a);
+        UnicodeSet y = bitsToSet(b);
+        UnicodeSet z = bitsToSet(a);
+        z.removeAll(y);
+        int c = setToBits(z);
+        if (c != (a &~ b)) {
+            errln("FAILED: remove: " + x + " &~ " + y + " != " + z);
+            errln("FAILED: remove: " + a + " &~ " + b + " != " + c);
+        }
+        checkCanonicalRep(z, "remove " + a + "," + b);
+    }
+
+    void _testXor(int a, int b) {
+        UnicodeSet x = bitsToSet(a);
+        UnicodeSet y = bitsToSet(b);
+        UnicodeSet z = bitsToSet(a);
+        z.complementAll(y);
+        int c = setToBits(z);
+        if (c != (a ^ b)) {
+            errln("FAILED: complement: " + x + " ^ " + y + " != " + z);
+            errln("FAILED: complement: " + a + " ^ " + b + " != " + c);
+        }
+        checkCanonicalRep(z, "complement " + a + "," + b);
+    }
+    
+    /**
+     * Check that ranges are monotonically increasing and non-
+     * overlapping.
+     */
+    void checkCanonicalRep(UnicodeSet set, String msg) {
+        int n = set.getRangeCount();
+        if (n < 0) {
+            errln("FAIL result of " + msg +
+                  ": range count should be >= 0 but is " +
+                  n + " for " + Utility.escape(set.toString()));
+            return;
+        }
+        int last = 0;
+        for (int i=0; i<n; ++i) {
+            int start = set.getRangeStart(i);
+            int end = set.getRangeEnd(i);
+            if (start > end) {
+                errln("FAIL result of " + msg +
+                      ": range " + (i+1) +
+                      " start > end: " + start + ", " + end +
+                      " for " + Utility.escape(set.toString()));
+            }
+            if (i > 0 && start <= last) {
+                errln("FAIL result of " + msg +
+                      ": range " + (i+1) +
+                      " overlaps previous range: " + start + ", " + end +
+                      " for " + Utility.escape(set.toString()));
+            }
+            last = end;
+        }
+    }
+
+    /**
+     * Convert a bitmask to a UnicodeSet.
+     */
+    static UnicodeSet bitsToSet(int a) {
+        UnicodeSet result = new UnicodeSet();
+        for (int i = 0; i < 32; ++i) {
+            if ((a & (1<<i)) != 0) {
+                result.add((char)i,(char)i);
+            }
+        }
+        return result;
+    }
+    
+    /**
+     * Convert a UnicodeSet to a bitmask.  Only the characters
+     * U+0000 to U+0020 are represented in the bitmask.
+     */
+    static int setToBits(UnicodeSet x) {
+        int result = 0;
+        for (int i = 0; i < 32; ++i) {
+            if (x.contains((char)i)) {
+                result |= (1<<i);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Return the representation of an inversion list based UnicodeSet
+     * as a pairs list.  Ranges are listed in ascending Unicode order.
+     * For example, the set [a-zA-M3] is represented as "33AMaz".
+     */
+    static String getPairs(UnicodeSet set) {
+        StringBuffer pairs = new StringBuffer();
+        for (int i=0; i<set.getRangeCount(); ++i) {
+            int start = set.getRangeStart(i);
+            int end = set.getRangeEnd(i);
+            if (end > 0xFFFF) {
+                end = 0xFFFF;
+                i = set.getRangeCount(); // Should be unnecessary
+            }
+            pairs.append((char)start).append((char)end);
+        }
+        return pairs.toString();
+    }
+
+    void expectContainment(UnicodeSet set, String charsIn, String charsOut) {
+        StringBuffer bad = new StringBuffer();
+        if (charsIn != null) {
+            for (int i=0; i<charsIn.length(); ++i) {
+                char c = charsIn.charAt(i);
+                if (!set.contains(c)) {
+                    bad.append(c);
+                }
+            }
+            if (bad.length() > 0) {
+                logln(Utility.escape("Fail: set " + set + " does not contain " + bad +
+                      ", expected containment of " + charsIn));
+            } else {
+                logln(Utility.escape("Ok: set " + set + " contains " + charsIn));
+            }
+        }
+        if (charsOut != null) {
+            bad.setLength(0);
+            for (int i=0; i<charsOut.length(); ++i) {
+                char c = charsOut.charAt(i);
+                if (set.contains(c)) {
+                    bad.append(c);
+                }
+            }
+            if (bad.length() > 0) {
+                logln(Utility.escape("Fail: set " + set + " contains " + bad +
+                      ", expected non-containment of " + charsOut));
+            } else {
+                logln(Utility.escape("Ok: set " + set + " does not contain " + charsOut));
+            }
+        }
+    }
+
+    void expectPattern(UnicodeSet set,
+                       String pattern,
+                       String expectedPairs) {
+        set.applyPattern(pattern);
+        if (!getPairs(set).equals(expectedPairs)) {
+            errln("FAIL: applyPattern(\"" + pattern +
+                  "\") => pairs \"" +
+                  Utility.escape(getPairs(set)) + "\", expected \"" +
+                  Utility.escape(expectedPairs) + "\"");
+        } else {
+            logln("Ok:   applyPattern(\"" + pattern +
+                  "\") => pairs \"" +
+                  Utility.escape(getPairs(set)) + "\"");
+        }
+    }
+
+    void expectPairs(UnicodeSet set, String expectedPairs) {
+        if (!getPairs(set).equals(expectedPairs)) {
+            errln("FAIL: Expected pair list \"" +
+                  Utility.escape(expectedPairs) + "\", got \"" +
+                  Utility.escape(getPairs(set)) + "\"");
+        }
+    }
+}
diff --git a/src/com/ibm/test/translit/UnicodeToHexTransliteratorTest.java b/src/com/ibm/test/translit/UnicodeToHexTransliteratorTest.java
new file mode 100755
index 0000000..268483c
--- /dev/null
+++ b/src/com/ibm/test/translit/UnicodeToHexTransliteratorTest.java
@@ -0,0 +1,300 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/UnicodeToHexTransliteratorTest.java,v $ 
+ * $Date: 2000/10/16 16:58:29 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+import com.ibm.util.Utility;
+import java.text.*;
+import java.util.*;
+
+
+/**
+ * @test
+ * @summary General test of UnicodeToHexTransliterator
+ */
+public class UnicodeToHexTransliteratorTest extends TestFmwk {
+
+    public static void main(String[] args) throws Exception {
+        new UnicodeToHexTransliteratorTest().run(args);
+    }
+
+    /**
+    * Used by TestConstruction() and TestTransliterate.
+    */
+    UnicodeFilter UniFilter=new UnicodeFilter() {
+        public boolean contains(char c) {
+            if(c==0x0063 || c==0x0061 || c==0x0043 || c==0x0041)
+                return false;
+            else
+                return true;
+       }
+    };
+
+    public void TestConstruction(){
+        logln("Testing the construction UnicodeToHexTransliterator()");
+        UnicodeToHexTransliterator trans1=new UnicodeToHexTransliterator();
+        
+
+        logln("Testing the cosntruction UnicodeToHexTransliterator(pattern)");
+        String pattern="\\\\U+0000abc";
+        try{
+            trans1=new UnicodeToHexTransliterator(pattern);
+        }catch(IllegalArgumentException ex2) {
+            errln("FAIL: UnicodeToHexTransliterator construction failed with pattern=" + pattern + " Exception= " + ex2.toString());
+        }
+
+        logln("Testing the cosntruction UnicodeToHexTransliterator(pattern) with illegal pattern");
+        String pattern2="\\X+";
+        try{
+            trans1=new UnicodeToHexTransliterator(pattern2);
+        }catch(IllegalArgumentException ex3) {
+            logln("OK: construction with Illegal pattern handled correctly");
+        }  
+        
+        logln("Testing the construction UnicodeToHexTransliterator(pattern, isUppercase=false, adoptedFilter=null)");
+        try{
+            trans1=new UnicodeToHexTransliterator(pattern, false, null);
+        }catch(IllegalArgumentException ex4) {
+            errln("FAIL: UnicodeToHexTransliterator(pattern, isUppercase=false, adoptedFilter=null) construction failed. Exception= " + ex4.toString());
+        }
+
+        logln("Testing the construction UnicodeToHexTransliterator(pattern, isUppercase=true, adoptedFilter)");
+        try{
+            trans1=new UnicodeToHexTransliterator(pattern, true, UniFilter);
+        }catch(IllegalArgumentException ex4) {
+            errln("FAIL: UnicodeToHexTransliterator(pattern, isUppercase=true, adoptedFilter) construction failed. Exception= " + ex4.toString());
+        }
+
+    }
+
+    public void TestUpperCase(){
+        logln("Testing the isUppercase() and setUppercase() API of UnicodeToHexTransliterator");
+        String str="abk";
+        /*default transliterator has upper case TRUE*/
+        UnicodeToHexTransliterator transdefault=new UnicodeToHexTransliterator();
+        expect(transdefault, "where uppercase=default", str, "\\u0061\\u0062\\u006B");
+
+        String pattern="\\\\u0000";
+        /*transliterator with Uppercase FALSE*/
+        UnicodeToHexTransliterator trans1=null;
+        try{
+            trans1=new UnicodeToHexTransliterator(pattern, false, null);
+        }catch(IllegalArgumentException ex1) {
+            errln("FAIL: UnicodeToHexTransliterator(pattern, false,null) construction failed with patter" 
+                  + pattern+ " Exception: " + ex1.toString());
+        }
+        expect(trans1, "where uppercase=FALSE", str, "\\u0061\\u0062\\u006b");  /*doesn't display uppercase*/
+
+        if(transdefault.isUppercase() != true  || 
+           trans1.isUppercase() != false ){
+            errln("isUpperCase() failed");
+        }
+        
+        /*changing the outputhexdigits to lower case for the default transliterator*/
+        transdefault.setUppercase(trans1.isUppercase());
+        if(transdefault.isUppercase() != trans1.isUppercase() || 
+           transdefault.isUppercase() != false){
+            errln("setUppercase() failed");
+        }
+        /*doesn't ouput uppercase hex, since transdefault's uppercase is set to FALSE using setUppercase*/
+        expect(transdefault, "where uppercase=FALSE", str, "\\u0061\\u0062\\u006b");     
+
+        /*trying round trip*/
+        transdefault.setUppercase(true);
+        if(transdefault.isUppercase() != true || 
+           transdefault.isUppercase() == trans1.isUppercase() ){
+            errln("setUppercase() failed");
+        }
+        /*displays upper case since it is set to TRUE*/
+        expect(transdefault, "where uppercase=TRUE", str, "\\u0061\\u0062\\u006B");
+
+    } 
+    public void TestPattern(){
+        logln("Testing the applyPattern() and toPattern() API of UnicodeToHexTransliterator");
+        /*default transliterator has pattern \\u0000*/
+        UnicodeToHexTransliterator transdefault=new UnicodeToHexTransliterator();
+                
+        String defaultpattern=transdefault.toPattern();
+        String pattern1="\\\\U+0000";
+        
+        UnicodeToHexTransliterator trans1=null;
+        try{
+            trans1=new UnicodeToHexTransliterator(pattern1, true, null);
+        }catch(IllegalArgumentException ex1) {
+            errln("FAIL: UnicodeToHexTransliterator construction failed with pattern =" + pattern1 +
+                   "Exception:" + ex1.toString());
+        }
+
+        /*test toPattern() */
+        if(transdefault.toPattern().equals(trans1.toPattern()) == true ||
+            transdefault.toPattern().equals("\\\\u0000") != true ||
+            trans1.toPattern().equals(pattern1) != true ){
+            errln("Error: toPattern() failed");
+        }
+
+        /*apply patterns for transdefault*/
+        String str="abKf";
+        expectPattern(transdefault,  pattern1, str, "\\U+0061\\U+0062\\U+004B\\U+0066");
+        expectPattern(transdefault,  "\\U##00,", str, "U61,U62,U4B,U66,");
+        expectPattern(transdefault, defaultpattern, str, "\\u0061\\u0062\\u004B\\u0066");
+        expectPattern(trans1, "\\uni0000", str, "uni0061uni0062uni004Buni0066");
+        expectPattern(trans1, "\\\\S-0000-E", str, "\\S-0061-E\\S-0062-E\\S-004B-E\\S-0066-E");
+        expectPattern(trans1, "\\u##0000", str, "FAIL");
+        expectPattern(trans1, "\\*0000", str, "*0061*0062*004B*0066"); 
+        expectPattern(trans1, "\\u####", str, "FAIL");
+   
+    }
+
+    public void TestSimpleTransliterate(){ 
+        String pattern1="\\\\U+0000";
+        UnicodeToHexTransliterator trans1=null;
+        try{
+            trans1=new UnicodeToHexTransliterator(pattern1, true, null);
+        }catch(IllegalArgumentException iae){
+            errln("UnicodeToHexTransliterator(pattern1, true, null) construction failed with pattern =" 
+                  + pattern1 + "Exception:" + iae.toString());
+        }
+        String source="Hello";
+        String expected="He\\U+006C\\U+006C\\U+006F";
+
+        expectTranslit(trans1, ":Replaceable ", source,  1, 5, 2, expected);   
+    }
+   
+    public void TestTransliterate(){
+        String Data[]={
+        //pattern, source, index.contextStart, index.contextLimit, index.start, expectedResult, expectedResult using filter(a, b)
+        "U+##00",    "abc", "1", "3", "2", "abU+63", "abc",
+        "\\\\u0000", "abc", "1", "2", "1", "a\\u0062c", "a\\u0062c",
+        "Uni0000",   "abc", "1", "3", "2", "abUni0063", "abc",
+        "U[0000]",   "hello", "0", "4", "2", "heU[006C]U[006C]o", "heU[006C]U[006C]o",
+        "prefix-0000-suffix", "abc", "1", "3", "1", "aprefix-0062-suffixprefix-0063-suffix", "aprefix-0062-suffixc",
+        "*##00*",     "hellothere", "1", "8", "4", "hell*6F**74**68**65*re", "hell*6F**74**68**65*re",
+
+        };
+        UnicodeToHexTransliterator trans1=null;
+        UnicodeToHexTransliterator trans2=null;
+        for(int i=0;i<Data.length;i+=7){
+            try{
+                trans1=new UnicodeToHexTransliterator(Data[i+0],true, null);
+            }catch(IllegalArgumentException iae){
+                errln("UnicodeToHexTransliterator(pattern1, true, null) construction failed with pattern =" 
+                  + Data[i+0] + "Exception:" + iae.toString());
+            }
+            expectTranslit(trans1, "", Data[i+1], Integer.parseInt(Data[i+2]), 
+                       Integer.parseInt(Data[i+3]), Integer.parseInt(Data[i+4]), 
+                       Data[i+5] );
+        
+            try{
+                trans2=new UnicodeToHexTransliterator(Data[i+0], true, UniFilter);
+            }catch(IllegalArgumentException iae){
+                errln("UnicodeToHexTransliterator(pattern1, true, UnicodeFilter) construction failed with pattern =" 
+                  +  Data[i+0] + " with filter(a,c).  Exception:" + iae.toString());
+            }
+            expectTranslit(trans2, " with filter(a,A,c,C)", Data[i+1], 
+                           Integer.parseInt(Data[i+2]), Integer.parseInt(Data[i+3]), 
+                           Integer.parseInt(Data[i+4]), Data[i+6] );
+        }
+
+    } 
+        
+    //======================================================================
+    // Support methods
+    //======================================================================
+
+    private void expectTranslit(UnicodeToHexTransliterator t,
+                                   String message, String source, 
+                                   int start, int limit, int cursor,  
+                                   String expectedResult){
+    
+
+        ReplaceableString rsource = new ReplaceableString(source);
+        Transliterator.Position index = new Transliterator.Position(start, limit, cursor, limit);
+        t.transliterate(rsource, index);
+        t.finishTransliteration(rsource, index);
+        String result=rsource.toString();
+        expectAux(t.getID() + ":keyboard " + message, source + "->" + result, result.equals(expectedResult), expectedResult);
+    }
+    private void expectPattern(UnicodeToHexTransliterator t,
+                                 String pattern, String source, String expectedResult){
+
+        try{
+            t.applyPattern(pattern);
+        }catch(IllegalArgumentException iae){
+            if(expectedResult.equals("FAIL")){
+                logln("OK: calling applyPattern() with illegal pattern failed as expected." + iae.toString());
+            } else{
+                errln("FAIL: applyPattern() failed with pattern =" + pattern + "--->" + iae.toString());
+            }
+        }
+        if(!expectedResult.equals("FAIL")){
+            if(!t.toPattern().equals(pattern)) {
+                errln("FAIL: applyPattern or toPatten failed.  Expected: " + pattern + "Got: " + t.toPattern());
+            }else{
+                logln("OK: applyPattern passed. Testing transliteration");
+                expect(t, " with pattern "+pattern, source, expectedResult);
+            }
+        }
+    }
+    private void expect(UnicodeToHexTransliterator t,  String message, String source, String expectedResult) {
+    
+        String result=t.transliterate(source);
+        expectAux(t.getID() + ":String " + message, source + "->" + result, result.equals(expectedResult), expectedResult);
+
+        ReplaceableString rsource = new ReplaceableString(source);
+        t.transliterate(rsource);
+        result = rsource.toString();
+        expectAux(t.getID() + ":Replaceable" + message, source + "->" + result, result.equals(expectedResult), expectedResult);
+
+        // Test keyboard (incremental) transliteration -- this result
+        // must be the same after we finalize (see below).
+        rsource.replace(0, rsource.length(), "");
+        Transliterator.Position index = new Transliterator.Position();
+        StringBuffer log = new StringBuffer();
+
+        for (int i=0; i<source.length(); ++i) {
+            if (i != 0) {
+                log.append(" + ");
+            }
+            log.append(source.charAt(i)).append(" -> ");
+            t.transliterate(rsource, index,
+                            String.valueOf(source.charAt(i)));
+            // Append the string buffer with a vertical bar '|' where
+            // the committed index is.
+            String s = rsource.toString();
+            log.append(s.substring(0, index.start)).
+                append('|').
+                append(s.substring(index.start));
+        }
+        
+        // As a final step in keyboard transliteration, we must call
+        // transliterate to finish off any pending partial matches that
+        // were waiting for more input.
+        t.finishTransliteration(rsource, index);
+        result = rsource.toString();
+        log.append(" => ").append(rsource.toString());
+        expectAux(t.getID() + ":Keyboard", log.toString() + "\n" + source + " -> " + result, result.equals(expectedResult), expectedResult);
+
+    }
+    private void expectAux(String tag, String summary, boolean pass,  String expectedResult) {
+        if (pass) {
+            logln("(" + tag + ") " + Utility.escape(summary));
+        } else {
+            errln("FAIL: (" + tag+ ") "
+                + Utility.escape(summary)
+                + ", expected " + Utility.escape(expectedResult));
+        }
+    }  
+}
+
+
+
diff --git a/src/com/ibm/test/translit/package.html b/src/com/ibm/test/translit/package.html
new file mode 100755
index 0000000..344c4b8
--- /dev/null
+++ b/src/com/ibm/test/translit/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:51 $
+-->
+</head>
+<body bgcolor="white">
+Transliterator tests.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/text/ArabicShaping.java b/src/com/ibm/text/ArabicShaping.java
new file mode 100755
index 0000000..41cf1db
--- /dev/null
+++ b/src/com/ibm/text/ArabicShaping.java
@@ -0,0 +1,1176 @@
+/*
+*******************************************************************************
+*   Copyright (C) 2001, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+/**
+ * Shape Arabic text on a character basis.
+ *
+ * <p>ArabicShaping performs basic operations for "shaping" Arabic text. It is most
+ * useful for use with legacy data formats and legacy display technology
+ * (simple terminals). All operations are performed on Unicode characters.</p>
+ *
+ * <p>Text-based shaping means that some character code points in the text are
+ * replaced by others depending on the context. It transforms one kind of text
+ * into another. In comparison, modern displays for Arabic text select
+ * appropriate, context-dependent font glyphs for each text element, which means
+ * that they transform text into a glyph vector.</p>
+ *
+ * <p>Text transformations are necessary when modern display technology is not
+ * available or when text needs to be transformed to or from legacy formats that
+ * use "shaped" characters. Since the Arabic script is cursive, connecting
+ * adjacent letters to each other, computers select images for each letter based
+ * on the surrounding letters. This usually results in four images per Arabic
+ * letter: initial, middle, final, and isolated forms. In Unicode, on the other
+ * hand, letters are normally stored abstract, and a display system is expected
+ * to select the necessary glyphs. (This makes searching and other text
+ * processing easier because the same letter has only one code.) It is possible
+ * to mimic this with text transformations because there are characters in
+ * Unicode that are rendered as letters with a specific shape
+ * (or cursive connectivity). They were included for interoperability with
+ * legacy systems and codepages, and for unsophisticated display systems.</p>
+ *
+ * <p>A second kind of text transformations is supported for Arabic digits:
+ * For compatibility with legacy codepages that only include European digits,
+ * it is possible to replace one set of digits by another, changing the
+ * character code points. These operations can be performed for either
+ * Arabic-Indic Digits (U+0660...U+0669) or Eastern (Extended) Arabic-Indic
+ * digits (U+06f0...U+06f9).</p>
+ *
+ * <p>Some replacements may result in more or fewer characters (code points).
+ * By default, this means that the destination buffer may receive text with a
+ * length different from the source length. Some legacy systems rely on the
+ * length of the text to be constant. They expect extra spaces to be added
+ * or consumed either next to the affected character or at the end of the
+ * text.</p>
+ */
+public final class ArabicShaping {
+    private final int options;
+    private boolean isLogical; // convenience
+
+    /**
+     * Convert a range of text in the source array, putting the result 
+     * into a range of text in the destination array, and return the number
+     * of characters written.
+     *
+     * @param source An array containing the input text
+     * @param sourceStart The start of the range of text to convert
+     * @param sourceLength The length of the range of text to convert
+     * @param dest The destination array that will receive the result.
+     *   It may be <code>NULL</code> only if  <code>destSize</code> is 0.  
+     * @param destStart The start of the range of the destination buffer to use.
+     * @param destSize The size (capacity) of the destination buffer.
+     *   If <code>destSize</code> is 0, then no output is produced,
+     *   but the necessary buffer size is returned ("preflighting").  This
+     *   does not validate the text against the options, for example, 
+     *   if letters are being unshaped, and spaces are being consumed
+     *   following lamalef, this will not detect a lamalef without a 
+     *   corresponding space.  An error will be thrown when the actual
+     *   conversion is attempted.
+     * @return The number of chars written to the destination buffer.
+     *   If an error occurs, then no output was written, or it may be
+     *   incomplete.
+     * @throws ArabicShapingException if the text cannot be converted according to the options.
+     */
+    public int shape(char[] source, int sourceStart, int sourceLength,
+                     char[] dest, int destStart, int destSize) throws ArabicShapingException {
+        if (source == null) {
+            throw new IllegalArgumentException("source can not be null");
+        }
+        if (sourceStart < 0 || sourceLength < 0 || sourceStart + sourceLength > source.length) {
+            throw new IllegalArgumentException("bad source start (" + sourceStart +
+                                               ") or length (" + sourceLength +
+                                               ") for buffer of length " + source.length);
+        }
+        if (dest == null && destSize != 0) {
+            throw new IllegalArgumentException("null dest requires destSize == 0");
+        }
+        if ((destSize != 0) &&
+            (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)) {
+            throw new IllegalArgumentException("bad dest start (" + destStart + 
+                                               ") or size (" + destSize + 
+                                               ") for buffer of length " + dest.length);
+        }
+
+        return internalShape(source, sourceStart, sourceLength, dest, destStart, destSize);
+    }
+
+    /**
+     * Convert a range of text in place.  This may only be used if the Length option
+     * does not grow or shrink the text.
+     *
+     * @param source An array containing the input text
+     * @param start The start of the range of text to convert
+     * @param length The length of the range of text to convert
+     * @throws ArabicShapingException if the text cannot be converted according to the options.
+     */
+    public void shape(char[] source, int start, int length) throws ArabicShapingException {
+        if ((options & LENGTH_MASK) == LENGTH_GROW_SHRINK) {
+            throw new ArabicShapingException("Cannot shape in place with length option grow/shrink.");
+        }
+        shape(source, start, length, source, start, length);
+    }
+
+    /**
+     * Convert a string, returning the new string.
+     *
+     * @param source The string to convert.
+     * @return The converted string.
+     * @throws ArabicShapingException if the string cannot be converted according to the options.
+     */
+    public String shape(String text) throws ArabicShapingException {
+        char[] src = text.toCharArray();
+        char[] dest = src;
+        if (((options & LENGTH_MASK) == LENGTH_GROW_SHRINK) &&
+            ((options & LETTERS_MASK) == LETTERS_UNSHAPE)) {
+
+            dest = new char[src.length * 2]; // max
+        }
+        int len = shape(src, 0, src.length, dest, 0, dest.length);
+
+        return new String(dest, 0, len);
+    }
+
+    /**
+     * Construct ArabicShaping using the options flags.
+     * The flags are as follows:<br>
+     * 'LENGTH' flags control whether the text can change size, and if not,
+     * how to maintain the size of the text when LamAlef ligatures are 
+     * formed or broken.<br>
+     * 'TEXT_DIRECTION' flags control whether the text is read and written
+     * in visual order or in logical order.<br>
+     * 'LETTERS_SHAPE' flags control whether conversion is to or from
+     * presentation forms.<br>
+     * 'DIGITS' flags control whether digits are shaped, and whether from
+     * European to Arabic-Indic or vice-versa.<br>
+     * 'DIGIT_TYPE' flags control whether standard or extended Arabic-Indic
+     * digits are used when performing digit conversion.
+     */
+    public ArabicShaping(int options) {
+        this.options = options;
+        if ((options & DIGITS_MASK) > 0x80) {
+            throw new IllegalArgumentException("bad DIGITS options");
+        }
+        isLogical = (options & TEXT_DIRECTION_MASK) == TEXT_DIRECTION_LOGICAL;
+    }
+
+    /**
+     * Memory option: allow the result to have a different length than the source.
+     */
+    public static final int LENGTH_GROW_SHRINK = 0;
+
+    /**
+     * Memory option: the result must have the same length as the source.
+     * If more room is necessary, then try to consume spaces next to modified characters.
+     */
+    public static final int LENGTH_FIXED_SPACES_NEAR = 1;
+
+    /**
+     * Memory option: the result must have the same length as the source.
+     * If more room is necessary, then try to consume spaces at the end of the text.
+     */
+    public static final int LENGTH_FIXED_SPACES_AT_END = 2;
+
+    /**
+     * Memory option: the result must have the same length as the source.
+     * If more room is necessary, then try to consume spaces at the beginning of the text.
+     */
+    public static final int LENGTH_FIXED_SPACES_AT_BEGINNING = 3;
+
+    /** 
+     * Bit mask for memory options. 
+     */
+    public static final int LENGTH_MASK = 3;
+
+
+    /** 
+     * Direction indicator: the source is in logical (keyboard) order. 
+     */
+    public static final int TEXT_DIRECTION_LOGICAL = 0;
+
+    /** 
+     * Direction indicator: the source is in visual (display) order, that is,
+     * the leftmost displayed character is stored first.
+     */
+    public static final int TEXT_DIRECTION_VISUAL_LTR = 4;
+
+    /** 
+     * Bit mask for direction indicators. 
+     */
+    public static final int TEXT_DIRECTION_MASK = 4;
+
+
+    /**
+     * Letter shaping option: do not perform letter shaping. 
+     */
+    public static final int LETTERS_NOOP = 0;
+
+    /** 
+     * Letter shaping option: replace normative letter characters in the U+0600 (Arabic) block,
+     * by shaped ones in the U+FE70 (Presentation Forms B) block. Performs Lam-Alef ligature
+     * substitution.
+     */
+    public static final int LETTERS_SHAPE = 8;
+
+    /** 
+     * Letter shaping option: replace shaped letter characters in the U+FE70 (Presentation Forms B) block
+     * by normative ones in the U+0600 (Arabic) block.  Converts Lam-Alef ligatures to pairs of Lam and
+     * Alef characters, consuming spaces if required.
+     */
+    public static final int LETTERS_UNSHAPE = 0x10;
+
+    /**
+     * Letter shaping option: replace normative letter characters in the U+0600 (Arabic) block,
+     * except for the TASHKEEL characters at U+064B...U+0652, by shaped ones in the U+Fe70
+     * (Presentation Forms B) block.
+     * !!! Currently unsupported and ignored.  Will be treated as LETTERS_SHAPE.
+     */
+    private static final int LETTERS_SHAPE_EXCEPT_TASHKEEL = 0x18;
+
+    /** 
+     * Bit mask for letter shaping options. 
+     */
+    public static final int LETTERS_MASK = 0x18;
+
+
+    /** 
+     * Digit shaping option: do not perform digit shaping. 
+     */
+    public static final int DIGITS_NOOP = 0;
+
+    /**
+     * Digit shaping option: Replace European digits (U+0030...U+0039) by Arabic-Indic digits.
+     */
+    public static final int DIGITS_EN2AN = 0x20;
+
+    /**
+     * Digit shaping option: Replace Arabic-Indic digits by European digits (U+0030...U+0039).
+     */
+    public static final int DIGITS_AN2EN = 0x40;
+
+    /**
+     * Digit shaping option:
+     * Replace European digits (U+0030...U+0039) by Arabic-Indic digits
+     * if the most recent strongly directional character
+     * is an Arabic letter (its Bidi direction value is RIGHT_TO_LEFT_ARABIC). 
+     * The initial state at the start of the text is assumed to be not an Arabic,
+     * letter, so European digits at the start of the text will not change.
+     * Compare to DIGITS_ALEN2AN_INIT_AL.
+     */
+    public static final int DIGITS_EN2AN_INIT_LR = 0x60;
+
+    /**
+     * Digit shaping option:
+     * Replace European digits (U+0030...U+0039) by Arabic-Indic digits
+     * if the most recent strongly directional character
+     * is an Arabic letter (its Bidi direction value is RIGHT_TO_LEFT_ARABIC). 
+     * The initial state at the start of the text is assumed to be an Arabic,
+     * letter, so European digits at the start of the text will change.
+     * Compare to DIGITS_ALEN2AN_INT_LR.
+     */
+    public static final int DIGITS_EN2AN_INIT_AL = 0x80;
+
+    /** Not a valid option value. */
+    private static final int DIGITS_RESERVED = 0xa0;
+
+    /** 
+     * Bit mask for digit shaping options. 
+     */
+    public static final int DIGITS_MASK = 0xe0;
+
+    /** 
+     * Digit type option: Use Arabic-Indic digits (U+0660...U+0669). 
+     */
+    public static final int DIGIT_TYPE_AN = 0;
+
+    /** 
+     * Digit type option: Use Eastern (Extended) Arabic-Indic digits (U+06f0...U+06f9). 
+     */
+    public static final int DIGIT_TYPE_AN_EXTENDED = 0x100;
+
+    /** 
+     * Bit mask for digit type options. 
+     */
+    public static final int DIGIT_TYPE_MASK = 0x0100; // 0x3f00?
+
+    public boolean equals(Object rhs) {
+        return rhs != null && 
+            rhs.getClass() == ArabicShaping.class && 
+            options == ((ArabicShaping)rhs).options;
+    }
+
+    public int hashCode() {
+        return options;
+    }
+
+    public String toString() {
+        StringBuffer buf = new StringBuffer(super.toString());
+        buf.append('[');
+        switch (options & LENGTH_MASK) {
+        case LENGTH_GROW_SHRINK: buf.append("grow/shrink"); break;
+        case LENGTH_FIXED_SPACES_NEAR: buf.append("spaces near"); break;
+        case LENGTH_FIXED_SPACES_AT_END: buf.append("spaces at end"); break;
+        case LENGTH_FIXED_SPACES_AT_BEGINNING: buf.append("spaces at beginning"); break;
+        }
+        switch (options & TEXT_DIRECTION_MASK) {
+        case TEXT_DIRECTION_LOGICAL: buf.append(", logical"); break;
+        case TEXT_DIRECTION_VISUAL_LTR: buf.append(", visual"); break;
+        }
+        switch (options & LETTERS_MASK) {
+        case LETTERS_NOOP: buf.append(", no letter shaping"); break;
+        case LETTERS_SHAPE: buf.append(", shape letters"); break;
+        case LETTERS_SHAPE_EXCEPT_TASHKEEL:
+        case LETTERS_UNSHAPE: buf.append(", unshape letters"); break;
+        }
+        switch (options & DIGITS_MASK) {
+        case DIGITS_NOOP: buf.append(", no digit shaping"); break;
+        case DIGITS_EN2AN: buf.append(", shape digits to AN"); break;
+        case DIGITS_AN2EN: buf.append(", shape digits to EN"); break;
+        case DIGITS_EN2AN_INIT_LR: buf.append(", shape digits to AN contextually: default EN"); break;
+        case DIGITS_EN2AN_INIT_AL: buf.append(", shape digits to AN contextually: default AL"); break;
+        }
+        switch (options & DIGIT_TYPE_MASK) {
+        case DIGIT_TYPE_AN: buf.append(", standard Arabic-Indic digits"); break;
+        case DIGIT_TYPE_AN_EXTENDED: buf.append(", extended Arabic-Indic digits"); break;
+        }
+        buf.append("]");
+
+        return buf.toString();
+    }
+
+    //
+    // ported api
+    //
+
+    private static final int IRRELEVANT = 4;
+    private static final int LAMTYPE = 16;
+    private static final int ALEFTYPE = 32;
+
+    private static final int LINKR = 1;
+    private static final int LINKL = 2;
+    private static final int LINK_MASK = 3;
+
+    private static final int irrelevantPos[] = { 
+        0x0, 0x2, 0x4, 0x6, 0x8, 0xA, 0xC, 0xE 
+    };
+
+    private static final char convertLamAlef[] =  {
+        '\u0622', // FEF5 
+        '\u0622', // FEF6
+        '\u0623', // FEF7
+        '\u0623', // FEF8
+        '\u0625', // FEF9
+        '\u0625', // FEFA
+        '\u0627', // FEFB
+        '\u0627'  // FEFC 
+    };
+
+    private static final char convertNormalizedLamAlef[] = {
+        '\u0622', // 065C
+        '\u0623', // 065D
+        '\u0625', // 065E
+        '\u0627', // 065F
+    };
+
+    private static final int[] araLink = {
+        1           + 32 + 256 * 0x11,  /*0x0622*/
+        1           + 32 + 256 * 0x13,  /*0x0623*/
+        1                + 256 * 0x15,  /*0x0624*/
+        1           + 32 + 256 * 0x17,  /*0x0625*/
+        1 + 2            + 256 * 0x19,  /*0x0626*/
+        1           + 32 + 256 * 0x1D,  /*0x0627*/
+        1 + 2            + 256 * 0x1F,  /*0x0628*/
+        1                + 256 * 0x23,  /*0x0629*/
+        1 + 2            + 256 * 0x25,  /*0x062A*/
+        1 + 2            + 256 * 0x29,  /*0x062B*/
+        1 + 2            + 256 * 0x2D,  /*0x062C*/
+        1 + 2            + 256 * 0x31,  /*0x062D*/
+        1 + 2            + 256 * 0x35,  /*0x062E*/
+        1                + 256 * 0x39,  /*0x062F*/
+        1                + 256 * 0x3B,  /*0x0630*/
+        1                + 256 * 0x3D,  /*0x0631*/
+        1                + 256 * 0x3F,  /*0x0632*/
+        1 + 2            + 256 * 0x41,  /*0x0633*/
+        1 + 2            + 256 * 0x45,  /*0x0634*/
+        1 + 2            + 256 * 0x49,  /*0x0635*/
+        1 + 2            + 256 * 0x4D,  /*0x0636*/
+        1 + 2            + 256 * 0x51,  /*0x0637*/
+        1 + 2            + 256 * 0x55,  /*0x0638*/
+        1 + 2            + 256 * 0x59,  /*0x0639*/
+        1 + 2            + 256 * 0x5D,  /*0x063A*/
+        0, 0, 0, 0, 0,                  /*0x063B-0x063F*/
+        1 + 2,                          /*0x0640*/
+        1 + 2            + 256 * 0x61,  /*0x0641*/
+        1 + 2            + 256 * 0x65,  /*0x0642*/
+        1 + 2            + 256 * 0x69,  /*0x0643*/
+        1 + 2       + 16 + 256 * 0x6D,  /*0x0644*/
+        1 + 2            + 256 * 0x71,  /*0x0645*/
+        1 + 2            + 256 * 0x75,  /*0x0646*/
+        1 + 2            + 256 * 0x79,  /*0x0647*/
+        1                + 256 * 0x7D,  /*0x0648*/
+        1                + 256 * 0x7F,  /*0x0649*/
+        1 + 2            + 256 * 0x81,  /*0x064A*/
+        4, 4, 4, 4,                     /*0x064B-0x064E*/
+        4, 4, 4, 4,                     /*0x064F-0x0652*/
+        4, 4, 4, 0, 0,                  /*0x0653-0x0657*/
+        0, 0, 0, 0,                     /*0x0658-0x065B*/
+        1                + 256 * 0x85,  /*0x065C*/
+        1                + 256 * 0x87,  /*0x065D*/
+        1                + 256 * 0x89,  /*0x065E*/
+        1                + 256 * 0x8B,  /*0x065F*/
+        0, 0, 0, 0, 0,                  /*0x0660-0x0664*/
+        0, 0, 0, 0, 0,                  /*0x0665-0x0669*/
+        0, 0, 0, 0, 0, 0,               /*0x066A-0x066F*/
+        4,                              /*0x0670*/
+        0,                              /*0x0671*/
+        1           + 32,               /*0x0672*/
+        1           + 32,               /*0x0673*/
+        0,                              /*0x0674*/
+        1           + 32,               /*0x0675*/
+        1, 1,                           /*0x0676-0x0677*/
+        1+2, 1+2, 1+2, 1+2, 1+2, 1+2,   /*0x0678-0x067D*/
+        1+2, 1+2, 1+2, 1+2, 1+2, 1+2,   /*0x067E-0x0683*/
+        1+2, 1+2, 1+2, 1+2,             /*0x0684-0x0687*/
+        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /*0x0688-0x0691*/
+        1, 1, 1, 1, 1, 1, 1, 1,         /*0x0692-0x0699*/
+        1+2, 1+2, 1+2, 1+2, 1+2, 1+2,   /*0x069A-0x06A3*/
+        1+2, 1+2, 1+2, 1+2,             /*0x069A-0x06A3*/
+        1+2, 1+2, 1+2, 1+2, 1+2, 1+2,   /*0x06A4-0x06AD*/
+        1+2, 1+2, 1+2, 1+2,             /*0x06A4-0x06AD*/
+        1+2, 1+2, 1+2, 1+2, 1+2, 1+2,   /*0x06AE-0x06B7*/
+        1+2, 1+2, 1+2, 1+2,             /*0x06AE-0x06B7*/
+        1+2, 1+2, 1+2, 1+2, 1+2, 1+2,   /*0x06B8-0x06BF*/
+        1+2, 1+2,                       /*0x06B8-0x06BF*/
+        1,                              /*0x06C0*/
+        1+2,                            /*0x06C1*/
+        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /*0x06C2-0x06CB*/
+        1+2,                            /*0x06CC*/
+        1,                              /*0x06CD*/
+        1+2, 1+2, 1+2, 1+2,             /*0x06CE-0x06D1*/
+        1, 1                            /*0x06D2-0x06D3*/
+    };
+
+    private static final int[] presLink = {
+        1 + 2,                        /*0xFE70*/
+        1 + 2,                        /*0xFE71*/
+        1 + 2, 0, 1+ 2, 0, 1+ 2,      /*0xFE72-0xFE76*/
+        1 + 2,                        /*0xFE77*/
+        1+ 2, 1 + 2, 1+2, 1 + 2,      /*0xFE78-0xFE81*/
+        1+ 2, 1 + 2, 1+2, 1 + 2,      /*0xFE82-0xFE85*/
+        0, 0 + 32, 1 + 32, 0 + 32,    /*0xFE86-0xFE89*/
+        1 + 32, 0, 1,  0 + 32,        /*0xFE8A-0xFE8D*/
+        1 + 32, 0, 2,  1 + 2,         /*0xFE8E-0xFE91*/
+        1, 0 + 32, 1 + 32, 0,         /*0xFE92-0xFE95*/
+        2, 1 + 2, 1, 0,               /*0xFE96-0xFE99*/
+        1, 0, 2, 1 + 2,               /*0xFE9A-0xFE9D*/
+        1, 0, 2, 1 + 2,               /*0xFE9E-0xFEA1*/
+        1, 0, 2, 1 + 2,               /*0xFEA2-0xFEA5*/
+        1, 0, 2, 1 + 2,               /*0xFEA6-0xFEA9*/
+        1, 0, 2, 1 + 2,               /*0xFEAA-0xFEAD*/
+        1, 0, 1, 0,                   /*0xFEAE-0xFEB1*/
+        1, 0, 1, 0,                   /*0xFEB2-0xFEB5*/
+        1, 0, 2, 1+2,                 /*0xFEB6-0xFEB9*/
+        1, 0, 2, 1+2,                 /*0xFEBA-0xFEBD*/
+        1, 0, 2, 1+2,                 /*0xFEBE-0xFEC1*/
+        1, 0, 2, 1+2,                 /*0xFEC2-0xFEC5*/
+        1, 0, 2, 1+2,                 /*0xFEC6-0xFEC9*/
+        1, 0, 2, 1+2,                 /*0xFECA-0xFECD*/
+        1, 0, 2, 1+2,                 /*0xFECE-0xFED1*/
+        1, 0, 2, 1+2,                 /*0xFED2-0xFED5*/
+        1, 0, 2, 1+2,                 /*0xFED6-0xFED9*/
+        1, 0, 2, 1+2,                 /*0xFEDA-0xFEDD*/
+        1, 0, 2, 1+2,                 /*0xFEDE-0xFEE1*/
+        1, 0 + 16, 2 + 16, 1 + 2 +16, /*0xFEE2-0xFEE5*/
+        1 + 16, 0, 2, 1+2,            /*0xFEE6-0xFEE9*/
+        1, 0, 2, 1+2,                 /*0xFEEA-0xFEED*/
+        1, 0, 2, 1+2,                 /*0xFEEE-0xFEF1*/
+        1, 0, 1, 0,                   /*0xFEF2-0xFEF5*/
+        1, 0, 2, 1+2,                 /*0xFEF6-0xFEF9*/
+        1, 0, 1, 0,                   /*0xFEFA-0xFEFD*/
+        1, 0, 1, 0,
+        1
+    };
+
+    private static int[] convertFEto06 = {
+        /***********0******1******2******3******4******5******6******7******8******9******A******B******C******D******E******F***/
+        /*FE7*/   0x64B, 0x64B, 0x64C, 0x64C, 0x64D, 0x64D, 0x64E, 0x64E, 0x64F, 0x64F, 0x650, 0x650, 0x651, 0x651, 0x652, 0x652,
+        /*FE8*/   0x621, 0x622, 0x622, 0x623, 0x623, 0x624, 0x624, 0x625, 0x625, 0x626, 0x626, 0x626, 0x626, 0x627, 0x627, 0x628,
+        /*FE9*/   0x628, 0x628, 0x628, 0x629, 0x629, 0x62A, 0x62A, 0x62A, 0x62A, 0x62B, 0x62B, 0x62B, 0x62B, 0x62C, 0x62C, 0x62C,
+        /*FEA*/   0x62C, 0x62D, 0x62D, 0x62D, 0x62D, 0x62E, 0x62E, 0x62E, 0x62E, 0x62F, 0x62F, 0x630, 0x630, 0x631, 0x631, 0x632,
+        /*FEB*/   0x632, 0x633, 0x633, 0x633, 0x633, 0x634, 0x634, 0x634, 0x634, 0x635, 0x635, 0x635, 0x635, 0x636, 0x636, 0x636,
+        /*FEC*/   0x636, 0x637, 0x637, 0x637, 0x637, 0x638, 0x638, 0x638, 0x638, 0x639, 0x639, 0x639, 0x639, 0x63A, 0x63A, 0x63A,
+        /*FED*/   0x63A, 0x641, 0x641, 0x641, 0x641, 0x642, 0x642, 0x642, 0x642, 0x643, 0x643, 0x643, 0x643, 0x644, 0x644, 0x644,
+        /*FEE*/   0x644, 0x645, 0x645, 0x645, 0x645, 0x646, 0x646, 0x646, 0x646, 0x647, 0x647, 0x647, 0x647, 0x648, 0x648, 0x649,
+        /*FEF*/   0x649, 0x64A, 0x64A, 0x64A, 0x64A, 0x65C, 0x65C, 0x65D, 0x65D, 0x65E, 0x65E, 0x65F, 0x65F
+    };
+
+    private static final int shapeTable[][][] = {
+        { {0,0,0,0}, {0,0,0,0}, {0,1,0,3}, {0,1,0,1} },
+        { {0,0,2,2}, {0,0,1,2}, {0,1,1,2}, {0,1,1,3} },
+        { {0,0,0,0}, {0,0,0,0}, {0,1,0,3}, {0,1,0,3} },
+        { {0,0,1,2}, {0,0,1,2}, {0,1,1,2}, {0,1,1,3} }
+    };
+
+    /*
+     * This function shapes European digits to Arabic-Indic digits
+     * in-place, writing over the input characters.  Data is in visual
+     * order.
+     */
+    private void shapeToArabicDigitsWithContext(char[] dest,
+                                                int start,
+                                                int length,
+                                                char digitBase,
+                                                boolean lastStrongWasAL) {
+
+        digitBase -= '0'; // move common adjustment out of loop
+
+        for(int i = start + length; --i >= start;) {
+            char ch = dest[i];
+            int dir = UCharacter.getDirection(ch);
+            switch (UCharacter.getDirection(ch)) {
+            case UCharacterDirection.LEFT_TO_RIGHT:
+            case UCharacterDirection.RIGHT_TO_LEFT:
+                lastStrongWasAL = false;
+                break;
+            case UCharacterDirection.RIGHT_TO_LEFT_ARABIC:
+                lastStrongWasAL = true;
+                break;
+            case UCharacterDirection.EUROPEAN_NUMBER:
+                if (lastStrongWasAL && ch <= '\u0039') {
+                    dest[i] = (char)(ch + digitBase);
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+    /*
+     * Name    : invertBuffer
+     * Function: This function inverts the buffer, it's used
+     *           in case the user specifies the buffer to be
+     *           TEXT_DIRECTION_LOGICAL
+     */
+    private static void invertBuffer(char[] buffer,
+                                     int start,
+                                     int length) {
+
+        for(int i = start, j = start + length - 1; i < j; i++, --j) {
+            char temp = buffer[i];
+            buffer[i] = buffer[j];
+            buffer[j] = temp;
+        }
+    }
+
+    /*
+     * Name    : changeLamAlef
+     * Function: Converts the Alef characters into an equivalent
+     *           LamAlef location in the 0x06xx Range, this is an
+     *           intermediate stage in the operation of the program
+     *           later it'll be converted into the 0xFExx LamAlefs 
+     *           in the shaping function.
+     */
+    private static char changeLamAlef(char ch) {
+        switch(ch) {
+        case '\u0622': return '\u065C';
+        case '\u0623': return '\u065D';
+        case '\u0625': return '\u065E';
+        case '\u0627': return '\u065F';
+        default:  return '\u0000'; // not a lamalef
+        }
+    }
+
+    /*
+     * Name    : specialChar
+     * Function: Special Arabic characters need special handling in the shapeUnicode
+     *           function, this function returns 1 or 2 for these special characters
+     */
+    private static int specialChar(char ch) {
+        if ((ch > '\u0621' && ch < '\u0626') || 
+            (ch == '\u0627') ||
+            (ch > '\u062E' && ch < '\u0633') ||
+            (ch > '\u0647' && ch < '\u064A') ||
+            (ch == '\u0629')) {
+            return 1;
+        } else if (ch >= '\u064B' && ch<= '\u0652') {
+            return 2;
+        } else if (ch >= 0x0653 && ch <= 0x0655 || 
+                   ch == 0x0670 ||
+                   ch >= 0xFE70 && ch <= 0xFE7F) {
+            return 3;
+        } else {
+            return 0;
+        }
+    }
+    
+    /*
+     * Name    : getLink
+     * Function: Resolves the link between the characters as 
+     *           Arabic characters have four forms :
+     *           Isolated, Initial, Middle and Final Form
+     */
+    private static int getLink(char ch) {
+        if (ch >= '\u0622' && ch <= '\u06D3') {
+            return araLink[ch - '\u0622'];
+        } else if (ch == '\u200D') {
+            return 3;
+        } else if (ch >= '\u206D' && ch <= '\u206F') {
+            return 4;
+        } else if (ch >= '\uFE70' && ch <= '\uFEFC') {
+            return presLink[ch - '\uFE70'];
+        } else {
+            return 0;
+        }
+    }
+
+    /*
+     * Name    : countSpaces
+     * Function: Counts the number of spaces
+     *           at each end of the logical buffer
+     */
+    private static int countSpacesLeft(char[] dest, 
+                                       int start,
+                                       int count) {
+        for (int i = start, e = start + count; i < e; ++i) {
+            if (dest[i] != '\u0020') {
+                return i - start;
+            }
+        }
+        return count;
+    }
+
+    private static int countSpacesRight(char[] dest,
+                                        int start,
+                                        int count) {
+
+        for (int i = start + count; --i >= start;) {
+            if (dest[i] != '\u0020') {
+                return start + count - 1 - i;
+            }
+        }
+        return count;
+    }
+
+    /*
+     * Name    : isTashkeelChar
+     * Function: Returns 1 for Tashkeel characters else return 0
+     */
+    private static boolean isTashkeelChar(char ch) {
+        return ch >='\u064B' && ch <= '\u0652';
+    }
+
+    /*
+     * Name    : isAlefChar
+     * Function: Returns 1 for Alef characters else return 0
+     */
+    private static boolean isAlefChar(char ch) {
+        return ch == '\u0622' || ch == '\u0623' || ch == '\u0625' || ch == '\u0627';
+    }
+
+    /*
+     * Name    : isLamAlefChar
+     * Function: Returns 1 for LamAlef characters else return 0
+     */
+    private static boolean isLamAlefChar(char ch) {
+        return ch >= '\uFEF5' && ch <= '\uFEFC';
+    }
+
+    private static boolean isNormalizedLamAlefChar(char ch) {
+        return ch >= '\u065C' && ch <= '\u065F';
+    }
+
+    /*
+     * Name    : calculateSize
+     * Function: This function calculates the destSize to be used in preflighting
+     *           when the destSize is equal to 0
+     */
+    private int calculateSize(char[] source,
+                              int sourceStart,
+                              int sourceLength) {
+	
+        int destSize = sourceLength;
+
+        switch (options & LETTERS_MASK) {
+        case LETTERS_SHAPE:
+        case LETTERS_SHAPE_EXCEPT_TASHKEEL:
+            if (isLogical) {
+                for (int i = sourceStart, e = sourceStart + sourceLength - 1; i < e; ++i) {
+                    if (source[i] == '\u0644' && isAlefChar(source[i+1])) {
+                        --destSize;
+                    }
+                }
+            } else { // visual
+                for(int i = sourceStart + 1, e = sourceStart + sourceLength; i < e; ++i) {
+                    if (source[i] == '\u0644' && isAlefChar(source[i-1])) {
+                        --destSize;
+                    }
+                }
+            }
+            break;
+
+        case LETTERS_UNSHAPE:
+            for(int i = sourceStart, e = sourceStart + sourceLength; i < e; ++i) {
+                if (isLamAlefChar(source[i])) {
+                    destSize++;
+                }
+            }
+            break;
+
+        default:
+            break;
+        }
+
+        return destSize;
+    }
+
+    /*
+     * Name    : removeLamAlefSpaces
+     * Function: The shapeUnicode function converts Lam + Alef into LamAlef + space,
+     *           this function removes the spaces behind the LamAlefs according to
+     *           the options the user specifies, the spaces are removed to the end
+     *           of the buffer, or shrink the buffer and remove spaces for good
+     *           or leave the buffer as it is LamAlef + space.
+     */
+    private int removeLamAlefSpaces(char[] dest, 
+                                    int start,
+                                    int length) {
+	
+        int lenOptions = options & LENGTH_MASK;
+        if (!isLogical) {
+            switch (lenOptions) {
+            case LENGTH_FIXED_SPACES_AT_BEGINNING: lenOptions = LENGTH_FIXED_SPACES_AT_END; break;
+            case LENGTH_FIXED_SPACES_AT_END: lenOptions = LENGTH_FIXED_SPACES_AT_BEGINNING; break;
+            default: break;
+            }
+        }
+
+        if (lenOptions == LENGTH_FIXED_SPACES_NEAR) {
+            for (int i = start, e = i + length; i < e; ++i) {
+                if (dest[i] == '\uffff') {
+                    dest[i] = '\u0020';
+                }
+            }
+        } else {
+            final int e = start + length;
+            int w = e;
+            int r = e;
+            while (--r >= start) {
+                char ch = dest[r];
+                if (ch != '\uffff') {
+                    --w;
+                    if (w != r) {
+                        dest[w] = ch;
+                    }
+                }
+            }
+
+            if (lenOptions == LENGTH_FIXED_SPACES_AT_END) {
+                while (w > start) {
+                    dest[--w] = '\u0020';
+                }
+            } else {
+                if (w > start) {
+                    // shift, assume small buffer size so don't use arraycopy
+                    r = w;
+                    w = start;
+                    while (r < e) {
+                        dest[w++] = dest[r++];
+                    }
+                } else {
+                    w = e;
+                }
+                if (lenOptions == LENGTH_GROW_SHRINK) {
+                    length = w - start;
+                } else { // spaces at beginning
+                    while (w < e) {
+                        dest[w++] = '\u0020';
+                    }
+                }
+            }
+        }
+        return length;
+    }
+
+    /*
+     * Name    : expandLamAlef
+     * Function: LamAlef needs special handling as the LamAlef is
+     *           one character while expanding it will give two
+     *           characters Lam + Alef, so we need to expand the LamAlef
+     *           in near or far spaces according to the options the user
+     *           specifies or increase the buffer size.
+     *           Dest has enough room for the expansion if we are growing.
+     *           lamalef are normalized to the 'special characters'
+     */
+    private int expandLamAlef(char[] dest,
+                              int start,
+                              int length,
+                              int lacount) throws ArabicShapingException {
+
+        int lenOptions = options & LENGTH_MASK;
+        if (!isLogical) {
+            switch (lenOptions) {
+            case LENGTH_FIXED_SPACES_AT_BEGINNING: lenOptions = LENGTH_FIXED_SPACES_AT_END; break;
+            case LENGTH_FIXED_SPACES_AT_END: lenOptions = LENGTH_FIXED_SPACES_AT_BEGINNING; break;
+            default: break;
+            }
+        }
+
+        switch (lenOptions) {
+        case LENGTH_GROW_SHRINK: 
+            {
+                for (int r = start + length, w = r + lacount; --r >= start;) {
+                    char ch = dest[r];
+                    if (isNormalizedLamAlefChar(ch)) {
+                        dest[--w] = '\u0644';
+                        dest[--w] = convertNormalizedLamAlef[ch - '\u065C'];
+                    } else {
+                        dest[--w] = ch;
+                    }
+                }
+            }
+            length += lacount;
+            break;
+
+        case LENGTH_FIXED_SPACES_NEAR: 
+            {
+                if (isNormalizedLamAlefChar(dest[start])) {
+                    throw new ArabicShapingException("no space for lamalef");
+                }
+                for (int i = start + length; --i > start;) { // don't check start, already checked
+                    char ch = dest[i];
+                    if (isNormalizedLamAlefChar(ch)) {
+                        if (dest[i-1] == '\u0020') {
+                            dest[i] = '\u0644';
+                            dest[--i] = convertNormalizedLamAlef[ch - '\u065C'];
+                        } else {
+                            throw new ArabicShapingException("no space for lamalef");
+                        }
+                    }
+                }
+            }
+            break;
+
+        case LENGTH_FIXED_SPACES_AT_END: 
+            {
+                if (lacount > countSpacesLeft(dest, start, length)) {
+                    throw new ArabicShapingException("no space for lamalef");
+                }
+                for (int r = start + lacount, w = start, e = start + length; r < e; ++r) {
+                    char ch = dest[r];
+                    if (isNormalizedLamAlefChar(ch)) {
+                        dest[w++] = convertNormalizedLamAlef[ch - '\u065C'];
+                        dest[w++] = '\u0644';
+                    } else {
+                        dest[w++] = ch;
+                    }
+                }
+            }
+            break;
+                
+        case LENGTH_FIXED_SPACES_AT_BEGINNING: 
+            {
+                if (lacount > countSpacesRight(dest, start, length)) {
+                    throw new ArabicShapingException("no space for lamalef");
+                }
+                for (int r = start + length - lacount, w = start + length; --r >= start;) {
+                    char ch = dest[r];
+                    if (isNormalizedLamAlefChar(ch)) {
+                        dest[--w] = '\u0644';
+                        dest[--w] = convertNormalizedLamAlef[ch - '\u065C'];
+                    } else {
+                        dest[--w] = ch;
+                    }
+                }
+            }
+            break;
+        }
+
+        return length;
+    }
+
+    /* Convert the input buffer from FExx Range into 06xx Range
+     * to put all characters into the 06xx range
+     * even the lamalef is converted to the special region in
+     * the 06xx range.  Return the number of lamalef chars found.
+     */
+    private int normalize(char[] dest, int start, int length) {
+        int lacount = 0;
+        for (int i = start, e = i + length; i < e; ++i) {
+            char ch = dest[i];
+            if (ch >= '\uFE70' && ch <= '\uFEFC') {
+                if (isLamAlefChar(ch)) {
+                    ++lacount;
+                }
+                dest[i] = (char)convertFEto06[ch - '\uFE70'];
+            }
+        }
+        return lacount;
+    }
+
+    /*
+     * Name    : shapeUnicode
+     * Function: Converts an Arabic Unicode buffer in 06xx Range into a shaped
+     *           arabic Unicode buffer in FExx Range
+     */
+    private int shapeUnicode(char[] dest, 
+                             int start,
+                             int length,
+                             int destSize,
+                             boolean tashkeel) {
+
+
+        normalize(dest, start, length);
+
+        // resolve the link between the characters.
+        // Arabic characters have four forms: Isolated, Initial, Medial and Final.
+        // Tashkeel characters have two, isolated or medial, and sometimes only isolated.
+
+        boolean lamalef_found = false;
+        int i = start + length - 1;
+        int currLink = getLink(dest[i]);
+        int nextLink = 0;
+        int prevLink = 0;
+        int lastLink = 0;
+        int prevPos = i;
+        int lastPos = i;
+        int nx = -2;
+        int nw = 0;
+
+        while (i >= 0) {
+            // If high byte of currLink > 0 then there might be more than one shape
+            if ((currLink & '\uFF00') > 0 || isTashkeelChar(dest[i])) {
+                nw = i - 1;
+                nx = -2;
+                while (nx < 0) { // we need to know about next char
+                    if (nw == -1) {
+                        nextLink = 0;
+                        nx = Integer.MAX_VALUE;
+                    } else {
+                        nextLink = getLink(dest[nw]);
+                        if ((nextLink & IRRELEVANT) == 0) {
+                            nx = nw;
+                        } else {
+                            --nw;
+                        }
+                    }
+                }
+
+                if (((currLink & ALEFTYPE) > 0) && ((lastLink & LAMTYPE) > 0)) {
+                    lamalef_found = true; 
+                    char wLamalef = changeLamAlef(dest[i]); // get from 0x065C-0x065f
+                    if (wLamalef != '\u0000') {
+                        // replace alef by marker, it will be removed later
+                        dest[i] = '\uffff';
+                        dest[lastPos] = wLamalef;
+                        i = lastPos;
+                    }
+
+                    lastLink = prevLink;
+                    currLink = getLink(wLamalef); // requires '\u0000', unfortunately
+                }
+
+                // get the proper shape according to link ability of neighbors
+                // and of character; depends on the order of the shapes
+                // (isolated, initial, middle, final) in the compatibility area
+
+                int flag = specialChar(dest[i]);
+
+                int shape = shapeTable[nextLink & LINK_MASK]
+                    [lastLink & LINK_MASK]
+                    [currLink & LINK_MASK];
+
+                if (flag == 1) {
+                    shape &= 0x1;
+                } else if (flag == 2) {
+                    if (tashkeel &&
+                        ((lastLink & LINKL) != 0) && 
+                        ((nextLink & LINKR) != 0) && 
+                        dest[i] != '\u064C' && 
+                        dest[i] != '\u064D' &&
+                        !((nextLink & ALEFTYPE) == ALEFTYPE && 
+                          (lastLink & LAMTYPE) == LAMTYPE)) {
+		
+                        shape = 1;
+                    } else {
+                        shape = 0;
+                    }
+                }
+
+                if (flag == 2) {
+                    if (tashkeel) {
+                        dest[i] = (char)('\uFE70' + irrelevantPos[dest[i] - '\u064B'] + shape);
+                    } // else leave tashkeel alone                    
+                } else {
+                    dest[i] = (char)('\uFE70' + (currLink >> 8) + shape);
+                }
+            }
+
+            // move one notch forward
+            if ((currLink & IRRELEVANT) == 0) {
+                prevLink = lastLink;
+                lastLink = currLink;
+                prevPos = lastPos;
+                lastPos = i;
+            }
+
+            --i;
+            if (i == nx) {
+                currLink = nextLink;
+                nx = -2;
+            } else if (i != -1) {
+                currLink = getLink(dest[i]);
+            }
+        }
+
+        // If we found a lam/alef pair in the buffer 
+        // call removeLamAlefSpaces to remove the spaces that were added
+
+        if (lamalef_found) {
+            destSize = removeLamAlefSpaces(dest, start, length);
+        } else {
+            destSize = length;
+        }
+        
+        return destSize;
+    }
+
+    /*
+     * Name    : deShapeUnicode
+     * Function: Converts an Arabic Unicode buffer in FExx Range into unshaped
+     *           arabic Unicode buffer in 06xx Range
+     */
+    private int deShapeUnicode(char[] dest, 
+                               int start,
+                               int length,
+                               int destSize) throws ArabicShapingException {
+
+        int lamalef_count = normalize(dest, start, length);
+
+        // If there was a lamalef in the buffer call expandLamAlef
+        if (lamalef_count != 0) {
+            // need to adjust dest to fit expanded buffer... !!!
+            destSize = expandLamAlef(dest, start, length, lamalef_count);
+        } else {
+            destSize = length;
+        }
+
+        return destSize;
+    }
+
+    private int internalShape(char[] source, 
+                              int sourceStart,
+                              int sourceLength,
+                              char[] dest,
+                              int destStart,
+                              int destSize) throws ArabicShapingException {
+
+        if (sourceLength == 0) {
+            return 0;
+        }
+
+        if (destSize == 0) {
+            if (((options & LETTERS_MASK) != LETTERS_NOOP) &&
+                ((options & LENGTH_MASK) == LENGTH_GROW_SHRINK)) {
+	
+                return calculateSize(source, sourceStart, sourceLength);
+            } else {
+                return sourceLength; // by definition
+            }
+        }
+
+        // always use temp buffer
+        char[] temp = new char[sourceLength * 2]; // all lamalefs requiring expansion
+        System.arraycopy(source, sourceStart, temp, 0, sourceLength);
+
+        if (isLogical) {
+            invertBuffer(temp, 0, sourceLength);
+        }
+
+        int outputSize = sourceLength;
+
+        switch (options & LETTERS_MASK) {
+        case LETTERS_SHAPE_EXCEPT_TASHKEEL:
+        case LETTERS_SHAPE:
+            outputSize = shapeUnicode(temp, 0, sourceLength, destSize, true);
+            break;
+
+        case LETTERS_UNSHAPE:
+            outputSize = deShapeUnicode(temp, 0, sourceLength, destSize);
+            break; 
+
+        default:
+            break;
+        }
+                
+        if (outputSize > destSize) {
+            throw new ArabicShapingException("not enough room for result data");
+        }
+
+        if ((options & DIGITS_MASK) != DIGITS_NOOP) {
+            char digitBase = '\u0030'; // European digits
+            switch (options & DIGIT_TYPE_MASK) {
+            case DIGIT_TYPE_AN:
+                digitBase = '\u0660';  // Arabic-Indic digits
+                break;
+
+            case DIGIT_TYPE_AN_EXTENDED:
+                digitBase = '\u06f0';  // Eastern Arabic-Indic digits (Persian and Urdu)
+                break;
+
+            default:
+                break;
+            }
+
+            switch (options & DIGITS_MASK) {
+            case DIGITS_EN2AN:
+                {
+                    int digitDelta = digitBase - '\u0030';
+                    for (int i = 0; i < outputSize; ++i) {
+                        char ch = temp[i];
+                        if (ch <= '\u0039' && ch >= '\u0030') {
+                            temp[i] += digitDelta;
+                        }
+                    }
+                }
+                break;
+
+            case DIGITS_AN2EN:
+                {
+                    char digitTop = (char)(digitBase + 9);
+                    int digitDelta = '\u0030' - digitBase;
+                    for (int i = 0; i < outputSize; ++i) {
+                        char ch = temp[i];
+                        if (ch <= digitTop && ch >= digitBase) {
+                            temp[i] += digitDelta;
+                        }
+                    }
+                }
+                break;
+
+            case DIGITS_EN2AN_INIT_LR:
+                shapeToArabicDigitsWithContext(temp, 0, outputSize, digitBase, false);
+                break;
+
+            case DIGITS_EN2AN_INIT_AL:
+                shapeToArabicDigitsWithContext(temp, 0, outputSize, digitBase, true);
+                break;
+
+            default:
+                break;
+            }
+        }
+
+        if (isLogical) {
+            invertBuffer(temp, 0, outputSize);
+        }
+      
+        System.arraycopy(temp, 0, dest, destStart, outputSize);
+      
+        return outputSize;
+    }
+}
diff --git a/src/com/ibm/text/ArabicShapingException.java b/src/com/ibm/text/ArabicShapingException.java
new file mode 100755
index 0000000..236ca1c
--- /dev/null
+++ b/src/com/ibm/text/ArabicShapingException.java
@@ -0,0 +1,17 @@
+/*
+*******************************************************************************
+*   Copyright (C) 2001, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+/**
+ * Thrown by ArabicShaping when there is a shaping error.
+ */
+public final class ArabicShapingException extends Exception {
+    ArabicShapingException(String message) {
+        super(message);
+    }
+}
diff --git a/src/com/ibm/text/BreakDictionary.java b/src/com/ibm/text/BreakDictionary.java
new file mode 100755
index 0000000..ef4f3f4
--- /dev/null
+++ b/src/com/ibm/text/BreakDictionary.java
@@ -0,0 +1,307 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/BreakDictionary.java,v $ 
+ * $Date: 2000/09/25 21:33:43 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.io.InputStream;
+import java.io.DataInputStream;
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.io.FileInputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.FileOutputStream;
+
+import com.ibm.util.CompactByteArray;
+
+/**
+ * This is the class that represents the list of known words used by
+ * DictionaryBasedBreakIterator.  The conceptual data structure used
+ * here is a trie: there is a node hanging off the root node for every
+ * letter that can start a word.  Each of these nodes has a node hanging
+ * off of it for every letter that can be the second letter of a word
+ * if this node is the first letter, and so on.  The trie is represented
+ * as a two-dimensional array that can be treated as a table of state
+ * transitions.  Indexes are used to compress this array, taking
+ * advantage of the fact that this array will always be very sparse.
+ */
+public class BreakDictionary {
+    //=================================================================================
+    // testing and debugging
+    //=================================================================================
+    public static void main(String args[])
+            throws FileNotFoundException, UnsupportedEncodingException, IOException {
+        String filename = args[0];
+
+        BreakDictionary dictionary = new BreakDictionary(new FileInputStream(filename));
+
+        PrintWriter out = null;
+        
+        if(args.length >= 2) {
+            out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(args[1]), "UnicodeLittle"));
+        }
+        
+        dictionary.printWordList("", 0, out);
+        
+        if (out != null) {
+            out.close();
+        }
+    }
+
+    public void printWordList(String partialWord, int state, PrintWriter out)
+            throws IOException {
+        if (state == 0xFFFF) {
+            System.out.println(partialWord);
+            if (out != null) {
+                out.println(partialWord);
+            }
+        }
+        else {
+            for (int i = 0; i < numCols; i++) {
+                int newState = (at(state, i)) & 0xFFFF;
+                
+                if (newState != 0) {
+                    char newChar = reverseColumnMap[i];
+                    String newPartialWord = partialWord;
+                    
+                    if (newChar != 0) {
+                        newPartialWord += newChar;
+                    }
+                    
+                    printWordList(newPartialWord, newState, out);
+                }
+            }
+        }
+    }
+
+    /**
+     * A map used to go from column numbers to characters.  Used only
+     * for debugging right now.
+     */
+    private char[] reverseColumnMap = null;
+
+    //=================================================================================
+    // data members
+    //=================================================================================
+
+    /**
+     * Maps from characters to column numbers.  The main use of this is to
+     * avoid making room in the array for empty columns.
+     */
+    private CompactByteArray columnMap = null;
+
+    /**
+     * The number of actual columns in the table
+     */
+    private int numCols;
+
+    /**
+     * Columns are organized into groups of 32.  This says how many
+     * column groups.  (We could calculate this, but we store the
+     * value to avoid having to repeatedly calculate it.)
+     */
+    private int numColGroups;
+
+    /**
+     * The actual compressed state table.  Each conceptual row represents
+     * a state, and the cells in it contain the row numbers of the states
+     * to transition to for each possible letter.  0 is used to indicate
+     * an illegal combination of letters (i.e., the error state).  The
+     * table is compressed by eliminating all the unpopulated (i.e., zero)
+     * cells.  Multiple conceptual rows can then be doubled up in a single
+     * physical row by sliding them up and possibly shifting them to one
+     * side or the other so the populated cells don't collide.  Indexes
+     * are used to identify unpopulated cells and to locate populated cells.
+     */
+    private short[] table = null;
+
+    /**
+     * This index maps logical row numbers to physical row numbers
+     */
+    private short[] rowIndex = null;
+
+    /**
+     * A bitmap is used to tell which cells in the comceptual table are
+     * populated.  This array contains all the unique bit combinations
+     * in that bitmap.  If the table is more than 32 columns wide,
+     * successive entries in this array are used for a single row.
+     */
+    private int[] rowIndexFlags = null;
+
+    /**
+     * This index maps from a logical row number into the bitmap table above.
+     * (This keeps us from storing duplicate bitmap combinations.)  Since there
+     * are a lot of rows with only one populated cell, instead of wasting space
+     * in the bitmap table, we just store a negative number in this index for
+     * rows with one populated cell.  The absolute value of that number is
+     * the column number of the populated cell.
+     */
+    private short[] rowIndexFlagsIndex = null;
+
+    /**
+     * For each logical row, this index contains a constant that is added to
+     * the logical column number to get the physical column number
+     */
+    private byte[] rowIndexShifts = null;
+
+    //=================================================================================
+    // deserialization
+    //=================================================================================
+
+    public BreakDictionary(InputStream dictionaryStream) throws IOException {
+        readDictionaryFile(new DataInputStream(dictionaryStream));
+    }
+
+    public void readDictionaryFile(DataInputStream in) throws IOException {
+        int l;
+
+        // read in the version number (right now we just ignore it)
+        in.readInt();
+        
+        // read in the column map (this is serialized in its internal form:
+        // an index array followed by a data array)
+        l = in.readInt();
+        char[] temp = new char[l];
+        for (int i = 0; i < temp.length; i++)
+            temp[i] = (char)in.readShort();
+        l = in.readInt();
+        byte[] temp2 = new byte[l];
+        for (int i = 0; i < temp2.length; i++)
+            temp2[i] = in.readByte();
+        columnMap = new CompactByteArray(temp, temp2);
+
+        // read in numCols and numColGroups
+        numCols = in.readInt();
+        numColGroups = in.readInt();
+
+        // read in the row-number index
+        l = in.readInt();
+        rowIndex = new short[l];
+        for (int i = 0; i < rowIndex.length; i++)
+            rowIndex[i] = in.readShort();
+
+        // load in the populated-cells bitmap: index first, then bitmap list
+        l = in.readInt();
+        rowIndexFlagsIndex = new short[l];
+        for (int i = 0; i < rowIndexFlagsIndex.length; i++)
+            rowIndexFlagsIndex[i] = in.readShort();
+        l = in.readInt();
+        rowIndexFlags = new int[l];
+        for (int i = 0; i < rowIndexFlags.length; i++)
+            rowIndexFlags[i] = in.readInt();
+
+        // load in the row-shift index
+        l = in.readInt();
+        rowIndexShifts = new byte[l];
+        for (int i = 0; i < rowIndexShifts.length; i++)
+            rowIndexShifts[i] = in.readByte();
+
+        // finally, load in the actual state table
+        l = in.readInt();
+        table = new short[l];
+        for (int i = 0; i < table.length; i++)
+            table[i] = in.readShort();
+
+        // this data structure is only necessary for testing and debugging purposes
+        reverseColumnMap = new char[numCols];
+        for (char c = 0; c < 0xffff; c++) {
+            int col = columnMap.elementAt(c);
+            if (col != 0) {
+               reverseColumnMap[col] = c;
+            }
+        }
+
+        // close the stream
+        in.close();
+    }
+
+    //=================================================================================
+    // access to the words
+    //=================================================================================
+
+    /**
+     * Uses the column map to map the character to a column number, then
+     * passes the row and column number to the other version of at()
+     * @param row The current state
+     * @param ch The character whose column we're interested in
+     * @return The new state to transition to
+     */
+    public final short at(int row, char ch) {
+        int col = columnMap.elementAt(ch);
+        return at(row, col);
+    }
+
+    /**
+     * Returns the value in the cell with the specified (logical) row and
+     * column numbers.  In DictionaryBasedBreakIterator, the row number is
+     * a state number, the column number is an input, and the return value
+     * is the row number of the new state to transition to.  (0 is the
+     * "error" state, and -1 is the "end of word" state in a dictionary)
+     * @param row The row number of the current state
+     * @param col The column number of the input character (0 means "not a
+     * dictionary character")
+     * @return The row number of the new state to transition to
+     */
+    public final short at(int row, int col) {
+        if (cellIsPopulated(row, col)) {
+            // we map from logical to physical row number by looking up the
+            // mapping in rowIndex; we map from logical column number to
+            // physical column number by looking up a shift value for this
+            // logical row and offsetting the logical column number by
+            // the shift amount.  Then we can use internalAt() to actually
+            // get the value out of the table.
+            return internalAt(rowIndex[row], col + rowIndexShifts[row]);
+        }
+        else {
+            return 0;
+        }
+    }
+
+    /**
+     * Given (logical) row and column numbers, returns true if the
+     * cell in that position is populated
+     */
+    private final boolean cellIsPopulated(int row, int col) {
+        // look up the entry in the bitmap index for the specified row.
+        // If it's a negative number, it's the column number of the only
+        // populated cell in the row
+        if (rowIndexFlagsIndex[row] < 0) {
+            return col == -rowIndexFlagsIndex[row];
+        }
+
+        // if it's a positive number, it's the offset of an entry in the bitmap
+        // list.  If the table is more than 32 columns wide, the bitmap is stored
+        // successive entries in the bitmap list, so we have to divide the column
+        // number by 32 and offset the number we got out of the index by the result.
+        // Once we have the appropriate piece of the bitmap, test the appropriate
+        // bit and return the result.
+        else {
+            int flags = rowIndexFlags[rowIndexFlagsIndex[row] + (col >> 5)];
+            return (flags & (1 << (col & 0x1f))) != 0;
+        }
+    }
+
+    /**
+     * Implementation of at() when we know the specified cell is populated.
+     * @param row The PHYSICAL row number of the cell
+     * @param col The PHYSICAL column number of the cell
+     * @return The value stored in the cell
+     */
+    private final short internalAt(int row, int col) {
+        // the table is a one-dimensional array, so this just does the math necessary
+        // to treat it as a two-dimensional array (we don't just use a two-dimensional
+        // array because two-dimensional arrays are inefficient in Java)
+        return table[row * numCols + col];
+    }
+}
+
diff --git a/src/com/ibm/text/BreakIterator.java b/src/com/ibm/text/BreakIterator.java
new file mode 100755
index 0000000..4699af7
--- /dev/null
+++ b/src/com/ibm/text/BreakIterator.java
@@ -0,0 +1,599 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/BreakIterator.java,v $ 
+ * $Date: 2000/03/10 04:07:18 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.Vector;
+import java.util.Locale;
+import java.util.ResourceBundle;                                    //ibm.597
+import java.util.MissingResourceException;                          //ibm.597
+import java.text.resources.LocaleData;                              //ibm.597
+import java.text.CharacterIterator;                                 //ibm.597
+import java.text.StringCharacterIterator;                           //ibm.597
+
+import java.net.URL;                                                //ibm.597
+import java.io.InputStream;                                         //ibm.597
+import java.io.IOException;                                         //ibm.597
+
+import java.lang.ref.SoftReference;                                 //ibm.597
+
+/**
+ * A class that locates boundaries in text.  This class defines a protocol for
+ * objects that break up a piece of natural-language text according to a set
+ * of criteria.  Instances or subclasses of BreakIterator can be provided, for
+ * example, to break a piece of text into words, sentences, or logical characters
+ * according to the conventions of some language or group of languages.
+ *
+ * We provide four built-in types of BreakIterator:
+ * <ul><li>getSentenceInstance() returns a BreakIterator that locates boundaries
+ * between sentences.  This is useful for triple-click selection, for example.
+ * <li>getWordInstance() returns a BreakIterator that locates boundaries between
+ * words.  This is useful for double-click selection or "find whole words" searches.
+ * This type of BreakIterator makes sure there is a boundary position at the
+ * beginning and end of each legal word.  (Numbers count as words, too.)  Whitespace
+ * and punctuation are kept separate from real words.
+ * <li>getLineInstance() returns a BreakIterator that locates positions where it is
+ * legal for a text editor to wrap lines.  This is similar to word breaking, but
+ * not the same: punctuation and whitespace are generally kept with words (you don't
+ * want a line to start with whitespace, for example), and some special characters
+ * can force a position to be considered a line-break position or prevent a position
+ * from being a line-break position.
+ * <li>getCharacterInstance() returns a BreakIterator that locates boundaries between
+ * logical characters.  Because of the structure of the Unicode encoding, a logical
+ * character may be stored internally as more than one Unicode code point.  (A with an
+ * umlaut may be stored as an a followed by a separate combining umlaut character,
+ * for example, but the user still thinks of it as one character.)  This iterator allows
+ * various processes (especially text editors) to treat as characters the units of text
+ * that a user would think of as characters, rather than the units of text that the
+ * computer sees as "characters".</ul>
+ *
+ * BreakIterator's interface follows an "iterator" model (hence the name), meaning it
+ * has a concept of a "current position" and methods like first(), last(), next(),
+ * and previous() that update the current position.  All BreakIterators uphold the
+ * following invariants:
+ * <ul><li>The beginning and end of the text are always treated as boundary positions.
+ * <li>The current position of the iterator is always a boundary position (random-
+ * access methods move the iterator to the nearest boundary position before or
+ * after the specified position, not _to_ the specified position).
+ * <li>DONE is used as a flag to indicate when iteration has stopped.  DONE is only
+ * returned when the current position is the end of the text and the user calls next(),
+ * or when the current position is the beginning of the text and the user calls
+ * previous().
+ * <li>Break positions are numbered by the positions of the characters that follow
+ * them.  Thus, under normal circumstances, the position before the first character
+ * is 0, the position after the first character is 1, and the position after the
+ * last character is 1 plus the length of the string.
+ * <li>The client can change the position of an iterator, or the text it analyzes,
+ * at will, but cannot change the behavior.  If the user wants different behavior, he
+ * must instantiate a new iterator.</ul>
+ *
+ * BreakIterator accesses the text it analyzes through a CharacterIterator, which makes
+ * it possible to use BreakIterator to analyze text in any text-storage vehicle that
+ * provides a CharacterIterator interface.
+ *
+ * <b>NOTE:</b>  Some types of BreakIterator can take a long time to create, and
+ * instances of BreakIterator are not currently cached by the system.  For
+ * optimal performance, keep instances of BreakIterator around as long as makes
+ * sense.  For example, when word-wrapping a document, don't create and destroy a
+ * new BreakIterator for each line.  Create one break iterator for the whole document
+ * (or whatever stretch of text you're wrapping) and use it to do the whole job of
+ * wrapping the text.
+ *
+  * <P>
+ * <strong>Examples</strong>:<P>
+ * Creating and using text boundaries
+ * <blockquote>
+ * <pre>
+ * public static void main(String args[]) {
+ *      if (args.length == 1) {
+ *          String stringToExamine = args[0];
+ *          //print each word in order
+ *          BreakIterator boundary = BreakIterator.getWordInstance();
+ *          boundary.setText(stringToExamine);
+ *          printEachForward(boundary, stringToExamine);
+ *          //print each sentence in reverse order
+ *          boundary = BreakIterator.getSentenceInstance(Locale.US);
+ *          boundary.setText(stringToExamine);
+ *          printEachBackward(boundary, stringToExamine);
+ *          printFirst(boundary, stringToExamine);
+ *          printLast(boundary, stringToExamine);
+ *      }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print each element in order
+ * <blockquote>
+ * <pre>
+ * public static void printEachForward(BreakIterator boundary, String source) {
+ *     int start = boundary.first();
+ *     for (int end = boundary.next();
+ *          end != BreakIterator.DONE;
+ *          start = end, end = boundary.next()) {
+ *          System.out.println(source.substring(start,end));
+ *     }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print each element in reverse order
+ * <blockquote>
+ * <pre>
+ * public static void printEachBackward(BreakIterator boundary, String source) {
+ *     int end = boundary.last();
+ *     for (int start = boundary.previous();
+ *          start != BreakIterator.DONE;
+ *          end = start, start = boundary.previous()) {
+ *         System.out.println(source.substring(start,end));
+ *     }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print first element
+ * <blockquote>
+ * <pre>
+ * public static void printFirst(BreakIterator boundary, String source) {
+ *     int start = boundary.first();
+ *     int end = boundary.next();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print last element
+ * <blockquote>
+ * <pre>
+ * public static void printLast(BreakIterator boundary, String source) {
+ *     int end = boundary.last();
+ *     int start = boundary.previous();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print the element at a specified position
+ * <blockquote>
+ * <pre>
+ * public static void printAt(BreakIterator boundary, int pos, String source) {
+ *     int end = boundary.following(pos);
+ *     int start = boundary.previous();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Find the next word
+ * <blockquote>
+ * <pre>
+ * public static int nextWordStartAfter(int pos, String text) {
+ *     BreakIterator wb = BreakIterator.getWordInstance();
+ *     wb.setText(text);
+ *     int last = wb.following(pos);
+ *     int current = wb.next();
+ *     while (current != BreakIterator.DONE) {
+ *         for (int p = last; p < current; p++) {
+ *             if (Character.isLetter(text.charAt(p))
+ *                 return last;
+ *         }
+ *         last = current;
+ *         current = wb.next();
+ *     }
+ *     return BreakIterator.DONE;
+ * }
+ * </pre>
+ * (The iterator returned by BreakIterator.getWordInstance() is unique in that
+ * the break positions it returns don't represent both the start and end of the
+ * thing being iterated over.  That is, a sentence-break iterator returns breaks
+ * that each represent the end of one sentence and the beginning of the next.
+ * With the word-break iterator, the characters between two boundaries might be a
+ * word, or they might be the punctuation or whitespace between two words.  The
+ * above code uses a simple heuristic to determine which boundary is the beginning
+ * of a word: If the characters between this boundary and the next boundary
+ * include at least one letter (this can be an alphabetical letter, a CJK ideograph,
+ * a Hangul syllable, a Kana character, etc.), then the text between this boundary
+ * and the next is a word; otherwise, it's the material between words.)
+ * </blockquote>
+ *
+ * @see CharacterIterator
+ *
+ */
+
+public abstract class BreakIterator implements Cloneable
+{
+    /**
+     * Default constructor.  There is no state that is carried by this abstract
+     * base class.
+     */
+    protected BreakIterator()
+    {
+    }
+
+    /**
+     * Clone method.  Creates another BreakIterator with the same behavior and
+     * current state as this one.
+     * @return The clone.
+     */
+    public Object clone()
+    {
+        try {
+            return super.clone();
+        }
+        catch (CloneNotSupportedException e) {
+            throw new InternalError();
+        }
+    }
+
+    /**
+     * DONE is returned by previous() and next() after all valid
+     * boundaries have been returned.
+     */
+    public static final int DONE = -1;
+
+    /**
+     * Return the first boundary position.  This is always the beginning
+     * index of the text this iterator iterates over.  For example, if
+     * the iterator iterates over a whole string, this function will
+     * always return 0.  This function also updates the iteration position
+     * to point to the beginning of the text.
+     * @return The character offset of the beginning of the stretch of text
+     * being broken.
+     */
+    public abstract int first();
+
+    /**
+     * Return the last boundary position.  This is always the "past-the-end"
+     * index of the text this iterator iterates over.  For example, if the
+     * iterator iterates over a whole string (call it "text"), this function
+     * will always return text.length().  This function also updated the
+     * iteration position to point to the end of the text.
+     * @return The character offset of the end of the stretch of text
+     * being broken.
+     */
+    public abstract int last();
+
+    /**
+     * Advances the specified number of steps forward in the text (a negative
+     * number, therefore, advances backwards).  If this causes the iterator
+     * to advance off either end of the text, this function returns DONE;
+     * otherwise, this function returns the position of the appropriate
+     * boundary.  Calling this function is equivalent to calling next() or
+     * previous() n times.
+     * @param n The number of boundaries to advance over (if positive, moves
+     * forward; if negative, moves backwards).
+     * @return The position of the boundary n boundaries from the current
+     * iteration position, or DONE if moving n boundaries causes the iterator
+     * to advance off either end of the text.
+     */
+    public abstract int next(int n);
+
+    /**
+     * Advances the iterator forward one boundary.  The current iteration
+     * position is updated to point to the next boundary position after the
+     * current position, and this is also the value that is returned.  If
+     * the current position is equal to the value returned by last(), or to
+     * DONE, this function returns DONE and sets the current position to
+     * DONE.
+     * @return The position of the first boundary position following the
+     * iteration position.
+     */
+    public abstract int next();
+
+    /**
+     * Advances the iterator backward one boundary.  The current iteration
+     * position is updated to point to the last boundary position before
+     * the current position, and this is also the value that is returned.  If
+     * the current position is equal to the value returned by first(), or to
+     * DONE, this function returns DONE and sets the current position to
+     * DONE.
+     * @return The position of the last boundary position preceding the
+     * iteration position.
+     */
+    public abstract int previous();
+
+    /**
+     * Sets the iterator's current iteration position to be the first
+     * boundary position following the specified position.  (Whether the
+     * specified position is itself a boundary position or not doesn't
+     * matter-- this function always moves the iteration position to the
+     * first boundary after the specified position.)  If the specified
+     * position is the past-the-end position, returns DONE.
+     * @param offset The character position to start searching from.
+     * @return The position of the first boundary position following
+     * "offset" (whether or not "offset" itself is a boundary position),
+     * or DONE if "offset" is the past-the-end offset.
+     */
+    public abstract int following(int offset);
+
+    /**
+     * Sets the iterator's current iteration position to be the last
+     * boundary position preceding the specified position.  (Whether the
+     * specified position is itself a boundary position or not doesn't
+     * matter-- this function always moves the iteration position to the
+     * last boundary before the specified position.)  If the specified
+     * position is the starting position, returns DONE.
+     * @param offset The character position to start searching from.
+     * @return The position of the last boundary position preceding
+     * "offset" (whether of not "offset" itself is a boundary position),
+     * or DONE if "offset" is the starting offset of the iterator.
+     */
+    public int preceding(int offset) {
+        // NOTE:  This implementation is here solely because we can't add new
+        // abstract methods to an existing class.  There is almost ALWAYS a
+        // better, faster way to do this.
+        int pos = following(offset);
+        while (pos >= offset && pos != DONE)
+            pos = previous();
+        return pos;
+    }
+
+    /**
+     * Return true if the specfied position is a boundary position.  If the
+     * function returns true, the current iteration position is set to the
+     * specified position; if the function returns false, the current
+     * iteration position is set as though following() had been called.
+     * @param offset the offset to check.
+     * @return True if "offset" is a boundary position.
+     */
+    public boolean isBoundary(int offset) {
+        // Again, this is the default implementation, which is provided solely because
+        // we couldn't add a new abstract method to an existing class.  The real
+        // implementations will usually need to do a little more work.
+        if (offset == 0) {
+            return true;
+        }
+        else
+            return following(offset - 1) == offset;
+    }
+
+    /**
+     * Return the iterator's current position.
+     * @return The iterator's current position.
+     */
+    public abstract int current();
+
+    /**
+     * Returns a CharacterIterator over the text being analyzed.
+     * For at least some subclasses of BreakIterator, this is a reference
+     * to the <b>actual iterator being used</b> by the BreakIterator,
+     * and therefore, this function's return value should be treated as
+     * <tt>const</tt>.  No guarantees are made about the current position
+     * of this iterator when it is returned.  If you need to move that
+     * position to examine the text, clone this function's return value first.
+     * @return A CharacterIterator over the text being analyzed.
+     */
+    public abstract CharacterIterator getText();
+
+    /**
+     * Sets the iterator to analyze a new piece of text.  The new
+     * piece of text is passed in as a String, and the current
+     * iteration position is reset to the beginning of the string.
+     * (The old text is dropped.)
+     * @param newText A String containing the text to analyze with
+     * this BreakIterator.
+     */
+    public void setText(String newText)
+    {
+        setText(new StringCharacterIterator(newText));
+    }
+
+    /**
+     * Sets the iterator to analyze a new piece of text.  The
+     * BreakIterator is passed a CharacterIterator through which
+     * it will access the text itself.  The current iteration
+     * position is reset to the CharacterIterator's start index.
+     * (The old iterator is dropped.)
+     * @param newText A CharacterIterator referring to the text
+     * to analyze with this BreakIterator (the iterator's current
+     * position is ignored, but its other state is significant).
+     */
+    public abstract void setText(CharacterIterator newText);
+
+    private static final int CHARACTER_INDEX = 0;                   //ibm.597
+    private static final int WORD_INDEX = 1;                        //ibm.597
+    private static final int LINE_INDEX = 2;                        //ibm.597
+    private static final int SENTENCE_INDEX = 3;                    //ibm.597
+    private static final SoftReference[] iterCache = new SoftReference[4];  //ibm.597
+
+    /**
+     * Returns a new instance of BreakIterator that locates word boundaries.
+     * This function assumes that the text being analyzed is in the default
+     * locale's language.
+     * @return An instance of BreakIterator that locates word boundaries.
+     */
+    public static BreakIterator getWordInstance()
+    {
+        return getWordInstance(Locale.getDefault());
+    }
+
+    /**
+     * Returns a new instance of BreakIterator that locates word boundaries.
+     * @param where A locale specifying the language of the text to be
+     * analyzed.
+     * @return An instance of BreakIterator that locates word boundaries.
+     */
+    public static BreakIterator getWordInstance(Locale where)
+    {
+        return getBreakInstance(where,                              //ibm.597
+                                WORD_INDEX,                         //ibm.597
+                                "WordBreakRules",                   //ibm.597
+                                "WordBreakDictionary");             //ibm.597
+    }
+
+    /**
+     * Returns a new instance of BreakIterator that locates legal line-
+     * wrapping positions.  This function assumes the text being broken
+     * is in the default locale's language.
+     * @returns A new instance of BreakIterator that locates legal
+     * line-wrapping positions.
+     */
+    public static BreakIterator getLineInstance()
+    {
+        return getLineInstance(Locale.getDefault());
+    }
+
+    /**
+     * Returns a new instance of BreakIterator that locates legal line-
+     * wrapping positions.
+     * @param where A Locale specifying the language of the text being broken.
+     * @return A new instance of BreakIterator that locates legal
+     * line-wrapping positions.
+     */
+    public static BreakIterator getLineInstance(Locale where)
+    {
+        return getBreakInstance(where,                              //ibm.597
+                                LINE_INDEX,                         //ibm.597
+                                "LineBreakRules",                   //ibm.597
+                                "LineBreakDictionary");             //ibm.597
+    }
+
+    /**
+     * Returns a new instance of BreakIterator that locates logical-character
+     * boundaries.  This function assumes that the text being analyzed is
+     * in the default locale's language.
+     * @return A new instance of BreakIterator that locates logical-character
+     * boundaries.
+     */
+    public static BreakIterator getCharacterInstance()
+    {
+        return getCharacterInstance(Locale.getDefault());
+    }
+
+    /**
+     * Returns a new instance of BreakIterator that locates logical-character
+     * boundaries.
+     * @param where A Locale specifying the language of the text being analyzed.
+     * @return A new instance of BreakIterator that locates logical-character
+     * boundaries.
+     */
+    public static BreakIterator getCharacterInstance(Locale where)
+    {
+        return getBreakInstance(where,                              //ibm.597
+                                CHARACTER_INDEX,                    //ibm.597
+                                "CharacterBreakRules",              //ibm.597
+                                "CharacterBreakDictionary");        //ibm.597
+    }
+
+    /**
+     * Returns a new instance of BreakIterator that locates sentence boundaries.
+     * This function assumes the text being analyzed is in the default locale's
+     * language.
+     * @return A new instance of BreakIterator that locates sentence boundaries.
+     */
+    public static BreakIterator getSentenceInstance()
+    {
+        return getSentenceInstance(Locale.getDefault());
+    }
+
+    /**
+     * Returns a new instance of BreakIterator that locates sentence boundaries.
+     * @param where A Locale specifying the language of the text being analyzed.
+     * @return A new instance of BreakIterator that locates sentence boundaries.
+     */
+    public static BreakIterator getSentenceInstance(Locale where)
+    {
+        return getBreakInstance(where,                              //ibm.597
+                                SENTENCE_INDEX,                     //ibm.597
+                                "SentenceBreakRules",               //ibm.597
+                                "SentenceBreakDictionary");         //ibm.597
+    }                                                               //ibm.597
+
+    private static BreakIterator getBreakInstance(Locale where,     //ibm.597
+                                                  int type,         //ibm.597
+                                                  String rulesName, //ibm.597
+                                                  String dictionaryName) {  //ibm.597
+
+        if (iterCache[type] != null) {                              //ibm.597
+            BreakIteratorCache cache = (BreakIteratorCache) iterCache[type].get();  //ibm.597
+            if (cache != null) {                                    //ibm.597
+                if (cache.getLocale().equals(where)) {              //ibm.597
+                    return cache.createBreakInstance();             //ibm.597
+                }                                                   //ibm.597
+            }                                                       //ibm.597
+        }                                                           //ibm.597
+
+        BreakIterator result = createBreakInstance(where,           //ibm.597
+                                                   type,            //ibm.597
+                                                   rulesName,       //ibm.597
+                                                   dictionaryName); //ibm.597
+        BreakIteratorCache cache = new BreakIteratorCache(where, result);   //ibm.597
+        iterCache[type] = new SoftReference(cache);                 //ibm.597
+        return result;                                              //ibm.597
+    }                                                               //ibm.597
+
+    private static BreakIterator createBreakInstance(Locale where,  //ibm.597
+                                                     int type,      //ibm.597
+                                                     String rulesName,  //ibm.597
+                                                     String dictionaryName) {   //ibm.597
+
+//		System.out.println("rulesName: "+rulesName);
+//		System.out.println("dictionaryName: "+dictionaryName);
+        ResourceBundle bundle = ResourceBundle.getBundle(           //ibm.597
+                        "com.ibm.text.resources.BreakIteratorRules", where);   //ibm.597
+        String[] classNames = bundle.getStringArray("BreakIteratorClasses");    //ibm.597
+
+        String rules = bundle.getString(rulesName);                 //ibm.597
+        
+        if (classNames[type].equals("RuleBasedBreakIterator")) {    //ibm.597
+            return new RuleBasedBreakIterator(rules);               //ibm.597
+        }                                                           //ibm.597
+        else if (classNames[type].equals("DictionaryBasedBreakIterator")) { //ibm.597
+            try {                                                   //ibm.597
+				// System.out.println(dictionaryName);
+                Object t = bundle.getObject(dictionaryName);   //ibm.597
+				// System.out.println(t);
+                URL url = (URL)t;   //ibm.597
+                InputStream dictionary = url.openStream();          //ibm.597
+                return new DictionaryBasedBreakIterator(rules, dictionary); //ibm.597
+            }                                                       //ibm.597
+            catch(IOException e) {                                  //ibm.597
+            }                                                       //ibm.597
+            catch(MissingResourceException e) {                     //ibm.597
+            }                                                       //ibm.597
+            return new RuleBasedBreakIterator(rules);               //ibm.597
+        }                                                           //ibm.597
+        else                                                        //ibm.597
+            throw new IllegalArgumentException("Invalid break iterator class \"" +  //ibm.597
+                            classNames[type] + "\"");               //ibm.597
+    }
+
+    /**
+     * Returns a list of locales for which BreakIterators can be used.
+     * @return An array of Locales.  All of the locales in the array can
+     * be used when creating a BreakIterator.
+     */
+    public static synchronized Locale[] getAvailableLocales()
+    {
+        //FIX ME - this is a known bug.  It should return
+        //all locales.
+        return LocaleData.getAvailableLocales("NumberPatterns");
+    }
+
+    private static final class BreakIteratorCache {                 //ibm.597
+
+        private BreakIterator iter;                                 //ibm.597
+        private Locale where;                                       //ibm.597
+
+        BreakIteratorCache(Locale where, BreakIterator iter) {      //ibm.597
+            this.where = where;                                     //ibm.597
+            this.iter = (BreakIterator) iter.clone();               //ibm.597
+        }                                                           //ibm.597
+
+        Locale getLocale() {                                        //ibm.597
+            return where;                                           //ibm.597
+        }                                                           //ibm.597
+
+        BreakIterator createBreakInstance() {                       //ibm.597
+            return (BreakIterator) iter.clone();                    //ibm.597
+        }                                                           //ibm.597
+    }                                                               //ibm.597
+}
diff --git a/src/com/ibm/text/ChineseDateFormat.java b/src/com/ibm/text/ChineseDateFormat.java
new file mode 100755
index 0000000..d3398c9
--- /dev/null
+++ b/src/com/ibm/text/ChineseDateFormat.java
@@ -0,0 +1,126 @@
+/*********************************************************************
+ * Copyright (C) 2000, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *********************************************************************
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/ChineseDateFormat.java,v $
+ * $Date: 2000/11/21 20:19:08 $
+ * $Revision: 1.3 $
+ */
+package com.ibm.text;
+import com.ibm.util.*;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Locale;
+
+/**
+ * A concrete {@link DateFormat} for {@link com.ibm.util.ChineseCalendar}.
+ * This class handles a <code>ChineseCalendar</code>-specific field,
+ * <code>ChineseCalendar.IS_LEAP_MONTH</code>.  It also redefines the
+ * handling of two fields, <code>ERA</code> and <code>YEAR</code>.  The
+ * former is displayed numerically, instead of symbolically, since it is
+ * the numeric cycle number in <code>ChineseCalendar</code>.  The latter is
+ * numeric, as before, but has no special 2-digit Y2K behavior.
+ *
+ * <p>With regard to <code>ChineseCalendar.IS_LEAP_MONTH</code>, this
+ * class handles parsing specially.  If no string symbol is found at all,
+ * this is taken as equivalent to an <code>IS_LEAP_MONTH</code> value of
+ * zero.  This allows formats to display a special string (e.g., "*") for
+ * leap months, but no string for normal months.
+ *
+ * <p>Summary of field changes vs. {@link SimpleDateFormat}:<pre>
+ * Symbol   Meaning                 Presentation        Example
+ * ------   -------                 ------------        -------
+ * G        cycle                   (Number)            78
+ * y        year of cycle (1..60)   (Number)            17
+ * l        is leap month           (Text)              4637
+ * </pre>
+ *
+ * @see com.ibm.util.ChineseCalendar
+ * @see ChineseDateFormatSymbols
+ * @author Alan Liu
+ */
+public class ChineseDateFormat extends SimpleDateFormat {
+
+    // TODO Finish the constructors
+
+    public ChineseDateFormat(String pattern, Locale locale) {
+        super(pattern, new ChineseDateFormatSymbols(locale));
+    }
+
+    protected String subFormat(char ch, int count, int beginOffset,
+                               FieldPosition pos, DateFormatSymbols formatData)  {
+        switch (ch) {
+        case 'G': // 'G' - ERA
+            return zeroPaddingNumber(calendar.get(Calendar.ERA), 1, 9);
+        case 'l': // 'l' - IS_LEAP_MONTH
+            {
+                ChineseDateFormatSymbols symbols =
+                    (ChineseDateFormatSymbols) formatData;
+                return symbols.getLeapMonth(calendar.get(
+                               ChineseCalendar.IS_LEAP_MONTH));
+            }
+        default:
+            return super.subFormat(ch, count, beginOffset, pos, formatData);
+        }
+    }    
+
+    protected int subParse(String text, int start, char ch, int count,
+                           boolean obeyCount, boolean[] ambiguousYear) {
+        if (ch != 'G' && ch != 'l' && ch != 'y') {
+            return super.subParse(text, start, ch, count, obeyCount, ambiguousYear);
+        }
+
+        ParsePosition pos = new ParsePosition(start);
+
+        // If there are any spaces here, skip over them.  If we hit the end
+        // of the string, then fail.
+        for (;;) {
+            if (pos.getIndex() >= text.length()) {
+                return -start;
+            }
+            char c = text.charAt(pos.getIndex());
+            if (c != ' ' && c != '\t') { // TODO Shouldn't this be isWhitespace?
+                break;
+            }
+            pos.setIndex(pos.getIndex()+1);
+        }
+
+        switch (ch) {
+        case 'G': // 'G' - ERA
+        case 'y': // 'y' - YEAR, but without the 2-digit Y2K adjustment
+            {
+                Number number = null;
+                if (obeyCount) {
+                    if ((start+count) > text.length()) {
+                        return -start;
+                    }
+                    number = numberFormat.parse(text.substring(0, start+count), pos);
+                } else {
+                    number = numberFormat.parse(text, pos);
+                }
+                if (number == null) {
+                    return -start;
+                }
+                int value = number.intValue();
+                calendar.set(ch == 'G' ? Calendar.ERA : Calendar.YEAR, value);
+                return pos.getIndex();
+            }
+        case 'l': // 'l' - IS_LEAP_MONTH
+            {
+                ChineseDateFormatSymbols symbols =
+                    (ChineseDateFormatSymbols) getSymbols();
+                int result = matchString(text, start, ChineseCalendar.IS_LEAP_MONTH,
+                                         symbols.isLeapMonth);
+                // Treat the absence of any matching string as setting
+                // IS_LEAP_MONTH to false.
+                if (result<0) {
+                    calendar.set(ChineseCalendar.IS_LEAP_MONTH, 0);
+                    result = start;
+                }
+                return result;
+            }
+        default:
+            return 0; // This can never happen
+        }
+    }
+}
diff --git a/src/com/ibm/text/ChineseDateFormatSymbols.java b/src/com/ibm/text/ChineseDateFormatSymbols.java
new file mode 100755
index 0000000..dde56f4
--- /dev/null
+++ b/src/com/ibm/text/ChineseDateFormatSymbols.java
@@ -0,0 +1,60 @@
+/*********************************************************************
+ * Copyright (C) 2000, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *********************************************************************
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/ChineseDateFormatSymbols.java,v $
+ * $Date: 2000/11/21 20:19:08 $
+ * $Revision: 1.1 $
+ */
+package com.ibm.text;
+import com.ibm.util.*;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.MissingResourceException;
+
+/**
+ * A subclass of {@link DateFormatSymbols} for {@link ChineseDateFormat}.
+ * This class contains additional symbols corresponding to the
+ * <code>ChineseCalendar.IS_LEAP_MONTH</code> field.
+ *
+ * @see ChineseDateFormat
+ * @see com.ibm.util.ChineseCalendar
+ * @author Alan Liu
+ */
+public class ChineseDateFormatSymbols extends DateFormatSymbols {
+    
+    /**
+     * Package-private array that ChineseDateFormat needs to be able to
+     * read.
+     */
+    String isLeapMonth[]; // Do NOT add =null initializer
+
+    public ChineseDateFormatSymbols() {
+        this(Locale.getDefault());
+    }
+
+    public ChineseDateFormatSymbols(Locale locale) {
+        super(ChineseCalendar.class, locale);
+    }
+
+    public ChineseDateFormatSymbols(Calendar cal, Locale locale) {
+        super(cal==null?null:cal.getClass(), locale);
+    }
+
+    // New API
+    public String getLeapMonth(int isLeapMonth) {
+        return this.isLeapMonth[isLeapMonth];
+    }
+
+    /**
+     * Override DateFormatSymbols.
+     */
+    protected void constructCalendarSpecific(ResourceBundle bundle) {
+        super.constructCalendarSpecific(bundle);
+        if (bundle != null) {
+            try {
+                isLeapMonth = bundle.getStringArray("IsLeapMonth");
+            } catch (MissingResourceException e) {}
+        }
+    }
+}
diff --git a/src/com/ibm/text/ComposeData.java b/src/com/ibm/text/ComposeData.java
new file mode 100755
index 0000000..6ebb062
--- /dev/null
+++ b/src/com/ibm/text/ComposeData.java
@@ -0,0 +1,1459 @@
+/*
+************************************************************************
+*   Copyright (c) 1997-2000, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+************************************************************************
+* > THIS FILE WAS MACHINE GENERATED <
+* >       DO NOT EDIT BY HAND       <
+* >      RUN TOOL TO REGENERATE     <
+* Tool: com.ibm.text.Normalizer
+* Creation date: Fri Jul 21 13:41:45 PDT 2000
+*/
+
+package com.ibm.text;
+import com.ibm.util.*;
+
+class ComposeData {
+    static final short BASE_COUNT = 748;
+    static final short COMBINING_COUNT = 55;
+    static final int MAX_COMPAT = 4341;
+    static final int MAX_CANONICAL = 5199;
+    static final char MAX_COMPOSED = 0xfb1d;
+    static final int MAX_INDEX = 8982;
+    static final int INITIAL_JAMO_INDEX = 8983;
+    static final int MEDIAL_JAMO_INDEX = 8984;
+    static final int MAX_BASES = 1024;
+    static final int MAX_COMBINE = 64;
+    static final int TYPE_MASK = 0x7;
+    static final int INDEX_SHIFT = 3;
+    static final int IGNORE = 0;
+    static final int BASE = 1;
+    static final int NON_COMPOSING_COMBINING = 2;
+    static final int COMBINING = 3;
+    static final int INITIAL_JAMO = 4;
+    static final int MEDIAL_JAMO = 5;
+    static final int FINAL_JAMO = 6;
+    static final int HANGUL = 7;
+
+    static final CompactCharArray lookup = new CompactCharArray(
+        "\000\u0800\000 @`\000\u0080\u00A0\u00C0\u00E0\u0100\u0120\u0140\000\u0160"+
+        "\u0180\u01A0\u01C0\u01E0\000\000\u0200\u0220\u0240\u0260\u0280\u02A0\u02C0"+
+        "\u02E0\u0300\u0320\u0340\u0360\u0380\u03A0\u03C0\u03E0\u0400\000\u0420"+
+        "\u0440\uA5A5\004\000\u0460\u0480\u04A0\000\000\u04C0\u04E0\u0500\000\000"+
+        "\u0520\u0540\u0560\u0580\u05A0\uA5A5\016\000\u05C0\u05E0\000\000\u0600"+
+        "\u0620\000\000\u0640\u0660\000\000\u0680\u06A0\000\000\u06C0\u06E0\000"+
+        "\u0700\u0720\u0740\000\000\000\u0760\000\000\u0780\u07A0\000\000\u07C0"+
+        "\u07E0\000\000\000\u0800\000\000\u0820\u0840\000\000\u0860\u0880\000\u08A0"+
+        "\u08C0\u08E0\u0900\u0920\u0940\u0960\000\000\u0980\uA5A5\006\000\u09A0"+
+        "\u09A0\u09A0\u09C0\u09E0\u0A00\u0A20\u0A40\uA5A5.\000\u0A60\uA5A5\006"+
+        "\000\u0A80\uA5A5*\000\u0AA0\u0AC0\u0AE0\u0B00\u0B20\u0B40\u0B60\u0B80"+
+        "\u0BA0\u0BC0\u0BE0\u0C00\u0C20\u0C40\u0C60\u0C80\u0CA0\u0CC0\u0CE0\u0D00"+
+        "\u0D20\u0D40\u0D60\u0D80\u0DA0\u0DC0\u0DE0\u0E00\u0E20\000\u0E40\000\u0E60"+
+        "\u0E80\u0EA0\u0EC0\u0EE0\u0F00\000\000\000\u0F20\uA5A5\011\000\u0F40\u0F60"+
+        "\u0F80\u0FA0\u0FC0\uA5A5L\000\u0FE0\000\000\u1000\u1020\u1040\u1060\u1080"+
+        "\u10A0\u10C0\u10E0\000\u1100\u1120\u1140\u1160\u1180\u11A0\u11C0\u11E0"+
+        "\000\u1200\u1220\u1240\u1260\000\000\000\u1280\u12A0\u12C0\u12E0\u1300"+
+        "\u1320\u1340\u1360\u1380\u13A0\u13C0\u13E0\u1400\u1420\u1440\u1460\uA5A5"+
+        "\u03C0\000\uA5A5\u015D\u1480\u14A0\uA5A5\u010A\000\u14C0\u14E0\u1500\u1520"+
+        "\u1540\u1560\u1580\u15A0\u15C0\u15E0\uA5A5\006\000\u1600\u1620\u1640\u1660"+
+        "\u1680\u16A0\u16C0\u16E0\u1700\u1720\u1740\u1760\u1780\u17A0\u17C0\u17E0"+
+        "\u1800\u1820\u1840\u1860\u1880\u18A0\u18C0\u18E0\000\u1900\u1920\u1940"+
+        "\u1960\u1980\u19A0\u19C0\u19E0\u1A00\u1A20\u1A40\u1A60\u1A80\u1AA0\u1AC0"
+        ,
+        "\000\u1AE0\uA5A5<\000\021\031)\000\0009IQaiqy\u0081\u0089\u0091\u0099"+
+        "\u00A1\u00A9\u00B1\u00B9\u00C1\000\u00C9\u00D1\u00D9\u00E1\u00E9\u00F1"+
+        "\u00F9\u0101\u0109\uA5A5\006\000\u0111\u0119\u0121\u0129\u0131\u0139\u0141"+
+        "\u0149\u0151\u0159\u0161\u0169\u0171\u0179\u0181\u0189\000\u0191\u0199"+
+        "\u01A1\u01A9\u01B1\u01B9\u01C1\u01C9\u01D1\uA5A5\005\000p\uA5A5\007\000"+
+        "\012\000\u0080\uA5A5\004\000\u0090\000\000\u00A8\u00B8\u00C8\u00E0\000"+
+        "\000\u00F0\u0108\u0118\000\u0128\u0148\u0168\000\u01D9\u01E1\u01E9\u01F1"+
+        "\u01F9\u0201\u0209\u0211\u0219\u0221\u0229\u0231\u0239\u0241\u0249\u0251"+
+        "\000\u0259\u0261\u0269\u0271\u0279\u0281\000\u0289\u0291\u0299\u02A1\u02A9"+
+        "\u02B1\000\000\u02B9\u02C1\u02C9\u02D1\u02D9\u02E1\u02E9\u02F1\u02F9\u0301"+
+        "\u0309\u0311\u0319\u0321\u0329\u0331\000\u0339\u0341\u0349\u0351\u0359"+
+        "\u0361\000\u0369\u0371\u0379\u0381\u0389\u0391\000\u0399\u03A1\u03A9\u03B1"+
+        "\u03B9\000\000\u03C1\u03C9\u03D1\u03D9\u03E1\u03E9\u03F1\u03F9\u0401\u0409"+
+        "\000\000\u0411\u0419\u0421\u0429\u0431\u0439\000\000\u0441\u0449\u0451"+
+        "\u0459\u0461\u0469\u0471\u0479\000\000\u0481\u0489\000\000\u0491\u0499"+
+        "\u04A1\u04A9\u04B1\u04B9\000\000\u04C1\000\u0188\u01A0\uA5A5\005\000\u04C9"+
+        "\u04D1\000\000\u04D9\u04E1\u01B8\u01D0\000\000\u04E9\u04F1\000\000\u04F9"+
+        "\u0501\u01E8\000\000\u0509\u0511\u0519\u0521\u0529\u0531\000\000\u0539"+
+        "\u0541\000\000\u0549\u0551\u0559\u0561\u0569\u0571\000\000\u0579\u0581"+
+        "\000\000\u0589\u0591\000\000\u0599\u05A1\u05A9\u05B1\u05B9\u05C1\u05C9"+
+        "\u05D1\u05D9\u05E1\000\000\u05E9\u05F1\u05F9\u0601\u0609\u0611\u0619\u0621"+
+        "\u0629\u0631\u0639\042\u0641\u0649\uA5A5\015\000\u0651\u0659\uA5A5\006"+
+        "\000\u0661\uA5A5\014\000\u0200\u0220\u0240\u0260\u0278\u0290\u02A8\u02C0"+
+        "\u02D8\u0669\u0671\u0679\u0681\u0689\u0691\u0699\u06A1\u06A9\u06B1\u06B9"+
+        "\u06C1\u06C9\u06D1\u06D9\u06E1\000\u06E9\u06F1\u06F9\u0701\uA5A5\004\000"+
+        "\u0709\u0711\u0719\u0721\u0729\u0731\uA5A5\005\000\u02F0\u0308\u0320\u0739"+
+        "\u0741\000\000\u0749\u0751\u0759\u0761\uA5A5\004\000\u0769\u0771\u0779"+
+        "\u0781\u0789\u0791\u0799\u07A1\u07A9\u07B1\u07B9\u07C1\u07C9\u07D1\u07D9"+
+        "\u07E1\u07E9\u07F1\u07F9\u0801\u0809\u0811\u0819\u0821\u0829\u0831\u0839"+
+        "\u0841\000\000\u0849\u0851\uA5A5\006\000\u0859\u0861\u0869\u0871\u0879"+
+        "\u0881\u0889\u0891\u0899\u08A1\u08A9\u08B1\u08B9\u08C1\uA5A5\036\000\u08C9"+
+        "\uA5A5\035\000\u0338\u0348\u01A8\u0358\u0368\u0378\u0388\u0398\u03A8\uA5A5"+
+        "\037\000\u03B8\u03D0\u03E8\u0400\u0418\u0430\000\000\u0448\u0458 \u0468"+
+        "\u0478\uA5A5\033\000\013\023\033#+\u01BB3;CKS[c\u01BB\u01BBk\u01BBs\u01BB"+
+        "{\u0083\u01C3\uA5A5\004\u01CB\u01C3\u008B\uA5A5\005\u01CB\u01D3\u01D3"+
+        "\u0093\u009B\u00A3\u00AB\u00B3\u00BB\uA5A5\004\u01CB\u00C3\u00CB\u01CB"+
+        "\u00D3\u00DB\u01CB\u01CB\uA5A5\004\u01DB\u00E3\uA5A5\004\u01CB\u01BB\u01BB"+
+        "\u01BB\u87B8\u87C8\u00EB\u87D8\u87E8\u00F3\u01BB\u01CB\u01CB\u01CB\u01BB"+
+        "\u01BB\u01BB\u01CB\u01CB\uA5A5\021\000\u01E3\u01E3\u01EB\uA5A5\021\000"+
+        "\u8800\uA5A5\005\000\u0488\000\000\000\u8810\uA5A5\005\000\u00C8\u04A0"+
+        "\000\u8820\uA5A5\011\000\u08D1\000\000\000\u08D9\000\u08E1\000\u08E9\uA5A5"+
+        "\005\000\u08F1\000\u08F9\000\000\000\u0901\000\000\000\u0909\000\000\u0911"+
+        "\000\u0919\000\000\u0921\000\000\000\u0929\000\u0931\000\u0939\uA5A5\005"+
+        "\000\u0941\000\u0949\000\000\000\u0951\000\000\000\u0959\u0961\u0969\000"+
+        "\000\u0971\000\u04C0\u04D02\u04E0\u04F8\u0510\u0520\uA5A5\031\000\u0530"+
+        "\u0540\u0550\uA5A5\023\000\u0979\uA5A5\011\000\u0981\000\000\u0989\000"+
+        "\u0991\u0999\u09A1\u09A9\000\u09B1\000\000\000\u09B9\uA5A5\004\000\u09C1"+
+        "\000\000\000\u09C9\000\000\000\u09D1\000\u09D9\000\000\u09E1\000\000\u09E9"+
+        "\000\u09F1\u09F9\u0A01\u0A09\000\u0A11\000\000\000\u0A19\uA5A5\004\000"+
+        "\u0A21\000\000\000\u0A29\000\000\000\u0A31\000\u0A39\uA5A5\010\000\u0A41"+
+        "\uA5A5\035\000\u0A49\u0A51\uA5A5\015\000\uA5A5\004\u01BB\uA5A51\000\u0A59"+
+        "\u0A61\uA5A5\016\000\u0A69\u0A71\uA5A5\035\000\u0560\uA5A5\011\000\u01CB"+
+        "\uA5A5\004\u01BB\u01CB\u01BB\u01BB\u01BB\u01F3\u01CB\uA5A5\006\u01BB\000"+
+        "\uA5A5\005\u01CB\u01BB\u01BB\u01CB\u01BB\u01BB\u01F3\u01FB\u01BB\u0203"+
+        "\u020B\u0213\u021B\u00FB\u0223\u022B\u0233\u023B\u0243\000\u024B\u0253"+
+        "\u025B\000\u0263\000\u026B\u0273\000\u01BB\uA5A5\024\000\u0A79\uA5A5\010"+
+        "\000\u0A81\u0A89\000\000\000\u0A91\uA5A5 \000\u0A99\000\u0AA1\u027B\u0283"+
+        "\u028B\u0293\u029B\u02A3\u02AB\u02B3\u0103\u010B\u0113\uA5A5\032\000\u02BB"+
+        "\uA5A5\004\000\u0578\u0590\u05A8\u05C0\uA5A5\010\000\u0AA9\uA5A5\020\000"+
+        "\u0AB1\000\000\u0AB9\uA5A5\007\u01BB\000\000\uA5A5\004\u01BB\u01CB\u01BB"+
+        "\000\000\u01BB\u01BB\000\u01CB\u01BB\u01BB\u01CB\uA5A5#\000\u02C3\uA5A5"+
+        "\036\000\u01BB\u01CB\u01BB\u01BB\u01CB\u01BB\u01BB\u01CB\u01CB\u01CB\u01BB"+
+        "\u01CB\u01CB\u01BB\u01CB\u01BB\u01BB\u01BB\u01CB\u01BB\u01CB\u01BB\u01CB"+
+        "\u01BB\u01CB\u01BB\u01BB\uA5A5\035\000\u0AC1\uA5A5\007\000\u0AC9\000\000"+
+        "\u0AD1\uA5A5\010\000\u011B\uA5A5\020\000\u02CB\000\000\000\u01BB\u01CB"+
+        "\u01BB\u01BB\000\000\000\u8830\u8848\u8860\u8878\u8890\u88A8\u88C0\u88D8"+
+        "\uA5A5\034\000\u02D3\000\u0123\uA5A5\010\000\u0AD9\uA5A5\005\000\u02CB"+
+        "\uA5A5\011\000\u012B\uA5A5\004\000\u88F0\u8908\000\u8920\uA5A5\023\000"+
+        "\u8938\000\000\u8950\uA5A5\005\000\u02D3\uA5A5\020\000\u02CB\uA5A5\013"+
+        "\000\u8968\u8980\u8998\000\000\u89B0\uA5A5\035\000\u02D3\uA5A5\020\000"+
+        "\u02CB\uA5A5.\000\u02D3\000\u0133\uA5A5\010\000\u0AE1\uA5A5\005\000\u02CB"+
+        "\uA5A5\010\000\u013B\u0143\uA5A5\004\000\u89C8\u89E0\uA5A5\024\000\u0AE9"+
+        "\uA5A5+\000\u014B\uA5A5\007\000\u0AF1\u0AF9\uA5A5\005\000\u02CB\uA5A5"+
+        "\011\000\u0153\uA5A5\016\000\u0B01\uA5A5\006\000\u02CB\uA5A5\007\000\u02DB"+
+        "\u015B\uA5A5(\000\u0B09\000\000\u0163\000\000\000\u0B11\000\000\000\u0B19"+
+        "\000\000\u02CB\uA5A5\007\000\u016B\u0173\uA5A5'\000\u017B\uA5A5\007\000"+
+        "\u0B21\u0B29\uA5A5\005\000\u02CB\uA5A5\011\000\u0183\uA5A5\022\000\u018B"+
+        "\uA5A5\004\000\u0193\uA5A5\011\000\u0B31\u0B39\000\u0B41\000\000\u019B"+
+        "\uA5A5\023\000\u05D8\uA5A5\004\000\u02E3\u02E3\u02CB\uA5A5\015\000\uA5A5"+
+        "\004\u02EB\uA5A5'\000\u05F0\uA5A5\004\000\u02F3\u02F3\uA5A5\016\000\uA5A5"+
+        "\004\u02FB\uA5A5\020\000\u0608\u0620\uA5A5\016\000\u0638\uA5A5\013\000"+
+        "\u01CB\u01CB\uA5A5\033\000\u01CB\000\u01CB\000\u0303\uA5A5\011\000\u89F8"+
+        "\uA5A5\011\000\u8A10\uA5A5\004\000\u8A28\uA5A5\004\000\u8A40\uA5A5\004"+
+        "\000\u8A58\uA5A5\014\000\u8A70\uA5A5\007\000\u030B\u0313\u8A88\u031B\u8AA0"+
+        "\u8AB8\u0648\u8AD0\u0668\uA5A5\004\u0313\000\000\u0313\u8AE8\u01BB\u01BB"+
+        "\u02CB\000\u01BB\u01BB\uA5A5\013\000\u8B00\uA5A5\011\000\u8B18\uA5A5\004"+
+        "\000\u8B30\uA5A5\004\000\u8B48\uA5A5\004\000\u8B60\uA5A5\014\000\u8B78"+
+        "\uA5A5\014\000\u01CB\uA5A5\036\000\u0B49\uA5A5\010\000\u01A3\uA5A5\010"+
+        "\000\u02D3\000\u02CB\uA5A5\006\000\uA5A5 \004\000\uA5A5E\005\000\uA5A5"+
+        "S\006\uA5A5\030\000\u02CB\uA5A5\026\000\u01FB\uA5A5\026\000\u0B51\u0B59"+
+        "\u0B61\u0B69\uA5A5\006\000\u0B71\u0B79\u0B81\u0B89\u0B91\u0B99\000\000"+
+        "\u0BA1\u0BA9\u0BB1\u0BB9\u0BC1\u0BC9\u0BD1\u0BD9\u0BE1\u0BE9\uA5A5\004"+
+        "\000\u0BF1\u0BF9\u0C01\u0C09\u0C11\u0C19\u0C21\u0C29\000\000\u0C31\u0C39"+
+        "\u0C41\u0C49\u0C51\u0C59\u0C61\u0C69\u0C71\u0C79\u0C81\u0C89\u0C91\u0C99"+
+        "\u0CA1\u0CA9\u0CB1\u0CB9\u0CC1\u0CC9\u0CD1\u0CD9\u0CE1\u0CE9\000\000\u0CF1"+
+        "\u0CF9\u0D01\u0D09\u0D11\u0D19\u0D21\u0D29\u0D31\u0D39\u0D41\u0D49\u0D51"+
+        "\u0D59\u0D61\u0D69\uA5A5\004\000\u0D71\u0D79\u0D81\u0D89\u0D91\u0D99\u0DA1"+
+        "\u0DA9\u0DB1\u0DB9\u0DC1\u0DC9\u0DD1\u0DD9\u0DE1\u0DE9\u0DF1\u0DF9\u0E01"+
+        "\u0E09\u0E11\u0E19\u0E21\u0E29\u0E31\u0E39\u0E41\u0E49\u0E51\u0E59\u0E61"+
+        "\u0E69\u0E71\u0E79\u0E81\u0E89\u0E91\u0E99\000\000\u0EA1\u0EA9\u0EB1\u0EB9"+
+        "\u0EC1\u0EC9\u0ED1\u0ED9\uA5A5\006\000\u0EE1\u0EE9\u0EF1\u0EF9\uA5A5\004"+
+        "\000\u0F01\u0F09\u0F11\u0F19\u0688\u06A0\uA5A5\004\000\u0F21\u0F29\u0F31"+
+        "\u0F39\u0F41\u0F49\u0F51\u0F59\u0F61\u0F69\u0F71\u0F79\u0F81\u0F89\u0F91"+
+        "\u0F99\u0FA1\u0FA9\u0FB1\u0FB9\u0FC1\u0FC9\u0FD1\u0FD9\u0FE1\u0FE9\u0FF1"+
+        "\u0FF9\u1001\u1009\u1011\u1019\u1021\u1029\u1031\u1039\u1041\u1049\u1051"+
+        "\u1059\u1061\u1069\u1071\u1079\u1081\u1089\u1091\u1099\u10A1\u10A9\u10B1"+
+        "\u10B9\u10C1\u10C9\u10D1\u10D9\u10E1\u10E9\u10F1\u10F9\u1101\u1109\u1111"+
+        "\u1119\u1121\u1129\u1131\u1139\u1141\u1149\u1151\u1159\u1161\u1169\u1171"+
+        "\u1179\u1181\u1189\u1191\u1199\u11A1\u11A9\u11B1\u11B9\000\000\u11C1\u11C9"+
+        "\u11D1\u11D9\uA5A5\006\000\u11E1\u11E9\u11F1\u11F9\u1201\u1209\u1211\u1219"+
+        "\u1221\u1229\u1231\u1239\u1241\u1249\u1251\u1259\u1261\u1269\uA5A5\006"+
+        "\000\u1271\u1279\uA5A5\006\000\u1281\u1289\u1291\u1299\u12A1\u12A9\u12B1"+
+        "\u12B9\u12C1\u12C9\u12D1\u12D9\u12E1\u12E9\u12F1\u12F9\u1301\u1309\uA5A5"+
+        "\006\000\u1311\u1319\uA5A5\006\000\u1321\u1329\uA5A5\006\000\u1331\u1339"+
+        "\uA5A5\006\000\u1341\u1349\uA5A5\007\000\u1351\uA5A5\006\000\u1359\u1361"+
+        "\u1369\u1371\u1379\u1381\u1389\u1391\u1399\u13A1\u13A9\u13B1\u13B9\u13C1"+
+        "\u13C9\u13D1\u13D9\u8B90\000\u8BA8\u13E1\u8BC0\000\u8BD8\000\u8BF0\000"+
+        "\u8C08\u13E9\u8C20\000\000\u13F1\u13F9\uA5A5\006\000\u1401\u1409\uA5A5"+
+        "\006\000\u1411\u1419\uA5A5\006\000\u1421\u1429\uA5A5\006\000\u1431\u1439"+
+        "\uA5A5\006\000\u1441\u1449\uA5A5\011\000\u1451\000\000\u1459\uA5A5\004"+
+        "\000\u8C38\u1461@\u8C50B\u06B8\u06D0\000\u1469\000\000\u1471\000\000\u8C60"+
+        "\000\u8C78\u1479\u06F0\u0710\u0730\000\000\000\u8C90\uA5A5\007\000\u8CB0"+
+        "\000\u0750\u0770\u0790\000\000\000\u8CC8\uA5A5\007\000\u8CE8\000\u07B0"+
+        "\uA292\u8D00\000\000\000\u1481\000\000\u1489\000\000\u8D10\000\u8D28\u1491"+
+        "\uA2A2Z\000\uA2B2\uA2C2\uA5A5\011p\uA5A5\006\000\u07D0\uA5A5\005\000\u07E0"+
+        "\uA5A5\014\000\u07F8\u0808\u0820\uA5A5\010\000p\000\000\000\u0840\u0858"+
+        "\000\u0878\u0890\uA5A5\004\000\u08B0\000\u08C8\uA5A5\011\000\u08E0\u08F8"+
+        "\uA5A5&\000\u0910\000\000\000\u0138\u0920\u0930\u0940\u0950\u0960\u0970"+
+        "\u0980\u0990\u09A0\u09B0\u01F0\u0910\u0108\u00A8\u00B8\u0138\u0920\u0930"+
+        "\u0940\u0950\u0960\u0970\u0980\u0990\u09A0\u09B0\uA5A5\031\000\u09C0\uA5A5"+
+        "'\000\u01BB\u01BB\u01DB\u01DB\uA5A5\004\u01BB\u01DB\u01DB\u01DB\u01BB"+
+        "\u01BB\uA5A5\004\000\u01BB\uA5A5\036\000\u09D8\u09F8\u0A18\u0A28\000\u0A40"+
+        "\u0A60\u0A80\000\u0A90\u0AA8\u0AB8\u0AB8\u0AB8\u0338\u0AC8\u0AD8\u0AD8"+
+        "\u0AE8\u0458\000\u0AF8\u0B08\000\000\u0B20\u0B30\u0B40\u0B40\u0B40\000"+
+        "\000\u0B50\u0B68\u0B88\000\u02F8\000\u8D40\000\u02F8\000\u8D50\u8D60\u0BA0"+
+        "\u0A18\000\u0BB0\u0BC0\u0A98\000\u0B58\u0118\u0BD0\u0BE0\u0BF0\u0C00\u0C10"+
+        "\uA5A5\031\000\u0C20\u0C40\u0C60\u0C80\u0CA0\u0CC0\u0CE0\u0D00\u0D20\u0D40"+
+        "\u0D60\u0D80\u0DA0\u0AD8\u0DB8\u0DD0\u0DF0\u0DF8\u0E08\u0E20\u0E40\u0E68"+
+        "\u0E70\u0E80\u0E98\u0AE8\u0A18\u0EB8\u0B58\u0C10\u0EC8\u0EE0\u0F00\u0F08"+
+        "\u0F18\u0F30\u0F50\u0F78\u0468\u0F90\u0FA8\u0458\u09E8\u0FC8\u0FD8\uA5A5"+
+        "\020\000\u1499\000\u14A1\000\u14A9\uA5A5\033\000\u14B1\000\u14B9\000\u14C1"+
+        "\uA5A5\016\000\u14C9\uA5A5\004\000\u14D1\000\000\u14D9\uA5A5\027\000\u14E1"+
+        "\000\u14E9\uA5A5\006\000\u0FE8\u1000\000\u1020\u1038\uA5A5\013\000\u14F1"+
+        "\uA5A5\006\000\u14F9\000\u1501\000\000\u1509\uA5A5\004\000\u1511\uA5A5"+
+        "\023\000\u1519\000\000\u1521\u1529\uA5A5\014\000\u1531\u1539\000\000\u1541"+
+        "\u1549\000\000\u1551\u1559\u1561\u1569\uA5A5\004\000\u1571\u1579\000\000"+
+        "\u1581\u1589\uA5A5\011\000\u1591\u1599\uA5A5\017\000\u15A1\uA5A5\005\000"+
+        "\u15A9\u15B1\000\u15B9\uA5A5\006\000\u15C1\u15C9\u15D1\u15D9\uA5A5\023"+
+        "\000\u8D78\u8D88\uA5A5\025\000\u0108\u00A8\u00B8\u0138\u0920\u0930\u0940"+
+        "\u0950\u0960\u1058\u1070\u1088\u10A0\u10B8\u10D0\u10E8\u1100\u1118\u1130"+
+        "\u1148\u1160\u1180\u11A0\u11C0\u11E0\u1200\u1220\u1240\u1260\u1280\u12A8"+
+        "\u12D0\u12F8\u1320\u1348\u1370\u1398\u13C0\u13E8\u1410\u1438\u1450\u1468"+
+        "\u1480\u1498\u14B0\u14C8\u14E0\u14F8\u1510\u1530\u1550\u1570\u1590\u15B0"+
+        "\u15D0\u15F0\u1610\u1630\u1650\u1670\u1690\u16B0\u16D0\u16F0\u1710\u1730"+
+        "\u1750\u1770\u1790\u17B0\u17D0\u17F0\u1810\u1830\u1850\u1870\u1890\u18B0"+
+        "\u18D0\u18F0\u1910\u1930\u1950\u1970\u1990\u19B0\u0BA0\u0A18\u0EB8\u0BC0"+
+        "\u0A98\u19C0\u0AB8\u0AD8\u0190\u19D0\u0AE8\u0B58\u0AF8\u19E0\u0B20\u0B30"+
+        "\u0B40\u19F0\u1A00\u1A10\u0DF8\u1A20\u0E70\u1A30\u02F8\u0080\u1A40\u09E8"+
+        "\u0FC8\u0BB0\u1A50\u0AA8\u0338\u0C10\u01A8\u1A60\u0458\u0FD8\u01F0\u0118"+
+        "\u1A70\u1A80\u0358 \u1A90\u0A70\u0F08\u0398\u0468\u03A8\u0310\u0910\uA5A5"+
+        "4\000\u1AA0\uA5A5\023\000\u1AB0\uA5A5\014\000\u1AC0\u1AD0\u1AE0\u1AF0"+
+        "\u1B00\u1B10\u1B20\u1B30\u1B40\u1B50\u1B60\u1B70\u1B80\u1B90\u1BA0\u1BB0"+
+        "\u1BC0\u1BD0\u1BE0\u1BF0\u1C00\u1C10\u1C20\u1C30\u1C40\u1C50\u1C60\u1C70"+
+        "\u1C80\u1C90\u1CA0\u1CB0\u1CC0\u1CD0\u1CE0\u1CF0\u1D00\u1D10\u1D20\u1D30"+
+        "\u1D40\u1D50\u1D60\u1D70\u1D80\u1D90\u1DA0\u1DB0\u1DC0\u1DD0\u1DE0\u1DF0"+
+        "\u1E00\u1E10\u1E20\u1E30\u1E40\u1E50\u1E60\u1E70\u1E80\u1E90\u1EA0\u1EB0"+
+        "\u1EC0\u1ED0\u1EE0\u1EF0\u1F00\u1F10\u1F20\u1F30\u1F40\u1F50\u1F60\u1F70"+
+        "\u1F80\u1F90\u1FA0\u1FB0\u1FC0\u1FD0\u1FE0\u1FF0\u2000\u2010\u2020\u2030"+
+        "\u2040\u2050\u2060\u2070\u2080\u2090\u20A0\u20B0\u20C0\u20D0\u20E0\u20F0"+
+        "\u2100\u2110\u2120\u2130\u2140\u2150\u2160\u2170\u2180\u2190\u21A0\u21B0"+
+        "\u21C0\u21D0\u21E0\u21F0\u2200\u2210\u2220\u2230\u2240\u2250\u2260\u2270"+
+        "\u2280\u2290\u22A0\u22B0\u22C0\u22D0\u22E0\u22F0\u2300\u2310\u2320\u2330"+
+        "\u2340\u2350\u2360\u2370\u2380\u2390\u23A0\u23B0\u23C0\u23D0\u23E0\u23F0"+
+        "\u2400\u2410\u2420\u2430\u2440\u2450\u2460\u2470\u2480\u2490\u24A0\u24B0"+
+        "\u24C0\u24D0\u24E0\u24F0\u2500\u2510\u2520\u2530\u2540\u2550\u2560\u2570"+
+        "\u2580\u2590\u25A0\u25B0\u25C0\u25D0\u25E0\u25F0\u2600\u2610\u2620\u2630"+
+        "\u2640\u2650\u2660\u2670\u2680\u2690\u26A0\u26B0\u26C0\u26D0\u26E0\u26F0"+
+        "\u2700\u2710\u2720\u2730\u2740\u2750\u2760\u2770\u2780\u2790\u27A0\u27B0"+
+        "\u27C0\u27D0\u27E0\u27F0\u2800\u2810\uA5A5\012\000p\uA5A5)\000\u0323\u01FB"+
+        "\u01C3\u01F3\u032B\u032B\uA5A5\006\000\u2820\000\u1C30\u2830\u2840\uA5A5"+
+        "\013\000\u15E1\uA5A5\004\000\u15E9\000\u15F1\000\u15F9\000\u1601\000\u1609"+
+        "\000\u1611\000\u1619\000\u1621\000\u1629\000\u1631\000\u1639\000\u1641"+
+        "\000\000\u1649\000\u1651\000\u1659\uA5A5\006\000\u1661\000\000\u1669\000"+
+        "\000\u1671\000\000\u1679\000\000\u1681\uA5A5\035\000\u01AB\u01B3\u2850"+
+        "\u2868\u1689\uA5A5\010\000\u1691\uA5A5\004\000\u1699\000\u16A1\000\u16A9"+
+        "\000\u16B1\000\u16B9\000\u16C1\000\u16C9\000\u16D1\000\u16D9\000\u16E1"+
+        "\000\u16E9\000\u16F1\000\000\u16F9\000\u1701\000\u1709\uA5A5\006\000\u1711"+
+        "\000\000\u1719\000\000\u1721\000\000\u1729\000\000\u1731\uA5A5\023\000"+
+        "\u1739\u1741\u1749\u1751\uA5A5\012\000\u1759\uA5A5\023\000\u2880\u2890"+
+        "\u28A0\u28B0\u28C0\u28D0\u28E0\u28F0\u2900\u2910\u2920\u2930\u2940\u2950"+
+        "\u2960\u2970\u2980\u2990\u29A0\u29B0\u29C0\u29D0\u29E0\u29F0\u2A00\u2A10"+
+        "\u2A20\u2A30\u2A40\u2A50\u2A60\u2A70\u2A80\u2A90\u2AA0\u2AB0\u2AC0\u2AD0"+
+        "\u2AE0\u2AF0\u2B00\u2B10\u2B20\u2B30\u2B40\u2B50\u2B60\u2B70\u2B80\u2B90"+
+        "\u2BA0\u2BB0\u2BC0\u2BD0\u2BE0\u2BF0\u2C00\u2C10\u2C20\u2C30\u2C40\u2C50"+
+        "\u2C60\u2C70\u2C80\u2C90\u2CA0\u2CB0\u2CC0\u2CD0\u2CE0\u2CF0\u2D00\u2D10"+
+        "\u2D20\u2D30\u2D40\u2D50\u2D60\u2D70\u2D80\u2D90\u2DA0\u2DB0\u2DC0\u2DD0"+
+        "\u2DE0\u2DF0\u2E00\u2E10\u2E20\u2E30\u2E40\u2E50\000\000\000\u1AC0\u1B20"+
+        "\u2E60\u2E70\u2E80\u2E90\u2EA0\u2EB0\u1B00\u2EC0\u2ED0\u2EE0\u2EF0\u1B40"+
+        "\u2F00\u2F20\u2F40\u2F60\u2F80\u2FA0\u2FC0\u2FE0\u3000\u3020\u3040\u3060"+
+        "\u3080\u30A0\u30C0\u30E8\u3110\u3138\u3160\u3188\u31B0\u31D8\u3200\u3228"+
+        "\u3250\u3278\u32A0\u32C8\u32F0\000\000\000\u3318\u3338\u3358\u3378\u3398"+
+        "\u33B8\u33D8\u33F8\u3418\u3438\u3458\u3478\u3498\u34B8\u34D8\u34F8\u3518"+
+        "\u3538\u3558\u3578\u3598\u35B8\u35D8\u35F8\u3618\u3638\u3658\u3678\u3698"+
+        "\u36B8\u36D8\u36F8\u3718\u3738\u3758\u3778\uA5A5\034\000\u2880\u28B0\u28E0"+
+        "\u2900\u2980\u2990\u29C0\u29E0\u29F0\u2A10\u2A20\u2A30\u2A40\u2A50\u3798"+
+        "\u37B0\u37C8\u37E0\u37F8\u3810\u3828\u3840\u3858\u3870\u3888\u38A0\u38B8"+
+        "\u38D0\uA5A5\004\000\u1AC0\u1B20\u2E60\u2E70\u38E8\u38F8\u3908\u1B70\u3918"+
+        "\u1C30\u1F50\u2010\u2000\u1F60\u2520\u1CB0\u1F30\u3928\u3938\u3948\u3958"+
+        "\u3968\u3978\u3988\u3998\u39A8\u39B8\u1D10\u39C8\u39D8\u39E8\u39F8\u3A08"+
+        "\u3A18\u3A28\u3A38\u2E80\u2E90\u2EA0\u3A48\u3A58\u3A68\u3A78\u3A88\u3A98"+
+        "\u3AA8\u3AB8\u3AC8\u3AD8\uA5A5\017\000\u3AE8\u3B00\u3B18\u3B30\u3B48\u3B60"+
+        "\u3B78\u3B90\u3BA8\u3BC0\u3BE0\u3C00\uA5A5\004\000\u3C20\u3C30\u3C40\u3C50"+
+        "\u3C60\u3C70\u3C80\u3C90\u3CA0\u3CB0\u3CC0\u3CD0\u3CE0\u3CF0\u3D00\u3D10"+
+        "\u3D20\u3D30\u3D40\u3D50\u3D60\u3D70\u3D80\u3D90\u3DA0\u3DB0\u3DC0\u3DD0"+
+        "\u3DE0\u3DF0\u3E00\u3E10\u3E20\u3E30\u3E40\u3E50\u3E60\u3E70\u3E80\u3E90"+
+        "\u3EA0\u3EB0\u3EC0\u3ED0\u3EE0\u3EF0\u3F00\000\u3F10\u3F40\u3F68\u3F98"+
+        "\u3FB8\u3FE8\u4008\u4028\u4060\u4088\u40A8\u40C8\u40E8\u4110\u4138\u4160"+
+        "\u4188\u41B0\u41D8\u4200\u4238\u4250\u4288\u42C0\u4260\u42F0\u4328\u4360"+
+        "\u4388\u43A8\u43C8\u43F0\u4418\u4448\u4478\u4498\u44B8\u44E0\u4500\u4310"+
+        "\u4520\u4538\u4558\u4578\u45B0\u45D8\u4608\u4640\u4668\u4688\u46A8\u46E0"+
+        "\u4708\u4740\u4760\u4790\u47B0\u47D8\u47F8\u4820\u4850\u4878\u48A8\u48D0"+
+        "\u48E8\u4918\u4938\u4958\u4980\u49A0\u49C0\u49E0\u4A10\u4A38\u4A50\u4A88"+
+        "\u4AA8\u4298\u4AD8\u4B00\u4B20\u4B40\u4B68\u4B80\u4BA8\u4BD8\u4BF0\u42D0"+
+        "\u4C28\u4C40\u4C58\u4C70\u4C88\u4CA0\u4CB8\u4CD0\u4CE8\u4D00\u4D18\u4D38"+
+        "\u4D58\u4D78\u4D98\u4DB8\u4DD8\u4DF8\u4E18\u4E38\u4E58\u4E78\u4E98\u4EB8"+
+        "\u4ED8\u4EF8\u4F18\u4F30\u4F48\u4F68\u4F80\uA5A5\004\000\u4F98\u4FB0\u4FC8"+
+        "\u4FE0\u4FF8\u5020\u5038\u5050\u5068\u5080\u5098\u50B0\u50C8\u50E0\u5100"+
+        "\u5128\u5140\u5158\u5170\u5188\u51A0\u51B8\u51D0\u51F0\u5210\u5230\u5250"+
+        "\u5268\u5280\u5298\u52B0\u52C8\u52E0\u52F8\u5310\u5328\u5340\u5360\u5348"+
+        "\u5380\u53A0\u53C0\u53A8\u53E0\u5400\u5420\u4F00\u5448\u5468\u5488\u54A8"+
+        "\u54C8\u54F8\u5530\u5548\u5560\u5578\u5590\u55A8\u55C0\u55D8\u55F0\u5608"+
+        "\u5620\u5638\u5650\u5668\u5680\u5698\u56B0\u56C8\u56E0\u5708\u5720\u5738"+
+        "\u5750\u5778\u5798\u57B0\u57C8\u57E0\u57F8\u5810\u5828\u5840\u5858\u5870"+
+        "\u5888\u58A8\u58C0\u58D8\u58F8\u5918\u5930\u5958\u5978\u5990\u59A8\u59C0"+
+        "\000\000\u59D8\u59F0\u5A08\u5A20\u5A38\u5A50\u5A68\u5A80\u5A98\u5AB0\u5AD0"+
+        "\u5AF0\u5B10\u5B30\u5B50\u5B70\u5B90\u5BB0\u5BD0\u5BF0\u5C10\u5C30\u5C50"+
+        "\u5C70\u5C90\u5CB0\u5CD0\u5CF0\u5D10\u5D30\u5D50\000\uA5A5%\007\uA5A5"+
+        "\033\000\u8D98\u8DA8\u8DB8\u8DC8\u8DD8\u8DE8\u8DF8\u8E08\u8E18\u8E28\u8E38"+
+        "\u8E48\u8E58\u8E68\u8E78\u8E88\u8E98\u8EA8\u8EB8\u8EC8\u8ED8\u8EE8\u8EF8"+
+        "\u8F08\u8F18\u8F28\u8F38\u8F48\u8F58\u8F68\u8F78\u8F88\u8F98\u8FA8\u8FB8"+
+        "\u8FC8\u8FD8\u8FE8\u8FF8\u9008\u9018\u9028\u9038\u9048\u9058\u9068\u9078"+
+        "\u9088\u9098\u90A8\u90B8\u90C8\u90D8\u90E8\u90F8\u9108\u9118\u9128\u9138"+
+        "\u9148\u9158\u9168\u9178\u9188\u9198\u91A8\u91B8\u91C8\u91D8\u91E8\u91F8"+
+        "\u9208\u9218\u9228\u9238\u9248\u9258\u9268\u9278\u9288\u9298\u92A8\u92B8"+
+        "\u92C8\u92D8\u92E8\u92F8\u9308\u9318\u9328\u9338\u9348\u8ED8\u9358\u9368"+
+        "\u9378\u9388\u9398\u93A8\u93B8\u93C8\u93D8\u93E8\u93F8\u9408\u9418\u9428"+
+        "\u9438\u9448\u9458\u9468\u9478\u9488\u9498\u94A8\u94B8\u94C8\u94D8\u94E8"+
+        "\u94F8\u9508\u9518\u9528\u9538\u9548\u9558\u9568\u9578\u9588\u9598\u95A8"+
+        "\u95B8\u95C8\u95D8\u95E8\u95F8\u9608\u9618\u9628\u9638\u9648\u9658\u9668"+
+        "\u9678\u9688\u9698\u96A8\u96B8\u96C8\u96D8\u96E8\u96F8\u9708\u9718\u9728"+
+        "\u9738\u9748\u9758\u9768\u9778\u9788\u9478\u9798\u97A8\u97B8\u97C8\u97D8"+
+        "\u97E8\u97F8\u9808\u9378\u9818\u9828\u9838\u9848\u9858\u9868\u9878\u9888"+
+        "\u9898\u98A8\u98B8\u98C8\u98D8\u98E8\u98F8\u9908\u9918\u9928\u9938\u9948"+
+        "\u8ED8\u9958\u9968\u9978\u9988\u9998\u99A8\u99B8\u99C8\u99D8\u99E8\u99F8"+
+        "\u9A08\u9A18\u9A28\u9A38\u9A48\u9A58\u9A68\u9A78\u9A88\u9A98\u9AA8\u9AB8"+
+        "\u9AC8\u9AD8\u9AE8\u9AF8\u9398\u9B08\u9B18\u9B28\u9B38\u9B48\u9B58\u9B68"+
+        "\u9B78\u9B88\u9B98\u9BA8\u9BB8\u9BC8\u9BD8\u9BE8\u9BF8\u9C08\u9C18\u9C28"+
+        "\u9C38\u9C48\u9C58\u9C68\u9C78\u9C88\u9C98\u9CA8\u9CB8\u9CC8\u9CD8\u9CE8"+
+        "\u9CF8\u9D08\u9D18\u9D28\u9D38\u9D48\u9D58\u9D68\u9D78\u9D88\u9D98\u9DA8"+
+        "\u9DB8\u9DC8\u9DD8\u9DE8\u9DF8\u9E08\u9E18\000\000\u9E28\000\u9E38\000"+
+        "\000\u9E48\u9E58\u9E68\u9E78\u9E88\u9E98\u9EA8\u9EB8\u9EC8\u9ED8\000\u9EE8"+
+        "\000\u9EF8\000\000\u9F08\u9F18\000\000\000\u9F28\u9F38\u9F48\u9F58\uA5A5"+
+        "\022\000\u5D70\u5D88\u5DA0\u5DB8\u5DD8\u5DF8\u5DF8\uA5A5\014\000\u5E10"+
+        "\u5E28\u5E40\u5E58\u5E70\uA5A5\006\000\u0333\u9F68\u5E88\u0BD0\u0C00\u5E98"+
+        "\u5EA8\u5EB8\u5EC8\u5ED8\u5EE8\u0970\u9F80\u9F98\u9FB0\u9FD0\u9FF0\uA008"+
+        "\uA020\uA038\uA050\uA068\uA080\uA098\uA0B0\000\uA0C8\uA0E0\uA0F8\uA110"+
+        "\uA128\000\uA140\000\uA158\uA170\000\uA188\uA1A0\000\uA1B8\uA1D0\uA1E8"+
+        "\uA200\uA218\uA230\uA248\uA260\uA278\u5EF8\u5F10\u5F10\uA5A5\004\u5F20"+
+        "\uA5A5\004\u5F30\uA5A5\004\u5F40\uA5A5\004\u5F50\uA5A5\004\u5F60\uA5A5"+
+        "\004\u5F70\uA5A5\004\u5F80\uA5A5\004\u5F90\uA5A5\004\u5FA0\uA5A5\004\u5FB0"+
+        "\uA5A5\004\u5FC0\uA5A5\004\u5FD0\u5FE0\u5FE0\u5FF0\u5FF0\u6000\u6000\u6010"+
+        "\u6010\u6020\u6020\u6030\u6030\uA5A5\004\u6040\uA5A5\004\u6050\uA5A5\004"+
+        "\u6060\uA5A5\004\u6070\u6080\u6080\uA5A5\004\u6090\u60A0\u60A0\uA5A5\004"+
+        "\u60B8\uA5A5\004\u60C8\u60D8\u60D8\u60E8\u60E8\uA5A5!\000\uA5A5\004\u6100"+
+        "\u6110\u6110\u6120\u6120\u6130\u6130\u05A8\u6140\u6140\u6150\u6150\u6160"+
+        "\u6160\uA5A5\004\u6170\u6180\u6180\u6190\u6190\u61B0\u61B0\u61D0\u61D0"+
+        "\u61F0\u61F0\u6210\u6210\u6230\u6230\u6250\u6250\u6250\u6270\u6270\u6270"+
+        "\uA5A5\004\u6290\u62A0\u62C0\u62E0\u6270\u6300\u6320\u6338\u6350\u6368"+
+        "\u6380\u6398\u63B0\u63C8\u63E0\u63F8\u6410\u6428\u6440\u6458\u6470\u6488"+
+        "\u64A0\u64B8\u64D0\u64E8\u6500\u6518\u6530\u6548\u6560\u6578\u6590\u65A8"+
+        "\u65C0\u65D8\u65F0\u6608\u6620\u6638\u6650\u6668\u6680\u6698\u66B0\u66C8"+
+        "\u66E0\u66F8\u6710\u6728\u6740\u6758\u6770\u6788\u67A0\u67B8\u67D0\u67E8"+
+        "\u6800\u6818\u6830\u6848\u6860\u6878\u6890\u68A8\u68C0\u68D8\u68F0\u6908"+
+        "\u6920\u6938\u6950\u6968\u6980\u6998\u69B0\u69C8\u69E0\u69F8\u6A10\u6A28"+
+        "\u6A40\u6A58\u6A70\u6A88\u6AA0\u6AB8\u6AD0\u6AE8\u6B00\u6B18\u6B30\u6B48"+
+        "\u6B60\u6B78\u6B98\u6BB8\u6BD8\u6BF8\u6C18\u6C38\u6C58\u62E0\u6C78\u6270"+
+        "\u6300\u6C98\u6CB0\u6368\u6CC8\u6380\u6398\u6CE0\u6CF8\u63F8\u6D10\u6410"+
+        "\u6428\u6D28\u6D40\u6458\u6D58\u6470\u6488\u6740\u6758\u67A0\u67B8\u67D0"+
+        "\u6830\u6848\u6860\u6878\u68D8\u68F0\u6908\u6D70\u6968\u6D88\u6DA0\u69F8"+
+        "\u6DB8\u6A10\u6A28\u6B60\u6DD0\u6DE8\u6AE8\u6E00\u6B00\u6B18\u62A0\u62C0"+
+        "\u6E18\u62E0\u6E38\u6320\u6338\u6350\u6368\u6E58\u63B0\u63C8\u63E0\u63F8"+
+        "\u6E70\u6458\u64A0\u64B8\u64D0\u64E8\u6500\u6530\u6548\u6560\u6578\u6590"+
+        "\u65A8\u6E88\u65C0\u65D8\u65F0\u6608\u6620\u6638\u6668\u6680\u6698\u66B0"+
+        "\u66C8\u66E0\u66F8\u6710\u6728\u6770\u6788\u67E8\u6800\u6818\u6830\u6848"+
+        "\u6890\u68A8\u68C0\u68D8\u6EA0\u6920\u6938\u6950\u6968\u69B0\u69C8\u69E0"+
+        "\u69F8\u6EB8\u6A40\u6A58\u6ED0\u6AA0\u6AB8\u6AD0\u6AE8\u6EE8\u62E0\u6E38"+
+        "\u6368\u6E58\u63F8\u6E70\u6458\u6F00\u6590\u6F18\u6F30\u6F48\u6830\u6848"+
+        "\u68D8\u69F8\u6EB8\u6AE8\u6EE8\u6F60\u6F80\u6FA0\u6FC0\u6FD8\u6FF0\u7008"+
+        "\u7020\u7038\u7050\u7068\u7080\u7098\u70B0\u70C8\u70E0\u70F8\u7110\u7128"+
+        "\u7140\u7158\u7170\u7188\u71A0\u71B8\u71D0\u6F30\u71E8\u7200\u7218\u7230"+
+        "\u6FC0\u6FD8\u6FF0\u7008\u7020\u7038\u7050\u7068\u7080\u7098\u70B0\u70C8"+
+        "\u70E0\u70F8\u7110\u7128\u7140\u7158\u7170\u7188\u71A0\u71B8\u71D0\u6F30"+
+        "\u71E8\u7200\u7218\u7230\u71A0\u71B8\u71D0\u6F30\u6F18\u6F48\u6650\u6548"+
+        "\u6560\u6578\u71A0\u71B8\u71D0\u6650\u6668\u7248\u7248\uA5A5\022\000\u7260"+
+        "\u7280\u7280\u72A0\u72C0\u72E0\u7300\u7320\u7340\u7340\u7360\u7380\u73A0"+
+        "\u73C0\u73E0\u7400\u7400\u7420\u7440\u7440\u7460\u7460\u7480\u74A0\u74A0"+
+        "\u74C0\u74E0\u74E0\u7500\u7500\u7520\u7540\u7540\u7560\u7560\u7580\u75A0"+
+        "\u75C0\u75E0\u75E0\u7600\u7620\u7640\u7660\u7680\u7680\u76A0\u76C0\u76E0"+
+        "\u7700\u7720\u7740\u7740\u7760\u7760\u7780\u7780\u77A0\u77C0\u77E0\u7800"+
+        "\u7820\u7840\u7860\000\000\u7880\u78A0\u78C0\u78E0\u7900\u7920\u7920\u7940"+
+        "\u7960\u7980\u79A0\u79A0\u79C0\u79E0\u7A00\u7A20\u7A40\u7A60\u7A80\u7AA0"+
+        "\u7AC0\u7AE0\u7B00\u7B20\u7B40\u7B60\u7B80\u7BA0\u7BC0\u7BE0\u7C00\u7C20"+
+        "\u7C40\u7C60\u76A0\u76E0\u7C80\u7CA0\u7CC0\u7CE0\u7D00\u7D20\u7D00\u7CC0"+
+        "\u7D40\u7D60\u7D80\u7DA0\u7DC0\u7D20\u75C0\u7480\u7DE0\u7E00\uA5A5(\000"+
+        "\u7E20\u7E40\u7E60\u7E88\u7EB0\u7ED8\u7F00\u7F28\u7F50\u7F78\u7F98\u8030"+
+        "\uA5A5\004\000\uA5A5\004\u01BB\uA5A5\014\000\u0808\u8078\u8088\u8098\u8098"+
+        "\u09A0\u09B0\u80A8\u80B8\u80C8\u80D8\u80E8\u80F8\u8108\u8118\u8128\u8138"+
+        "\u8148\u8158\u8168\u8178\uA5A5\004\000\uA5A5\004\u08C8\u8098\u8098\u8098"+
+        "\u8188\u8198\u07F8\000\u81A8\u81B8\u0900\u08B8\u8078\u09A0\u09B0\u80A8"+
+        "\u80B8\u80C8\u80D8\u81C8\u81D8\u81E8\u0970\u81F8\u8208\u8218\u0990\000"+
+        "\u8228\u8238\u8248\u8258\uA5A5\004\000\u8268\u8280\u8298\000\u82B0\000"+
+        "\u82C8\u82E0\u82F8\u8310\u8328\u8340\u8358\u8370\u8388\u83A0\u83B8\u83C8"+
+        "\u83C8\u83E0\u83E0\u83F8\u83F8\u8410\u8410\uA5A5\004\u8428\u61A0\u61A0"+
+        "\uA5A5\004\u8440\u8450\u8450\uA5A5\004\u8460\uA5A5\004\u8470\uA5A5\004"+
+        "\u62B0\uA5A5\004\u62D0\uA5A5\004\u6358\u7EC8\u7EC8\u8480\u8480\u6C48\u6C48"+
+        "\u6C68\u6C68\uA5A5\004\u8490\uA5A5\004\u84A0\uA5A5\004\u84B0\uA5A5\004"+
+        "\u84C0\uA5A5\004\u84D0\uA5A5\004\u84E0\uA5A5\004\u84F0\uA5A5\004\u8500"+
+        "\uA5A5\004\u8510\uA5A5\004\u8520\uA5A5\004\u8530\uA5A5\004\u6838\uA5A5"+
+        "\004\u62F0\uA5A5\004\u6C88\uA5A5\004\u6E48\u61E0\u61E0\u6180\u6180\uA5A5"+
+        "\004\u6310\u8540\u8540\u8560\u8560\u8580\u8580\u85A0\u85A0\uA5A5\004\000"+
+        "\u08B8\u85B8\u81C8\u8238\u8248\u81D8\u85C8\u09A0\u09B0\u81E8\u0970\u8188"+
+        "\u81F8\u07F8\u85D8\u0910\u0108\u00A8\u00B8\u0138\u0920\u0930\u0940\u0950"+
+        "\u0960\u81B8\u81A8\u8208\u0990\u8218\u0900\u8258\u19B0\u0BA0\u0A18\u0EB8"+
+        "\u0BC0\u0A98\u19C0\u0AB8\u0AD8\u0190\u19D0\u0AE8\u0B58\u0AF8\u19E0\u0B20"+
+        "\u0B30\u0B40\u19F0\u1A00\u1A10\u0DF8\u1A20\u0E70\u1A30\u02F8\u85E8\u8228"+
+        "\u85F8\u8608\u8098\u8618\u0080\u1A40\u09E8\u0FC8\u0BB0\u1A50\u0AA8\u0338"+
+        "\u0C10\u01A8\u1A60\u0458\u0FD8\u01F0\u0118\u1A70\u1A80\u0358 \u1A90\u0A70"+
+        "\u0F08\u0398\u0468\u03A8\u0310\u80A8\u8628\u80B8\u8638\000\000\u8648\u8148"+
+        "\u8158\u8198\u8658\u3F00\u3F58\u8668\u8678\u8688\u8698\u86A8\u86B8\u86C8"+
+        "\u86D8\u4078\u3C20\u3C30\u3C40\u3C50\u3C60\u3C70\u3C80\u3C90\u3CA0\u3CB0"+
+        "\u3CC0\u3CD0\u3CE0\u3CF0\u3D00\u3D10\u3D20\u3D30\u3D40\u3D50\u3D60\u3D70"+
+        "\u3D80\u3D90\u3DA0\u3DB0\u3DC0\u3DD0\u3DE0\u3DF0\u3E00\u3E10\u3E20\u3E30"+
+        "\u3E40\u3E50\u3E60\u3E70\u3E80\u3E90\u3EA0\u3EB0\u3EC0\u3ED0\u4018\u2858"+
+        "\u2870\u2BB0\u2880\u2890\u28A0\u28B0\u28C0\u28D0\u28E0\u28F0\u2900\u2910"+
+        "\u2920\u2930\u2940\u2950\u2960\u2970\u2980\u2990\u29A0\u29B0\u29C0\u29D0"+
+        "\u29E0\u29F0\u2A00\u2A10\u2A20\u2A30\u2A40\u2A50\000\000\000\u2A60\u2A70"+
+        "\u2A80\u2A90\u2AA0\u2AB0\000\000\u2AC0\u2AD0\u2AE0\u2AF0\u2B00\u2B10\000"+
+        "\000\u2B20\u2B30\u2B40\u2B50\u2B60\u2B70\000\000\u2B80\u2B90\u2BA0\000"+
+        "\000\000\u86E8\u86F8\u8708\u0090\u8718\u8728\u8738\000\u8748\u8758\u8768"+
+        "\u8778\u8788\u8798\u87A8\uA5A5\021\000"
+        );
+
+    static final CompactCharArray actions = new CompactCharArray(
+        "\000\u0800\uA5A5 \000 @`\u0080\u00A0\u00C0\u00E0\000\u0100\u0120\u0140"+
+        "\uA5A5\006\000\u0160\u0180\u01A0\u01C0\uA5A5\013\000\u01E0\u0200\u0220"+
+        "\u0240\u0260\u0280\u02A0\000\u02C0\u02E0\u0300\uA5A5\006\000\u0320\u0340"+
+        "\u0360\u0380\uA5A5\013\000\u03A0\u03C0\uA5A5\015\000\u03E0\u0400\uA5A5"+
+        "\017\000\u0420\u0440\u0460\u0480\000\000\u04A0\uA5A5\031\000\u04C0\u04E0"+
+        "\u0500\u0520\000\000\000\u0540\u0560\u0580\u05A0\000\u05C0\u05E0\uA5A5"+
+        "\006\000\u0600\uA5A5\013\000\u0620\u0640\uA5A5\006\000\u0660\u0680\u06A0"+
+        "\uA5A5\004\000\u06C0\uA5A5\004\000\u06E0\uA5A5\013\000\u0700\u0720\000"+
+        "\000\000\u0740\uA5A5\007\000\u0760\uA5A5\022\000\u0780\u07A0\u07C0\u07E0"+
+        "\000\u0800\000\000\u0820\u0840\u0860\uA5A5\025\000\u0880\u08A0\u08C0\u08E0"+
+        "\000\000\u0900\uA5A5\031\000\u0920\u0940\uA5A5\036\000\u0960\u0980\uA5A5"+
+        "\007\000\u09A0\u09C0\uA5A5\025\000\u09E0\u0A00\u0A20\u0A40\000\000\u0A60"+
+        "\000\u0A80\uA5A5\027\000\u0AA0\u0AC0\uA5A5\010\000\u0AE0\uA5A5\025\000"+
+        "\u0B00\u0B20\uA5A5&\000\u0B40\u0B60\uA5A5\012\000\u0B80\uA5A5\023\000"+
+        "\u0BA0\u0BC0\uA5A5\012\000\u0BE0\uA5A5\013\000\u0C00\u0C20\u0C40\u0C60"+
+        "\000\u0C80\u0CA0\u0CC0\u0CE0\uA5A5\004\000\u0D00\u0D20\000\u0D40\u0D60"+
+        "\uA5A5\016\000\u0D80\u0DA0\u0DC0\u0DE0\u0E00\u0E20\u0E40\u0E60\u0E80\000"+
+        "\000\u0EA0\u0EC0\u0EE0\u0F00\u0F20\u0F40\u0F60\uA5A5\016\000\u0F80\u0FA0"+
+        "\u0FC0\u0FE0\000\u1000\u1020\000\u1040\uA5A5\005\000\u1060\000\000\u1080"+
+        "\uA5A5\016\000\u10A0\u10C0\u10E0\u1100\000\000\u1120\u1140\u1160\uA5A5"+
+        "\006\000\u1180\uA5A5\020\000\u11A0\u11C0\000\000\000\u11E0\uA5A5\007\000"+
+        "\u1200\u1220\u1240\uA5A5\020\000\u1260\u1280\u12A0\u12C0\u12E0\u1300\000"+
+        "\u1320\u1340\000\000\u1360\u1380\u13A0\u13C0\u13E0\u1400\uA5A5\017\000"+
+        "\u1420\u1440\u1460\u1480\u14A0\u14C0\u14E0\u1500\u1520\000\000\u1540\u1560"+
+        "\u1580\u15A0\u15C0\u15E0\u1600\uA5A5\016\000\u1620\u1640\u1660\u1680\u16A0"+
+        "\u16C0\u16E0\u1700\u1720\000\000\u1740\u1760\000\u1780\u17A0\u17C0\u17E0"+
+        "\uA5A5\016\000\u1800\u1820\000\000\u1840\000\000\000\u1860\000\000\000"+
+        "\u1880\uA5A5\023\000\u18A0\u18C0\u18E0\u1900\u1920\u1940\u1960\u1980\u19A0"+
+        "\000\000\u19C0\u19E0\000\u1A00\u1A20\u1A40\u1A60\uA5A5\016\000\u1A80\u1AA0"+
+        "\u1AC0\u1AE0\u1B00\u1B20\u1B40\u1B60\u1B80\000\000\u1BA0\u1BC0\u1BE0\u1C00"+
+        "\u1C20\uA5A5\020\000\u1C40\uA5A5\023\000\u1C60\u1C80\uA5A5\012\000\u1CA0"+
+        "\uA5A5\010\000\u1CC0\uA5A5\007\000\u1CE0\u1D00\u1D20\u1D40\uA5A5\023\000"+
+        "\u1D60\u1D80\uA5A5\007\000\u1DA0\u1DC0\u1DE0\u1E00\uA5A5\025\000\u1E20"+
+        "\uA5A5\037\000\u1E40\uA5A5\037\000\u1E60\uA5A5\037\000\u1E80\uA5A5\037"+
+        "\000\u1EA0\uA5A5\037\000\u1EC0\uA5A5\037\000\u1EE0\uA5A5\037\000\u1F00"+
+        "\uA5A5\037\000\u1F20\uA5A5\037\000\u1F40\uA5A5\037\000\u1F60\uA5A5\037"+
+        "\000\u1F80\uA5A5 \000\u1FA0\uA5A5\037\000\u1FC0\uA5A5\037\000\u1FE0\uA5A5"+
+        "\037\000\u2000\uA5A5\037\000\u2020\uA5A5\037\000\u2040\uA5A5\037\000\u2060"+
+        "\uA5A5\037\000\u2080\uA5A5\037\000\u20A0\uA5A5\037\000\u20C0\uA5A5)\000"+
+        "\u20E0\u2100\u2120\uA5A5\036\000\u2140\u2160\uA5A5\u0128\000"
+        ,
+        "\000\u2180\uA5A5!\000\u1FED\uA5A5\005\000\u00C0\u1FCD\000\000\u1FDD\000"+
+        "\u00C8\000\000\000\u00CC\uA5A5\004\000\u01F8\u00D2\uA5A5\004\000\u00D9"+
+        "\000\u1E80\000\u1EF2\000\u00E0\000\000\000\u00E8\000\000\000\u00EC\uA5A5"+
+        "\004\000\u01F9\u00F2\uA5A5\004\000\u00F9\000\u1E81\000\u1EF3\000\000\000"+
+        "\u1EA6\uA5A5\007\000\u1EC0\uA5A5\010\000\u1ED2\uA5A5\006\000\u01DB\000"+
+        "\000\000\u1EA7\uA5A5\007\000\u1EC1\uA5A5\010\000\u1ED3\uA5A5\006\000\u01DC"+
+        "\uA5A5\004\000\u1EB0\u1EB1\uA5A5\012\000\u1E14\u1E15\uA5A5\035\000\u1E50"+
+        "\u1E51\uA5A5%\000\u1EDC\u1EDD\u1EEA\u1EEB\uA5A5.\000\u1FBA\u1FC8\u1FCA"+
+        "\u1FDA\u1FF8\000\u1FEA\u1FFA\000\000\u1F70\u1F72\u1F74\u1F76\u1F78\000"+
+        "\u1F7A\u1F7C\u1FD2\u1FE2\uA5A5\004\000\u0400\000\000\u040D\uA5A5\010\000"+
+        "\u0450\000\000\u045D\uA5A5:\000\u1F02\u1F03\uA5A5\006\000\u1F0A\u1F0B"+
+        "\uA5A5\006\000\u1F12\u1F13\u1F1A\u1F1B\u1F22\u1F23\uA5A5\006\000\u1F2A"+
+        "\u1F2B\uA5A5\006\000\u1F32\u1F33\u1F3A\u1F3B\u1F42\u1F43\u1F4A\u1F4B\u1F52"+
+        "\u1F53\u1F5B\u1F62\u1F63\uA5A5\006\000\u1F6A\u1F6B\uA5A5\011\000\u1F82"+
+        "\u1F83\u1F8A\u1F8B\u1F92\u1F93\u1F9A\u1F9B\u1FA2\u1FA3\u1FAA\u1FAB\u1FB2"+
+        "\000\uFE8E\u1FC2\000\uFE17\u1FF2\000\uFBC6\uA5A5\016\000\u0385\uA5A5\004"+
+        "\000\u03D3\u00C1\u1FCE\000\u0106\u1FDE\000\u00C9\000\u01F4\000\u00CD\000"+
+        "\u1E30\u0139\u1E3E\u0143\u00D3\u1E54\u0154\u015A\000\u00DA\000\u1E82\000"+
+        "\u00DD\u0179\u00E1\000\u0107\000\u00E9\000\u01F5\000\u00ED\000\u1E31\u013A"+
+        "\u1E3F\u0144\u00F3\u1E55\u0155\u015B\000\u00FA\000\u1E83\000\u00FD\u017A"+
+        "\000\000\u1EA4\000\000\u01FA\u01FC\u1E08\000\000\u1EBE\uA5A5\004\000\u1E2E"+
+        "\000\000\000\u1ED0\u1E4C\000\u01FE\000\000\000\u01D7\000\000\000\u1EA5"+
+        "\000\000\u01FB\u01FD\u1E09\000\000\u1EBF\uA5A5\004\000\u1E2F\000\000\000"+
+        "\u1ED1\u1E4D\000\u01FF\000\000\000\u01D8\uA5A5\004\000\u1EAE\u1EAF\uA5A5"+
+        "\012\000\u1E16\u1E17\uA5A5\035\000\u1E52\u1E53\uA5A5\020\000\u1E78\u1E79"+
+        "\uA5A5\023\000\u1EDA\u1EDB\u1EE8\u1EE9\uA5A5.\000\u0386\u0388\u0389\u038A"+
+        "\u038C\000\u038E\u038F\000\000\u03AC\u03AD\u03AE\u03AF\u03CC\000\u03CD"+
+        "\u03CE\u0390\u03B0\000\000\000\u0403\uA5A5\004\000\u040C\uA5A5\006\000"+
+        "\u0453\uA5A5\004\000\u045C\uA5A59\000\u1F04\u1F05\uA5A5\006\000\u1F0C"+
+        "\u1F0D\uA5A5\006\000\u1F14\u1F15\u1F1C\u1F1D\u1F24\u1F25\uA5A5\006\000"+
+        "\u1F2C\u1F2D\uA5A5\006\000\u1F34\u1F35\u1F3C\u1F3D\u1F44\u1F45\u1F4C\u1F4D"+
+        "\u1F54\u1F55\u1F5D\u1F64\u1F65\uA5A5\006\000\u1F6C\u1F6D\uA5A5\011\000"+
+        "\u1F84\u1F85\u1F8C\u1F8D\u1F94\u1F95\u1F9C\u1F9D\u1FA4\u1FA5\u1FAC\u1FAD"+
+        "\u1FB4\000\uFE8D\u1FC4\000\uFE16\u1FF4\000\uFBC5\uA5A5\024\000\u00C2\000"+
+        "\000\u0108\000\000\u00CA\000\u011C\u0124\u00CE\u0134\uA5A5\004\000\u00D4"+
+        "\000\000\u015C\000\u00DB\000\u0174\000\u0176\u1E90\u00E2\000\u0109\000"+
+        "\u00EA\000\u011D\u0125\u00EE\u0135\uA5A5\004\000\u00F4\000\000\u015D\000"+
+        "\u00FB\000\u0175\000\u0177\u1E91\uA5A5\011\000\u1EAC\u1EAD\uA5A5\026\000"+
+        "\u1EC6\u1EC7\uA5A5\022\000\u1ED8\u1ED9\uA5A5\025\000\u00C3\uA5A5\005\000"+
+        "\u1EBC\000\000\000\u0128\uA5A5\004\000\u00D1\u00D5\uA5A5\004\000\u0168"+
+        "\u1E7C\000\000\u1EF8\000\u00E3\000\000\000\u1EBD\000\000\000\u0129\uA5A5"+
+        "\004\000\u00F1\u00F5\uA5A5\004\000\u0169\u1E7D\000\000\u1EF9\000\000\000"+
+        "\u1EAA\uA5A5\007\000\u1EC4\uA5A5\010\000\u1ED6\uA5A5\012\000\u1EAB\uA5A5"+
+        "\007\000\u1EC5\uA5A5\010\000\u1ED7\uA5A5\013\000\u1EB4\u1EB5\uA5A5\020"+
+        "\000\u1EE0\u1EE1\u1EEE\u1EEF\uA5A5\033\000\u0100\uA5A5\005\000\u0112\000"+
+        "\u1E20\000\u012A\uA5A5\005\000\u014C\uA5A5\004\000\u016A\000\000\000\u0232"+
+        "\000\u0101\000\000\000\u0113\000\u1E21\000\u012B\uA5A5\005\000\u014D\uA5A5"+
+        "\004\000\u016B\000\000\000\u0233\uA5A5\005\000\u01DE\000\u01E2\uA5A5\015"+
+        "\000\u022C\u022A\uA5A5\004\000\u01D5\uA5A5\005\000\u01DF\000\u01E3\uA5A5"+
+        "\015\000\u022D\u022B\uA5A5\004\000\u01D6\uA5A5\023\000\u01EC\u01ED\uA5A5"+
+        "$\000\u01E0\u01E1\uA5A5\006\000\u0230\u0231\uA5A5\005\000\u1FB9\000\000"+
+        "\u1FD9\000\000\u1FE9\000\000\000\u1FB1\000\000\u1FD1\000\000\u1FE1\uA5A5"+
+        "\012\000\u04E2\000\000\u04EE\uA5A5\010\000\u04E3\000\000\u04EF\uA5A5-"+
+        "\000\u1E38\u1E39\uA5A5\034\000\u1E5C\u1E5D\uA5A5\030\000\uFED5\000\uFE8C"+
+        "\uA5A5\032\000\u0102\uA5A5\005\000\u0114\000\u011E\000\u012C\uA5A5\005"+
+        "\000\u014E\uA5A5\004\000\u016C\uA5A5\005\000\u0103\000\000\000\u0115\000"+
+        "\u011F\000\u012D\uA5A5\005\000\u014F\uA5A5\004\000\u016D\uA5A5\027\000"+
+        "\u1E1C\u1E1D\uA5A5\013\000\u1FB8\000\000\u1FD8\000\000\u1FE8\000\000\000"+
+        "\u1FB0\000\000\u1FD0\000\000\u1FE0\uA5A5\005\000\u04D0\000\u04D6\u04C1"+
+        "\000\u0419\000\000\u040E\000\000\000\u04D1\000\u04D7\u04C2\000\u0439\000"+
+        "\000\u045E\uA5A5\037\000\u1EB6\u1EB7\uA5A5$\000\uFED4\000\uFE8B\uA5A5"+
+        "\027\000\u1E9B\000\000\u0226\000\u1E02\u010A\000\u1E0A\u0116\u1E1E\u0120"+
+        "\u1E22\u0130\000\000\000\u1E40\u1E44\u022E\u1E56\u1E58\u1E60\u1E6A\000"+
+        "\000\u1E86\u1E8A\u1E8E\u017B\u0227\u1E03\u010B\u1E0B\u0117\u1E1F\u0121"+
+        "\u1E23\uA5A5\004\000\u1E41\u1E45\u022F\u1E57\u1E59\u1E61\u1E6B\000\000"+
+        "\u1E87\u1E8B\u1E8F\u017C\uA5A5\020\000\u1E64\u1E65\000\000\u1E66\u1E67"+
+        "\uA5A5'\000\u1E68\u1E69\uA5A5\014\000\u03D4\u00C4\uA5A5\005\000\u00CB"+
+        "\000\000\u1E26\u00CF\uA5A5\005\000\u00D6\uA5A5\004\000\u00DC\000\u1E84"+
+        "\u1E8C\u0178\000\u00E4\000\000\000\u00EB\000\000\u1E27\u00EF\uA5A5\005"+
+        "\000\u00F6\000\000\000\u1E97\u00FC\000\u1E85\u1E8D\u00FF\uA5A5\025\000"+
+        "\u1E4E\uA5A5\033\000\u1E4F\uA5A5)\000\u1E7A\u1E7B\uA5A5&\000\u03AA\000"+
+        "\000\u03AB\uA5A5\006\000\u03CA\000\000\u03CB\uA5A5\004\000\u0407\u04D2"+
+        "\000\u0401\u04DC\u04DE\u04E4\000\u04E6\u04F0\u04F4\u04F8\u04EC\u04D3\000"+
+        "\u0451\u04DD\u04DF\u04E5\000\u04E7\u04F1\u04F5\u04F9\u04ED\u0457\000\000"+
+        "\u04DA\u04DB\u04EA\u04EB\uA5A5\030\000\u1EA2\uA5A5\005\000\u1EBA\000\000"+
+        "\000\u1EC8\uA5A5\005\000\u1ECE\uA5A5\004\000\u1EE6\000\000\000\u1EF6\000"+
+        "\u1EA3\000\000\000\u1EBB\000\000\000\u1EC9\uA5A5\005\000\u1ECF\uA5A5\004"+
+        "\000\u1EE7\000\000\000\u1EF7\000\000\000\u1EA8\uA5A5\007\000\u1EC2\uA5A5"+
+        "\010\000\u1ED4\uA5A5\012\000\u1EA9\uA5A5\007\000\u1EC3\uA5A5\010\000\u1ED5"+
+        "\uA5A5\013\000\u1EB2\u1EB3\uA5A5\020\000\u1EDE\u1EDF\u1EEC\u1EED\uA5A5"+
+        "\033\000\u00C5\uA5A5\024\000\u016E\uA5A5\005\000\u00E5\uA5A5\022\000\u016F"+
+        "\000\u1E98\000\u1E99\uA5A5\035\000\u0150\uA5A5\004\000\u0170\uA5A5\023"+
+        "\000\u0151\uA5A5\004\000\u0171\uA5A5\042\000\u04F2\uA5A5\013\000\u04F3"+
+        "\uA5A5\042\000\u01CD\000\000\u010C\000\u010E\u011A\000\u01E6\u021E\u01CF"+
+        "\000\u01E8\u013D\000\u0147\u01D1\000\u0158\u0160\u0164\u01D3\uA5A5\004"+
+        "\000\u017D\u01CE\000\u010D\u010F\u011B\000\u01E7\u021F\u01D0\u01F0\u01E9"+
+        "\u013E\000\u0148\u01D2\000\u0159\u0161\u0165\u01D4\uA5A5\004\000\u017E"+
+        "\uA5A5\032\000\u01D9\uA5A5\033\000\u01DA\uA5A5\032\000\u01EE\uA5A5,\000"+
+        "\u01EF\uA5A5\015\000\u0200\uA5A5\005\000\u0204\000\000\000\u0208\uA5A5"+
+        "\005\000\u020C\000\u0210\000\000\u0214\uA5A5\005\000\u0201\000\000\000"+
+        "\u0205\000\000\000\u0209\uA5A5\005\000\u020D\000\u0211\000\000\u0215\uA5A5"+
+        "\023\000\u0476\u0477\uA5A5\034\000\u0202\uA5A5\005\000\u0206\000\000\000"+
+        "\u020A\uA5A5\005\000\u020E\000\u0212\000\000\u0216\uA5A5\005\000\u0203"+
+        "\000\000\000\u0207\000\000\000\u020B\uA5A5\005\000\u020F\000\u0213\000"+
+        "\000\u0217\uA5A5$\000\u1F08\u1F18\u1F28\u1F38\u1F48\000\000\u1F68\000"+
+        "\000\u1F00\u1F10\u1F20\u1F30\u1F40\u1FE4\u1F50\u1F60\uA5A5\036\000\u1F80"+
+        "\000\u1F88\u1F90\000\u1F98\u1FA0\000\u1FA8\uA5A5'\000\u1F09\u1F19\u1F29"+
+        "\u1F39\u1F49\u1FEC\u1F59\u1F69\000\000\u1F01\u1F11\u1F21\u1F31\u1F41\u1FE5"+
+        "\u1F51\u1F61\uA5A5\036\000\u1F81\000\u1F89\u1F91\000\u1F99\u1FA1\000\u1FA9"+
+        "\uA5A5$\000\u01A0\uA5A5\004\000\u01AF\uA5A5\023\000\u01A1\uA5A5\004\000"+
+        "\u01B0\uA5A5\026\000\u1EDC\u1EDA\uFE1F\u1EE0\uFE15\000\u1EEA\u1EE8\uFDDD"+
+        "\uFDC6\uA5A5\022\000\u1EDD\u1EDB\uFC9B\u1EE1\uFC85\000\u1EEB\u1EE9\uFC47"+
+        "\uFC3B\uA5A5\017\000\uFD2D\uFD1C\uFD0D\uFCFE\uFCF0\uFCE2\uA5A5\014\000"+
+        "\u1EEE\u1EEF\uFBB7\uFBA6\uFB95\uFB84\uFB72\uFB63\uFB54\uFB42\uA5A5\024"+
+        "\000\uFB73\uFB64\uFB55\uFB43\uFB2A\uFFA1\uFF8E\uFF7A\uFF64\uFF53\uFF43"+
+        "\uFF34\uA5A5\034\000\uFD79\uFD6D\uFD5D\uFD4D\uA5A5\004\000\uFD0E\uFCFF"+
+        "\uFCF1\uFCE3\uA5A5\012\000\uFC0C\uFBFC\uFBEB\uFBE2\uFBD8\uFBC8\uFBB8\uFBA7"+
+        "\uA5A5\017\000\uFD77\uFD6B\uFD5B\uFD4B\uFD43\uFD3A\uFD2B\uFD1A\uA5A5\032"+
+        "\000\uFB92\uFB81\uFB70\uFB61\uFB52\uFB41\uFB29\uFFA0\uFF8D\uFF79\uA5A5"+
+        "\036\000\u1EE2\u1EE3\u1EDE\u1EDF\uFBE1\uFBD6\uFBC4\uFBB6\uFBA5\uFB94\uFB83"+
+        "\uFB71\uFB62\uFB53\uA5A5\012\000\u1EF0\u1EF1\u1EEC\u1EED\uA5A5\033\000"+
+        "\u1EA0\000\u1E04\000\000\u1E0C\u1EB8\000\000\u1E24\u1ECA\000\u1E32\u1E36"+
+        "\u1E42\u1E46\u1ECC\000\u1E5A\u1E62\u1E6C\u1EE4\u1E7E\u1E88\000\u1EF4\u1E92"+
+        "\u1EA1\u1E05\000\u1E0D\u1EB9\000\000\u1E25\u1ECB\000\u1E33\u1E37\u1E43"+
+        "\u1E47\u1ECD\000\u1E5B\u1E63\u1E6D\u1EE5\u1E7F\u1E89\000\u1EF5\u1E93\uFEBC"+
+        "\uFEB6\u1EAC\uFEA5\uFE9F\uFE98\000\000\uFE7B\uFE6F\u1EC6\uFE5C\uFE50\uFE4A"+
+        "\uFE43\uFE3D\uFE2F\uFE26\uFE22\u1ED8\uFE1B\uFE13\000\uFDF5\uFDE9\uFDD8"+
+        "\uFDC2\uFDB1\uFD97\uFD8B\u1EAD\uFD75\uFD68\uFD58\000\000\uFD38\uFD28\u1EC7"+
+        "\uFD08\uFCF9\uFCEB\uFCDD\uFCD1\uFCBB\uFCAD\uFCA3\u1ED9\uFC90\uFC81\000"+
+        "\uFC60\uFC52\uFC46\uFC3A\uFC29\uFC14\uFC11\uFC08\u1EB6\u1EB7\uA5A5\010"+
+        "\000\uFB3C\uFB26\uFF75\uFF60\uFF4F\uFF3F\uFF30\uFF25\uFF0C\uFEFB\uA5A5"+
+        "\006\000\uFEB7\uFEAF\uFE99\uFE8A\uFE84\uFE7D\uFE71\uFE67\uFE4B\uFE14\uFE08"+
+        "\uFDEB\uFDDA\uFD99\uFD8D\uFD6A\uFD5A\uFD29\uFD18\uFD0A\uFCFB\uFCED\uFCDF"+
+        "\uFCBC\uFCAE\uFC91\uFC82\uFC75\uFC6B\uFC61\uFC53\uFC2B\uFC1C\uFC0A\uFBF9"+
+        "\uFBD4\uFBC2\uFBB2\uFBA1\uFB90\uFB7F\uFB6E\uFB5F\uFB4F\uFB3E\uFF8A\uFF76"+
+        "\uFF61\uFF50\uFF40\uFF31\uFF26\uFF1B\uFF14\uFF0D\uFEFC\u1EE2\u1EE3\u1EF0"+
+        "\u1EF1\000\uFBB4\uFBA3\uFB91\uFB80\uFB6F\uFB60\uFB51\uFB40\uFB28\uFF9F"+
+        "\uFF8C\uFF78\uFF63\uFF52\uFF42\uFF33\uFF1D\uFF16\uFF0F\uFEFE\000\000\uFEC4"+
+        "\uFEBF\uA5A5\004\000\uFE3F\uFE37\uFE32\uFE29\uFE0A\uFDFF\uFDF8\uFDED\uFDDC"+
+        "\uFDC5\uFDB4\uFDAA\uFDA1\uFD9A\uFD8E\uFD82\uFD78\uFD6C\uFD5C\uFD4C\uFD44"+
+        "\uFD3B\uFD2C\uFD1B\uFD0C\uFCFD\uFCEF\uFCE1\uA5A5\004\000\uFC93\uFC84\uFC2D"+
+        "\uFC1E\000\000\uFC0B\uFBFA\uFBE9\uFBE0\uFBD5\uFBC3\uFBB5\uFBA4\uFB93\uFB82"+
+        "\uA5A5\023\000\uFC36\uFC24\uFBDD\uFBCF\uA5A5\006\000\uFB37\uFB20\uFF99"+
+        "\uFF85\uA5A5\006\000\uFEEA\uFEE3\000\000\uFED0\uFEC9\uA5A5\004\000\uFE95"+
+        "\uFE89\uFE82\uFE7A\uA5A5\014\000\uFE1A\uFE0F\uFE03\uFDFA\uFDD2\uFDBE\uA5A5"+
+        "\006\000\uFD71\uFD63\uFD53\uFD47\uFD3F\uFD35\uFD24\uFD16\uFCCF\uFCC4\uA5A5"+
+        "\006\000\u1E68\u1E69\000\000\uFC44\uFC37\uFC25\uFC18\000\000\uFC04\uFBF3"+
+        "\uA5A5\014\000\uFB23\uFF9B\uFF87\uFF72\uFF5D\uFF4C\uFF24\uFF19\uFF12\uFF08"+
+        "\uFEF7\uFEEC\uFEE5\uFEDD\uFEAE\uFEA4\uFE9E\uFE97\000\uFE5B\uFE4F\uFE49"+
+        "\000\000\uFE12\uFE06\uFDFC\uFDF4\uFDE8\uFDD7\uFDC0\uFDB0\uFDA7\uFD9F\000"+
+        "\000\uFD80\uFD74\uFD67\uFD57\uFD49\uFD41\uFD37\uFD27\uA5A5\004\000\uFCDC"+
+        "\uFCD0\uFCC5\uFCBA\uFCAC\uFCA2\uFC9A\uFC8F\uFC80\uFC74\uFC6A\uFC5F\000"+
+        "\000\uFC39\uFC28\uA5A5\004\000\uFBF7\uFBE7\uFBDE\uFBD1\uFBBF\uFBAF\uFB9E"+
+        "\uFB8E\uFB7D\uFB6C\000\000\uFB3A\uFB24\uFF9D\uFF89\uFF74\uFF5F\uFF4E\uFF3E"+
+        "\uA5A5\004\000\uFF0B\uFEFA\uFEED\uFEE6\uFEDE\uFED9\uFED2\uFECB\uFEC2\uFEBD"+
+        "\000\000\uFEA6\uFEA0\uFE83\uFE7C\uFE70\uFE66\uA5A5 \000\u1E72\uA5A5\030"+
+        "\000\u1E73\uA5A5\034\000\uFDF3\uFDE6\uFDD5\uFDC1\uA5A5\030\000\uFC5D\uFC50"+
+        "\uFC45\uFC38\uA5A5!\000\uFBD2\uFBC0\uFBB0\uFB9F\uFB8F\uFB7E\uFB6D\uFB5E"+
+        "\uFB4E\uFB3D\uA5A5\026\000\uFB50\uFB3F\uFB27\uFF9E\uFF8B\uFF77\uFF62\uFF51"+
+        "\uFF41\uFF32\uA5A5\004\000\uFD0B\uFCFC\uFCEE\uFCE0\uA5A5)\000\uFB21\uFF9A"+
+        "\uFF86\uFF71\uA5A5\030\000\uFF09\uFEF8\uA5A5\033\000\u1E00\uA5A5\032\000"+
+        "\u1E01\uA5A5\030\000\uFEBB\uFEB4\uFEAC\uFEA3\uFE9D\uFE96\uA5A5\026\000"+
+        "\uFD95\uFD89\uFD7F\uFD73\uFD65\uFD55\uA5A5\027\000\uFC10\uFC05\uFBF4\uFBE6"+
+        "\uA5A5\025\000\uFBB3\uFBA2\uA5A5\016\000\uFF1C\uFF15\uFF0E\uFEFD\uA5A5"+
+        "\012\000\uFE31\uFE28\uFE09\uFDFE\uFDF7\uFDEC\uA5A5\032\000\uFC2C\uFC1D"+
+        "\uA5A5\031\000\uFE10\uFE04\uFDFB\uFDF2\uFDE4\uFDD3\uFDBF\uFDAF\uFDA6\uFD9E"+
+        "\000\000\uFD7E\uFD72\uFD64\uFD54\uFD48\uFD40\uFD36\uFD25\uA5A5 \000\u0218"+
+        "\u021A\uA5A5\027\000\u0219\u021B\uA5A5\026\000\uFC73\uFC69\uFC5E\uFC51"+
+        "\uFC27\uFC1A\uFC07\uFBF6\uA5A5#\000\uFC6F\uFC65\000\000\uFC40\uFC33\uFC22"+
+        "\uFC16\000\000\uFC01\uFBF0\uA5A5\037\000\uFE5A\uA5A5(\000\u00C7\000\u1E10"+
+        "\u0228\000\u0122\u1E28\000\000\u0136\u013B\000\u0145\000\000\u0156\u015E"+
+        "\u0162\uA5A5\010\000\u00E7\u1E11\u0229\000\u0123\u1E29\000\000\u0137\u013C"+
+        "\000\u0146\000\000\u0157\u015F\u0163\uA5A5\016\000\uFE78\uFE6D\uFE64\uFE59"+
+        "\uA5A5\004\000\uFE2E\uA5A5\023\000\uFD34\uFD23\uFD15\uFD05\uA5A5\004\000"+
+        "\uFCB8\uA5A5\020\000\u1E08\u1E09\uFB9B\uFB8B\uFB7A\uFB69\uFB5B\uFB4B\uFB38"+
+        "\uFB22\uFF70\uFF5C\u1E1C\u1E1D\uFF2E\uFF23\uFF07\uFEF6\uFEEB\uFEE4\uFEDC"+
+        "\uFED8\uFED1\uFECA\uFEB5\uFEAD\uA5A5\007\000\uFE11\uFE05\uFDE5\uFDD4\uFD96"+
+        "\uFD8A\uFD66\uFD56\uA5A5\006\000\uFCB9\uFCAB\uFC8E\uFC7F\uFC72\uFC68\uFC5C"+
+        "\uFC4F\uFC26\uFC19\uFC06\uFBF5\uA5A5\016\000\uFED3\uFECC\uFEC3\uFEBE\000"+
+        "\000\uFE5D\uFE51\uFE3E\uFE36\uA5A5\006\000\uFDDB\uFDC4\uFDB3\uFDA9\uA5A5"+
+        "\010\000\uFD42\uFD39\uFD2A\uFD19\uA5A5\004\000\uFCD2\uFCC6\uFCBD\uFCAF"+
+        "\uFC92\uFC83\uA5A5#\000\uFBDA\uFBCB\uFBBA\uFBA9\uFB97\uFB87\uFB57\uFB45"+
+        "\uFB31\uFFAA\uFF95\uFF81\uFF6B\uFF58\uFF48\uFF39\uFF04\uFEF3\uFEE8\uFEE1"+
+        "\uFEDA\uFED6\uFECE\uFEC7\uFEB1\uFEA9\uA5A5\004\000\uFE80\uFE76\uFE6B\uFE61"+
+        "\uFE56\uFE4D\uFE46\uFE41\uFE3A\uFE34\uFE2D\uFE24\uFE20\uFE1C\uA5A5\004"+
+        "\000\uFDCD\uFDB9\uFDAB\uFDA3\uFD9C\uFD92\uFD86\uFD7B\uA5A5\010\000\uFCCB"+
+        "\uFCC1\uFCB5\uFCA7\uFC9E\uFC96\uFC89\uFC7A\uFC6E\uFC64\uFC58\uFC4B\uFC3F"+
+        "\uFC32\uFC21\uFC15\uFC12\uFC0D\uFC00\uFBEF\uFBE3\uFBDB\uFBCD\uFBBC\uFBAB"+
+        "\uFB99\uA5A5\030\000\uFE63\uFE58\uA5A5\032\000\uFCF6\uFCE8\uFCD9\uFCCE"+
+        "\uFCC3\uFCB7\uFCAA\uFCA1\uFC99\uFC8D\uFC7E\uFC71\uFC67\uFC5B\uFC4E\uFC43"+
+        "\uA5A5\033\000\u0104\uA5A5\005\000\u0118\000\000\000\u012E\uA5A5\005\000"+
+        "\u01EA\uA5A5\004\000\u0172\uA5A5\005\000\u0105\000\000\000\u0119\000\000"+
+        "\000\u012F\uA5A5\005\000\u01EB\uA5A5\004\000\u0173\uA5A5\005\000\uFEB9"+
+        "\uFEB2\uFEAA\uFEA2\uFE9C\uFE93\000\000\uFE77\uFE6C\uFE62\uFE57\uFE4E\uFE47"+
+        "\uFE42\uFE3B\000\uFE25\uFE21\uFE1E\uFE19\uFE0E\000\uFDF1\uFDE3\uFDD0\uFDBC"+
+        "\000\uFD94\uFD88\uFD7D\uFD70\uFD62\uFD52\000\000\uFD33\uFD22\uFD14\uFD04"+
+        "\uFCF5\uFCE7\uFCD8\uFCCD\000\uFCA9\uFCA0\uFC98\uFC8B\uFC7C\000\uFC5A\uFC4D"+
+        "\uFC42\uFC35\000\000\uFC0F\uFC03\uFBF2\uFBE5\uA5A5\012\000\uFF6F\uFF5B"+
+        "\uFF4B\uFF3C\uFF2D\uFF22\uFF06\uFEF5\uA5A5\010\000\uFE94\uFE88\uFE81\uFE79"+
+        "\uFE6E\uFE65\uFE48\uA5A5\010\000\u01EC\u01ED\uFD07\uFCF8\uFCEA\uFCDB\uA5A5"+
+        "\014\000\uFBD0\uFBBE\uFBAD\uFB9C\uFB8C\uFB7B\uFB6A\uFB5C\uFB4C\uFB39\uA5A5"+
+        "\013\000\uFDE7\uFDD6\uFD26\uFD17\000\uFBAE\uFB9D\uFB8D\uFB7C\uFB6B\uFB5D"+
+        "\uFB4D\uFB3B\uFB25\uFF9C\uFF88\uFF73\uFF5E\uFF4D\uFF3D\uFF2F\uFF1A\uFF13"+
+        "\uFF0A\uFEF9\uA5A5\012\000\uFE30\uFE27\uFE07\uFDFD\uFDF6\uFDEA\uFDD9\uFDC3"+
+        "\uFDB2\uFDA8\uFDA0\uFD98\uFD8C\uFD81\uFD76\uFD69\uFD59\uFD4A\uA5A5\004"+
+        "\000\uFD09\uFCFA\uFCEC\uFCDE\uA5A5\006\000\uFC2A\uFC1B\000\000\uFC09\uFBF8"+
+        "\uFBE8\uFBDF\uFBD3\uFBC1\uFBB1\uFBA0\uA5A5\023\000\uFC4A\uFC3E\uA5A5\012"+
+        "\000\uFB2F\uFFA8\uFF93\uFF7F\uFF69\uFF56\uFF46\uFF37\uA5A5\012\000\uFEA1"+
+        "\uFE9B\uFE92\uFE87\uA5A5\032\000\uFD6E\uFD60\uFD50\uFD45\uFD3D\uFD31\uFD20"+
+        "\uFD12\uA5A5\032\000\uFB89\uFB78\uFB67\uFB59\uFB47\uFB33\uFB1D\uFF96\uFF82"+
+        "\uFF6C\uA5A5\022\000\uFE1D\uFE18\uFE0D\uFE02\uFDF9\uFDF0\uFDE2\uFDCF\uFDBB"+
+        "\uFDAD\uFDA4\uFD9D\uFD93\uFD87\uFD7C\uFD6F\uFD61\uFD51\uFD46\uFD3E\uFD32"+
+        "\uFD21\uFD13\uFD03\uFCF4\uFCE6\uFCD7\uFCCC\uFCC2\uFCB6\uFCA8\uFC9F\uFC97"+
+        "\uFC8A\uFC7B\uFC70\uFC66\uFC59\uFC4C\uFC41\uFC34\uFC23\uFC17\uFC13\uFC0E"+
+        "\uFC02\uFBF1\uFBE4\uFBDC\uFBCE\uFBBD\uFBAC\uFB9A\uFB8A\uFB79\uFB68\uFB5A"+
+        "\uFB49\uFB35\uFB1F\uFF98\uFF84\uFF6E\uFF5A\uFF4A\uFF3B\uFF2C\uFF21\uFF18"+
+        "\uFF11\uFF05\uFEF4\uFEE9\uFEE2\uFEDB\uFED7\uFECF\uFEC8\uFEC1\uFEBA\uFEB3"+
+        "\uFEAB\uA5A5\026\000\u1E12\u1E18\uA5A5\006\000\u1E3C\000\u1E4A\uA5A5\004"+
+        "\000\u1E70\u1E76\uA5A5\010\000\u1E13\u1E19\uA5A5\006\000\u1E3D\000\u1E4B"+
+        "\uA5A5\004\000\u1E71\u1E77\uA5A5\015\000\uFE75\uFE6A\uFE60\uFE55\uA5A5"+
+        "\004\000\uFE2C\uA5A5\006\000\uFDEF\uFDE0\uFDCB\uFDB8\uA5A5\011\000\uFD2F"+
+        "\uFD1E\uFD10\uFD01\uA5A5\004\000\uFCB4\uA5A5\006\000\uFC57\uFC49\uFC3D"+
+        "\uFC31\uA5A5\016\000\uFB30\uFFA7\uFF68\uFF55\uFF45\uFF36\uFF29\uFF20\uFF03"+
+        "\uFEF2\uA5A5\017\000\uFE0C\uFE01\uFDE1\uFDCC\uFD90\uFD84\uFD5F\uFD4F\uA5A5"+
+        "\020\000\uFBFF\uFBEE\uFBCC\uFBBB\uFBAA\uFB98\uFB88\uFB77\uFB66\uFB58\uFB48"+
+        "\uFB34\uA5A5\026\000\uFB4A\uFB36\uFB1E\uFF97\uFF83\uFF6D\uFF59\uFF49\uFF3A"+
+        "\uFF2B\uA5A5\014\000\uFE3C\uFE35\uA5A5\006\000\uFDD1\uFDBD\uFDAE\uFDA5"+
+        "\uA5A5\014\000\uFD06\uFCF7\uFCE9\uFCDA\uA5A5)\000\uFBD9\uFBC9\uA5A5\006"+
+        "\000\uFB2C\uFFA4\uFF91\uFF7D\uA5A5$\000\uFDC8\uFDB6\uFBFD\uFBEC\uA5A5"+
+        "\014\000\uFFA6\uFF92\uFF7E\uFF67\uA5A5\017\000\uFE54\uA5A5\034\000\uFCD5"+
+        "\uFCCA\uFCC0\uFCB3\uFCA6\uFC9D\uFC95\uFC88\uFC78\uFC6D\uFC63\uFC56\uA5A5"+
+        " \000\uFF02\uFEF1\uA5A5$\000\u1E2A\uA5A5\030\000\u1E2B\uA5A5&\000\uFEB0"+
+        "\uFEA8\uA5A5\027\000\uFC8C\uFC7D\uA5A5\025\000\uFEE7\uFEE0\000\000\uFECD"+
+        "\uFEC6\uA5A5'\000\u1E1A\000\000\000\u1E2C\uA5A5\012\000\u1E74\uA5A5\011"+
+        "\000\u1E1B\000\000\000\u1E2D\uA5A5\012\000\u1E75\uA5A5\015\000\uFE73\uFE68"+
+        "\uFE5E\uFE53\uFE4C\uFE44\uFE40\uFE38\uA5A5\007\000\uFDEE\uFDDE\uFDC9\uFDB7"+
+        "\uA5A5\011\000\uFD2E\uFD1D\uFD0F\uFD00\uFCF2\uFCE4\uFCD4\uFCC9\uA5A5\007"+
+        "\000\uFC55\uFC48\uFC3C\uFC30\uA5A5\020\000\uFF66\uFF54\uFF44\uFF35\uFF27"+
+        "\uFF1E\uFF00\uFEEF\uA5A5\010\000\uFE91\uFE86\uFE7F\uFE74\uFE69\uFE5F\uFE45"+
+        "\uA5A5\032\000\uFBCA\uFBB9\uFBA8\uFB96\uFB85\uFB75\uFB65\uFB56\uFB44\uFB2E"+
+        "\uA5A5\022\000\uFB86\uFB76\000\000\uFB46\uFB32\uFFA9\uFF94\uFF80\uFF6A"+
+        "\uFF57\uFF47\uFF38\uFF2A\uA5A5\024\000\uFDCE\uFDBA\uFDAC\uFDA2\uFD9B\uFD91"+
+        "\uFD85\uFD7A\uA5A5\010\000\uFD02\uFCF3\uFCE5\uFCD6\uA5A51\000\uFB2B\uFFA2"+
+        "\uFF8F\uFF7B\uA5A5\020\000\uFE8F\uFE85\uA5A5\042\000\uFFA3\uFF90\uFF7C"+
+        "\uFF65\uA5A5,\000\uFCD3\uFCC8\uFCBF\uFCB1\uFCA4\uFC9C\uFC94\uFC86\uFC76"+
+        "\uFC6C\uFC62\uFC54\000\000\uFC2F\uFC20\uA5A5\034\000\uFEFF\uFEEE\uA5A5"+
+        "\035\000\u1E06\000\000\u1E0E\uA5A5\006\000\u1E34\u1E3A\000\u1E48\000\000"+
+        "\u1E5E\000\u1E6E\uA5A5\005\000\u1E94\000\u1E07\000\u1E0F\000\000\000\u1E96"+
+        "\000\000\u1E35\u1E3B\000\u1E49\000\000\u1E5F\000\u1E6F\uA5A5\005\000\u1E95"+
+        "\uA5A5\020\000\uFE2B\uA5A5\033\000\uFCB0\uA5A5\030\000\uFB2D\uFFA5\uA5A5"+
+        "\017\000\uFEA7\uA5A5\007\000\uFE0B\uFE00\uFDDF\uFDCA\uFD8F\uFD83\uFD5E"+
+        "\uFD4E\uA5A5\006\000\uFCB2\uFCA5\uFC87\uFC77\uA5A5\006\000\uFBFE\uFBED"+
+        "\uA5A5\017\000\uFF28\uFF1F\uFF17\uFF10\uFF01\uFEF0\uA5A5\033\000\uFEC0"+
+        "\uFEB8\uA5A5\004\000\uFE39\uFE33\uA5A5\022\000\uFD3C\uFD30\uFD1F\uFD11"+
+        "\uA5A5\011\000\uFC79\uA5A5!\000\uFC2E\uFC1F\uFBD7\uFBC7\uA5A5\021\000"+
+        "\uFEDF\000\000\000\uFEC5\uA5A5\006\000\uFE7E\uFE72\uA5A5\020\000\uFDC7"+
+        "\uFDB5\uA5A5\016\000\uFCC7\uFCBE\uA5A5\020\000\uFBFB\uFBEA\uA5A5\034\000"+
+        "\uFE9A\uFE90\000\uFE52\uA5A5 \000\u226E\u2260\000\u226F\uA5A5-\000\u219A"+
+        "\u219B\u21AE\u21CD\u21CF\u21CE\u2204\u2209\u220C\u2224\u2226\u2241\u2244"+
+        "\u2247\u2249\u226D\u2262\u2270\u2271\u2274\u2275\u2278\u2279\u2280\u2281"+
+        "\u22E0\u22E1\u2284\u2285\u2288\u2289\u22E2\u22E3\u22AC\u22AD\u22AE\u22AF"+
+        "\u22EA\u22EB\u22EC\u22ED\uA5A5\005\000\u1FC1\uA5A5\006\000\u1FCF\000\000"+
+        "\u1FDF\uA5A5\030\000\u1FB6\000\u1FC6\u1FD6\000\000\u1FE6\u1FF6\u1FD7\u1FE7"+
+        "\uA5A5.\000\u1F06\u1F07\uA5A5\006\000\u1F0E\u1F0F\uA5A5\012\000\u1F26"+
+        "\u1F27\uA5A5\006\000\u1F2E\u1F2F\uA5A5\006\000\u1F36\u1F37\u1F3E\u1F3F"+
+        "\uA5A5\004\000\u1F56\u1F57\u1F5F\u1F66\u1F67\uA5A5\006\000\u1F6E\u1F6F"+
+        "\uA5A5\011\000\u1F86\u1F87\u1F8E\u1F8F\u1F96\u1F97\u1F9E\u1F9F\u1FA6\u1FA7"+
+        "\u1FAE\u1FAF\u1FB7\000\000\u1FC7\000\000\u1FF7\uA5A5)\000\u1FBC\000\u1FCC"+
+        "\uA5A5\004\000\u1FFC\u1FB4\u1FC4\u1FB3\000\u1FC3\uA5A5\004\000\u1FF3\000"+
+        "\000\u1FF4\uA5A5-\000\u1F80\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87"+
+        "\u1F88\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\uA5A5\004\000\u1F90\u1F91"+
+        "\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98\u1F99\u1F9A\u1F9B\u1F9C\u1F9D"+
+        "\u1F9E\u1F9F\uA5A5\013\000\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7"+
+        "\u1FA8\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB2\u1FC2\u1FF2\uA5A5"+
+        "\015\000\u1FB7\000\000\u1FC7\000\000\u1FF7\uA5A5\035\000\uFB1D\uA5A5\042"+
+        "\000\u0622\uA5A5\037\000\u0623\u0624\u0626\u06C2\u06D3\u06C0\uA5A5\030"+
+        "\000\uFE2A\uFE23\u0625\uA5A5%\000\u0929\u0931\u0934\uA5A5 \000\u09CB\uA5A5"+
+        "\037\000\u09CC\uA5A5 \000\u0B4B\uA5A5\037\000\u0B48\uA5A5\037\000\u0B4C"+
+        "\uA5A5!\000\u0BCA\u0BCB\uA5A5\035\000\u0B94\u0BCC\000\u0C48\uA5A5!\000"+
+        "\u0CCA\uA5A5\036\000\u0CC0\u0CC7\u0CCB\uA5A5\036\000\u0CC8\uA5A5!\000"+
+        "\u0D4A\u0D4B\uA5A5\036\000\u0D4C\uA5A5!\000\u0DDA\000\u0DDD\uA5A5\035"+
+        "\000\u0DDC\uA5A5\037\000\u0DDE\uFB74\uA5A5!\000\u1026\uA5A52\000\u3094"+
+        "\u304C\u304E\u3050\u3052\u3054\u3056\u3058\u305A\u305C\u305E\u3060\u3062"+
+        "\u3065\u3067\u3069\u3070\u3073\u3076\u3079\u307C\u309E\u30F4\u30AC\u30AE"+
+        "\u30B0\u30B2\u30B4\u30B6\u30B8\u30BA\u30BC\u30BE\u30C0\u30C2\u30C5\u30C7"+
+        "\u30C9\u30D0\u30D3\u30D6\u30D9\u30DC\u30F7\u30F8\u30F9\u30FA\u30FE\uA5A5"+
+        " \000\u3071\u3074\u3077\u307A\u307D\uA5A5\021\000\u30D1\u30D4\u30D7\u30DA"+
+        "\u30DD\uA5A5\031\000"
+        );
+
+    static final char[] actionIndex = Utility.RLEStringToCharArray(
+        "\000\u048E\u145A\u145E\u1462\u1466\u146A\u146E\u1471\u1475\u1478\u147C"+
+        "\u147F\u1483\u1487\u148A\u148E\u1492\u1496\u1499\u149C\u14A0\u14A3\u14A7"+
+        "\u14AA\u14AD\u14B0\u14B4\u14B7\u14BB\u14BE\u14C1\u14C4\u14C7\u14CA\u14CD"+
+        "\u14D0\u14D3\u14D6\u14D9\u14DC\u14DF\u14E2\u14E5\u14E8\u14EB\u14EE\u14F2"+
+        "\u14F5\u14F8\u14FB\u14FE\u1501\u1504\u1507\u150A\u150D\u1510\u1513\u1516"+
+        "\u1519\u151C\u151F\u1522\u1526\u1529\u152C\u152F\u1532\u1535\u1538\u153B"+
+        "\u153E\u1541\u1544\u1547\u154A\u154D\u1551\u1554\u1557\u155A\u155D\u1560"+
+        "\u1563\u1566\u1569\u156D\u1570\u1573\u1576\u1579\u157C\u157F\u1582\u1586"+
+        "\u1589\u158C\u158F\u1592\u1595\u1598\u159B\u159E\u15A1\u15A5\u15A8\u15AB"+
+        "\u15AE\u15B1\u15B4\u15B7\u15BB\u15BE\u15C1\u15C4\u15C7\u15CA\u15CD\u15D0"+
+        "\u15D3\u15D6\u15DA\u15DD\u15E0\u15E3\u15E6\u15E9\u15ED\u15F0\u15F3\u15F6"+
+        "\u15F9\u15FC\u1600\u1603\u1606\u1609\u160D\u1611\u1614\u1618\u161B\u161E"+
+        "\u1621\u1624\u1628\u162B\u162E\u1631\u1634\u1638\u163B\u163E\u1641\u1645"+
+        "\u1649\u164C\u1650\u1653\u1656\u1659\u165C\u1660\u1663\u1666\u1669\u166C"+
+        "\u166F\u1672\u1676\u1679\u167C\u167F\u1682\u1685\u1688\u168B\u168E\u1691"+
+        "\u1695\u1698\u169B\u169E\u16A1\u16A4\u16A7\u16AA\u16AE\u16B1\u16B4\u16B7"+
+        "\u16BA\u16BD\u16C1\u16C4\u16C7\u16CB\u16CF\u16D3\u16D6\u16D9\u16DC\u16DF"+
+        "\u16E2\u16E5\u16E9\u16ED\u16F0\u16F3\u16F6\u16F9\u16FC\u16FF\u1702\u1705"+
+        "\u1708\u170B\u170E\u1711\u1714\u1717\u171B\u171E\u1722\u1725\u1729\u172C"+
+        "\u172F\u1732\u1735\u1738\u173B\u173E\u1741\u1744\u1747\u174A\u174D\u1751"+
+        "\u1754\u1758\u175C\u1760\u1763\u1766\u1769\u176C\u1770\u1773\u1776\u177A"+
+        "\u177E\u1781\u1785\u1788\u178B\u178E\u1791\u1794\u1797\u179A\u179D\u17A1"+
+        "\u17A5\u17A8\u17AB\u17AF\u17B2\u17B5\u17B8\u17BB\u17BE\u17C1\u17C4\u17C7"+
+        "\u17CA\u17CD\u17D0\u17D3\u17D7\u17DB\u17DE\u17E1\u17E4\u17E8\u17EB\u17EE"+
+        "\u17F1\u17F4\u17F7\u17FA\u17FD\u1801\u1805\u1809\u180C\u1810\u1814\u1817"+
+        "\u181A\u181D\u1820\u1823\u1826\u1829\u182D\u1830\u1834\u1837\u183A\u183D"+
+        "\u1840\u1843\u1847\u184A\u184E\u1851\u1854\u1858\u185B\u185F\u1862\u1865"+
+        "\u1868\u186B\u186E\u1871\u1875\u1879\u187C\u187F\u1883\u1887\u188A\u188D"+
+        "\u1890\u1893\u1897\u189B\u189E\u18A1\u18A5\u18A9\u18AC\u18AF\u18B2\u18B5"+
+        "\u18B9\u18BC\u18C0\u18C3\u18C6\u18CA\u18CD\u18D0\u18D4\u18D7\u18DA\u18DD"+
+        "\u18E0\u18E3\u18E6\u18E9\u18ED\u18F0\u18F4\u18F7\u18FB\u18FE\u1901\u1905"+
+        "\u1908\u190B\u190E\u1911\u1914\u1917\u191B\u191F\u1923\u1927\u192A\u192E"+
+        "\u1931\u1934\u1938\u193C\u1940\u1944\u1947\u194B\u194E\u1951\u1955\u1958"+
+        "\u195C\u195F\u1963\u1966\u196A\u196D\u1970\u1973\u1976\u1979\u197C\u197F"+
+        "\u1982\u1985\u1988\u198B\u198E\u1991\u1994\u1997\u199A\u199D\u19A0\u19A3"+
+        "\u19A6\u19A9\u19AC\u19AF\u19B2\u19B5\u19B8\u19BB\u19BE\u19C1\u19C4\u19C7"+
+        "\u19CA\u19CD\u19D0\u19D3\u19D6\u19D9\u19DC\u19DF\u19E2\u19E5\u19E8\u19EB"+
+        "\u19EE\u19F1\u19F4\u19F7\u19FA\u19FD\u1A00\u1A03\u1A06\u1A09\u1A0C\u1A0F"+
+        "\u1A12\u1A15\u1A18\u1A1B\u1A1E\u1A21\u1A24\u1A27\u1A2A\u1A2D\u1A30\u1A33"+
+        "\u1A36\u1A39\u1A3C\u1A3F\u1A42\u1A45\u1A48\u1A4B\u1A4E\u1A51\u1A54\u1A57"+
+        "\u1A5A\u1A5D\u1A60\u1A63\u1A66\u1A69\u1A6C\u1A6F\u1A72\u1A76\u1A79\u1A7C"+
+        "\u1A7F\u1A82\u1A85\u1A88\u1A8B\u1A8E\u1A91\u1A94\u1A97\u1A9A\u1A9D\u1AA0"+
+        "\u1AA3\u1AA7\u1AAA\u1AAD\u1AB1\u1AB4\u1AB7\u1ABA\u1ABE\u1AC1\u1AC4\u1AC7"+
+        "\u1ACA\u1ACD\u1AD0\u1AD4\u1AD7\u1ADA\u1ADE\u1AE2\u1AE5\u1AE8\u1AEB\u1AEE"+
+        "\u1AF1\u1AF5\u1AF8\u1AFB\u1AFE\u1B01\u1B04\u1B07\u1B0B\u1B0E\u1B11\u1B15"+
+        "\u1B19\u1B1C\u1B1F\u1B22\u1B26\u1B29\u1B2C\u1B2F\u1B33\u1B37\u1B3B\u1B3E"+
+        "\u1B41\u1B45\u1B48\u1B4C\u1B50\u1B54\u1B58\u1B5B\u1B5E\u1B61\u1B64\u1B67"+
+        "\u1B6A\u1B6D\u1B71\u1B75\u1B78\u1B7C\u1B80\u1B83\u1B86\u1B89\u1B8C\u1B8F"+
+        "\u1B92\u1B95\u1B98\u1B9B\u1B9E\u1BA1\u1BA5\u1BA9\u1BAC\u1BB0\u1BB4\u1BB7"+
+        "\u1BBA\u1BBD\u1BC0\u1BC3\u1BC6\u1BC9\u1BCC\u1BCF\u1BD3\u1BD7\u1BDA\u1BDE"+
+        "\u1BE2\u1BE5\u1BE8\u1BEB\u1BEE\u1BF1\u1BF4\u1BF7\u1BFA\u1BFD\u1C01\u1C04"+
+        "\u1C08\u1C0B\u1C0E\u1C11\u1C14\u1C17\u1C1A\u1C1D\u1C20\u1C24\u1C27\u1C2A"+
+        "\u1C2D\u1C30\u1C33\u1C36\u1C39\u1C3C\u1C3F\u1C42\u1C45\u1C49\u1C4C\u1C4F"+
+        "\u1C52\u1C55\u1C58\u1C5B\u1C5E\u1C61\u1C64\u1C68\u1C6C\u1C6F\u1C72\u1C75"+
+        "\u1C78\u1C7B\u1C7F\u1C82\u1C86\u1C89\u1C8C\u1C8F\u1C92\u1C95\u1C98\u1C9C"+
+        "\u1C9F\u1CA3\u1CA6\u1CA9\u1CAC\u1CAF\u1CB2\u1CB5\u1CB8\u1CBB\u1CBE\u1CC1"+
+        "\u1CC4\u1CC8\u1CCB\u1CCE\u1CD1\u1CD5\u1CD8\u1CDB\u1CDE\u1CE1\u1CE4\u1CE7"+
+        "\u1CEA\u1CED\u1CF0\u1CF3\u1CF6\u1CF9\u1CFC\u1CFF\u1D02\u1D06\u1D09\u1D0C"+
+        "\u1D0F\u1D13\u1D16\u1D19\u1D1C\u1D1F\u1D22\u1D25\u1D28\u1D2B\u1D2E\u1D31"+
+        "\u1D34\u1D37\u1D3A\u1D3D\u1D41\u1D44\u1D48\u1D4B\u1D4E\u1D51\u1D54\u1D57"+
+        "\u1D5A\u1D5D\u1D60\u1D63\u1D66\u1D69\u1D6D\u1D70\u1D74\u1D77\u1D7A\u1D7D"+
+        "\u1D80\u1D83\u1D86\u1D8A\u1D8D\u1D91\u1D94\u1D97\u1D9A\u1D9D\u1DA0\u1DA3"+
+        "\u1DA6\u1DA9\u1DAC\u1DAF\u1DB2\u1DB5\u1DB8\u1DBB\u1DBE\u1DC1\u1DC4\u1DC7"+
+        "\u1DCA\u1DCD\u1DD0\u1DD3\u1DD6\u1DD9\u1DDC\u1DDF\u1DE2\u1DE5\u1DE8\u1DEB"+
+        "\u1DEE\u1DF1\u1DF4\u1DF7\u1DFA\u1DFD\u1E00\u1E03\u1E06\u1E09\u1E0C\u1E0F"+
+        "\u1E12\u1E16\u1E1A\u1E1E\u1E21\u1E24\u1E27\u1E2A\u1E2D\u1E30\u1E34\u1E38"+
+        "\u1E3C\u1E3F\u1E43\u1E46\u1E49\u1E4C\u1E4F\u1E52\u1E56\u1E59\u1E5C\u1E5F"+
+        "\u1E62\u1E65\u1E68\u1E6B\u1E6E\u1E71\u1E74\u1E77\u1E7A\u1E7D\u1E80\u1E83"+
+        "\u1E86\u1E89\u1E8C\u1E8F\u1E92\u1E95\u1E98\u1E9B\u1E9E\u1EA1\u1EA4\u1EA7"+
+        "\u1EAA\u1EAD\u1EB0\u1EB3\u1EB6\u1EB9\u1EBC\u1EBF\u1EC2\u1EC5\u1EC8\u1ECB"+
+        "\u1ECE\u1ED1\u1ED4\u1ED7\u1EDA\u1EDD\u1EE0\u1EE3\u1EE6\u1EE9\u1EEC\u1EEF"+
+        "\u1EF2\u1EF5\u1EF8\u1EFB\u1EFE\u1F01\u1F04\u1F07\u1F0A\u1F0D\u1F10\u1F13"+
+        "\u1F16\u1F19\u1F1C\u1F1F\u1F22\u1F25\u1F28\u1F2B\u1F2E\u1F31\u1F34\u1F38"+
+        "\u1F3B\u1F3F\u1F42\u1F46\u1F49\u1F4C\u1F4F\u1F52\u1F55\u1F59\u1F5C\u1F5F"+
+        "\u1F63\u1F66\u1F69\u1F6D\u1F70\u1F73\u1F76\u1F79\u1F7C\u1F7F\u1F82\u1F85"+
+        "\u1F88\u1F8B\u1F8E\u1F91\u1F94\u1F97\u1F9A\u1F9D\u1FA0\u1FA3\u1FA6\u1FA9"+
+        "\u1FAC\u1FB0\u1FB3\u1FB6\u1FB9\u1FBC\u1FBF\u1FC2\u1FC5\u1FC9\u1FCC\u1FCF"+
+        "\u1FD2\u1FD5\u1FD8\u1FDB\u1FDF\u1FE2\u1FE5\u1FE8\u1FEB\u1FEE\u1FF1\u1FF5"+
+        "\u1FF8\u1FFB\u1FFE\u2001\u2004\u2007\u200B\u200E\u2011\u2014\u2017\u201A"+
+        "\u201D\u2021\u2024\u2027\u202A\u202D\u2030\u2033\u2036\u203A\u203D\u2040"+
+        "\u2043\u2047\u204A\u204D\u2050\u2053\u2056\u2059\u205D\u2060\u2063\u2066"+
+        "\u2069\u206C\u206F\u2073\u2076\u2079\u207C\u207F\u2082\u2085\u2088\u208B"+
+        "\u208E\u2091\u2094\u2097\u209A\u209D\u20A0\u20A4\u20A7\u20AA\u20AD\u20B1"+
+        "\u20B5\u20B8\u20BB\u20BE\u20C1\u20C4\u20C7\u20CA\u20CD\u20D0\u20D3\u20D6"+
+        "\u20DA\u20DD\u20E0\u20E3\u20E7\u20EB\u20EE\u20F1\u20F4\u20F8\u20FB\u20FF"+
+        "\u2103\u2106\u2109\u210C\u2110\u2113\u2117\u211B\u211E\u2121\u2124\u2128"+
+        "\u212B\u212E\u2131\u2134\u2137\u213A\u213D\u2140\u2144\u2148\u214C\u214F"+
+        "\u2152\u2156\u2159\u215C\u2160\u2164\u2168\u216B\u216E\u2171\u2175\u2178"+
+        "\u217C\u2180\u2183\u2187\u218A\u218D\u2190\u2194\u2198\u219C\u219F\u21A2"+
+        "\u21A5\u21A9\u21AC\u21B0\u21B4\u21B7\u21BA\u21BE\u21C1\u21C4\u21C7\u21CB"+
+        "\u21CF\u21D3\u21D6\u21D9\u21DC\u21E0\u21E3\u21E7\u21EB\u21EE\u21F1\u21F4"+
+        "\u21F8\u21FB\u21FE\u2201\u2205\u2209\u220D\u2211\u2214\u2218\u221B\u221E"+
+        "\u2222\u2225\u2229\u222D\u2231\u2234\u2237\u223B\u223F\u2243\u2246\u2249"+
+        "\u224C\u2250\u2254\u2258\u225C\u2260\u2264\u2268\u226C\u2270\u2274\u2278"+
+        "\u227C\u2280\u2284\u2288\u228C\u2290\u2294\u2297\u229A\u229E\u22A2\u22A6"+
+        "\u22AA\u22AE\u22B2\u22B6\u22BA\u22BE\u22C2\u22C6\u22CA\u22CE\u22D2\u22D6"+
+        "\u22DA\u22DE\u22E2\u22E5\u22E9\u22ED\u22F0\u22F4\u22F8\u22FC\u2300\u2303"+
+        "\u2307\u230A\u230E\u2312"
+    );
+
+    static final String replace = 
+        "  \u0308\000s\000\u03A5\000 \u0313\000 \u0314\000 \000a\000 \u0304\000"+
+        "2\0003\000 \u0301\000\u03BC\000 \u0327\0001\000o\0001\u20444\0001\u2044"+
+        "2\0003\u20444\000IJ\000ij\000L\u00B7\000l\u00B7\000\u02BCn\000DZ\u030C"+
+        "\000Dz\u030C\000dz\u030C\000LJ\000Lj\000lj\000NJ\000Nj\000nj\000DZ\000"+
+        "Dz\000dz\000h\000\u0266\000r\000\u0279\000\u027B\000\u0281\000w\000y\000"+
+        " \u0306\000 \u0307\000 \u030A\000 \u0328\000 \u0303\000 \u030B\000\u0263"+
+        "\000l\000x\000\u0295\000 \u0345\000 \u0308\u0301\000\u03B2\000\u03B8\000"+
+        "\u03A5\u0301\000\u03A5\u0308\000\u03C6\000\u03C0\000\u03BA\000\u03C1\000"+
+        "\u03C2\000\u0565\u0582\000\u0627\u0674\000\u0648\u0674\000\u06C7\u0674"+
+        "\000\u064A\u0674\000\u0E4D\u0E32\000\u0ECD\u0EB2\000\u0EAB\u0E99\000\u0EAB"+
+        "\u0EA1\000\u0F0B\000\u0FB2\u0F71\u0F80\000\u0FB3\u0F71\u0F80\000a\u02BE"+
+        "\000s\u0307\000 \u0342\000 \u0308\u0342\000 \u0313\u0300\000 \u0313\u0301"+
+        "\000 \u0313\u0342\000 \u0314\u0300\000 \u0314\u0301\000 \u0314\u0342\000"+
+        " \u0308\u0300\000\u2010\000 \u0333\000.\000..\000...\000\u2032\u2032\000"+
+        "\u2032\u2032\u2032\000\u2035\u2035\000\u2035\u2035\u2035\000!!\000 \u0305"+
+        "\000?!\000!?\0000\0005\0006\0007\0008\0009\000+\000\u2212\000=\000(\000"+
+        ")\000Rs\000a/c\000a/s\000C\000\u00B0C\000c/o\000c/u\000\u0190\000\u00B0"+
+        "F\000g\000H\000\u0127\000I\000L\000N\000No\000P\000Q\000R\000SM\000TE"+
+        "L\000TM\000B\000e\000E\000\u05D0\000\u05D1\000\u05D2\000\u05D3\000i\000"+
+        "1\u20443\0002\u20443\0001\u20445\0002\u20445\0003\u20445\0004\u20445\000"+
+        "1\u20446\0005\u20446\0001\u20448\0003\u20448\0005\u20448\0007\u20448\000"+
+        "1\u2044\000II\000III\000IV\000VI\000VII\000VIII\000IX\000XI\000XII\000"+
+        "D\000ii\000iii\000iv\000vi\000vii\000viii\000ix\000xi\000xii\000d\000"+
+        "m\000\u222B\u222B\000\u222B\u222B\u222B\000\u222E\u222E\000\u222E\u222E"+
+        "\u222E\00010\00011\00012\00013\00014\00015\00016\00017\00018\00019\000"+
+        "20\000(1)\000(2)\000(3)\000(4)\000(5)\000(6)\000(7)\000(8)\000(9)\000"+
+        "(10)\000(11)\000(12)\000(13)\000(14)\000(15)\000(16)\000(17)\000(18)\000"+
+        "(19)\000(20)\0001.\0002.\0003.\0004.\0005.\0006.\0007.\0008.\0009.\000"+
+        "10.\00011.\00012.\00013.\00014.\00015.\00016.\00017.\00018.\00019.\000"+
+        "20.\000(a)\000(b)\000(c)\000(d)\000(e)\000(f)\000(g)\000(h)\000(i)\000"+
+        "(j)\000(k)\000(l)\000(m)\000(n)\000(o)\000(p)\000(q)\000(r)\000(s)\000"+
+        "(t)\000(u)\000(v)\000(w)\000(x)\000(y)\000(z)\000A\000G\000K\000O\000"+
+        "S\000T\000U\000W\000Y\000b\000f\000k\000p\000q\000t\000\u6BCD\000\u9F9F"+
+        "\000\u4E00\000\u4E28\000\u4E36\000\u4E3F\000\u4E59\000\u4E85\000\u4E8C"+
+        "\000\u4EA0\000\u4EBA\000\u513F\000\u5165\000\u516B\000\u5182\000\u5196"+
+        "\000\u51AB\000\u51E0\000\u51F5\000\u5200\000\u529B\000\u52F9\000\u5315"+
+        "\000\u531A\000\u5338\000\u5341\000\u535C\000\u5369\000\u5382\000\u53B6"+
+        "\000\u53C8\000\u53E3\000\u56D7\000\u571F\000\u58EB\000\u5902\000\u590A"+
+        "\000\u5915\000\u5927\000\u5973\000\u5B50\000\u5B80\000\u5BF8\000\u5C0F"+
+        "\000\u5C22\000\u5C38\000\u5C6E\000\u5C71\000\u5DDB\000\u5DE5\000\u5DF1"+
+        "\000\u5DFE\000\u5E72\000\u5E7A\000\u5E7F\000\u5EF4\000\u5EFE\000\u5F0B"+
+        "\000\u5F13\000\u5F50\000\u5F61\000\u5F73\000\u5FC3\000\u6208\000\u6236"+
+        "\000\u624B\000\u652F\000\u6534\000\u6587\000\u6597\000\u65A4\000\u65B9"+
+        "\000\u65E0\000\u65E5\000\u66F0\000\u6708\000\u6728\000\u6B20\000\u6B62"+
+        "\000\u6B79\000\u6BB3\000\u6BCB\000\u6BD4\000\u6BDB\000\u6C0F\000\u6C14"+
+        "\000\u6C34\000\u706B\000\u722A\000\u7236\000\u723B\000\u723F\000\u7247"+
+        "\000\u7259\000\u725B\000\u72AC\000\u7384\000\u7389\000\u74DC\000\u74E6"+
+        "\000\u7518\000\u751F\000\u7528\000\u7530\000\u758B\000\u7592\000\u7676"+
+        "\000\u767D\000\u76AE\000\u76BF\000\u76EE\000\u77DB\000\u77E2\000\u77F3"+
+        "\000\u793A\000\u79B8\000\u79BE\000\u7A74\000\u7ACB\000\u7AF9\000\u7C73"+
+        "\000\u7CF8\000\u7F36\000\u7F51\000\u7F8A\000\u7FBD\000\u8001\000\u800C"+
+        "\000\u8012\000\u8033\000\u807F\000\u8089\000\u81E3\000\u81EA\000\u81F3"+
+        "\000\u81FC\000\u820C\000\u821B\000\u821F\000\u826E\000\u8272\000\u8278"+
+        "\000\u864D\000\u866B\000\u8840\000\u884C\000\u8863\000\u897E\000\u898B"+
+        "\000\u89D2\000\u8A00\000\u8C37\000\u8C46\000\u8C55\000\u8C78\000\u8C9D"+
+        "\000\u8D64\000\u8D70\000\u8DB3\000\u8EAB\000\u8ECA\000\u8F9B\000\u8FB0"+
+        "\000\u8FB5\000\u9091\000\u9149\000\u91C6\000\u91CC\000\u91D1\000\u9577"+
+        "\000\u9580\000\u961C\000\u96B6\000\u96B9\000\u96E8\000\u9751\000\u975E"+
+        "\000\u9762\000\u9769\000\u97CB\000\u97ED\000\u97F3\000\u9801\000\u98A8"+
+        "\000\u98DB\000\u98DF\000\u9996\000\u9999\000\u99AC\000\u9AA8\000\u9AD8"+
+        "\000\u9ADF\000\u9B25\000\u9B2F\000\u9B32\000\u9B3C\000\u9B5A\000\u9CE5"+
+        "\000\u9E75\000\u9E7F\000\u9EA5\000\u9EBB\000\u9EC3\000\u9ECD\000\u9ED1"+
+        "\000\u9EF9\000\u9EFD\000\u9F0E\000\u9F13\000\u9F20\000\u9F3B\000\u9F4A"+
+        "\000\u9F52\000\u9F8D\000\u9F9C\000\u9FA0\000\u3012\000\u5344\000\u5345"+
+        "\000 \u3099\000 \u309A\000\u1100\000\u1101\000\u11AA\000\u1102\000\u11AC"+
+        "\000\u11AD\000\u1103\000\u1104\000\u1105\000\u11B0\000\u11B1\000\u11B2"+
+        "\000\u11B3\000\u11B4\000\u11B5\000\u111A\000\u1106\000\u1107\000\u1108"+
+        "\000\u1121\000\u1109\000\u110A\000\u110B\000\u110C\000\u110D\000\u110E"+
+        "\000\u110F\000\u1110\000\u1111\000\u1112\000\u1161\000\u1162\000\u1163"+
+        "\000\u1164\000\u1165\000\u1166\000\u1167\000\u1168\000\u1169\000\u116A"+
+        "\000\u116B\000\u116C\000\u116D\000\u116E\000\u116F\000\u1170\000\u1171"+
+        "\000\u1172\000\u1173\000\u1174\000\u1175\000\u1160\000\u1114\000\u1115"+
+        "\000\u11C7\000\u11C8\000\u11CC\000\u11CE\000\u11D3\000\u11D7\000\u11D9"+
+        "\000\u111C\000\u11DD\000\u11DF\000\u111D\000\u111E\000\u1120\000\u1122"+
+        "\000\u1123\000\u1127\000\u1129\000\u112B\000\u112C\000\u112D\000\u112E"+
+        "\000\u112F\000\u1132\000\u1136\000\u1140\000\u1147\000\u114C\000\u11F1"+
+        "\000\u11F2\000\u1157\000\u1158\000\u1159\000\u1184\000\u1185\000\u1188"+
+        "\000\u1191\000\u1192\000\u1194\000\u119E\000\u11A1\000\u4E09\000\u56DB"+
+        "\000\u4E0A\000\u4E2D\000\u4E0B\000\u7532\000\u4E19\000\u4E01\000\u5929"+
+        "\000\u5730\000(\u1100)\000(\u1102)\000(\u1103)\000(\u1105)\000(\u1106"+
+        ")\000(\u1107)\000(\u1109)\000(\u110B)\000(\u110C)\000(\u110E)\000(\u110F"+
+        ")\000(\u1110)\000(\u1111)\000(\u1112)\000(\u1100\u1161)\000(\u1102\u1161"+
+        ")\000(\u1103\u1161)\000(\u1105\u1161)\000(\u1106\u1161)\000(\u1107\u1161"+
+        ")\000(\u1109\u1161)\000(\u110B\u1161)\000(\u110C\u1161)\000(\u110E\u1161"+
+        ")\000(\u110F\u1161)\000(\u1110\u1161)\000(\u1111\u1161)\000(\u1112\u1161"+
+        ")\000(\u110C\u116E)\000(\u4E00)\000(\u4E8C)\000(\u4E09)\000(\u56DB)\000"+
+        "(\u4E94)\000(\u516D)\000(\u4E03)\000(\u516B)\000(\u4E5D)\000(\u5341)\000"+
+        "(\u6708)\000(\u706B)\000(\u6C34)\000(\u6728)\000(\u91D1)\000(\u571F)\000"+
+        "(\u65E5)\000(\u682A)\000(\u6709)\000(\u793E)\000(\u540D)\000(\u7279)\000"+
+        "(\u8CA1)\000(\u795D)\000(\u52B4)\000(\u4EE3)\000(\u547C)\000(\u5B66)\000"+
+        "(\u76E3)\000(\u4F01)\000(\u8CC7)\000(\u5354)\000(\u796D)\000(\u4F11)\000"+
+        "(\u81EA)\000(\u81F3)\000\u1100\u1161\000\u1102\u1161\000\u1103\u1161\000"+
+        "\u1105\u1161\000\u1106\u1161\000\u1107\u1161\000\u1109\u1161\000\u110B"+
+        "\u1161\000\u110C\u1161\000\u110E\u1161\000\u110F\u1161\000\u1110\u1161"+
+        "\000\u1111\u1161\000\u1112\u1161\000\u4E94\000\u516D\000\u4E03\000\u4E5D"+
+        "\000\u682A\000\u6709\000\u793E\000\u540D\000\u7279\000\u8CA1\000\u795D"+
+        "\000\u52B4\000\u79D8\000\u7537\000\u9069\000\u512A\000\u5370\000\u6CE8"+
+        "\000\u9805\000\u4F11\000\u5199\000\u6B63\000\u5DE6\000\u53F3\000\u533B"+
+        "\000\u5B97\000\u5B66\000\u76E3\000\u4F01\000\u8CC7\000\u5354\000\u591C"+
+        "\0001\u6708\0002\u6708\0003\u6708\0004\u6708\0005\u6708\0006\u6708\000"+
+        "7\u6708\0008\u6708\0009\u6708\00010\u6708\00011\u6708\00012\u6708\000"+
+        "\u30A2\000\u30A4\000\u30A6\000\u30A8\000\u30AA\000\u30AB\000\u30AD\000"+
+        "\u30AF\000\u30B1\000\u30B3\000\u30B5\000\u30B7\000\u30B9\000\u30BB\000"+
+        "\u30BD\000\u30BF\000\u30C1\000\u30C4\000\u30C6\000\u30C8\000\u30CA\000"+
+        "\u30CB\000\u30CC\000\u30CD\000\u30CE\000\u30CF\000\u30D2\000\u30D5\000"+
+        "\u30D8\000\u30DB\000\u30DE\000\u30DF\000\u30E0\000\u30E1\000\u30E2\000"+
+        "\u30E4\000\u30E6\000\u30E8\000\u30E9\000\u30EA\000\u30EB\000\u30EC\000"+
+        "\u30ED\000\u30EF\000\u30F0\000\u30F1\000\u30F2\000\u30A2\u30CF\u309A\u30FC"+
+        "\u30C8\000\u30A2\u30EB\u30D5\u30A1\000\u30A2\u30F3\u30D8\u309A\u30A2\000"+
+        "\u30A2\u30FC\u30EB\000\u30A4\u30CB\u30F3\u30AF\u3099\000\u30A4\u30F3\u30C1"+
+        "\000\u30A6\u30A9\u30F3\000\u30A8\u30B9\u30AF\u30FC\u30C8\u3099\000\u30A8"+
+        "\u30FC\u30AB\u30FC\000\u30AA\u30F3\u30B9\000\u30AA\u30FC\u30E0\000\u30AB"+
+        "\u30A4\u30EA\000\u30AB\u30E9\u30C3\u30C8\000\u30AB\u30ED\u30EA\u30FC\000"+
+        "\u30AB\u3099\u30ED\u30F3\000\u30AB\u3099\u30F3\u30DE\000\u30AD\u3099\u30AB"+
+        "\u3099\000\u30AD\u3099\u30CB\u30FC\000\u30AD\u30E5\u30EA\u30FC\000\u30AD"+
+        "\u3099\u30EB\u30BF\u3099\u30FC\000\u30AD\u30ED\000\u30AD\u30ED\u30AF\u3099"+
+        "\u30E9\u30E0\000\u30AD\u30ED\u30E1\u30FC\u30C8\u30EB\000\u30AD\u30ED\u30EF"+
+        "\u30C3\u30C8\000\u30AF\u3099\u30E9\u30E0\u30C8\u30F3\000\u30AF\u30EB\u30BB"+
+        "\u3099\u30A4\u30ED\000\u30AF\u30ED\u30FC\u30CD\000\u30B1\u30FC\u30B9\000"+
+        "\u30B3\u30EB\u30CA\000\u30B3\u30FC\u30DB\u309A\000\u30B5\u30A4\u30AF\u30EB"+
+        "\000\u30B5\u30F3\u30C1\u30FC\u30E0\000\u30B7\u30EA\u30F3\u30AF\u3099\000"+
+        "\u30BB\u30F3\u30C1\000\u30BB\u30F3\u30C8\000\u30BF\u3099\u30FC\u30B9\000"+
+        "\u30C6\u3099\u30B7\000\u30C8\u3099\u30EB\000\u30CA\u30CE\000\u30CE\u30C3"+
+        "\u30C8\000\u30CF\u30A4\u30C4\000\u30CF\u309A\u30FC\u30BB\u30F3\u30C8\000"+
+        "\u30CF\u309A\u30FC\u30C4\000\u30CF\u3099\u30FC\u30EC\u30EB\000\u30D2\u309A"+
+        "\u30A2\u30B9\u30C8\u30EB\000\u30D2\u309A\u30AF\u30EB\000\u30D2\u309A\u30B3"+
+        "\000\u30D2\u3099\u30EB\000\u30D5\u30A1\u30E9\u30C3\u30C8\u3099\000\u30D5"+
+        "\u30A3\u30FC\u30C8\000\u30D5\u3099\u30C3\u30B7\u30A7\u30EB\000\u30D5\u30E9"+
+        "\u30F3\000\u30D8\u30AF\u30BF\u30FC\u30EB\000\u30D8\u309A\u30BD\000\u30D8"+
+        "\u309A\u30CB\u30D2\000\u30D8\u30EB\u30C4\000\u30D8\u309A\u30F3\u30B9\000"+
+        "\u30D8\u309A\u30FC\u30B7\u3099\000\u30D8\u3099\u30FC\u30BF\000\u30DB\u309A"+
+        "\u30A4\u30F3\u30C8\000\u30DB\u3099\u30EB\u30C8\000\u30DB\u30F3\000\u30DB"+
+        "\u309A\u30F3\u30C8\u3099\000\u30DB\u30FC\u30EB\000\u30DB\u30FC\u30F3\000"+
+        "\u30DE\u30A4\u30AF\u30ED\000\u30DE\u30A4\u30EB\000\u30DE\u30C3\u30CF\000"+
+        "\u30DE\u30EB\u30AF\000\u30DE\u30F3\u30B7\u30E7\u30F3\000\u30DF\u30AF\u30ED"+
+        "\u30F3\000\u30DF\u30EA\000\u30DF\u30EA\u30CF\u3099\u30FC\u30EB\000\u30E1"+
+        "\u30AB\u3099\000\u30E1\u30AB\u3099\u30C8\u30F3\000\u30E4\u30FC\u30C8\u3099"+
+        "\000\u30E4\u30FC\u30EB\000\u30E6\u30A2\u30F3\000\u30EA\u30C3\u30C8\u30EB"+
+        "\000\u30EA\u30E9\000\u30EB\u30D2\u309A\u30FC\000\u30EB\u30FC\u30D5\u3099"+
+        "\u30EB\000\u30EC\u30E0\000\u30EC\u30F3\u30C8\u30B1\u3099\u30F3\0000\u70B9"+
+        "\0001\u70B9\0002\u70B9\0003\u70B9\0004\u70B9\0005\u70B9\0006\u70B9\000"+
+        "7\u70B9\0008\u70B9\0009\u70B9\00010\u70B9\00011\u70B9\00012\u70B9\000"+
+        "13\u70B9\00014\u70B9\00015\u70B9\00016\u70B9\00017\u70B9\00018\u70B9\000"+
+        "19\u70B9\00020\u70B9\00021\u70B9\00022\u70B9\00023\u70B9\00024\u70B9\000"+
+        "hPa\000da\000AU\000bar\000oV\000pc\000\u5E73\u6210\000\u662D\u548C\000"+
+        "\u5927\u6B63\000\u660E\u6CBB\000\u682A\u5F0F\u4F1A\u793E\000pA\000nA\000"+
+        "\u03BCA\000mA\000kA\000KB\000MB\000GB\000cal\000kcal\000pF\000nF\000\u03BC"+
+        "F\000\u03BCg\000mg\000kg\000Hz\000kHz\000MHz\000GHz\000THz\000\u03BCl"+
+        "\000ml\000dl\000kl\000fm\000nm\000\u03BCm\000mm\000cm\000km\000mm2\000"+
+        "cm2\000km2\000mm3\000cm3\000km3\000m\u2215s\000m\u2215s2\000kPa\000MP"+
+        "a\000GPa\000rad\000rad\u2215s\000rad\u2215s2\000ps\000ns\000\u03BCs\000"+
+        "ms\000pV\000nV\000\u03BCV\000mV\000kV\000MV\000pW\000nW\000\u03BCW\000"+
+        "mW\000kW\000MW\000k\u03A9\000M\u03A9\000a.m.\000Bq\000cc\000cd\000C\u2215"+
+        "kg\000Co.\000dB\000Gy\000ha\000HP\000in\000KK\000KM\000kt\000lm\000ln"+
+        "\000log\000lx\000mb\000mil\000mol\000PH\000p.m.\000PPM\000PR\000sr\000"+
+        "Sv\000Wb\0001\u65E5\0002\u65E5\0003\u65E5\0004\u65E5\0005\u65E5\0006\u65E5"+
+        "\0007\u65E5\0008\u65E5\0009\u65E5\00010\u65E5\00011\u65E5\00012\u65E5"+
+        "\00013\u65E5\00014\u65E5\00015\u65E5\00016\u65E5\00017\u65E5\00018\u65E5"+
+        "\00019\u65E5\00020\u65E5\00021\u65E5\00022\u65E5\00023\u65E5\00024\u65E5"+
+        "\00025\u65E5\00026\u65E5\00027\u65E5\00028\u65E5\00029\u65E5\00030\u65E5"+
+        "\00031\u65E5\000ff\000fi\000fl\000ffi\000ffl\000st\000\u0574\u0576\000"+
+        "\u0574\u0565\000\u0574\u056B\000\u057E\u0576\000\u0574\u056D\000\u05E2"+
+        "\000\u05D4\000\u05DB\000\u05DC\000\u05DD\000\u05E8\000\u05EA\000\u05D0"+
+        "\u05DC\000\u0671\000\u067B\000\u067E\000\u0680\000\u067A\000\u067F\000"+
+        "\u0679\000\u06A4\000\u06A6\000\u0684\000\u0683\000\u0686\000\u0687\000"+
+        "\u068D\000\u068C\000\u068E\000\u0688\000\u0698\000\u0691\000\u06A9\000"+
+        "\u06AF\000\u06B3\000\u06B1\000\u06BA\000\u06BB\000\u06D5\u0654\000\u06C1"+
+        "\000\u06BE\000\u06D2\000\u06D2\u0654\000\u06AD\000\u06C7\000\u06C6\000"+
+        "\u06C8\000\u06CB\000\u06C5\000\u06C9\000\u06D0\000\u0649\000\u064A\u0654"+
+        "\u0627\000\u064A\u0654\u06D5\000\u064A\u0654\u0648\000\u064A\u0654\u06C7"+
+        "\000\u064A\u0654\u06C6\000\u064A\u0654\u06C8\000\u064A\u0654\u06D0\000"+
+        "\u064A\u0654\u0649\000\u06CC\000\u064A\u0654\u062C\000\u064A\u0654\u062D"+
+        "\000\u064A\u0654\u0645\000\u064A\u0654\u064A\000\u0628\u062C\000\u0628"+
+        "\u062D\000\u0628\u062E\000\u0628\u0645\000\u0628\u0649\000\u0628\u064A"+
+        "\000\u062A\u062C\000\u062A\u062D\000\u062A\u062E\000\u062A\u0645\000\u062A"+
+        "\u0649\000\u062A\u064A\000\u062B\u062C\000\u062B\u0645\000\u062B\u0649"+
+        "\000\u062B\u064A\000\u062C\u062D\000\u062C\u0645\000\u062D\u062C\000\u062D"+
+        "\u0645\000\u062E\u062C\000\u062E\u062D\000\u062E\u0645\000\u0633\u062C"+
+        "\000\u0633\u062D\000\u0633\u062E\000\u0633\u0645\000\u0635\u062D\000\u0635"+
+        "\u0645\000\u0636\u062C\000\u0636\u062D\000\u0636\u062E\000\u0636\u0645"+
+        "\000\u0637\u062D\000\u0637\u0645\000\u0638\u0645\000\u0639\u062C\000\u0639"+
+        "\u0645\000\u063A\u062C\000\u063A\u0645\000\u0641\u062C\000\u0641\u062D"+
+        "\000\u0641\u062E\000\u0641\u0645\000\u0641\u0649\000\u0641\u064A\000\u0642"+
+        "\u062D\000\u0642\u0645\000\u0642\u0649\000\u0642\u064A\000\u0643\u0627"+
+        "\000\u0643\u062C\000\u0643\u062D\000\u0643\u062E\000\u0643\u0644\000\u0643"+
+        "\u0645\000\u0643\u0649\000\u0643\u064A\000\u0644\u062C\000\u0644\u062D"+
+        "\000\u0644\u062E\000\u0644\u0645\000\u0644\u0649\000\u0644\u064A\000\u0645"+
+        "\u062C\000\u0645\u062D\000\u0645\u062E\000\u0645\u0645\000\u0645\u0649"+
+        "\000\u0645\u064A\000\u0646\u062C\000\u0646\u062D\000\u0646\u062E\000\u0646"+
+        "\u0645\000\u0646\u0649\000\u0646\u064A\000\u0647\u062C\000\u0647\u0645"+
+        "\000\u0647\u0649\000\u0647\u064A\000\u064A\u062C\000\u064A\u062D\000\u064A"+
+        "\u062E\000\u064A\u0645\000\u064A\u0649\000\u064A\u064A\000\u0630\u0670"+
+        "\000\u0631\u0670\000\u0649\u0670\000 \u064C\u0651\000 \u064D\u0651\000"+
+        " \u064E\u0651\000 \u064F\u0651\000 \u0650\u0651\000 \u0651\u0670\000\u064A"+
+        "\u0654\u0631\000\u064A\u0654\u0632\000\u064A\u0654\u0646\000\u0628\u0631"+
+        "\000\u0628\u0632\000\u0628\u0646\000\u062A\u0631\000\u062A\u0632\000\u062A"+
+        "\u0646\000\u062B\u0631\000\u062B\u0632\000\u062B\u0646\000\u0645\u0627"+
+        "\000\u0646\u0631\000\u0646\u0632\000\u0646\u0646\000\u064A\u0631\000\u064A"+
+        "\u0632\000\u064A\u0646\000\u064A\u0654\u062E\000\u064A\u0654\u0647\000"+
+        "\u0628\u0647\000\u062A\u0647\000\u0635\u062E\000\u0644\u0647\000\u0646"+
+        "\u0647\000\u0647\u0670\000\u064A\u0647\000\u062B\u0647\000\u0633\u0647"+
+        "\000\u0634\u0645\000\u0634\u0647\000\u0640\u064E\u0651\000\u0640\u064F"+
+        "\u0651\000\u0640\u0650\u0651\000\u0637\u0649\000\u0637\u064A\000\u0639"+
+        "\u0649\000\u0639\u064A\000\u063A\u0649\000\u063A\u064A\000\u0633\u0649"+
+        "\000\u0633\u064A\000\u0634\u0649\000\u0634\u064A\000\u062D\u0649\000\u062D"+
+        "\u064A\000\u062C\u0649\000\u062C\u064A\000\u062E\u0649\000\u062E\u064A"+
+        "\000\u0635\u0649\000\u0635\u064A\000\u0636\u0649\000\u0636\u064A\000\u0634"+
+        "\u062C\000\u0634\u062D\000\u0634\u062E\000\u0634\u0631\000\u0633\u0631"+
+        "\000\u0635\u0631\000\u0636\u0631\000\u0627\u064B\000\u062A\u062C\u0645"+
+        "\000\u062A\u062D\u062C\000\u062A\u062D\u0645\000\u062A\u062E\u0645\000"+
+        "\u062A\u0645\u062C\000\u062A\u0645\u062D\000\u062A\u0645\u062E\000\u062C"+
+        "\u0645\u062D\000\u062D\u0645\u064A\000\u062D\u0645\u0649\000\u0633\u062D"+
+        "\u062C\000\u0633\u062C\u062D\000\u0633\u062C\u0649\000\u0633\u0645\u062D"+
+        "\000\u0633\u0645\u062C\000\u0633\u0645\u0645\000\u0635\u062D\u062D\000"+
+        "\u0635\u0645\u0645\000\u0634\u062D\u0645\000\u0634\u062C\u064A\000\u0634"+
+        "\u0645\u062E\000\u0634\u0645\u0645\000\u0636\u062D\u0649\000\u0636\u062E"+
+        "\u0645\000\u0637\u0645\u062D\000\u0637\u0645\u0645\000\u0637\u0645\u064A"+
+        "\000\u0639\u062C\u0645\000\u0639\u0645\u0645\000\u0639\u0645\u0649\000"+
+        "\u063A\u0645\u0645\000\u063A\u0645\u064A\000\u063A\u0645\u0649\000\u0641"+
+        "\u062E\u0645\000\u0642\u0645\u062D\000\u0642\u0645\u0645\000\u0644\u062D"+
+        "\u0645\000\u0644\u062D\u064A\000\u0644\u062D\u0649\000\u0644\u062C\u062C"+
+        "\000\u0644\u062E\u0645\000\u0644\u0645\u062D\000\u0645\u062D\u062C\000"+
+        "\u0645\u062D\u0645\000\u0645\u062D\u064A\000\u0645\u062C\u062D\000\u0645"+
+        "\u062C\u0645\000\u0645\u062E\u062C\000\u0645\u062E\u0645\000\u0645\u062C"+
+        "\u062E\000\u0647\u0645\u062C\000\u0647\u0645\u0645\000\u0646\u062D\u0645"+
+        "\000\u0646\u062D\u0649\000\u0646\u062C\u0645\000\u0646\u062C\u0649\000"+
+        "\u0646\u0645\u064A\000\u0646\u0645\u0649\000\u064A\u0645\u0645\000\u0628"+
+        "\u062E\u064A\000\u062A\u062C\u064A\000\u062A\u062C\u0649\000\u062A\u062E"+
+        "\u064A\000\u062A\u062E\u0649\000\u062A\u0645\u064A\000\u062A\u0645\u0649"+
+        "\000\u062C\u0645\u064A\000\u062C\u062D\u0649\000\u062C\u0645\u0649\000"+
+        "\u0633\u062E\u0649\000\u0635\u062D\u064A\000\u0634\u062D\u064A\000\u0636"+
+        "\u062D\u064A\000\u0644\u062C\u064A\000\u0644\u0645\u064A\000\u064A\u062D"+
+        "\u064A\000\u064A\u062C\u064A\000\u064A\u0645\u064A\000\u0645\u0645\u064A"+
+        "\000\u0642\u0645\u064A\000\u0646\u062D\u064A\000\u0639\u0645\u064A\000"+
+        "\u0643\u0645\u064A\000\u0646\u062C\u062D\000\u0645\u062E\u064A\000\u0644"+
+        "\u062C\u0645\000\u0643\u0645\u0645\000\u062C\u062D\u064A\000\u062D\u062C"+
+        "\u064A\000\u0645\u062C\u064A\000\u0641\u0645\u064A\000\u0628\u062D\u064A"+
+        "\000\u0633\u062E\u064A\000\u0646\u062C\u064A\000\u0635\u0644\u06D2\000"+
+        "\u0642\u0644\u06D2\000\u0627\u0644\u0644\u0647\000\u0627\u0643\u0628\u0631"+
+        "\000\u0645\u062D\u0645\u062F\000\u0635\u0644\u0639\u0645\000\u0631\u0633"+
+        "\u0648\u0644\000\u0639\u0644\u064A\u0647\000\u0648\u0633\u0644\u0645\000"+
+        "\u0635\u0644\u0649\000\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639"+
+        "\u0644\u064A\u0647 \u0648\u0633\u0644\u0645\000\u062C\u0644 \u062C\u0644"+
+        "\u0627\u0644\u0647\000\u2014\000\u2013\000_\000{\000}\000\u3014\000\u3015"+
+        "\000\u3010\000\u3011\000\u300A\000\u300B\000\u3008\000\u3009\000\u300C"+
+        "\000\u300D\000\u300E\000\u300F\000,\000\u3001\000;\000:\000#\000&\000"+
+        "*\000-\000<\000>\000\134\000$\000%\000@\000 \u064B\000\u0640\u064B\000"+
+        " \u064C\000 \u064D\000 \u064E\000\u0640\u064E\000 \u064F\000\u0640\u064F"+
+        "\000 \u0650\000\u0640\u0650\000 \u0651\000\u0640\u0651\000 \u0652\000"+
+        "\u0640\u0652\000\u0621\000\u0627\u0653\000\u0627\u0654\000\u0648\u0654"+
+        "\000\u0627\u0655\000\u064A\u0654\000\u0628\000\u0629\000\u062A\000\u062B"+
+        "\000\u0630\000\u0633\000\u0634\000\u0635\000\u0636\000\u0637\000\u0638"+
+        "\000\u0639\000\u063A\000\u0641\000\u0642\000\u0643\000\u0644\u0627\u0653"+
+        "\000\u0644\u0627\u0654\000\u0644\u0627\u0655\000\u0644\u0627\000\042\000"+
+        "'\000/\000[\000]\000^\000`\000|\000~\000\u3002\000\u30FB\000\u30A3\000"+
+        "\u30A5\000\u30A7\000\u30A9\000\u30E3\000\u30E5\000\u30E7\000\u30C3\000"+
+        "\u00A2\000\u00A3\000\u00AC\000\u00A6\000\u00A5\000\u20A9\000\u2502\000"+
+        "\u2190\000\u2191\000\u2192\000\u2193\000\u25A0\000\u25CB\000\u0300\000"+
+        "\u0301\000\u0313\000\u0308\u0301\000\u02B9\000;\000\u00B7\000\u0915\u093C"+
+        "\000\u0916\u093C\000\u0917\u093C\000\u091C\u093C\000\u0921\u093C\000\u0922"+
+        "\u093C\000\u092B\u093C\000\u092F\u093C\000\u09A1\u09BC\000\u09A2\u09BC"+
+        "\000\u09AF\u09BC\000\u0A32\u0A3C\000\u0A38\u0A3C\000\u0A16\u0A3C\000\u0A17"+
+        "\u0A3C\000\u0A1C\u0A3C\000\u0A2B\u0A3C\000\u0B21\u0B3C\000\u0B22\u0B3C"+
+        "\000\u0F42\u0FB7\000\u0F4C\u0FB7\000\u0F51\u0FB7\000\u0F56\u0FB7\000\u0F5B"+
+        "\u0FB7\000\u0F40\u0FB5\000\u0F71\u0F72\000\u0F71\u0F74\000\u0FB2\u0F80"+
+        "\000\u0FB3\u0F80\000\u0F71\u0F80\000\u0F92\u0FB7\000\u0F9C\u0FB7\000\u0FA1"+
+        "\u0FB7\000\u0FA6\u0FB7\000\u0FAB\u0FB7\000\u0F90\u0FB5\000\u03B1\u0301"+
+        "\000\u03B5\u0301\000\u03B7\u0301\000\u03B9\u0301\000\u03BF\u0301\000\u03C5"+
+        "\u0301\000\u03C9\u0301\000\u0391\u0301\000\u03B9\000\u0395\u0301\000\u0397"+
+        "\u0301\000\u03B9\u0308\u0301\000\u0399\u0301\000\u03C5\u0308\u0301\000"+
+        "\u03A5\u0301\000`\000\u039F\u0301\000\u03A9\u0301\000\u03A9\000K\000A"+
+        "\u030A\000\u3008\000\u3009\000\u8C48\000\u66F4\000\u8ECA\000\u8CC8\000"+
+        "\u6ED1\000\u4E32\000\u53E5\000\u9F9C\000\u9F9C\000\u5951\000\u91D1\000"+
+        "\u5587\000\u5948\000\u61F6\000\u7669\000\u7F85\000\u863F\000\u87BA\000"+
+        "\u88F8\000\u908F\000\u6A02\000\u6D1B\000\u70D9\000\u73DE\000\u843D\000"+
+        "\u916A\000\u99F1\000\u4E82\000\u5375\000\u6B04\000\u721B\000\u862D\000"+
+        "\u9E1E\000\u5D50\000\u6FEB\000\u85CD\000\u8964\000\u62C9\000\u81D8\000"+
+        "\u881F\000\u5ECA\000\u6717\000\u6D6A\000\u72FC\000\u90CE\000\u4F86\000"+
+        "\u51B7\000\u52DE\000\u64C4\000\u6AD3\000\u7210\000\u76E7\000\u8001\000"+
+        "\u8606\000\u865C\000\u8DEF\000\u9732\000\u9B6F\000\u9DFA\000\u788C\000"+
+        "\u797F\000\u7DA0\000\u83C9\000\u9304\000\u9E7F\000\u8AD6\000\u58DF\000"+
+        "\u5F04\000\u7C60\000\u807E\000\u7262\000\u78CA\000\u8CC2\000\u96F7\000"+
+        "\u58D8\000\u5C62\000\u6A13\000\u6DDA\000\u6F0F\000\u7D2F\000\u7E37\000"+
+        "\u96FB\000\u52D2\000\u808B\000\u51DC\000\u51CC\000\u7A1C\000\u7DBE\000"+
+        "\u83F1\000\u9675\000\u8B80\000\u62CF\000\u8AFE\000\u4E39\000\u5BE7\000"+
+        "\u6012\000\u7387\000\u7570\000\u5317\000\u78FB\000\u4FBF\000\u5FA9\000"+
+        "\u4E0D\000\u6CCC\000\u6578\000\u7D22\000\u53C3\000\u585E\000\u7701\000"+
+        "\u8449\000\u8AAA\000\u6BBA\000\u8FB0\000\u6C88\000\u62FE\000\u82E5\000"+
+        "\u63A0\000\u7565\000\u4EAE\000\u5169\000\u51C9\000\u6881\000\u7CE7\000"+
+        "\u826F\000\u8AD2\000\u91CF\000\u52F5\000\u5442\000\u5973\000\u5EEC\000"+
+        "\u65C5\000\u6FFE\000\u792A\000\u95AD\000\u9A6A\000\u9E97\000\u9ECE\000"+
+        "\u529B\000\u66C6\000\u6B77\000\u8F62\000\u5E74\000\u6190\000\u6200\000"+
+        "\u649A\000\u6F23\000\u7149\000\u7489\000\u79CA\000\u7DF4\000\u806F\000"+
+        "\u8F26\000\u84EE\000\u9023\000\u934A\000\u5217\000\u52A3\000\u54BD\000"+
+        "\u70C8\000\u88C2\000\u5EC9\000\u5FF5\000\u637B\000\u6BAE\000\u7C3E\000"+
+        "\u7375\000\u4EE4\000\u56F9\000\u5DBA\000\u601C\000\u73B2\000\u7469\000"+
+        "\u7F9A\000\u8046\000\u9234\000\u96F6\000\u9748\000\u9818\000\u4F8B\000"+
+        "\u79AE\000\u91B4\000\u96B8\000\u60E1\000\u4E86\000\u50DA\000\u5BEE\000"+
+        "\u5C3F\000\u6599\000\u71CE\000\u7642\000\u84FC\000\u907C\000\u9F8D\000"+
+        "\u6688\000\u962E\000\u5289\000\u677B\000\u67F3\000\u6D41\000\u6E9C\000"+
+        "\u7409\000\u7559\000\u786B\000\u7D10\000\u985E\000\u516D\000\u622E\000"+
+        "\u9678\000\u502B\000\u5D19\000\u6DEA\000\u8F2A\000\u5F8B\000\u6144\000"+
+        "\u6817\000\u9686\000\u5229\000\u540F\000\u5C65\000\u6613\000\u674E\000"+
+        "\u68A8\000\u6CE5\000\u7406\000\u75E2\000\u7F79\000\u88CF\000\u88E1\000"+
+        "\u91CC\000\u96E2\000\u533F\000\u6EBA\000\u541D\000\u71D0\000\u7498\000"+
+        "\u85FA\000\u96A3\000\u9C57\000\u9E9F\000\u6797\000\u6DCB\000\u81E8\000"+
+        "\u7ACB\000\u7B20\000\u7C92\000\u72C0\000\u7099\000\u8B58\000\u4EC0\000"+
+        "\u8336\000\u523A\000\u5207\000\u5EA6\000\u62D3\000\u7CD6\000\u5B85\000"+
+        "\u6D1E\000\u66B4\000\u8F3B\000\u884C\000\u964D\000\u898B\000\u5ED3\000"+
+        "\u5140\000\u55C0\000\u585A\000\u6674\000\u51DE\000\u732A\000\u76CA\000"+
+        "\u793C\000\u795E\000\u7965\000\u798F\000\u9756\000\u7CBE\000\u7FBD\000"+
+        "\u8612\000\u8AF8\000\u9038\000\u90FD\000\u98EF\000\u98FC\000\u9928\000"+
+        "\u9DB4\000\u05F2\u05B7\000\u05E9\u05C1\000\u05E9\u05C2\000\u05E9\u05BC"+
+        "\u05C1\000\u05E9\u05BC\u05C2\000\u05D0\u05B7\000\u05D0\u05B8\000\u05D0"+
+        "\u05BC\000\u05D1\u05BC\000\u05D2\u05BC\000\u05D3\u05BC\000\u05D4\u05BC"+
+        "\000\u05D5\u05BC\000\u05D6\u05BC\000\u05D8\u05BC\000\u05D9\u05BC\000\u05DA"+
+        "\u05BC\000\u05DB\u05BC\000\u05DC\u05BC\000\u05DE\u05BC\000\u05E0\u05BC"+
+        "\000\u05E1\u05BC\000\u05E3\u05BC\000\u05E4\u05BC\000\u05E6\u05BC\000\u05E7"+
+        "\u05BC\000\u05E8\u05BC\000\u05E9\u05BC\000\u05EA\u05BC\000\u05D5\u05B9"+
+        "\000\u05D1\u05BF\000\u05DB\u05BF\000\u05E4\u05BF\000\u0385\000\u00B4\000"+
+        "\u2002\000\u2003\000\u0172\u0303\u0301\000\u1E76\u0308\u0304\000\u01EB"+
+        "\u031B\u0301\000\u1EB9\u0304\u0300\000\u1E72\u0303\u0301\000\u1E11\u030C"+
+        "\000\u1EE4\u0303\u0301\000\u1EE3\u0301\000\u0172\u0308\u0304\000\u1E0D"+
+        "\u030C\000\u1E72\u0308\u0304\000\u1EE4\u0308\u0304\000\u1EEE\u0301\000"+
+        "\u01AF\u0308\u0304\000\u1E1A\u0304\u0300\000\u1E18\u0304\u0300\000\u1E0E"+
+        "\u030C\000\u1E75\u030B\000\u0118\u0304\u0300\000\u1E12\u030C\000\u0228"+
+        "\u0304\u0300\000\u1E75\u030C\000\u0173\u032D\000\u1E77\u030B\000\u01EA"+
+        "\u031B\u0301\000\u1E77\u030C\000\u1EB8\u0304\u0300\000\u1E10\u030C\000"+
+        "\u0173\u030B\000\u1EE2\u0301\000\u0173\u030C\000\u1E0C\u030C\000\u1E73"+
+        "\u030B\000\u1EE5\u030B\000\u1E73\u030C\000\u1EE5\u030C\000\u01B0\u032D"+
+        "\000\u01B0\u030B\000\u01B0\u030C\000\u1E74\u030B\000\u1E11\u032D\000\u1E74"+
+        "\u030C\000\u0172\u032D\000\u1E76\u030B\000\u01EB\u0323\u0302\000\u1E76"+
+        "\u030C\000\u00E7\u030C\000\u0172\u030B\000\u0172\u030C\000\u1E72\u030B"+
+        "\000\u1EE4\u030B\000\u1E72\u030C\000\u1EE4\u030C\000\u01AF\u032D\000\u1EE3"+
+        "\u0302\000\u01AF\u030B\000\u01AF\u030C\000\u1E75\u030A\000\u1E10\u032D"+
+        "\000\u1E77\u030A\000\u0173\u0330\000\u01EA\u0323\u0302\000\u00C7\u030C"+
+        "\000\u0173\u030A\000\u01EB\u030C\000\u1E73\u030A\000\u1EE5\u030A\000\u1ECD"+
+        "\u030C\000\u01B0\u0330\000\u1EE2\u0302\000\u01B0\u030A\000\u01A1\u030C"+
+        "\000\u1E74\u030A\000\u1E76\u030A\000\u0172\u0330\000\u01EB\u0302\u0303"+
+        "\000\u00E7\u0307\000\u0172\u030A\000\u01EA\u030C\000\u1ED9\u0303\000\u1E72"+
+        "\u030A\000\u1EE4\u030A\000\u1ECC\u030C\000\u01AF\u0330\000\u01A1\u0302"+
+        "\u0303\000\u01AF\u030A\000\u01A0\u030C\000\u0DDE\u0DCA\000\u1E75\u0306"+
+        "\000\u1E2D\u030C\000\u1E77\u0306\000\u0173\u0324\000\u01EA\u0302\u0303"+
+        "\000\u00C7\u0307\000\u0173\u0306\000\u012F\u030C\000\u1ED8\u0303\000\u1E73"+
+        "\u0306\000\u1EE5\u0306\000\u1ECB\u030C\000\u01B0\u0324\000\u1EF5\u0304"+
+        "\000\u01A0\u0302\u0303\000\u01B0\u0306\000\u1E74\u0306\000\u1E2C\u030C"+
+        "\000\u1E11\u0331\000\u1E76\u0306\000\u0172\u0324\000\u01EB\u0302\u0309"+
+        "\000\u00E7\u0302\000\u0172\u0306\000\u012E\u030C\000\u1ED9\u0309\000\u1E72"+
+        "\u0306\000\u1EE4\u0306\000\u1ECA\u030C\000\u01AF\u0324\000\u1EF4\u0304"+
+        "\000\u01A1\u0302\u0309\000\u01AF\u0306\000\u1E75\u0304\000\u1E10\u0331"+
+        "\000\u1E77\u0304\000\u0163\u032D\000\u01EA\u0302\u0309\000\u00C7\u0302"+
+        "\000\u0173\u0304\000\u0105\u030C\000\u1ED8\u0309\000\u1E73\u0304\000\u01EB"+
+        "\u0307\u0304\000\u1EE5\u0304\000\u1E01\u030C\000\u1EA1\u030C\000\u1ECD"+
+        "\u0307\u0304\000\u01A0\u0302\u0309\000\u01B0\u0304\000\u01A1\u0307\u0304"+
+        "\000\u1E74\u0304\000\u1E11\u0323\000\u1E76\u0304\000\u0162\u032D\000\u01EB"+
+        "\u0302\u0300\000\u0172\u0304\000\u0104\u030C\000\u1ED9\u0300\000\u1E72"+
+        "\u0304\000\u01EA\u0307\u0304\000\u1EE4\u0304\000\u1E00\u030C\000\u1EA0"+
+        "\u030C\000\u1ECC\u0307\u0304\000\u01A1\u0302\u0300\000\u01AF\u0304\000"+
+        "\u01A0\u0307\u0304\000\u1E75\u0303\000\u1E10\u0323\000\u1E77\u0303\000"+
+        "\u0163\u0331\000\u01EA\u0302\u0300\000\u0173\u0303\000\u1ED8\u0300\000"+
+        "\u1E73\u0303\000\u01EB\u0307\000\u1EE5\u0303\000\u1ECD\u0307\000\u01A0"+
+        "\u0302\u0300\000\u038F\u0345\000\u1FFA\u0345\000\u1E0F\u0307\000\u01A1"+
+        "\u0307\000\u1E13\u0307\000\u1E74\u0303\000\u1E11\u0307\000\u1E76\u0303"+
+        "\000\u0162\u0331\000\u01EB\u0302\u0301\000\u1E0D\u0307\000\u0172\u0303"+
+        "\000\u1ED9\u0301\000\u1E72\u0303\000\u01EA\u0307\000\u1EE4\u0303\000\u1ECC"+
+        "\u0307\000\u01A1\u0302\u0301\000\u1E0E\u0307\000\u01A0\u0307\000\u1E12"+
+        "\u0307\000\u1E10\u0307\000\u0163\u0323\000\u01EA\u0302\u0301\000\u1E0C"+
+        "\u0307\000\u1ED8\u0301\000\u01EB\u0303\u0304\000\u1ECD\u0303\u0304\000"+
+        "\u01A0\u0302\u0301\000\u1EE1\u0304\000\u0162\u0323\000\u01EB\u0309\000"+
+        "\u0105\u0306\000\u1E01\u0306\000\u1ECD\u0309\000\u01EA\u0303\u0304\000"+
+        "\u1ECC\u0303\u0304\000\u1E6F\u0307\000\u1EE0\u0304\000\u1E71\u0307\000"+
+        "\u1E6F\u030C\000\u1E71\u030C\000\u0163\u0307\000\u021B\u0307\000\u01EA"+
+        "\u0309\000\u0104\u0306\000\u1E6D\u0307\000\u1E00\u0306\000\u0163\u030C"+
+        "\000\u021B\u030C\000\u1ECC\u0309\000\u01EB\u0308\u0304\000\u1E6D\u030C"+
+        "\000\u1ECD\u0308\u0304\000\u1E6E\u0307\000\u01A1\u0308\u0304\000\u1E70"+
+        "\u0307\000\u1E6E\u030C\000\u1E70\u030C\000\u0162\u0307\000\u021A\u0307"+
+        "\000\u01EB\u0323\000\u0105\u0304\000\u1E6C\u0307\000\u1E01\u0304\000\u0162"+
+        "\u030C\000\u021A\u030C\000\u1EA1\u0304\000\u01EA\u0308\u0304\000\u1E6C"+
+        "\u030C\000\u1ECC\u0308\u0304\000\u01A0\u0308\u0304\000\u015F\u0323\u0307"+
+        "\000\u01EA\u0323\000\u0104\u0304\000\u1E00\u0304\000\u1EA0\u0304\000\u015E"+
+        "\u0323\u0307\000\u012F\u0323\000\u1EF5\u0308\000\u015F\u030C\u0307\000"+
+        "\u0219\u030C\u0307\000\u012E\u0323\000\u1E63\u030C\u0307\000\u015F\u030C"+
+        "\000\u0219\u030C\000\u0105\u0307\000\u1E63\u030C\000\u1E01\u0307\000\u1EA1"+
+        "\u0307\000\u1E07\u0307\000\u1E2D\u0309\000\u015E\u030C\u0307\000\u0218"+
+        "\u030C\u0307\000\u012F\u0309\000\u1E05\u0307\000\u1E62\u030C\u0307\000"+
+        "\u015E\u030C\000\u0218\u030C\000\u1ECB\u0309\000\u1EF5\u0301\000\u0104"+
+        "\u0307\000\u1E62\u030C\000\u1E00\u0307\000\u1EA0\u0307\000\u1E06\u0307"+
+        "\000\u1E2C\u0309\000\u1E75\u0308\000\u1E77\u0308\000\u015F\u0301\u0307"+
+        "\000\u0219\u0301\u0307\000\u012E\u0309\000\u0173\u0308\000\u1E04\u0307"+
+        "\000\u1E63\u0301\u0307\000\u1E73\u0308\000\u1ECA\u0309\000\u1EE5\u0308"+
+        "\000\u01B0\u0308\000\u1E75\u0302\000\u1E77\u0302\000\u0105\u0325\000\u015E"+
+        "\u0301\u0307\000\u0218\u0301\u0307\000\u0119\u0323\u0302\000\u0173\u0302"+
+        "\000\u0229\u0323\u0302\000\u1E62\u0301\u0307\000\u1E73\u0302\000\u1EE5"+
+        "\u0302\000\u01B0\u0302\000\u1E75\u0301\000\u1E77\u0301\000\u0104\u0325"+
+        "\000\u015F\u0323\000\u0118\u0323\u0302\000\u0173\u0301\000\u0228\u0323"+
+        "\u0302\000\u015F\u0302\000\u1E73\u0301\000\u0219\u0302\000\u1EE5\u0301"+
+        "\000\u1E63\u0302\000\u1E1B\u0302\u0303\000\u1E75\u0300\000\u1E19\u0302"+
+        "\u0303\000\u1E77\u0300\000\u015E\u0323\000\u0119\u0302\u0303\000\u0173"+
+        "\u0300\000\u0229\u0302\u0303\000\u015E\u0302\000\u1E73\u0300\000\u0218"+
+        "\u0302\000\u1EC7\u0303\000\u1EE5\u0300\000\u1E62\u0302\000\u1E1A\u0302"+
+        "\u0303\000\u1E18\u0302\u0303\000\u015F\u0307\000\u0219\u0307\000\u0118"+
+        "\u0302\u0303\000\u0228\u0302\u0303\000\u015F\u0301\000\u0219\u0301\000"+
+        "\u1EC6\u0303\000\u1E63\u0301\000\u1E1B\u0302\u0309\000\u1E19\u0302\u0309"+
+        "\000\u015E\u0307\000\u0218\u0307\000\u0119\u0302\u0309\000\u0229\u0302"+
+        "\u0309\000\u015E\u0301\000\u0218\u0301\000\u1EC7\u0309\000\u1E62\u0301"+
+        "\000\u1E1A\u0302\u0309\000\u1E5F\u030C\000\u1E18\u0302\u0309\000\u1E96"+
+        "\u030C\000\u0157\u0331\000\u0118\u0302\u0309\000\u01EB\u0308\000\u1E2B"+
+        "\u030C\000\u0228\u0302\u0309\000\u0157\u030C\000\u1EC6\u0309\000\u1ECD"+
+        "\u0308\000\u1E5B\u030C\000\u1E29\u030C\000\u1E25\u030C\000\u01A1\u0308"+
+        "\000\u1E1B\u0302\u0300\000\u1E5E\u030C\000\u1E19\u0302\u0300\000\u0156"+
+        "\u0331\000\u0119\u0302\u0300\000\u01EB\u0303\000\u1E2A\u030C\000\u0229"+
+        "\u0302\u0300\000\u0156\u030C\000\u1EC7\u0300\000\u1ECD\u0303\000\u1E5A"+
+        "\u030C\000\u1E28\u030C\000\u1E24\u030C\000\u1E1A\u0302\u0300\000\u1E18"+
+        "\u0302\u0300\000\u0157\u0323\u0304\000\u0118\u0302\u0300\000\u01EB\u0302"+
+        "\000\u0228\u0302\u0300\000\u1EC6\u0300\000\u01A1\u0302\000\u1E1B\u0302"+
+        "\u0301\000\u1E19\u0302\u0301\000\u0156\u0323\u0304\000\u0119\u0302\u0301"+
+        "\000\u01EB\u0301\000\u0229\u0302\u0301\000\u1EC7\u0301\000\u1ECD\u0301"+
+        "\000\u1E1A\u0302\u0301\000\u1E5F\u0301\000\u1E18\u0302\u0301\000\u0157"+
+        "\u0323\000\u0118\u0302\u0301\000\u01EB\u0300\000\u0228\u0302\u0301\000"+
+        "\u0157\u0301\000\u1EC6\u0301\000\u1ECD\u0300\000\u1E5B\u0301\000\u0163"+
+        "\u0326\000\u1E49\u0303\000\u1E1B\u0303\000\u1E5E\u0301\000\u1E19\u0303"+
+        "\000\u1E4B\u0303\000\u0156\u0323\000\u0119\u0303\000\u0229\u0303\000\u0146"+
+        "\u0303\000\u0156\u0301\000\u1EB9\u0303\000\u1E47\u0303\000\u1E5A\u0301"+
+        "\000\u0162\u0326\000\u1E5F\u0307\000\u1E1A\u0303\000\u1E18\u0303\000\u0157"+
+        "\u0307\000\u0118\u0303\000\u0228\u0303\000\u1E5B\u0307\000\u1EB8\u0303"+
+        "\000\u015F\u0326\000\u1E5E\u0307\000\u1E1B\u0309\000\u1E2D\u0308\000\u1E19"+
+        "\u0309\000\u0156\u0307\000\u0119\u0309\000\u012F\u0308\000\u0229\u0309"+
+        "\000\u1E5A\u0307\000\u1EB9\u0309\000\u1ECB\u0308\000\u015E\u0326\000\u1E1A"+
+        "\u0309\000\u1E2D\u0302\000\u1E18\u0309\000\u1E75\u0311\000\u0118\u0309"+
+        "\000\u012F\u0302\000\u0228\u0309\000\u1E77\u0311\000\u01EB\u030B\000\u1EB8"+
+        "\u0309\000\u1ECB\u0302\000\u0173\u0311\000\u1ECD\u030B\000\u1E73\u0311"+
+        "\000\u1EE5\u0311\000\u01A1\u030B\000\u01B0\u0311\000\u1E2D\u0301\000\u1E74"+
+        "\u0311\000\u0119\u0323\000\u012F\u0301\000\u0229\u0323\000\u1E76\u0311"+
+        "\000\u01EA\u030B\000\u1ECB\u0301\000\u0172\u0311\000\u1ECC\u030B\000\u1E72"+
+        "\u0311\000\u1EE4\u0311\000\u01A0\u030B\000\u01AF\u0311\000\u1E2D\u0300"+
+        "\000\u1E75\u030F\000\u0118\u0323\000\u012F\u0300\000\u0228\u0323\000\u1E77"+
+        "\u030F\000\u01EB\u0306\000\u1ECB\u0300\000\u0173\u030F\000\u1ECD\u0306"+
+        "\000\u1E73\u030F\000\u1EE5\u030F\000\u01A1\u0306\000\u01B0\u030F\000\u1E1B"+
+        "\u0308\000\u1E19\u0308\000\u1E74\u030F\000\u0105\u0323\u0306\000\u0119"+
+        "\u0308\000\u0229\u0308\000\u1E76\u030F\000\u01EA\u0306\000\u1EB9\u0308"+
+        "\000\u0172\u030F\000\u1ECC\u0306\000\u1E72\u030F\000\u1EE4\u030F\000\u01A0"+
+        "\u0306\000\u01AF\u030F\000\u1E1B\u0302\000\u1E19\u0302\000\u1E5F\u0311"+
+        "\000\u01ED\u0301\000\u0104\u0323\u0306\000\u0119\u0302\000\u0229\u0302"+
+        "\000\u1ECD\u0304\u0301\000\u0173\u031B\000\u1ECD\u0304\000\u0157\u0311"+
+        "\000\u01A1\u0304\u0301\000\u1E5B\u0311\000\u01A1\u0304\000\u1E1B\u0301"+
+        "\000\u1E19\u0301\000\u1E5E\u0311\000\u01EC\u0301\000\u0105\u0306\u0303"+
+        "\000\u0119\u0301\000\u0229\u0301\000\u1ECC\u0304\u0301\000\u1E01\u0306"+
+        "\u0303\000\u0172\u031B\000\u1EB7\u0303\000\u1EB9\u0301\000\u1ECC\u0304"+
+        "\000\u0156\u0311\000\u01A0\u0304\u0301\000\u1E5A\u0311\000\u01A0\u0304"+
+        "\000\u1E1B\u0300\000\u1E19\u0300\000\u1E5F\u030F\000\u01ED\u0300\000\u0104"+
+        "\u0306\u0303\000\u0119\u0300\000\u0229\u0300\000\u1ECD\u0304\u0300\000"+
+        "\u1E00\u0306\u0303\000\u1EB6\u0303\000\u1EB9\u0300\000\u0157\u030F\000"+
+        "\u01A1\u0304\u0300\000\u1E5B\u030F\000\u1E5E\u030F\000\u01EC\u0300\000"+
+        "\u0105\u0306\u0309\000\u1ECC\u0304\u0300\000\u1E01\u0306\u0309\000\u1EB7"+
+        "\u0309\000\u0156\u030F\000\u01A0\u0304\u0300\000\u1E5A\u030F\000\u01EB"+
+        "\u0303\u0308\000\u0104\u0306\u0309\000\u1ECD\u0303\u0308\000\u1E00\u0306"+
+        "\u0309\000\u1EB6\u0309\000\u01EB\u0311\000\u1EE1\u0308\000\u1ECD\u0311"+
+        "\000\u01A1\u0311\000\u1E49\u030C\000\u1E4B\u030C\000\u01EA\u0303\u0308"+
+        "\000\u0105\u0306\u0300\000\u0105\u030A\000\u1ECC\u0303\u0308\000\u1E01"+
+        "\u0306\u0300\000\u1E01\u030A\000\u0146\u030C\000\u1EB7\u0300\000\u1EA1"+
+        "\u030A\000\u01EA\u0311\000\u1E47\u030C\000\u1EE0\u0308\000\u1ECC\u0311"+
+        "\000\u01A0\u0311\000\u1E48\u030C\000\u1E4A\u030C\000\u01EB\u0303\u0301"+
+        "\000\u0104\u0306\u0300\000\u0105\u0308\000\u1ECD\u0303\u0301\000\u1E00"+
+        "\u0306\u0300\000\u1E01\u0308\000\u0145\u030C\000\u1EB6\u0300\000\u1EA1"+
+        "\u0308\000\u01EB\u030F\000\u1E46\u030C\000\u1EE1\u0301\000\u1ECD\u030F"+
+        "\000\u01A1\u030F\000\u01EA\u0303\u0301\000\u0105\u0306\u0301\000\u0105"+
+        "\u0303\000\u1ECC\u0303\u0301\000\u1E01\u0306\u0301\000\u1E01\u0303\000"+
+        "\u1EB7\u0301\000\u1EA1\u0303\000\u01EA\u030F\000\u1EE0\u0301\000\u1ECC"+
+        "\u030F\000\u01A0\u030F\000\u1E2D\u0311\000\u0146\u032D\000\u0104\u0306"+
+        "\u0301\000\u0105\u0302\000\u1E00\u0306\u0301\000\u1E01\u0302\000\u1EB6"+
+        "\u0301\000\u012F\u0311\000\u1ECB\u0311\000\u1E49\u0301\000\u1E4B\u0301"+
+        "\000\u1E2C\u0311\000\u0145\u032D\000\u0105\u0323\u0302\000\u0105\u0301"+
+        "\000\u1E01\u0301\000\u0146\u0301\000\u1EA1\u0301\000\u012E\u0311\000\u1E47"+
+        "\u0301\000\u1ECA\u0311\000\u1E48\u0301\000\u1E4A\u0301\000\u1E2D\u030F"+
+        "\000\u0146\u0331\000\u0104\u0323\u0302\000\u0105\u0300\000\u1E01\u0300"+
+        "\000\u0145\u0301\000\u1EA1\u0300\000\u012F\u030F\000\u1E46\u0301\000\u1ECB"+
+        "\u030F\000\u1E2C\u030F\000\u0145\u0331\000\u0105\u0302\u0303\000\u1E01"+
+        "\u0302\u0303\000\u1EAD\u0303\000\u012E\u030F\000\u1ECA\u030F\000\u1E1B"+
+        "\u0311\000\u0146\u0323\000\u0104\u0302\u0303\000\u1E19\u0311\000\u1E00"+
+        "\u0302\u0303\000\u1EAC\u0303\000\u0119\u0311\000\u0229\u0311\000\u1EB9"+
+        "\u0311\000\u0145\u0323\000\u1E1A\u0311\000\u0105\u0302\u0309\000\u1E18"+
+        "\u0311\000\u1E01\u0302\u0309\000\u1EAD\u0309\000\u1EF4\u0301\000\u0118"+
+        "\u0311\000\u0228\u0311\000\u1EB8\u0311\000\u1E49\u0307\000\u1E4B\u0307"+
+        "\000\u1E74\u0308\000\u1E76\u0308\000\u0146\u0307\000\u1E1B\u030F\000\u0104"+
+        "\u0302\u0309\000\u0172\u0308\000\u1E19\u030F\000\u1E47\u0307\000\u1E00"+
+        "\u0302\u0309\000\u1EAC\u0309\000\u1E72\u0308\000\u1EE4\u0308\000\u0119"+
+        "\u030F\000\u0229\u030F\000\u1EB9\u030F\000\u01AF\u0308\000\u1E48\u0307"+
+        "\000\u1E4A\u0307\000\u1E74\u0302\000\u1E3B\u030C\000\u1E76\u0302\000\u1E3D"+
+        "\u030C\000\u0145\u0307\000\u1E1A\u030F\000\u0105\u0302\u0300\000\u0172"+
+        "\u0302\000\u1E18\u030F\000\u1E46\u0307\000\u1E01\u0302\u0300\000\u013C"+
+        "\u030C\000\u1E72\u0302\000\u01EB\u031B\000\u1EAD\u0300\000\u1EE4\u0302"+
+        "\000\u0118\u030F\000\u1E37\u030C\000\u0228\u030F\000\u1EB8\u030F\000\u01AF"+
+        "\u0302\000\u1E74\u0301\000\u1E3A\u030C\000\u1E76\u0301\000\u1E3C\u030C"+
+        "\000\u0104\u0302\u0300\000\u0172\u0301\000\u1E00\u0302\u0300\000\u013B"+
+        "\u030C\000\u1E72\u0301\000\u01EA\u031B\000\u1EAC\u0300\000\u1EE4\u0301"+
+        "\000\u0105\u0311\000\u1E36\u030C\000\u1E01\u0311\000\u1EA1\u0311\000\u1E74"+
+        "\u0300\000\u1E76\u0300\000\u0105\u0302\u0301\000\u0172\u0300\000\u1E01"+
+        "\u0302\u0301\000\u1E72\u0300\000\u1EAD\u0301\000\u1EE4\u0300\000\u0104"+
+        "\u0311\000\u1E00\u0311\000\u1EA0\u0311\000\u0104\u0302\u0301\000\u1E43"+
+        "\u0307\000\u1E00\u0302\u0301\000\u1EAC\u0301\000\u0105\u030F\000\u1E01"+
+        "\u030F\000\u1EA1\u030F\000\u1E3B\u0301\000\u1E3D\u0301\000\u0105\u0309"+
+        "\000\u1E42\u0307\000\u1E01\u0309\000\u013C\u0301\000\u1EA1\u0309\000\u0104"+
+        "\u030F\000\u1E37\u0301\000\u1E00\u030F\000\u1EA0\u030F\000\u1E3A\u0301"+
+        "\000\u1E3C\u0301\000\u0104\u0309\000\u01EA\u0308\000\u1E43\u0301\000\u1E00"+
+        "\u0309\000\u013B\u0301\000\u1EA0\u0309\000\u1ECC\u0308\000\u1E36\u0301"+
+        "\000\u01A0\u0308\000\u0389\u0345\000\u1FCA\u0345\000\u0105\u0323\000\u01EA"+
+        "\u0303\000\u1E42\u0301\000\u1ECC\u0303\000\u013C\u032D\000\u0104\u0323"+
+        "\000\u01EA\u0302\000\u01A0\u0302\000\u013B\u032D\000\u01EA\u0301\000\u1ECC"+
+        "\u0301\000\u0625\u0654\000\u013C\u0331\000\u01EA\u0300\000\u1ECC\u0300"+
+        "\000\u0105\u030A\u0301\000\u1E01\u030A\u0301\000\u1EA1\u030A\u0301\000"+
+        "\u0625\u0653\000\u1E48\u0303\000\u1E4A\u0303\000\u013B\u0331\000\u0145"+
+        "\u0303\000\u1E46\u0303\000\u0104\u030A\u0301\000\u1E00\u030A\u0301\000"+
+        "\u1EA0\u030A\u0301\000\u1E49\u0300\000\u013C\u0323\u0304\000\u1E4B\u0300"+
+        "\000\u0146\u0300\000\u1E47\u0300\000\u1E2C\u0308\000\u1E48\u0300\000\u013B"+
+        "\u0323\u0304\000\u012E\u0308\000\u1E4A\u0300\000\u1ECA\u0308\000\u0145"+
+        "\u0300\000\u1E46\u0300\000\u1E2C\u0302\000\u013C\u0323\000\u012E\u0302"+
+        "\000\u1ECA\u0302\000\u1E2C\u0301\000\u1E2C\u0307\000\u013B\u0323\000\u012E"+
+        "\u0301\000\u012E\u0307\000\u1EF5\u030A\000\u1ECA\u0301\000\u1ECA\u0307"+
+        "\000\u1E2C\u0300\000\u0137\u0331\000\u012E\u0300\000\u1E89\u030A\000\u1ECA"+
+        "\u0300\000\u0123\u0301\000\u1E6F\u0308\000\u1E1A\u0308\000\u1E71\u0308"+
+        "\000\u1E18\u0308\000\u0136\u0331\000\u0118\u0308\000\u0163\u0308\000\u0228"+
+        "\u0308\000\u021B\u0308\000\u1E6D\u0308\000\u1EB8\u0308\000\u0122\u0301"+
+        "\000\u1E1A\u0302\000\u1E2D\u0306\000\u1E18\u0302\000\u0137\u0323\000\u0118"+
+        "\u0302\000\u1E29\u0331\000\u0228\u0302\000\u012F\u0306\000\u1EF5\u0303"+
+        "\000\u1ECB\u0306\000\u1E1A\u0301\000\u1E2C\u0306\000\u1E18\u0301\000\u0136"+
+        "\u0323\000\u0118\u0301\000\u0228\u0301\000\u012E\u0306\000\u1EB8\u0301"+
+        "\000\u1EF4\u0303\000\u1ECA\u0306\000\u1E35\u0301\000\u1E1A\u0300\000\u1E2D"+
+        "\u0304\000\u1E18\u0300\000\u0137\u0301\000\u0118\u0300\000\u0228\u0300"+
+        "\000\u012F\u0304\000\u1E33\u0301\000\u1EB8\u0300\000\u1EF5\u0309\000\u1ECB"+
+        "\u0304\000\u1E34\u0301\000\u1E2C\u0304\000\u0136\u0301\000\u012E\u0304"+
+        "\000\u1E32\u0301\000\u1EF4\u0309\000\u1ECA\u0304\000\u1E2D\u0308\u0301"+
+        "\000\u1E2D\u0303\000\u012F\u0308\u0301\000\u012F\u0303\000\u1ECB\u0308"+
+        "\u0301\000\u1ECB\u0303\000\u1FB8\u0345\000\u1FB9\u0345\000\u0386\u0345"+
+        "\000\u1FBA\u0345\000\u1E2C\u0308\u0301\000\u1E95\u0302\000\u1E2C\u0303"+
+        "\000\u012E\u0308\u0301\000\u0104\u030A\000\u012E\u0303\000\u1ECA\u0308"+
+        "\u0301\000\u1E00\u030A\000\u1E93\u0302\000\u1EA0\u030A\000\u1ECA\u0303"+
+        "\000\u1E94\u0302\000\u012F\u0330\000\u0104\u0308\000\u1E00\u0308\000\u1E92"+
+        "\u0302\000\u1EA0\u0308\000\u1EF5\u0300\000\u012E\u0330\000\u0104\u0303"+
+        "\000\u1E00\u0303\000\u1EF5\u0307\000\u1EA0\u0303\000\u1EF4\u0300\000\u1E96"+
+        "\u0302\000\u1E2B\u0302\000\u1E29\u032E\000\u0104\u0302\000\u0173\u031B"+
+        "\u0323\000\u1E00\u0302\000\u1E29\u0302\000\u1EF4\u0307\000\u1E25\u0302"+
+        "\000\u1E2A\u0302\000\u1E28\u032E\000\u0104\u0301\000\u0172\u031B\u0323"+
+        "\000\u1E00\u0301\000\u1E28\u0302\000\u1EA0\u0301\000\u1E24\u0302\000\u1E35"+
+        "\u030C\000\u0104\u0300\000\u0173\u031B\u0303\000\u1E00\u0300\000\u1EA0"+
+        "\u0300\000\u1EF1\u0303\000\u0137\u030C\000\u1E33\u030C\000\u1E34\u030C"+
+        "\000\u0172\u031B\u0303\000\u1EF0\u0303\000\u0136\u030C\000\u1E32\u030C"+
+        "\000\u1E96\u0308\000\u1E2B\u0308\000\u1E29\u0308\000\u0173\u031B\u0309"+
+        "\000\u1E25\u0308\000\u0123\u0307\000\u1EF1\u0309\000\u0123\u030C\000\u1E2A"+
+        "\u0308\000\u1E28\u0308\000\u0172\u031B\u0309\000\u1E24\u0308\000\u0122"+
+        "\u0307\000\u1EF0\u0309\000\u0122\u030C\000\u1FB0\u0345\000\u1FB1\u0345"+
+        "\000\u1E29\u0323\000\u0173\u031B\u0300\000\u0123\u0306\000\u1EF1\u0300"+
+        "\000\u1E28\u0323\000\u0172\u031B\u0300\000\u0122\u0306\000\u1E89\u0307"+
+        "\000\u1EF0\u0300\000\u1E96\u0307\000\u1E2B\u0307\000\u1E29\u0307\000\u0173"+
+        "\u031B\u0301\000\u1E25\u0307\000\u0123\u0302\000\u1E88\u0307\000\u1EF1"+
+        "\u0301\000\u1E2A\u0307\000\u1E28\u0307\000\u0172\u031B\u0301\000\u1E24"+
+        "\u0307\000\u0122\u0302\000\u1E89\u0308\000\u1EF0\u0301\000\u1E75\u0309"+
+        "\000\u1E1B\u030C\000\u1E95\u030C\000\u1E77\u0309\000\u1E19\u030C\000\u0123"+
+        "\u0304\000\u0173\u0309\000\u0119\u030C\000\u0229\u030C\000\u1E88\u0308"+
+        "\000\u1E73\u0309\000\u0105\u0307\u0304\000\u1EE5\u0309\000\u1EB9\u030C"+
+        "\000\u1E93\u030C\000\u1E01\u0307\u0304\000\u1EA1\u0307\u0304\000\u1E74"+
+        "\u0309\000\u1E1A\u030C\000\u1E94\u030C\000\u1E76\u0309\000\u1E18\u030C"+
+        "\000\u0122\u0304\000\u0172\u0309\000\u0118\u030C\000\u0228\u030C\000\u1E89"+
+        "\u0301\000\u1E72\u0309\000\u0104\u0307\u0304\000\u1EE4\u0309\000\u1EB8"+
+        "\u030C\000\u1E92\u030C\000\u1E00\u0307\u0304\000\u1EA0\u0307\u0304\000"+
+        "\u1E95\u0307\000\u0173\u0323\000\u1E88\u0301\000\u0105\u0308\u0304\000"+
+        "\u1E93\u0307\000\u1E01\u0308\u0304\000\u1EA1\u0308\u0304\000\u1E94\u0307"+
+        "\000\u0172\u0323\000\u1E89\u0300\000\u0104\u0308\u0304\000\u1E92\u0307"+
+        "\000\u1E00\u0308\u0304\000\u1EA0\u0308\u0304\000\u1E1B\u0307\000\u1E95"+
+        "\u0301\000\u1E19\u0307\000\u01EB\u031B\u0323\000\u0119\u0307\000\u0229"+
+        "\u0307\000\u1E88\u0300\000\u1EB9\u0307\000\u1E93\u0301\000\u1E1A\u0307"+
+        "\000\u1E94\u0301\000\u1E18\u0307\000\u1E75\u0308\u0300\000\u1E77\u0308"+
+        "\u0300\000\u01EA\u031B\u0323\000\u0118\u0307\000\u0228\u0307\000\u0173"+
+        "\u0308\u0300\000\u1EB8\u0307\000\u1E92\u0301\000\u1E73\u0308\u0300\000"+
+        "\u1EE5\u0308\u0300\000\u01B0\u0308\u0300\000\u1E1B\u0306\000\u1E19\u0306"+
+        "\000\u0119\u0330\000\u1E74\u0308\u0300\000\u0229\u0330\000\u1E76\u0308"+
+        "\u0300\000\u01EB\u031B\u0303\000\u0119\u0306\000\u0172\u0308\u0300\000"+
+        "\u1EE3\u0303\000\u1EB9\u0306\000\u1EF4\u0308\000\u1E72\u0308\u0300\000"+
+        "\u1EE4\u0308\u0300\000\u01AF\u0308\u0300\000\u1E1A\u0306\000\u1E18\u0306"+
+        "\000\u0118\u0330\000\u1E75\u0308\u030C\000\u0228\u0330\000\u1E77\u0308"+
+        "\u030C\000\u01EA\u031B\u0303\000\u0118\u0306\000\u1E7F\u0303\000\u0173"+
+        "\u0308\u030C\000\u1EE2\u0303\000\u1EB8\u0306\000\u1EF5\u0302\000\u1E73"+
+        "\u0308\u030C\000\u1EE5\u0308\u030C\000\u01B0\u0308\u030C\000\u1E1B\u0304"+
+        "\000\u1E19\u0304\000\u0119\u032D\000\u1E74\u0308\u030C\000\u0229\u032D"+
+        "\000\u1E76\u0308\u030C\000\u01EB\u031B\u0309\000\u0119\u0304\000\u0229"+
+        "\u0304\000\u1E7E\u0303\000\u0172\u0308\u030C\000\u1EE3\u0309\000\u1EB9"+
+        "\u0304\000\u1EF4\u0302\000\u1E72\u0308\u030C\000\u1EE4\u0308\u030C\000"+
+        "\u01AF\u0308\u030C\000\u1E75\u0304\u0308\000\u1E1A\u0304\000\u1E77\u0304"+
+        "\u0308\000\u1E18\u0304\000\u0118\u032D\000\u1E75\u0308\u0301\000\u0228"+
+        "\u032D\000\u0173\u0304\u0308\000\u1E77\u0308\u0301\000\u01EA\u031B\u0309"+
+        "\000\u0118\u0304\000\u0228\u0304\000\u1E73\u0304\u0308\000\u1EE5\u0304"+
+        "\u0308\000\u0173\u0308\u0301\000\u1EE2\u0309\000\u1EB8\u0304\000\u1E89"+
+        "\u0302\000\u1E73\u0308\u0301\000\u1EE5\u0308\u0301\000\u01B0\u0304\u0308"+
+        "\000\u01B0\u0308\u0301\000\u1E1B\u0304\u0301\000\u1E74\u0304\u0308\000"+
+        "\u1E19\u0304\u0301\000\u1E76\u0304\u0308\000\u0119\u0304\u0301\000\u1E74"+
+        "\u0308\u0301\000\u0229\u0304\u0301\000\u0172\u0304\u0308\000\u1E76\u0308"+
+        "\u0301\000\u01EB\u031B\u0300\000\u1EB9\u0304\u0301\000\u1E72\u0304\u0308"+
+        "\000\u1EE4\u0304\u0308\000\u0172\u0308\u0301\000\u1EE3\u0300\000\u1E88"+
+        "\u0302\000\u1E72\u0308\u0301\000\u1EE4\u0308\u0301\000\u01AF\u0304\u0308"+
+        "\000\u01AF\u0308\u0301\000\u1E1A\u0304\u0301\000\u1E75\u0303\u0301\000"+
+        "\u1E18\u0304\u0301\000\u1E77\u0303\u0301\000\u0118\u0304\u0301\000\u1E75"+
+        "\u0308\u0304\000\u0228\u0304\u0301\000\u0173\u0303\u0301\000\u1E77\u0308"+
+        "\u0304\000\u01EA\u031B\u0300\000\u1EB8\u0304\u0301\000\u1E73\u0303\u0301"+
+        "\000\u1EE5\u0303\u0301\000\u0173\u0308\u0304\000\u1EE2\u0300\000\u1E73"+
+        "\u0308\u0304\000\u1EE5\u0308\u0304\000\u1EEF\u0301\000\u01B0\u0308\u0304"+
+        "\000\u1E1B\u0304\u0300\000\u1E74\u0303\u0301\000\u1E19\u0304\u0300\000"+
+        "\u1E0F\u030C\000\u1E76\u0303\u0301\000\u1E13\u030C\000\u0119\u0304\u0300"+
+        "\000\u1E74\u0308\u0304\000\u0229\u0304\u0300\000"
+    ;
+
+    static final int[] typeBit = Utility.RLEStringToIntArray(
+        "\000g\000\000\000\uA5A5\000\020\0001\000+\000\uA5A5\000\004\000-\000*"+
+        "\000*\000\uA5A5\000\004\000-\000\002\0001\0005\000\012\0001\0001\000-"+
+        "\000\003\000\uA5A5\000\007\000\001\000\042\000\uA5A5\000\005\000\001\000"+
+        "\005\000\001\000\001\000\001\000\004\000\004\0001\0002\000-\000*\000\002"+
+        "\0004\0003\000.\0000\000\006\000\007\000\010\000\011\000\013\000\014\000"+
+        "\015\000\016\000\017\000\020\000\021\000\022\000\023\000\024\000\025\000"+
+        "\027\000\030\000\031\000\032\000\033\000\034\000\035\000\036\000\037\000"+
+        " \000\005\000\003\000!\000#\000$\000%\000&\000+\000'\000(\000)\000,\000"+
+        "/\000\026"
+    );
+}
diff --git a/src/com/ibm/text/ComposedCharIter.java b/src/com/ibm/text/ComposedCharIter.java
new file mode 100755
index 0000000..9370fde
--- /dev/null
+++ b/src/com/ibm/text/ComposedCharIter.java
@@ -0,0 +1,167 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/ComposedCharIter.java,v $ 
+ * $Date: 2000/03/10 04:07:19 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+/**
+ * <tt>ComposedCharIter</tt> is an iterator class that returns all
+ * of the precomposed characters defined in the Unicode standard, along
+ * with their decomposed forms.  This is often useful when building
+ * data tables (<i>e.g.</i> collation tables) which need to treat composed
+ * and decomposed characters equivalently.
+ * <p>
+ * For example, imagine that you have built a collation table with ordering
+ * rules for the {@link Normalizer#DECOMP canonically decomposed} forms of all
+ * characters used in a particular language.  When you process input text using
+ * this table, the text must first be decomposed so that it matches the form
+ * used in the table.  This can impose a performance penalty that may be
+ * unacceptable in some situations.
+ * <p>
+ * You can avoid this problem by ensuring that the collation table contains
+ * rules for both the decomposed <i>and</i> composed versions of each character.
+ * To do so, use a <tt>ComposedCharIter</tt> to iterate through all of the
+ * composed characters in Unicode.  If the decomposition for that character
+ * consists solely of characters that are listed in your ruleset, you can
+ * add a new rule for the composed character that makes it equivalent to
+ * its decomposition sequence.
+ * <p>
+ * Note that <tt>ComposedCharIter</tt> iterates over a <em>static</em> table
+ * of the composed characters in Unicode.  If you want to iterate over the
+ * composed characters in a particular string, use {@link Normalizer} instead.
+ * <p>
+ * When constructing a <tt>ComposedCharIter</tt> there is one
+ * optional feature that you can enable or disable:
+ * <ul>
+ *   <li>{@link Normalizer#IGNORE_HANGUL} - Do not iterate over the Hangul
+ *          characters and their corresponding Jamo decompositions.
+ *          This option is off by default (<i>i.e.</i> Hangul processing is enabled)
+ *          since the Unicode standard specifies that Hangul to Jamo 
+ *          is a canonical decomposition.
+ * </ul>
+ * <p>
+ * <tt>ComposedCharIter</tt> is currently based on version 2.1.8 of the
+ * <a href="http://www.unicode.org" target="unicode">Unicode Standard</a>.
+ * It will be updated as later versions of Unicode are released.
+ */
+public final class ComposedCharIter {
+    
+    /**
+     * Constant that indicates the iteration has completed.
+     * {@link #next} returns this value when there are no more composed characters
+     * over which to iterate.
+     */
+    public static final char DONE = Normalizer.DONE;
+    
+    /**
+     * Construct a new <tt>ComposedCharIter</tt>.  The iterator will return
+     * all Unicode characters with canonical decompositions, including Korean
+     * Hangul characters.
+     */
+    public ComposedCharIter() {
+        minDecomp = DecompData.MAX_COMPAT;
+        hangul = false;
+    }
+    
+    
+    /**
+     * Constructs a non-default <tt>ComposedCharIter</tt> with optional behavior.
+     * <p>
+     * @param compat    <tt>false</tt> for canonical decompositions only;
+     *                  <tt>true</tt> for both canonical and compatibility
+     *                  decompositions.
+     *
+     * @param options   Optional decomposition features.  Currently, the only
+     *                  supported option is {@link Normalizer#IGNORE_HANGUL}, which
+     *                  causes this <tt>ComposedCharIter</tt> not to iterate
+     *                  over the Hangul characters and their corresponding
+     *                  Jamo decompositions.
+     */
+    public ComposedCharIter(boolean compat, int options) {
+        // Compatibility explosions have lower indices; skip them if necessary
+        minDecomp = compat ? 0 : DecompData.MAX_COMPAT;
+        
+        hangul = (options & Normalizer.IGNORE_HANGUL) == 0;
+    }
+    
+    /**
+     * Determines whether there any precomposed Unicode characters not yet returned
+     * by {@link #next}.
+     */
+    public boolean hasNext() {
+        if (nextChar == DONE)  {
+            findNextChar();
+        }
+        return nextChar != DONE;
+    }
+    
+    /**
+     * Returns the next precomposed Unicode character.
+     * Repeated calls to <tt>next</tt> return all of the precomposed characters defined
+     * by Unicode, in ascending order.  After all precomposed characters have
+     * been returned, {@link #hasNext} will return <tt>false</tt> and further calls
+     * to <tt>next</tt> will return {@link #DONE}.
+     */
+    public char next() {
+        if (nextChar == DONE)  {
+            findNextChar();
+        }
+        curChar = nextChar;
+        nextChar = DONE;
+        return curChar;
+    }
+    
+    /**
+     * Returns the Unicode decomposition of the current character.
+     * This method returns the decomposition of the precomposed character most
+     * recently returned by {@link #next}.  The resulting decomposition is
+     * affected by the settings of the options passed to the constructor.
+     */
+    public String decomposition() {
+        StringBuffer result = new StringBuffer();
+        
+        int pos = (char)(DecompData.offsets.elementAt(curChar) & DecompData.DECOMP_MASK);
+        
+        if (pos > minDecomp) {
+            Normalizer.doAppend(DecompData.contents, pos, result);
+            
+            
+        } else if (hangul && curChar >= HANGUL_BASE && curChar < HANGUL_LIMIT) {
+            Normalizer.hangulToJamo(curChar, result, minDecomp);
+        } else {
+            result.append(curChar);
+        }
+        return result.toString();
+    }
+    
+    private void findNextChar() {
+        if (curChar != DONE) {
+            char ch = curChar;
+            while (++ch < 0xFFFF) {
+                int offset = DecompData.offsets.elementAt(ch) & DecompData.DECOMP_MASK;
+                if (offset > minDecomp
+                    || (hangul && ch >= HANGUL_BASE && ch < HANGUL_LIMIT) ) {
+                    nextChar = ch;
+                    break;
+                }
+            }
+        }
+    }
+    
+    private final int minDecomp;
+    private final boolean hangul;
+    
+    private char curChar = 0;
+    private char nextChar = Normalizer.DONE;
+    
+    private static final char HANGUL_BASE = Normalizer.HANGUL_BASE;
+    private static final char HANGUL_LIMIT = Normalizer.HANGUL_LIMIT;
+};
diff --git a/src/com/ibm/text/CompoundTransliterator.java b/src/com/ibm/text/CompoundTransliterator.java
new file mode 100755
index 0000000..b6d62b4
--- /dev/null
+++ b/src/com/ibm/text/CompoundTransliterator.java
@@ -0,0 +1,341 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/CompoundTransliterator.java,v $ 
+ * $Date: 2000/06/28 20:49:54 $ 
+ * $Revision: 1.11 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import com.ibm.util.Utility;
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ * A transliterator that is composed of two or more other
+ * transliterator objects linked together.  For example, if one
+ * transliterator transliterates from script A to script B, and
+ * another transliterates from script B to script C, the two may be
+ * combined to form a new transliterator from A to C.
+ *
+ * <p>Composed transliterators may not behave as expected.  For
+ * example, inverses may not combine to form the identity
+ * transliterator.  See the class documentation for {@link
+ * Transliterator} for details.
+ *
+ * <p>If a non-<tt>null</tt> <tt>UnicodeFilter</tt> is applied to a
+ * <tt>CompoundTransliterator</tt>, it has the effect of being
+ * logically <b>and</b>ed with the filter of each transliterator in
+ * the chain.
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: CompoundTransliterator.java,v $ $Revision: 1.11 $ $Date: 2000/06/28 20:49:54 $
+ */
+public class CompoundTransliterator extends Transliterator {
+
+    private static final boolean DEBUG = false;
+
+    private Transliterator[] trans;
+
+    /**
+     * Array of original filters associated with transliterators.
+     */
+    private UnicodeFilter[] filters = null;
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Constructs a new compound transliterator given an array of
+     * transliterators.  The array of transliterators may be of any
+     * length, including zero or one, however, useful compound
+     * transliterators have at least two components.
+     * @param transliterators array of <code>Transliterator</code>
+     * objects
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     */
+    public CompoundTransliterator(Transliterator[] transliterators,
+                                  UnicodeFilter filter) {
+        super(joinIDs(transliterators), null); // don't set filter here!
+        trans = new Transliterator[transliterators.length];
+        System.arraycopy(transliterators, 0, trans, 0, trans.length);
+        computeMaximumContextLength();
+        if (filter != null) {
+            setFilter(filter);
+        }
+    }
+
+    /**
+     * Constructs a new compound transliterator given an array of
+     * transliterators.  The array of transliterators may be of any
+     * length, including zero or one, however, useful compound
+     * transliterators have at least two components.
+     * @param transliterators array of <code>Transliterator</code>
+     * objects
+     */
+    public CompoundTransliterator(Transliterator[] transliterators) {
+        this(transliterators, null);
+    }
+    
+    /**
+     * Splits an ID of the form "ID;ID;..." into a compound using each
+     * of the IDs. 
+     * @param ID of above form
+     * @param forward if false, does the list in reverse order, and
+     * takes the inverse of each ID.
+     */
+    public CompoundTransliterator(String ID, int direction,
+                                  UnicodeFilter filter) {
+        // changed MED
+        // Later, add "rule1[filter];rule2...
+        super(ID, null); // don't set filter here!
+        String[] list = split(ID, ';');
+        trans = new Transliterator[list.length];
+        for (int i = 0; i < list.length; ++i) {
+            trans[i] = getInstance(list[direction==FORWARD ? i : (list.length-1-i)],
+                                   direction);
+        }
+        computeMaximumContextLength();
+        if (filter != null) {
+            setFilter(filter);
+        }
+    }
+    
+    public CompoundTransliterator(String ID, int direction) {
+        this(ID, direction, null);
+    }
+    
+    public CompoundTransliterator(String ID) {
+        this(ID, FORWARD, null);
+    }
+
+    /**
+     * Return the IDs of the given list of transliterators, concatenated
+     * with ';' delimiting them.  Equivalent to the perlish expression
+     * join(';', map($_.getID(), transliterators).
+     */
+    private static String joinIDs(Transliterator[] transliterators) {
+        StringBuffer id = new StringBuffer();
+        for (int i=0; i<transliterators.length; ++i) {
+            if (i > 0) {
+                id.append(';');
+            }
+            id.append(transliterators[i].getID());
+        }
+        return id.toString();
+    }
+
+    /**
+     * Splits a string, as in JavaScript
+     */
+    private static String[] split(String s, char divider) {
+        // changed MED
+
+	    // see how many there are
+	    int count = 1;
+	    for (int i = 0; i < s.length(); ++i) {
+	        if (s.charAt(i) == divider) ++count;
+	    }
+	    
+	    // make an array with them
+	    String[] result = new String[count];
+	    int last = 0;
+	    int current = 0;
+	    int i;
+	    for (i = 0; i < s.length(); ++i) {
+	        if (s.charAt(i) == divider) {
+	            result[current++] = s.substring(last,i);
+	            last = i+1;
+	        }
+	    }
+	    result[current++] = s.substring(last,i);
+	    return result;
+	}
+    
+
+    /**
+     * Returns the number of transliterators in this chain.
+     * @return number of transliterators in this chain.
+     */
+    public int getCount() {
+        return trans.length;
+    }
+
+    /**
+     * Returns the transliterator at the given index in this chain.
+     * @param index index into chain, from 0 to <code>getCount() - 1</code>
+     * @return transliterator at the given index
+     */
+    public Transliterator getTransliterator(int index) {
+        return trans[index];
+    }
+
+    /**
+     * Override Transliterator.  Modify the transliterators that make up
+     * this compound transliterator so their filters are the logical AND
+     * of this transliterator's filter and their own.  Original filters
+     * are kept in the filters array.
+     */
+    public void setFilter(UnicodeFilter f) {
+        /**
+         * If there is a filter F for the compound transliterator as a
+         * whole, then we need to modify every non-null filter f in
+         * the chain to be f' = F & f.
+         *
+         * If anyone else is using the transliterators in the chain
+         * outside of this context, they will get unexpected results.
+         */
+        if (f == null) {
+            // Restore original filters
+            if (filters != null) {
+                for (int i=0; i<filters.length; ++i) {
+                    trans[i].setFilter(filters[i]);
+                }
+            }
+        } else {
+            if (filters == null) {
+                filters = new UnicodeFilter[trans.length];
+                for (int i=0; i<filters.length; ++i) {
+                    filters[i] = trans[i].getFilter();
+                }
+            }
+            for (int i=0; i<filters.length; ++i) {
+                trans[i].setFilter(UnicodeFilterLogic.and(f, filters[i]));
+            }
+        }
+        super.setFilter(f);
+    }
+
+    /**
+     * Implements {@link Transliterator#handleTransliterate}.
+     */
+    protected void handleTransliterate(Replaceable text,
+                                       Position index, boolean incremental) {
+        /* Call each transliterator with the same start value and
+         * initial cursor index, but with the limit index as modified
+         * by preceding transliterators.  The cursor index must be
+         * reset for each transliterator to give each a chance to
+         * transliterate the text.  The initial cursor index is known
+         * to still point to the same place after each transliterator
+         * is called because each transliterator will not change the
+         * text between start and the initial value of cursor.
+         *
+         * IMPORTANT: After the first transliterator, each subsequent
+         * transliterator only gets to transliterate text committed by
+         * preceding transliterators; that is, the cursor (output
+         * value) of transliterator i becomes the limit (input value)
+         * of transliterator i+1.  Finally, the overall limit is fixed
+         * up before we return.
+         *
+         * Assumptions we make here:
+         * (1) start <= cursor <= limit    ;cursor valid on entry
+         * (2) cursor <= cursor' <= limit' ;cursor doesn't move back
+         * (3) cursor <= limit'            ;text before cursor unchanged
+         * - cursor' is the value of cursor after calling handleKT
+         * - limit' is the value of limit after calling handleKT
+         */
+
+        /**
+         * Example: 3 transliterators.  This example illustrates the
+         * mechanics we need to implement.  S, C, and L are the start,
+         * cursor, and limit.  gl is the globalLimit.
+         *
+         * 1. h-u, changes hex to Unicode
+         *
+         *    4  7  a  d  0      4  7  a
+         *    abc/u0061/u    =>  abca/u    
+         *    S  C       L       S   C L   gl=f->a
+         *
+         * 2. upup, changes "x" to "XX"
+         *
+         *    4  7  a       4  7  a
+         *    abca/u    =>  abcAA/u    
+         *    S  CL         S    C   
+         *                       L    gl=a->b
+         * 3. u-h, changes Unicode to hex
+         *
+         *    4  7  a        4  7  a  d  0  3
+         *    abcAA/u    =>  abc/u0041/u0041/u    
+         *    S  C L         S              C
+         *                                  L   gl=b->15
+         * 4. return
+         *
+         *    4  7  a  d  0  3
+         *    abc/u0041/u0041/u    
+         *    S C L
+         */
+        int cursor = index.start;
+        int limit = index.limit;
+        int globalLimit = limit;
+        /* globalLimit is the overall limit.  We keep track of this
+         * since we overwrite index.contextLimit with the previous
+         * index.start.  After each transliteration, we update
+         * globalLimit for insertions or deletions that have happened.
+         */
+
+        for (int i=0; i<trans.length; ++i) {
+            index.start = cursor; // Reset cursor
+            index.limit = limit;
+
+            if (DEBUG) {
+                System.out.print(Utility.escape(i + ": \"" +
+                    substring(text, index.contextStart, index.start) + '|' +
+                    substring(text, index.start, index.contextLimit) +
+                    "\" -> \""));
+            }
+
+            trans[i].handleTransliterate(text, index, incremental);
+
+            if (DEBUG) {
+                System.out.println(Utility.escape(
+                    substring(text, index.contextStart, index.start) + '|' +
+                    substring(text, index.start, index.contextLimit) +
+                    '"'));
+            }
+
+            // Adjust overall limit for insertions/deletions
+            globalLimit += index.limit - limit;
+            limit = index.start; // Move limit to end of committed text
+        }
+        // Cursor is good where it is -- where the last
+        // transliterator left it.  Limit needs to be put back
+        // where it was, modulo adjustments for deletions/insertions.
+        index.limit = globalLimit;
+    }
+
+    /**
+     * Compute and set the length of the longest context required by this transliterator.
+     * This is <em>preceding</em> context.
+     */
+    private void computeMaximumContextLength() {
+        int max = 0;
+        for (int i=0; i<trans.length; ++i) {
+            int len = trans[i].getMaximumContextLength();
+            if (len > max) {
+                max = len;
+            }
+        }
+        setMaximumContextLength(max);
+    }
+
+    /**
+     * DEBUG
+     * Returns a substring of a Replaceable.
+     */
+    private static final String substring(Replaceable str, int start, int limit) {
+        StringBuffer buf = new StringBuffer();
+        while (start < limit) {
+            buf.append(str.charAt(start++));
+        }
+        return buf.toString();
+    }
+}
diff --git a/src/com/ibm/text/DateFormat.java b/src/com/ibm/text/DateFormat.java
new file mode 100755
index 0000000..da75d28
--- /dev/null
+++ b/src/com/ibm/text/DateFormat.java
@@ -0,0 +1,768 @@
+/*
+ * @(#)DateFormat.java	1.37 99/11/02
+ *
+ * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1996 - All Rights Reserved
+ *
+ * Portions copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ *   The original version of this source code and documentation is copyrighted
+ * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
+ * materials are provided under terms of a License Agreement between Taligent
+ * and Sun. This technology is protected by multiple US and International
+ * patents. This notice and attribution to Taligent may not be removed.
+ *   Taligent is a registered trademark of Taligent, Inc.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * and its documentation for NON-COMMERCIAL purposes and without
+ * fee is hereby granted provided that this copyright notice
+ * appears in all copies. Please refer to the file "copyright.html"
+ * for further important copyright and licensing information.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ *
+ */
+
+package com.ibm.text;
+import java.text.Format;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.text.ParseException;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.MissingResourceException;
+import com.ibm.util.TimeZone;
+import com.ibm.util.Calendar;
+import com.ibm.util.GregorianCalendar;
+import java.util.Date;
+import java.text.resources.*;
+
+/**
+ * DateFormat is an abstract class for date/time formatting subclasses which
+ * formats and parses dates or time in a language-independent manner.
+ * The date/time formatting subclass, such as SimpleDateFormat, allows for
+ * formatting (i.e., date -> text), parsing (text -> date), and
+ * normalization.  The date is represented as a <code>Date</code> object or
+ * as the milliseconds since January 1, 1970, 00:00:00 GMT.
+ *
+ * <p>DateFormat provides many class methods for obtaining default date/time
+ * formatters based on the default or a given loacle and a number of formatting
+ * styles. The formatting styles include FULL, LONG, MEDIUM, and SHORT. More
+ * detail and examples of using these styles are provided in the method
+ * descriptions.
+ *
+ * <p>DateFormat helps you to format and parse dates for any locale.
+ * Your code can be completely independent of the locale conventions for
+ * months, days of the week, or even the calendar format: lunar vs. solar.
+ *
+ * <p>To format a date for the current Locale, use one of the
+ * static factory methods:
+ * <pre>
+ *  myString = DateFormat.getDateInstance().format(myDate);
+ * </pre>
+ * <p>If you are formatting multiple numbers, it is
+ * more efficient to get the format and use it multiple times so that
+ * the system doesn't have to fetch the information about the local
+ * language and country conventions multiple times.
+ * <pre>
+ *  DateFormat df = DateFormat.getDateInstance();
+ *  for (int i = 0; i < a.length; ++i) {
+ *    output.println(df.format(myDate[i]) + "; ");
+ *  }
+ * </pre>
+ * <p>To format a number for a different Locale, specify it in the
+ * call to getDateInstance().
+ * <pre>
+ *  DateFormat df = DateFormat.getDateInstance(Locale.FRANCE);
+ * </pre>
+ * <p>You can use a DateFormat to parse also.
+ * <pre>
+ *  myDate = df.parse(myString);
+ * </pre>
+ * <p>Use getDateInstance to get the normal date format for that country.
+ * There are other static factory methods available.
+ * Use getTimeInstance to get the time format for that country.
+ * Use getDateTimeInstance to get a date and time format. You can pass in 
+ * different options to these factory methods to control the length of the
+ * result; from SHORT to MEDIUM to LONG to FULL. The exact result depends
+ * on the locale, but generally:
+ * <ul><li>SHORT is completely numeric, such as 12.13.52 or 3:30pm
+ * <li>MEDIUM is longer, such as Jan 12, 1952
+ * <li>LONG is longer, such as January 12, 1952 or 3:30:32pm
+ * <li>FULL is pretty completely specified, such as
+ * Tuesday, April 12, 1952 AD or 3:30:42pm PST.
+ * </ul>
+ *
+ * <p>You can also set the time zone on the format if you wish.
+ * If you want even more control over the format or parsing,
+ * (or want to give your users more control),
+ * you can try casting the DateFormat you get from the factory methods
+ * to a SimpleDateFormat. This will work for the majority
+ * of countries; just remember to put it in a try block in case you
+ * encounter an unusual one.
+ *
+ * <p>You can also use forms of the parse and format methods with
+ * ParsePosition and FieldPosition to
+ * allow you to
+ * <ul><li>progressively parse through pieces of a string.
+ * <li>align any particular field, or find out where it is for selection
+ * on the screen.
+ * </ul>
+ *
+ * @see          Format
+ * @see          NumberFormat
+ * @see          SimpleDateFormat
+ * @see          com.ibm.util.Calendar
+ * @see          com.ibm.util.GregorianCalendar
+ * @see          com.ibm.util.TimeZone
+ * @version      1.37 11/02/99
+ * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+public abstract class DateFormat extends Format {
+
+    /**
+     * The calendar that <code>DateFormat</code> uses to produce the time field
+     * values needed to implement date and time formatting.  Subclasses should
+     * initialize this to a calendar appropriate for the locale associated with
+     * this <code>DateFormat</code>.
+     * @serial
+     */
+    protected Calendar calendar;
+
+    /**
+     * The number formatter that <code>DateFormat</code> uses to format numbers
+     * in dates and times.  Subclasses should initialize this to a number format
+     * appropriate for the locale associated with this <code>DateFormat</code>.
+     * @serial
+     */
+    protected NumberFormat numberFormat;
+
+    /**
+     * Useful constant for ERA field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int ERA_FIELD = 0;
+    /**
+     * Useful constant for YEAR field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int YEAR_FIELD = 1;
+    /**
+     * Useful constant for MONTH field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int MONTH_FIELD = 2;
+    /**
+     * Useful constant for DATE field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int DATE_FIELD = 3;
+    /**
+     * Useful constant for one-based HOUR_OF_DAY field alignment.
+     * Used in FieldPosition of date/time formatting.
+     * HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock.
+     * For example, 23:59 + 01:00 results in 24:59.
+     */
+    public final static int HOUR_OF_DAY1_FIELD = 4;
+    /**
+     * Useful constant for zero-based HOUR_OF_DAY field alignment.
+     * Used in FieldPosition of date/time formatting.
+     * HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock.
+     * For example, 23:59 + 01:00 results in 00:59.
+     */
+    public final static int HOUR_OF_DAY0_FIELD = 5;
+    /**
+     * Useful constant for MINUTE field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int MINUTE_FIELD = 6;
+    /**
+     * Useful constant for SECOND field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int SECOND_FIELD = 7;
+    /**
+     * Useful constant for MILLISECOND field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int MILLISECOND_FIELD = 8;
+    /**
+     * Useful constant for DAY_OF_WEEK field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int DAY_OF_WEEK_FIELD = 9;
+    /**
+     * Useful constant for DAY_OF_YEAR field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int DAY_OF_YEAR_FIELD = 10;
+    /**
+     * Useful constant for DAY_OF_WEEK_IN_MONTH field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
+    /**
+     * Useful constant for WEEK_OF_YEAR field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int WEEK_OF_YEAR_FIELD = 12;
+    /**
+     * Useful constant for WEEK_OF_MONTH field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int WEEK_OF_MONTH_FIELD = 13;
+    /**
+     * Useful constant for AM_PM field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int AM_PM_FIELD = 14;
+    /**
+     * Useful constant for one-based HOUR field alignment.
+     * Used in FieldPosition of date/time formatting.
+     * HOUR1_FIELD is used for the one-based 12-hour clock.
+     * For example, 11:30 PM + 1 hour results in 12:30 AM.
+     */
+    public final static int HOUR1_FIELD = 15;
+    /**
+     * Useful constant for zero-based HOUR field alignment.
+     * Used in FieldPosition of date/time formatting.
+     * HOUR0_FIELD is used for the zero-based 12-hour clock.
+     * For example, 11:30 PM + 1 hour results in 00:30 AM.
+     */
+    public final static int HOUR0_FIELD = 16;
+    /**
+     * Useful constant for TIMEZONE field alignment.
+     * Used in FieldPosition of date/time formatting.
+     */
+    public final static int TIMEZONE_FIELD = 17;
+
+    // Proclaim serial compatibility with 1.1 FCS
+    private static final long serialVersionUID = 7218322306649953788L;
+
+    /**
+     * Overrides Format.
+     * Formats a time object into a time string. Examples of time objects
+     * are a time value expressed in milliseconds and a Date object.
+     * @param obj must be a Number or a Date.
+     * @param toAppendTo the string buffer for the returning time string.
+     * @return the formatted time string.
+     * @param fieldPosition keeps track of the position of the field
+     * within the returned string.
+     * On input: an alignment field,
+     * if desired. On output: the offsets of the alignment field. For
+     * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+     * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+     * begin index and end index of fieldPosition will be set to
+     * 0 and 4, respectively.
+     * Notice that if the same time field appears
+     * more than once in a pattern, the fieldPosition will be set for the first
+     * occurence of that time field. For instance, formatting a Date to
+     * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+     * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+     * the begin index and end index of fieldPosition will be set to
+     * 5 and 8, respectively, for the first occurence of the timezone
+     * pattern character 'z'.
+     * @see java.text.Format
+     */
+    public final StringBuffer format(Object obj, StringBuffer toAppendTo,
+                                     FieldPosition fieldPosition)
+    {
+        if (obj instanceof Date)
+            return format( (Date)obj, toAppendTo, fieldPosition );
+        else if (obj instanceof Number)
+            return format( new Date(((Number)obj).longValue()),
+                          toAppendTo, fieldPosition );
+        else 
+            throw new IllegalArgumentException("Cannot format given Object as a Date");
+    }
+
+    /**
+     * Formats a Date into a date/time string.
+     * @param date a Date to be formatted into a date/time string.
+     * @param toAppendTo the string buffer for the returning date/time string.
+     * @param fieldPosition keeps track of the position of the field
+     * within the returned string.
+     * On input: an alignment field,
+     * if desired. On output: the offsets of the alignment field. For
+     * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+     * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+     * begin index and end index of fieldPosition will be set to
+     * 0 and 4, respectively.
+     * Notice that if the same time field appears
+     * more than once in a pattern, the fieldPosition will be set for the first
+     * occurence of that time field. For instance, formatting a Date to
+     * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+     * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+     * the begin index and end index of fieldPosition will be set to
+     * 5 and 8, respectively, for the first occurence of the timezone
+     * pattern character 'z'.
+     * @return the formatted date/time string.
+     */
+    public abstract StringBuffer format(Date date, StringBuffer toAppendTo,
+                                        FieldPosition fieldPosition);
+
+    /**
+     * Formats a Date into a date/time string.
+     * @param date the time value to be formatted into a time string.
+     * @return the formatted time string.
+     */
+    public final String format(Date date)
+    {
+        return format(date, new StringBuffer(),new FieldPosition(0)).toString();
+    }
+
+    /**
+     * Parse a date/time string.
+     *
+     * @param text  The date/time string to be parsed
+     *
+     * @return      A Date, or null if the input could not be parsed
+     *
+     * @exception  ParseException  If the given string cannot be parsed as a date.
+     *
+     * @see #parse(String, ParsePosition)
+     */
+    public Date parse(String text) throws ParseException
+    {
+        ParsePosition pos = new ParsePosition(0);
+        Date result = parse(text, pos);
+        if (pos.getIndex() == 0) // ICU4J
+            throw new ParseException("Unparseable date: \"" + text + "\"" ,
+                                     pos.getErrorIndex()); // ICU4J
+        return result;
+    }
+
+    /**
+     * Parse a date/time string according to the given parse position.  For
+     * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
+     * that is equivalent to Date(837039928046).
+     *
+     * <p> By default, parsing is lenient: If the input is not in the form used
+     * by this object's format method but can still be parsed as a date, then
+     * the parse succeeds.  Clients may insist on strict adherence to the
+     * format by calling setLenient(false).
+     *
+     * @see #setLenient(boolean)
+     *
+     * @param text  The date/time string to be parsed
+     *
+     * @param pos   On input, the position at which to start parsing; on
+     *              output, the position at which parsing terminated, or the
+     *              start position if the parse failed.
+     *
+     * @return      A Date, or null if the input could not be parsed
+     */
+    public abstract Date parse(String text, ParsePosition pos);
+
+    /**
+     * Parse a date/time string into an Object.  This convenience method simply
+     * calls parse(String, ParsePosition).
+     *
+     * @see #parse(String, ParsePosition)
+     */
+    public Object parseObject (String source, ParsePosition pos)
+    {
+        return parse(source, pos);
+    }
+
+    /**
+     * Constant for full style pattern.
+     */
+    public static final int FULL = 0;
+    /**
+     * Constant for long style pattern.
+     */
+    public static final int LONG = 1;
+    /**
+     * Constant for medium style pattern.
+     */
+    public static final int MEDIUM = 2;
+    /**
+     * Constant for short style pattern.
+     */
+    public static final int SHORT = 3;
+    /**
+     * Constant for default style pattern.  Its value is MEDIUM.
+     */
+    public static final int DEFAULT = MEDIUM;
+
+    /**
+     * Gets the time formatter with the default formatting style
+     * for the default locale.
+     * @return a time formatter.
+     */
+    public final static DateFormat getTimeInstance()
+    {
+        return get(-1, DEFAULT, Locale.getDefault());
+    }
+
+    /**
+     * Gets the time formatter with the given formatting style
+     * for the default locale.
+     * @param style the given formatting style. For example,
+     * SHORT for "h:mm a" in the US locale.
+     * @return a time formatter.
+     */
+    public final static DateFormat getTimeInstance(int style)
+    {
+        return get(-1, style, Locale.getDefault());
+    }
+
+    /**
+     * Gets the time formatter with the given formatting style
+     * for the given locale.
+     * @param style the given formatting style. For example,
+     * SHORT for "h:mm a" in the US locale.
+     * @param aLocale the given locale.
+     * @return a time formatter.
+     */
+    public final static DateFormat getTimeInstance(int style,
+                                                 Locale aLocale)
+    {
+        return get(-1, style, aLocale);
+    }
+
+    /**
+     * Gets the date formatter with the default formatting style
+     * for the default locale.
+     * @return a date formatter.
+     */
+    public final static DateFormat getDateInstance()
+    {
+        return get(DEFAULT, -1, Locale.getDefault());
+    }
+
+    /**
+     * Gets the date formatter with the given formatting style
+     * for the default locale.
+     * @param style the given formatting style. For example,
+     * SHORT for "M/d/yy" in the US locale.
+     * @return a date formatter.
+     */
+    public final static DateFormat getDateInstance(int style)
+    {
+        return get(style, -1, Locale.getDefault());
+    }
+
+    /**
+     * Gets the date formatter with the given formatting style
+     * for the given locale.
+     * @param style the given formatting style. For example,
+     * SHORT for "M/d/yy" in the US locale.
+     * @param aLocale the given locale.
+     * @return a date formatter.
+     */
+    public final static DateFormat getDateInstance(int style,
+                                                 Locale aLocale)
+    {
+        return get(style, -1, aLocale);
+    }
+
+    /**
+     * Gets the date/time formatter with the default formatting style
+     * for the default locale.
+     * @return a date/time formatter.
+     */
+    public final static DateFormat getDateTimeInstance()
+    {
+        return get(DEFAULT, DEFAULT, Locale.getDefault());
+    }
+
+    /**
+     * Gets the date/time formatter with the given date and time
+     * formatting styles for the default locale.
+     * @param dateStyle the given date formatting style. For example,
+     * SHORT for "M/d/yy" in the US locale.
+     * @param timeStyle the given time formatting style. For example,
+     * SHORT for "h:mm a" in the US locale.
+     * @return a date/time formatter.
+     */
+    public final static DateFormat getDateTimeInstance(int dateStyle,
+                                                       int timeStyle)
+    {
+        return get(dateStyle, timeStyle, Locale.getDefault());
+    }
+
+    /**
+     * Gets the date/time formatter with the given formatting styles
+     * for the given locale.
+     * @param dateStyle the given date formatting style.
+     * @param timeStyle the given time formatting style.
+     * @param aLocale the given locale.
+     * @return a date/time formatter.
+     */
+    public final static DateFormat
+        getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
+    {
+        return get(dateStyle, timeStyle, aLocale);
+    }
+
+    /**
+     * Get a default date/time formatter that uses the SHORT style for both the
+     * date and the time.
+     */
+    public final static DateFormat getInstance() {
+        return getDateTimeInstance(SHORT, SHORT);
+    }
+
+    /**
+     * Gets the set of locales for which DateFormats are installed.
+     * @return the set of locales for which DateFormats are installed.
+     */
+    public static Locale[] getAvailableLocales()
+    {
+        return LocaleData.getAvailableLocales("DateTimePatterns");
+    }
+
+    /**
+     * Set the calendar to be used by this date format.  Initially, the default
+     * calendar for the specified or default locale is used.
+     * @param newCalendar the new Calendar to be used by the date format
+     */
+    public void setCalendar(Calendar newCalendar)
+    {
+        this.calendar = newCalendar;
+    }
+
+    /**
+     * Gets the calendar associated with this date/time formatter.
+     * @return the calendar associated with this date/time formatter.
+     */
+    public Calendar getCalendar()
+    {
+        return calendar;
+    }
+
+    /**
+     * Allows you to set the number formatter.
+     * @param newNumberFormat the given new NumberFormat.
+     */
+    public void setNumberFormat(NumberFormat newNumberFormat)
+    {
+        this.numberFormat = newNumberFormat;
+    }
+
+    /**
+     * Gets the number formatter which this date/time formatter uses to
+     * format and parse a time.
+     * @return the number formatter which this date/time formatter uses.
+     */
+    public NumberFormat getNumberFormat()
+    {
+        return numberFormat;
+    }
+
+    /**
+     * Sets the time zone for the calendar of this DateFormat object.
+     * @param zone the given new time zone.
+     */
+    public void setTimeZone(TimeZone zone)
+    {
+        calendar.setTimeZone(zone);
+    }
+
+    /**
+     * Gets the time zone.
+     * @return the time zone associated with the calendar of DateFormat.
+     */
+    public TimeZone getTimeZone()
+    {
+        return calendar.getTimeZone();
+    }
+
+    /**
+     * Specify whether or not date/time parsing is to be lenient.  With
+     * lenient parsing, the parser may use heuristics to interpret inputs that
+     * do not precisely match this object's format.  With strict parsing,
+     * inputs must match this object's format.
+     * @param lenient when true, parsing is lenient
+     * @see com.ibm.util.Calendar#setLenient
+     */
+    public void setLenient(boolean lenient)
+    {
+        calendar.setLenient(lenient);
+    }
+
+    /**
+     * Tell whether date/time parsing is to be lenient.
+     */
+    public boolean isLenient()
+    {
+        return calendar.isLenient();
+    }
+
+    /**
+     * Overrides hashCode
+     */
+    public int hashCode() {
+        return numberFormat.hashCode();
+        // just enough fields for a reasonable distribution
+    }
+
+    /**
+     * Overrides equals
+     */
+    public boolean equals(Object obj) {
+        if (this == obj) return true;
+        if (obj == null || getClass() != obj.getClass()) return false;
+        DateFormat other = (DateFormat) obj;
+        return (// calendar.equivalentTo(other.calendar) // THIS API DOESN'T EXIST YET!
+                calendar.getFirstDayOfWeek() == other.calendar.getFirstDayOfWeek() &&
+                calendar.getMinimalDaysInFirstWeek() == other.calendar.getMinimalDaysInFirstWeek() &&
+                calendar.isLenient() == other.calendar.isLenient() &&
+                calendar.getTimeZone().equals(other.calendar.getTimeZone()) &&
+                numberFormat.equals(other.numberFormat));
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        DateFormat other = (DateFormat) super.clone();
+        other.calendar = (Calendar) calendar.clone();
+        other.numberFormat = (NumberFormat) numberFormat.clone();
+        return other;
+    }
+
+    /**
+     * Creates a DateFormat with the given time and/or date style in the given
+     * locale.
+     * @param dateStyle a value from 0 to 3 indicating the time format,
+     * or -1 to indicate no date
+     * @param timeStyle a value from 0 to 3 indicating the time format,
+     * or -1 to indicate no time
+     * @param loc the locale for the format
+     */
+    private static DateFormat get(int dateStyle, int timeStyle, Locale loc) {
+        if (timeStyle < -1 || timeStyle > 3) {
+            throw new IllegalArgumentException("Illegal time style " + timeStyle);
+        }
+        if (dateStyle < -1 || dateStyle > 3) {
+            throw new IllegalArgumentException("Illegal date style " + dateStyle);
+        }
+        try {
+            return new SimpleDateFormat(timeStyle, dateStyle, loc);
+        } catch (MissingResourceException e) {
+            return new SimpleDateFormat("M/d/yy h:mm a");
+        }
+    }
+
+    /**
+     * Create a new date format.
+     */
+    protected DateFormat() {}
+
+    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    //-------------------------------------------------------------------------
+    // Public static interface for creating custon DateFormats for different
+    // types of Calendars.
+    //-------------------------------------------------------------------------
+    
+    /**
+     * Create a {@link DateFormat} object that can be used to format dates in
+     * the calendar system specified by <code>cal</code>.
+     * <p>
+     * @param cal   The calendar system for which a date format is desired.
+     *
+     * @param dateStyle The type of date format desired.  This can be
+     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
+     *              etc.
+     *
+     * @param locale The locale for which the date format is desired.
+     */
+    static final public DateFormat getDateInstance(Calendar cal, int dateStyle, Locale locale)
+    {
+        return getDateTimeInstance(cal, dateStyle, -1, locale);
+    }
+    
+    /**
+     * Create a {@link DateFormat} object that can be used to format times in
+     * the calendar system specified by <code>cal</code>.
+     * <p>
+     * <b>Note:</b> When this functionality is moved into the core JDK, this method
+     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
+     * <p>
+     * @param cal   The calendar system for which a time format is desired.
+     *
+     * @param timeStyle The type of time format desired.  This can be
+     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
+     *              etc.
+     *
+     * @param locale The locale for which the time format is desired.
+     *
+     * @see DateFormat#getTimeInstance
+     */
+    static final public DateFormat getTimeInstance(Calendar cal, int timeStyle, Locale locale)
+    {
+        return getDateTimeInstance(cal, -1, timeStyle, locale);
+    }
+    
+    /**
+     * Create a {@link DateFormat} object that can be used to format dates and times in
+     * the calendar system specified by <code>cal</code>.
+     * <p>
+     * <b>Note:</b> When this functionality is moved into the core JDK, this method
+     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
+     * <p>
+     * @param cal   The calendar system for which a date/time format is desired.
+     *
+     * @param dateStyle The type of date format desired.  This can be
+     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
+     *              etc.
+     *
+     * @param timeStyle The type of time format desired.  This can be
+     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
+     *              etc.
+     *
+     * @param locale The locale for which the date/time format is desired.
+     *
+     * @see DateFormat#getDateTimeInstance
+     */
+    static final public DateFormat getDateTimeInstance(Calendar cal, int dateStyle,
+                                                 int timeStyle, Locale locale)
+    {
+        return cal.getDateTimeFormat(dateStyle, timeStyle, locale);
+    }
+
+    /**
+     * Convenience overload
+     */
+    static final public DateFormat getInstance(Calendar cal, Locale locale) {
+        return getDateTimeInstance(cal, SHORT, SHORT, locale);
+    }
+
+    /**
+     * Convenience overload
+     */
+    static final public DateFormat getInstance(Calendar cal) {
+        return getInstance(cal, Locale.getDefault());
+    }
+
+    /**
+     * Convenience overload
+     */
+    static final public DateFormat getDateInstance(Calendar cal, int dateStyle) {
+        return getDateInstance(cal, dateStyle, Locale.getDefault());
+    }
+
+    /**
+     * Convenience overload
+     */
+    static final public DateFormat getTimeInstance(Calendar cal, int timeStyle) {
+        return getTimeInstance(cal, timeStyle, Locale.getDefault());
+    }
+
+    /**
+     * Convenience overload
+     */
+    static final public DateFormat getDateTimeInstance(Calendar cal, int dateStyle, int timeStyle) {
+        return getDateTimeInstance(cal, dateStyle, timeStyle, Locale.getDefault());
+    }
+}
diff --git a/src/com/ibm/text/DateFormatSymbols.java b/src/com/ibm/text/DateFormatSymbols.java
new file mode 100755
index 0000000..735a2e1
--- /dev/null
+++ b/src/com/ibm/text/DateFormatSymbols.java
@@ -0,0 +1,831 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/DateFormatSymbols.java,v $
+ * $Date: 2001/01/09 22:48:51 $
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.io.Serializable;
+import java.lang.ref.SoftReference;
+import java.util.Hashtable;
+import java.util.Vector;
+import java.util.Enumeration;
+import java.text.resources.DateFormatZoneData;
+import com.ibm.util.Utility;
+import com.ibm.util.Calendar;
+import com.ibm.util.GregorianCalendar;
+import com.ibm.util.TimeZone;
+import java.util.MissingResourceException;
+
+/**
+ * <code>DateFormatSymbols</code> is a public class for encapsulating
+ * localizable date-time formatting data, such as the names of the
+ * months, the names of the days of the week, and the time zone data.
+ * <code>DateFormat</code> and <code>SimpleDateFormat</code> both use
+ * <code>DateFormatSymbols</code> to encapsulate this information.
+ *
+ * <p>
+ * Typically you shouldn't use <code>DateFormatSymbols</code> directly.
+ * Rather, you are encouraged to create a date-time formatter with the
+ * <code>DateFormat</code> class's factory methods: <code>getTimeInstance</code>,
+ * <code>getDateInstance</code>, or <code>getDateTimeInstance</code>.
+ * These methods automatically create a <code>DateFormatSymbols</code> for
+ * the formatter so that you don't have to. After the
+ * formatter is created, you may modify its format pattern using the
+ * <code>setPattern</code> method. For more information about
+ * creating formatters using <code>DateFormat</code>'s factory methods,
+ * see {@link DateFormat}.
+ *
+ * <p>
+ * If you decide to create a date-time formatter with a specific
+ * format pattern for a specific locale, you can do so with:
+ * <blockquote>
+ * <pre>
+ * new SimpleDateFormat(aPattern, new DateFormatSymbols(aLocale)).
+ * </pre>
+ * </blockquote>
+ *
+ * <p>
+ * <code>DateFormatSymbols</code> objects are clonable. When you obtain
+ * a <code>DateFormatSymbols</code> object, feel free to modify the
+ * date-time formatting data. For instance, you can replace the localized
+ * date-time format pattern characters with the ones that you feel easy
+ * to remember. Or you can change the representative cities
+ * to your favorite ones.
+ *
+ * <p>
+ * New <code>DateFormatSymbols</code> subclasses may be added to support
+ * <code>SimpleDateFormat</code> for date-time formatting for additional locales.
+
+ * @see          DateFormat
+ * @see          SimpleDateFormat
+ * @see          com.ibm.util.SimpleTimeZone
+ * @version      1.31 09/21/99
+ * @author       Chen-Lieh Huang
+ */
+public class DateFormatSymbols implements Serializable, Cloneable {
+
+    /**
+     * Construct a DateFormatSymbols object by loading format data from
+     * resources for the default locale.
+     *
+     * @exception  java.util.MissingResourceException
+     *             if the resources for the default locale cannot be
+     *             found or cannot be loaded.
+     */
+    public DateFormatSymbols()
+    {
+        initializeData(Locale.getDefault());
+    }
+
+    /**
+     * Construct a DateFormatSymbols object by loading format data from
+     * resources for the given locale.
+     *
+     * @exception  java.util.MissingResourceException
+     *             if the resources for the specified locale cannot be
+     *             found or cannot be loaded.
+     */
+    public DateFormatSymbols(Locale locale)
+    {
+        initializeData(locale);
+    }
+
+    /**
+     * Era strings. For example: "AD" and "BC".  An array of 2 strings,
+     * indexed by <code>Calendar.BC</code> and <code>Calendar.AD</code>.
+     * @serial
+     */
+    String eras[] = null;
+
+    /**
+     * Month strings. For example: "January", "February", etc.  An array
+     * of 13 strings (some calendars have 13 months), indexed by
+     * <code>Calendar.JANUARY</code>, <code>Calendar.FEBRUARY</code>, etc.
+     * @serial
+     */
+    String months[] = null;
+
+    /**
+     * Short month strings. For example: "Jan", "Feb", etc.  An array of
+     * 13 strings (some calendars have 13 months), indexed by
+     * <code>Calendar.JANUARY</code>, <code>Calendar.FEBRUARY</code>, etc.
+
+     * @serial
+     */
+    String shortMonths[] = null;
+
+    /**
+     * Weekday strings. For example: "Sunday", "Monday", etc.  An array
+     * of 8 strings, indexed by <code>Calendar.SUNDAY</code>,
+     * <code>Calendar.MONDAY</code>, etc.
+     * The element <code>weekdays[0]</code> is ignored.
+     * @serial
+     */
+    String weekdays[] = null;
+
+    /**
+     * Short weekday strings. For example: "Sun", "Mon", etc.  An array
+     * of 8 strings, indexed by <code>Calendar.SUNDAY</code>,
+     * <code>Calendar.MONDAY</code>, etc.
+     * The element <code>shortWeekdays[0]</code> is ignored.
+     * @serial
+     */
+    String shortWeekdays[] = null;
+
+    /**
+     * AM and PM strings. For example: "AM" and "PM".  An array of
+     * 2 strings, indexed by <code>Calendar.AM</code> and
+     * <code>Calendar.PM</code>.
+     * @serial
+     */
+    String ampms[] = null;
+
+    /**
+     * Localized names of time zones in this locale.  This is a
+     * two-dimensional array of strings of size <em>n</em> by <em>m</em>,
+     * where <em>m</em> is at least 5.  Each of the <em>n</em> rows is an
+     * entry containing the localized names for a single <code>TimeZone</code>.
+     * Each such row contains (with <code>i</code> ranging from
+     * 0..<em>n</em>-1):
+     * <ul>
+     * <li><code>zoneStrings[i][0]</code> - time zone ID</li>
+     * <li><code>zoneStrings[i][1]</code> - long name of zone in standard
+     * time</li>
+     * <li><code>zoneStrings[i][2]</code> - short name of zone in
+     * standard time</li>
+     * <li><code>zoneStrings[i][3]</code> - long name of zone in daylight
+     * savings time</li>
+     * <li><code>zoneStrings[i][4]</code> - short name of zone in daylight
+     * savings time</li>
+     * </ul>
+     * The zone ID is <em>not</em> localized; it corresponds to the ID
+     * value associated with a system time zone object.  All other entries
+     * are localized names.  If a zone does not implement daylight savings
+     * time, the daylight savings time names are ignored.
+     * @see java.text.resources.DateFormatZoneData
+     * @see com.ibm.util.TimeZone
+     * @serial
+     */
+    String zoneStrings[][] = null;
+
+    /**
+     * Unlocalized date-time pattern characters. For example: 'y', 'd', etc.
+     * All locales use the same these unlocalized pattern characters.
+     */
+    static final String  patternChars = "GyMdkHmsSEDFwWahKz";
+
+    /**
+     * Localized date-time pattern characters. For example, a locale may
+     * wish to use 'u' rather than 'y' to represent years in its date format
+     * pattern strings.
+     * This string must be exactly 18 characters long, with the index of
+     * the characters described by <code>DateFormat.ERA_FIELD</code>,
+     * <code>DateFormat.YEAR_FIELD</code>, etc.  Thus, if the string were
+     * "Xz...", then localized patterns would use 'X' for era and 'z' for year.
+     * @serial
+     */
+    String  localPatternChars = null;
+
+    /* use serialVersionUID from JDK 1.1.4 for interoperability */
+    static final long serialVersionUID = -5987973545549424702L;
+
+    /**
+     * Gets era strings. For example: "AD" and "BC".
+     * @return the era strings.
+     */
+    public String[] getEras() {
+        return duplicate(eras);
+    }
+
+    /**
+     * Sets era strings. For example: "AD" and "BC".
+     * @param newEras the new era strings.
+     */
+    public void setEras(String[] newEras) {
+        eras = duplicate(newEras);
+    }
+
+    /**
+     * Gets month strings. For example: "January", "February", etc.
+     * @return the month strings.
+     */
+    public String[] getMonths() {
+        return duplicate(months);
+    }
+
+    /**
+     * Sets month strings. For example: "January", "February", etc.
+     * @param newMonths the new month strings.
+     */
+    public void setMonths(String[] newMonths) {
+        months = duplicate(newMonths);
+    }
+
+    /**
+     * Gets short month strings. For example: "Jan", "Feb", etc.
+     * @return the short month strings.
+     */
+    public String[] getShortMonths() {
+        return duplicate(shortMonths);
+    }
+
+    /**
+     * Sets short month strings. For example: "Jan", "Feb", etc.
+     * @param newShortMonths the new short month strings.
+     */
+    public void setShortMonths(String[] newShortMonths) {
+        shortMonths = duplicate(newShortMonths);
+    }
+
+    /**
+     * Gets weekday strings. For example: "Sunday", "Monday", etc.
+     * @return the weekday strings. Use <code>Calendar.SUNDAY</code>,
+     * <code>Calendar.MONDAY</code>, etc. to index the result array.
+     */
+    public String[] getWeekdays() {
+        return duplicate(weekdays);
+    }
+
+    /**
+     * Sets weekday strings. For example: "Sunday", "Monday", etc.
+     * @param newWeekdays the new weekday strings. The array should
+     * be indexed by <code>Calendar.SUNDAY</code>,
+     * <code>Calendar.MONDAY</code>, etc.
+     */
+    public void setWeekdays(String[] newWeekdays) {
+        weekdays = duplicate(newWeekdays);
+    }
+
+    /**
+     * Gets short weekday strings. For example: "Sun", "Mon", etc.
+     * @return the short weekday strings. Use <code>Calendar.SUNDAY</code>,
+     * <code>Calendar.MONDAY</code>, etc. to index the result array.
+     */
+    public String[] getShortWeekdays() {
+        return duplicate(shortWeekdays);
+    }
+
+    /**
+     * Sets short weekday strings. For example: "Sun", "Mon", etc.
+     * @param newShortWeekdays the new short weekday strings. The array should
+     * be indexed by <code>Calendar.SUNDAY</code>,
+     * <code>Calendar.MONDAY</code>, etc.
+     */
+    public void setShortWeekdays(String[] newShortWeekdays) {
+        shortWeekdays = duplicate(newShortWeekdays);
+    }
+
+    /**
+     * Gets ampm strings. For example: "AM" and "PM".
+     * @return the weekday strings.
+     */
+    public String[] getAmPmStrings() {
+        return duplicate(ampms);
+    }
+
+    /**
+     * Sets ampm strings. For example: "AM" and "PM".
+     * @param newAmpms the new ampm strings.
+     */
+    public void setAmPmStrings(String[] newAmpms) {
+        ampms = duplicate(newAmpms);
+    }
+
+    /**
+     * Gets timezone strings.
+     * @return the timezone strings.
+     */
+    public String[][] getZoneStrings() {
+        String[][] aCopy = new String[zoneStrings.length][];
+        for (int i = 0; i < zoneStrings.length; ++i)
+            aCopy[i] = duplicate(zoneStrings[i]);
+        return aCopy;
+    }
+
+    /**
+     * Sets timezone strings.
+     * @param newZoneStrings the new timezone strings.
+     */
+    public void setZoneStrings(String[][] newZoneStrings) {
+        String[][] aCopy = new String[newZoneStrings.length][];
+        for (int i = 0; i < newZoneStrings.length; ++i)
+            aCopy[i] = duplicate(newZoneStrings[i]);
+        zoneStrings = aCopy;
+    }
+
+    /**
+     * Gets localized date-time pattern characters. For example: 'u', 't', etc.
+     * @return the localized date-time pattern characters.
+     */
+    public String getLocalPatternChars() {
+        return new String(localPatternChars);
+    }
+
+    /**
+     * Sets localized date-time pattern characters. For example: 'u', 't', etc.
+     * @param newLocalPatternChars the new localized date-time
+     * pattern characters.
+     */
+    public void setLocalPatternChars(String newLocalPatternChars) {
+        localPatternChars = new String(newLocalPatternChars);
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        try
+        {
+            DateFormatSymbols other = (DateFormatSymbols)super.clone();
+            copyMembers(this, other);
+            return other;
+        } catch (CloneNotSupportedException e) {
+            throw new InternalError();
+        }
+    }
+
+    /**
+     * Override hashCode.
+     * Generates a hash code for the DateFormatSymbols object.
+     */
+    public int hashCode() {
+        int hashcode = 0;
+        for (int index = 0; index < this.zoneStrings[0].length; ++index)
+            hashcode ^= this.zoneStrings[0][index].hashCode();
+        return hashcode;
+    }
+
+    /**
+     * Override equals
+     */
+    public boolean equals(Object obj)
+    {
+        if (this == obj) return true;
+        if (obj == null || getClass() != obj.getClass()) return false;
+        DateFormatSymbols that = (DateFormatSymbols) obj;
+        return (Utility.arrayEquals(eras, that.eras)
+                && Utility.arrayEquals(months, that.months)
+                && Utility.arrayEquals(shortMonths, that.shortMonths)
+                && Utility.arrayEquals(weekdays, that.weekdays)
+                && Utility.arrayEquals(shortWeekdays, that.shortWeekdays)
+                && Utility.arrayEquals(ampms, that.ampms)
+                && Utility.arrayEquals(zoneStrings, that.zoneStrings)
+                && Utility.arrayEquals(localPatternChars,
+                                       that.localPatternChars));
+    }
+
+    // =======================privates===============================
+
+    /**
+     * Useful constant for defining timezone offsets.
+     */
+    static final int millisPerHour = 60*60*1000;
+
+    /**
+     * Cache to hold the LocaleElements and DateFormatZoneData ResourceBundles
+     * of a Locale.
+     */
+    private static Hashtable cachedLocaleData = new Hashtable(3);
+
+    /**
+     * cache to hold time zone localized strings. Keyed by Locale
+     */
+    private static Hashtable cachedZoneData = new Hashtable();
+
+    /* Utility methods for fetching resource bundles */
+    private ResourceBundle getLocaleElements(Locale desiredLocale) {
+    return ResourceBundle.getBundle("java.text.resources.LocaleElements",
+                    desiredLocale);
+    }
+
+    private ResourceBundle getZoneData(Locale desiredLocale) {
+    return ResourceBundle.getBundle("java.text.resources.DateFormatZoneData",
+                    desiredLocale);
+    }
+
+    /**
+     * Look up resource data for the desiredLocale in the cache; update the
+     * cache if necessary.
+     */
+    private ResourceBundle[] cacheLookup(Locale desiredLocale) {
+	ResourceBundle[] rbs = new ResourceBundle[2];
+	SoftReference[] data
+	    = (SoftReference[])cachedLocaleData.get(desiredLocale);
+	if (data == null) {
+	    rbs[0] = getLocaleElements(desiredLocale);
+	    rbs[1] = getZoneData(desiredLocale);
+	    data = new SoftReference[] { new SoftReference(rbs[0]),
+					     new SoftReference(rbs[1]) };
+	    cachedLocaleData.put(desiredLocale, data);
+	} else {
+	    ResourceBundle r;
+	    if ((r = (ResourceBundle)data[0].get()) == null) {
+		r = getLocaleElements(desiredLocale);
+		data[0] = new SoftReference(r);
+	    }
+	    rbs[0] = r;
+	    if ((r = (ResourceBundle)data[1].get()) == null) {
+		r = getZoneData(desiredLocale);
+		data[1] = new SoftReference(r);
+	    }
+	    rbs[1] = r;
+	}
+	return rbs;
+    }
+
+    /**
+     * Load time zone localized strings. Enumerate all keys (except
+     * "localPatternChars" and "zoneStrings").
+     */
+    private String[][] loadZoneStrings(Locale desiredLocale,
+				       ResourceBundle rsrc)
+    {
+        /* We have to handle two different formats of DateFormatZoneData.
+         * The first is used in JDK 1.2.2:
+         *
+         * | public Object[][] getContents() {
+         * |   return new Object[][] {
+         * |     {"zoneStrings",
+         * |       new String[][] {
+         * |         {"America/Los_Angeles", "Pacific Standard Time", "PST",
+         * |          "Pacific Daylight Time", "PDT" },
+         * |         //...
+         * |       }
+         * |     },
+         * |     {"localPatternChars", "GyMdkHmsSEDFwWahKz"},
+         * |   };
+         * | }
+         *
+         * The second is used in JDK 1.3:
+         *
+         * | public Object[][] getContents() {
+         * |   return new Object[][] {
+         * |     {"America/Los_Angeles", new String[] {"America/Los_Angeles", "Pacific Standard Time", "PST",
+         * |                                           "Pacific Daylight Time", "PDT"}},
+         * |     {"localPatternChars", "GyMdkHmsSEDFwWahKz"},
+         * |   };
+         * | }
+         *
+         * Let's pray they don't alter it further.
+         */
+        String[][] zones = null;
+        SoftReference data = (SoftReference)cachedZoneData.get(desiredLocale);
+        if (data == null || ((zones = (String[][])data.get()) == null)) {
+            // For JDK 1.3, we have to enumerate over the keys.  For 1.2.2, a
+            // single getObject() call works.  As a heuristic, we assume that if
+            // the zoneStrings key is present, then we are have a 1.2.2 format.
+            // Otherwise we parse the 1.3 format. - liu
+            try {
+                zones = (String[][])rsrc.getObject("zoneStrings");
+            } catch (java.util.MissingResourceException e) {}
+            if (zones == null || zones.length == 0) {
+            Vector vec = new Vector();
+            Enumeration keys = rsrc.getKeys();
+            while(keys.hasMoreElements()) {
+                String key = (String)keys.nextElement();
+                if (!key.equals("localPatternChars") &&
+                    !key.equals("zoneStrings")) {
+                    vec.add(rsrc.getObject(key));
+                }
+            }
+            zones = new String[vec.size()][];
+            vec.toArray(zones);
+            }
+            data = new SoftReference(zones);
+            cachedZoneData.put(desiredLocale, data);
+        }
+        return zones;
+    }
+
+    private void initializeData(Locale desiredLocale)
+    {
+	int i;
+	ResourceBundle[] rbs = cacheLookup(desiredLocale);
+	ResourceBundle resource = rbs[0];
+	ResourceBundle zoneResource = rbs[1];
+
+	// FIXME: cache only ResourceBundle. Hence every time, will do
+	// getObject(). This won't be necessary if the Resource itself
+	// is cached.
+	eras = (String[])resource.getObject("Eras");
+        months = resource.getStringArray("MonthNames");
+        shortMonths = resource.getStringArray("MonthAbbreviations");
+        String[] lWeekdays = resource.getStringArray("DayNames");
+        weekdays = new String[8];
+        weekdays[0] = "";  // 1-based
+        for (i=0; i<lWeekdays.length; i++)
+            weekdays[i+1] = lWeekdays[i];
+        String[] sWeekdays = resource.getStringArray("DayAbbreviations");
+        shortWeekdays = new String[8];
+        shortWeekdays[0] = "";  // 1-based
+        for (i=0; i<sWeekdays.length; i++)
+            shortWeekdays[i+1] = sWeekdays[i];
+        ampms = resource.getStringArray("AmPmMarkers");
+	zoneStrings = (String[][])loadZoneStrings(desiredLocale,
+						  zoneResource);
+        localPatternChars
+            = (String) zoneResource.getObject("localPatternChars");
+    }
+
+    /**
+     * Package private: used by SimpleDateFormat
+     * Gets the index for the given time zone ID to obtain the timezone
+     * strings for formatting. The time zone ID is just for programmatic
+     * lookup. NOT LOCALIZED!!!
+     * @param ID the given time zone ID.
+     * @return the index of the given time zone ID.  Returns -1 if
+     * the given time zone ID can't be located in the DateFormatSymbols object.
+     * @see com.ibm.util.SimpleTimeZone
+     */
+    final int getZoneIndex(String ID) {
+        int result = _getZoneIndex(ID);
+        if (result >= 0) {
+            return result;
+        }
+        
+        // Do a search through the equivalency group for the given ID
+        int n = TimeZone.countEquivalentIDs(ID);
+        if (n > 1) {
+            for (int i=0; i<n; ++i) {
+                String equivID = TimeZone.getEquivalentID(ID, i);
+                if (!equivID.equals(ID)) {
+                    int equivResult = _getZoneIndex(equivID);
+                    if (equivResult >= 0) {
+                        return equivResult;
+                    }
+                }
+            }
+        }
+        
+        return -1;
+    }
+    
+    /**
+     * Lookup the given ID.  Do NOT do an equivalency search.
+     */
+    private int _getZoneIndex(String ID)
+    {
+        for (int index=0; index<zoneStrings.length; index++)
+        {
+            if (ID.equalsIgnoreCase(zoneStrings[index][0])) return index;
+        }
+
+        return -1;
+    }
+
+    /**
+     * Clones an array of Strings.
+     * @param srcArray the source array to be cloned.
+     * @param count the number of elements in the given source array.
+     * @return a cloned array.
+     */
+    private final String[] duplicate(String[] srcArray)
+    {
+        String[] dstArray = new String[srcArray.length];
+        System.arraycopy(srcArray, 0, dstArray, 0, srcArray.length);
+        return dstArray;
+    }
+
+    /**
+     * Clones all the data members from the source DateFormatSymbols to
+     * the target DateFormatSymbols. This is only for subclasses.
+     * @param src the source DateFormatSymbols.
+     * @param dst the target DateFormatSymbols.
+     */
+    private final void copyMembers(DateFormatSymbols src, DateFormatSymbols dst)
+    {
+        dst.eras = duplicate(src.eras);
+        dst.months = duplicate(src.months);
+        dst.shortMonths = duplicate(src.shortMonths);
+        dst.weekdays = duplicate(src.weekdays);
+        dst.shortWeekdays = duplicate(src.shortWeekdays);
+        dst.ampms = duplicate(src.ampms);
+        for (int i = 0; i < dst.zoneStrings.length; ++i)
+            dst.zoneStrings[i] = duplicate(src.zoneStrings[i]);
+        dst.localPatternChars = new String (src.localPatternChars);
+    }
+
+    /**
+     * Compares the equality of the two arrays of String.
+     * @param current this String array.
+     * @param other that String array.
+     */
+    private final boolean equals(String[] current, String[] other)
+    {
+        int count = current.length;
+
+        for (int i = 0; i < count; ++i)
+            if (!current[i].equals(other[i]))
+                return false;
+        return true;
+    }
+
+    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    /**
+     * Get the {@link DateFormatSymbols} object that should be used to format a
+     * calendar system's dates in the given locale.
+     * <p>
+     * <b>Subclassing:</b><br>
+     * When creating a new Calendar subclass, you must create the
+     * {@link ResourceBundle ResourceBundle}
+     * containing its {@link DateFormatSymbols DateFormatSymbols} in a specific place.
+     * The resource bundle name is based on the calendar's fully-specified
+     * class name, with ".resources" inserted at the end of the package name
+     * (just before the class name) and "Symbols" appended to the end.
+     * For example, the bundle corresponding to "com.ibm.util.HebrewCalendar"
+     * is "com.ibm.util.resources.HebrewCalendarSymbols".
+     * <p>
+     * Within the ResourceBundle, this method searches for five keys:
+     * <ul>
+     * <li><b>DayNames</b> -
+     *      An array of strings corresponding to each possible
+     *      value of the <code>DAY_OF_WEEK</code> field.  Even though
+     *      <code>DAY_OF_WEEK</code> starts with <code>SUNDAY</code> = 1,
+     *      This array is 0-based; the name for Sunday goes in the
+     *      first position, at index 0.  If this key is not found
+     *      in the bundle, the day names are inherited from the
+     *      default <code>DateFormatSymbols</code> for the requested locale.
+     *
+     * <li><b>DayAbbreviations</b> -
+     *      An array of abbreviated day names corresponding
+     *      to the values in the "DayNames" array.  If this key
+     *      is not found in the resource bundle, the "DayNames"
+     *      values are used instead.  If neither key is found,
+     *      the day abbreviations are inherited from the default
+     *      <code>DateFormatSymbols</code> for the locale.
+     *
+     * <li><b>MonthNames</b> -
+     *      An array of strings corresponding to each possible
+     *      value of the <code>MONTH</code> field.  If this key is not found
+     *      in the bundle, the month names are inherited from the
+     *      default <code>DateFormatSymbols</code> for the requested locale.
+     *
+     * <li><b>MonthAbbreviations</b> -
+     *      An array of abbreviated day names corresponding
+     *      to the values in the "MonthNames" array.  If this key
+     *      is not found in the resource bundle, the "MonthNames"
+     *      values are used instead.  If neither key is found,
+     *      the day abbreviations are inherited from the default
+     *      <code>DateFormatSymbols</code> for the locale.
+     *
+     * <li><b>Eras</b> -
+     *      An array of strings corresponding to each possible
+     *      value of the <code>ERA</code> field.  If this key is not found
+     *      in the bundle, the era names are inherited from the
+     *      default <code>DateFormatSymbols</code> for the requested locale.
+     * </ul>
+     * <p>
+     * @param cal       The calendar system whose date format symbols are desired.
+     * @param locale    The locale whose symbols are desired.
+     *
+     * @see DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+     */
+    public DateFormatSymbols(Calendar cal, Locale locale) {
+        this(cal==null?null:cal.getClass(), locale);
+    }
+
+    public DateFormatSymbols(Class calendarClass, Locale locale) {
+        this(locale); // old-style construction
+        if (calendarClass != null) {
+            ResourceBundle bundle = null;
+            try {
+                bundle = getDateFormatBundle(calendarClass, locale);
+            } catch (MissingResourceException e) {
+                //if (!(cal instanceof GregorianCalendar)) {
+                if (!(GregorianCalendar.class.isAssignableFrom(calendarClass))) {
+                    // Ok for symbols to be missing for a Gregorian calendar, but
+                    // not for any other type.
+                    throw e;
+                }
+            }
+            constructCalendarSpecific(bundle);
+        }
+    }
+
+    /**
+     * Fetch a custom calendar's DateFormatSymbols out of the given resource
+     * bundle.  Symbols that are not overridden are inherited from the
+     * default DateFormatSymbols for the locale.
+     * @see DateFormatSymbols#DateFormatSymbols
+     */
+    public DateFormatSymbols(ResourceBundle bundle, Locale locale) {
+        // Get the default symbols for the locale, since most
+        // calendars will only need to override month names and will
+        // want everything else the same
+        this(locale); // old-style construction
+        constructCalendarSpecific(bundle);
+    }
+
+    /**
+     * Given a resource bundle specific to the given Calendar class,
+     * initialize this object.  Member variables will have already been
+     * initialized using the default mechanism, so only those that differ
+     * from or supplement the standard resource data need be handled here.
+     * If subclasses override this method, they should call
+     * <code>super.constructCalendarSpecific(bundle)</code> as needed to
+     * handle the "DayNames", "DayAbbreviations", "MonthNames",
+     * "MonthAbbreviations", and "Eras" resource data.
+     */
+    protected void constructCalendarSpecific(ResourceBundle bundle) {
+
+        // Fetch the day names from the resource bundle.  If they're not found,
+        // it's ok; we'll just use the default ones.
+        // Allow a null ResourceBundle just for the sake of completeness;
+        // this is useful for calendars that don't have any overridden symbols
+
+        if (bundle != null) {
+            try {
+                String[] temp = bundle.getStringArray("DayNames");
+                setWeekdays(temp);
+                setShortWeekdays(temp);
+
+                temp = bundle.getStringArray("DayAbbreviations");
+                setShortWeekdays( temp );
+            } catch (MissingResourceException e) {}
+
+            try {
+                String[] temp = bundle.getStringArray("MonthNames");
+                setMonths( temp );
+                setShortMonths( temp );
+
+                temp = bundle.getStringArray("MonthAbbreviations");
+                setShortMonths( temp );
+            } catch (MissingResourceException e) {}
+
+            try {
+                String[] temp = bundle.getStringArray("Eras");
+                setEras( temp );
+            } catch (MissingResourceException e) {}
+        }
+    }
+
+//~    private static final java.text.DateFormatSymbols oldStyleSymbols(DateFormatSymbols syms, Locale loc) {
+//~        java.text.DateFormatSymbols result = new java.text.DateFormatSymbols(loc);
+//~        result.setAmPmStrings(syms.getAmPmStrings());
+//~        result.setEras(syms.getEras());
+//~        result.setLocalPatternChars(syms.getLocalPatternChars());
+//~        result.setMonths(syms.getMonths());
+//~        result.setShortMonths(syms.getShortMonths());
+//~        result.setShortWeekdays(syms.getShortWeekdays());
+//~        result.setWeekdays(syms.getWeekdays());
+//~        result.setZoneStrings(syms.getZoneStrings());
+//~        return result;
+//~    }
+
+    /**
+     * Find the ResourceBundle containing the date format information for
+     * a specified calendar subclass in a given locale.
+     * <p>
+     * The resource bundle name is based on the calendar's fully-specified
+     * class name, with ".resources" inserted at the end of the package name
+     * (just before the class name) and "Symbols" appended to the end.
+     * For example, the bundle corresponding to "com.ibm.util.HebrewCalendar"
+     * is "com.ibm.util.resources.HebrewCalendarSymbols".
+     */
+    static public ResourceBundle getDateFormatBundle(Class calendarClass, Locale locale)
+                                  throws MissingResourceException {
+
+        // Find the calendar's class name, which we're going to use to construct the
+        // resource bundle name.
+        String fullName = calendarClass.getName();
+        int lastDot = fullName.lastIndexOf('.');
+        String className = fullName.substring(lastDot+1);
+
+        // The name of the ResourceBundle itself is the calendar's fully-qualified
+        // name, with ".resources" inserted in the package and "Symbols" appended.
+        // E.g., "my.pkg.MyCalendar" -> "my.pkg.resources.MyCalendarSymbols"
+        String bundleName = fullName.substring(0, lastDot+1) + "resources."
+                                + className + "Symbols";
+
+        ResourceBundle result = null;
+        try {
+            result = ResourceBundle.getBundle(bundleName, locale);
+        }
+        catch (MissingResourceException e) {
+            //if (!(cal instanceof GregorianCalendar)) {
+            if (!(GregorianCalendar.class.isAssignableFrom(calendarClass))) {
+                // Ok for symbols to be missing for a Gregorian calendar, but
+                // not for any other type.
+                throw e;
+            }
+        }
+        return result;
+    }
+
+    static public ResourceBundle getDateFormatBundle(Calendar cal, Locale locale)
+                                  throws MissingResourceException {
+        return getDateFormatBundle(cal==null?null:cal.getClass(), locale);
+    }
+}
diff --git a/src/com/ibm/text/DecimalFormat.java b/src/com/ibm/text/DecimalFormat.java
new file mode 100755
index 0000000..0f42d56
--- /dev/null
+++ b/src/com/ibm/text/DecimalFormat.java
@@ -0,0 +1,2860 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/DecimalFormat.java,v $ 
+ * $Date: 2000/06/01 23:52:17 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.text.Format;
+import java.text.ParsePosition;
+import java.text.FieldPosition;
+import java.math.BigInteger;
+import java.util.ResourceBundle;
+import java.util.Locale;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.util.Hashtable;
+
+/**
+ * <code>DecimalFormat</code> is a concrete subclass of
+ * <code>NumberFormat</code> that formats decimal numbers. It has a variety of
+ * features designed to make it possible to parse and format numbers in any
+ * locale, including support for Western, Arabic, or Indic digits.  It also
+ * supports different flavors of numbers, including integers (123), fixed-point
+ * numbers (123.4), scientific notation (1.23E4), percentages (12%), and
+ * currency amounts ($123).  All of these flavors can be easily localized.
+ *
+ * <p><strong>This is an enhanced version of <code>DecimalFormat</code> that
+ * is based on the standard version in the JDK.  New or changed functionality
+ * is labeled
+ * <strong><font face=helvetica color=red>NEW</font></strong> or
+ * <strong><font face=helvetica color=red>CHANGED</font></strong>.</strong>
+ *
+ * <p>To obtain a <code>NumberFormat</code> for a specific locale (including the
+ * default locale) call one of <code>NumberFormat</code>'s factory methods such
+ * as <code>getInstance()</code>. Do not call the <code>DecimalFormat</code>
+ * constructors directly, unless you know what you are doing, since the
+ * <code>NumberFormat</code> factory methods may return subclasses other than
+ * <code>DecimalFormat</code>. If you need to customize the format object, do
+ * something like this:
+ *
+ * <blockquote><pre>
+ * NumberFormat f = NumberFormat.getInstance(loc);
+ * if (f instanceof DecimalFormat) {
+ *     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
+ * }
+ * </pre></blockquote>
+ *
+ * <p>A <code>DecimalFormat</code> comprises a <em>pattern</em> and a set of
+ * <em>symbols</em>.  The pattern may be set directly using
+ * <code>applyPattern()</code>, or indirectly using the API methods.  The
+ * symbols are stored in a <code>DecimalFormatSymbols</code> object.  When using
+ * the <code>NumberFormat</code> factory methods, the pattern and symbols are
+ * read from localized <code>ResourceBundle</code>s in the package
+ * <code>java.text.resource</code>.
+ *
+ * <p><strong>Example</strong>
+ *
+ * <blockquote><pre>
+ * <strong>// Print out a number using the localized number, currency,
+ * // and percent format for each locale</strong>
+ * Locale[] locales = NumberFormat.getAvailableLocales();
+ * double myNumber = -1234.56;
+ * NumberFormat form;
+ * for (int j=0; j<3; ++j) {
+ *     System.out.println("FORMAT");
+ *     for (int i = 0; i < locales.length; ++i) {
+ *         if (locales[i].getCountry().length() == 0) {
+ *            // Skip language-only locales
+ *            continue;
+ *         }
+ *         System.out.print(locales[i].getDisplayName());
+ *         switch (j) {
+ *         case 0:
+ *             form = NumberFormat.getInstance(locales[i]); break;
+ *         case 1:
+ *             form = NumberFormat.getCurrencyInstance(locales[i]); break;
+ *         default:
+ *             form = NumberFormat.getPercentInstance(locales[i]); break;
+ *         }
+ *         try {
+ *             // Assume form is a DecimalFormat
+ *             System.out.print(": " + ((DecimalFormat) form).toPattern()
+ *                              + " -> " + form.format(myNumber));
+ *         } catch (IllegalArgumentException e) {}
+ *         try {
+ *             System.out.println(" -> " + form.parse(form.format(myNumber)));
+ *         } catch (ParseException e) {}
+ *     }
+ * }
+ * </pre></blockquote>
+ *
+ * <p><strong>Notes</strong>
+ *
+ * <p>A <code>DecimalFormat</code> pattern contains a postive and negative
+ * subpattern, for example, "#,##0.00;(#,##0.00)".  Each subpattern has a
+ * prefix, numeric part, and suffix.  If there is no explicit negative
+ * subpattern, the localized minus sign, typically '-', is prefixed to the
+ * positive form. That is, "0.00" alone is equivalent to "0.00;-0.00".  If there
+ * is an explicit negative subpattern, it serves only to specify the negative
+ * prefix and suffix; the number of digits, minimal digits, and other
+ * characteristics are all the same as the positive pattern. That means that
+ * "#,##0.0#;(#)" has precisely the same result as "#,##0.0#;(#,##0.0#)".
+ *
+ * <p>The prefixes, suffixes, and various symbols used for infinity, digits,
+ * thousands separators, decimal separators, etc. may be set to arbitrary
+ * values, and they will appear properly during formatting.  However, care must
+ * be taken that the symbols and strings do not conflict, or parsing will be
+ * unreliable.  For example, either the positive and negative prefixes or the
+ * suffixes must be distinct for <code>DecimalFormat.parse()</code> to be able
+ * to distinguish positive from negative values.  Another example is that the
+ * decimal separator and thousands separator should be distinct characters, or
+ * parsing will be impossible.
+ *
+ * <p>The grouping separator is commonly used for thousands, but in some
+ * countries it separates ten-thousands. The grouping size is a constant number
+ * of digits between the grouping characters, such as 3 for 100,000,000 or 4 for
+ * 1,0000,0000.
+ * If you supply a pattern with multiple grouping characters, the interval
+ * between the last one and the end of the integer determines the primary
+ * grouping size, and the interval between the last two determines
+ * the secondary grouping size (see below); all others are ignored.
+ * So "#,##,###,####" == "###,###,####" == "##,#,###,####".
+ *
+ * <P>Some locales have two different grouping intervals:  One used for the
+ * least significant integer digits (the primary grouping size), and
+ * one used for all others (the secondary grouping size).  For example,
+ * if the primary grouping interval is 3, and the secondary is 2, then
+ * this corresponds to the pattern "#,##,##0", and the number 123456789
+ * is formatted as "12,34,56,789".
+ *
+ * <p><code>DecimalFormat</code> parses all Unicode characters that represent
+ * decimal digits, as defined by <code>Character.digit()</code>.  In addition,
+ * <code>DecimalFormat</code> also recognizes as digits the ten consecutive
+ * characters starting with the localized zero digit defined in the
+ * <code>DecimalFormatSymbols</code> object.  During formatting, the
+ * <code>DecimalFormatSymbols</code>-based digits are output.
+ *
+ * <p>Illegal patterns, such as "#.#.#" or "#.###,###", will cause
+ * <code>DecimalFormat</code> to throw an <code>IllegalArgumentException</code>
+ * with a message that describes the problem.
+ *
+ * <p>If <code>DecimalFormat.parse(String, ParsePosition)</code> fails to parse
+ * a string, it returns <code>null</code> and leaves the parse position
+ * unchanged.  The convenience method <code>DecimalFormat.parse(String)</code>
+ * indicates parse failure by throwing a <code>ParseException</code>.
+ *
+ * <p><strong>Special Cases</strong>
+ *
+ * <p><code>NaN</code> is formatted as a single character, typically
+ * <code>&#92;uFFFD</code>.  This character is determined by the
+ * <code>DecimalFormatSymbols</code> object.  This is the only value for which
+ * the prefixes and suffixes are not used.
+ *
+ * <p>Infinity is formatted as a single character, typically
+ * <code>&#92;u221E</code>, with the positive or negative prefixes and suffixes
+ * applied.  The infinity character is determined by the
+ * <code>DecimalFormatSymbols</code> object.
+ *
+ * <p>
+ * <strong><font face=helvetica color=red>NEW</font></strong>
+ * <strong>Scientific Notation</strong>
+ *
+ * <p>Numbers in scientific notation are expressed as the product of a mantissa
+ * and a power of ten, for example, 1234 can be expressed as 1.234 x 10^3.  The
+ * mantissa is often in the range 1.0 <= x < 10.0, but it need not be.
+ * <code>DecimalFormat</code> can be instructed to format and parse scientific
+ * notation through the API or via a pattern.  In a pattern, the exponent
+ * character immediately followed by one or more digit characters indicates
+ * scientific notation.  Example: "0.###E0" formats the number 1234 as
+ * "1.234E3".
+ *
+ * <ul>
+ * <li>The number of digit characters after the exponent character gives the
+ * minimum exponent digit count.  There is no maximum.  Negative exponents are
+ * formatted using the localized minus sign, <em>not</em> the prefix and suffix
+ * from the pattern.  This allows patterns such as "0.###E0 m/s".  To prefix
+ * positive exponents with a localized plus sign, specify '+' between the
+ * exponent and the digits: "0.###E+0" will produce formats "1E+1", "1E+0",
+ * "1E-1", etc.  (In localized patterns, use the localized plus sign rather than
+ * '+'.)
+ *
+ * <li>The minimum number of integer digits is achieved by adjusting the
+ * exponent.  Example: 0.00123 formatted with "00.###E0" yields "12.3E-4".  This
+ * only happens if there is no maximum number of integer digits.  If there is a
+ * maximum, then the minimum number of integer digits is fixed at one.
+ *
+ * <li>The maximum number of integer digits, if present, specifies the exponent
+ * grouping.  The most common use of this is to generate <em>engineering
+ * notation</em>, in which the exponent is a multiple of three, e.g.,
+ * "##0.###E0".  The number 12345 is formatted using "##0.####E0" as "12.345E3".
+ *
+ * <li>The number of significant digits is the sum of the <em>minimum
+ * integer</em> and <em>maximum fraction</em> digits, and is unaffected by the
+ * maximum integer digits.  If this sum is zero, then all significant digits are
+ * shown.  The number of significant digits limits the total number of integer
+ * and fraction digits that will be shown in the mantissa; it does not affect
+ * parsing.  For example, 12345 formatted with "##0.##E0" is "12.3E3".
+ *
+ * <li>Exponential patterns may not contain grouping separators.
+ * </ul>
+ *
+ * <p>
+ * <strong><font face=helvetica color=red>NEW</font></strong>
+ * <strong>Padding</strong>
+ *
+ * <p><code>DecimalFormat</code> supports padding the result of
+ * <code>format()</code> to a specific width.  Padding may be specified either
+ * through the API or through the pattern syntax.  In a pattern the pad escape
+ * character, followed by a single pad character, causes padding to be parsed
+ * and formatted.  The pad escape character is '*' in unlocalized patterns, and
+ * can be localized using <code>DecimalFormatSymbols.setPadEscape()</code>.  For
+ * example, <code>"$*x#,##0.00"</code> formats 123 to <code>"$xx123.00"</code>,
+ * and 1234 to <code>"$1,234.00"</code>.
+ *
+ * <ul>
+ * <li>When padding is in effect, the width of the positive subpattern,
+ * including prefix and suffix, determines the format width.  For example, in
+ * the pattern <code>"* #0 o''clock"</code>, the format width is 10.
+ *
+ * <li>Some parameters which usually do not matter have meaning when padding is
+ * used, because the pattern width is significant with padding.  In the pattern
+ * "^ ##,##,#,##0.##", the format width is 14.  The initial characters "##,##,"
+ * do not affect the grouping size or maximum integer digits, but they do affect
+ * the format width.
+ *
+ * <li>Padding may be inserted at one of four locations: before the prefix,
+ * after the prefix, before the suffix, or after the suffix.  If padding is
+ * specified in any other location, <code>DecimalFormat.applyPattern()</code>
+ * throws an <code>IllegalArgumentException</code>.  If there is no prefix,
+ * before the prefix and after the prefix are equivalent, likewise for the
+ * suffix.
+ *
+ * <li>The pad character may not be a quote.
+ * </ul>
+ *
+ * <p>
+ * <strong><font face=helvetica color=red>NEW</font></strong>
+ * <strong>Rounding</strong>
+ *
+ * <p><code>DecimalFormat</code> supports rounding to a specific increment.  For
+ * example, 1230 rounded to the nearest 50 is 1250.  1.234 rounded to the
+ * nearest 0.65 is 1.3.  The rounding increment may be specified through the API
+ * or in a pattern.  To specify a rounding increment in a pattern, include the
+ * increment in the pattern itself.  "#,#50" specifies a rounding increment of
+ * 50.  "#,##0.05" specifies a rounding increment of 0.05.
+ *
+ * <ul>
+ * <li>Rounding only affects the string produced by formatting.  It does
+ * not affect parsing or change any numerical values.
+ *
+ * <li>A <em>rounding mode</em> determines how values are rounded; see the
+ * <code>java.math.BigDecimal</code> documentation for a description of the
+ * modes.  Rounding increments specified in patterns use the default mode,
+ * <code>ROUND_HALF_EVEN</code>.
+ *
+ * <li>Some locales use rounding in their currency formats to reflect the
+ * smallest currency denomination.
+ *
+ * <li>In a pattern, digits '1' through '9' specify rounding, but otherwise
+ * behave identically to digit '0'.
+ * </ul>
+ *
+ * <p><strong>Pattern Syntax</strong>
+ * <pre>
+ * pattern    := subpattern{';' subpattern}
+ * subpattern := {prefix}number{suffix}
+ * number     := integer{'.' fraction}{exponent}
+ * prefix     := '&#92;u0000'..'&#92;uFFFD' - specialCharacters
+ * suffix     := '&#92;u0000'..'&#92;uFFFD' - specialCharacters
+ * integer    := '#'* '0'* '0'
+ * fraction   := '0'* '#'*
+ * exponent   := 'E' {'+'} '0'* '0'
+ * padSpec    := '*' padChar
+ * padChar    := '&#92;u0000'..'&#92;uFFFD' - quote
+ * &#32;
+ * Notation:
+ *   X*       0 or more instances of X
+ *   { X }    0 or 1 instances of X
+ *   X..Y     any character from X up to Y, inclusive
+ *   S - T    characters in S, except those in T
+ * </pre>
+ * The first subpattern is for positive numbers. The second (optional)
+ * subpattern is for negative numbers.
+ * 
+ * <p>Not indicated in the BNF syntax above:
+ * <ul><li>The grouping separator ',' can occur inside the integer portion between the
+ * most significant digit and the least significant digit.
+ *
+ * <li><font color=red face=helvetica><strong>NEW</strong></font>
+ *     Two grouping intervals are recognized: That between the
+ *     decimal point and the first grouping symbol, and that
+ *     between the first and second grouping symbols. These
+ *     intervals are identical in most locales, but in some
+ *     locales they differ. For example, the pattern
+ *     &quot;#,##,###&quot; formats the number 123456789 as
+ *     &quot;12,34,56,789&quot;.</li>
+ * 
+ * <li>
+ * <strong><font face=helvetica color=red>NEW</font></strong>
+ * The pad specifier <code>padSpec</code> may appear before the prefix,
+ * after the prefix, before the suffix, after the suffix, or not at all.
+ *
+ * <li>
+ * <strong><font face=helvetica color=red>NEW</font></strong>
+ * In place of '0', the digits '1' through '9' may be used to
+ * indicate a rounding increment.
+ * </ul>
+ *
+ * <p><strong>Special Pattern Characters</strong>
+ *
+ * <p>Here are the special characters used in the pattern, with notes on their
+ * usage.  Special characters must be quoted, unless noted otherwise, if they
+ * are to appear in the prefix or suffix.  This does not apply to those listed
+ * with location "prefix or suffix."  Such characters should only be quoted in
+ * order to remove their special meaning.
+ *
+ * <p><table border=1>
+ * <tr><th>Symbol<th>Location<th>Meaning</tr>
+ * <tr><td>0-9<td>Number<td>Digit.
+ *                  <strong><font face=helvetica color=red>NEW</font></strong>
+ *                  '1' through '9' indicate rounding</tr>
+ * <tr><td>#<td>Number<td>Digit, zero shows as absent</tr>
+ * <tr><td>.<td>Number<td>Decimal separator or monetary decimal separator</tr>
+ * <tr><td>,<td>Number<td>Grouping separator</tr>
+ * <tr><td>E<td>Number
+ *          <td>Separates mantissa and exponent in scientific notation.
+ *              <em>Need not be quoted in prefix or suffix.</em></tr>
+ * <tr><td><strong><font face=helvetica color=red>NEW</font></strong>
+ *         +<td>Exponent
+ *          <td>Prefix positive exponents with localized plus sign.
+ *              <em>Need not be quoted in prefix or suffix.</em></tr>
+ * <tr><td>;<td>Subpattern boundary
+ *          <td>Separates positive and negative subpatterns</tr>
+ * <tr><td>%<td>Prefix or suffix<td>Multiply by 100 and show as percentage</tr>
+ * <tr><td>&#92;u2030<td>Prefix or suffix
+ *                   <td>Multiply by 1000 and show as per mille</tr>
+ * <tr><td>&#92;u00A4<td>Prefix or suffix
+ *                   <td>Currency sign, replaced by currency symbol.  If
+ *                   doubled, replaced by international currency symbol.
+ *                   If present in a pattern, the monetary decimal separator
+ *                   is used instead of the decimal separator.</tr>
+ * <tr><td>'<td>Prefix or suffix
+ *          <td>Used to quote special characters in a prefix or suffix,
+ *              for example, <code>"'#'#"</code> formats 123 to
+ *              <code>"#123"</code>.  To create a single quote
+ *              itself, use two in a row: <code>"# o''clock"</code>.</tr>
+ * <tr><td><strong><font face=helvetica color=red>NEW</font></strong>
+ *         *<td>Prefix or suffix boundary
+ *          <td>Pad escape, precedes pad character</tr>
+ * </table>
+ * </pre>
+ *
+ *
+ * @see          java.text.Format
+ * @see          NumberFormat
+ * @version      1.48 09/21/98
+ * @author       Mark Davis
+ * @author       Alan Liu
+ * */
+public class DecimalFormat extends NumberFormat {
+
+    /**
+     * Create a DecimalFormat using the default pattern and symbols
+     * for the default locale. This is a convenient way to obtain a
+     * DecimalFormat when internationalization is not the main concern.
+     * <p>
+     * To obtain standard formats for a given locale, use the factory methods
+     * on NumberFormat such as getNumberInstance. These factories will
+     * return the most appropriate sub-class of NumberFormat for a given
+     * locale.
+     * @see NumberFormat#getInstance
+     * @see NumberFormat#getNumberInstance
+     * @see NumberFormat#getCurrencyInstance
+     * @see NumberFormat#getPercentInstance
+     */
+    public DecimalFormat() {
+        // [NEW]
+        Locale def = Locale.getDefault();
+        String pattern = getPattern(def, 0);
+        // Always applyPattern after the symbols are set
+        this.symbols = new DecimalFormatSymbols(def);
+        applyPattern(pattern, false);
+    }
+
+
+    /**
+     * Create a DecimalFormat from the given pattern and the symbols
+     * for the default locale. This is a convenient way to obtain a
+     * DecimalFormat when internationalization is not the main concern.
+     * <p>
+     * To obtain standard formats for a given locale, use the factory methods
+     * on NumberFormat such as getNumberInstance. These factories will
+     * return the most appropriate sub-class of NumberFormat for a given
+     * locale.
+     * @param pattern A non-localized pattern string.
+     * @exception IllegalArgumentException if the given pattern is invalid.
+     * @see NumberFormat#getInstance
+     * @see NumberFormat#getNumberInstance
+     * @see NumberFormat#getCurrencyInstance
+     * @see NumberFormat#getPercentInstance
+     */
+    public DecimalFormat(String pattern) {
+    // Always applyPattern after the symbols are set
+        this.symbols = new DecimalFormatSymbols( Locale.getDefault() );
+        applyPattern( pattern, false );
+    }
+
+
+    /**
+     * Create a DecimalFormat from the given pattern and symbols.
+     * Use this constructor when you need to completely customize the
+     * behavior of the format.
+     * <p>
+     * To obtain standard formats for a given
+     * locale, use the factory methods on NumberFormat such as
+     * getInstance or getCurrencyInstance. If you need only minor adjustments
+     * to a standard format, you can modify the format returned by
+     * a NumberFormat factory method.
+     * @param pattern a non-localized pattern string
+     * @param symbols the set of symbols to be used
+     * @exception IllegalArgumentException if the given pattern is invalid
+     * @see NumberFormat#getInstance
+     * @see NumberFormat#getNumberInstance
+     * @see NumberFormat#getCurrencyInstance
+     * @see NumberFormat#getPercentInstance
+     * @see DecimalFormatSymbols
+     */
+    public DecimalFormat (String pattern, DecimalFormatSymbols symbols) {
+        // Always applyPattern after the symbols are set
+        this.symbols = (DecimalFormatSymbols)symbols.clone();
+        applyPattern( pattern, false );
+    }
+
+
+    // Overrides
+    public StringBuffer format(double number, StringBuffer result,
+                               FieldPosition fieldPosition)
+    {
+        //FP:fieldPosition.setBeginIndex(0);
+        //FP:fieldPosition.setEndIndex(0);
+
+        if (Double.isNaN(number))
+        {
+            //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            //FP:fieldPosition.setBeginIndex(result.length());
+
+            result.append(symbols.getNaN());
+
+            //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            //FP:fieldPosition.setEndIndex(result.length());
+
+            addPadding(result, false, false /*ignored*/);
+            return result;
+        }
+
+        /* Detecting whether a double is negative is easy with the exception of
+         * the value -0.0.  This is a double which has a zero mantissa (and
+         * exponent), but a negative sign bit.  It is semantically distinct from
+         * a zero with a positive sign bit, and this distinction is important
+         * to certain kinds of computations.  However, it's a little tricky to
+         * detect, since (-0.0 == 0.0) and !(-0.0 < 0.0).  How then, you may
+         * ask, does it behave distinctly from +0.0?  Well, 1/(-0.0) ==
+         * -Infinity.  Proper detection of -0.0 is needed to deal with the
+         * issues raised by bugs 4106658, 4106667, and 4147706.  Liu 7/6/98.
+         */
+        boolean isNegative = (number < 0.0) || (number == 0.0 && 1/number < 0.0);
+        if (isNegative) number = -number;
+
+        // Do this BEFORE checking to see if value is infinite!
+        if (multiplier != 1) number *= multiplier;
+
+        // Apply rounding after multiplier
+        if (roundingDouble > 0.0) {
+            number = roundingDouble
+                * round(number / roundingDouble, roundingMode, isNegative);
+        }
+
+        if (Double.isInfinite(number))
+        {
+            result.append(isNegative ? negativePrefix : positivePrefix);
+
+            //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            //FP:fieldPosition.setBeginIndex(result.length());
+
+            result.append(symbols.getInfinity());
+
+            //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            //FP:eydfieldPosition.setEndIndex(result.length());
+
+            result.append(isNegative ? negativeSuffix : positiveSuffix);
+
+            addPadding(result, true, isNegative);
+            return result;
+        }
+
+        // At this point we are guaranteed a nonnegative finite
+        // number.
+        synchronized(digitList) {
+            digitList.set(number, useExponentialNotation ?
+                      getMinimumIntegerDigits() + getMaximumFractionDigits() :
+                      getMaximumFractionDigits(),
+                      !useExponentialNotation);
+
+            return subformat(result, fieldPosition, isNegative, false);
+        }
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Round a double value to the nearest integer according to the
+     * given mode.
+     * @param a the absolute value of the number to be rounded
+     * @param mode a BigDecimal rounding mode
+     * @param isNegative true if the number to be rounded is negative
+     * @return the absolute value of the rounded result
+     */
+    private static double round(double a, int mode, boolean isNegative) {
+        switch (mode) {
+        case java.math.BigDecimal.ROUND_CEILING:
+            return isNegative ? Math.floor(a) : Math.ceil(a);
+        case java.math.BigDecimal.ROUND_FLOOR:
+            return isNegative ? Math.ceil(a) : Math.floor(a);
+        case java.math.BigDecimal.ROUND_DOWN:
+            return Math.floor(a);
+        case java.math.BigDecimal.ROUND_UP:
+            return Math.ceil(a);
+        case java.math.BigDecimal.ROUND_HALF_EVEN:
+            // We should be able to just return Math.rint(a), but this
+            // doesn't work in some VMs.
+            {
+                double f = Math.floor(a);
+                if ((a - f) != 0.5) {
+                    return Math.rint(a);
+                }
+                f /= 2.0;
+                return f == Math.floor(f) ? Math.floor(a) : (Math.floor(a) + 1.0);
+            }
+        case java.math.BigDecimal.ROUND_HALF_DOWN:
+            return ((a - Math.floor(a)) <= 0.5) ? Math.floor(a) : Math.ceil(a);
+        case java.math.BigDecimal.ROUND_HALF_UP:
+            return ((a - Math.floor(a)) < 0.5) ? Math.floor(a) : Math.ceil(a);
+        case java.math.BigDecimal.ROUND_UNNECESSARY:
+            if (a != Math.floor(a)) {
+                throw new ArithmeticException("Rounding necessary");
+            }
+            return a;
+        default:
+            throw new IllegalArgumentException("Invalid rounding mode: " + mode);
+        }
+    }
+
+    public StringBuffer format(long number, StringBuffer result,
+                               FieldPosition fieldPosition)
+    {
+        //FP:fieldPosition.setBeginIndex(0);
+        //FP:fieldPosition.setEndIndex(0);
+
+        // If we are to do rounding, we need to move into the BigDecimal
+        // domain in order to do divide/multiply correctly.
+        // [NEW]
+        if (roundingIncrement != null) {
+            return format(java.math.BigDecimal.valueOf(number), result, fieldPosition);
+        }
+
+        boolean isNegative = (number < 0);
+        if (isNegative) number = -number;
+
+        // In general, long values always represent real finite numbers, so
+        // we don't have to check for +/- Infinity or NaN.  However, there
+        // is one case we have to be careful of:  The multiplier can push
+        // a number near MIN_VALUE or MAX_VALUE outside the legal range.  We
+        // check for this before multiplying, and if it happens we use BigInteger
+        // instead.
+        // [NEW]
+        if (multiplier != 1) {
+            boolean tooBig = false;
+            if (number < 0) { // This can only happen if number == Long.MIN_VALUE
+                long cutoff = Long.MIN_VALUE / multiplier;
+                tooBig = (number < cutoff);
+            } else {
+                long cutoff = Long.MAX_VALUE / multiplier;
+                tooBig = (number > cutoff);
+            }
+            if (tooBig) {
+                return format(BigInteger.valueOf(isNegative ? -number : number),
+                              result, fieldPosition);
+            }
+        }
+
+        number *= multiplier;
+        synchronized(digitList) {
+            digitList.set(number, useExponentialNotation ?
+                          getMinimumIntegerDigits() + getMaximumFractionDigits() : 0);
+
+            return subformat(result, fieldPosition, isNegative, true);
+        }
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Format a BigInteger number.
+     */
+    public StringBuffer format(BigInteger number, StringBuffer result,
+                               FieldPosition fieldPosition) {
+        // If we are to do rounding, we need to move into the BigDecimal
+        // domain in order to do divide/multiply correctly.
+        if (roundingIncrement != null) {
+            return format(new java.math.BigDecimal(number), result, fieldPosition);
+        }
+
+        if (multiplier != 1) {
+            number = number.multiply(BigInteger.valueOf(multiplier));
+        }
+
+        // At this point we are guaranteed a nonnegative finite
+        // number.
+        synchronized(digitList) {
+            digitList.set(number, useExponentialNotation ?
+                          getMinimumIntegerDigits() + getMaximumFractionDigits() : 0);
+
+            return subformat(result, fieldPosition, number.signum() < 0, false);
+        }
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Format a BigDecimal number.
+     */
+    public StringBuffer format(java.math.BigDecimal number, StringBuffer result,
+                               FieldPosition fieldPosition) {
+        if (multiplier != 1) {
+            number = number.multiply(java.math.BigDecimal.valueOf(multiplier));
+        }
+
+        if (roundingIncrement != null) {
+            number = number.divide(roundingIncrement, 0, roundingMode)
+                    .multiply(roundingIncrement);
+        }
+
+        // At this point we are guaranteed a nonnegative finite
+        // number.
+        synchronized(digitList) {
+            digitList.set(number, useExponentialNotation ?
+                      getMinimumIntegerDigits() + getMaximumFractionDigits() :
+                      getMaximumFractionDigits(),
+                      !useExponentialNotation);
+            return subformat(result, fieldPosition, number.signum() < 0, false);
+        }        
+    }
+
+    //This has been removed pending addition of com.ibm.math package to ICU4J
+    /*
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Format a BigDecimal number.
+     */
+    public StringBuffer format(com.ibm.math.BigDecimal number, StringBuffer result,
+                               FieldPosition fieldPosition) {
+        /* This method is just a copy of the corresponding java.math.BigDecimal
+         * method for now.  It isn't very efficient since it must create a
+         * conversion object to do math on the rounding increment.  In the
+         * future we may try to clean this up, or even better, limit our support
+         * to just one flavor of BigDecimal.
+         */
+        if (multiplier != 1) {
+            number = number.multiply(com.ibm.math.BigDecimal.valueOf(multiplier));
+        }
+
+        if (roundingIncrement != null) {
+            com.ibm.math.BigDecimal ri = new com.ibm.math.BigDecimal(roundingIncrement);
+            number = number.divide(ri, 0, roundingMode)
+                    .multiply(ri);
+        }
+
+        // At this point we are guaranteed a nonnegative finite
+        // number.
+        synchronized(digitList) {
+            digitList.set(number, useExponentialNotation ?
+                      getMinimumIntegerDigits() + getMaximumFractionDigits() :
+                      getMaximumFractionDigits(),
+                      !useExponentialNotation);
+            return subformat(result, fieldPosition, number.signum() < 0, false);
+        }        
+    }
+
+    /**
+     * Return true if a grouping separator belongs at the given
+     * position, based on whether grouping is in use and the values of
+     * the primary and secondary grouping interval.
+     * @param pos the number of integer digits to the right of
+     * the current position.  Zero indicates the position after the
+     * rightmost integer digit.
+     * @return true if a grouping character belongs at the current
+     * position.
+     */
+    private boolean isGroupingPosition(int pos) {
+        boolean result = false;
+        if (isGroupingUsed() && (pos > 0) && (groupingSize > 0)) {
+            if ((groupingSize2 > 0) && (pos > groupingSize)) {
+                result = ((pos - groupingSize) % groupingSize2) == 0;
+            } else {
+                result = pos % groupingSize == 0;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Complete the formatting of a finite number.  On entry, the digitList must
+     * be filled in with the correct digits.
+     */
+    private StringBuffer subformat(StringBuffer result, FieldPosition fieldPosition,
+                   boolean isNegative, boolean isInteger)
+    {
+        // NOTE: This isn't required anymore because DigitList takes care of this.
+        //
+        //  // The negative of the exponent represents the number of leading
+        //  // zeros between the decimal and the first non-zero digit, for
+        //  // a value < 0.1 (e.g., for 0.00123, -fExponent == 2).  If this
+        //  // is more than the maximum fraction digits, then we have an underflow
+        //  // for the printed representation.  We recognize this here and set
+        //  // the DigitList representation to zero in this situation.
+        //
+        //  if (-digitList.decimalAt >= getMaximumFractionDigits())
+        //  {
+        //      digitList.count = 0;
+        //  }
+
+        int i;
+        char zero = symbols.getZeroDigit();
+        int zeroDelta = zero - '0'; // '0' is the DigitList representation of zero
+        char grouping = symbols.getGroupingSeparator();
+        char decimal = isCurrencyFormat ?
+            symbols.getMonetaryDecimalSeparator() :
+            symbols.getDecimalSeparator();
+        int maxIntDig = getMaximumIntegerDigits();
+        int minIntDig = getMinimumIntegerDigits();
+
+        /* Per bug 4147706, DecimalFormat must respect the sign of numbers which
+         * format as zero.  This allows sensible computations and preserves
+         * relations such as signum(1/x) = signum(x), where x is +Infinity or
+         * -Infinity.  Prior to this fix, we always formatted zero values as if
+         * they were positive.  Liu 7/6/98.
+         */
+        if (digitList.isZero())
+        {
+            digitList.decimalAt = 0; // Normalize
+        }
+
+        result.append(isNegative ? negativePrefix : positivePrefix);
+
+        if (useExponentialNotation)
+        {
+            // Record field information for caller.
+            //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            //FP:{
+                //FP:fieldPosition.setBeginIndex(result.length());
+                //FP:fieldPosition.setEndIndex(-1);
+            //FP:}
+            //FP:else if (fieldPosition.getField() == NumberFormat.FRACTION_FIELD)
+            //FP:{
+                //FP:fieldPosition.setBeginIndex(-1);
+            //FP:}
+
+            // Minimum integer digits are handled in exponential format by
+            // adjusting the exponent.  For example, 0.01234 with 3 minimum
+            // integer digits is "123.4E-4".
+
+            // Maximum integer digits are interpreted as indicating the
+            // repeating range.  This is useful for engineering notation, in
+            // which the exponent is restricted to a multiple of 3.  For
+            // example, 0.01234 with 3 maximum integer digits is "12.34e-3".
+            // If maximum integer digits are defined and are larger than
+            // minimum integer digits, then minimum integer digits are
+            // ignored.
+
+            int exponent = digitList.decimalAt;
+            if (maxIntDig > 1 && maxIntDig != minIntDig) {
+                // A exponent increment is defined; adjust to it.
+                exponent = (exponent > 0) ? (exponent - 1) / maxIntDig
+                                          : (exponent / maxIntDig) - 1;
+                exponent *= maxIntDig;
+            } else {
+                // No exponent increment is defined; use minimum integer digits.
+                // If none is specified, as in "#E0", generate 1 integer digit.
+                exponent -= (minIntDig > 0 || getMinimumFractionDigits() > 0)
+                    ? minIntDig : 1;
+            }
+
+            // We now output a minimum number of digits, and more if there
+            // are more digits, up to the maximum number of digits.  We
+            // place the decimal point after the "integer" digits, which
+            // are the first (decimalAt - exponent) digits.
+            int minimumDigits = minIntDig
+                                + getMinimumFractionDigits();
+            // The number of integer digits is handled specially if the number
+            // is zero, since then there may be no digits.
+            int integerDigits = digitList.isZero() ? minIntDig :
+                digitList.decimalAt - exponent;
+            int totalDigits = digitList.count;
+            if (minimumDigits > totalDigits) totalDigits = minimumDigits;
+            if (integerDigits > totalDigits) totalDigits = integerDigits;
+
+            for (i=0; i<totalDigits; ++i)
+            {
+                if (i == integerDigits)
+                {
+                    // Record field information for caller.
+                    //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+                    //FP:fieldPosition.setEndIndex(result.length());
+
+                    result.append(decimal);
+
+                    // Record field information for caller.
+                    //FP:if (fieldPosition.getField() == NumberFormat.FRACTION_FIELD)
+                    //FP:fieldPosition.setBeginIndex(result.length());
+                }
+                result.append((i < digitList.count) ?
+                          (char)(digitList.digits[i] + zeroDelta) :
+                          zero);
+            }
+
+            // Record field information
+            if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            {
+                //FP:if (fieldPosition.getEndIndex() < 0)
+                //FP:fieldPosition.setEndIndex(result.length());
+            }
+            else if (fieldPosition.getField() == NumberFormat.FRACTION_FIELD)
+            {
+                //FP:if (fieldPosition.getBeginIndex() < 0)
+                //FP:fieldPosition.setBeginIndex(result.length());
+                //FP:fieldPosition.setEndIndex(result.length());
+            }
+
+            // The exponent is output using the pattern-specified minimum
+            // exponent digits.  There is no maximum limit to the exponent
+            // digits, since truncating the exponent would result in an
+            // unacceptable inaccuracy.
+            result.append(symbols.getExponentSeparator());
+
+            // For zero values, we force the exponent to zero.  We
+            // must do this here, and not earlier, because the value
+            // is used to determine integer digit count above.
+            if (digitList.isZero()) exponent = 0;
+
+            boolean negativeExponent = exponent < 0;
+            if (negativeExponent) {
+                exponent = -exponent;
+                result.append(symbols.getMinusSign());
+            } else if (exponentSignAlwaysShown) {
+                result.append(symbols.getPlusSign());
+            }
+            digitList.set(exponent);
+            for (i=digitList.decimalAt; i<minExponentDigits; ++i) result.append(zero);
+            for (i=0; i<digitList.decimalAt; ++i)
+            {
+                result.append((i < digitList.count) ?
+                          (char)(digitList.digits[i] + zeroDelta) : zero);
+            }
+        }
+        else
+        {
+            // Record field information for caller.
+            //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            //FP:fieldPosition.setBeginIndex(result.length());
+
+            // Output the integer portion.  Here 'count' is the total
+            // number of integer digits we will display, including both
+            // leading zeros required to satisfy getMinimumIntegerDigits,
+            // and actual digits present in the number.
+            int count = minIntDig;
+            int digitIndex = 0; // Index into digitList.fDigits[]
+            if (digitList.decimalAt > 0 && count < digitList.decimalAt)
+                count = digitList.decimalAt;
+
+            // Handle the case where getMaximumIntegerDigits() is smaller
+            // than the real number of integer digits.  If this is so, we
+            // output the least significant max integer digits.  For example,
+            // the value 1997 printed with 2 max integer digits is just "97".
+
+            if (count > maxIntDig)
+            {
+                count = maxIntDig;
+                digitIndex = digitList.decimalAt - count;
+            }
+
+            int sizeBeforeIntegerPart = result.length();
+            for (i=count-1; i>=0; --i)
+            {
+                if (i < digitList.decimalAt && digitIndex < digitList.count)
+                {
+                    // Output a real digit
+                    result.append((char)(digitList.digits[digitIndex++] + zeroDelta));
+                }
+                else
+                {
+                    // Output a leading zero
+                    result.append(zero);
+                }
+
+                // Output grouping separator if necessary.
+                if (isGroupingPosition(i)) {
+                    result.append(grouping);
+                }
+            }
+
+            // Record field information for caller.
+            //FP:if (fieldPosition.getField() == NumberFormat.INTEGER_FIELD)
+            //FP:fieldPosition.setEndIndex(result.length());
+
+            // Determine whether or not there are any printable fractional
+            // digits.  If we've used up the digits we know there aren't.
+            boolean fractionPresent = (getMinimumFractionDigits() > 0) ||
+            (!isInteger && digitIndex < digitList.count);
+
+            // If there is no fraction present, and we haven't printed any
+            // integer digits, then print a zero.  Otherwise we won't print
+            // _any_ digits, and we won't be able to parse this string.
+            if (!fractionPresent && result.length() == sizeBeforeIntegerPart)
+                result.append(zero);
+
+            // Output the decimal separator if we always do so.
+            if (decimalSeparatorAlwaysShown || fractionPresent)
+                result.append(decimal);
+
+            // Record field information for caller.
+            //FP:if (fieldPosition.getField() == NumberFormat.FRACTION_FIELD)
+            //FP:fieldPosition.setBeginIndex(result.length());
+
+            for (i=0; i < getMaximumFractionDigits(); ++i)
+            {
+                // Here is where we escape from the loop.  We escape if we've output
+                // the maximum fraction digits (specified in the for expression above).
+                // We also stop when we've output the minimum digits and either:
+                // we have an integer, so there is no fractional stuff to display,
+                // or we're out of significant digits.
+                if (i >= getMinimumFractionDigits() &&
+                    (isInteger || digitIndex >= digitList.count))
+                    break;
+
+                // Output leading fractional zeros.  These are zeros that come after
+                // the decimal but before any significant digits.  These are only
+                // output if abs(number being formatted) < 1.0.
+                if (-1-i > (digitList.decimalAt-1))
+                {
+                    result.append(zero);
+                    continue;
+                }
+
+                // Output a digit, if we have any precision left, or a
+                // zero if we don't.  We don't want to output noise digits.
+                if (!isInteger && digitIndex < digitList.count)
+                {
+                    result.append((char)(digitList.digits[digitIndex++] + zeroDelta));
+                }
+                else
+                {
+                    result.append(zero);
+                }
+            }
+
+            // Record field information for caller.
+            //FP:if (fieldPosition.getField() == NumberFormat.FRACTION_FIELD)
+            //FP:fieldPosition.setEndIndex(result.length());
+        }
+
+        result.append(isNegative ? negativeSuffix : positiveSuffix);
+
+        // [NEW]
+        addPadding(result, true, isNegative);
+        return result;
+    }
+
+    // [NEW]
+    private final void addPadding(StringBuffer result, boolean hasAffixes,
+                                  boolean isNegative) {
+        if (formatWidth > 0) {
+            int len = formatWidth - result.length();
+            if (len > 0) {
+                char[] padding = new char[len];
+                for (int i=0; i<len; ++i) {
+                    padding[i] = pad;
+                }
+                switch (padPosition) {
+                case PAD_AFTER_PREFIX:
+                    if (hasAffixes) {
+                        result.insert(isNegative ? negativePrefix.length()
+                                      : positivePrefix.length(),
+                                      padding);
+                        break;
+                    } // else fall through to next case
+                case PAD_BEFORE_PREFIX:
+                    result.insert(0, padding);
+                    break;
+                case PAD_BEFORE_SUFFIX:
+                    if (hasAffixes) {
+                        result.insert(result.length() -
+                                      (isNegative ? negativeSuffix.length()
+                                       : positiveSuffix.length()),
+                                      padding);
+                        break;
+                    } // else fall through to next case
+                case PAD_AFTER_SUFFIX:
+                    result.append(padding);
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>CHANGED</font></strong>
+     * Parse the given string, returning a <code>Number</code> object to
+     * represent the parsed value.  <code>Double</code> objects are returned to
+     * represent non-integral values which cannot be stored in a
+     * <code>BigDecimal</code>.  These are <code>NaN</code>, infinity,
+     * -infinity, and -0.0.  All other values are returned as <code>Long</code>,
+     * <code>BigInteger</code>, or <code>BigDecimal</code> values, in that order
+     * of preference.  If the parse fails, null is returned.
+     * @param text the string to be parsed
+     * @param parsePosition defines the position where parsing is to begin,
+     * and upon return, the position where parsing left off.  If the position
+     * has not changed upon return, then parsing failed.
+     * @return a <code>Number</code> object with the parsed value or
+     * <code>null</code> if the parse failed
+     */
+    public Number parse(String text, ParsePosition parsePosition)
+    {
+        // Skip padding characters, if any
+        int backup;
+        int i = backup = parsePosition.getIndex();
+        if (formatWidth > 0) {
+            while (i < text.length() && text.charAt(i) == pad) {
+                ++i;
+            }
+            parsePosition.setIndex(i);
+        }
+
+        // Handle NaN as a special case
+        if (text.regionMatches(parsePosition.getIndex(), symbols.getNaN(),
+                               0, symbols.getNaN().length())) {
+            parsePosition.setIndex(parsePosition.getIndex()
+                                   + symbols.getNaN().length());
+            return new Double(Double.NaN);
+        }
+
+        boolean[] status = new boolean[STATUS_LENGTH];
+        if (!subparse(text, parsePosition, digitList, false, status)) {
+            parsePosition.setIndex(backup);
+            return null;
+        } else if (formatWidth < 0) {
+            i = parsePosition.getIndex();
+            while (i < text.length() && text.charAt(i) == pad) {
+                ++i;
+            }
+            parsePosition.setIndex(i);
+        }
+
+        // Handle infinity
+        if (status[STATUS_INFINITE]) {
+            return new Double(status[STATUS_POSITIVE]
+                              ? Double.POSITIVE_INFINITY
+                              : Double.NEGATIVE_INFINITY);
+        }
+
+        // Handle -0.0
+        if (!status[STATUS_POSITIVE] && digitList.isZero()) {
+            return new Double(-0.0);
+        }
+
+        // Do as much of the multiplier conversion as possible without
+        // losing accuracy.
+        int mult = multiplier; // Don't modify this.multiplier
+        while (mult % 10 == 0) {
+            --digitList.decimalAt;
+            mult /= 10;
+        }
+
+        // Handle integral values
+        if (mult == 1 && digitList.isIntegral()) {
+            BigInteger n = digitList.getBigInteger(status[STATUS_POSITIVE]);
+            return (n.bitLength() < 64)
+                ? (Number) new Long(n.longValue()) 
+                : (Number) n;
+        }
+
+        // Handle non-integral values
+        java.math.BigDecimal n = digitList.getBigDecimal(status[STATUS_POSITIVE]);
+        if (mult != 1) {
+            n = n.divide(java.math.BigDecimal.valueOf(mult),
+                         java.math.BigDecimal.ROUND_HALF_EVEN);
+        }
+        return n;
+    }
+
+    private static final int STATUS_INFINITE = 0;
+    private static final int STATUS_POSITIVE = 1;
+    private static final int STATUS_LENGTH   = 2;
+
+    /**
+     * <strong><font face=helvetica color=red>CHANGED</font></strong>
+     * Parse the given text into a number.  The text is parsed beginning at
+     * parsePosition, until an unparseable character is seen.
+     * @param text The string to parse.
+     * @param parsePosition The position at which to being parsing.  Upon
+     * return, the first unparseable character.
+     * @param digits The DigitList to set to the parsed value.
+     * @param isExponent If true, parse an exponent.  This means no
+     * infinite values and integer only.
+     * @param status Upon return contains boolean status flags indicating
+     * whether the value was infinite and whether it was positive.
+     */
+    private final boolean subparse(String text, ParsePosition parsePosition,
+                   DigitList digits, boolean isExponent,
+                   boolean status[])
+    {
+        int position = parsePosition.getIndex();
+        int oldStart = parsePosition.getIndex();
+        int backup;
+
+        // check for positivePrefix; take longest
+        boolean gotPositive = text.regionMatches(position,positivePrefix,0,
+                                                 positivePrefix.length());
+        boolean gotNegative = text.regionMatches(position,negativePrefix,0,
+                                                 negativePrefix.length());
+        if (gotPositive && gotNegative) {
+            if (positivePrefix.length() > negativePrefix.length())
+                gotNegative = false;
+            else if (positivePrefix.length() < negativePrefix.length())
+                gotPositive = false;
+        }
+        if (gotPositive) {
+            position += positivePrefix.length();
+        } else if (gotNegative) {
+            position += negativePrefix.length();
+        } else {
+            //PP:parsePosition.errorIndex = position;
+            return false;
+        }
+        // process digits or Inf, find decimal position
+        status[STATUS_INFINITE] = false;
+        if (!isExponent && text.regionMatches(position,symbols.getInfinity(),0,
+                          symbols.getInfinity().length()))
+        {
+            position += symbols.getInfinity().length();
+            status[STATUS_INFINITE] = true;
+        } else {
+            // We now have a string of digits, possibly with grouping symbols,
+            // and decimal points.  We want to process these into a DigitList.
+            // We don't want to put a bunch of leading zeros into the DigitList
+            // though, so we keep track of the location of the decimal point,
+            // put only significant digits into the DigitList, and adjust the
+            // exponent as needed.
+
+            digits.decimalAt = digits.count = 0;
+            char zero = symbols.getZeroDigit();
+            char decimal = isCurrencyFormat ?
+            symbols.getMonetaryDecimalSeparator() : symbols.getDecimalSeparator();
+            char grouping = symbols.getGroupingSeparator();
+            String exponentSep = symbols.getExponentSeparator();
+            boolean sawDecimal = false;
+            boolean sawExponent = false;
+            boolean sawDigit = false;
+            int exponent = 0; // Set to the exponent value, if any
+            int digit = 0;
+
+            // We have to track digitCount ourselves, because digits.count will
+            // pin when the maximum allowable digits is reached.
+            int digitCount = 0;
+
+            backup = -1;
+            for (; position < text.length(); ++position)
+            {
+                char ch = text.charAt(position);
+
+                /* We recognize all digit ranges, not only the Latin digit range
+                 * '0'..'9'.  We do so by using the Character.digit() method,
+                 * which converts a valid Unicode digit to the range 0..9.
+                 *
+                 * The character 'ch' may be a digit.  If so, place its value
+                 * from 0 to 9 in 'digit'.  First try using the locale digit,
+                 * which may or MAY NOT be a standard Unicode digit range.  If
+                 * this fails, try using the standard Unicode digit ranges by
+                 * calling Character.digit().  If this also fails, digit will
+                 * have a value outside the range 0..9.
+                 */
+                digit = ch - zero;
+                if (digit < 0 || digit > 9) digit = Character.digit(ch, 10);
+
+                if (digit == 0)
+                {
+                    // Cancel out backup setting (see grouping handler below)
+                    backup = -1; // Do this BEFORE continue statement below!!!
+                    sawDigit = true;
+
+                    // Handle leading zeros
+                    if (digits.count == 0)
+                    {
+                        // Ignore leading zeros in integer part of number.
+                        if (!sawDecimal) continue;
+
+                        // If we have seen the decimal, but no significant digits yet,
+                        // then we account for leading zeros by decrementing the
+                        // digits.decimalAt into negative values.
+                        --digits.decimalAt;
+                    }
+                    else
+                    {
+                        ++digitCount;
+                        digits.append((char)(digit + '0'));
+                    }
+                }
+                else if (digit > 0 && digit <= 9) // [sic] digit==0 handled above
+                {
+                    sawDigit = true;
+                    ++digitCount;
+                    digits.append((char)(digit + '0'));
+
+                    // Cancel out backup setting (see grouping handler below)
+                    backup = -1;
+                }
+                else if (!isExponent && ch == decimal)
+                {
+                    // If we're only parsing integers, or if we ALREADY saw the
+                    // decimal, then don't parse this one.
+                    if (isParseIntegerOnly() || sawDecimal) break;
+                    digits.decimalAt = digitCount; // Not digits.count!
+                    sawDecimal = true;
+                }
+                else if (!isExponent && ch == grouping && isGroupingUsed())
+                {
+                    if (sawDecimal) {
+                        break;
+                    }
+                    // Ignore grouping characters, if we are using them, but require
+                    // that they be followed by a digit.  Otherwise we backup and
+                    // reprocess them.
+                    backup = position;
+                }
+                else if (!isExponent && !sawExponent &&
+                         text.regionMatches(position, exponentSep,
+                                            0, exponentSep.length()))
+                {
+                    // Parse sign, if present
+                    boolean negExp = false;
+                    int pos = position + exponentSep.length();
+                    if (pos < text.length()) {
+                        ch = text.charAt(pos);
+                        if (ch == symbols.getPlusSign()) {
+                            ++pos;
+                        } else if (ch == symbols.getMinusSign()) {
+                            ++pos;
+                            negExp = true;
+                        }
+                    }
+
+                    DigitList exponentDigits = new DigitList();
+                    exponentDigits.count = 0;
+                    while (pos < text.length()) {
+                        digit = text.charAt(pos) - zero;
+                        if (digit < 0 || digit > 9) {
+                            digit = Character.digit(ch, 10);
+                        }
+                        if (digit >= 0 && digit <= 9) {
+                            exponentDigits.append((char)(digit + '0'));
+                            ++pos;
+                        } else {
+                            break;
+                        }
+                    }
+                    
+                    if (exponentDigits.count > 0) {
+                        exponentDigits.decimalAt = exponentDigits.count;
+                        exponent = (int) exponentDigits.getLong();
+                        if (negExp) {
+                            exponent = -exponent;
+                        }
+                        position = pos; // Advance past the exponent
+                        sawExponent = true;
+                    }
+
+                    break; // Whether we fail or succeed, we exit this loop
+                }
+                else break;
+            }
+
+            if (backup != -1) position = backup;
+
+            // If there was no decimal point we have an integer
+            if (!sawDecimal) digits.decimalAt = digitCount; // Not digits.count!
+
+            // Adjust for exponent, if any
+            digits.decimalAt += exponent;
+
+            // If none of the text string was recognized.  For example, parse
+            // "x" with pattern "#0.00" (return index and error index both 0)
+            // parse "$" with pattern "$#0.00". (return index 0 and error index
+            // 1).
+            if (!sawDigit && digitCount == 0) {
+                parsePosition.setIndex(oldStart);
+                //PP:parsePosition.errorIndex = oldStart;
+                return false;
+            }
+        }
+
+        // check for positiveSuffix
+        if (gotPositive)
+            gotPositive = text.regionMatches(position,positiveSuffix,0,
+                                             positiveSuffix.length());
+        if (gotNegative)
+            gotNegative = text.regionMatches(position,negativeSuffix,0,
+                                             negativeSuffix.length());
+
+        // if both match, take longest
+        if (gotPositive && gotNegative) {
+            if (positiveSuffix.length() > negativeSuffix.length())
+                gotNegative = false;
+            else if (positiveSuffix.length() < negativeSuffix.length())
+                gotPositive = false;
+        }
+
+        // fail if neither or both
+        if (gotPositive == gotNegative) {
+            //PP:parsePosition.errorIndex = position;
+            return false;
+        }
+
+        parsePosition.setIndex(position +
+            (gotPositive ? positiveSuffix.length() : negativeSuffix.length())); // mark success!
+
+        status[STATUS_POSITIVE] = gotPositive;
+        if (parsePosition.getIndex() == oldStart) {
+            //PP:parsePosition.errorIndex = position;
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Returns the decimal format symbols, which is generally not changed
+     * by the programmer or user.
+     * @return desired DecimalFormatSymbols
+     * @see DecimalFormatSymbols
+     */
+    public DecimalFormatSymbols getDecimalFormatSymbols() {
+        try {
+            // don't allow multiple references
+            return (DecimalFormatSymbols) symbols.clone();
+        } catch (Exception foo) {
+            return null; // should never happen
+        }
+    }
+
+
+    /**
+     * Sets the decimal format symbols, which is generally not changed
+     * by the programmer or user.
+     * @param newSymbols desired DecimalFormatSymbols
+     * @see DecimalFormatSymbols
+     */
+    public void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols) {
+        try {
+            // don't allow multiple references
+            symbols = (DecimalFormatSymbols) newSymbols.clone();
+        } catch (Exception foo) {
+            // should never happen
+        }
+    }
+
+    /**
+     * Get the positive prefix.
+     * <P>Examples: +123, $123, sFr123
+     */
+    public String getPositivePrefix () {
+        return positivePrefix;
+    }
+
+    /**
+     * Set the positive prefix.
+     * <P>Examples: +123, $123, sFr123
+     */
+    public void setPositivePrefix (String newValue) {
+        positivePrefix = newValue;
+    }
+
+    /**
+     * Get the negative prefix.
+     * <P>Examples: -123, ($123) (with negative suffix), sFr-123
+     */
+    public String getNegativePrefix () {
+        return negativePrefix;
+    }
+
+    /**
+     * Set the negative prefix.
+     * <P>Examples: -123, ($123) (with negative suffix), sFr-123
+     */
+    public void setNegativePrefix (String newValue) {
+        negativePrefix = newValue;
+    }
+
+    /**
+     * Get the positive suffix.
+     * <P>Example: 123%
+     */
+    public String getPositiveSuffix () {
+        return positiveSuffix;
+    }
+
+    /**
+     * Set the positive suffix.
+     * <P>Example: 123%
+     */
+    public void setPositiveSuffix (String newValue) {
+        positiveSuffix = newValue;
+    }
+
+    /**
+     * Get the negative suffix.
+     * <P>Examples: -123%, ($123) (with positive suffixes)
+     */
+    public String getNegativeSuffix () {
+        return negativeSuffix;
+    }
+
+    /**
+     * Set the positive suffix.
+     * <P>Examples: 123%
+     */
+    public void setNegativeSuffix (String newValue) {
+        negativeSuffix = newValue;
+    }
+
+    /**
+     * Get the multiplier for use in percent, permill, etc.
+     * For a percentage, set the suffixes to have "%" and the multiplier to be 100.
+     * (For Arabic, use arabic percent symbol).
+     * For a permill, set the suffixes to have "\u2031" and the multiplier to be 1000.
+     * <P>Examples: with 100, 1.23 -> "123", and "123" -> 1.23
+     */
+    public int getMultiplier () {
+        return multiplier;
+    }
+
+    /**
+     * Set the multiplier for use in percent, permill, etc.
+     * For a percentage, set the suffixes to have "%" and the multiplier to be 100.
+     * (For Arabic, use arabic percent symbol).
+     * For a permill, set the suffixes to have "\u2031" and the multiplier to be 1000.
+     * <P>Examples: with 100, 1.23 -> "123", and "123" -> 1.23
+     */
+    public void setMultiplier (int newValue) {
+        if (newValue <= 0) {
+            throw new IllegalArgumentException("Bad multiplier: " + newValue);
+        }
+        multiplier = newValue;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Get the rounding increment.
+     * @return A positive rounding increment, or <code>null</code> if rounding
+     * is not in effect.
+     * @see #setRoundingIncrement
+     * @see #getRoundingMode
+     * @see #setRoundingMode
+     */
+    public java.math.BigDecimal getRoundingIncrement() {
+        return roundingIncrement;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the rounding increment.  This method also controls whether
+     * rounding is enabled.
+     * @param newValue A positive rounding increment, or <code>null</code> or
+     * <code>BigDecimal(0.0)</code> to disable rounding.
+     * @exception IllegalArgumentException if <code>newValue</code> is < 0.0
+     * @see #getRoundingIncrement
+     * @see #getRoundingMode
+     * @see #setRoundingMode
+     */
+    public void setRoundingIncrement(java.math.BigDecimal newValue) {
+        int i = newValue == null
+                ? 0 : newValue.compareTo(java.math.BigDecimal.valueOf(0));
+        if (i < 0) {
+            throw new IllegalArgumentException("Illegal rounding increment");
+        }
+        if (i == 0) {
+            roundingIncrement = null;
+            roundingDouble = 0.0;
+        } else {
+            roundingIncrement = newValue;
+            roundingDouble = newValue.doubleValue();
+        }
+    }
+    
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the rounding increment.  This method also controls whether
+     * rounding is enabled.
+     * @param newValue A positive rounding increment, or 0.0 to disable
+     * rounding.
+     * @exception IllegalArgumentException if <code>newValue</code> is < 0.0
+     * @see #getRoundingIncrement
+     * @see #getRoundingMode
+     * @see #setRoundingMode
+     */
+    public void setRoundingIncrement(double newValue) {
+        if (newValue < 0.0) {
+            throw new IllegalArgumentException("Illegal rounding increment");
+        }
+        roundingDouble = newValue;
+        roundingIncrement = (newValue > 0.0)
+            ? new java.math.BigDecimal(String.valueOf(newValue)) : null;
+    }
+    
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Get the rounding mode.
+     * @return A rounding mode, between <code>BigDecimal.ROUND_UP</code>
+     * and <code>BigDecimal.ROUND_UNNECESSARY</code>.
+     * @see #setRoundingIncrement
+     * @see #getRoundingIncrement
+     * @see #setRoundingMode
+     * @see java.math.BigDecimal
+     */
+    public int getRoundingMode() {
+        return roundingMode;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the rounding mode.  This has no effect unless the rounding
+     * increment is greater than zero.
+     * @param roundingMode A rounding mode, between
+     * <code>BigDecimal.ROUND_UP</code> and
+     * <code>BigDecimal.ROUND_UNNECESSARY</code>.
+     * @exception IllegalArgumentException if <code>roundingMode</code>
+     * is unrecognized.
+     * @see #setRoundingIncrement
+     * @see #getRoundingIncrement
+     * @see #getRoundingMode
+     * @see java.math.BigDecimal
+     */
+    public void setRoundingMode(int roundingMode) {
+        if (roundingMode < java.math.BigDecimal.ROUND_UP
+            || roundingMode > java.math.BigDecimal.ROUND_UNNECESSARY) {
+            throw new IllegalArgumentException("Invalid rounding mode: "
+                                               + roundingMode);
+        }
+        this.roundingMode = roundingMode;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Get the width to which the output of <code>format()</code> is padded.
+     * @return the format width, or zero if no padding is in effect
+     * @see #setFormatWidth
+     * @see #getPadCharacter
+     * @see #setPadCharacter
+     * @see #getPadPosition
+     * @see #setPadPosition
+     */
+    public int getFormatWidth() {
+        return formatWidth;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the width to which the output of <code>format()</code> is padded.
+     * This method also controls whether padding is enabled.
+     * @param width the width to which to pad the result of
+     * <code>format()</code>, or zero to disable padding
+     * @exception IllegalArgumentException if <code>width</code> is < 0
+     * @see #getFormatWidth
+     * @see #getPadCharacter
+     * @see #setPadCharacter
+     * @see #getPadPosition
+     * @see #setPadPosition
+     */
+    public void setFormatWidth(int width) {
+        if (width < 0) {
+            throw new IllegalArgumentException("Illegal format width");
+        }
+        formatWidth = width;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Get the character used to pad to the format width.  The default is ' '.
+     * @return the pad character
+     * @see #setFormatWidth
+     * @see #getFormatWidth
+     * @see #setPadCharacter
+     * @see #getPadPosition
+     * @see #setPadPosition
+     */
+    public char getPadCharacter() {
+        return pad;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the character used to pad to the format width.  This has no effect
+     * unless padding is enabled.
+     * @param padChar the pad character
+     * @see #setFormatWidth
+     * @see #getFormatWidth
+     * @see #getPadCharacter
+     * @see #getPadPosition
+     * @see #setPadPosition
+     */
+    public void setPadCharacter(char padChar) {
+        pad = padChar;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Get the position at which padding will take place.  This is the location
+     * at which padding will be inserted if the result of <code>format()</code>
+     * is shorter than the format width.
+     * @return the pad position, one of <code>PAD_BEFORE_PREFIX</code>,
+     * <code>PAD_AFTER_PREFIX</code>, <code>PAD_BEFORE_SUFFIX</code>, or
+     * <code>PAD_AFTER_SUFFIX</code>.
+     * @see #setFormatWidth
+     * @see #getFormatWidth
+     * @see #setPadCharacter
+     * @see #getPadCharacter
+     * @see #setPadPosition
+     * @see #PAD_BEFORE_PREFIX
+     * @see #PAD_AFTER_PREFIX
+     * @see #PAD_BEFORE_SUFFIX
+     * @see #PAD_AFTER_SUFFIX
+     */
+    public int getPadPosition() {
+        return padPosition;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the position at which padding will take place.  This is the location
+     * at which padding will be inserted if the result of <code>format()</code>
+     * is shorter than the format width.  This has no effect unless padding is
+     * enabled.
+     * @param padPos the pad position, one of <code>PAD_BEFORE_PREFIX</code>,
+     * <code>PAD_AFTER_PREFIX</code>, <code>PAD_BEFORE_SUFFIX</code>, or
+     * <code>PAD_AFTER_SUFFIX</code>.
+     * @exception IllegalArgumentException if the pad position in
+     * unrecognized
+     * @see #setFormatWidth
+     * @see #getFormatWidth
+     * @see #setPadCharacter
+     * @see #getPadCharacter
+     * @see #getPadPosition
+     * @see #PAD_BEFORE_PREFIX
+     * @see #PAD_AFTER_PREFIX
+     * @see #PAD_BEFORE_SUFFIX
+     * @see #PAD_AFTER_SUFFIX
+     */
+    public void setPadPosition(int padPos) {
+        if (padPos < PAD_BEFORE_PREFIX || padPos > PAD_AFTER_SUFFIX) {
+            throw new IllegalArgumentException("Illegal pad position");
+        }
+        padPosition = padPos;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Return whether or not scientific notation is used.
+     * @return true if this object formats and parses scientific notation
+     * @see #setScientificNotation
+     * @see #getMinimumExponentDigits
+     * @see #setMinimumExponentDigits
+     * @see #isExponentSignAlwaysShown
+     * @see #setExponentSignAlwaysShown
+     */
+    public boolean isScientificNotation() {
+        return useExponentialNotation;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set whether or not scientific notation is used.
+     * @param useScientific true if this object formats and parses scientific
+     * notation
+     * @see #isScientificNotation
+     * @see #getMinimumExponentDigits
+     * @see #setMinimumExponentDigits
+     * @see #isExponentSignAlwaysShown
+     * @see #setExponentSignAlwaysShown
+     */
+    public void setScientificNotation(boolean useScientific) {
+        useExponentialNotation = useScientific;
+        if (useExponentialNotation && minExponentDigits < 1) {
+            minExponentDigits = 1;
+        }
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Return the minimum exponent digits that will be shown.
+     * @return the minimum exponent digits that will be shown
+     * @see #setScientificNotation
+     * @see #isScientificNotation
+     * @see #setMinimumExponentDigits
+     * @see #isExponentSignAlwaysShown
+     * @see #setExponentSignAlwaysShown
+     */
+    public byte getMinimumExponentDigits() {
+        return minExponentDigits;
+    }
+    
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the minimum exponent digits that will be shown.  This has no
+     * effect unless scientific notation is in use.
+     * @param minExpDig a value >= 1 indicating the fewest exponent digits
+     * that will be shown
+     * @exception IllegalArgumentException if <code>minExpDig</code> < 1
+     * @see #setScientificNotation
+     * @see #isScientificNotation
+     * @see #getMinimumExponentDigits
+     * @see #isExponentSignAlwaysShown
+     * @see #setExponentSignAlwaysShown
+     */
+    public void setMinimumExponentDigits(byte minExpDig) {
+        if (minExpDig < 1) {
+            throw new IllegalArgumentException("Exponent digits must be >= 1");
+        }
+        minExponentDigits = minExpDig;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Return whether the exponent sign is always shown.
+     * @return true if the exponent is always prefixed with either the
+     * localized minus sign or the localized plus sign, false if only negative
+     * exponents are prefixed with the localized minus sign.
+     * @see #setScientificNotation
+     * @see #isScientificNotation
+     * @see #setMinimumExponentDigits
+     * @see #getMinimumExponentDigits
+     * @see #setExponentSignAlwaysShown
+     */
+    public boolean isExponentSignAlwaysShown() {
+        return exponentSignAlwaysShown;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set whether the exponent sign is always shown.  This has no effect
+     * unless scientific notation is in use.
+     * @param expSignAlways true if the exponent is always prefixed with either
+     * the localized minus sign or the localized plus sign, false if only
+     * negative exponents are prefixed with the localized minus sign.
+     * @see #setScientificNotation
+     * @see #isScientificNotation
+     * @see #setMinimumExponentDigits
+     * @see #getMinimumExponentDigits
+     * @see #isExponentSignAlwaysShown
+     */
+    public void setExponentSignAlwaysShown(boolean expSignAlways) {
+        exponentSignAlwaysShown = expSignAlways;
+    }
+
+    /**
+     * Return the grouping size. Grouping size is the number of digits between
+     * grouping separators in the integer portion of a number.  For example,
+     * in the number "123,456.78", the grouping size is 3.
+     * @see #setGroupingSize
+     * @see NumberFormat#isGroupingUsed
+     * @see DecimalFormatSymbols#getGroupingSeparator
+     */
+    public int getGroupingSize () {
+        return groupingSize;
+    }
+
+    /**
+     * Set the grouping size. Grouping size is the number of digits between
+     * grouping separators in the integer portion of a number.  For example,
+     * in the number "123,456.78", the grouping size is 3.
+     * @see #getGroupingSize
+     * @see NumberFormat#setGroupingUsed
+     * @see DecimalFormatSymbols#setGroupingSeparator
+     */
+    public void setGroupingSize (int newValue) {
+        groupingSize = (byte)newValue;
+    }
+
+    /**
+     * Return the secondary grouping size. In some locales one
+     * grouping interval is used for the least significant integer
+     * digits (the primary grouping size), and another is used for all
+     * others (the secondary grouping size).  A formatter supporting a
+     * secondary grouping size will return a positive integer unequal
+     * to the primary grouping size returned by
+     * <code>getGroupingSize()</code>.  For example, if the primary
+     * grouping size is 4, and the secondary grouping size is 2, then
+     * the number 123456789 formats as "1,23,45,6789", and the pattern
+     * appears as "#,##,###0".
+     * [NEW]
+     * @return the secondary grouping size, or a value less than
+     * one if there is none
+     * @see #setSecondaryGroupingSize
+     * @see NumberFormat#isGroupingUsed
+     * @see DecimalFormatSymbols#getGroupingSeparator
+     */
+    public int getSecondaryGroupingSize () {
+        return groupingSize2;
+    }
+
+    /**
+     * Set the secondary grouping size. If set to a value less than 1,
+     * then secondary grouping is turned off, and the primary grouping
+     * size is used for all intervals, not just the least significant.
+     * [NEW]
+     * @see #getSecondaryGroupingSize
+     * @see NumberFormat#setGroupingUsed
+     * @see DecimalFormatSymbols#setGroupingSeparator
+     */
+    public void setSecondaryGroupingSize (int newValue) {
+        groupingSize2 = (byte)newValue;
+    }
+
+    /**
+     * Allows you to get the behavior of the decimal separator with integers.
+     * (The decimal separator will always appear with decimals.)
+     * <P>Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345
+     */
+    public boolean isDecimalSeparatorAlwaysShown() {
+        return decimalSeparatorAlwaysShown;
+    }
+
+    /**
+     * Allows you to set the behavior of the decimal separator with integers.
+     * (The decimal separator will always appear with decimals.)
+     * <P>Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345
+     */
+    public void setDecimalSeparatorAlwaysShown(boolean newValue) {
+        decimalSeparatorAlwaysShown = newValue;
+    }
+
+    /**
+     * Standard override; no change in semantics.
+     */
+    public Object clone() {
+        try {
+            DecimalFormat other = (DecimalFormat) super.clone();
+            other.symbols = (DecimalFormatSymbols) symbols.clone();
+            return other;
+        } catch (Exception e) {
+            throw new InternalError();
+        }
+    }
+
+    /**
+     * Overrides equals
+     */
+    public boolean equals(Object obj)
+    {
+        if (obj == null) return false;
+        if (!super.equals(obj)) return false; // super does class check
+        DecimalFormat other = (DecimalFormat) obj;
+        return (positivePrefix.equals(other.positivePrefix)
+            && positiveSuffix.equals(other.positiveSuffix)
+            && negativePrefix.equals(other.negativePrefix)
+            && negativeSuffix.equals(other.negativeSuffix)
+            && multiplier == other.multiplier
+            && groupingSize == other.groupingSize
+            && groupingSize2 == other.groupingSize2
+            && decimalSeparatorAlwaysShown == other.decimalSeparatorAlwaysShown
+            && useExponentialNotation == other.useExponentialNotation
+            && (!useExponentialNotation ||
+                minExponentDigits == other.minExponentDigits)
+            && symbols.equals(other.symbols));
+    }
+
+    /**
+     * Overrides hashCode
+     */
+    public int hashCode() {
+        return super.hashCode() * 37 + positivePrefix.hashCode();
+        // just enough fields for a reasonable distribution
+    }
+
+    /**
+     * Synthesizes a pattern string that represents the current state
+     * of this Format object.
+     * @see #applyPattern
+     */
+    public String toPattern() {
+        return toPattern( false );
+    }
+
+    /**
+     * Synthesizes a localized pattern string that represents the current
+     * state of this Format object.
+     * @see #applyPattern
+     */
+    public String toLocalizedPattern() {
+        return toPattern( true );
+    }
+
+    /**
+     * Append an affix to the given StringBuffer, using quotes if
+     * there are special characters.  Single quotes themselves must be
+     * escaped in either case.
+     */
+    private void appendAffix(StringBuffer buffer, String affix, boolean localized) {
+        boolean needQuote;
+        if (localized) {
+            needQuote = affix.indexOf(symbols.getZeroDigit()) >= 0
+                || affix.indexOf(symbols.getGroupingSeparator()) >= 0
+                || affix.indexOf(symbols.getDecimalSeparator()) >= 0
+                || affix.indexOf(symbols.getPercent()) >= 0
+                || affix.indexOf(symbols.getPerMill()) >= 0
+                || affix.indexOf(symbols.getDigit()) >= 0
+                || affix.indexOf(symbols.getPatternSeparator()) >= 0
+                || affix.indexOf(symbols.getExponentSeparator()) >= 0;
+        }
+        else {
+            needQuote = affix.indexOf(PATTERN_ZERO_DIGIT) >= 0
+                || affix.indexOf(PATTERN_GROUPING_SEPARATOR) >= 0
+                || affix.indexOf(PATTERN_DECIMAL_SEPARATOR) >= 0
+                || affix.indexOf(PATTERN_PERCENT) >= 0
+                || affix.indexOf(PATTERN_PER_MILLE) >= 0
+                || affix.indexOf(PATTERN_DIGIT) >= 0
+                || affix.indexOf(PATTERN_SEPARATOR) >= 0
+                || affix.indexOf(PATTERN_EXPONENT) >= 0;
+        }
+        if (needQuote) buffer.append('\'');
+        if (affix.indexOf('\'') < 0) buffer.append(affix);
+        else {
+            for (int j=0; j<affix.length(); ++j) {
+                char c = affix.charAt(j);
+                buffer.append(c);
+                if (c == '\'') buffer.append(c);
+            }
+        }
+        if (needQuote) buffer.append('\'');
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>CHANGED</font></strong>
+     * Does the real work of generating a pattern.
+     */
+    private String toPattern(boolean localized) {
+        StringBuffer result = new StringBuffer();
+        char zero = localized ? symbols.getZeroDigit() : PATTERN_ZERO_DIGIT;
+        char digit = localized ? symbols.getDigit() : PATTERN_DIGIT;
+        char group = localized ? symbols.getGroupingSeparator()
+                               : PATTERN_GROUPING_SEPARATOR;
+        int i;
+        int roundingDecimalPos = 0; // Pos of decimal in roundingDigits
+        String roundingDigits = null;
+        int padPos = (formatWidth > 0) ? padPosition : -1;
+        String padSpec = (formatWidth > 0)
+            ? new StringBuffer(2).
+                append(localized ? symbols.getPadEscape() : PATTERN_PAD_ESCAPE).
+                append(pad).toString()
+            : null;
+        if (roundingIncrement != null) {
+            i = roundingIncrement.scale();
+            roundingDigits = roundingIncrement.movePointRight(i).toString();
+            roundingDecimalPos = roundingDigits.length() - i;
+        }
+        for (int part=0; part<2; ++part) {
+            int partStart = result.length();
+            if (padPos == PAD_BEFORE_PREFIX) {
+                result.append(padSpec);
+            }
+            appendAffix(result,
+                        (part==0 ? positivePrefix : negativePrefix),
+                        localized);
+            if (padPos == PAD_AFTER_PREFIX) {
+                result.append(padSpec);
+            }
+            int sub0Start = result.length();
+            int g = isGroupingUsed() ? Math.max(0, groupingSize) : 0;
+            if (g > 0 && groupingSize2 > 0 && groupingSize2 != groupingSize) {
+                g += groupingSize2;
+            }
+            int maxIntDig = useExponentialNotation ? getMaximumIntegerDigits() :
+                (Math.max(Math.max(g, getMinimumIntegerDigits()),
+                          roundingDecimalPos) + 1);
+            for (i = maxIntDig; i > 0; --i) {
+                if (!useExponentialNotation && i<maxIntDig &&
+                    isGroupingPosition(i)) {
+                    result.append(group);
+                }
+                if (roundingDigits != null) {
+                    int pos = roundingDecimalPos - i;
+                    if (pos >= 0 && pos < roundingDigits.length()) {
+                        result.append((char) (roundingDigits.charAt(pos) - '0' + zero));
+                        continue;
+                    }
+                }
+                result.append(i<=getMinimumIntegerDigits() ? zero : digit);
+            }
+            if (getMaximumFractionDigits() > 0 || decimalSeparatorAlwaysShown) {
+                result.append(localized ? symbols.getDecimalSeparator() :
+                              PATTERN_DECIMAL_SEPARATOR);
+            }
+            int pos = roundingDecimalPos;
+            for (i = 0; i < getMaximumFractionDigits(); ++i) {
+                if (roundingDigits != null &&
+                    pos < roundingDigits.length()) {
+                    result.append(pos < 0 ? zero :
+                                  (char) (roundingDigits.charAt(pos) - '0' + zero));
+                    ++pos;
+                    continue;
+                }
+                result.append(i<getMinimumFractionDigits() ? zero : digit);
+            }
+            if (useExponentialNotation) {
+                result.append(localized ? symbols.getExponentSeparator() :
+                              PATTERN_EXPONENT);
+                if (exponentSignAlwaysShown) {
+                    result.append(localized ? symbols.getPlusSign() :
+                                  PATTERN_PLUS_SIGN);
+                }
+                for (i=0; i<minExponentDigits; ++i) {
+                    result.append(zero);
+                }
+            }
+            if (padSpec != null && !useExponentialNotation) {
+                int add = formatWidth - result.length() + sub0Start
+                    - ((part == 0)
+                       ? positivePrefix.length() + positiveSuffix.length()
+                       : negativePrefix.length() + negativeSuffix.length());
+                while (add > 0) {
+                    result.insert(sub0Start, digit);
+                    ++maxIntDig;
+                    --add;
+                    // Only add a grouping separator if we have at least
+                    // 2 additional characters to be added, so we don't
+                    // end up with ",###".
+                    if (add>1 && isGroupingPosition(maxIntDig)) {
+                        result.insert(sub0Start, group);
+                        --add;                        
+                    }
+                }
+            }
+            if (padPos == PAD_BEFORE_SUFFIX) {
+                result.append(padSpec);
+            }
+            if (part == 0) {
+                appendAffix(result, positiveSuffix, localized);
+                if (padPos == PAD_AFTER_SUFFIX) {
+                    result.append(padSpec);
+                }
+                if (negativeSuffix.equals(positiveSuffix) &&
+                    negativePrefix.equals(symbols.getMinusSign() + positivePrefix)) {
+                    part = 2;
+                } else {
+                    result.append(localized ? symbols.getPatternSeparator() :
+                                  PATTERN_SEPARATOR);
+                }
+            } else {
+                appendAffix(result, negativeSuffix, localized);
+                if (padPos == PAD_AFTER_SUFFIX) {
+                    result.append(padSpec);
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * Apply the given pattern to this Format object.  A pattern is a
+     * short-hand specification for the various formatting properties.
+     * These properties can also be changed individually through the
+     * various setter methods.
+     * <p>
+     * There is no limit to integer digits are set
+     * by this routine, since that is the typical end-user desire;
+     * use setMaximumInteger if you want to set a real value.
+     * For negative numbers, use a second pattern, separated by a semicolon
+     * <P>Example "#,#00.0#" -> 1,234.56
+     * <P>This means a minimum of 2 integer digits, 1 fraction digit, and
+     * a maximum of 2 fraction digits.
+     * <p>Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses.
+     * <p>In negative patterns, the minimum and maximum counts are ignored;
+     * these are presumed to be set in the positive pattern.
+     */
+    public void applyPattern( String pattern ) {
+        applyPattern( pattern, false );
+    }
+
+    /**
+     * Apply the given pattern to this Format object.  The pattern
+     * is assumed to be in a localized notation. A pattern is a
+     * short-hand specification for the various formatting properties.
+     * These properties can also be changed individually through the
+     * various setter methods.
+     * <p>
+     * There is no limit to integer digits are set
+     * by this routine, since that is the typical end-user desire;
+     * use setMaximumInteger if you want to set a real value.
+     * For negative numbers, use a second pattern, separated by a semicolon
+     * <P>Example "#,#00.0#" -> 1,234.56
+     * <P>This means a minimum of 2 integer digits, 1 fraction digit, and
+     * a maximum of 2 fraction digits.
+     * <p>Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses.
+     * <p>In negative patterns, the minimum and maximum counts are ignored;
+     * these are presumed to be set in the positive pattern.
+     */
+    public void applyLocalizedPattern( String pattern ) {
+        applyPattern( pattern, true );
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>CHANGED</font></strong>
+     * Does the real work of applying a pattern.
+     */
+    private void applyPattern(String pattern, boolean localized) {
+        char zeroDigit         = PATTERN_ZERO_DIGIT;
+        char groupingSeparator = PATTERN_GROUPING_SEPARATOR;
+        char decimalSeparator  = PATTERN_DECIMAL_SEPARATOR;
+        char percent           = PATTERN_PERCENT;
+        char perMill           = PATTERN_PER_MILLE;
+        char digit             = PATTERN_DIGIT;
+        char separator         = PATTERN_SEPARATOR;
+        String exponent        = PATTERN_EXPONENT;
+        char plus              = PATTERN_PLUS_SIGN;
+        char padEscape         = PATTERN_PAD_ESCAPE;
+        if (localized) {
+            zeroDigit         = symbols.getZeroDigit();
+            groupingSeparator = symbols.getGroupingSeparator();
+            decimalSeparator  = symbols.getDecimalSeparator();
+            percent           = symbols.getPercent();
+            perMill           = symbols.getPerMill();
+            digit             = symbols.getDigit();
+            separator         = symbols.getPatternSeparator();
+            exponent          = symbols.getExponentSeparator();
+            plus              = symbols.getPlusSign();
+            padEscape         = symbols.getPadEscape();
+        }
+        char nineDigit = (char) (zeroDigit + 9);
+
+        boolean gotNegative = false;
+
+        int pos = 0;
+        // Part 0 is the positive pattern.  Part 1, if present, is the negative
+        // pattern.
+        for (int part=0; part<2 && pos<pattern.length(); ++part) {
+            // The subpart ranges from 0 to 4: 0=pattern proper, 1=prefix,
+            // 2=suffix, 3=prefix in quote, 4=suffix in quote.  Subpart 0 is
+            // between the prefix and suffix, and consists of pattern
+            // characters.  In the prefix and suffix, percent, permille, and
+            // currency symbols are recognized and translated.
+            int subpart = 1, sub0Start = 0, sub0Limit = 0, sub2Limit = 0;
+
+            // It's important that we don't change any fields of this object
+            // prematurely.  We set the following variables for the multiplier,
+            // grouping, etc., and then only change the actual object fields if
+            // everything parses correctly.  This also lets us register
+            // the data from part 0 and ignore the part 1, except for the
+            // prefix and suffix.
+            StringBuffer prefix = new StringBuffer();
+            StringBuffer suffix = new StringBuffer();
+            int decimalPos = -1;
+            int multiplier = 1;
+            int digitLeftCount = 0, zeroDigitCount = 0, digitRightCount = 0;
+            byte groupingCount = -1;
+            byte groupingCount2 = -1;
+            int padPos = -1;
+            char padChar = 0;
+            int incrementPos = -1;
+            long incrementVal = 0;
+            byte expDigits = -1;
+            boolean expSignAlways = false;
+            boolean isCurrency = false;
+
+            // The affix is either the prefix or the suffix.
+            StringBuffer affix = prefix;
+
+            int start = pos;
+
+        PARTLOOP:
+            for (; pos < pattern.length(); ++pos) {
+                char ch = pattern.charAt(pos);
+                switch (subpart) {
+                case 0: // Pattern proper subpart (between prefix & suffix)
+                    // Process the digits, decimal, and grouping characters.  We
+                    // record five pieces of information.  We expect the digits
+                    // to occur in the pattern ####00.00####, and we record the
+                    // number of left digits, zero (central) digits, and right
+                    // digits.  The position of the last grouping character is
+                    // recorded (should be somewhere within the first two blocks
+                    // of characters), as is the position of the decimal point,
+                    // if any (should be in the zero digits).  If there is no
+                    // decimal point, then there should be no right digits.
+                    if (ch == digit) {
+                        if (zeroDigitCount > 0) {
+                            ++digitRightCount;
+                        } else {
+                            ++digitLeftCount;
+                        }
+                        if (groupingCount >= 0 && decimalPos < 0) {
+                            ++groupingCount;
+                        }
+                    } else if (ch >= zeroDigit && ch <= nineDigit) {
+                        if (digitRightCount > 0) {
+                            throw new IllegalArgumentException(
+                                   "Unexpected '0' in pattern \"" +
+                                   pattern + '"');
+                        }
+                        ++zeroDigitCount;
+                        if (groupingCount >= 0 && decimalPos < 0) {
+                            ++groupingCount;
+                        }
+                        if (ch != zeroDigit) {
+                            int p = digitLeftCount + zeroDigitCount
+                                + digitRightCount;
+                            if (incrementPos >= 0) {
+                                while (incrementPos < p) {
+                                    incrementVal *= 10;
+                                    ++incrementPos;
+                                }
+                            } else {
+                                incrementPos = p;
+                            }
+                            incrementVal += ch - zeroDigit;
+                        }
+                    } else if (ch == groupingSeparator) {
+                        if (decimalPos >= 0) {
+                            throw new IllegalArgumentException(
+                                    "Grouping separator after decimal in pattern \"" +
+                                    pattern + '"');
+                        }
+                        groupingCount2 = groupingCount;
+                        groupingCount = 0;
+                    } else if (ch == decimalSeparator) {
+                        if (decimalPos >= 0) {
+                            throw new IllegalArgumentException(
+                                    "Multiple decimal separators in pattern \"" +
+                                    pattern + '"');
+                        }
+                        // Intentionally incorporate the digitRightCount,
+                        // even though it is illegal for this to be > 0
+                        // at this point.  We check pattern syntax below.
+                        decimalPos = digitLeftCount + zeroDigitCount + digitRightCount;
+                    } else {
+                        if (pattern.regionMatches(pos, exponent, 0, exponent.length())) {
+                            if (expDigits >= 0) {
+                                throw new IllegalArgumentException(
+                                        "Multiple exponential " +
+                                        "symbols in pattern \"" +
+                                        pattern + '"');
+                            }
+                            if (groupingCount >= 0) {
+                                throw new IllegalArgumentException(
+                                        "Grouping separator in exponential " +
+                                        "pattern \"" +
+                                        pattern + '"');
+                            }
+                            // Check for positive prefix
+                            if ((pos+1) < pattern.length()
+                                && pattern.charAt(pos+1) == plus) {
+                                expSignAlways = true;
+                                ++pos;
+                            }
+                            // Use lookahead to parse out the exponential part of the
+                            // pattern, then jump into suffix subpart.
+                            expDigits = 0;
+                            while (++pos < pattern.length() &&
+                                   pattern.charAt(pos) == zeroDigit) {
+                                ++expDigits;
+                            }
+                            
+                            if ((digitLeftCount + zeroDigitCount) < 1 ||
+                                expDigits < 1) {
+                                throw new IllegalArgumentException(
+                                        "Malformed exponential " +
+                                        "pattern \"" + pattern + '"');
+                            }
+                        }
+                        // Transition to suffix subpart
+                        subpart = 2; // suffix subpart
+                        affix = suffix;
+                        sub0Limit = pos--;
+                        continue;
+                    }
+                    break;
+                case 1: // Prefix subpart
+                case 2: // Suffix subpart
+                    // Process the prefix / suffix characters
+                    // Process unquoted characters seen in prefix or suffix
+                    // subpart.
+                    if (ch == digit ||
+                        ch == groupingSeparator ||
+                        ch == decimalSeparator ||
+                        (ch >= zeroDigit && ch <= nineDigit)) {
+                        // Any of these characters implicitly begins the
+                        // next subpart if we are in the prefix
+                        if (subpart == 1) { // prefix subpart
+                            subpart = 0; // pattern proper subpart
+                            sub0Start = pos--; // Reprocess this character
+                            continue;
+                        }
+                        // Fall through to append(ch)
+                    } else if (ch == CURRENCY_SIGN) {
+                        // Use lookahead to determine if the currency sign is
+                        // doubled or not.
+                        boolean doubled = (pos + 1) < pattern.length() &&
+                            pattern.charAt(pos + 1) == CURRENCY_SIGN;
+                        affix.append(doubled ?
+                                     symbols.getInternationalCurrencySymbol() :
+                                     symbols.getCurrencySymbol());
+                        if (doubled) ++pos; // Skip over the doubled character
+                        isCurrency = true;
+                        continue;
+                    } else if (ch == QUOTE) {
+                        // A quote outside quotes indicates either the opening
+                        // quote or two quotes, which is a quote literal.  That is,
+                        // we have the first quote in 'do' or o''clock.
+                        if ((pos+1) < pattern.length() &&
+                            pattern.charAt(pos+1) == QUOTE) {
+                            ++pos;
+                            // Fall through to append(ch)
+                        } else {
+                            subpart += 2; // open quote
+                            continue;
+                        }
+                    } else if (ch == separator) {
+                        // Don't allow separators in the prefix, and don't allow
+                        // separators in the second pattern (part == 1).
+                        if (subpart == 1 || part == 1) {
+                            throw new IllegalArgumentException(
+                                    "Unquoted special character '" +
+                                    ch + "' in pattern \"" +
+                                    pattern + '"');
+                        }
+                        sub2Limit = pos++;
+                        break PARTLOOP; // Go to next part
+                    } else if (ch == percent || ch == perMill) {
+                        // Next handle characters which are appended directly.
+                        if (multiplier != 1) {
+                            throw new IllegalArgumentException(
+                                    "Too many percent/permille characters "
+                                    + "in pattern \"" + pattern + '"');
+                        }
+                        if (ch == percent) {
+                            multiplier = 100;
+                            ch = symbols.getPercent();
+                        } else {
+                            multiplier = 1000;
+                            ch = symbols.getPerMill();
+                        }
+                        // Fall through to append(ch)
+                    } else if (ch == padEscape) {
+                        if (padPos >= 0) {
+                            throw new IllegalArgumentException(
+                                    "Multiple pad specifiers");
+                        }
+                        if ((pos+1) == pattern.length()) {
+                            throw new IllegalArgumentException(
+                                    "Invalid pad specifier");
+                        }
+                        padPos = pos++; // Advance past pad char
+                        padChar = pattern.charAt(pos);
+                        continue;
+                    }
+                    // Unquoted, non-special characters fall through to here, as
+                    // well as other code which needs to append something to the
+                    // affix.
+                    affix.append(ch);
+                    break;
+                case 3: // Prefix subpart, in quote
+                case 4: // Suffix subpart, in quote
+                    // A quote within quotes indicates either the closing
+                    // quote or two quotes, which is a quote literal.  That is,
+                    // we have the second quote in 'do' or 'don''t'.
+                    if (ch == QUOTE) {
+                        if ((pos+1) < pattern.length() &&
+                            pattern.charAt(pos+1) == QUOTE) {
+                            ++pos; 
+                            // Fall through to append(ch)
+                        } else {
+                            subpart -= 2; // close quote
+                            continue;
+                        }
+                    }
+                    affix.append(ch);
+                    break;                    
+                }
+            }
+
+            if (sub0Limit == 0) {
+                sub0Limit = pattern.length();
+            }
+
+            if (sub2Limit == 0) {
+                sub2Limit = pattern.length();
+            }
+
+            /* Handle patterns with no '0' pattern character.  These patterns
+             * are legal, but must be recodified to make sense.  "##.###" ->
+             * "#0.###".  ".###" -> ".0##".
+             *
+             * We allow patterns of the form "####" to produce a zeroDigitCount
+             * of zero (got that?); although this seems like it might make it
+             * possible for format() to produce empty strings, format() checks
+             * for this condition and outputs a zero digit in this situation.
+             * Having a zeroDigitCount of zero yields a minimum integer digits
+             * of zero, which allows proper round-trip patterns.  We don't want
+             * "#" to become "#0" when toPattern() is called (even though that's
+             * what it really is, semantically).
+             */
+            if (zeroDigitCount == 0 && digitLeftCount > 0 && decimalPos >= 0) {
+                // Handle "###.###" and "###." and ".###"
+                int n = decimalPos;
+                if (n == 0) ++n; // Handle ".###"
+                digitRightCount = digitLeftCount - n;
+                digitLeftCount = n - 1;
+                zeroDigitCount = 1;
+            }
+
+            // Do syntax checking on the digits, decimal points, and quotes.
+            if ((decimalPos < 0 && digitRightCount > 0) ||
+                (decimalPos >= 0 &&
+                 (decimalPos < digitLeftCount ||
+                  decimalPos > (digitLeftCount + zeroDigitCount))) ||
+                groupingCount == 0 || groupingCount2 == 0 ||
+                subpart > 2) { // subpart > 2 == unmatched quote
+                throw new IllegalArgumentException("Malformed pattern \"" +
+                                                   pattern + '"');
+            }
+
+            // Make sure pad is at legal position before or after affix.
+            if (padPos >= 0) {
+                if (padPos == start) {
+                    padPos = PAD_BEFORE_PREFIX;
+                } else if (padPos+2 == sub0Start) {
+                    padPos = PAD_AFTER_PREFIX;
+                } else if (padPos == sub0Limit) {
+                    padPos = PAD_BEFORE_SUFFIX;
+                } else if (padPos+2 == sub2Limit) {
+                    padPos = PAD_AFTER_SUFFIX;
+                } else {
+                    throw new IllegalArgumentException("Illegal pad position");
+                }
+            }
+
+            if (part == 0) {
+                // Set negative affixes temporarily to match the positive
+                // affixes.  Fix this up later after processing both parts.
+                this.positivePrefix = this.negativePrefix = prefix.toString();
+                this.positiveSuffix = this.negativeSuffix = suffix.toString();
+                useExponentialNotation = (expDigits >= 0);
+                if (useExponentialNotation) {
+                    minExponentDigits = expDigits;
+                    exponentSignAlwaysShown = expSignAlways;
+                }
+                isCurrencyFormat = isCurrency;
+                int digitTotalCount = digitLeftCount + zeroDigitCount + digitRightCount;
+                // The effectiveDecimalPos is the position the decimal is at or
+                // would be at if there is no decimal.  Note that if
+                // decimalPos<0, then digitTotalCount == digitLeftCount +
+                // zeroDigitCount.
+                int effectiveDecimalPos = decimalPos >= 0 ? decimalPos : digitTotalCount;
+                setMinimumIntegerDigits(effectiveDecimalPos - digitLeftCount);
+                setMaximumIntegerDigits(useExponentialNotation
+                        ? digitLeftCount + getMinimumIntegerDigits()
+                        : Integer.MAX_VALUE);
+                setMaximumFractionDigits(decimalPos >= 0
+                        ? (digitTotalCount - decimalPos) : 0);
+                setMinimumFractionDigits(decimalPos >= 0
+                        ? (digitLeftCount + zeroDigitCount - decimalPos) : 0);
+                setGroupingUsed(groupingCount > 0);
+                this.groupingSize = (groupingCount > 0) ? groupingCount : 0;
+                this.groupingSize2 = (groupingCount2 > 0 && groupingCount2 != groupingCount)
+                    ? groupingCount2 : 0;
+                this.multiplier = multiplier;
+                setDecimalSeparatorAlwaysShown(decimalPos == 0
+                        || decimalPos == digitTotalCount);
+                if (padPos >= 0) {
+                    padPosition = padPos;
+                    formatWidth = prefix.length() + suffix.length() +
+                        sub0Limit - sub0Start;
+                    pad = padChar;
+                } else {
+                    formatWidth = 0;
+                }
+                if (incrementVal != 0) {
+                    // BigDecimal scale cannot be negative (even though
+                    // this makes perfect sense), so we need to handle this.
+                    int scale = incrementPos - effectiveDecimalPos;
+                    roundingIncrement =
+                        java.math.BigDecimal.valueOf(incrementVal, scale > 0 ? scale : 0);
+                    if (scale < 0) {
+                        roundingIncrement =
+                            roundingIncrement.movePointRight(-scale);
+                    }
+                    roundingDouble = roundingIncrement.doubleValue();
+                    roundingMode = java.math.BigDecimal.ROUND_HALF_EVEN;
+                } else {
+                    setRoundingIncrement(null);
+                }
+            } else {
+                this.negativePrefix = prefix.toString();
+                this.negativeSuffix = suffix.toString();
+                gotNegative = true;
+            }
+        }
+
+        // If there was no negative pattern, or if the negative pattern is
+        // identical to the positive pattern, then prepend the minus sign to the
+        // positive pattern to form the negative pattern.
+        if (!gotNegative ||
+            (negativePrefix.equals(positivePrefix)
+             && negativeSuffix.equals(positiveSuffix))) {
+            negativeSuffix = positiveSuffix;
+            negativePrefix = symbols.getMinusSign() + positivePrefix;
+        }
+    }
+
+    /**
+     * First, read the default serializable fields from the stream.  Then
+     * if <code>serialVersionOnStream</code> is less than 1, indicating that
+     * the stream was written by JDK 1.1, initialize <code>useExponentialNotation</code>
+     * to false, since it was not present in JDK 1.1.
+     * Finally, set serialVersionOnStream back to the maximum allowed value so that
+     * default serialization will work properly if this object is streamed out again.
+     */
+    private void readObject(ObjectInputStream stream)
+         throws IOException, ClassNotFoundException
+    {
+        stream.defaultReadObject();
+        if (serialVersionOnStream < 2) {
+            exponentSignAlwaysShown = false;
+            roundingDouble = 0.0;
+            roundingIncrement = null;
+            roundingMode = java.math.BigDecimal.ROUND_HALF_EVEN;
+            formatWidth = 0;
+            pad = ' ';
+            padPosition = PAD_BEFORE_PREFIX;
+            if (serialVersionOnStream < 1) {
+                // Didn't have exponential fields
+                useExponentialNotation = false;
+            }
+        }
+        serialVersionOnStream = currentSerialVersion;
+        digitList = new DigitList();
+    }
+
+    //----------------------------------------------------------------------
+    // INSTANCE VARIABLES
+    //----------------------------------------------------------------------
+
+    private transient DigitList digitList = new DigitList();
+
+    /**
+     * The symbol used as a prefix when formatting positive numbers, e.g. "+".
+     *
+     * @serial
+     * @see #getPositivePrefix
+     */
+    private String  positivePrefix = "";
+
+    /**
+     * The symbol used as a suffix when formatting positive numbers.
+     * This is often an empty string.
+     *
+     * @serial
+     * @see #getPositiveSuffix
+     */
+    private String  positiveSuffix = "";
+
+    /**
+     * The symbol used as a prefix when formatting negative numbers, e.g. "-".
+     *
+     * @serial
+     * @see #getNegativePrefix
+     */
+    private String  negativePrefix = "-";
+
+    /**
+     * The symbol used as a suffix when formatting negative numbers.
+     * This is often an empty string.
+     *
+     * @serial
+     * @see #getNegativeSuffix
+     */
+    private String  negativeSuffix = "";
+
+    /**
+     * The multiplier for use in percent, permill, etc.
+     *
+     * @serial
+     * @see #getMultiplier
+     */
+    private int     multiplier = 1;
+    
+    /**
+     * The number of digits between grouping separators in the integer
+     * portion of a number.  Must be greater than 0 if
+     * <code>NumberFormat.groupingUsed</code> is true.
+     *
+     * @serial
+     * @see #getGroupingSize
+     * @see NumberFormat#isGroupingUsed
+     */
+    private byte    groupingSize = 3;  // invariant, > 0 if useThousands
+
+    /**
+     * The secondary grouping size.  This is only used for Hindi
+     * numerals, which use a primary grouping of 3 and a secondary
+     * grouping of 2, e.g., "12,34,567".  If this value is less than
+     * 1, then secondary grouping is equal to the primary grouping.
+     * [NEW]
+     */
+    private byte    groupingSize2 = 0;
+    
+    /**
+     * If true, forces the decimal separator to always appear in a formatted
+     * number, even if the fractional part of the number is zero.
+     *
+     * @serial
+     * @see #isDecimalSeparatorAlwaysShown
+     */
+    private boolean decimalSeparatorAlwaysShown = false;
+    
+    /**
+     * True if this object represents a currency format.  This determines
+     * whether the monetary decimal separator is used instead of the normal one.
+     */
+    private transient boolean isCurrencyFormat = false;
+    
+    /**
+     * The <code>DecimalFormatSymbols</code> object used by this format.
+     * It contains the symbols used to format numbers, e.g. the grouping separator,
+     * decimal separator, and so on.
+     *
+     * @serial
+     * @see #setDecimalFormatSymbols
+     * @see DecimalFormatSymbols
+     */
+    private DecimalFormatSymbols symbols = null; // LIU new DecimalFormatSymbols();
+
+    /**
+     * True to force the use of exponential (i.e. scientific) notation when formatting
+     * numbers.
+     * <p>
+     * Note that the JDK 1.2 public API provides no way to set this field,
+     * even though it is supported by the implementation and the stream format.
+     * The intent is that this will be added to the API in the future.
+     *
+     * @serial
+     * @since JDK 1.2
+     */
+    private boolean useExponentialNotation;  // Newly persistent in JDK 1.2
+
+    /**
+     * The minimum number of digits used to display the exponent when a number is
+     * formatted in exponential notation.  This field is ignored if
+     * <code>useExponentialNotation</code> is not true.
+     * <p>
+     * Note that the JDK 1.2 public API provides no way to set this field,
+     * even though it is supported by the implementation and the stream format.
+     * The intent is that this will be added to the API in the future.
+     *
+     * @serial
+     * @since JDK 1.2
+     */
+    private byte    minExponentDigits;       // Newly persistent in JDK 1.2
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * If true, the exponent is always prefixed with either the plus
+     * sign or the minus sign.  Otherwise, only negative exponents are
+     * prefixed with the minus sign.  This has no effect unless
+     * <code>useExponentialNotation</code> is true.
+     * @serial
+     * @since AlphaWorks NumberFormat
+     */
+    private boolean exponentSignAlwaysShown = false;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The value to which numbers are rounded during formatting.  For example,
+     * if the rounding increment is 0.05, then 13.371 would be formatted as
+     * 13.350, assuming 3 fraction digits.  Has the value <code>null</code> if
+     * rounding is not in effect, or a positive value if rounding is in effect.
+     * Default value <code>null</code>.
+     * @serial
+     * @since AlphaWorks NumberFormat
+     */
+    private java.math.BigDecimal roundingIncrement = null;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The rounding increment as a double.  If this value is <= 0, then no
+     * rounding is done.  This value is
+     * <code>roundingIncrement.doubleValue()</code>.  Default value 0.0.
+     */
+    private transient double roundingDouble = 0.0;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The rounding mode.  This value controls any rounding operations which
+     * occur when applying a rounding increment or when reducing the number of
+     * fraction digits to satisfy a maximum fraction digits limit.  The value
+     * may assume any of the <code>BigDecimal</code> rounding mode values.
+     * Default value <code>BigDecimal.ROUND_HALF_EVEN</code>.
+     * @serial
+     * @since AlphaWorks NumberFormat
+     */
+    private int roundingMode = java.math.BigDecimal.ROUND_HALF_EVEN;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The padded format width, or zero if there is no padding.  Must
+     * be >= 0.  Default value zero.
+     * @serial
+     * @since AlphaWorks NumberFormat
+     */
+    private int formatWidth = 0;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The character used to pad the result of format to
+     * <code>formatWidth</code>, if padding is in effect.  Default value ' '.
+     * @serial
+     * @since AlphaWorks NumberFormat
+     */
+    private char pad = ' ';
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The position in the string at which the <code>pad</code> character
+     * will be inserted, if padding is in effect.  Must have a value from
+     * <code>PAD_BEFORE_PREFIX</code> to <code>PAD_AFTER_SUFFIX</code>.
+     * Default value <code>PAD_BEFORE_PREFIX</code>.
+     * @serial
+     * @since AlphaWorks NumberFormat
+     */
+    private int padPosition = PAD_BEFORE_PREFIX;
+
+    //----------------------------------------------------------------------
+
+    static final int currentSerialVersion = 2;
+
+    /**
+     * The internal serial version which says which version was written
+     * Possible values are:
+     * <ul>
+     * <li><b>0</b> (default): versions before JDK 1.2
+     * <li><b>1</b>: version from JDK 1.2 and later, which includes the two new fields
+     *      <code>useExponentialNotation</code> and <code>minExponentDigits</code>.
+     * <li><b>2</b>: version on AlphaWorks, which adds roundingMode, formatWidth,
+     *      pad, padPosition, exponentSignAlwaysShown, roundingIncrement.
+     * </ul>
+     * @since JDK 1.2
+     * @serial */
+    private int serialVersionOnStream = currentSerialVersion;
+
+    //----------------------------------------------------------------------
+    // CONSTANTS
+    //----------------------------------------------------------------------
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Constant for <code>getPadPosition()</code> and
+     * <code>setPadPosition()</code> specifying pad characters inserted before
+     * the prefix.
+     * @see #setPadPosition
+     * @see #getPadPosition
+     * @see #PAD_AFTER_PREFIX
+     * @see #PAD_BEFORE_SUFFIX
+     * @see #PAD_AFTER_SUFFIX
+     */
+    public static final int PAD_BEFORE_PREFIX = 0;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Constant for <code>getPadPosition()</code> and
+     * <code>setPadPosition()</code> specifying pad characters inserted after
+     * the prefix.
+     * @see #setPadPosition
+     * @see #getPadPosition
+     * @see #PAD_BEFORE_PREFIX
+     * @see #PAD_BEFORE_SUFFIX
+     * @see #PAD_AFTER_SUFFIX
+     */
+    public static final int PAD_AFTER_PREFIX  = 1;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Constant for <code>getPadPosition()</code> and
+     * <code>setPadPosition()</code> specifying pad characters inserted before
+     * the suffix.
+     * @see #setPadPosition
+     * @see #getPadPosition
+     * @see #PAD_BEFORE_PREFIX
+     * @see #PAD_AFTER_PREFIX
+     * @see #PAD_AFTER_SUFFIX
+     */
+    public static final int PAD_BEFORE_SUFFIX = 2;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Constant for <code>getPadPosition()</code> and
+     * <code>setPadPosition()</code> specifying pad characters inserted after
+     * the suffix.
+     * @see #setPadPosition
+     * @see #getPadPosition
+     * @see #PAD_BEFORE_PREFIX
+     * @see #PAD_AFTER_PREFIX
+     * @see #PAD_BEFORE_SUFFIX
+     */
+    public static final int PAD_AFTER_SUFFIX  = 3;
+
+    // Constants for characters used in programmatic (unlocalized) patterns.
+    private static final char       PATTERN_ZERO_DIGIT         = '0';
+    private static final char       PATTERN_GROUPING_SEPARATOR = ',';
+    private static final char       PATTERN_DECIMAL_SEPARATOR  = '.';
+    private static final char       PATTERN_PER_MILLE          = '\u2030';
+    private static final char       PATTERN_PERCENT            = '%';
+    private static final char       PATTERN_DIGIT              = '#';
+    private static final char       PATTERN_SEPARATOR          = ';';
+            static final String     PATTERN_EXPONENT           = "E"; // [NEW]
+            static final char       PATTERN_PAD_ESCAPE         = '*'; // [NEW]
+            static final char       PATTERN_PLUS_SIGN          = '+'; // [NEW]
+    // Pad escape is package private to allow access by DecimalFormatSymbols.
+    // Also plus sign.  Also exponent.
+
+    /**
+     * The CURRENCY_SIGN is the standard Unicode symbol for currency.  It
+     * is used in patterns and substitued with either the currency symbol,
+     * or if it is doubled, with the international currency symbol.  If the
+     * CURRENCY_SIGN is seen in a pattern, then the decimal separator is
+     * replaced with the monetary decimal separator.
+     *
+     * The CURRENCY_SIGN is not localized.
+     */
+    private static final char       CURRENCY_SIGN = '\u00A4';
+
+    private static final char       QUOTE = '\'';
+
+    // Proclaim JDK 1.1 serial compatibility.
+    static final long serialVersionUID = 864413376551465018L;
+
+    /**
+     * Cache to hold the NumberPattern of a Locale.
+     * [NEW] No longer needed -- share the NumberFormat cache
+     */
+    // private static Hashtable cachedLocaleData = new Hashtable(3);
+}
+
+//eof
diff --git a/src/com/ibm/text/DecimalFormatSymbols.java b/src/com/ibm/text/DecimalFormatSymbols.java
new file mode 100755
index 0000000..6761b204
--- /dev/null
+++ b/src/com/ibm/text/DecimalFormatSymbols.java
@@ -0,0 +1,619 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/DecimalFormatSymbols.java,v $ 
+ * $Date: 2000/03/10 04:07:19 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.ResourceBundle;
+import java.util.Locale;
+import java.util.Hashtable;
+
+/**
+ * This class represents the set of symbols (such as the decimal separator, the
+ * grouping separator, and so on) needed by <code>DecimalFormat</code> to format
+ * numbers. <code>DecimalFormat</code> creates for itself an instance of
+ * <code>DecimalFormatSymbols</code> from its locale data.  If you need to
+ * change any of these symbols, you can get the
+ * <code>DecimalFormatSymbols</code> object from your <code>DecimalFormat</code>
+ * and modify it.
+ *
+ * <p><strong>This is an enhanced version of <code>DecimalFormatSymbols</code> that
+ * is based on the standard version in the JDK.  New or changed functionality
+ * is labeled
+ * <strong><font face=helvetica color=red>NEW</font></strong>.</strong>
+ *
+ * @see          java.util.Locale
+ * @see          DecimalFormat
+ * @version      1.12 29 Jan 1997
+ * @author       Mark Davis
+ * @author       Alan Liu
+ */
+
+final public class DecimalFormatSymbols implements Cloneable, Serializable {
+
+    /**
+     * Create a DecimalFormatSymbols object for the default locale.
+     */
+    public DecimalFormatSymbols() {
+        initialize( Locale.getDefault() );
+    }
+
+    /**
+     * Create a DecimalFormatSymbols object for the given locale.
+     */
+    public DecimalFormatSymbols( Locale locale ) {
+        initialize( locale );
+    }
+
+    /**
+     * character used for zero. Different for Arabic, etc.
+     */
+    public char getZeroDigit() {
+        return zeroDigit;
+    }
+
+    public void setZeroDigit(char zeroDigit) {
+        this.zeroDigit = zeroDigit;
+    }
+
+    /**
+     * character used for thousands separator. Different for French, etc.
+     */
+    public char getGroupingSeparator() {
+        return groupingSeparator;
+    }
+
+    public void setGroupingSeparator(char groupingSeparator) {
+        this.groupingSeparator = groupingSeparator;
+    }
+
+    /**
+     * character used for decimal sign. Different for French, etc.
+     */
+    public char getDecimalSeparator() {
+        return decimalSeparator;
+    }
+
+    public void setDecimalSeparator(char decimalSeparator) {
+        this.decimalSeparator = decimalSeparator;
+    }
+
+    /**
+     * character used for mille percent sign. Different for Arabic, etc.
+     */
+    public char getPerMill() {
+        return perMill;
+    }
+
+    public void setPerMill(char perMill) {
+        this.perMill = perMill;
+    }
+
+    /**
+     * character used for percent sign. Different for Arabic, etc.
+     */
+    public char getPercent() {
+        return percent;
+    }
+
+    public void setPercent(char percent) {
+        this.percent = percent;
+    }
+
+    /**
+     * character used for a digit in a pattern.
+     */
+    public char getDigit() {
+        return digit;
+    }
+
+    public void setDigit(char digit) {
+        this.digit = digit;
+    }
+
+    /**
+     * character used to separate positive and negative subpatterns
+     * in a pattern.
+     */
+    public char getPatternSeparator() {
+        return patternSeparator;
+    }
+
+    public void setPatternSeparator(char patternSeparator) {
+        this.patternSeparator = patternSeparator;
+    }
+
+    /**
+     * character used to represent infinity. Almost always left
+     * unchanged.
+     */
+
+    public String getInfinity() {
+        return infinity;
+    }
+
+    public void setInfinity(String infinity) {
+        this.infinity = infinity;
+    }
+
+    /**
+     * character used to represent NaN. Almost always left
+     * unchanged.
+     */
+    public String getNaN() {
+        return NaN;
+    }
+
+    public void setNaN(String NaN) {
+        this.NaN = NaN;
+    }
+
+    /**
+     * character used to represent minus sign. If no explicit
+     * negative format is specified, one is formed by prefixing
+     * minusSign to the positive format.
+     */
+    public char getMinusSign() {
+        return minusSign;
+    }
+
+    public void setMinusSign(char minusSign) {
+        this.minusSign = minusSign;
+    }
+
+    /**
+     * Return the string denoting the local currency.
+     */
+    public String getCurrencySymbol()
+    {
+        return currencySymbol;
+    }
+
+    /**
+     * Set the string denoting the local currency.
+     */
+    public void setCurrencySymbol(String currency)
+    {
+        currencySymbol = currency;
+    }
+
+    /**
+     * Return the international string denoting the local currency.
+     */
+    public String getInternationalCurrencySymbol()
+    {
+        return intlCurrencySymbol;
+    }
+
+    /**
+     * Set the international string denoting the local currency.
+     */
+    public void setInternationalCurrencySymbol(String currency)
+    {
+        intlCurrencySymbol = currency;
+    }
+
+    /**
+     * Return the monetary decimal separator.
+     */
+    public char getMonetaryDecimalSeparator()
+    {
+        return monetarySeparator;
+    }
+
+    /**
+     * Set the monetary decimal separator.
+     */
+    public void setMonetaryDecimalSeparator(char sep)
+    {
+        monetarySeparator = sep;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Return the string used to separate the mantissa from the exponent.
+     * Examples: "x10^" for 1.23x10^4, "E" for 1.23E4.
+     * @return the localized exponent symbol, used in localized patterns
+     * and formatted strings
+     * @see #setExponentSeparator
+     */
+    public String getExponentSeparator()
+    {
+        return exponentSeparator;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the string used to separate the mantissa from the exponent.
+     * Examples: "x10^" for 1.23x10^4, "E" for 1.23E4.
+     * @param exp the localized exponent symbol, used in localized patterns
+     * and formatted strings
+     * @see #getExponentSeparator
+     */
+    public void setExponentSeparator(String exp)
+    {
+        exponentSeparator = exp;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Return the localized plus sign.
+     * @return the plus sign, used in localized patterns and formatted
+     * strings
+     * @see #setPlusSign
+     * @see #setMinusSign
+     * @see #getMinusSign
+     */
+    public char getPlusSign() {
+        return plusSign;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the localized plus sign.
+     * @param plus the plus sign, used in localized patterns and formatted
+     * strings
+     * @see #getPlusSign
+     * @see #setMinusSign
+     * @see #getMinusSign
+     */
+    public void setPlusSign(char plus) {
+        plusSign = plus;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Return the character used to pad numbers out to a specified width.  This
+     * is not the pad character itself; rather, it is the special pattern
+     * character <em>preceding</em> the pad character.  In the pattern
+     * "*_#,##0", '*' is the pad escape, and '_' is the pad character.
+     * @return the character 
+     * @see #setPadEscape
+     * @see DecimalFormat#getFormatWidth
+     * @see DecimalFormat#getPadPosition
+     * @see DecimalFormat#getPadCharacter
+     */
+    public char getPadEscape() {
+        return padEscape;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Set the character used to pad numbers out to a specified width.  This is
+     * not the pad character itself; rather, it is the special pattern character
+     * <em>preceding</em> the pad character.  In the pattern "*_#,##0", '*' is
+     * the pad escape, and '_' is the pad character.
+     * @see #getPadEscape
+     * @see DecimalFormat#setFormatWidth
+     * @see DecimalFormat#setPadPosition
+     * @see DecimalFormat#setPadCharacter
+     */
+    public void setPadEscape(char c) {
+        padEscape = c;
+    }
+
+    /**
+     * Standard override.
+     */
+    public Object clone() {
+        try {
+            return (DecimalFormatSymbols)super.clone();
+            // other fields are bit-copied
+        } catch (CloneNotSupportedException e) {
+            throw new InternalError();
+        }
+    }
+
+    /**
+     * Override equals
+     */
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (this == obj) return true;
+        if (getClass() != obj.getClass()) return false;
+        DecimalFormatSymbols other = (DecimalFormatSymbols) obj;
+        return (zeroDigit == other.zeroDigit &&
+        groupingSeparator == other.groupingSeparator &&
+        decimalSeparator == other.decimalSeparator &&
+        percent == other.percent &&
+        perMill == other.perMill &&
+        digit == other.digit &&
+        minusSign == other.minusSign &&
+        patternSeparator == other.patternSeparator &&
+        infinity.equals(other.infinity) &&
+        NaN.equals(other.NaN) &&
+        currencySymbol.equals(other.currencySymbol) &&
+        intlCurrencySymbol.equals(other.intlCurrencySymbol) &&
+        padEscape == other.padEscape && // [NEW]
+        plusSign == other.plusSign && // [NEW]
+        exponentSeparator.equals(other.exponentSeparator) && // [NEW]
+        monetarySeparator == other.monetarySeparator);
+    }
+
+    /**
+     * Override hashCode
+     */
+    public int hashCode() {
+            int result = zeroDigit;
+            result = result * 37 + groupingSeparator;
+            result = result * 37 + decimalSeparator;
+            return result;
+    }
+
+    /**
+     * Initializes the symbols from the LocaleElements resource bundle.
+     * Note: The organization of LocaleElements badly needs to be
+     * cleaned up.
+     */
+    private void initialize( Locale locale ) {
+        /* try the cache first */
+        String[][] data = (String[][]) cachedLocaleData.get(locale);
+        String[] numberElements;
+        String[] currencyElements;
+        if (data == null) {  /* cache miss */
+            data = new String[2][];
+            ResourceBundle rb = ResourceBundle.getBundle
+                (NumberFormat.RESOURCE_BASE, locale); // [NEW] Temporary
+            data[0] = rb.getStringArray("NumberElements");
+            data[1] = rb.getStringArray("CurrencyElements");
+            /* update cache */
+            cachedLocaleData.put(locale, data);
+        }
+        numberElements = data[0];
+        currencyElements = data[1];
+
+        decimalSeparator = numberElements[0].charAt(0);
+        groupingSeparator = numberElements[1].charAt(0);
+        // [NEW] Temporary hack to support old JDK 1.1 resources
+        patternSeparator = numberElements[2].length() > 0 ?
+            numberElements[2].charAt(0) : ';';
+        // patternSeparator = numberElements[2].charAt(0);
+        percent = numberElements[3].charAt(0);
+        zeroDigit = numberElements[4].charAt(0); //different for Arabic,etc.
+        digit = numberElements[5].charAt(0);
+        minusSign = numberElements[6].charAt(0);
+        
+        // [NEW] Temporary hack to support JDK versions before 1.1.6 (?)
+        exponentSeparator = numberElements.length >= 9 ?
+            numberElements[7] : DecimalFormat.PATTERN_EXPONENT;
+        perMill = numberElements.length >= 9 ?
+            numberElements[8].charAt(0) : '\u2030';
+        infinity  = numberElements.length >= 10 ?
+            numberElements[9] : "\u221e";
+        NaN = numberElements.length >= 11 ?
+            numberElements[10] : "\ufffd";
+        
+        // [NEW] Temporarily hard code; retrieve from resource later
+        plusSign  = DecimalFormat.PATTERN_PLUS_SIGN;
+        padEscape = DecimalFormat.PATTERN_PAD_ESCAPE;
+
+        currencySymbol = currencyElements[0];
+        intlCurrencySymbol = currencyElements[1];
+
+        // if the resource data specified the empty string as the monetary decimal
+        // separator, that means we should just use the regular separator as the
+        // monetary separator
+        if (currencyElements[2].length() == 0)
+            monetarySeparator = decimalSeparator;
+        else
+            monetarySeparator = currencyElements[2].charAt(0);
+    }
+
+    /**
+     * Read the default serializable fields, then if <code>serialVersionOnStream</code>
+     * is less than 1, initialize <code>monetarySeparator</code> to be
+     * the same as <code>decimalSeparator</code> and <code>exponential</code>
+     * to be 'E'.
+     * Finally, set serialVersionOnStream back to the maximum allowed value so that
+     * default serialization will work properly if this object is streamed out again.
+     *
+     * @since JDK 1.1.6
+     */
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+        stream.defaultReadObject();
+        if (serialVersionOnStream < 1) {
+            // Didn't have monetarySeparator or exponential field;
+            // use defaults.
+            monetarySeparator = decimalSeparator;
+            exponential = 'E';
+        }
+        if (serialVersionOnStream < 2) { // [NEW]
+            padEscape = DecimalFormat.PATTERN_PAD_ESCAPE;
+            plusSign = DecimalFormat.PATTERN_PLUS_SIGN;
+            exponentSeparator = String.valueOf(exponential);
+            // Although we read the exponential field on stream to create the
+            // exponentSeparator, we don't do the reverse, since scientific
+            // notation isn't supported by the old classes, even though the
+            // symbol is there.
+        }
+        serialVersionOnStream = currentSerialVersion;
+    }
+
+    /**
+     * Character used for zero.
+     *
+     * @serial
+     * @see #getZeroDigit
+     */
+    private  char    zeroDigit;
+
+    /**
+     * Character used for thousands separator.
+     *
+     * @serial
+     * @see #getGroupingSeparator
+     */
+    private  char    groupingSeparator;
+
+    /**
+     * Character used for decimal sign.
+     *
+     * @serial
+     * @see #getDecimalSeparator
+     */
+    private  char    decimalSeparator;
+
+    /**
+     * Character used for mille percent sign.
+     *
+     * @serial
+     * @see #getPerMill
+     */
+    private  char    perMill;
+
+    /**
+     * Character used for percent sign.
+     * @serial
+     * @see #getPercent
+     */
+    private  char    percent;
+
+    /**
+     * Character used for a digit in a pattern.
+     *
+     * @serial
+     * @see #getDigit
+     */
+    private  char    digit;
+
+    /**
+     * Character used to separate positive and negative subpatterns
+     * in a pattern.
+     *
+     * @serial
+     * @see #getPatternSeparator
+     */
+    private  char    patternSeparator;
+
+    /**
+     * Character used to represent infinity.
+     * @serial
+     * @see #getInfinity
+     */
+    private  String  infinity;
+
+    /**
+     * Character used to represent NaN.
+     * @serial
+     * @see #getNaN
+     */
+    private  String  NaN;
+
+    /**
+     * Character used to represent minus sign.
+     * @serial
+     * @see #getMinusSign
+     */
+    private  char    minusSign;
+
+    /**
+     * String denoting the local currency, e.g. "$".
+     * @serial
+     * @see #getCurrencySymbol
+     */
+    private  String  currencySymbol;
+
+    /**
+     * International string denoting the local currency, e.g. "USD".
+     * @serial
+     * @see #getInternationalCurrencySymbol
+     */
+    private  String  intlCurrencySymbol;
+
+    /**
+     * The decimal separator used when formatting currency values.
+     * @serial
+     * @since JDK 1.1.6
+     * @see #getMonetaryDecimalSeparator
+     */
+    private  char    monetarySeparator; // Field new in JDK 1.1.6
+
+    /**
+     * The character used to distinguish the exponent in a number formatted
+     * in exponential notation, e.g. 'E' for a number such as "1.23E45".
+     * <p>
+     * Note that this field has been superseded by <code>exponentSeparator</code>.
+     * It is retained for backward compatibility.
+     *
+     * @serial
+     * @since JDK 1.1.6
+     */
+    private  char    exponential;       // Field new in JDK 1.1.6
+
+    /**
+     * The string used to separate the mantissa from the exponent.
+     * Examples: "x10^" for 1.23x10^4, "E" for 1.23E4.
+     * <p>
+     * Note that this supersedes the <code>exponential</code> field.
+     *
+     * @serial
+     * @since AlphaWorks
+     */
+    private String exponentSeparator;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The character used to indicate a padding character in a format,
+     * e.g., '*' in a pattern such as "$*_#,##0.00".
+     * @serial
+     * @since AlphaWorks
+     */
+    private char padEscape;
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * The character used to indicate a plus sign.
+     * @serial
+     * @since AlphaWorks
+     */
+    private char plusSign;
+
+    // Proclaim JDK 1.1 FCS compatibility
+    static final long serialVersionUID = 5772796243397350300L;
+
+    // The internal serial version which says which version was written
+    // - 0 (default) for version up to JDK 1.1.5
+    // - 1 for version from JDK 1.1.6, which includes two new fields:
+    //     monetarySeparator and exponential.
+    // - 2 for version from AlphaWorks, which includes 3 new fields:
+    //     padEscape, exponentSeparator, and plusSign.
+    private static final int currentSerialVersion = 2;
+    
+    /**
+     * Describes the version of <code>DecimalFormatSymbols</code> present on the stream.
+     * Possible values are:
+     * <ul>
+     * <li><b>0</b> (or uninitialized): versions prior to JDK 1.1.6.
+     *
+     * <li><b>1</b>: Versions written by JDK 1.1.6 or later, which includes
+     *      two new fields: <code>monetarySeparator</code> and <code>exponential</code>.
+     * <li><b>2</b>: Version for AlphaWorks.  Adds padEscape, exponentSeparator,
+     *      and plusSign.
+     * </ul>
+     * When streaming out a <code>DecimalFormatSymbols</code>, the most recent format
+     * (corresponding to the highest allowable <code>serialVersionOnStream</code>)
+     * is always written.
+     *
+     * @serial
+     * @since JDK 1.1.6
+     */
+    private int serialVersionOnStream = currentSerialVersion;
+
+    /**
+     * cache to hold the NumberElements and the CurrencyElements
+     * of a Locale.
+     */
+    private static final Hashtable cachedLocaleData = new Hashtable(3);
+}
diff --git a/src/com/ibm/text/DecompData.java b/src/com/ibm/text/DecompData.java
new file mode 100755
index 0000000..1f09e4f
--- /dev/null
+++ b/src/com/ibm/text/DecompData.java
@@ -0,0 +1,745 @@
+/*
+************************************************************************
+*   Copyright (c) 1997-2000, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+************************************************************************
+* > THIS FILE WAS MACHINE GENERATED <
+* >       DO NOT EDIT BY HAND       <
+* >      RUN TOOL TO REGENERATE     <
+* Tool: com.ibm.text.Normalizer
+* Creation date: Tue Jul 18 11:05:28 PDT 2000
+*/
+
+package com.ibm.text;
+import com.ibm.util.*;
+
+class DecompData {
+    static final int MAX_CANONICAL = 21754;
+    static final int MAX_COMPAT = 11177;
+    static final int DECOMP_MASK = 32767;
+    static final int DECOMP_RECURSE = 32768;
+    static final short BASE = 0;
+
+    static final CompactCharArray offsets = new CompactCharArray(
+        "\000\u0800\uA5A5\005\000 @`\u0080\u00A0\u00C0\u00E0\000\u0100\u0120\u0140"+
+        "\u0160\u0180\000\000\000\u01A0\u01C0\u01E0\000\000\u0200\u0220\u0240\u0260"+
+        "\u0280\u02A0\u02C0\u02E0\u0300\u0320\000\000\u0340\u0360\uA5A5\004\000"+
+        "\u0380\uA5A5\004\000\u03A0\000\u03C0\000\000\u03E0\uA5A5\022\000\u0400"+
+        "\u0420\000\000\000\u0440\000\000\u0460\u0480\uA5A5\007\000\u04A0\000\u04C0"+
+        "\000\u04E0\000\000\000\u0500\000\000\000\u0520\000\000\000\u0540\000\000"+
+        "\000\u0560\000\000\u0580\000\000\000\u05A0\u05C0\000\u05E0\000\u0600\u0620"+
+        "\u0640\u0660\000\000\000\u0680\uA5A5n\000\u06A0\u06C0\u06E0\u0700\u0720"+
+        "\u0740\u0760\u0780\u07A0\u07C0\u07E0\u0800\u0820\u0840\u0860\u0880\u08A0"+
+        "\u08C0\u08E0\u0900\u0920\u0940\000\000\u0960\u0980\u09A0\u09C0\u09E0\u0A00"+
+        "\u0A20\000\u0A40\u0A60\u0A80\u0AA0\u0AC0\u0AE0\000\u0B00\000\u0B20\uA5A5"+
+        "\011\000\u0B40\u0B60\u0B80\u0BA0\u0BC0\uA5A5L\000\u0BE0\000\000\u0C00"+
+        "\u0C20\u0C40\u0C60\u0C80\u0CA0\u0CC0\u0CE0\000\u0D00\u0D20\u0D40\u0D60"+
+        "\u0D80\u0DA0\u0DC0\u0DE0\000\u0E00\u0E20\u0E40\u0E60\000\000\000\u0E80"+
+        "\u0EA0\u0EC0\u0EE0\u0F00\u0F20\u0F40\u0F60\u0F80\u0FA0\u0FC0\u0FE0\u1000"+
+        "\u1020\u1040\u1060\uA5A5\u0628\000\u1080\u10A0\u10C0\u10E0\u1100\u1120"+
+        "\u1140\u1160\u1180\u11A0\uA5A5\006\000\u11C0\u11E0\u1200\u1220\u1240\u1260"+
+        "\u1280\u12A0\u12C0\u12E0\u1300\u1320\u1340\u1360\u1380\u13A0\u13C0\u13E0"+
+        "\u1400\u1420\u1440\u1460\u1480\u14A0\000\u14C0\u14E0\u1500\u1520\u1540"+
+        "\u1560\u1580\u15A0\u15C0\u15E0\u1600\u1620\u1640\u1660\u1680"
+        ,
+        "\000\u16A0\uA5A5 \000\005\uA5A5\007\000\012\000\021\uA5A5\004\000\026"+
+        "\000\000\035!&-\000\00029=\000CO[\000\u2BAE\u2BB6\u2BBE\u2BC6\u2BCE\u2BD6"+
+        "\000\u2BDE\u2BE6\u2BEE\u2BF6\u2BFE\u2C06\u2C0E\u2C16\u2C1E\000\u2C26\u2C2E"+
+        "\u2C36\u2C3E\u2C46\u2C4E\000\000\u2C56\u2C5E\u2C66\u2C6E\u2C76\000\000"+
+        "\u2C7E\u2C86\u2C8E\u2C96\u2C9E\u2CA6\000\u2CAE\u2CB6\u2CBE\u2CC6\u2CCE"+
+        "\u2CD6\u2CDE\u2CE6\u2CEE\000\u2CF6\u2CFE\u2D06\u2D0E\u2D16\u2D1E\000\000"+
+        "\u2D26\u2D2E\u2D36\u2D3E\u2D46\000\u2D4E\u2D56\u2D5E\u2D66\u2D6E\u2D76"+
+        "\u2D7E\u2D86\u2D8E\u2D96\u2D9E\u2DA6\u2DAE\u2DB6\u2DBE\u2DC6\u2DCE\000"+
+        "\000\u2DD6\u2DDE\u2DE6\u2DEE\u2DF6\u2DFE\u2E06\u2E0E\u2E16\u2E1E\u2E26"+
+        "\u2E2E\u2E36\u2E3E\u2E46\u2E4E\u2E56\u2E5E\u2E66\u2E6E\000\000\u2E76\u2E7E"+
+        "\u2E86\u2E8E\u2E96\u2E9E\u2EA6\u2EAE\u2EB6\000fn\u2EBE\u2EC6\u2ECE\u2ED6"+
+        "\000\u2EDE\u2EE6\u2EEE\u2EF6\u2EFE\u2F06v~\000\000\u2F0E\u2F16\u2F1E\u2F26"+
+        "\u2F2E\u2F36\u0086\000\000\u2F3E\u2F46\u2F4E\u2F56\u2F5E\u2F66\000\000"+
+        "\u2F6E\u2F76\u2F7E\u2F86\u2F8E\u2F96\u2F9E\u2FA6\u2FAE\u2FB6\u2FBE\u2FC6"+
+        "\u2FCE\u2FD6\u2FDE\u2FE6\u2FEE\u2FF6\000\000\u2FFE\u3006\u300E\u3016\u301E"+
+        "\u3026\u302E\u3036\u303E\u3046\u304E\u3056\u305E\u3066\u306E\u3076\u307E"+
+        "\u3086\u308E\u3096\u309E\u30A6\u30AE\u008D\u30B6\u30BE\uA5A5\015\000\u30C6"+
+        "\u30CE\uA5A5\023\000\u0093\u009F\u00AB\u00B6\u00BE\u00C6\u00CE\u00D6\u00DE"+
+        "\u30D6\u30DE\u30E6\u30EE\u30F6\u30FE\u3106\u310E\u3117\u3123\u312F\u313B"+
+        "\u3147\u3153\u315F\u316B\000\u3177\u3183\u318F\u319B\u31A6\u31AE\000\000"+
+        "\u31B6\u31BE\u31C6\u31CE\u31D6\u31DE\u31E7\u31F3\u31FE\u3206\u320E\u0092"+
+        "\u009E\u00AA\u3216\u321E\000\000\u3226\u322E\u3237\u3243\u324E\u3256\u325E"+
+        "\u3266\u326E\u3276\u327E\u3286\u328E\u3296\u329E\u32A6\u32AE\u32B6\u32BE"+
+        "\u32C6\u32CE\u32D6\u32DE\u32E6\u32EE\u32F6\u32FE\u3306\u330E\u3316\u331E"+
+        "\u3326\u332E\u3336\u333E\u3346\000\000\u334E\u3356\uA5A5\006\000\u335E"+
+        "\u3366\u336E\u3376\u337F\u338B\u3397\u33A3\u33AE\u33B6\u33BF\u33CB\u33D6"+
+        "\u33DE\uA5A5\034\000\u00E5\u00E9q\u00ED\u00F1\u00F5\u00F9\u00FD\u0101"+
+        "\uA5A5\037\000\u0106\u010E\u0116\u011E\u0126\u012E\000\000\u0135}\u008D"+
+        "\u0139\u013D\uA5A5\033\000\u33E5\u33E9\000\u33ED\u33F2\uA5A5/\000\u33F9"+
+        "\uA5A5\005\000\u0142\000\000\000\u33FD\uA5A5\005\000&\uB402\u340A\u3411"+
+        "\u3416\u341E\u3426\000\u342E\000\u3436\u343E\u3447\uA5A5\031\000\u3452"+
+        "\u345A\u3462\u346A\u3472\u347A\u3483\uA5A5\031\000\u348E\u3496\u349E\u34A6"+
+        "\u34AE\000\u0149\u014D\u0151\uB4B6\uB4BE\u0155\u0159\uA5A5\031\000\u015D"+
+        "\u0161\u0165\uA5A5\015\000\u34C6\u34CE\000\u34D6\000\000\000\u34DE\uA5A5"+
+        "\004\000\u34E6\u34EE\u34F6\uA5A5\012\000\u34FE\uA5A5\037\000\u3506\uA5A5"+
+        "\026\000\u350E\u3516\000\u351E\000\000\000\u3526\uA5A5\004\000\u352E\u3536"+
+        "\u353E\uA5A5\027\000\u3546\u354E\uA5A5\011\000\u3556\u355E\uA5A5\015\000"+
+        "\u3566\u356E\u3576\u357E\000\000\u3586\u358E\000\000\u3596\u359E\u35A6"+
+        "\u35AE\u35B6\u35BE\000\000\u35C6\u35CE\u35D6\u35DE\u35E6\u35EE\000\000"+
+        "\u35F6\u35FE\u3606\u360E\u3616\u361E\u3626\u362E\u3636\u363E\u3646\u364E"+
+        "\000\000\u3656\u365E\uA5A5\015\000\u016A\uA5A5\032\000\u3666\u366E\u3676"+
+        "\u367E\u3686\uA5A5.\000\u0172\u017A\u0182\u018A\uA5A5\007\000\u368E\000"+
+        "\u3696\uA5A5\020\000\u369E\uA5A5\025\000\u36A6\uA5A5\007\000\u36AE\000"+
+        "\000\u36B6\uA5A5#\000\u36BE\u36C6\u36CE\u36D6\u36DE\u36E6\u36EE\u36F6"+
+        "\uA5A5\013\000\u36FE\u3706\uA5A5\017\000\u370E\u3716\000\u371E\uA5A5\023"+
+        "\000\u3726\000\000\u372E\uA5A5\042\000\u3736\u373E\u3746\000\000\u374E"+
+        "\uA5A5\011\000\u3756\000\000\u375E\u3766\uA5A5\017\000\u376E\u3776\uA5A5"+
+        "\026\000\u377E\uA5A5\025\000\u3786\u378E\u3796\uA5A5\033\000\u379E\uA5A5"+
+        "\027\000\u37A6\uA5A5\006\000\u37AE\u37B6\000\u37BE\u37C7\uA5A5\036\000"+
+        "\u37D2\u37DA\u37E2\uA5A5-\000\u37EA\000\u37F2\u37FB\u3806\uA5A5\024\000"+
+        "\u0192\uA5A5\037\000\u019A\uA5A5(\000\u01A2\u01AA\uA5A5\016\000\u01B1"+
+        "\uA5A5\026\000\u380E\uA5A5\011\000\u3816\uA5A5\004\000\u381E\uA5A5\004"+
+        "\000\u3826\uA5A5\004\000\u382E\uA5A5\014\000\u3836\uA5A5\011\000\u383E"+
+        "\000\u3846\u384E\u01B7\u3856\u01C3\uA5A5\007\000\u385E\uA5A5\021\000\u3866"+
+        "\uA5A5\011\000\u386E\uA5A5\004\000\u3876\uA5A5\004\000\u387E\uA5A5\004"+
+        "\000\u3886\uA5A5\014\000\u388E\uA5A5\014\000\u3896\uA5A5\031\000\u389E"+
+        "\u38A6\u38AE\u38B6\u38BE\u38C6\u38CE\u38D6\u38DF\u38EB\u38F6\u38FE\u3906"+
+        "\u390E\u3916\u391E\u3926\u392E\u3936\u393E\u3947\u3953\u395F\u396B\u3976"+
+        "\u397E\u3986\u398E\u3997\u39A3\u39AE\u39B6\u39BE\u39C6\u39CE\u39D6\u39DE"+
+        "\u39E6\u39EE\u39F6\u39FE\u3A06\u3A0E\u3A16\u3A1E\u3A26\u3A2F\u3A3B\u3A46"+
+        "\u3A4E\u3A56\u3A5E\u3A66\u3A6E\u3A76\u3A7E\u3A87\u3A93\u3A9E\u3AA6\u3AAE"+
+        "\u3AB6\u3ABE\u3AC6\u3ACE\u3AD6\u3ADE\u3AE6\u3AEE\u3AF6\u3AFE\u3B06\u3B0E"+
+        "\u3B16\u3B1E\u3B26\u3B2F\u3B3B\u3B47\u3B53\u3B5F\u3B6B\u3B77\u3B83\u3B8E"+
+        "\u3B96\u3B9E\u3BA6\u3BAE\u3BB6\u3BBE\u3BC6\u3BCF\u3BDB\u3BE6\u3BEE\u3BF6"+
+        "\u3BFE\u3C06\u3C0E\u3C17\u3C23\u3C2F\u3C3B\u3C47\u3C53\u3C5E\u3C66\u3C6E"+
+        "\u3C76\u3C7E\u3C86\u3C8E\u3C96\u3C9E\u3CA6\u3CAE\u3CB6\u3CBE\u3CC6\u3CCF"+
+        "\u3CDB\u3CE7\u3CF3\u3CFE\u3D06\u3D0E\u3D16\u3D1E\u3D26\u3D2E\u3D36\u3D3E"+
+        "\u3D46\u3D4E\u3D56\u3D5E\u3D66\u3D6E\u3D76\u3D7E\u3D86\u3D8E\u3D96\u3D9E"+
+        "\u3DA6\u3DAE\u3DB6\u3DBE\u3DC6\u3DCE\u3DD6\u3DDE\u3DE6\u01CE\uBDEE\uA5A5"+
+        "\004\000\u3DF6\u3DFE\u3E06\u3E0E\u3E17\u3E23\u3E2F\u3E3B\u3E47\u3E53\u3E5F"+
+        "\u3E6B\u3E77\u3E83\u3E8F\u3E9B\u3EA7\u3EB3\u3EBF\u3ECB\u3ED7\u3EE3\u3EEF"+
+        "\u3EFB\u3F06\u3F0E\u3F16\u3F1E\u3F26\u3F2E\u3F37\u3F43\u3F4F\u3F5B\u3F67"+
+        "\u3F73\u3F7F\u3F8B\u3F97\u3FA3\u3FAE\u3FB6\u3FBE\u3FC6\u3FCE\u3FD6\u3FDE"+
+        "\u3FE6\u3FEF\u3FFB\u4007\u4013\u401F\u402B\u4037\u4043\u404F\u405B\u4067"+
+        "\u4073\u407F\u408B\u4097\u40A3\u40AF\u40BB\u40C7\u40D3\u40DE\u40E6\u40EE"+
+        "\u40F6\u40FF\u410B\u4117\u4123\u412F\u413B\u4147\u4153\u415F\u416B\u4176"+
+        "\u417E\u4186\u418E\u4196\u419E\u41A6\u41AE\uA5A5\006\000\u41B6\u41BE\u41C7"+
+        "\u41D3\u41DF\u41EB\u41F7\u4203\u420E\u4216\u421F\u422B\u4237\u4243\u424F"+
+        "\u425B\u4266\u426E\u4277\u4283\u428F\u429B\000\000\u42A6\u42AE\u42B7\u42C3"+
+        "\u42CF\u42DB\000\000\u42E6\u42EE\u42F7\u4303\u430F\u431B\u4327\u4333\u433E"+
+        "\u4346\u434F\u435B\u4367\u4373\u437F\u438B\u4396\u439E\u43A7\u43B3\u43BF"+
+        "\u43CB\u43D7\u43E3\u43EE\u43F6\u43FF\u440B\u4417\u4423\u442F\u443B\u4446"+
+        "\u444E\u4457\u4463\u446F\u447B\000\000\u4486\u448E\u4497\u44A3\u44AF\u44BB"+
+        "\000\000\u44C6\u44CE\u44D7\u44E3\u44EF\u44FB\u4507\u4513\000\u451E\000"+
+        "\u4527\000\u4533\000\u453F\u454A\u4552\u455B\u4567\u4573\u457F\u458B\u4597"+
+        "\u45A2\u45AA\u45B3\u45BF\u45CB\u45D7\u45E3\u45EF\u45FA\u4602\u460A\u4612"+
+        "\u461A\u4622\u462A\u4632\u463A\u4642\u464A\u4652\u465A\u4662\000\000\u466B"+
+        "\u4677\u4680\u4694\u46A8\u46BC\u46D0\u46E4\u46FB\u4707\u4710\u4724\u4738"+
+        "\u474C\u4760\u4774\u478B\u4797\u47A0\u47B4\u47C8\u47DC\u47F0\u4804\u481B"+
+        "\u4827\u4830\u4844\u4858\u486C\u4880\u4894\u48AB\u48B7\u48C0\u48D4\u48E8"+
+        "\u48FC\u4910\u4924\u493B\u4947\u4950\u4964\u4978\u498C\u49A0\u49B4\u49CA"+
+        "\u49D2\u49DB\u49E6\u49EF\000\u49FA\u4A03\u4A0E\u4A16\u4A1E\u4A26\u4A2E"+
+        "\u01D6\u4A35\u01D6\u01DE\uCA3A\u4A43\u4A4E\u4A57\000\u4A62\u4A6B\u4A76"+
+        "\u4A7E\u4A86\u4A8E\u4A96\uCA9E\uCAA6\uCAAE\u4AB6\u4ABE\u4AC7\u4AD3\000"+
+        "\000\u4ADE\u4AE7\u4AF2\u4AFA\u4B02\u4B0A\000\uCB12\uCB1A\uCB22\u4B2A\u4B32"+
+        "\u4B3B\u4B47\u4B52\u4B5A\u4B62\u4B6B\u4B76\u4B7E\u4B86\u4B8E\u4B96\uCB9E"+
+        "\uCBA6\u4BAD\000\000\u4BB3\u4BBE\u4BC7\000\u4BD2\u4BDB\u4BE6\u4BEE\u4BF6"+
+        "\u4BFE\u4C06\uCC0D\u01E6\000\uCC11\uCC15\uA5A5\011\005\uA5A5\006\000\u01ED"+
+        "\uA5A5\005\000\u01F2\uA5A5\014\000\u01F9\u01FE\u01FB\uA5A5\010\000\005"+
+        "\000\000\000\u0206\u020F\000\u021A\u0223\uA5A5\004\000\u022E\000\u0236"+
+        "\uA5A5\011\000\u023E\u0246\uA5A5&\000\u024D\000\000\000I\u0251\u0255\u0259"+
+        "\u025D\u0261\u0265\u0269\u026D\u0271\u0275\u0089\u024D9\035!I\u0251\u0255"+
+        "\u0259\u025D\u0261\u0265\u0269\u026D\u0271\u0275\uA5A5\031\000\u027A\uA5A5"+
+        "\027\000\u0283\u028F\u0299\u029E\000\u02A7\u02B3\u02BD\000\u02C2\u02C9"+
+        "\u02CD\u02CD\u02CD\u00E5\u02D1eeu}\000\u00CD\u02D6\000\000\u02DD\u02E1"+
+        "\u0279\u0279\u0279\000\000\u02E6\u02EF\u02FA\000\u0095\000\u4C19\000\u0095"+
+        "\000\u4C1D\u4C22\u0301\u0299\000\u0305\u02F1\u02C5\000\u02E9=\u0309\u030D"+
+        "\u0311\u0315m\uA5A5\031\000\u031B\u0327\u0333\u033F\u034B\u0357\u0363"+
+        "\u036F\u037B\u0387\u0393\u039FBe\u03AA\u03B3\u03BE\u03C1\u03C6\u03CF\u03D8"+
+        "\u03EE\u03F1\u03F6\u03FFu\u0299\u0091\u02E9m\u040A\u0413\u041E\u0421\u0426"+
+        "\u042F\u0438\u044E\u0139\u0456\u045F}\u0289\u00A9\u0469\uA5A5\032\000"+
+        "\u4C2A\u4C32\uA5A5\022\000\u4C3A\uA5A5\036\000\u4C42\u4C4A\u4C52\uA5A5"+
+        "\024\000\u4C5A\uA5A5\004\000\u4C62\000\000\u4C6A\uA5A5\027\000\u4C72\000"+
+        "\u4C7A\uA5A5\005\000\u046E\u0477\000\u0482\u048B\uA5A5\020\000\u4C82\000"+
+        "\000\u4C8A\000\000\u4C92\000\u4C9A\uA5A5\026\000\u4CA2\000\u4CAA\uA5A5"+
+        "\012\000\u4CB2\u4CBA\u4CC2\u4CCA\u4CD2\000\000\u4CDA\u4CE2\000\000\u4CEA"+
+        "\u4CF2\uA5A5\006\000\u4CFA\u4D02\000\000\u4D0A\u4D12\000\000\u4D1A\u4D22"+
+        "\uA5A5\042\000\u4D2A\u4D32\u4D3A\u4D42\uA5A5\020\000\u4D4A\u4D52\u4D5A"+
+        "\u4D62\uA5A5\006\000\u4D6A\u4D72\u4D7A\u4D82\uA5A5\033\000\u4D89\u4D8D"+
+        "\uA5A5\025\0009\035!I\u0251\u0255\u0259\u025D\u0261\u0496\u049E\u04A6"+
+        "\u04AE\u04B6\u04BE\u04C6\u04CE\u04D6\u04DE\u04E6\u04EF\u04FB\u0507\u0513"+
+        "\u051F\u052B\u0537\u0543\u054F\u0558\u056C\u0580\u0594\u05A8\u05BC\u05D0"+
+        "\u05E4\u05F8\u060C\u0620\u0636\u063E\u0646\u064E\u0656\u065E\u0666\u066E"+
+        "\u0676\u067F\u068B\u0697\u06A3\u06AF\u06BB\u06C7\u06D3\u06DF\u06EB\u06F7"+
+        "\u0703\u070F\u071B\u0727\u0733\u073F\u074B\u0757\u0763\u076F\u077B\u0787"+
+        "\u0793\u079F\u07AB\u07B7\u07C3\u07CF\u07DB\u07E7\u07F3\u07FF\u080B\u0817"+
+        "\u0823\u082F\u0839\u0301\u0299\u0091\u02F1\u02C5\u083D\u02CDei\u0841u"+
+        "\u02E9\u00CD\u0845\u02DD\u02E1\u0279\u02E5\u02ED\u0849\u03C1\u084D\u03F1"+
+        "\u0851\u0095\021\u0711\u0289\u00A9\u0305\u0741\u02C9\u00E5mq\u077D}\u0469"+
+        "\u0089=\u07B9\u07C5\u00ED\u008D\u07E9\u02B9\u0421\u00FD\u0139\u0101\u00A1"+
+        "\u024D\uA5A54\000\u0855\uA5A5\023\000\u0859\uA5A5\014\000\u085D\u0861"+
+        "\u0865\u0869\u086D\u0871\u0875\u0879\u087D\u0881\u0885\u0889\u088D\u0891"+
+        "\u0895\u0899\u089D\u08A1\u08A5\u08A9\u08AD\u08B1\u08B5\u08B9\u08BD\u08C1"+
+        "\u08C5\u08C9\u08CD\u08D1\u08D5\u08D9\u08DD\u08E1\u08E5\u08E9\u08ED\u08F1"+
+        "\u08F5\u08F9\u08FD\u0901\u0905\u0909\u090D\u0911\u0915\u0919\u091D\u0921"+
+        "\u0925\u0929\u092D\u0931\u0935\u0939\u093D\u0941\u0945\u0949\u094D\u0951"+
+        "\u0955\u0959\u095D\u0961\u0965\u0969\u096D\u0971\u0975\u0979\u097D\u0981"+
+        "\u0985\u0989\u098D\u0991\u0995\u0999\u099D\u09A1\u09A5\u09A9\u09AD\u09B1"+
+        "\u09B5\u09B9\u09BD\u09C1\u09C5\u09C9\u09CD\u09D1\u09D5\u09D9\u09DD\u09E1"+
+        "\u09E5\u09E9\u09ED\u09F1\u09F5\u09F9\u09FD\u0A01\u0A05\u0A09\u0A0D\u0A11"+
+        "\u0A15\u0A19\u0A1D\u0A21\u0A25\u0A29\u0A2D\u0A31\u0A35\u0A39\u0A3D\u0A41"+
+        "\u0A45\u0A49\u0A4D\u0A51\u0A55\u0A59\u0A5D\u0A61\u0A65\u0A69\u0A6D\u0A71"+
+        "\u0A75\u0A79\u0A7D\u0A81\u0A85\u0A89\u0A8D\u0A91\u0A95\u0A99\u0A9D\u0AA1"+
+        "\u0AA5\u0AA9\u0AAD\u0AB1\u0AB5\u0AB9\u0ABD\u0AC1\u0AC5\u0AC9\u0ACD\u0AD1"+
+        "\u0AD5\u0AD9\u0ADD\u0AE1\u0AE5\u0AE9\u0AED\u0AF1\u0AF5\u0AF9\u0AFD\u0B01"+
+        "\u0B05\u0B09\u0B0D\u0B11\u0B15\u0B19\u0B1D\u0B21\u0B25\u0B29\u0B2D\u0B31"+
+        "\u0B35\u0B39\u0B3D\u0B41\u0B45\u0B49\u0B4D\u0B51\u0B55\u0B59\u0B5D\u0B61"+
+        "\u0B65\u0B69\u0B6D\u0B71\u0B75\u0B79\u0B7D\u0B81\u0B85\u0B89\u0B8D\u0B91"+
+        "\u0B95\u0B99\u0B9D\u0BA1\u0BA5\u0BA9\u0BAD\u0BB1\uA5A5\012\000\005\uA5A5"+
+        "5\000\u0BB5\000\u08B9\u0BB9\u0BBD\uA5A5\021\000\u4D92\000\u4D9A\000\u4DA2"+
+        "\000\u4DAA\000\u4DB2\000\u4DBA\000\u4DC2\000\u4DCA\000\u4DD2\000\u4DDA"+
+        "\000\u4DE2\000\u4DEA\000\000\u4DF2\000\u4DFA\000\u4E02\uA5A5\006\000\u4E0A"+
+        "\u4E12\000\u4E1A\u4E22\000\u4E2A\u4E32\000\u4E3A\u4E42\000\u4E4A\u4E52"+
+        "\uA5A5\026\000\u4E5A\uA5A5\006\000\u0BC2\u0BCA\000\u4E62\uA5A5\015\000"+
+        "\u4E6A\000\u4E72\000\u4E7A\000\u4E82\000\u4E8A\000\u4E92\000\u4E9A\000"+
+        "\u4EA2\000\u4EAA\000\u4EB2\000\u4EBA\000\u4EC2\000\000\u4ECA\000\u4ED2"+
+        "\000\u4EDA\uA5A5\006\000\u4EE2\u4EEA\000\u4EF2\u4EFA\000\u4F02\u4F0A\000"+
+        "\u4F12\u4F1A\000\u4F22\u4F2A\uA5A5\026\000\u4F32\000\000\u4F3A\u4F42\u4F4A"+
+        "\u4F52\000\000\000\u4F5A\uA5A5\022\000\u0BD1\u0BD5\u0BD9\u0BDD\u0BE1\u0BE5"+
+        "\u0BE9\u0BED\u0BF1\u0BF5\u0BF9\u0BFD\u0C01\u0C05\u0C09\u0C0D\u0C11\u0C15"+
+        "\u0C19\u0C1D\u0C21\u0C25\u0C29\u0C2D\u0C31\u0C35\u0C39\u0C3D\u0C41\u0C45"+
+        "\u0C49\u0C4D\u0C51\u0C55\u0C59\u0C5D\u0C61\u0C65\u0C69\u0C6D\u0C71\u0C75"+
+        "\u0C79\u0C7D\u0C81\u0C85\u0C89\u0C8D\u0C91\u0C95\u0C99\u0C9D\u0CA1\u0CA5"+
+        "\u0CA9\u0CAD\u0CB1\u0CB5\u0CB9\u0CBD\u0CC1\u0CC5\u0CC9\u0CCD\u0CD1\u0CD5"+
+        "\u0CD9\u0CDD\u0CE1\u0CE5\u0CE9\u0CED\u0CF1\u0CF5\u0CF9\u0CFD\u0D01\u0D05"+
+        "\u0D09\u0D0D\u0D11\u0D15\u0D19\u0D1D\u0D21\u0D25\u0D29\u0D2D\u0D31\u0D35"+
+        "\u0D39\u0D3D\u0D41\u0D45\000\000\000\u085D\u0875\u0D49\u0D4D\u0D51\u0D55"+
+        "\u0D59\u0D5D\u086D\u0D61\u0D65\u0D69\u0D6D\u087D\u0D73\u0D7F\u0D8B\u0D97"+
+        "\u0DA3\u0DAF\u0DBB\u0DC7\u0DD3\u0DDF\u0DEB\u0DF7\u0E03\u0E0F\u0E18\u0E2C"+
+        "\u0E40\u0E54\u0E68\u0E7C\u0E90\u0EA4\u0EB8\u0ECC\u0EE0\u0EF4\u0F08\u0F1C"+
+        "\u0F30\000\000\000\u0F47\u0F53\u0F5F\u0F6B\u0F77\u0F83\u0F8F\u0F9B\u0FA7"+
+        "\u0FB3\u0FBF\u0FCB\u0FD7\u0FE3\u0FEF\u0FFB\u1007\u1013\u101F\u102B\u1037"+
+        "\u1043\u104F\u105B\u1067\u1073\u107F\u108B\u1097\u10A3\u10AF\u10BB\u10C7"+
+        "\u10D3\u10DF\u10EB\uA5A5\034\000\u0BD1\u0BDD\u0BE9\u0BF1\u0C11\u0C15\u0C21"+
+        "\u0C29\u0C2D\u0C35\u0C39\u0C3D\u0C41\u0C45\u0E1E\u0E32\u0E46\u0E5A\u0E6E"+
+        "\u0E82\u0E96\u0EAA\u0EBE\u0ED2\u0EE6\u0EFA\u0F0E\u0C46\uA5A5\004\000\u085D"+
+        "\u0875\u0D49\u0D4D\u0F79\u0F85\u0F91\u0889\u0FA9\u08B9\u0981\u09B1\u09AD"+
+        "\u0985\u0AF5\u08D9\u0979\u1015\u1021\u102D\u1039\u1045\u1051\u105D\u1069"+
+        "\u10F5\u10F9\u08F1\u10FD\u1101\u1105\u1109\u110D\u10D5\u1111\u1115\u0D51"+
+        "\u0D55\u0D59\u1119\u111D\u1121\u1125\u108D\u1099\u10A5\u10B1\u10BD\u1129"+
+        "\uA5A5\017\000\u112E\u1136\u113E\u1146\u114E\u1156\u115E\u1166\u116E\u1177"+
+        "\u1183\u118F\uA5A5\004\000\u1199\u119D\u11A1\u11A5\u11A9\u11AD\u11B1\u11B5"+
+        "\u11B9\u11BD\u11C1\u11C5\u11C9\u11CD\u11D1\u11D5\u11D9\u11DD\u11E1\u11E5"+
+        "\u11E9\u11ED\u11F1\u11F5\u11F9\u11FD\u1201\u1205\u1209\u120D\u1211\u1215"+
+        "\u1219\u121D\u1221\u1225\u1229\u122D\u1231\u1235\u1239\u123D\u1241\u1245"+
+        "\u1249\u124D\u1251\000\u1254\u126C\u1280\u129B\u12A4\u12BF\u12CB\u12D4"+
+        "\u12F0\u1307\u1313\u131F\u1328\u133C\u1350\u1364\u1378\u138C\u13A0\u13B4"+
+        "\u13D2\u13D8\u13F4\u1410\u13E0\u1428\u1444\u1460\u1477\u1483\u148C\u14A0"+
+        "\u14B4\u14CC\u14E7\u14F3\u14FC\u1513\u151F\u143A\u152A\u1533\u153F\u1548"+
+        "\u1564\u1578\u1590\u15AC\u15C3\u15CF\u15D8\u15F4\u1608\u1627\u1630\u164B"+
+        "\u1654\u166B\u1674\u1688\u16A0\u16B4\u16CC\u16E2\u16E8\u1703\u170F\u1718"+
+        "\u172F\u173B\u1747\u1750\u1768\u177E\u1784\u17A3\u17AC\u13FC\u17C4\u17DB"+
+        "\u17E7\u17F0\u1806\u180C\u1820\u183A\u1840\u141B\u185E\u1866\u186E\u1876"+
+        "\u187E\u1886\u188E\u1896\u189E\u18A6\u18AF\u18BB\u18C7\u18D3\u18DF\u18EB"+
+        "\u18F7\u1903\u190F\u191B\u1927\u1933\u193F\u194B\u1957\u1963\u196E\u1976"+
+        "\u197F\u198A\u1992\uA5A5\004\000\u199A\u19A2\u19AA\u19B2\u19B8\u19CE\u19D6"+
+        "\u19DE\u19E6\u19EE\u19F6\u02FE\u19FE\u1A07\u1A10\u1A26\u1A2E\u1A36\u1A3E"+
+        "\u1A46\u1A4E\u1A56\u1A5F\u1A6B\u1A77\u1A83\u1A8E\u1A96\u1A9E\u1AA6\u1AAE"+
+        "\u1AB6\u1ABE\u1AC6\u1ACE\u1AD6\u1ADF\u1AEB\u1AE2\u1AF7\u1B03\u1B0F\u1B06"+
+        "\u1B1B\u1B27\u1B30\u1966\u1B47\u1B53\u1B5F\u1B6B\u1B74\u1B8C\u1BAA\u008A"+
+        "\u1BB2\u1BBA\u1BC2\u1BCA\u1BD2\u1BDA\u1BE2\u1BEA\u1BF2\u1BFA\u1C02\u1C0A"+
+        "\u1C12\u1C1A\u1C22\u1C2A\u1C30\u1C46\u1C4E\u1C56\u1C5C\u1C73\u1C7E\u1C86"+
+        "\u1C8E\u1C96\u1C9E\u1CA6\u1CAE\u1CB6\u1A92\u1CBE\u1CC7\u1CD2\u1CDA\u1CE3"+
+        "\u1CEF\u1CFA\u1D00\u1D17\u1D22\u1D2A\u1D32\u1D3A\000\000\u1D42\u1D4A\u1D52"+
+        "\u1D5A\u1D62\u1D6A\u1D72\u1D7A\u1D82\u1D8B\u1D97\u1DA3\u1DAF\u1DBB\u1DC7"+
+        "\u1DD3\u1DDF\u1DEB\u1DF7\u1E03\u1E0F\u1E1B\u1E27\u1E33\u1E3F\u1E4B\u1E57"+
+        "\u1E63\u1E6F\u1E7B\u1E87\000\u4F61\u4F65\u4F69\u4F6D\u4F71\u4F75\u4F79"+
+        "\u4F7D\u4F81\u4F85\u4F89\u4F8D\u4F91\u4F95\u4F99\u4F9D\u4FA1\u4FA5\u4FA9"+
+        "\u4FAD\u4FB1\u4FB5\u4FB9\u4FBD\u4FC1\u4FC5\u4FC9\u4FCD\u4FD1\u4FD5\u4FD9"+
+        "\u4FDD\u4FE1\u4FE5\u4FE9\u4FED\u4FF1\u4FF5\u4FF9\u4FFD\u5001\u5005\u5009"+
+        "\u500D\u5011\u5015\u5019\u501D\u5021\u5025\u5029\u502D\u5031\u5035\u5039"+
+        "\u503D\u5041\u5045\u5049\u504D\u5051\u5055\u5059\u505D\u5061\u5065\u5069"+
+        "\u506D\u5071\u5075\u5079\u507D\u5081\u5085\u5089\u508D\u5091\u5095\u5099"+
+        "\u509D\u50A1\u50A5\u50A9\u50AD\u50B1\u50B5\u50B9\u50BD\u50C1\u50C5\u50C9"+
+        "\u50CD\u50D1\u50D5\u50D9\u50DD\u50E1\u50E5\u50E9\u50ED\u50F1\u50F5\u50F9"+
+        "\u50FD\u5101\u5105\u5109\u510D\u5111\u5115\u5119\u511D\u5121\u5125\u5129"+
+        "\u512D\u5131\u5135\u5139\u513D\u5141\u5145\u5149\u514D\u5151\u5155\u5159"+
+        "\u515D\u5161\u5165\u5169\u516D\u5171\u5175\u5179\u517D\u5181\u5185\u5189"+
+        "\u518D\u5191\u5195\u5199\u519D\u51A1\u51A5\u51A9\u51AD\u51B1\u51B5\u51B9"+
+        "\u51BD\u51C1\u51C5\u51C9\u51CD\u51D1\u51D5\u51D9\u51DD\u51E1\u51E5\u51E9"+
+        "\u51ED\u51F1\u51F5\u51F9\u51FD\u5201\u5205\u5209\u520D\u5211\u5215\u5219"+
+        "\u521D\u5221\u5225\u5229\u522D\u5231\u5235\u5239\u523D\u5241\u5245\u5249"+
+        "\u524D\u5251\u5255\u5259\u525D\u5261\u5265\u5269\u526D\u5271\u5275\u5279"+
+        "\u527D\u5281\u5285\u5289\u528D\u5291\u5295\u5299\u529D\u52A1\u52A5\u52A9"+
+        "\u52AD\u52B1\u52B5\u52B9\u52BD\u52C1\u52C5\u52C9\u52CD\u52D1\u52D5\u52D9"+
+        "\u52DD\u52E1\u52E5\u52E9\u52ED\u52F1\u52F5\u52F9\u52FD\u5301\u5305\u5309"+
+        "\u530D\u5311\u5315\u5319\u531D\u5321\u5325\u5329\u532D\u5331\u5335\u5339"+
+        "\u533D\u5341\u5345\u5349\u534D\u5351\u5355\u5359\u535D\u5361\u5365\u5369"+
+        "\u536D\u5371\u5375\u5379\u537D\u5381\u5385\u5389\u538D\u5391\u5395\000"+
+        "\000\u5399\000\u539D\000\000\u53A1\u53A5\u53A9\u53AD\u53B1\u53B5\u53B9"+
+        "\u53BD\u53C1\u53C5\000\u53C9\000\u53CD\000\000\u53D1\u53D5\000\000\000"+
+        "\u53D9\u53DD\u53E1\u53E5\uA5A5\022\000\u1E92\u1E9A\u1EA2\u1E97\u1EAB\u1EB6"+
+        "\u1EB6\uA5A5\014\000\u1EBE\u1EC6\u1ECE\u1ED6\u1EDE\uA5A5\005\000\u53EA"+
+        "\000\u53F2\u1EE5\u0309\u0315\u1EE9\u1EED\u1EF1\u1EF5\u1EF9\u1EFD\u0265"+
+        "\u53FA\u5402\u540B\u5417\u5422\u542A\u5432\u543A\u5442\u544A\u5452\u545A"+
+        "\u5462\000\u546A\u5472\u547A\u5482\u548A\000\u5492\000\u549A\u54A2\000"+
+        "\u54AA\u54B2\000\u54BA\u54C2\u54CA\u54D2\u54DA\u54E2\u54EA\u54F2\u54FA"+
+        "\u1F02\u1F09\u1F09\uA5A5\004\u1F0D\uA5A5\004\u1F11\uA5A5\004\u1F15\uA5A5"+
+        "\004\u1F19\uA5A5\004\u1F1D\uA5A5\004\u1F21\uA5A5\004\u1F25\uA5A5\004\u1F29"+
+        "\uA5A5\004\u1F2D\uA5A5\004\u1F31\uA5A5\004\u1F35\uA5A5\004\u1F39\u1F3D"+
+        "\u1F3D\u1F41\u1F41\u1F45\u1F45\u1F49\u1F49\u1F4D\u1F4D\u1F51\u1F51\uA5A5"+
+        "\004\u1F55\uA5A5\004\u1F59\uA5A5\004\u1F5D\uA5A5\004\u1F61\u1F65\u1F65"+
+        "\uA5A5\004\u1F69\u1F6E\u1F6E\uA5A5\004\u1F75\uA5A5\004\u1F79\u1F7D\u1F7D"+
+        "\u1F82\u1F82\uA5A5!\000\uA5A5\004\u1F89\u0181\u0181\u1F8D\u1F8D\u1F91"+
+        "\u1F91\u0182\u1F95\u1F95\u1F99\u1F99\u1F9D\u1F9D\uA5A5\004\u1FA1\u1FA5"+
+        "\u1FA5\u1FAB\u1FAB\u1FB7\u1FB7\u1FC3\u1FC3\u1FCF\u1FCF\u1FDB\u1FDB\u1FE7"+
+        "\u1FE7\u1FF3\u1FF3\u1FF3\u1FFF\u1FFF\u1FFF\uA5A5\004\u2009\u200F\u201B"+
+        "\u2027\u1FFF\u2033\u203E\u2046\u204E\u2056\u205E\u2066\u206E\u2076\u207E"+
+        "\u2086\u208E\u2096\u209E\u20A6\u20AE\u20B6\u20BE\u20C6\u20C2\u20CE\u20D6"+
+        "\u20DE\u20E6\u20EE\u20F6\u20FE\u2106\u210E\u2116\u211E\u2126\u212E\u2136"+
+        "\u213E\u2146\u214E\u2156\u215E\u2166\u216E\u2176\u217E\u2186\u218E\u2196"+
+        "\u219E\u21A6\u21AE\u21B6\u21BE\u21C6\u21CE\u21D6\u21DE\u21E6\u21EE\u21F6"+
+        "\u21FE\u2206\u220E\u2216\u221E\u2226\u222E\u2236\u20CA\u20D2\u223E\u2246"+
+        "\u202E\u224E\u2256\u225E\u2266\u226E\u2276\u227E\u2286\u228E\u2296\u20BA"+
+        "\u229E\u22A6\u2232\u22AE\u229A\u22B6\u22BE\u22C6\u22CF\u22DB\u22E7\u22F3"+
+        "\u22FF\u230B\u2317\u2323\u2027\u232F\u1FFF\u2033\u233A\u2342\u2056\u234A"+
+        "\u205E\u2066\u2352\u235A\u2086\u2362\u208E\u2096\u236A\u2372\u20A6\u237A"+
+        "\u20AE\u20B6\u2196\u219E\u21B6\u21BE\u21C6\u21E6\u21EE\u21F6\u21FE\u221E"+
+        "\u2226\u222E\u2382\u223E\u238A\u2392\u2266\u239A\u226E\u2276\u22C6\u23A2"+
+        "\u23AA\u2232\u23B2\u22AE\u229A\u200F\u201B\u23BB\u2027\u23C7\u203E\u2046"+
+        "\u204E\u2056\u23D2\u206E\u2076\u207E\u2086\u23DA\u20A6\u20BE\u20C6\u20C2"+
+        "\u20CE\u20D6\u20E6\u20EE\u20F6\u20FE\u2106\u210E\u23E2\u2116\u211E\u2126"+
+        "\u212E\u2136\u213E\u214E\u2156\u215E\u2166\u216E\u2176\u217E\u2186\u218E"+
+        "\u21A6\u21AE\u21CE\u21D6\u21DE\u21E6\u21EE\u2206\u220E\u2216\u221E\u23EA"+
+        "\u2236\u20CA\u20D2\u223E\u224E\u2256\u225E\u2266\u23F2\u227E\u2286\u23FA"+
+        "\u20BA\u229E\u22A6\u2232\u227A\u2027\u23C7\u2056\u23D2\u2086\u23DA\u20A6"+
+        "\u2402\u2106\u240A\u2412\u241A\u21E6\u21EE\u221E\u2266\u23F2\u2232\u227A"+
+        "\u2423\u242F\u243B\u2446\u244E\u2456\u245E\u2466\u246E\u2476\u247E\u2486"+
+        "\u248E\u2496\u2022\u249E\u2016\u24A6\u22AA\u24AE\u24B6\u24BE\u24C6\u24CE"+
+        "\u24D6\u24DE\u2412\u24E6\u24EE\u24F6\u24FE\u2446\u244E\u2456\u245E\u2466"+
+        "\u246E\u2476\u247E\u2486\u248E\u2496\u2022\u249E\u2016\u24A6\u22AA\u24AE"+
+        "\u24B6\u24BE\u24C6\u24CE\u24D6\u24DE\u2412\u24E6\u24EE\u24F6\u24FE\u24CE"+
+        "\u24D6\u24DE\u2412\u240A\u241A\u2146\u20EE\u20F6\u20FE\u24CE\u24D6\u24DE"+
+        "\u2146\u214E\u2506\u2506\uA5A5\022\000\u250F\u251B\u251B\u2527\u2533\u253F"+
+        "\u254B\u2557\u20C7\u20C7\u2563\u256F\u257B\u2587\u2593\u259F\u259F\u25AB"+
+        "\u25B7\u25B7\u25C3\u25C3\u25CF\u25DB\u25DB\u25E7\u25F3\u25F3\u25FF\u25FF"+
+        "\u260B\u2617\u2617\u2623\u2623\u262F\u263B\u2647\u2653\u2653\u265F\u266B"+
+        "\u2677\u2683\u268F\u268F\u269B\u26A7\u26B3\u26BF\u26CB\u26D7\u26D7\u26E3"+
+        "\u26E3\u26EF\u26EF\u26FB\u20CB\u2707\u2713\u2237\u20D3\u271F\000\000\u272B"+
+        "\u2737\u2743\u274F\u275B\u2767\u2767\u2773\u277F\u278B\u2797\u2797\u27A3"+
+        "\u27AF\u27BB\u27C7\u27D3\u27DF\u27EB\u27F7\u2803\u280F\u281B\u2827\u2833"+
+        "\u283F\u284B\u2857\u229F\u2863\u286F\u287B\u2887\u2893\u269B\u26B3\u289F"+
+        "\u28AB\u28B7\u28C3\u28CF\u28DB\u28CF\u28B7\u28E7\u28F3\u28FF\u290B\u2917"+
+        "\u28DB\u2647\u25CF\u2923\u292F\uA5A5(\000\u293B\u2947\u2950\u2964\u2978"+
+        "\u298C\u29A0\u29B4\u29C8\u29DF\u29E8\u2A34\uA5A5\024\000\u01FA\u2A59\u2A5D"+
+        "\u2A61\u2A61\u0271\u0275\u2A65\u2A69\u2A6D\u2A71\u2A75\u2A79\u2A7D\u2A81"+
+        "\u2A85\u2A89\u2A8D\u2A91\u2A95\u2A99\uA5A5\004\000\uA5A5\004\u0236\u2A61"+
+        "\u2A61\u2A61\u2A9D\u2AA1\u01F9\000\u2AA5\u2AA9\u023D\u022D\u2A59\u0271"+
+        "\u0275\u2A65\u2A69\u2A6D\u2A71\u2AAD\u2AB1\u2AB5\u0265\u2AB9\u2ABD\u2AC1"+
+        "\u026D\000\u2AC5\u2AC9\u2ACD\u2AD1\uA5A5\004\000\u2AD6\u2ADE\u22CE\000"+
+        "\u22DA\000\u22E6\u2422\u22F2\u242E\u22FE\u243A\u230A\u2AE6\u2AEE\u2AF6"+
+        "\u2AFD\u2B02\u2B02\u2B0A\u2B0A\u2B12\u2B12\u2B1A\u2B1A\uA5A5\004\u1FAA"+
+        "\u0171\u0171\uA5A5\004\u203D\u2B21\u2B21\uA5A5\004\u206D\uA5A5\004\u209D"+
+        "\uA5A5\004\u2015\uA5A5\004\u2021\uA5A5\004\u2051\u2985\u2985\u22B5\u22B5"+
+        "\u22BD\u22BD\u2329\u2329\uA5A5\004\u20ED\uA5A5\004\u2411\uA5A5\004\u210D"+
+        "\uA5A5\004\u211D\uA5A5\004\u213D\uA5A5\004\u214D\uA5A5\004\u2155\uA5A5"+
+        "\004\u2165\uA5A5\004\u2175\uA5A5\004\u21A5\uA5A5\004\u21C5\uA5A5\004\u21E9"+
+        "\uA5A5\004\u202D\uA5A5\004\u224D\uA5A5\004\u227D\u0179\u0179\u1FA5\u1FA5"+
+        "\uA5A5\004\u0189\u2B27\u2B27\u2B33\u2B33\u2B3F\u2B3F\u2A46\u2A46\uA5A5"+
+        "\004\000\u022D\u2B49\u2AAD\u2AC9\u2ACD\u2AB1\u2B4D\u0271\u0275\u2AB5\u0265"+
+        "\u2A9D\u2AB9\u01F9\u0285\u024D9\035!I\u0251\u0255\u0259\u025D\u0261\u2AA9"+
+        "\u2AA5\u2ABD\u026D\u2AC1\u023D\u2AD1\u0839\u0301\u0299\u0091\u02F1\u02C5"+
+        "\u083D\u02CDei\u0841u\u02E9\u00CD\u0845\u02DD\u02E1\u0279\u02E5\u02ED"+
+        "\u0849\u03C1\u084D\u03F1\u0851\u0095\u2B51\u2AC5\u2B55\u2B59\u2A61\u2B5D"+
+        "\021\u0711\u0289\u00A9\u0305\u0741\u02C9\u00E5mq\u077D}\u0469\u0089=\u07B9"+
+        "\u07C5\u00ED\u008D\u07E9\u02B9\u0421\u00FD\u0139\u0101\u00A1\u2A65\u2B61"+
+        "\u2A69\u2B65\000\000\u2B69\u2A8D\u2A91\u2AA1\u2B6D\u1251\u1279\u15F9\u2B71"+
+        "\u1619\u12CD\u2B75\u13A5\u175D\u1331\u1261\u1199\u119D\u11A1\u11A5\u11A9"+
+        "\u11AD\u11B1\u11B5\u11B9\u11BD\u11C1\u11C5\u11C9\u11CD\u11D1\u11D5\u11D9"+
+        "\u11DD\u11E1\u11E5\u11E9\u11ED\u11F1\u11F5\u11F9\u11FD\u1201\u1205\u1209"+
+        "\u120D\u1211\u1215\u1219\u121D\u1221\u1225\u1229\u122D\u1231\u1235\u1239"+
+        "\u123D\u1241\u1245\u1285\u0BC5\u0BCD\u0C9D\u0BD1\u0BD5\u0BD9\u0BDD\u0BE1"+
+        "\u0BE5\u0BE9\u0BED\u0BF1\u0BF5\u0BF9\u0BFD\u0C01\u0C05\u0C09\u0C0D\u0C11"+
+        "\u0C15\u0C19\u0C1D\u0C21\u0C25\u0C29\u0C2D\u0C31\u0C35\u0C39\u0C3D\u0C41"+
+        "\u0C45\000\000\000\u0C49\u0C4D\u0C51\u0C55\u0C59\u0C5D\000\000\u0C61\u0C65"+
+        "\u0C69\u0C6D\u0C71\u0C75\000\000\u0C79\u0C7D\u0C81\u0C85\u0C89\u0C8D\000"+
+        "\000\u0C91\u0C95\u0C99\000\000\000\u2B79\u2B7D\u2B81\026\u2B85\u2B89\u2B8D"+
+        "\000\u2B91\u2B95\u2B99\u2B9D\u2BA1\u2BA5\u2BA9\uA5A5\021\000"
+        );
+
+    static final String contents = 
+        "\uFFFF  \u0308a \u030423 \u0301\u03BC \u03271o1\u204441\u204423\u2044"+
+        "4IJijL\u00B7l\u00B7\u02BCnsDZ\u030CDz\u030Cdz\u030CLJLjljNJNjnjh\u0266"+
+        "r\u0279\u027B\u0281wy \u0306 \u0307 \u030A \u0328 \u0303 \u030B\u0263"+
+        "x\u0295 \u0345\u03B2\u03B8\u03A5\u03C6\u03C0\u03BA\u03C1\u03C2\u0565\u0582"+
+        "\u0627\u0674\u0648\u0674\u06C7\u0674\u064A\u0674\u0E4D\u0E32\u0ECD\u0EB2"+
+        "\u0EAB\u0E99\u0EAB\u0EA1\u0F0B\u0FB2\u0F71\u0F80\u0FB3\u0F71\u0F80a\u02BE"+
+        " \u0313 \u0342 \u0314\u2010 \u0333...\u2032\u2032\u2032\u2032\u2032\u2035"+
+        "\u2035\u2035\u2035\u2035!! \u0305?!!?056789+\u2212=()Rsa/ca/sC\u00B0C"+
+        "c/oc/u\u0190\u00B0FgH\u0127NoPQSMTELTMBe\u05D0\u05D1\u05D2\u05D31\u2044"+
+        "32\u204431\u204452\u204453\u204454\u204451\u204465\u204461\u204483\u2044"+
+        "85\u204487\u20448IIIIIIVVIVIIVIII\000IXXIXIIiiiiiivviviiviii\000ixxix"+
+        "iim\u222B\u222B\u222B\u222B\u222B\u222E\u222E\u222E\u222E\u222E101112"+
+        "1314151617181920(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)\000(11)\000(12)\000(1"+
+        "3)\000(14)\000(15)\000(16)\000(17)\000(18)\000(19)\000(20)\0001.2.3.4"+
+        ".5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.(a)(b)(c)(d)(e)(f)(g)(h)("+
+        "i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)AGKOUWY\u6BCD\u9F9F"+
+        "\u4E00\u4E28\u4E36\u4E3F\u4E59\u4E85\u4E8C\u4EA0\u4EBA\u513F\u5165\u516B"+
+        "\u5182\u5196\u51AB\u51E0\u51F5\u5200\u529B\u52F9\u5315\u531A\u5338\u5341"+
+        "\u535C\u5369\u5382\u53B6\u53C8\u53E3\u56D7\u571F\u58EB\u5902\u590A\u5915"+
+        "\u5927\u5973\u5B50\u5B80\u5BF8\u5C0F\u5C22\u5C38\u5C6E\u5C71\u5DDB\u5DE5"+
+        "\u5DF1\u5DFE\u5E72\u5E7A\u5E7F\u5EF4\u5EFE\u5F0B\u5F13\u5F50\u5F61\u5F73"+
+        "\u5FC3\u6208\u6236\u624B\u652F\u6534\u6587\u6597\u65A4\u65B9\u65E0\u65E5"+
+        "\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BB3\u6BCB\u6BD4\u6BDB\u6C0F\u6C14"+
+        "\u6C34\u706B\u722A\u7236\u723B\u723F\u7247\u7259\u725B\u72AC\u7384\u7389"+
+        "\u74DC\u74E6\u7518\u751F\u7528\u7530\u758B\u7592\u7676\u767D\u76AE\u76BF"+
+        "\u76EE\u77DB\u77E2\u77F3\u793A\u79B8\u79BE\u7A74\u7ACB\u7AF9\u7C73\u7CF8"+
+        "\u7F36\u7F51\u7F8A\u7FBD\u8001\u800C\u8012\u8033\u807F\u8089\u81E3\u81EA"+
+        "\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u8278\u864D\u866B\u8840\u884C"+
+        "\u8863\u897E\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C78\u8C9D\u8D64\u8D70"+
+        "\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FB5\u9091\u9149\u91C6\u91CC\u91D1\u9577"+
+        "\u9580\u961C\u96B6\u96B9\u96E8\u9751\u975E\u9762\u9769\u97CB\u97ED\u97F3"+
+        "\u9801\u98A8\u98DB\u98DF\u9996\u9999\u99AC\u9AA8\u9AD8\u9ADF\u9B25\u9B2F"+
+        "\u9B32\u9B3C\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u9EC3\u9ECD\u9ED1\u9EF9"+
+        "\u9EFD\u9F0E\u9F13\u9F20\u9F3B\u9F4A\u9F52\u9F8D\u9F9C\u9FA0\u3012\u5344"+
+        "\u5345 \u3099 \u309A\u1100\u1101\u11AA\u1102\u11AC\u11AD\u1103\u1104\u1105"+
+        "\u11B0\u11B1\u11B2\u11B3\u11B4\u11B5\u111A\u1106\u1107\u1108\u1121\u1109"+
+        "\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111\u1112\u1161\u1162\u1163"+
+        "\u1164\u1165\u1166\u1167\u1168\u1169\u116A\u116B\u116C\u116D\u116E\u116F"+
+        "\u1170\u1171\u1172\u1173\u1174\u1175\u1160\u1114\u1115\u11C7\u11C8\u11CC"+
+        "\u11CE\u11D3\u11D7\u11D9\u111C\u11DD\u11DF\u111D\u111E\u1120\u1122\u1123"+
+        "\u1127\u1129\u112B\u112C\u112D\u112E\u112F\u1132\u1136\u1140\u1147\u114C"+
+        "\u11F1\u11F2\u1157\u1158\u1159\u1184\u1185\u1188\u1191\u1192\u1194\u119E"+
+        "\u11A1\u4E09\u56DB\u4E0A\u4E2D\u4E0B\u7532\u4E19\u4E01\u5929\u5730(\u1100"+
+        ")(\u1102)(\u1103)(\u1105)(\u1106)(\u1107)(\u1109)(\u110B)(\u110C)(\u110E"+
+        ")(\u110F)(\u1110)(\u1111)(\u1112)(\u1100\u1161)\000(\u1102\u1161)\000"+
+        "(\u1103\u1161)\000(\u1105\u1161)\000(\u1106\u1161)\000(\u1107\u1161)\000"+
+        "(\u1109\u1161)\000(\u110B\u1161)\000(\u110C\u1161)\000(\u110E\u1161)\000"+
+        "(\u110F\u1161)\000(\u1110\u1161)\000(\u1111\u1161)\000(\u1112\u1161)\000"+
+        "(\u110C\u116E)\000(\u4E00)(\u4E8C)(\u4E09)(\u56DB)(\u4E94)(\u516D)(\u4E03"+
+        ")(\u516B)(\u4E5D)(\u5341)(\u6708)(\u706B)(\u6C34)(\u6728)(\u91D1)(\u571F"+
+        ")(\u65E5)(\u682A)(\u6709)(\u793E)(\u540D)(\u7279)(\u8CA1)(\u795D)(\u52B4"+
+        ")(\u4EE3)(\u547C)(\u5B66)(\u76E3)(\u4F01)(\u8CC7)(\u5354)(\u796D)(\u4F11"+
+        ")(\u81EA)(\u81F3)\u79D8\u7537\u9069\u512A\u5370\u6CE8\u9805\u5199\u6B63"+
+        "\u5DE6\u53F3\u533B\u5B97\u591C1\u67082\u67083\u67084\u67085\u67086\u6708"+
+        "7\u67088\u67089\u670810\u670811\u670812\u6708\u30A2\u30A4\u30A6\u30A8"+
+        "\u30AA\u30AB\u30AD\u30AF\u30B1\u30B3\u30B5\u30B7\u30B9\u30BB\u30BD\u30BF"+
+        "\u30C1\u30C4\u30C6\u30C8\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D2\u30D5"+
+        "\u30D8\u30DB\u30DE\u30DF\u30E0\u30E1\u30E2\u30E4\u30E6\u30E8\u30E9\u30EA"+
+        "\u30EB\u30EC\u30ED\u30EF\u30F0\u30F1\u30F2\u30A2\u30CF\u309A\u30FC\u30C8"+
+        "\000\u30A2\u30EB\u30D5\u30A1\000\u30A2\u30F3\u30D8\u309A\u30A2\000\u30A2"+
+        "\u30FC\u30EB\u30A4\u30CB\u30F3\u30AF\u3099\000\u30A4\u30F3\u30C1\u30A6"+
+        "\u30A9\u30F3\u30A8\u30B9\u30AF\u30FC\u30C8\u3099\000\u30A8\u30FC\u30AB"+
+        "\u30FC\000\u30AA\u30F3\u30B9\u30AA\u30FC\u30E0\u30AB\u30A4\u30EA\u30AB"+
+        "\u30E9\u30C3\u30C8\000\u30AB\u30ED\u30EA\u30FC\000\u30AB\u3099\u30ED\u30F3"+
+        "\000\u30AB\u3099\u30F3\u30DE\000\u30AD\u3099\u30AB\u3099\000\u30AD\u3099"+
+        "\u30CB\u30FC\000\u30AD\u30E5\u30EA\u30FC\000\u30AD\u3099\u30EB\u30BF\u3099"+
+        "\u30FC\000\u30AD\u30ED\u30AD\u30ED\u30AF\u3099\u30E9\u30E0\000\u30AD\u30ED"+
+        "\u30E1\u30FC\u30C8\u30EB\000\u30AD\u30ED\u30EF\u30C3\u30C8\000\u30AF\u3099"+
+        "\u30E9\u30E0\u30C8\u30F3\000\u30AF\u30EB\u30BB\u3099\u30A4\u30ED\000\u30AF"+
+        "\u30ED\u30FC\u30CD\000\u30B1\u30FC\u30B9\u30B3\u30EB\u30CA\u30B3\u30FC"+
+        "\u30DB\u309A\000\u30B5\u30A4\u30AF\u30EB\000\u30B5\u30F3\u30C1\u30FC\u30E0"+
+        "\000\u30B7\u30EA\u30F3\u30AF\u3099\000\u30BB\u30F3\u30C1\u30BB\u30F3\u30C8"+
+        "\u30BF\u3099\u30FC\u30B9\000\u30C6\u3099\u30B7\u30C8\u3099\u30EB\u30CA"+
+        "\u30CE\u30CE\u30C3\u30C8\u30CF\u30A4\u30C4\u30CF\u309A\u30FC\u30BB\u30F3"+
+        "\u30C8\000\u30CF\u309A\u30FC\u30C4\000\u30CF\u3099\u30FC\u30EC\u30EB\000"+
+        "\u30D2\u309A\u30A2\u30B9\u30C8\u30EB\000\u30D2\u309A\u30AF\u30EB\000\u30D2"+
+        "\u309A\u30B3\u30D2\u3099\u30EB\u30D5\u30A1\u30E9\u30C3\u30C8\u3099\000"+
+        "\u30D5\u30A3\u30FC\u30C8\000\u30D5\u3099\u30C3\u30B7\u30A7\u30EB\000\u30D5"+
+        "\u30E9\u30F3\u30D8\u30AF\u30BF\u30FC\u30EB\000\u30D8\u309A\u30BD\u30D8"+
+        "\u309A\u30CB\u30D2\000\u30D8\u30EB\u30C4\u30D8\u309A\u30F3\u30B9\000\u30D8"+
+        "\u309A\u30FC\u30B7\u3099\000\u30D8\u3099\u30FC\u30BF\000\u30DB\u309A\u30A4"+
+        "\u30F3\u30C8\000\u30DB\u3099\u30EB\u30C8\000\u30DB\u30F3\u30DB\u309A\u30F3"+
+        "\u30C8\u3099\000\u30DB\u30FC\u30EB\u30DB\u30FC\u30F3\u30DE\u30A4\u30AF"+
+        "\u30ED\000\u30DE\u30A4\u30EB\u30DE\u30C3\u30CF\u30DE\u30EB\u30AF\u30DE"+
+        "\u30F3\u30B7\u30E7\u30F3\000\u30DF\u30AF\u30ED\u30F3\000\u30DF\u30EA\u30DF"+
+        "\u30EA\u30CF\u3099\u30FC\u30EB\000\u30E1\u30AB\u3099\u30E1\u30AB\u3099"+
+        "\u30C8\u30F3\000\u30E4\u30FC\u30C8\u3099\000\u30E4\u30FC\u30EB\u30E6\u30A2"+
+        "\u30F3\u30EA\u30C3\u30C8\u30EB\000\u30EA\u30E9\u30EB\u30D2\u309A\u30FC"+
+        "\000\u30EB\u30FC\u30D5\u3099\u30EB\000\u30EC\u30E0\u30EC\u30F3\u30C8\u30B1"+
+        "\u3099\u30F3\0000\u70B91\u70B92\u70B93\u70B94\u70B95\u70B96\u70B97\u70B9"+
+        "8\u70B99\u70B910\u70B911\u70B912\u70B913\u70B914\u70B915\u70B916\u70B9"+
+        "17\u70B918\u70B919\u70B920\u70B921\u70B922\u70B923\u70B924\u70B9hPada"+
+        "AUbaroVpc\u5E73\u6210\u662D\u548C\u5927\u6B63\u660E\u6CBB\u682A\u5F0F"+
+        "\u4F1A\u793E\000pAnA\u03BCAmAkAKBGBcalkcal\000pFnF\u03BCF\u03BCgmgkgH"+
+        "zkHzMHzGHzTHz\u03BClmldlklfmnm\u03BCmmmcmkmmm2cm2km2mm3cm3km3m\u2215s"+
+        "m\u2215s2\000kPaMPaGParadrad\u2215s\000rad\u2215s2\000ps\u03BCsmspVnV"+
+        "\u03BCVmVkVMVpWnW\u03BCWmWkWMWk\u03A9M\u03A9a.m.\000BqcccdC\u2215kg\000"+
+        "Co.dBGyhaHPinKKKMktlnloglxmbmilmolPHp.m.\000PPMPRsrSvWb1\u65E52\u65E5"+
+        "3\u65E54\u65E55\u65E56\u65E57\u65E58\u65E59\u65E510\u65E511\u65E512\u65E5"+
+        "13\u65E514\u65E515\u65E516\u65E517\u65E518\u65E519\u65E520\u65E521\u65E5"+
+        "22\u65E523\u65E524\u65E525\u65E526\u65E527\u65E528\u65E529\u65E530\u65E5"+
+        "31\u65E5fffiflfflst\u0574\u0576\u0574\u0565\u0574\u056B\u057E\u0576\u0574"+
+        "\u056D\u05E2\u05D4\u05DB\u05DC\u05DD\u05E8\u05EA\u05D0\u05DC\u0671\u067B"+
+        "\u067E\u0680\u067A\u067F\u0679\u06A4\u06A6\u0684\u0683\u0686\u0687\u068D"+
+        "\u068C\u068E\u0688\u0698\u0691\u06A9\u06AF\u06B3\u06B1\u06BA\u06BB\u06D5"+
+        "\u0654\u06C1\u06BE\u06D2\u06D2\u0654\u06AD\u06C6\u06C8\u06CB\u06C5\u06C9"+
+        "\u06D0\u0649\u064A\u0654\u0627\u064A\u0654\u06D5\u064A\u0654\u0648\u064A"+
+        "\u0654\u06C7\u064A\u0654\u06C6\u064A\u0654\u06C8\u064A\u0654\u06D0\u064A"+
+        "\u0654\u0649\u06CC\u064A\u0654\u062C\u064A\u0654\u062D\u064A\u0654\u0645"+
+        "\u064A\u0654\u064A\u0628\u062C\u0628\u062D\u0628\u062E\u0628\u0645\u0628"+
+        "\u0649\u0628\u064A\u062A\u062C\u062A\u062D\u062A\u062E\u062A\u0645\u062A"+
+        "\u0649\u062A\u064A\u062B\u062C\u062B\u0645\u062B\u0649\u062B\u064A\u062C"+
+        "\u062D\u062C\u0645\u062D\u0645\u062E\u062C\u062E\u062D\u062E\u0645\u0633"+
+        "\u062C\u0633\u062D\u0633\u062E\u0633\u0645\u0635\u062D\u0635\u0645\u0636"+
+        "\u062C\u0636\u062D\u0636\u062E\u0636\u0645\u0637\u062D\u0637\u0645\u0638"+
+        "\u0645\u0639\u062C\u0639\u0645\u063A\u062C\u063A\u0645\u0641\u062C\u0641"+
+        "\u062D\u0641\u062E\u0641\u0645\u0641\u0649\u0641\u064A\u0642\u062D\u0642"+
+        "\u0645\u0642\u0649\u0642\u064A\u0643\u0627\u0643\u062C\u0643\u062D\u0643"+
+        "\u062E\u0643\u0644\u0643\u0645\u0643\u0649\u0643\u064A\u0644\u062C\u0644"+
+        "\u062D\u0644\u062E\u0644\u0645\u0644\u0649\u0644\u064A\u0645\u062C\u0645"+
+        "\u0645\u0645\u0649\u0646\u062C\u0646\u062D\u0646\u062E\u0646\u0645\u0646"+
+        "\u0649\u0646\u064A\u0647\u062C\u0647\u0645\u0647\u0649\u0647\u064A\u064A"+
+        "\u062D\u064A\u062E\u064A\u0649\u0630\u0670\u0631\u0670\u0649\u0670 \u064C"+
+        "\u0651 \u064D\u0651 \u064E\u0651 \u064F\u0651 \u0650\u0651 \u0651\u0670"+
+        "\u064A\u0654\u0631\u064A\u0654\u0632\u064A\u0654\u0646\u0628\u0631\u0628"+
+        "\u0632\u0628\u0646\u062A\u0631\u062A\u0632\u062A\u0646\u062B\u0631\u062B"+
+        "\u0632\u062B\u0646\u0645\u0627\u0646\u0631\u0646\u0632\u0646\u0646\u064A"+
+        "\u0631\u064A\u0632\u064A\u0646\u064A\u0654\u062E\u064A\u0654\u0647\u0628"+
+        "\u0647\u062A\u0647\u0635\u062E\u0644\u0647\u0646\u0647\u0647\u0670\u062B"+
+        "\u0647\u0633\u0647\u0634\u0645\u0634\u0647\u0640\u064E\u0651\u0640\u064F"+
+        "\u0651\u0640\u0650\u0651\u0637\u0649\u0637\u064A\u0639\u0649\u0639\u064A"+
+        "\u063A\u0649\u063A\u064A\u0633\u0649\u0633\u064A\u0634\u0649\u0634\u064A"+
+        "\u062D\u0649\u062C\u0649\u062E\u0649\u0635\u0649\u0635\u064A\u0636\u0649"+
+        "\u0636\u064A\u0634\u062C\u0634\u062D\u0634\u062E\u0634\u0631\u0633\u0631"+
+        "\u0635\u0631\u0636\u0631\u0627\u064B\u062A\u062C\u0645\u062A\u062D\u062C"+
+        "\u062A\u062D\u0645\u062A\u062E\u0645\u062A\u0645\u062C\u062A\u0645\u062D"+
+        "\u062A\u0645\u062E\u062D\u0645\u064A\u062D\u0645\u0649\u0633\u062D\u062C"+
+        "\u0633\u062C\u062D\u0633\u062C\u0649\u0633\u0645\u062D\u0633\u0645\u062C"+
+        "\u0633\u0645\u0645\u0635\u062D\u062D\u0635\u0645\u0645\u0634\u062D\u0645"+
+        "\u0634\u062C\u064A\u0634\u0645\u062E\u0634\u0645\u0645\u0636\u062D\u0649"+
+        "\u0636\u062E\u0645\u0637\u0645\u062D\u0637\u0645\u0645\u0637\u0645\u064A"+
+        "\u0639\u062C\u0645\u0639\u0645\u0645\u0639\u0645\u0649\u063A\u0645\u0645"+
+        "\u063A\u0645\u064A\u063A\u0645\u0649\u0641\u062E\u0645\u0642\u0645\u062D"+
+        "\u0642\u0645\u0645\u0644\u062D\u0645\u0644\u062D\u064A\u0644\u062D\u0649"+
+        "\u0644\u062C\u062C\u0644\u062E\u0645\u0644\u0645\u062D\u0645\u062D\u062C"+
+        "\u0645\u062D\u064A\u0645\u062C\u062D\u0645\u062E\u0645\u0645\u062C\u062E"+
+        "\u0647\u0645\u062C\u0647\u0645\u0645\u0646\u062D\u0645\u0646\u062D\u0649"+
+        "\u0646\u062C\u0645\u0646\u062C\u0649\u0646\u0645\u064A\u0646\u0645\u0649"+
+        "\u064A\u0645\u0645\u0628\u062E\u064A\u062A\u062C\u064A\u062A\u062C\u0649"+
+        "\u062A\u062E\u064A\u062A\u062E\u0649\u062A\u0645\u064A\u062A\u0645\u0649"+
+        "\u062C\u0645\u064A\u062C\u062D\u0649\u062C\u0645\u0649\u0633\u062E\u0649"+
+        "\u0635\u062D\u064A\u0634\u062D\u064A\u0636\u062D\u064A\u0644\u062C\u064A"+
+        "\u0644\u0645\u064A\u064A\u062C\u064A\u064A\u0645\u064A\u0645\u0645\u064A"+
+        "\u0642\u0645\u064A\u0646\u062D\u064A\u0639\u0645\u064A\u0643\u0645\u064A"+
+        "\u0646\u062C\u062D\u0645\u062E\u064A\u0644\u062C\u0645\u0643\u0645\u0645"+
+        "\u062C\u062D\u064A\u062D\u062C\u064A\u0645\u062C\u064A\u0641\u0645\u064A"+
+        "\u0628\u062D\u064A\u0633\u062E\u064A\u0646\u062C\u064A\u0635\u0644\u06D2"+
+        "\u0642\u0644\u06D2\u0627\u0644\u0644\u0647\000\u0627\u0643\u0628\u0631"+
+        "\000\u0645\u062D\u0645\u062F\000\u0635\u0644\u0639\u0645\000\u0631\u0633"+
+        "\u0648\u0644\000\u0639\u0644\u064A\u0647\000\u0648\u0633\u0644\u0645\000"+
+        "\u0635\u0644\u0649\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644"+
+        "\u064A\u0647 \u0648\u0633\u0644\u0645\000\u062C\u0644 \u062C\u0644\u0627"+
+        "\u0644\u0647\000\u2014\u2013_{}\u3014\u3015\u3010\u3011\u300A\u300B\u3008"+
+        "\u3009\u300C\u300D\u300E\u300F,\u3001;:#&*-<>\134$%@ \u064B\u0640\u064B"+
+        "\u0640\u0651 \u0652\u0640\u0652\u0621\u0627\u0653\u0627\u0654\u0648\u0654"+
+        "\u0627\u0655\u0629\u0644\u0627\u0653\u0644\u0627\u0654\u0644\u0627\u0655"+
+        "\042'[]^`|~\u3002\u30FB\u30A5\u30E3\u00A2\u00A3\u00AC\u00A6\u00A5\u20A9"+
+        "\u2502\u2190\u2191\u2192\u2193\u25A0\u25CBA\u0300A\u0301A\u0302A\u0303"+
+        "A\u0308A\u030AC\u0327E\u0300E\u0301E\u0302E\u0308I\u0300I\u0301I\u0302"+
+        "I\u0308N\u0303O\u0300O\u0301O\u0302O\u0303O\u0308U\u0300U\u0301U\u0302"+
+        "U\u0308Y\u0301a\u0300a\u0301a\u0302a\u0303a\u0308a\u030Ac\u0327e\u0300"+
+        "e\u0301e\u0302e\u0308i\u0300i\u0301i\u0302i\u0308n\u0303o\u0300o\u0301"+
+        "o\u0302o\u0303o\u0308u\u0300u\u0301u\u0302u\u0308y\u0301y\u0308A\u0304"+
+        "a\u0304A\u0306a\u0306A\u0328a\u0328C\u0301c\u0301C\u0302c\u0302C\u0307"+
+        "c\u0307C\u030Cc\u030CD\u030Cd\u030CE\u0304e\u0304E\u0306e\u0306E\u0307"+
+        "e\u0307E\u0328e\u0328E\u030Ce\u030CG\u0302g\u0302G\u0306g\u0306G\u0307"+
+        "g\u0307G\u0327g\u0327H\u0302h\u0302I\u0303i\u0303I\u0304i\u0304I\u0306"+
+        "i\u0306I\u0328i\u0328I\u0307J\u0302j\u0302K\u0327k\u0327L\u0301l\u0301"+
+        "L\u0327l\u0327L\u030Cl\u030CN\u0301n\u0301N\u0327n\u0327N\u030Cn\u030C"+
+        "O\u0304o\u0304O\u0306o\u0306O\u030Bo\u030BR\u0301r\u0301R\u0327r\u0327"+
+        "R\u030Cr\u030CS\u0301s\u0301S\u0302s\u0302S\u0327s\u0327S\u030Cs\u030C"+
+        "T\u0327t\u0327T\u030Ct\u030CU\u0303u\u0303U\u0304u\u0304U\u0306u\u0306"+
+        "U\u030Au\u030AU\u030Bu\u030BU\u0328u\u0328W\u0302w\u0302Y\u0302y\u0302"+
+        "Y\u0308Z\u0301z\u0301Z\u0307z\u0307Z\u030Cz\u030CO\u031Bo\u031BU\u031B"+
+        "u\u031BA\u030Ca\u030CI\u030Ci\u030CO\u030Co\u030CU\u030Cu\u030CU\u0308"+
+        "\u0304u\u0308\u0304U\u0308\u0301u\u0308\u0301U\u0308\u030Cu\u0308\u030C"+
+        "U\u0308\u0300u\u0308\u0300A\u0308\u0304a\u0308\u0304A\u0307\u0304a\u0307"+
+        "\u0304\u00C6\u0304\u00E6\u0304G\u030Cg\u030CK\u030Ck\u030CO\u0328o\u0328"+
+        "O\u0328\u0304o\u0328\u0304\u01B7\u030C\u0292\u030Cj\u030CG\u0301g\u0301"+
+        "N\u0300n\u0300A\u030A\u0301a\u030A\u0301\u00C6\u0301\u00E6\u0301\u00D8"+
+        "\u0301\u00F8\u0301A\u030Fa\u030FA\u0311a\u0311E\u030Fe\u030FE\u0311e\u0311"+
+        "I\u030Fi\u030FI\u0311i\u0311O\u030Fo\u030FO\u0311o\u0311R\u030Fr\u030F"+
+        "R\u0311r\u0311U\u030Fu\u030FU\u0311u\u0311S\u0326s\u0326T\u0326t\u0326"+
+        "H\u030Ch\u030CA\u0307a\u0307E\u0327e\u0327O\u0308\u0304o\u0308\u0304O"+
+        "\u0303\u0304o\u0303\u0304O\u0307o\u0307O\u0307\u0304o\u0307\u0304Y\u0304"+
+        "y\u0304\u0300\u0301\u0313\u0308\u0301\u02B9;\u00A8\u0301\u0391\u0301\u00B7"+
+        "\u0395\u0301\u0397\u0301\u0399\u0301\u039F\u0301\u03A5\u0301\u03A9\u0301"+
+        "\u03B9\u0308\u0301\u0399\u0308\u03A5\u0308\u03B1\u0301\u03B5\u0301\u03B7"+
+        "\u0301\u03B9\u0301\u03C5\u0308\u0301\u03B9\u0308\u03C5\u0308\u03BF\u0301"+
+        "\u03C5\u0301\u03C9\u0301\u03D2\u0301\u03D2\u0308\u0415\u0300\u0415\u0308"+
+        "\u0413\u0301\u0406\u0308\u041A\u0301\u0418\u0300\u0423\u0306\u0418\u0306"+
+        "\u0438\u0306\u0435\u0300\u0435\u0308\u0433\u0301\u0456\u0308\u043A\u0301"+
+        "\u0438\u0300\u0443\u0306\u0474\u030F\u0475\u030F\u0416\u0306\u0436\u0306"+
+        "\u0410\u0306\u0430\u0306\u0410\u0308\u0430\u0308\u0415\u0306\u0435\u0306"+
+        "\u04D8\u0308\u04D9\u0308\u0416\u0308\u0436\u0308\u0417\u0308\u0437\u0308"+
+        "\u0418\u0304\u0438\u0304\u0418\u0308\u0438\u0308\u041E\u0308\u043E\u0308"+
+        "\u04E8\u0308\u04E9\u0308\u042D\u0308\u044D\u0308\u0423\u0304\u0443\u0304"+
+        "\u0423\u0308\u0443\u0308\u0423\u030B\u0443\u030B\u0427\u0308\u0447\u0308"+
+        "\u042B\u0308\u044B\u0308\u0627\u0653\u0627\u0654\u0648\u0654\u0627\u0655"+
+        "\u064A\u0654\u06D5\u0654\u06C1\u0654\u06D2\u0654\u0928\u093C\u0930\u093C"+
+        "\u0933\u093C\u0915\u093C\u0916\u093C\u0917\u093C\u091C\u093C\u0921\u093C"+
+        "\u0922\u093C\u092B\u093C\u092F\u093C\u09C7\u09BE\u09C7\u09D7\u09A1\u09BC"+
+        "\u09A2\u09BC\u09AF\u09BC\u0A32\u0A3C\u0A38\u0A3C\u0A16\u0A3C\u0A17\u0A3C"+
+        "\u0A1C\u0A3C\u0A2B\u0A3C\u0B47\u0B56\u0B47\u0B3E\u0B47\u0B57\u0B21\u0B3C"+
+        "\u0B22\u0B3C\u0B92\u0BD7\u0BC6\u0BBE\u0BC7\u0BBE\u0BC6\u0BD7\u0C46\u0C56"+
+        "\u0CBF\u0CD5\u0CC6\u0CD5\u0CC6\u0CD6\u0CC6\u0CC2\u0CC6\u0CC2\u0CD5\u0D46"+
+        "\u0D3E\u0D47\u0D3E\u0D46\u0D57\u0DD9\u0DCA\u0DD9\u0DCF\u0DD9\u0DCF\u0DCA"+
+        "\u0DD9\u0DDF\u0F42\u0FB7\u0F4C\u0FB7\u0F51\u0FB7\u0F56\u0FB7\u0F5B\u0FB7"+
+        "\u0F40\u0FB5\u0F71\u0F72\u0F71\u0F74\u0FB2\u0F80\u0FB3\u0F80\u0F71\u0F80"+
+        "\u0F92\u0FB7\u0F9C\u0FB7\u0FA1\u0FB7\u0FA6\u0FB7\u0FAB\u0FB7\u0F90\u0FB5"+
+        "\u1025\u102EA\u0325a\u0325B\u0307b\u0307B\u0323b\u0323B\u0331b\u0331C"+
+        "\u0327\u0301c\u0327\u0301D\u0307d\u0307D\u0323d\u0323D\u0331d\u0331D\u0327"+
+        "d\u0327D\u032Dd\u032DE\u0304\u0300e\u0304\u0300E\u0304\u0301e\u0304\u0301"+
+        "E\u032De\u032DE\u0330e\u0330E\u0327\u0306e\u0327\u0306F\u0307f\u0307G"+
+        "\u0304g\u0304H\u0307h\u0307H\u0323h\u0323H\u0308h\u0308H\u0327h\u0327"+
+        "H\u032Eh\u032EI\u0330i\u0330I\u0308\u0301i\u0308\u0301K\u0301k\u0301K"+
+        "\u0323k\u0323K\u0331k\u0331L\u0323l\u0323L\u0323\u0304l\u0323\u0304L\u0331"+
+        "l\u0331L\u032Dl\u032DM\u0301m\u0301M\u0307m\u0307M\u0323m\u0323N\u0307"+
+        "n\u0307N\u0323n\u0323N\u0331n\u0331N\u032Dn\u032DO\u0303\u0301o\u0303"+
+        "\u0301O\u0303\u0308o\u0303\u0308O\u0304\u0300o\u0304\u0300O\u0304\u0301"+
+        "o\u0304\u0301P\u0301p\u0301P\u0307p\u0307R\u0307r\u0307R\u0323r\u0323"+
+        "R\u0323\u0304r\u0323\u0304R\u0331r\u0331S\u0307s\u0307S\u0323s\u0323S"+
+        "\u0301\u0307s\u0301\u0307S\u030C\u0307s\u030C\u0307S\u0323\u0307s\u0323"+
+        "\u0307T\u0307t\u0307T\u0323t\u0323T\u0331t\u0331T\u032Dt\u032DU\u0324"+
+        "u\u0324U\u0330u\u0330U\u032Du\u032DU\u0303\u0301u\u0303\u0301U\u0304\u0308"+
+        "u\u0304\u0308V\u0303v\u0303V\u0323v\u0323W\u0300w\u0300W\u0301w\u0301"+
+        "W\u0308w\u0308W\u0307w\u0307W\u0323w\u0323X\u0307x\u0307X\u0308x\u0308"+
+        "Y\u0307y\u0307Z\u0302z\u0302Z\u0323z\u0323Z\u0331z\u0331h\u0331t\u0308"+
+        "w\u030Ay\u030A\u017F\u0307A\u0323a\u0323A\u0309a\u0309A\u0302\u0301a\u0302"+
+        "\u0301A\u0302\u0300a\u0302\u0300A\u0302\u0309a\u0302\u0309A\u0302\u0303"+
+        "a\u0302\u0303A\u0323\u0302a\u0323\u0302A\u0306\u0301a\u0306\u0301A\u0306"+
+        "\u0300a\u0306\u0300A\u0306\u0309a\u0306\u0309A\u0306\u0303a\u0306\u0303"+
+        "A\u0323\u0306a\u0323\u0306E\u0323e\u0323E\u0309e\u0309E\u0303e\u0303E"+
+        "\u0302\u0301e\u0302\u0301E\u0302\u0300e\u0302\u0300E\u0302\u0309e\u0302"+
+        "\u0309E\u0302\u0303e\u0302\u0303E\u0323\u0302e\u0323\u0302I\u0309i\u0309"+
+        "I\u0323i\u0323O\u0323o\u0323O\u0309o\u0309O\u0302\u0301o\u0302\u0301O"+
+        "\u0302\u0300o\u0302\u0300O\u0302\u0309o\u0302\u0309O\u0302\u0303o\u0302"+
+        "\u0303O\u0323\u0302o\u0323\u0302O\u031B\u0301o\u031B\u0301O\u031B\u0300"+
+        "o\u031B\u0300O\u031B\u0309o\u031B\u0309O\u031B\u0303o\u031B\u0303O\u031B"+
+        "\u0323o\u031B\u0323U\u0323u\u0323U\u0309u\u0309U\u031B\u0301u\u031B\u0301"+
+        "U\u031B\u0300u\u031B\u0300U\u031B\u0309u\u031B\u0309U\u031B\u0303u\u031B"+
+        "\u0303U\u031B\u0323u\u031B\u0323Y\u0300y\u0300Y\u0323y\u0323Y\u0309y\u0309"+
+        "Y\u0303y\u0303\u03B1\u0313\u03B1\u0314\u03B1\u0313\u0300\u03B1\u0314\u0300"+
+        "\u03B1\u0313\u0301\u03B1\u0314\u0301\u03B1\u0313\u0342\u03B1\u0314\u0342"+
+        "\u0391\u0313\u0391\u0314\u0391\u0313\u0300\u0391\u0314\u0300\u0391\u0313"+
+        "\u0301\u0391\u0314\u0301\u0391\u0313\u0342\u0391\u0314\u0342\u03B5\u0313"+
+        "\u03B5\u0314\u03B5\u0313\u0300\u03B5\u0314\u0300\u03B5\u0313\u0301\u03B5"+
+        "\u0314\u0301\u0395\u0313\u0395\u0314\u0395\u0313\u0300\u0395\u0314\u0300"+
+        "\u0395\u0313\u0301\u0395\u0314\u0301\u03B7\u0313\u03B7\u0314\u03B7\u0313"+
+        "\u0300\u03B7\u0314\u0300\u03B7\u0313\u0301\u03B7\u0314\u0301\u03B7\u0313"+
+        "\u0342\u03B7\u0314\u0342\u0397\u0313\u0397\u0314\u0397\u0313\u0300\u0397"+
+        "\u0314\u0300\u0397\u0313\u0301\u0397\u0314\u0301\u0397\u0313\u0342\u0397"+
+        "\u0314\u0342\u03B9\u0313\u03B9\u0314\u03B9\u0313\u0300\u03B9\u0314\u0300"+
+        "\u03B9\u0313\u0301\u03B9\u0314\u0301\u03B9\u0313\u0342\u03B9\u0314\u0342"+
+        "\u0399\u0313\u0399\u0314\u0399\u0313\u0300\u0399\u0314\u0300\u0399\u0313"+
+        "\u0301\u0399\u0314\u0301\u0399\u0313\u0342\u0399\u0314\u0342\u03BF\u0313"+
+        "\u03BF\u0314\u03BF\u0313\u0300\u03BF\u0314\u0300\u03BF\u0313\u0301\u03BF"+
+        "\u0314\u0301\u039F\u0313\u039F\u0314\u039F\u0313\u0300\u039F\u0314\u0300"+
+        "\u039F\u0313\u0301\u039F\u0314\u0301\u03C5\u0313\u03C5\u0314\u03C5\u0313"+
+        "\u0300\u03C5\u0314\u0300\u03C5\u0313\u0301\u03C5\u0314\u0301\u03C5\u0313"+
+        "\u0342\u03C5\u0314\u0342\u03A5\u0314\u03A5\u0314\u0300\u03A5\u0314\u0301"+
+        "\u03A5\u0314\u0342\u03C9\u0313\u03C9\u0314\u03C9\u0313\u0300\u03C9\u0314"+
+        "\u0300\u03C9\u0313\u0301\u03C9\u0314\u0301\u03C9\u0313\u0342\u03C9\u0314"+
+        "\u0342\u03A9\u0313\u03A9\u0314\u03A9\u0313\u0300\u03A9\u0314\u0300\u03A9"+
+        "\u0313\u0301\u03A9\u0314\u0301\u03A9\u0313\u0342\u03A9\u0314\u0342\u03B1"+
+        "\u0300\u03B1\u0301\u03B5\u0300\u03B5\u0301\u03B7\u0300\u03B7\u0301\u03B9"+
+        "\u0300\u03B9\u0301\u03BF\u0300\u03BF\u0301\u03C5\u0300\u03C5\u0301\u03C9"+
+        "\u0300\u03C9\u0301\u03B1\u0313\u0345\u03B1\u0314\u0345\u03B1\u0313\u0300"+
+        "\u0345\000\u03B1\u0314\u0300\u0345\000\u03B1\u0313\u0301\u0345\000\u03B1"+
+        "\u0314\u0301\u0345\000\u03B1\u0313\u0342\u0345\000\u03B1\u0314\u0342\u0345"+
+        "\000\u0391\u0313\u0345\u0391\u0314\u0345\u0391\u0313\u0300\u0345\000\u0391"+
+        "\u0314\u0300\u0345\000\u0391\u0313\u0301\u0345\000\u0391\u0314\u0301\u0345"+
+        "\000\u0391\u0313\u0342\u0345\000\u0391\u0314\u0342\u0345\000\u03B7\u0313"+
+        "\u0345\u03B7\u0314\u0345\u03B7\u0313\u0300\u0345\000\u03B7\u0314\u0300"+
+        "\u0345\000\u03B7\u0313\u0301\u0345\000\u03B7\u0314\u0301\u0345\000\u03B7"+
+        "\u0313\u0342\u0345\000\u03B7\u0314\u0342\u0345\000\u0397\u0313\u0345\u0397"+
+        "\u0314\u0345\u0397\u0313\u0300\u0345\000\u0397\u0314\u0300\u0345\000\u0397"+
+        "\u0313\u0301\u0345\000\u0397\u0314\u0301\u0345\000\u0397\u0313\u0342\u0345"+
+        "\000\u0397\u0314\u0342\u0345\000\u03C9\u0313\u0345\u03C9\u0314\u0345\u03C9"+
+        "\u0313\u0300\u0345\000\u03C9\u0314\u0300\u0345\000\u03C9\u0313\u0301\u0345"+
+        "\000\u03C9\u0314\u0301\u0345\000\u03C9\u0313\u0342\u0345\000\u03C9\u0314"+
+        "\u0342\u0345\000\u03A9\u0313\u0345\u03A9\u0314\u0345\u03A9\u0313\u0300"+
+        "\u0345\000\u03A9\u0314\u0300\u0345\000\u03A9\u0313\u0301\u0345\000\u03A9"+
+        "\u0314\u0301\u0345\000\u03A9\u0313\u0342\u0345\000\u03A9\u0314\u0342\u0345"+
+        "\000\u03B1\u0306\u03B1\u0304\u03B1\u0300\u0345\u03B1\u0345\u03B1\u0301"+
+        "\u0345\u03B1\u0342\u03B1\u0342\u0345\u0391\u0306\u0391\u0304\u0391\u0300"+
+        "\u0391\u0301\u0391\u0345\u03B9\u00A8\u0342\u03B7\u0300\u0345\u03B7\u0345"+
+        "\u03B7\u0301\u0345\u03B7\u0342\u03B7\u0342\u0345\u0395\u0300\u0395\u0301"+
+        "\u0397\u0300\u0397\u0301\u0397\u0345\u1FBF\u0300\u1FBF\u0301\u1FBF\u0342"+
+        "\u03B9\u0306\u03B9\u0304\u03B9\u0308\u0300\u03B9\u0308\u0301\u03B9\u0342"+
+        "\u03B9\u0308\u0342\u0399\u0306\u0399\u0304\u0399\u0300\u0399\u0301\u1FFE"+
+        "\u0300\u1FFE\u0301\u1FFE\u0342\u03C5\u0306\u03C5\u0304\u03C5\u0308\u0300"+
+        "\u03C5\u0308\u0301\u03C1\u0313\u03C1\u0314\u03C5\u0342\u03C5\u0308\u0342"+
+        "\u03A5\u0306\u03A5\u0304\u03A5\u0300\u03A5\u0301\u03A1\u0314\u00A8\u0300"+
+        "\u00A8\u0301`\u03C9\u0300\u0345\u03C9\u0345\u03C9\u0301\u0345\u03C9\u0342"+
+        "\u03C9\u0342\u0345\u039F\u0300\u039F\u0301\u03A9\u0300\u03A9\u0301\u03A9"+
+        "\u0345\u00B4\u2002\u2003\u03A9KA\u030A\u2190\u0338\u2192\u0338\u2194\u0338"+
+        "\u21D0\u0338\u21D4\u0338\u21D2\u0338\u2203\u0338\u2208\u0338\u220B\u0338"+
+        "\u2223\u0338\u2225\u0338\u223C\u0338\u2243\u0338\u2245\u0338\u2248\u0338"+
+        "=\u0338\u2261\u0338\u224D\u0338<\u0338>\u0338\u2264\u0338\u2265\u0338"+
+        "\u2272\u0338\u2273\u0338\u2276\u0338\u2277\u0338\u227A\u0338\u227B\u0338"+
+        "\u2282\u0338\u2283\u0338\u2286\u0338\u2287\u0338\u22A2\u0338\u22A8\u0338"+
+        "\u22A9\u0338\u22AB\u0338\u227C\u0338\u227D\u0338\u2291\u0338\u2292\u0338"+
+        "\u22B2\u0338\u22B3\u0338\u22B4\u0338\u22B5\u0338\u3008\u3009\u304B\u3099"+
+        "\u304D\u3099\u304F\u3099\u3051\u3099\u3053\u3099\u3055\u3099\u3057\u3099"+
+        "\u3059\u3099\u305B\u3099\u305D\u3099\u305F\u3099\u3061\u3099\u3064\u3099"+
+        "\u3066\u3099\u3068\u3099\u306F\u3099\u306F\u309A\u3072\u3099\u3072\u309A"+
+        "\u3075\u3099\u3075\u309A\u3078\u3099\u3078\u309A\u307B\u3099\u307B\u309A"+
+        "\u3046\u3099\u309D\u3099\u30AB\u3099\u30AD\u3099\u30AF\u3099\u30B1\u3099"+
+        "\u30B3\u3099\u30B5\u3099\u30B7\u3099\u30B9\u3099\u30BB\u3099\u30BD\u3099"+
+        "\u30BF\u3099\u30C1\u3099\u30C4\u3099\u30C6\u3099\u30C8\u3099\u30CF\u3099"+
+        "\u30CF\u309A\u30D2\u3099\u30D2\u309A\u30D5\u3099\u30D5\u309A\u30D8\u3099"+
+        "\u30D8\u309A\u30DB\u3099\u30DB\u309A\u30A6\u3099\u30EF\u3099\u30F0\u3099"+
+        "\u30F1\u3099\u30F2\u3099\u30FD\u3099\u8C48\u66F4\u8ECA\u8CC8\u6ED1\u4E32"+
+        "\u53E5\u9F9C\u9F9C\u5951\u91D1\u5587\u5948\u61F6\u7669\u7F85\u863F\u87BA"+
+        "\u88F8\u908F\u6A02\u6D1B\u70D9\u73DE\u843D\u916A\u99F1\u4E82\u5375\u6B04"+
+        "\u721B\u862D\u9E1E\u5D50\u6FEB\u85CD\u8964\u62C9\u81D8\u881F\u5ECA\u6717"+
+        "\u6D6A\u72FC\u90CE\u4F86\u51B7\u52DE\u64C4\u6AD3\u7210\u76E7\u8001\u8606"+
+        "\u865C\u8DEF\u9732\u9B6F\u9DFA\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u8AD6"+
+        "\u58DF\u5F04\u7C60\u807E\u7262\u78CA\u8CC2\u96F7\u58D8\u5C62\u6A13\u6DDA"+
+        "\u6F0F\u7D2F\u7E37\u96FB\u52D2\u808B\u51DC\u51CC\u7A1C\u7DBE\u83F1\u9675"+
+        "\u8B80\u62CF\u6A02\u8AFE\u4E39\u5BE7\u6012\u7387\u7570\u5317\u78FB\u4FBF"+
+        "\u5FA9\u4E0D\u6CCC\u6578\u7D22\u53C3\u585E\u7701\u8449\u8AAA\u6BBA\u8FB0"+
+        "\u6C88\u62FE\u82E5\u63A0\u7565\u4EAE\u5169\u51C9\u6881\u7CE7\u826F\u8AD2"+
+        "\u91CF\u52F5\u5442\u5973\u5EEC\u65C5\u6FFE\u792A\u95AD\u9A6A\u9E97\u9ECE"+
+        "\u529B\u66C6\u6B77\u8F62\u5E74\u6190\u6200\u649A\u6F23\u7149\u7489\u79CA"+
+        "\u7DF4\u806F\u8F26\u84EE\u9023\u934A\u5217\u52A3\u54BD\u70C8\u88C2\u8AAA"+
+        "\u5EC9\u5FF5\u637B\u6BAE\u7C3E\u7375\u4EE4\u56F9\u5BE7\u5DBA\u601C\u73B2"+
+        "\u7469\u7F9A\u8046\u9234\u96F6\u9748\u9818\u4F8B\u79AE\u91B4\u96B8\u60E1"+
+        "\u4E86\u50DA\u5BEE\u5C3F\u6599\u6A02\u71CE\u7642\u84FC\u907C\u9F8D\u6688"+
+        "\u962E\u5289\u677B\u67F3\u6D41\u6E9C\u7409\u7559\u786B\u7D10\u985E\u516D"+
+        "\u622E\u9678\u502B\u5D19\u6DEA\u8F2A\u5F8B\u6144\u6817\u7387\u9686\u5229"+
+        "\u540F\u5C65\u6613\u674E\u68A8\u6CE5\u7406\u75E2\u7F79\u88CF\u88E1\u91CC"+
+        "\u96E2\u533F\u6EBA\u541D\u71D0\u7498\u85FA\u96A3\u9C57\u9E9F\u6797\u6DCB"+
+        "\u81E8\u7ACB\u7B20\u7C92\u72C0\u7099\u8B58\u4EC0\u8336\u523A\u5207\u5EA6"+
+        "\u62D3\u7CD6\u5B85\u6D1E\u66B4\u8F3B\u884C\u964D\u898B\u5ED3\u5140\u55C0"+
+        "\u585A\u6674\u51DE\u732A\u76CA\u793C\u795E\u7965\u798F\u9756\u7CBE\u7FBD"+
+        "\u8612\u8AF8\u9038\u90FD\u98EF\u98FC\u9928\u9DB4\u05D9\u05B4\u05F2\u05B7"+
+        "\u05E9\u05C1\u05E9\u05C2\u05E9\u05BC\u05C1\u05E9\u05BC\u05C2\u05D0\u05B7"+
+        "\u05D0\u05B8\u05D0\u05BC\u05D1\u05BC\u05D2\u05BC\u05D3\u05BC\u05D4\u05BC"+
+        "\u05D5\u05BC\u05D6\u05BC\u05D8\u05BC\u05D9\u05BC\u05DA\u05BC\u05DB\u05BC"+
+        "\u05DC\u05BC\u05DE\u05BC\u05E0\u05BC\u05E1\u05BC\u05E3\u05BC\u05E4\u05BC"+
+        "\u05E6\u05BC\u05E7\u05BC\u05E8\u05BC\u05E9\u05BC\u05EA\u05BC\u05D5\u05B9"+
+        "\u05D1\u05BF\u05DB\u05BF\u05E4\u05BF"
+    ;
+
+    static final CompactByteArray canonClass = new CompactByteArray(
+        "\000\u0200\uA5A5\006\000\u0080\000\000\u0100\000\u0180\u0200\u0280\u0300"+
+        "\000\000\000\u0380\uA5A5\004\u0400\u0480\u0500\u0480\u0480\u0580\u0600"+
+        "\u0680\u0700\u0780\u0800\uA5A5\016\000\u0880\000\u0900\uA5A5\017\000\u0980"+
+        "\uA5A5\036\000\u0A00\u0A80\uA5A5\u0194\000\u0B00\uA5A5\005\000\u0B80\000"+
+        "\000\000"
+        ,
+        "\000\u0C00\uA580\u00A5\u15E6\uE8A5\u04DC\uE8D8\uA505\uDCCA\uCAA5\u04DC"+
+        "\uCACA\uA50B\uDCA5\u0501\uA504\uDCA5\u08E6\uF0E6\uDCDC\uDCE6\uE6E6\uDCDC"+
+        "\uA511\u00EA\uEAE9\uA520\u00A5\u04E6\uA58A\u00DC\uA504\uE6DC\uE6E6\uE6DE"+
+        "\uDCA5\u06E6\u00A5\u05DC\uE6E6\uDCE6\uE6DE\uE4E6\u0A0B\u0C0D\u0E0F\u1011"+
+        "\u1213\024\u1516\027\030\u1900\uE6A5\u8600\u1B1C\u1D1E\u1F20\u2122\uE6E6"+
+        "\uDCA5\u1A00\u23A5\u6500\uA507\uE600\u00A5\u04E6\uDCE6\000\uE6E6\u00DC"+
+        "\uE6E6\uDCA5\u2300\u24A5\u1E00\uE6DC\uE6E6\uDCE6\uE6DC\uDCDC\uE6DC\uDCE6"+
+        "\uDCE6\uE6E6\uDCE6\uDCE6\uDCE6\uDCE6\uE6A5\u7100\u07A5\u1000\u0900\000"+
+        "\uE6DC\uE6E6\uA567\007\uA510\011\uA57F\011\uA57F\011\uA507T\u5BA5\u7300"+
+        "\u09A5\u6D00\u6767\u09A5\u0D00\uA504\u6BA5\u6C00\u7676\uA50E\u00A5\u047A"+
+        "\uA54C\u00DC\uDCA5\u1B00\uDC00\uDC00\uD8A5\u3700\u8182\u0084\uA505\u00A5"+
+        "\u0482\000\u8200\uE6E6\u0900\uE6E6\uA53E\u00DC\uA570\007\011\uA598\011"+
+        "\uA556\u00E4\uA5A6\u00E6\uE601\u01A5\u04E6\u0101\u01E6\uE6A5\u0400\uE6A5"+
+        "\u4800\uDAE4\uE8DE\uE0E0\uA569\010\u08A5\u8300\u1AA5\u8100\uA504\uE6A5"+
+        "\u5C00"
+        );
+}
diff --git a/src/com/ibm/text/DictionaryBasedBreakIterator.java b/src/com/ibm/text/DictionaryBasedBreakIterator.java
new file mode 100755
index 0000000..da953d0
--- /dev/null
+++ b/src/com/ibm/text/DictionaryBasedBreakIterator.java
@@ -0,0 +1,574 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/DictionaryBasedBreakIterator.java,v $ 
+ * $Date: 2001/02/06 22:37:30 $ 
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import java.util.Vector;
+import java.util.Stack;
+import java.util.Hashtable;
+import java.text.CharacterIterator;
+import java.io.InputStream;
+import java.io.IOException;
+
+import java.io.*;
+
+/**
+ * A subclass of RuleBasedBreakIterator that adds the ability to use a dictionary
+ * to further subdivide ranges of text beyond what is possible using just the
+ * state-table-based algorithm.  This is necessary, for example, to handle
+ * word and line breaking in Thai, which doesn't use spaces between words.  The
+ * state-table-based algorithm used by RuleBasedBreakIterator is used to divide
+ * up text as far as possible, and then contiguous ranges of letters are
+ * repeatedly compared against a list of known words (i.e., the dictionary)
+ * to divide them up into words.
+ *
+ * DictionaryBasedBreakIterator uses the same rule language as RuleBasedBreakIterator,
+ * but adds one more special substitution name: _dictionary_.  This substitution
+ * name is used to identify characters in words in the dictionary.  The idea is that
+ * if the iterator passes over a chunk of text that includes two or more characters
+ * in a row that are included in _dictionary_, it goes back through that range and
+ * derives additional break positions (if possible) using the dictionary.
+ *
+ * DictionaryBasedBreakIterator is also constructed with the filename of a dictionary
+ * file.  It uses Class.getResource() to locate the dictionary file.  The
+ * dictionary file is in a serialized binary format.  We have a very primitive (and
+ * slow) BuildDictionaryFile utility for creating dictionary files, but aren't
+ * currently making it public.  Contact us for help.
+ */
+public class DictionaryBasedBreakIterator extends RuleBasedBreakIterator {
+
+    /**
+     * a list of known words that is used to divide up contiguous ranges of letters,
+     * stored in a compressed, indexed, format that offers fast access
+     */
+    private BreakDictionary dictionary;
+
+    /**
+     * a list of flags indicating which character categories are contained in
+     * the dictionary file (this is used to determine which ranges of characters
+     * to apply the dictionary to)
+     */
+    private boolean[] categoryFlags;
+
+    /**
+     * a temporary hiding place for the number of dictionary characters in the
+     * last range passed over by next()
+     */
+    private int dictionaryCharCount;
+
+    /**
+     * when a range of characters is divided up using the dictionary, the break
+     * positions that are discovered are stored here, preventing us from having
+     * to use either the dictionary or the state table again until the iterator
+     * leaves this range of text
+     */
+    private int[] cachedBreakPositions;
+
+    /**
+     * if cachedBreakPositions is not null, this indicates which item in the
+     * cache the current iteration position refers to
+     */
+    private int positionInCache;
+
+    /**
+     * Special variable name for characters in words in dictionary
+     */
+    private static final String DICTIONARY_VAR = "_dictionary_";
+
+    /**
+     * Constructs a DictionaryBasedBreakIterator.
+     * @param description Same as the description parameter on RuleBasedBreakIterator,
+     * except for the special meaning of DICTIONARY_VAR.  This parameter is just
+     * passed through to RuleBasedBreakIterator's constructor.
+     * @param dictionaryFilename The filename of the dictionary file to use
+     */
+    public DictionaryBasedBreakIterator(String description,
+                                        InputStream dictionaryStream) throws IOException {
+        super(description);
+        dictionary = new BreakDictionary(dictionaryStream);
+    }
+
+    /**
+     * Returns a Builder that is customized to build a DictionaryBasedBreakIterator.
+     * This is the same as RuleBasedBreakIterator.Builder, except for the extra code
+     * to handle the DICTIONARY_VAR tag.
+     */
+    protected RuleBasedBreakIterator.Builder makeBuilder() {
+        return new Builder();
+    }
+
+public void writeTablesToFile(FileOutputStream file, boolean littleEndian) throws IOException {
+super.writeTablesToFile(file, littleEndian);
+
+DataOutputStream out = new DataOutputStream(file);
+
+// --- write index to fields (there's only one entry, but this allows subclassing of this class)
+writeSwappedInt((short)8, out, littleEndian);
+writeSwappedInt((short)(categoryFlags.length + 3 & 0x0f), out, littleEndian);
+
+for (int i = 0; i < categoryFlags.length; i++)
+    out.writeBoolean(categoryFlags[i]);
+switch (categoryFlags.length % 4) {
+    case 1: out.write(0);
+    case 2: out.write(0);
+    case 3: out.write(0);
+    default: break;
+}
+}
+    
+    public void setText(CharacterIterator newText) {
+        super.setText(newText);
+        cachedBreakPositions = null;
+        dictionaryCharCount = 0;
+        positionInCache = 0;
+    }
+
+    /**
+     * Sets the current iteration position to the beginning of the text.
+     * (i.e., the CharacterIterator's starting offset).
+     * @return The offset of the beginning of the text.
+     */
+    public int first() {
+        cachedBreakPositions = null;
+        dictionaryCharCount = 0;
+        positionInCache = 0;
+        return super.first();
+    }
+
+    /**
+     * Sets the current iteration position to the end of the text.
+     * (i.e., the CharacterIterator's ending offset).
+     * @return The text's past-the-end offset.
+     */
+    public int last() {
+        cachedBreakPositions = null;
+        dictionaryCharCount = 0;
+        positionInCache = 0;
+        return super.last();
+    }
+
+    /**
+     * Advances the iterator one step backwards.
+     * @return The position of the last boundary position before the
+     * current iteration position
+     */
+    public int previous() {
+        CharacterIterator text = getText();
+
+        // if we have cached break positions and we're still in the range
+        // covered by them, just move one step backward in the cache
+        if (cachedBreakPositions != null && positionInCache > 0) {
+            --positionInCache;
+            text.setIndex(cachedBreakPositions[positionInCache]);
+            return cachedBreakPositions[positionInCache];
+        }
+
+        // otherwise, dump the cache and use the inherited previous() method to move
+        // backward.  This may fill up the cache with new break positions, in which
+        // case we have to mark our position in the cache
+        else {
+            cachedBreakPositions = null;
+            int result = super.previous();
+            if (cachedBreakPositions != null)
+                positionInCache = cachedBreakPositions.length - 2;
+            return result;
+        }
+    }
+
+    /**
+     * Sets the current iteration position to the last boundary position
+     * before the specified position.
+     * @param offset The position to begin searching from
+     * @return The position of the last boundary before "offset"
+     */
+    public int preceding(int offset) {
+        CharacterIterator text = getText();
+        checkOffset(offset, text);
+
+        // if we have no cached break positions, or "offset" is outside the
+        // range covered by the cache, we can just call the inherited routine
+        // (which will eventually call other routines in this class that may
+        // refresh the cache)
+        if (cachedBreakPositions == null || offset <= cachedBreakPositions[0] ||
+                offset > cachedBreakPositions[cachedBreakPositions.length - 1]) {
+            cachedBreakPositions = null;
+            return super.preceding(offset);
+        }
+
+        // on the other hand, if "offset" is within the range covered by the cache,
+        // then all we have to do is search the cache for the last break position
+        // before "offset"
+        else {
+            positionInCache = 0;
+            while (positionInCache < cachedBreakPositions.length
+                   && offset > cachedBreakPositions[positionInCache])
+                ++positionInCache;
+            --positionInCache;
+            text.setIndex(cachedBreakPositions[positionInCache]);
+            return text.getIndex();
+        }
+    }
+
+    /**
+     * Sets the current iteration position to the first boundary position after
+     * the specified position.
+     * @param offset The position to begin searching forward from
+     * @return The position of the first boundary after "offset"
+     */
+    public int following(int offset) {
+        CharacterIterator text = getText();
+        checkOffset(offset, text);
+
+        // if we have no cached break positions, or if "offset" is outside the
+        // range covered by the cache, then dump the cache and call our
+        // inherited following() method.  This will call other methods in this
+        // class that may refresh the cache.
+        if (cachedBreakPositions == null || offset < cachedBreakPositions[0] ||
+                offset >= cachedBreakPositions[cachedBreakPositions.length - 1]) {
+            cachedBreakPositions = null;
+            return super.following(offset);
+        }
+
+        // on the other hand, if "offset" is within the range covered by the
+        // cache, then just search the cache for the first break position
+        // after "offset"
+        else {
+            positionInCache = 0;
+            while (positionInCache < cachedBreakPositions.length
+                   && offset >= cachedBreakPositions[positionInCache])
+                ++positionInCache;
+            text.setIndex(cachedBreakPositions[positionInCache]);
+            return text.getIndex();
+        }
+    }
+
+    /**
+     * This is the implementation function for next().
+     */
+    protected int handleNext() {
+        CharacterIterator text = getText();
+
+        // if there are no cached break positions, or if we've just moved
+        // off the end of the range covered by the cache, we have to dump
+        // and possibly regenerate the cache
+        if (cachedBreakPositions == null || positionInCache == cachedBreakPositions.length - 1) {
+
+            // start by using the inherited handleNext() to find a tentative return
+            // value.   dictionaryCharCount tells us how many dictionary characters
+            // we passed over on our way to the tentative return value
+            int startPos = text.getIndex();
+            dictionaryCharCount = 0;
+            int result = super.handleNext();
+
+            // if we passed over more than one dictionary character, then we use
+            // divideUpDictionaryRange() to regenerate the cached break positions
+            // for the new range
+            if (dictionaryCharCount > 1 && result - startPos > 1) {
+                divideUpDictionaryRange(startPos, result);
+            }
+
+            // otherwise, the value we got back from the inherited fuction
+            // is our return value, and we can dump the cache
+            else {
+                cachedBreakPositions = null;
+                return result;
+            }
+        }
+
+        // if the cache of break positions has been regenerated (or existed all
+        // along), then just advance to the next break position in the cache
+        // and return it
+        if (cachedBreakPositions != null) {
+            ++positionInCache;
+            text.setIndex(cachedBreakPositions[positionInCache]);
+            return cachedBreakPositions[positionInCache];
+        }
+        return -9999;   // SHOULD NEVER GET HERE!
+    }
+
+    /**
+     * Looks up a character category for a character.
+     */
+    protected int lookupCategory(char c) {
+        // this override of lookupCategory() exists only to keep track of whether we've
+        // passed over any dictionary characters.  It calls the inherited lookupCategory()
+        // to do the real work, and then checks whether its return value is one of the
+        // categories represented in the dictionary.  If it is, bump the dictionary-
+        // character count.
+        int result = super.lookupCategory(c);
+        if (result != RuleBasedBreakIterator.IGNORE && categoryFlags[result]) {
+            ++dictionaryCharCount;
+        }
+        return result;
+    }
+
+    /**
+     * This is the function that actually implements the dictionary-based
+     * algorithm.  Given the endpoints of a range of text, it uses the
+     * dictionary to determine the positions of any boundaries in this
+     * range.  It stores all the boundary positions it discovers in
+     * cachedBreakPositions so that we only have to do this work once
+     * for each time we enter the range.
+     */
+    private void divideUpDictionaryRange(int startPos, int endPos) {
+        CharacterIterator text = getText();
+
+        // the range we're dividing may begin or end with non-dictionary characters
+        // (i.e., for line breaking, we may have leading or trailing punctuation
+        // that needs to be kept with the word).  Seek from the beginning of the
+        // range to the first dictionary character
+        text.setIndex(startPos);
+        char c = text.current();
+        int category = lookupCategory(c);
+        while (category == IGNORE || !categoryFlags[category]) {
+            c = text.next();
+            category = lookupCategory(c);
+        }
+//System.out.println("\nDividing up range from " + (text.getIndex() + 1) + " to " + endPos);
+
+        // initialize.  We maintain two stacks: currentBreakPositions contains
+        // the list of break positions that will be returned if we successfully
+        // finish traversing the whole range now.  possibleBreakPositions lists
+        // all other possible word ends we've passed along the way.  (Whenever
+        // we reach an error [a sequence of characters that can't begin any word
+        // in the dictionary], we back up, possibly delete some breaks from
+        // currentBreakPositions, move a break from possibleBreakPositions
+        // to currentBreakPositions, and start over from there.  This process
+        // continues in this way until we either successfully make it all the way
+        // across the range, or exhaust all of our combinations of break
+        // positions.)
+        Stack currentBreakPositions = new Stack();
+        Stack possibleBreakPositions = new Stack();
+        Vector wrongBreakPositions = new Vector();
+
+        // the dictionary is implemented as a trie, which is treated as a state
+        // machine.  -1 represents the end of a legal word.  Every word in the
+        // dictionary is represented by a path from the root node to -1.  A path
+        // that ends in state 0 is an illegal combination of characters.
+        int state = 0;
+
+        // these two variables are used for error handling.  We keep track of the
+        // farthest we've gotten through the range being divided, and the combination
+        // of breaks that got us that far.  If we use up all possible break
+        // combinations, the text contains an error or a word that's not in the
+        // dictionary.  In this case, we "bless" the break positions that got us the
+        // farthest as real break positions, and then start over from scratch with
+        // the character where the error occurred.
+        int farthestEndPoint = text.getIndex();
+        Stack bestBreakPositions = null;
+
+        // initialize (we always exit the loop with a break statement)
+        c = text.current();
+        while (true) {
+//System.out.print("c = " + Integer.toString(c, 16) + ", pos = " + text.getIndex());
+
+            // if we can transition to state "-1" from our current state, we're
+            // on the last character of a legal word.  Push that position onto
+            // the possible-break-positions stack
+            if (dictionary.at(state, 0) == -1) {
+                possibleBreakPositions.push(new Integer(text.getIndex()));
+            }
+
+            // look up the new state to transition to in the dictionary
+            state = (dictionary.at(state, c)) & 0xFFFF;
+//System.out.print(", state = " + state);
+
+            // if the character we're sitting on causes us to transition to
+            // the "end of word" state, then it was a non-dictionary character
+            // and we've successfully traversed the whole range.  Drop out
+            // of the loop.
+            if (state == /*-1*/ 0xFFFF) {
+                currentBreakPositions.push(new Integer(text.getIndex()));
+                break;
+            }
+
+            // if the character we're sitting on causes us to transition to
+            // the error state, or if we've gone off the end of the range
+            // without transitioning to the "end of word" state, we've hit
+            // an error...
+            else if (state == 0 || text.getIndex() >= endPos) {
+
+                // if this is the farthest we've gotten, take note of it in
+                // case there's an error in the text
+                if (text.getIndex() > farthestEndPoint) {
+                    farthestEndPoint = text.getIndex();
+                    bestBreakPositions = (Stack)(currentBreakPositions.clone());
+                }
+
+                // wrongBreakPositions is a list of all break positions we've tried starting
+                // that didn't allow us to traverse all the way through the text.  Every time
+                // we pop a break position off of currentBreakPositions, we put it into
+                // wrongBreakPositions to avoid trying it again later.  If we make it to this
+                // spot, we're either going to back up to a break in possibleBreakPositions
+                // and try starting over from there, or we've exhausted all possible break
+                // positions and are going to do the fallback procedure.  This loop prevents
+                // us from messing with anything in possibleBreakPositions that didn't work as
+                // a starting point the last time we tried it (this is to prevent a bunch of
+                // repetitive checks from slowing down some extreme cases)
+                Integer newStartingSpot = null;
+                while (!possibleBreakPositions.isEmpty() && wrongBreakPositions.contains(
+                            possibleBreakPositions.peek())) {
+                    possibleBreakPositions.pop();
+                }
+                
+                // if we've used up all possible break-position combinations, there's
+                // an error or an unknown word in the text.  In this case, we start
+                // over, treating the farthest character we've reached as the beginning
+                // of the range, and "blessing" the break positions that got us that
+                // far as real break positions
+                if (possibleBreakPositions.isEmpty()) {
+                    if (bestBreakPositions != null) {
+                        currentBreakPositions = bestBreakPositions;
+                        if (farthestEndPoint < endPos) {
+                            text.setIndex(farthestEndPoint + 1);
+                        }
+                        else {
+                            break;
+                        }
+                    }
+                    else {
+                        if ((currentBreakPositions.size() == 0
+                                || ((Integer)(currentBreakPositions.peek())).intValue() != text.getIndex())
+                                && text.getIndex() != startPos) {
+                            currentBreakPositions.push(new Integer(text.getIndex()));
+                        }
+                        text.next();
+                        currentBreakPositions.push(new Integer(text.getIndex()));
+                    }
+                }
+
+                // if we still have more break positions we can try, then promote the
+                // last break in possibleBreakPositions into currentBreakPositions,
+                // and get rid of all entries in currentBreakPositions that come after
+                // it.  Then back up to that position and start over from there (i.e.,
+                // treat that position as the beginning of a new word)
+                else {
+                    Integer temp = (Integer)possibleBreakPositions.pop();
+                    Object temp2 = null;
+                    while (!currentBreakPositions.isEmpty() && temp.intValue() <
+                           ((Integer)currentBreakPositions.peek()).intValue()) {
+                        temp2 = currentBreakPositions.pop();
+                        wrongBreakPositions.addElement(temp2);
+                    }
+                    currentBreakPositions.push(temp);
+                    text.setIndex(((Integer)currentBreakPositions.peek()).intValue());
+                }
+
+                // re-sync "c" for the next go-round, and drop out of the loop if
+                // we've made it off the end of the range
+                c = text.current();
+                state = 0;
+                if (text.getIndex() >= endPos) {
+                    break;
+                }
+            }
+
+            // if we didn't hit any exceptional conditions on this last iteration,
+            // just advance to the next character and loop
+            else {
+                c = text.next();
+            }
+//System.out.print(", possibleBreakPositions = { "); for (int i = 0; i < possibleBreakPositions.size(); i++) System.out.print(possibleBreakPositions.elementAt(i) + " "); System.out.print("}");
+//System.out.print(", currentBreakPositions = { "); for (int i = 0; i < currentBreakPositions.size(); i++) System.out.print(currentBreakPositions.elementAt(i) + " "); System.out.println("}");
+        }
+
+        // dump the last break position in the list, and replace it with the actual
+        // end of the range (which may be the same character, or may be further on
+        // because the range actually ended with non-dictionary characters we want to
+        // keep with the word)
+        if (!currentBreakPositions.isEmpty()) {
+            currentBreakPositions.pop();
+        }
+        currentBreakPositions.push(new Integer(endPos));
+
+        // create a regular array to hold the break positions and copy
+        // the break positions from the stack to the array (in addition,
+        // our starting position goes into this array as a break position).
+        // This array becomes the cache of break positions used by next()
+        // and previous(), so this is where we actually refresh the cache.
+        cachedBreakPositions = new int[currentBreakPositions.size() + 1];
+        cachedBreakPositions[0] = startPos;
+
+        for (int i = 0; i < currentBreakPositions.size(); i++) {
+            cachedBreakPositions[i + 1] = ((Integer)currentBreakPositions.elementAt(i)).intValue();
+        }
+        positionInCache = 0;
+    }
+
+    /**
+     * The Builder class for DictionaryBasedBreakIterator inherits almost all of
+     * its functionality from the Builder class for RuleBasedBreakIterator, but
+     * extends it with extra logic to handle the DICTIIONARY_VAR token
+     */
+    protected class Builder extends RuleBasedBreakIterator.Builder {
+
+        /**
+         * A UnicodeSet that contains all the characters represented in the dictionary
+         */
+        private UnicodeSet dictionaryChars = new UnicodeSet();
+        private String dictionaryExpression = "";
+
+        /**
+         * No special initialization
+         */
+        public Builder() {
+        }
+
+        /**
+         * We override handleSpecialSubstitution() to add logic to handle
+         * the $dictionary tag.  If we see a substitution named DICTIONARY_VAR,
+         * parse the substitution expression and store the result in
+         * dictionaryChars.
+         */
+        protected void handleSpecialSubstitution(String replace, String replaceWith,
+                                                 int startPos, String description) {
+            super.handleSpecialSubstitution(replace, replaceWith, startPos, description);
+
+            if (replace.equals(DICTIONARY_VAR)) {
+                if (replaceWith.charAt(0) == '(') {
+                    error("Dictionary group can't be enclosed in (", startPos, description);
+                }
+                dictionaryExpression = replaceWith;
+                dictionaryChars = new UnicodeSet(replaceWith, false);
+            }
+        }
+
+        /**
+         * The other half of the logic to handle the dictionary characters happens here.
+         * After the inherited builder has derived the real character categories, we
+         * set up the categoryFlags array in the iterator.  This array contains "true"
+         * for every character category that includes a dictionary character.
+         */
+        protected void buildCharCategories(Vector tempRuleList) {
+            super.buildCharCategories(tempRuleList);
+
+            categoryFlags = new boolean[categories.size()];
+            for (int i = 0; i < categories.size(); i++) {
+                UnicodeSet cs = (UnicodeSet)categories.elementAt(i);
+                
+                cs.retainAll(dictionaryChars);
+                if (!cs.isEmpty()) {
+                    categoryFlags[i] = true;
+                }
+            }
+        }
+
+        // This function is actually called by RuleBasedBreakIterator.buildCharCategories(),
+        // which is called by the function above.  This gives us a way to create a separate
+        // character category for the dictionary characters even when RuleBasedBreakIterator
+        // isn't making a distinction
+        protected void mungeExpressionList(Hashtable expressions) {
+            expressions.put(dictionaryExpression, dictionaryChars);
+        }
+    }
+}
diff --git a/src/com/ibm/text/DigitList.java b/src/com/ibm/text/DigitList.java
new file mode 100755
index 0000000..dfea7d9
--- /dev/null
+++ b/src/com/ibm/text/DigitList.java
@@ -0,0 +1,708 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/DigitList.java,v $ 
+ * $Date: 2000/05/26 21:38:55 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.math.BigInteger;
+
+/**
+ * <code>DigitList</code> handles the transcoding between numeric values and
+ * strings of characters.  It only represents non-negative numbers.  The
+ * division of labor between <code>DigitList</code> and
+ * <code>DecimalFormat</code> is that <code>DigitList</code> handles the radix
+ * 10 representation issues and numeric conversion, including rounding;
+ * <code>DecimalFormat</code> handles the locale-specific issues such as
+ * positive and negative representation, digit grouping, decimal point,
+ * currency, and so on.
+ *
+ * <p>A <code>DigitList</code> is a representation of a finite numeric value.
+ * <code>DigitList</code> objects do not represent <code>NaN</code> or infinite
+ * values.  A <code>DigitList</code> value can be converted to a
+ * <code>BigDecimal</code> without loss of precision.  Conversion to other
+ * numeric formats may involve loss of precision, depending on the specific
+ * value.
+ *
+ * <p>The <code>DigitList</code> representation consists of a string of
+ * characters, which are the digits radix 10, from '0' to '9'.  It also has a
+ * base 10 exponent associated with it.  The value represented by a
+ * <code>DigitList</code> object can be computed by mulitplying the fraction
+ * <em>f</em>, where 0 <= <em>f</em> < 1, derived by placing all the digits of
+ * the list to the right of the decimal point, by 10^exponent.
+ *
+ * @see java.util.Locale
+ * @see java.text.Format
+ * @see NumberFormat
+ * @see DecimalFormat
+ * @see java.text.ChoiceFormat
+ * @see java.text.MessageFormat
+ * @version      1.18 08/12/98
+ * @author       Mark Davis, Alan Liu
+ * */
+final class DigitList implements Cloneable {
+    /**
+     * The maximum number of significant digits in an IEEE 754 double, that
+     * is, in a Java double.  This must not be increased, or garbage digits
+     * will be generated, and should not be decreased, or accuracy will be lost.
+     */
+    public static final int MAX_LONG_DIGITS = 19; // == Long.toString(Long.MAX_VALUE).length()
+    public static final int DBL_DIG = 17;
+
+    /**
+     * These data members are intentionally public and can be set directly.
+     *
+     * The value represented is given by placing the decimal point before
+     * digits[decimalAt].  If decimalAt is < 0, then leading zeros between
+     * the decimal point and the first nonzero digit are implied.  If decimalAt
+     * is > count, then trailing zeros between the digits[count-1] and the
+     * decimal point are implied.
+     *
+     * Equivalently, the represented value is given by f * 10^decimalAt.  Here
+     * f is a value 0.1 <= f < 1 arrived at by placing the digits in Digits to
+     * the right of the decimal.
+     *
+     * DigitList is normalized, so if it is non-zero, figits[0] is non-zero.  We
+     * don't allow denormalized numbers because our exponent is effectively of
+     * unlimited magnitude.  The count value contains the number of significant
+     * digits present in digits[].
+     *
+     * Zero is represented by any DigitList with count == 0 or with each digits[i]
+     * for all i <= count == '0'.
+     */
+    public int decimalAt = 0;
+    public int count = 0;
+    public byte[] digits = new byte[MAX_LONG_DIGITS];
+
+    private void ensureCapacity(int digitCapacity, int digitsToCopy) {
+        if (digitCapacity > digits.length) {
+            byte[] newDigits = new byte[digitCapacity * 2];
+            System.arraycopy(digits, 0, newDigits, 0, digitsToCopy);
+            digits = newDigits;
+        }
+    }
+
+    /**
+     * Return true if the represented number is zero.
+     */
+    boolean isZero()
+    {
+        for (int i=0; i<count; ++i) if (digits[i] != '0') return false;
+        return true;
+    }
+
+    /**
+     * Clears out the digits.
+     * Use before appending them.
+     * Typically, you set a series of digits with append, then at the point
+     * you hit the decimal point, you set myDigitList.decimalAt = myDigitList.count;
+     * then go on appending digits.
+     */
+    public void clear () {
+        decimalAt = 0;
+        count = 0;
+    }
+    /**
+     * Appends digits to the list.
+     */
+    public void append (int digit) {
+        ensureCapacity(count+1, count);
+        digits[count++] = (byte) digit;
+    }
+    /**
+     * Utility routine to get the value of the digit list
+     * If (count == 0) this throws a NumberFormatException, which
+     * mimics Long.parseLong().
+     */
+    public final double getDouble() {
+        if (count == 0) return 0.0;
+        StringBuffer temp = new StringBuffer(count);
+        temp.append('.');
+        for (int i = 0; i < count; ++i) temp.append((char)(digits[i]));
+        temp.append('E');
+        temp.append(Integer.toString(decimalAt));
+        return Double.valueOf(temp.toString()).doubleValue();
+        // long value = Long.parseLong(temp.toString());
+        // return (value * Math.pow(10, decimalAt - count));
+    }
+
+    /**
+     * Utility routine to get the value of the digit list.
+     * If (count == 0) this returns 0, unlike Long.parseLong().
+     */
+    public final long getLong() {
+        // for now, simple implementation; later, do proper IEEE native stuff
+
+        if (count == 0) return 0;
+
+        // We have to check for this, because this is the one NEGATIVE value
+        // we represent.  If we tried to just pass the digits off to parseLong,
+        // we'd get a parse failure.
+        if (isLongMIN_VALUE()) return Long.MIN_VALUE;
+
+        StringBuffer temp = new StringBuffer(count);
+        for (int i = 0; i < decimalAt; ++i)
+        {
+            temp.append((i < count) ? (char)(digits[i]) : '0');
+        }
+        return Long.parseLong(temp.toString());
+    }
+
+    /**
+     * Return a <code>BigInteger</code> representing the value stored in this
+     * <code>DigitList</code>.  This method assumes that this object contains
+     * an integral value; if not, it will return an incorrect value.
+     * [bnf]
+     * @param isPositive determines the sign of the returned result
+     * @return the value of this object as a <code>BigInteger</code>
+     */
+    public BigInteger getBigInteger(boolean isPositive) {
+        if (isZero()) return BigInteger.valueOf(0);
+        StringBuffer stringRep = new StringBuffer(count);
+        if (!isPositive) {
+            stringRep.append('-');
+        }
+        for (int i=0; i<count; ++i) {
+            stringRep.append((char) digits[i]);
+        }
+        int d = decimalAt;
+        while (d-- > count) {
+            stringRep.append('0');
+        }
+        return new BigInteger(stringRep.toString());
+    }
+
+    /**
+     * Return a <code>BigDecimal</code> representing the value stored in this
+     * <code>DigitList</code>.
+     * [bnf]
+     * @param isPositive determines the sign of the returned result
+     * @return the value of this object as a <code>BigDecimal</code>
+     */
+    public java.math.BigDecimal getBigDecimal(boolean isPositive) {
+        if (isZero()) return java.math.BigDecimal.valueOf(0);
+        StringBuffer stringRep = new StringBuffer(count+1);
+        if (!isPositive) {
+            stringRep.append('-');
+        }
+        int d = decimalAt;
+        if (d < 0) {
+            stringRep.append('.');
+            while (d < 0) {
+                stringRep.append('0');
+                ++d;
+            }
+            d = -1;
+        }
+        for (int i=0; i<count; ++i) {
+            if (d == i) {
+                stringRep.append('.');
+            }
+            stringRep.append((char) digits[i]);
+        }
+        while (d-- > count) {
+            stringRep.append('0');
+        }
+        return new java.math.BigDecimal(stringRep.toString());
+    }
+
+    /**
+     * Return whether or not this objects represented value is an integer.
+     * [bnf]
+     * @return true if the represented value of this object is an integer
+     */
+    boolean isIntegral() {
+        // Trim trailing zeros.  This does not change the represented value.
+        while (count > 0 && digits[count - 1] == (byte)'0') --count;
+        return count == 0 || decimalAt >= count;
+    }
+
+    /**
+     * Return true if the number represented by this object can fit into
+     * a long.
+     */
+    boolean fitsIntoLong(boolean isPositive)
+    {
+        // Figure out if the result will fit in a long.  We have to
+        // first look for nonzero digits after the decimal point;
+        // then check the size.  If the digit count is 18 or less, then
+        // the value can definitely be represented as a long.  If it is 19
+        // then it may be too large.
+
+        // Trim trailing zeros.  This does not change the represented value.
+        while (count > 0 && digits[count - 1] == (byte)'0') --count;
+
+        if (count == 0) {
+            // Positive zero fits into a long, but negative zero can only
+            // be represented as a double. - bug 4162852
+            return isPositive;
+        }
+
+        if (decimalAt < count || decimalAt > MAX_LONG_DIGITS) return false;
+
+        if (decimalAt < MAX_LONG_DIGITS) return true;
+
+        // At this point we have decimalAt == count, and count == MAX_LONG_DIGITS.
+        // The number will overflow if it is larger than 9223372036854775807
+        // or smaller than -9223372036854775808.
+        for (int i=0; i<count; ++i)
+        {
+            byte dig = digits[i], max = LONG_MIN_REP[i];
+            if (dig > max) return false;
+            if (dig < max) return true;
+        }
+
+        // At this point the first count digits match.  If decimalAt is less
+        // than count, then the remaining digits are zero, and we return true.
+        if (count < decimalAt) return true;
+
+        // Now we have a representation of Long.MIN_VALUE, without the leading
+        // negative sign.  If this represents a positive value, then it does
+        // not fit; otherwise it fits.
+        return !isPositive;
+    }
+
+    /**
+     * Set the digit list to a representation of the given double value.
+     * This method supports fixed-point notation.
+     * @param source Value to be converted; must not be Inf, -Inf, Nan,
+     * or a value <= 0.
+     * @param maximumFractionDigits The most fractional digits which should
+     * be converted.
+     */
+    public final void set(double source, int maximumFractionDigits)
+    {
+        set(source, maximumFractionDigits, true);
+    }
+
+    /**
+     * Set the digit list to a representation of the given double value.
+     * This method supports both fixed-point and exponential notation.
+     * @param source Value to be converted; must not be Inf, -Inf, Nan,
+     * or a value <= 0.
+     * @param maximumDigits The most fractional or total digits which should
+     * be converted.
+     * @param fixedPoint If true, then maximumDigits is the maximum
+     * fractional digits to be converted.  If false, total digits.
+     */
+    final void set(double source, int maximumDigits, boolean fixedPoint)
+    {
+        if (source == 0) source = 0;
+        // Generate a representation of the form DDDDD, DDDDD.DDDDD, or
+        // DDDDDE+/-DDDDD.
+        String rep = Double.toString(source);
+
+        decimalAt = -1;
+        count = 0;
+        int exponent = 0;
+        // Number of zeros between decimal point and first non-zero digit after
+        // decimal point, for numbers < 1.
+        int leadingZerosAfterDecimal = 0;
+        boolean nonZeroDigitSeen = false;
+        for (int i=0; i < rep.length(); ++i)
+        {
+            char c = rep.charAt(i);
+            if (c == '.')
+            {
+                decimalAt = count;
+            }
+            else if (c == 'e' || c == 'E')
+            {
+                exponent = Integer.valueOf(rep.substring(i+1)).intValue();
+                break;
+            }
+            else if (count < MAX_LONG_DIGITS)
+            {
+                if (!nonZeroDigitSeen)
+                {
+                    nonZeroDigitSeen = (c != '0');
+                    if (!nonZeroDigitSeen && decimalAt != -1) ++leadingZerosAfterDecimal;
+                }
+
+                if (nonZeroDigitSeen) digits[count++] = (byte)c;
+            }
+        }
+        if (decimalAt == -1) decimalAt = count;
+        decimalAt += exponent - leadingZerosAfterDecimal;
+
+        if (fixedPoint) {
+            // The negative of the exponent represents the number of leading
+            // zeros between the decimal and the first non-zero digit, for
+            // a value < 0.1 (e.g., for 0.00123, -decimalAt == 2).  If this
+            // is more than the maximum fraction digits, then we have an underflow
+            // for the printed representation.
+            if (-decimalAt > maximumDigits) {
+                count = 0;
+                return;
+            } else if (-decimalAt == maximumDigits) {
+                if (shouldRoundUp(0)) {
+                    count = 1;
+                    ++decimalAt;
+                    digits[0] = (byte)'1';
+                } else {
+                    count = 0;
+                }
+                return;
+            }
+            // else fall through
+        }
+
+        // Eliminate trailing zeros.
+        while (count > 1 && digits[count - 1] == '0')
+            --count;
+
+        // Eliminate digits beyond maximum digits to be displayed.
+        // Round up if appropriate.
+        round(fixedPoint ? (maximumDigits + decimalAt) : maximumDigits);
+    }
+
+    /**
+     * Return true if truncating the representation to the given number
+     * of digits will result in an increment to the last digit.  This
+     * method implements half-even rounding, the default rounding mode.
+     * [bnf]
+     * @param maximumDigits the number of digits to keep, from 0 to
+     * <code>count-1</code>.  If 0, then all digits are rounded away, and
+     * this method returns true if a one should be generated (e.g., formatting
+     * 0.09 with "#.#").
+     * @return true if digit <code>maximumDigits-1</code> should be
+     * incremented
+     */
+    private boolean shouldRoundUp(int maximumDigits) {
+        boolean increment = false;
+        // Implement IEEE half-even rounding
+        if (digits[maximumDigits] > '5') {
+            return true;
+        } else if (digits[maximumDigits] == '5' ) {
+            for (int i=maximumDigits+1; i<count; ++i) {
+                if (digits[i] != '0') {
+                    return true;
+                }
+            }
+            return maximumDigits == 0 || (digits[maximumDigits-1] % 2 != 0);
+        }
+        return false;
+    }
+
+    /**
+     * Round the representation to the given number of digits.
+     * @param maximumDigits The maximum number of digits to be shown.
+     * Upon return, count will be less than or equal to maximumDigits.
+     */
+    public final void round(int maximumDigits) {        
+        // Eliminate digits beyond maximum digits to be displayed.
+        // Round up if appropriate.
+        // [bnf] rewritten to fix 4179818
+        if (maximumDigits > 0 && maximumDigits < count) {
+            if (shouldRoundUp(maximumDigits)) {
+                // Rounding up involved incrementing digits from LSD to MSD.
+                // In most cases this is simple, but in a worst case situation
+                // (9999..99) we have to adjust the decimalAt value.
+                for (;;)
+                {
+                    --maximumDigits;
+                    if (maximumDigits < 0)
+                    {
+                        // We have all 9's, so we increment to a single digit
+                        // of one and adjust the exponent.
+                        digits[0] = (byte) '1';
+                        ++decimalAt;
+                        maximumDigits = 0; // Adjust the count
+                        break;
+                    }
+
+                    ++digits[maximumDigits];
+                    if (digits[maximumDigits] <= '9') break;
+                    // digits[maximumDigits] = '0'; // Unnecessary since we'll truncate this
+                }
+                ++maximumDigits; // Increment for use as count
+            }
+            count = maximumDigits;
+        }
+    }
+
+    /**
+     * Utility routine to set the value of the digit list from a long
+     */
+    public final void set(long source)
+    {
+        set(source, 0);
+    }
+
+    /**
+     * Set the digit list to a representation of the given long value.
+     * @param source Value to be converted; must be >= 0 or ==
+     * Long.MIN_VALUE.
+     * @param maximumDigits The most digits which should be converted.
+     * If maximumDigits is lower than the number of significant digits
+     * in source, the representation will be rounded.  Ignored if <= 0.
+     */
+    public final void set(long source, int maximumDigits)
+    {
+        // This method does not expect a negative number. However,
+        // "source" can be a Long.MIN_VALUE (-9223372036854775808),
+        // if the number being formatted is a Long.MIN_VALUE.  In that
+        // case, it will be formatted as -Long.MIN_VALUE, a number
+        // which is outside the legal range of a long, but which can
+        // be represented by DigitList.
+        // [NEW] Faster implementation
+        if (source <= 0) {
+            if (source == Long.MIN_VALUE) {
+                decimalAt = count = MAX_LONG_DIGITS;
+                System.arraycopy(LONG_MIN_REP, 0, digits, 0, count);
+            } else {
+                count = 0;
+                decimalAt = 0;
+            }
+        } else {
+            int left = MAX_LONG_DIGITS;
+            int right;
+            while (source > 0) {
+                digits[--left] = (byte) (((long) '0') + (source % 10));
+                source /= 10;
+            }
+            decimalAt = MAX_LONG_DIGITS-left;
+            // Don't copy trailing zeros
+            // we are guaranteed that there is at least one non-zero digit,
+            // so we don't have to check lower bounds
+            for (right = MAX_LONG_DIGITS - 1; digits[right] == (byte) '0'; --right) {}
+            count = right - left + 1;
+            System.arraycopy(digits, left, digits, 0, count);
+        }        
+        if (maximumDigits > 0) round(maximumDigits);
+    }
+
+    /**
+     * Set the digit list to a representation of the given BigInteger value.
+     * [bnf]
+     * @param source Value to be converted
+     * @param maximumDigits The most digits which should be converted.
+     * If maximumDigits is lower than the number of significant digits
+     * in source, the representation will be rounded.  Ignored if <= 0.
+     */
+    public final void set(BigInteger source, int maximumDigits) {
+        String stringDigits = source.toString();
+
+        count = decimalAt = stringDigits.length();
+
+        // Don't copy trailing zeros
+        while (count > 1 && stringDigits.charAt(count - 1) == '0') --count;
+
+        int offset = 0;
+        if (stringDigits.charAt(0) == '-') {
+            ++offset;
+            --count;
+            --decimalAt;
+        }
+
+        ensureCapacity(count, 0);
+        for (int i = 0; i < count; ++i) {
+            digits[i] = (byte) stringDigits.charAt(i + offset);
+        }
+
+        if (maximumDigits > 0) round(maximumDigits);
+    }
+
+    /**
+     * Internal method that sets this digit list to represent the
+     * given value.  The value is given as a String of the format
+     * returned by BigDecimal.
+     * @param stringDigits value to be represented with the following
+     * syntax, expressed as a regular expression: -?\d*.?\d*
+     * Must not be an empty string.
+     * @param maximumDigits The most digits which should be converted.
+     * If maximumDigits is lower than the number of significant digits
+     * in source, the representation will be rounded.  Ignored if <= 0.
+     * @param fixedPoint If true, then maximumDigits is the maximum
+     * fractional digits to be converted.  If false, total digits.
+     */
+    private void setBigDecimalDigits(String stringDigits,
+                                           int maximumDigits, boolean fixedPoint) {
+        // Find the first non-zero digit, the decimal, and the last non-zero digit.
+        int first=-1, last=stringDigits.length()-1, decimal=-1;
+        for (int i=0; (first<0 || decimal<0) && i<=last; ++i) {
+            char c = stringDigits.charAt(i);
+            if (c == '.') {
+                decimal = i;
+            } else if (first < 0 && (c >= '1' && c <= '9')) {
+                first = i;
+            }
+        }
+
+        if (first < 0) {
+            clear();
+            return;
+        }
+
+        // At this point we know there is at least one non-zero digit, so the
+        // following loop is safe.
+        for (;;) {
+            char c = stringDigits.charAt(last);
+            if (c != '0' && c != '.') {
+                break;
+            }
+            --last;
+        }
+
+        if (decimal < 0) {
+            decimal = stringDigits.length();
+        }
+
+        count = last - first;
+        if (decimal < first || decimal > last) {
+            ++count;
+        }
+        decimalAt = decimal - first;
+        if (decimalAt < 0) {
+            ++decimalAt;
+        }
+
+        ensureCapacity(count, 0);
+        for (int i = 0; i < count; ++i) {
+            digits[i] = (byte) stringDigits.charAt(first++);
+            if (first == decimal) {
+                ++first;
+            }
+        }
+
+        // Eliminate digits beyond maximum digits to be displayed.
+        // Round up if appropriate.
+        round(fixedPoint ? (maximumDigits + decimalAt) : maximumDigits);
+    }
+
+    /**
+     * Set the digit list to a representation of the given BigDecimal value.
+     * [bnf]
+     * @param source Value to be converted
+     * @param maximumDigits The most digits which should be converted.
+     * If maximumDigits is lower than the number of significant digits
+     * in source, the representation will be rounded.  Ignored if <= 0.
+     * @param fixedPoint If true, then maximumDigits is the maximum
+     * fractional digits to be converted.  If false, total digits.
+     */
+    public final void set(java.math.BigDecimal source,
+                          int maximumDigits, boolean fixedPoint) {
+        setBigDecimalDigits(source.toString(), maximumDigits, fixedPoint);
+    }
+
+    /*
+     * Set the digit list to a representation of the given BigDecimal value.
+     * [bnf]
+     * @param source Value to be converted
+     * @param maximumDigits The most digits which should be converted.
+     * If maximumDigits is lower than the number of significant digits
+     * in source, the representation will be rounded.  Ignored if <= 0.
+     * @param fixedPoint If true, then maximumDigits is the maximum
+     * fractional digits to be converted.  If false, total digits.
+     */
+    public final void set(com.ibm.math.BigDecimal source,
+                          int maximumDigits, boolean fixedPoint) {
+        setBigDecimalDigits(source.toString(), maximumDigits, fixedPoint);
+    }
+
+    /**
+     * equality test between two digit lists.
+     */
+    public boolean equals(Object obj) {
+        if (this == obj)                      // quick check
+            return true;
+        if (!(obj instanceof DigitList))         // (1) same object?
+            return false;
+        DigitList other = (DigitList) obj;
+        if (count != other.count ||
+        decimalAt != other.decimalAt)
+            return false;
+        for (int i = 0; i < count; i++)
+            if (digits[i] != other.digits[i])
+                return false;
+        return true;
+    }
+
+    /**
+     * Generates the hash code for the digit list.
+     */
+    public int hashCode() {
+        int hashcode = decimalAt;
+
+        for (int i = 0; i < count; i++)
+            hashcode = hashcode * 37 + digits[i];
+
+        return hashcode;
+    }
+
+    /**
+     * Returns true if this DigitList represents Long.MIN_VALUE;
+     * false, otherwise.  This is required so that getLong() works.
+     */
+    private boolean isLongMIN_VALUE()
+    {
+        if (decimalAt != count || count != MAX_LONG_DIGITS)
+            return false;
+
+            for (int i = 0; i < count; ++i)
+        {
+            if (digits[i] != LONG_MIN_REP[i]) return false;
+        }
+
+        return true;
+    }
+
+    private static byte[] LONG_MIN_REP;
+
+    static
+    {
+        // Store the representation of LONG_MIN without the leading '-'
+        String s = Long.toString(Long.MIN_VALUE);
+        LONG_MIN_REP = new byte[MAX_LONG_DIGITS];
+        for (int i=0; i < MAX_LONG_DIGITS; ++i)
+        {
+            LONG_MIN_REP[i] = (byte)s.charAt(i + 1);
+        }
+    }
+
+    /**
+     * Return the floor of the log base 10 of a given double.
+     * This method compensates for inaccuracies which arise naturally when
+     * computing logs, and always give the correct value.  The parameter
+     * must be positive and finite.
+     */
+    private static final int log10(double d)
+    {
+        // The reason this routine is needed is that simply taking the
+        // log and dividing by log10 yields a result which may be off
+        // by 1 due to rounding errors.  For example, the naive log10
+        // of 1.0e300 taken this way is 299, rather than 300.
+        double log10 = Math.log(d) / LOG10;
+        int ilog10 = (int)Math.floor(log10);
+        // Positive logs could be too small, e.g. 0.99 instead of 1.0
+        if (log10 > 0 && d >= Math.pow(10, ilog10 + 1))
+        {
+            ++ilog10;
+        }
+        // Negative logs could be too big, e.g. -0.99 instead of -1.0
+        else if (log10 < 0 && d < Math.pow(10, ilog10))
+        {
+            --ilog10;
+        }
+        return ilog10;
+    }
+
+    private static final double LOG10 = Math.log(10.0);
+
+    public String toString()
+    {
+        if (isZero()) return "0";
+        StringBuffer buf = new StringBuffer("0.");
+        for (int i=0; i<count; ++i) buf.append((char)digits[i]);
+        buf.append("x10^");
+        buf.append(decimalAt);
+        return buf.toString();
+    }
+}
diff --git a/src/com/ibm/text/HangulJamoTransliterator.java b/src/com/ibm/text/HangulJamoTransliterator.java
new file mode 100755
index 0000000..d18e383
--- /dev/null
+++ b/src/com/ibm/text/HangulJamoTransliterator.java
@@ -0,0 +1,87 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/HangulJamoTransliterator.java,v $ 
+ * $Date: 2000/06/28 20:49:54 $ 
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.util.*;
+
+/**
+ * A transliterator that converts Hangul to Jamo
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Mark Davis
+ * @version $RCSfile: HangulJamoTransliterator.java,v $ $Revision: 1.7 $ $Date: 2000/06/28 20:49:54 $
+ */
+public class HangulJamoTransliterator extends Transliterator {
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Package accessible ID for this transliterator.
+     */
+    static String _ID = "Hangul-Jamo";
+
+    /**
+     * Constructs a transliterator.
+     */
+    public HangulJamoTransliterator() {
+        super(_ID, null);
+    }
+
+    /**
+     * Implements {@link Transliterator#handleTransliterate}.
+     */
+    protected void handleTransliterate(Replaceable text,
+                                       Position offsets, boolean incremental) {
+        int cursor = offsets.start;
+        int limit = offsets.limit;
+
+        StringBuffer replacement = new StringBuffer();
+        while (cursor < limit) {
+            char c = filteredCharAt(text, cursor);
+            if (decomposeHangul(c, replacement)) {
+                text.replace(cursor, cursor+1, replacement.toString());
+                cursor += replacement.length(); // skip over replacement
+                limit += replacement.length() - 1; // fix up limit
+            } else {
+                ++cursor;
+            }
+        }
+
+        offsets.contextLimit += limit - offsets.limit;
+        offsets.contextLimit = limit;
+        offsets.start = cursor;
+    }
+
+
+    static final int 
+        SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7,
+        LCount = 19, VCount = 21, TCount = 28,
+        NCount = VCount * TCount,   // 588
+        SCount = LCount * NCount;   // 11172
+    
+    public static boolean decomposeHangul(char s, StringBuffer result) {
+        int SIndex = s - SBase;
+        if (0 > SIndex || SIndex >= SCount) {
+            return false;
+        }
+        int L = LBase + SIndex / NCount;
+        int V = VBase + (SIndex % NCount) / TCount;
+        int T = TBase + SIndex % TCount;
+        result.setLength(0);
+        result.append((char)L);
+        result.append((char)V);
+        if (T != TBase) result.append((char)T);
+        return true;
+    }
+    
+}
diff --git a/src/com/ibm/text/HexToUnicodeTransliterator.java b/src/com/ibm/text/HexToUnicodeTransliterator.java
new file mode 100755
index 0000000..ab9ee5f
--- /dev/null
+++ b/src/com/ibm/text/HexToUnicodeTransliterator.java
@@ -0,0 +1,380 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/HexToUnicodeTransliterator.java,v $ 
+ * $Date: 2000/06/28 20:49:54 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.util.*;
+
+/**
+ * A transliterator that converts from hexadecimal Unicode escape
+ * sequences to the characters they represent.  For example, "U+0040"
+ * and '\u0040'.  A default HexToUnicodeTransliterator recognizes the
+ * prefixes "U+", "u+", "&#92;U", and "&#92;u".  Hex values may be
+ * upper- or lowercase.  By calling the applyPattern() method, one
+ * or more custom prefix/suffix pairs may be specified.  See
+ * applyPattern() for details.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: HexToUnicodeTransliterator.java,v $ $Revision: 1.8 $ $Date: 2000/06/28 20:49:54 $
+ */
+public class HexToUnicodeTransliterator extends Transliterator {
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Package accessible ID for this transliterator.
+     */
+    static final String _ID = "Hex-Unicode";
+
+    /**
+     * This pattern encodes the following specs for the default constructor:
+     *   \\u0000
+     *   \\U0000
+     *   u+0000
+     *   U+0000
+     * The multiple backslashes resolve to a single backslash
+     * in the effective prefix.
+     */
+    private static final String DEFAULT_PATTERN = "\\\\u0000;\\\\U0000;u+0000;U+0000";
+
+    // Character constants for special pattern characters
+    private static final char SEMICOLON = ';';
+    private static final char ZERO      = '0';
+    private static final char POUND     = '#';
+    private static final char BACKSLASH = '\\';
+
+    /**
+     * The pattern for this transliterator
+     */
+    private String pattern;
+
+    /**
+     * The processed pattern specification.  See applyPattern() for
+     * details.
+     */
+    private char[] affixes;
+
+    /**
+     * The number of different affix sets in affixes.
+     */
+    private int affixCount;
+
+    /**
+     * Constructs a transliterator.
+     */
+    public HexToUnicodeTransliterator() {
+        super(_ID, null);
+        applyPattern(DEFAULT_PATTERN);
+    }
+
+    /**
+     * Constructs a transliterator.
+     */
+    public HexToUnicodeTransliterator(String thePattern) {
+        this(thePattern, null);
+    }
+    
+    /**
+     * Constructs a transliterator.
+     */
+    public HexToUnicodeTransliterator(String thePattern,
+                                      UnicodeFilter theFilter) {
+        super(_ID, theFilter);
+        applyPattern(thePattern);
+    }
+
+    /**
+     * Set the patterns recognized by this transliterator.  One or
+     * more patterns may be specified, separated by semicolons (';').
+     * Each pattern contains zero or more prefix characters, one or
+     * more digit characters, and zero or more suffix characters.  The
+     * digit characters indicates optional digits ('#') followed by
+     * required digits ('0').  The total number of digits cannot
+     * exceed 4, and must be at least 1 required digit.  Use a
+     * backslash ('\\') to escape any of the special characters.  An
+     * empty pattern is allowed; it specifies a transliterator that
+     * does nothing.
+     *
+     * <p>Example: "U+0000;<###0>" specifies two patterns.  The first
+     * has a prefix of "U+", exactly four digits, and no suffix.  The
+     * second has a prefix of "<", between one and four digits, and a
+     * suffix of ">".
+     *
+     * <p><pre>
+     * pattern := spec | ( pattern ';' spec )
+     * spec := prefix-char* digit-spec suffix-char*
+     * digit-spec := '#'* '0'+
+     * prefix-char := [^special-char] | '\\' special-char
+     * suffix-char := [^special-char] | '\\' special-char
+     * special-char := ';' | '0' | '#' | '\\'
+     * </pre>
+     */
+    public void applyPattern(String pattern) {
+
+        /* The pattern is processed and stored in affixes.  The pattern
+         * consists of zero or more affixes.  Each affix is parsed to
+         * determine the prefix, suffix, minimum digit count, and maximum
+         * digit count.  These values are then stored as a four character
+         * header.  That is, their numeric values are cast to UChars and
+         * stored in the string.  Following these four characters, the prefix
+         * characters, then suffix characters are stored.  Each spec takes
+         * n+4 characters, where n is the total length of the prefix and
+         * suffix.
+         */
+
+        StringBuffer affixes = new StringBuffer();
+        affixCount = 0;
+
+        /* The mode specifies where we are in each spec.
+         * mode 0 = in prefix
+         * mode 1 = in optional digits (#)
+         * mode 2 = in required digits (0)
+         * mode 3 = in suffix
+         */
+        int mode = 0;
+
+        int prefixLen = 0, suffixLen = 0, minDigits = 0, maxDigits = 0;
+        int start = 0;
+
+        /* To make parsing easier, we append a virtual ';' at the end of
+         * the pattern string, if there isn't one already.  When we get to
+         * the index pattern.length() (that is, one past the end), we
+         * create a virtual ';' if necessary.
+         */
+        char c = 0;                // These are outside the loop so we can
+        boolean isLiteral = false; // see the previous character...
+        for (int i=0; i<=pattern.length(); ++i) {
+            // Create the virtual trailing ';' if necessary
+            if (i == pattern.length()) {
+                // If the last character was not a non-literal ';'...
+                if (i > 0 && !(c == SEMICOLON && !isLiteral)) {
+                    c = SEMICOLON;
+                    isLiteral = false;
+                } else {
+                    break;
+                }
+            } else {
+                c = pattern.charAt(i);
+                isLiteral = false;
+            }
+
+            if (c == BACKSLASH) {
+                if ((i+1)<pattern.length()) {
+                    isLiteral = true;
+                    c = pattern.charAt(++i);
+                } else {
+                    // Trailing '\\'
+                    throw new IllegalArgumentException("Trailing '\\'");
+                }
+            }
+
+            if (!isLiteral) {
+                switch (c) {
+                case POUND:
+                    // Seeing a '#' moves us from mode 0 (prefix) to mode 1
+                    // (optional digits).
+                    if (mode == 0) {
+                        ++mode;
+                    } else if (mode != 1) {
+                        // Unquoted '#'
+                        throw new IllegalArgumentException("Unquoted '#'");
+                    }
+                    ++maxDigits;
+                    break;
+                case ZERO:
+                    // Seeing a '0' moves us to mode 2 (required digits)
+                    if (mode < 2) {
+                        mode = 2;
+                    } else if (mode != 2) {
+                        // Unquoted '0'
+                        throw new IllegalArgumentException("Unquoted '0'");
+                    }
+                    ++minDigits;
+                    ++maxDigits;
+                    break;
+                case SEMICOLON:
+                    if (minDigits < 1 || maxDigits > 4
+                        // Invalid min/max digit count
+                        || prefixLen > 0xFFFF || suffixLen > 0xFFFF) {
+                        // Suffix or prefix too long
+                        throw new IllegalArgumentException("Suffix or prefix too long");
+                    }
+                    // If there was no prefix and no suffix, then the
+                    // header will not have been allocated yet.  We need
+                    // allocate the header now.
+                    if (start == affixes.length()) {
+                        affixes.append("AAAA");
+                    }
+                    // Fill in 4-character header
+                    affixes.setCharAt(start++, (char) prefixLen);
+                    affixes.setCharAt(start++, (char) suffixLen);
+                    affixes.setCharAt(start++, (char) minDigits);
+                    affixes.setCharAt(start,   (char) maxDigits);
+                    start = affixes.length();
+                    ++affixCount;
+                    prefixLen = suffixLen = minDigits = maxDigits = mode = 0;
+                    break;
+                default:
+                    isLiteral = true;
+                    break;
+                }
+            }
+
+            if (isLiteral) {
+                if (start == affixes.length()) {
+                    // Make space for the header.  Append any four
+                    // characters as place holders for the header values.
+                    // We fill these in when we parse the ';'.
+                    affixes.append("AAAA");
+                }
+                affixes.append(c);
+                if (mode == 0) {
+                    ++prefixLen;
+                } else {
+                    // Any literal outside the prefix moves us into mode 3
+                    // (suffix)
+                    mode = 3;
+                    ++suffixLen;
+                }
+            }
+        }
+
+        // We only modify the pattern and affixes member variables if
+        // we get to this point, that is, if the parse succeeds.
+        this.pattern = pattern;
+        int len = affixes.length();
+        this.affixes = new char[len];
+        affixes.getChars(0, len, this.affixes, 0);
+    }
+
+    /**
+     * Return this transliterator's pattern.
+     */
+    public String toPattern() {
+        return pattern;
+    }
+
+    /**
+     * Implements {@link Transliterator#handleTransliterate}.
+     */
+    protected void handleTransliterate(Replaceable text,
+                                       Position offsets, boolean isIncremental) {
+        int cursor = offsets.start;
+        int limit = offsets.limit;
+        int i, j, ipat;
+
+      loop:
+        while (cursor < limit) {
+            // Loop over the specs in affixes.  If affixCount is zero (an
+            // empty pattern), then we do nothing.  We exit this loop when
+            // we match one of the specs.  We exit this function (by
+            // jumping to exit: below) if a partial match is detected and
+            // isIncremental is true.
+            for (j=0, ipat=0; j<affixCount; ++j) {
+
+                // Read the header
+                int prefixLen = affixes[ipat++];
+                int suffixLen = affixes[ipat++];
+                int minDigits = affixes[ipat++];
+                int maxDigits = affixes[ipat++];
+
+                // curs is a copy of cursor that is advanced over the
+                // characters as we parse them.
+                int curs = cursor;
+                boolean match = true;
+
+                for (i=0; i<prefixLen; ++i) {
+                    if (curs >= limit) {
+                        if (i > 0) {
+                            // We've already matched a character.  This is
+                            // a partial match, so we return if in
+                            // incremental mode.  In non-incremental mode,
+                            // go to the next spec.
+                            if (isIncremental) {
+                                break loop;
+                            }
+                            match = false;
+                            break;
+                        }
+                    }
+                    char c = filteredCharAt(text, curs++);
+                    if (c != affixes[ipat + i]) {
+                        match = false;
+                        break;
+                    }
+                }
+
+                if (match) {
+                    char u = 0;
+                    int digitCount = 0;
+                    for (;;) {
+                        if (curs >= limit) {
+                            // Check for partial match in incremental mode.
+                            if (curs > cursor && isIncremental) {
+                                break loop;
+                            }
+                            break;
+                        }
+                        int digit = Character.digit(filteredCharAt(text, curs), 16);
+                        if (digit < 0) {
+                            break;
+                        }
+                        ++curs;
+                        u <<= 4;
+                        u |= (char) digit;
+                        if (++digitCount == maxDigits) {
+                            break;
+                        }
+                    }
+
+                    match = (digitCount >= minDigits);
+
+                    if (match) {
+                        for (i=0; i<suffixLen; ++i) {
+                            if (curs >= limit) {
+                                // Check for partial match in incremental mode.
+                                if (curs > cursor && isIncremental) {
+                                    break loop;
+                                }
+                                match = false;
+                                break;
+                            }
+                            char c = filteredCharAt(text, curs++);
+                            if (c != affixes[ipat + prefixLen + i]) {
+                                match = false;
+                                break;
+                            }
+                        }
+
+                        if (match) {
+                            // At this point, we have a match
+                            text.replace(cursor, curs, String.valueOf(u));
+                            limit -= curs - cursor - 1;
+                            // The following break statement leaves the
+                            // loop that is traversing the specs in
+                            // affixes.  We then parse the next input
+                            // character.
+                            break;
+                        }
+                    }
+                }
+
+                ipat += prefixLen + suffixLen;
+            }
+
+            ++cursor;
+        }
+
+        offsets.contextLimit += limit - offsets.limit;
+        offsets.limit = limit;
+        offsets.start = cursor;
+    }
+}
diff --git a/src/com/ibm/text/JamoHangulTransliterator.java b/src/com/ibm/text/JamoHangulTransliterator.java
new file mode 100755
index 0000000..c21d55f
--- /dev/null
+++ b/src/com/ibm/text/JamoHangulTransliterator.java
@@ -0,0 +1,136 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/JamoHangulTransliterator.java,v $ 
+ * $Date: 2000/06/28 20:49:54 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.util.*;
+
+/**
+ * A transliterator that converts Jamo to Hangul
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Mark Davis
+ */
+public class JamoHangulTransliterator extends Transliterator {
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Package accessible ID for this transliterator.
+     */
+    static String _ID = "Jamo-Hangul";
+
+    /**
+     * Constructs a transliterator.
+     */
+    public JamoHangulTransliterator() {
+        super(_ID, null);
+        setMaximumContextLength(3);
+    }
+
+    /**
+     * Implements {@link Transliterator#handleTransliterate}.
+     */
+    protected void handleTransliterate(Replaceable text,
+                                       Position offsets, boolean incremental) {
+        /**
+         * Performs transliteration changing Jamo to Hangul 
+         */
+        int cursor = offsets.start;
+        int limit = offsets.limit;
+        if (cursor >= limit) return;
+        
+        int count[] = new int[1];
+
+        char last = filteredCharAt(text, cursor++);
+        while (cursor <= limit) {
+            char next = 0xFFFF; // go over end of string, just in case
+            if (cursor < limit) next = filteredCharAt(text, cursor);
+            char replacement = composeHangul(last, next, count);
+            if (replacement != last) {
+                text.replace(cursor-1, cursor-1 + count[0], String.valueOf(replacement));
+                limit = limit - count[0] + 1; // fix up limit 2 => -1, 1 => 0
+                last = replacement;
+                if (next == 0xFFFF) break;
+                // don't change cursor, so we revisit char
+            } else {
+                ++cursor;
+                last = next;
+            }
+        }
+        
+        ++limit;
+        offsets.contextLimit += limit - offsets.limit;
+        offsets.limit = limit;
+        offsets.start = cursor;
+    }
+    
+
+    static final int 
+        SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7,
+        LCount = 19, VCount = 21, TCount = 28,
+        NCount = VCount * TCount,   // 588
+        SCount = LCount * NCount,   // 11172
+        LLimit = 0x1200;
+   
+   /**
+    * Return composed character (if it is a modern jamo)
+    * last otherwise.
+    * If there is a replacement, returns count[0] = 2 if ch was used, 1 otherwise
+    */
+   public static char composeHangul(char last, char ch, int[] count) {
+      count[0] = 2; // default is replace 2 chars
+      // check to see if two current characters are L and V
+      int LIndex = last - LBase;
+      if (0 <= LIndex && LIndex < LCount) {
+          int VIndex = ch - VBase;
+          if (0 <= VIndex && VIndex < VCount) {
+              // make syllable of form LV
+              return (char)(SBase + (LIndex * VCount + VIndex) * TCount);
+          } else {
+            // it is isolated, so fix!
+            count[0] = 1; // not using ch
+            return (char)(SBase + (LIndex * VCount) * TCount);
+          }
+      }
+      
+      // if neither case was true, see if we have an isolated Jamo we need to fix
+      if (LBase <= last && last < LLimit) {
+        // need to fix: it is either medial or final!
+        int VIndex = last - VBase;
+        if (0 <= VIndex && VIndex < VCount) {
+            LIndex = 0x110B - LBase; // use empty consonant
+            // make syllable of form LV
+            count[0] = 1; // not using ch
+            return (char)(SBase + (LIndex * VCount + VIndex) * TCount);
+        }
+        // ok, see if final. Use null consonant + a + final
+        int TIndex = last - TBase;
+        if (0 <= TIndex && TIndex <= TCount) {  // need to fix!
+            count[0] = 1; // not using ch
+            return (char)(0xC544 + TIndex);
+        }
+      }
+ 
+      // check to see if two current characters are LV and T
+      int SIndex = last - SBase;
+      if (0 <= SIndex && SIndex < SCount && (SIndex % TCount) == 0) {
+          int TIndex = ch - TBase;
+          if (0 <= TIndex && TIndex <= TCount) {
+              // make syllable of form LVT
+              return (char)(last + TIndex);
+          }
+      }
+      
+      return last;
+    }    
+}
diff --git a/src/com/ibm/text/NFRule.java b/src/com/ibm/text/NFRule.java
new file mode 100755
index 0000000..94579de
--- /dev/null
+++ b/src/com/ibm/text/NFRule.java
@@ -0,0 +1,1320 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/NFRule.java,v $ 
+ * $Date: 2000/03/10 04:07:21 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.text.*;
+
+/**
+ * A class represnting a single rule in a RuleBasedNumberFormat.  A rule
+ * inserts its text into the result string and then passes control to its
+ * substitutions, which do the same thing.
+ * $RCSfile: NFRule.java,v $ $Revision: 1.2 $ $Date: 2000/03/10 04:07:21 $
+ */
+final class NFRule {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    /**
+     * Special base value used to identify a negative-number rule
+     */
+    public static final int NEGATIVE_NUMBER_RULE = -1;
+
+    /**
+     * Special base value used to identify an improper fraction (x.x) rule
+     */
+    public static final int IMPROPER_FRACTION_RULE = -2;
+
+    /**
+     * Special base value used to identify a proper fraction (0.x) rule
+     */
+    public static final int PROPER_FRACTION_RULE = -3;
+
+    /**
+     * Special base value used to identify a master rule
+     */
+    public static final int MASTER_RULE = -4;
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * The rule's base value
+     */
+    private long baseValue;
+
+    /**
+     * The rule's radix (the radix to the power of the exponent equals
+     * the rule's divisor)
+     */
+    private short radix = 10;
+
+    /**
+     * The rule's exponent (the radx rased to the power of the exponsnt
+     * equals the rule's divisor)
+     */
+    private short exponent = 0;
+
+    /**
+     * The rule's rule text.  When formatting a number, the rule's text
+     * is inserted into the result string, and then the text from any
+     * substitutions is inserted into the result string
+     */
+    private String ruleText = null;
+
+    /**
+     * The rule's first substitution (the one with the lower offset
+     * into the rule text)
+     */
+    private NFSubstitution sub1 = null;
+
+    /**
+     * The rule's second substitution (the one with the higher offset
+     * into the rule text)
+     */
+    private NFSubstitution sub2 = null;
+
+    /**
+     * The RuleBasedNumberFormat that owns this rule
+     */
+    private RuleBasedNumberFormat formatter = null;
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Creates one or more rules based on the description passed in.
+     * @param description The description of the rule(s).
+     * @param owner The rule set containing the new rule(s).
+     * @param predecessor The rule that precedes the new one(s) in "owner"'s
+     * rule list
+     * @param ownersOwner The RuleBasedNumberFormat that owns the
+     * rule set that owns the new rule(s)
+     * @return An instance of NFRule, or an array of NFRules
+     */
+    public static Object makeRules(String                description,
+                                   NFRuleSet             owner,
+                                   NFRule                predecessor,
+                                   RuleBasedNumberFormat ownersOwner) {
+        // we know we're making at least one rule, so go ahead and
+        // new it up and initialize its basevalue and divisor
+        // (this also strips the rule descriptor, if any, off the
+        // descripton string)
+        NFRule rule1 = new NFRule(ownersOwner);
+        description = rule1.parseRuleDescriptor(description);
+
+        // check the description to see whether there's text enclosed
+        // in brackets
+        int brack1 = description.indexOf("[");
+        int brack2 = description.indexOf("]");
+
+        // if the description doesn't contain a matched pair of brackets,
+        // or if it's of a type that doesn't recognize bracketed text,
+        // then leave the description alone, initialize the rule's
+        // rule text and substitutions, and return that rule
+        if (brack1 == -1 || brack2 == -1 || brack1 > brack2
+                            || rule1.getBaseValue() == PROPER_FRACTION_RULE
+                            || rule1.getBaseValue() == NEGATIVE_NUMBER_RULE) {
+            rule1.ruleText = description;
+            rule1.extractSubstitutions(owner, predecessor, ownersOwner);
+            return rule1;
+        } else {
+            // if the description does contain a matched pair of brackets,
+            // then it's really shorthand for two rules (with one exception)
+            NFRule rule2 = null;
+            StringBuffer sbuf = new StringBuffer();
+
+            // we'll actually only split the rule into two rules if its
+            // base value is an even multiple of its divisor (or it's one
+            // of the special rules)
+            if ((rule1.baseValue > 0
+                    && rule1.baseValue % (Math.pow(rule1.radix, rule1.exponent)) == 0)
+                    || rule1.baseValue == IMPROPER_FRACTION_RULE
+                    || rule1.baseValue == MASTER_RULE) {
+
+                // if it passes that test, new up the second rule.  If the
+                // rule set both rules will belong to is a fraction rule
+                // set, they both have the same base value; otherwise,
+                // increment the original rule's base value ("rule1" actually
+                // goes SECOND in the rule set's rule list)
+                rule2 = new NFRule(ownersOwner);
+                if (rule1.baseValue >= 0) {
+                    rule2.baseValue = rule1.baseValue;
+                    if (!owner.isFractionSet()) {
+                        ++rule1.baseValue;
+                    }
+                }
+
+                // if the description began with "x.x" and contains bracketed
+                // text, it describes both the improper fraction rule and
+                // the proper fraction rule
+                else if (rule1.baseValue == IMPROPER_FRACTION_RULE) {
+                    rule2.baseValue = PROPER_FRACTION_RULE;
+                }
+
+                // if the description began with "x.0" and contains bracketed
+                // text, it describes both the master rule and the
+                // improper fraction rule
+                else if (rule1.baseValue == MASTER_RULE) {
+                    rule2.baseValue = rule1.baseValue;
+                    rule1.baseValue = IMPROPER_FRACTION_RULE;
+                }
+
+                // both rules have the same radix and exponent (i.e., the
+                // same divisor)
+                rule2.radix = rule1.radix;
+                rule2.exponent = rule1.exponent;
+
+                // rule2's rule text omits the stuff in brackets: initalize
+                // its rule text and substitutions accordingly
+                sbuf.append(description.substring(0, brack1));
+                if (brack2 + 1 < description.length()) {
+                    sbuf.append(description.substring(brack2 + 1));
+                }
+                rule2.ruleText = sbuf.toString();
+                rule2.extractSubstitutions(owner, predecessor, ownersOwner);
+            }
+
+            // rule1's text includes the text in the brackets but omits
+            // the brackets themselves: initialize _its_ rule text and
+            // substitutions accordingly
+            sbuf.setLength(0);
+            sbuf.append(description.substring(0, brack1));
+            sbuf.append(description.substring(brack1 + 1, brack2));
+            if (brack2 + 1 < description.length()) {
+                sbuf.append(description.substring(brack2 + 1));
+            }
+            rule1.ruleText = sbuf.toString();
+            rule1.extractSubstitutions(owner, predecessor, ownersOwner);
+
+            // if we only have one rule, return it; if we have two, return
+            // a two-element array containing them (notice that rule2 goes
+            // BEFORE rule1 in the list: in all cases, rule2 OMITS the
+            // material in the brackets and rule1 INCLUDES the material
+            // in the brackets)
+            if (rule2 == null) {
+                return rule1;
+            } else {
+                return new NFRule[] { rule2, rule1 };
+            }
+        }
+    }
+
+    /**
+     * Nominal constructor for NFRule.  Most of the work of constructing
+     * an NFRule is actually performed by makeRules().
+     */
+    public NFRule(RuleBasedNumberFormat formatter) {
+        this.formatter = formatter;
+    }
+
+    /**
+     * This function parses the rule's rule descriptor (i.e., the base
+     * value and/or other tokens that precede the rule's rule text
+     * in the description) and sets the rule's base value, radix, and
+     * exponent according to the descriptor.  (If the description doesn't
+     * include a rule descriptor, then this function sets everything to
+     * default values and the rule set sets the rule's real base value).
+     * @param description The rule's description
+     * @return If "description" included a rule descriptor, this is
+     * "description" with the descriptor and any trailing whitespace
+     * stripped off.  Otherwise; it's "descriptor" unchangd.
+     */
+    private String parseRuleDescriptor(String description) {
+        String descriptor;
+
+        // the description consists of a rule descriptor and a rule body,
+        // separated by a colon.  The rule descriptor is optional.  If
+        // it's omitted, just set the base value to 0.
+        int p = description.indexOf(":");
+        if (p == -1) {
+            setBaseValue(0);
+        } else {
+            // copy the descriptor out into its own string and strip it,
+            // along with any trailing whitespace, out of the original
+            // description
+            descriptor = description.substring(0, p);
+            ++p;
+            while (p < description.length() && Character.isWhitespace(description.charAt(p)))
+                ++p;
+            description = description.substring(p);
+
+            // check first to see if the rule descriptor matches the token
+            // for one of the special rules.  If it does, set the base
+            // value to the correct identfier value
+            if (descriptor.equals("-x")) {
+                setBaseValue(NEGATIVE_NUMBER_RULE);
+            }
+            else if (descriptor.equals("x.x")) {
+                setBaseValue(IMPROPER_FRACTION_RULE);
+            }
+            else if (descriptor.equals("0.x")) {
+                setBaseValue(PROPER_FRACTION_RULE);
+            }
+            else if (descriptor.equals("x.0")) {
+                setBaseValue(MASTER_RULE);
+            }
+
+            // if the rule descriptor begins with a digit, it's a descriptor
+            // for a normal rule
+            else if (descriptor.charAt(0) >= '0' && descriptor.charAt(0) <= '9') {
+                StringBuffer tempValue = new StringBuffer();
+                p = 0;
+                char c = ' ';
+
+                // begin parsing the descriptor: copy digits
+                // into "tempValue", skip periods, commas, and spaces,
+                // stop on a slash or > sign (or at the end of the string),
+                // and throw an exception on any other character
+                while (p < descriptor.length()) {
+                    c = descriptor.charAt(p);
+                    if (c >= '0' && c <= '9') {
+                        tempValue.append(c);
+                    }
+                    else if (c == '/' || c == '>') {
+                        break;
+                    }
+                    else if (Character.isWhitespace(c) || c == ',' || c == '.') {
+                    }
+                    else {
+                        throw new IllegalArgumentException("Illegal character in rule descriptor");
+                    }
+                    ++p;
+                }
+
+                // tempValue now contains a string representation of the
+                // rule's base value with the punctuation stripped out.
+                // Set the rule's base value accordingly
+                setBaseValue(Long.parseLong(tempValue.toString()));
+
+                // if we stopped the previous loop on a slash, we're
+                // now parsing the rule's radix.  Again, accumulate digits
+                // in tempValue, skip punctuation, stop on a > mark, and
+                // throw an exception on anything else
+                if (c == '/') {
+                    tempValue.setLength(0);
+                    ++p;
+                    while (p < descriptor.length()) {
+                        c = descriptor.charAt(p);
+                        if (c >= '0' && c <= '9') {
+                            tempValue.append(c);
+                        }
+                        else if (c == '>') {
+                            break;
+                        }
+                        else if (Character.isWhitespace(c) || c == ',' || c == '.') {
+                        }
+                        else {
+                            throw new IllegalArgumentException("Illegal character is rule descriptor");
+                        }
+                        ++p;
+                    }
+
+                    // tempValue now contain's the rule's radix.  Set it
+                    // accordingly, and recalculate the rule's exponent
+                    radix = Short.parseShort(tempValue.toString());
+                    if (radix == 0) {
+                        throw new IllegalArgumentException("Rule can't have radix of 0");
+                    }
+                    exponent = expectedExponent();
+                }
+
+                // if we stopped the previous loop on a > sign, then continue
+                // for as long as we still see > signs.  For each one,
+                // decrement the exponent (unless the exponent is already 0).
+                // If we see another character before reaching the end of
+                // the descriptor, that's also a syntax error.
+                if (c == '>') {
+                    while (p < descriptor.length()) {
+                        c = descriptor.charAt(p);
+                        if (c == '>' && exponent > 0) {
+                            --exponent;
+                        } else {
+                            throw new IllegalArgumentException("Illegal character in rule descriptor");
+                        }
+                        ++p;
+                    }
+                }
+            }
+        }
+
+        // finally, if the rule body begins with an apostrophe, strip it off
+        // (this is generally used to put whitespace at the beginning of
+        // a rule's rule text)
+        if (description.length() > 0 && description.charAt(0) == '\'') {
+            description = description.substring(1);
+        }
+
+        // return the description with all the stuff we've just waded through
+        // stripped off the front.  It now contains just the rule body.
+        return description;
+    }
+
+    /**
+     * Searches the rule's rule text for the substitution tokens,
+     * creates the substitutions, and removes the substitution tokens
+     * from the rule's rule text.
+     * @param owner The rule set containing this rule
+     * @param predecessor The rule preseding this one in "owners" rule list
+     * @param ownersOwner The RuleBasedFormat that owns this rule
+     */
+    private void extractSubstitutions(NFRuleSet             owner,
+                                      NFRule                predecessor,
+                                      RuleBasedNumberFormat ownersOwner) {
+        sub1 = extractSubstitution(owner, predecessor, ownersOwner);
+        sub2 = extractSubstitution(owner, predecessor, ownersOwner);
+    }
+
+    /**
+     * Searches the rule's rule text for the first substitution token,
+     * creates a substitution based on it, and removes the token from
+     * the rule's rule text.
+     * @param owner The rule set containing this rule
+     * @param predecessor The rule preceding this one in the rule set's
+     * rule list
+     * @param ownersOwner The RuleBasedNumberFormat that owns this rule
+     * @return The newly-created substitution.  This is never null; if
+     * the rule text doesn't contain any substitution tokens, this will
+     * be a NullSubstitution.
+     */
+    private NFSubstitution extractSubstitution(NFRuleSet             owner,
+                                               NFRule                predecessor,
+                                               RuleBasedNumberFormat ownersOwner) {
+        NFSubstitution result = null;
+        int subStart;
+        int subEnd;
+
+        // search the rule's rule text for the first two characters of
+        // a substitution token
+        subStart = indexOfAny(new String[] { "<<", "<%", "<#", "<0",
+                                             ">>", ">%", ">#", ">0",
+                                             "=%", "=#", "=0" } );
+
+        // if we didn't find one, create a null substitution positioned
+        // at the end of the rule text
+        if (subStart == -1) {
+            return NFSubstitution.makeSubstitution(ruleText.length(), this, predecessor,
+                            owner, ownersOwner, "");
+        }
+
+        // special-case the ">>>" token, since searching for the > at the
+        // end will actually find the > in the middle
+        if (ruleText.substring(subStart).startsWith(">>>")) {
+            subEnd = subStart + 2;
+
+        // otherwise the substitution token ends with the same character
+        // it began with
+        } else {
+            subEnd = ruleText.indexOf(ruleText.charAt(subStart), subStart + 1);
+        }
+
+        // if we don't find the end of the token (i.e., if we're on a single,
+        // unmatched token character), create a null substitution positioned
+        // at the end of the rule
+        if (subEnd == -1) {
+            return NFSubstitution.makeSubstitution(ruleText.length(), this, predecessor,
+                            owner, ownersOwner, "");
+        }
+
+        // if we get here, we have a real substitution token (or at least
+        // some text bounded by substitution token characters).  Use
+        // makeSubstitution() to create the right kind of substitution
+        result = NFSubstitution.makeSubstitution(subStart, this, predecessor, owner,
+                        ownersOwner, ruleText.substring(subStart, subEnd + 1));
+
+        // remove the substitution from the rule text
+        ruleText = ruleText.substring(0, subStart) + ruleText.substring(subEnd + 1);
+        return result;
+    }
+
+    /**
+     * Sets the rule's base value, and causes the radix and exponent
+     * to be recalculated.  This is used during construction when we
+     * don't know the rule's base value until after it's been
+     * constructed.  It should be used at any other time.
+     * @param The new base value for the rule.
+     */
+    public final void setBaseValue(long newBaseValue) {
+        // set the base value
+        baseValue = newBaseValue;
+
+        // if this isn't a special rule, recalculate the radix and exponent
+        // (the radix always defaults to 10; if it's supposed to be something
+        // else, it's cleaned up by the caller and the exponent is
+        // recalculated again-- the only function that does this is
+        // NFRule.parseRuleDescriptor() )
+        if (baseValue >= 1) {
+            radix = 10;
+            exponent = expectedExponent();
+
+            // this function gets called on a fully-constructed rule whose
+            // description didn't specify a base value.  This means it
+            // has substitutions, and some substitutions hold on to copies
+            // of the rule's divisor.  Fix their copies of the divisor.
+            if (sub1 != null) {
+                sub1.setDivisor(radix, exponent);
+            }
+            if (sub2 != null) {
+                sub2.setDivisor(radix, exponent);
+            }
+
+        // if this is a special rule, its radix and exponent are basically
+        // ignored.  Set them to "safe" default values
+        } else {
+            radix = 10;
+            exponent = 0;
+        }
+    }
+
+    /**
+     * This calculates the rule's exponent based on its radix and base
+     * value.  This will be the highest power the radix can be raised to
+     * and still produce a result less than or equal to the base value.
+     */
+    private short expectedExponent() {
+        // since the log of 0, or the log base 0 of something, causes an
+        // error, declare the exponent in these cases to be 0 (we also
+        // deal with the special-rule identifiers here)
+        if (radix == 0 || baseValue < 1) {
+            return 0;
+        }
+
+        // we get rounding error in some cases-- for example, log 1000 / log 10
+        // gives us 1.9999999996 instead of 2.  The extra logic here is to take
+        // that into account
+        short tempResult = (short)(Math.log(baseValue) / Math.log(radix));
+        if (Math.pow(radix, tempResult + 1) <= baseValue) {
+            return (short)(tempResult + 1);
+        } else {
+            return tempResult;
+        }
+    }
+
+    /**
+     * Searches the rule's rule text for any of the specified strings.
+     * @param strings An array of strings to search the rule's rule
+     * text for
+     * @return The index of the first match in the rule's rule text
+     * (i.e., the first substring in the rule's rule text that matches
+     * _any_ of the strings in "strings").  If none of the strings in
+     * "strings" is found in the rule's rule text, returns -1.
+     */
+    private int indexOfAny(String[] strings) {
+        int pos;
+        int result = -1;
+        for (int i = 0; i < strings.length; i++) {
+            pos = ruleText.indexOf(strings[i]);
+            if (pos != -1 && (result == -1 || pos < result)) {
+                result = pos;
+            }
+        }
+        return result;
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Tests two rules for equality.
+     * @param that The rule to compare this one against
+     * @return True is the two rules are functionally equivalent
+     */
+    public boolean equals(Object that) {
+        if (that instanceof NFRule) {
+            NFRule that2 = (NFRule)that;
+
+            return baseValue == that2.baseValue
+                   && radix == that2.radix
+                   && exponent == that2.exponent
+                   && ruleText.equals(that2.ruleText)
+                   && sub1.equals(that2.sub1)
+                   && sub2.equals(that2.sub2);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Returns a textual representation of the rule.  This won't
+     * necessarily be the same as the description that this rule
+     * was created with, but it will produce the same result.
+     * @return A textual description of the rule
+     */
+    public String toString() {
+        StringBuffer result = new StringBuffer();
+
+        // start with the rule descriptor.  Special-case the special rules
+        if (baseValue == NEGATIVE_NUMBER_RULE) {
+            result.append("-x: ");
+        }
+        else if (baseValue == IMPROPER_FRACTION_RULE) {
+            result.append("x.x: ");
+        }
+        else if (baseValue == PROPER_FRACTION_RULE) {
+            result.append("0.x: ");
+        }
+        else if (baseValue == MASTER_RULE) {
+            result.append("x.0: ");
+        }
+
+        // for a normal rule, write out its base value, and if the radix is
+        // something other than 10, write out the radix (with the preceding
+        // slash, of course).  Then calculate the expected exponent and if
+        // if isn't the same as the actual exponent, write an appropriate
+        // number of > signs.  Finally, terminate the whole thing with
+        // a colon.
+        else {
+            result.append(String.valueOf(baseValue));
+            if (radix != 10) {
+                result.append('/');
+                result.append(String.valueOf(radix));
+            }
+            int numCarets = expectedExponent() - exponent;
+            for (int i = 0; i < numCarets; i++)
+                result.append('>');
+            result.append(": ");
+        }
+
+        // if the rule text begins with a space, write an apostrophe
+        // (whitespace after the rule descriptor is ignored; the
+        // apostrophe is used to make the whitespace significant)
+        if (ruleText.startsWith(" ") && (sub1 == null || sub1.getPos() != 0)) {
+            result.append("\'");
+        }
+
+        // now, write the rule's rule text, inserting appropriate
+        // substitution tokens in the appropriate places
+        StringBuffer ruleTextCopy = new StringBuffer(ruleText);
+        ruleTextCopy.insert(sub2.getPos(), sub2.toString());
+        ruleTextCopy.insert(sub1.getPos(), sub1.toString());
+        result.append(ruleTextCopy);
+
+        // and finally, top the whole thing off with a semicolon and
+        // return the result
+        result.append(';');
+        return result.toString();
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessors
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the rule's base value
+     * @return The rule's base value
+     */
+    public final long getBaseValue() {
+        return baseValue;
+    }
+
+    /**
+     * Returns the rule's divisor (the value that cotrols the behavior
+     * of its substitutions)
+     * @return The rule's divisor
+     */
+    public double getDivisor() {
+        return Math.pow(radix, exponent);
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Formats the number, and inserts the resulting text into
+     * toInsertInto.
+     * @param number The number being formatted
+     * @param toInsertInto The string where the resultant text should
+     * be inserted
+     * @param pos The position in toInsertInto where the resultant text
+     * should be inserted
+     */
+    public void doFormat(long number, StringBuffer toInsertInto, int pos) {
+        // first, insert the rule's rule text into toInsertInto at the
+        // specified position, then insert the results of the substitutions
+        // into the right places in toInsertInto (notice we do the
+        // substitutions in reverse order so that the offsets don't get
+        // messed up)
+        toInsertInto.insert(pos, ruleText);
+        sub2.doSubstitution(number, toInsertInto, pos);
+        sub1.doSubstitution(number, toInsertInto, pos);
+    }
+
+    /**
+     * Formats the number, and inserts the resulting text into
+     * toInsertInto.
+     * @param number The number being formatted
+     * @param toInsertInto The string where the resultant text should
+     * be inserted
+     * @param pos The position in toInsertInto where the resultant text
+     * should be inserted
+     */
+    public void doFormat(double number, StringBuffer toInsertInto, int pos) {
+        // first, insert the rule's rule text into toInsertInto at the
+        // specified position, then insert the results of the substitutions
+        // into the right places in toInsertInto
+        // [again, we have two copies of this routine that do the same thing
+        // so that we don't sacrifice precision in a long by casting it
+        // to a double]
+        toInsertInto.insert(pos, ruleText);
+        sub2.doSubstitution(number, toInsertInto, pos);
+        sub1.doSubstitution(number, toInsertInto, pos);
+    }
+
+    /**
+     * Used by the owning rule set to determine whether to invoke the
+     * rollback rule (i.e., whether this rule or the one that precedes
+     * it in the rule set's list should be used to format the number)
+     * @param The number being formatted
+     * @return True if the rule set should use the rule that precedes
+     * this one in its list; false if it should use this rule
+     */
+    public boolean shouldRollBack(double number) {
+        // we roll back if the rule contains a modulus substitution,
+        // the number being formatted is an even multiple of the rule's
+        // divisor, and the rule's base value is NOT an even multiple
+        // of its divisor
+        // In other words, if the original description had
+        //    100: << hundred[ >>];
+        // that expands into
+        //    100: << hundred;
+        //    101: << hundred >>;
+        // internally.  But when we're formatting 200, if we use the rule
+        // at 101, which would normally apply, we get "two hundred zero".
+        // To prevent this, we roll back and use the rule at 100 instead.
+        // This is the logic that makes this happen: the rule at 101 has
+        // a modulus substitution, its base value isn't an even multiple
+        // of 100, and the value we're trying to format _is_ an even
+        // multiple of 100.  This is called the "rollback rule."
+        if ((sub1.isModulusSubstitution()) || (sub2.isModulusSubstitution())) {
+            return (number % Math.pow(radix, exponent)) == 0
+                            && (baseValue % Math.pow(radix, exponent)) != 0;
+        }
+        return false;
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Attempts to parse the string with this rule.
+     * @param text The string being parsed
+     * @param parsePosition On entry, the value is ignored and assumed to
+     * be 0. On exit, this has been updated with the position of the first
+     * character not consumed by matching the text against this rule
+     * (if this rule doesn't match the text at all, the parse position
+     * if left unchanged (presumably at 0) and the function returns
+     * new Long(0)).
+     * @param isFractionRule True if this rule is contained within a
+     * fraction rule set.  This is only used if the rule has no
+     * substitutions.
+     * @return If this rule matched the text, this is the rule's base value
+     * combined appropriately with the results of parsing the substitutions.
+     * If nothing matched, this is new Long(0) and the parse position is
+     * left unchanged.  The result will be an instance of Long if the
+     * result is an integer and Double otherwise.  The result is never null.
+     */
+    public Number doParse(String text, ParsePosition parsePosition, boolean isFractionRule,
+                        double upperBound) {
+
+        // internally we operate on a copy of the string being parsed
+        // (because we're going to change it) and use our own ParsePosition
+        ParsePosition pp = new ParsePosition(0);
+        String workText = new String(text);
+
+        // check to see whether the text before the first substitution
+        // matches the text at the beginning of the string being
+        // parsed.  If it does, strip that off the front of workText;
+        // otherwise, dump out with a mismatch
+        workText = stripPrefix(workText, ruleText.substring(0, sub1.getPos()), pp);
+        int prefixLength = text.length() - workText.length();
+
+        if (pp.getIndex() == 0 && sub1.getPos() != 0) {
+// commented out because ParsePosition doesn't have error index in 1.1.x
+//                parsePosition.setErrorIndex(pp.getErrorIndex());
+            return new Long(0);
+        }
+
+        // this is the fun part.  The basic guts of the rule-matching
+        // logic is matchToDelimiter(), which is called twice.  The first
+        // time it searches the input string for the rule text BETWEEN
+        // the substitutions and tries to match the intervening text
+        // in the input string with the first substitution.  If that
+        // succeeds, it then calls it again, this time to look for the
+        // rule text after the second substitution and to match the
+        // intervening input text against the second substitution.
+        //
+        // For example, say we have a rule that looks like this:
+        //    first << middle >> last;
+        // and input text that looks like this:
+        //    first one middle two last
+        // First we use stripPrefix() to match "first " in both places and
+        // strip it off the front, leaving
+        //    one middle two last
+        // Then we use matchToDelimiter() to match " middle " and try to
+        // match "one" against a substitution.  If it's successful, we now
+        // have
+        //    two last
+        // We use matchToDelimiter() a second time to match " last" and
+        // try to match "two" against a substitution.  If "two" matches
+        // the substitution, we have a successful parse.
+        //
+        // Since it's possible in many cases to find multiple instances
+        // of each of these pieces of rule text in the input string,
+        // we need to try all the possible combinations of these
+        // locations.  This prevents us from prematurely declaring a mismatch,
+        // and makes sure we match as much input text as we can.
+        int highWaterMark = 0;
+        double result = 0;
+        int start = 0;
+        double tempBaseValue = Math.max(0, baseValue);
+
+        do {
+            // our partial parse result starts out as this rule's base
+            // value.  If it finds a successful match, matchToDelimiter()
+            // will compose this in some way with what it gets back from
+            // the substitution, giving us a new partial parse result
+            pp.setIndex(0);
+            double partialResult = matchToDelimiter(workText, start, tempBaseValue,
+                            ruleText.substring(sub1.getPos(), sub2.getPos()), pp, sub1,
+                            upperBound).doubleValue();
+
+            // if we got a successful match (or were trying to match a
+            // null substitution), pp is now pointing at the first unmatched
+            // character.  Take note of that, and try matchToDelimiter()
+            // on the input text again
+            if (pp.getIndex() != 0 || sub1.isNullSubstitution()) {
+                start = pp.getIndex();
+
+                String workText2 = workText.substring(pp.getIndex());
+                ParsePosition pp2 = new ParsePosition(0);
+
+                // the second matchToDelimiter() will compose our previous
+                // partial result with whatever it gets back from its
+                // substitution if there's a successful match, giving us
+                // a real result
+                partialResult = matchToDelimiter(workText2, 0, partialResult,
+                                ruleText.substring(sub2.getPos()), pp2, sub2,
+                                upperBound).doubleValue();
+
+                // if we got a successful match on this second
+                // matchToDelimiter() call, update the high-water mark
+                // and result (if necessary)
+                if (pp2.getIndex() != 0 || sub2.isNullSubstitution()) {
+                    if (prefixLength + pp.getIndex() + pp2.getIndex() > highWaterMark) {
+                        highWaterMark = prefixLength + pp.getIndex() + pp2.getIndex();
+                        result = partialResult;
+                    }
+                }
+// commented out because ParsePosition doesn't have error index in 1.1.x
+//                    else {
+//                        int temp = pp2.getErrorIndex() + sub1.getPos() + pp.getIndex();
+//                        if (temp> parsePosition.getErrorIndex()) {
+//                            parsePosition.setErrorIndex(temp);
+//                        }
+//                    }
+            }
+// commented out because ParsePosition doesn't have error index in 1.1.x
+//                else {
+//                    int temp = sub1.getPos() + pp.getErrorIndex();
+//                    if (temp > parsePosition.getErrorIndex()) {
+//                        parsePosition.setErrorIndex(temp);
+//                    }
+//                }
+        // keep trying to match things until the outer matchToDelimiter()
+        // call fails to make a match (each time, it picks up where it
+        // left off the previous time)
+        } while (sub1.getPos() != sub2.getPos() && pp.getIndex() > 0 && pp.getIndex()
+                            < workText.length() && pp.getIndex() != start);
+
+        // update the caller's ParsePosition with our high-water mark
+        // (i.e., it now points at the first character this function
+        // didn't match-- the ParsePosition is therefore unchanged if
+        // we didn't match anything)
+        parsePosition.setIndex(highWaterMark);
+// commented out because ParsePosition doesn't have error index in 1.1.x
+//        if (highWaterMark > 0) {
+//            parsePosition.setErrorIndex(0);
+//        }
+
+        // this is a hack for one unusual condition: Normally, whether this
+        // rule belong to a fraction rule set or not is handled by its
+        // substitutions.  But if that rule HAS NO substitutions, then
+        // we have to account for it here.  By definition, if the matching
+        // rule in a fraction rule set has no substitutions, its numerator
+        // is 1, and so the result is the reciprocal of its base value.
+        if (isFractionRule && highWaterMark > 0 && sub1.isNullSubstitution()) {
+            result = 1 / result;
+        }
+
+        // return the result as a Long if possible, or as a Double
+        if (result == (long)result) {
+            return new Long((long)result);
+        } else {
+            return new Double(result);
+        }
+    }
+
+    /**
+     * This function is used by parse() to match the text being parsed
+     * against a possible prefix string.  This function
+     * matches characters from the beginning of the string being parsed
+     * to characters from the prospective prefix.  If they match, pp is
+     * updated to the first character not matched, and the result is
+     * the unparsed part of the string.  If they don't match, the whole
+     * string is returned, and pp is left unchanged.
+     * @param text The string being parsed
+     * @param prefix The text to match against
+     * @param pp On entry, ignored and assumed to be 0.  On exit, points
+     * to the first unmatched character (assuming the whole prefix matched),
+     * or is unchanged (if the whole prefix didn't match).
+     * @return If things match, this is the unparsed part of "text";
+     * if they didn't match, this is "text".
+     */
+    private String stripPrefix(String text, String prefix, ParsePosition pp) {
+        // if the prefix text is empty, dump out without doing anything
+        if (prefix.length() == 0) {
+            return text;
+        } else {
+            // otherwise, use prefixLength() to match the beginning of
+            // "text" against "prefix".  This function returns the
+            // number of characters from "text" that matched (or 0 if
+            // we didn't match the whole prefix)
+            int pfl = prefixLength(text, prefix);
+            if (pfl != 0) {
+                // if we got a successful match, update the parse position
+                // and strip the prefix off of "text"
+                pp.setIndex(pp.getIndex() + pfl);
+                return text.substring(pfl);
+
+            // if we didn't get a successful match, leave everything alone
+            } else {
+                return text;
+            }
+        }
+    }
+
+    /**
+     * Used by parse() to match a substitution and any following text.
+     * "text" is searched for instances of "delimiter".  For each instance
+     * of delimiter, the intervening text is tested to see whether it
+     * matches the substitution.  The longest match wins.
+     * @param text The string being parsed
+     * @param startPos The position in "text" where we should start looking
+     * for "delimiter".
+     * @param baseValue A partial parse result (often the rule's base value),
+     * which is combined with the result from matching the substitution
+     * @param delimiter The string to search "text" for.
+     * @param pp Ignored and presumed to be 0 on entry.  If there's a match,
+     * on exit this will point to the first unmatched character.
+     * @param sub If we find "delimiter" in "text", this substitution is used
+     * to match the text between the beginning of the string and the
+     * position of "delimiter."  (If "delimiter" is the empty string, then
+     * this function just matches against this substitution and updates
+     * everything accordingly.)
+     * @param upperBound When matching the substitution, it will only
+     * consider rules with base values lower than this value.
+     * @return If there's a match, this is the result of composing
+     * baseValue with the result of matching the substitution.  Otherwise,
+     * this is new Long(0).  It's never null.  If the result is an integer,
+     * this will be an instance of Long; otherwise, it's an instance of
+     * Double.
+     */
+    private Number matchToDelimiter(String text, int startPos, double baseValue,
+                        String delimiter, ParsePosition pp, NFSubstitution sub, double upperBound) {
+        // if "delimiter" contains real (i.e., non-ignorable) text, search
+        // it for "delimiter" beginning at "start".  If that succeeds, then
+        // use "sub"'s doParse() method to match the text before the
+        // instance of "delimiter" we just found.
+        if (!allIgnorable(delimiter)) {
+            ParsePosition tempPP = new ParsePosition(0);
+            Number tempResult;
+
+            // use findText() to search for "delimiter".  It returns a two-
+            // element array: element 0 is the position of the match, and
+            // element 1 is the number of characters that matched
+            // "delimiter".
+            int[] temp = findText(text, delimiter, startPos);
+            int dPos = temp[0];
+            int dLen = temp[1];
+
+            // if findText() succeeded, isolate the text preceding the
+            // match, and use "sub" to match that text
+            while (dPos >= 0) {
+                String subText = text.substring(0, dPos);
+                if (subText.length() > 0) {
+                    tempResult = sub.doParse(subText, tempPP, baseValue, upperBound,
+                                    formatter.lenientParseEnabled());
+
+                    // if the substitution could match all the text up to
+                    // where we found "delimiter", then this function has
+                    // a successful match.  Bump the caller's parse position
+                    // to point to the first character after the text
+                    // that matches "delimiter", and return the result
+                    // we got from parsing the substitution.
+                    if (tempPP.getIndex() == dPos) {
+                        pp.setIndex(dPos + dLen);
+                        return tempResult;
+                    }
+// commented out because ParsePosition doesn't have error index in 1.1.x
+//                    else {
+//                        if (tempPP.getErrorIndex() > 0) {
+//                            pp.setErrorIndex(tempPP.getErrorIndex());
+//                        } else {
+//                            pp.setErrorIndex(tempPP.getIndex());
+//                        }
+//                    }
+                }
+
+                // if we didn't match the substitution, search for another
+                // copy of "delimiter" in "text" and repeat the loop if
+                // we find it
+                tempPP.setIndex(0);
+                temp = findText(text, delimiter, dPos + dLen);
+                dPos = temp[0];
+                dLen = temp[1];
+            }
+            // if we make it here, this was an unsuccessful match, and we
+            // leave pp unchanged and return 0
+            pp.setIndex(0);
+            return new Long(0);
+
+        // if "delimiter" is empty, or consists only of ignorable characters
+        // (i.e., is semantically empty), thwe we obviously can't search
+        // for "delimiter".  Instead, just use "sub" to parse as much of
+        // "text" as possible.
+        } else {
+            ParsePosition tempPP = new ParsePosition(0);
+            Number result = new Long(0);
+            Number tempResult;
+
+            // try to match the whole string against the substitution
+            tempResult = sub.doParse(text, tempPP, baseValue, upperBound,
+                            formatter.lenientParseEnabled());
+            if (tempPP.getIndex() != 0 || sub.isNullSubstitution()) {
+                // if there's a successful match (or it's a null
+                // substitution), update pp to point to the first
+                // character we didn't match, and pass the result from
+                // sub.doParse() on through to the caller
+                pp.setIndex(tempPP.getIndex());
+                if (tempResult != null) {
+                    result = tempResult;
+                }
+            }
+// commented out because ParsePosition doesn't have error index in 1.1.x
+//            else {
+//                pp.setErrorIndex(tempPP.getErrorIndex());
+//            }
+
+            // and if we get to here, then nothing matched, so we return
+            // 0 and leave pp alone
+            return result;
+        }
+    }
+
+    /**
+     * Used by stripPrefix() to match characters.  If lenient parse mode
+     * is off, this just calls startsWith().  If lenient parse mode is on,
+     * this function uses CollationElementIterators to match characters in
+     * the strings (only primary-order differences are significant in
+     * determining whether there's a match).
+     * @param str The string being tested
+     * @param prefix The text we're hoping to see at the beginning
+     * of "str"
+     * @return If "prefix" is found at the beginning of "str", this
+     * is the number of characters in "str" that were matched (this
+     * isn't necessarily the same as the length of "prefix" when matching
+     * text with a collator).  If there's no match, this is 0.
+     */
+    private int prefixLength(String str, String prefix) {
+        // if we're looking for an empty prefix, it obviously matches
+        // zero characters.  Just go ahead and return 0.
+        if (prefix.length() == 0) {
+            return 0;
+        }
+
+        // go through all this grief if we're in lenient-parse mode
+        if (formatter.lenientParseEnabled()) {
+            // get the formatter's collator and use it to create two
+            // collation element iterators, one over the target string
+            // and another over the prefix (right now, we'll throw an
+            // exception if the collator we get back from the formatter
+            // isn't a RuleBasedCollator, because RuleBasedCollator defines
+            // the CollationElementIteratoer protocol.  Hopefully, this
+            // will change someday.)
+            RuleBasedCollator collator = (RuleBasedCollator)formatter.getCollator();
+            CollationElementIterator strIter = collator.getCollationElementIterator(str);
+            CollationElementIterator prefixIter = collator.getCollationElementIterator(prefix);
+
+            // match collation elements between the strings
+            int oStr = strIter.next();
+            int oPrefix = prefixIter.next();
+
+            while (oPrefix != CollationElementIterator.NULLORDER) {
+                // skip over ignorable characters in the target string
+                while (CollationElementIterator.primaryOrder(oStr) == 0 && oStr !=
+                                CollationElementIterator.NULLORDER) {
+                    oStr = strIter.next();
+                }
+
+                // akip over ignorable characters in the prefix
+                while (CollationElementIterator.primaryOrder(oPrefix) == 0 && oPrefix !=
+                                CollationElementIterator.NULLORDER) {
+                    oPrefix = prefixIter.next();
+                }
+
+                // if skipping over ignorables brought us to the end
+                // of the target string, we didn't match and return 0
+                if (oStr == CollationElementIterator.NULLORDER) {
+                    return 0;
+                }
+
+                // if skipping over ignorables brought to the end of
+                // the prefix, we DID match: drop out of the loop
+                else if (oPrefix == CollationElementIterator.NULLORDER) {
+                    break;
+                }
+
+                // match collation elements from the two strings
+                // (considering only primary differences).  If we
+                // get a mismatch, dump out and return 0
+                if (CollationElementIterator.primaryOrder(oStr) != CollationElementIterator.
+                                primaryOrder(oPrefix)) {
+                    return 0;
+
+                // otherwise, advance to the next character in each string
+                // and loop (we drop out of the loop when we exhaust
+                // collation elements in the prefix)
+                } else {
+                    oStr = strIter.next();
+                    oPrefix = prefixIter.next();
+                }
+            }
+
+            //----------------------------------------------------------------
+            // JDK 1.2-specific API call
+            // return strIter.getOffset();
+            //----------------------------------------------------------------
+            // JDK 1.1 HACK (take out for 1.2-specific code)
+
+            // if we make it to here, we have a successful match.  Now we
+            // have to find out HOW MANY characters from the target string
+            // matched the prefix (there isn't necessarily a one-to-one
+            // mapping between collation elements and characters).
+            // In JDK 1.2, there's a simple getOffset() call we can use.
+            // In JDK 1.1, on the other hand, we have to go through some
+            // ugly contortions.  First, use the collator to compare the
+            // same number of characters from the prefix and target string.
+            // If they're equal, we're done.
+            collator.setStrength(Collator.PRIMARY);
+            if (str.length() >= prefix.length()
+                    && collator.equals(str.substring(0, prefix.length()), prefix)) {
+                return prefix.length();
+            }
+
+            // if they're not equal, then we have to compare successively
+            // larger and larger substrings of the target string until we
+            // get to one that matches the prefix.  At that point, we know
+            // how many characters matched the prefix, and we can return.
+            int p = 1;
+            while (p <= str.length()) {
+                if (collator.equals(str.substring(0, p), prefix)) {
+                    return p;
+                } else {
+                    ++p;
+                }
+            }
+
+            // SHOULKD NEVER GET HERE!!!
+            return 0;
+            //----------------------------------------------------------------
+
+        // If lenient parsing is turned off, forget all that crap above.
+        // Just use String.startsWith() and be done with it.
+        } else {
+            if (str.startsWith(prefix)) {
+                return prefix.length();
+            } else {
+                return 0;
+            }
+        }
+    }
+
+    /**
+     * Searches a string for another string.  If lenient parsing is off,
+     * this just calls indexOf().  If lenient parsing is on, this function
+     * uses CollationElementIterator to match characters, and only
+     * primary-order differences are significant in determining whether
+     * there's a match.
+     * @param str The string to search
+     * @param key The string to search "str" for
+     * @return A two-element array of ints.  Element 0 is the position
+     * of the match, or -1 if there was no match.  Element 1 is the
+     * number of characters in "str" that matched (which isn't necessarily
+     * the same as the length of "key")
+     */
+    private int[] findText(String str, String key) {
+        return findText(str, key, 0);
+    }
+
+    /**
+     * Searches a string for another string.  If lenient parsing is off,
+     * this just calls indexOf().  If lenient parsing is on, this function
+     * uses CollationElementIterator to match characters, and only
+     * primary-order differences are significant in determining whether
+     * there's a match.
+     * @param str The string to search
+     * @param key The string to search "str" for
+     * @param startingAt The index into "str" where the search is to
+     * begin
+     * @return A two-element array of ints.  Element 0 is the position
+     * of the match, or -1 if there was no match.  Element 1 is the
+     * number of characters in "str" that matched (which isn't necessarily
+     * the same as the length of "key")
+     */
+    private int[] findText(String str, String key, int startingAt) {
+        // if lenient parsing is turned off, this is easy: just call
+        // String.indexOf() and we're done
+        if (!formatter.lenientParseEnabled()) {
+            return new int[] { str.indexOf(key, startingAt), key.length() };
+
+        // but if lenient parsing is turned ON, we've got some work
+        // ahead of us
+        } else {
+            //----------------------------------------------------------------
+            // JDK 1.1 HACK (take out of 1.2-specific code)
+
+            // in JDK 1.2, CollationElementIterator provides us with an
+            // API to map between character offsets and collation elements
+            // and we can do this by marching through the string comparing
+            // collation elements.  We can't do that in JDK 1.1.  Insted,
+            // we have to go through this horrible slow mess:
+            int p = startingAt;
+            int keyLen = 0;
+
+            // basically just isolate smaller and smaller substrings of
+            // the target string (each running to the end of the string,
+            // and with the first one running from startingAt to the end)
+            // and then use prefixLength() to see if the search key is at
+            // the beginning of each substring.  This is excruciatingly
+            // slow, but it will locate the key and tell use how long the
+            // matching text was.
+            while (p < str.length() && keyLen == 0) {
+                keyLen = prefixLength(str.substring(p), key);
+                if (keyLen != 0) {
+                    return new int[] { p, keyLen };
+                }
+                ++p;
+            }
+            // if we make it to here, we didn't find it.  Return -1 for the
+            // location.  The length should be ignored, but set it to 0,
+            // which should be "safe"
+            return new int[] { -1, 0 };
+
+            //----------------------------------------------------------------
+            // JDK 1.2 version of this routine
+            //RuleBasedCollator collator = (RuleBasedCollator)formatter.getCollator();
+            //
+            //CollationElementIterator strIter = collator.getCollationElementIterator(str);
+            //CollationElementIterator keyIter = collator.getCollationElementIterator(key);
+            //
+            //int keyStart = -1;
+            //
+            //str.setOffset(startingAt);
+            //
+            //int oStr = strIter.next();
+            //int oKey = keyIter.next();
+            //while (oKey != CollationElementIterator.NULLORDER) {
+            //    while (oStr != CollationElementIterator.NULLORDER &&
+            //                CollationElementIterator.primaryOrder(oStr) == 0)
+            //        oStr = strIter.next();
+            //
+            //    while (oKey != CollationElementIterator.NULLORDER &&
+            //                CollationElementIterator.primaryOrder(oKey) == 0)
+            //        oKey = keyIter.next();
+            //
+            //    if (oStr == CollationElementIterator.NULLORDER) {
+            //        return new int[] { -1, 0 };
+            //    }
+            //
+            //    if (oKey == CollationElementIterator.NULLORDER) {
+            //        break;
+            //    }
+            //
+            //    if (CollationElementIterator.primaryOrder(oStr) ==
+            //            CollationElementIterator.primaryOrder(oKey)) {
+            //        keyStart = strIter.getOffset();
+            //        oStr = strIter.next();
+            //        oKey = keyIter.next();
+            //    } else {
+            //        if (keyStart != -1) {
+            //            keyStart = -1;
+            //            keyIter.reset();
+            //        } else {
+            //            oStr = strIter.next();
+            //        }
+            //    }
+            //}
+            //
+            //if (oKey == CollationElementIterator.NULLORDER) {
+            //    return new int[] { keyStart, strIter.getOffset() - keyStart };
+            //} else {
+            //    return new int[] { -1, 0 };
+            //}
+        }
+    }
+
+    /**
+     * Checks to see whether a string consists entirely of ignorable
+     * characters.
+     * @param str The string to test.
+     * @return true if the string is empty of consists entirely of
+     * characters that the number formatter's collator says are
+     * ignorable at the primary-order level.  false otherwise.
+     */
+    private boolean allIgnorable(String str) {
+        // if the string is empty, we can just return true
+        if (str.length() == 0) {
+            return true;
+        }
+
+        // if lenient parsing is turned on, walk through the string with
+        // a collation element iterator and make sure each collation
+        // element is 0 (ignorable) at the primary level
+        if (formatter.lenientParseEnabled()) {
+            RuleBasedCollator collator = (RuleBasedCollator)(formatter.getCollator());
+            CollationElementIterator iter = collator.getCollationElementIterator(str);
+
+            int o = iter.next();
+            while (o != CollationElementIterator.NULLORDER
+                   && CollationElementIterator.primaryOrder(o) == 0) {
+                o = iter.next();
+            }
+            return o == CollationElementIterator.NULLORDER;
+        // if lenient parsing is turned off, there is no such thing as
+        // an ignorable character: return true only if the string is empty
+        } else {
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/text/NFRuleSet.java b/src/com/ibm/text/NFRuleSet.java
new file mode 100755
index 0000000..e461d5b
--- /dev/null
+++ b/src/com/ibm/text/NFRuleSet.java
@@ -0,0 +1,746 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/NFRuleSet.java,v $ 
+ * $Date: 2000/03/10 04:07:21 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.text.*;
+import java.util.Vector;
+
+/**
+ * A collection of rules used by a RuleBasedNumberFormat to format and
+ * parse numbers.  It is the responsibility of a RuleSet to select an
+ * appropriate rule for formatting a particular number and dispatch
+ * control to it, and to arbitrate between different rules when parsing
+ * a number.
+ * $RCSfile: NFRuleSet.java,v $ $Revision: 1.2 $ $Date: 2000/03/10 04:07:21 $
+ */
+final class NFRuleSet {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * The rule set's name
+     */
+    private String name;
+
+    /**
+     * The rule set's regular rules
+     */
+    private NFRule[] rules;
+
+    /**
+     * The rule set's negative-number rule
+     */
+    private NFRule negativeNumberRule = null;
+
+    /**
+     * The rule set's fraction rules: element 0 is the proper fraction
+     * (0.x) rule, element 1 is the improper fraction (x.x) rule, and
+     * element 2 is the master (x.0) rule.
+     */
+    private NFRule[] fractionRules = new NFRule[3];
+
+    /**
+     * True if the rule set is a fraction rule set.  A fraction rule set
+     * is a rule set that is used to format the fractional part of a
+     * number.  It is called from a >> substitution in another rule set's
+     * fraction rule, and is only called upon to format values between
+     * 0 and 1.  A fraction rule set has different rule-selection
+     * behavior than a regular rule set.
+     */
+    private boolean isFractionRuleSet = false;
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /*
+     * Constructs a rule set.
+     * @param descriptions An array of Strings representing rule set
+     * descriptions.  On exit, this rule set's entry in the array will
+     * have been stripped of its rule set name and any trailing whitespace.
+     * @param index The index into "descriptions" of the description
+     * for the rule to be constructed
+     */
+    public NFRuleSet(String[] descriptions, int index) throws IllegalArgumentException {
+        String description = descriptions[index];
+
+        // if the description begins with a rule set name (the rule set
+        // name can be omitted in formatter descriptions that consist
+        // of only one rule set), copy it out into our "name" member
+        // and delete it from the description
+        if (description.charAt(0) == '%') {
+            int pos = description.indexOf(':');
+            if (pos == -1) {
+                throw new IllegalArgumentException("Rule set name doesn't end in colon");
+            } else {
+                name = description.substring(0, pos);
+                while (pos < description.length() && Character.isWhitespace(description.
+                                charAt(++pos))) {
+                }
+                description = description.substring(pos);
+                descriptions[index] = description;
+            }
+
+        // if the description doesn't begin with a rule set name, its
+        // name is "%default"
+        } else {
+            name = "%default";
+        }
+
+        if (description.length() == 0) {
+            throw new IllegalArgumentException("Empty rule set description");
+        }
+
+        // all of the other members of NFRuleSet are initialized
+        // by parseRules()
+    }
+
+    /**
+     * Construct the subordinate data structures used by this object.
+     * This function is called by the RuleBasedNumberFormat constructor
+     * after all the rule sets have been created to actually parse
+     * the description and build rules from it.  Since any rule set
+     * can refer to any other rule set, we have to have created all of
+     * them before we can create anything else.
+     * @param description The textual description of this rule set
+     * @param owner The formatter that owns this rule set
+     */
+    public void parseRules(String                description,
+                           RuleBasedNumberFormat owner) {
+        // start by creating a Vector whose elements are Strings containing
+        // the descriptions of the rules (one rule per element).  The rules
+        // are separated by semicolons (there's no escape facility: ALL
+        // semicolons are rule delimiters)
+        Vector ruleDescriptions = new Vector();
+
+        int oldP = 0;
+        int p = description.indexOf(';');
+        while (oldP != -1) {
+            if (p != -1) {
+                ruleDescriptions.addElement(description.substring(oldP, p));
+                oldP = p + 1;
+            } else {
+                if (oldP < description.length()) {
+                    ruleDescriptions.addElement(description.substring(oldP));
+                }
+                oldP = p;
+            }
+            p = description.indexOf(';', p + 1);
+        }
+
+        // now go back through and build a vector of the rules themselves
+        // (the number of elements in the description list isn't necessarily
+        // the number of rules-- some descriptions may expend into two rules)
+        Vector tempRules = new Vector();
+
+        // we keep track of the rule before the one we're currently working
+        // on solely to support >>> substitutions
+        NFRule predecessor = null;
+        for (int i = 0; i < ruleDescriptions.size(); i++) {
+            // makeRules (a factory method on NFRule) will return either
+            // a single rule or an array of rules.  Either way, add them
+            // to our rule vector
+            Object temp = NFRule.makeRules((String)ruleDescriptions.elementAt(i),
+                            this, predecessor, owner);
+
+            if (temp instanceof NFRule) {
+                tempRules.addElement(temp);
+                predecessor = (NFRule)temp;
+            }
+            else if (temp instanceof NFRule[]) {
+                NFRule[] rulesToAdd = (NFRule[])temp;
+
+                for (int j = 0; j < rulesToAdd.length; j++) {
+                    tempRules.addElement(rulesToAdd[j]);
+                    predecessor = rulesToAdd[j];
+                }
+            }
+        }
+        // now we can bag the description list
+        ruleDescriptions = null;
+
+        // for rules that didn't specify a base value, their base values
+        // were initialized to 0.  Make another pass through the list and
+        // set all those rules' base values.  We also remove any special
+        // rules from the list and put them into their own member variables
+        long defaultBaseValue = 0;
+
+        // (this isn't a for loop because we might be deleting items from
+        // the vector-- we want to make sure we only increment i when
+        // we _didn't_ delete aything from the vector)
+        int i = 0;
+        while (i < tempRules.size()) {
+            NFRule rule = (NFRule)tempRules.elementAt(i);
+
+            switch ((int)rule.getBaseValue()) {
+                // if the rule's base value is 0, fill in a default
+                // base value (this will be 1 plus the preceding
+                // rule's base value for regular rule sets, and the
+                // same as the preceding rule's base value in fraction
+                // rule sets)
+                case 0:
+                    rule.setBaseValue(defaultBaseValue);
+                    if (!isFractionRuleSet) {
+                        ++defaultBaseValue;
+                    }
+                    ++i;
+                    break;
+
+                // if it's the negative-number rule, copy it into its own
+                // data member and delete it from the list
+                case NFRule.NEGATIVE_NUMBER_RULE:
+                    negativeNumberRule = rule;
+                    tempRules.removeElementAt(i);
+                    break;
+
+                // if it's the improper fraction rule, copy it into the
+                // correct element of fractionRules
+                case NFRule.IMPROPER_FRACTION_RULE:
+                    fractionRules[0] = rule;
+                    tempRules.removeElementAt(i);
+                    break;
+
+                // if it's the proper fraction rule, copy it into the
+                // correct element of fractionRules
+                case NFRule.PROPER_FRACTION_RULE:
+                    fractionRules[1] = rule;
+                    tempRules.removeElementAt(i);
+                    break;
+
+                // if it's the master rule, copy it into the
+                // correct element of fractionRules
+                case NFRule.MASTER_RULE:
+                    fractionRules[2] = rule;
+                    tempRules.removeElementAt(i);
+                    break;
+
+                // if it's a regular rule that already knows its base value,
+                // check to make sure the rules are in order, and update
+                // the default base value for the next rule
+                default:
+                    if (rule.getBaseValue() < defaultBaseValue) {
+                        throw new IllegalArgumentException("Rules are not in order");
+                    }
+                    defaultBaseValue = rule.getBaseValue();
+                    if (!isFractionRuleSet) {
+                        ++defaultBaseValue;
+                    }
+                    ++i;
+                    break;
+            }
+        }
+
+        // finally, we can copy the rules from the vector into a
+        // fixed-length array
+        rules = new NFRule[tempRules.size()];
+        tempRules.copyInto((Object[])rules);
+    }
+
+    /**
+     * Flags this rule set as a fraction rule set.  This function is
+     * called during the construction process once we know this rule
+     * set is a fraction rule set.  We don't know a rule set is a
+     * fraction rule set until we see it used somewhere.  This function
+     * is not ad must not be called at any time other than during
+     * construction of a RuleBasedNumberFormat.
+     */
+    public void makeIntoFractionRuleSet() {
+        isFractionRuleSet = true;
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Compares two rule sets for equality.
+     * @param that The other rule set
+     * @return true if the two rule sets are functionally equivalent.
+     */
+    public boolean equals(Object that) {
+        // if different classes, they're not equal
+        if (!(that instanceof NFRuleSet)) {
+            return false;
+        } else {
+            // otherwise, compare the members one by one...
+            NFRuleSet that2 = (NFRuleSet)that;
+
+            if (!name.equals(that2.name)
+                || !negativeNumberRule.equals(that2.negativeNumberRule)
+                || !fractionRules[0].equals(that2.fractionRules[0])
+                || !fractionRules[1].equals(that2.fractionRules[1])
+                || !fractionRules[2].equals(that2.fractionRules[2])
+                || rules.length != that2.rules.length
+                || isFractionRuleSet != that2.isFractionRuleSet) {
+                return false;
+            }
+
+            // ...then compare the rule lists...
+            for (int i = 0; i < rules.length; i++) {
+                if (!rules[i].equals(that2.rules[i])) {
+                    return false;
+                }
+            }
+
+            // ...and if we make it here, tney're equal
+            return true;
+        }
+    }
+
+    /**
+     * Builds a textual representation of a rule set.
+     * @return A textual representation of a rule set.  This won't
+     * necessarily be the same description that the rule set was
+     * constructed with, but it will produce the same results.
+     */
+    public String toString() {
+        StringBuffer result = new StringBuffer();
+
+        // the rule set name goes first...
+        result.append(name + ":\n");
+
+        // followed by the regular rules...
+        for (int i = 0; i < rules.length; i++) {
+            result.append("    " + rules[i].toString() + "\n");
+        }
+
+        // followed by the special rules (if they exist)
+        if (negativeNumberRule != null) {
+            result.append("    " + negativeNumberRule.toString() + "\n");
+        }
+        if (fractionRules[0] != null) {
+            result.append("    " + fractionRules[0].toString() + "\n");
+        }
+        if (fractionRules[1] != null) {
+            result.append("    " + fractionRules[1].toString() + "\n");
+        }
+        if (fractionRules[2] != null) {
+            result.append("    " + fractionRules[2].toString() + "\n");
+        }
+
+        return result.toString();
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessors
+    //-----------------------------------------------------------------------
+
+    /**
+     * Says whether this rule set is a fraction rule set.
+     * @return true if this rule is a fraction rule set; false if it isn't
+     */
+    public boolean isFractionSet() {
+        return isFractionRuleSet;
+    }
+
+    /*
+     * Returns the rule set's name
+     * @return The rule set's name
+     */
+    public String getName() {
+        return name;
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Formats a long.  Selects an appropriate rule and dispatches
+     * control to it.
+     * @param number The number being formatted
+     * @param toInsertInto The string where the result is to be placed
+     * @param pos The position in toInsertInto where the result of
+     * this operation is to be inserted
+     */
+    public void format(long number, StringBuffer toInsertInto, int pos) {
+        NFRule applicableRule = findNormalRule(number);
+
+        applicableRule.doFormat(number, toInsertInto, pos);
+    }
+
+    /**
+     * Formats a double.  Selects an appropriate rule and dispatches
+     * control to it.
+     * @param number The number being formatted
+     * @param toInsertInto The string where the result is to be placed
+     * @param pos The position in toInsertInto where the result of
+     * this operation is to be inserted
+     */
+    public void format(double number, StringBuffer toInsertInto, int pos) {
+        NFRule applicableRule = findRule(number);
+
+        applicableRule.doFormat(number, toInsertInto, pos);
+    }
+
+    /**
+     * Selects an apropriate rule for formatting the number.
+     * @param number The number being formatted.
+     * @return The rule that should be used to format it
+     */
+    private NFRule findRule(double number) {
+        // if this is a fraction rule set, use findFractionRuleSetRule()
+        if (isFractionRuleSet) {
+            return findFractionRuleSetRule(number);
+        }
+
+        // if the number is negative, return the negative number rule
+        // (if there isn't a negative-number rule, we pretend it's a
+        // positive number)
+        if (number < 0) {
+            if (negativeNumberRule != null) {
+                return negativeNumberRule;
+            } else {
+                number = -number;
+            }
+        }
+
+        // if the number isn't an integer, we use one f the fraction rules...
+        if (number != Math.floor(number)) {
+            // if the number is between 0 and 1, return the proper
+            // fraction rule
+            if (number < 1 && fractionRules[1] != null) {
+                return fractionRules[1];
+            }
+
+            // otherwise, return the improper fraction rule
+            else if (fractionRules[0] != null) {
+                return fractionRules[0];
+            }
+        }
+
+        // if there's a master rule, use it to format the number
+        if (fractionRules[2] != null) {
+            return fractionRules[2];
+
+        // and if we haven't yet returned a rule, use findNormalRule()
+        // to find the applicable rule
+        } else {
+            return findNormalRule((long)Math.round(number));
+        }
+    }
+
+    /**
+     * If the value passed to findRule() is a positive integer, findRule()
+     * uses this function to select the appropriate rule.  The result will
+     * generally be the rule with the highest base value less than or equal
+     * to the number.  There is one exception to this: If that rule has
+     * two substitutions and a base value that is not an even multiple of
+     * its divisor, and the number itself IS an even multiple of the rule's
+     * divisor, then the result will be the rule that preceded the original
+     * result in the rule list.  (This behavior is known as the "rollback
+     * rule", and is used to handle optional text: a rule with optional
+     * text is represented internally as two rules, and the rollback rule
+     * selects appropriate between them.  This avoids things like "two
+     * hundred zero".)
+     * @param number The number being formatted
+     * @return The rule to use to format this number
+     */
+    private NFRule findNormalRule(long number) {
+        // if this is a fraction rule set, use findFractionRuleSetRule()
+        // to find the rule (we should only go into this clause if the
+        // value is 0)
+        if (isFractionRuleSet) {
+            return findFractionRuleSetRule(number);
+        }
+
+        // if the number is negative, return the negative-number rule
+        // (if there isn't one, pretend the number is positive)
+        if (number < 0) {
+            if (negativeNumberRule != null) {
+                return negativeNumberRule;
+            } else {
+                number = -number;
+            }
+        }
+
+        // we have to repeat the preceding two checks, even though we
+        // do them in findRule(), because the version of format() that
+        // takes a long bypasses findRule() and goes straight to this
+        // function.  This function does skip the fraction rules since
+        // we know the value is an integer (it also skips the master
+        // rule, since it's considered a fraction rule.  Skipping the
+        // master rule in this function is also how we avoid infinite
+        // recursion)
+
+        // binary-search the rule list for the applicable rule
+        // (a rule is used for all values from its base value to
+        // the next rule's base value)
+        int lo = 0;
+        int hi = rules.length;
+        while (lo < hi) {
+            int mid = (lo + hi) / 2;
+            if (rules[mid].getBaseValue() == number) {
+                return rules[mid];
+            }
+            else if (rules[mid].getBaseValue() > number) {
+                hi = mid;
+            }
+            else {
+                lo = mid + 1;
+            }
+        }
+        NFRule result = rules[hi - 1];
+
+        // use shouldRollBack() to see whether we need to invoke the
+        // rollback rule (see shouldRollBack()'s documentation for
+        // an explanation of the rollback rule).  If we do, roll back
+        // one rule and return that one instead of the one we'd normally
+        // return
+        if (result.shouldRollBack(number)) {
+            result = rules[hi - 2];
+        }
+
+        return result;
+    }
+
+    /**
+     * If this rule is a fraction rule set, this function is used by
+     * findRule() to select the most appropriate rule for formatting
+     * the number.  Basically, the base value of each rule in the rule
+     * set is treated as the denominator of a fraction.  Whichever
+     * denominator can produce the fraction closest in value to the
+     * number passed in is the result.  If there's a tie, the earlier
+     * one in the list wins.  (If there are two rules in a row with the
+     * same base value, the first one is used when the numerator of the
+     * fraction would be 1, and the second rule is used the rest of the
+     * time.
+     * @param number The number being formatted (which will always be
+     * a number between 0 and 1)
+     * @return The rule to use to format this number
+     */
+    private NFRule findFractionRuleSetRule(double number) {
+        // the obvious way to do this (multiply the value being formatted
+        // by each rule's base value until you get an integral result)
+        // doesn't work because of rounding error.  This method is more
+        // accurate
+
+        // find the least common multiple of the rules' base values
+        // and multiply this by the number being formatted.  This is
+        // all the precision we need, and we can do all of the rest
+        // of the math using integer arithmetic
+        long leastCommonMultiple = rules[0].getBaseValue();
+        for (int i = 1; i < rules.length; i++) {
+            leastCommonMultiple = lcm(leastCommonMultiple, rules[i].getBaseValue());
+        }
+        long numerator = (long)(Math.round(number * leastCommonMultiple));
+
+        // for each rule, do the following...
+        long tempDifference;
+        long difference = Long.MAX_VALUE;
+        int winner = 0;
+        for (int i = 0; i < rules.length; i++) {
+            // "numerator" is the numerator of the fraction is the
+            // denominator is the LCD.  The numerator if the the rule's
+            // base value is the denomiator is "numerator" times the
+            // base value divided bythe LCD.  Here we check to see if
+            // that's an integer, and if not, how close it is to being
+            // an integer.
+            tempDifference = numerator * rules[i].getBaseValue() % leastCommonMultiple;
+
+            // normalize the result of the above calculation: we want
+            // the numerator's distance from the CLOSEST multiple
+            // of the LCD
+            if (leastCommonMultiple - tempDifference < tempDifference) {
+                tempDifference = leastCommonMultiple - tempDifference;
+            }
+
+            // if this is as close as we've come, keep track of how close
+            // that is, and the line number of the rule that did it.  If
+            // we've scored a direct hit, we don't have to look at any more
+            // rules
+            if (tempDifference < difference) {
+                difference = tempDifference;
+                winner = i;
+                if (difference == 0) {
+                    break;
+                }
+            }
+        }
+
+        // if we have two successive rules that both have the winning base
+        // value, then the first one (the one we found above) is used if
+        // the numerator of the fraction is 1 and the second one is used if
+        // the numerator of the fraction is anything else (this lets us
+        // do things like "one third"/"two thirds" without haveing to define
+        // a whole bunch of extra rule sets)
+        if (winner + 1 < rules.length
+                && rules[winner + 1].getBaseValue() == rules[winner].getBaseValue()) {
+            if (Math.round(number * rules[winner].getBaseValue()) < 1
+                    || Math.round(number * rules[winner].getBaseValue()) >= 2) {
+                ++winner;
+            }
+        }
+
+        // finally, return the winning rule
+        return rules[winner];
+    }
+
+    /**
+     * Calculates the least common multiple of x and y.
+     */
+    private static long lcm(long x, long y) {
+        // binary gcd algorithm from Knuth, "The Art of Computer Programming,"
+        // vol. 2, 1st ed., pp. 298-299
+        long x1 = x;
+        long y1 = y;
+
+        int p2 = 0;
+        while ((x1 & 1) == 0 && (y1 & 1) == 0) {
+            ++p2;
+            x1 >>= 1;
+            y1 >>= 1;
+        }
+
+        long t;
+        if ((x1 & 1) == 1) {
+            t = -y1;
+        } else {
+            t = x1;
+        }
+
+        while (t != 0) {
+            while ((t & 1) == 0) {
+                t >>= 1;
+            }
+            if (t > 0) {
+                x1 = t;
+            } else {
+                y1 = -t;
+            }
+            t = x1 - y1;
+        }
+        long gcd = x1 << p2;
+
+        // x * y == gcd(x, y) * lcm(x, y)
+        return x / gcd * y;
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Parses a string.  Matches the string to be parsed against each
+     * of its rules (with a base value less than upperBound) and returns
+     * the value produced by the rule that matched the most charcters
+     * in the source string.
+     * @param text The string to parse
+     * @param parsePosition The initial position is ignored and assumed
+     * to be 0.  On exit, this object has been updated to point to the
+     * first character position this rule set didn't consume.
+     * @param upperBound Limits the rules that can be allowed to match.
+     * Only rules whose base values are strictly less than upperBound
+     * are considered.
+     * @return The numerical result of parsing this string.  This will
+     * be the matching rule's base value, composed appropriately with
+     * the results of matching any of its substitutions.  The object
+     * will be an instance of Long if it's an integral value; otherwise,
+     * it will be an instance of Double.  This function always returns
+     * a valid object: If nothing matched the input string at all,
+     * this function returns new Long(0), and the parse position is
+     * left unchanged.
+     */
+    public Number parse(String text, ParsePosition parsePosition, double upperBound) {
+        // try matching each rule in the rule set against the text being
+        // parsed.  Whichever one matches the most characters is the one
+        // that determines the value we return.
+
+        ParsePosition highWaterMark = new ParsePosition(0);
+        Number result = new Long(0);
+        Number tempResult = null;
+
+        // dump out if there's no text to parse
+        if (text.length() == 0) {
+            return result;
+        }
+
+        // start by trying the nehative number rule (if there is one)
+        if (negativeNumberRule != null) {
+            tempResult = negativeNumberRule.doParse(text, parsePosition, false, upperBound);
+            if (parsePosition.getIndex() > highWaterMark.getIndex()) {
+                result = tempResult;
+                highWaterMark.setIndex(parsePosition.getIndex());
+            }
+// commented out because the error-index API on ParsePosition isn't there in 1.1.x
+//            if (parsePosition.getErrorIndex() > highWaterMark.getErrorIndex()) {
+//                highWaterMark.setErrorIndex(parsePosition.getErrorIndex());
+//            }
+            parsePosition.setIndex(0);
+        }
+
+        // then try each of the fraction rules
+        for (int i = 0; i < 3; i++) {
+            if (fractionRules[i] != null) {
+                tempResult = fractionRules[i].doParse(text, parsePosition, false, upperBound);
+                if (parsePosition.getIndex() > highWaterMark.getIndex()) {
+                    result = tempResult;
+                    highWaterMark.setIndex(parsePosition.getIndex());
+                }
+// commented out because the error-index API on ParsePosition isn't there in 1.1.x
+//            if (parsePosition.getErrorIndex() > highWaterMark.getErrorIndex()) {
+//                highWaterMark.setErrorIndex(parsePosition.getErrorIndex());
+//            }
+                parsePosition.setIndex(0);
+            }
+        }
+
+        // finally, go through the regular rules one at a time.  We start
+        // at the end of the list because we want to try matching the most
+        // sigificant rule first (this helps ensure that we parse
+        // "five thousand three hundred six" as
+        // "(five thousand) (three hundred) (six)" rather than
+        // "((five thousand three) hundred) (six)").  Skip rules whose
+        // base values are higher than the upper bound (again, this helps
+        // limit ambiguity by making sure the rules that match a rule's
+        // are less significant than the rule containing the substitutions)/
+        for (int i = rules.length - 1; i >= 0 && highWaterMark.getIndex() < text.length(); i--) {
+            if (!isFractionRuleSet && rules[i].getBaseValue() >= upperBound) {
+                continue;
+            }
+
+            tempResult = rules[i].doParse(text, parsePosition, isFractionRuleSet, upperBound);
+            if (parsePosition.getIndex() > highWaterMark.getIndex()) {
+                result = tempResult;
+                highWaterMark.setIndex(parsePosition.getIndex());
+            }
+// commented out because the error-index API on ParsePosition isn't there in 1.1.x
+//            if (parsePosition.getErrorIndex() > highWaterMark.getErrorIndex()) {
+//                highWaterMark.setErrorIndex(parsePosition.getErrorIndex());
+//            }
+            parsePosition.setIndex(0);
+        }
+
+        // finally, update the parse postion we were passed to point to the
+        // first character we didn't use, and return the result that
+        // cporresponds to that string of characters
+        parsePosition.setIndex(highWaterMark.getIndex());
+// commented out because the error-index API on ParsePosition isn't there in 1.1.x
+//        if (parsePosition.getIndex() == 0) {
+//            parsePosition.setErrorIndex(highWaterMark.getErrorIndex());
+//        }
+
+        return result;
+    }
+}
diff --git a/src/com/ibm/text/NFSubstitution.java b/src/com/ibm/text/NFSubstitution.java
new file mode 100755
index 0000000..6482f79
--- /dev/null
+++ b/src/com/ibm/text/NFSubstitution.java
@@ -0,0 +1,1738 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/NFSubstitution.java,v $ 
+ * $Date: 2000/05/26 21:38:55 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.text.*;
+
+//===================================================================
+// NFSubstitution (abstract base class)
+//===================================================================
+
+/**
+ * An abstract class defining protocol for substitutions.  A substitution
+ * is a section of a rule that inserts text into the rule's rule text
+ * based on some part of the number being formatted.
+ * @author Richard Gillam
+ * @version $RCSfile: NFSubstitution.java,v $ $Revision: 1.4 $ $Date: 2000/05/26 21:38:55 $
+ */
+abstract class NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * The substitution's position in the rule text of the rule that owns it
+     */
+    int pos;
+
+    /**
+     * The rule set this substitution uses to format its result, or null.
+     * (Either this or numberFormat has to be non-null.)
+     */
+    NFRuleSet ruleSet = null;
+
+    /**
+     * The DecimalFormat this substitution uses to format its result,
+     * or null.  (Either this or ruleSet has to be non-null.)
+     */
+    DecimalFormat numberFormat = null;
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Parses the description, creates the right kind of substitution,
+     * and initializes it based on the description.
+     * @param pos The substitution's position in the rule text of the
+     * rule that owns it.
+     * @param rule The rule containing this substitution
+     * @param rulePredecessor The rule preceding the one that contains
+     * this substitution in the rule set's rule list (this is used
+     * only for >>> substitutions).
+     * @param ruleSet The rule set containing the rule containing this
+     * substitution
+     * @param formatter The RuleBasedNumberFormat that ultimately owns
+     * this substitution
+     * @param description The description to parse to build the substitution
+     * (this is just the substring of the rule's description containing
+     * the substitution token itself)
+     * @return A new substitution constructed according to the description
+     */
+    public static NFSubstitution makeSubstitution(int pos,
+                                                  NFRule rule,
+                                                  NFRule rulePredecessor,
+                                                  NFRuleSet ruleSet,
+                                                  RuleBasedNumberFormat formatter,
+                                                  String description) {
+        // if the description is empty, return a NummSubstitution
+        if (description.length() == 0) {
+            return new NullSubstitution(pos, ruleSet, formatter, description);
+        }
+
+        switch (description.charAt(0)) {
+            // if the description begins with '<'...
+            case '<':
+                // throw an exception if the rule is a negative number
+                // rule
+                if (rule.getBaseValue() == NFRule.NEGATIVE_NUMBER_RULE) {
+                    throw new IllegalArgumentException("<< not allowed in negative-number rule");
+                }
+
+                // if the rule is a fraction rule, return an
+                // IntegralPartSubstitution
+                else if (rule.getBaseValue() == NFRule.IMPROPER_FRACTION_RULE
+                            || rule.getBaseValue() == NFRule.PROPER_FRACTION_RULE
+                            || rule.getBaseValue() == NFRule.MASTER_RULE) {
+                    return new IntegralPartSubstitution(pos, ruleSet, formatter, description);
+                }
+
+                // if the rule set containing the rule is a fraction
+                // rule set, return a NumeratorSubstitution
+                else if (ruleSet.isFractionSet()) {
+                    return new NumeratorSubstitution(pos, rule.getBaseValue(),
+                                    formatter.getDefaultRuleSet(), formatter, description);
+                }
+
+                // otherwise, return a MultiplierSubstitution
+                else {
+                    return new MultiplierSubstitution(pos, rule.getDivisor(), ruleSet,
+                                    formatter, description);
+                }
+
+            // if the description begins with '>'...
+            case '>':
+                // if the rule is a negative-number rule, return
+                // an AbsoluteValueSubstitution
+                if (rule.getBaseValue() == NFRule.NEGATIVE_NUMBER_RULE) {
+                    return new AbsoluteValueSubstitution(pos, ruleSet, formatter, description);
+                }
+
+                // if the rule is a fraction rule, return a
+                // FractionalPartSubstitution
+                else if (rule.getBaseValue() == NFRule.IMPROPER_FRACTION_RULE
+                            || rule.getBaseValue() == NFRule.PROPER_FRACTION_RULE
+                            || rule.getBaseValue() == NFRule.MASTER_RULE) {
+                    return new FractionalPartSubstitution(pos, ruleSet, formatter, description);
+                }
+
+                // if the rule set owning the rule is a fraction rule set,
+                // throw an exception
+                else if (ruleSet.isFractionSet()) {
+                    throw new IllegalArgumentException(">> not allowed in fraction rule set");
+                }
+
+                // otherwise, return a ModulusSubstitution
+                else {
+                    return new ModulusSubstitution(pos, rule.getDivisor(), rulePredecessor,
+                                    ruleSet, formatter, description);
+                }
+
+            // if the description begins with '=', always return a
+            // SameValueSubstitution
+            case '=':
+                return new SameValueSubstitution(pos, ruleSet, formatter, description);
+
+            // and if it's anything else, throw an exception
+            default:
+                throw new IllegalArgumentException("Illegal substitution character");
+        }
+    }
+
+    /**
+     * Base constructor for substitutions.  This constructor sets up the
+     * fields which are common to all substitutions.
+     * @param pos The substitution's position in the owning rule's rule
+     * text
+     * @param ruleSet The rule set that owns this substitution
+     * @param formatter The RuleBasedNumberFormat that owns this substitution
+     * @param description The substitution descriptor (i.e., the text
+     * inside the token characters)
+     */
+    NFSubstitution(int pos,
+                   NFRuleSet ruleSet,
+                   RuleBasedNumberFormat formatter,
+                   String description) {
+        // initialize the substitution's position in its parent rule
+        this.pos = pos;
+
+        // the description should begin and end with the same character.
+        // If it doesn't that's a syntax error.  Otherwise,
+        // makeSubstitution() was the only thing that needed to know
+        // about these characters, so strip them off
+        if (description.length() >= 2 && description.charAt(0) == description.charAt(
+                        description.length() - 1)) {
+            description = description.substring(1, description.length() - 1);
+        }
+        else if (description.length() != 0) {
+            throw new IllegalArgumentException("Illegal substitution syntax");
+        }
+
+        // if the description was just two paired token characters
+        // (i.e., "<<" or ">>"), it uses the rule set it belongs to to
+        // format its result
+        if (description.length() == 0) {
+            this.ruleSet = ruleSet;
+        }
+
+        // if the description contains a rule set name, that's the rule
+        // set we use to format the result: get a reference to the
+        // names rule set
+        else if (description.charAt(0) == '%') {
+            this.ruleSet = formatter.findRuleSet(description);
+        }
+
+        // if the description begins with 0 or #, treat it as a
+        // DecimalFormat pattern, and initialize a DecimalFormat with
+        // that pattern (then set it to use the DecimalFormatSymbols
+        // belonging to our formatter)
+        else if (description.charAt(0) == '#' || description.charAt(0) == '0') {
+            this.numberFormat = new DecimalFormat(description);
+            this.numberFormat.setDecimalFormatSymbols(formatter.getDecimalFormatSymbols());
+        }
+
+        // if the description is ">>>", this substitution bypasses the
+        // usual rule-search process and always uses the rule that precedes
+        // it in its own rule set's rule list (this is used for place-value
+        // notations: formats where you want to see a particular part of
+        // a number even when it's 0)
+        else if (description.charAt(0) == '>') {
+            this.ruleSet = null;
+            this.numberFormat = null;
+        }
+
+        // and of the description is none of these things, it's a syntax error
+        else {
+            throw new IllegalArgumentException("Illegal substitution syntax");
+        }
+    }
+
+    /**
+     * Set's the substitution's divisor.  Used by NFRule.setBaseValue().
+     * A no-op for all substitutions except multiplier and modulus
+     * substitutions.
+     * @param radix The radix of the divisor
+     * @param exponent The exponent of the divisor
+     */
+    public void setDivisor(int radix, int exponent) {
+        // a no-op for all substitutions except multiplier and modulus substitutions
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Compares two substitutions for equality
+     * @param The substitution to compare this one to
+     * @return true if the two substitutions are functionally equivalent
+     */
+    public boolean equals(Object that) {
+        // compare class and all of the fields all substitutions have
+        // in common
+        if (this.getClass() == that.getClass()) {
+            NFSubstitution that2 = (NFSubstitution)that;
+
+            return pos == that2.pos
+                   && ruleSet == that2.ruleSet
+                   && numberFormat.equals(that2.numberFormat);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Returns a textual description of the substitution
+     * @return A textual description of the substitution.  This might
+     * not be identical to the description it was created from, but
+     * it'll produce the same result.
+     */
+    public String toString() {
+        // use tokenChar() to get the character at the beginning and
+        // end of the substitutin token.  In between them will go
+        // either the name of the rule set it uses, or the pattern of
+        // the DecimalFormat it uses
+        if (ruleSet != null) {
+            return tokenChar() + ruleSet.getName() + tokenChar();
+        } else {
+            return tokenChar() + numberFormat.toPattern() + tokenChar();
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Performs a mathematical operation on the number, formats it using
+     * either ruleSet or decimalFormat, and inserts the result into
+     * toInsertInto.
+     * @param number The number being formatted.
+     * @param toInsertInto The string we insert the result into
+     * @param pos The position in toInsertInto where the owning rule's
+     * rule text begins (this value is added to this substitution's
+     * position to determine exactly where to insert the new text)
+     */
+    public void doSubstitution(long number, StringBuffer toInsertInto, int pos) {
+        if (ruleSet != null) {
+           // perform a transformation on the number that is dependent
+           // on the type of substitution this is, then just call its
+           // rule set's format() method to format the result
+           long numberToFormat = transformNumber(number);
+
+            ruleSet.format(numberToFormat, toInsertInto, pos + this.pos);
+        } else {
+            // or perform the transformation on the number (preserving
+            // the result's fractional part if the formatter it set
+            // to show it), then use that formatter's format() method
+            // to format the result
+            double numberToFormat = transformNumber((double)number);
+            if (numberFormat.getMaximumFractionDigits() == 0) {
+                numberToFormat = Math.floor(numberToFormat);
+            }
+
+            toInsertInto.insert(pos + this.pos, numberFormat.format(numberToFormat));
+        }
+    }
+
+    /**
+     * Performs a mathematical operation on the number, formats it using
+     * either ruleSet or decimalFormat, and inserts the result into
+     * toInsertInto.
+     * @param number The number being formatted.
+     * @param toInsertInto The string we insert the result into
+     * @param pos The position in toInsertInto where the owning rule's
+     * rule text begins (this value is added to this substitution's
+     * position to determine exactly where to insert the new text)
+     */
+    public void doSubstitution(double number, StringBuffer toInsertInto, int pos) {
+        // perform a transformation on the number being formatted that
+        // is dependent on the type of substitution this is
+        double numberToFormat = transformNumber(number);
+
+        // if the result is an integer, from here on out we work in integer
+        // space (saving time and memory and preserving accuracy)
+        if (numberToFormat == Math.floor(numberToFormat) && ruleSet != null) {
+            ruleSet.format((long)numberToFormat, toInsertInto, pos + this.pos);
+
+        // if the result isn't an integer, then call either our rule set's
+        // format() method or our DecimalFormat's format() method to
+        // format the result
+        } else {
+            if (ruleSet != null) {
+                ruleSet.format(numberToFormat, toInsertInto, pos + this.pos);
+            } else {
+                toInsertInto.insert(pos + this.pos, numberFormat.format(numberToFormat));
+            }
+        }
+    }
+
+    /**
+     * Subclasses override this function to perform some kind of
+     * mathematical operation on the number.  The result of this operation
+     * is formatted using the rule set or DecimalFormat that this
+     * substitution refers to, and the result is inserted into the result
+     * string.
+     * @param The number being formatted
+     * @return The result of performing the opreration on the number
+     */
+    public abstract long transformNumber(long number);
+
+    /**
+     * Subclasses override this function to perform some kind of
+     * mathematical operation on the number.  The result of this operation
+     * is formatted using the rule set or DecimalFormat that this
+     * substitution refers to, and the result is inserted into the result
+     * string.
+     * @param The number being formatted
+     * @return The result of performing the opreration on the number
+     */
+    public abstract double transformNumber(double number);
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Parses a string using the rule set or DecimalFormat belonging
+     * to this substitution.  If there's a match, a mathematical
+     * operation (the inverse of the one used in formatting) is
+     * performed on the result of the parse and the value passed in
+     * and returned as the result.  The parse position is updated to
+     * point to the first unmatched character in the string.
+     * @param text The string to parse
+     * @param parsePosition On entry, ignored, but assumed to be 0.
+     * On exit, this is updated to point to the first unmatched
+     * character (or 0 if the substitution didn't match)
+     * @param baseValue A partial parse result that should be
+     * combined with the result of this parse
+     * @param upperBound When searching the rule set for a rule
+     * matching the string passed in, only rules with base values
+     * lower than this are considered
+     * @param lenientParse If true and matching against rules fails,
+     * the substitution will also try matching the text against
+     * numerals using a default-costructed NumberFormat.  If false,
+     * no extra work is done.  (This value is false whenever the
+     * formatter isn't in lenient-parse mode, but is also false
+     * under some conditions even when the formatter _is_ in
+     * lenient-parse mode.)
+     * @return If there's a match, this is the result of composing
+     * baseValue with whatever was returned from matching the
+     * characters.  This will be either a Long or a Double.  If there's
+     * no match this is new Long(0) (not null), and parsePosition
+     * is left unchanged.
+     */
+    public Number doParse(String text, ParsePosition parsePosition, double baseValue,
+                    double upperBound, boolean lenientParse) {
+        Number tempResult;
+
+        // figure out the highest base value a rule can have and match
+        // the text being parsed (this varies according to the type of
+        // substitutions: multiplier, modulus, and numerator substitutions
+        // restrict the search to rules with base values lower than their
+        // own; same-value substitutions leave the upper bound wherever
+        // it was, and the others allow any rule to match
+        upperBound = calcUpperBound(upperBound);
+
+        // use our rule set to parse the text.  If that fails and
+        // lenient parsing is enabled (this is always false if the
+        // formatter's lenient-parsing mode is off, but it may also
+        // be false even when the formatter's lenient-parse mode is
+        // on), then also try parsing the text using a default-
+        // constructed NumberFormat
+        if (ruleSet != null) {
+            tempResult = ruleSet.parse(text, parsePosition, upperBound);
+            if (lenientParse && !ruleSet.isFractionSet() && parsePosition.getIndex() == 0) {
+                tempResult = NumberFormat.getInstance().parse(text, parsePosition);
+            }
+
+        // ...or use our DecimalFormat to parse the text
+        } else {
+            tempResult = numberFormat.parse(text, parsePosition);
+        }
+
+        // if the parse was successful, we've already advanced the caller's
+        // parse position (this is the one function that doesn't have one
+        // of its own).  Derive a parse result and return it as a Long,
+        // if possible, or a Double
+        if (parsePosition.getIndex() != 0) {
+            double result = tempResult.doubleValue();
+
+            // composeRuleValue() produces a full parse result from
+            // the partial parse result passed to this function from
+            // the caller (this is either the owning rule's base value
+            // or the partial result obtained from composing the
+            // owning rule's base value with its other substitution's
+            // parse result) and the partial parse result obtained by
+            // matching the substitution (which will be the same value
+            // the caller would get by parsing just this part of the
+            // text with RuleBasedNumberFormat.parse() ).  How the two
+            // values are used to derive the full parse result depends
+            // on the types of substitutions: For a regular rule, the
+            // ultimate result is its multiplier substitution's result
+            // times the rule's divisor (or the rule's base value) plus
+            // the modulus substitution's result (which will actually
+            // supersede part of the rule's base value).  For a negative-
+            // number rule, the result is the negative of its substitution's
+            // result.  For a fraction rule, it's the sum of its two
+            // substitution results.  For a rule in a fraction rule set,
+            // it's the numerator substitution's result divided by
+            // the rule's base value.  Results from same-value substitutions
+            // propagate back upard, and null substitutions don't affect
+            // the result.
+            result = composeRuleValue(result, baseValue);
+            if (result == (long)result) {
+                return new Long((long)result);
+            } else {
+                return new Double(result);
+            }
+
+        // if the parse was UNsuccessful, return 0
+        } else {
+            return tempResult;
+        }
+    }
+
+    /**
+     * Derives a new value from the two values passed in.  The two values
+     * are typically either the base values of two rules (the one containing
+     * the substitution and the one matching the substitution) or partial
+     * parse results derived in some other way.  The operation is generally
+     * the inverse of the operation performed by transformNumber().
+     * @param newRuleValue The value produced by matching this substitution
+     * @param oldRuleValue The value that was passed to the substitution
+     * by the rule that owns it
+     * @return A third value derived from the other two, representing a
+     * partial parse result
+     */
+    public abstract double composeRuleValue(double newRuleValue, double oldRuleValue);
+
+    /**
+     * Calculates an upper bound when searching for a rule that matches
+     * this substitution.  Rules with base values greater than or equal
+     * to upperBound are not considered.
+     * @param oldUpperBound The current upper-bound setting.  The new
+     * upper bound can't be any higher.
+     */
+    public abstract double calcUpperBound(double oldUpperBound);
+
+    //-----------------------------------------------------------------------
+    // simple accessors
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the substitution's position in the rule that owns it.
+     * @return The substitution's position in the rule that owns it.
+     */
+    public final int getPos() {
+        return pos;
+    }
+
+    /**
+     * Returns the character used in the textual representation of
+     * substitutions of this type.  Used by toString().
+     * @return This substitution's token character.
+     */
+    abstract char tokenChar();
+
+    /**
+     * Returns true if this is a null substitution.  (We didn't do this
+     * with instanceof partially because it causes source files to
+     * proliferate and partially because we have to port this to C++.)
+     * @return true if this object is an instance of NullSubstitution
+     */
+    public boolean isNullSubstitution() {
+        return false;
+    }
+
+    /**
+     * Returns true if this is a modulus substitution.  (We didn't do this
+     * with instanceof partially because it causes source files to
+     * proliferate and partially because we have to port this to C++.)
+     * @return true if this object is an instance of ModulusSubstitution
+     */
+    public boolean isModulusSubstitution() {
+        return false;
+    }
+}
+
+//===================================================================
+// SameValueSubstitution
+//===================================================================
+
+/**
+ * A substitution that passes the value passed to it through unchanged.
+ * Represented by == in rule descriptions.
+ */
+class SameValueSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs a SameValueSubstution.  This function just uses the
+     * superclass constructor, but it performs a check that this
+     * substitution doesn't call the rule set that owns it, since that
+     * would lead to infinite recursion.
+     */
+    SameValueSubstitution(int pos,
+                          NFRuleSet ruleSet,
+                          RuleBasedNumberFormat formatter,
+                          String description) {
+        super(pos, ruleSet, formatter, description);
+        if (description.equals("==")) {
+            throw new IllegalArgumentException("== is not a legal token");
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns "number" unchanged.
+     * @return "number"
+     */
+    public long transformNumber(long number) {
+        return number;
+    }
+
+    /**
+     * Returns "number" unchanged.
+     * @return "number"
+     */
+    public double transformNumber(double number) {
+        return number;
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns newRuleValue and ignores oldRuleValue. (The value we got
+     * matching the substitution supersedes the value of the rule
+     * that owns the substitution.)
+     * @param newRuleValue The value resulting from matching the substituion
+     * @param oldRuleValue The value of the rule containing the
+     * substitution.
+     * @return newRuleValue
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return newRuleValue;
+    }
+
+    /**
+     * SameValueSubstitution doesn't change the upper bound.
+     * @param oldUpperBound The current upper bound.
+     * @return oldUpperBound
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return oldUpperBound;
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessor
+    //-----------------------------------------------------------------------
+
+    /**
+     * The token character for a SameValueSubstitution is =.
+     * @return '='
+     */
+    char tokenChar() {
+        return '=';
+    }
+}
+
+//===================================================================
+// MultiplierSubstitution
+//===================================================================
+
+/**
+ * A substitution that divides the number being formatted by the rule's
+ * divisor and formats the quotient.  Represented by &lt;&lt; in normal
+ * rules.
+ */
+class MultiplierSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * The divisor of the rule that owns this substitution.
+     */
+    double divisor;
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs a MultiplierSubstitution.  This uses the superclass
+     * constructor to initialize most members, but this substitution
+     * also maintains its own copy of its rule's divisor.
+     * @param pos The substitution's position in its rule's rule text
+     * @param divisor The owning rule's divisor
+     * @ruleSet The ruleSet this substitution uses to format its result
+     * @formatter The formatter that owns this substitution
+     * @description The description describing this substitution
+     */
+    MultiplierSubstitution(int pos,
+                           double divisor,
+                           NFRuleSet ruleSet,
+                           RuleBasedNumberFormat formatter,
+                           String description) {
+        super(pos, ruleSet, formatter, description);
+
+        // the owning rule's divisor affects the behavior of this
+        // substitution.  Rather than keeping a back-pointer to the
+        // rule, we keep a copy of the divisor
+        this.divisor = divisor;
+    }
+
+    /**
+     * Sets the substitution's divisor based on the values passed in.
+     * @param radix The radix of the divisor.
+     * @param exponent The exponent of the divisor.
+     */
+    public void setDivisor(int radix, int exponent) {
+        divisor = Math.pow(radix, exponent);
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Augments the superclass's equals() function by comparing divisors.
+     * @param that The other substitution
+     * @return true if the two substitutions are functionally equal
+     */
+    public boolean equals(Object that) {
+        if (super.equals(that)) {
+            MultiplierSubstitution that2 = (MultiplierSubstitution)that;
+
+            return divisor == that2.divisor;
+        } else {
+            return false;
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Divides the number by the rule's divisor and returns the quotient.
+     * @param number The number being formatted.
+     * @return "number" divided by the rule's divisor
+     */
+    public long transformNumber(long number) {
+        return (long)Math.floor(number / divisor);
+    }
+
+    /**
+     * Divides the number by the rule's divisor and returns the quotient.
+     * This is an integral quotient if we're filling in the substitution
+     * using another rule set, but it's the full quotient (integral and
+     * fractional parts) if we're filling in the substitution using
+     * a DecimalFormat.  (This allows things such as "1.2 million".)
+     * @param number The number being formatted
+     * @return "number" divided by the rule's divisor
+     */
+    public double transformNumber(double number) {
+        if (ruleSet == null) {
+            return number / divisor;
+        } else {
+            return Math.floor(number / divisor);
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns newRuleValue times the divisor.  Ignores oldRuleValue.
+     * (The result of matching a << substitution supersedes the base
+     * value of the rule that contains it.)
+     * @param newRuleValue The result of matching the substitution
+     * @param oldRuleValue The base value of the rule containing the
+     * substitution
+     * @return newRuleValue * divisor
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return newRuleValue * divisor;
+    }
+
+    /**
+     * Sets the upper bound down to the rule's divisor.
+     * @param oldUpperBound Ignored.
+     * @return The rule's divisor.
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return divisor;
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessor
+    //-----------------------------------------------------------------------
+
+    /**
+     * The token character for a multiplier substitution is &lt;.
+     * @return '&lt;'
+     */
+    char tokenChar() {
+        return '<';
+    }
+}
+
+//===================================================================
+// ModulusSubstitution
+//===================================================================
+
+/**
+ * A substitution that divides the number being formatted by the its rule's
+ * divisor and formats the remainder.  Represented by "&gt;&gt;" in a
+ * regular rule.
+ */
+class ModulusSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * The divisor of the rule owning this substitution
+     */
+    double divisor;
+
+    /**
+     * If this is a &gt;&gt;&gt; substitution, the rule to use to format
+     * the substitution value.  Otherwise, null.
+     */
+    NFRule ruleToUse;
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs a ModulusSubstution.  In addition to the inherited
+     * members, a ModulusSubstitution keeps track of the divisor of the
+     * rule that owns it, and may also keep a reference to the rule
+     * that precedes the rule containing this substitution in the rule
+     * set's rule list.
+     * @param pos The substitution's position in its rule's rule text
+     * @param divisor The divisor of the rule that owns this substitution
+     * @param rulePredecessor The rule that precedes this substitution's
+     * rule in its rule set's rule list
+     * @param formatter The RuleBasedNumberFormat owning this substitution
+     * @param description The description for this substitution
+     */
+    ModulusSubstitution(int pos,
+                        double divisor,
+                        NFRule rulePredecessor,
+                        NFRuleSet ruleSet,
+                        RuleBasedNumberFormat formatter,
+                        String description) {
+        super(pos, ruleSet, formatter, description);
+
+        // the owning rule's divisor controls the behavior of this
+        // substitution: rather than keeping a backpointer to the rule,
+        // we keep a copy of the divisor
+        this.divisor = divisor;
+
+        // the >>> token doesn't alter how this substituion calculates the
+        // values it uses for formatting and parsing, but it changes
+        // what's done with that value after it's obtained: >>> short-
+        // circuits the rule-search process and goes straight to the
+        // specified rule to format the substitution value
+        if (description.equals(">>>")) {
+            ruleToUse = rulePredecessor;
+        } else {
+            ruleToUse = null;
+        }
+    }
+
+    /**
+     * Makes the substitution's divisor conform to that of the rule
+     * that owns it.  Used when the divisor is determined after creation.
+     * @param radix The radix of the divsor.
+     * @param exponent The exponent of the divisor.
+     */
+    public void setDivisor(int radix, int exponent) {
+        divisor = Math.pow(radix, exponent);
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Augments the inherited equals() function by comparing divisors and
+     * ruleToUse.
+     * @param that The other substitution
+     * @return true if the two substitutions are functionally equivalent
+     */
+    public boolean equals(Object that) {
+        if (super.equals(that)) {
+            ModulusSubstitution that2 = (ModulusSubstitution)that;
+
+            return divisor == that2.divisor;
+        } else {
+            return false;
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * If this is a &gt;&gt;&gt; substitution, use ruleToUse to fill in
+     * the substitution.  Otherwise, just use the superclass function.
+     * @param number The number being formatted
+     * @toInsertInto The string to insert the result of this substitution
+     * into
+     * @param pos The position of the rule text in toInsertInto
+     */
+    public void doSubstitution(long number, StringBuffer toInsertInto, int pos) {
+        // if this isn't a >>> substitution, just use the inherited version
+        // of this function (which uses either a rule set or a DecimalFormat
+        // to format its substitution value)
+        if (ruleToUse == null) {
+            super.doSubstitution(number, toInsertInto, pos);
+
+        // a >>> substitution goes straight to a particular rule to
+        // format the substitution value
+        } else {
+            long numberToFormat = transformNumber(number);
+            ruleToUse.doFormat(numberToFormat, toInsertInto, pos + this.pos);
+        }
+    }
+
+    /**
+     * If this is a &gt;&gt;&gt; substitution, use ruleToUse to fill in
+     * the substitution.  Otherwise, just use the superclass function.
+     * @param number The number being formatted
+     * @toInsertInto The string to insert the result of this substitution
+     * into
+     * @param pos The position of the rule text in toInsertInto
+     */
+    public void doSubstitution(double number, StringBuffer toInsertInto, int pos) {
+        // if this isn't a >>> substitution, just use the inherited version
+        // of this function (which uses either a rule set or a DecimalFormat
+        // to format its substitution value)
+        if (ruleToUse == null) {
+            super.doSubstitution(number, toInsertInto, pos);
+
+        // a >>> substitution goes straight to a particular rule to
+        // format the substitution value
+        } else {
+            double numberToFormat = transformNumber(number);
+
+            ruleToUse.doFormat(numberToFormat, toInsertInto, pos + this.pos);
+        }
+    }
+
+    /**
+     * Divides the number being formatted by the rule's divisor and
+     * returns the remainder.
+     * @param number The number being formatted
+     * @return "number" mod divisor
+     */
+    public long transformNumber(long number) {
+        return (long)Math.floor(number % divisor);
+    }
+
+    /**
+     * Divides the number being formatted by the rule's divisor and
+     * returns the remainder.
+     * @param number The number being formatted
+     * @return "number" mod divisor
+     */
+    public double transformNumber(double number) {
+        return Math.floor(number % divisor);
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * If this is a &gt;&gt;&gt; substitution, match only against ruleToUse.
+     * Otherwise, use the superclass function.
+     * @param text The string to parse
+     * @param parsePosition Ignored on entry, updated on exit to point to
+     * the first unmatched character.
+     * @param baseValue The partial parse result prior to calling this
+     * routine.
+     */
+    public Number doParse(String text, ParsePosition parsePosition, double baseValue,
+                        double upperBound, boolean lenientParse) {
+        // if this isn't a >>> substitution, we can just use the
+        // inherited parse() routine to do the parsing
+        if (ruleToUse == null) {
+            return super.doParse(text, parsePosition, baseValue, upperBound, lenientParse);
+
+        // but if it IS a >>> substitution, we have to do it here: we
+        // use the specific rule's doParse() method, and then we have to
+        // do some of the other work of NFRuleSet.parse()
+        } else {
+            Number tempResult = ruleToUse.doParse(text, parsePosition, false, upperBound);
+
+            if (parsePosition.getIndex() != 0) {
+                double result = tempResult.doubleValue();
+
+                result = composeRuleValue(result, baseValue);
+                if (result == (long)result) {
+                    return new Long((long)result);
+                } else {
+                    return new Double(result);
+                }
+            } else {
+                return tempResult;
+            }
+        }
+    }
+
+    /**
+     * Returns the highest multiple of the rule's divisor that its less
+     * than or equal to oldRuleValue, plus newRuleValue.  (The result
+     * is the sum of the result of parsing the substitution plus the
+     * base valueof the rule containing the substitution, but if the
+     * owning rule's base value isn't an even multiple of its divisor,
+     * we have to round it down to a multiple of the divisor, or we
+     * get unwanted digits in the result.)
+     * @param newRuleValue The result of parsing the substitution
+     * @param oldRuleValue The base value of the rule containing the
+     * substitution
+     * @return (oldRuleValue - (oldRuleValue % divisor)) + newRuleValue
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return (oldRuleValue - (oldRuleValue % divisor)) + newRuleValue;
+    }
+
+    /**
+     * Sets the upper bound down to the owning rule's divisor
+     * @param oldUpperBound Ignored
+     * @return The owning rule's dvisor
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return divisor;
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessors
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns true.  This _is_ a ModulusSubstitution.
+     * @return true
+     */
+    public boolean isModulusSubstitution() {
+        return true;
+    }
+
+    /**
+     * The token character of a ModulusSubstitution is &gt;.
+     * @return '&gt;'
+     */
+    char tokenChar() {
+        return '>';
+    }
+}
+
+//===================================================================
+// IntegralPartSubstitution
+//===================================================================
+
+/**
+ * A substitution that formats the number's integral part.  This is
+ * represented by &lt;&lt; in a fraction rule.
+ */
+class IntegralPartSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs an IntegralPartSubstitution.  This just calls
+     * the superclass constructor.
+     */
+    IntegralPartSubstitution(int pos,
+                             NFRuleSet ruleSet,
+                             RuleBasedNumberFormat formatter,
+                             String description) {
+        super(pos, ruleSet, formatter, description);
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the number's integral part. (For a long, that's just the
+     * number unchanged.)
+     * @param number The number being formatted
+     * @return "number" unchanged
+     */
+    public long transformNumber(long number) {
+        return number;
+    }
+
+    /**
+     * Returns the number's integral part.
+     * @param number The integral part of the number being formatted
+     * @return floor(number)
+     */
+    public double transformNumber(double number) {
+        return Math.floor(number);
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the sum of the result of parsing the substitution and the
+     * owning rule's base value.  (The owning rule, at best, has an
+     * integral-part substitution and a fractional-part substitution,
+     * so we can safely just add them.)
+     * @param newRuleValue The result of matching the substitution
+     * @param oldRuleValue The partial result of the parse prior to
+     * calling this function
+     * @return oldRuleValue + newRuleValue
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return newRuleValue + oldRuleValue;
+    }
+
+    /**
+     * An IntegralPartSubstitution sets the upper bound back up so all
+     * potentially matching rules are considered.
+     * @param oldUpperBound Ignored
+     * @return Double.MAX_VALUE
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return Double.MAX_VALUE;
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessor
+    //-----------------------------------------------------------------------
+
+    /**
+     * An IntegralPartSubstitution's token character is &lt;
+     * @return '&lt;'
+     */
+    char tokenChar() {
+        return '<';
+    }
+}
+
+//===================================================================
+// FractionalPartSubstitution
+//===================================================================
+
+/**
+ * A substitution that formats the fractional part of a number.  This is
+ * represented by &gt;&gt; in a fraction rule.
+ */
+class FractionalPartSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * true if this substitution should have the default "by digits"
+     * behavior, false otherwise
+     */
+    private boolean byDigits = false;
+
+    /**
+     * The largest number of digits after the decimal point that this
+     * object will show in "by digits" mode
+     */
+    private static final int MAXDECIMALDIGITS = 8;
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs a FractionalPartSubstitution.  This object keeps a flag
+     * telling whether it should format by digits or not.  In addition,
+     * it marks the rule set it calls (if any) as a fraction rule set.
+     */
+    FractionalPartSubstitution(int pos,
+                               NFRuleSet ruleSet,
+                               RuleBasedNumberFormat formatter,
+                               String description) {
+        super(pos, ruleSet, formatter, description);
+        if (description.equals(">>") || ruleSet == this.ruleSet) {
+            byDigits = true;
+        } else {
+            this.ruleSet.makeIntoFractionRuleSet();
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * If in "by digits" mode, fills in the substitution one decimal digit
+     * at a time using the rule set containing this substitution.
+     * Otherwise, uses the superclass function.
+     * @param number The number being formatted
+     * @param toInsertInto The string to insert the result of formatting
+     * the substitution into
+     * @param pos The position of the owning rule's rule text in
+     * toInsertInto
+     */
+    public void doSubstitution(double number, StringBuffer toInsertInto, int pos) {
+        // if we're not in "byDigits" mode, just use the inherited
+        // doSubstitution() routine
+        if (!byDigits) {
+            super.doSubstitution(number, toInsertInto, pos);
+
+        // if we're in "byDigits" mode, transform the value into an integer
+        // by moving the decimal point eight places to the right and
+        // pulling digits off the right one at a time, formatting each digit
+        // as an integer using this substitution's owning rule set
+        // (this is slower, but more accurate, than doing it from the
+        // other end)
+        } else {
+            int numberToFormat = (int)Math.round(transformNumber(number) * Math.pow(
+                            10, MAXDECIMALDIGITS));
+            // this flag keeps us from formatting trailing zeros.  It starts
+            // out false because we're pulling from the right, and switches
+            // to true the first time we encounter a non-zero digit
+            boolean doZeros = false;
+            for (int i = 0; i < MAXDECIMALDIGITS; i++) {
+                int digit = numberToFormat % 10;
+                if (digit != 0 || doZeros) {
+                    if (doZeros) {
+                        toInsertInto.insert(pos + this.pos, ' ');
+                    }
+                    doZeros = true;
+                    ruleSet.format(digit, toInsertInto, pos + this.pos);
+                }
+                numberToFormat /= 10;
+            }
+        }
+    }
+
+    /**
+     * Returns the fractional part of the number, which will always be
+     * zero if it's a long.
+     * @param number The number being formatted
+     * @return 0
+     */
+    public long transformNumber(long number) {
+        return 0;
+    }
+
+    /**
+     * Returns the fractional part of the number.
+     * @param number The number being formatted.
+     * @return number - floor(number)
+     */
+    public double transformNumber(double number) {
+        return number - Math.floor(number);
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * If in "by digits" mode, parses the string as if it were a string
+     * of individual digits; otherwise, uses the superclass function.
+     * @param text The string to parse
+     * @param parsePosition Ignored on entry, but updated on exit to point
+     * to the first unmatched character
+     * @param baseValue The partial parse result prior to entering this
+     * function
+     * @param upperBound Only consider rules with base values lower than
+     * this when filling in the substitution
+     * @param lenientParse If true, try matching the text as numerals if
+     * matching as words doesn't work
+     * @return If the match was successful, the current partial parse
+     * result; otherwise new Long(0).  The result is either a Long or
+     * a Double.
+     */
+    public Number doParse(String text, ParsePosition parsePosition, double baseValue,
+                        double upperBound, boolean lenientParse) {
+        // if we're not in byDigits mode, we can just use the inherited
+        // doParse()
+        if (!byDigits) {
+            return super.doParse(text, parsePosition, baseValue, 0, lenientParse);
+
+        // if we ARE in byDigits mode, parse the text one digit at a time
+        // using this substitution's owning rule set (we do this by setting
+        // upperBound to 10 when calling doParse() ) until we reach
+        // nonmatching text
+        } else {
+            String workText = new String(text);
+            ParsePosition workPos = new ParsePosition(1);
+            double result = 0;
+            int digit;
+            double p10 = 0.1;
+
+            while (workText.length() > 0 && workPos.getIndex() != 0) {
+                workPos.setIndex(0);
+                digit = ruleSet.parse(workText, workPos, 10).intValue();
+                if (lenientParse && workPos.getIndex() == 0) {
+                    digit = NumberFormat.getInstance().parse(workText, workPos).intValue();
+                }
+
+                if (workPos.getIndex() != 0) {
+                    result += digit * p10;
+                    p10 /= 10;
+                    parsePosition.setIndex(parsePosition.getIndex() + workPos.getIndex());
+                    workText = workText.substring(workPos.getIndex());
+                    while (workText.length() > 0 && workText.charAt(0) == ' ') {
+                        workText = workText.substring(1);
+                        parsePosition.setIndex(parsePosition.getIndex() + 1);
+                    }
+                }
+            }
+            result = composeRuleValue(result, baseValue);
+            return new Double(result);
+        }
+    }
+
+    /**
+     * Returns the sum of the two partial parse results.
+     * @param newRuleValue The result of parsing the substitution
+     * @param oldRuleValue The partial parse result prior to calling
+     * this function
+     * @return newRuleValue + oldRuleValue
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return newRuleValue + oldRuleValue;
+    }
+
+    /**
+     * Not used.
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return 0;   // this value is ignored
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessor
+    //-----------------------------------------------------------------------
+
+    /**
+     * The token character for a FractionalPartSubstitution is &gt;.
+     * @return '&gt;'
+     */
+    char tokenChar() {
+        return '>';
+    }
+}
+
+//===================================================================
+// AbsoluteValueSubstitution
+//===================================================================
+
+ /**
+  * A substitution that formats the absolute value of the number.
+  * This substition is represented by &gt;&gt; in a negative-number rule.
+  */
+class AbsoluteValueSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs an AbsoluteValueSubstitution.  This just uses the
+     * superclass constructor.
+     */
+    AbsoluteValueSubstitution(int pos,
+                              NFRuleSet ruleSet,
+                              RuleBasedNumberFormat formatter,
+                              String description) {
+        super(pos, ruleSet, formatter, description);
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the absolute value of the number.
+     * @param number The number being formatted.
+     * @return abs(number)
+     */
+    public long transformNumber(long number) {
+        return Math.abs(number);
+    }
+
+    /**
+     * Returns the absolute value of the number.
+     * @param number The number being formatted.
+     * @return abs(number)
+     */
+    public double transformNumber(double number) {
+        return Math.abs(number);
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the addtive inverse of the result of parsing the
+     * substitution (this supersedes the earlier partial result)
+     * @param newRuleValue The result of parsing the substitution
+     * @param oldRuleValue The partial parse result prior to calling
+     * this function
+     * @return -newRuleValue
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return -newRuleValue;
+    }
+
+    /**
+     * Sets the upper bound beck up to consider all rules
+     * @param oldUpperBound Ignored.
+     * @return Double.MAX_VALUE
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return Double.MAX_VALUE;
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessor
+    //-----------------------------------------------------------------------
+
+    /**
+     * The token character for an AbsoluteValueSubstitution is &gt;
+     * @return '&gt;'
+     */
+    char tokenChar() {
+        return '>';
+    }
+}
+
+//===================================================================
+// NumeratorSubstitution
+//===================================================================
+
+/**
+ * A substitution that multiplies the number being formatted (which is
+ * between 0 and 1) by the base value of the rule that owns it and
+ * formats the result.  It is represented by &lt;&lt; in the rules
+ * in a fraction rule set.
+ */
+class NumeratorSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * The denominator of the fraction we're finding the numerator for.
+     * (The base value of the rule that owns this substitution.)
+     */
+    double denominator;
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs a NumberatorSubstitution.  In addition to the inherited
+     * fields, a NumeratorSubstitution keeps track of a denominator, which
+     * is merely the base value of the rule that owns it.
+     */
+    NumeratorSubstitution(int pos,
+                          double denominator,
+                          NFRuleSet ruleSet,
+                          RuleBasedNumberFormat formatter,
+                          String description) {
+        super(pos, ruleSet, formatter, description);
+
+        // this substitution's behavior depends on the rule's base value
+        // Rather than keeping a backpointer to the rule, we copy its
+        // base value here
+        this.denominator = denominator;
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Tests two NumeratorSubstitutions for equality
+     * @param that The other NumeratorSubstitution
+     * @return true if the two objects are functionally equivalent
+     */
+    public boolean equals(Object that) {
+        if (super.equals(that)) {
+            NumeratorSubstitution that2 = (NumeratorSubstitution)that;
+
+            return denominator == that2.denominator;
+        } else {
+            return false;
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the number being formatted times the denominator.
+     * @param number The number being formatted
+     * @return number * denominator
+     */
+    public long transformNumber(long number) {
+        return Math.round(number * denominator);
+    }
+
+    /**
+     * Returns the number being formatted times the denominator.
+     * @param number The number being formatted
+     * @return number * denominator
+     */
+    public double transformNumber(double number) {
+        return Math.round(number * denominator);
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Dispatches to the inherited version of this function, but makes
+     * sure that lenientParse is off.
+     */
+    public Number doParse(String text, ParsePosition parsePosition, double baseValue,
+                        double upperBound, boolean lenientParse) {
+        // we don't have to do anything special to do the parsing here,
+        // but we have to turn lenient parsing off-- if we leave it on,
+        // it SERIOUSLY messes up the algorithm
+        return super.doParse(text, parsePosition, baseValue, upperBound, false);
+    }
+
+    /**
+     * Divides the result of parsing the substitution by the partial
+     * parse result.
+     * @param newRuleValue The result of parsing the substitution
+     * @param oldRuleValue The owning rule's base value
+     * @return newRuleValue / oldRuleValue
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return newRuleValue / oldRuleValue;
+    }
+
+    /**
+     * Sets the uper bound down to this rule's base value
+     * @param oldUpperBound Ignored
+     * @return The base value of the rule owning this substitution
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return denominator;
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessor
+    //-----------------------------------------------------------------------
+
+    /**
+     * The token character for a NumeratorSubstitution is &lt;
+     * @return '&lt;'
+     */
+    char tokenChar() {
+        return '<';
+    }
+}
+
+//===================================================================
+// NullSubstitution
+//===================================================================
+
+/**
+ * A substitution which does nothing.  This class exists just to simplify
+ * the logic in some other routines so that they don't have to worry
+ * about how many substitutions a rule has.
+ */
+class NullSubstitution extends NFSubstitution {
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    //-----------------------------------------------------------------------
+    // construction
+    //-----------------------------------------------------------------------
+
+    /**
+     * Constructs a NullSubstitution.  This just delegates to the superclass
+     * constructor, but the only value we really care about is the position.
+     */
+    NullSubstitution(int pos,
+                     NFRuleSet ruleSet,
+                     RuleBasedNumberFormat formatter,
+                     String description) {
+        super(pos, ruleSet, formatter, description);
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Only checks for class equality
+     */
+    public boolean equals(Object that) {
+        return super.equals(that);
+    }
+
+    /**
+     * NullSubstitutions don't show up in the textual representation
+     * of a RuleBasedNumberFormat
+     */
+    public String toString() {
+        return "";
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting
+    //-----------------------------------------------------------------------
+
+    /**
+     * Does nothing.
+     */
+    public void doSubstitution(long number, StringBuffer toInsertInto, int pos) {
+    }
+
+    /**
+     * Does nothing.
+     */
+    public void doSubstitution(double number, StringBuffer toInsertInto, int pos) {
+    }
+
+    /**
+     * Never called.
+     */
+    public long transformNumber(long number) {
+        return 0;
+    }
+
+    /**
+     * Never called.
+     */
+    public double transformNumber(double number) {
+        return 0;
+    }
+
+    //-----------------------------------------------------------------------
+    // parsing
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns the partial parse result unchanged
+     */
+    public Number doParse(String text, ParsePosition parsePosition, double baseValue,
+                        double upperBound, boolean lenientParse) {
+        if (baseValue == (long)baseValue) {
+            return new Long((long)baseValue);
+        } else {
+            return new Double(baseValue);
+        }
+    }
+
+    /**
+     * Never called.
+     */
+    public double composeRuleValue(double newRuleValue, double oldRuleValue) {
+        return 0;
+    }
+
+    /**
+     * Never called.
+     */
+    public double calcUpperBound(double oldUpperBound) {
+        return 0;
+    }
+
+    //-----------------------------------------------------------------------
+    // simple accessors
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns true (this _is_ a NillSubstitution).
+     * @return true
+     */
+    public boolean isNullSubstitution() {
+        return true;
+    }
+
+    /**
+     * Never called.
+     */
+    char tokenChar() {
+        return ' ';
+    }
+}
+
diff --git a/src/com/ibm/text/Normalizer.java b/src/com/ibm/text/Normalizer.java
new file mode 100755
index 0000000..3e86a1d
--- /dev/null
+++ b/src/com/ibm/text/Normalizer.java
@@ -0,0 +1,1647 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/Normalizer.java,v $ 
+ * $Date: 2001/04/02 19:21:21 $ 
+ * $Revision: 1.11 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.lang.Character;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import com.ibm.util.CompactByteArray;
+import com.ibm.util.Utility;
+
+/**
+ * <tt>Normalizer</tt> transforms Unicode text into an equivalent composed or
+ * decomposed form, allowing for easier sorting and searching of text.
+ * <tt>Normalizer</tt> supports the standard normalization forms described in
+ * <a href="http://www.unicode.org/unicode/reports/tr15/" target="unicode">
+ * Unicode Technical Report #15</a>.
+ * <p>
+ * Characters with accents or other adornments can be encoded in
+ * several different ways in Unicode.  For example, take the character "Â"
+ * (A-acute).   In Unicode, this can be encoded as a single character (the
+ * "composed" form):
+ * <pre>
+ *      00C1    LATIN CAPITAL LETTER A WITH ACUTE</pre>
+ * or as two separate characters (the "decomposed" form):
+ * <pre>
+ *      0041    LATIN CAPITAL LETTER A
+ *      0301    COMBINING ACUTE ACCENT</pre>
+ * <p>
+ * To a user of your program, however, both of these sequences should be
+ * treated as the same "user-level" character "Â".  When you are searching or
+ * comparing text, you must ensure that these two sequences are treated
+ * equivalently.  In addition, you must handle characters with more than one
+ * accent.  Sometimes the order of a character's combining accents is
+ * significant, while in other cases accent sequences in different orders are
+ * really equivalent.
+ * <p>
+ * Similarly, the string "ffi" can be encoded as three separate letters:
+ * <pre>
+ *      0066    LATIN SMALL LETTER F
+ *      0066    LATIN SMALL LETTER F
+ *      0069    LATIN SMALL LETTER I</pre>
+ * or as the single character
+ * <pre>
+ *      FB03    LATIN SMALL LIGATURE FFI</pre>
+ * <p>
+ * The ffi ligature is not a distinct semantic character, and strictly speaking
+ * it shouldn't be in Unicode at all, but it was included for compatibility
+ * with existing character sets that already provided it.  The Unicode standard
+ * identifies such characters by giving them "compatibility" decompositions
+ * into the corresponding semantic characters.  When sorting and searching, you
+ * will often want to use these mappings.
+ * <p>
+ * <tt>Normalizer</tt> helps solve these problems by transforming text into the
+ * canonical composed and decomposed forms as shown in the first example above.
+ * In addition, you can have it perform compatibility decompositions so that
+ * you can treat compatibility characters the same as their equivalents.
+ * Finally, <tt>Normalizer</tt> rearranges accents into the proper canonical
+ * order, so that you do not have to worry about accent rearrangement on your
+ * own.
+ * <p>
+ * <tt>Normalizer</tt> adds one optional behavior, {@link #IGNORE_HANGUL},
+ * that differs from
+ * the standard Unicode Normalization Forms.  This option can be passed
+ * to the {@link #Normalizer constructors} and to the static
+ * {@link #compose compose} and {@link #decompose decompose} methods.  This
+ * option, and any that are added in the future, will be turned off by default.
+ * <p>
+ * There are three common usage models for <tt>Normalizer</tt>.  In the first,
+ * the static {@link #normalize normalize()} method is used to process an
+ * entire input string at once.  Second, you can create a <tt>Normalizer</tt>
+ * object and use it to iterate through the normalized form of a string by
+ * calling {@link #first} and {@link #next}.  Finally, you can use the
+ * {@link #setIndex setIndex()} and {@link #getIndex} methods to perform
+ * random-access iteration, which is very useful for searching.
+ * <p>
+ * <b>Note:</b> <tt>Normalizer</tt> objects behave like iterators and have
+ * methods such as <tt>setIndex</tt>, <tt>next</tt>, <tt>previous</tt>, etc.
+ * You should note that while the <tt>setIndex</tt> and <tt>getIndex</tt> refer
+ * to indices in the underlying <em>input</em> text being processed, the
+ * <tt>next</tt> and <tt>previous</tt> methods it iterate through characters
+ * in the normalized <em>output</em>.  This means that there is not
+ * necessarily a one-to-one correspondence between characters returned
+ * by <tt>next</tt> and <tt>previous</tt> and the indices passed to and
+ * returned from <tt>setIndex</tt> and <tt>getIndex</tt>.  It is for this
+ * reason that <tt>Normalizer</tt> does not implement the
+ * {@link CharacterIterator} interface.
+ * <p>
+ * <b>Note:</b> <tt>Normalizer</tt> is currently based on version 2.1.8
+ * of the <a href="http://www.unicode.org" target="unicode">Unicode Standard</a>.
+ * It will be updated as later versions of Unicode are released.  If you are
+ * using this class on a JDK that supports an earlier version of Unicode, it
+ * is possible that <tt>Normalizer</tt> may generate composed or dedecomposed
+ * characters for which your JDK's {@link java.lang.Character} class does not
+ * have any data.
+ * <p>
+ * @author Laura Werner, Mark Davis
+ */
+public final class Normalizer {
+
+    /**
+     * Constant indicating that the end of the iteration has been reached.
+     * This is guaranteed to have the same value as {@link CharacterIterator#DONE}.
+     */
+    public static final char DONE = CharacterIterator.DONE;
+
+    // This tells us what the bits in the "mode" object mean.
+    private static final int COMPAT_BIT = 1;
+    private static final int DECOMP_BIT = 2;
+    private static final int COMPOSE_BIT = 4;
+
+    /**
+     * This class represents the mode of a {@link Normalizer}
+     * object, <i>i.e.</i> the Unicode Normalization Form of the
+     * text that the <tt>Normalizer</tt> produces.  <tt>Mode</tt> objects
+     * are used as arguments to the {@link Normalizer#Normalizer constructors}
+     * and {@link Normalizer#setMode setMode} method of <tt>Normalizer</tt>.
+     * <p>
+     * Clients cannot create <tt>Mode</tt> objects directly.
+     * Instead, use the predefined constants {@link Normalizer#NO_OP},
+     * {@link Normalizer#COMPOSE}, {@link Normalizer#COMPOSE_COMPAT},
+     * {@link Normalizer#DECOMP}, and {@link Normalizer#DECOMP_COMPAT}.
+     * <p>
+     * @see Normalizer
+     */
+    public static final class Mode {
+        Mode(int m) {
+            mode = m;
+        }
+        final boolean compat() {
+            return (mode & COMPAT_BIT) != 0;
+        }
+        final boolean compose() {
+            return (mode & COMPOSE_BIT) != 0;
+        }
+        final boolean decomp() {
+            return (mode & DECOMP_BIT) != 0;
+        }
+        final int mode;
+    };
+
+    /**
+     * Null operation for use with the {@link #Normalizer constructors}
+     * and the static {@link #normalize normalize} method.  This value tells
+     * the <tt>Normalizer</tt> to do nothing but return unprocessed characters
+     * from the underlying String or CharacterIterator.  If you have code which
+     * requires raw text at some times and normalized text at others, you can
+     * use <tt>NO_OP</tt> for the cases where you want raw text, rather
+     * than having a separate code path that bypasses <tt>Normalizer</tt>
+     * altogether.
+     * <p>
+     * @see #setMode
+     */
+    public static final Mode NO_OP = new Mode(0);
+
+    /**
+     * Canonical decomposition followed by canonical composition.  Used with the
+     * {@link #Normalizer constructors} and the static {@link #normalize normalize}
+     * method to determine the operation to be performed.
+     * <p>
+     * If all optional features (<i>e.g.</i> {@link #IGNORE_HANGUL}) are turned
+     * off, this operation produces output that is in
+     * <a href=http://www.unicode.org/unicode/reports/tr15/>Unicode Canonical Form</a>
+     * <b>C</b>.
+     * <p>
+     * @see #setMode
+     */
+    public static final Mode COMPOSE = new Mode(COMPOSE_BIT);
+
+    /**
+     * Compatibility decomposition followed by canonical composition.
+     * Used with the {@link #Normalizer constructors} and the static
+     * {@link #normalize normalize} method to determine the operation to be performed.
+     * <p>
+     * If all optional features (<i>e.g.</i> {@link #IGNORE_HANGUL}) are turned
+     * off, this operation produces output that is in
+     * <a href=http://www.unicode.org/unicode/reports/tr15/>Unicode Canonical Form</a>
+     * <b>KC</b>.
+     * <p>
+     * @see #setMode
+     */
+    public static final Mode COMPOSE_COMPAT = new Mode(COMPOSE_BIT | COMPAT_BIT);
+
+    /**
+     * Canonical decomposition.  This value is passed to the
+     * {@link #Normalizer constructors} and the static {@link #normalize normalize}
+     * method to determine the operation to be performed.
+     * <p>
+     * If all optional features (<i>e.g.</i> {@link #IGNORE_HANGUL}) are turned
+     * off, this operation produces output that is in
+     * <a href=http://www.unicode.org/unicode/reports/tr15/>Unicode Canonical Form</a>
+     * <b>D</b>.
+     * <p>
+     * @see #setMode
+     */
+    public static final Mode DECOMP = new Mode(DECOMP_BIT);
+
+    /**
+     * Compatibility decomposition.  This value is passed to the
+     * {@link #Normalizer constructors} and the static {@link #normalize normalize}
+     * method to determine the operation to be performed.
+     * <p>
+     * If all optional features (<i>e.g.</i> {@link #IGNORE_HANGUL}) are turned
+     * off, this operation produces output that is in
+     * <a href=http://www.unicode.org/unicode/reports/tr15/>Unicode Canonical Form</a>
+     * <b>KD</b>.
+     * <p>
+     * @see #setMode
+     */
+    public static final Mode DECOMP_COMPAT = new Mode(DECOMP_BIT | COMPAT_BIT);
+
+    /**
+     * Option to disable Hangul/Jamo composition and decomposition.
+     * This option applies to Korean text,
+     * which can be represented either in the Jamo alphabet or in Hangul
+     * characters, which are really just two or three Jamo combined
+     * into one visual glyph.  Since Jamo takes up more storage space than
+     * Hangul, applications that process only Hangul text may wish to turn
+     * this option on when decomposing text.
+     * <p>
+     * The Unicode standard treates Hangul to Jamo conversion as a
+     * canonical decomposition, so this option must be turned <b>off</b> if you
+     * wish to transform strings into one of the standard
+     * <a href="http://www.unicode.org/unicode/reports/tr15/" target="unicode">
+     * Unicode Normalization Forms</a>.
+     * <p>
+     * @see #setOption
+     */
+    public static final int IGNORE_HANGUL = 0x0001;
+
+    //-------------------------------------------------------------------------
+    // Constructors
+    //-------------------------------------------------------------------------
+
+    /**
+     * Creates a new <tt>Normalizer</tt> object for iterating over the
+     * normalized form of a given string.
+     * <p>
+     * @param str   The string to be normalized.  The normalization
+     *              will start at the beginning of the string.
+     *
+     * @param mode  The normalization mode.
+     */
+    public Normalizer(String str, Mode mode) {
+        this(new StringCharacterIterator(str), mode, 0);
+    }
+
+    /**
+     * Creates a new <tt>Normalizer</tt> object for iterating over the
+     * normalized form of a given string.
+     * <p>
+     * The <tt>options</tt> parameter specifies which optional
+     * <tt>Normalizer</tt> features are to be enabled for this object.
+     * <p>
+     * @param str   The string to be normalized.  The normalization
+     *              will start at the beginning of the string.
+     *
+     * @param mode  The normalization mode.
+     *
+     * @param opt   Any optional features to be enabled.
+     *              Currently the only available option is {@link #IGNORE_HANGUL}.
+     *              If you want the default behavior corresponding to one of the
+     *              standard Unicode Normalization Forms, use 0 for this argument.
+     */
+    public Normalizer(String str, Mode mode, int opt) {
+        this(new StringCharacterIterator(str), mode, opt);
+    }
+
+    /**
+     * Creates a new <tt>Normalizer</tt> object for iterating over the
+     * normalized form of the given text.
+     * <p>
+     * @param iter  The input text to be normalized.  The normalization
+     *              will start at the beginning of the string.
+     *
+     * @param mode  The normalization mode.
+     *
+     */
+    public Normalizer(CharacterIterator iter, Mode mode) {
+        this(iter, mode, 0);
+    }
+
+    /**
+     * Creates a new <tt>Normalizer</tt> object for iterating over the
+     * normalized form of the given text.
+     * <p>
+     * @param iter  The input text to be normalized.  The normalization
+     *              will start at the beginning of the string.
+     *
+     * @param mode  The normalization mode.
+     *
+     * @param opt   Any optional features to be enabled.
+     *              Currently the only available option is {@link #IGNORE_HANGUL}.
+     *              If you want the default behavior corresponding to one of the
+     *              standard Unicode Normalization Forms, use 0 for this argument.
+     */
+    public Normalizer(CharacterIterator iter, Mode mode, int opt) {
+        text = iter;
+        this.mode = mode;
+        options = opt;
+
+        // Compatibility explosions have lower indices; skip them if necessary
+        minDecomp = mode.compat() ? 0 : DecompData.MAX_COMPAT;
+    }
+
+    /**
+     * Clones this <tt>Normalizer</tt> object.  All properties of this
+     * object are duplicated in the new object, including the cloning of any
+     * {@link CharacterIterator} that was passed in to the constructor
+     * or to {@link #setText(CharacterIterator) setText}.
+     * However, the text storage underlying
+     * the <tt>CharacterIterator</tt> is not duplicated unless the
+     * iterator's <tt>clone</tt> method does so.
+     */
+    public Object clone() {
+        try {
+            Normalizer copy = (Normalizer) super.clone();
+            copy.text = (CharacterIterator) text.clone();
+            return copy;
+        }
+        catch (CloneNotSupportedException e) {
+            throw new InternalError(e.toString());
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // Static utility methods
+    //-------------------------------------------------------------------------
+
+    /**
+     * Normalizes a <tt>String</tt> using the given normalization operation.
+     * <p>
+     * The <tt>options</tt> parameter specifies which optional
+     * <tt>Normalizer</tt> features are to be enabled for this operation.
+     * Currently the only available option is {@link #IGNORE_HANGUL}.
+     * If you want the default behavior corresponding to one of the standard
+     * Unicode Normalization Forms, use 0 for this argument.
+     * <p>
+     * @param str       the input string to be normalized.
+     *
+     * @param aMode     the normalization mode
+     *
+     * @param options   the optional features to be enabled.
+     */
+    public static String normalize(String str, Mode mode, int options) {
+        if (mode.compose()) {
+            // compose() handles decomposition and reordering;
+            // don't call decompose() first.
+            return compose(str, mode.compat(), options);
+        }
+        if (mode.decomp()) {
+            return decompose(str, mode.compat(), options);
+        }
+        return str;
+    }
+
+    //-------------------------------------------------------------------------
+    // Compose methods
+    //-------------------------------------------------------------------------
+
+    /**
+     * Compose a <tt>String</tt>.
+     * <p>
+     * The <tt>options</tt> parameter specifies which optional
+     * <tt>Normalizer</tt> features are to be enabled for this operation.
+     * Currently the only available option is {@link #IGNORE_HANGUL}.
+     * If you want the default behavior corresponding
+     * to Unicode Normalization Form <b>C</b> or <b>KC</b>,
+     * use 0 for this argument.
+     * <p>
+     * @param source    the string to be composed.
+     *
+     * @param compat    Perform compatibility decomposition before composition.
+     *                  If this argument is <tt>false</tt>, only canonical
+     *                  decomposition will be performed.
+     *
+     * @param options   the optional features to be enabled.
+     *
+     * @return          the composed string.
+     */
+    public static String compose(String source, boolean compat, int options)
+    {
+        StringBuffer result = new StringBuffer();
+        StringBuffer explodeBuf = new StringBuffer();
+
+        int     explodePos = EMPTY;         // Position in input buffer
+        int     basePos = 0;                // Position of last base in output string
+        int     baseIndex = 0;              // Index of last base in "actions" array
+        int     classesSeenL = 0;           // Combining classes seen since last base
+        int     classesSeenH = 0;           //  64-bit mask
+        int     action;
+
+        // Compatibility explosions have lower indices; skip them if necessary
+        int minExplode = compat ? 0 : ComposeData.MAX_COMPAT;
+        int minDecomp  = compat ? 0 : DecompData.MAX_COMPAT;
+
+        if (DEBUG) System.out.println("minExplode = " + minExplode);
+
+        int i = 0;
+        while (i < source.length() || explodePos != EMPTY) {
+            // Get the next char from either the buffer or the source
+            char ch;
+            if (explodePos == EMPTY) {
+                ch = source.charAt(i++);
+            } else {
+                ch = explodeBuf.charAt(explodePos++);
+                if (explodePos >= explodeBuf.length()) {
+                    explodePos = EMPTY;
+                    explodeBuf.setLength(0);
+                }
+            }
+
+            // Get the basic info for the character
+            int charInfo = composeLookup(ch);
+            int type = charInfo & ComposeData.TYPE_MASK;
+            int index = charInfo >>> ComposeData.INDEX_SHIFT;
+            
+            if (DEBUG) System.out.println("Got char " + Utility.hex(ch) + ", type=" + type + ", index=" + index);
+
+            // Examples of NON_COMPOSING_COMBINING with an index < minExplode:
+            // 00A8 017F 03D2 1FBF 1FFE
+            if (type == ComposeData.BASE || (type == ComposeData.NON_COMPOSING_COMBINING && index < minExplode)) {
+                if (DEBUG) System.out.println("New base " + Utility.hex(ch) + ", type=" + type + ", index=" + index);
+                classesSeenL = classesSeenH = 0;
+                baseIndex = index;
+                basePos = result.length();
+                result.append(ch);
+            }
+            else if (type == ComposeData.COMBINING)
+            {
+                // assert(index > 0);
+                int cclass = ComposeData.typeBit[index];
+                // typeBit is a bit value from 0..63, indicating the class.
+                // We use a bit mask of 2 32-bit ints.
+                boolean seen = 0 != ((cclass < 32) ?
+                    (classesSeenL & (1 << cclass)) :
+                    (classesSeenH & (1 << (cclass & 31))));
+
+                if (DEBUG) System.out.println("Class of " + Utility.hex(ch) + " = " + cclass +
+                    " seen:" + seen +
+                    " baseIndex:" + baseIndex +
+                    " action:" + composeAction(baseIndex, index));
+
+                // We can only combine a character with the base if we haven't
+                // already seen a combining character with the same canonical class.
+                // We only combine characters with an index from
+                // 1..COMBINING_COUNT-1.  Indices >= COMBINING_COUNT are
+                // also combining characters, but we know that they don't
+                // compose with anything.
+                if (index < ComposeData.COMBINING_COUNT && !seen
+                    && (action = composeAction(baseIndex, index)) > 0)
+                {
+                    if (action > ComposeData.MAX_COMPOSED) {
+                        // Pairwise explosion.  Actions above this value are really
+                        // indices into an array that in turn contains indices
+                        // into the exploding string table
+                        // TODO: What if there are unprocessed chars in the explode buffer?
+                        if (DEBUG) System.out.println("Pairwise exploding");
+                        char newBase = pairExplode(explodeBuf, action);
+                        explodePos = 0;
+                        result.setCharAt(basePos, newBase);
+
+                        baseIndex = composeLookup(newBase) >>> ComposeData.INDEX_SHIFT;
+                        if (DEBUG) System.out.println("New base " + Utility.hex(newBase));
+                    } else {
+                        // Normal pairwise combination.  Replace the base char
+                        if (DEBUG) System.out.println("Pairwise combining");
+                        char newBase = (char) action;
+                        result.setCharAt(basePos, newBase);
+
+                        baseIndex = composeLookup(newBase) >>> ComposeData.INDEX_SHIFT;
+                        if (DEBUG) System.out.println("New base " + Utility.hex(newBase));
+                    }
+                    //
+                    // Since there are Unicode characters that cannot be combined in arbitrary
+                    // order, we have to re-process any combining marks that go with this
+                    // base character.  There are only four characters in Unicode that have
+                    // this problem.  If they are fixed in Unicode 3.0, this code can go away.
+                    //
+                    int len = result.length();
+                    if (len - basePos > 1) {
+                        for (int j = basePos+1; j < len; j++) {
+                            explodeBuf.append(result.charAt(j));
+                        }
+                        result.setLength(basePos+1);
+                        classesSeenL = classesSeenH = 0;
+                        if (explodePos == EMPTY) explodePos = 0;
+                    }
+                } else {
+                    // No combination with this character
+                    if (DEBUG) System.out.println("No action");
+                    bubbleAppend(result, ch, cclass);
+                    if (cclass < 32) {
+                        classesSeenL |= 1 << cclass;
+                    } else {
+                        classesSeenH |= 1 << (cclass & 31);
+                    }
+                }
+            }
+            else if (index > minExplode) {
+                // Single exploding character
+                explode(explodeBuf, index);
+                explodePos = 0;
+                if (DEBUG) System.out.println("explosion: " + Utility.hex(ch) + " --> " + Utility.hex(explodeBuf));
+            }
+            else if (type == ComposeData.HANGUL && minExplode == 0) {
+                // If we're in compatibility mode we need to decompose Hangul to Jamo,
+                // because some of the Jamo might have compatibility decompositions.
+                hangulToJamo(ch, explodeBuf, minDecomp);
+                if (DEBUG) System.out.println("decomposed hangul " + Utility.hex(ch) + " to jamo " + Utility.hex(explodeBuf));
+                explodePos = 0;
+            }
+            else if (type == ComposeData.INITIAL_JAMO) {
+                classesSeenL = classesSeenH = 0;
+                baseIndex = ComposeData.INITIAL_JAMO_INDEX;
+                basePos = result.length();
+                result.append(ch);
+                if (DEBUG) System.out.println("got initial jamo " + Utility.hex(ch));
+            }
+            else if (type == ComposeData.MEDIAL_JAMO && classesSeenL == 0 && classesSeenH == 0
+                        && baseIndex == ComposeData.INITIAL_JAMO_INDEX) {
+                // If the last character was an initial jamo, we can combine it with this
+                // one to create a Hangul character.
+                int l = result.charAt(basePos) - JAMO_LBASE;
+                int v = ch - JAMO_VBASE;
+                char newCh = (char)(HANGUL_BASE + (l*JAMO_VCOUNT + v) * JAMO_TCOUNT);
+                result.setCharAt(basePos, newCh);
+
+                if (DEBUG) System.out.println("got medial jamo " + Utility.hex(ch) + ", replacing with Hangul " + Utility.hex(newCh));
+
+                baseIndex = ComposeData.MEDIAL_JAMO_INDEX;
+            }
+            else if (type == ComposeData.FINAL_JAMO && classesSeenL == 0 && classesSeenH == 0
+                        && baseIndex == ComposeData.MEDIAL_JAMO_INDEX) {
+                // If the last character was a medial jamo that we turned into Hangul,
+                // we can add this character too.
+                char newCh = (char)(result.charAt(basePos) + (ch - JAMO_TBASE));
+                result.setCharAt(basePos, newCh);
+
+                if (DEBUG) System.out.println("got final jamo " + Utility.hex(ch) + ", replacing with Hangul " + Utility.hex(newCh));
+
+                baseIndex = 0;
+                basePos = -1;
+                classesSeenL = classesSeenH = 0;
+            } else {
+                if (DEBUG) System.out.println("No base as of " + Utility.hex(ch));
+                baseIndex = 0;
+                basePos = -1;
+                classesSeenL = classesSeenH = 0;
+                result.append(ch);
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * Compose starting with current input character and continuing
+     * until just before the next base char.
+     * <p>
+     * <b>Input</b>:
+     * <ul>
+     *  <li>underlying char iter points to first character to compose
+     * </ul>
+     * <p>
+     * <b>Output:</b>
+     * <ul>
+     *  <li>returns first char of composition or DONE if at end
+     *  <li>Underlying char iter is pointing at next base char or past end
+     * </ul>
+     */
+    private char nextCompose()
+    {
+        if (DEBUG) System.out.println("--------------- top of nextCompose() ---------------");
+
+        int     explodePos = EMPTY;         // Position in input buffer
+        int     basePos = 0;                // Position of last base in output string
+        int     baseIndex = 0;              // Index of last base in "actions" array
+        int     classesSeenL = 0;           // Combining classes seen since last base
+        int     classesSeenH = 0;           //  64-bit mask
+        int     action;
+        char    lastBase = 0;
+        boolean chFromText = true;
+
+        // Compatibility explosions have lower indices; skip them if necessary
+        int minExplode = mode.compat() ? 0 : ComposeData.MAX_COMPAT;
+        int minDecomp  = mode.compat() ? 0 : DecompData.MAX_COMPAT;
+
+        initBuffer();
+        if (explodeBuf == null) {
+            explodeBuf = new StringBuffer();
+        } else {
+            explodeBuf.setLength(0);
+        }
+
+        char ch = curForward();
+
+        while (ch != DONE) {
+            // Get the basic info for the character
+            int charInfo = composeLookup(ch);
+            int type = charInfo & ComposeData.TYPE_MASK;
+            int index = charInfo >>> ComposeData.INDEX_SHIFT;
+
+            if (type == ComposeData.BASE || (type == ComposeData.NON_COMPOSING_COMBINING && index < minExplode)) {
+                if (buffer.length() > 0 && chFromText && explodePos == EMPTY) {
+                    // When we hit a base char in the source text, we can return the text
+                    // that's been composed so far.  We'll re-process this char next time through.
+                    if (DEBUG) System.out.println("returning early because we hit a new base");
+                    break;
+                }
+                classesSeenL = classesSeenH = 0;
+                baseIndex = index;
+                basePos = buffer.length();
+                buffer.append(ch);
+                if (DEBUG) System.out.println("got BASE char " + Utility.hex(ch) + ", type=" + type + ", index=" + index);
+                lastBase = ch;
+            }
+            else if (type == ComposeData.COMBINING)
+            {
+                // assert(index > 0);
+                int cclass = ComposeData.typeBit[index];
+                boolean seen = 0 != ((cclass < 32) ?
+                    (classesSeenL & (1 << cclass)) :
+                    (classesSeenH & (1 << (cclass & 31))));
+
+                if (DEBUG) System.out.println("got COMBINING char " + Utility.hex(ch) + ", type=" + type + ", index=" + index
+                        + ", class=" + cclass);
+
+                // We can only combine a character with the base if we haven't
+                // already seen a combining character with the same canonical class.
+                if (index < ComposeData.COMBINING_COUNT && !seen
+                    && (action = composeAction(baseIndex, index)) > 0)
+                {
+                    if (action > ComposeData.MAX_COMPOSED) {
+                        // Pairwise explosion.  Actions above this value are really
+                        // indices into an array that in turn contains indices
+                        // into the exploding string table
+                        // TODO: What if there are unprocessed chars in the explode buffer?
+                        char newBase = pairExplode(explodeBuf, action);
+                        explodePos = 0;
+                        buffer.setCharAt(basePos, newBase);
+
+                        baseIndex = composeLookup(newBase) >>> ComposeData.INDEX_SHIFT;
+
+                        if (DEBUG) System.out.println("Pairwise explosion: " + Utility.hex(lastBase) + "," + Utility.hex(ch)
+                            + " --> " + Utility.hex(newBase) + "," + Utility.hex(explodeBuf));
+                        lastBase = newBase;
+                    } else {
+                        // Normal pairwise combination.  Replace the base char
+                        char newBase = (char) action;
+                        buffer.setCharAt(basePos, newBase);
+
+                        baseIndex = composeLookup(newBase) >>> ComposeData.INDEX_SHIFT;
+
+                        if (DEBUG) System.out.println("Pairwise combination: " + Utility.hex(lastBase) + "," + Utility.hex(ch)
+                            + " --> " + Utility.hex(newBase));
+                        lastBase = newBase;
+                    }
+                    //
+                    // Since there are Unicode characters that cannot be combined in arbitrary
+                    // order, we have to re-process any combining marks that go with this
+                    // base character.  There are only four characters in Unicode that have
+                    // this problem.  If they are fixed in Unicode 3.0, this code can go away.
+                    //
+                    int len = buffer.length();
+                    if (len - basePos > 1) {
+                        if (DEBUG) System.out.println("Reprocessing combining marks");
+                        for (int j = basePos+1; j < len; j++) {
+                            explodeBuf.append(buffer.charAt(j));
+                        }
+                        buffer.setLength(basePos+1);
+                        classesSeenL = classesSeenH = 0;
+                        if (explodePos == EMPTY) explodePos = 0;
+                    }
+                } else {
+                    if (DEBUG) System.out.println("char doesn't combine");
+                    // No combination with this character
+                    bubbleAppend(buffer, ch, cclass);
+                    if (cclass < 32) {
+                        classesSeenL |= 1 << cclass;
+                    } else {
+                        classesSeenH |= 1 << (cclass & 31);
+                    }
+                }
+            }
+            else if (index > minExplode) {
+                // Single exploding character
+                explode(explodeBuf, index);
+                explodePos = 0;
+                if (DEBUG) System.out.println("explosion: " + Utility.hex(ch) + " --> " + Utility.hex(explodeBuf));
+            }
+            else if (type == ComposeData.HANGUL && minExplode == 0) {
+                // If we're in compatibility mode we need to decompose Hangul to Jamo,
+                // because some of the Jamo might have compatibility decompositions.
+                hangulToJamo(ch, explodeBuf, minDecomp);
+                if (DEBUG) System.out.println("decomposed hangul " + Utility.hex(ch) + " to jamo " + Utility.hex(explodeBuf));
+                explodePos = 0;
+            }
+            else if (type == ComposeData.INITIAL_JAMO) {
+                if (buffer.length() > 0 && chFromText && explodePos == EMPTY) {
+                    // When we hit a base char in the source text, we can return the text
+                    // that's been composed so far.  We'll re-process this char next time through.
+                    if (DEBUG) System.out.println("returning early because we hit a new base");
+                    break;
+                }
+                classesSeenL = classesSeenH = 0;
+                baseIndex = ComposeData.INITIAL_JAMO_INDEX;
+                basePos = buffer.length();
+                buffer.append(ch);
+                if (DEBUG) System.out.println("got initial jamo " + Utility.hex(ch));
+            }
+            else if (type == ComposeData.MEDIAL_JAMO && classesSeenL == 0 && classesSeenH == 0
+                        && baseIndex == ComposeData.INITIAL_JAMO_INDEX) {
+                // If the last character was an initial jamo, we can combine it with this
+                // one to create a Hangul character.
+                int l = buffer.charAt(basePos) - JAMO_LBASE;
+                int v = ch - JAMO_VBASE;
+                char newCh = (char)(HANGUL_BASE + (l*JAMO_VCOUNT + v) * JAMO_TCOUNT);
+                buffer.setCharAt(basePos, newCh);
+
+                if (DEBUG) System.out.println("got medial jamo " + Utility.hex(ch) + ", replacing with Hangul " + Utility.hex(newCh));
+
+                baseIndex = ComposeData.MEDIAL_JAMO_INDEX;
+            }
+            else if (type == ComposeData.FINAL_JAMO && classesSeenL == 0 && classesSeenH == 0
+                        && baseIndex == ComposeData.MEDIAL_JAMO_INDEX) {
+                // If the last character was a medial jamo that we turned into Hangul,
+                // we can add this character too.
+                char newCh = (char)(buffer.charAt(basePos) + (ch - JAMO_TBASE));
+                buffer.setCharAt(basePos, newCh);
+
+                if (DEBUG) System.out.println("got final jamo " + Utility.hex(ch) + ", replacing with Hangul " + Utility.hex(newCh));
+
+                baseIndex = 0;
+                basePos = -1;
+                classesSeenL = classesSeenH = 0;
+            } else {
+                // TODO: deal with JAMO character types
+                baseIndex = 0;
+                basePos = -1;
+                classesSeenL = classesSeenH = 0;
+                buffer.append(ch);
+                if (DEBUG) System.out.println("UNKNOWN char " + Utility.hex(ch));
+            }
+
+            if (explodePos == EMPTY) {
+                ch = text.next();
+                chFromText = true;
+            } else {
+                ch = explodeBuf.charAt(explodePos++);
+                if (explodePos >= explodeBuf.length()) {
+                    explodePos = EMPTY;
+                    explodeBuf.setLength(0);
+                }
+                chFromText = false;
+            }
+        }
+        if (buffer.length() > 0) {
+            bufferLimit = buffer.length() - 1;
+            ch = buffer.charAt(0);
+        } else {
+            ch = DONE;
+            bufferLimit = 0;
+        }
+        return ch;
+    }
+
+    /**
+     * Compose starting with the input char just before the current position
+     * and continuing backward until (and including) the previous base char.
+     * <p>
+     * <b>Input</b>:
+     * <ul>
+     *  <li>underlying char iter points just after last char to decompose
+     * </ul>
+     * <p>
+     * <b>Output:</b>
+     * <ul>
+     *  <li>returns last char of resulting decomposition sequence
+     *  <li>underlying iter points to lowest-index char we decomposed, i.e. the base char
+     * </ul>
+     */
+    private char prevCompose() {
+        if (DEBUG) System.out.println("--------------- top of prevCompose() ---------------");
+
+        // Compatibility explosions have lower indices; skip them if necessary
+        int minExplode = mode.compat() ? 0 : ComposeData.MAX_COMPAT;
+
+        initBuffer();
+
+        // Slurp up characters until we hit a base char or an initial Jamo
+        char ch;
+        while ((ch = curBackward()) != DONE) {
+            buffer.insert(0, ch);
+
+            // Get the basic info for the character
+            int charInfo = composeLookup(ch);
+            int type = charInfo & ComposeData.TYPE_MASK;
+            int index = charInfo >>> ComposeData.INDEX_SHIFT;
+
+            if (DEBUG) System.out.println("prevCompose got char " + Utility.hex(ch) +
+                                          ", type=" + type + ", index=" + index +
+                                          ", minExplode=" + minExplode);
+
+            if (type == ComposeData.BASE
+                || (type == ComposeData.NON_COMPOSING_COMBINING && index < minExplode)
+                || type == ComposeData.HANGUL
+                || type == ComposeData.INITIAL_JAMO)
+            {
+                break;
+            }
+        }
+        // If there's more than one character in the buffer, compose it all at once....
+        if (buffer.length() > 0) {
+            // TODO: The performance of this is awful; add a way to compose
+            // a StringBuffer in place.
+            String composed = compose(buffer.toString(), mode.compat(), options);
+            if (DEBUG) System.out.println("prevCompose called compose(" + Utility.hex(buffer) +
+                                          ")->" + Utility.hex(composed));            
+            buffer.setLength(0);
+            buffer.append(composed);
+
+            if (buffer.length() > 1) {
+                bufferLimit = bufferPos = buffer.length() - 1;
+                ch = buffer.charAt(bufferPos);
+            } else {
+                ch = buffer.charAt(0);
+            }
+        }
+        else {
+            ch = DONE;
+        }
+
+        if (DEBUG) System.out.println("prevCompose returning " + Utility.hex(ch));
+        return ch;
+    }
+
+    private static void bubbleAppend(StringBuffer target, char ch, int cclass) {
+        if (DEBUG) System.out.println(" bubbleAppend(" + Utility.hex(target) + ", " + Utility.hex(ch) + ", " + cclass + ")" );
+        if (DEBUG) System.out.println("  getComposeClass(" + Utility.hex(ch) + ")=" + getComposeClass(ch));
+        int i;
+        for (i = target.length() - 1; i >= 0; --i) {
+            int iClass = getComposeClass(target.charAt(i));
+            if (DEBUG) System.out.println(" bubbleAppend: target[" + i + "]=" + Utility.hex(target.charAt(i)) + " is class " + iClass);
+
+            if (iClass == 1 || iClass <= cclass) {      // 1 means combining class 0
+                // We've hit something we can't bubble this character past, so insert here
+                break;
+            }
+        }
+        // We need to insert just after character "i"
+        if (DEBUG) System.out.println(" bubbleAppend inserting at index " + (i+1));
+        target.insert(i+1, ch);
+    }
+
+    private static int getComposeClass(char ch) {
+        int cclass = 0;
+        int charInfo = composeLookup(ch);
+        int type = charInfo & ComposeData.TYPE_MASK;
+        if (type == ComposeData.COMBINING) {
+            cclass = ComposeData.typeBit[charInfo >>> ComposeData.INDEX_SHIFT];
+        }
+        return cclass;
+    }
+
+    static final int composeLookup(char ch) {
+        return ComposeData.lookup.elementAt(ch);
+    }
+
+    static final int composeAction(int baseIndex, int comIndex) {
+        return ComposeData.actions.elementAt((char)(baseIndex
+                                            + ComposeData.MAX_BASES*comIndex));
+    }
+
+    static final void explode(StringBuffer target, int index) {
+        char ch;
+        while ((ch = ComposeData.replace.charAt(index++)) != 0)
+            target.append(ch);
+    }
+
+    static final char pairExplode(StringBuffer target, int action) {
+        int index = ComposeData.actionIndex[action - ComposeData.MAX_COMPOSED];
+        explode(target, index + 1);
+        return ComposeData.replace.charAt(index);   // New base char
+    }
+
+
+    //-------------------------------------------------------------------------
+    // Decompose methods
+    //-------------------------------------------------------------------------
+
+    /**
+     * Static method to decompose a <tt>String</tt>.
+     * <p>
+     * The <tt>options</tt> parameter specifies which optional
+     * <tt>Normalizer</tt> features are to be enabled for this operation.
+     * Currently the only available option is {@link #IGNORE_HANGUL}.
+     * The desired options should be OR'ed together to determine the value
+     * of this argument.  If you want the default behavior corresponding
+     * to Unicode Normalization Form <b>D</b> or <b>KD</b>,
+     * use 0 for this argument.
+     * <p>
+     * @param str   the string to be decomposed.
+     *
+     * @param compat    Perform compatibility decomposition.
+     *                  If this argument is <tt>false</tt>, only canonical
+     *                  decomposition will be performed.
+     *
+     *
+     * @return      the decomposed string.
+     */
+    public static String decompose(String source, boolean compat, int options)
+    {
+        if (DEBUG) System.out.println("--------------- top of decompose() ---------------");
+
+        boolean hangul = (options & IGNORE_HANGUL) == 0;
+        int minDecomp = compat ? 0 : DecompData.MAX_COMPAT;
+ 
+        StringBuffer result = new StringBuffer();
+        StringBuffer buffer = null;
+
+        int i = 0, bufPtr = -1;
+
+        while (i < source.length() || bufPtr >= 0)
+        {
+            char ch;
+
+            if (bufPtr >= 0) {
+                ch = buffer.charAt(bufPtr++);
+                if (bufPtr == buffer.length()) {
+                    bufPtr = -1;
+                }
+            } else {
+                ch = source.charAt(i++);
+            }
+
+            int offset = DecompData.offsets.elementAt(ch);
+            int index = offset & DecompData.DECOMP_MASK;
+
+            if (DEBUG) System.out.println("decompose got " + Utility.hex(ch));
+
+            if (index > minDecomp) {
+                if ((offset & DecompData.DECOMP_RECURSE) != 0) {
+                    if (DEBUG) System.out.println(" " + Utility.hex(ch) + " has RECURSIVE decomposition, index=" + index);
+                    if (buffer == null) {
+                        buffer = new StringBuffer();
+                    } else {
+                        buffer.setLength(0);
+                    }
+                    doAppend(DecompData.contents, index, buffer);
+                    bufPtr = 0;
+                } else {
+                    if (DEBUG) System.out.println(" " + Utility.hex(ch) + " has decomposition, index=" + index);
+                    doAppend(DecompData.contents, index, result);
+                }
+            } else if (ch >= HANGUL_BASE && ch < HANGUL_LIMIT && hangul) {
+                hangulToJamo(ch, result, minDecomp);
+            } else {
+                result.append(ch);
+            }
+        }
+        fixCanonical(result);
+        return result.toString();
+    }
+
+    /**
+     * Decompose starting with current input character and continuing
+     * until just before the next base char.
+     * <p>
+     * <b>Input</b>:
+     * <ul>
+     *  <li>underlying char iter points to first character to decompose
+     * </ul>
+     * <p>
+     * <b>Output:</b>
+     * <ul>
+     *  <li>returns first char of decomposition or DONE if at end
+     *  <li>Underlying char iter is pointing at next base char or past end
+     * </ul>
+     */
+    private char nextDecomp()
+    {
+        if (DEBUG) System.out.println("--------------- top of nextDecomp() ---------------");
+
+        boolean hangul = (options & IGNORE_HANGUL) == 0;
+        char ch = curForward();
+
+        int offset = DecompData.offsets.elementAt(ch);
+        int index = offset & DecompData.DECOMP_MASK;
+
+        if (index > minDecomp || DecompData.canonClass.elementAt(ch) != DecompData.BASE)
+        {
+            initBuffer();
+
+            if (index > minDecomp) {
+                if (DEBUG) System.out.println(" " + Utility.hex(ch) + " has decomposition, index=" + index);
+                doAppend(DecompData.contents, index, buffer);
+
+                if ((offset & DecompData.DECOMP_RECURSE) != 0) {
+                    // Need to decompose the output of this decomposition recursively.
+                    for (int i = 0; i < buffer.length(); i++) {
+                        ch = buffer.charAt(i);
+                        index = DecompData.offsets.elementAt(ch) & DecompData.DECOMP_MASK;
+
+                        if (index > minDecomp) {
+                            i += doReplace(DecompData.contents, index, buffer, i);
+                        }
+                    }
+                }
+            } else {
+                buffer.append(ch);
+            }
+            boolean needToReorder = false;
+
+            // Any other combining chacters that immediately follow the decomposed
+            // character must be included in the buffer too, because they're
+            // conceptually part of the same logical character.
+            while ((ch = text.next()) != DONE
+                && DecompData.canonClass.elementAt(ch) != DecompData.BASE)
+            {
+                needToReorder = true;
+                // Decompose any of these characters that need it - Liu
+                index = DecompData.offsets.elementAt(ch) & DecompData.DECOMP_MASK;
+                if (index > minDecomp) {
+                    doAppend(DecompData.contents, index, buffer);
+                } else {
+                    buffer.append(ch);
+                }
+            }
+
+            if (buffer.length() > 1 && needToReorder) {
+                // If there is more than one combining character in the buffer,
+                // put them into the canonical order.
+                // But we don't need to sort if only characters are the ones that
+                // resulted from decomosing the base character.
+                fixCanonical(buffer);
+            }
+            bufferLimit = buffer.length() - 1;
+            ch = buffer.charAt(0);
+        } else {
+            // Just use this character, but first advance to the next one
+            text.next();
+
+            // Do Hangul -> Jamo decomposition if necessary
+            if (hangul && ch >= HANGUL_BASE && ch < HANGUL_LIMIT) {
+                initBuffer();
+                hangulToJamo(ch, buffer, minDecomp);
+                bufferLimit = buffer.length() - 1;
+                ch = buffer.charAt(0);
+            }
+        }
+        if (DEBUG) System.out.println(" nextDecomp returning " + Utility.hex(ch) + ", text index=" + text.getIndex());
+        return ch;
+    }
+
+    /**
+     * Decompose starting with the input char just before the current position
+     * and continuing backward until (and including) the previous base char.
+     * <p>
+     * <b>Input</b>:
+     * <ul>
+     *  <li>underlying char iter points just after last char to decompose
+     * </ul>
+     * <p>
+     * <b>Output:</b>
+     * <ul>
+     *  <li>returns last char of resulting decomposition sequence
+     *  <li>underlying iter points to lowest-index char we decomposed, i.e. the base char
+     * </ul>
+     */
+    private char prevDecomp() {
+        if (DEBUG) System.out.println("--------------- top of prevDecomp() ---------------");
+
+        boolean hangul = (options & IGNORE_HANGUL) == 0;
+
+        char ch = curBackward();
+
+        int offset = DecompData.offsets.elementAt(ch);
+        int index = offset & DecompData.DECOMP_MASK;
+
+        if (DEBUG) System.out.println("prevDecomp got input char " + Utility.hex(ch));
+
+        if (index > minDecomp || DecompData.canonClass.elementAt(ch) != DecompData.BASE)
+        {
+            initBuffer();
+
+            // This method rewritten to pass conformance tests. - Liu
+            // Collect all characters up to the previous base char
+            while (ch != DONE) {
+                buffer.insert(0, ch);
+                if (DecompData.canonClass.elementAt(ch) == DecompData.BASE) break;
+                ch = text.previous();
+            }
+
+            if (DEBUG) System.out.println("prevDecomp buffer: " + Utility.hex(buffer));
+
+            // Decompose the buffer
+            for (int i = 0; i < buffer.length(); i++) {
+                ch = buffer.charAt(i);
+                offset = DecompData.offsets.elementAt(ch);
+                index = offset & DecompData.DECOMP_MASK;                
+
+                if (index > minDecomp) {
+                    int j = doReplace(DecompData.contents, index, buffer, i);
+                    if ((offset & DecompData.DECOMP_RECURSE) != 0) {
+                        // Need to decompose this recursively
+                        for (; i < j; ++i) {
+                            ch = buffer.charAt(i);
+                            index = DecompData.offsets.elementAt(ch) & DecompData.DECOMP_MASK;
+                            if (index > minDecomp) {
+                                i += doReplace(DecompData.contents, index, buffer, i);
+                            }
+                        }
+                    }
+                    i = j;
+                }
+            }
+            
+            if (DEBUG) System.out.println("prevDecomp buffer after decomp: " + Utility.hex(buffer));
+
+            if (buffer.length() > 1) {
+                // If there is more than one combining character in the buffer,
+                // put them into the canonical order.
+                fixCanonical(buffer);
+            }
+            bufferLimit = bufferPos = buffer.length() - 1;
+            ch = buffer.charAt(bufferPos);
+        }
+        else if (hangul && ch >= HANGUL_BASE && ch < HANGUL_LIMIT) {
+            initBuffer();
+            hangulToJamo(ch, buffer, minDecomp);
+            bufferLimit = bufferPos = buffer.length() - 1;
+            ch = buffer.charAt(bufferPos);
+        }
+        if (DEBUG) System.out.println(" prevDecomp returning '" + ch + "' " + Utility.hex(ch) + ", text index=" + text.getIndex());
+        return ch;
+    }
+
+    static final int getClass(char ch) {
+        int value = DecompData.canonClass.elementAt(ch);
+        return (value >= 0) ? value : value + 256;
+    }
+
+
+    //-------------------------------------------------------------------------
+    // CharacterIterator overrides
+    //-------------------------------------------------------------------------
+
+    /**
+     * Return the current character in the normalized text.
+     */
+    public char current() {
+        if (currentChar == DONE) {
+            if (mode.compose()) {
+                currentChar = nextCompose();
+            }
+            else if (mode.decomp()) {
+                currentChar = nextDecomp();
+            }
+            else {
+                currentChar = text.current();
+            }
+        }
+        return currentChar;
+    }
+
+    /**
+     * Return the first character in the normalized text.  This resets
+     * the <tt>Normalizer's</tt> position to the beginning of the text.
+     */
+    public char first() {
+        return setIndex(text.getBeginIndex());
+    }
+
+    /**
+     * Return the last character in the normalized text.  This resets
+     * the <tt>Normalizer's</tt> position to be just before the
+     * the input text corresponding to that normalized character.
+     */
+    public char last() {
+        text.setIndex(text.getEndIndex() - 1);  // Setting to getEndIndex() fails in 1.1
+        atEnd = true;                               // so work around the bug
+
+        currentChar = DONE;                     // The current char hasn't been processed
+        clearBuffer();                          // The buffer is empty too
+        return previous();
+    }
+
+    /**
+     * Return the next character in the normalized text and advance
+     * the iteration position by one.  If the end
+     * of the text has already been reached, {@link #DONE} is returned.
+     */
+    public char next() {
+        if (bufferPos < bufferLimit) {
+            // There are output characters left in the buffer
+            currentChar = buffer.charAt(++bufferPos);
+        }
+        else {
+            bufferLimit = bufferPos = 0;    // Buffer is now out of date
+            if (mode.compose()) {
+                currentChar = nextCompose();
+            }
+            else if (mode.decomp()) {
+                currentChar = nextDecomp();
+            }
+            else {
+                currentChar = text.next();
+            }
+        }
+        return currentChar;
+    }
+
+    /**
+     * Return the previous character in the normalized text and decrement
+     * the iteration position by one.  If the beginning
+     * of the text has already been reached, {@link #DONE} is returned.
+     */
+    public char previous() {
+        if (bufferPos > 0) {
+            // There are output characters left in the buffer
+            currentChar = buffer.charAt(--bufferPos);
+        }
+        else {
+            bufferLimit = bufferPos = 0;    // Buffer is now out of date
+            if (mode.compose()) {
+                currentChar = prevCompose();
+            }
+            else if (mode.decomp()) {
+                currentChar = prevDecomp();
+            }
+            else {
+                currentChar = text.previous();
+            }
+        }
+        return currentChar;
+    }
+
+    /**
+     * Set the iteration position in the input text that is being normalized
+     * and return the first normalized character at that position.
+     * <p>
+     * @param index the desired index in the input text.
+     *
+     * @return      the first normalized character that is the result of iterating
+     *              forward starting at the given index.
+     *
+     * @throws IllegalArgumentException if the given index is less than
+     *          {@link #getBeginIndex} or greater than {@link #getEndIndex}.
+     */
+    public char setIndex(int index) {
+        text.setIndex(index);   // Checks range
+        currentChar = DONE;     // The current char hasn't been processed
+        clearBuffer();          // The buffer is empty too
+
+        return current();
+    }
+
+    /**
+     * Retrieve the current iteration position in the input text that is
+     * being normalized.  This method is useful in applications such as
+     * searching, where you need to be able to determine the position in
+     * the input text that corresponds to a given normalized output character.
+     */
+    public final int getIndex() {
+        return text.getIndex();
+    }
+
+    /**
+     * Retrieve the index of the start of the input text.  This is the begin index
+     * of the <tt>CharacterIterator</tt> or the start (i.e. 0) of the <tt>String</tt>
+     * over which this <tt>Normalizer</tt> is iterating
+     */
+    public final int getBeginIndex() {
+        return text.getBeginIndex();
+    }
+
+    /**
+     * Retrieve the index of the end of the input text.  This is the end index
+     * of the <tt>CharacterIterator</tt> or the length of the <tt>String</tt>
+     * over which this <tt>Normalizer</tt> is iterating
+     */
+    public final int getEndIndex() {
+        return text.getEndIndex();
+    }
+
+    //-------------------------------------------------------------------------
+    // Property access methods
+    //-------------------------------------------------------------------------
+
+    /**
+     * Set the normalization mode for this object.
+     * <p>
+     * <b>Note:</b>If the normalization mode is changed while iterating
+     * over a string, calls to {@link #next} and {@link #previous} may
+     * return previously buffers characters in the old normalization mode
+     * until the iteration is able to re-sync at the next base character.
+     * It is safest to call {@link #setText setText()}, {@link #first},
+     * {@link #last}, etc. after calling <tt>setMode</tt>.
+     * <p>
+     * @param newMode the new mode for this <tt>Normalizer</tt>.
+     * The supported modes are:
+     * <ul>
+     *  <li>{@link #COMPOSE}        - Unicode canonical decompositiion
+     *                                  followed by canonical composition.
+     *  <li>{@link #COMPOSE_COMPAT} - Unicode compatibility decompositiion
+     *                                  follwed by canonical composition.
+     *  <li>{@link #DECOMP}         - Unicode canonical decomposition
+     *  <li>{@link #DECOMP_COMPAT}  - Unicode compatibility decomposition.
+     *  <li>{@link #NO_OP}          - Do nothing but return characters
+     *                                  from the underlying input text.
+     * </ul>
+     *
+     * @see #getMode
+     */
+    public void setMode(Mode newMode) {
+        mode = newMode;
+        minDecomp = mode.compat() ? 0 : DecompData.MAX_COMPAT;
+    }
+
+    /**
+     * Return the basic operation performed by this <tt>Normalizer</tt>
+     *
+     * @see #setMode
+     */
+    public Mode getMode() {
+        return mode;
+    }
+
+    /**
+     * Set options that affect this <tt>Normalizer</tt>'s operation.
+     * Options do not change the basic composition or decomposition operation
+     * that is being performed , but they control whether
+     * certain optional portions of the operation are done.
+     * Currently the only available option is:
+     * <p>
+     * <ul>
+     *   <li>{@link #IGNORE_HANGUL} - Do not decompose Hangul syllables into the Jamo alphabet
+     *          and vice-versa.  This option is off by default (<i>i.e.</i> Hangul processing
+     *          is enabled) since the Unicode standard specifies that Hangul to Jamo
+     *          is a canonical decomposition.  For any of the standard Unicode Normalization
+     *          Forms, you should leave this option off.
+     * </ul>
+     * <p>
+     * @param   option  the option whose value is to be set.
+     * @param   value   the new setting for the option.  Use <tt>true</tt> to
+     *                  turn the option on and <tt>false</tt> to turn it off.
+     *
+     * @see #getOption
+     */
+    public void setOption(int option, boolean value) {
+        if (option != IGNORE_HANGUL) {
+            throw new IllegalArgumentException("Illegal option");
+        }
+        if (value) {
+            options |= option;
+        } else {
+            options &= (~option);
+        }
+    }
+
+    /**
+     * Determine whether an option is turned on or off.
+     * <p>
+     * @see #setOption
+     */
+    public boolean getOption(int option) {
+        return (options & option) != 0;
+    }
+
+    /**
+     * Set the input text over which this <tt>Normalizer</tt> will iterate.
+     * The iteration position will be reset to the beginning.
+     * <p>
+     * @param newText   The new string to be normalized.
+     */
+    public void setText(String newText) {
+        text = new StringCharacterIterator(newText);
+        reset();
+    }
+
+    /**
+     * Set the input text over which this <tt>Normalizer</tt> will iterate.
+     * The iteration position will be reset to the beginning.
+     * <p>
+     * @param newText   The new text to be normalized.
+     */
+    public void setText(CharacterIterator newText) {
+        text = newText;
+        reset();
+    }
+
+
+    //-------------------------------------------------------------------------
+    // Private utility methods
+    //-------------------------------------------------------------------------
+
+    private final char curForward() {
+        char ch = text.current();
+        if (DEBUG) System.out.println(" curForward returning " + Utility.hex(ch) + ", text index=" + text.getIndex());
+        return ch;
+    }
+
+    private final char curBackward() {
+        char ch = atEnd ? text.current() : text.previous();
+        atEnd = false;
+        if (DEBUG) System.out.println(" curBackward returning " + Utility.hex(ch) + ", text index=" + text.getIndex());
+        return ch;
+    }
+
+    static final int doAppend(String source, int offset, StringBuffer dest) {
+        int index = offset >>> STR_INDEX_SHIFT;
+        int length = offset & STR_LENGTH_MASK;
+
+        if (length == 0) {
+            char ch;
+            while ((ch = DecompData.contents.charAt(index++)) != 0x0000) {
+                dest.append(ch);
+                length++;
+            }
+        } else {
+            for (int i = 0; i < length; i++) {
+                dest.append(DecompData.contents.charAt(index++));
+            }
+        }
+        return length;
+    }
+
+
+    static final int doInsert(String source, int offset, StringBuffer dest, int pos)
+    {
+        int index = offset >>> STR_INDEX_SHIFT;
+        int length = offset & STR_LENGTH_MASK;
+
+        if (length == 0) {
+            char ch;
+            while ((ch = DecompData.contents.charAt(index++)) != 0x0000) {
+                dest.insert(pos++, ch);
+                length++;
+            }
+        } else {
+            for (int i = 0; i < length; i++) {
+                dest.insert(pos++, DecompData.contents.charAt(index++));
+            }
+        }
+        return length;
+    }
+
+    static final int doReplace(String source, int offset, StringBuffer dest, int pos)
+    {
+        int index = offset >>> STR_INDEX_SHIFT;
+        int length = offset & STR_LENGTH_MASK;
+
+        dest.setCharAt(pos++, DecompData.contents.charAt(index++));
+        if (length == 0) {
+            char ch;
+            while ((ch = DecompData.contents.charAt(index++)) != 0x0000) {
+                dest.insert(pos++, ch);
+                length++;
+            }
+        } else {
+            for (int i = 1; i < length; i++) {
+                dest.insert(pos++, DecompData.contents.charAt(index++));
+            }
+        }
+        return length;
+    }
+
+    private void reset() {
+        text.setIndex(text.getBeginIndex());
+        atEnd = false;
+        bufferPos = 0;
+        bufferLimit = 0;
+    }
+
+    private final void initBuffer() {
+        if (buffer == null) {
+            buffer = new StringBuffer(10);
+        } else {
+            buffer.setLength(0);
+        }
+        clearBuffer();
+    }
+
+    private final void clearBuffer() {
+        bufferLimit = bufferPos = 0;
+    }
+
+
+    /**
+     * Fixes the sorting sequence of non-spacing characters according to
+     * their combining class.  The algorithm is listed on p.3-11 in the
+     * Unicode Standard 2.0.  The table of combining classes is on p.4-2
+     * in the Unicode Standard 2.0.
+     * @param result the string to fix.
+     */
+    private static void fixCanonical(StringBuffer result) {
+        int i = result.length() - 1;
+        int currentType = getClass(result.charAt(i));
+        int lastType;
+
+        for (--i; i >= 0; --i) {
+            lastType = currentType;
+            currentType = getClass(result.charAt(i));
+
+            //
+            // a swap is presumed to be rare (and a double-swap very rare),
+            // so don't worry about efficiency here.
+            //
+            if (currentType > lastType && lastType != DecompData.BASE) {
+                // swap characters
+                char temp = result.charAt(i);
+                result.setCharAt(i, result.charAt(i+1));
+                result.setCharAt(i+1, temp);
+                // if not at end, backup (one further, to compensate for for-loop)
+                if (i < result.length() - 2) {
+                    i += 2;
+                }
+                // reset type, since we swapped.
+                currentType = getClass(result.charAt(i));
+            }
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // Hangul / Jamo conversion utilities for internal use
+    // See section 3.10 of The Unicode Standard, v 2.0.
+    //
+
+    // Package-accessible for use by ComposedCharIter
+    static final char HANGUL_BASE   = 0xac00;
+    static final char HANGUL_LIMIT  = 0xd7a4;
+
+    private static final char JAMO_LBASE    = 0x1100;
+    private static final char JAMO_VBASE    = 0x1161;
+    private static final char JAMO_TBASE    = 0x11a7;
+    private static final int  JAMO_LCOUNT   = 19;
+    private static final int  JAMO_VCOUNT   = 21;
+    private static final int  JAMO_TCOUNT   = 28;
+    private static final int  JAMO_NCOUNT   = JAMO_VCOUNT * JAMO_TCOUNT;
+
+    /**
+     * Convert a single Hangul syllable into one or more Jamo characters.
+     *
+     * @param conjoin If true, decompose Jamo into conjoining Jamo.
+     */
+    static int hangulToJamo(char ch, StringBuffer result, int decompLimit) {
+        char sIndex  = (char)(ch - HANGUL_BASE);
+        char leading = (char)(JAMO_LBASE + sIndex / JAMO_NCOUNT);
+        char vowel   = (char)(JAMO_VBASE +
+                              (sIndex % JAMO_NCOUNT) / JAMO_TCOUNT);
+        char trailing= (char)(JAMO_TBASE + (sIndex % JAMO_TCOUNT));
+
+        int length = 0;
+
+        length += jamoAppend(leading, decompLimit, result);
+        length += jamoAppend(vowel, decompLimit, result);
+        if (trailing != JAMO_TBASE) {
+            length += jamoAppend(trailing, decompLimit, result);
+        }
+        return length;
+    }
+    static final int jamoAppend(char ch, int limit, StringBuffer dest) {
+        int offset = DecompData.offsets.elementAt(ch);
+        if (offset > limit) {
+            return doAppend(DecompData.contents, offset, dest);
+        } else {
+            dest.append(ch);
+            return 1;
+        }
+    }
+
+    static private void jamoToHangul(StringBuffer buffer, int start) {
+        int out = 0;
+        int limit = buffer.length() - 1;
+
+        int in, l, v, t;
+
+        for (in = start; in < limit; in++) {
+            char ch = buffer.charAt(in);
+
+            if ((l = ch - JAMO_LBASE) >= 0 && l < JAMO_LCOUNT
+                    && (v = buffer.charAt(in+1) - JAMO_VBASE) >= 0 && v < JAMO_VCOUNT) {
+                //
+                // We've found a pair of Jamo characters to compose.
+                // Snarf the Jamo vowel and see if there's also a trailing char
+                //
+                in++;   // Snarf the Jamo vowel too.
+
+                t = (in < limit) ? buffer.charAt(in+1) : 0;
+                t -= JAMO_TBASE;
+
+                if (t >= 0 && t < JAMO_TCOUNT) {
+                    in++;   // Snarf the trailing consonant too
+                } else {
+                    t = 0;  // No trailing consonant
+                }
+                buffer.setCharAt(out++, (char)((l*JAMO_VCOUNT + v) * JAMO_TCOUNT
+                                               + t + HANGUL_BASE));
+            } else {
+                buffer.setCharAt(out++, ch);
+            }
+        }
+        while (in < buffer.length()) {
+            buffer.setCharAt(out++, buffer.charAt(in++));
+        }
+
+        buffer.setLength(out);
+    }
+
+
+    //-------------------------------------------------------------------------
+    // Private data
+    //-------------------------------------------------------------------------
+
+    private static final boolean DEBUG = false;
+
+    private Mode                mode = DECOMP;
+    private int                 options = 0;
+    private transient int       minDecomp;
+
+    // The input text and our position in it
+    private CharacterIterator   text;
+    private boolean             atEnd = false;
+
+    // A buffer for holding intermediate results
+    private StringBuffer        buffer = null;
+    private int                 bufferPos = 0;
+    private int                 bufferLimit = 0;
+    private char                currentChar;
+
+    // Another buffer for use during iterative composition
+    private static final int    EMPTY = -1;
+    private StringBuffer        explodeBuf = null;
+
+    // These must agree with the constants used in NormalizerBuilder
+    static final int STR_INDEX_SHIFT = 2;
+    static final int STR_LENGTH_MASK = 0x0003;
+};
diff --git a/src/com/ibm/text/NullTransliterator.java b/src/com/ibm/text/NullTransliterator.java
new file mode 100755
index 0000000..0dbf888
--- /dev/null
+++ b/src/com/ibm/text/NullTransliterator.java
@@ -0,0 +1,42 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/NullTransliterator.java,v $ 
+ * $Date: 2000/06/28 20:49:54 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.util.*;
+
+/**
+ * A transliterator that leaves text unchanged.
+ */
+public class NullTransliterator extends Transliterator {
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 2000. All rights reserved.";
+
+    /**
+     * Package accessible ID for this transliterator.
+     */
+    static String _ID = "Null";
+
+    /**
+     * Constructs a transliterator.
+     */
+    public NullTransliterator() {
+        super(_ID, null);
+    }
+
+    /**
+     * Implements {@link Transliterator#handleTransliterate}.
+     */
+    protected void handleTransliterate(Replaceable text,
+                                       Position offsets, boolean incremental) {
+        offsets.start = offsets.limit;
+    }
+}
diff --git a/src/com/ibm/text/NumberFormat.java b/src/com/ibm/text/NumberFormat.java
new file mode 100755
index 0000000..c45311f
--- /dev/null
+++ b/src/com/ibm/text/NumberFormat.java
@@ -0,0 +1,870 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/NumberFormat.java,v $ 
+ * $Date: 2000/06/01 01:21:34 $ 
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.text.Format;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.text.ParseException;
+import java.text.resources.*;
+import java.util.Hashtable;
+import java.math.BigInteger;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * <code>NumberFormat</code> is the abstract base class for all number
+ * formats. This class provides the interface for formatting and parsing
+ * numbers. <code>NumberFormat</code> also provides methods for determining
+ * which locales have number formats, and what their names are.
+ *
+ * <p><strong>This is an enhanced version of <code>NumberFormat</code> that
+ * is based on the standard version in the JDK.  New or changed functionality
+ * is labeled
+ * <strong><font face=helvetica color=red>NEW</font></strong> or
+ * <strong><font face=helvetica color=red>CHANGED</font></strong>.</strong>
+ *
+ * <p>
+ * <code>NumberFormat</code> helps you to format and parse numbers for any locale.
+ * Your code can be completely independent of the locale conventions for
+ * decimal points, thousands-separators, or even the particular decimal
+ * digits used, or whether the number format is even decimal.
+ *
+ * <p>
+ * To format a number for the current Locale, use one of the factory
+ * class methods:
+ * <blockquote>
+ * <pre>
+ *  myString = NumberFormat.getInstance().format(myNumber);
+ * </pre>
+ * </blockquote>
+ * If you are formatting multiple numbers, it is
+ * more efficient to get the format and use it multiple times so that
+ * the system doesn't have to fetch the information about the local
+ * language and country conventions multiple times.
+ * <blockquote>
+ * <pre>
+ * NumberFormat nf = NumberFormat.getInstance();
+ * for (int i = 0; i < a.length; ++i) {
+ *     output.println(nf.format(myNumber[i]) + "; ");
+ * }
+ * </pre>
+ * </blockquote>
+ * To format a number for a different Locale, specify it in the
+ * call to <code>getInstance</code>.
+ * <blockquote>
+ * <pre>
+ * NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
+ * </pre>
+ * </blockquote>
+ * You can also use a <code>NumberFormat</code> to parse numbers:
+ * <blockquote>
+ * <pre>
+ * myNumber = nf.parse(myString);
+ * </pre>
+ * </blockquote>
+ * Use <code>getInstance</code> or <code>getNumberInstance</code> to get the
+ * normal number format. Use <code>getCurrencyInstance</code> to get the
+ * currency number format. And use <code>getPercentInstance</code> to get a
+ * format for displaying percentages. With this format, a fraction like
+ * 0.53 is displayed as 53%.
+ *
+ * <p>
+ * You can also control the display of numbers with such methods as
+ * <code>setMinimumFractionDigits</code>.
+ * If you want even more control over the format or parsing,
+ * or want to give your users more control,
+ * you can try casting the <code>NumberFormat</code> you get from the factory methods
+ * to a <code>DecimalNumberFormat</code>. This will work for the vast majority
+ * of locales; just remember to put it in a <code>try</code> block in case you
+ * encounter an unusual one.
+ *
+ * <p>
+ * NumberFormat and DecimalFormat are designed such that some controls
+ * work for formatting and others work for parsing.  The following is
+ * the detailed description for each these control methods,
+ * <p>
+ * setParseIntegerOnly : only affects parsing, e.g.
+ * if true,  "3456.78" -> 3456 (and leaves the parse position just after index 6)
+ * if false, "3456.78" -> 3456.78 (and leaves the parse position just after index 8)
+ * This is independent of formatting.  If you want to not show a decimal point
+ * where there might be no digits after the decimal point, use
+ * setDecimalSeparatorAlwaysShown.
+ * <p>
+ * setDecimalSeparatorAlwaysShown : only affects formatting, and only where
+ * there might be no digits after the decimal point, such as with a pattern
+ * like "#,##0.##", e.g.,
+ * if true,  3456.00 -> "3,456."
+ * if false, 3456.00 -> "3456"
+ * This is independent of parsing.  If you want parsing to stop at the decimal
+ * point, use setParseIntegerOnly.
+ *
+ * <p>
+ * You can also use forms of the <code>parse</code> and <code>format</code>
+ * methods with <code>ParsePosition</code> and <code>FieldPosition</code> to
+ * allow you to:
+ * <ul>
+ * <li> progressively parse through pieces of a string
+ * <li> align the decimal point and other areas
+ * </ul>
+ * For example, you can align numbers in two ways:
+ * <ol>
+ * <li> If you are using a monospaced font with spacing for alignment,
+ *      you can pass the <code>FieldPosition</code> in your format call, with
+ *      <code>field</code> = <code>INTEGER_FIELD</code>. On output,
+ *      <code>getEndIndex</code> will be set to the offset between the
+ *      last character of the integer and the decimal. Add
+ *      (desiredSpaceCount - getEndIndex) spaces at the front of the string.
+ *
+ * <li> If you are using proportional fonts,
+ *      instead of padding with spaces, measure the width
+ *      of the string in pixels from the start to <code>getEndIndex</code>.
+ *      Then move the pen by
+ *      (desiredPixelWidth - widthToAlignmentPoint) before drawing the text.
+ *      It also works where there is no decimal, but possibly additional
+ *      characters at the end, e.g., with parentheses in negative
+ *      numbers: "(12)" for -12.
+ * </ol>
+ *
+ * see          DecimalFormat
+ * see          java.text.ChoiceFormat
+ * @version      $Revision: 1.8 $
+ * @author       Mark Davis
+ * @author       Helena Shih
+ * @author       Alan Liu
+ */
+public abstract class NumberFormat extends Format{
+
+    /**
+     * Field constant used to construct a FieldPosition object. Signifies that
+     * the position of the integer part of a formatted number should be returned.
+     * @see java.text.FieldPosition
+     */
+    public static final int INTEGER_FIELD = 0;
+
+    /**
+     * Field constant used to construct a FieldPosition object. Signifies that
+     * the position of the fraction part of a formatted number should be returned.
+     * @see java.text.FieldPosition
+     */
+    public static final int FRACTION_FIELD = 1;
+
+    /**
+     * <strong><font face=helvetica color=red>CHANGED</font></strong>
+     * Format an object.  Change: recognizes <code>BigInteger</code>
+     * and <code>BigDecimal</code> objects now.
+     */
+    public final StringBuffer format(Object number,
+                                     StringBuffer toAppendTo,
+                                     FieldPosition pos)
+    {
+        if (number instanceof Long) {
+            return format(((Long)number).longValue(), toAppendTo, pos);
+        } else if (number instanceof BigInteger) {
+            return format((BigInteger) number, toAppendTo, pos);
+        } else if (number instanceof java.math.BigDecimal) {
+            return format((java.math.BigDecimal) number, toAppendTo, pos);
+        } else if (number instanceof com.ibm.math.BigDecimal) {
+            return format((com.ibm.math.BigDecimal) number, toAppendTo, pos);
+        } else if (number instanceof Number) {
+            return format(((Number)number).doubleValue(), toAppendTo, pos);
+        } else {
+            throw new IllegalArgumentException("Cannot format given Object as a Number");
+        }
+    }
+
+    public final Object parseObject(String source,
+                                    ParsePosition parsePosition)
+    {
+        return parse(source, parsePosition);
+    }
+
+   /**
+     * Specialization of format.
+     * @see java.text.Format#format
+     */
+    public final String format (double number) {
+        return format(number,new StringBuffer(),
+                      new FieldPosition(0)).toString();
+    }
+
+   /**
+     * Specialization of format.
+     * @see java.text.Format#format
+     */
+    public final String format (long number) {
+        return format(number,new StringBuffer(),
+                      new FieldPosition(0)).toString();
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Convenience method to format a BigInteger.
+     */
+    public final String format(BigInteger number) {
+        return format(number, new StringBuffer(),
+                      new FieldPosition(0)).toString();
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Convenience method to format a BigDecimal.
+     */
+    public final String format(java.math.BigDecimal number) {
+        return format(number, new StringBuffer(),
+                      new FieldPosition(0)).toString();
+    }
+
+    /* this has been removed pending addition of com.ibm.math packge to ICU4J
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Convenience method to format a BigDecimal.
+     */
+    public final String format(com.ibm.math.BigDecimal number) {
+        return format(number, new StringBuffer(),
+                      new FieldPosition(0)).toString();
+    }
+
+   /**
+     * Specialization of format.
+     * @see java.text.Format#format
+     */
+    public abstract StringBuffer format(double number,
+                                        StringBuffer toAppendTo,
+                                        FieldPosition pos);
+
+   /**
+     * Specialization of format.
+     * @see java.text.Format#format
+     */
+    public abstract StringBuffer format(long number,
+                                        StringBuffer toAppendTo,
+                                        FieldPosition pos);
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Format a BigInteger.
+     */
+    public abstract StringBuffer format(BigInteger number,
+                                        StringBuffer toAppendTo,
+                                        FieldPosition pos); 
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Format a BigDecimal.
+     */
+    public abstract StringBuffer format(java.math.BigDecimal number,
+                                        StringBuffer toAppendTo,
+                                        FieldPosition pos);
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Format a BigDecimal.
+     */
+    public abstract StringBuffer format(com.ibm.math.BigDecimal number,
+                                        StringBuffer toAppendTo,
+                                        FieldPosition pos);
+   
+   /**
+     * Returns a Long if possible (e.g., within the range [Long.MIN_VALUE,
+     * Long.MAX_VALUE] and with no decimals), otherwise a Double.
+     * If IntegerOnly is set, will stop at a decimal
+     * point (or equivalent; e.g., for rational numbers "1 2/3", will stop
+     * after the 1).
+     * Does not throw an exception; if no object can be parsed, index is
+     * unchanged!
+     * @see #isParseIntegerOnly
+     * @see java.text.Format#parseObject
+     */
+    public abstract Number parse(String text, ParsePosition parsePosition);
+
+    /**
+     * Convenience method.
+     *
+     * @exception ParseException if the specified string is invalid.
+     * @see #format
+     */
+    public Number parse(String text) throws ParseException {
+        ParsePosition parsePosition = new ParsePosition(0);
+        Number result = parse(text, parsePosition);
+        if (parsePosition.getIndex() == 0) {
+            throw new ParseException("Unparseable number: \"" + text + "\"",
+                                     //PP:parsePosition.errorIndex);
+                                     0);
+        }
+        return result;
+    }
+
+    /**
+     * Returns true if this format will parse numbers as integers only.
+     * For example in the English locale, with ParseIntegerOnly true, the
+     * string "1234." would be parsed as the integer value 1234 and parsing
+     * would stop at the "." character.  Of course, the exact format accepted
+     * by the parse operation is locale dependant and determined by sub-classes
+     * of NumberFormat.
+     */
+    public boolean isParseIntegerOnly() {
+        return parseIntegerOnly;
+    }
+
+    /**
+     * Sets whether or not numbers should be parsed as integers only.
+     * @see #isParseIntegerOnly
+     */
+    public void setParseIntegerOnly(boolean value) {
+        parseIntegerOnly = value;
+    }
+
+    //============== Locale Stuff =====================
+
+    /**
+     * Returns the default number format for the current default locale.
+     * The default format is one of the styles provided by the other
+     * factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
+     * Exactly which one is locale dependant.
+     */
+    public final static NumberFormat getInstance() {
+        return getInstance(Locale.getDefault(), NUMBERSTYLE);
+    }
+
+    /**
+     * Returns the default number format for the specified locale.
+     * The default format is one of the styles provided by the other
+     * factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
+     * Exactly which one is locale dependant.
+     */
+    public static NumberFormat getInstance(Locale inLocale) {
+        return getInstance(inLocale, NUMBERSTYLE);
+    }
+
+    /**
+     * Returns a general-purpose number format for the current default locale.
+     */
+    public final static NumberFormat getNumberInstance() {
+        return getInstance(Locale.getDefault(), NUMBERSTYLE);
+    }
+
+    /**
+     * Returns a general-purpose number format for the specified locale.
+     */
+    public static NumberFormat getNumberInstance(Locale inLocale) {
+        return getInstance(inLocale, NUMBERSTYLE);
+    }
+
+    /**
+     * Returns a currency format for the current default locale.
+     */
+    public final static NumberFormat getCurrencyInstance() {
+        return getInstance(Locale.getDefault(), CURRENCYSTYLE);
+    }
+
+    /**
+     * Returns a currency format for the specified locale.
+     */
+    public static NumberFormat getCurrencyInstance(Locale inLocale) {
+        return getInstance(inLocale, CURRENCYSTYLE);
+    }
+
+    /**
+     * Returns a percentage format for the current default locale.
+     */
+    public final static NumberFormat getPercentInstance() {
+        return getInstance(Locale.getDefault(), PERCENTSTYLE);
+    }
+
+    /**
+     * Returns a percentage format for the specified locale.
+     */
+    public static NumberFormat getPercentInstance(Locale inLocale) {
+        return getInstance(inLocale, PERCENTSTYLE);
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Returns a scientific format for the current default locale.
+     */
+    public final static NumberFormat getScientificInstance() {
+        return getInstance(Locale.getDefault(), SCIENTIFICSTYLE);
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Returns a scientific format for the specified locale.
+     */
+    public static NumberFormat getScientificInstance(Locale inLocale) {
+        return getInstance(inLocale, SCIENTIFICSTYLE);
+    }
+
+
+    /**
+     * Get the set of Locales for which NumberFormats are installed
+     * @return available locales
+     */
+    public static Locale[] getAvailableLocales() {
+        return LocaleData.getAvailableLocales("NumberPatterns");
+    }
+
+    /**
+     * Overrides hashCode
+     */
+    public int hashCode() {
+        return maximumIntegerDigits * 37 + maxFractionDigits;
+        // just enough fields for a reasonable distribution
+    }
+
+    /**
+     * Overrides equals
+     */
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (this == obj)
+            return true;
+        if (getClass() != obj.getClass())
+            return false;
+        NumberFormat other = (NumberFormat) obj;
+        return (maximumIntegerDigits == other.maximumIntegerDigits
+            && minimumIntegerDigits == other.minimumIntegerDigits
+            && maximumFractionDigits == other.maximumFractionDigits
+            && minimumFractionDigits == other.minimumFractionDigits
+            && groupingUsed == other.groupingUsed
+            && parseIntegerOnly == other.parseIntegerOnly);
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        NumberFormat other = (NumberFormat) super.clone();
+        return other;
+    }
+
+    /**
+     * Returns true if grouping is used in this format. For example, in the
+     * English locale, with grouping on, the number 1234567 might be formatted
+     * as "1,234,567". The grouping separator as well as the size of each group
+     * is locale dependant and is determined by sub-classes of NumberFormat.
+     * @see #setGroupingUsed
+     */
+    public boolean isGroupingUsed() {
+        return groupingUsed;
+    }
+
+    /**
+     * Set whether or not grouping will be used in this format.
+     * @see #isGroupingUsed
+     */
+    public void setGroupingUsed(boolean newValue) {
+        groupingUsed = newValue;
+    }
+
+    /**
+     * Returns the maximum number of digits allowed in the integer portion of a
+     * number.
+     * @see #setMaximumIntegerDigits
+     */
+    public int getMaximumIntegerDigits() {
+        return maximumIntegerDigits;
+    }
+
+    /**
+     * Sets the maximum number of digits allowed in the integer portion of a
+     * number. maximumIntegerDigits must be >= minimumIntegerDigits.  If the
+     * new value for maximumIntegerDigits is less than the current value
+     * of minimumIntegerDigits, then minimumIntegerDigits will also be set to
+     * the new value.
+     * @param newValue the maximum number of integer digits to be shown; if
+     * less than zero, then zero is used. The concrete subclass may enforce an
+     * upper limit to this value appropriate to the numeric type being formatted.
+     * @see #getMaximumIntegerDigits
+     */
+    public void setMaximumIntegerDigits(int newValue) {
+        maximumIntegerDigits = Math.max(0,newValue);
+        if (minimumIntegerDigits > maximumIntegerDigits)
+            minimumIntegerDigits = maximumIntegerDigits;
+    }
+
+    /**
+     * Returns the minimum number of digits allowed in the integer portion of a
+     * number.
+     * @see #setMinimumIntegerDigits
+     */
+    public int getMinimumIntegerDigits() {
+        return minimumIntegerDigits;
+    }
+
+    /**
+     * Sets the minimum number of digits allowed in the integer portion of a
+     * number. minimumIntegerDigits must be <= maximumIntegerDigits.  If the
+     * new value for minimumIntegerDigits exceeds the current value
+     * of maximumIntegerDigits, then maximumIntegerDigits will also be set to
+     * the new value
+     * @param newValue the minimum number of integer digits to be shown; if
+     * less than zero, then zero is used. The concrete subclass may enforce an
+     * upper limit to this value appropriate to the numeric type being formatted.
+     * @see #getMinimumIntegerDigits
+     */
+    public void setMinimumIntegerDigits(int newValue) {
+        minimumIntegerDigits = Math.max(0,newValue);
+        if (minimumIntegerDigits > maximumIntegerDigits)
+            maximumIntegerDigits = minimumIntegerDigits;
+    }
+
+    /**
+     * Returns the maximum number of digits allowed in the fraction portion of a
+     * number.
+     * @see #setMaximumFractionDigits
+     */
+    public int getMaximumFractionDigits() {
+        return maximumFractionDigits;
+    }
+
+    /**
+     * Sets the maximum number of digits allowed in the fraction portion of a
+     * number. maximumFractionDigits must be >= minimumFractionDigits.  If the
+     * new value for maximumFractionDigits is less than the current value
+     * of minimumFractionDigits, then minimumFractionDigits will also be set to
+     * the new value.
+     * @param newValue the maximum number of fraction digits to be shown; if
+     * less than zero, then zero is used. The concrete subclass may enforce an
+     * upper limit to this value appropriate to the numeric type being formatted.
+     * @see #getMaximumFractionDigits
+     */
+    public void setMaximumFractionDigits(int newValue) {
+        maximumFractionDigits = Math.max(0,newValue);
+        if (maximumFractionDigits < minimumFractionDigits)
+            minimumFractionDigits = maximumFractionDigits;
+    }
+
+    /**
+     * Returns the minimum number of digits allowed in the fraction portion of a
+     * number.
+     * @see #setMinimumFractionDigits
+     */
+    public int getMinimumFractionDigits() {
+        return minimumFractionDigits;
+    }
+
+    /**
+     * Sets the minimum number of digits allowed in the fraction portion of a
+     * number. minimumFractionDigits must be <= maximumFractionDigits.  If the
+     * new value for minimumFractionDigits exceeds the current value
+     * of maximumFractionDigits, then maximumIntegerDigits will also be set to
+     * the new value
+     * @param newValue the minimum number of fraction digits to be shown; if
+     * less than zero, then zero is used. The concrete subclass may enforce an
+     * upper limit to this value appropriate to the numeric type being formatted.
+     * @see #getMinimumFractionDigits
+     */
+    public void setMinimumFractionDigits(int newValue) {
+        minimumFractionDigits = Math.max(0,newValue);
+        if (maximumFractionDigits < minimumFractionDigits)
+            maximumFractionDigits = minimumFractionDigits;
+    }
+
+    // =======================privates===============================
+
+    // [NEW]
+    private static NumberFormat getInstance(Locale desiredLocale,
+                                            int choice) {
+        return new DecimalFormat(getPattern(desiredLocale, choice),
+                                 new DecimalFormatSymbols(desiredLocale));
+    }
+
+    // [NEW]
+    protected static String getPattern(Locale forLocale, int choice) {
+
+        /* The following code takes care of a few cases where the
+         * resource data in the underlying JDK lags the new features
+         * we have added to ICU4J: scientific notation, rounding, and
+         * secondary grouping.
+         *
+         * We detect these cases here and return various hard-coded
+         * resource data.  This is the simplest solution for now, but
+         * it is not a good long-term mechanism.
+         * 
+         * We should replace this code with a data-driven mechanism
+         * that reads the bundle com.ibm.text.resources.LocaleElements
+         * and parses an exception table that overrides the standard
+         * data at java.text.resource.LocaleElements*.java.
+         * Alternatively, we should create our own copy of the
+         * resource data, and use that exclusively.
+         */
+
+        // TEMPORARY, until we get scientific patterns into the main
+        // resources:  Retrieve scientific patterns from our resources.
+        if (choice == SCIENTIFICSTYLE) {
+            // Temporarily hard code; retrieve from resource later
+            return "0.######E0";
+            // return NumberFormat.getBaseStringArray("NumberPatterns")[SCIENTIFICSTYLE];
+        }
+        // TEMPORARY: Use rounding for Swiss currency
+        if (choice == CURRENCYSTYLE &&
+            forLocale.getCountry().equals("CH")) {
+            return "'Fr. '#,##0.05;'Fr.-'#,##0.05";
+        }
+        // TEMPORARY: Special case IN number format
+        if (choice == NUMBERSTYLE &&
+            forLocale.getCountry().equals("IN")) {
+            return "#,##,##0.###";
+        }
+        // Try the cache first
+        String[] numberPatterns = (String[]) cachedLocaleData.get(forLocale);
+        if (numberPatterns == null) {
+            ResourceBundle resource = ResourceBundle.getBundle
+                (RESOURCE_BASE, forLocale);
+            numberPatterns = resource.getStringArray("NumberPatterns");
+            // Update the cache
+            cachedLocaleData.put(forLocale, numberPatterns); 
+        }
+        return numberPatterns[choice];
+    }
+
+    public static final String RESOURCE_BASE = "java.text.resources.LocaleElements";
+    
+//!    static ResourceBundle baseBundle = null;
+//!    
+//!    public synchronized static final String[] getBaseStringArray(String name) {
+//!        if (baseBundle == null) {
+//!            baseBundle = ResourceBundle.getBundle(RESOURCE_BASE);
+//!        }
+//!        return baseBundle.getStringArray(name);
+//!    }
+
+    /**
+     * First, read in the default serializable data.
+     *
+     * Then, if <code>serialVersionOnStream</code> is less than 1, indicating that
+     * the stream was written by JDK 1.1,
+     * set the <code>int</code> fields such as <code>maximumIntegerDigits</code>
+     * to be equal to the <code>byte</code> fields such as <code>maxIntegerDigits</code>,
+     * since the <code>int</code> fields were not present in JDK 1.1.
+     * Finally, set serialVersionOnStream back to the maximum allowed value so that
+     * default serialization will work properly if this object is streamed out again.
+     *
+     * @since JDK 1.2
+     */
+    private void readObject(ObjectInputStream stream)
+         throws IOException, ClassNotFoundException
+    {
+        stream.defaultReadObject();
+        if (serialVersionOnStream < 1) {
+            // Didn't have additional int fields, reassign to use them.
+            maximumIntegerDigits = maxIntegerDigits;
+            minimumIntegerDigits = minIntegerDigits;
+            maximumFractionDigits = maxFractionDigits;
+            minimumFractionDigits = minFractionDigits;
+        }
+        serialVersionOnStream = currentSerialVersion;
+    }
+
+    /**
+     * Write out the default serializable data, after first setting
+     * the <code>byte</code> fields such as <code>maxIntegerDigits</code> to be
+     * equal to the <code>int</code> fields such as <code>maximumIntegerDigits</code>
+     * (or to <code>Byte.MAX_VALUE</code>, whichever is smaller), for compatibility
+     * with the JDK 1.1 version of the stream format.
+     *
+     * @since JDK 1.2
+     */
+    private void writeObject(ObjectOutputStream stream)
+         throws IOException
+    {
+        maxIntegerDigits = (maximumIntegerDigits > Byte.MAX_VALUE) ? Byte.MAX_VALUE :
+            (byte)maximumIntegerDigits;
+        minIntegerDigits = (minimumIntegerDigits > Byte.MAX_VALUE) ? Byte.MAX_VALUE :
+            (byte)minimumIntegerDigits;
+        maxFractionDigits = (maximumFractionDigits > Byte.MAX_VALUE) ? Byte.MAX_VALUE :
+            (byte)maximumFractionDigits;
+        minFractionDigits = (minimumFractionDigits > Byte.MAX_VALUE) ? Byte.MAX_VALUE :
+            (byte)minimumFractionDigits;
+        stream.defaultWriteObject();
+    }
+
+    /**
+     * Cache to hold the NumberPatterns of a Locale.
+     */
+    private static final Hashtable cachedLocaleData = new Hashtable(3);
+
+    // Constants used by factory methods to specify a style of format.
+    private static final int NUMBERSTYLE = 0;
+    private static final int CURRENCYSTYLE = 1;
+    private static final int PERCENTSTYLE = 2;
+    private static final int SCIENTIFICSTYLE = 3;
+
+    /**
+     * True if the the grouping (i.e. thousands) separator is used when
+     * formatting and parsing numbers.
+     *
+     * @serial
+     * @see #isGroupingUsed
+     */
+    private boolean groupingUsed = true;
+
+    /**
+     * The maximum number of digits allowed in the integer portion of a
+     * number.  <code>maxIntegerDigits</code> must be greater than or equal to
+     * <code>minIntegerDigits</code>.
+     * <p>
+     * <strong>Note:</strong> This field exists only for serialization
+     * compatibility with JDK 1.1.  In JDK 1.2 and higher, the new
+     * <code>int</code> field <code>maximumIntegerDigits</code> is used instead.
+     * When writing to a stream, <code>maxIntegerDigits</code> is set to
+     * <code>maximumIntegerDigits</code> or <code>Byte.MAX_VALUE</code>,
+     * whichever is smaller.  When reading from a stream, this field is used
+     * only if <code>serialVersionOnStream</code> is less than 1. 
+     *
+     * @serial
+     * @see #getMaximumIntegerDigits
+     */
+    private byte    maxIntegerDigits = 40;
+
+    /**
+     * The minimum number of digits allowed in the integer portion of a
+     * number.  <code>minimumIntegerDigits</code> must be less than or equal to
+     * <code>maximumIntegerDigits</code>.
+     * <p>
+     * <strong>Note:</strong> This field exists only for serialization
+     * compatibility with JDK 1.1.  In JDK 1.2 and higher, the new
+     * <code>int</code> field <code>minimumIntegerDigits</code> is used instead.
+     * When writing to a stream, <code>minIntegerDigits</code> is set to
+     * <code>minimumIntegerDigits</code> or <code>Byte.MAX_VALUE</code>,
+     * whichever is smaller.  When reading from a stream, this field is used
+     * only if <code>serialVersionOnStream</code> is less than 1. 
+     *
+     * @serial
+     * @see #getMinimumIntegerDigits
+     */
+    private byte    minIntegerDigits = 1;
+
+    /**
+     * The maximum number of digits allowed in the fractional portion of a
+     * number.  <code>maximumFractionDigits</code> must be greater than or equal to
+     * <code>minimumFractionDigits</code>.
+     * <p>
+     * <strong>Note:</strong> This field exists only for serialization
+     * compatibility with JDK 1.1.  In JDK 1.2 and higher, the new
+     * <code>int</code> field <code>maximumFractionDigits</code> is used instead.
+     * When writing to a stream, <code>maxFractionDigits</code> is set to
+     * <code>maximumFractionDigits</code> or <code>Byte.MAX_VALUE</code>,
+     * whichever is smaller.  When reading from a stream, this field is used
+     * only if <code>serialVersionOnStream</code> is less than 1. 
+     *
+     * @serial
+     * @see #getMaximumFractionDigits
+     */
+    private byte    maxFractionDigits = 3;    // invariant, >= minFractionDigits
+
+    /**
+     * The minimum number of digits allowed in the fractional portion of a
+     * number.  <code>minimumFractionDigits</code> must be less than or equal to
+     * <code>maximumFractionDigits</code>.
+     * <p>
+     * <strong>Note:</strong> This field exists only for serialization
+     * compatibility with JDK 1.1.  In JDK 1.2 and higher, the new
+     * <code>int</code> field <code>minimumFractionDigits</code> is used instead.
+     * When writing to a stream, <code>minFractionDigits</code> is set to
+     * <code>minimumFractionDigits</code> or <code>Byte.MAX_VALUE</code>,
+     * whichever is smaller.  When reading from a stream, this field is used
+     * only if <code>serialVersionOnStream</code> is less than 1. 
+     *
+     * @serial
+     * @see #getMinimumFractionDigits
+     */
+    private byte    minFractionDigits = 0;
+
+    /**
+     * True if this format will parse numbers as integers only.
+     *
+     * @serial
+     * @see #isParseIntegerOnly
+     */
+    private boolean parseIntegerOnly = false;
+
+    // new fields for 1.2.  byte is too small for integer digits.
+
+    /**
+     * The maximum number of digits allowed in the integer portion of a
+     * number.  <code>maximumIntegerDigits</code> must be greater than or equal to
+     * <code>minimumIntegerDigits</code>.
+     *
+     * @serial
+     * @since JDK 1.2
+     * @see #getMaximumIntegerDigits
+     */
+    private int    maximumIntegerDigits = 40;
+
+    /**
+     * The minimum number of digits allowed in the integer portion of a
+     * number.  <code>minimumIntegerDigits</code> must be less than or equal to
+     * <code>maximumIntegerDigits</code>.
+     *
+     * @serial
+     * @since JDK 1.2
+     * @see #getMinimumIntegerDigits
+     */
+    private int    minimumIntegerDigits = 1;
+
+    /**
+     * The maximum number of digits allowed in the fractional portion of a
+     * number.  <code>maximumFractionDigits</code> must be greater than or equal to
+     * <code>minimumFractionDigits</code>.
+     *
+     * @serial
+     * @since JDK 1.2
+     * @see #getMaximumFractionDigits
+     */
+    private int    maximumFractionDigits = 3;    // invariant, >= minFractionDigits
+
+    /**
+     * The minimum number of digits allowed in the fractional portion of a
+     * number.  <code>minimumFractionDigits</code> must be less than or equal to
+     * <code>maximumFractionDigits</code>.
+     *
+     * @serial
+     * @since JDK 1.2
+     * @see #getMinimumFractionDigits
+     */
+    private int    minimumFractionDigits = 0;
+
+    static final int currentSerialVersion = 1;
+
+    /**
+     * Describes the version of <code>NumberFormat</code> present on the stream.
+     * Possible values are:
+     * <ul>
+     * <li><b>0</b> (or uninitialized): the JDK 1.1 version of the stream format.
+     *     In this version, the <code>int</code> fields such as
+     *     <code>maximumIntegerDigits</code> were not present, and the <code>byte</code>
+     *     fields such as <code>maxIntegerDigits</code> are used instead.
+     *
+     * <li><b>1</b>: the JDK 1.2 version of the stream format.  The values of the
+     *     <code>byte</code> fields such as <code>maxIntegerDigits</code> are ignored,
+     *     and the <code>int</code> fields such as <code>maximumIntegerDigits</code>
+     *     are used instead.
+     * </ul>
+     * When streaming out a <code>NumberFormat</code>, the most recent format
+     * (corresponding to the highest allowable <code>serialVersionOnStream</code>)
+     * is always written.
+     *
+     * @serial
+     * @since JDK 1.2
+     */
+    private int serialVersionOnStream = currentSerialVersion;
+
+    // Removed "implements Cloneable" clause.  Needs to update serialization
+    // ID for backward compatibility.
+    static final long serialVersionUID = -2308460125733713944L;
+}
diff --git a/src/com/ibm/text/Replaceable.java b/src/com/ibm/text/Replaceable.java
new file mode 100755
index 0000000..d3b3170
--- /dev/null
+++ b/src/com/ibm/text/Replaceable.java
@@ -0,0 +1,111 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/Replaceable.java,v $ 
+ * $Date: 2000/04/25 17:17:37 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+/**
+ * <code>Replaceable</code> is an interface that supports the
+ * operation of replacing a substring with another piece of text.
+ * <code>Replaceable</code> is needed in order to change a piece of
+ * text while retaining style attributes.  For example, if the string
+ * "the <b>bold</b> font" has range (4, 8) replaced with "strong",
+ * then it becomes "the <b>strong</b> font".
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: Replaceable.java,v $ $Revision: 1.3 $ $Date: 2000/04/25 17:17:37 $
+ */
+public interface Replaceable {
+    /**
+     * Return the number of characters in the text.
+     * @return number of characters in text
+     */ 
+    int length();
+
+    /**
+     * Return the character at the given offset into the text.
+     * @param offset an integer between 0 and <code>length()</code>-1
+     * inclusive
+     * @return character of text at given offset
+     */
+    char charAt(int offset);
+
+    /**
+     * Copies characters from this object into the destination
+     * character array.  The first character to be copied is at index
+     * <code>srcStart</code>; the last character to be copied is at
+     * index <code>srcLimit-1</code> (thus the total number of
+     * characters to be copied is <code>srcLimit-srcStart</code>). The
+     * characters are copied into the subarray of <code>dst</code>
+     * starting at index <code>dstStart</code> and ending at index
+     * <code>dstStart + (srcLimit-srcStart) - 1</code>.
+     *
+     * @param srcStart the beginning index to copy, inclusive; <code>0
+     * <= start <= limit</code>.
+     * @param srcLimit the ending index to copy, exclusive;
+     * <code>start <= limit <= length()</code>.
+     * @param dst the destination array.
+     * @param dstStart the start offset in the destination array.
+     */
+    void getChars(int srcStart, int srcLimit, char dst[], int dstStart);
+
+    /**
+     * Replace a substring of this object with the given text.
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= length()</code>.
+     * @param text the text to replace characters <code>start</code>
+     * to <code>limit - 1</code>
+     */
+    void replace(int start, int limit, String text);
+
+    /**
+     * Replace a substring of this object with the given text.
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= length()</code>.
+     * @param chars the text to replace characters <code>start</code>
+     * to <code>limit - 1</code>
+     * @param charsStart the beginning index into <code>chars</code>,
+     * inclusive; <code>0 <= start <= limit</code>.
+     * @param charsLen the number of characters of <code>chars</code>.
+     */
+    void replace(int start, int limit, char[] chars,
+                 int charsStart, int charsLen);
+    // Note: We use length rather than limit to conform to StringBuffer
+    // and System.arraycopy.
+
+    /**
+     * Copy a substring of this object, retaining attribute (out-of-band)
+     * information.  This method is used to duplicate or reorder substrings.
+     * The destination index must not overlap the source range.
+     * Implementations that do not care about maintaining out-of-band
+     * information during copying may use the naive implementation:
+     *
+     * <pre> char[] text = new char[limit - start];
+     * getChars(start, limit, text, 0);
+     * replace(dest, dest, text, 0, limit - start);</pre>
+     * 
+     * @param start the beginning index, inclusive; <code>0 <= start <=
+     * limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit <=
+     * length()</code>.
+     * @param dest the destination index.  The characters from
+     * <code>start..limit-1</code> will be copied to <code>dest</code>.
+     * Implementations of this method may assume that <code>dest <= start ||
+     * dest >= limit</code>.
+     */
+    void copy(int start, int limit, int dest);
+}
diff --git a/src/com/ibm/text/ReplaceableString.java b/src/com/ibm/text/ReplaceableString.java
new file mode 100755
index 0000000..b383c2a
--- /dev/null
+++ b/src/com/ibm/text/ReplaceableString.java
@@ -0,0 +1,181 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/ReplaceableString.java,v $ 
+ * $Date: 2000/04/25 17:17:37 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+/**
+ * <code>ReplaceableString</code> is an adapter class that implements the
+ * <code>Replaceable</code> API around an ordinary <code>StringBuffer</code>.
+ *
+ * <p><em>Note:</em> This class does not support attributes and is not
+ * intended for general use.  Most clients will need to implement
+ * {@link Replaceable} in their text representation class.
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @see Replaceable
+ * @author Alan Liu
+ * @version $RCSfile: ReplaceableString.java,v $ $Revision: 1.3 $ $Date: 2000/04/25 17:17:37 $
+ */
+public class ReplaceableString implements Replaceable {
+    private StringBuffer buf;
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Construct a new object with the given initial contents.
+     * @param str initial contents
+     */
+    public ReplaceableString(String str) {
+        buf = new StringBuffer(str);
+    }
+
+    /**
+     * Construct a new object using <code>buf</code> for internal
+     * storage.  The contents of <code>buf</code> at the time of
+     * construction are used as the initial contents.  <em>Note!
+     * Modifications to <code>buf</code> will modify this object, and
+     * vice versa.</em>
+     * @param buf object to be used as internal storage
+     */
+    public ReplaceableString(StringBuffer buf) {
+        this.buf = buf;
+    }
+
+    /**
+     * Construct a new empty object.
+     */
+    public ReplaceableString() {
+        buf = new StringBuffer();
+    }
+
+    /**
+     * Return the contents of this object as a <code>String</code>.
+     * @return string contents of this object
+     */
+    public String toString() {
+        return buf.toString();
+    }
+
+    /**
+     * Return the number of characters contained in this object.
+     * <code>Replaceable</code> API.
+     */ 
+    public int length() {
+        return buf.length();
+    }
+
+    /**
+     * Return the character at the given position in this object.
+     * <code>Replaceable</code> API.
+     * @param offset offset into the contents, from 0 to
+     * <code>length()</code> - 1
+     */
+    public char charAt(int offset) {
+        return buf.charAt(offset);
+    }
+
+    /**
+     * Copies characters from this object into the destination
+     * character array.  The first character to be copied is at index
+     * <code>srcStart</code>; the last character to be copied is at
+     * index <code>srcLimit-1</code> (thus the total number of
+     * characters to be copied is <code>srcLimit-srcStart</code>). The
+     * characters are copied into the subarray of <code>dst</code>
+     * starting at index <code>dstStart</code> and ending at index
+     * <code>dstStart + (srcLimit-srcStart) - 1</code>.
+     *
+     * @param srcStart the beginning index to copy, inclusive; <code>0
+     * <= start <= limit</code>.
+     * @param srcLimit the ending index to copy, exclusive;
+     * <code>start <= limit <= length()</code>.
+     * @param dst the destination array.
+     * @param dstStart the start offset in the destination array.
+     */
+    public void getChars(int srcStart, int srcLimit, char dst[], int dstStart) {
+        buf.getChars(srcStart, srcLimit, dst, dstStart);
+    }
+
+    /**
+     * Replace zero or more characters with new characters.
+     * <code>Replaceable</code> API.
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= length()</code>.
+     * @param text new text to replace characters <code>start</code> to
+     * <code>limit - 1</code>
+     */
+    public void replace(int start, int limit, String text) {
+        if (start == limit) {
+            buf.insert(start, text);
+        } else {
+            char[] tail = null;
+            if (limit < buf.length()) {
+                tail = new char[buf.length() - limit];
+                buf.getChars(limit, buf.length(), tail, 0);
+            }
+            buf.setLength(start);
+            buf.append(text);
+            if (tail != null) {
+                buf.append(tail);
+            }
+        }
+    }
+
+    /**
+     * Replace a substring of this object with the given text.
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= length()</code>.
+     * @param chars the text to replace characters <code>start</code>
+     * to <code>limit - 1</code>
+     * @param charsStart the beginning index into <code>chars</code>,
+     * inclusive; <code>0 <= start <= limit</code>.
+     * @param charsLen the number of characters of <code>chars</code>.
+     */
+    public void replace(int start, int limit, char[] chars,
+                        int charsStart, int charsLen) {
+        char[] tail = null;
+        if (limit < buf.length()) {
+            tail = new char[buf.length() - limit];
+            buf.getChars(limit, buf.length(), tail, 0);
+        }
+        buf.setLength(start);
+        buf.append(chars, charsStart, charsLen);
+        if (tail != null) {
+            buf.append(tail);
+        }
+    }
+
+    /**
+     * Copy a substring of this object, retaining attribute (out-of-band)
+     * information.  This method is used to duplicate or reorder substrings.
+     * The destination index must not overlap the source range.
+     * 
+     * @param start the beginning index, inclusive; <code>0 <= start <=
+     * limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit <=
+     * length()</code>.
+     * @param dest the destination index.  The characters from
+     * <code>start..limit-1</code> will be copied to <code>dest</code>.
+     * Implementations of this method may assume that <code>dest <= start ||
+     * dest >= limit</code>.
+     */
+    public void copy(int start, int limit, int dest) {
+        char[] text = new char[limit - start];
+        getChars(start, limit, text, 0);
+        replace(dest, dest, text, 0, limit - start);
+    }
+}
diff --git a/src/com/ibm/text/RuleBasedBreakIterator.java b/src/com/ibm/text/RuleBasedBreakIterator.java
new file mode 100755
index 0000000..5058b25
--- /dev/null
+++ b/src/com/ibm/text/RuleBasedBreakIterator.java
@@ -0,0 +1,3074 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/RuleBasedBreakIterator.java,v $ 
+ * $Date: 2001/02/06 22:37:30 $ 
+ * $Revision: 1.11 $
+ *
+ *****************************************************************************************
+ */
+
+
+//ibm.597
+/*
+ * @(#)RuleBasedBreakIterator.java	1.3 99/04/07
+ *
+ * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
+ *
+ * The original version of this source code and documentation
+ * is copyrighted and owned by Taligent, Inc., a wholly-owned
+ * subsidiary of IBM. These materials are provided under terms
+ * of a License Agreement between Taligent and Sun. This technology
+ * is protected by multiple US and International patents.
+ *
+ * This notice and attribution to Taligent may not be removed.
+ * Taligent is a registered trademark of Taligent, Inc.
+ */
+
+package com.ibm.text;
+
+import com.ibm.util.CompactByteArray;
+import com.ibm.util.Utility;
+import java.util.Vector;
+import java.util.Stack;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+
+import java.io.*;
+
+/**
+ * <p>A subclass of BreakIterator whose behavior is specified using a list of rules.</p>
+ *
+ * <p>There are two kinds of rules, which are separated by semicolons: <i>substitutions</i>
+ * and <i>regular expressions.</i></p>
+ *
+ * <p>A substitution rule defines a name that can be used in place of an expression. It
+ * consists of a name, an equals sign, and an expression. (There can be no whitespace on 
+ * either side of the equals sign.)  To keep its syntactic meaning intact, the expression 
+ * must be enclosed in parentheses or square brackets. A substitution is visible after its 
+ * definition, and is filled in using simple textual substitution (when a substitution is
+ * used, its name is enclosed in curly braces.  The curly braces are optional in the
+ * substition's definition). Substitution definitions can contain other substitutions, as
+ * long as those substitutions have been defined first. Substitutions are generally used to
+ * make the regular expressions (which can get quite complex) shorter and easier to read.
+ * They typically define either character categories or commonly-used subexpressions.</p>
+ *
+ * <p>There is one special substitution.&nbsp; If the description defines a substitution
+ * called &quot;_ignore_&quot;, the expression must be a [] expression, and the
+ * expression defines a set of characters (the &quot;<em>ignore characters</em>&quot;) that
+ * will be transparent to the BreakIterator.&nbsp; A sequence of characters will break the
+ * same way it would if any ignore characters it contains are taken out.&nbsp; Break
+ * positions never occur before ignore characters, except when the character before the
+ * ignore characters is a line or paragraph terminator.</p>
+ *
+ * <p>A regular expression uses a syntax similar to the normal Unix regular-expression 
+ * syntax, and defines a sequence of characters to be kept together. With one significant 
+ * exception, the iterator uses a longest-possible-match algorithm when matching text to regular
+ * expressions. The iterator also treats descriptions containing multiple regular expressions
+ * as if they were ORed together (i.e., as if they were separated by |).</p>
+ *
+ * <p>The special characters recognized by the regular-expression parser are as follows:</p>
+ *
+ * <blockquote>
+ *   <table border="1" width="100%">
+ *     <tr>
+ *       <td width="6%">*</td>
+ *       <td width="94%">Specifies that the expression preceding the asterisk may occur any number
+ *       of times (including not at all).</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">+</td>
+ *       <td width="94%">Specifies that the expression preceding the asterisk may occur one or
+ *       more times, but must occur at least once.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">?</td>
+ *       <td width="94%">Specifies that the expression preceding the asterisk may occur once
+ *       or not at all (i.e., it makes the preceding expression optional).</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">()</td>
+ *       <td width="94%">Encloses a sequence of characters.  If followed by * or +, the 
+ *       sequence repeats.  If followed by ?, the sequence is optional.  Otherwise, the 
+ *       parentheses are just a grouping device and a way to delimit the ends of expressions 
+ *       containing |.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">|</td>
+ *       <td width="94%">Separates two alternative sequences of characters.&nbsp; Either one
+ *       sequence or the other, but not both, matches this expression.&nbsp; The | character can
+ *       only occur inside ().</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">.</td>
+ *       <td width="94%">Matches any character.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">*?</td>
+ *       <td width="94%">Specifies a non-greedy asterisk.&nbsp; *? works the same way as *, except
+ *       when there is overlap between the last group of characters in the expression preceding the
+ *       * and the first group of characters following the *.&nbsp; When there is this kind of
+ *       overlap, * will match the longest sequence of characters that match the expression before
+ *       the *, and *? will match the shortest sequence of characters matching the expression
+ *       before the *?.&nbsp; For example, if you have &quot;xxyxyyyxyxyxxyxyxyy&quot; in the text,
+ *       &quot;x[xy]*x&quot; will match through to the last x (i.e., &quot;<strong>xxyxyyyxyxyxxyxyx</strong>yy&quot;,
+ *       but &quot;x[xy]*?x&quot; will only match the first two xes (&quot;<strong>xx</strong>yxyyyxyxyxxyxyxyy&quot;).</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">[]</td>
+ *       <td width="94%">Specifies a group of alternative characters.&nbsp; A [] expression will
+ *       match any single character that is specified in the [] expression.&nbsp; For more on the
+ *       syntax of [] expressions, see below.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">/</td>
+ *       <td width="94%">Specifies where the break position should go if text matches this
+ *       expression.&nbsp; (e.g., &quot;[a-z]&#42;/[:Zs:]*[1-0]&quot; will match if the iterator sees a run
+ *       of letters, followed by a run of whitespace, followed by a digit, but the break position
+ *       will actually go before the whitespace).&nbsp; Expressions that don't contain / put the
+ *       break position at the end of the matching text.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">\</td>
+ *       <td width="94%">Escape character.&nbsp; The \ itself is ignored, but causes the next
+ *       character to be treated as literal character.&nbsp; This has no effect for many
+ *       characters, but for the characters listed above, this deprives them of their special
+ *       meaning.&nbsp; (There are no special escape sequences for Unicode characters, or tabs and
+ *       newlines; these are all handled by a higher-level protocol.&nbsp; In a Java string,
+ *       &quot;\n&quot; will be converted to a literal newline character by the time the
+ *       regular-expression parser sees it.&nbsp; Of course, this means that \ sequences that are
+ *       visible to the regexp parser must be written as \\ when inside a Java string.)&nbsp; All
+ *       characters in the ASCII range except for letters, digits, and control characters are
+ *       reserved characters to the parser and must be preceded by \ even if they currently don't
+ *       mean anything.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">!</td>
+ *       <td width="94%">If ! appears at the beginning of a regular expression, it tells the regexp
+ *       parser that this expression specifies the backwards-iteration behavior of the iterator,
+ *       and not its normal iteration behavior.&nbsp; This is generally only used in situations
+ *       where the automatically-generated backwards-iteration behavior doesn't produce
+ *       satisfactory results and must be supplemented with extra client-specified rules.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%"><em>(all others)</em></td>
+ *       <td width="94%">All other characters are treated as literal characters, which must match
+ *       the corresponding character(s) in the text exactly.</td>
+ *     </tr>
+ *   </table>
+ * </blockquote>
+ *
+ * <p>Within a [] expression, a number of other special characters can be used to specify
+ * groups of characters:</p>
+ *
+ * <blockquote>
+ *   <table border="1" width="100%">
+ *     <tr>
+ *       <td width="6%">-</td>
+ *       <td width="94%">Specifies a range of matching characters.&nbsp; For example
+ *       &quot;[a-p]&quot; matches all lowercase Latin letters from a to p (inclusive).&nbsp; The -
+ *       sign specifies ranges of continuous Unicode numeric values, not ranges of characters in a
+ *       language's alphabetical order: &quot;[a-z]&quot; doesn't include capital letters, nor does
+ *       it include accented letters such as a-umlaut.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">^</td>
+ *       <td width="94%">Inverts the expression.  All characters the expression includes are
+ *       excluded, and vice versa.  (i.e., it has the effect of saying "all Unicode characters
+ *       except...")  This character only has its special meaning when it's the first character
+ *       in the [] expression.  (Generally, you only see the ^ character inside a nested []
+ *       expression used in conjunction with the syntax below.)</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%"><em>(all others)</em></td>
+ *       <td width="94%">All other characters are treated as literal characters.&nbsp; (For
+ *       example, &quot;[aeiou]&quot; specifies just the letters a, e, i, o, and u.)</td>
+ *     </tr>
+ *   </table>
+ * </blockquote>
+ *
+ * <p>[] expressions can nest.  There are some other characters that have special meaning only
+ * when used in conjunction with nester [] expressions:</p>
+ *
+ * <blockquote>
+ *   <table border="1" width="100%">
+ *     <tr>
+ *       <td width="6%">::</td>
+ *       <td width="94%">Within a nested [] expression, a pair of colons containing a one- or 
+ *       two-letter code matches all characters in the corresponding Unicode category.&nbsp; 
+ *       The :: expression has to be the only thing inside the [] expression. The two-letter codes 
+ *       are the same as the two-letter codes in the Unicode database (for example, 
+ *       &quot;[[:Sc:][:Sm:]]&quot; matches all currency symbols and all math symbols).&nbsp; 
+ *       Specifying a one-letter code is the same as specifying all two-letter codes that begin 
+ *       with that letter (for example, &quot;[[:L:]]&quot; matches all letters, and is equivalent 
+ *       to &quot;[[:Lu:][:Ll:][:Lo:][:Lm:][:Lt:]]&quot;).&nbsp; Anything other than a valid 
+ *       two-letter Unicode category code or a single letter that begins a valide Unicode category 
+ *       code is illegal within the colons.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">|</td>
+ *       <td width="94%">Two nested [] expressions juxtaposed or separated only by a | character
+ *       are merged together into a single [] expression matching all the characters in either
+ *       of the original [] expressions.  (e.g., "[[ab][bc]]" is equivalent to "[abc]", and so
+ *       is "[[ab]|[bc]]". <b>NOTE:</b>  "[ab][bc]" is NOT the same thing as "[[ab][bc]]".  
+ *       The first expression will match two characters: an a or b followed by either another 
+ *       b or a c.  The second expression will match a single character, which may be a, b, or c.
+ *       The nesting is <em>required</em> for the expressions to merge together.</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">&</td>
+ *       <td width="94%">Two nested [] expressions with only & between them will match any 
+ *       character that appears in both nested [] expressions (this is a set intersection).
+ *       (e.g., "[[ab]&[bc]]" will only match the letter b.)</td>
+ *     </tr>
+ *     <tr>
+ *       <td width="6%">-</td>
+ *       <td width="94%">Two nested [] expressions with - between them will match any
+ *       character that appears in the first nested [] expression <em>but not</em> the
+ *       second one (this is an asymmetrical set difference).  (e.g., "[[:Sc:]-[$]]"
+ *       matches any currency symbol except the dollar sign.  "[[ab]-[bc]] will match
+ *       only the letter a.  This has exactly the same effect as "[[ab]&[^bc]]".)</td>
+ *     </tr>
+ *
+ * <p>For a more complete explanation, see <a
+ * href="http://www.ibm.com/java/education/boundaries/boundaries.html">http://www.ibm.com/java/education/boundaries/boundaries.html</a>.
+ * &nbsp; For examples, see the resource data (which is annotated).</p>
+ *
+ * @author Richard Gillam
+ * $RCSfile: RuleBasedBreakIterator.java,v $ $Revision: 1.11 $ $Date: 2001/02/06 22:37:30 $
+ */
+public class RuleBasedBreakIterator extends BreakIterator {
+
+    /**
+     * A token used as a character-category value to identify ignore characters
+     */
+    protected static final byte IGNORE = -1;
+
+    /**
+     * Special variable used to define ignore characters
+     */
+    private static final String IGNORE_VAR = "_ignore_";
+
+    /**
+     * The state number of the starting state
+     */
+    private static final short START_STATE = 1;
+
+    /**
+     * The state-transition value indicating "stop"
+     */
+    private static final short STOP_STATE = 0;
+
+    /**
+     * The textual description this iterator was created from
+     */
+    private String description;
+
+    /**
+     * A table that indexes from character values to character category numbers
+     */
+    private CompactByteArray charCategoryTable = null;
+
+    /**
+     * The table of state transitions used for forward iteration
+     */
+    private short[] stateTable = null;
+
+    /**
+     * The table of state transitions used to sync up the iterator with the
+     * text in backwards and random-access iteration
+     */
+    private short[] backwardsStateTable = null;
+
+    /**
+     * A list of flags indicating which states in the state table are accepting
+     * ("end") states
+     */
+    private boolean[] endStates = null;
+
+    /**
+     * A list of flags indicating which states in the state table are
+     * lookahead states (states which turn lookahead on and off)
+     */
+    private boolean[] lookaheadStates = null;
+
+    /**
+     * The number of character categories (and, thus, the number of columns in
+     * the state tables)
+     */
+    private int numCategories;
+
+    /**
+     * The character iterator through which this BreakIterator accesses the text
+     */
+    private CharacterIterator text = null;
+
+    //=======================================================================
+    // constructors
+    //=======================================================================
+
+    /**
+     * Constructs a RuleBasedBreakIterator according to the description
+     * provided.  If the description is malformed, throws an
+     * IllegalArgumentException.  Normally, instead of constructing a
+     * RuleBasedBreakIterator directory, you'll use the factory methods
+     * on BreakIterator to create one indirectly from a description
+     * in the framework's resource files.  You'd use this when you want
+     * special behavior not provided by the built-in iterators.
+     */
+    public RuleBasedBreakIterator(String description) {
+//System.out.println(">>>RBBI constructor");
+        this.description = description;
+
+        // the actual work is done by the Builder class
+        Builder builder = makeBuilder();
+        builder.buildBreakIterator();
+//System.out.println("<<<RBBI constructor");
+    }
+
+    /**
+     * Creates a Builder.
+     */
+    protected Builder makeBuilder() {
+        return new Builder();
+    }
+
+    //=======================================================================
+    // boilerplate
+    //=======================================================================
+    /**
+     * Clones this iterator.
+     * @return A newly-constructed RuleBasedBreakIterator with the same
+     * behavior as this one.
+     */
+    public Object clone()
+    {
+        RuleBasedBreakIterator result = (RuleBasedBreakIterator) super.clone();
+        if (text != null) {
+            result.text = (CharacterIterator) text.clone();
+        }
+        return result;
+    }
+
+    /**
+     * Returns true if both BreakIterators are of the same class, have the same
+     * rules, and iterate over the same text.
+     */
+    public boolean equals(Object that) {
+        try {
+            RuleBasedBreakIterator other = (RuleBasedBreakIterator) that;
+            if (!description.equals(other.description)) {
+                return false;
+            }
+            if (text == null) {
+                return other.text == null;
+            }
+            else {
+                return text.equals(other.text);
+            }
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Returns the description used to create this iterator
+     */
+    public String toString() {
+        return description;
+    }
+
+    /**
+     * Compute a hashcode for this BreakIterator
+     * @return A hash code
+     */
+    public int hashCode()
+    {
+        return description.hashCode();
+    }
+
+// DELETE ME BEFORE RELEASE!!!
+public void writeTablesToFile(FileOutputStream file, boolean littleEndian) throws IOException {
+    // NOTE: The format being written here is designed to be compatible with
+    // the ICU udata interfaces and may not be useful for much else
+    DataOutputStream out = new DataOutputStream(file);
+    
+// --- write the file header ---
+byte[] comment = "Copyright (C) 1999, International Business Machines Corp. and others. All Rights Reserved.".getBytes("US-ASCII");
+// write the size of the header (rounded up to the next 16-byte boundary)
+short headerSize = (short)(comment.length + 1 // length of comment
+                   + 24); // size of static header data
+short realHeaderSize = (short)(headerSize + ((headerSize % 16 == 0) ? 0 : 16 - (headerSize % 16)));
+writeSwappedShort(realHeaderSize, out, littleEndian);
+// write magic byte values
+out.write(0xda);
+out.write(0x27);
+// write size of core header data
+writeSwappedShort((short)20, out, littleEndian);
+// write reserved bytes
+writeSwappedShort((short)0, out, littleEndian);
+
+// write flag indicating whether we're big-endian
+if (littleEndian) {
+    out.write(0);
+} else {
+    out.write(1);
+}
+
+// write character set family code (0 means ASCII)
+out.write(0);
+// write size of UChar in this file
+out.write(2);
+// write reserved byte
+out.write(0);
+// write data format identifier (this is an array of bytes in ICU, so the value is NOT swapped!)
+out.writeInt(0x42524b53);   // ("BRKS")
+// write file format version number (NOT swapped!)
+out.writeInt(0);
+// write data version number (NOT swapped!)
+out.writeInt(0);
+// write copyright notice
+out.write(comment);
+out.write(0);
+// fill in padding bytes
+while (headerSize < realHeaderSize) {
+    out.write(0);
+    ++headerSize;
+}
+
+// --- write index to the file ---
+// write the number of columns in the state table
+writeSwappedInt(numCategories, out, littleEndian);
+int fileEnd = 36;
+// write the location in the file of the BreakIterator description string
+writeSwappedInt(fileEnd, out, littleEndian);
+fileEnd += (description.length() + 1) * 2;
+fileEnd += (fileEnd % 4 == 0) ? 0 : 4 - (fileEnd % 4);
+// write the location of the character category table's index
+writeSwappedInt(fileEnd, out, littleEndian);
+fileEnd += charCategoryTable.getIndexArray().length * 2;
+fileEnd += (fileEnd % 4 == 0) ? 0 : 4 - (fileEnd % 4);
+// write the location of the character category table's values array
+writeSwappedInt(fileEnd, out, littleEndian);
+fileEnd += charCategoryTable.getValueArray().length;
+fileEnd += (fileEnd % 4 == 0) ? 0 : 4 - (fileEnd % 4);
+// write the location of the forward state table
+writeSwappedInt(fileEnd, out, littleEndian);
+fileEnd += stateTable.length * 2;
+fileEnd += (fileEnd % 4 == 0) ? 0 : 4 - (fileEnd % 4);
+// write the location of the backward state table
+writeSwappedInt(fileEnd, out, littleEndian);
+fileEnd += backwardsStateTable.length * 2;
+fileEnd += (fileEnd % 4 == 0) ? 0 : 4 - (fileEnd % 4);
+// write the location of the endStates flags
+writeSwappedInt(fileEnd, out, littleEndian);
+fileEnd += endStates.length;
+fileEnd += (fileEnd % 4 == 0) ? 0 : 4 - (fileEnd % 4);
+// write the location of the lookaheadStates flags
+writeSwappedInt(fileEnd, out, littleEndian);
+fileEnd += lookaheadStates.length;
+fileEnd += (fileEnd % 4 == 0) ? 0 : 4 - (fileEnd % 4);
+// write the length of the file
+writeSwappedInt(fileEnd, out, littleEndian);
+
+// --- write the actual data ---
+// write description string
+for (int i = 0; i < description.length(); i++)
+    writeSwappedShort((short)description.charAt(i), out, littleEndian);
+out.writeShort(0);
+if ((description.length() + 1) % 2 == 1)
+    out.writeShort(0);
+// write character category table
+char[] temp1 = charCategoryTable.getIndexArray();
+for (int i = 0; i < temp1.length; i++)
+    writeSwappedShort((short)temp1[i], out, littleEndian);
+if (temp1.length % 2 == 1)
+    out.writeShort(0);
+byte[] temp2 = charCategoryTable.getValueArray();
+out.write(temp2);
+switch (temp2.length % 4) {
+    case 1: out.write(0);
+    case 2: out.write(0);
+    case 3: out.write(0);
+    default: break;
+}
+// write the state transition tables
+for (int i = 0; i < stateTable.length; i++)
+    writeSwappedShort(stateTable[i], out, littleEndian);
+if (stateTable.length % 2 == 1)
+    out.writeShort(0);
+for (int i = 0; i < backwardsStateTable.length; i++)
+    writeSwappedShort(backwardsStateTable[i], out, littleEndian);
+if (backwardsStateTable.length % 2 == 1)
+    out.writeShort(0);
+// write the flag arrays
+for (int i = 0; i < endStates.length; i++)
+    out.writeBoolean(endStates[i]);
+switch (endStates.length % 4) {
+    case 1: out.write(0);
+    case 2: out.write(0);
+    case 3: out.write(0);
+    default: break;
+}
+for (int i = 0; i < lookaheadStates.length; i++)
+    out.writeBoolean(lookaheadStates[i]);
+switch (lookaheadStates.length % 4) {
+    case 1: out.write(0);
+    case 2: out.write(0);
+    case 3: out.write(0);
+    default: break;
+}
+}
+    
+protected void writeSwappedShort(short x, DataOutputStream out, boolean littleEndian)
+throws IOException{
+    if (littleEndian) {
+        out.write((byte)(x & 0xff));
+        out.write((byte)((x >> 8) & 0xff));
+    }
+    else {
+        out.write((byte)((x >> 8) & 0xff));
+        out.write((byte)(x & 0xff));
+    }
+}
+
+protected void writeSwappedInt(int x, DataOutputStream out, boolean littleEndian)
+throws IOException {
+    if (littleEndian) {
+        out.write((byte)(x & 0xff));
+        out.write((byte)((x >> 8) & 0xff));
+        out.write((byte)((x >> 16) & 0xff));
+        out.write((byte)((x >> 24) & 0xff));
+    }
+    else {
+        out.write((byte)((x >> 24) & 0xff));
+        out.write((byte)((x >> 16) & 0xff));
+        out.write((byte)((x >> 8) & 0xff));
+        out.write((byte)(x & 0xff));
+    }
+}
+    
+    //=======================================================================
+    // BreakIterator overrides
+    //=======================================================================
+
+    /**
+     * Sets the current iteration position to the beginning of the text.
+     * (i.e., the CharacterIterator's starting offset).
+     * @return The offset of the beginning of the text.
+     */
+    public int first() {
+        CharacterIterator t = getText();
+
+        t.first();
+        return t.getIndex();
+    }
+
+    /**
+     * Sets the current iteration position to the end of the text.
+     * (i.e., the CharacterIterator's ending offset).
+     * @return The text's past-the-end offset.
+     */
+    public int last() {
+        CharacterIterator t = getText();
+
+        // I'm not sure why, but t.last() returns the offset of the last character,
+        // rather than the past-the-end offset
+        t.setIndex(t.getEndIndex());
+        return t.getIndex();
+    }
+
+    /**
+     * Advances the iterator either forward or backward the specified number of steps.
+     * Negative values move backward, and positive values move forward.  This is
+     * equivalent to repeatedly calling next() or previous().
+     * @param n The number of steps to move.  The sign indicates the direction
+     * (negative is backwards, and positive is forwards).
+     * @return The character offset of the boundary position n boundaries away from
+     * the current one.
+     */
+    public int next(int n) {
+        int result = current();
+        while (n > 0) {
+            result = handleNext();
+            --n;
+        }
+        while (n < 0) {
+            result = previous();
+            ++n;
+        }
+        return result;
+    }
+
+    /**
+     * Advances the iterator to the next boundary position.
+     * @return The position of the first boundary after this one.
+     */
+    public int next() {
+        return handleNext();
+    }
+
+    /**
+     * Advances the iterator backwards, to the last boundary preceding this one.
+     * @return The position of the last boundary position preceding this one.
+     */
+    public int previous() {
+        // if we're already sitting at the beginning of the text, return DONE
+        CharacterIterator text = getText();
+        if (current() == text.getBeginIndex()) {
+            return BreakIterator.DONE;
+        }
+
+        // set things up.  handlePrevious() will back us up to some valid
+        // break position before the current position (we back our internal
+        // iterator up one step to prevent handlePrevious() from returning
+        // the current position), but not necessarily the last one before
+        // where we started
+        int start = current();
+        text.previous();
+        int lastResult = handlePrevious();
+        int result = lastResult;
+
+        // iterate forward from the known break position until we pass our
+        // starting point.  The last break position before the starting
+        // point is our return value
+        while (result != BreakIterator.DONE && result < start) {
+            lastResult = result;
+            result = handleNext();
+        }
+
+        // set the current iteration position to be the last break position
+        // before where we started, and then return that value
+        text.setIndex(lastResult);
+        return lastResult;
+    }
+
+    /**
+     * Throw IllegalArgumentException unless begin <= offset < end.
+     */
+    protected static final void checkOffset(int offset, CharacterIterator text) {
+        if (offset < text.getBeginIndex() || offset > text.getEndIndex()) {
+            throw new IllegalArgumentException("offset out of bounds");
+        }
+    }
+
+    /**
+     * Sets the iterator to refer to the first boundary position following
+     * the specified position.
+     * @offset The position from which to begin searching for a break position.
+     * @return The position of the first break after the current position.
+     */
+    public int following(int offset) {
+        // if the offset passed in is already past the end of the text,
+        // just return DONE
+        CharacterIterator text = getText();
+        if (offset == text.getEndIndex()) {
+            return BreakIterator.DONE;
+        }
+        checkOffset(offset, text);
+
+        // otherwise, set our internal iteration position (temporarily)
+        // to the position passed in.  If this is the _beginning_ position,
+        // then we can just use next() to get our return value
+        text.setIndex(offset);
+        if (offset == text.getBeginIndex()) {
+            return handleNext();
+        }
+
+        // otherwise, we have to sync up first.  Use handlePrevious() to back
+        // us up to a known break position before the specified position (if
+        // we can determine that the specified position is a break position,
+        // we don't back up at all).  This may or may not be the last break
+        // position at or before our starting position.  Advance forward
+        // from here until we've passed the starting position.  The position
+        // we stop on will be the first break position after the specified one.
+        int result = handlePrevious();
+        while (result != BreakIterator.DONE && result <= offset) {
+            result = handleNext();
+        }
+        return result;
+    }
+
+    /**
+     * Sets the iterator to refer to the last boundary position before the
+     * specified position.
+     * @offset The position to begin searching for a break from.
+     * @return The position of the last boundary before the starting position.
+     */
+    public int preceding(int offset) {
+        // if we start by updating the current iteration position to the
+        // position specified by the caller, we can just use previous()
+        // to carry out this operation
+        CharacterIterator text = getText();
+        checkOffset(offset, text);
+        text.setIndex(offset);
+        return previous();
+    }
+
+    /**
+     * Returns true if the specfied position is a boundary position.  As a side
+     * effect, leaves the iterator pointing to the first boundary position at
+     * or after "offset".
+     * @param offset the offset to check.
+     * @return True if "offset" is a boundary position.
+     */
+    public boolean isBoundary(int offset) {
+        CharacterIterator text = getText();
+        checkOffset(offset, text);
+        if (offset == text.getBeginIndex()) {
+            return true;
+        }
+
+        // to check whether this is a boundary, we can use following() on the
+        // position before the specified one and return true if the position we
+        // get back is the one the user specified
+        else {
+            return following(offset - 1) == offset;
+        }
+    }
+
+    /**
+     * Returns the current iteration position.
+     * @return The current iteration position.
+     */
+    public int current() {
+        return getText().getIndex();
+    }
+
+    /**
+     * Return a CharacterIterator over the text being analyzed.  This version
+     * of this method returns the actual CharacterIterator we're using internally.
+     * Changing the state of this iterator can have undefined consequences.  If
+     * you need to change it, clone it first.
+     * @return An iterator over the text being analyzed.
+     */
+    public CharacterIterator getText() {
+        // The iterator is initialized pointing to no text at all, so if this
+        // function is called while we're in that state, we have to fudge an
+        // an iterator to return.
+        if (text == null) {
+            text = new StringCharacterIterator("");
+        }
+        return text;
+    }
+
+    /**
+     * Set the iterator to analyze a new piece of text.  This function resets
+     * the current iteration position to the beginning of the text.
+     * @param newText An iterator over the text to analyze.
+     */
+    public void setText(CharacterIterator newText) {
+        // Test text to see if we need to wrap it in a SafeCharIterator:
+        int end = newText.getEndIndex();
+        newText.setIndex(end);
+        if (newText.getIndex() != end) {
+            // failed - wrap in correct implementation
+            text = new SafeCharIterator(newText);
+        }
+        else {
+            text = newText;
+        }
+        text.first();
+    }
+
+
+    //=======================================================================
+    // implementation
+    //=======================================================================
+
+    /**
+     * This method is the actual implementation of the next() method.  All iteration
+     * vectors through here.  This method initializes the state machine to state 1
+     * and advances through the text character by character until we reach the end
+     * of the text or the state machine transitions to state 0.  We update our return
+     * value every time the state machine passes through a possible end state.
+     */
+    protected int handleNext() {
+        // if we're already at the end of the text, return DONE.
+        CharacterIterator text = getText();
+        if (text.getIndex() == text.getEndIndex()) {
+            return BreakIterator.DONE;
+        }
+
+        // no matter what, we always advance at least one character forward
+        int result = text.getIndex() + 1;
+        int lookaheadResult = 0;
+
+        // begin in state 1
+        int state = START_STATE;
+        int category;
+        char c = text.current();
+        char lastC = c;
+        int lastCPos = 0;
+
+        // if the first character in this segment is an ignore character (which can happen
+        // when it's either the first character in the file or follows a mandatory break
+        // character), and the first non-ignore character isn't a glue character, always
+        // put a break between the ignore characters and the rest of the text
+        if (lookupCategory(c) == IGNORE) {
+            while (lookupCategory(c) == IGNORE)
+                c = text.next();
+            
+            if (Character.getType(c) == Character.NON_SPACING_MARK || Character.getType(c)
+                    == Character.ENCLOSING_MARK) {
+                return text.getIndex();
+            }
+        }
+        
+        // loop until we reach the end of the text or transition to state 0
+        while (c != CharacterIterator.DONE && state != STOP_STATE) {
+
+            // look up the current character's character category (which tells us
+            // which column in the state table to look at)
+            category = lookupCategory(c);
+
+            // if the character isn't an ignore character, look up a state
+            // transition in the state table
+            if (category != IGNORE) {
+                state = lookupState(state, category);
+            }
+
+            // if the state we've just transitioned to is a lookahead state,
+            // (but not also an end state), save its position.  If it's
+            // both a lookahead state and an end state, update the break position
+            // to the last saved lookup-state position
+            if (lookaheadStates[state]) {
+                if (endStates[state]) {
+                    if (lookaheadResult > 0) {
+                        result = lookaheadResult;
+                    }
+                    else {
+                        result = text.getIndex() + 1;
+                    }
+                }
+                else {
+                    lookaheadResult = text.getIndex() + 1;
+                }
+            }
+
+            // otherwise, if the state we've just transitioned to is an accepting
+            // state, update the break position to be the current iteration position
+            else {
+                if (endStates[state]) {
+                    result = text.getIndex() + 1;
+                }
+            }
+            
+            // keep track of the last "real" character we saw.  If this character isn't an
+            // ignore character, take note of it and its position in the text
+            if (category != IGNORE && state != STOP_STATE) {
+                lastC = c;
+                lastCPos = text.getIndex();
+            }
+            c = text.next();
+        }
+
+        // if we've run off the end of the text, and the very last character took us into
+        // a lookahead state, advance the break position to the lookahead position
+        // (the theory here is that if there are no characters at all after the lookahead
+        // position, that always matches the lookahead criteria)
+        if (c == CharacterIterator.DONE && lookaheadResult == text.getEndIndex()) {
+            result = lookaheadResult;
+        }
+        
+        // if the last character we saw before the one that took us into the stop state
+        // was a mandatory breaking character, then the break position goes right after it
+        // (this is here so that breaks come before, rather than after, a string of
+        // ignore characters when they follow a mandatory break character)
+        else if ("\n\r\f\u2028\u2029".indexOf(lastC) != -1) {
+            result = lastCPos + 1;
+        }
+
+        text.setIndex(result);
+        return result;
+    }
+
+    /**
+     * This method backs the iterator back up to a "safe position" in the text.
+     * This is a position that we know, without any context, must be a break position.
+     * The various calling methods then iterate forward from this safe position to
+     * the appropriate position to return.  (For more information, see the description
+     * of buildBackwardsStateTable() in RuleBasedBreakIterator.Builder.)
+     */
+    protected int handlePrevious() {
+        CharacterIterator text = getText();
+        int state = START_STATE;
+        int category = 0;
+        int lastCategory = 0;
+        char c = text.current();
+
+        // loop until we reach the beginning of the text or transition to state 0
+        while (c != CharacterIterator.DONE && state != STOP_STATE) {
+//System.out.print(" " + text.getIndex());
+
+            // save the last character's category and look up the current
+            // character's category
+            lastCategory = category;
+            category = lookupCategory(c);
+
+            // if the current character isn't an ignore character, look up a
+            // state transition in the backwards state table
+            if (category != IGNORE) {
+                state = lookupBackwardState(state, category);
+            }
+
+            // then advance one character backwards
+            c = text.previous();
+        }
+
+        // if we didn't march off the beginning of the text, we're either one or two
+        // positions away from the real break position.  (One because of the call to
+        // previous() at the end of the loop above, and another because the character
+        // that takes us into the stop state will always be the character BEFORE
+        // the break position.)
+        if (c != CharacterIterator.DONE) {
+            if (lastCategory != IGNORE) {
+                text.setIndex(text.getIndex() + 2);
+            }
+            else {
+                text.next();
+            }
+        }
+//System.out.print(",");
+        return text.getIndex();
+    }
+
+//static int visitedChars = 0;
+    /**
+     * Looks up a character's category (i.e., its category for breaking purposes,
+     * not its Unicode category)
+     */
+    protected int lookupCategory(char c) {
+//++visitedChars;
+        return charCategoryTable.elementAt(c);
+    }
+
+/*
+static void printVisitedCharCount() {
+System.out.println("Total number of characters visited = " + visitedChars);
+visitedChars = 0;
+}
+*/
+
+    /**
+     * Given a current state and a character category, looks up the
+     * next state to transition to in the state table.
+     */
+    protected int lookupState(int state, int category) {
+        return stateTable[state * numCategories + category];
+    }
+
+    /**
+     * Given a current state and a character category, looks up the
+     * next state to transition to in the backwards state table.
+     */
+    protected int lookupBackwardState(int state, int category) {
+        return backwardsStateTable[state * numCategories + category];
+    }
+
+    /**
+     * This is a helper function for computing the intersection of
+     * two <code>UnicodeSet</code> objects.
+     * @param a, b the two <code>UnicodeSet</code>s to intersect
+     * @return a new <code>UnicodeSet</code> which is the intersection of a and b
+     */
+    private static UnicodeSet intersection(UnicodeSet a, UnicodeSet b)
+    {
+        UnicodeSet result = new UnicodeSet(a);
+            
+        result.retainAll(b);
+            
+        return result;
+    }
+
+    //=======================================================================
+    // RuleBasedBreakIterator.Builder
+    //=======================================================================
+    /**
+     * The Builder class has the job of constructing a RuleBasedBreakIterator from a
+     * textual description.  A Builder is constructed by RuleBasedBreakIterator's
+     * constructor, which uses it to construct the iterator itself and then throws it
+     * away.
+     * <p>The construction logic is separated out into its own class for two primary
+     * reasons:
+     * <ul><li>The construction logic is quite sophisticated and large.  Separating it
+     * out into its own class means the code must only be loaded into memory while a
+     * RuleBasedBreakIterator is being constructed, and can be purged after that.
+     * <li>There is a fair amount of state that must be maintained throughout the
+     * construction process that is not needed by the iterator after construction.
+     * Separating this state out into another class prevents all of the functions that
+     * construct the iterator from having to have really long parameter lists,
+     * (hopefully) contributing to readability and maintainability.</ul>
+     * <p>It'd be really nice if this could be an independent class rather than an
+     * inner class, because that would shorten the source file considerably, but
+     * making Builder an inner class of RuleBasedBreakIterator allows it direct access
+     * to RuleBasedBreakIterator's private members, which saves us from having to
+     * provide some kind of "back door" to the Builder class that could then also be
+     * used by other classes.
+     */
+    protected class Builder {
+        /**
+         * A temporary holding place used for calculating the character categories.
+         * This object contains UnicodeSet objects.
+         */
+        protected Vector categories = null;
+
+        /**
+         * A table used to map parts of regexp text to lists of character categories,
+         * rather than having to figure them out from scratch each time
+         */
+        protected Hashtable expressions = null;
+
+        /**
+         * A temporary holding place for the list of ignore characters
+         */
+        protected UnicodeSet ignoreChars = null;
+
+        /**
+         * A temporary holding place where the forward state table is built
+         */
+        protected Vector tempStateTable = null;
+
+        /**
+         * A list of all the states that have to be filled in with transitions to the
+         * next state that is created.  Used when building the state table from the
+         * regular expressions.
+         */
+        protected Vector decisionPointList = null;
+
+        /**
+         * A stack for holding decision point lists.  This is used to handle nested
+         * parentheses and braces in regexps.
+         */
+        protected Stack decisionPointStack = null;
+
+        /**
+         * A list of states that loop back on themselves.  Used to handle .*?
+         */
+        protected Vector loopingStates = null;
+
+        /**
+         * Looping states actually have to be backfilled later in the process
+         * than everything else.  This is where a the list of states to backfill
+         * is accumulated.  This is also used to handle .*?
+         */
+        protected Vector statesToBackfill = null;
+
+        /**
+         * A list mapping pairs of state numbers for states that are to be combined
+         * to the state number of the state representing their combination.  Used
+         * in the process of making the state table deterministic to prevent
+         * infinite recursion.
+         */
+        protected Vector mergeList = null;
+
+        /**
+         * A flag that is used to indicate when the list of looping states can
+         * be reset.
+         */
+        protected boolean clearLoopingStates = false;
+
+        /**
+         * A bit mask used to indicate a bit in the table's flags column that marks a
+         * state as an accepting state.
+         */
+        protected static final int END_STATE_FLAG = 0x8000;
+
+        /**
+         * A bit mask used to indicate a bit in the table's flags column that marks a
+         * state as one the builder shouldn't loop to any looping states
+         */
+        protected static final int DONT_LOOP_FLAG = 0x4000;
+
+        /**
+         * A bit mask used to indicate a bit in the table's flags column that marks a
+         * state as a lookahead state.
+         */
+        protected static final int LOOKAHEAD_STATE_FLAG = 0x2000;
+
+        /**
+         * A bit mask representing the union of the mask values listed above.
+         * Used for clearing or masking off the flag bits.
+         */
+        protected static final int ALL_FLAGS = END_STATE_FLAG | LOOKAHEAD_STATE_FLAG
+                | DONT_LOOP_FLAG;
+
+        /**
+         * No special construction is required for the Builder.
+         */
+        public Builder() {
+        }
+
+        /**
+         * This is the main function for setting up the BreakIterator's tables.  It
+         * just vectors different parts of the job off to other functions.
+         */
+        public void buildBreakIterator() {
+            Vector tempRuleList = buildRuleList(description);
+            buildCharCategories(tempRuleList);
+            buildStateTable(tempRuleList);
+            buildBackwardsStateTable(tempRuleList);
+        }
+        
+        /**
+         * Thus function has three main purposes:
+         * <ul><li>Perform general syntax checking on the description, so the rest of the
+         * build code can assume that it's parsing a legal description.
+         * <li>Split the description into separate rules
+         * <li>Perform variable-name substitutions (so that no one else sees variable names)
+         * </ul>
+         */
+        private Vector buildRuleList(String description) {
+            // invariants:
+            // - parentheses must be balanced: ()[]{}<>
+            // - nothing can be nested inside {}
+            // - nothing can be nested inside [] except more []s
+            // - pairs of ()[]{}<> must not be empty
+            // - ; can only occur at the outer level
+            // - | can only appear inside ()
+            // - only one = or / can occur in a single rule
+            // - = and / cannot both occur in the same rule
+            // - the right-hand side of a = expression must be enclosed in [] or ()
+            // - * may not occur at the beginning of a rule, nor may it follow
+            //   =, /, (, (, |, }, ;, or *
+            // - ? may only follow *
+            // - the rule list must contain at least one / rule
+            // - no rule may be empty
+            // - all printing characters in the ASCII range except letters and digits
+            //   are reserved and must be preceded by \
+            // - ! may only occur at the beginning of a rule
+
+            // set up a vector to contain the broken-up description (each entry in the
+            // vector is a separate rule) and a stack for keeping track of opening
+            // punctuation
+            Vector tempRuleList = new Vector();
+            Stack parenStack = new Stack();
+
+            int p = 0;
+            int ruleStart = 0;
+            char c = '\u0000';
+            char lastC = '\u0000';
+            char lastOpen = '\u0000';
+            boolean haveEquals = false;
+            boolean havePipe = false;
+            boolean sawVarName = false;
+            boolean sawIllegalChar = false;
+            int illegalCharPos = 0;
+            final String charsThatCantPrecedeAsterisk = "=/<(|>*+?;\u0000";
+
+            // if the description doesn't end with a semicolon, tack a semicolon onto the end
+            if (description.length() != 0 && description.charAt(description.length() - 1) != ';') {
+                description = description + ";";
+            }
+
+            // for each character, do...
+            while (p < description.length()) {
+                c = description.charAt(p);
+                switch (c) {
+                    // if the character is opening punctuation, verify that no nesting
+                    // rules are broken, and push the character onto the stack
+                    case '{':
+                    case '[':
+                    case '(':
+                        if (lastOpen == '{') {
+                            error("Can't nest brackets inside {}", p, description);
+                        }
+                        if (lastOpen == '[' && c != '[') {
+                            error("Can't nest anything in [] but []", p, description);
+                        }
+
+                        // if we see { anywhere except on the left-hand side of =,
+                        // we must be seeing a variable name that was never defined
+                        if (c == '{' && (haveEquals || havePipe)) {
+                            error("Unknown variable name", p, description);
+                        }
+
+                        lastOpen = c;
+                        parenStack.push(new Character(c));
+                        if (c == '{') {
+                            sawVarName = true;
+                        }
+                        break;
+
+                    // if the character is closing punctuation, verify that it matches the
+                    // last opening punctuation we saw, and that the brackets contain
+                    // something, then pop the stack
+                    case '}':
+                    case ']':
+                    case ')':
+                        char expectedClose = '\u0000';
+                        switch (lastOpen) {
+                            case '{':
+                                expectedClose = '}';
+                                break;
+                            case '[':
+                                expectedClose = ']';
+                                break;
+                            case '(':
+                                expectedClose = ')';
+                                break;
+                        }
+                        if (c != expectedClose) {
+                            error("Unbalanced parentheses", p, description);
+                        }
+                        if (lastC == lastOpen) {
+                            error("Parens don't contain anything", p, description);
+                        }
+                        parenStack.pop();
+                        if (!parenStack.empty()) {
+                            lastOpen = ((Character)(parenStack.peek())).charValue();
+                        }
+                        else {
+                            lastOpen = '\u0000';
+                        }
+
+                        break;
+
+                    // if the character is an asterisk, make sure it occurs in a place
+                    // where an asterisk can legally go
+                    case '*': case '+': case '?':
+                        if (charsThatCantPrecedeAsterisk.indexOf(lastC) != -1
+                                && (c != '?' || lastC != '*')) {
+                            error("Misplaced *, +, or ?", p, description);
+                        }
+                        break;
+
+                    // if the character is an equals sign, make sure we haven't seen another
+                    // equals sign or a slash yet
+                    case '=':
+                        if (haveEquals || havePipe) {
+                            error("More than one = or / in rule", p, description);
+                        }
+                        haveEquals = true;
+                        sawIllegalChar = false;
+                        break;
+
+                    // if the character is a slash, make sure we haven't seen another slash
+                    // or an equals sign yet
+                    case '/':
+                        if (haveEquals || havePipe) {
+                            error("More than one = or / in rule", p, description);
+                        }
+                        if (sawVarName) {
+                            error("Unknown variable name", p, description);
+                        }
+                        havePipe = true;
+                        break;
+
+                    // if the character is an exclamation point, make sure it occurs only
+                    // at the beginning of a rule
+                    case '!':
+                        if (lastC != ';' && lastC != '\u0000') {
+                            error("! can only occur at the beginning of a rule", p, description);
+                        }
+                        break;
+
+                    // if the character is a backslash, skip the character that follows it
+                    // (it'll get treated as a literal character)
+                    case '\\':
+                        ++p;
+                        break;
+
+                    // we don't have to do anything special on a period
+                    case '.':
+                        break;
+
+                    // if the character is a syntax character that can only occur
+                    // inside [], make sure that it does in fact only occur inside []
+                    // (or in a variable name)
+                    case '^':
+                    case '-':
+                    case ':':
+                    case '&':
+                        if (lastOpen != '[' && lastOpen != '{' && !sawIllegalChar) {
+                            sawIllegalChar = true;
+                            illegalCharPos = p;
+                        }
+                        break;
+
+                    // if the character is a semicolon, do the following...
+                    case ';':
+                        // if we saw any illegal characters along the way, throw
+                        // an error
+                        if (sawIllegalChar) {
+                            error("Illegal character", illegalCharPos, description);
+                        }
+                    
+                        // make sure the rule contains something and that there are no
+                        // unbalanced parentheses or brackets
+                        if (lastC == ';' || lastC == '\u0000') {
+                            error("Empty rule", p, description);
+                        }
+                        if (!parenStack.empty()) {
+                            error("Unbalanced parenheses", p, description);
+                        }
+
+                        if (parenStack.empty()) {
+                            // if the rule contained an = sign, call processSubstitution()
+                            // to replace the substitution name with the substitution text
+                            // wherever it appears in the description
+                            if (haveEquals) {
+                                description = processSubstitution(description.substring(ruleStart,
+                                                p), description, p + 1);
+                            }
+                            else {
+                                // otherwise, check to make sure the rule doesn't reference
+                                // any undefined substitutions
+                                if (sawVarName) {
+                                    error("Unknown variable name", p, description);
+                                }
+
+                                // then add it to tempRuleList
+                                tempRuleList.addElement(description.substring(ruleStart, p));
+                            }
+
+                            // and reset everything to process the next rule
+                            ruleStart = p + 1;
+                            haveEquals = havePipe = sawVarName = sawIllegalChar = false;
+                        }
+                        break;
+
+                    // if the character is a vertical bar, check to make sure that it
+                    // occurs inside a () expression and that the character that precedes
+                    // it isn't also a vertical bar
+                    case '|':
+                        if (lastC == '|') {
+                            error("Empty alternative", p, description);
+                        }
+                        if (parenStack.empty() || lastOpen != '(') {
+                            error("Misplaced |", p, description);
+                        }
+                        break;
+
+                    // if the character is anything else (escaped characters are
+                    // skipped and don't make it here), it's an error
+                    default:
+                        if (c >= ' ' && c < '\u007f' && !Character.isLetter(c)
+                                && !Character.isDigit(c) && !sawIllegalChar) {
+                            sawIllegalChar = true;
+                            illegalCharPos = p;
+                        }
+                        break;
+                }
+                lastC = c;
+                ++p;
+            }
+            if (tempRuleList.size() == 0) {
+                error("No valid rules in description", p, description);
+            }
+            return tempRuleList;
+        }
+
+        /**
+         * This function performs variable-name substitutions.  First it does syntax
+         * checking on the variable-name definition.  If it's syntactically valid, it
+         * then goes through the remainder of the description and does a simple
+         * find-and-replace of the variable name with its text.  (The variable text
+         * must be enclosed in either [] or () for this to work.)
+         */
+        protected String processSubstitution(String substitutionRule, String description,
+                        int startPos) {
+            // isolate out the text on either side of the equals sign
+            String replace;
+            String replaceWith;
+            int equalPos = substitutionRule.indexOf('=');
+            if (substitutionRule.charAt(0) != '$') {
+                error("Missing '$' on left-hand side of =", startPos, description);
+            }
+            replace = substitutionRule.substring(1, equalPos);
+            replaceWith = substitutionRule.substring(equalPos + 1);
+
+            // check to see whether the substitution name is something we've declared
+            // to be "special".  For RuleBasedBreakIterator itself, this is IGNORE_VAR.
+            // This function takes care of any extra processing that has to be done
+            // with "special" substitution names.
+            handleSpecialSubstitution(replace, replaceWith, startPos, description);
+
+            // perform various other syntax checks on the rule
+            if (replaceWith.length() == 0) {
+                error("Nothing on right-hand side of =", startPos, description);
+            }
+            if (replace.length() == 0) {
+                error("Nothing on left-hand side of =", startPos, description);
+            }
+            if (!(replaceWith.charAt(0) == '[' && replaceWith.charAt(replaceWith.length() - 1)
+                    == ']') && !(replaceWith.charAt(0) == '(' && replaceWith.charAt(
+                    replaceWith.length() - 1) == ')')) {
+                error("Illegal right-hand side for =", startPos, description);
+            }
+
+            // now go through the rest of the description (which hasn't been broken up
+            // into separate rules yet) and replace every occurrence of the
+            // substitution name with the substitution body
+            replace = "$" + replace;
+            StringBuffer result = new StringBuffer();
+            result.append(description.substring(0, startPos));
+            int lastPos = startPos;
+            int pos = description.indexOf(replace, startPos);
+            while (pos != -1) {
+                // [liu] Check that the string we've found isn't a redefinition
+                // of the variable.
+                if (description.charAt(pos-1) == ';' &&
+                    description.charAt(pos + replace.length()) == '=') {
+                    error("Attempt to redefine " + replace, pos, description);
+                }
+                result.append(description.substring(lastPos, pos));
+                result.append(replaceWith);
+                lastPos = pos + replace.length();
+                pos = description.indexOf(replace, lastPos);
+            }
+            result.append(description.substring(lastPos));
+            return result.toString();
+        }
+
+        /**
+         * This function defines a protocol for handling substitution names that
+         * are "special," i.e., that have some property beyond just being
+         * substitutions.  At the RuleBasedBreakIterator level, we have one
+         * special substitution name, IGNORE_VAR.  Subclasses can override this
+         * function to add more.  Any special processing that has to go on beyond
+         * that which is done by the normal substitution-processing code is done
+         * here.
+         */
+        protected void handleSpecialSubstitution(String replace, String replaceWith,
+                    int startPos, String description) {
+            // if we get a definition for a substitution called IGNORE_VAR, it defines
+            // the ignore characters for the iterator.  Check to make sure the expression
+            // is a [] expression, and if it is, parse it and store the characters off
+            // to the side.
+            if (replace.equals(IGNORE_VAR)) {
+                if (replaceWith.charAt(0) == '(') {
+                    error("Ignore group can't be enclosed in (", startPos, description);
+                }
+                ignoreChars = new UnicodeSet(replaceWith, false);
+            }
+        }
+
+        /**
+         * This function builds the character category table.  On entry,
+         * tempRuleList is a vector of break rules that has had variable names substituted.
+         * On exit, the charCategoryTable data member has been initialized to hold the
+         * character category table, and tempRuleList's rules have been munged to contain
+         * character category numbers everywhere a literal character or a [] expression
+         * originally occurred.
+         */
+        protected void buildCharCategories(Vector tempRuleList) {
+            int bracketLevel = 0;
+            int p = 0;
+            int lineNum = 0;
+
+            // build hash table of every literal character or [] expression in the rule list
+            // and derive a UnicodeSet object representing the characters each refers to
+            expressions = new Hashtable();
+            while (lineNum < tempRuleList.size()) {
+                String line = (String)(tempRuleList.elementAt(lineNum));
+                p = 0;
+                while (p < line.length()) {
+                    char c = line.charAt(p);
+                    switch (c) {
+                        // skip over all syntax characters except [
+                        case '(': case ')': case '*': case '.': case '/':
+                        case '|': case ';': case '?': case '!': case '+':
+                            break;
+
+                        // for [, find the matching ] (taking nested [] pairs into account)
+                        // and add the whole expression to the expression list
+                        case '[':
+                            int q = p + 1;
+                            ++bracketLevel;
+                            while (q < line.length() && bracketLevel != 0) {
+                                c = line.charAt(q);
+                                if (c == '[') {
+                                    ++bracketLevel;
+                                }
+                                else if (c == ']') {
+                                    --bracketLevel;
+                                }
+                                ++q;
+                            }
+                            if (expressions.get(line.substring(p, q)) == null) {
+                                expressions.put(line.substring(p, q), new UnicodeSet(line.
+                                                substring(p, q), false));
+//Test.debugPrintln("1. Adding expression: " + line.substring(p, q));
+                            }
+                            p = q - 1;
+                            break;
+
+                        // for \ sequences, just move to the next character and treat
+                        // it as a single character
+                        case '\\':
+                            ++p;
+                            c = line.charAt(p);
+                            // DON'T break; fall through into "default" clause
+
+                        // for an isolated single character, add it to the expression list
+                        default:
+                            UnicodeSet s = new UnicodeSet();
+                            s.add(line.charAt(p));
+                            expressions.put(line.substring(p, p + 1), s);
+//Test.debugPrintln("2. Adding expression: " + line.substring(p, p + 1));
+                            break;
+                    }
+                    ++p;
+                }
+                ++lineNum;
+            }
+
+            // create the temporary category table (which is a vector of UnicodeSet objects)
+            categories = new Vector();
+            if (ignoreChars != null) {
+                categories.addElement(ignoreChars);
+            }
+            else {
+                categories.addElement(new UnicodeSet());
+            }
+            ignoreChars = null;
+
+            // this is a hook to allow subclasses to add categories on their own
+            mungeExpressionList(expressions);
+
+            // Derive the character categories.  Go through the existing character categories
+            // looking for overlap.  Any time there's overlap, we create a new character
+            // category for the characters that overlapped and remove them from their original
+            // category.  At the end, any characters that are left in the expression haven't
+            // been mentioned in any category, so another new category is created for them.
+            // For example, if the first expression is [abc], then a, b, and c will be placed
+            // into a single character category.  If the next expression is [bcd], we will first
+            // remove b and c from their existing category (leaving a behind), create a new
+            // category for b and c, and then create another new category for d (which hadn't
+            // been mentioned in the previous expression).
+            // At no time should a character ever occur in more than one character category.
+
+            // for each expression in the expressions list, do...
+            Enumeration iter = expressions.elements();
+            while (iter.hasMoreElements()) {
+                // initialize the working char set to the chars in the current expression
+                UnicodeSet work = new UnicodeSet((UnicodeSet)iter.nextElement());
+
+                // for each category in the category list, do...
+                for (int j = categories.size() - 1; !work.isEmpty() && j > 0; j--) {
+
+                    // if there's overlap between the current working set of chars
+                    // and the current category...
+                    UnicodeSet cat = (UnicodeSet)(categories.elementAt(j));
+                    UnicodeSet overlap = intersection(work, cat);
+                    
+                    if (!overlap.isEmpty()) {
+                        // if the current category is not a subset of the current
+                        // working set of characters, then remove the overlapping
+                        // characters from the current category and create a new
+                        // category for them
+                        if (!overlap.equals(cat)) {
+                            cat.removeAll(overlap);
+                            categories.addElement(overlap);
+                        }
+                        
+                        // and always remove the overlapping characters from the current
+                        // working set of characters
+                        work.removeAll(overlap);
+                    }
+                }
+
+                // if there are still characters left in the working char set,
+                // add a new category containing them
+                if (!work.isEmpty()) {
+                    categories.addElement(work);
+                }
+            }
+
+            // we have the ignore characters stored in position 0.  Make an extra pass through
+            // the character category list and remove anything from the ignore list that shows
+            // up in some other category
+            UnicodeSet allChars = new UnicodeSet();
+            for (int i = 1; i < categories.size(); i++)
+                allChars.addAll((UnicodeSet)(categories.elementAt(i)));
+            UnicodeSet ignoreChars = (UnicodeSet)(categories.elementAt(0));
+            ignoreChars.removeAll(allChars);
+
+            // now that we've derived the character categories, go back through the expression
+            // list and replace each UnicodeSet object with a String that represents the
+            // character categories that expression refers to.  The String is encoded: each
+            // character is a character category number (plus 0x100 to avoid confusing them
+            // with syntax characters in the rule grammar)
+            iter = expressions.keys();
+            while (iter.hasMoreElements()) {
+                String key = (String)iter.nextElement();
+                UnicodeSet cs = (UnicodeSet)expressions.get(key);
+                StringBuffer cats = new StringBuffer();
+
+                // for each category...
+                for (int j = 1; j < categories.size(); j++) {
+                    UnicodeSet cat = new UnicodeSet((UnicodeSet) categories.elementAt(j));
+                    
+                    // if the current expression contains characters in that category...
+                    if (cs.containsAll(cat)) {
+
+                        // then add the encoded category number to the String for this
+                        // expression
+                        cats.append((char)(0x100 + j));
+                        if (cs.equals(cat)) {
+                            break;
+                        }
+                    }
+                }
+
+                // once we've finished building the encoded String for this expression,
+                // replace the UnicodeSet object with it
+                expressions.put(key, cats.toString());
+            }
+
+            // and finally, we turn the temporary category table into a permanent category
+            // table, which is a CompactByteArray. (we skip category 0, which by definition
+            // refers to all characters not mentioned specifically in the rules)
+            charCategoryTable = new CompactByteArray((byte)0);
+
+            // for each category...
+            for (int i = 0; i < categories.size(); i++) {
+                UnicodeSet chars = (UnicodeSet)(categories.elementAt(i));
+                int n = chars.getRangeCount();
+
+                // go through the character ranges in the category one by one...
+                for (int j = 0; j < n; ++j) {
+                    // and set the corresponding elements in the CompactArray accordingly
+                    if (i != 0) {
+                        charCategoryTable.setElementAt((char)chars.getRangeStart(j),
+                            (char)chars.getRangeEnd(j), (byte)i);
+                    }
+
+                    // (category 0 is special-- it's the hiding place for the ignore
+                    // characters, whose real category number in the CompactArray is
+                    // -1 [this is because category 0 contains all characters not
+                    // specifically mentioned anywhere in the rules] )
+                    else {
+                        charCategoryTable.setElementAt((char)chars.getRangeStart(j),
+                            (char)chars.getRangeEnd(j), IGNORE);
+                    }
+                }
+            }
+
+            // once we've populated the CompactArray, compact it
+            charCategoryTable.compact();
+
+            // initialize numCategories
+            numCategories = categories.size();
+        }
+
+        protected void mungeExpressionList(Hashtable expressions) {
+            // empty in the parent class.  This function provides a hook for subclasses
+            // to mess with the character category table.
+        }
+
+        /**
+         * This is the function that builds the forward state table.  Most of the real
+         * work is done in parseRule(), which is called once for each rule in the
+         * description.
+         */
+        private void buildStateTable(Vector tempRuleList) {
+            // initialize our temporary state table, and fill it with two states:
+            // state 0 is a dummy state that allows state 1 to be the starting state
+            // and 0 to represent "stop".  State 1 is added here to seed things
+            // before we start parsing
+            tempStateTable = new Vector();
+            tempStateTable.addElement(new short[numCategories + 1]);
+            tempStateTable.addElement(new short[numCategories + 1]);
+
+            // call parseRule() for every rule in the rule list (except those which
+            // start with !, which are actually backwards-iteration rules)
+            int n = tempRuleList.size();
+            for (int i = 0; i < tempRuleList.size(); i++) {
+                String rule = (String)tempRuleList.elementAt(i);
+                if (rule.charAt(0) != '!') {
+                    parseRule(rule, true);
+                }
+            }
+
+            // finally, use finishBuildingStateTable() to minimize the number of
+            // states in the table and perform some other cleanup work
+            finishBuildingStateTable(true);
+/*
+System.out.print("C:\t");
+for (int i = 0; i < numCategories; i++)
+System.out.print(Integer.toString(i) + "\t");
+System.out.println(); System.out.print("=================================================");
+for (int i = 0; i < stateTable.length; i++) {
+if (i % numCategories == 0) {
+System.out.println();
+if (endStates[i / numCategories])
+System.out.print("*");
+else
+System.out.print(" ");
+if (lookaheadStates[i / numCategories]) {
+System.out.print("%");
+}
+else
+System.out.print(" ");
+System.out.print(Integer.toString(i / numCategories) + ":\t");
+}
+if (stateTable[i] == 0) System.out.print(".\t"); else System.out.print(Integer.toString(stateTable[i]) + "\t");
+}
+System.out.println();
+*/
+    }
+
+        /**
+         * This is where most of the work really happens.  This routine parses a single
+         * rule in the rule description, adding and modifying states in the state
+         * table according to the new expression.  The state table is kept deterministic
+         * throughout the whole operation, although some ugly postprocessing is needed
+         * to handle the *? token.
+         */
+        private void parseRule(String rule, boolean forward) {
+            // algorithm notes:
+            //   - The basic idea here is to read successive character-category groups
+            //   from the input string.  For each group, you create a state and point
+            //   the appropriate entries in the previous state to it.  This produces a
+            //   straight line from the start state to the end state.  The ?, +, *, and (|)
+            //   idioms produce branches in this straight line.  These branches (states
+            //   that can transition to more than one other state) are called "decision
+            //   points."  A list of decision points is kept.  This contains a list of
+            //   all states that can transition to the next state to be created.  For a
+            //   straight line progression, the only thing in the decision-point list is
+            //   the current state.  But if there's a branch, the decision-point list
+            //   will contain all of the beginning points of the branch when the next
+            //   state to be created represents the end point of the branch.  A stack is
+            //   used to save decision point lists in the presence of nested parentheses
+            //   and the like.  For example, when a { is encountered, the current decision
+            //   point list is saved on the stack and restored when the corresponding }
+            //   is encountered.  This way, after the } is read, the decision point list
+            //   will contain both the state right before the } _and_ the state before
+            //   the whole {} expression.  Both of these states can transition to the next
+            //   state after the {} expression.
+            //   - one complication arises when we have to stamp a transition value into
+            //   an array cell that already contains one.  The updateStateTable() and
+            //   mergeStates() functions handle this case.  Their basic approach is to
+            //   create a new state that combines the two states that conflict and point
+            //   at it when necessary.  This happens recursively, so if the merged states
+            //   also conflict, they're resolved in the same way, and so on.  There are
+            //   a number of tests aimed at preventing infinite recursion.
+            //   - another complication arises with repeating characters.  It's somewhat
+            //   ambiguous whether the user wants a greedy or non-greedy match in these cases.
+            //   (e.g., whether "[a-z]*abc" means the SHORTEST sequence of letters ending in
+            //   "abc" or the LONGEST sequence of letters ending in "abc".  We've adopted
+            //   the *? to mean "shortest" and * by itself to mean "longest".  (You get the
+            //   same result with both if there's no overlap between the repeating character
+            //   group and the group immediately following it.)  Handling the *? token is
+            //   rather complicated and involves keeping track of whether a state needs to
+            //   be merged (as described above) or merely overwritten when you update one of
+            //   its cells, and copying the contents of a state that loops with a *? token
+            //   into some of the states that follow it after the rest of the table-building
+            //   process is complete ("backfilling").
+            // implementation notes:
+            //   - This function assumes syntax checking has been performed on the input string
+            //   prior to its being passed in here.  It assumes that parentheses are
+            //   balanced, all literal characters are enclosed in [] and turned into category
+            //   numbers, that there are no illegal characters or character sequences, and so
+            //   on.  Violation of these invariants will lead to undefined behavior.
+            //   - It'd probably be better to use linked lists rather than Vector and Stack
+            //   to maintain the decision point list and stack.  I went for simplicity in
+            //   this initial implementation.  If performance is critical enough, we can go
+            //   back and fix this later.
+            //   -There are a number of important limitations on the *? token.  It does not work
+            //   right when followed by a repeating character sequence (e.g., ".*?(abc)*")
+            //   (although it does work right when followed by a single repeating character).
+            //   It will not always work right when nested in parentheses or braces (although
+            //   sometimes it will).  It also will not work right if the group of repeating
+            //   characters and the group of characters that follows overlap partially
+            //   (e.g., "[a-g]*?[e-j]").  None of these capabilites was deemed necessary for
+            //   describing breaking rules we know about, so we left them out for
+            //   expeditiousness.
+            //   - Rules such as "[a-z]*?abc;" will be treated the same as "[a-z]*?aa*bc;"--
+            //   that is, if the string ends in "aaaabc", the break will go before the first
+            //   "a" rather than the last one.  Both of these are limitations in the design
+            //   of RuleBasedBreakIterator and not limitations of the rule parser.
+
+            int p = 0;
+            int currentState = 1;   // don't use state number 0; 0 means "stop"
+            int lastState = currentState;
+            String pendingChars = "";
+
+            decisionPointStack = new Stack();
+            decisionPointList = new Vector();
+            loopingStates = new Vector();
+            statesToBackfill = new Vector();
+
+            short[] state;
+            boolean sawEarlyBreak = false;
+
+            // if we're adding rules to the backward state table, mark the initial state
+            // as a looping state
+            if (!forward) {
+                loopingStates.addElement(new Integer(1));
+            }
+
+            // put the current state on the decision point list before we start
+            decisionPointList.addElement(new Integer(currentState)); // we want currentState to
+                                                                     // be 1 here...
+            currentState = tempStateTable.size() - 1;   // but after that, we want it to be
+                                                        // 1 less than the state number of the next state
+            while (p < rule.length()) {
+                char c = rule.charAt(p);
+                clearLoopingStates = false;
+
+                // this section handles literal characters, escaped characters (which are
+                // effectively literal characters too), the . token, and [] expressions
+                if (c == '['
+                    || c == '\\'
+                    || Character.isLetter(c)
+                    || Character.isDigit(c)
+                    || c < ' '
+                    || c == '.'
+                    || c >= '\u007f') {
+
+                    // if we're not on a period, isolate the expression and look up
+                    // the corresponding category list
+                    if (c != '.') {
+                        int q = p;
+
+                        // if we're on a backslash, the expression is the character
+                        // after the backslash
+                        if (c == '\\') {
+                            q = p + 2;
+                            ++p;
+                        }
+
+                        // if we're on an opening bracket, scan to the closing bracket
+                        // to isolate the expression
+                        else if (c == '[') {
+                            int bracketLevel = 1;
+                            while (bracketLevel > 0) {
+                                ++q;
+                                c = rule.charAt(q);
+                                if (c == '[') {
+                                    ++bracketLevel;
+                                }
+                                else if (c == ']') {
+                                    --bracketLevel;
+                                }
+                                else if (c == '\\') {
+                                    ++q;
+                                }
+                            }
+                            ++q;
+                        }
+
+                        // otherwise, the expression is just the character itself
+                        else {
+                            q = p + 1;
+                        }
+
+                        // look up the category list for the expression and store it
+                        // in pendingChars
+                        pendingChars = (String)expressions.get(rule.substring(p, q));
+
+                        // advance the current position past the expression
+                        p = q - 1;
+                    }
+
+                    // if the character we're on is a period, we end up down here
+                    else {
+                        int rowNum = ((Integer)decisionPointList.lastElement()).intValue();
+                        state = (short[])tempStateTable.elementAt(rowNum);
+
+                        // if the period is followed by an asterisk, then just set the current
+                        // state to loop back on itself
+                        if (p + 1 < rule.length() && rule.charAt(p + 1) == '*' && state[0] != 0) {
+                            decisionPointList.addElement(new Integer(state[0]));
+                            pendingChars = "";
+                            ++p;
+                            if (p + 1 < rule.length() && rule.charAt(p + 1) == '?') {
+//System.out.println("Saw *?");
+                                setLoopingStates(decisionPointList, decisionPointList);
+                                ++p;
+                            }
+//System.out.println("Saw .*");
+                        }
+
+                        // otherwise, fabricate a category list ("pendingChars") with
+                        // every category in it
+                        else {
+                            StringBuffer temp = new StringBuffer();
+                            for (int i = 0; i < numCategories; i++)
+                                temp.append((char)(i + 0x100));
+                            pendingChars = temp.toString();
+                        }
+                    }
+
+                    // we'll end up in here for all expressions except for .*, which is
+                    // special-cased above
+                    if (pendingChars.length() != 0) {
+
+                        // if the expression is followed by an asterisk or a question mark,
+                        //  then push a copy of the current decision point list onto the stack
+                        if (p + 1 < rule.length() && (
+                            rule.charAt(p + 1) == '*' ||
+                            rule.charAt(p + 1) == '?'
+                        )) {
+                            decisionPointStack.push(decisionPointList.clone());
+                        }
+
+                        // create a new state, add it to the list of states to backfill
+                        // if we have looping states to worry about, set its "don't make
+                        // me an accepting state" flag if we've seen a slash, and add
+                        // it to the end of the state table
+                        int newState = tempStateTable.size();
+                        if (loopingStates.size() != 0) {
+                            statesToBackfill.addElement(new Integer(newState));
+                        }
+                        state = new short[numCategories + 1];
+                        if (sawEarlyBreak) {
+                            state[numCategories] = DONT_LOOP_FLAG;
+                        }
+                        tempStateTable.addElement(state);
+
+                        // update everybody in the decision point list to point to
+                        // the new state (this also performs all the reconciliation
+                        // needed to make the table deterministic), then clear the
+                        // decision point list
+                        updateStateTable(decisionPointList, pendingChars, (short)newState);
+                        decisionPointList.removeAllElements();
+
+                        // add all states created since the last literal character we've
+                        // seen to the decision point list
+                        lastState = currentState;
+                        do {
+                            ++currentState;
+                            decisionPointList.addElement(new Integer(currentState));
+                        } while (currentState + 1 < tempStateTable.size());
+                    }
+                }
+
+                // a * or a + denotes a repeating character or group, and a ? denotes an
+                // optional character group. (*, + and ? after () are handled separately below.)
+                if (c == '+' || c == '*' || c == '?') {
+                    // when there's a * or a +, update the current state to loop back on itself
+                    // on the character categories that caused us to enter this state
+                    if (c == '*' || c == '+') {
+                        // Note: we process one state at a time because updateStateTable
+                        // may add new states, and we want to process them as well.
+                        for (int i = lastState + 1; i < tempStateTable.size(); i++) {
+                            Vector temp = new Vector();
+                            temp.addElement(new Integer(i));
+                            updateStateTable(temp, pendingChars, (short)(lastState + 1));
+                        }
+                        
+                        // If we just added any new states, add them to the decison point list
+                        // Note: it might be a good idea to avoid adding new states to the
+                        // decision point list in more than one place...
+                        while (currentState + 1 < tempStateTable.size()) {
+                            decisionPointList.addElement(new Integer(++currentState));
+                        }
+                    }
+
+                    // for * and ? pop the top element off the decision point stack and merge
+                    // it with the current decision point list (this causes the divergent
+                    // paths through the state table to come together again on the next
+                    // new state)
+                    if (c == '*' || c == '?') {
+                        Vector temp = (Vector)decisionPointStack.pop();
+                        for (int i = 0; i < decisionPointList.size(); i++)
+                            temp.addElement(decisionPointList.elementAt(i));
+                        decisionPointList = temp;
+
+                        // a ? after a * modifies the behavior of * in cases where there is overlap
+                        // between the set of characters that repeat and the characters which follow.
+                        // Without the ?, all states following the repeating state, up to a state which
+                        // is reached by a character that doesn't overlap, will loop back into the
+                        // repeating state.  With the ?, the mark states following the *? DON'T loop
+                        // back into the repeating state.  Thus, "[a-z]*xyz" will match the longest
+                        // sequence of letters that ends in "xyz," while "[a-z]*? will match the
+                        // _shortest_ sequence of letters that ends in "xyz".
+                        // We use extra bookkeeping to achieve this effect, since everything else works
+                        // according to the "longest possible match" principle.  The basic principle
+                        // is that transitions out of a looping state are written in over the looping
+                        // value instead of being reconciled, and that we copy the contents of the
+                        // looping state into empty cells of all non-terminal states that follow the
+                        // looping state.
+//System.out.println("c = " + c + ", p = " + p + ", rule.length() = " + rule.length());
+                        if (c == '*' && p + 1 < rule.length() && rule.charAt(p + 1) == '?') {
+//System.out.println("Saw *?");
+                            setLoopingStates(decisionPointList, decisionPointList);
+                            ++p;
+                        }
+                    }
+                }
+
+                // a ( marks the beginning of a sequence of characters.  Parentheses can either
+                // contain several alternative character sequences (i.e., "(ab|cd|ef)"), or
+                // they can contain a sequence of characters that can repeat (i.e., "(abc)*").  Thus,
+                // A () group can have multiple entry and exit points.  To keep track of this,
+                // we reserve TWO spots on the decision-point stack.  The top of the stack is
+                // the list of exit points, which becomes the current decision point list when
+                // the ) is reached.  The next entry down is the decision point list at the
+                // beginning of the (), which becomes the current decision point list at every
+                // entry point.
+                // In addition to keeping track of the exit points and the active decision
+                // points before the ( (i.e., the places from which the () can be entered),
+                // we need to keep track of the entry points in case the expression loops
+                // (i.e., is followed by *).  We do that by creating a dummy state in the
+                // state table and adding it to the decision point list (BEFORE it's duplicated
+                // on the stack).  Nobody points to this state, so it'll get optimized out
+                // at the end.  It exists only to hold the entry points in case the ()
+                // expression loops.
+                if (c == '(') {
+
+                    // add a new state to the state table to hold the entry points into
+                    // the () expression
+                    tempStateTable.addElement(new short[numCategories + 1]);
+
+                    // we have to adjust lastState and currentState to account for the
+                    // new dummy state
+                    lastState = currentState;
+                    ++currentState;
+
+                    // add the current state to the decision point list (add it at the
+                    // BEGINNING so we can find it later)
+                    decisionPointList.insertElementAt(new Integer(currentState), 0);
+
+                    // finally, push a copy of the current decision point list onto the
+                    // stack (this keeps track of the active decision point list before
+                    // the () expression), followed by an empty decision point list
+                    // (this will hold the exit points)
+                    decisionPointStack.push(decisionPointList.clone());
+                    decisionPointStack.push(new Vector());
+                }
+
+                // a | separates alternative character sequences in a () expression.  When
+                // a | is encountered, we add the current decision point list to the exit-point
+                // list, and restore the decision point list to its state prior to the (.
+                if (c == '|') {
+
+                    // pick out the top two decision point lists on the stack
+                    Vector oneDown = (Vector)decisionPointStack.pop();
+                    Vector twoDown = (Vector)decisionPointStack.peek();
+                    decisionPointStack.push(oneDown);
+
+                    // append the current decision point list to the list below it
+                    // on the stack (the list of exit points), and restore the
+                    // current decision point list to its state before the () expression
+                    for (int i = 0; i < decisionPointList.size(); i++)
+                        oneDown.addElement(decisionPointList.elementAt(i));
+                    decisionPointList = (Vector)twoDown.clone();
+                }
+
+                // a ) marks the end of a sequence of characters.  We do one of two things
+                // depending on whether the sequence repeats (i.e., whether the ) is followed
+                // by *):  If the sequence doesn't repeat, then the exit-point list is merged
+                // with the current decision point list and the decision point list from before
+                // the () is thrown away.  If the sequence does repeat, then we fish out the
+                // state we were in before the ( and copy all of its forward transitions
+                // (i.e., every transition added by the () expression) into every state in the
+                // exit-point list and the current decision point list.  The current decision
+                // point list is then merged with both the exit-point list AND the saved version
+                // of the decision point list from before the ().  Then we throw out the *.
+                if (c == ')') {
+
+                    // pull the exit point list off the stack, merge it with the current
+                    // decision point list, and make the merged version the current
+                    // decision point list
+                    Vector exitPoints = (Vector)decisionPointStack.pop();
+                    for (int i = 0; i < decisionPointList.size(); i++)
+                        exitPoints.addElement(decisionPointList.elementAt(i));
+                    decisionPointList = exitPoints;
+
+                    // if the ) isn't followed by a *, + or ?, then all we have to do is throw
+                    // away the other list on the decision point stack, and we're done
+                    if (p + 1 >= rule.length() || (
+                            rule.charAt(p + 1) != '*' &&
+                            rule.charAt(p + 1) != '+' &&
+                            rule.charAt(p + 1) != '?')
+                    ) {
+                        decisionPointStack.pop();
+                    }
+
+                    // but if the sequence is conditional or it repeats,
+                    // we have a lot more work to do...
+                    else {
+
+                        // now exitPoints and decisionPointList have to point to equivalent
+                        // vectors, but not the SAME vector
+                        exitPoints = (Vector)decisionPointList.clone();
+
+                        // pop the original decision point list off the stack
+                        Vector temp = (Vector)decisionPointStack.pop();
+
+                        // we squirreled away the row number of our entry point list
+                        // at the beginning of the original decision point list.  Fish
+                        // that state number out and retrieve the entry point list
+                        int tempStateNum = ((Integer)temp.firstElement()).intValue();
+                        short[] tempState = (short[])tempStateTable.elementAt(tempStateNum);
+
+                        // merge the original decision point list with the current
+                        // decision point list
+                        if (rule.charAt(p + 1) == '?' || rule.charAt(p + 1) == '*') {
+                            for (int i = 0; i < decisionPointList.size(); i++)
+                                temp.addElement(decisionPointList.elementAt(i));
+                            decisionPointList = temp;
+                        }
+
+                        // finally, for * and + copy every forward reference from the entry point
+                        // list into every state in the new decision point list
+                        if (rule.charAt(p + 1) == '+' || rule.charAt(p + 1) == '*') {
+                            for (int i = 0; i < tempState.length; i++) {
+                                if (tempState[i] > tempStateNum) {
+                                    updateStateTable(exitPoints,
+                                                     new Character((char)(i + 0x100)).toString(),
+                                                     tempState[i]);
+                                }
+                            }
+                        }
+
+                        // update lastState and currentState, and throw away the *, +, or ?
+                        lastState = currentState;
+                        currentState = tempStateTable.size() - 1;
+                        ++p;
+                    }
+                }
+
+                // a / marks the position where the break is to go if the character sequence
+                // matches this rule.  We update the flag word of every state on the decision
+                // point list to mark them as ending states, and take note of the fact that
+                // we've seen the slash
+                if (c == '/') {
+                    sawEarlyBreak = true;
+                    for (int i = 0; i < decisionPointList.size(); i++) {
+                        state = (short[])tempStateTable.elementAt(((Integer)decisionPointList.
+                                        elementAt(i)).intValue());
+                        state[numCategories] |= LOOKAHEAD_STATE_FLAG;
+                    }
+                }
+
+                // if we get here without executing any of the above clauses, we have a
+                // syntax error.  However, for now we just ignore the offending character
+                // and move on
+/*
+debugPrintln("====Parsed \"" + rule.substring(0, p + 1) + "\"...");
+System.out.println("      currentState = " + currentState);
+debugPrintVectorOfVectors("      decisionPointStack:", "        ", decisionPointStack);
+debugPrintVector("        ", decisionPointList);
+debugPrintVector("      loopingStates = ", loopingStates);
+debugPrintVector("      statesToBackfill = ", statesToBackfill);
+System.out.println("      sawEarlyBreak = " + sawEarlyBreak);
+debugPrintTempStateTable();
+*/
+
+                // clearLoopingStates is a signal back from updateStateTable() that we've
+                // transitioned to a state that won't loop back to the current looping
+                // state.  (In other words, we've gotten to a point where we can no longer
+                // go back into a *? we saw earlier.)  Clear out the list of looping states
+                // and backfill any states that need to be backfilled.
+                if (clearLoopingStates) {
+                    setLoopingStates(null, decisionPointList);
+                }
+
+                // advance to the next character, now that we've processed the current
+                // character
+                ++p;
+            }
+
+            // this takes care of backfilling any states that still need to be backfilled
+            setLoopingStates(null, decisionPointList);
+
+            // when we reach the end of the string, we do a postprocessing step to mark the
+            // end states.  The decision point list contains every state that can transition
+            // to the end state-- that is, every state that is the last state in a sequence
+            // that matches the rule.  All of these states are considered "mark states"
+            // or "accepting states"-- that is, states that cause the position returned from
+            // next() to be updated.  A mark state represents a possible break position.
+            // This allows us to look ahead and remember how far the rule matched
+            // before following the new branch (see next() for more information).
+            // The temporary state table has an extra "flag column" at the end where this
+            // information is stored.  We mark the end states by setting a flag in their
+            // flag column.
+            // Now if we saw the / in the rule, then everything after it is lookahead
+            // material and the break really goes where the slash is.  In this case,
+            // we mark these states as BOTH accepting states and lookahead states.  This
+            // signals that these states cause the break position to be updated to the
+            // position of the slash rather than the current break position.
+            for (int i = 0; i < decisionPointList.size(); i++) {
+                int rowNum = ((Integer)decisionPointList.elementAt(i)).intValue();
+                state = (short[])tempStateTable.elementAt(rowNum);
+                state[numCategories] |= END_STATE_FLAG;
+                if (sawEarlyBreak) {
+                    state[numCategories] |= LOOKAHEAD_STATE_FLAG;
+                }
+            }
+/*
+debugPrintln("====Parsed \"" + rule + ";");
+System.out.println();
+System.out.println("      currentState = " + currentState);
+debugPrintVectorOfVectors("      decisionPointStack:", "        ", decisionPointStack);
+debugPrintVector("        ", decisionPointList);
+debugPrintVector("      loopingStates = ", loopingStates);
+debugPrintVector("      statesToBackfill = ", statesToBackfill);
+System.out.println("      sawEarlyBreak = " + sawEarlyBreak);
+debugPrintTempStateTable();
+*/
+        }
+
+
+        /**
+         * Update entries in the state table, and merge states when necessary to keep
+         * the table deterministic.
+         * @param rows The list of rows that need updating (the decision point list)
+         * @param pendingChars A character category list, encoded in a String.  This is the
+         * list of the columns that need updating.
+         * @param newValue Update the cells specfied above to contain this value
+         */
+        private void updateStateTable(Vector rows,
+                                      String pendingChars,
+                                      short newValue) {
+            // create a dummy state that has the specified row number (newValue) in
+            // the cells that need to be updated (those specified by pendingChars)
+            // and 0 in the other cells
+            short[] newValues = new short[numCategories + 1];
+            for (int i = 0; i < pendingChars.length(); i++)
+                newValues[(int)(pendingChars.charAt(i)) - 0x100] = newValue;
+
+            // go through the list of rows to update, and update them by calling
+            // mergeStates() to merge them the the dummy state we created
+            for (int i = 0; i < rows.size(); i++) {
+                mergeStates(((Integer)rows.elementAt(i)).intValue(), newValues, rows);
+            }
+        }
+
+        /**
+         * The real work of making the state table deterministic happens here.  This function
+         * merges a state in the state table (specified by rowNum) with a state that is
+         * passed in (newValues).  The basic process is to copy the nonzero cells in newStates
+         * into the state in the state table (we'll call that oldValues).  If there's a
+         * collision (i.e., if the same cell has a nonzero value in both states, and it's
+         * not the SAME value), then we have to reconcile the collision.  We do this by
+         * creating a new state, adding it to the end of the state table, and using this
+         * function recursively to merge the original two states into a single, combined
+         * state.  This process may happen recursively (i.e., each successive level may
+         * involve collisions).  To prevent infinite recursion, we keep a log of merge
+         * operations.  Any time we're merging two states we've merged before, we can just
+         * supply the row number for the result of that merge operation rather than creating
+         * a new state just like it.
+         * @param rowNum The row number in the state table of the state to be updated
+         * @param newValues The state to merge it with.
+         * @param rowsBeingUpdated A copy of the list of rows passed to updateStateTable()
+         * (itself a copy of the decision point list from parseRule()).  Newly-created
+         * states get added to the decision point list if their "parents" were on it.
+         */
+        private void mergeStates(int rowNum,
+                                 short[] newValues,
+                                 Vector rowsBeingUpdated) {
+            short[] oldValues = (short[])(tempStateTable.elementAt(rowNum));
+/*
+System.out.print("***Merging " + rowNum + ":");
+for (int i = 0; i < oldValues.length; i++) System.out.print("\t" + oldValues[i]);
+System.out.println();
+System.out.print("    with   \t");
+for (int i = 0; i < newValues.length; i++) System.out.print("\t" + newValues[i]);
+System.out.println();
+*/
+
+            boolean isLoopingState = loopingStates.contains(new Integer(rowNum));
+
+            // for each of the cells in the rows we're reconciling, do...
+            for (int i = 0; i < oldValues.length; i++) {
+
+                // if they contain the same value, we don't have to do anything
+                if (oldValues[i] == newValues[i]) {
+                    continue;
+                }
+
+                // if oldValues is a looping state and the state the current cell points to
+                // is too, then we can just stomp over the current value of that cell (and
+                // set the clear-looping-states flag if necessary)
+                else if (isLoopingState && loopingStates.contains(new Integer(oldValues[i]))) {
+                    if (newValues[i] != 0) {
+                        if (oldValues[i] == 0) {
+                            clearLoopingStates = true;
+                        }
+                        oldValues[i] = newValues[i];
+                    }
+                }
+
+                // if the current cell in oldValues is 0, copy in the corresponding value
+                // from newValues
+                else if (oldValues[i] == 0) {
+                    oldValues[i] = newValues[i];
+                }
+
+                // the last column of each row is the flag column.  Take care to merge the
+                // flag words correctly
+                else if (i == numCategories) {
+                    oldValues[i] = (short)((newValues[i] & ALL_FLAGS) | oldValues[i]);
+                }
+
+                // if both newValues and oldValues have a nonzero value in the current
+                // cell, and it isn't the same value both places...
+                else if (oldValues[i] != 0 && newValues[i] != 0) {
+
+                    // look up this pair of cell values in the merge list.  If it's
+                    // found, update the cell in oldValues to point to the merged state
+                    int combinedRowNum = searchMergeList(oldValues[i], newValues[i]);
+                    if (combinedRowNum != 0) {
+                        oldValues[i] = (short)combinedRowNum;
+                    }
+
+                    // otherwise, we have to reconcile them...
+                    else {
+                        // copy our row numbers into variables to make things easier
+                        int oldRowNum = oldValues[i];
+                        int newRowNum = newValues[i];
+                        combinedRowNum = tempStateTable.size();
+
+                        // add this pair of row numbers to the merge list (create it first
+                        // if we haven't created the merge list yet)
+                        if (mergeList == null) {
+                            mergeList = new Vector();
+                        }
+                        mergeList.addElement(new int[] { oldRowNum, newRowNum, combinedRowNum });
+
+//System.out.println("***At " + rowNum + ", merging " + oldRowNum + " and " + newRowNum + " into " + combinedRowNum);
+
+                        // create a new row to represent the merged state, and copy the
+                        // contents of oldRow into it, then add it to the end of the
+                        // state table and update the original row (oldValues) to point
+                        // to the new, merged, state
+                        short[] newRow = new short[numCategories + 1];
+                        short[] oldRow = (short[])(tempStateTable.elementAt(oldRowNum));
+                        System.arraycopy(oldRow, 0, newRow, 0, numCategories + 1);
+                        tempStateTable.addElement(newRow);
+                        oldValues[i] = (short)combinedRowNum;
+
+
+//System.out.println("lastOldRowNum = " + lastOldRowNum);
+//System.out.println("lastCombinedRowNum = " + lastCombinedRowNum);
+//System.out.println("decisionPointList.contains(lastOldRowNum) = " + decisionPointList.contains(new Integer(lastOldRowNum)));
+//System.out.println("decisionPointList.contains(lastCombinedRowNum) = " + decisionPointList.contains(new Integer(lastCombinedRowNum)));
+
+                        // if the decision point list contains either of the parent rows,
+                        // update it to include the new row as well
+                        if ((decisionPointList.contains(new Integer(oldRowNum))
+                                || decisionPointList.contains(new Integer(newRowNum)))
+                            && !decisionPointList.contains(new Integer(combinedRowNum))
+                        ) {
+                            decisionPointList.addElement(new Integer(combinedRowNum));
+                        }
+
+                        // do the same thing with the list of rows being updated
+                        if ((rowsBeingUpdated.contains(new Integer(oldRowNum))
+                                || rowsBeingUpdated.contains(new Integer(newRowNum)))
+                            && !rowsBeingUpdated.contains(new Integer(combinedRowNum))
+                        ) {
+                            decisionPointList.addElement(new Integer(combinedRowNum));
+                        }
+                        // now (groan) do the same thing for all the entries on the
+                        // decision point stack
+                        for (int k = 0; k < decisionPointStack.size(); k++) {
+                            Vector dpl = (Vector)decisionPointStack.elementAt(k);
+                            if ((dpl.contains(new Integer(oldRowNum))
+                                    || dpl.contains(new Integer(newRowNum)))
+                                && !dpl.contains(new Integer(combinedRowNum))
+                            ) {
+                                dpl.addElement(new Integer(combinedRowNum));
+                            }
+                        }
+
+                        // FINALLY (puff puff puff), call mergeStates() recursively to copy
+                        // the row referred to by newValues into the new row and resolve any
+                        // conflicts that come up at that level
+                        mergeStates(combinedRowNum, (short[])(tempStateTable.elementAt(
+                                        newValues[i])), rowsBeingUpdated);
+                    }
+                }
+            }
+            return;
+        }
+
+        /**
+         * The merge list is a list of pairs of rows that have been merged somewhere in
+         * the process of building this state table, along with the row number of the
+         * row containing the merged state.  This function looks up a pair of row numbers
+         * and returns the row number of the row they combine into.  (It returns 0 if
+         * this pair of rows isn't in the merge list.)
+         */
+        private int searchMergeList(int a, int b) {
+            // if there is no merge list, there obviously isn't anything in it
+            if (mergeList == null) {
+                return 0;
+            }
+
+            // otherwise, for each element in the merge list...
+            else {
+                int[] entry;
+                for (int i = 0; i < mergeList.size(); i++) {
+                    entry = (int[])(mergeList.elementAt(i));
+
+                    // we have a hit if the two row numbers match the two row numbers
+                    // in the beginning of the entry (the two that combine), in either
+                    // order
+                    if ((entry[0] == a && entry[1] == b) || (entry[0] == b && entry[1] == a)) {
+                        return entry[2];
+                    }
+
+                    // we also have a hit if one of the two row numbers matches the marged
+                    // row number and the other one matches one of the original row numbers
+                    if ((entry[2] == a && (entry[0] == b || entry[1] == b))) {
+                        return entry[2];
+                    }
+                    if ((entry[2] == b && (entry[0] == a || entry[1] == a))) {
+                        return entry[2];
+                    }
+                }
+                return 0;
+            }
+        }
+
+        /**
+         * This function is used to update the list of current loooping states (i.e.,
+         * states that are controlled by a *? construct).  It backfills values from
+         * the looping states into unpopulated cells of the states that are currently
+         * marked for backfilling, and then updates the list of looping states to be
+         * the new list
+         * @param newLoopingStates The list of new looping states
+         * @param endStates The list of states to treat as end states (states that
+         * can exit the loop).
+         */
+        private void setLoopingStates(Vector newLoopingStates, Vector endStates) {
+
+            // if the current list of looping states isn't empty, we have to backfill
+            // values from the looping states into the states that are waiting to be
+            // backfilled
+            if (!loopingStates.isEmpty()) {
+                int loopingState = ((Integer)loopingStates.lastElement()).intValue();
+                int rowNum;
+
+                // don't backfill into an end state OR any state reachable from an end state
+                // (since the search for reachable states is recursive, it's split out into
+                // a separate function, eliminateBackfillStates(), below)
+                for (int i = 0; i < endStates.size(); i++) {
+                    eliminateBackfillStates(((Integer)endStates.elementAt(i)).intValue());
+                }
+
+                // we DON'T actually backfill the states that need to be backfilled here.
+                // Instead, we MARK them for backfilling.  The reason for this is that if
+                // there are multiple rules in the state-table description, the looping
+                // states may have some of their values changed by a succeeding rule, and
+                // this wouldn't be reflected in the backfilled states.  We mark a state
+                // for backfilling by putting the row number of the state to copy from
+                // into the flag cell at the end of the row
+                for (int i = 0; i < statesToBackfill.size(); i++) {
+                    rowNum = ((Integer)statesToBackfill.elementAt(i)).intValue();
+                    short[] state = (short[])tempStateTable.elementAt(rowNum);
+                    state[numCategories] =
+                        (short)((state[numCategories] & ALL_FLAGS) | loopingState);
+                }
+                statesToBackfill.removeAllElements();
+                loopingStates.removeAllElements();
+            }
+
+            if (newLoopingStates != null) {
+                loopingStates = (Vector)newLoopingStates.clone();
+            }
+        }
+
+        /**
+         * This removes "ending states" and states reachable from them from the
+         * list of states to backfill.
+         * @param The row number of the state to remove from the backfill list
+         */
+        private void eliminateBackfillStates(int baseState) {
+
+            // don't do anything unless this state is actually in the backfill list...
+            if (statesToBackfill.contains(new Integer(baseState))) {
+
+                // if it is, take it out
+                statesToBackfill.removeElement(new Integer(baseState));
+
+                // then go through and recursively call this function for every
+                // state that the base state points to
+                short[] state = (short[])tempStateTable.elementAt(baseState);
+                for (int i = 0; i < numCategories; i++) {
+                    if (state[i] != 0) {
+                        eliminateBackfillStates(state[i]);
+                    }
+                }
+            }
+        }
+
+        /**
+         * This function completes the backfilling process by actually doing the
+         * backfilling on the states that are marked for it
+         */
+        private void backfillLoopingStates() {
+            short[] state;
+            short[] loopingState = null;
+            int loopingStateRowNum = 0;
+            int fromState;
+
+            // for each state in the state table...
+            for (int i = 0; i < tempStateTable.size(); i++) {
+                state = (short[])tempStateTable.elementAt(i);
+
+                // check the state's flag word to see if it's marked for backfilling
+                // (it's marked for backfilling if any bits other than the two high-order
+                // bits are set-- if they are, then the flag word, minus the two high bits,
+                // is the row number to copy from)
+                fromState = state[numCategories] & ~ALL_FLAGS;
+                if (fromState > 0) {
+
+                    // load up the state to copy from (if we haven't already)
+                    if (fromState != loopingStateRowNum) {
+                        loopingStateRowNum = fromState;
+                        loopingState = (short[])tempStateTable.elementAt(loopingStateRowNum);
+                    }
+
+                    // clear out the backfill part of the flag word
+                    state[numCategories] &= ALL_FLAGS;
+
+                    // then fill all zero cells in the current state with values
+                    // from the corresponding cells of the fromState
+                    for (int j = 0; j < state.length; j++) {
+                        if (state[j] == 0) {
+                            state[j] = loopingState[j];
+                        }
+                        else if (state[j] == DONT_LOOP_FLAG) {
+                            state[j] = 0;
+                        }
+                    }
+                }
+            }
+        }
+
+        /**
+         * This function completes the state-table-building process by doing several
+         * postprocessing steps and copying everything into its final resting place
+         * in the iterator itself
+         * @param forward True if we're working on the forward state table
+         */
+        private void finishBuildingStateTable(boolean forward) {
+//debugPrintTempStateTable();
+            // start by backfilling the looping states
+            backfillLoopingStates();
+//debugPrintTempStateTable();
+
+            int[] rowNumMap = new int[tempStateTable.size()];
+            Stack rowsToFollow = new Stack();
+            rowsToFollow.push(new Integer(1));
+            rowNumMap[1] = 1;
+
+            // determine which states are no longer reachable from the start state
+            // (the reachable states will have their row numbers in the row number
+            // map, and the nonreachable states will have zero in the row number map)
+            while (rowsToFollow.size() != 0) {
+                int rowNum = ((Integer)rowsToFollow.pop()).intValue();
+                short[] row = (short[])(tempStateTable.elementAt(rowNum));
+
+                for (int i = 0; i < numCategories; i++) {
+                    if (row[i] != 0) {
+                        if (rowNumMap[row[i]] == 0) {
+                            rowNumMap[row[i]] = row[i];
+                            rowsToFollow.push(new Integer(row[i]));
+                        }
+                    }
+                }
+            }
+/*
+System.out.println("The following rows are not reachable:");
+for (int i = 1; i < rowNumMap.length; i++)
+if (rowNumMap[i] == 0) System.out.print("\t" + i);
+System.out.println();
+*/
+
+            boolean madeChange;
+            int newRowNum;
+
+            // algorithm for minimizing the number of states in the table adapted from
+            // Aho & Ullman, "Principles of Compiler Design"
+            // The basic idea here is to organize the states into classes.  When we're done,
+            // all states in the same class can be considered identical and all but one eliminated.
+
+            // initially assign states to classes based on the number of populated cells they
+            // contain (the class number is the number of populated cells)
+            int[] stateClasses = new int[tempStateTable.size()];
+            int nextClass = numCategories + 1;
+            short[] state1, state2;
+            for (int i = 1; i < stateClasses.length; i++) {
+                if (rowNumMap[i] == 0) {
+                    continue;
+                }
+                state1 = (short[])tempStateTable.elementAt(i);
+                for (int j = 0; j < numCategories; j++) {
+                    if (state1[j] != 0) {
+                        ++stateClasses[i];
+                    }
+                }
+                if (stateClasses[i] == 0) {
+                    stateClasses[i] = nextClass;
+                }
+            }
+            ++nextClass;
+
+            // then, for each class, elect the first member of that class as that class's
+            // "representative".  For each member of the class, compare it to the "representative."
+            // If there's a column position where the state being tested transitions to a
+            // state in a DIFFERENT class from the class where the "representative" transitions,
+            // then move the state into a new class.  Repeat this process until no new classes
+            // are created.
+            int currentClass;
+            int lastClass;
+            boolean split;
+
+            do {
+//System.out.println("Making a pass...");
+                currentClass = 1;
+                lastClass = nextClass;
+                while (currentClass < nextClass) {
+//System.out.print("States in class #" + currentClass +":");
+                    split = false;
+                    state1 = state2 = null;
+                    for (int i = 0; i < stateClasses.length; i++) {
+                        if (stateClasses[i] == currentClass) {
+//System.out.print("\t" + i);
+                            if (state1 == null) {
+                                state1 = (short[])tempStateTable.elementAt(i);
+                            }
+                            else {
+                                state2 = (short[])tempStateTable.elementAt(i);
+                                for (int j = 0; j < state2.length; j++)
+                                    if ((j == numCategories && state1[j] != state2[j] && forward)
+                                            || (j != numCategories && stateClasses[state1[j]]
+                                            != stateClasses[state2[j]])) {
+                                        stateClasses[i] = nextClass;
+                                        split = true;
+                                        break;
+                                    }
+                            }
+                        }
+                    }
+                    if (split) {
+                        ++nextClass;
+                    }
+                    ++currentClass;
+//System.out.println();
+                }
+            } while (lastClass != nextClass);
+
+            // at this point, all of the states in a class except the first one (the
+            //"representative") can be eliminated, so update the row-number map accordingly
+            int[] representatives = new int[nextClass];
+            for (int i = 1; i < stateClasses.length; i++)
+                if (representatives[stateClasses[i]] == 0) {
+                    representatives[stateClasses[i]] = i;
+                }
+                else {
+                    rowNumMap[i] = representatives[stateClasses[i]];
+                }
+//System.out.println("Renumbering...");
+
+            // renumber all remaining rows...
+            // first drop all that are either unreferenced or not a class representative
+            for (int i = 1; i < rowNumMap.length; i++) {
+                if (rowNumMap[i] != i) {
+                    tempStateTable.setElementAt(null, i);
+                }
+            }
+
+            // then calculate everybody's new row number and update the row
+            // number map appropriately (the first pass updates the row numbers
+            // of all the class representatives [the rows we're keeping], and the
+            // second pass updates the cross references for all the rows that
+            // are being deleted)
+            newRowNum = 1;
+            for (int i = 1; i < rowNumMap.length; i++) {
+                if (tempStateTable.elementAt(i) != null) {
+                    rowNumMap[i] = newRowNum++;
+                }
+            }
+            for (int i = 1; i < rowNumMap.length; i++) {
+                if (tempStateTable.elementAt(i) == null) {
+                    rowNumMap[i] = rowNumMap[rowNumMap[i]];
+                }
+            }
+//for (int i = 1; i < rowNumMap.length; i++) rowNumMap[i] = i; int newRowNum = rowNumMap.length;
+
+            // allocate the permanent state table, and copy the remaining rows into it
+            // (adjusting all the cell values, of course)
+
+            // this section does that for the forward state table
+            if (forward) {
+                endStates = new boolean[newRowNum];
+                lookaheadStates = new boolean[newRowNum];
+                stateTable = new short[newRowNum * numCategories];
+                int p = 0;
+                int p2 = 0;
+                for (int i = 0; i < tempStateTable.size(); i++) {
+                    short[] row = (short[])(tempStateTable.elementAt(i));
+                    if (row == null) {
+                        continue;
+                    }
+                    for (int j = 0; j < numCategories; j++) {
+                        stateTable[p] = (short)(rowNumMap[row[j]]);
+                        ++p;
+                    }
+                    endStates[p2] = ((row[numCategories] & END_STATE_FLAG) != 0);
+                    lookaheadStates[p2] = ((row[numCategories] & LOOKAHEAD_STATE_FLAG) != 0);
+                    ++p2;
+                }
+            }
+
+            // and this section does it for the backward state table
+            else {
+                backwardsStateTable = new short[newRowNum * numCategories];
+                int p = 0;
+                for (int i = 0; i < tempStateTable.size(); i++) {
+                    short[] row = (short[])(tempStateTable.elementAt(i));
+                    if (row == null) {
+                        continue;
+                    }
+                    for (int j = 0; j < numCategories; j++) {
+                        backwardsStateTable[p] = (short)(rowNumMap[row[j]]);
+                        ++p;
+                    }
+                }
+            }
+        }
+
+        /**
+         * This function builds the backward state table from the forward state
+         * table and any additional rules (identified by the ! on the front)
+         * supplied in the description
+         */
+        private void buildBackwardsStateTable(Vector tempRuleList) {
+
+            // create the temporary state table and seed it with two rows (row 0
+            // isn't used for anything, and we have to create row 1 (the initial
+            // state) before we can do anything else
+            tempStateTable = new Vector();
+            tempStateTable.addElement(new short[numCategories + 1]);
+            tempStateTable.addElement(new short[numCategories + 1]);
+
+            // although the backwards state table is built automatically from the forward
+            // state table, there are some situations (the default sentence-break rules,
+            // for example) where this doesn't yield enough stop states, causing a dramatic
+            // drop in performance.  To help with these cases, the user may supply
+            // supplemental rules that are added to the backward state table.  These have
+            // the same syntax as the normal break rules, but begin with '!' to distinguish
+            // them from normal break rules
+            for (int i = 0; i < tempRuleList.size(); i++) {
+                String rule = (String)tempRuleList.elementAt(i);
+                if (rule.charAt(0) == '!') {
+                    parseRule(rule.substring(1), false);
+                }
+            }
+            backfillLoopingStates();
+
+            // Backwards iteration is qualitatively different from forwards iteration.
+            // This is because backwards iteration has to be made to operate from no context
+            // at all-- the user should be able to ask BreakIterator for the break position
+            // immediately on either side of some arbitrary offset in the text.  The
+            // forward iteration table doesn't let us do that-- it assumes complete
+            // information on the context, which means starting from the beginning of the
+            // document.
+            // The way we do backward and random-access iteration is to back up from the
+            // current (or user-specified) position until we see something we're sure is
+            // a break position (it may not be the last break position immediately
+            // preceding our starting point, however).  Then we roll forward from there to
+            // locate the actual break position we're after.
+            // This means that the backwards state table doesn't have to identify every
+            // break position, allowing the building algorithm to be much simpler.  Here,
+            // we use a "pairs" approach, scanning the forward-iteration state table for
+            // pairs of character categories we ALWAYS break between, and building a state
+            // table from that information.  No context is required-- all this state table
+            // looks at is a pair of adjacent characters.
+
+            // It's possible that the user has supplied supplementary rules (see above).
+            // This has to be done first to keep parseRule() and friends from becoming
+            // EVEN MORE complicated.  The automatically-generated states are appended
+            // onto the end of the state table, and then the two sets of rules are
+            // stitched together at the end.  Take note of the row number of the
+            // first row of the auromatically-generated part.
+            int backTableOffset = tempStateTable.size();
+            if (backTableOffset > 2) {
+                ++backTableOffset;
+            }
+
+            // the automatically-generated part of the table models a two-dimensional
+            // array where the two dimensions represent the two characters we're currently
+            // looking at.  To model this as a state table, we actually need one additional
+            // row to represent the initial state.  It gets populated with the row numbers
+            // of the other rows (in order).
+            for (int i = 0; i < numCategories + 1; i++)
+                tempStateTable.addElement(new short[numCategories + 1]);
+
+            short[] state = (short[])tempStateTable.elementAt(backTableOffset - 1);
+            for (int i = 0; i < numCategories; i++)
+                state[i] = (short)(i + backTableOffset);
+
+            // scavenge the forward state table for pairs of character categories
+            // that always have a break between them.  The algorithm is as follows:
+            // Look down each column in the state table.  For each nonzero cell in
+            // that column, look up the row it points to.  For each nonzero cell in
+            // that row, populate a cell in the backwards state table: the row number
+            // of that cell is the number of the column we were scanning (plus the
+            // offset that locates this sub-table), and the column number of that cell
+            // is the column number of the nonzero cell we just found.  This cell is
+            // populated with its own column number (adjusted according to the actual
+            // location of the sub-table).  This process will produce a state table
+            // whose behavior is the same as looking up successive pairs of characters
+            // in an array of Booleans to determine whether there is a break.
+            int numRows = stateTable.length / numCategories;
+            for (int column = 0; column < numCategories; column++) {
+                for (int row = 0; row < numRows; row++) {
+                    int nextRow = lookupState(row, column);
+                    if (nextRow != 0) {
+                        for (int nextColumn = 0; nextColumn < numCategories; nextColumn++) {
+                            int cellValue = lookupState(nextRow, nextColumn);
+                            if (cellValue != 0) {
+                                state = (short[])tempStateTable.elementAt(nextColumn +
+                                                backTableOffset);
+                                state[column] = (short)(column + backTableOffset);
+                            }
+                        }
+                    }
+                }
+            }
+
+//debugPrintTempStateTable();
+            // if the user specified some backward-iteration rules with the ! token,
+            // we have to merge the resulting state table with the auto-generated one
+            // above.  First copy the populated cells from row 1 over the populated
+            // cells in the auto-generated table.  Then copy values from row 1 of the
+            // auto-generated table into all of the the unpopulated cells of the
+            // rule-based table.
+            if (backTableOffset > 1) {
+
+                // for every row in the auto-generated sub-table, if a cell is
+                // populated that is also populated in row 1 of the rule-based
+                // sub-table, copy the value from row 1 over the value in the
+                // auto-generated sub-table
+                state = (short[])tempStateTable.elementAt(1);
+                for (int i = backTableOffset - 1; i < tempStateTable.size(); i++) {
+                    short[] state2 = (short[])tempStateTable.elementAt(i);
+                    for (int j = 0; j < numCategories; j++) {
+                        if (state[j] != 0 && state2[j] != 0) {
+                            state2[j] = state[j];
+                        }
+                    }
+                }
+
+                // now, for every row in the rule-based sub-table that is not
+                // an end state, fill in all unpopulated cells with the values
+                // of the corresponding cells in the first row of the auto-
+                // generated sub-table.
+                state = (short[])tempStateTable.elementAt(backTableOffset - 1);
+                for (int i = 1; i < backTableOffset - 1; i++) {
+                    short[] state2 = (short[])tempStateTable.elementAt(i);
+                    if ((state2[numCategories] & END_STATE_FLAG) == 0) {
+                        for (int j = 0; j < numCategories; j++) {
+                            if (state2[j] == 0) {
+                                state2[j] = state[j];
+                            }
+                        }
+                    }
+                }
+            }
+
+//debugPrintTempStateTable();
+
+            // finally, clean everything up and copy it into the actual BreakIterator
+            // by calling finishBuildingStateTable()
+            finishBuildingStateTable(false);
+/*
+System.out.print("C:\t");
+for (int i = 0; i < numCategories; i++)
+System.out.print(Integer.toString(i) + "\t");
+System.out.println(); System.out.print("=================================================");
+for (int i = 0; i < backwardsStateTable.length; i++) {
+if (i % numCategories == 0) {
+System.out.println();
+System.out.print(Integer.toString(i / numCategories) + ":\t");
+}
+if (backwardsStateTable[i] == 0) System.out.print(".\t"); else System.out.print(Integer.toString(backwardsStateTable[i]) + "\t");
+}
+System.out.println();
+*/
+        }
+
+        /**
+         * Throws an IllegalArgumentException representing a syntax error in the rule
+         * description.  The exception's message contains some debugging information.
+         * @param message A message describing the problem
+         * @param position The position in the description where the problem was
+         * discovered
+         * @param context The string containing the error
+         */
+        protected void error(String message, int position, String context) {
+            throw new IllegalArgumentException("Parse error: " + message + "\n" +
+                    Utility.escape(context.substring(0, position)) + "\n\n" +
+                    Utility.escape(context.substring(position)));
+        }
+
+
+        protected void debugPrintVector(String label, Vector v) {
+            System.out.print(label);
+            for (int i = 0; i < v.size(); i++)
+                System.out.print(v.elementAt(i).toString() + "\t");
+            System.out.println();
+        }
+
+        protected void debugPrintVectorOfVectors(String label1, String label2, Vector v) {
+            System.out.println(label1);
+            for (int i = 0; i < v.size(); i++)
+                debugPrintVector(label2, (Vector)v.elementAt(i));
+        }
+
+        protected void debugPrintTempStateTable() {
+            System.out.println("      tempStateTable:");
+            System.out.print("        C:\t");
+            for (int i = 0; i <= numCategories; i++)
+                System.out.print(Integer.toString(i) + "\t");
+            System.out.println();
+            for (int i = 1; i < tempStateTable.size(); i++) {
+                short[] row = (short[])(tempStateTable.elementAt(i));
+                System.out.print("        " + i + ":\t");
+                for (int j = 0; j < row.length; j++) {
+                    if (row[j] == 0) {
+                        System.out.print(".\t");
+                    }
+                    else {
+                        System.out.print(Integer.toString(row[j]) + "\t");
+                    }
+                }
+                System.out.println();
+            }
+        }
+
+    }
+
+    /*
+     * This class exists to work around a bug in HotJava's implementation
+     * of CharacterIterator, which incorrectly handles setIndex(endIndex).
+     * This iterator relies only on base.setIndex(n) where n is less than
+     * endIndex.
+     *
+     * One caveat:  if the base iterator's begin and end indices change
+     * the change will not be reflected by this wrapper.  Does that matter?
+     */
+    private static final class SafeCharIterator implements CharacterIterator,
+                                                           Cloneable {
+
+        private CharacterIterator base;
+        private int rangeStart;
+        private int rangeLimit;
+        private int currentIndex;
+
+        SafeCharIterator(CharacterIterator base) {
+            this.base = base;
+            this.rangeStart = base.getBeginIndex();
+            this.rangeLimit = base.getEndIndex();
+            this.currentIndex = base.getIndex();
+        }
+
+        public char first() {
+            return setIndex(rangeStart);
+        }
+
+        public char last() {
+            return setIndex(rangeLimit - 1);
+        }
+
+        public char current() {
+            if (currentIndex < rangeStart || currentIndex >= rangeLimit) {
+                return DONE;
+            }
+            else {
+                return base.setIndex(currentIndex);
+            }
+        }
+
+        public char next() {
+
+            currentIndex++;
+            if (currentIndex >= rangeLimit) {
+                currentIndex = rangeLimit;
+                return DONE;
+            }
+            else {
+                return base.setIndex(currentIndex);
+            }
+        }
+
+        public char previous() {
+
+            currentIndex--;
+            if (currentIndex < rangeStart) {
+                currentIndex = rangeStart;
+                return DONE;
+            }
+            else {
+                return base.setIndex(currentIndex);
+            }
+        }
+
+        public char setIndex(int i) {
+
+            if (i < rangeStart || i > rangeLimit) {
+                throw new IllegalArgumentException("Invalid position");
+            }
+            currentIndex = i;
+            return current();
+        }
+
+        public int getBeginIndex() {
+            return rangeStart;
+        }
+
+        public int getEndIndex() {
+            return rangeLimit;
+        }
+
+        public int getIndex() {
+            return currentIndex;
+        }
+
+        public Object clone() {
+
+            SafeCharIterator copy = null;
+            try {
+                copy = (SafeCharIterator) super.clone();
+            }
+            catch(CloneNotSupportedException e) {
+                throw new Error("Clone not supported: " + e);
+            }
+
+            CharacterIterator copyOfBase = (CharacterIterator) base.clone();
+            copy.base = copyOfBase;
+            return copy;
+        }
+    }
+
+
+    public static void debugPrintln(String s) {
+        final String zeros = "0000";
+        String temp;
+        StringBuffer out = new StringBuffer();
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if (c >= ' ' && c < '\u007f') {
+                out.append(c);
+            }
+            else {
+                out.append("\\u");
+                temp = Integer.toHexString((int)c);
+                out.append(zeros.substring(0, 4 - temp.length()));
+                out.append(temp);
+            }
+        }
+        System.out.println(out);
+    }
+
+}
+
diff --git a/src/com/ibm/text/RuleBasedNumberFormat.java b/src/com/ibm/text/RuleBasedNumberFormat.java
new file mode 100755
index 0000000..507d2fb
--- /dev/null
+++ b/src/com/ibm/text/RuleBasedNumberFormat.java
@@ -0,0 +1,1286 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/RuleBasedNumberFormat.java,v $ 
+ * $Date: 2000/05/26 21:38:55 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import java.math.BigInteger;
+import java.text.*;
+import java.util.Vector;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+/**
+ * <p>A class that formats numbers according to a set of rules. This number formatter is
+ * typically used for spelling out numeric values in words (e.g., 25,3476 as
+ * &quot;twenty-five thousand three hundred seventy-six&quot; or &quot;vingt-cinq mille trois
+ * cents soixante-seize&quot; or
+ * &quot;funfundzwanzigtausenddreihundertsechsundsiebzig&quot;), but can also be used for
+ * other complicated formatting tasks, such as formatting a number of seconds as hours,
+ * minutes and seconds (e.g., 3,730 as &quot;1:02:10&quot;).</p>
+ *
+ * <p>The resources contain three predefined formatters for each locale: spellout, which
+ * spells out a value in words (123 is &quot;one hundred twenty-three&quot;); ordinal, which
+ * appends an ordinal suffix to the end of a numeral (123 is &quot;123rd&quot;); and
+ * duration, which shows a duration in seconds as hours, minutes, and seconds (123 is
+ * &quot;2:03&quot;).&nbsp; The client can also define more specialized <tt>RuleBasedNumberFormat</tt>s
+ * by supplying programmer-defined rule sets.</p>
+ *
+ * <p>The behavior of a <tt>RuleBasedNumberFormat</tt> is specified by a textual description
+ * that is either passed to the constructor as a <tt>String</tt> or loaded from a resource
+ * bundle. In its simplest form, the description consists of a semicolon-delimited list of <em>rules.</em>
+ * Each rule has a string of output text and a value or range of values it is applicable to.
+ * In a typical spellout rule set, the first twenty rules are the words for the numbers from
+ * 0 to 19:</p>
+ *
+ * <pre>zero; one; two; three; four; five; six; seven; eight; nine;
+ * ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen; seventeen; eighteen; nineteen;</pre>
+ *
+ * <p>For larger numbers, we can use the preceding set of rules to format the ones place, and
+ * we only have to supply the words for the multiples of 10:</p>
+ *
+ * <pre>20: twenty[-&gt;&gt;];
+ * 30: thirty{-&gt;&gt;];
+ * 40: forty[-&gt;&gt;];
+ * 50: fifty[-&gt;&gt;];
+ * 60: sixty[-&gt;&gt;];
+ * 70: seventy[-&gt;&gt;];
+ * 80: eighty[-&gt;&gt;];
+ * 90: ninety[-&gt;&gt;];</pre>
+ *
+ * <p>In these rules, the <em>base value</em> is spelled out explicitly and set off from the
+ * rule's output text with a colon. The rules are in a sorted list, and a rule is applicable
+ * to all numbers from its own base value to one less than the next rule's base value. The
+ * &quot;&gt;&gt;&quot; token is called a <em>substitution</em> and tells the fomatter to
+ * isolate the number's ones digit, format it using this same set of rules, and place the
+ * result at the position of the &quot;&gt;&gt;&quot; token. Text in brackets is omitted if
+ * the number being formatted is an even multiple of 10 (the hyphen is a literal hyphen; 24
+ * is &quot;twenty-four,&quot; not &quot;twenty four&quot;).</p>
+ *
+ * <p>For even larger numbers, we can actually look up several parts of the number in the
+ * list:</p>
+ *
+ * <pre>100: &lt;&lt; hundred[ &gt;&gt;];</pre>
+ *
+ * <p>The &quot;&lt;&lt;&quot; represents a new kind of substitution. The &lt;&lt; isolates
+ * the hundreds digit (and any digits to its left), formats it using this same rule set, and
+ * places the result where the &quot;&lt;&lt;&quot; was. Notice also that the meaning of
+ * &gt;&gt; has changed: it now refers to both the tens and the ones digits. The meaning of
+ * both substitutions depends on the rule's base value. The base value determines the rule's <em>divisor,</em>
+ * which is the highest power of 10 that is less than or equal to the base value (the user
+ * can change this). To fill in the substitutions, the formatter divides the number being
+ * formatted by the divisor. The integral quotient is used to fill in the &lt;&lt;
+ * substitution, and the remainder is used to fill in the &gt;&gt; substitution. The meaning
+ * of the brackets changes similarly: text in brackets is omitted if the value being
+ * formatted is an even multiple of the rule's divisor. The rules are applied recursively, so
+ * if a substitution is filled in with text that includes another substitution, that
+ * substitution is also filled in.</p>
+ *
+ * <p>This rule covers values up to 999, at which point we add another rule:</p>
+ *
+ * <pre>1000: &lt;&lt; thousand[ &gt;&gt;];</pre>
+ *
+ * <p>Again, the meanings of the brackets and substitution tokens shift because the rule's
+ * base value is a higher power of 10, changing the rule's divisor. This rule can actually be
+ * used all the way up to 999,999. This allows us to finish out the rules as follows:</p>
+ *
+ * <pre>1,000,000: &lt;&lt; million[ &gt;&gt;];
+ * 1,000,000,000: &lt;&lt; billion[ &gt;&gt;];
+ * 1,000,000,000,000: &lt;&lt; trillion[ &gt;&gt;];
+ * 1,000,000,000,000,000: OUT OF RANGE!;</pre>
+ *
+ * <p>Commas, periods, and spaces can be used in the base values to improve legibility and
+ * are ignored by the rule parser. The last rule in the list is customarily treated as an
+ * &quot;overflow rule,&quot; applying to everything from its base value on up, and often (as
+ * in this example) being used to print out an error message or default representation.
+ * Notice also that the size of the major groupings in large numbers is controlled by the
+ * spacing of the rules: because in English we group numbers by thousand, the higher rules
+ * are separated from each other by a factor of 1,000.</p>
+ *
+ * <p>To see how these rules actually work in practice, consider the following example:
+ * Formatting 25,430 with this rule set would work like this:</p>
+ *
+ * <table border="0" width="630">
+ *   <tr>
+ *     <td width="21"></td>
+ *     <td width="257" valign="top"><strong>&lt;&lt; thousand &gt;&gt;</strong></td>
+ *     <td width="340" valign="top">[the rule whose base value is 1,000 is applicable to 25,340]</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="21"></td>
+ *     <td width="257" valign="top"><strong>twenty-&gt;&gt;</strong> thousand &gt;&gt;</td>
+ *     <td width="340" valign="top">[25,340 over 1,000 is 25. The rule for 20 applies.]</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="21"></td>
+ *     <td width="257" valign="top">twenty-<strong>five</strong> thousand &gt;&gt;</td>
+ *     <td width="340" valign="top">[25 mod 10 is 5. The rule for 5 is &quot;five.&quot;</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="21"></td>
+ *     <td width="257" valign="top">twenty-five thousand <strong>&lt;&lt; hundred &gt;&gt;</strong></td>
+ *     <td width="340" valign="top">[25,340 mod 1,000 is 340. The rule for 100 applies.]</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="21"></td>
+ *     <td width="257" valign="top">twenty-five thousand <strong>three</strong> hundred &gt;&gt;</td>
+ *     <td width="340" valign="top">[340 over 100 is 3. The rule for 3 is &quot;three.&quot;]</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="21"></td>
+ *     <td width="257" valign="top">twenty-five thousand three hundred <strong>forty</strong></td>
+ *     <td width="340" valign="top">[340 mod 100 is 40. The rule for 40 applies. Since 40 divides
+ *     evenly by 10, the hyphen and substitution in the brackets are omitted.]</td>
+ *   </tr>
+ * </table>
+ *
+ * <p>The above syntax suffices only to format positive integers. To format negative numbers,
+ * we add a special rule:</p>
+ *
+ * <pre>-x: minus &gt;&gt;;</pre>
+ *
+ * <p>This is called a <em>negative-number rule,</em> and is identified by &quot;-x&quot;
+ * where the base value would be. This rule is used to format all negative numbers. the
+ * &gt;&gt; token here means &quot;find the number's absolute value, format it with these
+ * rules, and put the result here.&quot;</p>
+ *
+ * <p>We also add a special rule called a <em>fraction rule </em>for numbers with fractional
+ * parts:</p>
+ *
+ * <pre>x.x: &lt;&lt; point &gt;&gt;;</pre>
+ *
+ * <p>This rule is used for all positive non-integers (negative non-integers pass through the
+ * negative-number rule first and then through this rule). Here, the &lt;&lt; token refers to
+ * the number's integral part, and the &gt;&gt; to the number's fractional part. The
+ * fractional part is formatted as a series of single-digit numbers (e.g., 123.456 would be
+ * formatted as &quot;one hundred twenty-three point four five six&quot;).</p>
+ *
+ * <p>To see how this rule syntax is applied to various languages, examine the resource data.</p>
+ *
+ * <p>There is actually much more flexibility built into the rule language than the
+ * description above shows. A formatter may own multiple rule sets, which can be selected by
+ * the caller, and which can use each other to fill in their substitutions. Substitutions can
+ * also be filled in with digits, using a DecimalFormat object. There is syntax that can be
+ * used to alter a rule's divisor in various ways. And there is provision for much more
+ * flexible fraction handling. A complete description of the rule syntax follows:</p>
+ *
+ * <hr>
+ *
+ * <p>The description of a <tt>RuleBasedNumberFormat</tt>'s behavior consists of one or more <em>rule
+ * sets.</em> Each rule set consists of a name, a colon, and a list of <em>rules.</em> A rule
+ * set name must begin with a % sign. Rule sets with names that begin with a single % sign
+ * are <em>public:</em> the caller can specify that they be used to format and parse numbers.
+ * Rule sets with names that begin with %% are <em>private:</em> they exist only for the use
+ * of other rule sets. If a formatter only has one rule set, the name may be omitted.</p>
+ *
+ * <p>The user can also specify a special &quot;rule set&quot; named <tt>%%lenient-parse</tt>.
+ * The body of <tt>%%lenient-parse</tt> isn't a set of number-formatting rules, but a <tt>RuleBasedCollator</tt>
+ * description which is used to define equivalences for lenient parsing. For more information
+ * on the syntax, see <tt>RuleBasedCollator</tt>. For more information on lenient parsing,
+ * see <tt>setLenientParse()</tt>.</p>
+ *
+ * <p>The body of a rule set consists of an ordered, semicolon-delimited list of <em>rules.</em>
+ * Internally, every rule has a base value, a divisor, rule text, and zero, one, or two <em>substtutions.</em>
+ * These parameters are controlled by the description syntax, which consists of a <em>rule
+ * descriptor,</em> a colon, and a <em>rule body.</em></p>
+ *
+ * <p>A rule descriptor can take one of the following forms (text in <em>italics</em> is the
+ * name of a token):</p>
+ *
+ * <table border="0" width="100%">
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top"><em>bv</em>:</td>
+ *     <td valign="top"><em>bv</em> specifies the rule's base value. <em>bv</em> is a decimal
+ *     number expressed using ASCII digits. <em>bv</em> may contain spaces, period, and commas,
+ *     which are irgnored. The rule's divisor is the highest power of 10 less than or equal to
+ *     the base value.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top"><em>bv</em>/<em>rad</em>:</td>
+ *     <td valign="top"><em>bv</em> specifies the rule's base value. The rule's divisor is the
+ *     highest power of <em>rad</em> less than or equal to the base value.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top"><em>bv</em>&gt;:</td>
+ *     <td valign="top"><em>bv</em> specifies the rule's base value. To calculate the divisor,
+ *     let the radix be 10, and the exponent be the highest exponent of the radix that yields a
+ *     result less than or equal to the base value. Every &gt; character after the base value
+ *     decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix
+ *     raised to the power of the exponent; otherwise, the divisor is 1.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top"><em>bv</em>/<em>rad</em>&gt;:</td>
+ *     <td valign="top"><em>bv</em> specifies the rule's base value. To calculate the divisor,
+ *     let the radix be <em>rad</em>, and the exponent be the highest exponent of the radix that
+ *     yields a result less than or equal to the base value. Every &gt; character after the radix
+ *     decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix
+ *     raised to the power of the exponent; otherwise, the divisor is 1.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top">-x:</td>
+ *     <td valign="top">The rule is a negative-number rule.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top">x.x:</td>
+ *     <td valign="top">The rule is an <em>improper fraction rule.</em></td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top">0.x:</td>
+ *     <td valign="top">The rule is a <em>proper fraction rule.</em></td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top">x.0:</td>
+ *     <td valign="top">The rule is a <em>master rule.</em></td>
+ *   </tr>
+ *   <tr>
+ *     <td width="5%" valign="top"></td>
+ *     <td width="8%" valign="top"><em>nothing</em></td>
+ *     <td valign="top">If the rule's rule descriptor is left out, the base value is one plus the
+ *     preceding rule's base value (or zero if this is the first rule in the list) in a normal
+ *     rule set.&nbsp; In a fraction rule set, the base value is the same as the preceding rule's
+ *     base value.</td>
+ *   </tr>
+ * </table>
+ *
+ * <p>A rule set may be either a regular rule set or a <em>fraction rule set,</em> depending
+ * on whether it is used to format a number's integral part (or the whole number) or a
+ * number's fractional part. Using a rule set to format a rule's fractional part makes it a
+ * fraction rule set.</p>
+ *
+ * <p>Which rule is used to format a number is defined according to one of the following
+ * algorithms: If the rule set is a regular rule set, do the following:
+ *
+ * <ul>
+ *   <li>If the rule set includes a master rule (and the number was passed in as a <tt>double</tt>),
+ *     use the master rule.&nbsp; (If the number being formatted was passed in as a <tt>long</tt>,
+ *     the master rule is ignored.)</li>
+ *   <li>If the number is negative, use the negative-number rule.</li>
+ *   <li>If the number has a fractional part and is greater than 1, use the improper fraction
+ *     rule.</li>
+ *   <li>If the number has a fractional part and is between 0 and 1, use the proper fraction
+ *     rule.</li>
+ *   <li>Binary-search the rule list for the rule with the highest base value less than or equal
+ *     to the number. If that rule has two substitutions, its base value is not an even multiple
+ *     of its divisor, and the number <em>is</em> an even multiple of the rule's divisor, use the
+ *     rule that precedes it in the rule list. Otherwise, use the rule itself.</li>
+ * </ul>
+ *
+ * <p>If the rule set is a fraction rule set, do the following:
+ *
+ * <ul>
+ *   <li>Ignore negative-number and fraction rules.</li>
+ *   <li>For each rule in the list, multiply the number being formatted (which will always be
+ *     between 0 and 1) by the rule's base value. Keep track of the distance between the result
+ *     the nearest integer.</li>
+ *   <li>Use the rule that produced the result closest to zero in the above calculation. In the
+ *     event of a tie or a direct hit, use the first matching rule encountered. (The idea here is
+ *     to try each rule's base value as a possible denominator of a fraction. Whichever
+ *     denominator produces the fraction closest in value to the number being formatted wins.) If
+ *     the rule following the matching rule has the same base value, use it if the numerator of
+ *     the fraction is anything other than 1; if the numerator is 1, use the original matching
+ *     rule. (This is to allow singular and plural forms of the rule text without a lot of extra
+ *     hassle.)</li>
+ * </ul>
+ *
+ * <p>A rule's body consists of a string of characters terminated by a semicolon. The rule
+ * may include zero, one, or two <em>substitution tokens,</em> and a range of text in
+ * brackets. The brackets denote optional text (and may also include one or both
+ * substitutions). The exact meanings of the substitution tokens, and under what conditions
+ * optional text is omitted, depend on the syntax of the substitution token and the context.
+ * The rest of the text in a rule body is literal text that is output when the rule matches
+ * the number being formatted.</p>
+ *
+ * <p>A substitution token begins and ends with a <em>token character.</em> The token
+ * character and the context together specify a mathematical operation to be performed on the
+ * number being formatted. An optional <em>substitution descriptor </em>specifies how the
+ * value resulting from that operation is used to fill in the substitution. The position of
+ * the substitution token in the rule body specifies the location of the resultant text in
+ * the original rule text.</p>
+ *
+ * <p>The meanings of the substitution token characters are as follows:</p>
+ *
+ * <table border="0" width="100%">
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23">&gt;&gt;</td>
+ *     <td width="165" valign="top">in normal rule</td>
+ *     <td>Divide the number by the rule's divisor and format the remainder</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in negative-number rule</td>
+ *     <td>Find the absolute value of the number and format the result</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in fraction or master rule</td>
+ *     <td>Isolate the number's fractional part and format it.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in rule in fraction rule set</td>
+ *     <td>Not allowed.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23">&gt;&gt;&gt;</td>
+ *     <td width="165" valign="top">in normal rule</td>
+ *     <td>Divide the number by the rule's divisor and format the remainder,
+ *       but bypass the normal rule-selection process and just use the
+ *       rule that precedes this one in this rule list.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in all other rules</td>
+ *     <td>Not allowed.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23">&lt;&lt;</td>
+ *     <td width="165" valign="top">in normal rule</td>
+ *     <td>Divide the number by the rule's divisor and format the quotient</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in negative-number rule</td>
+ *     <td>Not allowed.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in fraction or master rule</td>
+ *     <td>Isolate the number's integral part and format it.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in rule in fraction rule set</td>
+ *     <td>Multiply the number by the rule's base value and format the result.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23">==</td>
+ *     <td width="165" valign="top">in all rule sets</td>
+ *     <td>Format the number unchanged</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23">[]</td>
+ *     <td width="165" valign="top">in normal rule</td>
+ *     <td>Omit the optional text if the number is an even multiple of the rule's divisor</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in negative-number rule</td>
+ *     <td>Not allowed.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in improper-fraction rule</td>
+ *     <td>Omit the optional text if the number is between 0 and 1 (same as specifying both an
+ *     x.x rule and a 0.x rule)</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in master rule</td>
+ *     <td>Omit the optional text if the number is an integer (same as specifying both an x.x
+ *     rule and an x.0 rule)</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in proper-fraction rule</td>
+ *     <td>Not allowed.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="37"></td>
+ *     <td width="23"></td>
+ *     <td width="165" valign="top">in rule in fraction rule set</td>
+ *     <td>Omit the optional text if multiplying the number by the rule's base value yields 1.</td>
+ *   </tr>
+ * </table>
+ *
+ * <p>The substitution descriptor (i.e., the text between the token characters) may take one
+ * of three forms:</p>
+ *
+ * <table border="0" width="100%">
+ *   <tr>
+ *     <td width="42"></td>
+ *     <td width="166" valign="top">a rule set name</td>
+ *     <td>Perform the mathematical operation on the number, and format the result using the
+ *     named rule set.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="42"></td>
+ *     <td width="166" valign="top">a DecimalFormat pattern</td>
+ *     <td>Perform the mathematical operation on the number, and format the result using a
+ *     DecimalFormat with the specified pattern.&nbsp; The pattern must begin with 0 or #.</td>
+ *   </tr>
+ *   <tr>
+ *     <td width="42"></td>
+ *     <td width="166" valign="top">nothing</td>
+ *     <td>Perform the mathematical operation on the number, and format the result using the rule
+ *     set containing the current rule, except:<ul>
+ *       <li>You can't have an empty substitution descriptor with a == substitution.</li>
+ *       <li>If you omit the substitution descriptor in a &gt;&gt; substitution in a fraction rule,
+ *         format the result one digit at a time using the rule set containing the current rule.</li>
+ *       <li>If you omit the substitution descriptor in a &lt;&lt; substitution in a rule in a
+ *         fraction rule set, format the result using the default rule set for this formatter.</li>
+ *     </ul>
+ *     </td>
+ *   </tr>
+ * </table>
+ *
+ * <p>Whitespace is ignored between a rule set name and a rule set body, between a rule
+ * descriptor and a rule body, or between rules. If a rule body begins with an apostrophe,
+ * the apostrophe is ignored, but all text after it becomes significant (this is how you can
+ * have a rule's rule text begin with whitespace). There is no escape function: the semicolon
+ * is not allowed in rule set names or in rule text, and the colon is not allowed in rule set
+ * names. The characters beginning a substitution token are always treated as the beginning
+ * of a substitution token.</p>
+ *
+ * <p>See the resource data and the demo program for annotated examples of real rule sets
+ * using these features.</p>
+ *
+ * @author Richard Gillam
+ * $RCSfile: RuleBasedNumberFormat.java,v $ $Revision: 1.3 $ $Date: 2000/05/26 21:38:55 $
+ * @see NumberFormat
+ * @see DecimalFormat
+ */
+public final class RuleBasedNumberFormat extends NumberFormat {
+
+    //-----------------------------------------------------------------------
+    // constants
+    //-----------------------------------------------------------------------
+
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    /**
+     * Selector code that tells the constructor to create a spellout formatter
+     */
+    public static final int SPELLOUT = 1;
+
+    /**
+     * Selector code that tells the constructor to create an ordinal formatter
+     */
+    public static final int ORDINAL = 2;
+
+    /**
+     * Selector code that tells the constructor to create a duration formatter
+     */
+    public static final int DURATION = 3;
+
+    //-----------------------------------------------------------------------
+    // data members
+    //-----------------------------------------------------------------------
+
+    /**
+     * The formatter's rule sets.
+     */
+    private NFRuleSet[] ruleSets = null;
+
+    /**
+     * A pointer to the formatter's default rule set.  This is always included
+     * in ruleSets.
+     */
+    private NFRuleSet defaultRuleSet = null;
+
+    /**
+     * The formatter's locale.  This is used to create DecimalFormatSymbols and
+     * Collator objects.
+     */
+    private Locale locale = null;
+
+    /**
+     * Collator to be used in lenient parsing.  This variable is lazy-evaluated:
+     * the collator is actually created the first time the client does a parse
+     * with lenient-parse mode turned on.
+     */
+    private Collator collator = null;
+
+    /**
+     * The DecimalFormatSymbols object that any DecimalFormat objects this
+     * formatter uses should use.  This variable is lazy-evaluated: it isn't
+     * filled in if the rule set never uses a DecimalFormat pattern.
+     */
+    private DecimalFormatSymbols decimalFormatSymbols = null;
+
+    /**
+     * Flag specifying whether lenient parse mode is on or off.  Off by default.
+     */
+    private boolean lenientParse = false;
+
+    /**
+     * If the description specifies lenient-parse rules, they're stored here until
+     * the collator is created.
+     */
+    private String lenientParseRules = null;
+
+    //-----------------------------------------------------------------------
+    // constructors
+    //-----------------------------------------------------------------------
+
+    /**
+     * Creates a RuleBasedNumberFormat that behaves according to the description
+     * passed in.  The formatter uses the default locale.
+     * @param description A description of the formatter's desired behavior.
+     * See the class documentation for a complete explanation of the description
+     * syntax.
+     */
+    public RuleBasedNumberFormat(String description) {
+        locale = Locale.getDefault();
+        init(description);
+    }
+
+    /**
+     * Creates a RuleBasedNumberFormat that behaves according to the description
+     * passed in.  The formatter uses the specified locale to determine the
+     * characters to use when formatting in numerals, and to define equivalences
+     * for lenient parsing.
+     * @param description A description of the formatter's desired behavior.
+     * See the class documentation for a complete explanation of the description
+     * syntax.
+     * @param locale A locale, which governs which characters are used for
+     * formatting values in numerals, and which characters are equivalent in
+     * lenient parsing.
+     */
+    public RuleBasedNumberFormat(String description, Locale locale) {
+        this.locale = locale;
+        init(description);
+    }
+
+    /**
+     * Creates a RuleBasedNumberFormat from a predefined description.  The selector
+     * code choosed among three possible predefined formats: spellout, ordinal,
+     * and duration.
+     * @param locale The locale for the formatter.
+     * @param format A selector code specifying which kind of formatter to create for that
+     * locale.  There are three legal values: SPELLOUT, which creates a formatter that
+     * spells out a value in words in the desired language, ORDINAL, which attaches
+     * an ordinal suffix from the desired language to the end of a number (e.g. "123rd"),
+     * and DURATION, which formats a duration in seconds as hours, minutes, and seconds.
+     */
+    public RuleBasedNumberFormat(Locale locale, int format) {
+        this.locale = locale;
+
+        // load up the resource bundle containing the description
+        // from the specified locale
+        ResourceBundle bundle = ResourceBundle.getBundle(
+                        "com.ibm.text.resources.NumberFormatRules",
+                        locale);
+        String description = "";
+
+        // pick a description from the resource bundle based on the
+        // kind of formatter the user asked for
+        switch (format) {
+            case SPELLOUT:
+                description = bundle.getString("SpelloutRules");
+                break;
+
+            case ORDINAL:
+                description = bundle.getString("OrdinalRules");
+                break;
+
+            case DURATION:
+                description = bundle.getString("DurationRules");
+                break;
+        }
+
+        // construct the formatter based on the description
+        init(description);
+    }
+
+    /**
+     * Creates a RuleBasedNumberFormat from a predefined description.  Uses the
+     * default locale.
+     * @param format A selector code specifying which kind of formatter to create.
+     * There are three legal values: SPELLOUT, which creates a formatter that spells
+     * out a value in words in the default locale's langyage, ORDINAL, which attaches
+     * an ordinal suffix from the default locale's language to a numeral, and
+     * DURATION, which formats a duration in seconds as hours, minutes, and seconds.
+     */
+    public RuleBasedNumberFormat(int format) {
+        this(Locale.getDefault(), format);
+    }
+
+    //-----------------------------------------------------------------------
+    // boilerplate
+    //-----------------------------------------------------------------------
+
+    /**
+     * Duplicates this formatter.
+     * @return A RuleBasedNumberFormat that is equal to this one.
+     */
+    public Object clone() {
+        return super.clone();
+    }
+
+    /**
+     * Tests two RuleBasedNumberFormats for equality.
+     * @param that The formatter to compare against this one.
+     * @return true if the two formatters have identical behavior.
+     */
+    public boolean equals(Object that) {
+        // if the other object isn't a RuleBasedNumberFormat, that's
+        // all we need to know
+        if (!(that instanceof RuleBasedNumberFormat)) {
+            return false;
+        } else {
+            // cast the other object's pointer to a pointer to a
+            // RuleBasedNumberFormat
+            RuleBasedNumberFormat that2 = (RuleBasedNumberFormat)that;
+
+            // compare their locales and lenient-parse modes
+            if (!locale.equals(that2.locale) || lenientParse != that2.lenientParse) {
+                return false;
+            }
+
+            // if that succeeds, then compare their rule set lists
+            if (ruleSets.length != that2.ruleSets.length) {
+                return false;
+            }
+            for (int i = 0; i < ruleSets.length; i++) {
+                if (!ruleSets[i].equals(that2.ruleSets[i])) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+    }
+
+    /**
+     * Generates a textual description of this formatter.
+     * @return a String containing a rule set that will produce a RuleBasedNumberFormat
+     * with identical behavior to this one.  This won't necessarily be identical
+     * to the rule set description that was originally passed in, but will produce
+     * the same result.
+     */
+    public String toString() {
+
+        // accumulate the descriptions of all the rule sets in a
+        // StringBuffer, then cast it to a String and return it
+        StringBuffer result = new StringBuffer();
+        for (int i = 0; i < ruleSets.length; i++) {
+            result.append(ruleSets[i].toString());
+        }
+        return result.toString();
+    }
+
+    /**
+     * Writes this object to a stream.
+     * @param out The stream to write to.
+     */
+    private void writeObject(java.io.ObjectOutputStream out)
+                    throws java.io.IOException {
+        // we just write the textual description to the stream, so we
+        // have an implementation-independent streaming format
+        out.writeUTF(this.toString());
+    }
+
+    /**
+     * Reads this object in from a stream.
+     * @param in The stream to read from.
+     */
+    private void readObject(java.io.ObjectInputStream in)
+                    throws java.io.IOException {
+
+        // read the description in from the stream
+        String description = in.readUTF();
+
+        // build a brand-new RuleBasedNumberFormat from the description,
+        // then steal its substructure.  This object's substructure and
+        // the temporary RuleBasedNumberFormat drop on the floor and
+        // get swept up by the garbage collector
+        RuleBasedNumberFormat temp = new RuleBasedNumberFormat(description);
+        ruleSets = temp.ruleSets;
+        defaultRuleSet = temp.defaultRuleSet;
+    }
+
+
+    //-----------------------------------------------------------------------
+    // public API functions
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns a list of the names of all of this formatter's public rule sets.
+     * @return A list of the names of all of this formatter's public rule sets.
+     */
+    public String[] getRuleSetNames() {
+        // preflight the iteration, counting the number of public rule sets
+        // (public rule sets have names that begin with % instead of %%)
+        int count = 0;
+        for (int i = 0; i < ruleSets.length; i++) {
+            if (!ruleSets[i].getName().startsWith("%%")) {
+                ++count;
+            }
+        }
+
+        // then new up an array of the proper size and copy the names into it
+        String[] result = new String[count];
+        count = 0;
+        for (int i = ruleSets.length - 1; i >= 0; i--) {
+            if (!ruleSets[i].getName().startsWith("%%")) {
+                result[count++] = ruleSets[i].getName();
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Formats the specified number according to the specified rule set.
+     * @param number The number to format.
+     * @param ruleSet The name of the rule set to format the number with.
+     * This must be the name of a valid public rule set for this formatter.
+     * @return A textual representation of the number.
+     */
+    public String format(double number, String ruleSet) throws IllegalArgumentException {
+        if (ruleSet.startsWith("%%")) {
+            throw new IllegalArgumentException("Can't use internal rule set");
+        }
+        return format(number, findRuleSet(ruleSet));
+    }
+
+    /**
+     * Formats the specified number according to the specified rule set.
+     * (If the specified rule set specifies a master ["x.0"] rule, this function
+     * ignores it.  Convert the number to a double first if you ned it.)  This
+     * function preserves all the precision in the long-- it doesn't convert it
+     * to a double.
+     * @param number The number to format.
+     * @param ruleSet The name of the rule set to format the number with.
+     * This must be the name of a valid public rule set for this formatter.
+     * @return A textual representation of the number.
+     */
+    public String format(long number, String ruleSet) throws IllegalArgumentException {
+        if (ruleSet.startsWith("%%")) {
+            throw new IllegalArgumentException("Can't use internal rule set");
+        }
+        return format(number, findRuleSet(ruleSet));
+    }
+
+    /**
+     * Formats the specified number using the formatter's default rule set.
+     * (The default rule set is the last public rule set defined in the description.)
+     * @param number The number to format.
+     * @param toAppendTo A StringBuffer that the result should be appended to.
+     * @param ignore This function doesn't examine or update the field position.
+     * @return toAppendTo
+     */
+    public StringBuffer format(double number,
+                               StringBuffer toAppendTo,
+                               FieldPosition ignore) {
+        // this is one of the inherited format() methods.  Since it doesn't
+        // have a way to select the rule set to use, it just uses the
+        // default one
+        toAppendTo.append(format(number, defaultRuleSet));
+        return toAppendTo;
+    }
+
+    /**
+     * Formats the specified number using the formatter's default rule set.
+     * (The default rule set is the last public rule set defined in the description.)
+     * (If the specified rule set specifies a master ["x.0"] rule, this function
+     * ignores it.  Convert the number to a double first if you ned it.)  This
+     * function preserves all the precision in the long-- it doesn't convert it
+     * to a double.
+     * @param number The number to format.
+     * @param toAppendTo A StringBuffer that the result should be appended to.
+     * @param ignore This function doesn't examine or update the field position.
+     * @return toAppendTo
+     */
+    public StringBuffer format(long number,
+                               StringBuffer toAppendTo,
+                               FieldPosition ignore) {
+        // this is one of the inherited format() methods.  Since it doesn't
+        // have a way to select the rule set to use, it just uses the
+        // default one
+        toAppendTo.append(format(number, defaultRuleSet));
+        return toAppendTo;
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Implement com.ibm.text.NumberFormat:
+     * Format a BigInteger.
+     */
+    public StringBuffer format(BigInteger number,
+                               StringBuffer toAppendTo,
+                               FieldPosition pos) {
+        return format(new com.ibm.math.BigDecimal(number), toAppendTo, pos);
+    }
+    
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Implement com.ibm.text.NumberFormat:
+     * Format a BigDecimal.
+     */
+    public StringBuffer format(java.math.BigDecimal number,
+                               StringBuffer toAppendTo,
+                               FieldPosition pos) {
+        return format(new com.ibm.math.BigDecimal(number), toAppendTo, pos);
+    }
+
+    /**
+     * <strong><font face=helvetica color=red>NEW</font></strong>
+     * Implement com.ibm.text.NumberFormat:
+     * Format a BigDecimal.
+     */
+    public StringBuffer format(com.ibm.math.BigDecimal number,
+                               StringBuffer toAppendTo,
+                               FieldPosition pos) {
+        // TEMPORARY:
+        return format(number.doubleValue(), toAppendTo, pos);
+    }
+
+    /**
+     * Parses the specfied string, beginning at the specified position, according
+     * to this formatter's rules.  This will match the string against all of the
+     * formatter's public rule sets and return the value corresponding to the longest
+     * parseable substring.  This function's behavior is affected by the lenient
+     * parse mode.
+     * @param text The string to parse
+     * @param parsePosition On entry, contains the position of the first character
+     * in "text" to examine.  On exit, has been updated to contain the position
+     * of the first character in "text" that wasn't consumed by the parse.
+     * @return The number that corresponds to the parsed text.  This will be an
+     * instance of either Long or Double, depending on whether the result has a
+     * fractional part.
+     * @see #setLenientParseMode
+     */
+    public Number parse(String text, ParsePosition parsePosition) {
+
+        // parsePosition tells us where to start parsing.  We copy the
+        // text in the string from here to the end inro a new string,
+        // and create a new ParsePosition and result variable to use
+        // for the duration of the parse operation
+        String workingText = text.substring(parsePosition.getIndex());
+        ParsePosition workingPos = new ParsePosition(0);
+        Number tempResult = null;
+
+        // keep track of the largest number of characters consumed in
+        // the various trials, and the result that corresponds to it
+        Number result = new Long(0);
+        ParsePosition highWaterMark = new ParsePosition(workingPos.getIndex());
+
+        // iterate over the public rule sets (beginning with the default one)
+        // and try parsing the text with each of them.  Keep track of which
+        // one consumes the most characters: that's the one that determines
+        // the result we return
+        for (int i = ruleSets.length - 1; i >= 0; i--) {
+            // skip private rule sets
+            if (ruleSets[i].getName().startsWith("%%")) {
+                continue;
+            }
+
+            // try parsing the string with the rule set.  If it gets past the
+            // high-water mark, update the high-water mark and the result
+            tempResult = ruleSets[i].parse(workingText, workingPos, Double.MAX_VALUE);
+            if (workingPos.getIndex() > highWaterMark.getIndex()) {
+                result = tempResult;
+                highWaterMark.setIndex(workingPos.getIndex());
+            }
+// commented out because this API on ParsePosition doesn't exist in 1.1.x
+//            if (workingPos.getErrorIndex() > highWaterMark.getErrorIndex()) {
+//                highWaterMark.setErrorIndex(workingPos.getErrorIndex());
+//            }
+
+            // if we manage to use up all the characters in the string,
+            // we don't have to try any more rule sets
+            if (highWaterMark.getIndex() == workingText.length()) {
+                break;
+            }
+
+            // otherwise, reset our internal parse position to the
+            // beginning and try again with the next rule set
+            workingPos.setIndex(0);
+        }
+
+        // add the high water mark to our original parse position and
+        // return the result
+        parsePosition.setIndex(parsePosition.getIndex() + highWaterMark.getIndex());
+// commented out because this API on ParsePosition doesn't exist in 1.1.x
+//        if (highWaterMark.getIndex() == 0) {
+//            parsePosition.setErrorIndex(parsePosition.getIndex() + highWaterMark.getErrorIndex());
+//        }
+        return result;
+    }
+
+    /**
+     * Turns lenient parse mode on and off.
+     *
+     * When in lenient parse mode, the formatter uses a Collator for parsing the text.
+     * Only primary differences are treated as significant.  This means that case
+     * differences, accent differences, alternate spellings of the same letter
+     * (e.g., ae and a-umlaut in German), ignorable characters, etc. are ignored in
+     * matching the text.  In many cases, numerals will be accepted in place of words
+     * or phrases as well.
+     *
+     * For example, all of the following will correctly parse as 255 in English in
+     * lenient-parse mode:
+     * <br>"two hundred fifty-five"
+     * <br>"two hundred fifty five"
+     * <br>"TWO HUNDRED FIFTY-FIVE"
+     * <br>"twohundredfiftyfive"
+     * <br>"2 hundred fifty-5"
+     *
+     * The Collator used is determined by the locale that was
+     * passed to this object on construction.  The description passed to this object
+     * on construction may supply additional collation rules that are appended to the
+     * end of the default collator for the locale, enabling additional equivalences
+     * (such as adding more ignorable characters or permitting spelled-out version of
+     * symbols; see the demo program for examples).
+     *
+     * It's important to emphasize that even strict parsing is relatively lenient: it
+     * will accept some text that it won't produce as output.  In English, for example,
+     * it will correctly parse "two hundred zero" and "fifteen hundred".
+     *
+     * @param enabled If true, turns lenient-parse mode on; if false, turns it off.
+     * @see java.text.RuleBasedCollator
+     */
+    public void setLenientParseMode(boolean enabled) {
+        lenientParse = enabled;
+
+        // if we're leaving lenient-parse mode, throw away the collator
+        // we've been using
+        if (!enabled) {
+            collator = null;
+        }
+    }
+
+    /**
+     * Returns true if lenient-parse mode is turned on.  Lenient parsing is off
+     * by default.
+     * @return true if lenient-parse mode is turned on.
+     * @see #setLenientParseMode
+     */
+    public boolean lenientParseEnabled() {
+        return lenientParse;
+    }
+
+    //-----------------------------------------------------------------------
+    // package-internal API
+    //-----------------------------------------------------------------------
+
+    /**
+     * Returns a reference to the formatter's default rule set.  The default
+     * rule set is the last public rule set in the description.
+     * @return The formatter's default rule set.
+     */
+    NFRuleSet getDefaultRuleSet() {
+        return defaultRuleSet;
+    }
+
+    /**
+     * Returns the collator to use for lenient parsing.  The collator is lazily created:
+     * this function creates it the first time it's called.
+     * @return The collator to use for lenient parsing, or null if lenient parsing
+     * is turned off.
+     */
+    Collator getCollator() {
+        // lazy-evaulate the collator
+        if (collator == null && lenientParse) {
+            try {
+                // create a default collator based on the formatter's locale,
+                // then pull out that collator's rules, append any additional
+                // rules specified in the description, and create a _new_
+                // collator based on the combinaiton of those rules
+                RuleBasedCollator temp = (RuleBasedCollator)collator.getInstance(locale);
+                String rules = temp.getRules() + lenientParseRules;
+
+                collator = new RuleBasedCollator(rules);
+                collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
+            }
+            catch (Exception e) {
+                // If we get here, it means we have a malformed set of
+                // collation rules, which hopefully won't happen
+                e.printStackTrace();
+                collator = null;
+            }
+        }
+
+        // if lenient-parse mode is off, this will be null
+        // (see setLenientParseMode())
+        return collator;
+    }
+
+    /**
+     * Returns the DecimalFormatSymbols object that should be used by all DecimalFormat
+     * instances owned by this formatter.  This object is lazily created: this function
+     * creates it the first time it's called.
+     * @return The DecimalFormatSymbols object that should be used by all DecimalFormat
+     * instances owned by this formatter.
+     */
+    DecimalFormatSymbols getDecimalFormatSymbols() {
+        // lazy-evaluate the DecimalFormatSymbols object.  This object
+        // is shared by all DecimalFormat instances belonging to this
+        // formatter
+        if (decimalFormatSymbols == null) {
+            decimalFormatSymbols = new DecimalFormatSymbols(locale);
+        }
+        return decimalFormatSymbols;
+    }
+
+    //-----------------------------------------------------------------------
+    // construction implementation
+    //-----------------------------------------------------------------------
+
+    /**
+     * This function parses the description and uses it to build all of
+     * internal data structures that the formatter uses to do formatting
+     * @param description The description of the formatter's desired behavior.
+     * This is either passed in by the caller or loaded out of a resource
+     * by one of the constructors, and is in the description format specified
+     * in the class docs.
+     */
+    private void init(String description) {
+        // start by stripping the trailing whitespace from all the rules
+        // (this is all the whitespace follwing each semicolon in the
+        // description).  This allows us to look for rule-set boundaries
+        // by searching for ";%" without having to worry about whitespace
+        // between the ; and the %
+        description = stripWhitespace(description);
+
+        // check to see if there's a set of lenient-parse rules.  If there
+        // is, pull them out into our temporary holding place for them,
+        // and delete them from the description before the real desciption-
+        // parsing code sees them
+        int lp = description.indexOf("%%lenient-parse:");
+        if (lp != -1) {
+            // we've got to make sure we're not in the middle of a rule
+            // (where "%%lenient-parse" would actually get treated as
+            // rule text)
+            if (lp == 0 || description.charAt(lp - 1) == ';') {
+                // locate the beginning and end of the actual collation
+                // rules (there may be whitespace between the name and
+                // the first token in the description)
+                int lpEnd = description.indexOf(";%", lp);
+
+                if (lpEnd == -1) {
+                    lpEnd = description.length() - 1;
+                }
+                int lpStart = lp + "%%lenient-parse:".length();
+                while (Character.isWhitespace(description.charAt(lpStart))) {
+                    ++lpStart;
+                }
+
+                // copy out the lenient-parse rules and delete them
+                // from the description
+                lenientParseRules = description.substring(lpStart, lpEnd);
+                StringBuffer temp = new StringBuffer(description.substring(0, lp));
+                if (lpEnd + 1 < description.length()) {
+                    temp.append(description.substring(lpEnd + 1));
+                }
+                description = temp.toString();
+            }
+        }
+
+        // pre-flight parsing the description and count the number of
+        // rule sets (";%" marks the end of one rule set and the beginning
+        // of the next)
+        int numRuleSets = 0;
+        for (int p = description.indexOf(";%"); p != -1; p = description.indexOf(";%", p)) {
+            ++numRuleSets;
+            ++p;
+        }
+        ++numRuleSets;
+
+        // our rule list is an array of the apprpriate size
+        ruleSets = new NFRuleSet[numRuleSets];
+
+        // divide up the descriptions into individual rule-set descriptions
+        // and store them in a temporary array.  At each step, we also
+        // new up a rule set, but all this does is initialize its name
+        // and remove it from its description.  We can't actually parse
+        // the rest of the descriptions and finish initializing everything
+        // because we have to know the names and locations of all the rule
+        // sets before we can actually set everything up
+        String[] ruleSetDescriptions = new String[numRuleSets];
+
+        int curRuleSet = 0;
+        int start = 0;
+        for (int p = description.indexOf(";%"); p != -1; p = description.indexOf(";%", start)) {
+            ruleSetDescriptions[curRuleSet] = description.substring(start, p + 1);
+            ruleSets[curRuleSet] = new NFRuleSet(ruleSetDescriptions, curRuleSet);
+            ++curRuleSet;
+            start = p + 1;
+        }
+        ruleSetDescriptions[curRuleSet] = description.substring(start);
+        ruleSets[curRuleSet] = new NFRuleSet(ruleSetDescriptions, curRuleSet);
+
+        // now we can take note of the formatter's default rule set, which
+        // is the last public rule set in the description (it's the last
+        // rather than the first so that a user can create a new formatter
+        // from an existing formatter and change its default bevhaior just
+        // by appending more rule sets to the end)
+        setDefaultRuleSet();
+
+        // finally, we can go back through the temporary descriptions
+        // list and finish seting up the substructure (and we throw
+        // away the temporary descriptions as we go)
+        for (int i = 0; i < ruleSets.length; i++) {
+            ruleSets[i].parseRules(ruleSetDescriptions[i], this);
+            ruleSetDescriptions[i] = null;
+        }
+    }
+
+    /**
+     * This function is used by init() to strip whitespace between rules (i.e.,
+     * after semicolons).
+     * @param description The formatter description
+     * @return The description with all the whitespace that follows semicolons
+     * taken out.
+     */
+    private String stripWhitespace(String description) {
+        // since we don't have a method that deletes characters (why?!!)
+        // create a nwe StringBuffer to copy the text into
+        StringBuffer result = new StringBuffer();
+
+        // iterate through the characters...
+        int start = 0;
+        while (start != -1 && start < description.length()) {
+            // seek to the first non-whitespace character...
+            while (start < description.length()
+                   && Character.isWhitespace(description.charAt(start))) {
+                ++start;
+            }
+
+            // locate the next semicolon in the text and copyt he text from
+            // our current position up to that semicolon into the result
+            int p;
+            p = description.indexOf(';', start);
+            if (p == -1) {
+                // or if we don't find a semicolon, just copy the rest of
+                // the string into the result
+                result.append(description.substring(start));
+                start = -1;
+            }
+            else if (p < description.length()) {
+                result.append(description.substring(start, p + 1));
+                start = p + 1;
+            }
+
+            // when we get here, we've seeked off the end of the sring, and
+            // we terminate the loop (we continue until *start* is -1 rather
+            // than until *p* is -1, because otherwise we'd miss the last
+            // rule in the description)
+            else {
+                start = -1;
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * This function is called ONLY DURING CONSTRUCTION to fill in the
+     * defaultRuleSet variable once we've set up all the rule sets.
+     * The default rule set is the last public rule set in the description.
+     * (It's the last rather than the first so that a caller can append
+     * text to the end of an existing formatter description to change its
+     * behavior.)
+     */
+    private void setDefaultRuleSet() {
+        // seek backward from the end of the list until we reach a rule set
+        // whose name DOESN'T begin with %%.  That's the default rule set
+        for (int i = ruleSets.length - 1; i >= 0; --i) {
+            if (!ruleSets[i].getName().startsWith("%%")) {
+                defaultRuleSet = ruleSets[i];
+                return;
+            }
+        }
+        defaultRuleSet = ruleSets[ruleSets.length - 1];
+    }
+
+    //-----------------------------------------------------------------------
+    // formatting implementation
+    //-----------------------------------------------------------------------
+
+    /**
+     * Bottleneck through which all the public format() methods
+     * that take a double pass. By the time we get here, we know
+     * which rule set we're using to do the formatting.
+     * @param number The number to format
+     * @param ruleSet The rule set to use to format the number
+     * @return The text that resulted from formatting the number
+     */
+    String format(double number, NFRuleSet ruleSet) {
+        // all API format() routines that take a double vector through
+        // here.  Create an empty string buffer where the result will
+        // be built, and pass it to the rule set (along with an insertion
+        // position of 0 and the number being formatted) to the rule set
+        // for formatting
+        StringBuffer result = new StringBuffer();
+        ruleSet.format(number, result, 0);
+        return result.toString();
+    }
+
+    /**
+     * Bottleneck through which all the public format() methods
+     * that take a long pass. By the time we get here, we know
+     * which rule set we're using to do the formatting.
+     * @param number The number to format
+     * @param ruleSet The rule set to use to format the number
+     * @return The text that resulted from formatting the number
+     */
+    String format(long number, NFRuleSet ruleSet) {
+        // all API format() routines that take a double vector through
+        // here.  We have these two identical functions-- one taking a
+        // double and one taking a long-- the couple digits of precision
+        // that long has but double doesn't (both types are 8 bytes long,
+        // but double has to borrow some of the mantissa bits to hold
+        // the exponent).
+        // Create an empty string buffer where the result will
+        // be built, and pass it to the rule set (along with an insertion
+        // position of 0 and the number being formatted) to the rule set
+        // for formatting
+        StringBuffer result = new StringBuffer();
+        ruleSet.format(number, result, 0);
+        return result.toString();
+    }
+
+    /**
+     * Returns the named rule set.  Throws an IllegalArgumentException
+     * if this formatter doesn't have a rule set with that name.
+     * @param name The name of the desired rule set
+     * @return The rule set with that name
+     */
+    NFRuleSet findRuleSet(String name) throws IllegalArgumentException {
+        for (int i = 0; i < ruleSets.length; i++) {
+            if (ruleSets[i].getName().equals(name)) {
+                return ruleSets[i];
+            }
+        }
+        throw new IllegalArgumentException("No rule set named " + name);
+    }
+}
+
diff --git a/src/com/ibm/text/RuleBasedTransliterator.java b/src/com/ibm/text/RuleBasedTransliterator.java
new file mode 100755
index 0000000..308cd51
--- /dev/null
+++ b/src/com/ibm/text/RuleBasedTransliterator.java
@@ -0,0 +1,1584 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/RuleBasedTransliterator.java,v $ 
+ * $Date: 2001/02/20 17:59:40 $ 
+ * $Revision: 1.42 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.Hashtable;
+import java.util.Vector;
+import java.text.ParsePosition;
+import com.ibm.util.Utility;
+import com.ibm.text.resources.ResourceReader;
+
+/**
+ * <code>RuleBasedTransliterator</code> is a transliterator
+ * that reads a set of rules in order to determine how to perform
+ * translations. Rule sets are stored in resource bundles indexed by
+ * name. Rules within a rule set are separated by semicolons (';').
+ * To include a literal semicolon, prefix it with a backslash ('\').
+ * Whitespace, as defined by <code>Character.isWhitespace()</code>,
+ * is ignored. If the first non-blank character on a line is '#',
+ * the entire line is ignored as a comment. </p>
+ * 
+ * <p>Each set of rules consists of two groups, one forward, and one
+ * reverse. This is a convention that is not enforced; rules for one
+ * direction may be omitted, with the result that translations in
+ * that direction will not modify the source text. In addition,
+ * bidirectional forward-reverse rules may be specified for
+ * symmetrical transformations.</p>
+ * 
+ * <p><b>Rule syntax</b> </p>
+ * 
+ * <p>Rule statements take one of the following forms: </p>
+ * 
+ * <dl>
+ *     <dt><code>$alefmadda=\u0622;</code></dt>
+ *     <dd><strong>Variable definition.</strong> The name on the
+ *         left is assigned the text on the right. In this example,
+ *         after this statement, instances of the left hand name,
+ *         &quot;<code>$alefmadda</code>&quot;, will be replaced by
+ *         the Unicode character U+0622. Variable names must begin
+ *         with a letter and consist only of letters, digits, and
+ *         underscores. Case is significant. Duplicate names cause
+ *         an exception to be thrown, that is, variables cannot be
+ *         redefined. The right hand side may contain well-formed
+ *         text of any length, including no text at all (&quot;<code>$empty=;</code>&quot;).
+ *         The right hand side may contain embedded <code>UnicodeSet</code>
+ *         patterns, for example, &quot;<code>$softvowel=[eiyEIY]</code>&quot;.</dd>
+ *     <dd>&nbsp;</dd>
+ *     <dt><code>ai&gt;$alefmadda;</code></dt>
+ *     <dd><strong>Forward translation rule.</strong> This rule
+ *         states that the string on the left will be changed to the
+ *         string on the right when performing forward
+ *         transliteration.</dd>
+ *     <dt>&nbsp;</dt>
+ *     <dt><code>ai&lt;$alefmadda;</code></dt>
+ *     <dd><strong>Reverse translation rule.</strong> This rule
+ *         states that the string on the right will be changed to
+ *         the string on the left when performing reverse
+ *         transliteration.</dd>
+ * </dl>
+ * 
+ * <dl>
+ *     <dt><code>ai&lt;&gt;$alefmadda;</code></dt>
+ *     <dd><strong>Bidirectional translation rule.</strong> This
+ *         rule states that the string on the right will be changed
+ *         to the string on the left when performing forward
+ *         transliteration, and vice versa when performing reverse
+ *         transliteration.</dd>
+ * </dl>
+ * 
+ * <p>Translation rules consist of a <em>match pattern</em> and an <em>output
+ * string</em>. The match pattern consists of literal characters,
+ * optionally preceded by context, and optionally followed by
+ * context. Context characters, like literal pattern characters,
+ * must be matched in the text being transliterated. However, unlike
+ * literal pattern characters, they are not replaced by the output
+ * text. For example, the pattern &quot;<code>abc{def}</code>&quot;
+ * indicates the characters &quot;<code>def</code>&quot; must be
+ * preceded by &quot;<code>abc</code>&quot; for a successful match.
+ * If there is a successful match, &quot;<code>def</code>&quot; will
+ * be replaced, but not &quot;<code>abc</code>&quot;. The final '<code>}</code>'
+ * is optional, so &quot;<code>abc{def</code>&quot; is equivalent to
+ * &quot;<code>abc{def}</code>&quot;. Another example is &quot;<code>{123}456</code>&quot;
+ * (or &quot;<code>123}456</code>&quot;) in which the literal
+ * pattern &quot;<code>123</code>&quot; must be followed by &quot;<code>456</code>&quot;.
+ * </p>
+ * 
+ * <p>The output string of a forward or reverse rule consists of
+ * characters to replace the literal pattern characters. If the
+ * output string contains the character '<code>|</code>', this is
+ * taken to indicate the location of the <em>cursor</em> after
+ * replacement. The cursor is the point in the text at which the
+ * next replacement, if any, will be applied. The cursor is usually
+ * placed within the replacement text; however, it can actually be
+ * placed into the precending or following context by using the
+ * special character '<code>@</code>'. Examples:</p>
+ * 
+ * <blockquote>
+ *     <p><code>a {foo} z &gt; | @ bar; # foo -&gt; bar, move cursor
+ *     before a<br>
+ *     {foo} xyz &gt; bar @@|; #&nbsp;foo -&gt; bar, cursor between
+ *     y and z</code></p>
+ * </blockquote>
+ * 
+ * <p><b>UnicodeSet</b></p>
+ * 
+ * <p><code>UnicodeSet</code> patterns may appear anywhere that
+ * makes sense. They may appear in variable definitions.
+ * Contrariwise, <code>UnicodeSet</code> patterns may themselves
+ * contain variable references, such as &quot;<code>$a=[a-z];$not_a=[^$a]</code>&quot;,
+ * or &quot;<code>$range=a-z;$ll=[$range]</code>&quot;.</p>
+ * 
+ * <p><code>UnicodeSet</code> patterns may also be embedded directly
+ * into rule strings. Thus, the following two rules are equivalent:</p>
+ * 
+ * <blockquote>
+ *     <p><code>$vowel=[aeiou]; $vowel&gt;'*'; # One way to do this<br>
+ *     [aeiou]&gt;'*';
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#
+ *     Another way</code></p>
+ * </blockquote>
+ * 
+ * <p>See {@link UnicodeSet} for more documentation and examples.</p>
+ * 
+ * <p><b>Segments</b></p>
+ * 
+ * <p>Segments of the input string can be matched and copied to the
+ * output string. This makes certain sets of rules simpler and more
+ * general, and makes reordering possible. For example:</p>
+ * 
+ * <blockquote>
+ *     <p><code>([a-z]) &gt; $1 $1;
+ *     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#
+ *     double lowercase letters<br>
+ *     ([:Lu:]) ([:Ll:]) &gt; $2 $1; # reverse order of Lu-Ll pairs</code></p>
+ * </blockquote>
+ * 
+ * <p>The segment of the input string to be copied is delimited by
+ * &quot;<code>(</code>&quot; and &quot;<code>)</code>&quot;. Up to
+ * nine segments may be defined. Segments may not overlap. In the
+ * output string, &quot;<code>$1</code>&quot; through &quot;<code>$9</code>&quot;
+ * represent the input string segments, in left-to-right order of
+ * definition.</p>
+ * 
+ * <p><b>Anchors</b></p>
+ * 
+ * <p>Patterns can be anchored to the beginning or the end of the text. This is done with the
+ * special characters '<code>^</code>' and '<code>$</code>'. For example:</p>
+ * 
+ * <blockquote>
+ *   <p><code>^ a&nbsp;&nbsp; &gt; 'BEG_A'; &nbsp;&nbsp;# match 'a' at start of text<br>
+ *   &nbsp; a&nbsp;&nbsp; &gt; 'A';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # match other instances
+ *   of 'a'<br>
+ *   &nbsp; z $ &gt; 'END_Z'; &nbsp;&nbsp;# match 'z' at end of text<br>
+ *   &nbsp; z&nbsp;&nbsp; &gt; 'Z';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # match other instances
+ *   of 'z'</code></p>
+ * </blockquote>
+ * 
+ * <p>It is also possible to match the beginning or the end of the text using a <code>UnicodeSet</code>.
+ * This is done by including a virtual anchor character '<code>$</code>' at the end of the
+ * set pattern. Although this is usually the match chafacter for the end anchor, the set will
+ * match either the beginning or the end of the text, depending on its placement. For
+ * example:</p>
+ * 
+ * <blockquote>
+ *   <p><code>$x = [a-z$]; &nbsp;&nbsp;# match 'a' through 'z' OR anchor<br>
+ *   $x 1&nbsp;&nbsp;&nbsp; &gt; 2;&nbsp;&nbsp; # match '1' after a-z or at the start<br>
+ *   &nbsp;&nbsp; 3 $x &gt; 4; &nbsp;&nbsp;# match '3' before a-z or at the end</code></p>
+ * </blockquote>
+ * 
+ * <p><b>Example</b> </p>
+ * 
+ * <p>The following example rules illustrate many of the features of
+ * the rule language. </p>
+ * 
+ * <table border="0" cellpadding="4">
+ *     <tr>
+ *         <td valign="top">Rule 1.</td>
+ *         <td valign="top" nowrap><code>abc{def}&gt;x|y</code></td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top">Rule 2.</td>
+ *         <td valign="top" nowrap><code>xyz&gt;r</code></td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top">Rule 3.</td>
+ *         <td valign="top" nowrap><code>yz&gt;q</code></td>
+ *     </tr>
+ * </table>
+ * 
+ * <p>Applying these rules to the string &quot;<code>adefabcdefz</code>&quot;
+ * yields the following results: </p>
+ * 
+ * <table border="0" cellpadding="4">
+ *     <tr>
+ *         <td valign="top" nowrap><code>|adefabcdefz</code></td>
+ *         <td valign="top">Initial state, no rules match. Advance
+ *         cursor.</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>a|defabcdefz</code></td>
+ *         <td valign="top">Still no match. Rule 1 does not match
+ *         because the preceding context is not present.</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>ad|efabcdefz</code></td>
+ *         <td valign="top">Still no match. Keep advancing until
+ *         there is a match...</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>ade|fabcdefz</code></td>
+ *         <td valign="top">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>adef|abcdefz</code></td>
+ *         <td valign="top">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>adefa|bcdefz</code></td>
+ *         <td valign="top">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>adefab|cdefz</code></td>
+ *         <td valign="top">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>adefabc|defz</code></td>
+ *         <td valign="top">Rule 1 matches; replace &quot;<code>def</code>&quot;
+ *         with &quot;<code>xy</code>&quot; and back up the cursor
+ *         to before the '<code>y</code>'.</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>adefabcx|yz</code></td>
+ *         <td valign="top">Although &quot;<code>xyz</code>&quot; is
+ *         present, rule 2 does not match because the cursor is
+ *         before the '<code>y</code>', not before the '<code>x</code>'.
+ *         Rule 3 does match. Replace &quot;<code>yz</code>&quot;
+ *         with &quot;<code>q</code>&quot;.</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" nowrap><code>adefabcxq|</code></td>
+ *         <td valign="top">The cursor is at the end;
+ *         transliteration is complete.</td>
+ *     </tr>
+ * </table>
+ * 
+ * <p>The order of rules is significant. If multiple rules may match
+ * at some point, the first matching rule is applied. </p>
+ * 
+ * <p>Forward and reverse rules may have an empty output string.
+ * Otherwise, an empty left or right hand side of any statement is a
+ * syntax error. </p>
+ * 
+ * <p>Single quotes are used to quote any character other than a
+ * digit or letter. To specify a single quote itself, inside or
+ * outside of quotes, use two single quotes in a row. For example,
+ * the rule &quot;<code>'&gt;'&gt;o''clock</code>&quot; changes the
+ * string &quot;<code>&gt;</code>&quot; to the string &quot;<code>o'clock</code>&quot;.
+ * </p>
+ * 
+ * <p><b>Notes</b> </p>
+ * 
+ * <p>While a RuleBasedTransliterator is being built, it checks that
+ * the rules are added in proper order. For example, if the rule
+ * &quot;a&gt;x&quot; is followed by the rule &quot;ab&gt;y&quot;,
+ * then the second rule will throw an exception. The reason is that
+ * the second rule can never be triggered, since the first rule
+ * always matches anything it matches. In other words, the first
+ * rule <em>masks</em> the second rule. </p>
+ * 
+ * <p>Copyright (c) IBM Corporation 1999-2000. All rights reserved.</p>
+ * 
+ * @author Alan Liu
+ * @version $RCSfile: RuleBasedTransliterator.java,v $ $Revision: 1.42 $ $Date: 2001/02/20 17:59:40 $
+ */
+public class RuleBasedTransliterator extends Transliterator {
+
+    private Data data;
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Constructs a new transliterator from the given rules.
+     * @param rules rules, separated by ';'
+     * @param direction either FORWARD or REVERSE.
+     * @exception IllegalArgumentException if rules are malformed
+     * or direction is invalid.
+     */
+    public RuleBasedTransliterator(String ID, String rules, int direction,
+                                   UnicodeFilter filter) {
+        super(ID, filter);
+        if (direction != FORWARD && direction != REVERSE) {
+            throw new IllegalArgumentException("Invalid direction");
+        }
+        data = parse(rules, direction);
+        setMaximumContextLength(data.ruleSet.getMaximumContextLength());
+    }
+
+    /**
+     * Constructs a new transliterator from the given rules in the
+     * <code>FORWARD</code> direction.
+     * @param rules rules, separated by ';'
+     * @exception IllegalArgumentException if rules are malformed
+     * or direction is invalid.
+     */
+    public RuleBasedTransliterator(String ID, String rules) {
+        this(ID, rules, FORWARD, null);
+    }
+
+    RuleBasedTransliterator(String ID, Data data, UnicodeFilter filter) {
+        super(ID, filter);
+        this.data = data;
+        setMaximumContextLength(data.ruleSet.getMaximumContextLength());
+    }
+
+    static Data parse(String[] rules, int direction) {
+        return new Parser(rules, direction).getData();
+    }
+
+    static Data parse(String rules, int direction) {
+        return parse(new String[] { rules }, direction);
+    }
+
+    static Data parse(ResourceReader rules, int direction) {
+        return new Parser(rules, direction).getData();
+    }
+
+    /**
+     * Implements {@link Transliterator#handleTransliterate}.
+     */
+    protected void handleTransliterate(Replaceable text,
+                                       Position index, boolean incremental) {
+        /* We keep start and limit fixed the entire time,
+         * relative to the text -- limit may move numerically if text is
+         * inserted or removed.  The cursor moves from start to limit, with
+         * replacements happening under it.
+         *
+         * Example: rules 1. ab>x|y
+         *                2. yc>z
+         *
+         * |eabcd   start - no match, advance cursor
+         * e|abcd   match rule 1 - change text & adjust cursor
+         * ex|ycd   match rule 2 - change text & adjust cursor
+         * exz|d    no match, advance cursor
+         * exzd|    done
+         */
+
+        /* A rule like
+         *   a>b|a
+         * creates an infinite loop. To prevent that, we put an arbitrary
+         * limit on the number of iterations that we take, one that is
+         * high enough that any reasonable rules are ok, but low enough to
+         * prevent a server from hanging.  The limit is 16 times the
+         * number of characters n, unless n is so large that 16n exceeds a
+         * uint32_t.
+         */
+        int loopCount = 0;
+        int loopLimit = (index.limit - index.start) << 4;
+        if (loopLimit < 0) {
+            loopLimit = 0x7FFFFFFF;
+        }
+
+        boolean partial[] = new boolean[1];
+        partial[0] = false;
+
+        while (index.start < index.limit && loopCount <= loopLimit) {
+            TransliterationRule r = incremental ?
+                data.ruleSet.findIncrementalMatch(text, index,
+                                                  data, partial, getFilter()) :
+                data.ruleSet.findMatch(text, index,
+                                       data, getFilter());
+            /* If we match a rule then apply it by replacing the key
+             * with the rule output and repositioning the cursor
+             * appropriately.  If we get a partial match, then we
+             * can't do anything without more text; return with the
+             * cursor at the current position.  If we get null, then
+             * there is no match at this position, and we can advance
+             * the cursor.
+             */
+            if (r == null) {
+                if (partial[0]) {
+                    break;
+                } else {
+                    ++index.start;
+                }
+            } else {
+                // Delegate replacement to TransliterationRule object
+                int lenDelta = r.replace(text, index.start, data);
+                index.limit += lenDelta;
+                index.contextLimit += lenDelta;
+                index.start += r.getCursorPos();
+                ++loopCount;
+            }
+        }
+    }
+
+
+    static class Data {
+        public Data() {
+            variableNames = new Hashtable();
+            ruleSet = new TransliterationRuleSet();
+        }
+
+        /**
+         * Rule table.  May be empty.
+         */
+        public TransliterationRuleSet ruleSet;
+
+        /**
+         * Map variable name (String) to variable (char[]).  A variable name
+         * corresponds to zero or more characters, stored in a char[] array in
+         * this hash.  One or more of these chars may also correspond to a
+         * UnicodeSet, in which case the character in the char[] in this hash is
+         * a stand-in: it is an index for a secondary lookup in
+         * data.setVariables.  The stand-in also represents the UnicodeSet in
+         * the stored rules.
+         */
+        private Hashtable variableNames;
+
+        /**
+         * Map category variable (Character) to set (UnicodeSet).
+         * Variables that correspond to a set of characters are mapped
+         * from variable name to a stand-in character in data.variableNames.
+         * The stand-in then serves as a key in this hash to lookup the
+         * actual UnicodeSet object.  In addition, the stand-in is
+         * stored in the rule text to represent the set of characters.
+         * setVariables[i] represents character (setVariablesBase + i).
+         */
+        private UnicodeSet[] setVariables;
+
+        /**
+         * The character that represents setVariables[0].  Characters
+         * setVariablesBase through setVariablesBase +
+         * setVariables.length - 1 represent UnicodeSet objects.
+         */
+        private char setVariablesBase;
+
+        /**
+         * The character that represents segment 1.  Characters segmentBase
+         * through segmentBase + 8 represent segments 1 through 9.
+         */
+        private char segmentBase;
+
+        /**
+         * Return the UnicodeSet represented by the given character, or
+         * null if none.
+         */
+        public UnicodeSet lookupSet(char c) {
+            int i = c - setVariablesBase;
+            return (i >= 0 && i < setVariables.length)
+                ? setVariables[i] : null;
+        }
+
+        /**
+         * Return the zero-based index of the segment represented by the given
+         * character, or -1 if none.  Repeat: This is a zero-based return value,
+         * 0..8, even though these are notated "$1".."$9".
+         */
+        public int lookupSegmentReference(char c) {
+            int i = c - segmentBase;
+            return (i >= 0 && i < 9) ? i : -1;
+        }
+    }
+
+
+
+    private static class Parser {
+        /**
+         * Current rule being parsed.
+         */
+        private String rules;
+
+        private int direction;
+
+        private Data data;
+
+        /**
+         * This class implements the SymbolTable interface.  It is used
+         * during parsing to give UnicodeSet access to variables that
+         * have been defined so far.  Note that it uses setVariablesVector,
+         * _not_ data.setVariables.
+         */
+        private class ParseData implements SymbolTable {
+            
+            /**
+             * Implement SymbolTable API.
+             */
+            public char[] lookup(String name) {
+                return (char[]) data.variableNames.get(name);
+            }
+
+            /**
+             * Implement SymbolTable API.
+             */
+            public UnicodeSet lookupSet(char ch) {
+                // Note that we cannot use data.lookupSet() because the
+                // set array has not been constructed yet.
+                int i = ch - data.setVariablesBase;
+                if (i >= 0 && i < setVariablesVector.size()) {
+                    return (UnicodeSet) setVariablesVector.elementAt(i);
+                }
+                return null;
+            }
+
+            /**
+             * Implement SymbolTable API.  Parse out a symbol reference
+             * name.
+             */
+            public String parseReference(String text, ParsePosition pos, int limit) {
+                int start = pos.getIndex();
+                int i = start;
+                while (i < limit) {
+                    char c = text.charAt(i);
+                    if ((i==start && !Character.isUnicodeIdentifierStart(c)) ||
+                        !Character.isUnicodeIdentifierPart(c)) {
+                        break;
+                    }
+                    ++i;
+                }
+                if (i == start) { // No valid name chars
+                    return null;
+                }
+                pos.setIndex(i);
+                return text.substring(start, i);
+            }
+        }
+
+        /**
+         * Temporary symbol table used during parsing.
+         */
+        private ParseData parseData;
+
+        /**
+         * Temporary vector of set variables.  When parsing is complete, this
+         * is copied into the array data.setVariables.  As with data.setVariables,
+         * element 0 corresponds to character data.setVariablesBase.
+         */
+        private Vector setVariablesVector;
+
+        /**
+         * The next available stand-in for variables.  This starts at some point in
+         * the private use area (discovered dynamically) and increments up toward
+         * <code>variableLimit</code>.  At any point during parsing, available
+         * variables are <code>variableNext..variableLimit-1</code>.
+         */
+        private char variableNext;
+
+        /**
+         * The last available stand-in for variables.  This is discovered
+         * dynamically.  At any point during parsing, available variables are
+         * <code>variableNext..variableLimit-1</code>.  During variable definition
+         * we use the special value variableLimit-1 as a placeholder.
+         */
+        private char variableLimit;
+
+        /**
+         * When we encounter an undefined variable, we do not immediately signal
+         * an error, in case we are defining this variable, e.g., "$a = [a-z];".
+         * Instead, we save the name of the undefined variable, and substitute
+         * in the placeholder char variableLimit - 1, and decrement
+         * variableLimit.
+         */
+        private String undefinedVariableName;
+
+        // Operators
+        private static final char VARIABLE_DEF_OP   = '=';
+        private static final char FORWARD_RULE_OP   = '>';
+        private static final char REVERSE_RULE_OP   = '<';
+        private static final char FWDREV_RULE_OP    = '~'; // internal rep of <> op
+
+        private static final String OPERATORS = "=><";
+
+        // Other special characters
+        private static final char QUOTE               = '\'';
+        private static final char ESCAPE              = '\\';
+        private static final char END_OF_RULE         = ';';
+        private static final char RULE_COMMENT_CHAR   = '#';
+
+        private static final char CONTEXT_ANTE        = '{'; // ante{key
+        private static final char CONTEXT_POST        = '}'; // key}post
+        private static final char SET_OPEN            = '[';
+        private static final char SET_CLOSE           = ']';
+        private static final char CURSOR_POS          = '|';
+        private static final char CURSOR_OFFSET       = '@';
+        private static final char ANCHOR_START        = '^';
+
+        // By definition, the ANCHOR_END special character is a
+        // trailing SymbolTable.SYMBOL_REF character.
+        // private static final char ANCHOR_END       = '$';
+
+        // Segments of the input string are delimited by "(" and ")".  In the
+        // output string these segments are referenced as "$1" through "$9".
+        private static final char SEGMENT_OPEN        = '(';
+        private static final char SEGMENT_CLOSE       = ')';
+
+        /**
+         * A private abstract class representing the interface to rule
+         * source code that is broken up into lines.  Handles the
+         * folding of lines terminated by a backslash.  This folding
+         * is limited; it does not account for comments, quotes, or
+         * escapes, so its use to be limited.
+         */
+        private abstract class RuleBody {
+
+            /**
+             * Retrieve the next line of the source, or return null if
+             * none.  Folds lines terminated by a backslash into the
+             * next line, without regard for comments, quotes, or
+             * escapes.
+             */
+            String nextLine() {
+                String s = handleNextLine();
+                if (s != null &&
+                    s.length() > 0 &&
+                    s.charAt(s.length() - 1) == '\\') {
+
+                    StringBuffer b = new StringBuffer(s);
+                    do {
+                        b.deleteCharAt(b.length()-1);
+                        s = handleNextLine();
+                        if (s == null) {
+                            break;
+                        }
+                        b.append(s);
+                    } while (s.length() > 0 &&
+                             s.charAt(s.length() - 1) == '\\');
+
+                    s = b.toString();
+                }
+                return s;
+            }
+
+            /**
+             * Reset to the first line of the source.
+             */
+            abstract void reset();
+
+            /**
+             * Subclass method to return the next line of the source.
+             */
+            abstract String handleNextLine();
+        };
+
+        /**
+         * RuleBody subclass for a String[] array.
+         */
+        private class RuleArray extends RuleBody {
+            String[] array;
+            int i;
+            public RuleArray(String[] array) { this.array = array; i = 0; }
+            public String handleNextLine() {
+                return (i < array.length) ? array[i++] : null;
+            }
+            public void reset() {
+                i = 0;
+            }
+        };
+
+        /**
+         * RuleBody subclass for a ResourceReader.
+         */
+        private class RuleReader extends RuleBody {
+            ResourceReader reader;
+            public RuleReader(ResourceReader reader) { this.reader = reader; }
+            public String handleNextLine() {
+                try {
+                    return reader.readLine();
+                } catch (java.io.IOException e) {}
+                return null;
+            }
+            public void reset() {
+                reader.reset();
+            }
+        };
+
+        /**
+         * @param rules list of rules, separated by semicolon characters
+         * @exception IllegalArgumentException if there is a syntax error in the
+         * rules
+         */
+        public Parser(String[] ruleArray, int direction) {
+            this.direction = direction;
+            data = new Data();
+            parseRules(new RuleArray(ruleArray));
+        }
+
+        /**
+         * @param rules resource reader for the rules
+         */
+        public Parser(ResourceReader rules, int direction) {
+            this.direction = direction;
+            data = new Data();
+            parseRules(new RuleReader(rules));
+        }
+
+        public Data getData() {
+            return data;
+        }
+
+        /**
+         * Parse an array of zero or more rules.  The strings in the array are
+         * treated as if they were concatenated together, with rule terminators
+         * inserted between array elements if not present already.
+         *
+         * Any previous rules are discarded.  Typically this method is called exactly
+         * once, during construction.
+         * @exception IllegalArgumentException if there is a syntax error in the
+         * rules
+         */
+        private void parseRules(RuleBody ruleArray) {
+            determineVariableRange(ruleArray);
+            setVariablesVector = new Vector();
+            parseData = new ParseData();
+
+            StringBuffer errors = null;
+            int errorCount = 0;
+
+            ruleArray.reset();
+        main:
+            for (;;) {
+                String rule = ruleArray.nextLine();
+                if (rule == null) {
+                    break;
+                }
+                int pos = 0;
+                int limit = rule.length();
+                while (pos < limit) {
+                    char c = rule.charAt(pos++);
+                    if (Character.isWhitespace(c)) {
+                        // Ignore leading whitespace.  Note that this is not
+                        // Unicode spaces, but Java spaces -- a subset,
+                        // representing whitespace likely to be seen in code.
+                        continue;
+                    }
+                    // Skip lines starting with the comment character
+                    if (c == RULE_COMMENT_CHAR) {
+                        pos = rule.indexOf("\n", pos) + 1;
+                        if (pos == 0) {
+                            break; // No "\n" found; rest of rule is a commnet
+                        }
+                        continue; // Either fall out or restart with next line
+                    }
+                    // Often a rule file contains multiple errors.  It's
+                    // convenient to the rule author if these are all reported
+                    // at once.  We keep parsing rules even after a failure, up
+                    // to a specified limit, and report all errors at once.
+                    try {
+                        // We've found the start of a rule.  c is its first
+                        // character, and pos points past c.  Lexically parse the
+                        // rule into component pieces.
+                        pos = parseRule(rule, --pos, limit);                    
+                    } catch (IllegalArgumentException e) {
+                        if (errorCount == 30) {
+                            errors.append("\nMore than 30 errors; further messages squelched");
+                            break main;
+                        }
+                        if (errors == null) {
+                            errors = new StringBuffer(e.getMessage());
+                        } else {
+                            errors.append("\n" + e.getMessage());
+                        }
+                        ++errorCount;
+                        pos = ruleEnd(rule, pos, limit) + 1; // +1 advances past ';'
+                    }
+                }
+            }
+
+            // Convert the set vector to an array
+            data.setVariables = new UnicodeSet[setVariablesVector.size()];
+            setVariablesVector.copyInto(data.setVariables);
+            setVariablesVector = null;
+            
+            // Index the rules
+            try {
+                data.ruleSet.freeze(data);
+            } catch (IllegalArgumentException e) {
+                if (errors == null) {
+                    errors = new StringBuffer(e.getMessage());
+                } else {
+                    errors.append("\n").append(e.getMessage());
+                }
+            }
+
+            if (errors != null) {
+                throw new IllegalArgumentException(errors.toString());
+            }
+        }
+
+        /**
+         * A class representing one side of a rule.  This class knows how to
+         * parse half of a rule.  It is tightly coupled to the method
+         * RuleBasedTransliterator.Parser.parseRule().
+         */
+        static class RuleHalf {
+
+            public String text;
+
+            public int cursor = -1; // position of cursor in text
+            public int ante = -1;   // position of ante context marker '{' in text
+            public int post = -1;   // position of post context marker '}' in text
+
+            // Record the position of the segment substrings and references.  A
+            // given side should have segments or segment references, but not
+            // both.
+            public Vector segments = null; // ref substring start,limits
+            public int maxRef = -1; // index of largest ref (1..9)
+
+            // Record the offset to the cursor either to the left or to the
+            // right of the key.  This is indicated by characters on the output
+            // side that allow the cursor to be positioned arbitrarily within
+            // the matching text.  For example, abc{def} > | @@@ xyz; changes
+            // def to xyz and moves the cursor to before abc.  Offset characters
+            // must be at the start or end, and they cannot move the cursor past
+            // the ante- or postcontext text.  Placeholders are only valid in
+            // output text.
+            public int cursorOffset = 0; // only nonzero on output side
+
+            public boolean anchorStart = false;
+            public boolean anchorEnd   = false;
+
+            /**
+             * Parse one side of a rule, stopping at either the limit,
+             * the END_OF_RULE character, or an operator.  Return
+             * the pos of the terminating character (or limit).
+             */
+            public int parse(String rule, int pos, int limit,
+                             RuleBasedTransliterator.Parser parser) {
+                int start = pos;
+                StringBuffer buf = new StringBuffer();
+                ParsePosition pp = null;
+                int cursorOffsetPos = 0; // Position of first CURSOR_OFFSET on _right_
+
+            main:
+                while (pos < limit) {
+                    char c = rule.charAt(pos++);
+                    if (Character.isWhitespace(c)) {
+                        // Ignore whitespace.  Note that this is not Unicode
+                        // spaces, but Java spaces -- a subset, representing
+                        // whitespace likely to be seen in code.
+                        continue;
+                    }
+                    if (OPERATORS.indexOf(c) >= 0) {
+                        --pos; // Backup to point to operator
+                        break main;
+                    }
+                    if (anchorEnd) {
+                        // Text after a presumed end anchor is a syntax err
+                        syntaxError("Syntax error: $", rule, start);
+                    }
+                    // Handle escapes
+                    if (c == ESCAPE) {
+                        if (pos == limit) {
+                            syntaxError("Trailing backslash", rule, start);
+                        }
+                        c = rule.charAt(pos++);
+                        if (c == 'u') {
+                            if ((pos+4) > limit) {
+                                syntaxError("Invalid \\u escape", rule, start);
+                            }
+                            c = '\u0000';
+                            for (int j=pos+4; pos<j;) {
+                                int digit = Character.digit(rule.charAt(pos++), 16);
+                                if (digit<0) {
+                                    syntaxError("Invalid \\u escape", rule, start);
+                                }
+                                c = (char) ((c << 4) | digit);
+                            }                            
+                        }
+                        buf.append(c);
+                        continue;
+                    }
+                    // Handle quoted matter
+                    if (c == QUOTE) {
+                        int iq = rule.indexOf(QUOTE, pos);
+                        if (iq == pos) {
+                            buf.append(c); // Parse [''] outside quotes as [']
+                            ++pos;
+                        } else {
+                            /* This loop picks up a segment of quoted text of the
+                             * form 'aaaa' each time through.  If this segment
+                             * hasn't really ended ('aaaa''bbbb') then it keeps
+                             * looping, each time adding on a new segment.  When it
+                             * reaches the final quote it breaks.
+                             */
+                            for (;;) {
+                                if (iq < 0) {
+                                    syntaxError("Unterminated quote", rule, start);
+                                }
+                                buf.append(rule.substring(pos, iq));
+                                pos = iq+1;
+                                if (pos < limit && rule.charAt(pos) == QUOTE) {
+                                // Parse [''] inside quotes as [']
+                                    iq = rule.indexOf(QUOTE, pos+1);
+                                // Continue looping
+                                } else {
+                                    break;
+                                }
+                            }
+                        }
+                        continue;
+                    }
+                    switch (c) {
+                    case ANCHOR_START:
+                        if (buf.length() == 0 && !anchorStart) {
+                            anchorStart = true;
+                        } else {
+                            syntaxError("Misplaced anchor start",
+                                        rule, start);
+                        }
+                        break;
+                    case SEGMENT_OPEN:
+                    case SEGMENT_CLOSE:
+                        // Handle segment definitions "(" and ")"
+                        // Parse "(", ")"
+                        if (segments == null) {
+                            segments = new Vector();
+                        }
+                        if ((c == SEGMENT_OPEN) !=
+                            (segments.size() % 2 == 0)) {
+                            syntaxError("Mismatched segment delimiters",
+                                        rule, start);
+                        }
+                        segments.addElement(new Integer(buf.length()));
+                        break;
+                    case END_OF_RULE:
+                        --pos; // Backup to point to END_OF_RULE
+                        break main;
+                    case SymbolTable.SYMBOL_REF:
+                        // Handle variable references and segment references "$1" .. "$9"
+                        {
+                            // A variable reference must be followed immediately
+                            // by a Unicode identifier start and zero or more
+                            // Unicode identifier part characters, or by a digit
+                            // 1..9 if it is a segment reference.
+                            if (pos == limit) {
+                                // A variable ref character at the end acts as
+                                // an anchor to the context limit, as in perl.
+                                anchorEnd = true;
+                                break;
+                            }
+                            // Parse "$1" "$2" .. "$9"
+                            c = rule.charAt(pos);
+                            int r = Character.digit(c, 10);
+                            if (r >= 1 && r <= 9) {
+                                if (r > maxRef) {
+                                    maxRef = r;
+                                }
+                                buf.append((char) (parser.data.segmentBase + r - 1));
+                                ++pos;
+                            } else {
+                                if (pp == null) { // Lazy create
+                                    pp = new ParsePosition(0);
+                                }
+                                pp.setIndex(pos);
+                                String name = parser.parseData.
+                                                parseReference(rule, pp, limit);
+                                if (name == null) {
+                                    // This means the '$' was not followed by a
+                                    // valid name.  Try to interpret it as an
+                                    // end anchor then.  If this also doesn't work
+                                    // (if we see a following character) then signal
+                                    // an error.
+                                    anchorEnd = true;
+                                    break;
+                                }
+                                pos = pp.getIndex();
+                                // If this is a variable definition statement,
+                                // then the LHS variable will be undefined.  In
+                                // that case appendVariableDef() will append the
+                                // special placeholder char variableLimit-1.
+                                parser.appendVariableDef(name, buf);
+                            }
+                        }
+                        break;
+                    case CONTEXT_ANTE:
+                        if (ante >= 0) {
+                            syntaxError("Multiple ante contexts", rule, start);
+                        }
+                        ante = buf.length();
+                        break;
+                    case CONTEXT_POST:
+                        if (post >= 0) {
+                            syntaxError("Multiple post contexts", rule, start);
+                        }
+                        post = buf.length();
+                        break;
+                    case SET_OPEN:
+                        if (pp == null) {
+                            pp = new ParsePosition(0);
+                        }
+                        pp.setIndex(pos-1); // Backup to opening '['
+                        buf.append(parser.parseSet(rule, pp));
+                        pos = pp.getIndex();
+                        break;
+                    case CURSOR_POS:
+                        if (cursor >= 0) {
+                            syntaxError("Multiple cursors", rule, start);
+                        }
+                        cursor = buf.length();
+                        break;
+                    case CURSOR_OFFSET:
+                        if (cursorOffset < 0) {
+                            if (buf.length() > 0) {
+                                syntaxError("Misplaced " + c, rule, start);
+                            }
+                            --cursorOffset;
+                        } else if (cursorOffset > 0) {
+                            if (buf.length() != cursorOffsetPos || cursor >= 0) {
+                                syntaxError("Misplaced " + c, rule, start);
+                            }
+                            ++cursorOffset;
+                        } else {
+                            if (cursor == 0 && buf.length() == 0) {
+                                cursorOffset = -1;
+                            } else if (cursor < 0) {
+                                cursorOffsetPos = buf.length();
+                                cursorOffset = 1;
+                            } else {
+                                syntaxError("Misplaced " + c, rule, start);
+                            }
+                        }
+                        break;
+                    // case SET_CLOSE:
+                    default:
+                        // Disallow unquoted characters other than [0-9A-Za-z]
+                        // in the printable ASCII range.  These characters are
+                        // reserved for possible future use.
+                        if (c >= 0x0021 && c <= 0x007E &&
+                            !((c >= '0' && c <= '9') ||
+                              (c >= 'A' && c <= 'Z') ||
+                              (c >= 'a' && c <= 'z'))) {
+                            syntaxError("Unquoted " + c, rule, start);
+                        }
+                        buf.append(c);
+                        break;
+                    }
+                }
+
+                if (cursorOffset > 0 && cursor != cursorOffsetPos) {
+                    syntaxError("Misplaced " + CURSOR_POS, rule, start);
+                }
+                text = buf.toString();
+                return pos;
+            }
+
+            /**
+             * Remove context.
+             */
+            void removeContext() {
+                text = text.substring(ante < 0 ? 0 : ante,
+                                      post < 0 ? text.length() : post);
+                ante = post = -1;
+                anchorStart = anchorEnd = false;
+            }
+
+            /**
+             * Create and return an int[] array of segments.
+             */
+            int[] getSegments() {
+                if (segments == null) {
+                    return null;
+                }
+                int[] result = new int[segments.size()];
+                for (int i=0; i<segments.size(); ++i) {
+                    result[i] = ((Number)segments.elementAt(i)).intValue();
+                }
+                return result;
+            }
+        }
+
+        /**
+         * MAIN PARSER.  Parse the next rule in the given rule string, starting
+         * at pos.  Return the index after the last character parsed.  Do not
+         * parse characters at or after limit.
+         *
+         * Important:  The character at pos must be a non-whitespace character
+         * that is not the comment character.
+         *
+         * This method handles quoting, escaping, and whitespace removal.  It
+         * parses the end-of-rule character.  It recognizes context and cursor
+         * indicators.  Once it does a lexical breakdown of the rule at pos, it
+         * creates a rule object and adds it to our rule list.
+         *
+         * This method is tightly coupled to the inner class RuleHalf.
+         */
+        private int parseRule(String rule, int pos, int limit) {
+            // Locate the left side, operator, and right side
+            int start = pos;
+            char operator = 0;
+
+            RuleHalf left  = new RuleHalf();
+            RuleHalf right = new RuleHalf();
+
+            undefinedVariableName = null;
+            pos = left.parse(rule, pos, limit, this);
+
+            if (pos == limit ||
+                OPERATORS.indexOf(operator = rule.charAt(pos++)) < 0) {
+                syntaxError("No operator", rule, start);
+            }
+
+            // Found an operator char.  Check for forward-reverse operator.
+            if (operator == REVERSE_RULE_OP &&
+                (pos < limit && rule.charAt(pos) == FORWARD_RULE_OP)) {
+                ++pos;
+                operator = FWDREV_RULE_OP;
+            }
+
+            pos = right.parse(rule, pos, limit, this);
+
+            if (pos < limit) {
+                if (rule.charAt(pos) == END_OF_RULE) {
+                    ++pos;
+                } else {
+                    // RuleHalf parser must have terminated at an operator
+                    syntaxError("Unquoted operator", rule, start);
+                }
+            }
+
+            if (operator == VARIABLE_DEF_OP) {
+                // LHS is the name.  RHS is a single character, either a literal
+                // or a set (already parsed).  If RHS is longer than one
+                // character, it is either a multi-character string, or multiple
+                // sets, or a mixture of chars and sets -- syntax error.
+
+                // We expect to see a single undefined variable (the one being
+                // defined).
+                if (undefinedVariableName == null) {
+                    syntaxError("Missing '$' or duplicate definition", rule, start);
+                }
+                if (left.text.length() != 1 || left.text.charAt(0) != variableLimit) {
+                    syntaxError("Malformed LHS", rule, start);
+                }
+                if (left.anchorStart || left.anchorEnd ||
+                    right.anchorStart || right.anchorEnd) {
+                    syntaxError("Malformed variable def", rule, start);
+                }
+                // We allow anything on the right, including an empty string.
+                int n = right.text.length();
+                char[] value = new char[n];
+                right.text.getChars(0, n, value, 0);
+                data.variableNames.put(undefinedVariableName, value);
+
+                ++variableLimit;
+                return pos;
+            }
+
+            // If this is not a variable definition rule, we shouldn't have
+            // any undefined variable names.
+            if (undefinedVariableName != null) {
+                syntaxError("Undefined variable $" + undefinedVariableName,
+                            rule, start);
+            }
+
+            // If the direction we want doesn't match the rule
+            // direction, do nothing.
+            if (operator != FWDREV_RULE_OP &&
+                ((direction == FORWARD) != (operator == FORWARD_RULE_OP))) {
+                return pos;
+            }
+
+            // Transform the rule into a forward rule by swapping the
+            // sides if necessary.
+            if (direction == REVERSE) {
+                RuleHalf temp = left;
+                left = right;
+                right = temp;
+            }
+
+            // Remove non-applicable elements in forward-reverse
+            // rules.  Bidirectional rules ignore elements that do not
+            // apply.
+            if (operator == FWDREV_RULE_OP) {
+                right.removeContext();
+                right.segments = null;
+                left.cursor = left.maxRef = -1;
+                left.cursorOffset = 0;
+            }
+
+            // Normalize context
+            if (left.ante < 0) {
+                left.ante = 0;
+            }
+            if (left.post < 0) {
+                left.post = left.text.length();
+            }
+
+            // Context is only allowed on the input side.  Cursors are only
+            // allowed on the output side.  Segment delimiters can only appear
+            // on the left, and references on the right.  Cursor offset
+            // cannot appear without an explicit cursor.  Cursor offset
+            // cannot place the cursor outside the limits of the context.
+            // Anchors are only allowed on the input side.
+            if (right.ante >= 0 || right.post >= 0 || left.cursor >= 0 ||
+                right.segments != null || left.maxRef >= 0 ||
+                (right.cursorOffset != 0 && right.cursor < 0) ||
+                (right.cursorOffset > (left.text.length() - left.post)) ||
+                (-right.cursorOffset > left.ante) ||
+                right.anchorStart || right.anchorEnd) {
+                syntaxError("Malformed rule", rule, start);
+            }
+
+            // Check integrity of segments and segment references.  Each
+            // segment's start must have a corresponding limit, and the
+            // references must not refer to segments that do not exist.
+            if (left.segments != null) {
+                int n = left.segments.size();
+                if (n % 2 != 0) {
+                    syntaxError("Odd length segments", rule, start);
+                }
+                n /= 2;
+                if (right.maxRef > n) {
+                    syntaxError("Undefined segment reference " + right.maxRef, rule, start);
+                }
+            }
+
+            data.ruleSet.addRule(new TransliterationRule(
+                                         left.text, left.ante, left.post,
+                                         right.text, right.cursor, right.cursorOffset,
+                                         left.getSegments(),
+                                         left.anchorStart, left.anchorEnd));
+            
+            return pos;
+        }
+
+        /**
+         * Throw an exception indicating a syntax error.  Search the rule string
+         * for the probable end of the rule.  Of course, if the error is that
+         * the end of rule marker is missing, then the rule end will not be found.
+         * In any case the rule start will be correctly reported.
+         * @param msg error description
+         * @param rule pattern string
+         * @param start position of first character of current rule
+         */
+        static final void syntaxError(String msg, String rule, int start) {
+            int end = ruleEnd(rule, start, rule.length());
+            throw new IllegalArgumentException(msg + " in \"" +
+                                               Utility.escape(rule.substring(start, end)) + '"');
+        }
+
+        static final int ruleEnd(String rule, int start, int limit) {
+            int end = quotedIndexOf(rule, start, limit, ";");
+            if (end < 0) {
+                end = limit;
+            }
+            return end;
+        }
+
+        /**
+         * Parse a UnicodeSet out, store it, and return the stand-in character
+         * used to represent it.
+         */
+        private final char parseSet(String rule, ParsePosition pos) {
+            UnicodeSet set = new UnicodeSet(rule, pos, parseData);
+            if (variableNext >= variableLimit) {
+                throw new RuntimeException("Private use variables exhausted");
+            }
+            set.compact();
+            setVariablesVector.addElement(set);
+            return variableNext++;
+        }
+
+        /**
+         * Append the value of the given variable name to the given
+         * StringBuffer.
+         * @exception IllegalArgumentException if the name is unknown.
+         */
+        private void appendVariableDef(String name, StringBuffer buf) {
+            char[] ch = (char[]) data.variableNames.get(name);
+            if (ch == null) {
+                // We allow one undefined variable so that variable definition
+                // statements work.  For the first undefined variable we return
+                // the special placeholder variableLimit-1, and save the variable
+                // name.
+                if (undefinedVariableName == null) {
+                    undefinedVariableName = name;
+                    if (variableNext >= variableLimit) {
+                        throw new RuntimeException("Private use variables exhausted");
+                    }
+                    buf.append((char) --variableLimit);
+                } else {
+                    throw new IllegalArgumentException("Undefined variable $"
+                                                       + name);
+                }
+            } else {
+                buf.append(ch);
+            }
+        }
+
+        /**
+         * Determines what part of the private use region of Unicode we can use for
+         * variable stand-ins.  The correct way to do this is as follows: Parse each
+         * rule, and for forward and reverse rules, take the FROM expression, and
+         * make a hash of all characters used.  The TO expression should be ignored.
+         * When done, everything not in the hash is available for use.  In practice,
+         * this method may employ some other algorithm for improved speed.
+         */
+        private final void determineVariableRange(RuleBody ruleArray) {
+            // As an initial implementation, we just run through all the
+            // characters, ignoring any quoting.  This works since the quote
+            // mechanisms are outside the private use area.
+
+            Range r = new Range('\uE000', 0x1900); // Private use area
+            r = r.largestUnusedSubrange(ruleArray);
+            
+            if (r == null) {
+                throw new RuntimeException(
+                    "No private use characters available for variables");
+            }
+
+            // Allocate 9 characters for segment references 1 through 9
+            data.segmentBase = r.start;
+            data.setVariablesBase = variableNext = (char) (data.segmentBase + 9);
+            variableLimit = (char) (r.start + r.length);
+
+            if (variableNext >= variableLimit) {
+                throw new RuntimeException(
+                        "Too few private use characters available for variables");
+            }
+        }
+
+        /**
+         * Returns the index of the first character in a set, ignoring quoted text.
+         * For example, in the string "abc'hide'h", the 'h' in "hide" will not be
+         * found by a search for "h".  Unlike String.indexOf(), this method searches
+         * not for a single character, but for any character of the string
+         * <code>setOfChars</code>.
+         * @param text text to be searched
+         * @param start the beginning index, inclusive; <code>0 <= start
+         * <= limit</code>.
+         * @param limit the ending index, exclusive; <code>start <= limit
+         * <= text.length()</code>.
+         * @param setOfChars string with one or more distinct characters
+         * @return Offset of the first character in <code>setOfChars</code>
+         * found, or -1 if not found.
+         * @see #indexOf
+         */
+        private static int quotedIndexOf(String text, int start, int limit,
+                                         String setOfChars) {
+            for (int i=start; i<limit; ++i) {
+                char c = text.charAt(i);
+                if (c == ESCAPE) {
+                    ++i;
+                } else if (c == QUOTE) {
+                    while (++i < limit
+                           && text.charAt(i) != QUOTE) {}
+                } else if (setOfChars.indexOf(c) >= 0) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+
+
+
+        /**
+         * A range of Unicode characters.  Support the operations of testing for
+         * inclusion (does this range contain this character?) and splitting.
+         * Splitting involves breaking a range into two smaller ranges around a
+         * character inside the original range.  The split character is not included
+         * in either range.  If the split character is at either extreme end of the
+         * range, one of the split products is an empty range.
+         *
+         * This class is used internally to determine the largest available private
+         * use character range for variable stand-ins.
+         */
+        private static class Range implements Cloneable {
+            char start;
+            int length;
+
+            Range(char start, int length) {
+                this.start = start;
+                this.length = length;
+            }
+
+            public Object clone() {
+                return new Range(start, length);
+            }
+
+            boolean contains(char c) {
+                return c >= start && (c - start) < length;
+            }
+
+            /**
+             * Assume that contains(c) is true.  Split this range into two new
+             * ranges around the character c.  Make this range one of the new ranges
+             * (modify it in place) and return the other new range.  The character
+             * itself is not included in either range.  If the split results in an
+             * empty range (that is, if c == start or c == start + length - 1) then
+             * return null.
+             */
+            Range split(char c) {
+                if (c == start) {
+                    ++start;
+                    --length;
+                    return null;
+                } else if (c - start == length - 1) {
+                    --length;
+                    return null;
+                } else {
+                    ++c;
+                    Range r = new Range(c, start + length - c);
+                    length = --c - start;
+                    return r;
+                }
+            }
+
+            /**
+             * Finds the largest unused subrange by the given string.  A
+             * subrange is unused by a string if the string contains no
+             * characters in that range.  If the given string contains no
+             * characters in this range, then this range itself is
+             * returned.
+             */
+            Range largestUnusedSubrange(RuleBody strings) {
+                Vector v = new Vector(1);
+                v.addElement(clone());
+
+                strings.reset();
+                for (;;) {
+                    String str = strings.nextLine();
+                    if (str == null) {
+                        break;
+                    }
+                    int n = str.length();
+                    for (int i=0; i<n; ++i) {
+                        char c = str.charAt(i);
+                        if (contains(c)) {
+                            for (int j=0; j<v.size(); ++j) {
+                                Range r = (Range) v.elementAt(j);
+                                if (r.contains(c)) {
+                                    r = r.split(c);
+                                    if (r != null) {
+                                        v.addElement(r);
+                                    }
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+
+                Range bestRange = null;
+                for (int j=0; j<v.size(); ++j) {
+                    Range r = (Range) v.elementAt(j);
+                    if (bestRange == null || r.length > bestRange.length) {
+                        bestRange = r;
+                    }
+                }
+
+                return bestRange;
+            }
+        }
+    }
+}
+
+/**
+ * $Log: RuleBasedTransliterator.java,v $
+ * Revision 1.42  2001/02/20 17:59:40  alan4j
+ * Remove backslash-u from log
+ *
+ * Revision 1.41  2001/02/16 18:53:55  alan4j
+ * Handle backslash-u escapes
+ *
+ * Revision 1.40  2001/02/03 00:46:21  alan4j
+ * Load RuleBasedTransliterator files from UTF8 files instead of ResourceBundles
+ *
+ * Revision 1.39  2000/08/31 17:11:42  alan4j
+ * Implement anchors.
+ *
+ * Revision 1.38  2000/08/30 20:40:30  alan4j
+ * Implement anchors.
+ *
+ * Revision 1.37  2000/07/12 16:31:36  alan4j
+ * Simplify loop limit logic
+ *
+ * Revision 1.36  2000/06/29 21:59:23  alan4j
+ * Fix handling of Transliterator.Position fields
+ *
+ * Revision 1.35  2000/06/28 20:49:54  alan4j
+ * Fix handling of Positions fields
+ *
+ * Revision 1.34  2000/06/28 20:36:32  alan4j
+ * Clean up Transliterator::Position - rename temporary names
+ *
+ * Revision 1.33  2000/06/28 20:31:43  alan4j
+ * Clean up Transliterator::Position and rename fields (related to jitterbug 450)
+ *
+ * Revision 1.32  2000/05/24 22:21:00  alan4j
+ * Compact UnicodeSets
+ *
+ * Revision 1.31  2000/05/23 16:48:27  alan4j
+ * Fix doc; remove unused auto
+ *
+ * Revision 1.30  2000/05/18 22:49:51  alan
+ * Update docs
+ *
+ * Revision 1.29  2000/04/28 00:25:42  alan
+ * Improve error reporting
+ *
+ * Revision 1.28  2000/04/25 17:38:00  alan
+ * Minor parser cleanup.
+ *
+ * Revision 1.27  2000/04/25 01:42:58  alan
+ * Allow arbitrary length variable values. Clean up Data API. Update javadocs.
+ *
+ * Revision 1.26  2000/04/22 01:25:10  alan
+ * Add support for cursor positioner '@'; update javadoc
+ *
+ * Revision 1.25  2000/04/22 00:08:43  alan
+ * Narrow range to 21 - 7E for mandatory quoting.
+ *
+ * Revision 1.24  2000/04/22 00:03:54  alan
+ * Disallow unquoted special chars. Report multiple errors at once.
+ *
+ * Revision 1.23  2000/04/21 22:23:40  alan
+ * Clean up parseReference. Previous log should read 'delegate', not 'delete'.
+ *
+ * Revision 1.22  2000/04/21 22:16:29  alan
+ * Delete variable name parsing to SymbolTable interface to consolidate parsing code.
+ *
+ * Revision 1.21  2000/04/21 21:16:40  alan
+ * Modify rule syntax
+ *
+ * Revision 1.20  2000/04/19 17:35:23  alan
+ * Update javadoc; fix compile error
+ *
+ * Revision 1.19  2000/04/19 16:34:18  alan
+ * Add segment support.
+ *
+ * Revision 1.18  2000/04/12 20:17:45  alan
+ * Delegate replace operation to rule object
+ *
+ * Revision 1.17  2000/03/10 04:07:23  johnf
+ * Copyright update
+ *
+ * Revision 1.16  2000/02/24 20:46:49  liu
+ * Add infinite loop check
+ *
+ * Revision 1.15  2000/02/10 07:36:25  johnf
+ * fixed imports for com.ibm.util.Utility
+ *
+ * Revision 1.14  2000/02/03 18:18:42  Alan
+ * Use array rather than hashtable for char-to-set map
+ *
+ * Revision 1.13  2000/01/27 18:59:19  Alan
+ * Use Position rather than int[] and move all subclass overrides to one method (handleTransliterate)
+ *
+ * Revision 1.12  2000/01/18 17:51:09  Alan
+ * Remove "keyboard" from method names. Make maximum context a field of Transliterator, and have subclasses set it.
+ *
+ * Revision 1.11  2000/01/18 02:30:49  Alan
+ * Add Jamo-Hangul, Hangul-Jamo, fix rules, add compound ID support
+ *
+ * Revision 1.10  2000/01/13 23:53:23  Alan
+ * Fix bugs found during ICU port
+ *
+ * Revision 1.9  2000/01/11 04:12:06  Alan
+ * Cleanup, embellish comments
+ *
+ * Revision 1.8  2000/01/11 02:25:03  Alan
+ * Rewrite UnicodeSet and RBT parsers for better performance and new syntax
+ *
+ * Revision 1.7  2000/01/06 01:36:36  Alan
+ * Allow string arrays in rule resource bundles
+ *
+ * Revision 1.6  2000/01/04 21:43:57  Alan
+ * Add rule indexing, and move masking check to TransliterationRuleSet.
+ *
+ * Revision 1.5  1999/12/22 01:40:54  Alan
+ * Consolidate rule pattern anteContext, key, and postContext into one string.
+ *
+ * Revision 1.4  1999/12/22 01:05:54  Alan
+ * Improve masking checking; turn it off by default, for better performance
+ */
diff --git a/src/com/ibm/text/SCSU.java b/src/com/ibm/text/SCSU.java
new file mode 100755
index 0000000..ca3a77f
--- /dev/null
+++ b/src/com/ibm/text/SCSU.java
@@ -0,0 +1,190 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/SCSU.java,v $ 
+ * $Date: 2000/03/10 04:07:23 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+/**
+ * An interface defining  constants for the Standard Compression Scheme
+ * for Unicode (SCSU) as outlined in <A
+ * HREF="http://www.unicode.org/unicode/reports/tr6">Unicode Technical
+ * Report #6</A>.
+ *
+ * @author Stephen F. Booth
+ * @version 1.1 05 Aug 99
+ * @version 1.0 26 Jul 99
+ */
+interface SCSU
+{
+    //==========================
+    // Generic window shift
+    //==========================
+    final static int COMPRESSIONOFFSET           = 0x80;
+
+    //==========================
+    // Number of windows
+    //==========================
+    final static int NUMWINDOWS                  = 8;
+    final static int NUMSTATICWINDOWS            = 8;
+
+    //==========================
+    // Indicates a window index is invalid
+    //==========================
+    final static int INVALIDWINDOW               = -1;
+
+    //==========================
+    // Indicates a character doesn't exist in input (past end of buffer)
+    //==========================
+    final static int INVALIDCHAR                 = -1;
+
+    //==========================
+    // Compression modes
+    //==========================
+    final static int SINGLEBYTEMODE              = 0;
+    final static int UNICODEMODE                 = 1;
+
+    //==========================
+    // Maximum value for a window's index
+    //==========================
+    final static int MAXINDEX                    = 0xFF;
+
+    //==========================
+    // Reserved index value (characters belongs to first block)
+    //==========================
+    final static int RESERVEDINDEX               = 0x00;
+
+    //==========================
+    // Indices for scripts which cross a half-block boundary
+    //==========================
+    final static int LATININDEX                  = 0xF9;
+    final static int IPAEXTENSIONINDEX           = 0xFA;
+    final static int GREEKINDEX                  = 0xFB;
+    final static int ARMENIANINDEX               = 0xFC;
+    final static int HIRAGANAINDEX               = 0xFD;
+    final static int KATAKANAINDEX               = 0xFE;
+    final static int HALFWIDTHKATAKANAINDEX      = 0xFF;
+
+    //==========================
+    // Single-byte mode tags
+    //==========================
+    final static int SDEFINEX                    = 0x0B;
+    final static int SRESERVED                   = 0x0C;  // reserved value
+    final static int SQUOTEU                     = 0x0E;
+    final static int SCHANGEU                    = 0x0F;
+
+    final static int SQUOTE0                     = 0x01;
+    final static int SQUOTE1                     = 0x02;
+    final static int SQUOTE2                     = 0x03;
+    final static int SQUOTE3                     = 0x04;
+    final static int SQUOTE4                     = 0x05;
+    final static int SQUOTE5                     = 0x06;
+    final static int SQUOTE6                     = 0x07;
+    final static int SQUOTE7                     = 0x08;
+
+    final static int SCHANGE0                    = 0x10;
+    final static int SCHANGE1                    = 0x11;
+    final static int SCHANGE2                    = 0x12;
+    final static int SCHANGE3                    = 0x13;
+    final static int SCHANGE4                    = 0x14;
+    final static int SCHANGE5                    = 0x15;
+    final static int SCHANGE6                    = 0x16;
+    final static int SCHANGE7                    = 0x17;
+
+    final static int SDEFINE0                    = 0x18;
+    final static int SDEFINE1                    = 0x19;
+    final static int SDEFINE2                    = 0x1A;
+    final static int SDEFINE3                    = 0x1B;
+    final static int SDEFINE4                    = 0x1C;
+    final static int SDEFINE5                    = 0x1D;
+    final static int SDEFINE6                    = 0x1E;
+    final static int SDEFINE7                    = 0x1F;
+
+    //==========================
+    // Unicode mode tags
+    //==========================
+    final static int UCHANGE0                    = 0xE0;
+    final static int UCHANGE1                    = 0xE1;
+    final static int UCHANGE2                    = 0xE2;
+    final static int UCHANGE3                    = 0xE3;
+    final static int UCHANGE4                    = 0xE4;
+    final static int UCHANGE5                    = 0xE5;
+    final static int UCHANGE6                    = 0xE6;
+    final static int UCHANGE7                    = 0xE7;
+
+    final static int UDEFINE0                    = 0xE8;
+    final static int UDEFINE1                    = 0xE9;
+    final static int UDEFINE2                    = 0xEA;
+    final static int UDEFINE3                    = 0xEB;
+    final static int UDEFINE4                    = 0xEC;
+    final static int UDEFINE5                    = 0xED;
+    final static int UDEFINE6                    = 0xEE;
+    final static int UDEFINE7                    = 0xEF;
+
+    final static int UQUOTEU                     = 0xF0;
+    final static int UDEFINEX                    = 0xF1;
+    final static int URESERVED                   = 0xF2;  // reserved value
+
+
+    //==========================
+    // Class variables
+    //==========================
+
+    /** For window offset mapping */
+    final static int [] sOffsetTable = { 
+        // table generated by CompressionTableGenerator
+        0x0, 0x80, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
+	0x480, 0x500, 0x580, 0x600, 0x680, 0x700, 0x780, 0x800, 0x880,
+	0x900, 0x980, 0xa00, 0xa80, 0xb00, 0xb80, 0xc00, 0xc80, 0xd00,
+	0xd80, 0xe00, 0xe80, 0xf00, 0xf80, 0x1000, 0x1080, 0x1100,
+	0x1180, 0x1200, 0x1280, 0x1300, 0x1380, 0x1400, 0x1480,
+	0x1500, 0x1580, 0x1600, 0x1680, 0x1700, 0x1780, 0x1800,
+	0x1880, 0x1900, 0x1980, 0x1a00, 0x1a80, 0x1b00, 0x1b80,
+	0x1c00, 0x1c80, 0x1d00, 0x1d80, 0x1e00, 0x1e80, 0x1f00,
+	0x1f80, 0x2000, 0x2080, 0x2100, 0x2180, 0x2200, 0x2280,
+	0x2300, 0x2380, 0x2400, 0x2480, 0x2500, 0x2580, 0x2600,
+	0x2680, 0x2700, 0x2780, 0x2800, 0x2880, 0x2900, 0x2980,
+	0x2a00, 0x2a80, 0x2b00, 0x2b80, 0x2c00, 0x2c80, 0x2d00,
+	0x2d80, 0x2e00, 0x2e80, 0x2f00, 0x2f80, 0x3000, 0x3080,
+	0x3100, 0x3180, 0x3200, 0x3280, 0x3300, 0x3380, 0xe000,
+	0xe080, 0xe100, 0xe180, 0xe200, 0xe280, 0xe300, 0xe380,
+	0xe400, 0xe480, 0xe500, 0xe580, 0xe600, 0xe680, 0xe700,
+	0xe780, 0xe800, 0xe880, 0xe900, 0xe980, 0xea00, 0xea80,
+	0xeb00, 0xeb80, 0xec00, 0xec80, 0xed00, 0xed80, 0xee00,
+	0xee80, 0xef00, 0xef80, 0xf000, 0xf080, 0xf100, 0xf180,
+	0xf200, 0xf280, 0xf300, 0xf380, 0xf400, 0xf480, 0xf500,
+	0xf580, 0xf600, 0xf680, 0xf700, 0xf780, 0xf800, 0xf880,
+	0xf900, 0xf980, 0xfa00, 0xfa80, 0xfb00, 0xfb80, 0xfc00,
+	0xfc80, 0xfd00, 0xfd80, 0xfe00, 0xfe80, 0xff00, 0xff80, 0x0,
+	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0x250, 0x370,
+	0x530, 0x3040, 0x30a0, 0xff60  
+    };
+
+    /** Static compression window offsets */
+    final static int [] sOffsets = {
+        0x0000,  // for quoting single-byte mode tags
+        0x0080,  // Latin-1 Supplement
+        0x0100,  // Latin Extended-A
+        0x0300,  // Combining Diacritical Marks
+        0x2000,  // General Punctuation
+        0x2080,  // Curency Symbols
+        0x2100,  // Letterlike Symbols and Number Forms
+        0x3000   // CJK Symbols and Punctuation
+    };
+
+};
+
diff --git a/src/com/ibm/text/SearchIterator.java b/src/com/ibm/text/SearchIterator.java
new file mode 100755
index 0000000..6b8a344
--- /dev/null
+++ b/src/com/ibm/text/SearchIterator.java
@@ -0,0 +1,438 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/SearchIterator.java,v $ 
+ * $Date: 2000/03/10 04:07:23 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import java.text.CharacterIterator;
+import java.text.BreakIterator;
+
+/**
+ * <code>SearchIterator</code> is an abstract base class that provides methods
+ * to search for a pattern within a text string.  Instances of
+ * <code>SearchIterator</code> maintain a current position and scan over
+ * the target text, returning the indices the pattern is matched
+ * and the length of each match.
+ * <p>
+ * <code>SearchIterator</code> is an abstract base class that defines a
+ * protocol for text searching.  Subclasses provide concrete implementations of
+ * various search algorithms.  For example, {@link StringSearch}
+ * implements language-sensitive pattern matching based on the comparison rules
+ * defined in a {@link java.text.RuleBasedCollator RuleBasedCollator} object.
+ * <p>
+ * Internally, <code>SearchIterator</code> scans text using a
+ * {@link CharacterIterator}, and is thus able to scan text held
+ * by any object implementing that protocol. A <code>StringCharacterIterator</code>
+ * is used to scan <code>String</code> objects passed to <code>setText</code>.
+ * <p>
+ * <code>SearchIterator</code> provides an API that is similar to that of
+ * other text iteration classes such as <code>BreakIterator</code>.  Using this
+ * class, it is easy to scan through text looking for all occurances of a
+ * given pattern.  The following example uses a <code>StringSearch</code> object to
+ * find all instances of "fox" in the target string.  Any other subclass of
+ * <code>SearchIterator</code> can be used in an identical manner.
+ * <pre><code>
+ * String target = "The quick brown fox jumped over the lazy fox";
+ * String pattern = "fox";
+ *
+ * SearchIterator iter = new StringSearch(pattern, target);
+ *
+ * for (int pos = iter.first(); pos != SearchIterator.DONE; pos = iter.next()) {
+ *     System.out.println("Found match at " + pos +
+ *                        ", length is " + iter.getMatchLength());
+ * }
+ * </code></pre>
+ *
+ * @see StringSearch
+ */
+public abstract class SearchIterator {
+    /**
+     * DONE is returned by previous() and next() after all valid
+     * matches have been returned, and by first() and last() if
+     * there are no matches at all.
+     */
+    public static final int DONE = -1;
+    
+    /**
+     * Private value indicating that the iterator is pointing
+     * before the beginning of the target text.
+     */
+    private static final int BEFORE = -2;
+
+    /**
+     * Return the first index at which the target text matches the search
+     * pattern.  The iterator is adjusted so that its current index
+     * (as returned by {@link #getIndex}) is the match posisition if one was found
+     * and <code>DONE</code> if one was not.
+     *
+     * @return The character index of the first match, or <code>DONE</code> if there
+     *          are no matches.
+     */
+    final public int first() {
+        setIndex(BEFORE);
+        return next();
+    }
+
+    /**
+     * Return the first index greater than <tt>pos</tt> at which the target
+     * text matches the search pattern.   The iterator is adjusted so that its current index
+     * (as returned by {@link #getIndex}) is the match posisition if one was found
+     * and <code>DONE</code> if one was not.
+     *
+     * @return The character index of the first match following <code>pos</code>,
+     *          or <tt>DONE</tt> if there are no matches.
+     */
+    final public int following(int pos) {
+        setIndex(pos);
+        return next();
+    }
+    
+    /**
+     * Return the last index in the target text at which it matches
+     * the search pattern and adjusts the iteration to point to that position.
+     *
+     * @return The index of the first match, or <tt>DONE</tt> if there
+     *          are no matches.
+     */
+    final public int last() {
+        setIndex(DONE);
+        return previous();
+    }
+
+    /**
+     * Return the first index less than <code>pos</code> at which the target
+     * text matches the search pattern.   The iterator is adjusted so that its current index
+     * (as returned by {@link #getIndex}) is the match posisition if one was found
+     * and <tt>DONE</tt> if one was not.
+     *
+     * @return The character index of the first match preceding <code>pos</code>,
+     *          or <code>DONE</code> if there are no matches.
+     */
+    final public int preceding(int pos) {
+        setIndex(pos);
+        return previous();
+    }
+    
+    /**
+     * Return the index of the next point at which the text matches the
+     * search pattern, starting from the current position
+     * <p>
+     * @return The index of the next match after the current position,
+     *          or <code>DONE</code> if there are no more matches.
+     *
+     * @see #first
+     */
+    public int next() {
+        if (index == BEFORE){
+            // Starting at the beginning of the text
+            index = target.getBeginIndex();
+        } else if (length > 0) {
+            // Finding the next match after a previous one
+            index += overlap ? 1 : length;
+        }
+        index -= 1;
+        
+        do {
+            length = 0;
+            index = handleNext(index + 1);
+        } while (index != DONE && !isBreakUnit(index, index+length));
+        
+        return index;
+    }
+
+    /**
+     * Return the index of the previous point at which the text matches
+     * the search pattern, starting at the current position
+     *
+     * @return The index of the previous match before the current position,
+     *          or <code>DONE</code> if there are no more matches.
+     */
+    public int previous() {
+        if (index == DONE) {
+            index = target.getEndIndex();
+        } else if (length > 0) {
+            // Finding the previous match before a following one
+            index = overlap ? index + length - 1 : index;
+        }
+        index += 1;
+        
+        do {
+            length = 0;
+            index = handlePrev(index - 1);
+        } while (index != DONE && !isBreakUnit(index, index+length));
+
+        if (index == DONE) {
+            index = BEFORE;
+        }
+        return getIndex();
+    }
+
+
+
+    /**
+     * Return the current index in the text being searched.
+     * If the iteration has gone past the end of the text
+     * (or past the beginning for a backwards search), 
+     * {@link #DONE} is returned.
+     */
+    public int getIndex() {
+        return index == BEFORE ? DONE : index;
+    }
+
+    /**
+     * Determines whether overlapping matches are returned.  If this
+     * property is <code>true</code>, matches that begin within the
+     * boundry of the previous match are considered valid and will
+     * be returned.  For example, when searching for "abab" in the
+     * target text "ababab", both offsets 0 and 2 will be returned
+     * as valid matches if this property is <code>true</code>.
+     * <p>
+     * The default setting of this property is <tt>true</tt>
+     */
+    public void setOverlapping(boolean allowOverlap) {
+        overlap = allowOverlap;
+    }
+    
+    /**
+     * Determines whether overlapping matches are returned.
+     *
+     * @see #setOverlapping
+     */
+    public boolean isOverlapping() {
+        return overlap;
+    }
+    
+    /**
+     * Returns the length of text in the target which matches the search
+     * pattern.  This call returns a valid result only after a successful
+     * call to {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+     * Just after construction, or after a searching method returns
+     * <tt>DONE</tt>, this method will return 0.
+     *
+     * @return The length of the match in the target text, or 0 if there
+     *          is no match currently.
+     */
+    public int getMatchLength() {
+        return length;
+    }
+
+    /**
+     * Set the BreakIterator that will be used to restrict the points
+     * at which matches are detected.
+     *
+     * @param breaker   A {@link java.text.BreakIterator BreakIterator}
+     *                  that will be used to restrict the points
+     *                  at which matches are detected.  If a match is found, but the match's start
+     *                  or end index is not a boundary as determined by
+     *                  the <tt>BreakIterator</tt>, the match will be rejected and
+     *                  another will be searched for.
+     *
+     *                  If this parameter is <tt>null</tt>, no break
+     *                  detection is attempted.
+     *
+     * @see #getBreakIterator
+     */
+    public void setBreakIterator(BreakIterator iterator) {
+        breaker = iterator;
+        if (breaker != null) {
+            breaker.setText(target);
+        }
+    }
+    
+    /**
+     * Returns the BreakIterator that is used to restrict the points
+     * at which matches are detected.  This will be the same object
+     * that was passed to the constructor or to <code>setBreakIterator</code>.
+     * Note that <tt>null</tt> is a legal value; it means that break
+     * detection should not be attempted.
+     *
+     * @see #setBreakIterator
+     */
+    public BreakIterator getBreakIterator() {
+        return breaker;
+    }
+    
+    /**
+     * Set the target text which should be searched and resets the
+     * iterator's position to point before the start of the target text.
+     * This method is useful if you want to re-use an iterator to
+     * search for the same pattern within a different body of text.
+     *
+     * @see #getTarget
+     */
+    public void setTarget(CharacterIterator iterator) {
+        target = iterator;
+        if (breaker != null) {
+            breaker.setText(target);
+        }
+        setIndex(BEFORE);
+    }
+    
+    /**
+     * Return the target text which is being searched
+     *
+     * @see #setTarget
+     */
+    public CharacterIterator getTarget() {
+        return target;
+    }
+    
+    /**
+     * Returns the text that was matched by the most recent call to 
+     * {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+     * If the iterator is not pointing at a valid match (e.g. just after
+     * construction or after <tt>DONE</tt> has been returned, returns
+     * an empty string.
+     */
+    public String getMatchedText() {
+        StringBuffer buffer = new StringBuffer();
+        
+        if (length > 0) {
+            int i = 0;
+            for (char c = target.setIndex(index); i < length; c = target.next(), i++)
+            {
+                buffer.append(c);
+            }
+        }
+        return buffer.toString();
+    }
+
+    //-------------------------------------------------------------------
+    // Protected interface for subclasses
+    //-------------------------------------------------------------------
+
+    /**
+     * Constructor for use by subclasses
+     * <p>
+     * @param target    The target text to be searched.  This is for internal
+     *                  use by this class.  Subclasses need to maintain their
+     *                  own reference to or iterator over the target text
+     *                  for use by their {@link #handleNext handleNext} and
+     *                  {@link #handlePrev handlePrev} methods.
+     *
+     * @param breaker   A {@link BreakIterator} that is used to restrict the points
+     *                  at which matches are detected.  If <tt>handleNext</tt> or
+     *                  <tt>handlePrev</tt> finds a match, but the match's start
+     *                  or end index is not a boundary as determined by
+     *                  the <tt>BreakIterator</tt>, the match is rejected and 
+     *                  <tt>handleNext</tt> or <tt>handlePrev</tt> is called again.
+     *                  If this parameter is <tt>null</tt>, no break
+     *                  detection is attempted.
+     *                  
+     */
+    protected SearchIterator(CharacterIterator target, BreakIterator breaker)
+    {
+        this.target = target;
+        
+        if (breaker != null) {
+            this.breaker = (BreakIterator)breaker.clone();
+            this.breaker.setText(target);
+        }
+        
+        index = target.getBeginIndex();
+        length = 0;
+    }
+
+    /**
+     * Abstract method which subclasses override to provide the mechanism
+     * for finding the next match in the target text.  This allows different
+     * subclasses to provide different search algorithms.
+     * <p>
+     * If a match is found, the implementation should return the index at
+     * which the match starts and should call {@link #setMatchLength setMatchLength}
+     * with the number of characters in the target
+     * text that make up the match.  If no match is found, the method
+     * should return DONE and should not call <tt>setMatchLength</tt>.
+     * <p>
+     * @param startAt   The index in the target text at which the search
+     *                  should start.
+     *
+     * @see #setMatchLength
+     */
+    protected abstract int handleNext(int startAt);
+
+    /**
+     * Abstract method which subclasses override to provide the mechanism
+     * for finding the previous match in the target text.  This allows different
+     * subclasses to provide different search algorithms.
+     * <p>
+     * If a match is found, the implementation should return the index at
+     * which the match starts and should call {@link #setMatchLength setMatchLength}
+     * with the number of characters in the target
+     * text that make up the match.  If no match is found, the method
+     * should return DONE and should not call <tt>setMatchLength</tt>.
+     * <p>
+     * @param startAt   The index in the target text at which the search
+     *                  should start.
+     *
+     * @see #setMatchLength
+     */
+    protected abstract int handlePrev(int startAt);
+
+    /**
+     * Sets the length of the currently matched string in the target text.
+     * Subclasses' <code>handleNext</code> and <code>handlePrev</code>
+     * methods should call this when they find a match in the target text.
+     */
+    protected void setMatchLength(int length) {
+        this.length = length;
+    }
+
+    //-------------------------------------------------------------------
+    // Privates
+    //
+    
+    /**
+     * Internal method used by preceding and following.  Sets the index
+     * to point to the given position, and clears any state that's
+     * affected.
+     */
+    private void setIndex(int pos) {
+        index = pos;
+        length = 0;
+    }
+    
+    /**
+     * Determine whether the target text bounded by <code>start</code> and
+     * <code>end</code> is one or more whole units of text as determined by
+     * the current <code>BreakIterator</code>.
+     */
+    private boolean isBreakUnit(int start, int end)
+    {
+        if (breaker == null) {
+            return true;
+        } 
+        boolean startBound = breaker.isBoundary(start);
+        boolean endBound = (end == target.getEndIndex()) || breaker.isBoundary(end);
+        
+        return startBound && endBound;
+    }
+    
+    //-------------------------------------------------------------------------
+    // Private data...
+    //-------------------------------------------------------------------------
+    private int                 index;          // Current position in the target text
+    private int                 length;         // Length of matched text, or 0
+    private boolean             overlap = true; // Return overlapping matches?
+    private CharacterIterator   target;         // Target text to be searched
+    private BreakIterator       breaker;        // Break iterator to constrain matches
+
+    //-------------------------------------------------------------------------
+    // Debugging support...
+    //-------------------------------------------------------------------------
+
+    static private final boolean DEBUG = false;
+
+    static void debug(String str) {
+        System.err.println(str);
+    }
+};
\ No newline at end of file
diff --git a/src/com/ibm/text/SimpleDateFormat.java b/src/com/ibm/text/SimpleDateFormat.java
new file mode 100755
index 0000000..81ebedc
--- /dev/null
+++ b/src/com/ibm/text/SimpleDateFormat.java
@@ -0,0 +1,1398 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/SimpleDateFormat.java,v $ 
+ * $Date: 2000/11/21 06:54:53 $ 
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import com.ibm.text.DateFormat;
+import java.text.MessageFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+
+import com.ibm.util.TimeZone;
+import com.ibm.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import com.ibm.util.SimpleTimeZone;
+import com.ibm.util.GregorianCalendar;
+import java.io.ObjectInputStream;
+import java.io.IOException;
+import java.lang.ClassNotFoundException;
+import java.util.Hashtable;
+import java.lang.StringIndexOutOfBoundsException;
+
+/**
+ * <code>SimpleDateFormat</code> is a concrete class for formatting and
+ * parsing dates in a locale-sensitive manner. It allows for formatting
+ * (date -> text), parsing (text -> date), and normalization.
+ *
+ * <p>
+ * <code>SimpleDateFormat</code> allows you to start by choosing
+ * any user-defined patterns for date-time formatting. However, you
+ * are encouraged to create a date-time formatter with either
+ * <code>getTimeInstance</code>, <code>getDateInstance</code>, or
+ * <code>getDateTimeInstance</code> in <code>DateFormat</code>. Each
+ * of these class methods can return a date/time formatter initialized
+ * with a default format pattern. You may modify the format pattern
+ * using the <code>applyPattern</code> methods as desired.
+ * For more information on using these methods, see
+ * {@link DateFormat}.
+ *
+ * <p>
+ * <strong>Time Format Syntax:</strong>
+ * <p>
+ * To specify the time format use a <em>time pattern</em> string.
+ * In this pattern, all ASCII letters are reserved as pattern letters,
+ * which are defined as the following:
+ * <blockquote>
+ * <pre>
+ * Symbol   Meaning                 Presentation        Example
+ * ------   -------                 ------------        -------
+ * G        era designator          (Text)              AD
+ * y        year                    (Number)            1996
+ * u        extended year           (Number)            4601
+ * M        month in year           (Text & Number)     July & 07
+ * d        day in month            (Number)            10
+ * h        hour in am/pm (1~12)    (Number)            12
+ * H        hour in day (0~23)      (Number)            0
+ * m        minute in hour          (Number)            30
+ * s        second in minute        (Number)            55
+ * S        millisecond             (Number)            978
+ * E        day in week             (Text)              Tuesday
+ * D        day in year             (Number)            189
+ * F        day of week in month    (Number)            2 (2nd Wed in July)
+ * w        week in year            (Number)            27
+ * W        week in month           (Number)            2
+ * a        am/pm marker            (Text)              PM
+ * k        hour in day (1~24)      (Number)            24
+ * K        hour in am/pm (0~11)    (Number)            0
+ * z        time zone               (Text)              Pacific Standard Time
+ * '        escape for text         (Delimiter)
+ * ''       single quote            (Literal)           '
+ * </pre>
+ * </blockquote>
+ * The count of pattern letters determine the format.
+ * <p>
+ * <strong>(Text)</strong>: 4 or more pattern letters--use full form,
+ * &lt; 4--use short or abbreviated form if one exists.
+ * <p>
+ * <strong>(Number)</strong>: the minimum number of digits. Shorter
+ * numbers are zero-padded to this amount. Year is handled specially;
+ * that is, if the count of 'y' is 2, the Year will be truncated to 2 digits.
+ * <p>
+ * <strong>(Text & Number)</strong>: 3 or over, use text, otherwise use number.
+ * <p>
+ * Any characters in the pattern that are not in the ranges of ['a'..'z']
+ * and ['A'..'Z'] will be treated as quoted text. For instance, characters
+ * like ':', '.', ' ', '#' and '@' will appear in the resulting time text
+ * even they are not embraced within single quotes.
+ * <p>
+ * A pattern containing any invalid pattern letter will result in a thrown
+ * exception during formatting or parsing.
+ *
+ * <p>
+ * <strong>Examples Using the US Locale:</strong>
+ * <blockquote>
+ * <pre>
+ * Format Pattern                         Result
+ * --------------                         -------
+ * "yyyy.MM.dd G 'at' hh:mm:ss z"    ->>  1996.07.10 AD at 15:08:56 PDT
+ * "EEE, MMM d, ''yy"                ->>  Wed, July 10, '96
+ * "h:mm a"                          ->>  12:08 PM
+ * "hh 'o''clock' a, zzzz"           ->>  12 o'clock PM, Pacific Daylight Time
+ * "K:mm a, z"                       ->>  0:00 PM, PST
+ * "yyyyy.MMMMM.dd GGG hh:mm aaa"    ->>  1996.July.10 AD 12:08 PM
+ * </pre>
+ * </blockquote>
+ * <strong>Code Sample:</strong>
+ * <blockquote>
+ * <pre>
+ * SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, "PST");
+ * pdt.setStartRule(DateFields.APRIL, 1, DateFields.SUNDAY, 2*60*60*1000);
+ * pdt.setEndRule(DateFields.OCTOBER, -1, DateFields.SUNDAY, 2*60*60*1000);
+ * <br>
+ * // Format the current time.
+ * SimpleDateFormat formatter
+ *     = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz");
+ * Date currentTime_1 = new Date();
+ * String dateString = formatter.format(currentTime_1);
+ * <br>
+ * // Parse the previous string back into a Date.
+ * ParsePosition pos = new ParsePosition(0);
+ * Date currentTime_2 = formatter.parse(dateString, pos);
+ * </pre>
+ * </blockquote>
+ * In the example, the time value <code>currentTime_2</code> obtained from
+ * parsing will be equal to <code>currentTime_1</code>. However, they may not be
+ * equal if the am/pm marker 'a' is left out from the format pattern while
+ * the "hour in am/pm" pattern symbol is used. This information loss can
+ * happen when formatting the time in PM.
+ *
+ * <p>
+ * When parsing a date string using the abbreviated year pattern ("y" or "yy"),
+ * SimpleDateFormat must interpret the abbreviated year
+ * relative to some century.  It does this by adjusting dates to be
+ * within 80 years before and 20 years after the time the SimpleDateFormat
+ * instance is created. For example, using a pattern of "MM/dd/yy" and a
+ * SimpleDateFormat instance created on Jan 1, 1997,  the string
+ * "01/11/12" would be interpreted as Jan 11, 2012 while the string "05/04/64"
+ * would be interpreted as May 4, 1964.
+ * During parsing, only strings consisting of exactly two digits, as defined by
+ * {@link Character#isDigit(char)}, will be parsed into the default century.
+ * Any other numeric string, such as a one digit string, a three or more digit
+ * string, or a two digit string that isn't all digits (for example, "-1"), is
+ * interpreted literally.  So "01/02/3" or "01/02/003" are parsed, using the
+ * same pattern, as Jan 2, 3 AD.  Likewise, "01/02/-3" is parsed as Jan 2, 4 BC.
+ *
+ * <p>
+ * If the year pattern has more than two 'y' characters, the year is
+ * interpreted literally, regardless of the number of digits.  So using the
+ * pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.
+ *
+ * <p>
+ * For time zones that have no names, use strings GMT+hours:minutes or
+ * GMT-hours:minutes.
+ *
+ * <p>
+ * The calendar defines what is the first day of the week, the first week
+ * of the year, whether hours are zero based or not (0 vs 12 or 24), and the
+ * time zone. There is one common decimal format to handle all the numbers;
+ * the digit count is handled programmatically according to the pattern.
+ *
+ * @see          com.ibm.util.Calendar
+ * @see          com.ibm.util.GregorianCalendar
+ * @see          com.ibm.util.TimeZone
+ * @see          DateFormat
+ * @see          DateFormatSymbols
+ * @see          DecimalFormat
+ * @version      1.51, 09/24/99
+ * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+public class SimpleDateFormat extends DateFormat {
+
+    // the official serial version ID which says cryptically
+    // which version we're compatible with
+    static final long serialVersionUID = 4774881970558875024L;
+
+    // the internal serial version which says which version was written
+    // - 0 (default) for version up to JDK 1.1.3
+    // - 1 for version from JDK 1.1.4, which includes a new field
+    static final int currentSerialVersion = 1;
+
+    /**
+     * The version of the serialized data on the stream.  Possible values:
+     * <ul>
+     * <li><b>0</b> or not present on stream: JDK 1.1.3.  This version
+     * has no <code>defaultCenturyStart</code> on stream.
+     * <li><b>1</b> JDK 1.1.4 or later.  This version adds
+     * <code>defaultCenturyStart</code>.
+     * </ul>
+     * When streaming out this class, the most recent format
+     * and the highest allowable <code>serialVersionOnStream</code>
+     * is written.
+     * @serial
+     * @since JDK1.1.4
+     */
+    private int serialVersionOnStream = currentSerialVersion;
+
+    /**
+     * The pattern string of this formatter.  This is always a non-localized
+     * pattern.  May not be null.  See class documentation for details.
+     * @serial
+     */
+    private String pattern;
+
+    /**
+     * The symbols used by this formatter for week names, month names,
+     * etc.  May not be null.
+     * @serial
+     * @see DateFormatSymbols
+     */
+    private DateFormatSymbols formatData;
+
+    /**
+     * We map dates with two-digit years into the century starting at
+     * <code>defaultCenturyStart</code>, which may be any date.  May
+     * not be null.
+     * @serial
+     * @since JDK1.1.4
+     */
+    private Date defaultCenturyStart;
+
+    transient private int defaultCenturyStartYear;
+
+    private static final int millisPerHour = 60 * 60 * 1000;
+    private static final int millisPerMinute = 60 * 1000;
+
+    // For time zones that have no names, use strings GMT+minutes and
+    // GMT-minutes. For instance, in France the time zone is GMT+60.
+    private static final String GMT_PLUS = "GMT+";
+    private static final String GMT_MINUS = "GMT-";
+    private static final String GMT = "GMT";
+
+    /**
+     * Cache to hold the DateTimePatterns of a Locale.
+     */
+    private static Hashtable cachedLocaleData = new Hashtable(3);
+
+    /**
+     * Construct a SimpleDateFormat using the default pattern for the default
+     * locale.  <b>Note:</b> Not all locales support SimpleDateFormat; for full
+     * generality, use the factory methods in the DateFormat class.
+     *
+     * @see DateFormat
+     */
+    public SimpleDateFormat() {
+        this(SHORT, SHORT, Locale.getDefault());
+    }
+
+    /**
+     * Construct a SimpleDateFormat using the given pattern in the default
+     * locale.  <b>Note:</b> Not all locales support SimpleDateFormat; for full
+     * generality, use the factory methods in the DateFormat class.
+     */
+    public SimpleDateFormat(String pattern)
+    {
+        this(pattern, Locale.getDefault());
+    }
+
+    /**
+     * Construct a SimpleDateFormat using the given pattern and locale.
+     * <b>Note:</b> Not all locales support SimpleDateFormat; for full
+     * generality, use the factory methods in the DateFormat class.
+     */
+    public SimpleDateFormat(String pattern, Locale loc)
+    {
+        this.pattern = pattern;
+        this.formatData = new DateFormatSymbols(loc);
+        initialize(loc);
+    }
+
+    /**
+     * Construct a SimpleDateFormat using the given pattern and
+     * locale-specific symbol data.
+     */
+    public SimpleDateFormat(String pattern, DateFormatSymbols formatData)
+    {
+        this.pattern = pattern;
+        this.formatData = (DateFormatSymbols) formatData.clone();
+        initialize(Locale.getDefault());
+    }
+
+    /* Package-private, called by DateFormat factory methods */
+    SimpleDateFormat(int timeStyle, int dateStyle, Locale loc) {
+        /* try the cache first */
+        String[] dateTimePatterns = (String[]) cachedLocaleData.get(loc);
+        if (dateTimePatterns == null) { /* cache miss */
+            ResourceBundle r = ResourceBundle.getBundle
+            ("java.text.resources.LocaleElements", loc);
+            dateTimePatterns = r.getStringArray("DateTimePatterns");
+            /* update cache */
+            cachedLocaleData.put(loc, dateTimePatterns);
+        }
+	formatData = new DateFormatSymbols(loc);
+	if ((timeStyle >= 0) && (dateStyle >= 0)) {
+	  Object[] dateTimeArgs = {dateTimePatterns[timeStyle],
+			       dateTimePatterns[dateStyle + 4]};
+	  pattern = MessageFormat.format(dateTimePatterns[8], dateTimeArgs);
+	}
+	else if (timeStyle >= 0) {
+	  pattern = dateTimePatterns[timeStyle];
+	}
+	else if (dateStyle >= 0) {
+            pattern = dateTimePatterns[dateStyle + 4];
+	}
+	else {
+	    throw new IllegalArgumentException("No date or time style specified");
+	}
+
+	initialize(loc);
+    }
+
+    /* Initialize calendar and numberFormat fields */
+    private void initialize(Locale loc) {
+        // The format object must be constructed using the symbols for this zone.
+        // However, the calendar should use the current default TimeZone.
+        // If this is not contained in the locale zone strings, then the zone
+        // will be formatted using generic GMT+/-H:MM nomenclature.
+        calendar = Calendar.getInstance(TimeZone.getDefault(), loc);
+        numberFormat = NumberFormat.getInstance(loc);
+        numberFormat.setGroupingUsed(false);
+        if (numberFormat instanceof DecimalFormat)
+            ((DecimalFormat)numberFormat).setDecimalSeparatorAlwaysShown(false);
+        numberFormat.setParseIntegerOnly(true); /* So that dd.MM.yy can be parsed */
+        numberFormat.setMinimumFractionDigits(0); // To prevent "Jan 1.00, 1997.00"
+
+        initializeDefaultCentury();
+    }
+
+    /* Initialize the fields we use to disambiguate ambiguous years. Separate
+     * so we can call it from readObject().
+     */
+    private void initializeDefaultCentury() {
+        calendar.setTime( new Date() );
+        calendar.add( Calendar.YEAR, -80 );
+        parseAmbiguousDatesAsAfter(calendar.getTime());
+    }
+
+    /* Define one-century window into which to disambiguate dates using
+     * two-digit years.
+     */
+    private void parseAmbiguousDatesAsAfter(Date startDate) {
+        defaultCenturyStart = startDate;
+        calendar.setTime(startDate);
+        defaultCenturyStartYear = calendar.get(Calendar.YEAR);
+    }
+
+    /**
+     * Sets the 100-year period 2-digit years will be interpreted as being in
+     * to begin on the date the user specifies.
+     * @param startDate During parsing, two digit years will be placed in the range
+     * <code>startDate</code> to <code>startDate + 100 years</code>.
+     */
+    public void set2DigitYearStart(Date startDate) {
+        parseAmbiguousDatesAsAfter(startDate);
+    }
+
+    /**
+     * Returns the beginning date of the 100-year period 2-digit years are interpreted
+     * as being within.
+     * @return the start of the 100-year period into which two digit years are
+     * parsed
+     */
+    public Date get2DigitYearStart() {
+        return defaultCenturyStart;
+    }
+
+    /**
+     * Overrides DateFormat
+     * <p>Formats a date or time, which is the standard millis
+     * since January 1, 1970, 00:00:00 GMT.
+     * <p>Example: using the US locale:
+     * "yyyy.MM.dd G 'at' HH:mm:ss zzz" ->> 1996.07.10 AD at 15:08:56 PDT
+     * @param date the date-time value to be formatted into a date-time string.
+     * @param toAppendTo where the new date-time text is to be appended.
+     * @param pos the formatting position. On input: an alignment field,
+     * if desired. On output: the offsets of the alignment field.
+     * @return the formatted date-time string.
+     * @see DateFormat
+     */
+    public StringBuffer format(Date date, StringBuffer toAppendTo,
+                               FieldPosition pos)
+    {
+        // Initialize
+        pos.setBeginIndex(0);
+        pos.setEndIndex(0);
+
+        // Convert input date to time field list
+        calendar.setTime(date);
+
+        boolean inQuote = false; // true when between single quotes
+        char prevCh = 0; // previous pattern character
+        int count = 0;  // number of time prevCh repeated
+        for (int i=0; i<pattern.length(); ++i) {
+            char ch = pattern.charAt(i);
+            // Use subFormat() to format a repeated pattern character
+            // when a different pattern or non-pattern character is seen
+            if (ch != prevCh && count > 0) {
+                toAppendTo.append(
+                        subFormat(prevCh, count, toAppendTo.length(), pos, formatData));
+                count = 0;
+            }
+            if (ch == '\'') {
+                // Consecutive single quotes are a single quote literal,
+                // either outside of quotes or between quotes
+                if ((i+1)<pattern.length() && pattern.charAt(i+1) == '\'') {
+                    toAppendTo.append('\'');
+                    ++i;
+                } else {
+                    inQuote = !inQuote;
+                }
+            } else if (!inQuote
+                       && (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')) {
+                // ch is a date-time pattern character to be interpreted
+                // by subFormat(); count the number of times it is repeated
+                prevCh = ch;
+                ++count;
+            }
+            else {
+                // Append quoted characters and unquoted non-pattern characters
+                toAppendTo.append(ch);
+            }
+        }
+        // Format the last item in the pattern, if any
+        if (count > 0) {
+            toAppendTo.append(
+                    subFormat(prevCh, count, toAppendTo.length(), pos, formatData));
+        }
+        return toAppendTo;
+    }
+
+    // Map index into pattern character string to Calendar field number
+    private static final int[] PATTERN_INDEX_TO_CALENDAR_FIELD =
+    {
+        Calendar.ERA, Calendar.YEAR, Calendar.MONTH, Calendar.DATE,
+        Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY, Calendar.MINUTE,
+        Calendar.SECOND, Calendar.MILLISECOND, Calendar.DAY_OF_WEEK,
+        Calendar.DAY_OF_YEAR, Calendar.DAY_OF_WEEK_IN_MONTH,
+        Calendar.WEEK_OF_YEAR, Calendar.WEEK_OF_MONTH,
+        Calendar.AM_PM, Calendar.HOUR, Calendar.HOUR, Calendar.ZONE_OFFSET
+    };
+
+    // Map index into pattern character string to DateFormat field number
+    private static final int[] PATTERN_INDEX_TO_DATE_FORMAT_FIELD = {
+        DateFormat.ERA_FIELD, DateFormat.YEAR_FIELD, DateFormat.MONTH_FIELD,
+        DateFormat.DATE_FIELD, DateFormat.HOUR_OF_DAY1_FIELD,
+        DateFormat.HOUR_OF_DAY0_FIELD, DateFormat.MINUTE_FIELD,
+        DateFormat.SECOND_FIELD, DateFormat.MILLISECOND_FIELD,
+        DateFormat.DAY_OF_WEEK_FIELD, DateFormat.DAY_OF_YEAR_FIELD,
+        DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD, DateFormat.WEEK_OF_YEAR_FIELD,
+        DateFormat.WEEK_OF_MONTH_FIELD, DateFormat.AM_PM_FIELD,
+        DateFormat.HOUR1_FIELD, DateFormat.HOUR0_FIELD,
+        DateFormat.TIMEZONE_FIELD,
+    };
+
+    /**
+     * Format a single field, given its pattern character.  Subclasses may
+     * override this method in order to modify or add formatting
+     * capabilities.
+     * @param ch the pattern character
+     * @param count the number of times ch is repeated in the pattern
+     * @param beginOffset the offset of the output string at the start of
+     * this field; used to set pos when appropriate
+     * @param pos receives the position of a field, when appropriate
+     * @param formatData the symbols for this formatter
+     */
+    protected String subFormat(char ch, int count, int beginOffset,
+                             FieldPosition pos, DateFormatSymbols formatData)
+         throws IllegalArgumentException
+    {
+        int     patternCharIndex = -1;
+        int     maxIntCount = Integer.MAX_VALUE;
+        String  current = "";
+
+        // TEMPORARY HACK TODO fix this
+        if (ch == 'u') { // 'u' - EXTENDED_YEAR
+            return zeroPaddingNumber(calendar.get(Calendar.EXTENDED_YEAR),
+                                     1, maxIntCount);
+        }
+
+        if ((patternCharIndex=formatData.patternChars.indexOf(ch)) == -1)
+            throw new IllegalArgumentException("Illegal pattern character " +
+                                               "'" + ch + "'");
+
+        int field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex];
+        int value = calendar.get(field);
+
+        switch (patternCharIndex) {
+        case 0: // 'G' - ERA
+            current = formatData.eras[value];
+            break;
+        case 1: // 'y' - YEAR
+            if (count >= 4)
+                current = zeroPaddingNumber(value, 4, maxIntCount);
+            else // count < 4
+                current = zeroPaddingNumber(value, 2, 2); // clip 1996 to 96
+            break;
+        case 2: // 'M' - MONTH
+            if (count >= 4)
+                current = formatData.months[value];
+            else if (count == 3)
+                current = formatData.shortMonths[value];
+            else
+                current = zeroPaddingNumber(value+1, count, maxIntCount);
+            break;
+        case 4: // 'k' - HOUR_OF_DAY: 1-based.  eg, 23:59 + 1 hour =>> 24:59
+            if (value == 0)
+                current = zeroPaddingNumber(
+                                            calendar.getMaximum(Calendar.HOUR_OF_DAY)+1,
+                                            count, maxIntCount);
+            else
+                current = zeroPaddingNumber(value, count, maxIntCount);
+            break;
+        case 9: // 'E' - DAY_OF_WEEK
+            if (count >= 4)
+                current = formatData.weekdays[value];
+            else // count < 4, use abbreviated form if exists
+                current = formatData.shortWeekdays[value];
+            break;
+        case 14:    // 'a' - AM_PM
+            current = formatData.ampms[value];
+            break;
+        case 15: // 'h' - HOUR:1-based.  eg, 11PM + 1 hour =>> 12 AM
+            if (value == 0)
+                current = zeroPaddingNumber(
+                                            calendar.getLeastMaximum(Calendar.HOUR)+1,
+                                            count, maxIntCount);
+            else
+                current = zeroPaddingNumber(value, count, maxIntCount);
+            break;
+        case 17: // 'z' - ZONE_OFFSET
+            int zoneIndex
+                = formatData.getZoneIndex (calendar.getTimeZone().getID());
+            if (zoneIndex == -1)
+            {
+                // For time zones that have no names, use strings
+                // GMT+hours:minutes and GMT-hours:minutes.
+                // For instance, France time zone uses GMT+01:00.
+                StringBuffer zoneString = new StringBuffer();
+
+                value = calendar.get(Calendar.ZONE_OFFSET) +
+                    calendar.get(Calendar.DST_OFFSET);
+
+                if (value < 0)
+                {
+                    zoneString.append(GMT_MINUS);
+                    value = -value; // suppress the '-' sign for text display.
+                }
+                else
+                    zoneString.append(GMT_PLUS);
+                zoneString.append(
+                                  zeroPaddingNumber((int)(value/millisPerHour), 2, 2));
+                zoneString.append(':');
+                zoneString.append(
+                                  zeroPaddingNumber(
+                                                    (int)((value%millisPerHour)/millisPerMinute), 2, 2));
+                current = zoneString.toString();
+            }
+            else if (calendar.get(Calendar.DST_OFFSET) != 0)
+            {
+                if (count >= 4)
+                    current = formatData.zoneStrings[zoneIndex][3];
+                else
+                    // count < 4, use abbreviated form if exists
+                    current = formatData.zoneStrings[zoneIndex][4];
+            }
+            else
+            {
+                if (count >= 4)
+                    current = formatData.zoneStrings[zoneIndex][1];
+                else
+                    current = formatData.zoneStrings[zoneIndex][2];
+            }
+            break;
+        default:
+            // case 3: // 'd' - DATE
+            // case 5: // 'H' - HOUR_OF_DAY:0-based.  eg, 23:59 + 1 hour =>> 00:59
+            // case 6: // 'm' - MINUTE
+            // case 7: // 's' - SECOND
+            // case 8: // 'S' - MILLISECOND
+            // case 10: // 'D' - DAY_OF_YEAR
+            // case 11: // 'F' - DAY_OF_WEEK_IN_MONTH
+            // case 12: // 'w' - WEEK_OF_YEAR
+            // case 13: // 'W' - WEEK_OF_MONTH
+            // case 16: // 'K' - HOUR: 0-based.  eg, 11PM + 1 hour =>> 0 AM
+            current = zeroPaddingNumber(value, count, maxIntCount);
+            break;
+        } // switch (patternCharIndex)
+
+        if (pos.getField() == PATTERN_INDEX_TO_DATE_FORMAT_FIELD[patternCharIndex]) {
+            // set for the first occurence only.
+            if (pos.getBeginIndex() == 0 && pos.getEndIndex() == 0) {
+                pos.setBeginIndex(beginOffset);
+                pos.setEndIndex(beginOffset + current.length());
+            }
+        }
+
+        return current;
+    }
+
+    /**
+     * Formats a number with the specified minimum and maximum number of digits.
+     */
+    protected String zeroPaddingNumber(long value, int minDigits, int maxDigits)
+    {
+        numberFormat.setMinimumIntegerDigits(minDigits);
+        numberFormat.setMaximumIntegerDigits(maxDigits);
+        return numberFormat.format(value);
+    }
+
+
+    /**
+     * Overrides DateFormat
+     * @see DateFormat
+     */
+    public Date parse(String text, ParsePosition pos)
+    {
+        int start = pos.getIndex();
+        int oldStart = start;
+        boolean[] ambiguousYear = {false};
+
+        calendar.clear(); // Clears all the time fields
+
+        boolean inQuote = false; // inQuote set true when hits 1st single quote
+        char prevCh = 0;
+        int count = 0;
+        int interQuoteCount = 1; // Number of chars between quotes
+
+        for (int i=0; i<pattern.length(); ++i)
+        {
+            char ch = pattern.charAt(i);
+
+            if (inQuote)
+            {
+                if (ch == '\'')
+                {
+                    // ends with 2nd single quote
+                    inQuote = false;
+                    // two consecutive quotes outside a quote means we have
+                    // a quote literal we need to match.
+                    if (count == 0)
+                    {
+                        if (start >= text.length() || ch != text.charAt(start))
+                        {
+                            pos.setIndex(oldStart);
+                            pos.setErrorIndex(start);
+                            return null;
+                        }
+                        ++start;
+                    }
+                    count = 0;
+                    interQuoteCount = 0;
+                }
+                else
+                {
+                    // pattern uses text following from 1st single quote.
+                    if (start >= text.length() || ch != text.charAt(start)) {
+                        // Check for cases like: 'at' in pattern vs "xt"
+                        // in time text, where 'a' doesn't match with 'x'.
+                        // If fail to match, return null.
+                        pos.setIndex(oldStart); // left unchanged
+                        pos.setErrorIndex(start);
+                        return null;
+                    }
+                    ++count;
+                    ++start;
+                }
+            }
+            else    // !inQuote
+            {
+                if (ch == '\'')
+                {
+                    inQuote = true;
+                    if (count > 0) // handle cases like: e'at'
+                    {
+                        int startOffset = start;
+                        start=subParse(text, start, prevCh, count,
+                                       false, ambiguousYear);
+                        if ( start<0 ) {
+                            pos.setErrorIndex(startOffset);
+                            pos.setIndex(oldStart);
+                            return null;
+                        }
+                        count = 0;
+                    }
+
+                    if (interQuoteCount == 0)
+                    {
+                        // This indicates two consecutive quotes inside a quote,
+                        // for example, 'o''clock'.  We need to parse this as
+                        // representing a single quote within the quote.
+                        int startOffset = start;
+                        if (start >= text.length() ||  ch != text.charAt(start))
+                        {
+                            pos.setErrorIndex(startOffset);
+                            pos.setIndex(oldStart);
+                            return null;
+                        }
+                        ++start;
+                        count = 1; // Make it look like we never left
+                    }
+                }
+                else if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')
+                {
+                    // ch is a date-time pattern
+                    if (ch != prevCh && count > 0) // e.g., yyyyMMdd
+                    {
+                        int startOffset = start;
+                        // This is the only case where we pass in 'true' for
+                        // obeyCount.  That's because the next field directly
+                        // abuts this one, so we have to use the count to know when
+                        // to stop parsing. [LIU]
+                        start = subParse(text, start, prevCh, count, true,
+                                         ambiguousYear);
+                        if (start < 0) {
+                            pos.setErrorIndex(startOffset);
+                            pos.setIndex(oldStart);
+                            return null;
+                        }
+                        prevCh = ch;
+                        count = 1;
+                    }
+                    else
+                    {
+                        if (ch != prevCh)
+                            prevCh = ch;
+                        count++;
+                    }
+                }
+                else if (count > 0)
+                {
+                    // handle cases like: MM-dd-yy, HH:mm:ss, or yyyy MM dd,
+                    // where ch = '-', ':', or ' ', repectively.
+                    int startOffset = start;
+                    start=subParse(text, start, prevCh, count,
+                                   false, ambiguousYear);
+                    if ( start < 0 ) {
+                        pos.setErrorIndex(startOffset);
+                        pos.setIndex(oldStart);
+                        return null;
+                    }
+                    if (start >= text.length() || ch != text.charAt(start)) {
+                        // handle cases like: 'MMMM dd' in pattern vs. "janx20"
+                        // in time text, where ' ' doesn't match with 'x'.
+                        pos.setErrorIndex(start);
+                        pos.setIndex(oldStart);
+                        return null;
+                    }
+                    start++;
+                    count = 0;
+                    prevCh = 0;
+                }
+                else // any other unquoted characters
+                {
+                    if (start >= text.length() || ch != text.charAt(start)) {
+                        // handle cases like: 'MMMM   dd' in pattern vs.
+                        // "jan,,,20" in time text, where "   " doesn't
+                        // match with ",,,".
+                        pos.setErrorIndex(start);
+                        pos.setIndex(oldStart);
+                        return null;
+                    }
+                    start++;
+                }
+
+                ++interQuoteCount;
+            }
+        }
+        // Parse the last item in the pattern
+        if (count > 0)
+        {
+            int startOffset = start;
+            start=subParse(text, start, prevCh, count,
+                           false, ambiguousYear);
+            if ( start < 0 ) {
+                pos.setIndex(oldStart);
+                pos.setErrorIndex(startOffset);
+                return null;
+            }
+        }
+
+        // At this point the fields of Calendar have been set.  Calendar
+        // will fill in default values for missing fields when the time
+        // is computed.
+
+        pos.setIndex(start);
+
+        // This part is a problem:  When we call parsedDate.after, we compute the time.
+        // Take the date April 3 2004 at 2:30 am.  When this is first set up, the year
+        // will be wrong if we're parsing a 2-digit year pattern.  It will be 1904.
+        // April 3 1904 is a Sunday (unlike 2004) so it is the DST onset day.  2:30 am
+        // is therefore an "impossible" time, since the time goes from 1:59 to 3:00 am
+        // on that day.  It is therefore parsed out to fields as 3:30 am.  Then we
+        // add 100 years, and get April 3 2004 at 3:30 am.  Note that April 3 2004 is
+        // a Saturday, so it can have a 2:30 am -- and it should. [LIU]
+        /*
+        Date parsedDate = calendar.getTime();
+        if( ambiguousYear[0] && !parsedDate.after(defaultCenturyStart) ) {
+            calendar.add(Calendar.YEAR, 100);
+            parsedDate = calendar.getTime();
+        }
+        */
+        // Because of the above condition, save off the fields in case we need to readjust.
+        // The procedure we use here is not particularly efficient, but there is no other
+        // way to do this given the API restrictions present in Calendar.  We minimize
+        // inefficiency by only performing this computation when it might apply, that is,
+        // when the two-digit year is equal to the start year, and thus might fall at the
+        // front or the back of the default century.  This only works because we adjust
+        // the year correctly to start with in other cases -- see subParse().
+        Date parsedDate;
+        try {
+            if (ambiguousYear[0]) // If this is true then the two-digit year == the default start year
+            {
+                // We need a copy of the fields, and we need to avoid triggering a call to
+                // complete(), which will recalculate the fields.  Since we can't access
+                // the fields[] array in Calendar, we clone the entire object.  This will
+                // stop working if Calendar.clone() is ever rewritten to call complete().
+                Calendar savedCalendar = (Calendar)calendar.clone();
+                parsedDate = calendar.getTime();
+                if (parsedDate.before(defaultCenturyStart))
+                {
+                    // We can't use add here because that does a complete() first.
+                    savedCalendar.set(Calendar.YEAR, defaultCenturyStartYear + 100);
+                    parsedDate = savedCalendar.getTime();
+                }
+            }
+            else parsedDate = calendar.getTime();
+        }
+        // An IllegalArgumentException will be thrown by Calendar.getTime()
+        // if any fields are out of range, e.g., MONTH == 17.
+        catch (IllegalArgumentException e) {
+            pos.setErrorIndex(start);
+            pos.setIndex(oldStart);
+            return null;
+        }
+
+        return parsedDate;
+    }
+
+    /**
+     * Attempt to match the text at a given position against an array of
+     * strings.  Since multiple strings in the array may match (for
+     * example, if the array contains "a", "ab", and "abc", all will match
+     * the input string "abcd") the longest match is returned.  As a side
+     * effect, the given field of <code>calendar</code> is set to the index
+     * of the best match, if there is one.
+     * @param text the time text being parsed.
+     * @param start where to start parsing.
+     * @param field the date field being parsed.
+     * @param data the string array to parsed.
+     * @return the new start position if matching succeeded; a negative
+     * number indicating matching failure, otherwise.  As a side effect,
+     * sets the <code>calendar</code> field <code>field</code> to the index
+     * of the best match, if matching succeeded.
+     */
+    protected int matchString(String text, int start, int field, String[] data)
+    {
+        int i = 0;
+        int count = data.length;
+
+        if (field == Calendar.DAY_OF_WEEK) i = 1;
+
+        // There may be multiple strings in the data[] array which begin with
+        // the same prefix (e.g., Cerven and Cervenec (June and July) in Czech).
+        // We keep track of the longest match, and return that.  Note that this
+        // unfortunately requires us to test all array elements.
+        int bestMatchLength = 0, bestMatch = -1;
+        for (; i<count; ++i)
+        {
+            int length = data[i].length();
+            // Always compare if we have no match yet; otherwise only compare
+            // against potentially better matches (longer strings).
+            if (length > bestMatchLength &&
+                text.regionMatches(true, start, data[i], 0, length))
+            {
+                bestMatch = i;
+                bestMatchLength = length;
+            }
+        }
+        if (bestMatch >= 0)
+        {
+            calendar.set(field, bestMatch);
+            return start + bestMatchLength;
+        }
+        return -start;
+    }
+
+    private int matchZoneString(String text, int start, int zoneIndex) {
+	int j;
+	for (j = 1; j <= 4; ++j) {
+	    // Checking long and short zones [1 & 2],
+	    // and long and short daylight [3 & 4].
+	    if (text.regionMatches(true, start,
+				   formatData.zoneStrings[zoneIndex][j], 0,
+				   formatData.zoneStrings[zoneIndex][j].length())) {
+		break;
+	    }
+	}
+	return (j > 4) ? -1 : j;
+    }	
+
+    /**
+     * find time zone 'text' matched zoneStrings and set to internal
+     * calendar.
+     */
+    private int subParseZoneString(String text, int start) {
+	// At this point, check for named time zones by looking through
+	// the locale data from the DateFormatZoneData strings.
+	// Want to be able to parse both short and long forms.
+	int zoneIndex = 
+	    formatData.getZoneIndex (getTimeZone().getID());
+	TimeZone tz = null;
+	int j = 0, i = 0;
+	if ((zoneIndex != -1) && ((j = matchZoneString(text, start, zoneIndex)) > 0)) {
+	    tz = TimeZone.getTimeZone(formatData.zoneStrings[zoneIndex][0]);
+	    i = zoneIndex;
+	}
+	if (tz == null) {
+	    zoneIndex = 
+		formatData.getZoneIndex (TimeZone.getDefault().getID());
+	    if ((zoneIndex != -1) && ((j = matchZoneString(text, start, zoneIndex)) > 0)) {
+		tz = TimeZone.getTimeZone(formatData.zoneStrings[zoneIndex][0]);
+		i = zoneIndex;
+	    }
+	}	    
+
+	if (tz == null) {
+	    for (i = 0; i < formatData.zoneStrings.length; i++) {
+		if ((j = matchZoneString(text, start, i)) > 0) {
+		    tz = TimeZone.getTimeZone(formatData.zoneStrings[i][0]);
+		    break;
+		}
+	    }
+	}
+	if (tz != null) { // Matched any ?
+	    calendar.set(Calendar.ZONE_OFFSET, tz.getRawOffset());
+	    // The code below time zone is assumed to be instance of
+	    // SimpleTimeZone.
+	    calendar.set(Calendar.DST_OFFSET, 
+			 j >= 3 ? ((SimpleTimeZone)tz).getDSTSavings() : 0);
+	    return (start + formatData.zoneStrings[i][j].length());
+	}
+	return 0;
+    }
+
+    /**
+     * Protected method that converts one field of the input string into a
+     * numeric field value in <code>calendar</code>.  Returns -start (for
+     * ParsePosition) if failed.  Subclasses may override this method to
+     * modify or add parsing capabilities.
+     * @param text the time text to be parsed.
+     * @param start where to start parsing.
+     * @param ch the pattern character for the date field text to be parsed.
+     * @param count the count of a pattern character.
+     * @param obeyCount if true, then the next field directly abuts this one,
+     * and we should use the count to know when to stop parsing.
+     * @param ambiguousYear return parameter; upon return, if ambiguousYear[0]
+     * is true, then a two-digit year was parsed and may need to be readjusted.
+     * @return the new start position if matching succeeded; a negative
+     * number indicating matching failure, otherwise.  As a side effect,
+     * set the appropriate field of <code>calendar</code> with the parsed
+     * value.
+     */
+    protected int subParse(String text, int start, char ch, int count,
+                           boolean obeyCount, boolean[] ambiguousYear)
+    {
+        Number number = null;
+        int value = 0;
+        int i;
+        ParsePosition pos = new ParsePosition(0);
+        int patternCharIndex = -1;
+
+        // TEMPORARY HACK TODO fix this
+        if (ch == 'u') { // 'u' - EXTENDED_YEAR
+            pos.setIndex(start);
+            for (;;) {
+                if (pos.getIndex() >= text.length()) return -start;
+                char c = text.charAt(pos.getIndex());
+                if (c != ' ' && c != '\t') break;
+                pos.setIndex(pos.getIndex()+1);
+            }
+            if (obeyCount) {
+                if ((start+count) > text.length()) {
+                    return -start;
+                }
+                number = numberFormat.parse(text.substring(0, start+count), pos);
+            } else {
+                number = numberFormat.parse(text, pos);
+            }
+            if (number == null) {
+                return -start;
+            }
+            value = number.intValue();
+            calendar.set(Calendar.EXTENDED_YEAR, value);
+            return pos.getIndex();
+        }
+
+        if ((patternCharIndex=formatData.patternChars.indexOf(ch)) == -1)
+            return -start;
+
+        pos.setIndex(start);
+
+        int field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex];
+
+        // If there are any spaces here, skip over them.  If we hit the end
+        // of the string, then fail.
+        for (;;) {
+            if (pos.getIndex() >= text.length()) return -start;
+            char c = text.charAt(pos.getIndex());
+            if (c != ' ' && c != '\t') break;
+            pos.setIndex(pos.getIndex()+1);
+        }
+
+        // We handle a few special cases here where we need to parse
+        // a number value.  We handle further, more generic cases below.  We need
+        // to handle some of them here because some fields require extra processing on
+        // the parsed value.
+        if (patternCharIndex == 4 /*HOUR_OF_DAY1_FIELD*/ ||
+            patternCharIndex == 15 /*HOUR1_FIELD*/ ||
+            (patternCharIndex == 2 /*MONTH_FIELD*/ && count <= 2) ||
+            patternCharIndex == 1)
+        {
+            // It would be good to unify this with the obeyCount logic below,
+            // but that's going to be difficult.
+            if (obeyCount)
+            {
+                if ((start+count) > text.length()) return -start;
+                number = numberFormat.parse(text.substring(0, start+count), pos);
+            }
+            else number = numberFormat.parse(text, pos);
+            if (number == null)
+                return -start;
+            value = number.intValue();
+        }
+
+        switch (patternCharIndex)
+        {
+        case 0: // 'G' - ERA
+            return matchString(text, start, Calendar.ERA, formatData.eras);
+        case 1: // 'y' - YEAR
+            // If there are 3 or more YEAR pattern characters, this indicates
+            // that the year value is to be treated literally, without any
+            // two-digit year adjustments (e.g., from "01" to 2001).  Otherwise
+            // we made adjustments to place the 2-digit year in the proper
+            // century, for parsed strings from "00" to "99".  Any other string
+            // is treated literally:  "2250", "-1", "1", "002".
+            if (count <= 2 && (pos.getIndex() - start) == 2
+                && Character.isDigit(text.charAt(start))
+                && Character.isDigit(text.charAt(start+1)))
+            {
+                // Assume for example that the defaultCenturyStart is 6/18/1903.
+                // This means that two-digit years will be forced into the range
+                // 6/18/1903 to 6/17/2003.  As a result, years 00, 01, and 02
+                // correspond to 2000, 2001, and 2002.  Years 04, 05, etc. correspond
+                // to 1904, 1905, etc.  If the year is 03, then it is 2003 if the
+                // other fields specify a date before 6/18, or 1903 if they specify a
+                // date afterwards.  As a result, 03 is an ambiguous year.  All other
+                // two-digit years are unambiguous.
+                int ambiguousTwoDigitYear = defaultCenturyStartYear % 100;
+                ambiguousYear[0] = value == ambiguousTwoDigitYear;
+                value += (defaultCenturyStartYear/100)*100 +
+                    (value < ambiguousTwoDigitYear ? 100 : 0);
+            }
+            calendar.set(Calendar.YEAR, value);
+            return pos.getIndex();
+        case 2: // 'M' - MONTH
+            if (count <= 2) // i.e., M or MM.
+            {
+                // Don't want to parse the month if it is a string
+                // while pattern uses numeric style: M or MM.
+                // [We computed 'value' above.]
+                calendar.set(Calendar.MONTH, value - 1);
+                return pos.getIndex();
+            }
+            else
+            {
+                // count >= 3 // i.e., MMM or MMMM
+                // Want to be able to parse both short and long forms.
+                // Try count == 4 first:
+                int newStart = 0;
+                if ((newStart=matchString(text, start, Calendar.MONTH,
+                                          formatData.months)) > 0)
+                    return newStart;
+                else // count == 4 failed, now try count == 3
+                    return matchString(text, start, Calendar.MONTH,
+                                       formatData.shortMonths);
+            }
+        case 4: // 'k' - HOUR_OF_DAY: 1-based.  eg, 23:59 + 1 hour =>> 24:59
+            // [We computed 'value' above.]
+            if (value == calendar.getMaximum(Calendar.HOUR_OF_DAY)+1) value = 0;
+            calendar.set(Calendar.HOUR_OF_DAY, value);
+            return pos.getIndex();
+        case 9: { // 'E' - DAY_OF_WEEK
+            // Want to be able to parse both short and long forms.
+            // Try count == 4 (DDDD) first:
+            int newStart = 0;
+            if ((newStart=matchString(text, start, Calendar.DAY_OF_WEEK,
+                                      formatData.weekdays)) > 0)
+                return newStart;
+            else // DDDD failed, now try DDD
+                return matchString(text, start, Calendar.DAY_OF_WEEK,
+                                   formatData.shortWeekdays);
+        }
+        case 14:    // 'a' - AM_PM
+            return matchString(text, start, Calendar.AM_PM, formatData.ampms);
+        case 15: // 'h' - HOUR:1-based.  eg, 11PM + 1 hour =>> 12 AM
+            // [We computed 'value' above.]
+            if (value == calendar.getLeastMaximum(Calendar.HOUR)+1) value = 0;
+            calendar.set(Calendar.HOUR, value);
+            return pos.getIndex();
+        case 17: // 'z' - ZONE_OFFSET
+            // First try to parse generic forms such as GMT-07:00. Do this first
+            // in case localized DateFormatZoneData contains the string "GMT"
+            // for a zone; in that case, we don't want to match the first three
+            // characters of GMT+/-HH:MM etc.
+            {
+                int sign = 0;
+                int offset;
+
+                // For time zones that have no known names, look for strings
+                // of the form:
+                //    GMT[+-]hours:minutes or
+                //    GMT[+-]hhmm or
+                //    GMT.
+                if ((text.length() - start) >= GMT.length() &&
+                    text.regionMatches(true, start, GMT, 0, GMT.length()))
+                {
+                    calendar.set(Calendar.DST_OFFSET, 0);
+
+                    pos.setIndex(start + GMT.length());
+
+		    try { // try-catch for "GMT" only time zone string
+			if( text.charAt(pos.getIndex()) == '+' ) {
+			    sign = 1;
+			} else if( text.charAt(pos.getIndex()) == '-' ) {
+			    sign = -1;
+			} 
+		    } catch(StringIndexOutOfBoundsException e) {
+                    }
+		    if (sign == 0) {
+			calendar.set(Calendar.ZONE_OFFSET, 0 );
+			return pos.getIndex();
+		    }
+
+                    // Look for hours:minutes or hhmm.
+                    pos.setIndex(pos.getIndex() + 1);
+                    Number tzNumber = numberFormat.parse(text, pos);
+                    if( tzNumber == null) {
+                        return -start;
+                    }
+                    if( text.charAt(pos.getIndex()) == ':' ) {
+                        // This is the hours:minutes case
+                        offset = tzNumber.intValue() * 60;
+                        pos.setIndex(pos.getIndex() + 1);
+                        tzNumber = numberFormat.parse(text, pos);
+                        if( tzNumber == null) {
+                            return -start;
+                        }
+                        offset += tzNumber.intValue();
+                    }
+                    else {
+                        // This is the hhmm case.
+                        offset = tzNumber.intValue();
+                        if( offset < 24 )
+                            offset *= 60;
+                        else
+                            offset = offset % 100 + offset / 100 * 60;
+                    }
+
+                    // Fall through for final processing below of 'offset' and 'sign'.
+                }
+                else {
+                    // At this point, check for named time zones by looking through
+                    // the locale data from the DateFormatZoneData strings.
+                    // Want to be able to parse both short and long forms.
+		    i = subParseZoneString(text, start);
+		    if (i != 0)
+			return i;
+
+                    // As a last resort, look for numeric timezones of the form
+                    // [+-]hhmm as specified by RFC 822.  This code is actually
+                    // a little more permissive than RFC 822.  It will try to do
+                    // its best with numbers that aren't strictly 4 digits long.
+                    DecimalFormat fmt = new DecimalFormat("+####;-####");
+                    fmt.setParseIntegerOnly(true);
+                    Number tzNumber = fmt.parse( text, pos );
+                    if( tzNumber == null) {
+                        return -start;   // Wasn't actually a number.
+                    }
+                    offset = tzNumber.intValue();
+                    sign = 1;
+                    if( offset < 0 ) {
+                        sign = -1;
+                        offset = -offset;
+                    }
+                    if( offset < 24 )
+                        offset = offset * 60;
+                    else
+                        offset = offset % 100 + offset / 100 * 60;
+
+                    // Fall through for final processing below of 'offset' and 'sign'.
+                }
+
+                // Do the final processing for both of the above cases.  We only
+                // arrive here if the form GMT+/-... or an RFC 822 form was seen.
+                if (sign != 0)
+                {
+                    offset *= millisPerMinute * sign;
+
+                    if (calendar.getTimeZone().useDaylightTime())
+                    {
+                        calendar.set(Calendar.DST_OFFSET, millisPerHour);
+                        offset -= millisPerHour;
+                    }
+                    calendar.set(Calendar.ZONE_OFFSET, offset);
+
+                    return pos.getIndex();
+                }
+            }
+
+            // All efforts to parse a zone failed.
+            return -start;
+
+        default:
+            // case 3: // 'd' - DATE
+            // case 5: // 'H' - HOUR_OF_DAY:0-based.  eg, 23:59 + 1 hour =>> 00:59
+            // case 6: // 'm' - MINUTE
+            // case 7: // 's' - SECOND
+            // case 8: // 'S' - MILLISECOND
+            // case 10: // 'D' - DAY_OF_YEAR
+            // case 11: // 'F' - DAY_OF_WEEK_IN_MONTH
+            // case 12: // 'w' - WEEK_OF_YEAR
+            // case 13: // 'W' - WEEK_OF_MONTH
+            // case 16: // 'K' - HOUR: 0-based.  eg, 11PM + 1 hour =>> 0 AM
+
+            // Handle "generic" fields
+            if (obeyCount)
+            {
+                if ((start+count) > text.length()) return -start;
+                number = numberFormat.parse(text.substring(0, start+count), pos);
+            }
+            else number = numberFormat.parse(text, pos);
+            if (number != null) {
+                calendar.set(field, number.intValue());
+                return pos.getIndex();
+            }
+            return -start;
+        }
+    }
+
+
+    /**
+     * Translate a pattern, mapping each character in the from string to the
+     * corresponding character in the to string.
+     */
+    private String translatePattern(String pattern, String from, String to) {
+        StringBuffer result = new StringBuffer();
+        boolean inQuote = false;
+        for (int i = 0; i < pattern.length(); ++i) {
+            char c = pattern.charAt(i);
+            if (inQuote) {
+                if (c == '\'')
+                    inQuote = false;
+            }
+            else {
+                if (c == '\'')
+                    inQuote = true;
+                else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+                    int ci = from.indexOf(c);
+                    if (ci == -1)
+                        throw new IllegalArgumentException("Illegal pattern " +
+                                                           " character '" +
+                                                           c + "'");
+                    c = to.charAt(ci);
+                }
+            }
+            result.append(c);
+        }
+        if (inQuote)
+            throw new IllegalArgumentException("Unfinished quote in pattern");
+        return result.toString();
+    }
+
+    /**
+     * Return a pattern string describing this date format.
+     */
+    public String toPattern() {
+        return pattern;
+    }
+
+    /**
+     * Return a localized pattern string describing this date format.
+     */
+    public String toLocalizedPattern() {
+        return translatePattern(pattern,
+                                formatData.patternChars,
+                                formatData.localPatternChars);
+    }
+
+    /**
+     * Apply the given unlocalized pattern string to this date format.
+     */
+    public void applyPattern (String pattern)
+    {
+        this.pattern = pattern;
+    }
+
+    /**
+     * Apply the given localized pattern string to this date format.
+     */
+    public void applyLocalizedPattern(String pattern) {
+        this.pattern = translatePattern(pattern,
+                                        formatData.localPatternChars,
+                                        formatData.patternChars);
+    }
+
+    /**
+     * Gets the date/time formatting data.
+     * @return a copy of the date-time formatting data associated
+     * with this date-time formatter.
+     */
+    public DateFormatSymbols getDateFormatSymbols()
+    {
+        return (DateFormatSymbols)formatData.clone();
+    }
+
+    /**
+     * Allows you to set the date/time formatting data.
+     * @param newFormatData the given date-time formatting data.
+     */
+    public void setDateFormatSymbols(DateFormatSymbols newFormatSymbols)
+    {
+        this.formatData = (DateFormatSymbols)newFormatSymbols.clone();
+    }
+
+    /**
+     * Method for subclasses to access the DateFormatSymbols.
+     */
+    protected DateFormatSymbols getSymbols() {
+        return formatData;
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone() {
+        SimpleDateFormat other = (SimpleDateFormat) super.clone();
+        other.formatData = (DateFormatSymbols) formatData.clone();
+        return other;
+    }
+
+    /**
+     * Override hashCode.
+     * Generates the hash code for the SimpleDateFormat object
+     */
+    public int hashCode()
+    {
+        return pattern.hashCode();
+        // just enough fields for a reasonable distribution
+    }
+
+    /**
+     * Override equals.
+     */
+    public boolean equals(Object obj)
+    {
+        if (!super.equals(obj)) return false; // super does class check
+        SimpleDateFormat that = (SimpleDateFormat) obj;
+        return (pattern.equals(that.pattern)
+                && formatData.equals(that.formatData));
+    }
+
+    /**
+     * Override readObject.
+     */
+    private void readObject(ObjectInputStream stream)
+         throws IOException, ClassNotFoundException {
+             stream.defaultReadObject();
+             if (serialVersionOnStream < 1) {
+                 // didn't have defaultCenturyStart field
+                 initializeDefaultCentury();
+             }
+             else {
+                 // fill in dependent transient field
+                 parseAmbiguousDatesAsAfter(defaultCenturyStart);
+             }
+             serialVersionOnStream = currentSerialVersion;
+    }
+}
diff --git a/src/com/ibm/text/StringCharacterIterator.java b/src/com/ibm/text/StringCharacterIterator.java
new file mode 100755
index 0000000..6b9f5a3
--- /dev/null
+++ b/src/com/ibm/text/StringCharacterIterator.java
@@ -0,0 +1,269 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/StringCharacterIterator.java,v $ 
+ * $Date: 2000/03/10 04:07:23 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+
+// NOTE:  This class is identical to java.text.StringCharacterIterator
+// in JDK 1.2.  It's copied here because the JDK 1.1 version of
+// StringCharacterIterator has a bug that prevents it from working
+// right with RuleBasedBreakIterator.  This class is unnecessary
+// when using RuleBasedBreakIterator with JDK 1.2.
+
+package com.ibm.text;
+import java.text.CharacterIterator;
+
+/**
+ * <code>StringCharacterIterator</code> implements the
+ * <code>CharacterIterater</code> protocol for a <code>String</code>.
+ * The <code>StringCharacterIterator</code> class iterates over the
+ * entire <code>String</code>.
+ *
+ * @see CharacterIterator
+ */
+
+public final class StringCharacterIterator implements CharacterIterator
+{
+    private String text;
+    private int begin;
+    private int end;
+    // invariant: begin <= pos <= end
+    private int pos;
+
+    /**
+     * Constructs an iterator with an initial index of 0.
+     */
+    public StringCharacterIterator(String text)
+    {
+        this(text, 0);
+    }
+
+    /**
+     * Constructs an iterator with the specified initial index.
+     *
+     * @param  text   The String to be iterated over
+     * @param  pos    Initial iterator position
+     */
+    public StringCharacterIterator(String text, int pos)
+    {
+    this(text, 0, text.length(), pos);
+    }
+
+    /**
+     * Constructs an iterator over the given range of the given string, with the
+     * index set at the specified position.
+     *
+     * @param  text   The String to be iterated over
+     * @param  begin  Index of the first character
+     * @param  end    Index of the character following the last character
+     * @param  pos    Initial iterator position
+     */
+    public StringCharacterIterator(String text, int begin, int end, int pos) {
+        if (text == null) {
+            throw new NullPointerException();
+        }
+        this.text = text;
+
+        if (begin < 0 || begin > end || end > text.length()) {
+            throw new IllegalArgumentException("Invalid substring range");
+        }
+
+        if (pos < begin || pos > end) {
+            throw new IllegalArgumentException("Invalid position");
+        }
+
+        this.begin = begin;
+        this.end = end;
+        this.pos = pos;
+    }
+
+    /**
+     * Reset this iterator to point to a new string.  This package-visible
+     * method is used by other java.text classes that want to avoid allocating
+     * new StringCharacterIterator objects every time their setText method
+     * is called.
+     *
+     * @param  text   The String to be iterated over
+     */
+    public void setText(String text) {
+        if (text == null) {
+            throw new NullPointerException();
+        }
+        this.text = text;
+        this.begin = 0;
+        this.end = text.length();
+        this.pos = 0;
+    }
+
+    /**
+     * Implements CharacterIterator.first() for String.
+     * @see CharacterIterator#first
+     */
+    public char first()
+    {
+        pos = begin;
+        return current();
+    }
+
+    /**
+     * Implements CharacterIterator.last() for String.
+     * @see CharacterIterator#last
+     */
+    public char last()
+    {
+        if (end != begin) {
+            pos = end - 1;
+        } else {
+            pos = end;
+        }
+        return current();
+     }
+
+    /**
+     * Implements CharacterIterator.setIndex() for String.
+     * @see CharacterIterator#setIndex
+     */
+    public char setIndex(int p)
+    {
+    if (p < begin || p > end) {
+            throw new IllegalArgumentException("Invalid index");
+    }
+        pos = p;
+        return current();
+    }
+
+    /**
+     * Implements CharacterIterator.current() for String.
+     * @see CharacterIterator#current
+     */
+    public char current()
+    {
+        if (pos >= begin && pos < end) {
+            return text.charAt(pos);
+        }
+        else {
+            return DONE;
+        }
+    }
+
+    /**
+     * Implements CharacterIterator.next() for String.
+     * @see CharacterIterator#next
+     */
+    public char next()
+    {
+        if (pos < end - 1) {
+            pos++;
+            return text.charAt(pos);
+        }
+        else {
+            pos = end;
+            return DONE;
+        }
+    }
+
+    /**
+     * Implements CharacterIterator.previous() for String.
+     * @see CharacterIterator#previous
+     */
+    public char previous()
+    {
+        if (pos > begin) {
+            pos--;
+            return text.charAt(pos);
+        }
+        else {
+            return DONE;
+        }
+    }
+
+    /**
+     * Implements CharacterIterator.getBeginIndex() for String.
+     * @see CharacterIterator#getBeginIndex
+     */
+    public int getBeginIndex()
+    {
+        return begin;
+    }
+
+    /**
+     * Implements CharacterIterator.getEndIndex() for String.
+     * @see CharacterIterator#getEndIndex
+     */
+    public int getEndIndex()
+    {
+        return end;
+    }
+
+    /**
+     * Implements CharacterIterator.getIndex() for String.
+     * @see CharacterIterator#getIndex
+     */
+    public int getIndex()
+    {
+        return pos;
+    }
+
+    /**
+     * Compares the equality of two StringCharacterIterator objects.
+     * @param obj the StringCharacterIterator object to be compared with.
+     * @return true if the given obj is the same as this
+     * StringCharacterIterator object; false otherwise.
+     */
+    public boolean equals(Object obj)
+    {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof StringCharacterIterator)) {
+            return false;
+        }
+
+        StringCharacterIterator that = (StringCharacterIterator) obj;
+
+        if (hashCode() != that.hashCode()) {
+            return false;
+        }
+        if (!text.equals(that.text)) {
+            return false;
+        }
+        if (pos != that.pos || begin != that.begin || end != that.end) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Computes a hashcode for this iterator.
+     * @return A hash code
+     */
+    public int hashCode()
+    {
+        return text.hashCode() ^ pos ^ begin ^ end;
+    }
+
+    /**
+     * Creates a copy of this iterator.
+     * @return A copy of this
+     */
+    public Object clone()
+    {
+        try {
+            StringCharacterIterator other
+            = (StringCharacterIterator) super.clone();
+            return other;
+        }
+        catch (CloneNotSupportedException e) {
+            throw new InternalError();
+        }
+    }
+
+}
diff --git a/src/com/ibm/text/StringSearch.java b/src/com/ibm/text/StringSearch.java
new file mode 100755
index 0000000..3aceacc
--- /dev/null
+++ b/src/com/ibm/text/StringSearch.java
@@ -0,0 +1,630 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/StringSearch.java,v $ 
+ * $Date: 2000/03/10 04:07:24 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import java.text.BreakIterator;
+import java.text.CharacterIterator;
+import java.text.CollationElementIterator;
+import java.text.Collator;
+import java.text.RuleBasedCollator;
+import java.text.StringCharacterIterator;
+import java.util.Locale;
+
+/**
+ * <code>StringSearch</code> is a <code>SearchIterator</code> that provides
+ * language-sensitive text searching based on the comparison rules defined
+ * in a {@link RuleBasedCollator} object.
+ * Instances of <code>StringSearch</code> function as iterators
+ * maintain a current position and scan over text returning the index of
+ * characters where the pattern occurs and the length of each match.
+ * <p>
+ * <code>StringSearch</code> uses a version of the fast Boyer-Moore search
+ * algorithm that has been adapted to work with the large character set of
+ * Unicode.  See "Efficient Text Searching in Java", to be published in
+ * <i>Java Report</i> in February, 1999, for further information on the algorithm.
+ * <p>
+ * Consult the <code>SearchIterator</code> documentation for information on
+ * and examples of how to use instances of this class to implement text
+ * searching.  <code>SearchIterator</code> provides all of the necessary
+ * API; this class only provides constructors and internal implementation
+ * methods.
+ *
+ * @see SearchIterator
+ * @see java.text.RuleBasedCollator
+ *
+ * @author Laura Werner
+ * @version 1.0
+ */
+public final class StringSearch extends SearchIterator
+{
+    /**
+     * Construct a <code>StringSearch</code> object using a specific collator and set
+     * of boundary-detection rules.
+     * <p>
+     * @param pat       The text for which this object will search.
+     *
+     * @param target    The text in which to search for the pattern.
+     *
+     * @param coll      A <code>RuleBasedCollator</code> object which defines the
+     *                  language-sensitive comparison rules used to determine 
+     *                  whether text in the pattern and target matches.
+     *
+     * @param breaker   A <code>BreakIterator</code> object used to constrain the matches
+     *                  that are found.  Matches whose start and end indices
+     *                  in the target text are not boundaries as determined
+     *                  by the <code>BreakIterator</code> are ignored.  If this behavior
+     *                  is not desired, <code>null</code> can be passed in instead.
+     */
+    public StringSearch(String pat, CharacterIterator target,
+                            RuleBasedCollator coll, BreakIterator breaker) {
+        super(target, breaker);
+
+        pattern = pat;
+        collator = coll;
+        strength = coll.getStrength();
+        iter = collator.getCollationElementIterator(target);
+        
+        initialize();   // Initialize the Boyer-Moore tables
+    }
+
+    /**
+     * Construct a <code>StringSearch</code> object using a specific collator.
+     * <p>
+     * @param pattern   The text for which this object will search.
+     *
+     * @param target    The text in which to search for the pattern.
+     *
+     * @param collator  A <code>RuleBasedCollator</code> object which defines the
+     *                  language-sensitive comparison rules used to determine 
+     *                  whether text in the pattern and target matches.
+     */
+    public StringSearch(String pattern,
+                            CharacterIterator target,
+                            RuleBasedCollator collator) {
+        this(pattern, target, collator, BreakIterator.getCharacterInstance());
+    }
+
+    /**
+     * Construct a <code>StringSearch</code> object using the collator and
+     * character boundary detection rules for a given locale
+     * <p>
+     * @param pattern   The text for which this object will search.
+     *
+     * @param target    The text in which to search for the pattern.
+     *
+     * @param loc       The locale whose collation and break-detection rules
+     *                  should be used.
+     *
+     * @exception       ClassCastException thrown if the collator for the specified
+     *                  locale is not a RuleBasedCollator.
+     */
+    public StringSearch(String pattern, CharacterIterator target, Locale loc) {
+        this(pattern, target,
+             (RuleBasedCollator) Collator.getInstance(loc),
+             BreakIterator.getCharacterInstance(loc));
+    }
+
+    /**
+     * Construct a <code>StringSearch</code> object using the collator for the default
+     * locale
+     * <p>
+     * @param pattern   The text for which this object will search.
+     *
+     * @param target    The text in which to search for the pattern.
+     *
+     * @param collator  A <code>RuleBasedCollator</code> object which defines the
+     *                  language-sensitive comparison rules used to determine 
+     *                  whether text in the pattern and target matches.
+     */
+    public StringSearch(String pattern, String target) {
+        this(pattern,
+             new StringCharacterIterator(target),
+             (RuleBasedCollator)Collator.getInstance(),
+             BreakIterator.getCharacterInstance());
+    }
+
+    //-------------------------------------------------------------------
+    // Getters and Setters
+    //-------------------------------------------------------------------
+    
+    /**
+     * Sets this object's strength property. The strength determines the
+     * minimum level of difference considered significant during a
+     * search.  Generally, {@link Collator#TERTIARY} and 
+     * {@link Collator#IDENTICAL} indicate that all differences are
+     * considered significant, {@link Collator#SECONDARY} indicates
+     * that upper/lower case distinctions should be ignored, and
+     * {@link Collator#PRIMARY} indicates that both case and accents
+     * should be ignored.  However, the exact meanings of these constants
+     * are determined by individual Collator objects.
+     * <p>
+     * @see java.text.Collator#PRIMARY
+     * @see java.text.Collator#SECONDARY
+     * @see java.text.Collator#TERTIARY
+     * @see java.text.Collator#IDENTICAL
+     */
+    public void setStrength(int newStrength) {
+        strength = newStrength;
+        
+        // Due to a bug (?) in CollationElementIterator, we must set the
+        // collator's strength as well, since the iterator is going to
+        // mask out the portions of the collation element that are not
+        // relevant for the collator's current strength setting
+        // Note that this makes it impossible to share a Collator among
+        // multiple StringSearch objects if you adjust Strength settings.
+        collator.setStrength(strength);
+        initialize();
+    }
+    
+    
+    /**
+     * Returns this object's strength property, which indicates what level
+     * of differences are considered significant during a search.
+     * <p>
+     * @see #setStrength
+     */
+    public int getStrength() {
+        return strength;
+    }
+    
+    /**
+     * Set the collator to be used for this string search.  Also changes
+     * the search strength to match that of the new collator.
+     * <p>
+     * This method causes internal data such as Boyer-Moore shift tables
+     * to be recalculated, but the iterator's position is unchanged.
+     * <p>
+     * @see #getCollator
+     */
+    public void setCollator(RuleBasedCollator coll) {
+        collator = coll;
+        strength = collator.getStrength();
+        
+        // Also need to recompute the pattern and get a new target iterator
+        iter = collator.getCollationElementIterator(getTarget());
+        initialize();
+    }
+    
+    /**
+     * Return the RuleBasedCollator being used for this string search.
+     */
+    public RuleBasedCollator getCollator() {
+        return collator;
+    }
+    
+    /**
+     * Set the pattern for which to search.  
+     * This method causes internal data such as Boyer-Moore shift tables
+     * to be recalculated, but the iterator's position is unchanged.
+     */
+    public void setPattern(String pat) {
+        pattern = pat;
+        initialize();
+    }
+    
+    /**
+     * Returns the pattern for which this object is searching.
+     */
+    public String getPattern() {
+        return pattern;
+    }
+    
+    /**
+     * Set the target text which should be searched and resets the
+     * iterator's position to point before the start of the new text.
+     * This method is useful if you want to re-use an iterator to
+     * search for the same pattern within a different body of text.
+     */
+    public void setTarget(CharacterIterator target) {
+        super.setTarget(target);
+        
+        // Since we're caching a CollationElementIterator, recreate it
+        iter = collator.getCollationElementIterator(target);
+    }
+
+    //-------------------------------------------------------------------
+    // Privates
+    //-------------------------------------------------------------------
+
+    /**
+     * Search forward for matching text, starting at a given location.
+     * Clients should not call this method directly; instead they should call
+     * {@link SearchIterator#next}.
+     * <p>
+     * If a match is found, this method returns the index at which the match
+     * starts and calls {@link SearchIterator#setMatchLength}
+     * with the number of characters in the target
+     * text that make up the match.  If no match is found, the method returns
+     * <code>DONE</code> and does not call <tt>setMatchLength</tt>.
+     * <p>
+     * @param start The index in the target text at which the search starts.
+     *
+     * @return      The index at which the matched text in the target starts, or DONE
+     *              if no match was found.
+     * <p>
+     * @see SearchIterator#next
+     * @see SearchIterator#DONE
+     */
+    protected int handleNext(int start)
+    {
+        CharacterIterator target = getTarget();
+        
+        int mask = getMask(strength);
+        int done = CollationElementIterator.NULLORDER & mask;
+        
+        if (DEBUG) {
+            debug("-------------------------handleNext-----------------------------------");
+            debug("");
+            debug("strength=" + strength + ", mask=" + Integer.toString(mask,16)
+                + ", done=" + Integer.toString(done,16));
+            debug("decomp=" + collator.getDecomposition());
+            
+            debug("target.begin=" + getTarget().getBeginIndex());
+            debug("target.end=" + getTarget().getEndIndex());
+            debug("start = " + start);
+        }
+        
+        int index = start + minLen;
+        int matchEnd = 0;
+
+        while (index <= target.getEndIndex())
+        {
+            int patIndex = normLen;
+            int tval = 0, pval = 0;
+            boolean getP = true;
+
+            iter.setOffset(index);
+            matchEnd = index;
+            
+            if (DEBUG) debug(" outer loop: patIndex=" + patIndex + ", index=" + index);
+            
+            while ((patIndex > 0 || getP == false) && iter.getOffset() > start)
+            {
+                if (DEBUG) {
+                    debug("  inner loop: patIndex=" + patIndex + " iter=" + iter.getOffset());
+                    debug("   getP=" + getP);
+                }
+                
+                // Get the previous character in both the pattern and the target
+                tval = iter.previous() & mask;
+                
+                if (getP) pval = valueList[--patIndex];
+                getP = true;
+                
+                if (DEBUG) debug("   pval=" + Integer.toString(pval,16) + ", tval=" + Integer.toString(tval,16));
+                
+                if (tval == 0) {       // skip tval, use same pval
+                    if (DEBUG) debug("   tval is ignorable");
+                    getP = false;    
+                }
+                else if (pval != tval) {    // Mismatch, skip ahead
+                    if (DEBUG) debug("   mismatch: skippping " + getShift(tval, patIndex));
+                    
+                    index += getShift(tval, patIndex);
+                    break;
+                }
+                else if (patIndex == 0) {
+                    // The values matched, and we're at the beginning of the pattern,
+                    // which means we matched the whole thing.
+                    start = iter.getOffset();
+                    setMatchLength(matchEnd - start);
+                    if (DEBUG) debug("Found match at index "+ start );
+                    return start;
+                }
+            }
+            if (DEBUG) debug(" end of inner loop: patIndex=" + patIndex + " iter=" + iter.getOffset());
+            if (DEBUG) debug("   getP=" + getP);
+            
+            if (iter.getOffset() <= start) {
+                // We hit the beginning of the text being searched, which is
+                // possible if it contains lots of ignorable characters.
+                // Advance one character and try again.
+                if (DEBUG) debug("hit beginning of target; advance by one");
+                index++;
+            }
+        }
+        if (DEBUG) debug("Fell off end of outer loop; returning DONE");
+        return DONE;
+    }
+
+    /**
+     * Search backward for matching text ,starting at a given location.
+     * Clients should not call this method directly; instead they should call
+     * <code>SearchIterator.previous()</code>, which this method overrides.
+     * <p>
+     * If a match is found, this method returns the index at which the match
+     * starts and calls {@link SearchIterator#setMatchLength}
+     * with the number of characters in the target
+     * text that make up the match.  If no match is found, the method returns
+     * <code>DONE</code> and does not call <tt>setMatchLength</tt>.
+     * <p>
+     * @param start The index in the target text at which the search starts.
+     *
+     * @return      The index at which the matched text in the target starts, or DONE
+     *              if no match was found.
+     * <p>
+     * @see SearchIterator#previous
+     * @see SearchIterator#DONE
+     */
+    protected int handlePrev(int start)
+    {
+        int patLen = normLen;
+        int index = start - minLen;
+
+        int mask = getMask(strength);
+        int done = CollationElementIterator.NULLORDER & mask;
+
+        if (DEBUG) {
+            debug("-------------------------handlePrev-----------------------------------");
+            debug("");
+            debug("strength=" + strength + ", mask=" + Integer.toString(mask,16)
+                + ", done=" + Integer.toString(done,16));
+            debug("decomp=" + collator.getDecomposition());
+            
+            debug("target.begin=" + getTarget().getBeginIndex());
+            debug("target.end=" + getTarget().getEndIndex());
+        }
+        
+        while (index >= 0) {
+            int patIndex = 0;
+            int tval = 0, pval = 0;
+            boolean getP = true;
+
+            iter.setOffset(index);
+
+            if (DEBUG) debug(" outer loop: patIndex=" + patIndex + ", index=" + index);
+            
+            while ((patIndex < patLen || !getP) && iter.getOffset() < start)
+            {
+                if (DEBUG) {
+                    debug("  inner loop: patIndex=" + patIndex + " iter=" + iter.getOffset());
+                }
+                tval = iter.next() & mask;
+                if (getP) pval = valueList[patIndex++];
+                getP = true;
+
+                if (DEBUG) debug("   pval=" + Integer.toString(pval,16) + ", tval=" + Integer.toString(tval,16));
+
+                if (tval == done) {
+                    if (DEBUG) debug("   end of target; no match");
+                    return DONE;
+                }
+                else if (tval == 0) {
+                    if (DEBUG) debug("   tval is ignorable");
+                    getP = false;
+                }
+                else if (pval != tval) {
+                    // We didn't match this pattern.  Skip ahead
+                    if (DEBUG) debug("   mismatch: skippping " + getBackShift(tval, patIndex));
+                    
+                    int shift = getBackShift(tval, patIndex);
+                    index -= shift;
+                    break;
+                }
+                else if (patIndex == patLen) {
+                    // The elements matched and we're at the end of the pattern,
+                    // which means we matched the whole thing.
+                    setMatchLength(iter.getOffset() - index);
+                    return index;
+                }
+            }
+            if (iter.getOffset() >= start) {
+                // We hit the end of the text being searched, which is
+                // possible if it contains lots of ignorable characters.
+                // Back up one character and try again.
+                if (DEBUG) debug("hit end of target; back by one");
+                index--;
+            }
+        }
+        return DONE;
+    }
+
+    /**
+     * Return a bitmask that will select only the portions of a collation 
+     * element that are significant at the given strength level.
+     */
+    private static final int getMask(int strength) {
+        switch (strength) {
+            case Collator.PRIMARY:
+                return 0xFFFF0000;
+            case Collator.SECONDARY:
+                return 0xFFFFFF00;
+            default:
+                return 0xFFFFFFFF;
+        }
+    }
+    
+
+    //------------------------------------------------------------------------
+    // Private Data
+    //
+    private CollationElementIterator    iter;
+    private RuleBasedCollator           collator;
+    private int                         strength;
+    
+    //------------------------------------------------------------------------
+    // Everything from here on down is the data used to represent the
+    // Boyer-Moore shift tables and the code that generates and manipulates
+    // them.
+    //
+    private static final int MAX_TABLE = 256;        // Size of the shift tables
+    
+    private int     valueList[] = null;
+    private int     shiftTable[] = new int[MAX_TABLE];
+    private int     backShiftTable[] = new int[MAX_TABLE];
+
+    private String  pattern;            // The pattern string
+    private int     normLen = 0;        // num. of collation elements in pattern.
+    private int     minLen = 0;         // Min of composed, decomposed versions
+    private int     maxLen = 0;         // Max
+
+    private void initialize() {
+        if (DEBUG)  {
+            debug("-------------------------initialize-----------------------------------");
+            debug("pattern=" + pattern);
+        }
+        
+        CollationElementIterator iter = collator.getCollationElementIterator(pattern);
+
+        int mask = getMask(strength);
+
+        // See how many non-ignorable collation keys are in the text
+        normLen = 0;
+        int elem;
+        while ((elem = iter.next()) != CollationElementIterator.NULLORDER)
+        {
+            if ((elem & mask) != 0) {
+                normLen++;
+            }
+        }
+
+        // Save them all
+        valueList = new int[normLen];
+        int expandLen = 0;
+        iter.reset();
+        
+        for (int i = 0; i < normLen; i++)
+        {
+            elem = iter.next();
+
+            if ((elem & mask) != 0) {
+                valueList[i] = elem & mask;
+                
+            }
+            // Keep track of whether there are any expanding-character
+            // sequences that can result in one of the characters that's in
+            // the pattern.  If there are, we have to reduce the shift
+            // distances calculated below to account for it.
+            expandLen += iter.getMaxExpansion(elem) - 1;
+        }
+
+        //
+        // We need to remember the size of the composed and decomposed
+        // versions of the string.  Standard Boyer-Moore shift calculations
+        // can be wrong by an amount up to that difference, since a small
+        // small number of characters in the pattern can map to a larger
+        // number in the text being searched, or vice-versa.
+        //
+        int uniLen = pattern.length();
+        maxLen = Math.max(normLen, uniLen);
+        minLen = Math.min(normLen, uniLen) - expandLen;
+
+        if (DEBUG) debug("normLen=" + normLen + ", expandLen=" + expandLen
+                        + ", maxLen=" + maxLen + ", minLen=" + minLen);
+        
+        // Now initialize the shift tables
+        //
+        // NOTE: This is the most conservative way to build them.  If we had a way
+        // of knowing that there were no expanding/contracting chars in the rules,
+        // we could get rid of the "- 1" in the shiftTable calculations.
+        // But all of the default collators have at least one expansion or
+        // contraction, so it probably doesn't matter anyway.
+        //
+        for (int i = 0; i < MAX_TABLE; i++) {
+            shiftTable[i] = backShiftTable[i] = minLen;
+        }
+
+        for (int i = 0; i < normLen-1; i++) {
+            shiftTable[hash(valueList[i])] = Math.max(minLen - i - 1, 1);
+        }
+        shiftTable[hash(valueList[normLen-1])] = 1;
+        
+        for (int i = normLen - 1; i > 0; i--) {
+            backShiftTable[hash(valueList[i])] = i;
+        }
+        backShiftTable[hash(valueList[0])] = 1;
+
+        if (DEBUG) dumpTables();
+    }
+
+    /**
+     * Method used by StringSearch to determine how far to the right to
+     * shift the pattern during a Boyer-Moore search.  
+     *
+     * @param curValue  The current value in the target text
+     * @param curIndex  The index in the pattern at which we failed to match
+     *                  curValue in the target text.
+     */
+    private int getShift( int curValue, int curIndex ) {
+        int shiftAmt = shiftTable[hash(curValue)];
+
+        if (minLen != maxLen) {
+            int adjust = normLen - curIndex;
+            if (shiftAmt > adjust + 1) {
+                if (DEBUG) debug("getShift: adjusting by " + adjust);
+                shiftAmt -= adjust;
+            }
+        }
+        return shiftAmt;
+    }
+
+    /**
+     * Method used by StringSearch to determine how far to the left to
+     * shift the pattern during a reverse Boyer-Moore search.  
+     *
+     * @param curValue  The current value in the target text
+     * @param curIndex  The index in the pattern at which we failed to match
+     *                  curValue in the target text.
+     */
+    private int getBackShift( int curValue, int curIndex ) {
+        int shiftAmt = backShiftTable[hash(curValue)];
+
+        if (minLen != maxLen) {
+            int adjust = normLen - (minLen - curIndex);
+            if (shiftAmt > adjust + 1) {
+                if (DEBUG) debug("getBackShift: adjusting by " + adjust);
+                shiftAmt -= adjust;
+            }
+        }
+        return shiftAmt;
+    }
+
+    /**
+     * Hash a collation element from its full size (32 bits) down into a
+     * value that can be used as an index into the shift tables.  Right
+     * now we do a modulus by the size of the hash table.
+     *
+     * TODO: At some point I should experiment to see whether a slightly
+     * more complicated hash function gives us a better distribution
+     * on multilingual text.  I doubt it will have much effect on
+     * performance, though.
+     */
+    private static final int hash(int order) {
+        return CollationElementIterator.primaryOrder(order) % MAX_TABLE;
+    }
+
+
+    //-------------------------------------------------------------------------
+    // Debugging support...
+    //-------------------------------------------------------------------------
+
+    static private final boolean DEBUG = false;
+
+    static void debug(String str) {
+        System.out.println(str);
+    }
+
+    void dumpTables() {
+        for (int i = 0; i < MAX_TABLE; i++) {
+            if (shiftTable[i] != minLen) {
+                debug("shift[" + Integer.toString(i,16) + "] = " + shiftTable[i]);
+            }
+        }
+        for (int i = 0; i < MAX_TABLE; i++) {
+            if (backShiftTable[i] != minLen) {
+                debug("backShift[" + Integer.toString(i,16) + "] = " + backShiftTable[i]);
+            }
+        }
+    }
+};
diff --git a/src/com/ibm/text/SymbolTable.java b/src/com/ibm/text/SymbolTable.java
new file mode 100755
index 0000000..c093265
--- /dev/null
+++ b/src/com/ibm/text/SymbolTable.java
@@ -0,0 +1,59 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/SymbolTable.java,v $ 
+ * $Date: 2000/08/30 20:40:30 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.text.ParsePosition;
+
+/**
+ * An interface that maps strings to objects.  This interface defines
+ * both lookup protocol and parsing.  This allows different components
+ * to share a symbol table and to handle name parsing uniformly.  It
+ * is expected that client parse code look for the SYMBOL_REF
+ * character and, when seen, attempt to parse the characters after it
+ * using parseReference().
+ *
+ * <p>Currently, RuleBasedTransliterator and UnicodeSet use this
+ * interface to share variable definitions.
+ */
+public interface SymbolTable {
+
+    /**
+     * The character preceding a symbol reference name.
+     */
+    static final char SYMBOL_REF = '$';
+
+    /**
+     * Lookup the characters associated with this string and return it.
+     * Return <tt>null</tt> if no such name exists.  The resultant
+     * array may have length zero.
+     */
+    char[] lookup(String s);
+
+    /**
+     * Lookup the UnicodeSet associated with the given character, and
+     * return it.  Return <tt>null</tt> if not found.
+     */
+    UnicodeSet lookupSet(char ch);
+
+    /**
+     * Parse a symbol reference name from the given string, starting
+     * at the given position.  If no valid symbol reference name is
+     * found, return null and leave pos unchanged.
+     * @param text the text to parse for the name
+     * @param pos on entry, the index of the first character to parse.
+     * This is the character following the SYMBOL_REF character.  On
+     * exit, the index after the last parsed character.
+     * @param limit the index after the last character to be parsed.
+     * @return the parsed name.
+     */
+    String parseReference(String text, ParsePosition pos, int limit);
+}
diff --git a/src/com/ibm/text/TransliterationRule.java b/src/com/ibm/text/TransliterationRule.java
new file mode 100755
index 0000000..9859f8d
--- /dev/null
+++ b/src/com/ibm/text/TransliterationRule.java
@@ -0,0 +1,675 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/TransliterationRule.java,v $ 
+ * $Date: 2000/11/29 19:12:32 $ 
+ * $Revision: 1.25 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import com.ibm.util.Utility;
+
+/**
+ * A transliteration rule used by
+ * <code>RuleBasedTransliterator</code>.
+ * <code>TransliterationRule</code> is an immutable object.
+ *
+ * <p>A rule consists of an input pattern and an output string.  When
+ * the input pattern is matched, the output string is emitted.  The
+ * input pattern consists of zero or more characters which are matched
+ * exactly (the key) and optional context.  Context must match if it
+ * is specified.  Context may be specified before the key, after the
+ * key, or both.  The key, preceding context, and following context
+ * may contain variables.  Variables represent a set of Unicode
+ * characters, such as the letters <i>a</i> through <i>z</i>.
+ * Variables are detected by looking up each character in a supplied
+ * variable list to see if it has been so defined. 
+ *
+ * <p>A rule may contain segments in its input string and segment references in
+ * its output string.  A segment is a substring of the input pattern, indicated
+ * by an offset and limit.  The segment may span the preceding or following
+ * context.  A segment reference is a special character in the output string
+ * that causes a segment of the input string (not the input pattern) to be
+ * copied to the output string.  The range of special characters that represent
+ * segment references is defined by RuleBasedTransliterator.Data.
+ *
+ * <p>Example: The rule "([a-z]) . ([0-9]) > $2 . $1" will change the input
+ * string "abc.123" to "ab1.c23".
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: TransliterationRule.java,v $ $Revision: 1.25 $ $Date: 2000/11/29 19:12:32 $
+ */
+class TransliterationRule {
+    /**
+     * Constant returned by <code>getMatchDegree()</code> indicating a mismatch
+     * between the text and this rule.  One or more characters of the context or
+     * key do not match the text.
+     * @see #getMatchDegree
+     */
+    public static final int MISMATCH      = 0;
+
+    /**
+     * Constant returned by <code>getMatchDegree()</code> indicating a partial
+     * match between the text and this rule.  All characters of the text match
+     * the corresponding context or key, but more characters are required for a
+     * complete match.  There are some key or context characters at the end of
+     * the pattern that remain unmatched because the text isn't long enough.
+     * @see #getMatchDegree
+     */
+    public static final int PARTIAL_MATCH = 1;
+
+    /**
+     * Constant returned by <code>getMatchDegree()</code> indicating a complete
+     * match between the text and this rule.  The text matches all context and
+     * key characters.
+     * @see #getMatchDegree
+     */
+    public static final int FULL_MATCH    = 2;
+
+    /**
+     * The string that must be matched, consisting of the anteContext, key,
+     * and postContext, concatenated together, in that order.  Some components
+     * may be empty (zero length).
+     * @see anteContextLength
+     * @see keyLength
+     */
+    private String pattern;
+
+    /**
+     * The string that is emitted if the key, anteContext, and postContext
+     * are matched.
+     */
+    private String output;
+
+    /**
+     * Array of segments.  These are segments of the input string that may be
+     * referenced and appear in the output string.  Each segment is stored as an
+     * offset, limit pair.  Segments are referenced by a 1-based index;
+     * reference i thus includes characters at offset segments[2*i-2] to
+     * segments[2*i-1]-1 in the pattern string.
+     *
+     * In the output string, a segment reference is indicated by a character in
+     * a special range, as defined by RuleBasedTransliterator.Data.
+     *
+     * Most rules have no segments, in which case segments is null, and the
+     * output string need not be checked for segment reference characters.
+     */
+    private int[] segments;
+
+    /**
+     * The length of the string that must match before the key.  If
+     * zero, then there is no matching requirement before the key.
+     * Substring [0,anteContextLength) of pattern is the anteContext.
+     */
+    private int anteContextLength;
+
+    /**
+     * The length of the key.  Substring [anteContextLength,
+     * anteContextLength + keyLength) is the key.
+     */
+    private int keyLength;
+
+    /**
+     * The position of the cursor after emitting the output string, from 0 to
+     * output.length().  For most rules with no special cursor specification,
+     * the cursorPos is output.length().
+     */
+    private int cursorPos;
+
+    /**
+     * The character at index i, where i < contextStart || i >= contextLimit,
+     * is ETHER.  This allows explicit matching by rules and UnicodeSets
+     * of text outside the context.  In traditional terms, this allows anchoring
+     * at the start and/or end.
+     */
+    static final char ETHER = '\uFFFF';
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Construct a new rule with the given input, output text, and other
+     * attributes.  A cursor position may be specified for the output text.
+     * @param input input string, including key and optional ante and
+     * post context
+     * @param anteContextPos offset into input to end of ante context, or -1 if
+     * none.  Must be <= input.length() if not -1.
+     * @param postContextPos offset into input to start of post context, or -1
+     * if none.  Must be <= input.length() if not -1, and must be >=
+     * anteContextPos.
+     * @param output output string
+     * @param cursorPos offset into output at which cursor is located, or -1 if
+     * none.  If less than zero, then the cursor is placed after the
+     * <code>output</code>; that is, -1 is equivalent to
+     * <code>output.length()</code>.  If greater than
+     * <code>output.length()</code> then an exception is thrown.
+     * @param cursorOffset an offset to be added to cursorPos to position the
+     * cursor either in the ante context, if < 0, or in the post context, if >
+     * 0.  For example, the rule "abc{def} > | @@@ xyz;" changes "def" to
+     * "xyz" and moves the cursor to before "a".  It would have a cursorOffset
+     * of -3.
+     * @param segs array of 2n integers.  Each of n pairs consists of offset,
+     * limit for a segment of the input string.  Characters in the output string
+     * refer to these segments if they are in a special range determined by the
+     * associated RuleBasedTransliterator.Data object.  May be null if there are
+     * no segments.  The caller is responsible for validating that segments
+     * are well-formed.
+     * @param anchorStart true if the the rule is anchored on the left to
+     * the context start
+     * @param anchorEnd true if the rule is anchored on the right to the
+     * context limit
+     */
+    public TransliterationRule(String input,
+                               int anteContextPos, int postContextPos,
+                               String output,
+                               int cursorPos, int cursorOffset,
+                               int[] segs,
+                               boolean anchorStart, boolean anchorEnd) {
+        // Do range checks only when warranted to save time
+        if (anteContextPos < 0) {
+            anteContextLength = 0;
+        } else {
+            if (anteContextPos > input.length()) {
+                throw new IllegalArgumentException("Invalid ante context");
+            }
+            anteContextLength = anteContextPos;
+        }
+        if (postContextPos < 0) {
+            keyLength = input.length() - anteContextLength;
+        } else {
+            if (postContextPos < anteContextLength ||
+                postContextPos > input.length()) {
+                throw new IllegalArgumentException("Invalid post context");
+            }
+            keyLength = postContextPos - anteContextLength;
+        }
+        if (cursorPos < 0) {
+            cursorPos = output.length();
+        }
+        if (cursorPos > output.length()) {
+            throw new IllegalArgumentException("Invalid cursor position");
+        }
+        this.cursorPos = cursorPos + cursorOffset;
+        pattern = input;
+        this.output = output;
+        // We don't validate the segments array.  The caller must
+        // guarantee that the segments are well-formed.
+        this.segments = segs;
+
+        // Implement anchors by inserting an ETHER character on the
+        // left or right.  If on the left, then the indices must be
+        // incremented.  If on the right, no index change is
+        // necessary.
+        if (anchorStart || anchorEnd) {
+            StringBuffer buf = new StringBuffer();
+            if (anchorStart) {
+                buf.append(ETHER);
+                ++anteContextLength;
+                ++cursorPos;
+                // Adjust segment offsets
+                if (segments != null) {
+                    for (int i=0; i<segments.length; ++i) {
+                        ++segments[i];
+                    }
+                }
+            }
+            buf.append(input);
+            if (anchorEnd) {
+                buf.append(ETHER);
+            }
+            pattern = buf.toString();
+        }
+    }
+
+    /**
+     * Construct a new rule with the given input, output text, and other
+     * attributes.  A cursor position may be specified for the output text.
+     * @param input input string, including key and optional ante and
+     * post context
+     * @param anteContextPos offset into input to end of ante context, or -1 if
+     * none.  Must be <= input.length() if not -1.
+     * @param postContextPos offset into input to start of post context, or -1
+     * if none.  Must be <= input.length() if not -1, and must be >=
+     * anteContextPos.
+     * @param output output string
+     * @param cursorPos offset into output at which cursor is located, or -1 if
+     * none.  If less than zero, then the cursor is placed after the
+     * <code>output</code>; that is, -1 is equivalent to
+     * <code>output.length()</code>.  If greater than
+     * <code>output.length()</code> then an exception is thrown.
+     */
+    public TransliterationRule(String input,
+                               int anteContextPos, int postContextPos,
+                               String output,
+                               int cursorPos) {
+        this(input, anteContextPos, postContextPos,
+             output, cursorPos, 0, null, false, false);
+    }
+
+    /**
+     * Return the position of the cursor within the output string.
+     * @return a value from 0 to <code>getOutput().length()</code>, inclusive.
+     */
+    public int getCursorPos() {
+        return cursorPos;
+    }
+
+    /**
+     * Return the preceding context length.  This method is needed to
+     * support the <code>Transliterator</code> method
+     * <code>getMaximumContextLength()</code>.
+     */
+    public int getAnteContextLength() {
+        return anteContextLength;
+    }
+
+    /**
+     * Internal method.  Returns 8-bit index value for this rule.
+     * This is the low byte of the first character of the key,
+     * unless the first character of the key is a set.  If it's a
+     * set, or otherwise can match multiple keys, the index value is -1.
+     */
+    final int getIndexValue(RuleBasedTransliterator.Data variables) {
+        if (anteContextLength == pattern.length()) {
+            // A pattern with just ante context {such as foo)>bar} can
+            // match any key.
+            return -1;
+        }
+        char c = pattern.charAt(anteContextLength);
+        return variables.lookupSet(c) == null ? (c & 0xFF) : -1;
+    }
+
+    /**
+     * Do a replacement of the input pattern with the output text in
+     * the given string, at the given offset.  This method assumes
+     * that a match has already been found in the given text at the
+     * given position.
+     * @param text the text containing the substring to be replaced
+     * @param offset the offset into the text at which the pattern
+     * matches.  This is the offset to the point after the ante
+     * context, if any, and before the match string and any post
+     * context.
+     * @param data the RuleBasedTransliterator.Data object specifying
+     * context for this transliterator.
+     * @return the change in the length of the text
+     */
+    public int replace(Replaceable text, int offset,
+                       RuleBasedTransliterator.Data data) {
+        if (segments == null) {
+            text.replace(offset, offset + keyLength, output);
+            return output.length() - keyLength;
+        } else {
+            /* When there are segments to be copied, use the Replaceable.copy()
+             * API in order to retain out-of-band data.  Copy everything to the
+             * point after the key, then delete the key.  That is, copy things
+             * into offset + keyLength, then replace offset .. offset +
+             * keyLength with the empty string.
+             *
+             * Minimize the number of calls to Replaceable.replace() and
+             * Replaceable.copy().
+             */
+            int textStart = offset - anteContextLength;
+            int dest = offset + keyLength; // copy new text to here
+            StringBuffer buf = new StringBuffer();
+            for (int i=0; i<output.length(); ++i) {
+                char c = output.charAt(i);
+                int b = data.lookupSegmentReference(c);
+                if (b < 0) {
+                    // Accumulate straight (non-segment) text.
+                    buf.append(c);
+                } else {
+                    // Insert any accumulated straight text.
+                    if (buf.length() > 0) {
+                        text.replace(dest, dest, buf.toString());
+                        dest += buf.length();
+                        buf.setLength(0);
+                    }
+                    // Copy segment with out-of-band data
+                    b *= 2;
+                    text.copy(textStart + segments[b],
+                              textStart + segments[b+1], dest);
+                    dest += segments[b+1] - segments[b];
+                }
+                
+            }
+            // Insert any accumulated straight text.
+            if (buf.length() > 0) {
+                text.replace(dest, dest, buf.toString());
+                dest += buf.length();
+            }
+            // Delete the key
+            text.replace(offset, offset + keyLength, "");
+            return dest - (offset + keyLength) - keyLength;
+        }
+    }
+
+    /**
+     * Internal method.  Returns true if this rule matches the given
+     * index value.  The index value is an 8-bit integer, 0..255,
+     * representing the low byte of the first character of the key.
+     * It matches this rule if it matches the first character of the
+     * key, or if the first character of the key is a set, and the set
+     * contains any character with a low byte equal to the index
+     * value.  If the rule contains only ante context, as in foo)>bar,
+     * then it will match any key.
+     */
+    final boolean matchesIndexValue(int v, RuleBasedTransliterator.Data variables) {
+        if (anteContextLength == pattern.length()) {
+            // A pattern with just ante context {such as foo)>bar} can
+            // match any key.
+            return true;
+        }
+        char c = pattern.charAt(anteContextLength);
+        UnicodeSet set = variables.lookupSet(c);
+        return set == null ? (c & 0xFF) == v : set.containsIndexValue(v);
+    }
+
+    /**
+     * Return true if this rule masks another rule.  If r1 masks r2 then
+     * r1 matches any input string that r2 matches.  If r1 masks r2 and r2 masks
+     * r1 then r1 == r2.  Examples: "a>x" masks "ab>y".  "a>x" masks "a[b]>y".
+     * "[c]a>x" masks "[dc]a>y".
+     */
+    public boolean masks(TransliterationRule r2) {
+        /* Rule r1 masks rule r2 if the string formed of the
+         * antecontext, key, and postcontext overlaps in the following
+         * way:
+         *
+         * r1:      aakkkpppp
+         * r2:     aaakkkkkpppp
+         *            ^
+         * 
+         * The strings must be aligned at the first character of the
+         * key.  The length of r1 to the left of the alignment point
+         * must be <= the length of r2 to the left; ditto for the
+         * right.  The characters of r1 must equal (or be a superset
+         * of) the corresponding characters of r2.  The superset
+         * operation should be performed to check for UnicodeSet
+         * masking.
+         */
+
+        /* LIMITATION of the current mask algorithm: Some rule
+         * maskings are currently not detected.  For example,
+         * "{Lu}]a>x" masks "A]a>y".  This can be added later. TODO
+         */
+
+        int left = anteContextLength;
+        int left2 = r2.anteContextLength;
+        int right = pattern.length() - left;
+        int right2 = r2.pattern.length() - left2;
+        return left <= left2 && right <= right2 &&
+            r2.pattern.substring(left2 - left).startsWith(pattern);
+    }
+
+    /**
+     * Return a string representation of this object.
+     * @return string representation of this object
+     */
+    public String toString() {
+        return getClass().getName() + '{'
+            + Utility.escape((anteContextLength > 0 ? (pattern.substring(0, anteContextLength) +
+                                              " {") : "")
+                     + pattern.substring(anteContextLength, anteContextLength + keyLength)
+                     + (anteContextLength + keyLength < pattern.length() ?
+                        ("} " + pattern.substring(anteContextLength + keyLength)) : "")
+                     + " > "
+                     + (cursorPos < output.length()
+                        ? (output.substring(0, cursorPos) + '|' + output.substring(cursorPos))
+                        : output))
+            + '}';
+    }
+
+    /**
+     * Return true if this rule matches the given text.
+     * @param text the text, both translated and untranslated
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= text.length()</code>.
+     * @param cursor position at which to translate next, representing offset
+     * into text.  This value must be between <code>start</code> and
+     * <code>limit</code>.
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     */
+    public final boolean matches(Replaceable text,
+                                 Transliterator.Position pos,
+                                 RuleBasedTransliterator.Data variables,
+                                 UnicodeFilter filter) {
+        // Match anteContext, key, and postContext
+        int cursor = pos.start - anteContextLength;
+        //[ANCHOR]if (cursor < pos.contextStart
+        //[ANCHOR]    || (cursor + pattern.length()) > pos.contextLimit) {
+        //[ANCHOR]    return false;
+        //[ANCHOR]}
+        // Quick length check; this is a performance win for long rules.
+        // Widen by one (on both sides) to allow anchor matching.
+        if (cursor < (pos.contextStart - 1)
+            || (cursor + pattern.length()) > (pos.contextLimit + 1)) {
+            return false;
+        }
+        for (int i=0; i<pattern.length(); ++i, ++cursor) {
+            //[ANCHOR]if (!charMatches(pattern.charAt(i), text.charAt(cursor),
+            //[ANCHOR]                 variables, filter)) {
+            if (!charMatches(pattern.charAt(i), text, cursor, pos,
+                             variables, filter)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Return the degree of match between this rule and the given text.  The
+     * degree of match may be mismatch, a partial match, or a full match.  A
+     * mismatch means at least one character of the text does not match the
+     * context or key.  A partial match means some context and key characters
+     * match, but the text is not long enough to match all of them.  A full
+     * match means all context and key characters match.
+     * @param text the text, both translated and untranslated
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= text.length()</code>.
+     * @param cursor position at which to translate next, representing offset
+     * into text.  This value must be between <code>start</code> and
+     * <code>limit</code>.
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     * @return one of <code>MISMATCH</code>, <code>PARTIAL_MATCH</code>, or
+     * <code>FULL_MATCH</code>.
+     * @see #MISMATCH
+     * @see #PARTIAL_MATCH
+     * @see #FULL_MATCH
+     */
+    public int getMatchDegree(Replaceable text,
+                              Transliterator.Position pos,
+                              RuleBasedTransliterator.Data variables,
+                              UnicodeFilter filter) {
+        int len = getRegionMatchLength(text, pos, variables, filter);
+        return len < anteContextLength ? MISMATCH :
+            (len < pattern.length() ? PARTIAL_MATCH : FULL_MATCH);
+    }
+
+    /**
+     * Return the number of characters of the text that match this rule.  If
+     * there is a mismatch, return -1.  If the text is not long enough to match
+     * any characters, return 0.
+     * @param text the text, both translated and untranslated
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= text.length()</code>.
+     * @param cursor position at which to translate next, representing offset
+     * into text.  This value must be between <code>start</code> and
+     * <code>limit</code>.
+     * @param variables a dictionary of variables mapping <code>Character</code>
+     * to <code>UnicodeSet</code>
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     * @return -1 if there is a mismatch, 0 if the text is not long enough to
+     * match any characters, otherwise the number of characters of text that
+     * match this rule.
+     */
+    protected int getRegionMatchLength(Replaceable text,
+                                       Transliterator.Position pos,
+                                       RuleBasedTransliterator.Data variables,
+                                       UnicodeFilter filter) {
+        int cursor = pos.start - anteContextLength;
+        //[ANCHOR]if (cursor < pos.contextStart) {
+        //[ANCHOR]    return -1;
+        //[ANCHOR]}
+        // Quick length check; this is a performance win for long rules.
+        // Widen by one to allow anchor matching.
+        if (cursor < (pos.contextStart - 1)) {
+            return -1;
+        }
+        int i;
+        for (i=0; i<pattern.length() && cursor<pos.contextLimit; ++i, ++cursor) {
+            //[ANCHOR]if (!charMatches(pattern.charAt(i), text.charAt(cursor),
+            //[ANCHOR]                 variables, filter)) {
+            if (!charMatches(pattern.charAt(i), text, cursor, pos,
+                             variables, filter)) {
+                return -1;
+            }
+        }
+        return i;
+    }
+
+    /**
+     * Return true if the given key matches the given text.  This method
+     * accounts for the fact that the key character may represent a character
+     * set.  Note that the key and text characters may not be interchanged
+     * without altering the results.
+     * @param keyChar a character in the match key
+     * @param textChar a character in the text being transliterated
+     * @param variables a dictionary of variables mapping <code>Character</code>
+     * to <code>UnicodeSet</code>
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     */
+    protected static final boolean charMatches(char keyChar, Replaceable text,
+                                               int index, Transliterator.Position pos,
+                                               RuleBasedTransliterator.Data variables,
+                                               UnicodeFilter filter) {
+        UnicodeSet set = null;
+        char textChar = (index >= pos.contextStart && index < pos.contextLimit)
+            ? text.charAt(index) : ETHER;
+        return (filter == null || filter.contains(textChar)) &&
+            (((set = variables.lookupSet(keyChar)) == null) ?
+             keyChar == textChar : set.contains(textChar));
+    }
+
+    /**
+     * Return true if the given key matches the given text.  This method
+     * accounts for the fact that the key character may represent a character
+     * set.  Note that the key and text characters may not be interchanged
+     * without altering the results.
+     * @param keyChar a character in the match key
+     * @param textChar a character in the text being transliterated
+     * @param variables a dictionary of variables mapping <code>Character</code>
+     * to <code>UnicodeSet</code>
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     */
+    protected static final boolean charMatches(char keyChar, char textChar,
+                                               RuleBasedTransliterator.Data variables,
+                                               UnicodeFilter filter) {
+        UnicodeSet set = null;
+        return (filter == null || filter.contains(textChar)) &&
+            (((set = variables.lookupSet(keyChar)) == null) ?
+             keyChar == textChar : set.contains(textChar));
+    }
+}
+
+/**
+ * $Log: TransliterationRule.java,v $
+ * Revision 1.25  2000/11/29 19:12:32  alan4j
+ * Update docs
+ *
+ * Revision 1.24  2000/08/30 20:40:30  alan4j
+ * Implement anchors.
+ *
+ * Revision 1.23  2000/06/29 21:59:23  alan4j
+ * Fix handling of Transliterator.Position fields
+ *
+ * Revision 1.22  2000/05/18 21:37:19  alan
+ * Update docs
+ *
+ * Revision 1.21  2000/04/28 01:22:01  alan
+ * Update syntax displayed by toString
+ *
+ * Revision 1.20  2000/04/25 17:17:37  alan
+ * Add Replaceable.copy to retain out-of-band info during reordering.
+ *
+ * Revision 1.19  2000/04/25 01:42:58  alan
+ * Allow arbitrary length variable values. Clean up Data API. Update javadocs.
+ *
+ * Revision 1.18  2000/04/22 01:25:10  alan
+ * Add support for cursor positioner '@'; update javadoc
+ *
+ * Revision 1.17  2000/04/21 21:16:40  alan
+ * Modify rule syntax
+ *
+ * Revision 1.16  2000/04/19 16:34:18  alan
+ * Add segment support.
+ *
+ * Revision 1.15  2000/04/12 20:17:45  alan
+ * Delegate replace operation to rule object
+ *
+ * Revision 1.14  2000/03/10 04:07:24  johnf
+ * Copyright update
+ *
+ * Revision 1.13  2000/02/10 07:36:25  johnf
+ * fixed imports for com.ibm.util.Utility
+ *
+ * Revision 1.12  2000/02/03 18:11:19  Alan
+ * Use array rather than hashtable for char-to-set map
+ *
+ * Revision 1.11  2000/01/27 18:59:19  Alan
+ * Use Position rather than int[] and move all subclass overrides to one method (handleTransliterate)
+ *
+ * Revision 1.10  2000/01/18 20:36:17  Alan
+ * Make UnicodeSet inherit from UnicodeFilter
+ *
+ * Revision 1.9  2000/01/18 02:38:55  Alan
+ * Fix filtering bug.
+ *
+ * Revision 1.8  2000/01/13 23:53:23  Alan
+ * Fix bugs found during ICU port
+ *
+ * Revision 1.7  2000/01/11 04:12:06  Alan
+ * Cleanup, embellish comments
+ *
+ * Revision 1.6  2000/01/11 02:25:03  Alan
+ * Rewrite UnicodeSet and RBT parsers for better performance and new syntax
+ *
+ * Revision 1.5  2000/01/04 21:43:57  Alan
+ * Add rule indexing, and move masking check to TransliterationRuleSet.
+ *
+ * Revision 1.4  1999/12/22 01:40:54  Alan
+ * Consolidate rule pattern anteContext, key, and postContext into one string.
+ *
+ * Revision 1.3  1999/12/22 01:05:54  Alan
+ * Improve masking checking; turn it off by default, for better performance
+ *
+ * Revision 1.2  1999/12/21 23:58:44  Alan
+ * Detect a>x masking a>y
+ */
diff --git a/src/com/ibm/text/TransliterationRuleSet.java b/src/com/ibm/text/TransliterationRuleSet.java
new file mode 100755
index 0000000..55bd323
--- /dev/null
+++ b/src/com/ibm/text/TransliterationRuleSet.java
@@ -0,0 +1,298 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/TransliterationRuleSet.java,v $ 
+ * $Date: 2000/06/29 21:59:23 $ 
+ * $Revision: 1.10 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.*;
+
+/**
+ * A set of rules for a <code>RuleBasedTransliterator</code>.  This set encodes
+ * the transliteration in one direction from one set of characters or short
+ * strings to another.  A <code>RuleBasedTransliterator</code> consists of up to
+ * two such sets, one for the forward direction, and one for the reverse.
+ *
+ * <p>A <code>TransliterationRuleSet</code> has one important operation, that of
+ * finding a matching rule at a given point in the text.  This is accomplished
+ * by the <code>findMatch()</code> method.
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: TransliterationRuleSet.java,v $ $Revision: 1.10 $ $Date: 2000/06/29 21:59:23 $
+ *
+ * $Log: TransliterationRuleSet.java,v $
+ * Revision 1.10  2000/06/29 21:59:23  alan4j
+ * Fix handling of Transliterator.Position fields
+ *
+ * Revision 1.9  2000/03/10 04:07:24  johnf
+ * Copyright update
+ *
+ * Revision 1.8  2000/02/03 18:11:19  Alan
+ * Use array rather than hashtable for char-to-set map
+ *
+ * Revision 1.7  2000/01/27 18:59:19  Alan
+ * Use Position rather than int[] and move all subclass overrides to one method (handleTransliterate)
+ *
+ * Revision 1.6  2000/01/18 20:36:17  Alan
+ * Make UnicodeSet inherit from UnicodeFilter
+ *
+ * Revision 1.5  2000/01/04 21:43:57  Alan
+ * Add rule indexing, and move masking check to TransliterationRuleSet.
+ *
+ * Revision 1.4  1999/12/22 01:40:54  Alan
+ * Consolidate rule pattern anteContext, key, and postContext into one string.
+ *
+ * Revision 1.3  1999/12/22 01:05:54  Alan
+ * Improve masking checking; turn it off by default, for better performance
+ *
+ * Revision 1.2  1999/12/22 00:01:36  Alan
+ * Detect a>x masking a>y
+ *
+ */
+class TransliterationRuleSet {
+    /**
+     * Vector of rules, in the order added.  This is only used while the rule
+     * set is getting built.  After that, freeze() reorders and indexes the
+     * rules, and this Vector is freed.
+     */
+    private Vector ruleVector;
+
+    /**
+     * Length of the longest preceding context
+     */
+    private int maxContextLength;
+
+    /**
+     * Sorted and indexed table of rules.  This is created by freeze() from
+     * the rules in ruleVector.
+     */
+    private TransliterationRule[] rules;
+
+    /**
+     * Index table.  For text having a first character c, compute x = c&0xFF.
+     * Now use rules[index[x]..index[x+1]-1].  This index table is created by
+     * freeze().
+     */
+    private int[] index;
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Construct a new empty rule set.
+     */
+    public TransliterationRuleSet() {
+        ruleVector = new Vector();
+        maxContextLength = 0;
+    }
+
+    /**
+     * Return the maximum context length.
+     * @return the length of the longest preceding context.
+     */
+    public int getMaximumContextLength() {
+        return maxContextLength;
+    }
+
+    /**
+     * Add a rule to this set.  Rules are added in order, and order is
+     * significant.
+     * @param rule the rule to add
+     */
+    public void addRule(TransliterationRule rule) {
+        if (ruleVector == null) {
+            throw new IllegalArgumentException("Cannot add rules after freezing");
+        }
+        ruleVector.addElement(rule);
+        int len;
+        if ((len = rule.getAnteContextLength()) > maxContextLength) {
+            maxContextLength = len;
+        }
+    }
+
+    /**
+     * Close this rule set to further additions, check it for masked rules,
+     * and index it to optimize performance.  Once this method is called,
+     * addRule() can no longer be called.
+     * @exception IllegalArgumentException if some rules are masked
+     */
+    public void freeze(RuleBasedTransliterator.Data variables) {
+        /* Construct the rule array and index table.  We reorder the
+         * rules by sorting them into 256 bins.  Each bin contains all
+         * rules matching the index value for that bin.  A rule
+         * matches an index value if string whose first key character
+         * has a low byte equal to the index value can match the rule.
+         *
+         * Each bin contains zero or more rules, in the same order
+         * they were found originally.  However, the total rules in
+         * the bins may exceed the number in the original vector,
+         * since rules that have a variable as their first key
+         * character will generally fall into more than one bin.
+         *
+         * That is, each bin contains all rules that either have that
+         * first index value as their first key character, or have
+         * a set containing the index value as their first character.
+         */
+        int n = ruleVector.size();
+        index = new int[257]; // [sic]
+        Vector v = new Vector(2*n); // heuristic; adjust as needed
+
+        /* Precompute the index values.  This saves a LOT of time.
+         */
+        int[] indexValue = new int[n];
+        for (int j=0; j<n; ++j) {
+            TransliterationRule r = (TransliterationRule) ruleVector.elementAt(j);
+            indexValue[j] = r.getIndexValue(variables);
+        }
+        for (int x=0; x<256; ++x) {
+            index[x] = v.size();
+            for (int j=0; j<n; ++j) {
+                if (indexValue[j] >= 0) {
+                    if (indexValue[j] == x) {
+                        v.addElement(ruleVector.elementAt(j));
+                    }
+                } else {
+                    // If the indexValue is < 0, then the first key character is
+                    // a set, and we must use the more time-consuming
+                    // matchesIndexValue check.  In practice this happens
+                    // rarely, so we seldom tread this code path.
+                    TransliterationRule r = (TransliterationRule) ruleVector.elementAt(j);
+                    if (r.matchesIndexValue(x, variables)) {
+                        v.addElement(r);
+                    }
+                }
+            }
+        }
+        index[256] = v.size();
+
+        /* Freeze things into an array.
+         */
+        rules = new TransliterationRule[v.size()];
+        v.copyInto(rules);
+        ruleVector = null;
+
+        StringBuffer errors = null;
+
+        /* Check for masking.  This is MUCH faster than our old check,
+         * which was each rule against each following rule, since we
+         * only have to check for masking within each bin now.  It's
+         * 256*O(n2^2) instead of O(n1^2), where n1 is the total rule
+         * count, and n2 is the per-bin rule count.  But n2<<n1, so
+         * it's a big win.
+         */
+        for (int x=0; x<256; ++x) {
+            for (int j=index[x]; j<index[x+1]-1; ++j) {
+                TransliterationRule r1 = rules[j];
+                for (int k=j+1; k<index[x+1]; ++k) {
+                    TransliterationRule r2 = rules[k];
+                    if (r1.masks(r2)) {
+                        if (errors == null) {
+                            errors = new StringBuffer();
+                        } else {
+                            errors.append("\n");
+                        }
+                        errors.append("Rule " + r1 + " masks " + r2);
+                    }
+                }
+            }
+        }
+
+        if (errors != null) {
+            throw new IllegalArgumentException(errors.toString());
+        }
+    }
+
+    /**
+     * Attempt to find a matching rule at the specified point in the text.
+     * @param text the text, both translated and untranslated
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= text.length()</code>.
+     * @param cursor position at which to translate next, representing offset
+     * into text.  This value must be between <code>start</code> and
+     * <code>limit</code>.
+     * @param variables a dictionary mapping variables to the sets they
+     * represent (maps <code>Character</code> to <code>UnicodeSet</code>)
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     * @return the matching rule, or null if none found.
+     */
+    public TransliterationRule findMatch(Replaceable text,
+                                         Transliterator.Position pos,
+                                         RuleBasedTransliterator.Data variables,
+                                         UnicodeFilter filter) {
+        /* We only need to check our indexed bin of the rule table,
+         * based on the low byte of the first key character.
+         */
+        int x = text.charAt(pos.start) & 0xFF;
+        for (int i=index[x]; i<index[x+1]; ++i) {
+            if (rules[i].matches(text, pos, variables, filter)) {
+                return rules[i];
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Attempt to find a matching rule at the specified point in the text.
+     * Unlike <code>findMatch()</code>, this method does an incremental match.
+     * An incremental match requires that there be no partial matches that might
+     * pre-empt the full match that is found.  If there are partial matches,
+     * then null is returned.  A non-null result indicates that a full match has
+     * been found, and that it cannot be pre-empted by a partial match
+     * regardless of what additional text is added to the translation buffer.
+     * @param text the text, both translated and untranslated
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= text.length()</code>.
+     * @param cursor position at which to translate next, representing offset
+     * into text.  This value must be between <code>start</code> and
+     * <code>limit</code>.
+     * @param variables a dictionary mapping variables to the sets they
+     * represent (maps <code>Character</code> to <code>UnicodeSet</code>)
+     * @param partial output parameter.  <code>partial[0]</code> is set to
+     * true if a partial match is returned.
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     * @return the matching rule, or null if none found, or if the text buffer
+     * does not have enough text yet to unambiguously match a rule.
+     */
+    public TransliterationRule findIncrementalMatch(Replaceable text,
+                                                    Transliterator.Position pos,
+                                                    RuleBasedTransliterator.Data variables,
+                                                    boolean partial[],
+                                                    UnicodeFilter filter) {
+        /* We only need to check our indexed bin of the rule table,
+         * based on the low byte of the first key character.
+         */
+        partial[0] = false;
+        int x = text.charAt(pos.start) & 0xFF;
+        for (int i=index[x]; i<index[x+1]; ++i) {
+            int match = rules[i].getMatchDegree(text, pos,
+                                                variables, filter);
+            switch (match) {
+            case TransliterationRule.FULL_MATCH:
+                return rules[i];
+            case TransliterationRule.PARTIAL_MATCH:
+                partial[0] = true;
+                return null;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/com/ibm/text/Transliterator.java b/src/com/ibm/text/Transliterator.java
new file mode 100755
index 0000000..46a8ccb
--- /dev/null
+++ b/src/com/ibm/text/Transliterator.java
@@ -0,0 +1,1071 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/Transliterator.java,v $ 
+ * $Date: 2001/03/30 22:50:08 $ 
+ * $Revision: 1.27 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.*;
+import java.text.MessageFormat;
+import java.text.ParsePosition;
+import java.io.UnsupportedEncodingException;
+import com.ibm.text.resources.ResourceReader;
+
+/**
+ * <code>Transliterator</code> is an abstract class that
+ * transliterates text from one format to another.  The most common
+ * kind of transliterator is a script, or alphabet, transliterator.
+ * For example, a Russian to Latin transliterator changes Russian text
+ * written in Cyrillic characters to phonetically equivalent Latin
+ * characters.  It does not <em>translate</em> Russian to English!
+ * Transliteration, unlike translation, operates on characters, without
+ * reference to the meanings of words and sentences.
+ *
+ * <p>Although script conversion is its most common use, a
+ * transliterator can actually perform a more general class of tasks.
+ * In fact, <code>Transliterator</code> defines a very general API
+ * which specifies only that a segment of the input text is replaced
+ * by new text.  The particulars of this conversion are determined
+ * entirely by subclasses of <code>Transliterator</code>.
+ *
+ * <p><b>Transliterators are stateless</b>
+ *
+ * <p><code>Transliterator</code> objects are <em>stateless</em>; they
+ * retain no information between calls to
+ * <code>transliterate()</code>.  As a result, threads may share
+ * transliterators without synchronizing them.  This might seem to
+ * limit the complexity of the transliteration operation.  In
+ * practice, subclasses perform complex transliterations by delaying
+ * the replacement of text until it is known that no other
+ * replacements are possible.  In other words, although the
+ * <code>Transliterator</code> objects are stateless, the source text
+ * itself embodies all the needed information, and delayed operation
+ * allows arbitrary complexity.
+ *
+ * <p><b>Batch transliteration</b>
+ *
+ * <p>The simplest way to perform transliteration is all at once, on a
+ * string of existing text.  This is referred to as <em>batch</em>
+ * transliteration.  For example, given a string <code>input</code>
+ * and a transliterator <code>t</code>, the call
+ *
+ * <blockquote><code>String result = t.transliterate(input);
+ * </code></blockquote>
+ *
+ * will transliterate it and return the result.  Other methods allow
+ * the client to specify a substring to be transliterated and to use
+ * {@link Replaceable} objects instead of strings, in order to
+ * preserve out-of-band information (such as text styles).
+ *
+ * <p><b>Keyboard transliteration</b>
+ *
+ * <p>Somewhat more involved is <em>keyboard</em>, or incremental
+ * transliteration.  This is the transliteration of text that is
+ * arriving from some source (typically the user's keyboard) one
+ * character at a time, or in some other piecemeal fashion.
+ *
+ * <p>In keyboard transliteration, a <code>Replaceable</code> buffer
+ * stores the text.  As text is inserted, as much as possible is
+ * transliterated on the fly.  This means a GUI that displays the
+ * contents of the buffer may show text being modified as each new
+ * character arrives.
+ *
+ * <p>Consider the simple <code>RuleBasedTransliterator</code>:
+ *
+ * <blockquote><code>
+ * th&gt;{theta}<br>
+ * t&gt;{tau}
+ * </code></blockquote>
+ *
+ * When the user types 't', nothing will happen, since the
+ * transliterator is waiting to see if the next character is 'h'.  To
+ * remedy this, we introduce the notion of a cursor, marked by a '|'
+ * in the output string:
+ *
+ * <blockquote><code>
+ * t&gt;|{tau}<br>
+ * {tau}h&gt;{theta}
+ * </code></blockquote>
+ *
+ * Now when the user types 't', tau appears, and if the next character
+ * is 'h', the tau changes to a theta.  This is accomplished by
+ * maintaining a cursor position (independent of the insertion point,
+ * and invisible in the GUI) across calls to
+ * <code>transliterate()</code>.  Typically, the cursor will
+ * be coincident with the insertion point, but in a case like the one
+ * above, it will precede the insertion point.
+ *
+ * <p>Keyboard transliteration methods maintain a set of three indices
+ * that are updated with each call to
+ * <code>transliterate()</code>, including the cursor, start,
+ * and limit.  These indices are changed by the method, and they are
+ * passed in and out via a Position object. The <code>start</code> index
+ * marks the beginning of the substring that the transliterator will
+ * look at.  It is advanced as text becomes committed (but it is not
+ * the committed index; that's the <code>cursor</code>).  The
+ * <code>cursor</code> index, described above, marks the point at
+ * which the transliterator last stopped, either because it reached
+ * the end, or because it required more characters to disambiguate
+ * between possible inputs.  The <code>cursor</code> can also be
+ * explicitly set by rules in a <code>RuleBasedTransliterator</code>.
+ * Any characters before the <code>cursor</code> index are frozen;
+ * future keyboard transliteration calls within this input sequence
+ * will not change them.  New text is inserted at the
+ * <code>limit</code> index, which marks the end of the substring that
+ * the transliterator looks at.
+ *
+ * <p>Because keyboard transliteration assumes that more characters
+ * are to arrive, it is conservative in its operation.  It only
+ * transliterates when it can do so unambiguously.  Otherwise it waits
+ * for more characters to arrive.  When the client code knows that no
+ * more characters are forthcoming, perhaps because the user has
+ * performed some input termination operation, then it should call
+ * <code>finishTransliteration()</code> to complete any
+ * pending transliterations.
+ *
+ * <p><b>Inverses</b>
+ *
+ * <p>Pairs of transliterators may be inverses of one another.  For
+ * example, if transliterator <b>A</b> transliterates characters by
+ * incrementing their Unicode value (so "abc" -> "def"), and
+ * transliterator <b>B</b> decrements character values, then <b>A</b>
+ * is an inverse of <b>B</b> and vice versa.  If we compose <b>A</b>
+ * with <b>B</b> in a compound transliterator, the result is the
+ * indentity transliterator, that is, a transliterator that does not
+ * change its input text.
+ *
+ * The <code>Transliterator</code> method <code>getInverse()</code>
+ * returns a transliterator's inverse, if one exists, or
+ * <code>null</code> otherwise.  However, the result of
+ * <code>getInverse()</code> usually will <em>not</em> be a true
+ * mathematical inverse.  This is because true inverse transliterators
+ * are difficult to formulate.  For example, consider two
+ * transliterators: <b>AB</b>, which transliterates the character 'A'
+ * to 'B', and <b>BA</b>, which transliterates 'B' to 'A'.  It might
+ * seem that these are exact inverses, since
+ *
+ * <blockquote>"A" x <b>AB</b> -> "B"<br>
+ * "B" x <b>BA</b> -> "A"</blockquote>
+ *
+ * where 'x' represents transliteration.  However,
+ *
+ * <blockquote>"ABCD" x <b>AB</b> -> "BBCD"<br>
+ * "BBCD" x <b>BA</b> -> "AACD"</blockquote>
+ *
+ * so <b>AB</b> composed with <b>BA</b> is not the
+ * identity. Nonetheless, <b>BA</b> may be usefully considered to be
+ * <b>AB</b>'s inverse, and it is on this basis that
+ * <b>AB</b><code>.getInverse()</code> could legitimately return
+ * <b>BA</b>.
+ *
+ * <p><b>IDs and display names</b>
+ *
+ * <p>A transliterator is designated by a short identifier string or
+ * <em>ID</em>.  IDs follow the format <em>source-destination</em>,
+ * where <em>source</em> describes the entity being replaced, and
+ * <em>destination</em> describes the entity replacing
+ * <em>source</em>.  The entities may be the names of scripts,
+ * particular sequences of characters, or whatever else it is that the
+ * transliterator converts to or from.  For example, a transliterator
+ * from Russian to Latin might be named "Russian-Latin".  A
+ * transliterator from keyboard escape sequences to Latin-1 characters
+ * might be named "KeyboardEscape-Latin1".  By convention, system
+ * entity names are in English, with the initial letters of words
+ * capitalized; user entity names may follow any format so long as
+ * they do not contain dashes.
+ *
+ * <p>In addition to programmatic IDs, transliterator objects have
+ * display names for presentation in user interfaces, returned by
+ * {@link #getDisplayName}.
+ *
+ * <p><b>Factory methods and registration</b>
+ *
+ * <p>In general, client code should use the factory method
+ * <code>getInstance()</code> to obtain an instance of a
+ * transliterator given its ID.  Valid IDs may be enumerated using
+ * <code>getAvailableIDs()</code>.  Since transliterators are
+ * stateless, multiple calls to <code>getInstance()</code> with the
+ * same ID will return the same object.
+ *
+ * <p>In addition to the system transliterators registered at startup,
+ * user transliterators may be registered by calling
+ * <code>registerInstance()</code> at run time.  To register a
+ * transliterator subclass without instantiating it (until it is
+ * needed), users may call <code>registerClass()</code>.
+ *
+ * <p><b>Composed transliterators</b>
+ *
+ * <p>In addition to built-in system transliterators like
+ * "Latin-Greek", there are also built-in <em>composed</em>
+ * transliterators.  These are implemented by composing two or more
+ * component transliterators.  For example, if we have scripts "A",
+ * "B", "C", and "D", and we want to transliterate between all pairs
+ * of them, then we need to write 12 transliterators: "A-B", "A-C",
+ * "A-D", "B-A",..., "D-A", "D-B", "D-C".  If it is possible to
+ * convert all scripts to an intermediate script "M", then instead of
+ * writing 12 rule sets, we only need to write 8: "A~M", "B~M", "C~M",
+ * "D~M", "M~A", "M~B", "M~C", "M~D".  (This might not seem like a big
+ * win, but it's really 2<em>n</em> vs. <em>n</em><sup>2</sup> -
+ * <em>n</em>, so as <em>n</em> gets larger the gain becomes
+ * significant.  With 9 scripts, it's 18 vs. 72 rule sets, a big
+ * difference.)  Note the use of "~" rather than "-" for the script
+ * separator here; this indicates that the given transliterator is
+ * intended to be composed with others, rather than be used as is.
+ *
+ * <p>Composed transliterators can be instantiated as usual.  For
+ * example, the system transliterator "Devanagari-Gujarati" is a
+ * composed transliterator built internally as
+ * "Devanagari~InterIndic;InterIndic~Gujarati".  When this
+ * transliterator is instantiated, it appears externally to be a
+ * standard transliterator (e.g., getID() returns
+ * "Devanagari-Gujarati").
+ *
+ * <p><b>Subclassing</b>
+ *
+ * <p>Subclasses must implement the abstract method
+ * <code>handleTransliterate()</code>.  <p>Subclasses should override
+ * the <code>transliterate()</code> method taking a
+ * <code>Replaceable</code> and the <code>transliterate()</code>
+ * method taking a <code>String</code> and <code>StringBuffer</code>
+ * if the performance of these methods can be improved over the
+ * performance obtained by the default implementations in this class.
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: Transliterator.java,v $ $Revision: 1.27 $ $Date: 2001/03/30 22:50:08 $
+ */
+public abstract class Transliterator {
+    /**
+     * Direction constant indicating the forward direction in a transliterator,
+     * e.g., the forward rules of a RuleBasedTransliterator.  An "A-B"
+     * transliterator transliterates A to B when operating in the forward
+     * direction, and B to A when operating in the reverse direction.
+     * @see RuleBasedTransliterator
+     * @see CompoundTransliterator
+     */
+    public static final int FORWARD = 0;
+
+    /**
+     * Direction constant indicating the reverse direction in a transliterator,
+     * e.g., the reverse rules of a RuleBasedTransliterator.  An "A-B"
+     * transliterator transliterates A to B when operating in the forward
+     * direction, and B to A when operating in the reverse direction.
+     * @see RuleBasedTransliterator
+     * @see CompoundTransliterator
+     */
+    public static final int REVERSE = 1;    
+
+    /**
+     * Position structure for incremental transliteration.  This data
+     * structure defines two substrings of the text being
+     * transliterated.  The first region, [contextStart,
+     * contextLimit), defines what characters the transliterator will
+     * read as context.  The second region, [start, limit), defines
+     * what characters will actually be transliterated.  The second
+     * region should be a subset of the first.
+     *
+     * <p>After a transliteration operation, some of the indices in this
+     * structure will be modified.  See the field descriptions for
+     * details.
+     *
+     * <p>contextStart <= start <= limit <= contextLimit
+     */
+    public static class Position {
+
+        /**
+         * Beginning index, inclusive, of the context to be considered for
+         * a transliteration operation.  The transliterator will ignore
+         * anything before this index.  INPUT/OUTPUT parameter: This parameter
+         * is updated by a transliteration operation to reflect the maximum
+         * amount of antecontext needed by a transliterator.
+         */
+        public int contextStart;
+
+        /**
+         * Ending index, exclusive, of the context to be considered for a
+         * transliteration operation.  The transliterator will ignore
+         * anything at or after this index.  INPUT/OUTPUT parameter: This
+         * parameter is updated to reflect changes in the length of the
+         * text, but points to the same logical position in the text.
+         */
+        public int contextLimit;
+
+        /**
+         * Beginning index, inclusive, of the text to be transliteratd.
+         * INPUT/OUTPUT parameter: This parameter is advanced past
+         * characters that have already been transliterated by a
+         * transliteration operation.
+         */
+        public int start;
+
+        /**
+         * Ending index, exclusive, of the text to be transliteratd.
+         * INPUT/OUTPUT parameter: This parameter is updated to reflect
+         * changes in the length of the text, but points to the same
+         * logical position in the text.
+         */
+        public int limit;
+
+        public Position() {
+            this(0, 0, 0, 0);
+        }
+
+        public Position(int contextStart, int contextLimit, int start) {
+            this(contextStart, contextLimit, start, contextLimit);
+        }
+
+        public Position(int contextStart, int contextLimit,
+                        int start, int limit) {
+            this.contextStart = contextStart;
+            this.contextLimit = contextLimit;
+            this.start = start;
+            this.limit = limit;
+        }
+    }
+
+    /**
+     * Programmatic name, e.g., "Latin-Arabic".
+     */
+    private String ID;
+
+    /** 
+     * This transliterator's filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     */
+    private UnicodeFilter filter;
+
+    private int maximumContextLength = 0;
+
+    /**
+     * Cache of system transliterators.  Keys are <code>String</code>
+     * names, values are one of the following:
+     *
+     * <ul><li><code>String</code> objects.  These represent
+     * RuleBasedTransliterators that have not been loaded yet, or
+     * aliases.  The first character determines the type: 'f'
+     * indicates a FORWARD RBT, with the rest of the string giving the
+     * resource name and encoding, separated by a colon.  'r' is
+     * similar, but indicates a REVERSE RBT.  'a' indicates an alias,
+     * with the rest of the string giving the ID to create.
+     *
+     * <li><code>Class</code> objects.  Such objects must represent
+     * subclasses of <code>Transliterator</code>, and must satisfy the
+     * constraints described in <code>registerClass()</code>.
+     *
+     * <li><code>RuleBasedTransliterator.Data</code> objects.  These
+     * are built in-memory transliterator data cores that are wrapped
+     * thinly to create RuleBasedTransliterator objects.  When an RBT
+     * is created, its Data core is cached and shared among future
+     * instances of the same ID.
+     * </ul>
+     */
+    private static Hashtable cache;
+
+    /**
+     * Identical to 'cache' but contains internal transliterators.
+     * These are not enumerated by getAvailableIDs().
+     */
+    private static Hashtable internalCache;
+
+    private static Hashtable displayNameCache;
+
+    /**
+     * Prefix for resource bundle key for the display name for a
+     * transliterator.  The ID is appended to this to form the key.
+     * The resource bundle value should be a String.
+     */
+    private static final String RB_DISPLAY_NAME_PREFIX = "%Translit%%";
+
+    /**
+     * Prefix for resource bundle key for the display name for a
+     * transliterator SCRIPT.  The ID is appended to this to form the key.
+     * The resource bundle value should be a String.
+     */
+    private static final String RB_SCRIPT_DISPLAY_NAME_PREFIX = "%Translit%";
+
+    /**
+     * Resource bundle key for display name pattern.
+     * The resource bundle value should be a String forming a
+     * MessageFormat pattern, e.g.:
+     * "{0,choice,0#|1#{1} Transliterator|2#{1} to {2} Transliterator}".
+     */
+    private static final String RB_DISPLAY_NAME_PATTERN = "TransliteratorNamePattern";
+
+    /**
+     * Resource bundle containing display name keys and the
+     * RB_RULE_BASED_IDS array.
+     *
+     * <p>If we ever integrate this with the Sun JDK, the resource bundle
+     * root will change to java.text.resources.LocaleElements
+     */
+    private static final String RB_LOCALE_ELEMENTS =
+        "com.ibm.text.resources.LocaleElements";
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Default constructor.
+     * @param ID the string identifier for this transliterator
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     */
+    protected Transliterator(String ID, UnicodeFilter filter) {
+        if (ID == null) {
+            throw new NullPointerException();
+        }
+        this.ID = ID;
+        this.filter = filter;
+    }
+
+    /**
+     * Transliterates a segment of a string, with optional filtering.
+     *
+     * @param text the string to be transliterated
+     * @param start the beginning index, inclusive; <code>0 <= start
+     * <= limit</code>.
+     * @param limit the ending index, exclusive; <code>start <= limit
+     * <= text.length()</code>.
+     * @param filter the filter.  Any character for which
+     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
+     * altered by this transliterator.  If <tt>filter</tt> is
+     * <tt>null</tt> then no filtering is applied.
+     * @return The new limit index.  The text previously occupying <code>[start,
+     * limit)</code> has been transliterated, possibly to a string of a different
+     * length, at <code>[start, </code><em>new-limit</em><code>)</code>, where
+     * <em>new-limit</em> is the return value.
+     */
+    public final int transliterate(Replaceable text, int start, int limit) {
+        Position pos = new Position(start, limit, start);
+        handleTransliterate(text, pos, false);
+        return pos.contextLimit;
+    }
+
+    /**
+     * Transliterates an entire string in place. Convenience method.
+     * @param text the string to be transliterated
+     */
+    public final void transliterate(Replaceable text) {
+        transliterate(text, 0, text.length());
+    }
+
+    /**
+     * Transliterate an entire string and returns the result. Convenience method.
+     *
+     * @param text the string to be transliterated
+     * @return The transliterated text
+     */
+    public final String transliterate(String text) {
+        ReplaceableString result = new ReplaceableString(text);
+        transliterate(result);
+        return result.toString();
+    }
+
+    /**
+     * Transliterates the portion of the text buffer that can be
+     * transliterated unambiguosly after new text has been inserted,
+     * typically as a result of a keyboard event.  The new text in
+     * <code>insertion</code> will be inserted into <code>text</code>
+     * at <code>index.contextLimit</code>, advancing
+     * <code>index.contextLimit</code> by <code>insertion.length()</code>.
+     * Then the transliterator will try to transliterate characters of
+     * <code>text</code> between <code>index.start</code> and
+     * <code>index.contextLimit</code>.  Characters before
+     * <code>index.start</code> will not be changed.
+     *
+     * <p>Upon return, values in <code>index</code> will be updated.
+     * <code>index.contextStart</code> will be advanced to the first
+     * character that future calls to this method will read.
+     * <code>index.start</code> and <code>index.contextLimit</code> will
+     * be adjusted to delimit the range of text that future calls to
+     * this method may change.
+     *
+     * <p>Typical usage of this method begins with an initial call
+     * with <code>index.contextStart</code> and <code>index.contextLimit</code>
+     * set to indicate the portion of <code>text</code> to be
+     * transliterated, and <code>index.start == index.contextStart</code>.
+     * Thereafter, <code>index</code> can be used without
+     * modification in future calls, provided that all changes to
+     * <code>text</code> are made via this method.
+     *
+     * <p>This method assumes that future calls may be made that will
+     * insert new text into the buffer.  As a result, it only performs
+     * unambiguous transliterations.  After the last call to this
+     * method, there may be untransliterated text that is waiting for
+     * more input to resolve an ambiguity.  In order to perform these
+     * pending transliterations, clients should call {@link
+     * #finishTransliteration} after the last call to this
+     * method has been made.
+     * 
+     * @param text the buffer holding transliterated and untransliterated text
+     * @param index the start and limit of the text, the position
+     * of the cursor, and the start and limit of transliteration.
+     * @param insertion text to be inserted and possibly
+     * transliterated into the translation buffer at
+     * <code>index.contextLimit</code>.  If <code>null</code> then no text
+     * is inserted.
+     * @see #handleTransliterate
+     * @exception IllegalArgumentException if <code>index</code>
+     * is invalid
+     */
+    public final void transliterate(Replaceable text, Position index,
+                                    String insertion) {
+        if (index.contextStart < 0 ||
+            index.contextLimit > text.length() ||
+            index.start < index.contextStart ||
+            index.start > index.contextLimit) {
+            throw new IllegalArgumentException("Invalid index");
+        }
+
+        int originalStart = index.contextStart;
+        if (insertion != null) {
+            text.replace(index.limit, index.limit, insertion);
+            index.limit += insertion.length();
+            index.contextLimit += insertion.length();
+        }
+
+        handleTransliterate(text, index, true);
+
+        index.contextStart = Math.max(index.start - getMaximumContextLength(),
+                                      originalStart);
+    }
+
+    /**
+     * Transliterates the portion of the text buffer that can be
+     * transliterated unambiguosly after a new character has been
+     * inserted, typically as a result of a keyboard event.  This is a
+     * convenience method; see {@link #transliterate(Replaceable,
+     * Transliterator.Position, String)} for details.
+     * @param text the buffer holding transliterated and
+     * untransliterated text
+     * @param index the start and limit of the text, the position
+     * of the cursor, and the start and limit of transliteration.
+     * @param insertion text to be inserted and possibly
+     * transliterated into the translation buffer at
+     * <code>index.contextLimit</code>.
+     * @see #transliterate(Replaceable, Transliterator.Position, String)
+     */
+    public final void transliterate(Replaceable text, Position index,
+                                    char insertion) {
+        transliterate(text, index, String.valueOf(insertion));
+    }
+
+    /**
+     * Transliterates the portion of the text buffer that can be
+     * transliterated unambiguosly.  This is a convenience method; see
+     * {@link #transliterate(Replaceable, Transliterator.Position,
+     * String)} for details.
+     * @param text the buffer holding transliterated and
+     * untransliterated text
+     * @param index the start and limit of the text, the position
+     * of the cursor, and the start and limit of transliteration.
+     * @see #transliterate(Replaceable, Transliterator.Position, String)
+     */
+    public final void transliterate(Replaceable text, Position index) {
+        transliterate(text, index, null);
+    }
+
+    /**
+     * Finishes any pending transliterations that were waiting for
+     * more characters.  Clients should call this method as the last
+     * call after a sequence of one or more calls to
+     * <code>transliterate()</code>.
+     * @param text the buffer holding transliterated and
+     * untransliterated text.
+     * @param index the array of indices previously passed to {@link
+     * #transliterate}
+     */
+    public final void finishTransliteration(Replaceable text,
+                                            Position index) {
+        handleTransliterate(text, index, false);
+    }
+
+    /**
+     * Abstract method that concrete subclasses define to implement
+     * keyboard transliteration.  This method should transliterate all
+     * characters between <code>index.start</code> and
+     * <code>index.contextLimit</code> that can be unambiguously
+     * transliterated, regardless of future insertions of text at
+     * <code>index.contextLimit</code>.  <code>index.start</code> should
+     * be advanced past committed characters (those that will not
+     * change in future calls to this method).
+     * <code>index.contextLimit</code> should be updated to reflect text
+     * replacements that shorten or lengthen the text between
+     * <code>index.start</code> and <code>index.contextLimit</code>.  Upon
+     * return, neither <code>index.start</code> nor
+     * <code>index.contextLimit</code> should be less than the initial value
+     * of <code>index.start</code>.  <code>index.contextStart</code>
+     * should <em>not</em> be changed.
+     *
+     * @param text the buffer holding transliterated and
+     * untransliterated text
+     * @param pos the start and limit of the text, the position
+     * of the cursor, and the start and limit of transliteration.
+     * @param incremental if true, assume more text may be coming after
+     * pos.contextLimit.  Otherwise, assume the text is complete.
+     * @see #transliterate
+     */
+    protected abstract void handleTransliterate(Replaceable text,
+                                                Position pos, boolean incremental);
+
+    /**
+     * Returns the length of the longest context required by this transliterator.
+     * This is <em>preceding</em> context.  The default value is zero, but
+     * subclasses can change this by calling <code>setMaximumContextLength()</code>.
+     * For example, if a transliterator translates "ddd" (where
+     * d is any digit) to "555" when preceded by "(ddd)", then the preceding
+     * context length is 5, the length of "(ddd)".
+     *
+     * @return The maximum number of preceding context characters this
+     * transliterator needs to examine
+     */
+    protected final int getMaximumContextLength() {
+        return maximumContextLength;
+    }
+
+    /**
+     * Method for subclasses to use to set the maximum context length.
+     * @see #getMaximumContextLength
+     */
+    protected void setMaximumContextLength(int a) {
+        if (a < 0) {
+            throw new IllegalArgumentException("Invalid context length " + a);
+        }
+        maximumContextLength = a;
+    }
+
+    /**
+     * Returns a programmatic identifier for this transliterator.
+     * If this identifier is passed to <code>getInstance()</code>, it
+     * will return this object, if it has been registered.
+     * @see #registerClass
+     * @see #getAvailableIDs
+     */
+    public final String getID() {
+        return ID;
+    }
+
+    /**
+     * Returns a name for this transliterator that is appropriate for
+     * display to the user in the default locale.  See {@link
+     * #getDisplayName(String,Locale)} for details.
+     */
+    public final static String getDisplayName(String ID) {
+        return getDisplayName(ID, Locale.getDefault());
+    }
+
+    /**
+     * Returns a name for this transliterator that is appropriate for
+     * display to the user in the given locale.  This name is taken
+     * from the locale resource data in the standard manner of the
+     * <code>java.text</code> package.
+     *
+     * <p>If no localized names exist in the system resource bundles,
+     * a name is synthesized using a localized
+     * <code>MessageFormat</code> pattern from the resource data.  The
+     * arguments to this pattern are an integer followed by one or two
+     * strings.  The integer is the number of strings, either 1 or 2.
+     * The strings are formed by splitting the ID for this
+     * transliterator at the first '-'.  If there is no '-', then the
+     * entire ID forms the only string.
+     * @param inLocale the Locale in which the display name should be
+     * localized.
+     * @see java.text.MessageFormat
+     */
+    public static String getDisplayName(String ID, Locale inLocale) {
+        ResourceBundle bundle = ResourceBundle.getBundle(
+            RB_LOCALE_ELEMENTS, inLocale);
+
+        // Use the registered display name, if any
+        String n = (String) displayNameCache.get(ID);
+        if (n != null) {
+            return n;
+        }
+
+        // Use display name for the entire transliterator, if it
+        // exists.
+        try {
+            return bundle.getString(RB_DISPLAY_NAME_PREFIX + ID);
+        } catch (MissingResourceException e) {}
+
+        try {
+            // Construct the formatter first; if getString() fails
+            // we'll exit the try block
+            MessageFormat format = new MessageFormat(
+                    bundle.getString(RB_DISPLAY_NAME_PATTERN));
+            // Construct the argument array
+            int i = ID.indexOf('-');
+            Object[] args = (i < 0)
+                ? new Object[] { new Integer(1), ID }
+                : new Object[] { new Integer(2), ID.substring(0, i),
+                                 ID.substring(i+1) };
+
+            // Use display names for the scripts, if they exist
+            for (int j=1; j<=((i<0)?1:2); ++j) {
+                try {
+                    args[j] = bundle.getString(RB_SCRIPT_DISPLAY_NAME_PREFIX +
+                                               (String) args[j]);
+                } catch (MissingResourceException e) {}
+            }
+
+            // Format it using the pattern in the resource
+            return format.format(args);
+        } catch (MissingResourceException e2) {}
+
+        // We should not reach this point unless there is something
+        // wrong with the build or the RB_DISPLAY_NAME_PATTERN has
+        // been deleted from the root RB_LOCALE_ELEMENTS resource.
+        throw new RuntimeException();
+    }
+
+    /**
+     * Returns the filter used by this transliterator, or <tt>null</tt>
+     * if this transliterator uses no filter.
+     */
+    public UnicodeFilter getFilter() {
+        return filter;
+    }
+
+    /**
+     * Changes the filter used by this transliterator.  If the filter
+     * is set to <tt>null</tt> then no filtering will occur.
+     *
+     * <p>Callers must take care if a transliterator is in use by
+     * multiple threads.  The filter should not be changed by one
+     * thread while another thread may be transliterating.
+     */
+    public void setFilter(UnicodeFilter filter) {
+        this.filter = filter;
+    }
+
+    /**
+     * Returns a <code>Transliterator</code> object given its ID.
+     * The ID must be either a system transliterator ID or a ID registered
+     * using <code>registerClass()</code>.
+     *
+     * @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
+     * @return A <code>Transliterator</code> object with the given ID
+     * @exception IllegalArgumentException if the given ID is invalid.
+     * @see #registerClass
+     * @see #getAvailableIDs
+     * @see #getID
+     */
+    public static Transliterator getInstance(String ID, int direction) {
+        if (ID.indexOf(';') >= 0) {
+            return new CompoundTransliterator(ID, direction, null);
+        }
+
+        for (;;) {
+            UnicodeFilter filter = null;
+            int i = ID.indexOf('[');
+            if (i >= 0) {
+                ParsePosition pos = new ParsePosition(i);
+                filter = new UnicodeSet(ID, pos, null);
+                if (pos.getIndex() != ID.length()) {
+                    break; // unparsed junk after ']'
+                }
+                ID = ID.substring(0, i);
+            }
+
+            if (direction == REVERSE) {
+                i = ID.indexOf('-');
+                if (i < 0) {
+                    throw new IllegalArgumentException("No inverse for: "
+                                                       + ID);
+                }
+                ID = ID.substring(i+1) + '-' + ID.substring(0, i);
+            }
+
+            Transliterator t = internalGetInstance(ID);
+            if (t != null) {
+                if (filter != null) {
+                    t.setFilter(filter);
+                }
+                return t;
+            }
+        
+            break;
+        }
+        throw new IllegalArgumentException("Unsupported transliterator: "
+                                           + ID);
+    }
+
+    public static final Transliterator getInstance(String ID) {
+        return getInstance(ID, FORWARD);
+    }
+
+    /**
+     * Returns this transliterator's inverse.  See the class
+     * documentation for details.  This implementation simply inverts
+     * the two entities in the ID and attempts to retrieve the
+     * resulting transliterator.  That is, if <code>getID()</code>
+     * returns "A-B", then this method will return the result of
+     * <code>getInstance("B-A")</code>, or <code>null</code> if that
+     * call fails.
+     *
+     * <p>This method does not take filtering into account.  The
+     * returned transliterator will have no filter.
+     *
+     * <p>Subclasses with knowledge of their inverse may wish to
+     * override this method.
+     *
+     * @return a transliterator that is an inverse, not necessarily
+     * exact, of this transliterator, or <code>null</code> if no such
+     * transliterator is registered.
+     * @see #registerClass
+     */
+    public final Transliterator getInverse() {
+        return getInstance(ID, REVERSE);
+    }
+    
+    /**
+     * Returns a transliterator object given its ID.  Unlike getInstance(),
+     * this method returns null if it cannot make use of the given ID.
+     */
+    private static Transliterator internalGetInstance(String ID) {
+        RuleBasedTransliterator.Data data = null;
+        Hashtable sourceCache = cache;
+        Object obj = cache.get(ID);
+        if (obj == null) {
+            obj = internalCache.get(ID);
+            sourceCache = internalCache;
+        }
+        
+        if (obj != null) {
+            if (obj instanceof RuleBasedTransliterator.Data) {
+                data = (RuleBasedTransliterator.Data) obj;
+                // Fall through to construct transliterator from cached Data object.
+            } else if (obj instanceof Class) {
+                try {
+                    return (Transliterator) ((Class) obj).newInstance();
+                } catch (InstantiationException e) {
+                } catch (IllegalAccessException e2) {}
+            } else if (obj instanceof String) {
+                String spec = (String) obj;
+                if (spec.charAt(0) == 'a') {
+                    // alias
+                    Transliterator t = getInstance(spec.substring(1));
+                    t.ID = ID;
+                    return t;
+                } else {
+                    synchronized (cache) {
+                        // file, either forward or reverse
+                        int dir = (spec.charAt(0) == 'f') ? FORWARD:REVERSE;
+                        int colon = spec.indexOf(':', 1);
+                        String resourceName = spec.substring(1, colon);
+                        String encoding = spec.substring(colon+1);
+                        ResourceReader r = null;
+                        try {
+                            r = new ResourceReader(resourceName, encoding);
+                        } catch (UnsupportedEncodingException e) {
+                            // This should never happen; UTF8 is always supported
+                        } catch (IllegalArgumentException e2) {
+                            // Can't load UTF8 file
+                        }
+                        
+                        if (r != null) {
+                            data = RuleBasedTransliterator.parse(r, dir);
+                            sourceCache.put(ID, data);
+                            // Fall through to construct transliterator from Data object.
+                        }
+                    }
+                }
+            } else {
+                throw new RuntimeException("Bogus cache object");
+            }
+
+            if (data != null) {
+                return new RuleBasedTransliterator(ID, data, null);
+            }
+        }
+
+        return null;
+    }
+
+// Currently unused, but may be of use in the future.
+//    /**
+//     * Find a path through the composed transliterator graph.  This
+//     * will not necessarily be the only path, or the shortest path.
+//     * This is a simple recursive algorithm.
+//     * 
+//     * <p><code>composedGraph</code> is the links table.
+//     * composedGraph.get(x) should return a String[] array, each of
+//     * which is a node that x is connected to.
+//     * @param start the starting node
+//     * @param end the ending node
+//     * @param path the result vector; should be empty on entry.  Upon
+//     * success, it will contain successive nodes on the path from
+//     * start to end, including start and end.  If false is returned,
+//     * then path is unchanged.
+//     * @return true if a path from start to end is found
+//     */
+//    private static boolean findComposedPath(String start, String end,
+//                                            Vector path) {
+//        path.addElement(start);
+//        // composedGraph lists all links emanating from a node
+//        String[] links = (String[]) composedGraph.get(start);
+//        if (links != null) {
+//            for (int i=0; i<links.length; ++i) {
+//                if (links[i].equals(end)) {
+//                    path.addElement(end);
+//                    return true;
+//                }
+//            }
+//            for (int i=0; i<links.length; ++i) {
+//                // Avoid cycles: ignore links already on our path
+//                if (path.indexOf(links[i]) >= 0) {
+//                    continue;
+//                }
+//                if (findComposedPath(links[i], end, path)) {
+//                    return true;
+//                }
+//            }
+//        }
+//        path.removeElementAt(path.size() - 1);    
+//        return false;
+//    }
+
+    /**
+     * Registers a subclass of <code>Transliterator</code> with the
+     * system.  This subclass must have a public constructor taking no
+     * arguments.  When that constructor is called, the resulting
+     * object must return the <code>ID</code> passed to this method if
+     * its <code>getID()</code> method is called.
+     *
+     * @param ID the result of <code>getID()</code> for this
+     * transliterator
+     * @param transClass a subclass of <code>Transliterator</code>
+     * @see #unregister
+     */
+    public static void registerClass(String ID, Class transClass, String displayName) {
+        cache.put(ID, transClass);
+        if (displayName != null) {
+            displayNameCache.put(ID, displayName);
+        }
+    }
+
+    /**
+     * Unregisters a transliterator or class.  This may be either
+     * a system transliterator or a user transliterator or class.
+     * 
+     * @param ID the ID of the transliterator or class
+     * @return the <code>Object</code> that was registered with
+     * <code>ID</code>, or <code>null</code> if none was
+     * @see #registerClass
+     */
+    public static Object unregister(String ID) {
+        displayNameCache.remove(ID);
+        return cache.remove(ID);
+    }
+
+    /**
+     * Returns an enumeration over the programmatic names of registered
+     * <code>Transliterator</code> objects.  This includes both system
+     * transliterators and user transliterators registered using
+     * <code>registerClass()</code>.  The enumerated names may be
+     * passed to <code>getInstance()</code>.
+     *
+     * @return An <code>Enumeration</code> over <code>String</code> objects
+     * @see #getInstance
+     * @see #registerClass
+     */
+    public static final Enumeration getAvailableIDs() {
+        return cache.keys();
+    }
+
+    /**
+     * Method for subclasses to use to obtain a character in the given
+     * string, with filtering.  If the character at the given offset
+     * is excluded by this transliterator's filter, then U+FFFE is returned.
+     */
+    protected char filteredCharAt(Replaceable text, int i) {
+        char c;
+        UnicodeFilter filter = getFilter();
+        return (filter == null) ? text.charAt(i) :
+            (filter.contains(c = text.charAt(i)) ? c : '\uFFFE');
+    }
+
+    static {
+        // The display name cache starts out empty
+        displayNameCache = new Hashtable();
+
+        // Read the index file and construct the cache/internalCache.
+        // Each line of the index file is either blank, a '#' comment,
+        // or a colon-delimited line.  In the latter case the first
+        // field is the ID being defined.  The second field is one of
+        // three strings: "file", "internal", or "alias".  Remaining
+        // fields vary according the value fo the second field.  See
+        // the index file itself for further documentation.
+        cache = new Hashtable();
+        internalCache = new Hashtable();
+        ResourceReader r = new ResourceReader("Transliterator_index.txt");
+        for (;;) {
+            String line = null;
+            try {
+                line = r.readLine();
+            } catch (java.io.IOException e) {}
+            if (line == null) {
+                break;
+            }
+            // Skip over whitespace
+            int pos = 0;
+            while (pos < line.length() &&
+                   Character.isWhitespace(line.charAt(pos))) {
+                ++pos;
+            }
+            // Ignore blank lines and comments
+            if (pos == line.length() || line.charAt(pos) == '#') {
+                continue;
+            }
+            // Parse colon-delimited line
+            int colon = line.indexOf(':', pos);
+            String ID = line.substring(pos, colon);
+            pos = colon+1;
+            colon = line.indexOf(':', pos);
+            String type = line.substring(pos, colon);
+            pos = colon+1;
+
+            if (type.equals("file") || type.equals("internal")) {
+                // Rest of line is <resource>:<encoding>:<direction>
+                colon = line.indexOf(':', pos);
+                colon = line.indexOf(':', colon+1); // skip over 1 colon
+                String fileNameAndEncoding = line.substring(pos, colon);
+                pos = colon+1;
+                boolean isForward = line.substring(pos).equals("FORWARD");
+                Hashtable h = type.equals("internal") ? internalCache:cache;
+                h.put(ID, (isForward ? "f" : "r") + fileNameAndEncoding);
+            } else if (type.equals("alias")) {
+                // Rest of line is the <getInstanceArg>
+                cache.put(ID, "a" + line.substring(pos));
+            } else {
+                // Unknown type
+                throw new RuntimeException("Can't parse line: " + line);
+            }
+        }
+
+        // Register non-rule-based transliterators
+        registerClass(HangulJamoTransliterator._ID,
+                      HangulJamoTransliterator.class, null);
+        registerClass(JamoHangulTransliterator._ID,
+                      JamoHangulTransliterator.class, null);
+                      
+        registerClass(HexToUnicodeTransliterator._ID,
+                      HexToUnicodeTransliterator.class, null);
+        registerClass(UnicodeToHexTransliterator._ID,
+                      UnicodeToHexTransliterator.class, null);
+        registerClass(NullTransliterator._ID,
+                      NullTransliterator.class, null);
+    }
+}
diff --git a/src/com/ibm/text/UCharacter.java b/src/com/ibm/text/UCharacter.java
new file mode 100755
index 0000000..9746eac
--- /dev/null
+++ b/src/com/ibm/text/UCharacter.java
@@ -0,0 +1,1529 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UCharacter.java,v $ 
+* $Date: 2001/03/26 20:34:36 $ 
+* $Revision: 1.6 $
+*
+*******************************************************************************
+*/
+
+
+package com.ibm.text;
+
+import java.util.Locale;
+
+/**
+* A static class designed to be a generic code point information source that 
+* handles surrogate pairs.<br>
+* Data for code point information originates from Unicode 3.0 data files, 
+* UnicodeData.txt and Mirror.txt, downloadable from the Unicode Consortium site 
+* ftp://ftp.unicode.org/Public/<br>
+* ICU's gennames and genprops programs are used to compact the information from 
+* the above mentioned files before being used by this package. The binary 
+* result files are named unames.dat and uprops.dat. <br>
+* Both are jared with the package for release, hence to use this class please
+* add the jar file name <code>ucharacter.jar</code> to your class path.<br>
+* E.g. In Windows <code>set CLASSPATH=%CLASSPATH%;$JAR_FILE_PATH/ucharacter.jar
+* </code><br>
+* For more information about the data file format, please refer to 
+* <a href=http://oss.software.ibm.com/icu4j/icu4jhtml/com/ibm/text/ReadMe.html>
+* Read Me</a>.<br>
+* Each code point used here in in terms of a 32 bit int. This is so as to 
+* handle supplementary code points which has 21 bit in size.<br>
+* APIs provide up-to-date Unicode implementation of java.lang.Character, <br>
+* hence
+* <ul>
+*   <li> Deprecated APIs are not defined here
+*   <li> UCharacter is not designed to be a char wrapper and does not have APIs 
+*        to which involves management of that single char. e.g. char 
+*        charValue(), int compareTo(java.lang.Character, java.lang.Character) 
+*        etc.
+*	  <li> To handle surrogates, int parameters APIs are provided
+*   <li> Java specific character information is not defined e.g. boolean 
+*        isJavaIdentifierPart(char ch)
+*   <li> Has extra methods to fully utilize up-to-date Unicode data information
+*   <li> Provides methods to gets code points from a UTF-16 char or surrogate 
+*        pairs
+* </ul>
+* <p>
+* Difference between UCharacter and java.lang.Character
+* <ul>
+*   <li> UCharacter supports Unicode 3.0 Data while java.lang.Character 
+*        supports only Unicode 2.0. <br>
+*        Note : UCharacter will support Unicode 3.1 when it officially releases
+*   <li> UCharacter provides the support for supplementary code points.<br>
+*        Hence the code point type used is an int (support for 21 bits) where
+*        else java.lang.Character uses a char (16 bit)
+*   <li> The below control code points had their type is overwritten by ICU to 
+*        the type shown
+*        <ul>
+*          <li> TAB 0x9 : U_SPACE_SEPARATOR
+*          <li> VT 0xb : U_SPACE_SEPARATOR
+*          <li> LF 0xa : U_PARAGRAPH_SEPARATOR
+*          <li> FF 0xc : U_LINE_SEPARATOR
+*          <li> CR 0xd : U_PARAGRAPH_SEPARATOR
+*          <li> FS 0x1c : U_PARAGRAPH_SEPARATOR
+*          <li> GS 0x1d : U_PARAGRAPH_SEPARATOR
+*          <li> RS 0x1e : U_PARAGRAPH_SEPARATOR
+*          <li> US 0x1f : U_SPACE_SEPARATOR
+*          <li> NL 0x85 : U_PARAGRAPH_SEPARATOR
+*        </ul>
+*        Because of these type overwrites, some methods might be affected.
+*   <li> java.lang.Character maps characters 'A' - 'Z' and 'a' - 'z' to the 
+*        numeric values '10' - '35'. UCharacter does not treat the above 
+*        code points as having numeric values
+*   <li> Further detail differences can be determined from the program 
+*        <a href = ../test/text/UCharacterCompare.html>
+*        com.ibm.icu.test.text.UCharacterCompare</a>
+* </ul>
+* </p> 
+* Examples on using this class is located at the test program 
+* <a href = ../test/text/UCharacterCompare.html>
+*        com.ibm.icu.test.text.UCharacterTest</a>
+* @author Syn Wee Quek
+* @since oct 06 2000
+* @see com.ibm.text.UCharacterCategory
+* @see com.ibm.text.UCharacterDirection
+* @see com.ibm.icu.test.text.UCharacterCompare
+* @see com.ibm.icu.test.text.UCharacterTest
+*/
+
+public final class UCharacter
+{ 
+  // public variables ==============================================
+  
+  /** 
+  * The lowest Unicode code point value. Code points are non-ne N_VALUE
+  */
+  public static final int MIN_VALUE = 0;
+
+  /**
+  * The highest Unicode code point value (scalar value) according to the 
+  * Unicode Standard.<br> 
+  * This is a 21-bit value (21 bits, rounded up).<br>
+  * Up-to-date Unicode implementation of java.lang.Character.MIN_VALUE
+  */
+  public static final int MAX_VALUE = 0x10ffff;
+  
+  /**
+  * The minimum value for Supplementary code points
+  */
+  public static final int SUPPLEMENTARY_MIN_VALUE = 0x10000;
+  
+  /**
+  * Unicode value used when translating into Unicode encoding form and there 
+  * is no existing character.
+  */
+	public static final int REPLACEMENT_CHAR = '\uFFFD';
+	
+	// protected variables ===================================
+	
+	/**
+  * Shift and mask value for surrogates
+  */
+	protected static final int LEAD_SURROGATE_SHIFT_ = 10;
+	protected static final int TRAIL_SURROGATE_MASK_ = 0x3FF;
+                          
+  // private variables =====================================
+	
+  /**
+  * Database storing the sets of character property
+  */
+  private static final UCharacterPropertyDB PROPERTY_DB_;
+  /**
+  * Initialization of the UCharacterPropertyDB instance. 
+  * RuntimeException thrown when data is missing or data has been corrupted.
+  */
+  static
+  {
+    try
+    {
+      PROPERTY_DB_ = new UCharacterPropertyDB();
+    }
+    catch (Exception e)
+    {
+      throw new RuntimeException(e.getMessage());
+    }
+  }
+
+  /** 
+  * Offset to add to combined surrogate pair to avoid msking.
+  */
+  private static final int SURROGATE_OFFSET_ = 
+    SUPPLEMENTARY_MIN_VALUE - (0xD800 << LEAD_SURROGATE_SHIFT_) - 0xDC00;
+  
+  /**
+  * Surrogate code point values
+  */
+  private static final int SURROGATE_MIN_VALUE_ = 0xD800;
+  private static final int SURROGATE_MAX_VALUE_ = 0xDFFF;
+  
+  /**
+  * To get the last character out from a data type
+  */
+  private static final int LAST_CHAR_MASK_ = 0xFFFF;
+  
+  /**
+  * To get the last byte out from a data type
+  */
+  private static final int LAST_BYTE_MASK_ = 0xFF;
+  
+  /**
+  * Shift 16 bits
+  */
+  private static final int SHIFT_16_ = 16;
+  
+  /**
+  * Minimum value that indicates if a character is not-a-character
+  */
+  private static final int NOT_A_CHAR_SUFFIX_MIN_ = 0xFFFE;
+  
+  /**
+  * Decimal radix
+  */
+  private static final int DECIMAL_RADIX_ = 10;
+  
+  /**
+  * No break space code point
+  */
+  private static final int NO_BREAK_SPACE_ = 0xA0;
+  
+  /**
+  * Narrow no break space code point
+  */
+  private static final int NARROW_NO_BREAK_SPACE_ = 0x202F;
+  
+  /**
+  * Zero width no break space code point
+  */
+  private static final int ZERO_WIDTH_NO_BREAK_SPACE_ = 0xFEFF;
+  
+  /**
+  * Ideographic number zero code point
+  */
+  private static final int IDEOGRAPHIC_NUMBER_ZERO_ = 0x3007;
+        
+  /**
+  * CJK Ideograph, First code point
+  */
+  private static final int CJK_IDEOGRAPH_FIRST_ = 0x4e00;
+  
+  /**
+  * CJK Ideograph, Second code point
+  */
+  private static final int CJK_IDEOGRAPH_SECOND_ = 0x4e8c;
+        
+  /**
+  * CJK Ideograph, Third code point
+  */
+  private static final int CJK_IDEOGRAPH_THIRD_ = 0x4e09;
+  
+  /**
+  * CJK Ideograph, Fourth code point
+  */
+  private static final int CJK_IDEOGRAPH_FOURTH_ = 0x56d8;
+  
+  /**
+  * CJK Ideograph, FIFTH code point
+  */
+  private static final int CJK_IDEOGRAPH_FIFTH_ = 0x4e94;
+  
+  /**
+  * CJK Ideograph, Sixth code point
+  */
+  private static final int CJK_IDEOGRAPH_SIXTH_ = 0x516d;
+        
+  /**
+  * CJK Ideograph, Seventh code point
+  */
+  private static final int CJK_IDEOGRAPH_SEVENTH_ = 0x4e03;
+  
+  /**
+  * CJK Ideograph, Eighth code point
+  */
+  private static final int CJK_IDEOGRAPH_EIGHTH_ = 0x516b;
+  
+  /**
+  * CJK Ideograph, Nineth code point
+  */
+  private static final int CJK_IDEOGRAPH_NINETH_ = 0x4e5d;
+  
+  /**
+  * Application Program command code point
+  */
+  private static final int APPLICATION_PROGRAM_COMMAND_ = 0x009F;
+  
+  /**
+  * Unit seperator code point
+  */
+  private static final int UNIT_SEPERATOR_ = 0x001F;
+  
+  /**
+  * Delete code point
+  */
+  private static final int DELETE_ = 0x007F;
+  
+  /**
+  * Turkish ISO 639 2 character code
+  */
+  private static final String TURKISH_ = "tr";
+  
+  /**
+  * Azerbaijani ISO 639 2 character code
+  */
+  private static final String AZERBAIJANI_ = "az";
+  
+  /**
+  * Lithuanian ISO 639 2 character code
+  */
+  private static final String LITHUANIAN_ = "lt";
+  
+  /**
+  * Latin owercase i
+  */
+  private static final char LATIN_SMALL_LETTER_I_ = 0x69;
+  
+  /**
+  * Latin uppercase I
+  */
+  private static final char LATIN_CAPITAL_LETTER_I_ = 0x49;
+  
+  /**
+  * Latin capital letter i with dot above
+  */ 
+  private static final char LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_ = 0x130;
+  
+  /**
+  * Latin small letter i with dot above
+  */ 
+  private static final char LATIN_SMALL_LETTER_DOTLESS_I_ = 0x131;
+  
+  /**
+  * Combining dot above
+  */
+  private static final char COMBINING_DOT_ABOVE_ = 0x307;
+  
+  /**
+  * Greek capital letter sigma
+  */
+  private static final char GREEK_CAPITAL_LETTER_SIGMA_ = 0x3a3;
+  
+  /**
+  * Greek small letter sigma
+  */
+  private static final char GREEK_SMALL_LETTER_SIGMA_ = 0x3c3;
+  
+  /**
+  * Greek small letter rho
+  */
+  private static final char GREEK_SMALL_LETTER_RHO_ = 0x3c2;
+  
+  /**
+  * ISO control character first range upper limit 0x0 - 0x1F
+  */
+  private static final int ISO_CONTROL_FIRST_RANGE_MAX_ = 0x1F;
+  
+  // constructor ====================================================
+  
+  /**
+  * Private constructor to prevent instantiation
+  */
+  private UCharacter()
+  {
+  }
+  
+  // public methods ===================================================
+  
+  /**
+  * Retrieves the decimal numeric value of a digit code point.<br>
+  * A code point is a valid digit if the following is true: 
+  * <ul>
+  * <li> The method isDigit(ch) is true and the Unicode decimal digit value of 
+  *      ch is less than the specified radix. 
+  * </ul>
+  * Note this method, unlike java.lang.Character.digit() does not regard the 
+  * ascii characters 'A' - 'Z' and 'a' - 'z' as digits. 
+  * @param ch the code point whose numeric value is to be determined
+  * @param radix the radix which the digit is to be converted to
+  * @return the numeric value of the code point ch in the argument radix,
+  *         this method returns -1 if ch is not a valid digit code point or 
+  *         if its digit value exceeds the radix.
+  */
+  public static int digit(int ch, int radix)
+  {
+    int props = getProps(ch);
+    int result = -1;
+    // if props == 0, it will just fall through and return -1
+    if (!UCharacterPropertyDB.isExceptionIndicator(props)) {
+      // not contained in exception data
+      if (UCharacterPropertyDB.getPropType(props) == 
+          UCharacterCategory.DECIMAL_DIGIT_NUMBER) {
+        result = UCharacterPropertyDB.getSignedValue(props);
+      }
+    }
+    else {
+      // contained in exception data
+      int index = UCharacterPropertyDB.getExceptionIndex(props);
+      if (PROPERTY_DB_.hasExceptionValue(index, 
+                                     UCharacterPropertyDB.EXC_DIGIT_VALUE_)) {
+        result  = PROPERTY_DB_.getException(index, 
+                                      UCharacterPropertyDB.EXC_DIGIT_VALUE_) & 
+                                      LAST_CHAR_MASK_; 
+      }
+      else {
+        if (!PROPERTY_DB_.hasExceptionValue(index, 
+                                  UCharacterPropertyDB.EXC_DENOMINATOR_VALUE_) 
+            && PROPERTY_DB_.hasExceptionValue(index, 
+                                   UCharacterPropertyDB.EXC_NUMERIC_VALUE_)) {
+          result  = PROPERTY_DB_.getException(index, 
+                                     UCharacterPropertyDB.EXC_NUMERIC_VALUE_);
+        }
+      }
+    }
+    
+    if (result < 0) {
+      result = getHanDigit(ch);
+    }
+    
+    if (result < 0 || result >= radix) {
+      return -1;
+    }
+    return result;
+  }
+  
+  /**
+  * Retrieves the decimal numeric value of a digit code point in radix 10<br>
+  * Note this method, unlike java.lang.Character.digit() does not regard the 
+  * ascii characters 'A' - 'Z' and 'a' - 'z' as digits. 
+  * @param ch the code point whose numeric value is to be determined
+  * @return the numeric value of the code point ch, this method returns -1 if 
+  *         ch is not a valid digit code point
+  */
+  public static int digit(int ch)
+  {
+    return digit(ch, DECIMAL_RADIX_);
+  }
+                          
+  /**
+  * Returns the Unicode numeric value of the code point as a nonnegative 
+  * integer. <br>
+  * If the code point does not have a numeric value, then -1 is returned. <br>
+  * If the code point has a numeric value that cannot be represented as a 
+  * nonnegative integer (for example, a fractional value), then -2 is returned.
+  * <br>
+  * Note this method, unlike java.lang.Character.digit() does not regard the 
+  * ascii characters 'A' - 'Z' and 'a' - 'z' as numbers. 
+  * @param ch Unicode code point
+  * @return numeric value of the code point as a nonnegative integer
+  */
+  public static int getNumericValue(int ch)
+  {
+    int props = getProps(ch);
+    int type = UCharacterPropertyDB.getPropType(props);
+    
+    // if props == 0, it will just fall through and return -1
+    if (type != UCharacterCategory.DECIMAL_DIGIT_NUMBER &&
+        type != UCharacterCategory.LETTER_NUMBER &&
+        type != UCharacterCategory.OTHER_NUMBER) {
+      return -1;
+    }
+      
+    int result = -1;
+    if (!UCharacterPropertyDB.isExceptionIndicator(props)) {
+      // not contained in exception data
+      result = UCharacterPropertyDB.getSignedValue(props);
+    }
+    else {
+      // contained in exception data
+      int index = UCharacterPropertyDB.getExceptionIndex(props);
+      if (PROPERTY_DB_.hasExceptionValue(index, 
+                                     UCharacterPropertyDB.EXC_DIGIT_VALUE_)) {
+        result  = PROPERTY_DB_.getException(index, 
+                                        UCharacterPropertyDB.EXC_DIGIT_VALUE_); 
+      }
+      else {
+        if (!PROPERTY_DB_.hasExceptionValue(index, 
+                               UCharacterPropertyDB.EXC_DENOMINATOR_VALUE_)
+            && PROPERTY_DB_.hasExceptionValue(index, 
+                                    UCharacterPropertyDB.EXC_NUMERIC_VALUE_)) {
+          result  = PROPERTY_DB_.getException(index, 
+                                      UCharacterPropertyDB.EXC_NUMERIC_VALUE_); 
+        }
+      }
+    }
+    
+    if (result < 0) {
+      result = getHanDigit(ch);
+    }
+    
+    if (result < 0) {
+      return -2;
+    }
+    return result;
+  }
+  
+  /**
+  * Returns a value indicating a code point's Unicode category.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.getType() except 
+  * for the above mentioned code points that had their category changed.<br>
+  * Return results are constants from the interface 
+  * <a href=UCharacterCategory.html>UCharacterCategory</a>
+  * @param ch code point whose type is to be determined
+  * @return category which is a value of UCharacterCategory
+  */
+  public static int getType(int ch)
+  {
+    return UCharacterPropertyDB.getPropType(getProps(ch));
+  }
+   
+  /**
+  * Determines if a code point has a defined meaning in the up-to-date Unicode
+  * standard.<br>
+  * E.g. supplementary code points though allocated space are not defined in 
+  * Unicode yet.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.isDefined()
+  * @param ch code point to be determined if it is defined in the most current 
+  *        version of Unicode
+  * @return true if this code point is defined in unicode
+  */
+  public static boolean isDefined(int ch)
+  {
+    return getProps(ch) != 0;
+  }
+                                
+  /**
+  * Determines if a code point is a digit.<br>
+  * Note this method, unlike java.lang.Character.isDigit() does not regard the 
+  * ascii characters 'A' - 'Z' and 'a' - 'z' as digits.<br>
+  * @param ch code point to determine if it is a digit
+  * @return true if this code point is a digit
+  */
+  public static boolean isDigit(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.DECIMAL_DIGIT_NUMBER || 
+           cat == UCharacterCategory.OTHER_NUMBER ||
+           cat == UCharacterCategory.LETTER_NUMBER;
+  }
+                                
+  /**
+  * Determines if the specified code point is an ISO control character.<br>
+  * A code point is considered to be an ISO control character if it is in the 
+  * range &#92u0000 through &#92u001F or in the range &#92u007F through 
+  * &#92u009F.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.isISOControl()
+  * @param ch code point to determine if it is an ISO control character
+  * @return true if code point is a ISO control character
+  */
+  public static boolean isISOControl(int ch)
+  {
+    return ch >= 0 && ch <= APPLICATION_PROGRAM_COMMAND_ && 
+           ((ch <= UNIT_SEPERATOR_) || (ch >= DELETE_));
+  }
+                                
+  /**
+  * Determines if the specified code point is a letter.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.isLetter()
+  * @param ch code point to determine if it is a letter
+  * @return true if code point is a letter
+  */
+  public static boolean isLetter(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.UPPERCASE_LETTER || 
+           cat == UCharacterCategory.LOWERCASE_LETTER || 
+           cat == UCharacterCategory.TITLECASE_LETTER || 
+           cat == UCharacterCategory.MODIFIER_LETTER ||
+           cat == UCharacterCategory.OTHER_LETTER;
+  }
+            
+  /**
+  * Determines if the specified code point is a letter or digit.<br>
+  * Note this method, unlike java.lang.Character does not regard the ascii 
+  * characters 'A' - 'Z' and 'a' - 'z' as digits.
+  * @param ch code point to determine if it is a letter or a digit
+  * @return true if code point is a letter or a digit
+  */
+  public static boolean isLetterOrDigit(int ch)
+  {
+    return isDigit(ch) || isLetter(ch);
+  }
+    
+  /**
+  * Determines if the specified code point is a lowercase character.<br>
+  * UnicodeData only contains case mappings for code points where they are 
+  * one-to-one mappings; it also omits information about context-sensitive 
+  * case mappings.<br> For more information about Unicode case mapping please 
+  * refer to the <a href=http://www.unicode.org/unicode/reports/tr21/>
+  * Technical report #21</a>.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.isLowerCase()
+  * @param ch code point to determine if it is in lowercase
+  * @return true if code point is a lowercase character
+  */
+  public static boolean isLowerCase(int ch)
+  {
+    // if props == 0, it will just fall through and return false
+    return getType(ch) == UCharacterCategory.LOWERCASE_LETTER;
+  }
+   
+  /**
+  * Determines if the specified code point is a white space character.<br>
+  * A code point is considered to be an whitespace character if and only
+  * if it satisfies one of the following criteria:
+  * <ul>
+  * <li> It is a Unicode space separator (category "Zs"), but is not
+  *      a no-break space (&#92u00A0 or &#92u202F or &#92uFEFF).
+  * <li> It is a Unicode line separator (category "Zl").
+  * <li> It is a Unicode paragraph separator (category "Zp").
+  * </ul>
+  * Up-to-date Unicode implementation of java.lang.Character.isWhitespace().
+  * @param ch code point to determine if it is a white space
+  * @return true if the specified code point is a white space character
+  */
+  public static boolean isWhitespace(int ch)
+  {
+    int cat = getType(ch);
+    // exclude no-break spaces
+    // if props == 0, it will just fall through and return false
+    return (cat == UCharacterCategory.SPACE_SEPARATOR || 
+            cat == UCharacterCategory.LINE_SEPARATOR ||
+            cat == UCharacterCategory.PARAGRAPH_SEPARATOR) && 
+            (ch != NO_BREAK_SPACE_) && (ch != NARROW_NO_BREAK_SPACE_) && 
+            (ch != ZERO_WIDTH_NO_BREAK_SPACE_);
+  }
+   
+  /**
+  * Determines if the specified code point is a Unicode specified space 
+  * character, ie if code point is in the category Zs, Zl and Zp.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.isSpaceChar().
+  * @param ch code point to determine if it is a space
+  * @return true if the specified code point is a space character
+  */
+  public static boolean isSpaceChar(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.SPACE_SEPARATOR || 
+           cat == UCharacterCategory.LINE_SEPARATOR ||
+           cat == UCharacterCategory.PARAGRAPH_SEPARATOR;
+  }
+                                
+  /**
+  * Determines if the specified code point is a titlecase character.<br>
+  * UnicodeData only contains case mappings for code points where they are 
+  * one-to-one mappings; it also omits information about context-sensitive 
+  * case mappings.<br>
+  * For more information about Unicode case mapping please refer to the 
+  * <a href=http://www.unicode.org/unicode/reports/tr21/>
+  * Technical report #21</a>.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.isTitleCase().
+  * @param ch code point to determine if it is in title case
+  * @return true if the specified code point is a titlecase character
+  */
+  public static boolean isTitleCase(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.TITLECASE_LETTER;
+  }
+   
+  /**
+  * Determines if the specified code point may be any part of a Unicode 
+  * identifier other than the starting character.<br> 
+  * A code point may be part of a Unicode identifier if and only if it is one 
+  * of the following: 
+  * <ul>
+  * <li> Lu Uppercase letter
+  * <li> Ll Lowercase letter
+  * <li> Lt Titlecase letter
+  * <li> Lm Modifier letter
+  * <li> Lo Other letter
+  * <li> Nl Letter number
+  * <li> Pc Connecting punctuation character 
+  * <li> Nd decimal number
+  * <li> Mc Spacing combining mark 
+  * <li> Mn Non-spacing mark 
+  * <li> Cf formatting code
+  * </ul>
+  * Up-to-date Unicode implementation of 
+  * java.lang.Character.isUnicodeIdentifierPart().<br>
+  * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+  * @param ch code point to determine if is can be part of a Unicode identifier
+  * @return true if code point is any character belonging a unicode identifier
+  *         suffix after the first character
+  */
+  public static boolean isUnicodeIdentifierPart(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.UPPERCASE_LETTER || 
+           cat == UCharacterCategory.LOWERCASE_LETTER || 
+           cat == UCharacterCategory.TITLECASE_LETTER || 
+           cat == UCharacterCategory.MODIFIER_LETTER ||
+           cat == UCharacterCategory.OTHER_LETTER || 
+           cat == UCharacterCategory.LETTER_NUMBER ||
+           cat == UCharacterCategory.CONNECTOR_PUNCTUATION ||
+           cat == UCharacterCategory.DECIMAL_DIGIT_NUMBER ||
+           cat == UCharacterCategory.COMBINING_SPACING_MARK || 
+           cat == UCharacterCategory.NON_SPACING_MARK || 
+           cat == UCharacterCategory.FORMAT;
+  }
+                   
+  /**
+  * Determines if the specified code point is permissible as the first 
+  * character in a Unicode identifier.<br> 
+  * A code point may start a Unicode identifier if it is of type either 
+  * <ul> 
+  * <li> Lu Uppercase letter
+  * <li> Ll Lowercase letter
+  * <li> Lt Titlecase letter
+  * <li> Lm Modifier letter
+  * <li> Lo Other letter
+  * <li> Nl Letter number
+  * </ul>
+  * Up-to-date Unicode implementation of 
+  * java.lang.Character.isUnicodeIdentifierStart().<br>
+  * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+  * @param ch code point to determine if it can start a Unicode identifier
+  * @return true if code point is the first character belonging a unicode 
+  *              identifier
+  */
+  public static boolean isUnicodeIdentifierStart(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.UPPERCASE_LETTER || 
+           cat == UCharacterCategory.LOWERCASE_LETTER || 
+           cat == UCharacterCategory.TITLECASE_LETTER || 
+           cat == UCharacterCategory.MODIFIER_LETTER ||
+           cat == UCharacterCategory.OTHER_LETTER || 
+           cat == UCharacterCategory.LETTER_NUMBER;
+  }
+
+  /**
+  * Determines if the specified code point should be regarded as an ignorable
+  * character in a Unicode identifier.<br>
+  * A character is ignorable in the Unicode standard if it is of the type Cf, 
+  * Formatting code.<br>
+  * Up-to-date Unicode implementation of 
+  * java.lang.Character.isIdentifierIgnorable().<br>
+  * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+  * @param ch code point to be determined if it can be ignored in a Unicode 
+  *        identifier.
+  * @return true if the code point is ignorable
+  */
+  public static boolean isIdentifierIgnorable(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.FORMAT;
+  }
+                  
+  /**
+  * Determines if the specified code point is an uppercase character.<br>
+  * UnicodeData only contains case mappings for code point where they are 
+  * one-to-one mappings; it also omits information about context-sensitive 
+  * case mappings.<br> 
+  * For language specific case conversion behavior, use 
+  * toUpperCase(locale, str). <br>
+  * For example, the case conversion for dot-less i and dotted I in Turkish,
+  * or for final sigma in Greek.
+  * For more information about Unicode case mapping please refer to the 
+  * <a href=http://www.unicode.org/unicode/reports/tr21/>
+  * Technical report #21</a>.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.isUpperCase().
+  * @param ch code point to determine if it is in uppercase
+  * @return true if the code point is an uppercase character
+  */
+  public static boolean isUpperCase(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.UPPERCASE_LETTER;
+  }
+                   
+  /**
+  * The given code point is mapped to its lowercase equivalent; if the code 
+  * point has no lowercase equivalent, the code point itself is returned.<br>
+  * UnicodeData only contains case mappings for code point where they are 
+  * one-to-one mappings; it also omits information about context-sensitive 
+  * case mappings.<br> 
+  * For language specific case conversion behavior, use 
+  * toLowerCase(locale, str). <br>
+  * For example, the case conversion for dot-less i and dotted I in Turkish,
+  * or for final sigma in Greek.
+  * For more information about Unicode case mapping please refer to the 
+  * <a href=http://www.unicode.org/unicode/reports/tr21/>
+  * Technical report #21</a>.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.toLowerCase()
+  * @param ch code point whose lowercase equivalent is to be retrieved
+  * @return the lowercase equivalent code point
+  */
+  public static int toLowerCase(int ch)
+  {
+    int props = getProps(ch);
+    // if props == 0, it will just fall through and return itself
+    if(!UCharacterPropertyDB.isExceptionIndicator(props)) {
+      int cat = UCharacterPropertyDB.getPropType(props);
+      if (cat == UCharacterCategory.UPPERCASE_LETTER || 
+          cat == UCharacterCategory.TITLECASE_LETTER) {
+        return ch + UCharacterPropertyDB.getSignedValue(props);
+      }
+    } 
+    else 
+    {
+      int index = UCharacterPropertyDB.getExceptionIndex(props);
+      if (PROPERTY_DB_.hasExceptionValue(index, 
+                                      UCharacterPropertyDB.EXC_LOWERCASE_)) {
+        return PROPERTY_DB_.getException(index, 
+                                      UCharacterPropertyDB.EXC_LOWERCASE_); 
+      }
+    }
+    return ch;
+  }
+
+  /**
+  * Converts argument code point and returns a String object representing the 
+  * code point's value in UTF16 format.<br>
+  * The result is a string whose length is 1 for non-supplementary code points, 
+  * 2 otherwise.<br>
+  * com.ibm.ibm.icu.UTF16 can be used to parse Strings generated by this 
+  * function.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.toString()
+  * @param ch code point
+  * @return string representation of the code point, null if code point is not
+  *         defined in unicode
+  */
+  public static String toString(int ch)
+  {
+    if (ch < MIN_VALUE || ch > MAX_VALUE) {
+      return null;
+    }
+    
+    if (ch < UCharacter.SUPPLEMENTARY_MIN_VALUE) {
+      return String.valueOf((char)ch);
+    }
+    
+    char result[] = new char[2];
+    result[0] = (char)UTF16.getLeadSurrogate(ch);
+    result[1] = (char)UTF16.getTrailSurrogate(ch);
+    return new String(result);
+  }
+                                
+  /**
+  * Converts the code point argument to titlecase.<br>
+  * UnicodeData only contains case mappings for code points where they are 
+  * one-to-one mappings; it also omits information about context-sensitive 
+  * case mappings.<br> 
+  * There are only four Unicode characters that are truly titlecase forms
+  * that are distinct from uppercase forms.
+  * For more information about Unicode case mapping please refer
+  * to the <a href=http://www.unicode.org/unicode/reports/tr21/>
+  * Technical report #21</a>.<br>
+  * If no titlecase is available, the uppercase is returned. If no uppercase 
+  * is available, the code point itself is returned.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.toTitleCase()
+  * @param ch code point  whose title case is to be retrieved
+  * @return titlecase code point
+  */
+  public static int toTitleCase(int ch)
+  {
+    int props = getProps(ch);
+    // if props == 0, it will just fall through and return itself
+    if (!UCharacterPropertyDB.isExceptionIndicator(props)) {
+      if (UCharacterPropertyDB.getPropType(props) == 
+          UCharacterCategory.LOWERCASE_LETTER) {
+        // here, titlecase is same as uppercase
+        return ch - UCharacterPropertyDB.getSignedValue(props);
+      }
+    } 
+    else {
+      int index = UCharacterPropertyDB.getExceptionIndex(props);
+      if (PROPERTY_DB_.hasExceptionValue(index, 
+                                      UCharacterPropertyDB.EXC_TITLECASE_)) {
+        return PROPERTY_DB_.getException(index,
+                                      UCharacterPropertyDB.EXC_TITLECASE_);
+      }
+      else {
+        // here, titlecase is same as uppercase
+        if (PROPERTY_DB_.hasExceptionValue(index, 
+                                       UCharacterPropertyDB.EXC_UPPERCASE_)) {
+          return PROPERTY_DB_.getException(index, 
+                                       UCharacterPropertyDB.EXC_UPPERCASE_); 
+        }
+      }
+    }
+    return ch; // no mapping - return c itself
+  }
+   
+  /**
+  * Converts the character argument to uppercase.<br>
+  * UnicodeData only contains case mappings for characters where they are 
+  * one-to-one mappings; it also omits information about context-sensitive 
+  * case mappings.<br> 
+  * For more information about Unicode case mapping please refer
+  * to the <a href=http://www.unicode.org/unicode/reports/tr21/>
+  * Technical report #21</a>.<br>
+  * If no uppercase is available, the character itself is returned.<br>
+  * Up-to-date Unicode implementation of java.lang.Character.toUpperCase()
+  * @param ch code point whose uppercase is to be retrieved
+  * @return uppercase code point
+  */
+  public static int toUpperCase(int ch)
+  {
+    int props = getProps(ch);
+    // if props == 0, it will just fall through and return itself
+    if (!UCharacterPropertyDB.isExceptionIndicator(props)) {
+      if (UCharacterPropertyDB.getPropType(props) == 
+          UCharacterCategory.LOWERCASE_LETTER) {
+        // here, titlecase is same as uppercase */
+        return ch - UCharacterPropertyDB.getSignedValue(props);
+      }
+    }
+    else 
+    {
+      int index = UCharacterPropertyDB.getExceptionIndex(props);
+      if (PROPERTY_DB_.hasExceptionValue(index, 
+                                      UCharacterPropertyDB.EXC_UPPERCASE_)) {
+        return PROPERTY_DB_.getException(index, 
+                                      UCharacterPropertyDB.EXC_UPPERCASE_); 
+      }
+    }
+    return ch; // no mapping - return c itself
+  }
+   
+  // extra methods not in java.lang.Character ===========================
+   
+  /**
+  * Determines if the code point is a supplementary character.<br>
+  * A code point is a supplementary character if and only if it is greater than
+  * <a href=#SUPPLEMENTARY_MIN_VALUE>SUPPLEMENTARY_MIN_VALUE</a>
+  * @param ch code point to be determined if it is in the supplementary plane
+  * @return true if code point is a supplementary character
+  */
+  public static boolean isSupplementary(int ch)
+  {
+    return ch >= UCharacter.SUPPLEMENTARY_MIN_VALUE && 
+           ch <= UCharacter.MAX_VALUE;
+  }
+  
+  /**
+  * Determines if the code point is in the BMP plane.<br>
+  * @param ch code point to be determined if it is not a supplementary 
+  *        character
+  * @return true if code point is not a supplementary character
+  */
+  public static boolean isBMP(int ch) 
+  {
+    return (ch >= 0 && ch < LAST_CHAR_MASK_);
+  }
+
+  /**
+  * Determines whether the specified code point is a printable character 
+  * according to the Unicode standard.
+  * @param ch code point to be determined if it is printable
+  * @return true if the code point is a printable character
+  */
+  public static boolean isPrintable(int ch)
+  {
+    if (isISOControl(ch)) {
+      return false;
+    }
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return (cat != UCharacterCategory.UNASSIGNED && 
+        cat != UCharacterCategory.CONTROL && 
+        cat != UCharacterCategory.FORMAT &&
+        cat != UCharacterCategory.PRIVATE_USE &&
+        cat != UCharacterCategory.SURROGATE &&
+        cat != UCharacterCategory.GENERAL_OTHER_TYPES);
+  }
+
+  /**
+  * Determines whether the specified code point is of base form.<br>
+  * A code point of base form does not graphically combine with preceding 
+  * characters, and is neither a control nor a format character.
+  * @param ch code point to be determined if it is of base form
+  * @return true if the code point is of base form
+  */
+  public static boolean isBaseForm(int ch)
+  {
+    int cat = getType(ch);
+    // if props == 0, it will just fall through and return false
+    return cat == UCharacterCategory.DECIMAL_DIGIT_NUMBER || 
+           cat == UCharacterCategory.OTHER_NUMBER || 
+           cat == UCharacterCategory.LETTER_NUMBER || 
+           cat == UCharacterCategory.UPPERCASE_LETTER || 
+           cat == UCharacterCategory.LOWERCASE_LETTER || 
+           cat == UCharacterCategory.TITLECASE_LETTER ||
+           cat == UCharacterCategory.MODIFIER_LETTER || 
+           cat == UCharacterCategory.OTHER_LETTER || 
+           cat == UCharacterCategory.NON_SPACING_MARK || 
+           cat == UCharacterCategory.ENCLOSING_MARK ||
+           cat == UCharacterCategory.COMBINING_SPACING_MARK;
+  }
+
+  /**
+  * Returns the Bidirection property of a code point.<br>
+  * For example, 0x0041 (letter A) has the LEFT_TO_RIGHT directional 
+  * property.<br>
+  * Result returned belongs to the interface 
+  * <a href=UCharacterDirection.html>UCharacterDirection</a>
+  * @param ch the code point to be determined its direction
+  * @return direction constant from UCharacterDirection. Otherwise is 
+  *         character is not defined, UCharacterDirection.BOUNDARY_NEUTRAL
+  *         will be returned.
+  */
+  public static int getDirection(int ch)
+  {
+    int props = getProps(ch);
+    if (props != 0) {
+      return UCharacterPropertyDB.getDirection(props);
+    }
+    return UCharacterDirection.LEFT_TO_RIGHT;
+  }
+
+  /**
+  * Determines whether the code point has the "mirrored" property.<br>
+  * This property is set for characters that are commonly used in
+  * Right-To-Left contexts and need to be displayed with a "mirrored"
+  * glyph.
+  * @param ch code point whose mirror is to be determined
+  * @return true if the code point has the "mirrored" property
+  */
+  public static boolean isMirrored(int ch)
+  {
+    int props = getProps(ch);
+    // if props == 0, it will just fall through and return false
+    return UCharacterPropertyDB.isMirrored(props);
+  }
+
+  /**
+  * Maps the specified code point to a "mirror-image" code point.<br>
+  * For code points with the "mirrored" property, implementations sometimes 
+  * need a "poor man's" mapping to another code point such that the default 
+  * glyph may serve as the mirror-image of the default glyph of the specified
+  * code point.<br> 
+  * This is useful for text conversion to and from codepages with visual 
+  * order, and for displays without glyph selection capabilities.
+  * @param ch code point whose mirror is to be retrieved
+  * @return another code point that may serve as a mirror-image substitute, or 
+  *         ch itself if there is no such mapping or ch does not have the 
+  *         "mirrored" property
+  */
+  public static int getMirror(int ch)
+  {
+    int props = getProps(ch);
+    // mirrored - the value is a mirror offset
+    // if props == 0, it will just fall through and return false
+    if (UCharacterPropertyDB.isMirrored(props)) {
+      if(!UCharacterPropertyDB.isExceptionIndicator(props)) {
+        return ch + UCharacterPropertyDB.getSignedValue(props);
+      }
+      else 
+      {
+        int index = UCharacterPropertyDB.getExceptionIndex(props);
+        if (PROPERTY_DB_.hasExceptionValue(index, 
+                                     UCharacterPropertyDB.EXC_MIRROR_MAPPING_)) 
+          return PROPERTY_DB_.getException(index, 
+                                     UCharacterPropertyDB.EXC_MIRROR_MAPPING_);   
+      }
+    }
+    return ch;
+  }
+  
+  /**
+  * Gets the combining class of the argument codepoint
+  * @param ch code point whose combining is to be retrieved
+  * @return the combining class of the codepoint
+  */
+  public static byte getCombiningClass(int ch)
+  {
+    int props = getProps(ch);
+    if(!UCharacterPropertyDB.isExceptionIndicator(props)) {
+      if (UCharacterPropertyDB.getPropType(props) == 
+                                     UCharacterCategory.NON_SPACING_MARK) {
+        return (byte)(PROPERTY_DB_.getUnsignedValue(props));
+      }
+      else {
+        return 0;
+      }
+    }
+    else {
+      // the combining class is in bits 23..16 of the first exception value
+      return (byte)((PROPERTY_DB_.getException(PROPERTY_DB_.getExceptionIndex(
+                            props), UCharacterPropertyDB.EXC_COMBINING_CLASS_)
+                    >> SHIFT_16_) & LAST_BYTE_MASK_);
+    }
+  }
+  
+  /**
+  * A code point is illegal if and only if
+  * <ul>
+  * <li> Out of bounds, less than 0 or greater than UCharacter.MAX_VALUE
+  * <li> A surrogate value, 0xD800 to 0xDFFF
+  * <li> Not-a-character, having the form 0x xxFFFF or 0x xxFFFE
+  * </ul>
+  * Note: legal does not mean that it is assigned in this version of Unicode.
+  * @param ch code point to determine if it is a legal code point by itself
+  * @return true if and only if legal. 
+  */
+  public static boolean isLegal(int ch) 
+  {
+    if (ch < MIN_VALUE) {
+      return false;
+    }
+    if (ch < SURROGATE_MIN_VALUE_) {
+      return true;
+    }
+    if (ch <= SURROGATE_MAX_VALUE_) {
+      return false;
+    }
+    if ((ch & LAST_CHAR_MASK_) >= NOT_A_CHAR_SUFFIX_MIN_) {
+      return false;
+    }
+    return (ch <= MAX_VALUE);
+  }
+  
+  /**
+  * A string is legal iff all its code points are legal.
+  * A code point is illegal if and only if
+  * <ul>
+  * <li> Out of bounds, less than 0 or greater than UCharacter.MAX_VALUE
+  * <li> A surrogate value, 0xD800 to 0xDFFF
+  * <li> Not-a-character, having the form 0x xxFFFF or 0x xxFFFE
+  * </ul>
+  * Note: legal does not mean that it is assigned in this version of Unicode.
+  * @param ch code point to determine if it is a legal code point by itself
+  * @return true if and only if legal. 
+  */
+  public static boolean isLegal(String str) 
+  {
+    int size = str.length();
+    char lead,
+         trail;
+    int codepoint;
+    for (int i = 0; i < size; i ++)
+    {
+      codepoint = UTF16.charAt(str, i);
+      if (!isLegal(codepoint)) {
+        return false;
+      }
+      if (isSupplementary(codepoint)) {
+        i ++;
+      }
+    }
+    return true;
+  }
+
+  /**
+  * Gets the version of Unicode data used. 
+  * @return the unicode version number used
+  */
+  public static String getUnicodeVersion()
+  {
+    return PROPERTY_DB_.m_unicodeversion_;
+  }
+  
+  /**
+  * Retrieve the most current Unicode name of the argument code point.<br>
+  * Note calling any methods related to code point names, e.g. get*Name*() 
+  * incurs a one-time initialisation cost to construct the name tables.
+  * @param ch the code point for which to get the name
+  * @return most current Unicode name
+  */
+  public static String getName(int ch)
+  {
+    return UCharacterName.getName(ch, 
+                                 UCharacterNameChoice.U_UNICODE_CHAR_NAME);
+  }
+  
+  /**
+  * Retrieve the earlier version 1.0 Unicode name of the argument code point.
+  * <br>
+  * Note calling any methods related to code point names, e.g. get*Name*() 
+  * incurs a one-time initialisation cost to construct the name tables.
+  * @param ch the code point for which to get the name
+  * @return version 1.0 Unicode name
+  */
+  public static String getName1_0(int ch)
+  {
+    return UCharacterName.getName(ch, 
+                              UCharacterNameChoice.U_UNICODE_10_CHAR_NAME);
+  }
+  
+  /**
+  * Find a Unicode code point by its most current Unicode name and return its 
+  * code point value.<br>
+  * Note calling any methods related to code point names, e.g. get*Name*() 
+  * incurs a one-time initialisation cost to construct the name tables.
+  * @param name most current Unicode character name whose code point is to be 
+  *        returned
+  * @return code point
+  */
+  public static int getCharFromName(String name)
+  {
+    return UCharacterName.getCharFromName(
+                           UCharacterNameChoice.U_UNICODE_CHAR_NAME, name);
+  }
+  
+  /**
+  * Find a Unicode character by its version 1.0 Unicode name and return its 
+  * code point value.<br>
+  * Note calling any methods related to code point names, e.g. get*Name*() 
+  * incurs a one-time initialisation cost to construct the name tables.
+  * @param name Unicode 1.0 code point name whose code point is to 
+  *             returned
+  * @return code point
+  */
+  public static int getCharFromName1_0(String name)
+  {
+    return UCharacterName.getCharFromName(
+                        UCharacterNameChoice.U_UNICODE_10_CHAR_NAME, name);
+  }
+  
+  /**
+  * Returns a code pointcorresponding to the two UTF16 characters.<br>
+  * If the argument lead is not a high surrogate character or trail is not a 
+  * low surrogate character, UCharacter.REPLACEMENT_CHAR is returned.
+  * @param lead the lead char
+  * @param trail the trail char
+  * @return code point or UCharacter.REPLACEMENT_CHAR if surrogate characters 
+  *         are invalid.
+  */
+  public static int getCodePoint(char lead, char trail) 
+  {
+    if (UTF16.isLeadSurrogate(lead) && UTF16.isTrailSurrogate(trail)) {
+      return getRawSupplementary(lead, trail);
+    }
+    return UCharacter.REPLACEMENT_CHAR;
+  }
+  
+  /**
+  * Returns the code point corresponding to the UTF16 character.<br>
+  * If argument char16 is a surrogate character, UCharacter.REPLACEMENT_CHAR 
+  * is returned
+  * @param char16 the UTF16 character
+  * @return code point or UCharacter.REPLACEMENT_CHAR if argument is not a 
+  *         invalid character.
+  * @exception IllegalArgumentException thrown when char16 is not a valid
+  *            codepoint
+  */
+  public static int getCodePoint(char char16) 
+  {
+    if (UCharacter.isLegal(char16)) {
+      return char16;
+    }
+    throw new IllegalArgumentException("Illegal codepoint");
+  }
+  
+  /**
+  * Gets uppercase version of the argument string. 
+  * Casing is dependent on the default locale and context-sensitive.
+  * @param str source string to be performed on
+  * @return uppercase version of the argument string
+  */
+  public static String toUpperCase(String str)
+  {
+    return toUpperCase(Locale.getDefault(), str);
+  }
+  
+  /**
+  * Gets lowercase version of the argument string. 
+  * Casing is dependent on the default locale and context-sensitive
+  * @param str source string to be performed on
+  * @return lowercase version of the argument string
+  */
+  public static String toLowerCase(String str)
+  {
+    return toLowerCase(Locale.getDefault(), str);
+  }
+  
+  /**
+  * Gets uppercase version of the argument string. 
+  * Casing is dependent on the argument locale and context-sensitive.
+  * @param locale which string is to be converted in
+  * @param str source string to be performed on
+  * @return uppercase version of the argument string
+  */
+  public static String toUpperCase(Locale locale, String str)
+  {
+    int size = UTF16.countCodePoint(str);
+    StringBuffer result = new StringBuffer(size << 1); // initial buffer
+    int props;
+    int exception;
+    int ch;
+    int index;
+    String lang = locale.getLanguage();
+    boolean tr_az = lang.equals(TURKISH_) || lang.equals(AZERBAIJANI_);
+    boolean lt = lang.equals(LITHUANIAN_);
+    
+    for (int i = 0; i < size; i ++)
+    {
+      ch = UTF16.charAtCodePointOffset(str, i);
+      props = PROPERTY_DB_.getProperty(ch);
+      if (!UCharacterPropertyDB.isExceptionIndicator(props)) 
+      {
+        if (UCharacterPropertyDB.getPropType(props) == 
+            UCharacterCategory.LOWERCASE_LETTER) {
+          ch -= UCharacterPropertyDB.getSignedValue(props);
+        }
+        UTF16.append(result, ch);
+      }
+      else 
+      {
+        index = UCharacterPropertyDB.getExceptionIndex(props);
+        if (PROPERTY_DB_.hasExceptionValue(index, 
+                                  UCharacterPropertyDB.EXC_SPECIAL_CASING_)) {
+          getSpecialUpperCase(ch, index, result, str, i, tr_az, lt);          
+        }
+        else {
+          if (PROPERTY_DB_.hasExceptionValue(index, 
+                                     UCharacterPropertyDB.EXC_UPPERCASE_)) {
+            UTF16.append(result, PROPERTY_DB_.getException(index, 
+                                      UCharacterPropertyDB.EXC_UPPERCASE_));
+          }
+        }
+      }
+    }
+    return result.toString();
+  }
+  
+  /**
+  * Gets lowercase version of the argument string. 
+  * Casing is dependent on the argument locale and context-sensitive
+  * @param locale which string is to be converted in
+  * @param str source string to be performed on
+  * @return lowercase version of the argument string
+  */
+  public static String toLowerCase(Locale locale, String str)
+  {
+    int size = UTF16.countCodePoint(str);
+    StringBuffer result = new StringBuffer(size << 1); // initial buffer
+    int props;
+    int exception;
+    int ch;
+    int index;
+    String lang = locale.getLanguage();
+    boolean tr_az = lang.equals(TURKISH_) || lang.equals(AZERBAIJANI_);
+    boolean lt = lang.equals(LITHUANIAN_);
+    int type;
+    
+    for (int i = 0; i < size; i ++)
+    {
+      ch = UTF16.charAtCodePointOffset(str, i);
+      props = PROPERTY_DB_.getProperty(ch);
+      if (!UCharacterPropertyDB.isExceptionIndicator(props)) {
+        type = UCharacterPropertyDB.getPropType(props);
+        if (type == UCharacterCategory.UPPERCASE_LETTER ||
+            type == UCharacterCategory.TITLECASE_LETTER) {
+          ch += UCharacterPropertyDB.getSignedValue(props);
+        }
+        UTF16.append(result, ch);
+      }
+      else {
+        index = UCharacterPropertyDB.getExceptionIndex(props);
+        if (PROPERTY_DB_.hasExceptionValue(index, 
+                                  UCharacterPropertyDB.EXC_SPECIAL_CASING_)) {
+          getSpecialLowerCase(ch, index, result, str, i, tr_az, lt);          
+        }
+        else {
+          if (PROPERTY_DB_.hasExceptionValue(index, 
+                                     UCharacterPropertyDB.EXC_LOWERCASE_)) {
+            UTF16.append(result, PROPERTY_DB_.getException(index, 
+                                      UCharacterPropertyDB.EXC_LOWERCASE_));
+          }
+        }
+      }
+    }
+    return result.toString();
+  }
+  
+  // protected methods ====================================================
+  
+  /**
+  * Forms a supplementary code point from the argument character<br>
+  * Note this is for internal use hence no checks for the validity of the
+  * surrogate characters are done
+  * @param lead lead surrogate character
+  * @param trail trailing surrogate character
+  * @return code point of the supplementary character
+  */
+  protected static int getRawSupplementary(char lead, char trail)
+  {
+    return (lead << LEAD_SURROGATE_SHIFT_) + trail + SURROGATE_OFFSET_;
+  }
+  
+  // private methods ==============================================
+  
+  /**
+  * Gets the correct property information from UCharacterPropertyDB
+  * @param ch character whose information is to be retrieved
+  * @return a 32 bit information, returns 0 if no data is found.
+  */
+  private static int getProps(int ch)
+  {
+    if (ch >= UCharacter.MIN_VALUE & ch <= UCharacter.MAX_VALUE) {
+      return PROPERTY_DB_.getProperty(ch);
+    }
+    return 0;
+  }
+  
+  /**
+  * Getting Han character digit values
+  * @param ch code point to test if it is a Han character
+  * @return Han digit value if ch is a Han digit character
+  */
+  private static int getHanDigit(int ch)
+  {
+    switch(ch)
+    {
+      case IDEOGRAPHIC_NUMBER_ZERO_ :
+        return 0; // Han Zero
+      case CJK_IDEOGRAPH_FIRST_ :
+        return 1; // Han One
+      case CJK_IDEOGRAPH_SECOND_ :
+        return 2; // Han Two
+      case CJK_IDEOGRAPH_THIRD_ :
+        return 3; // Han Three
+      case CJK_IDEOGRAPH_FOURTH_ :
+        return 4; // Han Four
+      case CJK_IDEOGRAPH_FIFTH_ :
+        return 5; // Han Five
+      case CJK_IDEOGRAPH_SIXTH_ :
+        return 6; // Han Six
+      case CJK_IDEOGRAPH_SEVENTH_ :
+        return 7; // Han Seven
+      case CJK_IDEOGRAPH_EIGHTH_ : 
+        return 8; // Han Eight
+      case CJK_IDEOGRAPH_NINETH_ :
+        return 9; // Han Nine
+    }
+    return -1; // no value
+  }
+  
+  /**
+  * Special casing uppercase management
+  * @param ch code point to convert
+  * @param index of exception containing special case information
+  * @param buffer to add uppercase
+  * @param str original string
+  * @param chindex index of ch in str
+  * @param tr_az if uppercase is to be made with TURKISH or AZERBAIJANI 
+  *        in mind
+  * @param lt if uppercase is to be made with LITHUANIAN in mind
+  */
+  private static void getSpecialUpperCase(int ch, int index, 
+                                          StringBuffer buffer, String str, 
+                                          int chindex, boolean tr_az, 
+                                          boolean lt)
+  {
+    int exception = PROPERTY_DB_.getException(index, 
+                                    UCharacterPropertyDB.EXC_SPECIAL_CASING_);
+    if (exception < 0) {
+      // use hardcoded conditions and mappings
+      if (ch == LATIN_SMALL_LETTER_I_) {
+        if (tr_az) {
+          // turkish and azerbaijani : i maps to dotted I
+          buffer.append(LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_);
+        }
+        else {
+          // other languages: i maps to I
+          buffer.append(LATIN_CAPITAL_LETTER_I_);
+        }
+      } 
+      else {
+        if (ch == COMBINING_DOT_ABOVE_ && lt) {
+          // lithuanian: remove DOT ABOVE after U+0069 "i" with upper 
+          // or titlecase
+          for (int j = chindex; j > 0; j ++) {
+            ch = UTF16.charAtCodePointOffset(str, j);
+            if (getType(ch) != UCharacterCategory.NON_SPACING_MARK) {
+              break;
+            }
+          }
+                
+          // if the base letter is not an 'i' (U+0069)? keep the dot
+          if (ch != LATIN_SMALL_LETTER_I_) {
+            buffer.append(COMBINING_DOT_ABOVE_);
+          }
+        } 
+        else { 
+          // no known conditional special case mapping, output the code 
+          // point itself
+          UTF16.append(buffer, ch);
+        }
+      }
+    } 
+    else {
+      // get the special case mapping string from the data file
+      index = exception & LAST_CHAR_MASK_;
+      PROPERTY_DB_.getUpperCase(index, buffer);
+    }
+  }
+  
+  /**
+  * Special casing lowercase management
+  * @param ch code point to convert
+  * @param index of exception containing special case information
+  * @param buffer to add lowercase
+  * @param str original string
+  * @param chindex index of ch in str
+  * @param tr_az if uppercase is to be made with TURKISH or AZERBAIJANI 
+  *        in mind
+  * @param lt if uppercase is to be made with LITHUANIAN in mind
+  */
+  private static void getSpecialLowerCase(int ch, int index, 
+                                          StringBuffer buffer, String str, 
+                                          int chindex, boolean tr_az, 
+                                          boolean lt)
+  {
+    int exception = PROPERTY_DB_.getException(index, 
+                                    UCharacterPropertyDB.EXC_SPECIAL_CASING_);
+    if (exception < 0) {
+      // use hardcoded conditions and mappings
+      if (ch == LATIN_CAPITAL_LETTER_I_) {
+        if (tr_az) {
+          // turkish and azerbaijani : I maps to dotless i
+          buffer.append(LATIN_SMALL_LETTER_DOTLESS_I_);
+        }
+        else {
+          // other languages: I maps to i
+          buffer.append(LATIN_SMALL_LETTER_I_);
+        }
+      } 
+      else {
+        if (ch == GREEK_CAPITAL_LETTER_SIGMA_) {
+          // greek capital sigma maps depending on whether the following 
+          // character is a letter
+          chindex ++;
+          if (chindex != str.length() && 
+              isLetter(UTF16.charAtCodePointOffset(str, chindex))) {
+            buffer.append(GREEK_SMALL_LETTER_SIGMA_);
+          }
+          else {
+            buffer.append(GREEK_SMALL_LETTER_RHO_);
+          }
+        } 
+        else {
+          // no known conditional special case mapping, output the code 
+          // point itself
+          UTF16.append(buffer, ch);
+        }
+      }
+    } 
+    else 
+    {
+      // get the special case mapping string from the data file
+      index = exception & LAST_CHAR_MASK_;
+      PROPERTY_DB_.getLowerCase(index, buffer);
+    }
+  }
+}
+
diff --git a/src/com/ibm/text/UCharacterCategory.java b/src/com/ibm/text/UCharacterCategory.java
new file mode 100755
index 0000000..1ef712e
--- /dev/null
+++ b/src/com/ibm/text/UCharacterCategory.java
@@ -0,0 +1,248 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: 
+*      /usr/cvs/icu4j/icu4j/src/com/ibm/icu/text/UCharacterCategory.java $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.2 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+/**
+* Enumerated Unicode category types from the UnicodeData.txt file.
+* Used as return results from <a href=UCharacter.html>UCharacter</a>
+* Equivalent to icu's UCharCategory.
+* Refer to <a href=http://www.unicode.org/Public/UNIDATA/UnicodeData.html>
+* Unicode Consortium</a> for more information about UnicodeData.txt.
+* @author Syn Wee Quek
+* @since oct0300
+*/
+
+public class UCharacterCategory
+{
+  // private constructor ===================================================
+  
+  /**
+  * Private constructor to prevent initialisation
+  */
+  private UCharacterCategory()
+  {
+  }
+  
+  // public variable =======================================================
+  
+  /**
+  * Unassigned character type
+  */
+  public static final int UNASSIGNED              = 0; 
+  /**
+  * Character type Lu
+  */
+  public static final int UPPERCASE_LETTER        = 1;
+  /**
+  * Character type Ll
+  */
+	public static final int LOWERCASE_LETTER        = 2;
+	/**
+  * Character type Lt
+  */
+	public static final int TITLECASE_LETTER        = 3;
+	/**
+  * Character type Lm
+  */
+	public static final int MODIFIER_LETTER         = 4;
+	/**
+  * Character type Lo
+  */
+	public static final int OTHER_LETTER            = 5;
+	/**
+  * Character type Lu
+  */
+	public static final int NON_SPACING_MARK        = 6;
+	/**
+  * Character type Me
+  */
+	public static final int ENCLOSING_MARK          = 7;
+	/**
+  * Character type Mc
+  */
+	public static final int COMBINING_SPACING_MARK  = 8;
+	/**
+  * Character type Nd
+  */
+	public static final int DECIMAL_DIGIT_NUMBER    = 9;
+	/**
+  * Character type Nl
+  */
+	public static final int LETTER_NUMBER           = 10;
+	
+	// start of 11------------
+	
+	/**
+  * Character type No
+  */
+	public static final int OTHER_NUMBER            = 11;
+	/**
+  * Character type Zs
+  */
+	public static final int SPACE_SEPARATOR         = 12;
+	/**
+  * Character type Zl
+  */
+	public static final int LINE_SEPARATOR          = 13;
+	/**
+  * Character type Zp
+  */
+	public static final int PARAGRAPH_SEPARATOR     = 14;
+	/**
+  * Character type Cc
+  */
+	public static final int CONTROL                 = 15;
+	/**
+  * Character type Cf
+  */
+	public static final int FORMAT                  = 16;
+	/**
+  * Character type Co
+  */
+	public static final int PRIVATE_USE             = 17;
+	/**
+  * Character type Cs
+  */
+	public static final int SURROGATE               = 18;
+	/**
+  * Character type Pd
+  */
+	public static final int DASH_PUNCTUATION        = 19;
+	/**
+  * Character type Ps
+  */
+	public static final int START_PUNCTUATION       = 20;
+	
+	// start of 21 ------------
+
+	/**
+  * Character type Pe
+  */
+	public static final int END_PUNCTUATION         = 21;
+	/**
+  * Character type Pc
+  */
+	public static final int CONNECTOR_PUNCTUATION   = 22;
+	/**
+  * Character type Po
+  */
+	public static final int OTHER_PUNCTUATION       = 23;
+	/**
+  * Character type Sm
+  */
+	public static final int MATH_SYMBOL             = 24;
+	/**
+  * Character type Sc
+  */
+	public static final int CURRENCY_SYMBOL         = 25;
+	/**
+  * Character type Sk
+  */
+	public static final int MODIFIER_SYMBOL         = 26;
+	/**
+  * Character type So
+  */
+	public static final int OTHER_SYMBOL            = 27;
+	/**
+  * Character type Pi
+  */
+	public static final int INITIAL_PUNCTUATION     = 28;
+	/**
+  * Character type Pf
+  */
+	public static final int FINAL_PUNCTUATION       = 29;
+	/**
+  * Character type Cn
+  */
+	public static final int GENERAL_OTHER_TYPES     = 30;
+	
+	// start of 31 ------------
+
+	/**
+  * Character type count
+  */
+	public static final int CHAR_CATEGORY_COUNT     = 31;
+	
+	/**
+	* Gets the name of the argument category
+	* @param category to retrieve name
+	* @return category name
+	*/
+	public static String toString(int category)
+	{
+	  switch (category)
+	  {
+	    case UPPERCASE_LETTER :
+	      return "Letter, Uppercase";
+	    case LOWERCASE_LETTER :
+	      return "Letter, Lowercase";
+	    case TITLECASE_LETTER :
+	      return "Letter, Titlecase";
+	    case MODIFIER_LETTER :
+	      return "Letter, Modifier";
+	    case OTHER_LETTER :
+	      return "Letter, Other";
+	    case NON_SPACING_MARK :
+	      return "Mark, Non-Spacing";
+	    case ENCLOSING_MARK : 
+	      return "Mark, Enclosing";
+	    case COMBINING_SPACING_MARK :
+	      return "Mark, Spacing Combining";
+	    case DECIMAL_DIGIT_NUMBER :
+	      return "Number, Decimal Digit";
+	    case LETTER_NUMBER :
+	      return "Number, Letter";
+	    case OTHER_NUMBER :
+	      return "Number, Other";
+	    case SPACE_SEPARATOR :
+	      return "Separator, Space";
+	    case LINE_SEPARATOR :
+	      return "Separator, Line";
+	    case PARAGRAPH_SEPARATOR :
+	      return "Separator, Paragraph";
+	    case CONTROL :
+	      return "Other, Control";
+	    case FORMAT :
+	      return "Other, Format";
+	    case PRIVATE_USE :
+	      return "Other, Private Use";
+	    case SURROGATE :
+	      return "Other, Surrogate";
+	    case DASH_PUNCTUATION :
+	      return "Punctuation, Dash";
+	    case START_PUNCTUATION :
+	      return "Punctuation, Open";
+	    case END_PUNCTUATION :
+	      return "Punctuation, Close";
+	    case CONNECTOR_PUNCTUATION :
+	      return "Punctuation, Connector";
+	    case OTHER_PUNCTUATION :
+	      return "Punctuation, Other";
+	    case MATH_SYMBOL :
+	      return "Symbol, Math";
+	    case CURRENCY_SYMBOL :
+	      return "Symbol, Currency";
+	    case MODIFIER_SYMBOL :
+	      return "Symbol, Modifier";
+	    case OTHER_SYMBOL :
+	      return "Symbol, Other";
+	    case INITIAL_PUNCTUATION :
+	      return "Punctuation, Initial quote ";
+	    case FINAL_PUNCTUATION :
+	      return "Punctuation, Final quote ";
+	  }
+	  return "Unassigned";
+	}
+}
diff --git a/src/com/ibm/text/UCharacterDB.java b/src/com/ibm/text/UCharacterDB.java
new file mode 100755
index 0000000..6008d44
--- /dev/null
+++ b/src/com/ibm/text/UCharacterDB.java
@@ -0,0 +1,94 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UCharacterDB.java,v $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+package com.ibm.text;
+
+/**
+* Internal base class for all character databases.
+* Database classes store binary data read from uprops.dat and unames for use. 
+* It does not have the capability to parse the data into more high-level 
+* information. It only returns bytes of information when required. 
+* Due to the form most commonly used for retrieval, array of char is used
+* to store the binary data
+* Responsibility for molding the binary data into more meaning form lies on 
+* <a href=UCharacterPropertyDB.html>UCharacterPropertyDB</a> and 
+* <a href=UCharacterNameDB.html>UCharacterNameDB</a>.
+* Data populated by <a href=UGenReader.html>UGenReader</a>
+* @author Syn Wee Quek
+* @since oct3100 HALLOWEEN!!
+* @see com.ibm.text.UCharacterPropertyDB
+* @see com.ibm.text.UCharacterNameDB
+*/
+
+class UCharacterDB
+{
+  // protected variable ===========================================  
+  
+  /**
+  * Unicode data version
+  */
+  String m_unicodeversion_;
+  
+  // constructor =============================================
+  
+  /**
+  * Constructor for UCharacterDB
+  */
+  protected UCharacterDB()
+  {
+  }
+  
+  // public method =============================================
+  
+  /**
+   * toString method for printing
+   */
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+    result.append("\nunicode version number ");
+    result.append(m_unicodeversion_);
+    
+    return result.toString();
+  }
+  
+  // protected method =============================================
+  
+  /**
+  * set version number for this set of unicode characters
+  * @param version
+  * @return false if version is not a valid number
+  */
+  protected boolean setUnicodeVersion(byte[] version)
+  {
+    int size = 0;
+    if (version != null) {
+      size = version.length;
+    }
+    boolean result = false;
+    StringBuffer s = new StringBuffer(size);
+    for (int i = 0; i < size; i++) {
+      s.append((int)version[i]);
+      s.append('.');
+      if (version[i] < 0 || version[i] > 9) {
+        return false;
+      }
+      if (version[i] != 0) {
+        result = true;
+      }
+    }
+    if (result) {
+      m_unicodeversion_ = s.substring(0, (size << 1) - 1);
+    }
+    return true;
+  }
+}
diff --git a/src/com/ibm/text/UCharacterDirection.java b/src/com/ibm/text/UCharacterDirection.java
new file mode 100755
index 0000000..91b6b1a
--- /dev/null
+++ b/src/com/ibm/text/UCharacterDirection.java
@@ -0,0 +1,171 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: 
+*     /usr/cvs/icu4j/icu4j/src/com/ibm/icu/text/UCharacterDirection.java $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.2 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+/**
+* Enumerated Unicode character linguistic direction constants.
+* Used as return results from <a href=UCharacter.html>UCharacter</a>
+* @author Syn Wee Quek
+* @since oct0300
+*/
+
+public final class UCharacterDirection
+{
+  // private constructor =========================================
+  
+  /**
+  * Private constructor to prevent initialisation
+  */
+  private UCharacterDirection()
+  {
+  }
+  
+  // public variable =============================================
+  
+  /**
+  * Directional type L
+  */
+  public static final int LEFT_TO_RIGHT              = 0;
+  /**
+  * Directional type R
+  */
+	public static final int RIGHT_TO_LEFT              = 1;
+	/**
+  * Directional type EN
+  */
+	public static final int EUROPEAN_NUMBER            = 2;
+	/**
+  * Directional type ES
+  */
+	public static final int EUROPEAN_NUMBER_SEPARATOR  = 3;
+	/**
+  * Directional type ET
+  */
+	public static final int EUROPEAN_NUMBER_TERMINATOR = 4;
+  /**
+  * Directional type AN
+  */	                                               
+	public static final int ARABIC_NUMBER              = 5;
+	/**
+  * Directional type CS
+  */
+	public static final int COMMON_NUMBER_SEPARATOR    = 6;
+	/**
+  * Directional type B
+  */
+	public static final int BLOCK_SEPARATOR            = 7;
+	/**
+  * Directional type S
+  */      
+	public static final int SEGMENT_SEPARATOR          = 8;
+	/**
+  * Directional type WS
+  */
+	public static final int WHITE_SPACE_NEUTRAL        = 9;
+	
+	// start of 11 ---------------
+	
+	/**
+  * Directional type ON
+  */
+	public static final int OTHER_NEUTRAL              = 10;
+	/**
+  * Directional type LRE
+  */
+	public static final int LEFT_TO_RIGHT_EMBEDDING    = 11;
+	/**
+  * Directional type LRO
+  */
+	public static final int LEFT_TO_RIGHT_OVERRIDE     = 12;  
+  /**
+  * Directional type AL
+  */
+	public static final int RIGHT_TO_LEFT_ARABIC       = 13;
+	/**
+  * Directional type RLE
+  */
+	public static final int RIGHT_TO_LEFT_EMBEDDING    = 14;
+	/**
+  * Directional type RLO
+  */
+	public static final int RIGHT_TO_LEFT_OVERRIDE     = 15;
+	/**
+  * Directional type PDF
+  */
+	public static final int POP_DIRECTIONAL_FORMAT     = 16;
+	/**
+  * Directional type NSM
+  */
+	public static final int DIR_NON_SPACING_MARK       = 17;
+	/**
+  * Directional type BN
+  */
+	public static final int BOUNDARY_NEUTRAL           = 18;
+	/**
+  * Number of directional type
+  */
+	public static final int CHAR_DIRECTION_COUNT       = 19;
+	
+	/**
+	* Gets the name of the argument direction
+	* @param dir direction type to retrieve name
+	* @return directional name
+	*/
+	public static String toString(int dir)
+	{
+	  switch(dir)
+	  {
+	    case LEFT_TO_RIGHT :
+	      return "Left-to-Right";
+	    case RIGHT_TO_LEFT :
+	      return "Right-to-Left";
+	    case EUROPEAN_NUMBER :
+	      return "European Number";
+	    case EUROPEAN_NUMBER_SEPARATOR :
+	      return "European Number Separator";
+	    case EUROPEAN_NUMBER_TERMINATOR :
+	      return "European Number Terminator";
+	    case ARABIC_NUMBER :
+	      return "Arabic Number";
+	    case COMMON_NUMBER_SEPARATOR :
+	      return "Common Number Separator";
+	    case BLOCK_SEPARATOR :
+	      return "Paragraph Separator";
+	    case SEGMENT_SEPARATOR :
+	      return "Segment Separator";
+	    case WHITE_SPACE_NEUTRAL :
+	      return "Whitespace";
+	    case OTHER_NEUTRAL :
+	      return "Other Neutrals";
+	    case LEFT_TO_RIGHT_EMBEDDING :
+	      return "Left-to-Right Embedding";
+	    case LEFT_TO_RIGHT_OVERRIDE :
+	      return "Left-to-Right Override";
+	    case RIGHT_TO_LEFT_ARABIC :
+	      return "Right-to-Left Arabic";
+	    case RIGHT_TO_LEFT_EMBEDDING :
+	      return "Right-to-Left Embedding";
+	    case RIGHT_TO_LEFT_OVERRIDE :
+	      return "Right-to-Left Override";
+	    case POP_DIRECTIONAL_FORMAT :
+	      return "Pop Directional Format";
+	    case DIR_NON_SPACING_MARK :
+	      return "Non-Spacing Mark";
+	    case BOUNDARY_NEUTRAL :
+	      return "Boundary Neutral";
+	  }
+	  return "Unassigned";
+	}
+}
diff --git a/src/com/ibm/text/UCharacterName.java b/src/com/ibm/text/UCharacterName.java
new file mode 100755
index 0000000..1b4d159
--- /dev/null
+++ b/src/com/ibm/text/UCharacterName.java
@@ -0,0 +1,184 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: 
+*     /usr/cvs/icu4j/icu4j/src/com/ibm/icu/text/UCharacterName.java $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+package com.ibm.text;
+
+/**
+* Internal class to manage character names.
+* <a href=UCharacterNameDB.html>UCharacterNameDB</a> provides the data
+* required and UCharacterName parses it into meaningful results before
+* returning value.
+* Since data in <a href=UCharacterNameDB.html>UCharacterNameDB</a> is stored
+* in an array of char, by default indexes used in this class is refering to 
+* a 2 byte count, unless otherwise stated. Cases where the index is refering 
+* to a byte count, the index is halved and depending on whether the index is 
+* even or odd, the MSB or LSB of the result char at the halved index is 
+* returned. For indexes to an array of int, the index is multiplied by 2, 
+* result char at the multiplied index and its following char is returned as an 
+* int.
+* <a href=UCharacter.html>UCharacter</a> acts as a public facade for this class
+* Note : 0 - 0x1F are control characters without names in Unicode 3.0
+* For information on parsing of the binary data in 
+* <a href=UCharacterNameDB.html>UCharacterNameDB</a> is located at
+* <a href=oss.software.ibm.com/icu4j/icu4jhtml/com/ibm/icu/text/readme.html>
+* ReadMe</a>
+* @author Syn Wee Quek
+* @since nov0700
+*/
+
+final class UCharacterName
+{
+  // private variable =============================================
+  
+  /**
+  * Database storing the sets of character name
+  */
+  private static final UCharacterNameDB NAME_DB_;
+  
+  // block to initialise name database and unicode 1.0 data indicator
+  static
+  {
+    try
+    {
+      NAME_DB_ = new UCharacterNameDB();
+    }
+    catch (Exception e)
+    {
+      throw new RuntimeException(e.getMessage());
+    }
+  }
+  
+  // protected method =============================================
+ 
+  /**
+  * Retrieve the name of a Unicode code point.
+  * Depending on <code>choice</code>, the character name written into the 
+  * buffer is the "modern" name or the name that was defined in Unicode 
+  * version 1.0.
+  * The name contains only "invariant" characters
+  * like A-Z, 0-9, space, and '-'.
+  *
+  * @param ch the code point for which to get the name.
+  * @param choice Selector for which name to get.
+  * @return if code point is above 0x1fff, null is returned
+  */
+  protected static String getName(int ch, int choice)
+  {
+    if (ch < 0 || ch > 0x1ffff || 
+        choice >= UCharacterNameChoice.U_CHAR_NAME_CHOICE_COUNT) {
+      return null;
+    }
+      
+    String result = "";
+    
+    // Do not write algorithmic Unicode 1.0 names because Unihan names are 
+    // the same as the modern ones, extension A was only introduced with 
+    // Unicode 3.0, and the Hangul syllable block was moved and changed around 
+    // Unicode 1.1.5.
+    if (choice == UCharacterNameChoice.U_UNICODE_CHAR_NAME) {
+      // try getting algorithmic name first
+      result = getAlgName(ch);
+    }
+    
+    // getting normal character name
+    if (result == null || result.length() == 0) {
+      result = NAME_DB_.getGroupName(ch, choice);
+    }
+      
+    return result;
+  }
+  
+  /**
+  * Find a character by its name and return its code point value
+  * @param character name
+  * @param choice selector to indicate if argument name is a Unicode 1.0 
+  *        or the most current version 
+  * @return code point
+  */
+  protected static int getCharFromName(int choice, String name)
+  {
+    // checks for illegal arguments
+    if (choice >= UCharacterNameChoice.U_CHAR_NAME_CHOICE_COUNT || 
+        name == null || name.length() == 0) {
+        return -1;
+    }
+   
+    // try algorithmic names first, if fails then try group names
+    int result = getAlgorithmChar(choice, name);
+    if (result >= 0) {
+      return result;
+    }
+    return getGroupChar(name, choice);
+  }
+  
+  // private method =============================================
+  
+  /**
+  * Gets the algorithmic name for the argument character
+  * @param ch character to determine name for
+  * @return the algorithmic name or null if not found
+  */
+  private static String getAlgName(int ch) 
+  {
+    // index in terms integer index
+    StringBuffer s = new StringBuffer();
+    
+    int index = NAME_DB_.getAlgorithmIndex(ch);
+    if (index >= 0) {
+      NAME_DB_.appendAlgorithmName(index, ch, s);
+      return s.toString();
+    }
+    return null;
+  }
+  
+  /**
+  * Gets the character for the argument algorithmic name
+  * @param choice of either 1.0 or the most current unicode name
+  * @return the algorithmic char or -1 otherwise.
+  */
+  private static int getAlgorithmChar(int choice, String name) 
+  {
+    // 1.0 has no algorithmic names
+    if (choice != UCharacterNameChoice.U_UNICODE_CHAR_NAME) {
+      return -1;
+    }
+    int result;
+    for (int count = NAME_DB_.countAlgorithm() - 1; count >= 0; count --) {
+      result = NAME_DB_.getAlgorithmChar(count, name); 
+      if (result >= 0) {
+        return result;
+      }
+    }
+    return -1;
+  }
+  
+  /**
+  * Getting the character with the tokenized argument name
+  * @param name of the character
+  * @return character with the tokenized argument name or -1 if character is
+  *         not found
+  */
+  private static int getGroupChar(String name, int choice) 
+  {
+    int groupcount = NAME_DB_.countGroup();
+    int result = 0;
+    
+    for (int i = 0; i < groupcount; i ++) {
+      result = NAME_DB_.getGroupChar(i, name, choice);
+      if (result != -1) {
+        return result;
+      }
+    }
+    return -1;
+  }
+}
diff --git a/src/com/ibm/text/UCharacterNameChoice.java b/src/com/ibm/text/UCharacterNameChoice.java
new file mode 100755
index 0000000..e24ab4d
--- /dev/null
+++ b/src/com/ibm/text/UCharacterNameChoice.java
@@ -0,0 +1,34 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: 
+*     /usr/cvs/icu4j/icu4j/src/com/ibm/icu/text/UCharacterNameChoiceEnum.java $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.2 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+/**
+* Internal class containing selector constants for the unicode character names.
+* Constants representing the "modern" name of a Unicode character or the name 
+* that was defined in Unicode version 1.0, before the Unicode standard 
+* merged with ISO-10646.
+* Arguments for <a href=UCharacterName.html>UCharacterName</a>
+* @author Syn Wee Quek
+* @since oct0600
+*/
+
+interface UCharacterNameChoice
+{
+  // public variables =============================================
+  
+  static final int U_UNICODE_CHAR_NAME = 0;
+  static final int U_UNICODE_10_CHAR_NAME = 1;
+  static final int U_CHAR_NAME_CHOICE_COUNT = 2;
+}
diff --git a/src/com/ibm/text/UCharacterNameDB.java b/src/com/ibm/text/UCharacterNameDB.java
new file mode 100755
index 0000000..97dff35
--- /dev/null
+++ b/src/com/ibm/text/UCharacterNameDB.java
@@ -0,0 +1,881 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UCharacterNameDB.java,v $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+import java.io.InputStream;
+import java.io.DataInputStream;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+
+/**
+* Internal class used for Unicode character name database.
+* Database classes store binary data read from uprops.dat and unames for use. 
+* It does not have the capability to parse the data into more high-level 
+* information. It only returns bytes of information when required. 
+* Due to the form most commonly used for retrieval, array of char is used
+* to store the binary data
+* UCharacterNameDB also contains indexes to significant points in the binary
+* data.
+* Responsibility for molding the binary data into more meaning form lies on 
+* <a href=UCharacterPpty.html>UCharacterPpty</a> and 
+* <a href=UCharacterName.html>UCharacterName</a>.
+* Data populated by <a href=UGenNameReader.html>UGenNameReader</a>
+* @author Syn Wee Quek
+* @since oct2700
+* @see com.ibm.text.UGenReader
+*/
+
+final class UCharacterNameDB extends UCharacterDB
+{
+  // private variable =============================================
+  
+  /**
+  * Data used in unames.dat
+  */
+  private char m_tokentable_[];
+  private byte m_tokenstring_[];
+  private char m_groupinfo_[];
+  private byte m_groupstring_[];
+  private AlgorithmName m_algorithm_[];
+  
+  /**
+  * Number of group sets
+  */
+  private int m_groupcount_ = 0;
+  private int m_groupsize_ = 0;
+  
+  /**
+  * Default name of the name datafile
+  */
+  private static final String NAME_FILE_NAME_ = "unames.dat";
+  
+  /**
+  * Default buffer size of datafile
+  */
+  private static final int NAME_BUFFER_SIZE_ = 100000;
+  
+  /**
+  * Shift count to retrieve group information
+  */
+  private static final int GROUP_SHIFT_ = 5;
+  
+  /**
+  * Number of lines per group
+  */
+  private static final int LINES_PER_GROUP_ = 1 << GROUP_SHIFT_;
+  
+  /**
+  * Mask to retrieve the offset for a particular character within a group
+  */
+  private static final int GROUP_MASK_ = LINES_PER_GROUP_ - 1;
+  
+  /**
+  * Position of offsethigh in group information array
+  */
+  private static final int OFFSET_HIGH_OFFSET_ = 1;
+  
+  /**
+  * Position of offsetlow in group information array
+  */
+  private static final int OFFSET_LOW_OFFSET_ = 2;
+  
+  /**
+  * Indicator of if Unicode 1.0 names are available
+  */
+  private static boolean UNICODE_1_;
+  
+  /**
+  * Double nibble indicator, any nibble > this number has to be combined
+  * with its following nibble
+  */
+  private static final int SINGLE_NIBBLE_MAX_ = 11;
+  
+  // constructor ====================================================
+  
+  /**
+  * protected constructor
+  * @exception thrown when data reading fails or when data has been corrupted
+  */
+  protected UCharacterNameDB() throws IOException
+  {
+    UGenNameReader reader = new UGenNameReader();
+    InputStream i = getClass().getResourceAsStream(NAME_FILE_NAME_);
+    BufferedInputStream b = new BufferedInputStream(i, NAME_BUFFER_SIZE_);
+    DataInputStream d = new DataInputStream(b);
+    reader.read(d, this);
+    d.close();
+    UNICODE_1_  = (';' >= m_tokentable_.length) || 
+                  (m_tokentable_[(int)';'] == 0xFFFF);
+  }
+  
+  // public method ==================================================
+  
+  /**
+  * toString method for printing
+  */
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer("names content \n");
+    /*result.append(super.toString());
+    result.append('\n');
+    result.append("token string offset ");
+    result.append(m_tokenstringoffset_);
+    result.append("\n");
+    result.append("group offset ");
+    result.append(m_groupsoffset_);
+    result.append("\n");
+    result.append("group string offset ");
+    result.append(m_groupstringoffset_);
+    result.append("\n");
+    result.append("alg names offset ");
+    result.append(m_algnamesoffset_);
+    result.append("\n");
+    */
+    return result.toString();
+  }
+
+  // protected methods ===============================================
+  
+  /**
+  * Sets the token data
+  * @param token array of tokens
+  * @param tokenstring array of string values of the tokens
+  * @return false if there is a data error
+  */
+  protected boolean setToken(char token[], byte tokenstring[])
+  {
+    if (token != null && tokenstring != null && token.length > 0 &&
+        tokenstring.length > 0) {
+      m_tokentable_ = token;
+      m_tokenstring_ = tokenstring;
+      return true;
+    }
+    return false; 
+  }
+   
+  /**
+  * Sets the number of group and size of each group in number of char
+  * @param count number of groups
+  * @param size size of group in char
+  * @return true if group size is set correctly
+  */
+  protected boolean setGroupCountSize(int count, int size)
+  {
+    if (count <= 0 || size <= 0) {
+      return false;
+    }
+    m_groupcount_ = count;
+    m_groupsize_ = size;
+    return true;
+  }
+  
+  /**
+  * Sets the group name data
+  * @param group index information array
+  * @param groupstring name information array
+  * @return false if there is a data error
+  */
+  protected boolean setGroup(char group[], byte groupstring[])
+  {
+    if (group != null && groupstring != null && group.length > 0 &&
+        groupstring.length > 0) {
+      m_groupinfo_ = group;
+      m_groupstring_ = groupstring;
+      return true;
+    }
+    return false; 
+  }
+  
+  /**
+  * Binary search for the group strings set that contains the argument Unicode 
+  * code point's most significant bits.
+  * The return value is always a valid group string set that contain msb.
+  * If group string set is not found, -1 is returned
+  * @param ch the code point to look for
+  * @return group string set index in datatable otherwise -1 is returned if 
+  *         group string set is not found
+  */
+  protected int getGroupStringIndex(int ch)
+  {
+    // gets the msb
+    int msb = ch >> GROUP_SHIFT_,
+        end = m_groupcount_,
+        start,
+        gindex = 0;
+        
+    // binary search for the group of names that contains the one for code
+    for (start = 0; start < end - 1;) {
+      gindex = (start + end) >> 1;
+      if (msb < getGroupMSB(gindex)) {
+        end = gindex;
+      }
+      else {
+        start = gindex;
+      }
+    }
+
+    // return this if it is an exact match
+    if (msb == getGroupMSB(start)) {
+      start = start * m_groupsize_;
+      return UCharacterUtil.toInt(m_groupinfo_[start + OFFSET_HIGH_OFFSET_], 
+                                  m_groupinfo_[start + OFFSET_LOW_OFFSET_]);
+    }
+    return -1;
+  }
+  
+  /**
+  * Returns the number of the group information object
+  * @return number of group information object
+  */
+  protected int countGroup()
+  {
+    return m_groupcount_;
+  }
+  
+  /**
+  * Gets the group name of the character
+  * @param ch character to get the group name 
+  * @param choice name choice selector to choose a unicode 1.0 or newer name
+  */
+  protected String getGroupName(int ch, int choice) 
+  {
+    if (choice != UCharacterNameChoice.U_UNICODE_CHAR_NAME && !UNICODE_1_) {
+      // if not modern name requested and semicolon byte value is a character, 
+      // not a token number, otherwise since only modern names are stored in 
+      // unames.dat and there is no such requested Unicode 1.0 name here
+      return null;
+    }
+        
+    // gets the msb
+    int msb = ch >> GROUP_SHIFT_,
+        end = m_groupcount_,
+        start,
+        gindex = 0;
+    
+    // binary search for the group of names that contains the one for code
+    for (start = 0; start < end - 1;) {
+      gindex = (start + end) >> 1;
+      if (msb < getGroupMSB(gindex)) {
+        end = gindex;
+      }
+      else {
+        start = gindex;
+      }
+    }
+
+    // return this if it is an exact match
+    if (msb == getGroupMSB(start)) {
+      char offsets[] = new char[LINES_PER_GROUP_ + 1];
+      char lengths[] = new char[LINES_PER_GROUP_ + 1];
+                
+      int index = getGroupLengths(start, offsets, lengths);
+      int offset = ch & GROUP_MASK_;
+      return getGroupName(index + offsets[offset], lengths[offset], choice);
+    }
+    
+    return null;
+  }
+  
+  /**
+  * Getting the character with the tokenized argument name
+  * @param index of the group to check
+  * @param name of the character
+  * @param choice of Unicode version used
+  * @return character with the tokenized argument name or -1 if character is
+  *         not found
+  */
+  protected int getGroupChar(int index, String name, int choice) 
+  {
+    if (choice != UCharacterNameChoice.U_UNICODE_CHAR_NAME && 
+        !UNICODE_1_) {
+      // semicolon byte value is a token number , therefore only modern 
+      // names are stored in unames.dat and there is no such requested 
+      // Unicode 1.0 name here
+      return -1;
+    }
+            
+    // populating the data set of grouptable
+    char offsets[] = new char[LINES_PER_GROUP_ + 1];
+    char lengths[] = new char[LINES_PER_GROUP_ + 1];
+    int startgpstrindex = getGroupLengths(index, offsets, lengths);
+      
+    // shift out to function
+    int result = getGroupChar(startgpstrindex, lengths, name, choice);
+    if (result != -1) {
+      return (getGroupMSB(index) << GROUP_SHIFT_) | result;
+    }
+    return -1;
+  }
+   
+  /**
+  * Set the algorithm name information array
+  * @param algorithm information array
+  * @return true if the group string offset has been set correctly
+  */
+  protected boolean setAlgorithm(AlgorithmName alg[])
+  {
+    if (alg != null && alg.length != 0) {
+      m_algorithm_ = alg;
+      return true;
+    }
+    return false;
+  }
+  
+  /**
+  * Get the number of algorithm name groups
+  * @return number of algorithm name groups
+  */
+  protected int countAlgorithm()
+  {
+    if (m_algorithm_ == null) {
+      return 0;
+    }
+    return m_algorithm_.length;
+  }
+  
+  /**
+  * Gets the index of the Algorithm object the argument code point lies
+  * @param ch code point 
+  * @return index of the Algorithm object the argument code point lies, 
+  *         otherwise -1 if code point is not found in Algorithm objects
+  */
+  protected int getAlgorithmIndex(int ch)
+  {
+    for (int index = m_algorithm_.length - 1; index >= 0; index --) {
+      if (m_algorithm_[index].contains(ch)) {
+        return index;
+      }
+    }
+    return -1;
+  }
+  
+  /**
+  * Appends algorithm name of code point into StringBuffer.
+  * Note this method does not check for validity of code point in Algorithm,
+  * result is undefined if code point does not belong in Algorithm.
+  * @param index of Algorithm object in array
+  * @param ch code point
+  * @param str StringBuffer to append to
+  */
+  protected void appendAlgorithmName(int index, int ch, StringBuffer str)
+  {
+    m_algorithm_[index].appendName(ch, str);
+  }
+  
+  /**
+  * Get algorithm code point for the argument name at index. If name is not
+  * found in algorithm, -1 is returned.
+  * @param index algorithm index
+  * @param name code point name
+  * @param code point in algorithm that matches name, -1 otherwise
+  */
+  protected int getAlgorithmChar(int index, String name)
+  {
+    return m_algorithm_[index].getAlgorithmChar(name);
+  }
+  
+  // private methods =================================================
+  
+  /**
+  * Gets the most significant bits representation in the argument group
+  * @param index the indexth group in datatable
+  * @return most significant bits representation of group
+  */
+  private char getGroupMSB(int index)
+  {
+    return m_groupinfo_[index * m_groupsize_];
+  }
+  
+  /**
+  * Reads a block of compressed lengths of 32 strings and expands them into 
+  * offsets and lengths for each string. Lengths are stored with a 
+  * variable-width encoding in consecutive nibbles:
+  * If a nibble<0xc, then it is the length itself (0 = empty string).
+  * If a nibble>=0xc, then it forms a length value with the following nibble.
+  * The offsets and lengths arrays must be at least 33 (one more) long because
+  * there is no check here at the end if the last nibble is still used.
+  * @param index of group string object in array
+  * @param offsets array to store the value of the string offsets
+  * @param lengths array to store the value of the string length
+  * @return next index of the data string immediately after the lengths 
+  *         in terms of byte address
+  */
+  private int getGroupLengths(int index, char offsets[], char lengths[]) 
+  {
+    char length = 0xffff;
+    byte b = 0,
+         n = 0;
+    int shift;
+    index = index * m_groupsize_; // byte count offsets of group strings
+    int stringoffset = UCharacterUtil.toInt(
+                                     m_groupinfo_[index + OFFSET_HIGH_OFFSET_], 
+                                     m_groupinfo_[index + OFFSET_LOW_OFFSET_]);
+        
+    offsets[0] = 0;
+    
+    // all 32 lengths must be read to get the offset of the first group string
+    for (int i = 0; i < LINES_PER_GROUP_; stringoffset ++) {
+      b = m_groupstring_[stringoffset];
+      shift = 4;
+      
+      while (shift >= 0) {
+        // getting nibble
+        n = (byte)((b >> shift) & 0x0F);   
+        if (length == 0xffff && n > SINGLE_NIBBLE_MAX_) {
+          length = (char)((n - 12) << 4);
+        }
+        else {
+          if (length != 0xffff) {
+            lengths[i] = (char)((length | n) + 12);
+          }
+          else {
+            lengths[i] = (char)n;
+          }
+            
+          if (i < LINES_PER_GROUP_) {
+            offsets[i + 1] = (char)(offsets[i] + lengths[i]);
+          }
+            
+          length = 0xffff;
+          i ++;
+        }
+              
+        shift -= 4;
+      }
+    }
+    return stringoffset;
+  }
+  
+  /**
+  * Gets the name of the argument group index
+  * @param index of the group name string in byte count
+  * @param length of the group name string
+  * @param choice of Unicode 1.0 name or the most current name
+  * @return name of the group 
+  */
+  private String getGroupName(int index, int length, int choice) 
+  {
+    if (choice != UCharacterNameChoice.U_UNICODE_CHAR_NAME) {
+      int oldindex = index;
+      index += UCharacterUtil.skipByteSubString(m_groupstring_, index, length, 
+                                                (byte)';');
+      length -= (index - oldindex);
+    }
+    
+    StringBuffer s = new StringBuffer();
+    byte b;
+    char token;
+    for (int i = 0; i < length;) {
+      b = m_groupstring_[index + i];
+      i ++;
+      
+      if (b >= m_tokentable_.length) {
+        if (b == ';') {
+          break;
+        }
+        s.append(b); // implicit letter
+      }
+      else {
+        token = m_tokentable_[b & 0x00ff];
+        if (token == 0xFFFE) {
+          // this is a lead byte for a double-byte token
+          token = m_tokentable_[b << 8 | (m_groupstring_[index + i] & 0x00ff)];
+          i ++;
+        }
+        if (token == 0xFFFF) {
+          if (b == ';') {
+            break;
+          }
+          s.append((char)(b & 0x00ff)); // explicit letter
+        }
+        else { // write token word
+          UCharacterUtil.getNullTermByteSubString(s, m_tokenstring_, token);
+        }
+      }
+    }
+
+    if (s.length() == 0) {
+      return null;
+    }
+    return s.toString();
+  }
+  
+  /**
+  * Compares and retrieve character if name is found within the argument 
+  * group
+  * @param index index where the set of names reside in the group block
+  * @param length list of lengths of the strings
+  * @param name character name to search for
+  * @param choice of either 1.0 or the most current unicode name
+  * @return relative character in the group which matches name, otherwise if   
+  *         not found, -1 will be returned
+  */
+  private int getGroupChar(int index, char length[], String name, int choice)
+  { 
+    byte b = 0; 
+    char token;
+    int len;
+    int namelen = name.length();
+    int nindex;
+    int count;
+    
+    for (int result = 0; result <= LINES_PER_GROUP_; result ++) {
+      nindex = 0;
+      len = length[result];
+      
+      if (choice != UCharacterNameChoice.U_UNICODE_CHAR_NAME) {
+        int oldindex = index;
+        index += UCharacterUtil.skipByteSubString(m_groupstring_, index, len, 
+                                                  (byte)';');
+        len -= (index - oldindex);
+      }
+        
+      // number of tokens is > the length of the name
+      // write each letter directly, and write a token word per token
+      for (count = 0; count < len && nindex != -1 && nindex < namelen;) {
+        b = m_groupstring_[index + count];
+        count ++;
+           
+        if (b >= m_tokentable_.length) {
+          if (name.charAt(nindex ++) != (b & 0xFF)) {
+            nindex = -1;
+          }
+        }
+        else {
+          token = m_tokentable_[b & 0xFF];
+          if (token == 0xFFFE) {
+            // this is a lead byte for a double-byte token
+            token = m_tokentable_[b << 8 | 
+                                  (m_groupstring_[index + count] & 0x00ff)];
+            count ++;
+          }
+          if (token == 0xFFFF) {
+            if (name.charAt(nindex ++) != (b & 0xFF)) {
+              nindex = -1;
+            }
+          }
+          else {
+            // compare token with name
+            nindex = UCharacterUtil.compareNullTermByteSubString(name, 
+                     m_tokenstring_, nindex, token);
+          }
+        }
+      }
+
+      if (namelen == nindex && 
+          (count == len || m_groupstring_[index + count] == ';')) {
+        return result;
+          }
+        
+      index += len;
+    }
+    return -1;
+  }
+  
+  // protected inner class ===========================================
+  
+  /**
+  * Algorithmic name class
+  */
+  static final class AlgorithmName
+  {
+    // protected variables ===========================================
+    
+    /**
+    * Constant type value of the different AlgorithmName
+    */
+    protected static final int TYPE_0_ = 0;
+    protected static final int TYPE_1_ = 1;
+    
+    // private variables =============================================
+    
+    /**
+    * Algorithmic data information
+    */
+    private int m_rangestart_;
+    private int m_rangeend_;
+    private byte m_type_;
+    private byte m_variant_;
+    private char m_factor_[];
+    private String m_prefix_;
+    private byte m_factorstring_[];
+    
+    // constructor ===================================================
+    
+    /**
+    * Constructor
+    */
+    protected AlgorithmName()
+    {
+    }
+    
+    // protected methods =============================================
+    
+    /**
+    * Sets the information for accessing the algorithmic names
+    * @param rangestart starting code point that lies within this name group
+    * @param rangeend end code point that lies within this name group
+    * @param type algorithm type. There's 2 kinds of algorithmic type. First 
+    *        which uses code point as part of its name and the other uses 
+    *        variant postfix strings
+    * @param variant algorithmic variant
+    * @return true if values are valid
+    */ 
+    protected boolean setInfo(int rangestart, int rangeend, byte type,
+                              byte variant)
+    {
+      if (rangestart >= UCharacter.MIN_VALUE && rangestart <= rangeend &&
+          rangeend <= UCharacter.MAX_VALUE && 
+          (type == TYPE_0_ || type == TYPE_1_)) {
+        m_rangestart_ = rangestart;
+        m_rangeend_ = rangeend;
+        m_type_ = type;
+        m_variant_ = variant;
+        return true;
+      }
+      return false;
+    }
+    
+    /**
+    * Sets the factor data
+    * @param array of factor
+    * @return true if factors are valid
+    */
+    protected boolean setFactor(char factor[])
+    {
+      if (factor.length == m_variant_) {
+        m_factor_ = factor;
+        return true;
+      }
+      return false;
+    }
+    
+    /**
+    * Sets the name prefix
+    * @param prefix
+    * @return true if prefix is set
+    */
+    protected boolean setPrefix(String prefix)
+    {
+      if (prefix != null && prefix.length() > 0) {
+        m_prefix_ = prefix;
+        return true;
+      }
+      return false;
+    }
+    
+    /**
+    * Sets the variant factorized name data 
+    * @param string variant factorized name data
+    * @return true if values are set
+    */
+    protected boolean setFactorString(byte string[])
+    {
+      // factor and variant string can be empty for things like hanggul code
+      // points
+      m_factorstring_ = string;
+      return true;
+    }
+  
+    /**
+    * Checks if code point lies in Algorithm object at index
+    * @param ch code point 
+    */
+    protected boolean contains(int ch)
+    {
+      return m_rangestart_ <= ch && ch <= m_rangeend_;
+    }
+    
+    /**
+    * Appends algorithm name of code point into StringBuffer.
+    * Note this method does not check for validity of code point in Algorithm,
+    * result is undefined if code point does not belong in Algorithm.
+    * @param ch code point
+    * @param str StringBuffer to append to
+    */
+    protected void appendName(int ch, StringBuffer str)
+    {
+      str.append(m_prefix_);
+      switch (m_type_) 
+      {
+        case TYPE_0_: 
+          // prefix followed by hex digits indicating variants
+          str.append(Integer.toHexString(ch));
+          break;
+        case TYPE_1_: 
+          // prefix followed by factorized-elements
+          int offset = ch - m_rangestart_;
+          int indexes[] = new int[m_variant_];
+          int factor;
+          
+          // write elements according to the factors
+          // the factorized elements are determined by modulo arithmetic
+          for (int i = m_variant_ - 1; i > 0; i --) 
+          {
+            factor = m_factor_[i] & 0x00FF;
+            indexes[i] = offset % factor;
+            offset /= factor;
+          }
+          
+          // we don't need to calculate the last modulus because 
+          // start <= code <= end guarantees here that code <= factors[0]
+          indexes[0] = offset;
+
+          // joining up the factorized strings 
+          String s[] = getFactorString(indexes);
+          if (s != null && s.length > 0)
+          {
+            int size = s.length;
+            for (int i = 0; i < size; i ++)
+              str.append(s[i]);
+          }
+          break;
+      }
+    }
+    
+    /**
+    * Gets the character for the argument algorithmic name
+    * @return the algorithmic char or -1 otherwise.
+    */
+    protected int getAlgorithmChar(String name)
+    {
+      int prefixlen = m_prefix_.length();
+      if (name.length() < prefixlen || 
+          !m_prefix_.equals(name.substring(0, prefixlen))) {
+        return -1;
+      }
+        
+      switch (m_type_) 
+      {
+        case TYPE_0_ : 
+          try
+          {
+            int result = Integer.parseInt(name.substring(prefixlen), 16);
+            // does it fit into the range?
+            if (m_rangestart_ <= result && result <= m_rangeend_) {
+              return result;
+            }
+          }
+          catch (NumberFormatException e)
+          {
+          }
+          break;
+        case TYPE_1_ : 
+          // repetitative suffix name comparison done here
+          // offset is the character code - start
+          for (int ch = m_rangestart_; ch <= m_rangeend_; ch ++)
+          {
+            int offset = ch - m_rangestart_;
+            int indexes[] = new int[m_variant_];
+            int factor;
+      
+            // write elements according to the factors
+            // the factorized elements are determined by modulo arithmetic
+            for (int i = m_variant_ - 1; i > 0; i --) 
+            {
+              factor = m_factor_[i] & 0x00FF;
+              indexes[i] = offset % factor;
+              offset /= factor;
+            }
+            
+            // we don't need to calculate the last modulus because 
+            // start <= code <= end guarantees here that code <= factors[0]
+            indexes[0] = offset;
+
+            // joining up the factorized strings 
+            if (compareFactorString(indexes, name.substring(prefixlen))) {
+              return ch;
+            }
+          }
+      }
+
+      return -1;
+    }
+    
+    // private methods ================================================
+    
+    /**
+    * Gets the indexth string in each of the argument factor block
+    * @param index array with each index corresponding to each factor block
+    * @return array of indexth factor string in factor block
+    */
+    private String[] getFactorString(int index[])
+    {
+      int size = m_factor_.length;
+      if (index == null || index.length != size) {
+        return null;
+      }
+        
+      String result[] = new String[size];
+      StringBuffer str = new StringBuffer();
+      int count = 0;
+      int factor;
+      size --;
+      for (int i = 0; i <= size; i ++) {
+        factor = m_factor_[i];
+        count = UCharacterUtil.skipNullTermByteSubString(m_factorstring_, 
+                                                         count, index[i]);
+        count = UCharacterUtil.getNullTermByteSubString(str, m_factorstring_, 
+                                                        count);
+        if (i != size) {
+          count = UCharacterUtil.skipNullTermByteSubString(m_factorstring_, 
+                                                 count, factor - index[i] - 1);
+        }
+        result[i] = str.toString();
+        str.delete(0, str.length());
+      }
+      return result;
+    }
+    
+    /**
+    * Compares the indexth string in each of the argument factor block with
+    * the argument string
+    * @param index array with each index corresponding to each factor block
+    * @param str string to compare with
+    * @return true if string matches
+    */
+    private boolean compareFactorString(int index[], String str)
+    {
+      int size = m_factor_.length;
+      if (index == null || index.length != size)
+        return false;
+        
+      int count = 0;
+      int strcount = 0;
+      int factor;
+      size --;
+      for (int i = 0; i <= size; i ++)
+      {
+        factor = m_factor_[i];
+        count = UCharacterUtil.skipNullTermByteSubString(m_factorstring_, 
+                                                         count, index[i]);
+        strcount = UCharacterUtil.compareNullTermByteSubString(str, 
+                                             m_factorstring_, strcount, count);
+        if (strcount < 0) {
+          return false;
+        }
+          
+        if (i != size) {
+          count = UCharacterUtil.skipNullTermByteSubString(m_factorstring_, 
+                                                 count, factor - index[i]);
+        }
+      }
+      if (strcount != str.length()) {
+        return false;
+      }
+      return true;
+    }
+  }
+}
+
diff --git a/src/com/ibm/text/UCharacterPropertyDB.java b/src/com/ibm/text/UCharacterPropertyDB.java
new file mode 100755
index 0000000..c07d3b4
--- /dev/null
+++ b/src/com/ibm/text/UCharacterPropertyDB.java
@@ -0,0 +1,509 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: 
+*         /usr/cvs/icu4j/icu4j/src/com/ibm/icu/text/UCharacterPropertyDB.java $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+import java.io.InputStream;
+import java.io.DataInputStream;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+
+/**
+* Internal class used for Unicode character property database.
+* Database classes store binary data read from uprops.dat and unames for use. 
+* It does not have the capability to parse the data into more high-level 
+* information. It only returns bytes of information when required. 
+* Due to the form most commonly used for retrieval, array of char is used
+* to store the binary data
+* UCharacterPropertyDB also contains information on accessing indexes to 
+* significant points in the binary data.
+* Responsibility for molding the binary data into more meaning form lies on 
+* <a href=UCharacter.html>UCharacter</a> and 
+* <a href=UCharacterName.html>UCharacterName</a>.
+* Data populated by <a href=UGenPropReader.html>UGenPropReader</a>
+* @author Syn Wee Quek
+* @since oct1000
+* @see com.ibm.text.UGenReader
+*/
+
+final class  UCharacterPropertyDB extends UCharacterDB
+{
+  // protected variables ================================================
+  
+  /**
+  * Data type indicators
+  */
+  protected static final int EXC_UPPERCASE_ = 0;
+  protected static final int EXC_LOWERCASE_ = EXC_UPPERCASE_ + 1;
+  protected static final int EXC_TITLECASE_ = EXC_LOWERCASE_ + 1;
+  protected static final int EXC_DIGIT_VALUE_ = EXC_TITLECASE_ + 1;
+  protected static final int EXC_NUMERIC_VALUE_ = EXC_DIGIT_VALUE_ + 1;
+  protected static final int EXC_DENOMINATOR_VALUE_ = EXC_NUMERIC_VALUE_ + 1;
+  protected static final int EXC_MIRROR_MAPPING_ = EXC_DENOMINATOR_VALUE_ + 1;
+  protected static final int EXC_SPECIAL_CASING_ = EXC_MIRROR_MAPPING_ + 1;
+  // EXC_COMBINING_CLASS_ is not found in ICU
+  protected static final int EXC_COMBINING_CLASS_ = EXC_SPECIAL_CASING_ + 1;
+
+
+  // private variables ==================================================
+  
+  /**
+  * Number of bits to shift right to get the correct segment of bits out for 
+  * index to the unicode database
+  */
+  private int m_stage1shift_;
+  private int m_stage2shift_;
+
+  /**
+  * Mask for performing on the bit segment after shifting to get an index out 
+  * of it
+  */
+  private int m_stage2maskaftershift_;
+  private int m_stage3maskaftershift_;
+
+  /**
+  * Table for stages data block
+  */
+  private char m_stages_[];
+  
+  /**
+  * Character property table
+  */
+  private int m_property_[];
+  
+  /**
+  * Case table
+  */
+  private char m_case_[];
+  
+  /**
+  * Exception property table
+  */
+  private int m_exception_[];
+  
+  /**
+  * Default name of the datafile
+  */
+  private static final String DATA_FILE_NAME_ = "uprops.dat";
+  
+  /**
+  * Default buffer size of datafile
+  */
+  private static final int DATA_BUFFER_SIZE_ = 25000;
+  
+  /**
+  * This, from what i infer is the max size of the indicators used for the
+  * exception values.
+  * Number of bits in an 8-bit integer value 
+  */
+  private static final int EXC_GROUP_ = 8;
+  
+  /**
+  * Mask to get the group  
+  */
+  private static final int EXC_GROUP_MASK_ = 255;
+  
+  /**
+  * Mask to get the digit value in the exception result
+  */
+  private static final int EXC_DIGIT_MASK_ = 0xFFFF;
+  
+  /**
+  * Offset table for data in exception block.<br>
+  * Table formed by the number of bits used for the index, e.g. 0 = 0 bits, 
+  * 1 = 1 bits.
+  */
+  private static final byte FLAGS_OFFSET_[] = 
+  {
+    0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
+    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+    1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+    2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+    3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+    4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
+  };
+  
+  /**
+  * Numeric value shift
+  */
+  private static final int VALUE_SHIFT_ = 20;
+  
+  /**
+  * Exception test mask
+  */
+  private static final int EXCEPTION_MASK_ = 0x20;
+  
+  /**
+  * Mask to be applied after shifting to obtain an unsigned numeric value
+  */
+  private static final int UNSIGNED_VALUE_MASK_AFTER_SHIFT_ = 0x7FF;
+  
+  /**
+  * Mirror test mask
+  */
+  private static final int MIRROR_MASK_ = 0x800;
+  
+  /**
+  * Shift to get bidi bits
+  */
+  private static final int BIDI_SHIFT_ = 6;
+  
+  /**
+  * Mask to be applied after shifting to get bidi bits
+  */
+  private static final int BIDI_MASK_AFTER_SHIFT_ = 0x1F;
+  
+  /**
+  * To get the last 5 bits out from a data type
+  */
+  private static final int LAST_5_BIT_MASK_ = 0x1F;
+  
+  /**
+  * Shift 5 bits
+  */
+  private static final int SHIFT_5_ = 5;
+  
+  // constructor ======================================================
+  
+  /**
+  * Constructor
+  * @exception thrown when data reading fails or data corrupted
+  */
+  protected UCharacterPropertyDB() throws IOException
+  {
+    UGenPropReader reader = new UGenPropReader();
+    
+    InputStream i = getClass().getResourceAsStream(DATA_FILE_NAME_);
+    BufferedInputStream b = new BufferedInputStream(i, DATA_BUFFER_SIZE_);
+    DataInputStream d = new DataInputStream(b);
+    reader.read(d, this);
+    d.close(); 
+  }
+  
+  // public methods ===================================================
+  
+  /**
+   * toString method for printing
+   */
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer("Property block\n");
+    result.append(super.toString());
+    result.append("\nshift 1 : ");
+    result.append(m_stage1shift_);
+    result.append("\nshift 2 : ");
+    result.append(m_stage2shift_);
+    result.append("\nmask 2 : ");
+    result.append(m_stage2maskaftershift_);
+    result.append("\nmask 3 : ");
+    result.append(m_stage3maskaftershift_);
+    result.append("\nsize of stage data ");
+    result.append(m_stages_.length);
+    result.append("\nsize of property data ");
+    result.append(m_property_.length);
+    result.append("\nsize of exception data ");
+    result.append(m_exception_.length);
+    return result.toString();
+  }
+  
+  // protected methods ================================================
+  
+  /**
+  * Set stage shift bits, mask and property offset
+  * @param stage1shift count
+  * @param stage2shift count
+  * @param stage2mask count
+  * @param stage3mask count
+  * @param offset property block offset
+  * @return false if there is a data error
+  */
+  protected boolean setInfo(int stage1shift, int stage2shift, int stage2mask,
+                            int stage3mask)
+  {
+    if (stage1shift >= 0 && stage2shift >= 0 && stage2mask != 0 && 
+        stage3mask != 0)
+    {
+      m_stage1shift_ = stage1shift; 
+      m_stage2shift_ = stage2shift;
+      m_stage2maskaftershift_ = stage2mask;
+      m_stage3maskaftershift_ = stage3mask;
+      return true;
+    }
+    return false;
+  }
+  
+  /**
+  * Set the stages block data. The first UGenPropReader.INDEX_SIZE char of data 
+  * being some other data not used from hence onwards. Note the unused data
+  * resides since all indexes are relative to it.
+  * @param stages array containing the 2 stages of index pointing to property
+  *        data
+  * @return true if stages data is set successfully
+  */
+  protected boolean setStage(char stages[])
+  {
+    if (stages == null || stages.length <= 0) {
+      return false;
+    }
+    m_stages_ = stages;
+    return true;
+  }
+  
+  /**
+  * Set the property block data. 
+  * @param property array containing data regarding the character properties
+  * @return true if stages data is set successfully
+  */
+  protected boolean setProperty(int property[])
+  {
+    if (property == null || property.length <= 0) {
+      return false;
+    }
+    m_property_ = property;
+    return true;
+  }
+  
+  /**
+  * Set the case block data. 
+  * @param case array containing data regarding the case properties
+  * @return true if stages data is set successfully
+  */
+  protected boolean setCase(char casetable[])
+  {
+    if (casetable == null || casetable.length == 0) {
+      return false;
+    }
+    m_case_ = casetable;
+    return true;
+  }
+  
+  /**
+  * Set the exception block data. 
+  * @param exception array containing extra character properties not found in
+  *        property array
+  * @return true if stages data is set successfully
+  */
+  protected boolean setException(int exception[])
+  {
+    if (exception == null || exception.length <= 0) {
+      return false;
+    }
+    m_exception_ = exception;
+    return true;
+  }
+  
+  /**
+  * Gets the property value at the index
+  * @param ch code point whose property value is to be retrieved
+  * @return property value of code point
+  */
+  protected int getProperty(int ch)
+  {
+    // index of the first access to the database 
+    int index1 = ch >> m_stage1shift_;
+    // index of the second access to the database
+    int index2 = m_stages_[index1] + 
+                 ((ch >> m_stage2shift_) & m_stage2maskaftershift_);
+    // index of the third access to the database
+    int index3 = m_stages_[index2] + (ch & m_stage3maskaftershift_);
+    int propindex = m_stages_[index3];
+    return m_property_[propindex];
+  }
+  
+  /**
+  * Gets the upper case value at the index
+  * @param index of the case value to be retrieved
+  * @param buffer string buffer to add result to
+  */
+  protected void getUpperCase(int index, StringBuffer buffer)
+  {
+    int count = m_case_[index];
+    // last 5 bits of the first char in m_case_ gives the position of the 
+    // alternate uppercase characters
+    index += (count & LAST_5_BIT_MASK_) + 1;
+    count = (count >> SHIFT_5_) & LAST_5_BIT_MASK_;
+            
+    for (int j = 0; j < count; j ++) {
+      buffer.append(m_case_[index + j]);
+    }
+  }
+  
+  /**
+  * Gets the lower case value at the index
+  * @param index of the case value to be retrieved
+  * @param buffer string buffer to add result to
+  */
+  protected void getLowerCase(int index, StringBuffer buffer)
+  {
+    int count = m_case_[index] & LAST_5_BIT_MASK_;
+    // last 5 bits of the first char in m_case_ gives the size of the 
+    // lowercase characters
+    index ++;
+    for (int j = 0; j < count; j ++) {
+      buffer.append(m_case_[index + j]);
+    }
+  }
+  
+  /**
+  * Determines if the exception value passed in has the kind of information
+  * which the indicator wants, e.g if the exception value contains the digit
+  * value of the character
+  * @param index exception index
+  * @param indicator type indicator
+  * @return true if type value exist
+  */
+  protected boolean hasExceptionValue(int index, int indicator) 
+  {
+    return (m_exception_[index] & (1 << indicator)) != 0;
+  }
+  
+  /**
+  * Gets the exception value at the index, assuming that data type is 
+  * available. Result is undefined if data is not available. Use 
+  * hasExceptionValue() to determine data's availability.
+  * @param index 
+  * @param exception data type
+  * @return exception data type value at index
+  */
+  protected int getException(int index, int etype)
+  {
+    // contained in exception data
+    int evalue = m_exception_[index];
+    
+    switch (etype)
+    {
+      case EXC_COMBINING_CLASS_ :
+        return evalue;
+      default :
+        index ++;
+        // contained in the exception digit address
+        index = addExceptionOffset(evalue, etype, index);
+    }
+    return m_exception_[index];
+  }
+  
+  /**
+  * Returns a value indicating a character category from the argument property
+  * value
+  * @param unicode character property
+  * @return category
+  */
+  protected static int getPropType(int prop)
+  {
+    // Since character information data are packed together.
+	  // This is the category mask for getting the category information
+    int result = prop & LAST_5_BIT_MASK_;
+    return result;
+  }
+  
+  /**
+  * Determines if the argument props indicates that the exception block has 
+  * to be accessed for data
+  * @param props property value
+  * @return true if this is an exception indicator false otherwise
+  */
+  protected static boolean isExceptionIndicator(int props)
+  {
+    if ((props & EXCEPTION_MASK_) != 0) {
+      return true;
+    }
+    return false;
+  }
+  
+  /**
+  * Getting the exception index for argument property
+  * @param prop character property 
+  */
+  protected static int getExceptionIndex(int prop)
+  {
+    return (prop >> VALUE_SHIFT_) & UNSIGNED_VALUE_MASK_AFTER_SHIFT_;
+  }
+  
+  /**
+  * Getting the signed numeric value of a character embedded in the property
+  * argument
+  * @param prop the character
+  * @return signed numberic value
+  */
+  protected static int getSignedValue(int prop)
+  {
+    return (prop >> VALUE_SHIFT_);
+  }
+  
+  /**
+  * Getting the unsigned numeric value of a character embedded in the property
+  * argument
+  * @param prop the character
+  * @return unsigned numberic value
+  */
+  protected static int getUnsignedValue(int prop)
+  {
+    return (prop >> VALUE_SHIFT_) & UNSIGNED_VALUE_MASK_AFTER_SHIFT_;
+  }
+  
+  /**
+  * Checking if property indicates mirror element
+  * @param prop property value
+  * @return true if mirror indicator is set, false otherwise
+  */
+  protected static boolean isMirrored(int prop)
+  {
+    return (prop & MIRROR_MASK_) != 0;
+  }
+  
+  /**
+  * Getting the direction data in the property value
+  * @param prop property value
+  * @return direction value in property
+  */
+  protected static int getDirection(int prop)
+  {
+    return (prop >> BIDI_SHIFT_) & BIDI_MASK_AFTER_SHIFT_;
+  }
+  
+  // private methods ===============================================
+  
+  /**
+  * Getting the correct address for data in the exception value
+  * @param evalue exception value
+  * @param indicator type of data to retrieve
+  * @param address current address to move from
+  * @return the correct address
+  */
+  private int addExceptionOffset(int evalue, int indicator, int address) 
+  { 
+    int result = address;
+    if (indicator >= EXC_GROUP_) {
+      result += (FLAGS_OFFSET_[evalue & EXC_GROUP_MASK_] << 1); 
+    }
+      // evalue >>= EXC_GROUP_; 
+      // indicator -= EXC_GROUP_; 
+    else 
+    {
+      int mask = (1 << indicator) - 1;
+      result += FLAGS_OFFSET_[evalue & mask]; 
+    }
+    return result;
+  }
+}
diff --git a/src/com/ibm/text/UCharacterUtil.java b/src/com/ibm/text/UCharacterUtil.java
new file mode 100755
index 0000000..957d256
--- /dev/null
+++ b/src/com/ibm/text/UCharacterUtil.java
@@ -0,0 +1,271 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UCharacterUtil.java,v $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+package com.ibm.text;
+
+/**
+* Internal character utility class for simple data type conversion and String 
+* parsing functions. Does not have an analog in the JDK.
+* @author Syn Wee Quek
+* @since sep2900
+*/
+
+final class UCharacterUtil
+{
+  // constructor =====================================================
+  
+  /**
+  * private constructor to avoid initialisation
+  */
+  private UCharacterUtil()
+  {
+  }
+  
+  // protected methods ===============================================
+  
+  /**
+  * joining 2 chars to form an int
+  * @param msc most significant char
+  * @param lsc least significant char
+  * @return int form
+  */
+  protected static int toInt(char msc, char lsc)
+  {
+    return ((msc << 16) | lsc);
+  }
+   
+  /**
+  * converting first 2 bytes of a byte array into char
+  * if array size is < 2 then algorithmn will only return value == 1 byte
+  * @param bytes 2 byte argument
+  * @return char form
+  */
+  protected static char toChar(byte bytes[])
+  {
+    if (bytes == null || bytes.length == 0) {
+      return 0;
+    }
+    if (bytes.length == 1) {
+      return toChar(bytes[0]);
+    }
+      
+    char firstbyte = (char)(toChar(bytes[0]) << 8);
+    char secondbyte = toChar(bytes[1]);
+    
+    return (char)(firstbyte | secondbyte);
+  }
+   
+  /**
+  * converting 2 bytes into a char
+  * @param msb the most significant byte
+  * @param lsb the least significant byte
+  * @return char form
+  */
+  protected static char toChar(byte msb, byte lsb)
+  {
+    char firstbyte = (char)(toChar(msb) << 8);
+    char secondbyte = toChar(lsb);
+    
+    return (char)(firstbyte | secondbyte);
+  }
+  
+  /**
+  * converting first 4 bytes of a byte array into int
+  * if array size is < 4 then algorithmn will only return value == # bytes
+  * @param bytes 4 byte argument
+  * @return int form
+  */
+  protected static int toInt(byte bytes[])
+  {
+    if (bytes == null || bytes.length == 0)
+      return 0;
+    int size = bytes.length;
+    if (size > 4)
+      size = 4;
+    int result = 0;
+    for (int i = 0; i < size; i ++)
+      result = (result << 8) | (0x000000FF & bytes[i]);
+    return result;
+  }
+   
+  /**
+  * converting a byte into char
+  * @param onebyte 
+  * @return char form
+  */
+  protected static char toChar(byte onebyte)
+  {
+    char result = (char)(onebyte & 0x000000ff);
+    return result;
+  }
+   
+  /**
+  * converting a integer to a array of 4 characters where each character
+  * corresponds to its respective byte 
+  * @param i integer to be converted
+  * @return array of 4 characters
+  */
+  protected static char[] to4Char(int i)
+  {
+    char result[] = new char[4];
+    result[0] = (char)((i >> 24) & 0xFF);
+    result[1] = (char)((i & 0x00FF0000) >> 16);
+    result[2] = (char)((i & 0x0000FF00) >> 8);
+    result[3] = (char)(i & 0xFF);
+    return result;
+  }
+   
+  /**
+  * Retrieves a null terminated substring from an array of bytes.
+  * Substring is a set of non-zero bytes starting from argument start to the 
+  * next zero byte. If the first byte is a zero, the next byte will be taken as
+  * the first byte.
+  * @param str stringbuffer to store data in, data will be store with each
+  *            byte as a char
+  * @param array byte array
+  * @param index to start substring in byte count
+  * @return the end position of the substring within the character array
+  */
+  protected static int getNullTermByteSubString(StringBuffer str, byte[] array, 
+                                                int index)
+  {
+    byte b = 1;
+    
+    while (b != 0)
+    {
+      b = array[index];
+      if (b != 0) {
+        str.append((char)(b & 0x00FF));
+      }
+      index ++;
+    }
+    return index;
+  }
+   
+  /**
+  * Compares a null terminated substring from an array of bytes.
+  * Substring is a set of non-zero bytes starting from argument start to the 
+  * next zero byte. if the first byte is a zero, the next byte will be taken as
+  * the first byte.
+  * @param str string to compare
+  * @param array byte array
+  * @param strindex index within str to start comparing
+  * @param aindex array index to start in byte count
+  * @return the end position of the substring within str if matches otherwise 
+  *         a -1
+  */
+  protected static int compareNullTermByteSubString(String str, byte[] array, 
+                                                    int strindex, int aindex)
+  {
+    byte b = 1;
+    int length = str.length();
+    
+    while (b != 0)
+    {
+      b = array[aindex];  
+      aindex ++;
+      if (b == 0) {
+        break;
+      }
+      // if we have reached the end of the string and yet the array has not 
+      // reached the end of their substring yet, abort
+      if (strindex == length || (str.charAt(strindex) != (char)(b & 0xFF))) {
+        return -1;
+      }
+      strindex ++;
+    }
+    return strindex;
+  }
+   
+  /**
+  * Skip null terminated substrings from an array of bytes.
+  * Substring is a set of non-zero bytes starting from argument start to the 
+  * next zero byte. If the first byte is a zero, the next byte will be taken as
+  * the first byte.
+  * @param array byte array
+  * @param index to start substrings in byte count
+  * @param skipcount number of null terminated substrings to skip
+  * @return the end position of the substrings within the character array
+  */
+  protected static int skipNullTermByteSubString(byte[] array, int index, 
+                                                 int skipcount)
+  {
+    byte b;
+    for (int i = 0; i < skipcount; i ++)
+    {
+      b = 1;
+      while (b != 0)
+      {
+        b = array[index];
+        index ++;
+      }
+    }
+    return index;
+  }
+   
+  /**
+  * skip substrings from an array of characters, where each character is a set 
+  * of 2 bytes. substring is a set of non-zero bytes starting from argument 
+  * start to the byte of the argument value. skips up to a max number of 
+  * characters
+  * @param array byte array to parse
+  * @param index to start substrings in byte count
+  * @param length the max number of bytes to skip
+  * @param skipend value of byte to skip to
+  * @return the number of bytes skipped
+  */
+  protected static int skipByteSubString(byte[] array, int index, int length, 
+                                         byte skipend)
+  {
+    int result;
+    byte b;
+    
+    for (result = 0; result < length; result ++)
+    {
+      b = array[index + result];
+      if (b == skipend)
+      {
+        result ++;
+        break;
+      }
+    }
+    
+    return result;
+  }
+   
+  /**
+  * skip substrings from an array of characters, where each character is a set 
+  * of 2 bytes. substring is a set of non-zero bytes starting from argument 
+  * start to the byte of the argument value. 
+  * @param array byte array to parse
+  * @param index to start substrings in byte count
+  * @param skipend value of byte to skip to
+  * @return the number of bytes skipped
+  */
+  protected static int skipByteSubString(byte[] array, int index, byte skipend)
+  {
+    int result = 0;
+    byte b;
+    
+    while (true)
+    {
+      b = array[index + result];
+      result ++;
+      if (b == skipend) {
+        break;
+      }
+    }
+    
+    return result;
+  }
+}
+
diff --git a/src/com/ibm/text/UGenNameReader.java b/src/com/ibm/text/UGenNameReader.java
new file mode 100755
index 0000000..e1acfe2
--- /dev/null
+++ b/src/com/ibm/text/UGenNameReader.java
@@ -0,0 +1,287 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UGenNameReader.java,v $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+package com.ibm.text;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+
+/**
+* Internal reader class reading binary data from unames.dat created by ICU 
+* programs gennames. 
+* It arranges the header and index data apart into meaningful data before 
+* populating <a href=UCharacterNameDB.html>UCharacterNameDB</a>. UGenNameReader
+* does not have or require the ability to decipher the rest of the data in 
+* unames.dat and hence stores it as a block of data in an array of char in 
+* <a href=UCharacterNameDB.html>UCharacterNameDB</a>. The ability to decipher
+* the block of data lies in <a href=UCharacterName.html>UCharacterName</a>.
+* For more information about the format of unames.dat refer to
+* <a href=oss.software.ibm.com/icu4j/icu4jhtml/com/ibm/icu/text/readme.html>
+* ReadMe</a>.<br>
+* unames.dat which is in big-endian format is jared together with this package.
+* @author Syn Wee Quek
+* @since oct1000
+*/
+
+final class UGenNameReader extends UGenReader
+{
+  // private variables ===========================================
+  
+  /**
+  * Size of the group information block in number of char
+  */
+  private static final int GROUP_INFO_SIZE_ = 3;
+
+  /**
+  * Index of the offset information
+  */
+  private int m_tokenstringindex_;
+  private int m_groupindex_;
+  private int m_groupstringindex_;
+  private int m_algnamesindex_;
+  
+  /**
+  * Size of an algorithmic name information group
+  * start code point size + end code point size + type size + variant size + 
+  * size of data size
+  */
+  private static final int ALG_INFO_SIZE_ = 12;
+  
+  /**
+  * File format version and id that this class understands.
+  * No guarantees are made if a older version is used
+  */
+  private static final byte DATA_FORMAT_VERSION_[] = 
+                                  {(byte)0x1, (byte)0x0, (byte)0x0, (byte)0x0};
+  private static final byte DATA_FORMAT_ID_[] = {(byte)0x75, (byte)0x6E, 
+                                                 (byte)0x61, (byte)0x6D};
+                                                 
+  /**
+  * Corrupted error string
+  */
+  private static final String CORRUPTED_DATA_ERROR_ =
+                               "Data corrupted in character name data file";
+  
+  // constructor ==================================================
+  
+  /**
+  * Constructor
+  */
+  protected UGenNameReader()
+  {
+  }
+  
+  // protected methods ============================================
+  
+  /**
+  * Read and break up the stream of data passed in as arguments
+  * and fills up UCharacterNameDB.
+  * If unsuccessful false will be returned.
+  * @param input data input stream
+  * @param data instance of datablock
+  * @exception thrown when there's a data error.
+  */
+  protected void read(DataInputStream input, UCharacterNameDB data)
+                                                            throws IOException
+  {
+    if (!(super.read(input, data) && readIndex(input) && 
+          readToken(input, data) && readGroup(input, data) && 
+          readAlg(input, data))) {
+      throw new IOException(CORRUPTED_DATA_ERROR_);
+    }
+  }
+  
+  /**
+  * Checking the file for the correct format
+  * @param dataformatid
+  * @param dataformatversion
+  * @return true if the file format version is correct
+  */
+  protected boolean authenticate(byte dataformatid[],
+                                 byte dataformatversion[])
+  {
+    int size = DATA_FORMAT_ID_.length;
+    for (int i = 0; i < size; i ++) {
+      if (DATA_FORMAT_ID_[i] != dataformatid[i]) {
+        return false;
+      }
+    }
+    size = DATA_FORMAT_VERSION_.length;
+    for (int i = 0; i < size; i ++) {
+      if (DATA_FORMAT_VERSION_[i] != dataformatversion[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+  
+  /**
+  * Gets the size of the file id version
+  * @return size of file format version in bytes
+  */
+  protected int getFileFormatIDSize()
+  {
+    return DATA_FORMAT_ID_.length;
+  }
+  
+  /**
+  * Gets the size of the file format version
+  * @return size of file format version in bytes
+  */
+  protected int getFileFormatVersionSize()
+  {
+    return DATA_FORMAT_VERSION_.length;
+  }
+   
+  // private methods =========================================
+  
+  /**
+  * Read the indexes
+  * @param input data stream
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readIndex(DataInputStream input) throws IOException
+  {
+    m_tokenstringindex_ = input.readInt();
+    m_groupindex_ = input.readInt();
+    m_groupstringindex_ = input.readInt();
+    m_algnamesindex_ = input.readInt();
+    return true;
+  }
+  
+  /**
+  * Read the tokens
+  * @param input data stream
+  * @param data instance of UCharacterName to populate
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readToken(DataInputStream input, UCharacterNameDB data) 
+                  throws IOException
+  {
+    char count = input.readChar();
+    char token[] = new char[count];
+    for (char i = 0; i < count; i ++) {
+      token[i] = input.readChar();
+    }
+    
+    int size = m_groupindex_ - m_tokenstringindex_;
+    byte tokenstr[] = new byte[size];
+    input.readFully(tokenstr);
+    return data.setToken(token, tokenstr);
+  }
+  
+  /**
+  * Read the groups
+  * @param input data stream
+  * @param data instance of UCharacterName to populate
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readGroup(DataInputStream input, UCharacterNameDB data) 
+                  throws IOException
+  {
+    // reading the group information records
+    int count = input.readChar();
+    data.setGroupCountSize(count, GROUP_INFO_SIZE_);
+    count *= GROUP_INFO_SIZE_;
+    char group[] = new char[count];
+    for (int i = 0; i < count; i ++) {
+      group[i] = input.readChar();
+    }
+    
+    int size = m_algnamesindex_ - m_groupstringindex_;
+    byte groupstring[] = new byte[size];
+    input.readFully(groupstring);
+    return data.setGroup(group, groupstring);
+  }
+  
+  /**
+  * Read the algorithmic names
+  * @param input data stream
+  * @param data instance of UCharacterName to populate
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readAlg(DataInputStream input, UCharacterNameDB data) 
+                  throws IOException
+  {
+    int count = input.readInt();
+    UCharacterNameDB.AlgorithmName alg[] = 
+                                     new UCharacterNameDB.AlgorithmName[count];
+ 
+    for (int i = 0; i < count; i ++)
+    {
+      UCharacterNameDB.AlgorithmName an = readAlg(input);
+      if (an == null) {
+        return false;
+      }
+      alg[i] = an;
+    }
+    data.setAlgorithm(alg);
+    return true;
+  }
+  
+  /**
+  * Reads an individual record of AlgorithmNames
+  * @param input stream
+  * @return an instance of AlgorithNames if read is successful otherwise null
+  * @exception thrown when file read error occurs or data is corrupted
+  */
+  private UCharacterNameDB.AlgorithmName readAlg(DataInputStream input) 
+                                         throws IOException
+  {
+    UCharacterNameDB.AlgorithmName result = 
+                                          new UCharacterNameDB.AlgorithmName();
+    int rangestart = input.readInt();
+    int rangeend = input.readInt();
+    byte type = input.readByte();
+    byte variant = input.readByte();
+    if (!result.setInfo(rangestart, rangeend, type, variant)) {
+      return null;
+    }
+                     
+    int size = input.readChar();
+    if (type == UCharacterNameDB.AlgorithmName.TYPE_1_)
+    {
+      char factor[] = new char[variant];
+      for (int j = 0; j < variant; j ++) {
+        factor[j] = input.readChar();
+      }
+          
+      result.setFactor(factor);
+      size -= (variant << 1);
+    }
+      
+    StringBuffer prefix = new StringBuffer();
+    char c = (char)(input.readByte() & 0x00FF);
+    while (c != 0)
+    {
+      prefix.append(c);
+      c = (char)(input.readByte() & 0x00FF);
+    }
+    
+    result.setPrefix(prefix.toString());
+    
+    size -= (ALG_INFO_SIZE_ + prefix.length() + 1);
+    
+    if (size > 0)
+    {
+      byte string[] = new byte[size];
+      input.readFully(string);
+      result.setFactorString(string);
+    }
+    return result;
+  }
+}
+
diff --git a/src/com/ibm/text/UGenPropReader.java b/src/com/ibm/text/UGenPropReader.java
new file mode 100755
index 0000000..5ce721c
--- /dev/null
+++ b/src/com/ibm/text/UGenPropReader.java
@@ -0,0 +1,287 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UGenPropReader.java,v $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.5 $
+*
+*******************************************************************************
+*/
+package com.ibm.text;
+
+import java.io.DataInputStream;
+import java.util.Arrays;
+import java.io.IOException;
+
+/**
+* Internal reader class reading binary data from uprops.dat created by ICU 
+* programs genprops. 
+* It arranges the header and index data apart into meaningful data before 
+* populating <a href=UCharacterPropDB.html>UCharacterPropDB</a>. UGenPropReader
+* does not have or require the ability to decipher the rest of the data in 
+* uprop.dat and hence stores it as a block of data in an array of char in 
+* <a href=UCharacterPropDB.html>UCharacterPropDB</a>. The ability to decipher
+* the block of data lies in <a href=UCharacterProp.html>UCharacterProp</a>.
+* For more information about the format of uprops.dat refer to
+* <a href=oss.software.ibm.com/icu4j/icu4jhtml/com/ibm/icu/text/readme.html>
+* ReadMe</a>.<br>
+* uprops.dat which is in big-endian format is jared together with this package.
+* @author Syn Wee Quek
+* @since oct0200
+*/
+
+final class UGenPropReader extends UGenReader
+{
+  // private variables ===========================================
+  
+  /**
+  * Index size
+  */
+  private static final int INDEX_SIZE_ = 8;
+  
+  /**
+  * Elements in the index where addresses are in number of chars.
+  * Size is basically the count and does not depend on the type.
+  */
+  private char m_stage2indexsize_;
+  private char m_stage3indexsize_;
+  private int m_exception_;
+  private char m_stage3_;
+  private int m_prop_;
+  private int m_case_;
+  private char m_end_;
+                              
+  /**
+  * Size of actual number of bits used in surrogate unicode character
+  */
+  private static final int USED_SURROGATE_BIT_SIZE_ = 21;
+  
+  /**
+  * File format version that this class understands.
+  * No guarantees are made if a older version is used
+  */
+  private static final byte DATA_FORMAT_ID_[] = {(byte)0x55, (byte)0x50, 
+                                                 (byte)0x72, (byte)0x6F};
+  private static final byte DATA_FORMAT_VERSION_[] = 
+                                  {(byte)0x1, (byte)0x3, (byte)0x0, (byte)0x0};
+                                  
+  /**
+  * Corrupted error string
+  */
+  private static final String CORRUPTED_DATA_ERROR_ =
+                             "Data corrupted in character property data file";
+     
+  // constructor =============================================
+  
+  /**
+  * Constructor
+  */
+  protected UGenPropReader()
+  {
+  }
+ 
+  // protected methods ==================================================
+  
+  /**
+  * Read and fills up UCharacterPptyDB.
+  * If unsuccessful false will be returned
+  * @param input data stream
+  * @param data data instance
+  * @exception thrown when data reading fails
+  */
+  protected void read(DataInputStream input, UCharacterPropertyDB data)
+                                                          throws IOException
+  {
+    if (!(super.read(input, data) &&
+      // read the indexes
+      readIndex(input, data) && 
+      // read the stages block
+      readStage(input, data) && 
+      // read the property data
+      readProperty(input, data) &&
+      // read the exception data
+      readException(input, data) &&
+      // read the case data
+      readCase(input,data))) {
+      throw new IOException(CORRUPTED_DATA_ERROR_);   
+    }
+  }
+  
+  /**
+  * Checking the file for the correct format
+  * @param dataformatid
+  * @param dataformatversion
+  * @return true if the file format version is correct
+  */
+  protected boolean authenticate(byte dataformatid[],
+                                 byte dataformatversion[])
+  {
+    return Arrays.equals(DATA_FORMAT_ID_, dataformatid) &&
+           Arrays.equals(DATA_FORMAT_VERSION_, dataformatversion);
+  }
+  
+  /**
+  * Gets the size of the file format version
+  * @return size of file format version in bytes
+  */
+  protected int getFileFormatVersionSize()
+  {
+    return DATA_FORMAT_VERSION_.length;
+  }
+  
+  /**
+  * Gets the size of the file format id
+  * @return size of file format id in bytes
+  */
+  protected int getFileFormatIDSize()
+  {
+    return DATA_FORMAT_ID_.length;
+  }
+  
+  // private methods ===================================================
+  
+  /**
+  * Read the INDEX_SIZE_ indexes and updates the instance of 
+  * UCharacterPropertyDB with the processed shifts and mask
+  * @param input data stream
+  * @param data instance of UCharacterPropertyDB
+  * @return true if successfully read
+  * @exception thrown when there's an IOException
+  */
+  private boolean readIndex(DataInputStream input, UCharacterPropertyDB data)
+                                                          throws IOException
+  {
+    int count = INDEX_SIZE_;
+    m_stage2indexsize_ = input.readChar();
+    count --;
+    m_stage3indexsize_ = input.readChar();
+    count --;
+    m_exception_ = input.readChar();
+    count --;
+    m_stage3_ = input.readChar();
+    count --;
+    m_prop_ = input.readChar();
+    count --;
+    m_case_ = input.readChar();
+    count --;
+    m_end_ = input.readChar();
+    count --;
+    input.skipBytes(count << 1);
+        
+    return data.setInfo(m_stage3indexsize_ + m_stage2indexsize_,
+                        (int)m_stage3indexsize_,
+                        (1 << m_stage2indexsize_) - 1,
+                        (1 << m_stage3indexsize_) - 1);
+  }
+  
+  /**
+  * Read the stages block and updates the instance of UCharacterPropertyDB 
+  * with the stages data
+  * @param input data stream
+  * @param data instance of UCharacterPropertyDB
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readStage(DataInputStream input, UCharacterPropertyDB data) 
+                  throws IOException
+  {  
+    // size of the 3 stages
+    int stagesize = (m_prop_ << 1) - INDEX_SIZE_;
+      
+    char array[] = new char[stagesize];
+    
+    int max = 0;
+    int props = m_prop_ - INDEX_SIZE_;
+    // setting up the propery index for stage 1 to 3
+    for (int count = 0; count < stagesize; count ++)
+    {
+      array[count] = (char)(input.readChar() - INDEX_SIZE_);
+      // testing empty spaces
+      // if (max < array[count] && count < 0x440) {
+      //  max = array[count];
+      //}
+      
+      // setting up the property index for stage 3
+      // uprops.dat contain data that includes the address from the top of 
+      // index to property data. since the blocks are split up, so now i have 
+      // to subtract the excess address from it.
+      if (count >= m_stage3_ - INDEX_SIZE_) {
+        array[count] -= props;    
+      }
+    }
+    // System.out.println("\nstage 3 " + (int)m_stage3_);
+    // System.out.println("stage  2 top " + (max - 0x440 - INDEX_SIZE_));
+    // System.out.println("calculated stage 3 " + max);
+    
+    // setting up the stages block in the instance of UCharacterPropertyDB
+    return data.setStage(array);
+  }
+
+  /**
+  * Read the propery data block and updates the instance of 
+  * UCharacterPropertyDB with the data
+  * @param input data stream
+  * @param data instance of UCharacterPropertyDB
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readProperty(DataInputStream input, 
+                               UCharacterPropertyDB data) throws IOException
+  {  
+    // getting size of the property block
+    int size = m_exception_ - m_prop_;
+    int ppty[] = new int[size];
+    for (int i = 0; i < size; i ++) {
+      ppty[i] = input.readInt();     
+    }
+       
+    // setting up the property block in the instance of UCharacterPropertyDB
+    return data.setProperty(ppty);
+  }
+  
+  /**
+  * Read the character case data block and updates the instance of 
+  * UCharacterPropertyDB with the data
+  * @param input data stream
+  * @param data instance of UCharacterPropertyDB
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readCase(DataInputStream input, 
+                           UCharacterPropertyDB data) throws IOException
+  {  
+    // getting size of the case block
+    int size = (m_end_ - m_case_) << 1;
+    char casetable[] = new char[size];
+    for (int i = 0; i < size; i ++) {
+      casetable[i] = input.readChar();     
+    }
+         
+    // setting up the case block in the instance of UCharacterPropertyDB
+    return data.setCase(casetable);
+  }
+  
+  /**
+  * Read the exception data block and updates the instance of 
+  * UCharacterPropertyDB with the data
+  * @param input data stream
+  * @param data instance of UCharacterPropertyDB
+  * @return true if successfully read
+  * @exception thrown when data reading fails
+  */
+  private boolean readException(DataInputStream input, 
+                                UCharacterPropertyDB data) throws IOException
+  {  
+    int size = m_case_ - m_exception_;
+    int exception[] = new int[size];
+    for (int i = 0; i < size; i ++) {
+      exception[i] = input.readInt();
+    }
+       
+    // setting up the property block in the instance of UCharacterPropertyDB
+    return data.setException(exception);
+  }
+}
diff --git a/src/com/ibm/text/UGenReader.java b/src/com/ibm/text/UGenReader.java
new file mode 100755
index 0000000..1f8b54b
--- /dev/null
+++ b/src/com/ibm/text/UGenReader.java
@@ -0,0 +1,195 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UGenReader.java,v $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+package com.ibm.text;
+
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.util.Arrays;
+
+/**
+* Internal parent reader class reading binary header data from uprops.dat and 
+* unames.dat, created by ICU programs genprops and gennames. 
+* It arranges the header data into meaningful data before 
+* populating <a href=UCharacterDB.html>UCharacterDB</a>. It also authenticates
+* that the data files before proceeding on.
+* For more information about the format of uprops.dat refer to
+* <a href=oss.software.ibm.com/icu4j/icu4jhtml/com/ibm/icu/text/readme.html>
+* ReadMe</a>.<br>
+* uprops.data and unames.dat which are in big-endian format are jared together 
+* with this package.
+* @author Syn Wee Quek
+* @since oct1000
+*/
+
+abstract class UGenReader
+{
+  // private variables ===========================================
+  
+  /**
+  * Magic numbers to authenticate the data file
+  */
+  private static final byte MAGIC1 = (byte)0xda;
+  private static final byte MAGIC2 = (byte)0x27;
+  
+  /**
+  * Size of the field datasize and reservedcharacter
+  */
+  private static final int SKIP_BYTES_ = 4;
+  
+  /**
+  * File format authentication values
+  */
+  private static final byte BIG_ENDIAN_ = 1;
+  private static final byte CHAR_SET_ = 0;
+  private static final byte CHAR_SIZE_ = 2;
+  private static final byte UNICODE_VERSION_[] = {(byte)0x3, (byte)0x0, 
+                                                 (byte)0x0, (byte)0x0};
+  
+  // constructor =================================================
+  
+  /**
+  * Protected constructor
+  */
+  protected UGenReader()
+  {
+  }
+  
+  // protected methods ===========================================
+  
+  /**
+  * Read the data header and fills the relevant information into UCharacterDB.
+  * If unsuccessful false will be returned
+  * @param input data stream
+  * @param data data instance
+  * @return true if successfully filled
+  */
+  protected boolean read(DataInputStream input, UCharacterDB data)
+  {
+    try
+    {
+      char headersize = input.readChar();
+      headersize -= 2;
+      //reading the header format
+      byte magic1 = input.readByte();
+      headersize --;
+      byte magic2 = input.readByte();
+      headersize --;
+      input.skipBytes(SKIP_BYTES_);
+      headersize -= SKIP_BYTES_;
+      if (authenticate(magic1, magic2))
+      {
+        byte bigendian = input.readByte();
+        headersize --;
+        byte charset = input.readByte();
+        headersize --;
+        byte charsize = input.readByte();
+        headersize --;
+        byte reserved = input.readByte();
+        headersize --;
+        
+        byte dataformatid[] = new byte[getFileFormatIDSize()];
+        input.readFully(dataformatid);
+        headersize -= getFileFormatIDSize();
+        byte dataformatversion[] = new byte[getFileFormatVersionSize()];
+        input.readFully(dataformatversion);
+        headersize -= getFileFormatVersionSize();
+        byte unicodeversion[] = new byte[UNICODE_VERSION_.length];
+        input.readFully(unicodeversion);
+        headersize -= UNICODE_VERSION_.length;
+        input.skipBytes(headersize);
+        
+        if (authenticate(bigendian, charset, charsize, unicodeversion) && 
+            authenticate(dataformatid, dataformatversion)) {
+          return setUCharacterDB(data, unicodeversion);
+        }
+      }
+    } 
+    catch (Exception e) {
+    }
+    return false;
+  }
+  
+  /**
+  * Abstract method for verifying the file format version
+  * @param formatid file format identification
+  * @param formatversion file format version of input file to be verified
+  * @return true if the right file format version is used
+  */
+  protected abstract boolean authenticate(byte formatid[], 
+                                          byte formatversion[]);
+  
+  /**
+  * Abstract method for getting the size of the file format version
+  * @return size of file format version in bytes
+  */
+  protected abstract int getFileFormatVersionSize();
+  
+  /**
+  * Abstract method for getting the size of the file format id
+  * @return size of file format id in bytes
+  */
+  protected abstract int getFileFormatIDSize();
+  
+  // private methods ====================================================
+  
+  /**
+  * Checking the file against the magic numbers for authenticity
+  * @param m1 magic number 1
+  * @param m2 magic number 2
+  * @return true if the magic numbers are correct
+  */
+  private boolean authenticate(byte m1, byte m2)
+  {
+    if (m1 == MAGIC1 && m2 == MAGIC2) {
+      return true;
+    }
+    return false;
+  }
+  
+  /**
+  * Checking the file for the correct format
+  * @param bigendian
+  * @param charset
+  * @param charsize
+  * @param dataformatid
+  * @param dataformatversion
+  * @param unicodeversion
+  * @return true if the file is in bigendian, charset , charsize == 2, 
+  *         dataformatid 85.80.114.111, dataformatversion dependent on file,
+  *         and unicodeversion > 3.0.0.0
+  */
+  private boolean authenticate(byte bigendian, byte charset, byte charsize, 
+                               byte unicodeversion[])
+  {
+    if (bigendian != BIG_ENDIAN_ || charset != CHAR_SET_ || 
+        charsize != CHAR_SIZE_) {
+      return false;
+    }
+    return Arrays.equals(UNICODE_VERSION_, unicodeversion);
+  }
+  
+  /**
+  * Sets the relevant data into UCharacterDB
+  * @param data UCharacterDB instance to populate
+  * @param unicodeversion version number of the Unicode data information used
+  * @param formatversion icu version number of the uprops.dat and unames.dat
+  *        used
+  * @return true if operation is successful, false otherwise
+  */
+  private boolean setUCharacterDB(UCharacterDB data, byte[] unicodeversion)
+  {
+    boolean result = data.setUnicodeVersion(unicodeversion);
+    return result;
+  }
+}
+
diff --git a/src/com/ibm/text/UTF16.java b/src/com/ibm/text/UTF16.java
new file mode 100755
index 0000000..5aaee6e
--- /dev/null
+++ b/src/com/ibm/text/UTF16.java
@@ -0,0 +1,637 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and    *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UTF16.java,v $ 
+* $Date: 2001/03/23 19:51:38 $ 
+* $Revision: 1.3 $
+*
+*******************************************************************************
+*/
+
+package com.ibm.text;
+
+import com.ibm.text.UCharacter;
+
+/**
+* Standalone utility class providing UTF16 character conversions and indexing 
+* conversions.
+* <p>Code that uses strings alone rarely need modification. 
+* By design, UTF-16 does not allow overlap, so searching for strings is a safe 
+* operation. Similarly, concatenation is always safe. Substringing is safe if 
+* the start and end are both on UTF-32 boundaries. In normal code, the values 
+* for start and end are on those boundaries, since they arose from operations 
+* like searching. If not, the nearest UTF-32 boundaries can be determined 
+* using <code>bounds()</code>.
+* <strong>Examples:</strong>
+* <p>The following examples illustrate use of some of these methods. 
+* <pre>
+* // iteration forwards: Original
+* for (int i = 0; i < s.length(); ++i) {
+*   char ch = s.charAt(i);
+*   doSomethingWith(ch);
+* }
+*
+* // iteration forwards: Changes for UTF-32
+* int ch;
+* for (int i = 0; i < s.length(); i+=UTF16.getCharCount(ch)) {
+*   ch = UTF16.charAt(s,i);
+*   doSomethingWith(ch);
+* }
+*
+* // iteration backwards: Original
+* for (int i = s.length()-1; i >= 0; --i) {
+*   char ch = s.charAt(i);
+*   doSomethingWith(ch);
+* }
+*  
+* // iteration backwards: Changes for UTF-32
+* int ch;
+* for (int i = s.length()-1; i > 0; i-=UTF16.getCharCount(ch)) {
+*   ch = UTF16.charAt(s,i);
+*   doSomethingWith(ch);
+* }
+* </pre>
+* <strong>Notes:</strong>
+* <ul>
+*   <li>
+*   <strong>Naming:</strong> For clarity, High and Low surrogates are called 
+*   <code>Lead</code> and <code>Trail</code> in the API, which gives a better 
+*   sense of their ordering in a string. <code>offset16</code> and 
+*   <code>offset32</code> are used to distinguish offsets to UTF-16 
+*   boundaries vs offsets to UTF-32 boundaries. <code>int char32</code> is 
+*   used to contain UTF-32 characters, as opposed to <code>char16</code>, 
+*   which is a UTF-16 code unit.
+*   </li>
+*   <li>
+*   <strong>Roundtripping Offsets:</strong> You can always roundtrip from a 
+*   UTF-32 offset to a UTF-16 offset and back. Because of the difference in 
+*   structure, you can roundtrip from a UTF-16 offset to a UTF-32 offset and 
+*   back if and only if <code>bounds(string, offset16) != TRAIL</code>.
+*   </li>
+*   <li>
+*   <strong>Exceptions:</strong> The error checking will throw an exception 
+*   if indices are out of bounds. Other than than that, all methods will 
+*   behave reasonably, even if unmatched surrogates or out-of-bounds UTF-32 
+*   values are present. <code>UCharacter.isLegal()</code> can be used to check 
+*   for validity if desired.
+*   </li>
+*   <li>
+*   <strong>Unmatched Surrogates:</strong> If the string contains unmatched 
+*   surrogates, then these are counted as one UTF-32 value. This matches 
+*   their iteration behavior, which is vital. It also matches common display 
+*   practice as missing glyphs (see the Unicode Standard Section 5.4, 5.5).
+*   </li>
+*   <li>
+*     <strong>Optimization:</strong> The method implementations may need 
+*     optimization if the compiler doesn't fold static final methods. Since 
+*     surrogate pairs will form an exceeding small percentage of all the text 
+*     in the world, the singleton case should always be optimized for.
+*   </li>
+* </ul>
+* @author Mark Davis, with help from Markus Scherer
+* @since Nov2400
+*/
+
+public final class UTF16
+{
+  // public variables =============================================
+  
+  /**
+  * Value returned in <code><a href="#bounds(java.lang.String, int)">
+  * bounds()</a></code>.
+  * These values are chosen specifically so that it actually represents the 
+  * position of the character 
+  * [offset16 - (value >> 2), offset16 + (value & 3)]
+  */
+  public static final int SINGLE_CHAR_BOUNDARY = 1, 
+                          LEAD_SURROGATE_BOUNDARY = 2, 
+                          TRAIL_SURROGATE_BOUNDARY = 5;
+                          
+  // private variables ============================================
+	
+  /** 
+	* Lead surrogates values from LEAD_SURROGATE_MIN_VALUE_ to LEAD_SURROGATE_MAX_VALUE_
+	*/
+	private static final int LEAD_SURROGATE_MIN_VALUE_ = 0xD800;
+	private static final int LEAD_SURROGATE_MAX_VALUE_ = 0xDBFF;
+	
+	/**
+	* Surrogate lead offset, to be used when breaking up UTF32 into surrogate
+	* pair
+	*/
+	private static final int LEAD_SURROGATE_OFFSET_ = LEAD_SURROGATE_MIN_VALUE_ - 
+	    (UCharacter.SUPPLEMENTARY_MIN_VALUE >> UCharacter.LEAD_SURROGATE_SHIFT_);
+	
+	/** 
+	* Trail surrogates values from TRAIL_SURROGATE_MIN_VALUE_ to 
+	* TRAIL_SURROGATE_MAX_VALUE_
+	*/
+	private static final int TRAIL_SURROGATE_MIN_VALUE_ = 0xDC00; 
+	private static final int TRAIL_SURROGATE_MAX_VALUE_ = 0xDFFF;
+                          
+  // constructor ==================================================
+  
+  /**
+  * Prevent instance from being created.
+  */
+  private UTF16() 
+  {
+  }
+
+  // public method ================================================
+  
+  /**
+  * Extract a single UTF-32 value from a string.
+  * Used when iterating forwards or backwards (with 
+  * <code>UTF16.getCharCount()</code>, as well as random access. If a validity 
+  * check is required, use <code><a href="../UCharacter.html#isLegal(char)">
+  * UCharacter.isLegal()</a></code> on the return value.
+  * If the char retrieved is part of a surrogate pair, its supplementary 
+  * character will be returned. If a complete supplementary character is not
+  * found the incomplete character will be returned
+  * @param source array of UTF-16 chars
+  * @param offset16 UTF-16 offset to the start of the character.
+  * @return UTF-32 value for the UTF-32 value that contains the char at 
+  *         offset16, otherwise -1 if there's an error.
+  *         The boundaries of that codepoint are the same as in 
+  *         <code>bounds32()</code>. 
+  */
+  public static int charAt(String source, int offset16) 
+  {
+    if (offset16 < 0 || offset16 >= source.length())
+      return -1;
+      
+    char single = source.charAt(offset16);
+    if (!isSurrogate(single)) 
+      return single;
+
+    // Convert the UTF-16 surrogate pair if necessary.
+    // For simplicity in usage, and because the frequency of pairs is low,
+    // look both directions.
+            
+	  if (isLeadSurrogate(single)) 
+	  {
+	    ++ offset16;
+	    if (source.length() != offset16)
+	    {
+	      char trail = source.charAt(offset16);
+	      if (isTrailSurrogate(trail))
+	        return UCharacter.getRawSupplementary(single, trail);
+	    }
+	  } 
+	  else 
+	  { 
+	    -- offset16;
+	    if (offset16 >= 0)
+	    {
+	      // single is a trail surrogate so
+	      char lead = source.charAt(offset16);
+	      if (isLeadSurrogate(lead))
+	        return UCharacter.getRawSupplementary(lead, single);
+	    }
+	  } 
+	  return single; // return unmatched surrogate
+  }
+  
+  /**
+  * Extract a single UTF-32 value from a string.
+  * If a validity check is required, use 
+  * <code><a href="../UCharacter.html#isLegal(char)">
+  * UCharacter.isLegal()</a></code> on the return value.
+  * If tbe char retrieved is part of a surrogate pair, its supplementary 
+  * character will be returned. If a complete supplementary character is not
+  * found the incomplete character will be returned
+  * @return UTF-32 value for the UTF-32 value that contains the char at 
+  *         offset16. The boundaries of that codepoint are the same as in 
+  *         <code>bounds32()</code>. 
+  * @param source array of UTF-16 chars
+  * @param offset32 UTF-32 offset to the start of the character.
+  * @return a single UTF32 value, otherwise -1 if there's an error
+  */
+  public static int charAtCodePointOffset(String source, int offset32) 
+  {
+    int offset16 = findOffsetFromCodePoint(source, offset32);
+    return charAt(source, offset16);
+  }
+  
+  /**
+  * Determines how many chars this char32 requires.
+  * If a validity check is required, use <code>
+  * <a href="../UCharacter.html#isLegal(char)">isLegal()</a></code> on 
+  * char32 before calling.
+  * @param ch the input character.
+  * @return 2 if is in surrogate space, otherwise 1. 
+  */
+  public static int getCharCount(int char32) 
+  {
+    if (char32 < UCharacter.SUPPLEMENTARY_MIN_VALUE) {
+      return 1;
+    }
+    return 2;
+  }
+  
+  /**
+  * Returns the type of the boundaries around the char at offset16.
+  * Used for random access.
+  * @param source text to analyse
+  * @param offset16 UTF-16 offset
+  * @return <ul>
+  *           <li> SINGLE_CHAR_BOUNDARY : a single char; the bounds are 
+  *                                       [offset16, offset16+1]
+  *           <li> LEAD_SURROGATE_BOUNDARY : a surrogate pair starting at 
+  *                                          offset16; 
+  *                                          the bounds are 
+  *                                          [offset16, offset16 + 2]
+  *           <li> TRAIL_SURROGATE_BOUNDARY : a surrogate pair starting at 
+  *                                           offset16 - 1; the bounds are 
+  *                                           [offset16 - 1, offset16 + 1]
+  *         </ul>
+  *         For bit-twiddlers, the return values for these are chosen so that 
+  *         the boundaries can be gotten by:
+  *         [offset16 - (value >> 2), offset16 + (value & 3)].
+  * @exception StringIndexOutOfBoundsException if offset16 is out of bounds.
+  */
+  public static int bounds(String source, int offset16) 
+  {
+    char ch = source.charAt(offset16);
+    if (isSurrogate(ch))
+      if (isLeadSurrogate(ch)) 
+      {
+       if (++ offset16 < source.length() && 
+           isTrailSurrogate(source.charAt(offset16))) {
+         return LEAD_SURROGATE_BOUNDARY;
+       }
+      } 
+      else 
+        // isTrailSurrogate(ch), so
+        if (-- offset16 >= 0 && isLeadSurrogate(source.charAt(offset16))) {
+          return TRAIL_SURROGATE_BOUNDARY;
+        }
+          
+    return SINGLE_CHAR_BOUNDARY;
+  }
+  
+  /**
+  * Returns the type of the boundaries around the char at offset32.
+  * Used for random access.
+  * @param source text to analyse
+  * @param offset32 UTF-32 offset
+  * @return <ul>
+  *           <li> SINGLE_CHAR_BOUNDARY : a single char; the bounds are 
+  *                                       [offset32, offset32 + 1]
+  *           <li> LEAD_SURROGATE_BOUNDARY : a surrogate pair starting at 
+  *                                          offset32; 
+  *                                          the bounds are 
+  *                                          [offset32, offset32 + 2]
+  *           <li> TRAIL_SURROGATE_BOUNDARY : a surrogate pair starting at 
+  *                                           offset32 - 1; the bounds are 
+  *                                           [offset32 - 1, offset32 + 1]
+  *         </ul>
+  *         For bit-twiddlers, the return values for these are chosen so that 
+  *         the boundaries can be gotten by:
+  *         [offset32 - (value >> 2), offset32 + (value & 3)].
+  * @exception StringIndexOutOfBoundsException if offset32 is out of bounds.
+  */
+  public static int boundsAtCodePointOffset(String source, int offset32) 
+  {
+    int offset16 = findOffsetFromCodePoint(source, offset32);
+    return bounds(source, offset16);
+  }
+
+  /**
+  * Determines whether the <b>code value is a surrogate.
+  * @param ch the input character.
+  * @return true iff the input character is a surrogate.
+  */
+  public static boolean isSurrogate(char char16) 
+  {
+    return LEAD_SURROGATE_MIN_VALUE_ <= char16 && 
+           char16 <= TRAIL_SURROGATE_MAX_VALUE_;
+  }
+    
+  /**
+  * Determines whether the character is a trail surrogate.
+  * @param char16 the input character.
+  * @return true iff the input character is a trail surrogate.
+  */
+  public static boolean isTrailSurrogate(char char16) 
+  {
+    return (TRAIL_SURROGATE_MIN_VALUE_ <= char16 && 
+            char16 <= TRAIL_SURROGATE_MAX_VALUE_);
+  }
+    
+  /**
+  * Determines whether the character is a lead surrogate.
+  * @param char16 the input character.
+  * @return true iff the input character is a lead surrogate
+  */
+  public static boolean isLeadSurrogate(char char16) 
+  {
+    return LEAD_SURROGATE_MIN_VALUE_ <= char16 && 
+           char16 <= LEAD_SURROGATE_MAX_VALUE_;
+  }
+        
+  /**
+  * Returns the lead surrogate.
+  * If a validity check is required, use 
+  * <code><a href="../UCharacter.html#isLegal(char)">isLegal()</a></code> on 
+  * char32 before calling.
+  * @param char32 the input character.
+  * @return lead surrogate if the getCharCount(ch) is 2; <br>
+  *         and 0 otherwise (note: 0 is not a valid lead surrogate).
+  */
+  public static int getLeadSurrogate(int char32) 
+  {
+    if (char32 >= UCharacter.SUPPLEMENTARY_MIN_VALUE) {
+      return LEAD_SURROGATE_OFFSET_ + 
+             (char32 >> UCharacter.LEAD_SURROGATE_SHIFT_);
+    }
+        
+    return 0;
+  }
+    
+  /**
+  * Returns the trail surrogate.
+  * If a validity check is required, use 
+  * <code><a href="../UCharacter.html#isLegal(char)">isLegal()</a></code> on 
+  * char32 before calling.
+  * @param char32 the input character.
+  * @return the trail surrogate if the getCharCount(ch) is 2; <br>otherwise the 
+  *         character itself
+  */
+  public static int getTrailSurrogate(int char32) 
+  {
+    if (char32 >= UCharacter.SUPPLEMENTARY_MIN_VALUE) {
+      return TRAIL_SURROGATE_MIN_VALUE_ + (char32 & 
+             UCharacter.TRAIL_SURROGATE_MASK_);       
+    }
+      
+    return (char)char32;
+  }
+    
+  /**
+  * Convenience method corresponding to String.valueOf(char). Returns a one 
+  * or two char string containing the UTF-32 value in UTF16 format. If the 
+  * input value can't be converted, it substitutes REPLACEMENT_CHAR. If a 
+  * validity check is required, use 
+  * <a href="../UCharacter.html#isLegal(char)">isLegal()</a></code> on 
+  * char32 before calling.
+  * @param char32 the input character.
+  * @return string value of char32 in UTF16 format
+  */
+  public static String valueOf(int char32)
+  {
+    if (char32 < UCharacter.MIN_VALUE || char32 > UCharacter.MAX_VALUE) {
+      throw new IllegalArgumentException("Illegal codepoint");
+    }
+    if (char32 < UCharacter.SUPPLEMENTARY_MIN_VALUE) {
+      return String.valueOf((char)char32);
+    }
+    char str[] = new char[2];   
+    str[0] = (char)(LEAD_SURROGATE_OFFSET_ + 
+                    (char32 >> UCharacter.LEAD_SURROGATE_SHIFT_));
+    str[1] = (char)(TRAIL_SURROGATE_MIN_VALUE_ + 
+                    (char32 & UCharacter.TRAIL_SURROGATE_MASK_));
+    return String.valueOf(str);
+  }
+  
+  /**
+  * Returns the UTF-16 offset that corresponds to a UTF-32 offset. 
+  * Used for random access. See the <a name="_top_">class description</a> for 
+  * notes on roundtripping.
+  * @param source the UTF-16 string
+  * @param offset32 UTF-32 offset
+  * @return UTF-16 offset 
+  * @exception StringIndexOutOfBoundsException if offset32 is out of bounds.
+  */
+  public static int findOffsetFromCodePoint(String source, int offset32) 
+  {
+    char ch;
+    int size = source.length(),
+        result = 0,
+        count = offset32;
+    while (result < size && count > 0)
+    {
+      ch = source.charAt(result);
+      if (isLeadSurrogate(ch) && ((result + 1) < size) && 
+          isTrailSurrogate(source.charAt(result + 1))) {
+        result ++;
+      }
+        
+      count --;
+      result ++;
+    }
+    if (result >= size) {
+      throw new StringIndexOutOfBoundsException(offset32);
+    }
+    return result;
+  }
+  
+  /**
+  * Returns the UTF-32 offset corresponding to the first UTF-32 boundary at or 
+  * after the given UTF-16 offset. Used for random access. See the 
+  * <a name="_top_">class description</a> for notes on roundtripping.<br>
+  * <i>Note: If the UTF-16 offset is into the middle of a surrogate pair, then
+  * the UTF-32 offset of the <strong>lead</strong> of the pair is returned.
+  * </i>
+  * <p>
+  * To find the UTF-32 length of a string, use:
+  *   <pre>
+  *     len32 = getOffset32(source, source.length());
+  *   </pre>
+  * </p>
+  * <p>
+  * @param source text to analyse
+  * @param offset16 UTF-16 offset < source text length.
+  * @return UTF-32 offset
+  * @exception StringIndexOutOfBoundsException if offset16 is out of bounds.
+  */
+  public static int findCodePointOffset(String source, int offset16) 
+  {
+    if (offset16 >= source.length()) {
+      throw new StringIndexOutOfBoundsException(offset16);
+    }
+     
+    int result = 0;
+    char ch;
+    boolean hadLeadSurrogate = false;
+    
+    for (int i = 0; i < offset16; ++ i) 
+    {
+      ch = source.charAt(i);
+      if (hadLeadSurrogate && isTrailSurrogate(ch)) {
+        hadLeadSurrogate = false;           // count valid trail as zero
+      }
+      else
+      {
+        hadLeadSurrogate = isLeadSurrogate(ch);
+        ++ result;                          // count others as 1
+      }
+    }
+    // end of source being a supplementary character
+    // shift result back to the start of the supplementary character
+    if (hadLeadSurrogate && isTrailSurrogate(source.charAt(offset16))) {
+      result --;
+    }
+      
+    return result;
+  }
+
+  /**
+  * Append a single UTF-32 value to the end of a StringBuffer.
+  * If a validity check is required, use 
+  * <a href="../UCharacter.html#isLegal(char)">isLegal()</a></code> on 
+  * char32 before calling.
+  * @param char32 value to append. If out of bounds, substitutes 
+  *               UTF32.REPLACEMENT_CHAR.
+  * @return the updated StringBuffer
+  */
+  public static StringBuffer append(StringBuffer target, int char32)
+  {
+    // Check for irregular values
+    if (char32 < UCharacter.MIN_VALUE || char32 > UCharacter.MAX_VALUE) {
+      throw new IllegalArgumentException("Illegal codepoint");
+    }
+        
+    // Write the UTF-16 values
+    if (char32 >= UCharacter.SUPPLEMENTARY_MIN_VALUE) 
+    {
+      target.append((char)(LEAD_SURROGATE_OFFSET_ + 
+                    (char32 >> UCharacter.LEAD_SURROGATE_SHIFT_)));
+	    target.append((char)(TRAIL_SURROGATE_MIN_VALUE_ + 
+                    (char32 & UCharacter.TRAIL_SURROGATE_MASK_)));
+	  } 
+	  else {
+	    target.append((char)char32);
+	  }
+	  return target;
+	}
+    
+  /**
+  * Compare strings using Unicode code point order, instead of UTF-16 code 
+  * unit order.
+  */
+  public static final class StringComparator implements java.util.Comparator 
+  {
+    /**
+    * Standard String compare. Only one small section is different, marked in 
+    * the code.
+    */
+    public int compare(Object a, Object b) 
+    {
+	    if (a == b) {
+	      return 0;
+	    }
+      if (a == null) {
+        return -1;
+      }
+      if (b == null) {
+        return 1;
+      }
+          
+      String sa = (String) a;
+      String sb = (String) b;
+      int lena = sa.length();
+      int lenb = sb.length();
+      int len = lena;
+      if (len > lenb) {
+        len = lenb;
+      }
+        
+      for (int i = 0; i < len; ++i) 
+      {
+        char ca = sa.charAt(i);
+        char cb = sb.charAt(i);
+        if (ca == cb) {
+          continue; // skip remap if equal
+        }
+                
+        // start of only different section
+        // what this part does is to rearrange the characters 0xE000 to 0xFFFF
+        // to the region starting from 0xD800
+        // and shift the surrogate characters to above this region
+        if (ca >= LEAD_SURROGATE_MIN_VALUE_) {
+          ca += (ca <= TRAIL_SURROGATE_MAX_VALUE_) ? 0x2000 : -0x800;
+        }
+        if (cb >= LEAD_SURROGATE_MIN_VALUE_) {
+          cb += (cb <= TRAIL_SURROGATE_MAX_VALUE_) ? 0x2000 : -0x800;
+        }
+        // end of only different section
+                
+        if (ca < cb) {
+          return -1;
+        }
+          
+        return 1; // wasn't equal, so return 1
+      }
+      
+      if (lena < lenb) {
+        return -1;
+      }
+        
+      if (lena > lenb) {
+        return 1;
+      }
+            
+      return 0;
+    }
+  }	
+  
+  /**
+  * Number of codepoints in a UTF16 String
+  * @param s UTF16 string
+  * @return number of codepoint in string
+  */
+  public static int countCodePoint(String s)
+  {
+    return findCodePointOffset(s, s.length() - 1) + 1;
+  }
+  
+  /**
+  * Sets a code point into a UTF32 position.
+  * @param str stringbuffer
+  * @param offset32 UTF32 position to insert into
+  * @param char32 code point
+  */
+  public static void setCharAtCodePointOffset(StringBuffer str, int offset32, 
+                                       int char32)
+  {
+    int offset16 = findOffsetFromCodePoint(str.toString(), offset32);
+    setCharAt(str, offset16, char32);
+  }
+  
+  /**
+  * Set a code point into a UTF16 position.
+  * @param source stringbuffer
+  * @param offset16 UTF16 position to insert into
+  * @param char32 code point
+  */
+  public static void setCharAt(StringBuffer source, int offset16, int char32)
+  {
+    int count = 1;
+      
+    char single = source.charAt(offset16);
+    
+    if (isSurrogate(single)) 
+    {
+      // pairs of the surrogate with offset16 at the lead char found
+      if (isLeadSurrogate(single) && (source.length() > offset16 + 1) &&
+          isTrailSurrogate(source.charAt(offset16 + 1))) {
+	      count ++;
+	    }
+	    else {
+	      // pairs of the surrogate with offset16 at the trail char found
+	      if (isTrailSurrogate(single) && (offset16 > 0) &&
+	          isLeadSurrogate(source.charAt(offset16 -1)))
+	      {
+	        offset16 --;
+	        count ++;
+	      }
+	    }
+	  }
+	  source.replace(offset16, offset16 + count, valueOf(char32));
+	}
+}
diff --git a/src/com/ibm/text/UnicodeCompressor.java b/src/com/ibm/text/UnicodeCompressor.java
new file mode 100755
index 0000000..c68646e
--- /dev/null
+++ b/src/com/ibm/text/UnicodeCompressor.java
@@ -0,0 +1,1009 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UnicodeCompressor.java,v $ 
+ * $Date: 2000/03/10 04:07:25 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+/**
+* A compression engine implementing the Standard Compression Scheme
+* for Unicode (SCSU) as outlined in <A
+* HREF="http://www.unicode.org/unicode/reports/tr6">Unicode Technical
+* Report #6</A>.
+*
+* <P>The SCSU works by using dynamically positioned <EM>windows</EM>
+* consisting of 128 consecutive characters in Unicode.  During compression, 
+* characters within a window are encoded in the compressed stream as the bytes 
+* <TT>0x7F - 0xFF</TT>. The SCSU provides transparency for the characters 
+* (bytes) between <TT>U+0000 - U+00FF</TT>.  The SCSU approximates the 
+* storage size of traditional character sets, for example 1 byte per
+* character for ASCII or Latin-1 text, and 2 bytes per character for CJK
+* ideographs.</P>
+*
+* <P><STRONG>USAGE</STRONG></P>
+*
+* <P>The static methods on <TT>UnicodeCompressor</TT> may be used in a
+* straightforward manner to compress simple strings:</P>
+*
+* <PRE>
+*  String s = ... ; // get string from somewhere
+*  byte [] compressed = UnicodeCompressor.compress(s);
+* </PRE>
+*
+* <P>The static methods have a fairly large memory footprint.
+* For finer-grained control over memory usage, 
+* <TT>UnicodeCompressor</TT> offers more powerful APIs allowing
+* iterative compression:</P>
+*
+* <PRE>
+*  // Compress an array "chars" of length "len" using a buffer of 512 bytes
+*  // to the OutputStream "out"
+*
+*  UnicodeCompressor myCompressor         = new UnicodeCompressor();
+*  final static int  BUFSIZE              = 512;
+*  byte []           byteBuffer           = new byte [ BUFSIZE ];
+*  int               bytesWritten         = 0;
+*  int []            unicharsRead         = new int [1];
+*  int               totalCharsCompressed = 0;
+*  int               totalBytesWritten    = 0;
+*
+*  do {
+*    // do the compression
+*    bytesWritten = myCompressor.compress(chars, totalCharsCompressed, 
+*                                         len, unicharsRead,
+*                                         byteBuffer, 0, BUFSIZE);
+*
+*    // do something with the current set of bytes
+*    out.write(byteBuffer, 0, bytesWritten);
+*
+*    // update the no. of characters compressed
+*    totalCharsCompressed += unicharsRead[0];
+*
+*    // update the no. of bytes written
+*    totalBytesWritten += bytesWritten;
+*
+*  } while(totalCharsCompressed < len);
+*
+*  myCompressor.reset(); // reuse compressor
+* </PRE>
+*
+* @see UnicodeDecompressor
+*
+* @author Stephen F. Booth
+* @version 1.5 05 Aug 99
+* @version 1.4 21 Jul 99
+* @version 1.3 10 Mar 99
+* @version 1.2 08 Mar 99
+* @version 1.1 11 Jan 99 
+*/
+
+/*
+*
+* COMPRESSION STRATEGY
+*
+* Single Byte Mode
+*
+* There are three relevant cases.
+* If the character is in the current window or is Latin-1 (U+0000,
+* U+0009, U+000A, U+000D, U+0020 - U+007F), the character is placed
+* directly in the stream as a single byte.
+*
+*  1. Current character is in defined, inactive window.
+*  2. Current character is in undefined window.
+*  3. Current character is uncompressible Unicode (U+3400 - U+DFFF).
+* 
+*  1. Current character is in defined, inactive window
+*    A. Look ahead two characters
+*    B. If both following characters in same window as current character, 
+*       switch to defined window
+*    C. If only next character is in same window as current character, 
+*       quote defined window
+*    D. If neither of following characters is in same window as current, 
+*       quote defined window
+*   
+*  2. Current character is in undefined window
+*    A. Look ahead two characters
+*    B. If both following characters in same window as current character, 
+*       define new window
+*    C. If only next character in same window as current character, 
+*       switch to Unicode mode
+*       NOTE: This costs us one extra byte.  However, 
+*        since we have a limited number of windows to work with, it is 
+*        assumed the cost will pay off later in savings from a window with
+*        more characters in it.
+*    D. If neither of following characters in same window as current, 
+*       switch to Unicode mode.  Alternative to above: just quote 
+*       Unicode (same byte cost)
+*   
+*  3. Current character is uncompressible Unicode (U+3400 - U+DFFF)
+*    A. Look ahead one character
+*    B. If next character in non-compressible region, switch to 
+*       Unicode mode
+*    C. If next character not in non-compressible region, quote Unicode
+*   
+*
+* The following chart illustrates the bytes required for encoding characters
+* in each possible way
+*
+* 
+*                                   SINGLE BYTE MODE
+*                                       Characters in a row with same index
+*               tag encountered             1       2       3       4
+*               ---------------------------------------------------------------
+*               none (in current window)    1       2       3       4
+*
+*               quote Unicode               3       6       9       12
+*
+*   window not  switch to Unicode           3       5       7       9     byte
+*   defined     define window               3       4       5       6     cost
+*      
+*   window      switch to window            2       3       4       5
+*   defined     quote window                2       4       6       8
+*
+*  Unicode Mode
+*
+* There are two relevant cases.
+* If the character is in the non-compressible region
+* (U+3400 - U+DFFF), the character is simply written to the
+* stream as a pair of bytes.
+*
+* 1. Current character is in defined, inactive window.
+* 2. Current character is in undefined window.
+*
+*  1.Current character is in defined, inactive window
+*    A. Look ahead one character
+*    B. If next character has same index as current character, 
+*       switch to defined window (and switch to single-byte mode)
+*    C. If not, just put bytes in stream
+*   
+*  
+*  2. Current character is in undefined window
+*    A. Look ahead two characters
+*    B. If both in same window as current character, define window 
+*       (and switch to single-byte mode)
+*    C. If only next character in same window, just put bytes in stream
+*        NOTE: This costs us one extra byte.  However, 
+*        since we have a limited number of windows to work with, it is 
+*        assumed the cost will pay off later in savings from a window with 
+*        more characters in it.
+*    D. If neither in same window, put bytes in stream
+*   
+*
+* The following chart illustrates the bytes required for encoding characters
+* in each possible way
+*
+* 
+*                                   UNICODE MODE
+*                                       Characters in a row with same index
+*               tag encountered             1       2       3       4
+*               ---------------------------------------------------------------
+*               none                        2       4       6       8
+*
+*               quote Unicode               3       6       9       12
+*
+*   window not  define window               3       4       5       6     byte
+*   defined                                                               cost
+*   window      switch to window            2       3       4       5
+*   defined
+*/
+public final class UnicodeCompressor implements SCSU
+{
+    //==========================
+    // Class variables
+    //==========================
+
+    /** For quick identification of a byte as a single-byte mode tag */
+    private static boolean [] sSingleTagTable = {
+        // table generated by CompressionTableGenerator
+        false, true, true, true, true, true, true, true, true, false,
+	false, true, true, false, true, true, true, true, true, true,
+	true, true, true, true, true, true, true, true, true, true,
+	true, true, false, false, false, false, false, false,false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false   
+    };
+
+    /** For quick identification of a byte as a unicode mode tag */
+    private static boolean [] sUnicodeTagTable = {
+        // table generated by CompressionTableGenerator
+        false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false, false, false, false, false, false, false, true,
+	true, true, true, true, true, true, true, true, true, true,
+	true, true, true, true, true, true, true, true, false, false,
+	false, false, false, false, false, false, false, false, false,
+	false, false 
+    };
+
+    //==========================
+    // Instance variables
+    //==========================
+    
+    /** Alias to current dynamic window */
+    private int       fCurrentWindow   = 0;
+
+    /** Dynamic compression window offsets */
+    private int []    fOffsets         = new int [ NUMWINDOWS ];
+
+    /** Current compression mode */
+    private int       fMode            = SINGLEBYTEMODE;
+
+    /** Keeps count of times character indices are encountered */
+    private int []    fIndexCount      = new int [ MAXINDEX + 1 ];
+
+    /** The time stamps indicate when a window was last defined */
+    private int []    fTimeStamps      = new int [ NUMWINDOWS ];
+    
+    /** The current time stamp */
+    private int       fTimeStamp       = 0;
+    
+
+    /**
+     * Create a UnicodeCompressor.
+     * Sets all windows to their default values.
+     * @see #reset
+     */
+    public UnicodeCompressor()
+    {
+	reset();              // initialize to defaults
+    }
+
+    /**
+     * Compress a string into a byte array.
+     * @param buffer The string to compress.
+     * @return A byte array containing the compressed characters.
+     * @see #compress(char [], int, int)
+     */
+    public static byte [] compress(String buffer)
+    {
+	return compress(buffer.toCharArray(), 0, buffer.length());
+    }
+
+    /**
+     * Compress a Unicode character array into a byte array.
+     * @param buffer The character buffer to compress.
+     * @param start The start of the character run to compress.
+     * @param limit The limit of the character run to compress.
+     * @return A byte array containing the compressed characters.
+     * @see #compress(String)
+     */
+    public static byte [] compress(char [] buffer,
+				   int start,
+				   int limit)
+    {
+	UnicodeCompressor comp = new UnicodeCompressor();
+
+	// use a buffer that we know will never overflow
+	// in the worst case, each character will take 3 bytes
+	// to encode: UQU, hibyte, lobyte.  In this case, the
+	// compressed data will look like: SCU, UQU, hibyte, lobyte, ...
+	// buffer must be at least 4 bytes in size
+	int len = Math.max(4, 3 * (limit - start) + 1);
+	byte [] temp = new byte [len];
+
+	int byteCount = comp.compress(buffer, start, limit, null, 
+				      temp, 0, len);
+
+	byte [] result = new byte [byteCount];
+	System.arraycopy(temp, 0, result, 0, byteCount);
+	return result;
+    }
+
+    /**
+     * Compress a Unicode character array into a byte array.
+     *
+     * This function will only consume input that can be completely
+     * output.
+     *
+     * @param charBuffer The character buffer to compress.
+     * @param charBufferStart The start of the character run to compress.
+     * @param charBufferLimit The limit of the character run to compress.
+     * @param charsRead A one-element array.  If not null, on return 
+     * the number of characters read from charBuffer.
+     * @param byteBuffer A buffer to receive the compressed data.  This 
+     * buffer must be at minimum four bytes in size.
+     * @param byteBufferStart The starting offset to which to write 
+     * compressed data.
+     * @param byteBufferLimit The limiting offset for writing compressed data.
+     * @return The number of bytes written to byteBuffer.
+     */
+    public int compress(char []     charBuffer,
+			int         charBufferStart,
+			int         charBufferLimit,
+			int []      charsRead,
+			byte []     byteBuffer,
+			int         byteBufferStart,
+			int         byteBufferLimit)
+    {
+        // the current position in the target byte buffer
+	int     bytePos       = byteBufferStart;
+	
+	// the current position in the source unicode character buffer
+	int     ucPos         = charBufferStart;
+	
+	// the current unicode character from the source buffer
+	int     curUC         = INVALIDCHAR;
+	
+	// the index for the current character
+        int     curIndex      = -1;
+        
+	// look ahead
+	int     nextUC        = INVALIDCHAR;
+	int     forwardUC     = INVALIDCHAR;
+	
+        // temporary for window searching
+	int     whichWindow   = 0;
+	
+	// high and low bytes of the current unicode character
+	int     hiByte        = 0;
+	int     loByte        = 0;
+
+
+	// byteBuffer must be at least 4 bytes in size
+	if(byteBuffer.length < 4 || (byteBufferLimit - byteBufferStart) < 4)
+	    throw new IllegalArgumentException("byteBuffer.length < 4");
+
+    mainLoop:
+	while(ucPos < charBufferLimit && bytePos < byteBufferLimit) {
+	    switch(fMode) {
+		// main single byte mode compression loop
+	    case SINGLEBYTEMODE:
+	    singleByteModeLoop:
+	    while(ucPos < charBufferLimit && bytePos < byteBufferLimit) {
+		// get current char
+		curUC = charBuffer[ucPos++];
+
+		// get next char
+		if(ucPos < charBufferLimit) 
+		    nextUC = charBuffer[ucPos];
+		else
+		    nextUC = INVALIDCHAR;
+		
+		// chars less than 0x0080 (excluding tags) go straight
+		// in stream
+		if(curUC < 0x0080) {
+		    loByte = curUC & 0xFF;
+
+		    // we need to check and make sure we don't
+		    // accidentally write a single byte mode tag to
+		    // the stream unless it's quoted
+		    if(sSingleTagTable[loByte]) {
+                                // make sure there is enough room to
+                                // write both bytes if not, rewind the
+                                // source stream and break out
+			if( (bytePos + 1) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			// since we know the byte is less than 0x80, SQUOTE0
+			// will use static window 0, or ASCII
+			byteBuffer[bytePos++] = (byte) SQUOTE0;
+		    }
+
+		    byteBuffer[bytePos++] = (byte) loByte;
+		}
+
+		// if the char belongs to current window, convert it
+		// to a byte by adding the generic compression offset
+		// and subtracting the window's offset
+		else if(inDynamicWindow(curUC, fCurrentWindow) ) {
+		    byteBuffer[bytePos++] = (byte) 
+			(curUC - fOffsets[ fCurrentWindow ] 
+			 + COMPRESSIONOFFSET);
+		}
+		
+		// if char is not in compressible range, either switch to or
+		// quote from unicode
+		else if( ! isCompressible(curUC) ) {
+		    // only check next character if it is valid
+		    if(nextUC != INVALIDCHAR && isCompressible(nextUC)) {
+                                // make sure there is enough room to
+                                // write all three bytes if not,
+                                // rewind the source stream and break
+                                // out
+			if( (bytePos + 2) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			byteBuffer[bytePos++] = (byte) SQUOTEU;
+			byteBuffer[bytePos++] = (byte) (curUC >>> 8);
+			byteBuffer[bytePos++] = (byte) (curUC & 0xFF);
+		    }
+		    else {
+                                // make sure there is enough room to
+                                // write all four bytes if not, rewind
+                                // the source stream and break out
+			if((bytePos + 3) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			byteBuffer[bytePos++] = (byte) SCHANGEU;
+
+			hiByte = curUC >>> 8;
+			loByte = curUC & 0xFF;
+
+			if(sUnicodeTagTable[hiByte])
+			    // add quote Unicode tag
+			    byteBuffer[bytePos++]   = (byte) UQUOTEU;    
+
+			byteBuffer[bytePos++] = (byte) hiByte;
+			byteBuffer[bytePos++] = (byte) loByte;
+                
+			fMode = UNICODEMODE;
+			break singleByteModeLoop;
+		    }
+		}
+
+		// if the char is in a currently defined dynamic
+		// window, figure out which one, and either switch to
+		// it or quote from it
+		else if((whichWindow = findDynamicWindow(curUC)) 
+			!= INVALIDWINDOW ) {
+		    // look ahead
+		    if( (ucPos + 1) < charBufferLimit )
+			forwardUC = charBuffer[ucPos + 1];
+		    else
+			forwardUC = INVALIDCHAR;
+		    
+		    // all three chars in same window, switch to that
+		    // window inDynamicWindow will return false for
+		    // INVALIDCHAR
+		    if(inDynamicWindow(nextUC, whichWindow) 
+		       && inDynamicWindow(forwardUC, whichWindow)) {
+                                // make sure there is enough room to
+                                // write both bytes if not, rewind the
+                                // source stream and break out
+			if( (bytePos + 1) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			byteBuffer[bytePos++] = (byte)(SCHANGE0 + whichWindow);
+			byteBuffer[bytePos++] = (byte) 
+			    (curUC - fOffsets[whichWindow] 
+			     + COMPRESSIONOFFSET);
+			fTimeStamps [ whichWindow ] = ++fTimeStamp;
+			fCurrentWindow = whichWindow;
+		    }
+		    
+		    // either only next char or neither in same
+		    // window, so quote
+		    else {
+                                // make sure there is enough room to
+                                // write both bytes if not, rewind the
+                                // source stream and break out
+			if((bytePos + 1) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			byteBuffer[bytePos++] = (byte) (SQUOTE0 + whichWindow);
+			byteBuffer[bytePos++] = (byte) 
+			    (curUC - fOffsets[whichWindow] 
+			     + COMPRESSIONOFFSET);
+		    }
+		}
+
+		// if a static window is defined, and the following
+		// character is not in that static window, quote from
+		// the static window Note: to quote from a static
+		// window, don't add 0x80
+		else if((whichWindow = findStaticWindow(curUC)) 
+			!= INVALIDWINDOW 
+			&& ! inStaticWindow(nextUC, whichWindow) ) {
+		    // make sure there is enough room to write both
+		    // bytes if not, rewind the source stream and
+		    // break out
+		    if((bytePos + 1) >= byteBufferLimit) 
+			{ --ucPos; break mainLoop; }
+
+		    byteBuffer[bytePos++] = (byte) (SQUOTE0 + whichWindow);
+		    byteBuffer[bytePos++] = (byte) 
+			(curUC - sOffsets[whichWindow]);
+		}
+		
+		// if a window is not defined, decide if we want to
+		// define a new one or switch to unicode mode
+		else {
+		    // determine index for current char (char is compressible)
+		    curIndex = makeIndex(curUC);
+		    fIndexCount[curIndex]++;
+
+		    // look ahead
+		    if((ucPos + 1) < charBufferLimit)
+			forwardUC = charBuffer[ucPos + 1];
+		    else
+			forwardUC = INVALIDCHAR;
+
+		    // if we have encountered this index at least once
+		    // before, define a new window
+		    // OR
+		    // three chars in a row with same index, define a
+		    // new window (makeIndex will return RESERVEDINDEX
+		    // for INVALIDCHAR)
+		    if((fIndexCount[curIndex] > 1) ||
+		       (curIndex == makeIndex(nextUC) 
+			&& curIndex == makeIndex(forwardUC))) {
+			// make sure there is enough room to write all
+			// three bytes if not, rewind the source
+			// stream and break out
+			if( (bytePos + 2) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			// get least recently defined window
+			whichWindow = getLRDefinedWindow();
+
+			byteBuffer[bytePos++] = (byte)(SDEFINE0 + whichWindow);
+			byteBuffer[bytePos++] = (byte) curIndex;
+			byteBuffer[bytePos++] = (byte) 
+			    (curUC - sOffsetTable[curIndex] 
+			     + COMPRESSIONOFFSET);
+
+			fOffsets[whichWindow] = sOffsetTable[curIndex];
+			fCurrentWindow = whichWindow;
+			fTimeStamps [whichWindow] = ++fTimeStamp;
+		    }
+
+		    // only two chars in a row with same index, so
+		    // switch to unicode mode (makeIndex will return
+		    // RESERVEDINDEX for INVALIDCHAR)
+		    // OR
+		    // three chars have different indices, so switch
+		    // to unicode mode
+		    else {
+			// make sure there is enough room to write all
+			// four bytes if not, rewind the source stream
+			// and break out
+			if((bytePos + 3) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			byteBuffer[bytePos++] = (byte) SCHANGEU;
+
+			hiByte = curUC >>> 8;
+			loByte = curUC & 0xFF;
+
+			if(sUnicodeTagTable[hiByte])
+			    // add quote Unicode tag
+			    byteBuffer[bytePos++] = (byte) UQUOTEU; 
+
+			byteBuffer[bytePos++] = (byte) hiByte;
+			byteBuffer[bytePos++] = (byte) loByte;
+
+			fMode = UNICODEMODE;
+			break singleByteModeLoop;
+		    }
+		}
+	    }
+	    break;
+
+	    case UNICODEMODE:
+		// main unicode mode compression loop
+	    unicodeModeLoop:
+	    while(ucPos < charBufferLimit && bytePos < byteBufferLimit) {
+		// get current char
+		curUC = charBuffer[ucPos++];    
+
+		// get next char
+		if( ucPos < charBufferLimit )
+		    nextUC = charBuffer[ucPos];
+		else
+		    nextUC = INVALIDCHAR;
+
+		// if we have two uncompressible chars in a row,
+		// put the current char's bytes in the stream
+		if( ! isCompressible(curUC) 
+		    || (nextUC != INVALIDCHAR && ! isCompressible(nextUC))) {
+		    // make sure there is enough room to write all three bytes
+		    // if not, rewind the source stream and break out
+		    if( (bytePos + 2) >= byteBufferLimit) 
+			{ --ucPos; break mainLoop; }
+
+		    hiByte = curUC >>> 8;
+		    loByte = curUC & 0xFF;
+
+		    if(sUnicodeTagTable[ hiByte ])
+			// add quote Unicode tag
+			byteBuffer[bytePos++] = (byte) UQUOTEU;
+                
+		    byteBuffer[bytePos++] = (byte) hiByte;
+		    byteBuffer[bytePos++] = (byte) loByte;
+        }
+		
+		// bytes less than 0x80 can go straight in the stream,
+		// but in single-byte mode
+		else if(curUC < 0x0080) {
+		    loByte = curUC & 0xFF;
+
+		    // if two chars in a row below 0x80 and the
+		    // current char is not a single-byte mode tag,
+		    // switch to single-byte mode
+		    if(nextUC != INVALIDCHAR 
+		       && nextUC < 0x0080 && ! sSingleTagTable[ loByte ] ) {
+                                // make sure there is enough room to
+                                // write both bytes if not, rewind the
+                                // source stream and break out
+			if( (bytePos + 1) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			// use the last-active window
+			whichWindow = fCurrentWindow;
+			byteBuffer[bytePos++] = (byte)(UCHANGE0 + whichWindow);
+			byteBuffer[bytePos++] = (byte) loByte;
+
+			//fCurrentWindow = 0;
+			fTimeStamps [whichWindow] = ++fTimeStamp;
+			fMode = SINGLEBYTEMODE;
+			break unicodeModeLoop;
+		    }
+
+		    // otherwise, just write the bytes to the stream
+		    // (this will cover the case of only 1 char less than 0x80
+		    // and single-byte mode tags)
+		    else {
+                                // make sure there is enough room to
+                                // write both bytes if not, rewind the
+                                // source stream and break out
+			if((bytePos + 1) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			// since the character is less than 0x80, the
+			// high byte is always 0x00 - no need for
+			// (curUC >>> 8)
+			byteBuffer[bytePos++] = (byte) 0x00;
+			byteBuffer[bytePos++] = (byte) loByte;
+		    }
+		}
+
+		// figure out if the current char is in a defined window
+		else if((whichWindow = findDynamicWindow(curUC)) 
+			!= INVALIDWINDOW ) {
+		    // if two chars in a row in the same window,
+		    // switch to that window and go to single-byte mode
+		    // inDynamicWindow will return false for INVALIDCHAR
+		    if(inDynamicWindow(nextUC, whichWindow)) {
+                                // make sure there is enough room to
+                                // write both bytes if not, rewind the
+                                // source stream and break out
+			if((bytePos + 1) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			byteBuffer[bytePos++] = (byte)(UCHANGE0 + whichWindow);
+			byteBuffer[bytePos++] = (byte) 
+			    (curUC - fOffsets[whichWindow] 
+			     + COMPRESSIONOFFSET);
+
+			fTimeStamps [ whichWindow ] = ++fTimeStamp;
+			fCurrentWindow = whichWindow;
+			fMode = SINGLEBYTEMODE;
+			break unicodeModeLoop;
+		    }
+
+		    // otherwise, just quote the unicode for the char
+		    else {
+                                // make sure there is enough room to
+                                // write all three bytes if not,
+                                // rewind the source stream and break
+                                // out
+			if((bytePos + 2) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			hiByte = curUC >>> 8;
+			loByte = curUC & 0xFF;
+
+			if(sUnicodeTagTable[ hiByte ])
+			    // add quote Unicode tag
+			    byteBuffer[bytePos++] = (byte) UQUOTEU;
+
+			byteBuffer[bytePos++] = (byte) hiByte;
+			byteBuffer[bytePos++] = (byte) loByte;
+		    }
+		}
+		
+		// char is not in a defined window
+		else {
+		    // determine index for current char (char is compressible)
+		    curIndex = makeIndex(curUC);
+		    fIndexCount[curIndex]++;
+		    
+		    // look ahead
+		    if( (ucPos + 1) < charBufferLimit )
+			forwardUC = charBuffer[ucPos + 1];
+		    else
+			forwardUC = INVALIDCHAR;
+		    
+		    // if we have encountered this index at least once
+		    // before, define a new window for it that hasn't
+		    // previously been redefined
+		    // OR
+		    // if three chars in a row with the same index,
+		    // define a new window (makeIndex will return
+		    // RESERVEDINDEX for INVALIDCHAR)
+		    if((fIndexCount[curIndex] > 1) ||
+		       (curIndex == makeIndex(nextUC) 
+			&& curIndex == makeIndex(forwardUC))) {
+                                // make sure there is enough room to
+                                // write all three bytes if not,
+                                // rewind the source stream and break
+                                // out
+			if((bytePos + 2) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			// get least recently defined window
+			whichWindow = getLRDefinedWindow();
+
+			byteBuffer[bytePos++] = (byte)(UDEFINE0 + whichWindow);
+			byteBuffer[bytePos++] = (byte) curIndex;
+			byteBuffer[bytePos++] = (byte) 
+			    (curUC - sOffsetTable[curIndex] 
+			     + COMPRESSIONOFFSET);
+			
+			fOffsets[whichWindow] = sOffsetTable[curIndex];
+			fCurrentWindow = whichWindow;
+			fTimeStamps [whichWindow] = ++fTimeStamp;
+			fMode = SINGLEBYTEMODE;
+			break unicodeModeLoop;
+		    }
+		    
+		    // otherwise just quote the unicode, and save our
+		    // windows for longer runs
+		    else {
+                                // make sure there is enough room to
+                                // write all three bytes if not,
+                                // rewind the source stream and break
+                                // out
+			if((bytePos + 2) >= byteBufferLimit) 
+			    { --ucPos; break mainLoop; }
+
+			hiByte = curUC >>> 8;
+			loByte = curUC & 0xFF;
+
+			if(sUnicodeTagTable[ hiByte ])
+			    // add quote Unicode tag
+			    byteBuffer[bytePos++] = (byte) UQUOTEU;  
+			
+			byteBuffer[bytePos++] = (byte) hiByte;
+			byteBuffer[bytePos++] = (byte) loByte;
+		    }
+		}
+	    }
+	    }  // end switch
+	}
+	
+        // fill in output parameter
+	if(charsRead != null)
+	    charsRead [0] = (ucPos - charBufferStart);
+        
+        // return # of bytes written
+        return (bytePos - byteBufferStart);
+    }
+
+    /** Reset the compressor to its initial state. */
+    public void reset()
+    {
+	int i;
+
+        // reset dynamic windows
+        fOffsets[0] = 0x0080;    // Latin-1
+        fOffsets[1] = 0x00C0;    // Latin-1 Supplement + Latin Extended-A
+        fOffsets[2] = 0x0400;    // Cyrillic
+        fOffsets[3] = 0x0600;    // Arabic
+        fOffsets[4] = 0x0900;    // Devanagari
+        fOffsets[5] = 0x3040;    // Hiragana
+        fOffsets[6] = 0x30A0;    // Katakana
+        fOffsets[7] = 0xFF00;    // Fullwidth ASCII
+
+
+        // reset time stamps
+        for(i = 0; i < NUMWINDOWS; i++) {
+            fTimeStamps[i]          = 0;
+        }
+
+        // reset count of seen indices
+        for(i = 0; i <= MAXINDEX; i++ ) {
+            fIndexCount[i] = 0;
+        }
+
+        fTimeStamp      = 0;                // Reset current time stamp
+        fCurrentWindow  = 0;                // Make current window Latin-1
+        fMode           = SINGLEBYTEMODE;   // Always start in single-byte mode
+    }
+
+    //==========================
+    // Determine the index for a character
+    //==========================
+
+    /**
+     * Create the index value for a character.
+     * For more information on this function, refer to table X-3
+     * <A HREF="http://www.unicode.org/unicode/reports/tr6">UTR6</A>.
+     * @param c The character in question.
+     * @return An index for c
+     */
+    private static int makeIndex(int c)
+    {
+        // check the predefined indices
+        if(c >= 0x00C0 && c < 0x0140)
+            return LATININDEX;
+        else if(c >= 0x0250 && c < 0x02D0)
+            return IPAEXTENSIONINDEX;
+        else if(c >= 0x0370 && c < 0x03F0)
+            return GREEKINDEX;
+        else if(c >= 0x0530 && c < 0x0590)
+            return ARMENIANINDEX;
+        else if(c >= 0x3040 && c < 0x30A0)
+            return HIRAGANAINDEX;
+        else if(c >= 0x30A0 && c < 0x3120)
+            return KATAKANAINDEX;
+        else if(c >= 0xFF60 && c < 0xFF9F)
+            return HALFWIDTHKATAKANAINDEX;
+
+        // calculate index
+        else if(c >= 0x0080 && c < 0x3400)
+            return (c / 0x80) & 0xFF;
+        else if(c >= 0xE000 && c <= 0xFFFF)
+            return ((c - 0xAC00) / 0x80) & 0xFF;
+            
+        // should never happen
+        else {
+            return RESERVEDINDEX;
+        }
+    }
+
+    //==========================
+    // Check if a given character fits in a window
+    //==========================
+
+    /**
+    * Determine if a character is in a dynamic window.
+    * @param c The character to test
+    * @param whichWindow The dynamic window the test
+    * @return true if <TT>c</TT> will fit in <TT>whichWindow</TT>, 
+    * false otherwise.
+    */
+    private boolean inDynamicWindow(int c, 
+				    int whichWindow)
+    {
+        return (c >= fOffsets[whichWindow] 
+		&& c < (fOffsets[whichWindow] + 0x80));
+    }
+
+    /**
+     * Determine if a character is in a static window.
+    * @param c The character to test
+    * @param whichWindow The static window the test
+    * @return true if <TT>c</TT> will fit in <TT>whichWindow</TT>, 
+    * false otherwise.
+    */
+    private static boolean inStaticWindow(int c, 
+					  int whichWindow)
+    {
+        return (c >= sOffsets[whichWindow]
+		&& c < (sOffsets[whichWindow] + 0x80));
+    }
+
+    //==========================
+    // Check if a given character is compressible
+    //==========================
+
+    /**
+    * Determine if a character is compressible.
+    * @param c The character to test.
+    * @return true if the <TT>c</TT> is compressible, false otherwise.
+    */
+    private static boolean isCompressible(int c)
+    {
+        return (c < 0x3400 || c >= 0xE000);
+    }
+
+    //==========================
+    // Check if a window is defined for a given character
+    //==========================
+
+    /**
+     * Determine if a dynamic window for a certain character is defined
+     * @param c The character in question
+     * @return The dynamic window containing <TT>c</TT>, or 
+     * INVALIDWINDOW if not defined.
+     */
+    private int findDynamicWindow(int c)
+    {
+	// supposedly faster to count down
+        //for(int i = 0; i < NUMWINDOWS; i++) {
+	for(int i = NUMWINDOWS - 1; i >= 0; --i) {
+	    if(inDynamicWindow(c, i)) {
+		++fTimeStamps[i];
+                return i;
+	    }
+	}
+        
+        return INVALIDWINDOW;
+    }
+
+    /**
+     * Determine if a static window for a certain character is defined
+     * @param c The character in question
+     * @return The static window containing <TT>c</TT>, or 
+     * INVALIDWINDOW if not defined.
+     */
+    private static int findStaticWindow(int c)
+    {
+	// supposedly faster to count down
+        //for(int i = 0; i < NUMSTATICWINDOWS; i++) {
+	for(int i = NUMSTATICWINDOWS - 1; i >= 0; --i) {
+	    if(inStaticWindow(c, i)) {
+                return i;
+	    }
+	}
+	
+        return INVALIDWINDOW;
+    }
+    
+    //==========================
+    // Find the least-recently used window
+    //==========================
+
+    /** Find the least-recently defined window */
+    private int getLRDefinedWindow()
+    {
+        int leastRU         = Integer.MAX_VALUE;
+        int whichWindow     = INVALIDWINDOW;
+
+        // find least recently used window
+        // supposedly faster to count down
+        //for( int i = 0; i < NUMWINDOWS; i++ ) {
+        for(int i = NUMWINDOWS - 1; i >= 0; --i ) {
+            if( fTimeStamps[i] < leastRU ) {
+                leastRU   = fTimeStamps[i];
+                whichWindow  = i;
+            }
+        }
+
+        return whichWindow;
+    }
+    
+};
diff --git a/src/com/ibm/text/UnicodeDecompressor.java b/src/com/ibm/text/UnicodeDecompressor.java
new file mode 100755
index 0000000..bc19b03
--- /dev/null
+++ b/src/com/ibm/text/UnicodeDecompressor.java
@@ -0,0 +1,565 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UnicodeDecompressor.java,v $ 
+ * $Date: 2000/03/10 04:07:25 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+/**
+* A decompression engine implementing the Standard Compression Scheme
+* for Unicode (SCSU) as outlined in <A
+* HREF="http://www.unicode.org/unicode/reports/tr6">Unicode Technical
+* Report #6</A>.
+*
+* <P><STRONG>USAGE</STRONG></P>
+*
+* <P>The static methods on <TT>UnicodeDecompressor</TT> may be used in a
+* straightforward manner to decompress simple strings:</P>
+*
+* <PRE>
+*  byte [] compressed = ... ; // get compressed bytes from somewhere
+*  String result = UnicodeDecompressor.decompress(compressed);
+* </PRE>
+*
+* <P>The static methods have a fairly large memory footprint.
+* For finer-grained control over memory usage, 
+* <TT>UnicodeDecompressor</TT> offers more powerful APIs allowing
+* iterative decompression:</P>
+*
+* <PRE>
+*  // Decompress an array "bytes" of length "len" using a buffer of 512 chars
+*  // to the Writer "out"
+*
+*  UnicodeDecompressor myDecompressor         = new UnicodeDecompressor();
+*  final static int    BUFSIZE                = 512;
+*  char []             charBuffer             = new char [ BUFSIZE ];
+*  int                 charsWritten           = 0;
+*  int []              bytesRead              = new int [1];
+*  int                 totalBytesDecompressed = 0;
+*  int                 totalCharsWritten      = 0;
+*
+*  do {
+*    // do the decompression
+*    charsWritten = myDecompressor.decompress(bytes, totalBytesDecompressed, 
+*                                             len, bytesRead,
+*                                             charBuffer, 0, BUFSIZE);
+*
+*    // do something with the current set of chars
+*    out.write(charBuffer, 0, charsWritten);
+*
+*    // update the no. of bytes decompressed
+*    totalBytesDecompressed += bytesRead[0];
+*
+*    // update the no. of chars written
+*    totalCharsWritten += charsWritten;
+*
+*  } while(totalBytesDecompressed < len);
+*
+*  myDecompressor.reset(); // reuse decompressor
+* </PRE>
+*
+* <P>Decompression is performed according to the standard set forth in 
+* <A HREF="http://www.unicode.org/unicode/reports/tr6">Unicode Technical 
+* Report #6</A></P>
+*
+* @see UnicodeCompressor
+*
+* @author Stephen F. Booth
+* @version 1.5 05 Aug 99
+* @version 1.4 21 Jul 99
+* @version 1.3 10 Mar 99
+* @version 1.2 08 Mar 99
+* @version 1.1 11 Jan 99 
+*/
+public final class UnicodeDecompressor implements SCSU
+{
+    //==========================
+    // Instance variables
+    //==========================
+    
+    /** Alias to current dynamic window */
+    private int       fCurrentWindow   = 0;
+
+    /** Dynamic compression window offsets */
+    private int []    fOffsets         = new int [ NUMWINDOWS ];
+
+    /** Current compression mode */
+    private int       fMode            = SINGLEBYTEMODE;
+
+    /** Size of our internal buffer */
+    private final static int BUFSIZE   = 3;
+
+    /** Internal buffer for saving state */
+    private byte []   fBuffer          = new byte [BUFSIZE];
+
+    /** Number of characters in our internal buffer */
+    private int       fBufferLength    = 0;
+    
+
+    /**
+     * Create a UnicodeDecompressor.
+     * Sets all windows to their default values.
+     * @see #reset
+     */
+    public UnicodeDecompressor()
+    {
+	reset();              // initialize to defaults
+    }
+
+    /**
+     * Decompress a byte array into a String.
+     * @param buffer The byte array to decompress.
+     * @return A String containing the decompressed characters.
+     * @see #decompress(byte [], int, int)
+     */
+    public static String decompress(byte [] buffer)
+    {
+	char [] buf = decompress(buffer, 0, buffer.length);
+	return new String(buf);
+    }
+
+    /**
+     * Decompress a byte array into a Unicode character array.
+     * @param buffer The byte array to decompress.
+     * @param start The start of the byte run to decompress.
+     * @param limit The limit of the byte run to decompress.
+     * @return A character array containing the decompressed bytes.
+     * @see #decompress(byte [])
+     */
+    public static char [] decompress(byte [] buffer,
+				     int start,
+				     int limit)
+    {
+	UnicodeDecompressor comp = new UnicodeDecompressor();
+
+	// use a buffer we know will never overflow
+	// in the worst case, each byte will decompress
+	// to a surrogate pair (buffer must be at least 2 chars)
+	int len = Math.max(2, 2 * (limit - start));
+	char [] temp = new char [len];
+
+	int charCount = comp.decompress(buffer, start, limit, null, 
+					temp, 0, len);
+
+	char [] result = new char [charCount];
+	System.arraycopy(temp, 0, result, 0, charCount);
+	return result;
+    }
+    
+    /**
+     * Decompress a byte array into a Unicode character array.
+     *
+     * This function will either completely fill the output buffer, 
+     * or consume the entire input.  
+     *
+     * @param byteBuffer The byte buffer to decompress.
+     * @param byteBufferStart The start of the byte run to decompress.
+     * @param byteBufferLimit The limit of the byte run to decompress.
+     * @param bytesRead A one-element array.  If not null, on return
+     * the number of bytes read from byteBuffer.
+     * @param charBuffer A buffer to receive the decompressed data. 
+     * This buffer must be at minimum two characters in size.
+     * @param charBufferStart The starting offset to which to write 
+     * decompressed data.
+     * @param charBufferLimit The limiting offset for writing 
+     * decompressed data.
+     * @return The number of Unicode characters written to charBuffer.
+     */
+    public int decompress(byte []    byteBuffer,
+			  int        byteBufferStart,
+			  int        byteBufferLimit,
+			  int []     bytesRead,
+			  char []    charBuffer,
+			  int        charBufferStart,
+			  int        charBufferLimit)
+    {
+	// the current position in the source byte buffer
+	int bytePos      = byteBufferStart;
+	
+	// the current position in the target char buffer
+	int ucPos        = charBufferStart;
+        
+        // the current byte from the source buffer
+	int aByte        = 0x00;
+
+
+	// charBuffer must be at least 2 chars in size
+	if(charBuffer.length < 2 || (charBufferLimit - charBufferStart) < 2)
+	    throw new IllegalArgumentException("charBuffer.length < 2");
+	
+	// if our internal buffer isn't empty, flush its contents
+	// to the output buffer before doing any more decompression
+	if(fBufferLength > 0) {
+
+	    int newBytes = 0;
+
+	    // fill the buffer completely, to guarantee one full character
+	    if(fBufferLength != BUFSIZE) {
+		newBytes = fBuffer.length - fBufferLength;
+
+		// verify there are newBytes bytes in byteBuffer
+		if(byteBufferLimit - byteBufferStart < newBytes)
+		    newBytes = byteBufferLimit - byteBufferStart;
+
+		System.arraycopy(byteBuffer, byteBufferStart, 
+				 fBuffer, fBufferLength, newBytes);
+	    }
+
+	    // reset buffer length to 0 before recursive call
+	    fBufferLength = 0;
+
+	    // call self recursively to decompress the buffer
+	    int count = decompress(fBuffer, 0, fBuffer.length, null,
+				   charBuffer, charBufferStart, 
+				   charBufferLimit);
+
+	    // update the positions into the arrays
+	    ucPos += count;
+	    bytePos += newBytes;
+	}
+
+        // the main decompression loop
+    mainLoop:
+	while(bytePos < byteBufferLimit && ucPos < charBufferLimit) {
+	    switch(fMode) {  
+	    case SINGLEBYTEMODE:
+		// single-byte mode decompression loop
+	    singleByteModeLoop:
+	    while(bytePos < byteBufferLimit && ucPos < charBufferLimit) {
+		aByte = byteBuffer[bytePos++] & 0xFF;
+		switch(aByte) {
+		    // All bytes from 0x80 through 0xFF are remapped
+		    // to chars or surrogate pairs according to the
+		    // currently active window
+		case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: 
+		case 0x85: case 0x86: case 0x87: case 0x88: case 0x89:
+		case 0x8A: case 0x8B: case 0x8C: case 0x8D: case 0x8E:
+		case 0x8F: case 0x90: case 0x91: case 0x92: case 0x93:
+		case 0x94: case 0x95: case 0x96: case 0x97: case 0x98:
+		case 0x99: case 0x9A: case 0x9B: case 0x9C: case 0x9D:
+		case 0x9E: case 0x9F: case 0xA0: case 0xA1: case 0xA2:
+		case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7:
+		case 0xA8: case 0xA9: case 0xAA: case 0xAB: case 0xAC:
+		case 0xAD: case 0xAE: case 0xAF: case 0xB0: case 0xB1:
+		case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6:
+		case 0xB7: case 0xB8: case 0xB9: case 0xBA: case 0xBB:
+		case 0xBC: case 0xBD: case 0xBE: case 0xBF: case 0xC0:
+		case 0xC1: case 0xC2: case 0xC3: case 0xC4: case 0xC5:
+		case 0xC6: case 0xC7: case 0xC8: case 0xC9: case 0xCA:
+		case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF:
+		case 0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4:
+		case 0xD5: case 0xD6: case 0xD7: case 0xD8: case 0xD9:
+		case 0xDA: case 0xDB: case 0xDC: case 0xDD: case 0xDE:
+		case 0xDF: case 0xE0: case 0xE1: case 0xE2: case 0xE3:
+		case 0xE4: case 0xE5: case 0xE6: case 0xE7: case 0xE8:
+		case 0xE9: case 0xEA: case 0xEB: case 0xEC: case 0xED:
+		case 0xEE: case 0xEF: case 0xF0: case 0xF1: case 0xF2:
+		case 0xF3: case 0xF4: case 0xF5: case 0xF6: case 0xF7:
+		case 0xF8: case 0xF9: case 0xFA: case 0xFB: case 0xFC:
+		case 0xFD: case 0xFE: case 0xFF: 
+		    // For offsets <= 0xFFFF, convert to a single char
+		    // by adding the window's offset and subtracting
+		    // the generic compression offset
+		    if(fOffsets[ fCurrentWindow ] <= 0xFFFF) {
+			charBuffer[ucPos++] = (char) 
+			    (aByte + fOffsets[ fCurrentWindow ] 
+			     - COMPRESSIONOFFSET);
+		    }
+		    // For offsets > 0x10000, convert to a surrogate pair by 
+		    // normBase = window's offset - 0x10000
+		    // high surr. = 0xD800 + (normBase >> 10)
+		    // low  surr. = 0xDC00 + (normBase & 0x3FF) + (byte & 0x7F)
+		    else {
+			// make sure there is enough room to write
+			// both characters 
+			// if not, save state and break out
+			if((ucPos + 1) >= charBufferLimit) {
+			    --bytePos;
+			    System.arraycopy(byteBuffer, bytePos,
+					     fBuffer, 0, 
+					     byteBufferLimit - bytePos);
+			    fBufferLength = byteBufferLimit - bytePos;
+			    bytePos += fBufferLength;
+			    break mainLoop; 
+			}
+			
+			int normalizedBase = fOffsets[ fCurrentWindow ] 
+			    - 0x10000;
+			charBuffer[ucPos++] = (char) 
+			    (0xD800 + (normalizedBase >> 10));
+			charBuffer[ucPos++] = (char) 
+			    (0xDC00 + (normalizedBase & 0x3FF)+(aByte & 0x7F));
+		    }
+		    break;
+
+		    // bytes from 0x20 through 0x7F are treated as ASCII and
+		    // are remapped to chars by padding the high byte
+		    // (this is the same as quoting from static window 0)
+		    // NUL (0x00), HT (0x09), CR (0x0A), LF (0x0D) 
+		    // are treated as ASCII as well
+		case 0x00: case 0x09: case 0x0A: case 0x0D:
+		case 0x20: case 0x21: case 0x22: case 0x23: case 0x24:
+		case 0x25: case 0x26: case 0x27: case 0x28: case 0x29:
+		case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E:
+		case 0x2F: case 0x30: case 0x31: case 0x32: case 0x33:
+		case 0x34: case 0x35: case 0x36: case 0x37: case 0x38:
+		case 0x39: case 0x3A: case 0x3B: case 0x3C: case 0x3D:
+		case 0x3E: case 0x3F: case 0x40: case 0x41: case 0x42:
+		case 0x43: case 0x44: case 0x45: case 0x46: case 0x47:
+		case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C:
+		case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51:
+		case 0x52: case 0x53: case 0x54: case 0x55: case 0x56:
+		case 0x57: case 0x58: case 0x59: case 0x5A: case 0x5B:
+		case 0x5C: case 0x5D: case 0x5E: case 0x5F: case 0x60:
+		case 0x61: case 0x62: case 0x63: case 0x64: case 0x65:
+		case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A:
+		case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F:
+		case 0x70: case 0x71: case 0x72: case 0x73: case 0x74:
+		case 0x75: case 0x76: case 0x77: case 0x78: case 0x79:
+		case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E:
+		case 0x7F: 
+		    charBuffer[ucPos++] = (char) aByte;
+		    break;
+
+		    // quote unicode
+		case SQUOTEU:
+		    // verify we have two bytes following tag
+		    // if not, save state and break out
+		    if( (bytePos + 1) >= byteBufferLimit ) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+                
+		    aByte = byteBuffer[bytePos++];
+		    charBuffer[ucPos++] = (char)
+			(aByte << 8 | (byteBuffer[bytePos++] & 0xFF));
+		    break;
+
+		    // switch to Unicode mode
+		case SCHANGEU:
+		    fMode = UNICODEMODE;
+		    break singleByteModeLoop;
+		    //break;
+
+		    // handle all quote tags
+		case SQUOTE0: case SQUOTE1: case SQUOTE2: case SQUOTE3:
+		case SQUOTE4: case SQUOTE5: case SQUOTE6: case SQUOTE7:
+		    // verify there is a byte following the tag
+		    // if not, save state and break out
+		    if(bytePos >= byteBufferLimit) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+                
+		    // if the byte is in the range 0x00 - 0x7F, use
+		    // static window n otherwise, use dynamic window n
+		    int dByte = byteBuffer[bytePos++] & 0xFF;
+		    charBuffer[ucPos++] = (char) 
+			(dByte+ (dByte >= 0x00 && dByte < 0x80 
+				 ? sOffsets[aByte - SQUOTE0] 
+				 : (fOffsets[aByte - SQUOTE0] 
+				    - COMPRESSIONOFFSET))); 
+		    break;
+
+		    // handle all change tags
+		case SCHANGE0: case SCHANGE1: case SCHANGE2: case SCHANGE3:
+		case SCHANGE4: case SCHANGE5: case SCHANGE6: case SCHANGE7:
+		    fCurrentWindow = aByte - SCHANGE0;
+		    break;
+
+		    // handle all define tags
+		case SDEFINE0: case SDEFINE1: case SDEFINE2: case SDEFINE3:
+		case SDEFINE4: case SDEFINE5: case SDEFINE6: case SDEFINE7:
+		    // verify there is a byte following the tag
+		    // if not, save state and break out
+		    if(bytePos >= byteBufferLimit) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+
+		    fCurrentWindow = aByte - SDEFINE0;
+		    fOffsets[fCurrentWindow] = 
+			sOffsetTable[byteBuffer[bytePos++] & 0xFF];
+		    break;
+
+		    // handle define extended tag
+		case SDEFINEX:
+		    // verify we have two bytes following tag
+		    // if not, save state and break out
+		    if((bytePos + 1) >= byteBufferLimit ) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+                
+		    aByte = byteBuffer[bytePos++] & 0xFF;
+		    fCurrentWindow = (aByte & 0xE0) >> 5;
+		    fOffsets[fCurrentWindow] = 0x10000 + 
+			(0x80 * (((aByte & 0x1F) << 8) 
+				 | (byteBuffer[bytePos++] & 0xFF)));
+		    break;
+                            
+            // reserved, shouldn't happen
+		case SRESERVED:
+		    break;
+
+		} // end switch
+	    } // end while
+	    break;
+
+	    case UNICODEMODE:
+		// unicode mode decompression loop
+	    unicodeModeLoop:
+	    while(bytePos < byteBufferLimit && ucPos < charBufferLimit) {
+		aByte = byteBuffer[bytePos++] & 0xFF;
+		switch(aByte) {
+		    // handle all define tags
+		case UDEFINE0: case UDEFINE1: case UDEFINE2: case UDEFINE3:
+		case UDEFINE4: case UDEFINE5: case UDEFINE6: case UDEFINE7:
+		    // verify there is a byte following tag
+		    // if not, save state and break out
+		    if(bytePos >= byteBufferLimit ) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+                
+		    fCurrentWindow = aByte - UDEFINE0;
+		    fOffsets[fCurrentWindow] = 
+			sOffsetTable[byteBuffer[bytePos++] & 0xFF];
+		    fMode = SINGLEBYTEMODE;
+		    break unicodeModeLoop;
+		    //break;
+
+		    // handle define extended tag
+		case UDEFINEX:
+		    // verify we have two bytes following tag
+		    // if not, save state and break out
+		    if((bytePos + 1) >= byteBufferLimit ) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+		    
+		    aByte = byteBuffer[bytePos++] & 0xFF;
+		    fCurrentWindow = (aByte & 0xE0) >> 5;
+		    fOffsets[fCurrentWindow] = 0x10000 + 
+			(0x80 * (((aByte & 0x1F) << 8) 
+				 | (byteBuffer[bytePos++] & 0xFF)));
+		    fMode = SINGLEBYTEMODE;
+		    break unicodeModeLoop;
+		    //break;
+
+		    // handle all change tags
+		case UCHANGE0: case UCHANGE1: case UCHANGE2: case UCHANGE3:
+		case UCHANGE4: case UCHANGE5: case UCHANGE6: case UCHANGE7:
+		    fCurrentWindow = aByte - UCHANGE0;
+		    fMode = SINGLEBYTEMODE;
+		    break unicodeModeLoop;
+		    //break;
+
+		    // quote unicode
+		case UQUOTEU:
+		    // verify we have two bytes following tag
+		    // if not, save state and break out
+		    if(bytePos >= byteBufferLimit  - 1) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+                
+		    aByte = byteBuffer[bytePos++];
+		    charBuffer[ucPos++] = (char) 
+			(aByte << 8 | (byteBuffer[bytePos++] & 0xFF));
+		    break;
+
+		default:
+		    // verify there is a byte following tag
+		    // if not, save state and break out
+		    if(bytePos >= byteBufferLimit ) {
+			--bytePos;
+			System.arraycopy(byteBuffer, bytePos,
+					 fBuffer, 0, 
+					 byteBufferLimit - bytePos);
+			fBufferLength = byteBufferLimit - bytePos;
+			bytePos += fBufferLength;
+			break mainLoop; 
+		    }
+
+		    charBuffer[ucPos++] = (char) 
+			(aByte << 8 | (byteBuffer[bytePos++] & 0xFF));
+		    break;
+
+		} // end switch
+	    } // end while
+	    break;
+	    
+	    } // end switch( fMode )
+	} // end while
+
+        // fill in output parameter
+	if(bytesRead != null)
+	    bytesRead [0] = (bytePos - byteBufferStart);
+
+        // return # of chars written
+	return (ucPos - charBufferStart);
+    }
+
+    /** Reset the decompressor to its initial state. */
+    public void reset()
+    {
+        // reset dynamic windows
+        fOffsets[0] = 0x0080;    // Latin-1
+        fOffsets[1] = 0x00C0;    // Latin-1 Supplement + Latin Extended-A
+        fOffsets[2] = 0x0400;    // Cyrillic
+        fOffsets[3] = 0x0600;    // Arabic
+        fOffsets[4] = 0x0900;    // Devanagari
+        fOffsets[5] = 0x3040;    // Hiragana
+        fOffsets[6] = 0x30A0;    // Katakana
+        fOffsets[7] = 0xFF00;    // Fullwidth ASCII
+
+
+        fCurrentWindow  = 0;                // Make current window Latin-1
+        fMode           = SINGLEBYTEMODE;   // Always start in single-byte mode
+	fBufferLength   = 0;                // Empty buffer
+    }
+};
diff --git a/src/com/ibm/text/UnicodeFilter.java b/src/com/ibm/text/UnicodeFilter.java
new file mode 100755
index 0000000..411aa70
--- /dev/null
+++ b/src/com/ibm/text/UnicodeFilter.java
@@ -0,0 +1,34 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UnicodeFilter.java,v $ 
+ * $Date: 2000/03/10 04:07:25 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+/**
+ * <code>UnicodeFilter</code> defines a protocol for selecting a
+ * subset of the full range (U+0000 to U+FFFF) of Unicode characters.
+ * Currently, filters are used in conjunction with classes like {@link
+ * Transliterator} to only process selected characters through a
+ * transformation.
+ *
+ * {@link UnicodeFilterLogic}
+ */
+
+public interface UnicodeFilter {
+
+    /**
+     * Returns <tt>true</tt> for characters that are in the selected
+     * subset.  In other words, if a character is <b>to be
+     * filtered</b>, then <tt>contains()</tt> returns
+     * <b><tt>false</tt></b>.
+     */
+    boolean contains(char c);
+}
diff --git a/src/com/ibm/text/UnicodeFilterLogic.java b/src/com/ibm/text/UnicodeFilterLogic.java
new file mode 100755
index 0000000..9822df0
--- /dev/null
+++ b/src/com/ibm/text/UnicodeFilterLogic.java
@@ -0,0 +1,124 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UnicodeFilterLogic.java,v $ 
+ * $Date: 2000/03/10 04:07:25 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+/**
+ * <code>UnicodeFilterLogic</code> provides logical operators on
+ * {@link UnicodeFilter} objects.  This class cannot be instantiated;
+ * it consists only of static methods.  The static methods return
+ * filter objects that perform logical inversion (<tt>not</tt>),
+ * intersection (<tt>and</tt>), or union (<tt>or</tt>) of the given
+ * filter objects.
+ */
+public final class UnicodeFilterLogic {
+
+    /**
+     * Returns a <tt>UnicodeFilter</tt> that implements the inverse of
+     * the given filter.
+     */
+    public static UnicodeFilter not(final UnicodeFilter f) {
+        return new UnicodeFilter() {
+            public boolean contains(char c) {
+                return !f.contains(c);
+            }
+        };
+    }
+
+    /**
+     * Returns a <tt>UnicodeFilter</tt> that implements a short
+     * circuit AND of the result of the two given filters.  That is,
+     * if <tt>f.contains()</tt> is <tt>false</tt>, then <tt>g.contains()</tt>
+     * is not called, and <tt>contains()</tt> returns <tt>false</tt>.
+     *
+     * <p>Either <tt>f</tt> or <tt>g</tt> must be non-null.
+     */
+    public static UnicodeFilter and(final UnicodeFilter f,
+                                    final UnicodeFilter g) {
+        if (f == null) {
+            return g;
+        }
+        if (g == null) {
+            return f;
+        }
+        return new UnicodeFilter() {
+            public boolean contains(char c) {
+                return f.contains(c) && g.contains(c);
+            }
+        };
+    }
+
+    /**
+     * Returns a <tt>UnicodeFilter</tt> that implements a short
+     * circuit AND of the result of the given filters.  That is, if
+     * <tt>f[i].contains()</tt> is <tt>false</tt>, then
+     * <tt>f[j].contains()</tt> is not called, where <tt>j > i</tt>, and
+     * <tt>contains()</tt> returns <tt>false</tt>.
+     */
+    public static UnicodeFilter and(final UnicodeFilter[] f) {
+        return new UnicodeFilter() {
+            public boolean contains(char c) {
+                for (int i=0; i<f.length; ++i) {
+                    if (!f[i].contains(c)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+        };
+    }
+
+    /**
+     * Returns a <tt>UnicodeFilter</tt> that implements a short
+     * circuit OR of the result of the two given filters.  That is, if
+     * <tt>f.contains()</tt> is <tt>true</tt>, then <tt>g.contains()</tt> is
+     * not called, and <tt>contains()</tt> returns <tt>true</tt>.
+     *
+     * <p>Either <tt>f</tt> or <tt>g</tt> must be non-null.
+     */
+    public static UnicodeFilter or(final UnicodeFilter f,
+                                   final UnicodeFilter g) {
+        if (f == null) {
+            return g;
+        }
+        if (g == null) {
+            return f;
+        }
+        return new UnicodeFilter() {
+            public boolean contains(char c) {
+                return f.contains(c) || g.contains(c);
+            }
+        };
+    }
+
+    /**
+     * Returns a <tt>UnicodeFilter</tt> that implements a short
+     * circuit OR of the result of the given filters.  That is, if
+     * <tt>f[i].contains()</tt> is <tt>false</tt>, then
+     * <tt>f[j].contains()</tt> is not called, where <tt>j > i</tt>, and
+     * <tt>contains()</tt> returns <tt>true</tt>.
+     */
+    public static UnicodeFilter or(final UnicodeFilter[] f) {
+        return new UnicodeFilter() {
+            public boolean contains(char c) {
+                for (int i=0; i<f.length; ++i) {
+                    if (f[i].contains(c)) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        };
+    }
+
+    // TODO: Add nand() & nor() for convenience, if needed.
+}
diff --git a/src/com/ibm/text/UnicodeSet.java b/src/com/ibm/text/UnicodeSet.java
new file mode 100755
index 0000000..41f8389
--- /dev/null
+++ b/src/com/ibm/text/UnicodeSet.java
@@ -0,0 +1,1593 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UnicodeSet.java,v $
+ * $Date: 2000/08/31 17:11:42 $
+ * $Revision: 1.30 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.text.*;
+
+/**
+ * A mutable set of Unicode characters.  Objects of this class
+ * represent <em>character classes</em> used in regular expressions.
+ * Such classes specify a subset of the set of all Unicode characters,
+ * which in this implementation is the characters from U+0000 to
+ * U+FFFF, ignoring surrogates.
+ *
+ * <p><code>UnicodeSet</code> supports two APIs. The first is the
+ * <em>operand</em> API that allows the caller to modify the value of
+ * a <code>UnicodeSet</code> object. It conforms to Java 2's
+ * <code>java.util.Set</code> interface, although
+ * <code>UnicodeSet</code> cannot actually implement that
+ * interface. All methods of <code>Set</code> are supported, with the
+ * modification that they take a character range or single character
+ * instead of an <code>Object</code>, and they take a
+ * <code>UnicodeSet</code> instead of a <code>Collection</code>.  The
+ * operand API may be thought of in terms of boolean logic: a boolean
+ * OR is implemented by <code>add</code>, a boolean AND is implemented
+ * by <code>retain</code>, a boolean XOR is implemented by
+ * <code>complement</code> taking an argument, and a boolean NOT is
+ * implemented by <code>complement</code> with no argument.  In terms
+ * of traditional set theory function names, <code>add</code> is a
+ * union, <code>retain</code> is an intersection, <code>remove</code>
+ * is an asymmetric difference, and <code>complement</code> with no
+ * argument is a set complement with respect to the superset range
+ * <code>MIN_VALUE-MAX_VALUE</code>
+ *
+ * <p>The second API is the
+ * <code>applyPattern()</code>/<code>toPattern()</code> API from the
+ * <code>java.text.Format</code>-derived classes.  Unlike the
+ * methods that add characters, add categories, and control the logic
+ * of the set, the method <code>applyPattern()</code> sets all
+ * attributes of a <code>UnicodeSet</code> at once, based on a
+ * string pattern.
+ *
+ * <p>In addition, the set complement operation is supported through
+ * the <code>complement()</code> method.
+ *
+ * <p><b>Pattern syntax</b></p>
+ *
+ * Patterns are accepted by the constructors and the
+ * <code>applyPattern()</code> methods and returned by the
+ * <code>toPattern()</code> method.  These patterns follow a syntax
+ * similar to that employed by version 8 regular expression character
+ * classes:
+ *
+ * <blockquote>
+ *   <table>
+ *     <tr align="top">
+ *       <td nowrap valign="top" align="right"><code>pattern :=&nbsp; </code></td>
+ *       <td valign="top"><code>('[' '^'? item* ']') |
+ *       ('[:' '^'? category ':]')</code></td>
+ *     </tr>
+ *     <tr align="top">
+ *       <td nowrap valign="top" align="right"><code>item :=&nbsp; </code></td>
+ *       <td valign="top"><code>char | (char '-' char) | pattern-expr<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr align="top">
+ *       <td nowrap valign="top" align="right"><code>pattern-expr :=&nbsp; </code></td>
+ *       <td valign="top"><code>pattern | pattern-expr pattern |
+ *       pattern-expr op pattern<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr align="top">
+ *       <td nowrap valign="top" align="right"><code>op :=&nbsp; </code></td>
+ *       <td valign="top"><code>'&amp;' | '-'<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr align="top">
+ *       <td nowrap valign="top" align="right"><code>special :=&nbsp; </code></td>
+ *       <td valign="top"><code>'[' | ']' | '-'<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr align="top">
+ *       <td nowrap valign="top" align="right"><code>char :=&nbsp; </code></td>
+ *       <td valign="top"><em>any character that is not</em><code> special<br>
+ *       | ('\u005C' </code><em>any character</em><code>)<br>
+ *       | ('\u005Cu' hex hex hex hex)<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr align="top">
+ *       <td nowrap valign="top" align="right"><code>hex :=&nbsp; </code></td>
+ *       <td valign="top"><em>any character for which
+ *       </em><code>Character.digit(c, 16)</code><em>
+ *       returns a non-negative result</em></td>
+ *     </tr>
+ *     <tr>
+ *       <td nowrap valign="top" align="right"><code>category :=&nbsp; </code></td>
+ *       <td valign="top"><code>'M' | 'N' | 'Z' | 'C' | 'L' | 'P' |
+ *       'S' | 'Mn' | 'Mc' | 'Me' | 'Nd' | 'Nl' | 'No' | 'Zs' | 'Zl' |
+ *       'Zp' | 'Cc' | 'Cf' | 'Cs' | 'Co' | 'Cn' | 'Lu' | 'Ll' | 'Lt'
+ *       | 'Lm' | 'Lo' | 'Pc' | 'Pd' | 'Ps' | 'Pe' | 'Po' | 'Sm' |
+ *       'Sc' | 'Sk' | 'So'</code></td>
+ *     </tr>
+ *   </table>
+ *   <br>
+ *   <table border="1">
+ *     <tr>
+ *       <td>Legend: <table>
+ *         <tr>
+ *           <td nowrap valign="top"><code>a := b</code></td>
+ *           <td width="20" valign="top">&nbsp; </td>
+ *           <td valign="top"><code>a</code> may be replaced by <code>b</code> </td>
+ *         </tr>
+ *         <tr>
+ *           <td nowrap valign="top"><code>a?</code></td>
+ *           <td valign="top"></td>
+ *           <td valign="top">zero or one instance of <code>a</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td nowrap valign="top"><code>a*</code></td>
+ *           <td valign="top"></td>
+ *           <td valign="top">one or more instances of <code>a</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td nowrap valign="top"><code>a | b</code></td>
+ *           <td valign="top"></td>
+ *           <td valign="top">either <code>a</code> or <code>b</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td nowrap valign="top"><code>'a'</code></td>
+ *           <td valign="top"></td>
+ *           <td valign="top">the literal string between the quotes </td>
+ *         </tr>
+ *       </table>
+ *       </td>
+ *     </tr>
+ *   </table>
+ * </blockquote>
+ *
+ * Any character may be preceded by a backslash in order to remove any special
+ * meaning.  White space characters, as defined by Character.isWhitespace(), are
+ * ignored, unless they are escaped.
+ *
+ * Patterns specify individual characters, ranges of characters, and
+ * Unicode character categories.  When elements are concatenated, they
+ * specify their union.  To complement a set, place a '^' immediately
+ * after the opening '[' or '[:'.  In any other location, '^' has no
+ * special meaning.
+ *
+ * <p>Ranges are indicated by placing two a '-' between two
+ * characters, as in "a-z".  This specifies the range of all
+ * characters from the left to the right, in Unicode order.  If the
+ * left and right characters are the same, then the range consists of
+ * just that character.  If the left character is greater than the
+ * right character it is a syntax error.  If a '-' occurs as the first
+ * character after the opening '[' or '[^', or if it occurs as the
+ * last character before the closing ']', then it is taken as a
+ * literal.  Thus "[a\u005C-b]", "[-ab]", and "[ab-]" all indicate the same
+ * set of three characters, 'a', 'b', and '-'.
+ *
+ * <p>Sets may be intersected using the '&' operator or the asymmetric
+ * set difference may be taken using the '-' operator, for example,
+ * "[[:L:]&[\u005Cu0000-\u005Cu0FFF]]" indicates the set of all Unicode letters
+ * with values less than 4096.  Operators ('&' and '|') have equal
+ * precedence and bind left-to-right.  Thus
+ * "[[:L:]-[a-z]-[\u005Cu0100-\u005Cu01FF]]" is equivalent to
+ * "[[[:L:]-[a-z]]-[\u005Cu0100-\u005Cu01FF]]".  This only really matters for
+ * difference; intersection is commutative.
+ *
+ * <table>
+ * <tr valign=top><td nowrap><code>[a]</code><td>The set containing 'a'
+ * <tr valign=top><td nowrap><code>[a-z]</code><td>The set containing 'a'
+ * through 'z' and all letters in between, in Unicode order
+ * <tr valign=top><td nowrap><code>[^a-z]</code><td>The set containing
+ * all characters but 'a' through 'z',
+ * that is, U+0000 through 'a'-1 and 'z'+1 through U+FFFF
+ * <tr valign=top><td nowrap><code>[[<em>pat1</em>][<em>pat2</em>]]</code>
+ * <td>The union of sets specified by <em>pat1</em> and <em>pat2</em>
+ * <tr valign=top><td nowrap><code>[[<em>pat1</em>]&[<em>pat2</em>]]</code>
+ * <td>The intersection of sets specified by <em>pat1</em> and <em>pat2</em>
+ * <tr valign=top><td nowrap><code>[[<em>pat1</em>]-[<em>pat2</em>]]</code>
+ * <td>The asymmetric difference of sets specified by <em>pat1</em> and
+ * <em>pat2</em>
+ * <tr valign=top><td nowrap><code>[:Lu:]</code>
+ * <td>The set of characters belonging to the given
+ * Unicode category, as defined by <code>Character.getType()</code>; in
+ * this case, Unicode uppercase letters
+ * <tr valign=top><td nowrap><code>[:L:]</code>
+ * <td>The set of characters belonging to all Unicode categories
+ * starting wih 'L', that is, <code>[[:Lu:][:Ll:][:Lt:][:Lm:][:Lo:]]</code>.
+ * </table>
+ *
+ * <p><b>Character categories.</b>
+ *
+ * Character categories are specified using the POSIX-like syntax
+ * '[:Lu:]'.  The complement of a category is specified by inserting
+ * '^' after the opening '[:'.  The following category names are
+ * recognized.  Actual determination of category data uses
+ * <code>Character.getType()</code>, so it reflects the underlying
+ * implmementation used by <code>Character</code>.  As of Java 2 and
+ * JDK 1.1.8, this is Unicode 2.1.2.
+ *
+ * <pre>
+ * Normative
+ *     Mn = Mark, Non-Spacing
+ *     Mc = Mark, Spacing Combining
+ *     Me = Mark, Enclosing
+ *
+ *     Nd = Number, Decimal Digit
+ *     Nl = Number, Letter
+ *     No = Number, Other
+ *
+ *     Zs = Separator, Space
+ *     Zl = Separator, Line
+ *     Zp = Separator, Paragraph
+ *
+ *     Cc = Other, Control
+ *     Cf = Other, Format
+ *     Cs = Other, Surrogate
+ *     Co = Other, Private Use
+ *     Cn = Other, Not Assigned
+ *
+ * Informative
+ *     Lu = Letter, Uppercase
+ *     Ll = Letter, Lowercase
+ *     Lt = Letter, Titlecase
+ *     Lm = Letter, Modifier
+ *     Lo = Letter, Other
+ *
+ *     Pc = Punctuation, Connector
+ *     Pd = Punctuation, Dash
+ *     Ps = Punctuation, Open
+ *     Pe = Punctuation, Close
+ *    *Pi = Punctuation, Initial quote
+ *    *Pf = Punctuation, Final quote
+ *     Po = Punctuation, Other
+ *
+ *     Sm = Symbol, Math
+ *     Sc = Symbol, Currency
+ *     Sk = Symbol, Modifier
+ *     So = Symbol, Other
+ * </pre>
+ * *Unsupported by Java (and hence unsupported by UnicodeSet).
+ *
+ * @author Alan Liu
+ * @version $RCSfile: UnicodeSet.java,v $ $Revision: 1.30 $ $Date: 2000/08/31 17:11:42 $ */
+public class UnicodeSet implements UnicodeFilter {
+
+    /* Implementation Notes.
+     *
+     * UnicodeSet currently represents only the characters U+0000 to
+     * U+FFFF.  This allows the API to be written in terms of the Java
+     * char type, which is natural for Java at this time.  Since the
+     * char data type is range-limited, we don't have to do range
+     * checks.
+     *
+     * In order to modify UnicodeSet to work with code points up to
+     * U+10FFFF, do the following: (1) Change the value of HIGH to
+     * 0x110000.  (2) Change every API that takes or returns a char
+     * code point to take or return an int.  (3) For those APIs taking
+     * an int code point, add a range check that looks like this:
+     *
+     * void foo(int ch) {
+     *   if (ch < MIN_VALUE || ch > MAX_VALUE) {
+     *     throw new IllegalArgumentException("Invalid code point " + ch);
+     *   }
+     *   // ...
+     * }
+     *
+     * (4) Modify toPattern() to handle characters past 0xFFFF.  (5)
+     * Modify applyPattern() to parse escapes from \U100000 to \U10FFFF.
+     * Note uppercase U. (6) Modify MIN_VALUE and MAX_VALUE to be of
+     * type int.
+     */
+
+    private static final int LOW = 0x000000; // LOW <= all valid values. ZERO for codepoints
+    private static final int HIGH = 0x10000; // HIGH > all valid values. 10000 for code units.
+                                             // 110000 for codepoints
+
+    /**
+     * Minimum value that can be stored in a UnicodeSet.
+     */
+    public static final char MIN_VALUE = (char) LOW;
+
+    /**
+     * Maximum value that can be stored in a UnicodeSet.
+     */
+    public static final char MAX_VALUE = (char) (HIGH - 1);
+
+    private int len;      // length used; list may be longer to minimize reallocs
+    private int[] list;   // MUST be terminated with HIGH
+    private int[] rangeList; // internal buffer
+    private int[] buffer; // internal buffer
+
+    private static final int START_EXTRA = 16;         // initial storage. Must be >= 0
+    private static final int GROW_EXTRA = START_EXTRA; // extra amount for growth. Must be >= 0
+
+    private static final String CATEGORY_NAMES =
+        //                    1 1 1 1 1 1 1   1 1 2 2 2 2 2 2 2 2 2
+        //0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6   8 9 0 1 2 3 4 5 6 7 8
+        "CnLuLlLtLmLoMnMeMcNdNlNoZsZlZpCcCf--CoCsPdPsPePcPoSmScSkSo";
+
+    private static final int UNSUPPORTED_CATEGORY = 17;
+
+    private static final int CATEGORY_COUNT = 29;
+
+    /**
+     * A cache mapping character category integers, as returned by
+     * Character.getType(), to inversion lists.  Entries are initially
+     * null and are created on demand.
+     */
+    private static final UnicodeSet[] CATEGORY_CACHE =
+        new UnicodeSet[CATEGORY_COUNT];
+
+    //----------------------------------------------------------------
+    // Public API
+    //----------------------------------------------------------------
+
+    /**
+     * Constructs an empty set.
+     */
+    public UnicodeSet() {
+        list = new int[1 + START_EXTRA];
+        list[len++] = HIGH;
+    }
+
+    /**
+     * Constructs a copy of an existing set.
+     */
+    public UnicodeSet(UnicodeSet other) {
+        set(other);
+    }
+
+    /**
+     * Constructs a set containing the given range. If <code>end >
+     * start</code> then an empty set is created.
+     *
+     * @param start first character, inclusive, of range
+     * @param end last character, inclusive, of range
+     */
+    public UnicodeSet(char start, char end) {
+        this();
+        complement(start, end);
+    }
+
+    /**
+     * Constructs a set from the given pattern.  See the class description
+     * for the syntax of the pattern language.  Whitespace is ignored.
+     * @param pattern a string specifying what characters are in the set
+     * @exception java.lang.IllegalArgumentException if the pattern contains
+     * a syntax error.
+     */
+    public UnicodeSet(String pattern) {
+        this(pattern, true);
+    }
+
+    /**
+     * Constructs a set from the given pattern.  See the class description
+     * for the syntax of the pattern language.
+     * @param pattern a string specifying what characters are in the set
+     * @param ignoreWhitespace if true, ignore characters for which
+     * Character.isWhitespace() returns true
+     * @exception java.lang.IllegalArgumentException if the pattern contains
+     * a syntax error.
+     */
+    public UnicodeSet(String pattern, boolean ignoreWhitespace) {
+        this();
+        applyPattern(pattern, ignoreWhitespace);
+    }
+
+    /**
+     * Constructs a set from the given pattern.  See the class description
+     * for the syntax of the pattern language.
+     * @param pattern a string specifying what characters are in the set
+     * @param pos on input, the position in pattern at which to start parsing.
+     * On output, the position after the last character parsed.
+     * @param symbols a symbol table mapping variables to char[] arrays
+     * and chars to UnicodeSets
+     * @exception java.lang.IllegalArgumentException if the pattern
+     * contains a syntax error.
+     */
+    public UnicodeSet(String pattern, ParsePosition pos, SymbolTable symbols) {
+        this();
+        applyPattern(pattern, pos, symbols, true);
+    }
+
+    /**
+     * Constructs a set from the given Unicode character category.
+     * @param category an integer indicating the character category as
+     * returned by <code>Character.getType()</code>.
+     * @exception java.lang.IllegalArgumentException if the given
+     * category is invalid.
+     */
+    public UnicodeSet(int category) {
+        if (category < 0 || category >= CATEGORY_COUNT ||
+            category == UNSUPPORTED_CATEGORY) {
+            throw new IllegalArgumentException("Invalid category");
+        }
+        set(getCategorySet(category));
+    }
+
+    /**
+     * Make this object represent the range <code>start - end</code>.
+     * If <code>end > start</code> then this object is set to an
+     * an empty range.
+     *
+     * @param start first character in the set, inclusive
+     * @rparam end last character in the set, inclusive
+     */
+    public void set(char start, char end) {
+        clear();
+        complement(start, end);
+    }
+
+    /**
+     * Make this object represent the same set as <code>other</code>.
+     * @param other a <code>UnicodeSet</code> whose value will be
+     * copied to this object
+     */
+    public void set(UnicodeSet other) {
+        list = (int[]) other.list.clone();
+        len = other.len;
+    }
+
+    /**
+     * Modifies this set to represent the set specified by the given pattern.
+     * See the class description for the syntax of the pattern language.
+     * Whitespace is ignored.
+     * @param pattern a string specifying what characters are in the set
+     * @exception java.lang.IllegalArgumentException if the pattern
+     * contains a syntax error.
+     */
+    public final void applyPattern(String pattern) {
+        applyPattern(pattern, true);
+    }
+
+    /**
+     * Modifies this set to represent the set specified by the given pattern,
+     * optionally ignoring whitespace.
+     * See the class description for the syntax of the pattern language.
+     * @param pattern a string specifying what characters are in the set
+     * @param ignoreWhitespace if true then characters for which
+     * Character.isWhitespace() returns true are ignored
+     * @exception java.lang.IllegalArgumentException if the pattern
+     * contains a syntax error.
+     */
+    public void applyPattern(String pattern, boolean ignoreWhitespace) {
+        ParsePosition pos = new ParsePosition(0);
+        applyPattern(pattern, pos, null, ignoreWhitespace);
+
+        int i = pos.getIndex();
+        int n = pattern.length();
+
+        // Skip over trailing whitespace
+        if (ignoreWhitespace) {
+            while (i < n && Character.isWhitespace(pattern.charAt(i))) {
+                ++i;
+            }
+        }
+
+        if (i != n) {
+            throw new IllegalArgumentException("Parse of \"" + pattern +
+                                               "\" failed at " + i);
+        }
+    }
+
+    /**
+     * Append the <code>toPattern()</code> representation of a
+     * character to the given <code>StringBuffer</code>.
+     */
+    private static final void _toPat(StringBuffer buf, char c) {
+        // Okay to let ':' pass through
+        switch (c) {
+        case '[':
+        case ']':
+        case '-':
+        case '^':
+        case '&':
+        case '\\':
+            buf.append('\\');
+        }
+        buf.append(c);
+    }
+
+    /**
+     * Returns a string representation of this set.  If the result of
+     * calling this function is passed to a UnicodeSet constructor, it
+     * will produce another set that is equal to this one.
+     */
+    public String toPattern() {
+        StringBuffer result = new StringBuffer();
+        result.append('[');
+
+        int count = getRangeCount();
+        for (int i = 0; i < count; ++i) {
+            char start = getRangeStart(i);
+            char end = getRangeEnd(i);
+            _toPat(result, start);
+            if (start != end) {
+                result.append("-");
+                _toPat(result, end);
+            }
+        }
+
+        return result.append(']').toString();
+    }
+
+    /**
+     * Returns the number of elements in this set (its cardinality),
+     * <em>n</em>, where <code>0 <= </code><em>n</em><code> <= 65536</code>.
+     *
+     * @return the number of elements in this set (its cardinality).
+     */
+    public int size() {
+        int n = 0;
+        int count = getRangeCount();
+        for (int i = 0; i < count; ++i) {
+            n += getRangeEnd(i) - getRangeStart(i) + 1;
+        }
+        return n;
+    }
+
+    /**
+     * Returns <tt>true</tt> if this set contains no elements.
+     *
+     * @return <tt>true</tt> if this set contains no elements.
+     */
+    public boolean isEmpty() {
+        return len == 1;
+    }
+
+    /**
+     * Returns <tt>true</tt> if this set contains every character
+     * in the specified range of chars.
+     * If <code>end > start</code> then the results of this method
+     * are undefined.
+     *
+     * @return <tt>true</tt> if this set contains the specified range
+     * of chars.
+     */
+    public boolean contains(char start, char end) {
+        int i = -1;
+        while (true) {
+            if (start < list[++i]) break;
+        }
+        return ((i & 1) != 0 && end < list[i]);
+    }
+
+    /**
+     * Returns <tt>true</tt> if this set contains the specified char.
+     *
+     * @return <tt>true</tt> if this set contains the specified char.
+     */
+    public boolean contains(char c) {
+//| Not needed unless HIGH > 0x10000
+//|     // catch degenerate cases
+//|     if (c == HIGH) {   // catch final, so we don't do it in loop!
+//|         return (len & 1) == 0;  // even length includes everything
+//|     }
+        // Set i to the index of the start item greater than ch
+        // We know we will terminate without length test!
+        // LATER: for large sets, add binary search
+        int i = -1;
+        while (true) {
+            if (c < list[++i]) break;
+        }
+        return ((i & 1) != 0); // return true if odd
+    }
+
+    /**
+     * Returns <tt>true</tt> if this set contains any character whose low byte
+     * is the given value.  This is used by <tt>RuleBasedTransliterator</tt> for
+     * indexing.
+     */
+    public boolean containsIndexValue(int v) {
+        /* The index value v, in the range [0,255], is contained in this set if
+         * it is contained in any range of this set.  Ranges either have the high
+         * bytes equal, or unequal.  If the high bytes are equal, then we have
+         * aaxx..aayy, where aa is the high byte.  Then v is contained if xx <=
+         * v <= yy.  If the high bytes are unequal we have aaxx..bbyy, bb>aa.
+         * Then v is contained if xx <= v || v <= yy.  (This is identical to the
+         * time zone month containment logic.)
+         */
+        for (int i=0; i<getRangeCount(); ++i) {
+            int low = getRangeStart(i);
+            int high = getRangeEnd(i);
+            if ((low & ~0xFF) == (high & ~0xFF)) {
+                if ((low & 0xFF) <= v && v <= (high & 0xFF)) {
+                    return true;
+                }
+            } else if ((low & 0xFF) <= v || v <= (high & 0xFF)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Adds the specified range to this set if it is not already
+     * present.  If this set already contains the specified range,
+     * the call leaves this set unchanged.  If <code>end > start</code>
+     * then an empty range is added, leaving the set unchanged.
+     *
+     * @param start first character, inclusive, of range to be added
+     * to this set.
+     * @param end last character, inclusive, of range to be added
+     * to this set.
+     */
+    public void add(char start, char end) {
+        if (start <= end) {
+            add(range(start, end), 2, 0);
+        }
+    }
+
+    /**
+     * Adds the specified character to this set if it is not already
+     * present.  If this set already contains the specified character,
+     * the call leaves this set unchanged.
+     */
+    public final void add(char c) {
+        add(c, c);
+    }
+
+    /**
+     * Retain only the elements in this set that are contained in the
+     * specified range.  If <code>end > start</code> then an empty range is
+     * retained, leaving the set empty.
+     *
+     * @param start first character, inclusive, of range to be retained
+     * to this set.
+     * @param end last character, inclusive, of range to be retained
+     * to this set.
+     */
+    public void retain(char start, char end) {
+        if (start <= end) {
+            retain(range(start, end), 2, 0);
+        } else {
+            clear();
+        }
+    }
+
+    /**
+     * Retain the specified character from this set if it is present.
+     */
+    public final void retain(char c) {
+        retain(c, c);
+    }
+
+    /**
+     * Removes the specified range from this set if it is present.
+     * The set will not contain the specified range once the call
+     * returns.  If <code>end > start</code> then an empty range is
+     * removed, leaving the set unchanged.
+     *
+     * @param start first character, inclusive, of range to be removed
+     * from this set.
+     * @param end last character, inclusive, of range to be removed
+     * from this set.
+     */
+    public void remove(char start, char end) {
+        if (start <= end) {
+            retain(range(start, end), 2, 2);
+        }
+    }
+
+    /**
+     * Removes the specified character from this set if it is present.
+     * The set will not contain the specified character once the call
+     * returns.
+     */
+    public final void remove(char c) {
+        remove(c, c);
+    }
+
+    /**
+     * Complements the specified range in this set.  Any character in
+     * the range will be removed if it is in this set, or will be
+     * added if it is not in this set.  If <code>end > start</code>
+     * then an empty range is complemented, leaving the set unchanged.
+     *
+     * @param start first character, inclusive, of range to be removed
+     * from this set.
+     * @param end last character, inclusive, of range to be removed
+     * from this set.
+     */
+    public void complement(char start, char end) {
+        if (start <= end) {
+            xor(range(start, end), 2, 0);
+        }
+    }
+
+    /**
+     * Complements the specified character in this set.  The character
+     * will be removed if it is in this set, or will be added if it is
+     * not in this set.
+     */
+    public final void complement(char c) {
+        complement(c, c);
+    }
+
+    /**
+     * Inverts this set.  This operation modifies this set so that its
+     * value is its complement.  This is equivalent to
+     * <code>complement(MIN_VALUE, MAX_VALUE)</code>.
+     */
+    public void complement() {
+        if (list[0] == LOW) {
+            System.arraycopy(list, 1, list, 0, len-1);
+            --len;
+        } else {
+            ensureCapacity(len+1);
+            System.arraycopy(list, 0, list, 1, len);
+            list[0] = LOW;
+            ++len;
+        }
+    }
+
+    /**
+     * Returns <tt>true</tt> if the specified set is a subset
+     * of this set.
+     *
+     * @param c set to be checked for containment in this set.
+     * @return <tt>true</tt> if this set contains all of the elements of the
+     * 	       specified set.
+     */
+    public boolean containsAll(UnicodeSet c) {
+        // The specified set is a subset if all of its pairs are contained in
+        // this set.  It's possible to code this more efficiently in terms of
+        // direct manipulation of the inversion lists if the need arises.
+        int n = c.getRangeCount();
+        for (int i=0; i<n; ++i) {
+            if (!contains(c.getRangeStart(i), c.getRangeEnd(i))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Adds all of the elements in the specified set to this set if
+     * they're not already present.  This operation effectively
+     * modifies this set so that its value is the <i>union</i> of the two
+     * sets.  The behavior of this operation is unspecified if the specified
+     * collection is modified while the operation is in progress.
+     *
+     * @param c set whose elements are to be added to this set.
+     * @see #add(char, char)
+     */
+    public void addAll(UnicodeSet c) {
+        add(c.list, c.len, 0);
+    }
+
+    /**
+     * Retains only the elements in this set that are contained in the
+     * specified set.  In other words, removes from this set all of
+     * its elements that are not contained in the specified set.  This
+     * operation effectively modifies this set so that its value is
+     * the <i>intersection</i> of the two sets.
+     *
+     * @param c set that defines which elements this set will retain.
+     */
+    public void retainAll(UnicodeSet c) {
+        retain(c.list, c.len, 0);
+    }
+
+    /**
+     * Removes from this set all of its elements that are contained in the
+     * specified set.  This operation effectively modifies this
+     * set so that its value is the <i>asymmetric set difference</i> of
+     * the two sets.
+     *
+     * @param c set that defines which elements will be removed from
+     *          this set.
+     */
+    public void removeAll(UnicodeSet c) {
+        retain(c.list, c.len, 2);
+    }
+
+    /**
+     * Complements in this set all elements contained in the specified
+     * set.  Any character in the other set will be removed if it is
+     * in this set, or will be added if it is not in this set.
+     *
+     * @param c set that defines which elements will be complemented from
+     *          this set.
+     */
+    public void complementAll(UnicodeSet c) {
+        xor(c.list, c.len, 0);
+    }
+
+    /**
+     * Removes all of the elements from this set.  This set will be
+     * empty after this call returns.
+     */
+    public void clear() {
+        list[0] = HIGH;
+        len = 1;
+    }
+
+    /**
+     * Iteration method that returns the number of ranges contained in
+     * this set.
+     * @see #getRangeStart
+     * @see #getRangeEnd
+     */
+    public int getRangeCount() {
+        return len/2;
+    }
+
+    /**
+     * Iteration method that returns the first character in the
+     * specified range of this set.
+     * @exception ArrayIndexOutOfBoundsException if index is outside
+     * the range <code>0..getRangeCount()-1</code>
+     * @see #getRangeCount
+     * @see #getRangeEnd
+     */
+    public char getRangeStart(int index) {
+        return (char) list[index*2];
+    }
+
+    /**
+     * Iteration method that returns the last character in the
+     * specified range of this set.
+     * @exception ArrayIndexOutOfBoundsException if index is outside
+     * the range <code>0..getRangeCount()-1</code>
+     * @see #getRangeStart
+     * @see #getRangeEnd
+     */
+    public char getRangeEnd(int index) {
+        return (char) (list[index*2 + 1] - 1);
+    }
+
+    /**
+     * Reallocate this objects internal structures to take up the least
+     * possible space, without changing this object's value.
+     */
+    public void compact() {
+        if (len != list.length) {
+            int[] temp = new int[len];
+            System.arraycopy(list, 0, temp, 0, len);
+            list = temp;
+        }
+        rangeList = null;
+        buffer = null;
+    }
+
+    /**
+     * Compares the specified object with this set for equality.  Returns
+     * <tt>true</tt> if the specified object is also a set, the two sets
+     * have the same size, and every member of the specified set is
+     * contained in this set (or equivalently, every member of this set is
+     * contained in the specified set).
+     *
+     * @param o Object to be compared for equality with this set.
+     * @return <tt>true</tt> if the specified Object is equal to this set.
+     */
+    public boolean equals(Object o) {
+        try {
+            UnicodeSet that = (UnicodeSet) o;
+            if (len != that.len) return false;
+            for (int i = 0; i < len; ++i) {
+                if (list[i] != that.list[i]) return false;
+            }
+        } catch (Exception e) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Returns the hash code value for this set.
+     *
+     * @return the hash code value for this set.
+     * @see Object#hashCode()
+     */
+    public int hashCode() {
+        int result = len;
+        for (int i = 0; i < len; ++i) {
+            result *= 1000003;
+            result += list[i];
+        }
+        return result;
+    }
+
+    /**
+     * Return a programmer-readable string representation of this object.
+     */
+    public String toString() {
+        return getClass().getName() + '{' + toPattern() + '}';
+    }
+
+    //----------------------------------------------------------------
+    // Implementation: Pattern parsing
+    //----------------------------------------------------------------
+
+    /**
+     * Parses the given pattern, starting at the given position.  The character
+     * at pattern.charAt(pos.getIndex()) must be '[', or the parse fails.
+     * Parsing continues until the corresponding closing ']'.  If a syntax error
+     * is encountered between the opening and closing brace, the parse fails.
+     * Upon return from a successful parse, the ParsePosition is updated to
+     * point to the character following the closing ']', and an inversion
+     * list for the parsed pattern is returned.  This method
+     * calls itself recursively to parse embedded subpatterns.
+     *
+     * @param pattern the string containing the pattern to be parsed.  The
+     * portion of the string from pos.getIndex(), which must be a '[', to the
+     * corresponding closing ']', is parsed.
+     * @param pos upon entry, the position at which to being parsing.  The
+     * character at pattern.charAt(pos.getIndex()) must be a '['.  Upon return
+     * from a successful parse, pos.getIndex() is either the character after the
+     * closing ']' of the parsed pattern, or pattern.length() if the closing ']'
+     * is the last character of the pattern string.
+     * @return an inversion list for the parsed substring
+     * of <code>pattern</code>
+     * @exception java.lang.IllegalArgumentException if the parse fails.
+     */
+    private void applyPattern(String pattern, ParsePosition pos,
+                              SymbolTable symbols, boolean ignoreWhitespace) {
+
+        boolean invert = false;
+        clear();
+
+        int lastChar = -1; // This is either a char (0..FFFF) or -1
+        char lastOp = 0;
+
+        /* This loop iterates over the characters in the pattern.  We start at
+         * the position specified by pos.  We exit the loop when either a
+         * matching closing ']' is seen, or we read all characters of the
+         * pattern.  In the latter case an error will be thrown.
+         */
+
+        /* Pattern syntax:
+         *  pat := '[' '^'? elem* ']'
+         *  elem := a | a '-' a | set | set op set
+         *  set := pat | (a set variable)
+         *  op := '&' | '-'
+         *  a := (a character, possibly defined by a var)
+         */
+
+        // mode 0: No chars parsed yet; next must be '['
+        // mode 1: '[' seen; if next is '^' or ':' then special
+        // mode 2: '[' '^'? seen; parse pattern and close with ']'
+        // mode 3: '[:' seen; parse category and close with ':]'
+        int mode = 0;
+        int openPos = 0; // offset to opening '['
+        int start = pos.getIndex();
+        int i = start;
+        int limit = pattern.length();
+        /* In the case of an embedded SymbolTable variable, we look it up and
+         * then take characters from the resultant char[] array.  These chars
+         * are subjected to an extra level of lookup in the SymbolTable in case
+         * they are stand-ins for a nested UnicodeSet.  */
+        char[] varValueBuffer = null;
+        int ivarValueBuffer = 0;
+        int anchor = 0;
+        for (; i<limit; i+=((varValueBuffer==null)?1:0)) {
+            /* If the next element is a single character, c will be set to it,
+             * and nestedSet will be null.  In this case isLiteral indicates
+             * whether the character should assume special meaning if it has
+             * one.  If the next element is a nested set, either via a variable
+             * reference, or via an embedded "[..]"  or "[:..:]" pattern, then
+             * nestedSet will be set to the i-list for the nested set, and
+             * c's value should be ignored.
+             */
+            UnicodeSet nestedSet = null;
+            boolean isLiteral = false;
+            char c;
+            if (varValueBuffer != null) {
+                if (ivarValueBuffer < varValueBuffer.length) {
+                    c = varValueBuffer[ivarValueBuffer++];
+                    nestedSet = symbols.lookupSet(c); // may be NULL
+                } else {
+                    varValueBuffer = null;
+                    c = pattern.charAt(i);
+                }
+            } else {
+                c = pattern.charAt(i);
+            }
+
+            // Ignore whitespace.  This is not Unicode whitespace, but Java
+            // whitespace, a subset of Unicode whitespace.
+            if (ignoreWhitespace && Character.isWhitespace(c)) {
+                continue;
+            }
+
+            // Keep track of the count of characters after an alleged anchor
+            if (anchor > 0) {
+                ++anchor;
+            }
+
+            // Parse the opening '[' and optional following '^'
+            switch (mode) {
+            case 0:
+                if (c == '[') {
+                    mode = 1; // Next look for '^'
+                    openPos = i;
+                    continue;
+                } else {
+                    throw new IllegalArgumentException("Missing opening '['");
+                }
+            case 1:
+                mode = 2;
+                switch (c) {
+                case '^':
+                    invert = true;
+                    continue; // Back to top to fetch next character
+                case ':':
+                    if (i == openPos+1) {
+                        // '[:' cannot have whitespace in it
+                        --i;
+                        c = '[';
+                        mode = 3;
+                        // Fall through and parse category normally
+                    }
+                    break; // Fall through
+                case '-':
+                    isLiteral = true; // Treat leading '-' as a literal
+                    break; // Fall through
+                }
+                // else fall through and parse this character normally
+            }
+
+            // After opening matter is parsed ("[", "[^", or "[:"), the mode
+            // will be 2 if we want a closing ']', or 3 if we should parse a
+            // category and close with ":]".
+
+            // Only process escapes, variable references, and nested sets
+            // if we are _not_ retrieving characters from the variable
+            // buffer.  Characters in the variable buffer have already
+            // benn through escape and variable reference processing.
+            if (varValueBuffer == null) {
+                /* Handle escapes.  If a character is escaped, then it assumes its
+                 * literal value.  This is true for all characters, both special
+                 * characters and characters with no special meaning.  We also
+                 * interpret '\\uxxxx' Unicode escapes here (as literals).
+                 */
+                if (c == '\\') {
+                    ++i;
+                    if (i < limit) {
+                        c = pattern.charAt(i);
+                        isLiteral = true;
+                        if (c == 'u') {
+                            if ((i+4) >= limit) {
+                                throw new IllegalArgumentException("Invalid \\u escape");
+                            }
+                            c = '\u0000';
+                            for (int j=(++i)+4; i<j; ++i) { // [sic]
+                                int digit = Character.digit(pattern.charAt(i), 16);
+                                if (digit<0) {
+                                    throw new IllegalArgumentException("Invalid \\u escape");
+                                }
+                                c = (char) ((c << 4) | digit);
+                            }
+                            --i; // Move i back to last parsed character
+                        }
+                    } else {
+                        throw new IllegalArgumentException("Trailing '\\'");
+                    }
+                }
+
+                /* Parse variable references.  These are treated as literals.  If a
+                 * variable refers to a UnicodeSet, its stand in character is
+                 * returned in the char[] buffer.
+                 * Variable names are only parsed if varNameToChar is not null.
+                 * Set variables are only looked up if varCharToSet is not null.
+                 */
+                else if (symbols != null && !isLiteral && c == SymbolTable.SYMBOL_REF) {
+                    pos.setIndex(++i);
+                    String name = symbols.parseReference(pattern, pos, limit);
+                    if (name != null) {
+                        varValueBuffer = symbols.lookup(name);
+                        if (varValueBuffer == null) {
+                            throw new IllegalArgumentException("Undefined variable: "
+                                                               + name);
+                        }
+                        ivarValueBuffer = 0;
+                        i = pos.getIndex(); // Make i point PAST last char of var name
+                    } else {
+                        // Got a null; this means we have an isolated $.
+                        // Tentatively assume this is an anchor.
+                        anchor = 1;
+                        --i; // Back up so loop increment works properly
+                    }
+                    continue; // Back to the top to get varValueBuffer[0]
+                }
+
+                /* An opening bracket indicates the first bracket of a nested
+                 * subpattern, either a normal pattern or a category pattern.  We
+                 * recognize these here and set nestedSet accordingly.
+                 */
+                else if (!isLiteral && c == '[') {
+                    // Handle "[:...:]", representing a character category
+                    char d = charAfter(pattern, i);
+                    if (d == ':') {
+                        i += 2;
+                        int j = pattern.indexOf(":]", i);
+                        if (j < 0) {
+                            throw new IllegalArgumentException("Missing \":]\"");
+                        }
+                        nestedSet = new UnicodeSet();
+                        nestedSet.applyCategory(pattern.substring(i, j));
+                        i = j+1; // Make i point to ']' in ":]"
+                        if (mode == 3) {
+                            // Entire pattern is a category; leave parse loop
+                            set(nestedSet);
+                            break;
+                        }
+                    } else {
+                        // Recurse to get the i-list for this nested set.
+                        pos.setIndex(i); // Add 2 to point AFTER op
+                        nestedSet = new UnicodeSet();
+                        nestedSet.applyPattern(pattern, pos, symbols, ignoreWhitespace);
+                        i = pos.getIndex() - 1; // - 1 to point at ']'
+                    }
+                }
+            }
+
+            /* At this point we have either a character c, or a nested set.  If
+             * we have encountered a nested set, either embedded in the pattern,
+             * or as a variable, we have a non-null nestedSet, and c should be
+             * ignored.  Otherwise c is the current character, and isLiteral
+             * indicates whether it is an escaped literal (or variable) or a
+             * normal unescaped character.  Unescaped characters '-', '&', and
+             * ']' have special meanings.
+             */
+            if (nestedSet != null) {
+                if (lastChar >= 0) {
+                    if (lastOp != 0) {
+                        throw new IllegalArgumentException("Illegal rhs for " + lastChar + lastOp);
+                    }
+                    add((char) lastChar, (char) lastChar);
+                    lastChar = -1;
+                }
+                switch (lastOp) {
+                case '-':
+                    removeAll(nestedSet);
+                    break;
+                case '&':
+                    retainAll(nestedSet);
+                    break;
+                case 0:
+                    addAll(nestedSet);
+                    break;
+                }
+                lastOp = 0;
+            } else if (!isLiteral && c == ']') {
+                // Final closing delimiter.  This is the only way we leave this
+                // loop if the pattern is well-formed.
+                if (anchor > 2 || anchor == 1) {
+                    throw new IllegalArgumentException("Syntax error near $" + pattern);
+                    
+                }
+                if (anchor == 2) {
+                    add(TransliterationRule.ETHER);
+                }
+                break;
+            } else if (lastOp == 0 && !isLiteral && (c == '-' || c == '&')) {
+                lastOp = c;
+            } else if (lastOp == '-') {
+                if (lastChar >= c) {
+                    // Don't allow redundant (a-a) or empty (b-a) ranges;
+                    // these are most likely typos.
+                    throw new IllegalArgumentException("Invalid range " + lastChar +
+                                                       '-' + c);
+                }
+                add((char) lastChar, c);
+                lastOp = 0;
+                lastChar = -1;
+            } else if (lastOp != 0) {
+                // We have <set>&<char> or <char>&<char>
+                throw new IllegalArgumentException("Unquoted " + lastOp);
+            } else {
+                if (lastChar >= 0) {
+                    // We have <char><char>
+                    add((char) lastChar, (char) lastChar);
+                }
+                lastChar = c;
+            }
+        }
+
+        if (mode == 0) {
+            throw new IllegalArgumentException("Missing '[' in \"" +
+                                               pattern.substring(start) + '"');
+        }
+
+        // Handle unprocessed stuff preceding the closing ']'
+        if (lastOp == '-') {
+            // Trailing '-' is treated as literal
+            add(lastOp, lastOp);
+        } else if (lastOp == '&') {
+            throw new IllegalArgumentException("Unquoted trailing " + lastOp);
+        }
+        if (lastChar >= 0) {
+            add((char) lastChar, (char) lastChar);
+        }
+
+        /**
+         * If we saw a '^' after the initial '[' of this pattern, then perform
+         * the complement.  (Inversion after '[:' is handled elsewhere.)
+         */
+        if (invert) {
+            complement();
+        }
+
+        /**
+         * i indexes the last character we parsed or is pattern.length().  In
+         * the latter case, we have run off the end without finding a closing
+         * ']'.  Otherwise, we know i < pattern.length(), and we set the
+         * ParsePosition to the next character to be parsed.
+         */
+        if (i == limit) {
+            throw new IllegalArgumentException("Missing ']' in \"" +
+                                               pattern.substring(start) + '"');
+        }
+        pos.setIndex(i+1);
+
+        if (false) {
+            // Debug parser
+            System.out.println("UnicodeSet(" +
+                               pattern.substring(start, i+1) + ") -> " +
+                               com.ibm.util.Utility.escape(toString()));
+        }
+    }
+
+    //----------------------------------------------------------------
+    // Implementation: Generation of Unicode categories
+    //----------------------------------------------------------------
+
+    /**
+     * Sets this object to the given category, given its name.
+     * The category name must be either a two-letter name, such as
+     * "Lu", or a one letter name, such as "L".  One-letter names
+     * indicate the logical union of all two-letter names that start
+     * with that letter.  Case is significant.  If the name starts
+     * with the character '^' then the complement of the given
+     * character set is returned.
+     *
+     * Although individual categories such as "Lu" are cached, we do
+     * not currently cache single-letter categories such as "L" or
+     * complements such as "^Lu" or "^L".  It would be easy to cache
+     * these as well in a hashtable should the need arise.
+     */
+    private void applyCategory(String catName) {
+        boolean invert = (catName.length() > 1 &&
+                          catName.charAt(0) == '^');
+        if (invert) {
+            catName = catName.substring(1);
+        }
+
+        boolean match = false;
+
+        // BE CAREFUL not to modify the return value from
+        // getCategorySet(int).
+
+        // if we have two characters, search the category map for that
+        // code and either construct and return a UnicodeSet from the
+        // data in the category map or throw an exception
+        if (catName.length() == 2) {
+            int i = CATEGORY_NAMES.indexOf(catName);
+            if (i>=0 && i%2==0) {
+                i /= 2;
+                if (i != UNSUPPORTED_CATEGORY) {
+                    set(getCategorySet(i));
+                    match = true;
+                }
+            }
+        } else if (catName.length() == 1) {
+            // if we have one character, search the category map for
+            // codes beginning with that letter, and union together
+            // all of the matching sets that we find (or throw an
+            // exception if there are no matches)
+            clear();
+            for (int i=0; i<CATEGORY_COUNT; ++i) {
+                if (i != UNSUPPORTED_CATEGORY &&
+                    CATEGORY_NAMES.charAt(2*i) == catName.charAt(0)) {
+                    addAll(getCategorySet(i));
+                    match = true;
+                }
+            }
+        }
+
+        if (!match) {
+            throw new IllegalArgumentException("Bad category");
+        }
+
+        if (invert) {
+            complement();
+        }
+    }
+
+    /**
+     * Returns an inversion list for the given category.  This list is
+     * cached and returned again if this method is called again with
+     * the same parameter.
+     *
+     * Callers MUST NOT MODIFY the returned set.
+     */
+    private static UnicodeSet getCategorySet(int cat) {
+        if (CATEGORY_CACHE[cat] == null) {
+            // Walk through all Unicode characters, noting the start
+            // and end of each range for which Character.getType(c)
+            // returns the given category integer.
+            UnicodeSet set = new UnicodeSet();
+            int start = -1;
+            int end = -2;
+            for (int i=0; i<=0xFFFF; ++i) {
+                if (Character.getType((char)i) == cat) {
+                    if ((end+1) == i) {
+                        end = i;
+                    } else {
+                        if (start >= 0) {
+                            set.add((char) start, (char) end);
+                        }
+                        start = end = i;
+                    }
+                }
+            }
+            if (start >= 0) {
+                set.add((char) start, (char) end);
+            }
+            CATEGORY_CACHE[cat] = set;
+        }
+        return CATEGORY_CACHE[cat];
+    }
+
+    //----------------------------------------------------------------
+    // Implementation: Utility methods
+    //----------------------------------------------------------------
+
+    /**
+     * Returns the character after the given position, or '\uFFFE' if
+     * there is none.
+     */
+    private static final char charAfter(String str, int i) {
+        return ((++i) < str.length()) ? str.charAt(i) : '\uFFFE';
+    }
+
+    private void ensureCapacity(int newLen) {
+        if (newLen <= list.length) return;
+        int[] temp = new int[newLen + GROW_EXTRA];
+        System.arraycopy(list, 0, temp, 0, len);
+        list = temp;
+    }
+
+    private void ensureBufferCapacity(int newLen) {
+        if (buffer != null && newLen <= buffer.length) return;
+        buffer = new int[newLen + GROW_EXTRA];
+    }
+
+    /**
+     * Assumes start <= end.
+     */
+    private int[] range(int start, int end) {
+        if (rangeList == null) {
+            rangeList = new int[] { start, end+1, HIGH };
+        } else {
+            rangeList[0] = start;
+            rangeList[1] = end+1;
+        }
+        return rangeList;
+    }
+
+    //----------------------------------------------------------------
+    // Implementation: Fundamental operations
+    //----------------------------------------------------------------
+
+    // polarity = 0, 3 is normal: x xor y
+    // polarity = 1, 2: x xor ~y == x === y
+
+    private UnicodeSet xor(int[] other, int otherLen, int polarity) {
+        ensureBufferCapacity(len + otherLen);
+        int i = 0, j = 0, k = 0;
+        int a = list[i++];
+        int b;
+        if (polarity == 1 || polarity == 2) {
+            b = LOW;
+            if (other[j] == LOW) { // skip base if already LOW
+                ++j;
+                b = other[j];
+            }
+        } else {
+            b = other[j++];
+        }
+        // simplest of all the routines
+        // sort the values, discarding identicals!
+        while (true) {
+            if (a < b) {
+                buffer[k++] = a;
+                a = list[i++];
+            } else if (b < a) {
+                buffer[k++] = b;
+                b = other[j++];
+            } else if (a != HIGH) { // at this point, a == b
+                // discard both values!
+                a = list[i++];
+                b = other[j++];
+            } else { // DONE!
+                buffer[k++] = HIGH;
+                len = k;
+                break;
+            }
+        }
+        // swap list and buffer
+        int[] temp = list;
+        list = buffer;
+        buffer = temp;
+        return this;
+    }
+
+    // polarity = 0 is normal: x union y
+    // polarity = 2: x union ~y
+    // polarity = 1: ~x union y
+    // polarity = 3: ~x union ~y
+
+    private UnicodeSet add(int[] other, int otherLen, int polarity) {
+        ensureBufferCapacity(len + otherLen);
+        int i = 0, j = 0, k = 0;
+        int a = list[i++];
+        int b = other[j++];
+        // change from xor is that we have to check overlapping pairs
+        // polarity bit 1 means a is second, bit 2 means b is.
+        main:
+        while (true) {
+            switch (polarity) {
+              case 0: // both first; take lower if unequal
+                if (a < b) { // take a
+                    // Back up over overlapping ranges in buffer[]
+                    if (k > 0 && a <= buffer[k-1]) {
+                        // Pick latter end value in buffer[] vs. list[]
+                        a = max(list[i], buffer[--k]);
+                    } else {
+                        // No overlap
+                        buffer[k++] = a;
+                        a = list[i];
+                    }
+                    i++; // Common if/else code factored out
+                    polarity ^= 1;
+                } else if (b < a) { // take b
+                    if (k > 0 && b <= buffer[k-1]) {
+                        b = max(other[j], buffer[--k]);
+                    } else {
+                        buffer[k++] = b;
+                        b = other[j];
+                    }
+                    j++;
+                    polarity ^= 2;
+                } else { // a == b, take a, drop b
+                    if (a == HIGH) break main;
+                    // This is symmetrical; it doesn't matter if
+                    // we backtrack with a or b. - liu
+                    if (k > 0 && a <= buffer[k-1]) {
+                        a = max(list[i], buffer[--k]);
+                    } else {
+                        // No overlap
+                        buffer[k++] = a;
+                        a = list[i];
+                    }
+                    i++;
+                    polarity ^= 1;
+                    b = other[j++]; polarity ^= 2;
+                }
+                break;
+              case 3: // both second; take higher if unequal, and drop other
+                if (b <= a) { // take a
+                    if (a == HIGH) break main;
+                    buffer[k++] = a;
+                } else { // take b
+                    if (b == HIGH) break main;
+                    buffer[k++] = b;
+                }
+                a = list[i++]; polarity ^= 1;   // factored common code
+                b = other[j++]; polarity ^= 2;
+                break;
+              case 1: // a second, b first; if b < a, overlap
+                if (a < b) { // no overlap, take a
+                    buffer[k++] = a; a = list[i++]; polarity ^= 1;
+                } else if (b < a) { // OVERLAP, drop b
+                    b = other[j++]; polarity ^= 2;
+                } else { // a == b, drop both!
+                    if (a == HIGH) break main;
+                    a = list[i++]; polarity ^= 1;
+                    b = other[j++]; polarity ^= 2;
+                }
+                break;
+              case 2: // a first, b second; if a < b, overlap
+                if (b < a) { // no overlap, take b
+                    buffer[k++] = b; b = other[j++]; polarity ^= 2;
+                } else  if (a < b) { // OVERLAP, drop a
+                    a = list[i++]; polarity ^= 1;
+                } else { // a == b, drop both!
+                    if (a == HIGH) break main;
+                    a = list[i++]; polarity ^= 1;
+                    b = other[j++]; polarity ^= 2;
+                }
+                break;
+            }
+        }
+        buffer[k++] = HIGH;    // terminate
+        len = k;
+        // swap list and buffer
+        int[] temp = list;
+        list = buffer;
+        buffer = temp;
+        return this;
+    }
+
+    // polarity = 0 is normal: x intersect y
+    // polarity = 2: x intersect ~y == set-minus
+    // polarity = 1: ~x intersect y
+    // polarity = 3: ~x intersect ~y
+
+    private UnicodeSet retain(int[] other, int otherLen, int polarity) {
+        ensureBufferCapacity(len + otherLen);
+        int i = 0, j = 0, k = 0;
+        int a = list[i++];
+        int b = other[j++];
+        // change from xor is that we have to check overlapping pairs
+        // polarity bit 1 means a is second, bit 2 means b is.
+        main:
+        while (true) {
+            switch (polarity) {
+              case 0: // both first; drop the smaller
+                if (a < b) { // drop a
+                    a = list[i++]; polarity ^= 1;
+                } else if (b < a) { // drop b
+                    b = other[j++]; polarity ^= 2;
+                } else { // a == b, take one, drop other
+                    if (a == HIGH) break main;
+                    buffer[k++] = a; a = list[i++]; polarity ^= 1;
+                    b = other[j++]; polarity ^= 2;
+                }
+                break;
+              case 3: // both second; take lower if unequal
+                if (a < b) { // take a
+                    buffer[k++] = a; a = list[i++]; polarity ^= 1;
+                } else if (b < a) { // take b
+                    buffer[k++] = b; b = other[j++]; polarity ^= 2;
+                } else { // a == b, take one, drop other
+                    if (a == HIGH) break main;
+                    buffer[k++] = a; a = list[i++]; polarity ^= 1;
+                    b = other[j++]; polarity ^= 2;
+                }
+                break;
+              case 1: // a second, b first;
+                if (a < b) { // NO OVERLAP, drop a
+                    a = list[i++]; polarity ^= 1;
+                } else if (b < a) { // OVERLAP, take b
+                    buffer[k++] = b; b = other[j++]; polarity ^= 2;
+                } else { // a == b, drop both!
+                    if (a == HIGH) break main;
+                    a = list[i++]; polarity ^= 1;
+                    b = other[j++]; polarity ^= 2;
+                }
+                break;
+              case 2: // a first, b second; if a < b, overlap
+                if (b < a) { // no overlap, drop b
+                    b = other[j++]; polarity ^= 2;
+                } else  if (a < b) { // OVERLAP, take a
+                    buffer[k++] = a; a = list[i++]; polarity ^= 1;
+                } else { // a == b, drop both!
+                    if (a == HIGH) break main;
+                    a = list[i++]; polarity ^= 1;
+                    b = other[j++]; polarity ^= 2;
+                }
+                break;
+            }
+        }
+        buffer[k++] = HIGH;    // terminate
+        len = k;
+        // swap list and buffer
+        int[] temp = list;
+        list = buffer;
+        buffer = temp;
+        return this;
+    }
+
+    private static final int max(int a, int b) {
+        return (a > b) ? a : b;
+    }
+}
diff --git a/src/com/ibm/text/UnicodeToHexTransliterator.java b/src/com/ibm/text/UnicodeToHexTransliterator.java
new file mode 100755
index 0000000..77403fc
--- /dev/null
+++ b/src/com/ibm/text/UnicodeToHexTransliterator.java
@@ -0,0 +1,330 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UnicodeToHexTransliterator.java,v $ 
+ * $Date: 2000/06/28 20:49:54 $ 
+ * $Revision: 1.9 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.util.*;
+
+/**
+ * A transliterator that converts from Unicode characters to 
+ * hexadecimal Unicode escape sequences.  It outputs a
+ * prefix specified in the constructor and optionally converts the hex
+ * digits to uppercase.
+ *
+ * <p>The format of the output is set by a pattern.  This pattern
+ * follows the same syntax as <code>HexToUnicodeTransliterator</code>,
+ * except it does not allow multiple specifications.  The pattern sets
+ * the prefix string, suffix string, and minimum and maximum digit
+ * count.  There are no setters or getters for these attributes; they
+ * are set only through the pattern.
+ *
+ * <p>The setUppercase() and isUppercase() methods control whether 'a'
+ * through 'f' or 'A' through 'F' are output as hex digits.  This is
+ * not controlled through the pattern; only through the methods.  The
+ * default is uppercase.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: UnicodeToHexTransliterator.java,v $ $Revision: 1.9 $ $Date: 2000/06/28 20:49:54 $
+ */
+public class UnicodeToHexTransliterator extends Transliterator {
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Package accessible ID for this transliterator.
+     */
+    static final String _ID = "Unicode-Hex";
+
+    private static final char[] HEX_DIGITS = {
+        '0', '1', '2', '3', '4', '5', '6', '7',
+        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
+        '0', '1', '2', '3', '4', '5', '6', '7',
+        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
+    };
+
+    // Character constants for special pattern chars
+    private static final char ZERO      = '0';
+    private static final char POUND     = '#';
+    private static final char BACKSLASH = '\\';
+
+    /**
+     * The pattern set by applyPattern() and returned by toPattern().
+     */
+    private String pattern;
+
+    /**
+     * The string preceding the hex digits, parsed from the pattern.
+     */
+    private String prefix;
+
+    /**
+     * The string following the hex digits, parsed from the pattern.
+     */
+    private String suffix;
+
+    /**
+     * The minimum number of hex digits to output, between 1 and 4,
+     * inclusive.  Parsed from the pattern.
+     */
+    private int minDigits;
+
+    /**
+     * If true, output uppercase hex digits; otherwise output
+     * lowercase.  Set by setUppercase() and returned by isUppercase().
+     */
+    private boolean uppercase;
+
+    /**
+     * Constructs a transliterator.
+     * @param pattern The pattern for this transliterator.  See
+     * applyPattern() for pattern syntax.
+     * @param uppercase if true, the four hex digits will be
+     * converted to uppercase; otherwise they will be lowercase.
+     * Ignored if direction is HEX_UNICODE.
+     * @param filter the filter for this transliterator, or
+     * null if none.
+     */
+    public UnicodeToHexTransliterator(String pattern, boolean uppercase,
+                                      UnicodeFilter filter) {
+        super(_ID, filter);
+        this.uppercase = uppercase;
+        applyPattern(pattern);
+    }
+
+    /**
+     * Constructs an uppercase transliterator with no filter.
+     * @param pattern The pattern for this transliterator.  See
+     * applyPattern() for pattern syntax.
+     */
+    public UnicodeToHexTransliterator(String pattern) {
+        this(pattern, true, null);
+    }
+
+    /**
+     * Constructs a transliterator with the default prefix "&#092;u"
+     * that outputs four uppercase hex digits.
+     */
+    public UnicodeToHexTransliterator() {
+        super(_ID, null);
+        pattern = "\\\\u0000";
+        prefix = "\\u";
+        suffix = "";
+        minDigits = 4;
+        uppercase = true;
+    }
+
+    /**
+     * Set the pattern recognized by this transliterator.  The pattern
+     * must contain zero or more prefix characters, one or more digit
+     * characters, and zero or more suffix characters.  The digit
+     * characters indicates optional digits ('#') followed by required
+     * digits ('0').  The total number of digits cannot exceed 4, and
+     * must be at least 1 required digit.  Use a backslash ('\\') to
+     * escape any of the special characters.  An empty pattern is not
+     * allowed.
+     *
+     * <p>Example: "U+0000" specifies a prefix of "U+", exactly four
+     * digits, and no suffix.  "<###0>" has a prefix of "<", between
+     * one and four digits, and a suffix of ">".
+     *
+     * <p><pre>
+     * pattern := prefix-char* digit-spec suffix-char*
+     * digit-spec := '#'* '0'+
+     * prefix-char := [^special-char] | '\\' special-char
+     * suffix-char := [^special-char] | '\\' special-char
+     * special-char := ';' | '0' | '#' | '\\'
+     * </pre>
+     *
+     * <p>Limitations: There is no way to set the uppercase attribute
+     * in the pattern.  (applyPattern() does not alter the uppercase
+     * attribute.)
+     */
+    public void applyPattern(String thePattern) {
+        StringBuffer prefixBuf = null;
+        StringBuffer suffixBuf = null;
+        int minDigits = 0;
+        int maxDigits = 0;
+
+        /* The mode specifies where we are in each spec.
+         * mode 0 = in prefix
+         * mode 1 = in optional digits (#)
+         * mode 2 = in required digits (0)
+         * mode 3 = in suffix
+         */
+        int mode = 0;
+
+        for (int i=0; i<thePattern.length(); ++i) {
+            char c = thePattern.charAt(i);
+            boolean isLiteral = false;
+            if (c == BACKSLASH) {
+                if ((i+1)<thePattern.length()) {
+                    isLiteral = true;
+                    c = thePattern.charAt(++i);
+                } else {
+                    // Trailing '\\'
+                    throw new IllegalArgumentException("Trailing '\\'");
+                }
+            }
+
+            if (!isLiteral) {
+                switch (c) {
+                case POUND:
+                    // Seeing a '#' moves us from mode 0 (prefix) to mode 1
+                    // (optional digits).
+                    if (mode == 0) {
+                        ++mode;
+                    } else if (mode != 1) {
+                        // Unquoted '#'
+                        throw new IllegalArgumentException("Unquoted '#'");
+                    }
+                    ++maxDigits;
+                    break;
+                case ZERO:
+                    // Seeing a '0' moves us to mode 2 (required digits)
+                    if (mode < 2) {
+                        mode = 2;
+                    } else if (mode != 2) {
+                        // Unquoted '0'
+                        throw new IllegalArgumentException("Unquoted '0'");
+                    }
+                    ++minDigits;
+                    ++maxDigits;
+                    break;
+                default:
+                    isLiteral = true;
+                    break;
+                }
+            }
+
+            if (isLiteral) {
+                if (mode == 0) {
+                    if (prefixBuf == null) {
+                        prefixBuf = new StringBuffer();
+                    }
+                    prefixBuf.append(c);
+                } else {
+                    // Any literal outside the prefix moves us into mode 3
+                    // (suffix)
+                    mode = 3;
+                    if (suffixBuf == null) {
+                        suffixBuf = new StringBuffer();
+                    }
+                    suffixBuf.append(c);
+                }
+            }
+        }
+
+        if (minDigits < 1 || maxDigits > 4) {
+            // Invalid min/max digit count
+            throw new IllegalArgumentException("Invalid min/max digit count");
+        }
+
+        pattern = thePattern;
+        prefix = (prefixBuf == null) ? "" : prefixBuf.toString();
+        suffix = (suffixBuf == null) ? "" : suffixBuf.toString();
+        this.minDigits = minDigits;
+    }
+
+    /**
+     * Return this transliterator's pattern.
+     */
+    public String toPattern() {
+        return pattern;
+    }
+
+    /**
+     * Returns the string that precedes the four hex digits.
+     * @return prefix string
+     */
+    public String getPrefix() {
+        return prefix;
+    }
+
+    /**
+     * Sets the string that precedes the four hex digits.
+     *
+     * <p>Callers must take care if a transliterator is in use by
+     * multiple threads.  The prefix should not be changed by one
+     * thread while another thread may be transliterating.
+     * @param prefix prefix string
+     */
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    /**
+     * Returns true if this transliterator outputs uppercase hex digits.
+     */
+    public boolean isUppercase() {
+        return uppercase;
+    }
+
+    /**
+     * Sets if this transliterator outputs uppercase hex digits.
+     *
+     * <p>Callers must take care if a transliterator is in use by
+     * multiple threads.  The uppercase mode should not be changed by
+     * one thread while another thread may be transliterating.
+     * @param outputUppercase if true, then this transliterator
+     * outputs uppercase hex digits.
+     */
+    public void setUppercase(boolean outputUppercase) {
+        uppercase = outputUppercase;
+    }
+
+    /**
+     * Implements {@link Transliterator#handleTransliterate}.
+     */
+    protected void handleTransliterate(Replaceable text,
+                                       Position offsets, boolean incremental) {
+        /**
+         * Performs transliteration changing all characters to
+         * Unicode hexadecimal escapes.  For example, '@' -> "U+0040",
+         * assuming the prefix is "U+". 
+         */
+        int cursor = offsets.start;
+        int limit = offsets.limit;
+
+        UnicodeFilter filter = getFilter();
+        StringBuffer hex = new StringBuffer(prefix);
+        int prefixLen = prefix.length();
+
+        while (cursor < limit) {
+            char c = text.charAt(cursor);
+            if (filter != null && !filter.contains(c)) {
+                ++cursor;
+                continue;
+            }
+
+            hex.setLength(prefixLen);
+            boolean showRest = false;
+            for (int i=3; i>=0; --i) {
+                int d = (c >> (i*4)) & 0xF;
+                if (showRest || (d != 0) || minDigits > i) {
+                    hex.append(HEX_DIGITS[uppercase ? (d|16) : d]);
+                    showRest = true;
+                }
+            }
+            hex.append(suffix);
+
+            text.replace(cursor, cursor+1, hex.toString());
+            int len = hex.length();
+            cursor += len; // Advance cursor by 1 and adjust for new text
+            --len;
+            limit += len;
+        }
+
+        offsets.contextLimit += limit - offsets.limit;
+        offsets.limit = limit;
+        offsets.start = cursor;
+    }
+}
diff --git a/src/com/ibm/text/components/AppletFrame.java b/src/com/ibm/text/components/AppletFrame.java
new file mode 100755
index 0000000..9997ac8
--- /dev/null
+++ b/src/com/ibm/text/components/AppletFrame.java
@@ -0,0 +1,152 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/components/Attic/AppletFrame.java,v $ 
+ * $Date: 2001/02/05 19:24:47 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.components;
+import java.applet.*;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.awt.*;
+import java.awt.event.*;
+import java.io.InputStream;
+import java.io.IOException;
+
+/**
+ * <p>A Frame that runs an Applet within itself, making it possible
+ * for an applet to run as an application.  Usage:
+ *
+ * <pre>
+ * public class MyApplet extends Applet {
+ *     public static void main(String args[]) {
+ *         MyApplet applet = new MyApplet();
+ *         new AppletFrame("My Applet Running As An App", applet, 640, 480);
+ *     }
+ *     ...
+ * }
+ * <pre>
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: AppletFrame.java,v $ $Revision: 1.3 $ $Date: 2001/02/05 19:24:47 $
+ */
+public class AppletFrame extends Frame implements AppletStub, AppletContext {
+
+    Applet applet;
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+    
+    /**
+     * Construct a Frame running the given Applet with the default size
+     * of 640 by 480.
+     * When the Frame is closed, the applet's stop() method is called,
+     * the Frame is dispose()d of, and System.exit(0) is called.
+     *
+     * @param name the Frame title
+     * @param applet the applet to be run
+     */
+    public AppletFrame(String name, Applet applet) {
+        this(name, applet, 640, 480);
+    }
+
+    /**
+     * Construct a Frame running the given Applet with the given size.
+     * When the Frame is closed, the applet's stop() method is called,
+     * the Frame is dispose()d of, and System.exit(0) is called.
+     *
+     * @param name the Frame title
+     * @param applet the applet to be run
+     * @param width width of the Frame
+     * @param height height of the Frame
+     */
+    public AppletFrame(String name, Applet applet, int width, int height) {
+        super(name);
+        this.applet = applet;
+        applet.setStub(this);
+
+        resize(width, height);
+        add("Center", applet);
+        show();
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                AppletFrame.this.applet.stop();
+                dispose();
+                System.exit(0);
+            }
+        });
+
+        applet.init();
+        applet.start();
+    }
+
+    // AppletStub API
+    public void appletResize(int width,
+                             int height) {
+        resize(width, height);
+    }
+
+    public AppletContext getAppletContext() {
+        return this;
+    }
+
+    public URL getCodeBase() {
+        return null;
+    }
+
+    public URL getDocumentBase() {
+        return null;
+    }
+    
+    public String getParameter(String name) {
+        return "PARAMETER";
+    }
+
+    public boolean isActive() {
+        return true;
+    }
+
+    // AppletContext API
+    public Applet getApplet(String name) {
+        return applet;
+    }
+
+    public Enumeration getApplets() {
+        return null;
+    }
+
+    public AudioClip getAudioClip(URL url) {
+        return null;
+    }
+
+    public Image getImage(URL url) {
+        return null;
+    }
+
+    public void showDocument(URL url) {}
+    public void showDocument(URL url, String target) {}
+
+    public void showStatus(String status) {
+        System.out.println(status);
+    }
+    
+    public void setStream(String key, InputStream stream) throws IOException {
+    }
+    
+    public InputStream getStream(String key) {
+        return null;
+    }
+    
+    public Iterator getStreamKeys() {
+        return null;
+    }
+}
diff --git a/src/com/ibm/text/components/DumbTextComponent.java b/src/com/ibm/text/components/DumbTextComponent.java
new file mode 100755
index 0000000..a12f1db
--- /dev/null
+++ b/src/com/ibm/text/components/DumbTextComponent.java
@@ -0,0 +1,720 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/components/Attic/DumbTextComponent.java,v $ 
+ * $Date: 2000/03/10 04:07:26 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.components;
+import java.awt.*;
+import java.awt.event.*;
+import java.text.*;
+import java.awt.datatransfer.*;
+
+// LIU: Changed from final to non-final
+public class DumbTextComponent extends Canvas
+  implements KeyListener, MouseListener, MouseMotionListener, FocusListener
+  {
+    private transient static final String copyright =
+      "Copyright \u00A9 1998, Mark Davis. All Rights Reserved.";
+    private transient static boolean DEBUG = false;
+
+    private String contents = "";
+    private Selection selection = new Selection();
+    private boolean editable = true;
+
+    private transient Selection tempSelection = new Selection();
+    private transient boolean focus;
+    private transient BreakIterator lineBreaker = BreakIterator.getLineInstance();
+    private transient BreakIterator wordBreaker = BreakIterator.getWordInstance();
+    private transient BreakIterator charBreaker = BreakIterator.getCharacterInstance();
+    private transient int lineAscent;
+    private transient int lineHeight;
+    private transient int lineLeading;
+    private transient int lastHeight = 10;
+    private transient int lastWidth = 50;
+    private static final int MAX_LINES = 200; // LIU: Use symbolic name
+    private transient int[] lineStarts = new int[MAX_LINES]; // LIU
+    private transient int lineCount = 1;
+
+    private transient boolean valid = false;
+    private transient FontMetrics fm;
+    private transient boolean redoLines = true;
+    private transient boolean doubleClick = false;
+    private transient TextListener textListener;
+    private transient ActionListener selectionListener;
+    private transient Image cacheImage;
+    private transient Dimension mySize;
+    private transient int xInset = 5;
+    private transient int yInset = 5;
+    private transient Point startPoint = new Point();
+    private transient Point endPoint = new Point();
+    private transient Point caretPoint = new Point();
+    private transient static String clipBoard;
+
+    private static final char CR = '\015'; // LIU
+
+    // ============================================
+
+    public DumbTextComponent() {
+        addMouseListener(this);
+        addMouseMotionListener(this);
+        addKeyListener(this);
+        addFocusListener(this);
+        setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
+
+    }
+
+// ================ Events ====================
+
+    public boolean isFocusTraversable() { return true; }
+
+	public void addActionListener(ActionListener l) {
+        selectionListener = AWTEventMulticaster.add(selectionListener, l);
+	}
+
+	public void removeActionListener(ActionListener l) {
+        selectionListener = AWTEventMulticaster.remove(selectionListener, l);
+	}
+
+	public void addTextListener(TextListener l) {
+        textListener = AWTEventMulticaster.add(textListener, l);
+	}
+
+	public void removeTextListener(TextListener l) {
+        textListener = AWTEventMulticaster.remove(textListener, l);
+	}
+
+    private transient boolean pressed;
+
+	public void mousePressed(MouseEvent e) {
+	    if (DEBUG) System.out.println("mousePressed");
+	    if (pressed) {
+	        select(e,false);
+	    } else {
+            doubleClick = e.getClickCount() > 1;
+            requestFocus();
+            select(e, true);
+    	    pressed = true;
+	    }
+	}
+
+	public void mouseDragged(MouseEvent e) {
+	    if (DEBUG) System.out.println("mouseDragged");
+	    select(e, false);
+	}
+
+	public void mouseReleased(MouseEvent e) {
+	    if (DEBUG) System.out.println("mouseReleased");
+	    pressed = false;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+	    //if (pressed) select(e, false);
+	}
+
+	public void mouseExited(MouseEvent e){
+	    //if (pressed) select(e, false);
+	}
+
+	public void mouseClicked(MouseEvent e) {}
+	public void mouseMoved(MouseEvent e) {}
+
+
+    public void focusGained(FocusEvent e) {
+	    if (DEBUG) System.out.println("focusGained");
+	    focus = true;
+	    valid = false;
+	    repaint(16);
+	}
+	public void focusLost(FocusEvent e) {
+	    if (DEBUG) System.out.println("focusLost");
+	    focus = false;
+	    valid = false;
+	    repaint(16);
+	}
+
+    public void select(MouseEvent e, boolean first) {
+	    point2Offset(e.getPoint(), tempSelection);
+        if (first) {
+            if ((e.getModifiers() & InputEvent.SHIFT_MASK) == 0) {
+                tempSelection.anchor = tempSelection.caret;
+            }
+	    }
+	    // fix words
+	    if (doubleClick) {
+	        tempSelection.expand(wordBreaker);
+	    }
+	    select(tempSelection);
+    }
+
+	public void keyPressed(KeyEvent e) {
+        int code = e.getKeyCode();
+        if (DEBUG) System.out.println("keyPressed "
+          + hex((char)code) + ", " + hex((char)e.getModifiers()));
+        int start = selection.getStart();
+        int end = selection.getEnd();
+        boolean shift = (e.getModifiers() & KeyEvent.SHIFT_MASK) != 0;
+        boolean ctrl = (e.getModifiers() & KeyEvent.CTRL_MASK) != 0;
+        switch (code) {
+        case KeyEvent.VK_Q:
+            if (!ctrl || !editable) break;
+            fixHex();
+            break;
+        case KeyEvent.VK_V:
+            if (!ctrl || !editable) break;
+            insertText(clipBoard);
+            break;
+        case KeyEvent.VK_C:
+            if (!ctrl) break;
+            clipBoard = contents.substring(selection.getStart(), selection.getEnd());
+            break;
+        case KeyEvent.VK_X:
+            if (!ctrl) break;
+            clipBoard = contents.substring(selection.getStart(), selection.getEnd());
+            if (editable) break;
+            insertText("");
+            break;
+        case KeyEvent.VK_A:
+            if (!ctrl) break;
+            select(Integer.MAX_VALUE, 0, false);
+            break;
+        case KeyEvent.VK_RIGHT:
+            tempSelection.set(selection);
+            tempSelection.nextBound(ctrl ? wordBreaker : charBreaker, +1, shift);
+            select(tempSelection);
+            break;
+        case KeyEvent.VK_LEFT:
+            tempSelection.set(selection);
+            tempSelection.nextBound(ctrl ? wordBreaker : charBreaker, -1, shift);
+            select(tempSelection);
+            break;
+        case KeyEvent.VK_UP: // LIU: Add support for up arrow
+            tempSelection.set(selection);
+            tempSelection.caret = lineDelta(tempSelection.caret, -1);
+            if (!shift) {
+                tempSelection.anchor = tempSelection.caret;
+            }
+            select(tempSelection);
+            break;
+        case KeyEvent.VK_DOWN: // LIU: Add support for down arrow
+            tempSelection.set(selection);
+            tempSelection.caret = lineDelta(tempSelection.caret, +1);
+            if (!shift) {
+                tempSelection.anchor = tempSelection.caret;
+            }
+            select(tempSelection);
+            break;
+        case KeyEvent.VK_DELETE: // LIU: Add delete key support
+            if (!editable) break;
+            if (contents.length() == 0) break;
+            start = selection.getStart();
+            end = selection.getEnd();
+            if (start == end) {
+                ++end;
+                if (end > contents.length()) {
+                    getToolkit().beep();
+                    return;
+                }
+            }
+            replaceRange("", start, end);
+            break;            
+        }
+    }
+
+    /**
+     * LIU: Given an offset into contents, moves up or down by lines,
+     * according to lineStarts[].
+     * @param off the offset into contents
+     * @param delta how many lines to move up (< 0) or down (> 0)
+     * @return the new offset into contents
+     */
+    private int lineDelta(int off, int delta) {
+        int line = findLine(off, false);
+        int posInLine = off - lineStarts[line];
+        // System.out.println("off=" + off + " at " + line + ":" + posInLine);
+        line += delta;
+        if (line < 0) {
+            line = posInLine = 0;
+        } else if (line >= lineCount) {
+            return contents.length();
+        }
+        off = lineStarts[line] + posInLine;
+        if (off >= lineStarts[line+1]) {
+            off = lineStarts[line+1] - 1;
+        }
+        return off;
+    }
+      
+	public void keyReleased(KeyEvent e) {
+        int code = e.getKeyCode();
+        if (DEBUG) System.out.println("keyReleased "
+          + hex((char)code) + ", " + hex((char)e.getModifiers()));
+    }
+
+	public void keyTyped(KeyEvent e) {
+        char ch = e.getKeyChar();
+        if (DEBUG) System.out.println("keyTyped "
+          + hex((char)ch) + ", " + hex((char)e.getModifiers()));
+        if ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0) return;
+        switch (ch) {
+        case KeyEvent.CHAR_UNDEFINED:
+            break;
+        case KeyEvent.VK_BACK_SPACE:
+            if (!editable) break;
+            if (contents.length() == 0) break;
+            int start = selection.getStart();
+            int end = selection.getEnd();
+            if (start == end) {
+                --start;
+                if (start < 0) {
+                    getToolkit().beep(); // LIU: Add audio feedback of NOP
+                    return;
+                }
+            }
+            replaceRange("", start, end);
+            break;
+        default:
+            if (!editable) break;
+            // LIU: Dispatch to subclass API
+            handleKeyTyped(e);
+            break;
+        }
+    }
+
+    // LIU: Subclass API for handling of key typing
+    protected void handleKeyTyped(KeyEvent e) {
+        insertText(String.valueOf(e.getKeyChar()));
+    }
+
+// ===================== Control ======================
+
+    public synchronized void setEditable(boolean b) {
+        editable = b;
+    }
+
+    public boolean isEditable() {
+        return editable;
+    }
+
+    public void select(Selection newSelection) {
+        newSelection.pin(contents);
+        if (!selection.equals(newSelection)) {
+            selection.set(newSelection);
+            if (selectionListener != null) {
+                selectionListener.actionPerformed(
+                  new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
+                    "Selection Changed", 0));
+            }
+            repaint(10);
+            valid = false;
+        }
+    }
+
+    public void select(int start, int end) {
+        select(start, end, false);
+    }
+
+    public void select(int start, int end, boolean clickAfter) {
+        tempSelection.set(start, end, clickAfter);
+        select(tempSelection);
+    }
+
+    public int getSelectionStart() {
+        return selection.getStart();
+    }
+
+    public int getSelectionEnd() {
+        return selection.getEnd();
+    }
+
+    public void setBounds(int x, int y, int w, int h) {
+        super.setBounds(x,y,w,h);
+        redoLines = true;
+    }
+
+    public Dimension getPreferredSize() {
+        return new Dimension(lastWidth,lastHeight);
+    }
+
+    public Dimension getMaximumSize() {
+        return new Dimension(lastWidth,lastHeight);
+    }
+
+    public Dimension getMinimumSize() {
+        return new Dimension(lastHeight,lastHeight);
+    }
+
+    public void setText(String text) {
+        setText2(text);
+        select(tempSelection.set(selection).pin(contents));
+    }
+
+    public void setText2(String text) {
+        contents = text;
+        charBreaker.setText(text);
+        wordBreaker.setText(text);
+        lineBreaker.setText(text);
+        redoLines = true;
+        if (textListener != null)
+            textListener.textValueChanged(
+              new TextEvent(this, TextEvent.TEXT_VALUE_CHANGED));
+        repaint(16);
+    }
+
+    public void insertText(String text) {
+        replaceRange(text, selection.getStart(), selection.getEnd());
+    }
+
+    public void replaceRange(String s, int start, int end) {
+        setText2(contents.substring(0,start) + s
+          + contents.substring(end));
+        select(tempSelection.set(selection).
+          fixAfterReplace(start, end, s.length()));
+    }
+
+    public String getText() {
+        return contents;
+    }
+
+    public void setFont(Font font) {
+        super.setFont(font);
+        redoLines = true;
+        repaint(16);
+    }
+
+    // ================== Graphics ======================
+
+    public void update(Graphics g) {
+        if (DEBUG) System.out.println("update");
+        paint(g);
+    }
+
+    public void paint(Graphics g) {
+        mySize = getSize();
+        if (cacheImage == null
+          || cacheImage.getHeight(this) != mySize.height
+          || cacheImage.getWidth(this) != mySize.width) {
+            cacheImage = createImage(mySize.width, mySize.height);
+            valid = false;
+        }
+        if (!valid || redoLines) {
+            if (DEBUG) System.out.println("painting");
+            paint2(cacheImage.getGraphics());
+            valid = true;
+        }
+        //getToolkit().sync();
+        if (DEBUG) System.out.println("copying");
+        g.drawImage(cacheImage,
+          0, 0, mySize.width, mySize.height,
+          0, 0, mySize.width, mySize.height,
+          this);
+    }
+
+    public void paint2(Graphics g) {
+        g.clearRect(0, 0, mySize.width, mySize.height);
+        if (DEBUG) System.out.println("print");
+        if (focus) g.setColor(Color.black);
+        else g.setColor(Color.gray);
+        g.drawRect(0,0,mySize.width-1,mySize.height-1);
+        g.setClip(1,1,
+          mySize.width-2,mySize.height-2);
+        g.setColor(Color.black);
+        g.setFont(getFont());
+        fm = g.getFontMetrics();
+        lineAscent = fm.getAscent();
+        lineLeading = fm.getLeading();
+        lineHeight = lineAscent + fm.getDescent() + lineLeading;
+        int y = yInset + lineAscent;
+        String lastSubstring = "";
+        if (redoLines) fixLineStarts(mySize.width-xInset-xInset);
+        for (int i = 0; i < lineCount; y += lineHeight, ++i) {
+            // LIU: Don't display terminating ^M characters
+            int lim = lineStarts[i+1];
+            if (lim > 0 && contents.length() > 0 &&
+                contents.charAt(lim-1) == CR) --lim;
+            lastSubstring = contents.substring(lineStarts[i],lim);
+            g.drawString(lastSubstring, xInset, y);
+        }
+        drawSelection(g, lastSubstring);
+        lastHeight = y + yInset - lineHeight + yInset;
+        lastWidth = mySize.width-xInset-xInset;
+    }
+
+    void paintRect(Graphics g, int x, int y, int w, int h) {
+        if (focus) {
+            g.fillRect(x, y, w, h);
+        } else {
+            g.drawRect(x, y, w-1, h-1);
+        }
+    }
+
+    public void drawSelection(Graphics g, String lastSubstring) {
+        g.setXORMode(Color.black);
+        if (selection.isCaret()) {
+            offset2Point(selection.caret, selection.clickAfter, caretPoint);
+        } else {
+            if (focus) g.setColor(Color.blue);
+            else g.setColor(Color.yellow);
+            offset2Point(selection.getStart(), true, startPoint);
+            offset2Point(selection.getEnd(), false, endPoint);
+            if (selection.getStart() == selection.caret)
+                caretPoint.setLocation(startPoint);
+            else caretPoint.setLocation(endPoint);
+            if (startPoint.y == endPoint.y) {
+                paintRect(g, startPoint.x, startPoint.y,
+                  Math.max(1,endPoint.x-startPoint.x), lineHeight);
+            } else {
+                paintRect(g, startPoint.x, startPoint.y,
+                  (mySize.width-xInset)-startPoint.x, lineHeight);
+                if (startPoint.y + lineHeight < endPoint.y)
+                  paintRect(g, xInset, startPoint.y + lineHeight,
+                  (mySize.width-xInset)-xInset, endPoint.y - startPoint.y - lineHeight);
+                paintRect(g, xInset, endPoint.y, endPoint.x-xInset, lineHeight);
+            }
+        }
+        if (focus || selection.isCaret()) {
+            if (focus) g.setColor(Color.green);
+            else g.setColor(Color.red);
+            int line = caretPoint.x - (selection.clickAfter ? 0 : 1);
+            g.fillRect(line, caretPoint.y, 1, lineHeight);
+            int w = lineHeight/12 + 1;
+            int braces = line - (selection.clickAfter ? -1 : w);
+            g.fillRect(braces, caretPoint.y, w, 1);
+            g.fillRect(braces, caretPoint.y + lineHeight - 1, w, 1);
+        }
+    }
+
+    public Point offset2Point(int off, boolean start, Point p) {
+        int line = findLine(off, start);
+        int width = 0;
+        try {
+            width = fm.stringWidth(
+              contents.substring(lineStarts[line], off));
+        } catch (Exception e) {
+            System.out.println(e);
+        }
+        p.x = width + xInset;
+        if (p.x > mySize.width - xInset)
+            p.x = mySize.width - xInset;
+        p.y = lineHeight * line + yInset;
+        return p;
+    }
+
+    private int findLine(int off, boolean start) {
+        // if it is start, then go to the next line!
+        if (start) ++off;
+        for (int i = 1; i < lineCount; ++i) {
+            // LIU: This was <= ; changed to < to make caret after
+            // final CR in line appear at START of next line.
+            if (off < lineStarts[i]) return i-1;
+        }
+        // LIU: Check for special case; after CR at end of the last line
+        if (off == lineStarts[lineCount] &&
+            off > 0 && contents.length() > 0 && contents.charAt(off-1) == CR) {
+            return lineCount;
+        }
+        return lineCount-1;
+    }
+
+    // offsets on any line will go from start,true to end,false
+    // excluding start,false and end,true
+    public Selection point2Offset(Point p, Selection o) {
+        if (p.y < yInset) {
+            o.caret = 0;
+            o.clickAfter = true;
+            return o;
+        }
+        int line = (p.y - yInset)/lineHeight;
+        if (line >= lineCount) {
+            o.caret = contents.length();
+            o.clickAfter = false;
+            return o;
+        }
+        int target = p.x - xInset;
+        if (target <= 0) {
+            o.caret = lineStarts[line];
+            o.clickAfter = true;
+            return o;
+        }
+        int lowGuess = lineStarts[line];
+        int lowWidth = 0;
+        int highGuess = lineStarts[line+1];
+        int highWidth = fm.stringWidth(contents.substring(lineStarts[line],highGuess));
+        if (target >= highWidth) {
+            o.caret = lineStarts[line+1];
+            o.clickAfter = false;
+            return o;
+        }
+        while (lowGuess < highGuess - 1) {
+            int guess = (lowGuess + highGuess)/2;
+            int width = fm.stringWidth(contents.substring(lineStarts[line],guess));
+            if (width <= target) {
+                lowGuess = guess;
+                lowWidth = width;
+                if (width == target) break;
+            } else {
+                highGuess = guess;
+                highWidth = width;
+            }
+        }
+        // at end, either lowWidth < target < width(low+1), or lowWidth = target
+        int highBound = charBreaker.following(lowGuess);
+        int lowBound = charBreaker.previous();
+        // we are now at character boundaries
+        if (lowBound != lowGuess)
+            lowWidth = fm.stringWidth(contents.substring(lineStarts[line],lowBound));
+        if (highBound != highGuess)
+            highWidth = fm.stringWidth(contents.substring(lineStarts[line],highBound));
+        // we now have the right widths
+        if (target - lowWidth < highWidth - target) {
+            o.caret = lowBound;
+            o.clickAfter = true;
+        } else {
+            o.caret = highBound;
+            o.clickAfter = false;
+        }
+        // we now have the closest!
+        return o;
+    }
+
+    private void fixLineStarts(int width) {
+        lineCount = 1;
+        lineStarts[0] = 0;
+        if (contents.length() == 0) {
+            lineStarts[1] = 0;
+            return;
+        }
+        int end = 0;
+        // LIU: Add check for MAX_LINES
+        for (int start = 0; start < contents.length() && lineCount < MAX_LINES;
+             start = end) {
+            end = nextLine(fm, start, width);
+            lineStarts[lineCount++] = end;
+            if (end == start) { // LIU: Assertion
+                throw new RuntimeException("nextLine broken");
+            }
+        }
+        --lineCount;
+        redoLines = false;
+    }
+
+    // LIU: Enhanced to wrap long lines.  Bug with return of start fixed.
+    public int nextLine(FontMetrics fm, int start, int width) {
+        int len = contents.length();
+        for (int i = start; i < len; ++i) {
+            // check for line separator
+            char ch = (contents.charAt(i));
+            if (ch >= 0x000A && ch <= 0x000D || ch == 0x2028 || ch == 0x2029) {
+                len = i + 1;
+                if (ch == 0x000D && i+1 < len && contents.charAt(i+1) == 0x000A) // crlf
+                    ++len; // grab extra char
+                break;
+            }
+        }
+        String subject = contents.substring(start,len);
+        if (visibleWidth(fm, subject) <= width)
+          return len;
+
+        // LIU: Remainder of this method rewritten to accomodate lines
+        // longer than the component width by first trying to break
+        // into lines; then words; finally chars.
+        int n = findFittingBreak(fm, subject, width, lineBreaker);
+        if (n == 0) {
+            n = findFittingBreak(fm, subject, width, wordBreaker);
+        }
+        if (n == 0) {
+            n = findFittingBreak(fm, subject, width, charBreaker);
+        }
+        return n > 0 ? start + n : len;
+    }
+
+    /**
+     * LIU: Finds the longest substring that fits a given width
+     * composed of subunits returned by a BreakIterator.  If the smallest
+     * subunit is too long, returns 0.
+     * @param fm metrics to use
+     * @param line the string to be fix into width
+     * @param width line.substring(0, result) must be <= width
+     * @param breaker the BreakIterator that will be used to find subunits
+     * @return maximum characters, at boundaries returned by breaker,
+     * that fit into width, or zero on failure
+     */
+    private int findFittingBreak(FontMetrics fm, String line, int width,
+                                 BreakIterator breaker) {
+        breaker.setText(line);
+        int last = breaker.first();
+        int end = breaker.next();
+        while (end != BreakIterator.DONE &&
+               visibleWidth(fm, line.substring(0, end)) <= width) {
+            last = end;
+            end = breaker.next();
+        }
+        return last;
+    }
+
+    public int visibleWidth(FontMetrics fm, String s) {
+        int i;
+        for (i = s.length()-1; i >= 0; --i) {
+            char ch = s.charAt(i);
+            if (!(ch == ' ' || ch >= 0x000A && ch <= 0x000D || ch == 0x2028 || ch == 0x2029))
+              return fm.stringWidth(s.substring(0,i+1));;
+        }
+        return 0;
+    }
+
+// =============== Utility ====================
+
+    private void fixHex() {
+        if (selection.getEnd() == 0) return;
+        int store = 0;
+        int places = 1;
+        int count = 0;
+        int min = Math.min(8,selection.getEnd());
+        for (int i = 0; i < min; ++i) {
+            char ch = contents.charAt(selection.getEnd()-1-i);
+            int value = Character.getNumericValue(ch);
+            if (value < 0 || value > 15) break;
+            store += places * value;
+            ++count;
+            places *= 16;
+        }
+        String add = "";
+        int bottom = store & 0xFFFF;
+        if (store >= 0xD8000000 && store < 0xDC000000
+          && bottom >= 0xDC00 && bottom < 0xE000) { // surrogates
+            add = "" + (char)(store >> 16) + (char)bottom;
+        } else if (store > 0xFFFF && store <= 0x10FFFF) {
+            store -= 0x10000;
+            add = "" + (char)(((store >> 10) & 0x3FF) + 0xD800)
+              + (char)((store & 0x3FF) + 0xDC00);
+              
+        } else if (count >= 4) {
+            count = 4;
+            add = ""+(char)(store & 0xFFFF);
+        } else {
+            count = 1;
+            char ch = contents.charAt(selection.getEnd()-1);
+            add = hex(ch);
+            if (ch >= 0xDC00 && ch <= 0xDFFF && selection.getEnd() > 1) {
+                ch = contents.charAt(selection.getEnd()-2);
+                if (ch >= 0xD800 && ch <= 0xDBFF) {
+                    count = 2;
+                    add = hex(ch) + add;
+                }
+            }
+        }
+        replaceRange(add, selection.getEnd()-count, selection.getEnd());
+    }
+
+    public static String hex(char ch) {
+        String result = Integer.toString(ch,16).toUpperCase();
+        result = "0000".substring(result.length(),4) + result;
+        return result;
+    }
+}
diff --git a/src/com/ibm/text/components/Selection.java b/src/com/ibm/text/components/Selection.java
new file mode 100755
index 0000000..0a1684b
--- /dev/null
+++ b/src/com/ibm/text/components/Selection.java
@@ -0,0 +1,167 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/components/Attic/Selection.java,v $ 
+ * $Date: 2000/03/10 04:07:26 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.components;
+import java.text.*;
+
+public final class Selection {
+
+    public int anchor;
+    public int caret;
+    public boolean clickAfter;
+
+    public int getStart() {
+        return anchor < caret ? anchor : caret;
+    }
+
+    public int getEnd() {
+        return anchor > caret ? anchor : caret;
+    }
+
+    public boolean isCaret() {
+        return anchor == caret;
+    }
+
+    public Selection set(Selection other) {
+        anchor = other.anchor;
+        caret = other.caret;
+        clickAfter = other.clickAfter;
+        return this;
+    }
+
+    public Selection set(int anchor, int caret, boolean clickAfter) {
+        this.anchor = anchor;
+        this.caret = caret;
+        this.clickAfter = clickAfter;
+        return this;
+    }
+
+    public boolean equals(Object other) {
+        Selection other2 = (Selection)other;
+        return anchor == other2.anchor
+          && caret == other2.caret
+          && clickAfter == other2.clickAfter;
+    }
+
+    public boolean isLessThan(Selection other) {
+        return getStart() < other.getEnd();
+    }
+
+    public Selection pin(String text) {
+        if (anchor > text.length()) {
+            anchor = text.length();
+        } else if (anchor < 0) {
+            anchor = 0;
+        }
+        if (caret > text.length()) {
+            caret = text.length();
+            clickAfter = true;
+        } else if (caret < 0) {
+            caret = 0;
+            clickAfter = false;
+        }
+        return this;
+    }
+
+    public Selection swap(Selection after) {
+        int temp = anchor;
+        anchor = after.anchor;
+        after.anchor = temp;
+        temp = caret;
+        caret = after.caret;
+        after.caret = temp;
+        boolean b = clickAfter;
+        clickAfter = after.clickAfter;
+        after.clickAfter = b;
+        return this;
+    }
+
+    public Selection fixAfterReplace(int start, int end, int len) {
+        if (anchor >= start) {
+            if (anchor < end) anchor = end;
+            anchor = start + len + anchor - end;
+        }
+        if (caret >= start) {
+            if (caret < end) caret = end;
+            caret = start + len + caret - end;
+        }
+        return this;
+    }
+
+        // Mac & Windows considerably different
+        // Mac: end++. If start!=end, start=end
+        //  SHIFT: move end right
+        //  CTL: no different
+        // Windows:
+        //  UNSHIFTED: if start!=end, start = end, else start=end=end+1;
+        //       anchor = tip = start
+        //  SHIFT: tip++
+        //  CTL: if start!=end, start = end = nextbound(end-1),
+        //   else start=end=nextbound(end)
+        //       anchor = tip = start
+        //  CTL/SHIFT: tip = nextbound(tip)
+
+    public Selection nextBound(BreakIterator breaker,
+      int direction, boolean extend) {
+        if (!extend && anchor != caret) caret -= direction;
+        caret = next(caret, breaker, direction, true);
+        if (!extend) anchor = caret;
+        clickAfter = false;
+        return this;
+    }
+
+    // expand start and end to word breaks--if they are not already on one
+    public void expand(BreakIterator breaker) {
+        if (anchor <= caret) {
+            anchor = next(anchor,breaker,-1,false);
+            caret = next(caret,breaker,1,false);
+            /*
+            try {
+                breaker.following(anchor);
+                anchor = breaker.previous();
+            } catch (Exception e) {}
+            try {
+                caret = breaker.following(caret-1);
+            } catch (Exception e) {}
+            */
+        } else {
+            anchor = next(anchor,breaker,1,false);
+            caret = next(caret,breaker,-1,false);
+            /*
+            try {
+                breaker.following(caret);
+                caret = breaker.previous();
+            } catch (Exception e) {}
+            try {
+                anchor = breaker.following(anchor-1);
+            } catch (Exception e) {}
+            */
+        }
+    }
+
+    // different = false - move to next boundary, unless on one
+    // true - move to next boundary, even if on one
+    public static int next(int position, BreakIterator breaker,
+      int direction, boolean different) {
+        if (!different) position -= direction;
+        try {
+            if (direction > 0) {
+                position = breaker.following(position);
+            } else {
+                breaker.following(position-1);
+                position = breaker.previous();
+            }
+        } catch (Exception e) {}
+        return position;
+    }
+}
+
diff --git a/src/com/ibm/text/components/TransliteratingTextComponent.java b/src/com/ibm/text/components/TransliteratingTextComponent.java
new file mode 100755
index 0000000..ce7490f
--- /dev/null
+++ b/src/com/ibm/text/components/TransliteratingTextComponent.java
@@ -0,0 +1,202 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/components/Attic/TransliteratingTextComponent.java,v $ 
+ * $Date: 2000/06/28 20:36:45 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.components;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.text.*;
+import java.awt.datatransfer.*;
+import com.ibm.text.*;
+
+/**
+ * A subclass of {@link DumbTextComponent} that passes key events through
+ * a {@link com.ibm.text.Transliterator}.
+ *
+ * <p>Copyright &copy; IBM Corporation 1999.  All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: TransliteratingTextComponent.java,v $ $Revision: 1.6 $ $Date: 2000/06/28 20:36:45 $
+ */
+public class TransliteratingTextComponent extends DumbTextComponent {
+
+    private static boolean DEBUG = false;
+
+    private Transliterator translit = null;
+
+    // Index into getText() where the start of transliteration is.
+    // As we commit text during transliteration, we advance
+    // this.
+    private int start = 0;
+
+    // Index into getText() where the cursor is; cursor >= start
+    private int cursor = 0;
+
+    private static final String COPYRIGHT =
+        "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+    /**
+     * Constructor.
+     */
+    public TransliteratingTextComponent() {
+        super();
+        addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                // We get an ActionEvent only when the selection changes
+                resetTransliterationStart();
+            }
+        });
+    }
+
+    /**
+     * {@link DumbTextComponent} API.  Framework method that is called
+     * when a <code>KeyEvent</code> is received.  This implementation
+     * runs the new character through the current
+     * <code>Transliterator</code>, if one is set, and inserts the
+     * transliterated text into the buffer.
+     */
+	protected void handleKeyTyped(KeyEvent e) {
+        char ch = e.getKeyChar();
+
+        if (translit == null) {
+            super.handleKeyTyped(e);
+            return;
+        }
+
+        // ------------------------------------------------------------
+        // The following case motivates the two lines that recompute
+        // start and cursor below.
+
+        //      "     "   
+        // a b c q r|s t u m m
+        // 0 1 2 3 4 5 6 7 8 9
+        //       0 1 2
+
+        // start 3, cursor 5, sel 6 -> { 0, 3, 2 }
+        // : new int[] { 0, sel - start, cursor - start };
+        
+        // sz>99|9
+
+        //      "     {   "
+        // a b c q r 9 9|9 t u m m
+        // 0 1 2 3 4 5 6 7 8 9 a b
+        //       0 1 2 3 4
+
+        // { 3, 5, 4 } -> start 6, cursor 7, sel 8
+        // : start += index[0];
+        // : cursor = start + index[2] - index[0];
+        // ------------------------------------------------------------
+
+        // Need to save start because calls to replaceRange will update
+        // start and cursor.
+        int saveStart = start;
+
+        ReplaceableString buf = new ReplaceableString();
+        buf.replace(0, 1, getText().substring(start,
+                                              getSelectionStart()));
+
+        Transliterator.Position index =
+            new Transliterator.Position(0, getSelectionStart() - start,
+                                        cursor - start);
+
+        StringBuffer log = null;
+        if (DEBUG) {
+            log = new StringBuffer();
+            log.append("start " + start + ", cursor " + cursor);
+            log.append(", sel " + getSelectionStart());
+            log.append(", {" + index.contextStart + ", " + index.contextLimit + ", " + index.start + "}, ");
+            log.append('"' + buf.toString() + "\" + '" + ch + "' -> \"");
+        }
+
+        translit.transliterate(buf, index, ch);
+        replaceRange(buf.toString(), start, getSelectionEnd());
+        // At this point start has been changed by the callback to
+        // resetTransliteratorStart() via replaceRange() -- so use our
+        // local copy, saveStart.
+
+        // The START index is zero-based.  On entry to transliterate(),
+        // it was zero.  We can therefore just add it to our original
+        // getText()-based index value of start (in saveStart) to get
+        // the new getText()-based start.
+        start = saveStart + index.contextStart;
+
+        // Make the cursor getText()-based.  The CURSOR index is zero-based.
+        cursor = start + index.start - index.contextStart;
+
+        if (DEBUG) {
+            String out = buf.toString();
+            log.append(out.substring(0, index.contextStart)).
+                append('{').
+                append(out.substring(index.contextStart, index.start)).
+                append('|').
+                append(out.substring(index.start)).
+                append('"');
+            log.append(", {" + index.contextStart + ", " + index.contextLimit + ", " + index.start + "}, ");
+            log.append("start " + start + ", cursor " + cursor);
+            log.append(", sel " + getSelectionStart());
+            System.out.println(escape(log.toString()));
+        }
+    }
+
+    /**
+     * Set the {@link com.ibm.text.Transliterator} and direction to
+     * use to process incoming <code>KeyEvent</code>s.
+     * @param t the {@link com.ibm.text.Transliterator} to use
+     */
+    public void setTransliterator(Transliterator t) {
+        if (translit != t) { // [sic] pointer compare ok; singletons
+            resetTransliterationStart();
+        }
+        translit = t;
+    }
+
+    /**
+     * Reset the start point at which transliteration begins.  This
+     * needs to be done when the user moves the cursor or when the
+     * current {@link com.ibm.text.Transliterator} is changed. 
+     */
+    private void resetTransliterationStart() {
+        start = getSelectionStart();
+        cursor = start;
+    }
+
+    /**
+     * Escape non-ASCII characters as Unicode.
+     * JUST FOR DEBUGGING OUTPUT.
+     */
+    public static final String escape(String s) {
+        StringBuffer buf = new StringBuffer();
+        for (int i=0; i<s.length(); ++i) {
+            char c = s.charAt(i);
+            if (c >= ' ' && c <= 0x007F) {
+                if (c == '\\') {
+                    buf.append("\\\\"); // That is, "\\"
+                } else {
+                    buf.append(c);
+                }
+            } else {
+                buf.append("\\u");
+                if (c < 0x1000) {
+                    buf.append('0');
+                    if (c < 0x100) {
+                        buf.append('0');
+                        if (c < 0x10) {
+                            buf.append('0');
+                        }
+                    }
+                }
+                buf.append(Integer.toHexString(c));
+            }
+        }
+        return buf.toString();
+    }
+}
diff --git a/src/com/ibm/text/components/package.html b/src/com/ibm/text/components/package.html
new file mode 100755
index 0000000..ad8cdf3
--- /dev/null
+++ b/src/com/ibm/text/components/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/components/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:51 $
+-->
+</head>
+<body bgcolor="white">
+GUI components for use with Transliterator.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/text/package.html b/src/com/ibm/text/package.html
new file mode 100755
index 0000000..cf1ea67
--- /dev/null
+++ b/src/com/ibm/text/package.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:51 $
+-->
+</head>
+<body bgcolor="white">
+Classes for RuleBasedBreakIterator, DictionaryBasedBreakIterator
+Normalizer, RuleBasedNumberFormat, BigNumberFormat,
+Unicode compression, International Searching, and Transliterator.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/text/resources/BreakIteratorRules.java b/src/com/ibm/text/resources/BreakIteratorRules.java
new file mode 100755
index 0000000..104344f
--- /dev/null
+++ b/src/com/ibm/text/resources/BreakIteratorRules.java
@@ -0,0 +1,338 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/BreakIteratorRules.java,v $ 
+ * $Date: 2001/02/06 22:37:45 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default break-iterator rules.  These rules are more or less general for
+ * all locales, although there are probably a few we're missing.  The
+ * behavior currently mimics the behavior of BreakIterator in JDK 1.2.
+ * There are known deficiencies in this behavior, including the fact that
+ * the logic for handling CJK characters works for Japanese but not for
+ * Chinese, and that we don't currently have an appropriate locale for
+ * Thai.  The resources will eventually be updated to fix these problems.
+ */
+
+ /* Modified for Hindi 3/1/99. */
+
+public class BreakIteratorRules extends ListResourceBundle {
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    static final Object[][] contents = {
+        // BreakIteratorClasses lists the class names to instantiate for each
+        // built-in type of BreakIterator
+        { "BreakIteratorClasses",
+            new String[] { "RuleBasedBreakIterator",     // character-break iterator class
+                           "RuleBasedBreakIterator",     // word-break iterator class
+                           "RuleBasedBreakIterator",     // line-break iterator class
+                           "RuleBasedBreakIterator" }    // sentence-break iterator class
+        },
+
+        // rules describing how to break between logical characters
+        { "CharacterBreakRules",
+            // ignore non-spacing marks and enclosing marks (since we never
+            // put a break before ignore characters, this keeps combining
+            // accents with the base characters they modify)
+            // FIXME: the virama thing is probably a hack...
+              "$devaVirama=[\u094d];"
+            + "$_ignore_=[[[:Mn:]-$devaVirama][:Me:]];"
+
+            // other category definitions
+            + "$choseong=[\u1100-\u115f];"
+            + "$jungseong=[\u1160-\u11a7];"
+            + "$jongseong=[\u11a8-\u11ff];"
+            + "$surr_hi=[\ud800-\udbff];"
+            + "$surr_lo=[\udc00-\udfff];"
+
+            // break after every character, except as follows:
+            + ".;"
+
+            // keep CRLF sequences together
+            + "\r\n;"
+
+            // keep surrogate pairs together
+            + "$surr_hi$surr_lo;"
+
+            // keep Hangul syllables spelled out using conjoining jamo together
+            + "$choseong*$jungseong*$jongseong*;"
+
+            // revised Devanagari support - full syllables
+            // simplified by allowing some nonsense syllables
+            // FIXME: nukta, non-spacing matras, and the modifiers
+            // are all ignorable, so they don't need to be mentioned
+            // here... (but the rules read better if they are...)
+            + "$devaNukta=[\u093c];"
+            + "$devaVowel=[\u0905-\u0914];"
+            + "$devaMatra=[\u093e-\u094c\u0962\u0963];"
+            + "$devaConsonant=[\u0915-\u0939\u0958-\u095f];"
+            + "$devaModifier=[\u0901-\u0903\u0951-\u0954];"
+            + "$zwnj=[\u200c];"
+            + "$zwj=[\u200d];"
+   
+            // consonant followed optionally by a nukta
+            + "$devaCN=($devaConsonant$devaNukta?);"
+            
+            // a virama followed by an optional zwj or zwnj
+            + "$devaJoin=($devaVirama[$zwj$zwnj]?);"
+            
+            // a syllable with at least one consonant
+            + "($devaCN$devaJoin)*$devaCN($devaJoin|$devaMatra?$devaModifier*);"
+            
+            // a syllable without consonants
+            + "$devaVowel$devaModifier*;"
+        },
+
+        // default rules for finding word boundaries
+        { "WordBreakRules",
+            // ignore non-spacing marks, enclosing marks, and format characters,
+            // all of which should not influence the algorithm
+            "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
+
+            // Hindi phrase separator, kanji, katakana, hiragana, CJK diacriticals,
+            // other letters, and digits
+            + "$danda=[\u0964\u0965];"
+            + "$kanji=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
+            + "$kata=[\u3099-\u309c\u30a1-\u30fe];"
+            + "$hira=[\u3041-\u309e\u30fc];"
+            + "$let=[[[:L:][:Mc:]]-[$kanji$kata$hira]];"
+            + "$dgt=[:N:];"
+
+            // punctuation that can occur in the middle of a word: currently
+            // dashes, apostrophes, quotation marks, and periods
+            + "$mid_word=[[:Pd:]\u00ad\u2027\\\"\\\'\\.];"
+
+            // punctuation that can occur in the middle of a number: currently
+            // apostrophes, qoutation marks, periods, commas, and the Arabic
+            // decimal point
+            + "$mid_num=[\\\"\\\'\\,\u066b\\.];"
+
+            // punctuation that can occur at the beginning of a number: currently
+            // the period, the number sign, and all currency symbols except the cents sign
+            + "$pre_num=[[[:Sc:]-[\u00a2]]\\#\\.];"
+
+            // punctuation that can occur at the end of a number: currently
+            // the percent, per-thousand, per-ten-thousand, and Arabic percent
+            // signs, the cents sign, and the ampersand
+            + "$post_num=[\\%\\&\u00a2\u066a\u2030\u2031];"
+
+            // line separators: currently LF, FF, PS, and LS
+            + "$ls=[\n\u000c\u2028\u2029];"
+
+            // whitespace: all space separators and the tab character
+            + "$ws=[[:Zs:]\t];"
+
+            // a word is a sequence of letters that may contain internal
+            // punctuation, as long as it begins and ends with a letter and
+            // never contains two punctuation marks in a row
+            + "$word=($let+($mid_word$let+)*$danda?);"
+
+            // a number is a sequence of digits that may contain internal
+            // punctuation, as long as it begins and ends with a digit and
+            // never contains two punctuation marks in a row.
+            + "$number=($dgt+($mid_num$dgt+)*);"
+
+            // break after every character, with the following exceptions
+            // (this will cause punctuation marks that aren't considered
+            // part of words or numbers to be treated as words unto themselves)
+            + ".;"
+
+            // keep together any sequence of contiguous words and numbers
+            // (including just one of either), plus an optional trailing
+            // number-suffix character
+            + "$word?($number$word)*($number$post_num?)?;"
+
+            // keep together and sequence of contiguous words and numbers
+            // that starts with a number-prefix character and a number,
+            // and may end with a number-suffix character
+            + "$pre_num($number$word)*($number$post_num?)?;"
+
+            // keep together runs of whitespace (optionally with a single trailing
+            // line separator or CRLF sequence)
+            + "$ws*\r?$ls?;"
+
+            // keep together runs of Katakana
+            + "$kata*;"
+
+            // keep together runs of Hiragana
+            + "$hira*;"
+
+            // keep together runs of Kanji
+            + "$kanji*;"
+        },
+
+        // default rules for determining legal line-breaking positions
+        { "LineBreakRules",
+            // ignore non-spacing marks, enclosing marks, and format characters
+            "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
+
+            // Hindi phrase separators
+            + "$danda=[\u0964\u0965];"
+
+            // characters that always cause a break: ETX, tab, LF, FF, LS, and PS
+            + "$break=[\u0003\t\n\f\u2028\u2029];"
+
+            // characters that always prevent a break: the non-breaking space
+            // and similar characters
+            + "$nbsp=[\u00a0\u2007\u2011\ufeff];"
+
+            // whitespace: space separators and control characters, except for
+            // CR and the other characters mentioned above
+            + "$space=[[[:Zs:][:Cc:]]-[$nbsp$break\r]];"
+
+            // dashes: dash punctuation and the discretionary hyphen, except for
+            // non-breaking hyphens
+            + "$dash=[[[:Pd:]\u00ad]-[$nbsp]];"
+
+            // characters that stick to a word if they precede it: currency symbols
+            // (except the cents sign) and starting punctuation
+            + "$pre_word=[[[:Sc:]-[\u00a2]][:Ps:]\\\"\\\'];"
+
+            // characters that stick to a word if they follow it: ending punctuation,
+            // other punctuation that usually occurs at the end of a sentence,
+            // small Kana characters, some CJK diacritics, etc.
+            + "$post_word=[[:Pe:]\\!\\\"\\\'\\%\\.\\,\\:\\;\\?\u00a2\u00b0\u066a\u2030-\u2034"
+                    + "\u2103\u2105\u2109\u3001\u3002\u3005\u3041\u3043\u3045\u3047\u3049\u3063"
+                    + "\u3083\u3085\u3087\u308e\u3099-\u309e\u30a1\u30a3\u30a5\u30a7\u30a9"
+                    + "\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u30fc-\u30fe\uff01\uff0c"
+                    + "\uff0e\uff1f];"
+
+            // Kanji: actually includes both Kanji and Kana, except for small Kana and
+            // CJK diacritics
+            + "$kanji=[[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa]-[$post_word$_ignore_]];"
+
+            // digits
+            + "$digit=[[:Nd:][:No:]];"
+
+            // punctuation that can occur in the middle of a number: periods and commas
+            + "$mid_num=[\\.\\,];"
+
+            // everything not mentioned above, plus the quote marks (which are both
+            // <pre-word>, <post-word>, and <char>)
+            + "$char=[^$break$space$dash$kanji$nbsp$_ignore_$pre_word$post_word$mid_num$danda\r\\\"\\\'];"
+
+            // a "number" is a run of prefix characters and dashes, followed by one or
+            // more digits with isolated number-punctuation characters interspersed
+            + "$number=([$pre_word$dash]*$digit+($mid_num$digit+)*);"
+
+            // the basic core of a word can be either a "number" as defined above, a single
+            // "Kanji" character, or a run of any number of not-explicitly-mentioned
+            // characters (this includes Latin letters)
+            + "$word_core=([$pre_word$char]*|$kanji|$number);"
+
+            // a word may end with an optional suffix that be either a run of one or
+            // more dashes or a run of word-suffix characters, followed by an optional
+            // run of whitespace
+            + "$word_suffix=(($dash+|$post_word*)$space*);"
+
+            // a word, thus, is an optional run of word-prefix characters, followed by
+            // a word core and a word suffix (the syntax of <word-core> and <word-suffix>
+            // actually allows either of them to match the empty string, putting a break
+            // between things like ")(" or "aaa(aaa"
+            + "$word=($pre_word*$word_core$word_suffix);"
+
+            // finally, the rule that does the work: Keep together any run of words that
+            // are joined by runs of one of more non-spacing mark.  Also keep a trailing
+            // line-break character or CRLF combination with the word.  (line separators
+            // "win" over nbsp's)
+            + "$word($nbsp+$word)*\r?$break?;"
+        },
+
+        // default rules for finding sentence boundaries
+        { "SentenceBreakRules",
+            // ignore non-spacing marks, enclosing marks, and format characters
+            "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
+
+            // lowercase letters
+            + "$lc=[:Ll:];"
+            
+            // uppercase Latin letters
+            + "$ucLatin=[A-Z];"
+
+            // whitespace (line separators are treated as whitespace)
+            + "$space=[\t\r\f\n\u2028[:Zs:]];"
+
+            // punctuation which may occur at the beginning of a sentence: "starting
+            // punctuation" and quotation marks
+            + "$start=[[:Ps:]\\\"\\\'];"
+
+            // punctuation with may occur at the end of a sentence: "ending punctuation"
+            // and quotation marks
+            + "$end=[[:Pe:]\\\"\\\'];"
+
+            // digits
+            + "$digit=[:N:];"
+
+            // characters that unambiguously signal the end of a sentence
+            + "$term=[\\!\\?\u3002\uff01\uff1f];"
+
+            // periods, which MAY signal the end of a sentence
+            + "$period=[\\.\uff0e];"
+
+            // characters that may occur at the beginning of a sentence: basically anything
+            // not mentioned above (lowercase letters and digits are specifically excluded)
+            + "$sent_start=[^$lc$ucLatin$space$start$end$digit$term$period\u2029$_ignore_];"
+
+            // Hindi phrase separator
+            + "$danda=[\u0964\u0965];"
+
+            // always break sentences after paragraph separators
+            + ".*?\u2029?;"
+
+            // always break after a danda, if it's followed by whitespace
+            + ".*?$danda$space*;"
+
+            // if you see a period, skip over additional periods and ending punctuation
+            // and if the next character is a paragraph separator, break after the
+            // paragraph separator
+            + ".*?$period[$period$end]*$space*\u2029;"
+
+            // if you see a period, skip over additional periods and ending punctuation,
+            // followed by optional whitespace, followed by optional starting punctuation,
+            // and if the next character is something that can start a sentence
+            // (basically, a capital letter), then put the sentence break between the
+            // whitespace and the opening punctuation
+            + ".*?$period[$period$end]*$space*/($start*$sent_start|$start+$ucLatin);"
+            
+            // same as above, except that there's a sentence break before a Latin capital
+            // letter only if there's at least one space after the period
+            + ".*?$period[$period$end]*$space+/$ucLatin;"
+
+            // if you see a sentence-terminating character, skip over any additional
+            // terminators, periods, or ending punctuation, followed by any whitespace,
+            // followed by a SINGLE optional paragraph separator, and put the break there
+            + ".*?$term[$term$period$end]*$space*\u2029?;"
+
+            // The following rules are here to aid in backwards iteration.  The automatically
+            // generated backwards state table will rewind to the beginning of the
+            // paragraph all the time (or all the way to the beginning of the document
+            // if the document doesn't use the Unicode PS character) because the only
+            // unambiguous character pairs are those involving paragraph separators.
+            // These specify a few more unambiguous breaking situations.
+
+            // if you see a sentence-starting character, followed by starting punctuation
+            // (remember, we're iterating backwards), followed by an optional run of
+            // whitespace, followed by an optional run of ending punctuation, followed
+            // by a period, this is a safe place to turn around
+            + "![$sent_start$ucLatin]$start*$space+$end*$period;"
+
+            // if you see a letter or a digit, followed by an optional run of
+            // starting punctuation, followed by an optional run of whitespace,
+            // followed by an optional run of ending punctuation, followed by
+            // a sentence terminator, this is a safe place to turn around
+            + "![$sent_start$lc$digit]$start*$space*$end*$term;"
+        }
+    };
+}
diff --git a/src/com/ibm/text/resources/BreakIteratorRules_th.java b/src/com/ibm/text/resources/BreakIteratorRules_th.java
new file mode 100755
index 0000000..c503473
--- /dev/null
+++ b/src/com/ibm/text/resources/BreakIteratorRules_th.java
@@ -0,0 +1,116 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/BreakIteratorRules_th.java,v $ 
+ * $Date: 2001/02/06 22:37:45 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+import java.util.MissingResourceException;
+import java.net.URL;
+
+public class BreakIteratorRules_th extends ListResourceBundle {
+    public Object[][] getContents() {
+
+        URL url = getClass().getResource("thai_dict");
+
+        // if dictionary wasn't found, then this resource bundle doesn't have
+        // much to contribute...
+        if (url == null) {
+            return new Object[0][0];
+        }
+
+        return new Object[][] {
+            // names of classes to instantiate for the different kinds of break
+            // iterator.  Notice we're now using DictionaryBasedBreakIterator
+            // for word and line breaking.
+            { "BreakIteratorClasses",
+                new String[] { "RuleBasedBreakIterator",           // character-break iterator class
+                               "DictionaryBasedBreakIterator",     // word-break iterator class
+                               "DictionaryBasedBreakIterator",     // line-break iterator class
+                               "RuleBasedBreakIterator" }          // sentence-break iterator class
+            },
+
+            { "WordBreakRules",
+                "$_dictionary_=[\u0e01-\u0e2e\u0e30-\u0e3a\u0e40-\u0e44\u0e47-\u0e4e];" // this rule breaks the iterator with mixed Thai and English
+                + "$_ignore_=[[[:Mn:][:Me:][:Cf:]]-$_dictionary_];"
+                + "$paiyannoi=[\u0e2f];"
+                + "$maiyamok=[\u0e46];"
+                + "$danda=[\u0964\u0965];"
+                + "$kanji=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
+                + "$kata=[\u30a1-\u30fa];"
+                + "$hira=[\u3041-\u3094];"
+                + "$cjk_diacrit=[\u3099-\u309c];"
+                + "$let=[[[:L:][:Mc:]]-[$kanji$kata$hira$cjk_diacrit$_dictionary_]];"
+                + "$dgt=[:N:];"
+                + "$mid_word=[[:Pd:]\u00ad\u2027\\\"\\\'\\.];"
+                + "$mid_num=[\\\"\\\'\\,\u066b\\.];"
+                + "$pre_num=[[[:Sc:]-[\u00a2]]\\#\\.];"
+                + "$post_num=[\\%\\&\u00a2\u066a\u2030\u2031];"
+                + "$ls=[\n\u000c\u2028\u2029];"
+                + "$ws=[[:Zs:]\t];"
+                + "$word=(($let+($mid_word$let+)*)$danda?);"
+                + "$number=($dgt+($mid_num$dgt+)*);"
+                + "$thai_etc=($paiyannoi\u0e25$paiyannoi);"
+                
+                + ".;"
+                + "$word?($number$word)*($number$post_num?)?;"
+                + "$pre_num($number$word)*($number$post_num?)?;"
+
+                //+ "$_dictionary_+($paiyannoi$maiyamok?)?;"
+                + "$_dictionary_+($paiyannoi?$maiyamok)?;"
+
+                + "$_dictionary_+$paiyannoi/([^\u0e25$maiyamok$_ignore_]"
+                        + "|\u0e25[^$paiyannoi$_ignore_]);"
+
+                + "$thai_etc;"
+        
+                + "$ws*\r?$ls?;"
+                + "[$kata$cjk_diacrit]*;"
+                + "[$hira$cjk_diacrit]*;"
+                + "$kanji*;"
+            },
+
+            { "LineBreakRules",
+                "$_dictionary_=[\u0e01-\u0e2e\u0e30-\u0e3a\u0e40-\u0e44\u0e47-\u0e4e];" // this rule breaks the iterator with mixed Thai and English
+                + "$_ignore_=[[[:Mn:][:Me:][:Cf:]]-[$_dictionary_]];"
+                + "$danda=[\u0964\u0965];"
+                + "$break=[\u0003\t\n\f\u2028\u2029];"
+                + "$nbsp=[\u00a0\u2007\u2011\ufeff];"
+                + "$space=[[[:Zs:][:Cc:]]-[$nbsp$break\r]];"
+                + "$dash=[[[:Pd:]\u00ad]-$nbsp];"
+                + "$paiyannoi=[\u0e2f];"
+                + "$maiyamok=[\u0e46];"
+                + "$thai_etc=($paiyannoi\u0e25$paiyannoi);"
+                + "$pre_word=[[[:Sc:]-[\u00a2]][:Ps:]\\\"];"
+                + "$post_word=[[:Pe:]\\!\\%\\.\\,\\:\\;\\?\\\"\u00a2\u00b0\u066a\u2030-\u2034\u2103"
+                        + "\u2105\u2109\u3001\u3002\u3005\u3041\u3043\u3045\u3047\u3049\u3063"
+                        + "\u3083\u3085\u3087\u308e\u3099-\u309e\u30a1\u30a3\u30a5\u30a7\u30a9"
+                        + "\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u30fc-\u30fe\uff01\uff0e"
+                        + "\uff1f$maiyamok];"
+                + "$kanji=[[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa]-[$post_word$_ignore_]];"
+                + "$digit=[[:Nd:][:No:]];"
+                + "$mid_num=[\\.\\,];"
+                + "$char=[^$break$space$dash$kanji$nbsp$_ignore_$pre_word$post_word"
+                        + "$mid_num\r$danda$_dictionary_$paiyannoi$maiyamok];"
+                + "$number=([$pre_word$dash]*$digit+($mid_num$digit+)*);"
+                + "$word_core=($char*|$kanji|$number|$_dictionary_+|$thai_etc);"
+                + "$word_suffix=(($dash+|$post_word*)$space*);"
+                + "$word=($pre_word*$word_core$word_suffix);"
+                + "$word($nbsp+$word)*(\r?$break?|$paiyannoi\r$break|$paiyannoi$break)?;"
+                + "$word($nbsp+$word)*$paiyannoi/([^[\u0e25$_ignore_]]|"
+                        + "\u0e25[^$paiyannoi$_ignore_]);"
+            },
+
+            { "WordBreakDictionary", url },
+            { "LineBreakDictionary", url }
+        };
+    }
+}
diff --git a/src/com/ibm/text/resources/LocaleElements.java b/src/com/ibm/text/resources/LocaleElements.java
new file mode 100755
index 0000000..c702003
--- /dev/null
+++ b/src/com/ibm/text/resources/LocaleElements.java
@@ -0,0 +1,31 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/LocaleElements.java,v $ 
+ * $Date: 2001/03/01 22:46:33 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class LocaleElements extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "TransliteratorNamePattern",
+                /* Format for the display name of a Transliterator.
+                 * This is the language-neutral form of this resource.
+                 */
+                "{0,choice,0#|1#{1}|2#{1}-{2}}", // Display name
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/text/resources/LocaleElements_en.java b/src/com/ibm/text/resources/LocaleElements_en.java
new file mode 100755
index 0000000..d6a1b13
--- /dev/null
+++ b/src/com/ibm/text/resources/LocaleElements_en.java
@@ -0,0 +1,39 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/LocaleElements_en.java,v $ 
+ * $Date: 2000/03/10 04:07:27 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+// WARNING : the format of this file may change in the future!
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class LocaleElements_en extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "TransliteratorNamePattern",
+                /* Format for the display name of a Transliterator.
+                 * This is the English form of this resource.
+                 */
+                "{0,choice,0#|1#{1}|2#{1} to {2}}"
+            },
+
+            // Transliterator display names
+            { "%Translit%Hex", "Hex Escape" },
+            { "%Translit%UnicodeName", "Unicode Name" },
+            { "%Translit%UnicodeChar", "Unicode Character" },
+        };
+    }
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules.java b/src/com/ibm/text/resources/NumberFormatRules.java
new file mode 100755
index 0000000..171fb74
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules.java
@@ -0,0 +1,242 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules.java,v $ 
+ * $Date: 2000/03/10 04:07:27 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Base resource for RuleBasedNumberFormat data.  Each resource contains
+ * rule sets for three uses: spelled-out numerical values, ordinal
+ * abbreviations, and durations in seconds.  This resource contains the
+ * U.S. English data.
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:27 $
+ */
+public class NumberFormatRules extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /*
+         * Spellout rules for U.S. English.  This rule set has two variants:
+         * %simplified is a set of rules showing the simple method of spelling
+         * out numbers in English: 289 is formatted as "two hundred eighty-nine".
+         * %default uses a more complicated algorithm to format
+         * numbers in a more natural way: 289 is formatted as "two hundred AND
+         * eighty-nine" and commas are inserted between the thousands groups for
+         * values above 100,000.
+         */
+        { "SpelloutRules",
+            // This rule set shows the normal simple formatting rules for English
+            "%simplified:\n"
+                   // negative number rule.  This rule is used to format negative
+                   // numbers.  The result of formatting the number's absolute
+                   // value is placed where the >> is.
+            + "    -x: minus >>;\n"
+                   // faction rule.  This rule is used for formatting numbers
+                   // with fractional parts.  The result of formatting the
+                   // number's integral part is substituted for the <<, and
+                   // the result of formatting the number's fractional part
+                   // (one digit at a time, e.g., 0.123 is "zero point one two
+                   // three") replaces the >>.
+            + "    x.x: << point >>;\n"
+                   // the rules for the values from 0 to 19 are simply the
+                   // words for those numbers
+            + "    zero; one; two; three; four; five; six; seven; eight; nine;\n"
+            + "    ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen;\n"
+            + "        seventeen; eighteen; nineteen;\n"
+                   // beginning at 20, we use the >> to mark the position where
+                   // the result of formatting the number's ones digit.  Thus,
+                   // we only need a new rule at every multiple of 10.  Text in
+                   // backets is omitted if the value being formatted is an
+                   // even multiple of 10.
+            + "    20: twenty[->>];\n"
+            + "    30: thirty[->>];\n"
+            + "    40: forty[->>];\n"
+            + "    50: fifty[->>];\n"
+            + "    60: sixty[->>];\n"
+            + "    70: seventy[->>];\n"
+            + "    80: eighty[->>];\n"
+            + "    90: ninety[->>];\n"
+                   // beginning at 100, we can use << to mark the position where
+                   // the result of formatting the multiple of 100 is to be
+                   // inserted.  Notice also that the meaning of >> has shifted:
+                   // here, it refers to both the ones place and the tens place.
+                   // The meanings of the << and >> tokens depend on the base value
+                   // of the rule.  A rule's divisor is (usually) the highest
+                   // power of 10 that is less than or equal to the rule's base
+                   // value.  The value being formatted is divided by the rule's
+                   // divisor, and the integral quotient is used to get the text
+                   // for <<, while the remainder is used to produce the text
+                   // for >>.  Again, text in brackets is omitted if the value
+                   // being formatted is an even multiple of the rule's divisor
+                   // (in this case, an even multiple of 100)
+            + "    100: << hundred[ >>];\n"
+                   // The rules for the higher numbers work the same way as the
+                   // rule for 100: Again, the << and >> tokens depend on the
+                   // rule's divisor, which for all these rules is also the rule's
+                   // base value.  To group by thousand, we simply don't have any
+                   // rules between 1,000 and 1,000,000.
+            + "    1000: << thousand[ >>];\n"
+            + "    1,000,000: << million[ >>];\n"
+            + "    1,000,000,000: << billion[ >>];\n"
+            + "    1,000,000,000,000: << trillion[ >>];\n"
+                   // overflow rule.  This rule specifies that values of a
+                   // quadrillion or more are shown in numerals rather than words.
+                   // The == token means to format (with new rules) the value
+                   // being formatted by this rule and place the result where
+                   // the == is.  The #,##0 inside the == signs is a
+                   // DecimalFormat pattern.  It specifies that the value should
+                   // be formatted with a DecimalFormat object, and that it
+                   // should be formatted with no decimal places, at least one
+                   // digit, and a thousands separator.
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+
+            // %default is a more elaborate form of %simplified;  It is basically
+            // the same, except that it introduces "and" before the ones digit
+            // when appropriate (basically, between the tens and ones digits) and
+            // separates the thousands groups with commas in values over 100,000.
+            + "%default:\n"
+                   // negative-number and fraction rules.  These are the same
+                   // as those for %simplified, but ave to be stated here too
+                   // because this is an entry point
+            + "    -x: minus >>;\n"
+            + "    x.x: << point >>;\n"
+                   // just use %simplified for values below 100
+            + "    =%simplified=;\n"
+                   // for values from 100 to 9,999 use %%and to decide whether or
+                   // not to interpose the "and"
+            + "    100: << hundred[ >%%and>];\n"
+            + "    1000: << thousand[ >%%and>];\n"
+                   // for values of 100,000 and up, use %%commas to interpose the
+                   // commas in the right places (and also to interpose the "and")
+            + "    100,000>>: << thousand[>%%commas>];\n"
+            + "    1,000,000: << million[>%%commas>];\n"
+            + "    1,000,000,000: << billion[>%%commas>];\n"
+            + "    1,000,000,000,000: << trillion[>%%commas>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+            // if the value passed to this rule set is greater than 100, don't
+            // add the "and"; if it's less than 100, add "and" before the last
+            // digits
+            + "%%and:\n"
+            + "    and =%default=;\n"
+            + "    100: =%default=;\n"
+            // this rule set is used to place the commas
+            + "%%commas:\n"
+                   // for values below 100, add "and" (the apostrophe at the
+                   // beginning is ignored, but causes the space that follows it
+                   // to be significant: this is necessary because the rules
+                   // calling %%commas don't put a space before it)
+            + "    ' and =%default=;\n"
+                   // put a comma after the thousands (or whatever preceded the
+                   // hundreds)
+            + "    100: , =%default=;\n"
+                   // put a comma after the millions (or whatever precedes the
+                   // thousands)
+            + "    1000: , <%default< thousand, >%default>;\n"
+                   // and so on...
+            + "    1,000,000: , =%default=;"
+            // %%lenient-parse isn't really a set of number formatting rules;
+            // it's a set of collation rules.  Lenient-parse mode uses a Collator
+            // object to compare fragments of the text being parsed to the text
+            // in the rules, allowing more leeway in the matching text.  This set
+            // of rules tells the formatter to ignore commas when parsing (it
+            // already ignores spaces, which is why we refer to the space; it also
+            // ignores hyphens, making "twenty one" and "twenty-one" parse
+            // identically)
+            + "%%lenient-parse:\n"
+            + "    & ' ' , ',' ;\n" },
+
+        /*
+         * This rule set adds an English ordinal abbreviation to the end of a
+         * number.  For example, 2 is formatted as "2nd".  Parsing doesn't work with
+         * this rule set.  To parse, use DecimalFormat on the numeral.
+         */
+        { "OrdinalRules",
+            // this rule set formats the numeral and calls %%abbrev to
+            // supply the abbreviation
+            "%main:\n"
+            + "    =#,##0==%%abbrev=;\n"
+            // this rule set supplies the abbreviation
+            + "%%abbrev:\n"
+                   // the abbreviations.  Everything from 4 to 19 ends in "th"
+            + "    th; st; nd; rd; th;\n"
+                   // at 20, we begin repeating the cycle every 10 (13 is "13th",
+                   // but 23 and 33 are "23rd" and "33rd")  We do this by
+                   // ignoring all bug the ones digit in selecting the abbreviation
+            + "    20: >>;\n"
+                   // at 100, we repeat the whole cycle by considering only the
+                   // tens and ones digits in picking an abbreviation
+            + "    100: >>;\n" },
+
+        /*
+         * This rule set formats a number of seconds in sexagesimal notation
+         * (i.e., hours, minutes, and seconds).  %with-words formats it with
+         * words (3,740 is "1 hour, 2 minutes, 20 seconds") and %in-numerals
+         * formats it entirely in numerals (3,740 is "1:02:20").
+         */
+        { "DurationRules",
+            // main rule set for formatting with words
+            "%with-words:\n"
+                   // take care of singular and plural forms of "second"
+            + "    0 seconds; 1 second; =0= seconds;\n"
+                   // use %%min to format values greater than 60 seconds
+            + "    60/60: <%%min<[, >>];\n"
+                   // use %%hr to format values greater than 3,600 seconds
+                   // (the ">>>" below causes us to see the number of minutes
+                   // when when there are zero minutes)
+            + "    3600/60: <%%hr<[, >>>];\n"
+            // this rule set takes care of the singular and plural forms
+            // of "minute"
+            + "%%min:\n"
+            + "    0 minutes; 1 minute; =0= minutes;\n"
+            // this rule set takes care of the singular and plural forms
+            // of "hour"
+            + "%%hr:\n"
+            + "    0 hours; 1 hour; =0= hours;\n"
+
+            // main rule set for formatting in numerals
+            + "%in-numerals:\n"
+                   // values below 60 seconds are shown with "sec."
+            + "    =0= sec.;\n"
+                   // higher values are shown with colons: %%min-sec is used for
+                   // values below 3,600 seconds...
+            + "    60: =%%min-sec=;\n"
+                   // ...and %%hr-min-sec is used for values of 3,600 seconds
+                   // and above
+            + "    3600: =%%hr-min-sec=;\n"
+            // this rule causes values of less than 10 minutes to show without
+            // a leading zero
+            + "%%min-sec:\n"
+            + "    0: :=00=;\n"
+            + "    60/60: <0<>>;\n"
+            // this rule set is used for values of 3,600 or more.  Minutes are always
+            // shown, and always shown with two digits
+            + "%%hr-min-sec:\n"
+            + "    0: :=00=;\n"
+            + "    60/60: <00<>>;\n"
+            + "    3600/60: <#,##0<:>>>;\n"
+            // the lenient-parse rules allow several different characters to be used
+            // as delimiters between hours, minutes, and seconds
+            + "%%lenient-parse:\n"
+            + "    & ':' = '.' = ' ' = '-';\n" }
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_de.java b/src/com/ibm/text/resources/NumberFormatRules_de.java
new file mode 100755
index 0000000..64136d5
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_de.java
@@ -0,0 +1,87 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_de.java,v $ 
+ * $Date: 2000/03/10 04:07:27 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for German
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:27 $
+ */
+public class NumberFormatRules_de extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for German.  German also adds some interesting
+         * characteristics.  For values below 1,000,000, numbers are customarily
+         * written out as a single word.  And the ones digit PRECEDES the tens
+         * digit (e.g., 23 is "dreiundzwanzig," not "zwanzigunddrei").
+         */
+        { "SpelloutRules",
+            // 1 is "eins" when by itself, but turns into "ein" in most
+            // combinations
+            "%alt-ones:\n"
+            + "    null; eins; =%%main=;\n"
+            + "%%main:\n"
+                   // words for numbers from 0 to 12.  Notice that the values
+                   // from 13 to 19 can derived algorithmically, unlike in most
+                   // other languages
+            + "    null; ein; zwei; drei; vier; f\u00fcnf; sechs; sieben; acht; neun;\n"
+            + "    zehn; elf; zw\u00f6lf; >>zehn;\n"
+                   // rules for the multiples of 10.  Notice that the ones digit
+                   // goes on the front
+            + "    20: [>>und]zwanzig;\n"
+            + "    30: [>>und]drei\u00dfig;\n"
+            + "    40: [>>und]vierzig;\n"
+            + "    50: [>>und]f\u00fcnfzig;\n"
+            + "    60: [>>und]sechzig;\n"
+            + "    70: [>>und]siebzig;\n"
+            + "    80: [>>und]achtzig;\n"
+            + "    90: [>>und]neunzig;\n"
+            + "    100: hundert[>%alt-ones>];\n"
+            + "    200: <<hundert[>%alt-ones>];\n"
+            + "    1000: tausend[>%alt-ones>];\n"
+            + "    2000: <<tausend[>%alt-ones>];\n"
+            + "    1,000,000: eine Million[ >%alt-ones>];\n"
+            + "    2,000,000: << Millionen[ >%alt-ones>];\n"
+            + "    1,000,000,000: eine Milliarde[ >%alt-ones>];\n"
+            + "    2,000,000,000: << Milliarden[ >%alt-ones>];\n"
+            + "    1,000,000,000,000: eine Billion[ >%alt-ones>];\n"
+            + "    2,000,000,000,000: << Billionen[ >%alt-ones>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;"
+            + "%%lenient-parse:\n"
+            + "    & ae , \u00e4 & ae , \u00c4\n"
+            + "    & oe , \u00f6 & oe , \u00d6\n"
+            + "    & ue , \u00fc & ue , \u00dc\n"
+        }
+            
+        // again, I'm not 100% sure of these rules.  I think both "hundert" and
+        // "einhundert" are correct or 100, but I'm not sure which is preferable
+        // in situations where this framework is likely to be used.  Also, is it
+        // really true that numbers are run together into compound words all the
+        // time?  And again, I'm missing information on negative numbers and
+        // decimals.
+    };
+}
+
diff --git a/src/com/ibm/text/resources/NumberFormatRules_el.java b/src/com/ibm/text/resources/NumberFormatRules_el.java
new file mode 100755
index 0000000..63bd02d
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_el.java
@@ -0,0 +1,80 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_el.java,v $ 
+ * $Date: 2000/03/10 04:07:27 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Greek
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:27 $
+ */
+public class NumberFormatRules_el extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Greek.  Again in Greek we have to supply the words
+         * for the multiples of 100 because they can't be derived algorithmically.
+         * Also, the tens dgit changes form when followed by a ones digit: an
+         * accent mark disappears from the tens digit and moves to the ones digit.
+         * Therefore, instead of using the [] notation, we actually have to use
+         * two separate rules for each multiple of 10 to show the two forms of
+         * the word.
+         */
+        { "SpelloutRules",
+            "zero (incomplete data); \u03ad\u03bd\u03b1; \u03b4\u03cd\u03bf; \u03b4\u03c1\u03af\u03b1; "
+            + "\u03c4\u03ad\u03c3\u03c3\u03b5\u03c1\u03b1; \u03c0\u03ad\u03bd\u03c4\u03b5; "
+            + "\u03ad\u03be\u03b9; \u03b5\u03c0\u03c4\u03ac; \u03bf\u03ba\u03c4\u03ce; "
+            + "\u03b5\u03bd\u03bd\u03ad\u03b1;\n"
+            + "10: \u03b4\u03ad\u03ba\u03b1; "
+            + "\u03ad\u03bd\u03b4\u03b5\u03ba\u03b1; \u03b4\u03ce\u03b4\u03b5\u03ba\u03b1; "
+            + "\u03b4\u03b5\u03ba\u03b1>>;\n"
+            + "20: \u03b5\u03af\u03ba\u03bf\u03c3\u03b9; \u03b5\u03b9\u03ba\u03bf\u03c3\u03b9>>;\n"
+            + "30: \u03c4\u03c1\u03b9\u03ac\u03bd\u03c4\u03b1; \u03c4\u03c1\u03b9\u03b1\u03bd\u03c4\u03b1>>;\n"
+            + "40: \u03c3\u03b1\u03c1\u03ac\u03bd\u03c4\u03b1; \u03c3\u03b1\u03c1\u03b1\u03bd\u03c4\u03b1>>;\n"
+            + "50: \u03c0\u03b5\u03bd\u03ae\u03bd\u03c4\u03b1; \u03c0\u03b5\u03bd\u03b7\u03bd\u03c4\u03b1>>;\n"
+            + "60: \u03b5\u03be\u03ae\u03bd\u03c4\u03b1; \u03b5\u03be\u03b7\u03bd\u03c4\u03b1>>;\n"
+            + "70: \u03b5\u03b2\u03b4\u03bf\u03bc\u03ae\u03bd\u03c4\u03b1; "
+            + "\u03b5\u03b2\u03b4\u03bf\u03bc\u03b7\u03bd\u03c4\u03b1>>;\n"
+            + "80: \u03bf\u03b3\u03b4\u03cc\u03bd\u03c4\u03b1; \u03bf\u03b3\u03b4\u03bf\u03bd\u03c4\u03b1>>;\n"
+            + "90: \u03b5\u03bd\u03bd\u03b5\u03bd\u03ae\u03bd\u03c4\u03b1; "
+            + "\u03b5\u03bd\u03bd\u03b5\u03bd\u03b7\u03bd\u03c4\u03b1>>;\n"
+            + "100: \u03b5\u03ba\u03b1\u03c4\u03cc[\u03bd >>];\n"
+            + "200: \u03b4\u03b9\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "300: \u03c4\u03c1\u03b9\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "400: \u03c4\u03b5\u03c4\u03c1\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "500: \u03c0\u03b5\u03bd\u03c4\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "600: \u03b5\u03be\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "700: \u03b5\u03c0\u03c4\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "800: \u03bf\u03ba\u03c4\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "900: \u03b5\u03bd\u03bd\u03b9\u03b1\u03ba\u03cc\u03c3\u03b9\u03b1[ >>];\n"
+            + "1000: \u03c7\u03af\u03bb\u03b9\u03b1[ >>];\n"
+            + "2000: << \u03c7\u03af\u03bb\u03b9\u03b1[ >>];\n"
+            + "1,000,000: << \u03b5\u03ba\u03b1\u03c4\u03bf\u03bc\u03bc\u03b9\u03cc\u03c1\u03b9\u03bf[ >>];\n"
+            + "1,000,000,000: << \u03b4\u03b9\u03c3\u03b5\u03ba\u03b1\u03c4\u03bf\u03bc\u03bc\u03b9\u03cc\u03c1\u03b9\u03bf[ >>];\n"
+            + "1,000,000,000,000: =#,##0=" }
+        // Can someone supply me with information on negatives and decimals?
+        // I'm also missing the word for zero.  Can someone clue me in?
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_en.java b/src/com/ibm/text/resources/NumberFormatRules_en.java
new file mode 100755
index 0000000..d0d766e
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_en.java
@@ -0,0 +1,82 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_en.java,v $ 
+ * $Date: 2000/03/10 04:07:27 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default RuleBasedNumberFormat data for English.  This resource
+ * inherits everything from the default.
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:27 $
+ */
+public class NumberFormatRules_en extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    // this is exactly the same as SpelloutRules from the root resource
+    // bundle
+    Object[][] contents = {
+        { "SpelloutRules",
+            "%simplified:\n"
+            + "    -x: minus >>;\n"
+            + "    x.x: << point >>;\n"
+            + "    zero; one; two; three; four; five; six; seven; eight; nine;\n"
+            + "    ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen;\n"
+            + "        seventeen; eighteen; nineteen;\n"
+            + "    20: twenty[->>];\n"
+            + "    30: thirty[->>];\n"
+            + "    40: forty[->>];\n"
+            + "    50: fifty[->>];\n"
+            + "    60: sixty[->>];\n"
+            + "    70: seventy[->>];\n"
+            + "    80: eighty[->>];\n"
+            + "    90: ninety[->>];\n"
+            + "    100: << hundred[ >>];\n"
+            + "    1000: << thousand[ >>];\n"
+            + "    1,000,000: << million[ >>];\n"
+            + "    1,000,000,000: << billion[ >>];\n"
+            + "    1,000,000,000,000: << trillion[ >>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+            + "%default:\n"
+            + "    -x: minus >>;\n"
+            + "    x.x: << point >>;\n"
+            + "    =%simplified=;\n"
+            + "    100: << hundred[ >%%and>];\n"
+            + "    1000: << thousand[ >%%and>];\n"
+            + "    100,000>>: << thousand[>%%commas>];\n"
+            + "    1,000,000: << million[>%%commas>];\n"
+            + "    1,000,000,000: << billion[>%%commas>];\n"
+            + "    1,000,000,000,000: << trillion[>%%commas>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+            + "%%and:\n"
+            + "    and =%default=;\n"
+            + "    100: =%default=;\n"
+            + "%%commas:\n"
+            + "    ' and =%default=;\n"
+            + "    100: , =%default=;\n"
+            + "    1000: , <%default< thousand, >%default>;\n"
+            + "    1,000,000: , =%default=;"
+            + "%%lenient-parse:\n"
+            + "    & ' ' , ',' ;\n" }
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_en_GB.java b/src/com/ibm/text/resources/NumberFormatRules_en_GB.java
new file mode 100755
index 0000000..79ddda9
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_en_GB.java
@@ -0,0 +1,97 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_en_GB.java,v $ 
+ * $Date: 2000/03/10 04:07:28 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for U.K. English.
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:28 $
+ */
+public class NumberFormatRules_en_GB extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for U.K. English.  U.K. English has one significant
+         * difference from U.S. English: the names for values of 1,000,000,000
+         * and higher.  In American English, each successive "-illion" is 1,000
+         * times greater than the preceding one: 1,000,000,000 is "one billion"
+         * and 1,000,000,000,000 is "one trillion."  In British English, each
+         * successive "-illion" is one million times greater than the one before:
+         * "one billion" is 1,000,000,000,000 (or what Americans would call a
+         * "trillion"), and "one trillion" is 1,000,000,000,000,000,000.
+         * 1,000,000,000 in British English is "one thousand million."  (This
+         * value is sometimes called a "milliard," but this word seems to have
+         * fallen into disuse.)
+         */
+        { "SpelloutRules",
+            "%simplified:\n"
+            + "    -x: minus >>;\n"
+            + "    x.x: << point >>;\n"
+            + "    zero; one; two; three; four; five; six; seven; eight; nine;\n"
+            + "    ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen;\n"
+            + "        seventeen; eighteen; nineteen;\n"
+            + "    20: twenty[->>];\n"
+            + "    30: thirty[->>];\n"
+            + "    40: forty[->>];\n"
+            + "    50: fifty[->>];\n"
+            + "    60: sixty[->>];\n"
+            + "    70: seventy[->>];\n"
+            + "    80: eighty[->>];\n"
+            + "    90: ninety[->>];\n"
+            + "    100: << hundred[ >>];\n"
+            + "    1000: << thousand[ >>];\n"
+            + "    1,000,000: << million[ >>];\n"
+            + "    1,000,000,000,000: << billion[ >>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+            + "%default:\n"
+            + "    -x: minus >>;\n"
+            + "    x.x: << point >>;\n"
+            + "    =%simplified=;\n"
+            + "    100: << hundred[ >%%and>];\n"
+            + "    1000: << thousand[ >%%and>];\n"
+            + "    100,000>>: << thousand[>%%commas>];\n"
+            + "    1,000,000: << million[>%%commas>];\n"
+            + "    1,000,000,000,000: << billion[>%%commas>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+            + "%%and:\n"
+            + "    and =%default=;\n"
+            + "    100: =%default=;\n"
+            + "%%commas:\n"
+            + "    ' and =%default=;\n"
+            + "    100: , =%default=;\n"
+            + "    1000: , <%default< thousand, >%default>;\n"
+            + "    1,000,000: , =%default=;"
+            + "%%lenient-parse:\n"
+            + "    & ' ' , ',' ;\n" }
+        // Could someone please correct me if I'm wrong about "milliard" falling
+        // into disuse, or have missed any other details of how large numbers
+        // are rendered.  Also, could someone please provide me with information
+        // on which other English-speaking countries use which system?  Right now,
+        // I'm assuming that the U.S. system is used in Canada and that all the
+        // other English-speaking countries follow the British system.  Can
+        // someone out there confirm this?
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_es.java b/src/com/ibm/text/resources/NumberFormatRules_es.java
new file mode 100755
index 0000000..aec02dc
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_es.java
@@ -0,0 +1,96 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_es.java,v $ 
+ * $Date: 2000/03/10 04:07:28 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Spanish.
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:28 $
+ */
+public class NumberFormatRules_es extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Spanish.  The Spanish rules are quite similar to
+         * the English rules, but there are some important differences:
+         * First, we have to provide separate rules for most of the twenties
+         * because the ones digit frequently picks up an accent mark that it
+         * doesn't have when standing alone.  Second, each multiple of 100 has
+         * to be specified separately because the multiplier on 100 very often
+         * changes form in the contraction: 500 is "quinientos," not
+         * "cincocientos."  In addition, the word for 100 is "cien" when
+         * standing alone, but changes to "ciento" when followed by more digits.
+         * There also some other differences.
+         */
+        { "SpelloutRules",
+            // negative-number and fraction rules
+            "-x: menos >>;\n"
+            + "x.x: << punto >>;\n"
+            // words for values from 0 to 19
+            + "cero; uno; dos; tres; cuatro; cinco; seis; siete; ocho; nueve;\n"
+            + "diez; once; doce; trece; catorce; quince; diecis\u00e9is;\n"
+            + "    diecisiete; dieciocho; diecinueve;\n"
+            // words for values from 20 to 29 (necessary because the ones digit
+            // often picks up an accent mark it doesn't have when standing alone)
+            + "veinte; veintiuno; veintid\u00f3s; veintitr\u00e9s; veinticuatro;\n"
+            + "    veinticinco; veintis\u00e9is; veintisiete; veintiocho;\n"
+            + "    veintinueve;\n"
+            // words for multiples of 10 (notice that the tens digit is separated
+            // from the ones digit by the word "y".)
+            + "30: treinta[ y >>];\n"
+            + "40: cuarenta[ y >>];\n"
+            + "50: cincuenta[ y >>];\n"
+            + "60: sesenta[ y >>];\n"
+            + "70: setenta[ y >>];\n"
+            + "80: ochenta[ y >>];\n"
+            + "90: noventa[ y >>];\n"
+            // 100 by itself is "cien," but 100 followed by something is "cineto"
+            + "100: cien;\n"
+            + "101: ciento >>;\n"
+            // words for multiples of 100 (must be stated because they're
+            // rarely simple concatenations)
+            + "200: doscientos[ >>];\n"
+            + "300: trescientos[ >>];\n"
+            + "400: cuatrocientos[ >>];\n"
+            + "500: quinientos[ >>];\n"
+            + "600: seiscientos[ >>];\n"
+            + "700: setecientos[ >>];\n"
+            + "800: ochocientos[ >>];\n"
+            + "900: novecientos[ >>];\n"
+            // for 1,000, the multiplier on "mil" is omitted: 2,000 is "dos mil,"
+            // but 1,000 is just "mil."
+            + "1000: mil[ >>];\n"
+            + "2000: << mil[ >>];\n"
+            // 1,000,000 is "un millon," not "uno millon"
+            + "1,000,000: un mill\u00f3n[ >>];\n"
+            + "2,000,000: << mill\u00f3n[ >>];\n"
+            // overflow rule
+            + "1,000,000,000: =#,##0= (incomplete data);" }
+        // The Spanish rules are incomplete.  I'm missing information on negative
+        // numbers and numbers with fractional parts.  I also don't have
+        // information on numbers higher than the millions.
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_fr.java b/src/com/ibm/text/resources/NumberFormatRules_fr.java
new file mode 100755
index 0000000..b0c59df
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_fr.java
@@ -0,0 +1,99 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_fr.java,v $ 
+ * $Date: 2000/03/10 04:07:28 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default RuleBasedNumberFormat data for French
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:28 $
+ */
+public class NumberFormatRules_fr extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for French.  French adds some interesting quirks of its
+         * own: 1) The word "et" is interposed between the tens and ones digits,
+         * but only if the ones digit if 1: 20 is "vingt," and 2 is "vingt-deux,"
+         * but 21 is "vingt-et-un."  2)  There are no words for 70, 80, or 90.
+         * "quatre-vingts" ("four twenties") is used for 80, and values proceed
+         * by score from 60 to 99 (e.g., 73 is "soixante-treize" ["sixty-thirteen"]).
+         * Numbers from 1,100 to 1,199 are rendered as hundreds rather than
+         * thousands: 1,100 is "onze cents" ("eleven hundred"), rather than
+         * "mille cent" ("one thousand one hundred")
+         */
+        { "SpelloutRules",
+            // the main rule set
+            "%main:\n"
+            + "    -x: moins >>;\n"
+            + "    x.x: << virgule >>;\n"
+                   // words for numbers from 0 to 10
+            + "    z\u00e9ro; un; deux; trois; quatre; cinq; six; sept; huit; neuf;\n"
+            + "    dix; onze; douze; treize; quatorze; quinze; seize;\n"
+            + "        dix-sept; dix-huit; dix-neuf;\n"
+                   // ords for the multiples of 10: %%alt-ones inserts "et"
+                   // when needed
+            + "    20: vingt[->%%alt-ones>];\n"
+            + "    30: trente[->%%alt-ones>];\n"
+            + "    40: quarante[->%%alt-ones>];\n"
+            + "    50: cinquante[->%%alt-ones>];\n"
+                   // rule for 60.  The /20 causes this rule's multiplier to be
+                   // 20 rather than 10, allowinhg us to recurse for all values
+                   // from 60 to 79...
+            + "    60/20: soixante[->%%alt-ones>];\n"
+                   // ...except for 71, which must be special-cased
+            + "    71: soixante et onze;\n"
+                   // at 72, we have to repeat the rule for 60 to get us to 79
+            + "    72/20: soixante->%%alt-ones>;\n"
+                   // at 80, we state a new rule with the phrase for 80.  Since
+                   // it changes form when there's a ones digit, we need a second
+                   // rule at 81.  This rule also includes "/20," allowing it to
+                   // be used correctly for all values up to 99
+            + "    80: quatre-vingts; 81/20: quatre-vingt->>;\n"
+                   // "cent" becomes plural when preceded by a multiplier, and
+                   // the multiplier is omitted from the singular form
+            + "    100: cent[ >>];\n"
+            + "    200: << cents[ >>];\n"
+            + "    1000: mille[ >>];\n"
+                   // values from 1,100 to 1,199 are rendered as "onze cents..."
+                   // instead of "mille cent..."  The > after "1000" decreases
+                   // the rule's exponent, causing its multiplier to be 100 instead
+                   // of 1,000.  This prevents us from getting "onze cents cent
+                   // vingt-deux" ("eleven hundred one hundred twenty-two").
+            + "    1100>: onze cents[ >>];\n"
+                   // at 1,200, we go back to formating in thousands, so we
+                   // repeat the rule for 1,000
+            + "    1200: mille >>;\n"
+                   // at 2,000, the multiplier is added
+            + "    2000: << mille[ >>];\n"
+            + "    1,000,000: << million[ >>];\n"
+            + "    1,000,000,000: << milliarde[ >>];\n"
+            + "    1,000,000,000,000: << billion[ >>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+            // %%alt-ones is used to insert "et" when the ones digit is 1
+            + "%%alt-ones:\n"
+            + "    ; et-un; =%main=;" }
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_fr_CH.java b/src/com/ibm/text/resources/NumberFormatRules_fr_CH.java
new file mode 100755
index 0000000..607d776
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_fr_CH.java
@@ -0,0 +1,77 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_fr_CH.java,v $ 
+ * $Date: 2000/03/10 04:07:28 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Swiss French.
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:28 $
+ */
+public class NumberFormatRules_fr_CH extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Swiss French.  Swiss French differs from French French
+         * in that it does have words for 70, 80, and 90.  This rule set shows them,
+         * and is simpler as a result.
+         */
+        { "SpelloutRules",
+            "%main:\n"
+            + "    -x: moins >>;\n"
+            + "    x.x: << virgule >>;\n"
+            + "    z\u00e9ro; un; deux; trois; quatre; cinq; six; sept; huit; neuf;\n"
+            + "    dix; onze; douze; treize; quatorze; quinze; seize;\n"
+            + "        dix-sept; dix-huit; dix-neuf;\n"
+            + "    20: vingt[->%%alt-ones>];\n"
+            + "    30: trente[->%%alt-ones>];\n"
+            + "    40: quarante[->%%alt-ones>];\n"
+            + "    50: cinquante[->%%alt-ones>];\n"
+            + "    60: soixante[->%%alt-ones>];\n"
+                   // notice new words for 70, 80, and 90
+            + "    70: septante[->%%alt-ones>];\n"
+            + "    80: octante[->%%alt-ones>];\n"
+            + "    90: nonante[->%%alt-ones>];\n"
+            + "    100: cent[ >>];\n"
+            + "    200: << cents[ >>];\n"
+            + "    1000: mille[ >>];\n"
+            + "    1100>: onze cents[ >>];\n"
+            + "    1200: mille >>;\n"
+            + "    2000: << mille[ >>];\n"
+            + "    1,000,000: << million[ >>];\n"
+            + "    1,000,000,000: << milliarde[ >>];\n"
+            + "    1,000,000,000,000: << billion[ >>];\n"
+            + "    1,000,000,000,000,000: =#,##0=;\n"
+            + "%%alt-ones:\n"
+            + "    ; et-un; =%main=;" }
+        // again, I'm missing information on negative numbers and decimals for
+        // these to rule sets.  Also, I'm not 100% sure about Swiss French.  Is
+        // this correct?  Is "onze cents" commonly used for 1,100 in both France
+        // and Switzerland?  Can someone fill me in on the rules for the other
+        // French-speaking countries?  I've heard conflicting opinions on which
+        // version is used in Canada, and I understand there's an alternate set
+        // of words for 70, 80, and 90 that is used somewhere, but I don't know
+        // what those words are or where they're used.
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_it.java b/src/com/ibm/text/resources/NumberFormatRules_it.java
new file mode 100755
index 0000000..d74d5ef
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_it.java
@@ -0,0 +1,133 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_it.java,v $ 
+ * $Date: 2000/03/10 04:07:28 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Italian
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:28 $
+ */
+public class NumberFormatRules_it extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Italian.  Like German, most Italian numbers are
+         * written as single words.  What makes these rules complicated is the rule
+         * that says that when a word ending in a vowel and a word beginning with
+         * a vowel are combined into a compound, the vowel is dropped from the
+         * end of the first word: 180 is "centottanta," not "centoottanta."
+         * The complexity of this rule set is to produce this behavior.
+         */
+        { "SpelloutRules",
+            // main rule set.  Follows the patterns of the preceding rule sets,
+            // except that the final vowel is omitted from words ending in
+            // vowels when they are followed by another word; instead, we have
+            // separate rule sets that are identical to this one, except that
+            // all the words that don't begin with a vowel have a vowel tacked
+            // onto them at the front.  A word ending in a vowel calls a
+            // substitution that will supply that vowel, unless that vowel is to
+            // be elided.
+            "%main:\n"
+            + "    -x: meno >>;\n"
+            + "    x.x: << virgola >>;\n"
+            + "    zero; uno; due; tre; quattro; cinque; sei; sette; otto;\n"
+            + "        nove;\n"
+            + "    dieci; undici; dodici; tredici; quattordici; quindici; sedici;\n"
+            + "        diciasette; diciotto; diciannove;\n"
+            + "    20: venti; vent>%%with-i>;\n"
+            + "    30: trenta; trent>%%with-i>;\n"
+            + "    40: quaranta; quarant>%%with-a>;\n"
+            + "    50: cinquanta; cinquant>%%with-a>;\n"
+            + "    60: sessanta; sessant>%%with-a>;\n"
+            + "    70: settanta; settant>%%with-a>;\n"
+            + "    80: ottanta; ottant>%%with-a>;\n"
+            + "    90: novanta; novant>%%with-a>;\n"
+            + "    100: cento; cent[>%%with-o>];\n"
+            + "    200: <<cento; <<cent[>%%with-o>];\n"
+            + "    1000: mille; mill[>%%with-i>];\n"
+            + "    2000: <<mila; <<mil[>%%with-a>];\n"
+            + "    100,000>>: <<mila[ >>];\n"
+            + "    1,000,000: =#,##0= (incomplete data);\n"
+            + "%%with-a:\n"
+            + "    azero; uno; adue; atre; aquattro; acinque; asei; asette; otto;\n"
+            + "        anove;\n"
+            + "    adieci; undici; adodici; atredici; aquattordici; aquindici; asedici;\n"
+            + "        adiciasette; adiciotto; adiciannove;\n"
+            + "    20: aventi; avent>%%with-i>;\n"
+            + "    30: atrenta; atrent>%%with-i>;\n"
+            + "    40: aquaranta; aquarant>%%with-a>;\n"
+            + "    50: acinquanta; acinquant>%%with-a>;\n"
+            + "    60: asessanta; asessant>%%with-a>;\n"
+            + "    70: asettanta; asettant>%%with-a>;\n"
+            + "    80: ottanta; ottant>%%with-a>;\n"
+            + "    90: anovanta; anovant>%%with-a>;\n"
+            + "    100: acento; acent[>%%with-o>];\n"
+            + "    200: <%%with-a<cento; <%%with-a<cent[>%%with-o>];\n"
+            + "    1000: amille; amill[>%%with-i>];\n"
+            + "    2000: <%%with-a<mila; <%%with-a<mil[>%%with-a>];\n"
+            + "    100,000: =%main=;\n"
+            + "%%with-i:\n"
+            + "    izero; uno; idue; itre; iquattro; icinque; isei; isette; otto;\n"
+            + "        inove;\n"
+            + "    idieci; undici; idodici; itredici; iquattordici; iquindici; isedici;\n"
+            + "        idiciasette; idiciotto; idiciannove;\n"
+            + "    20: iventi; ivent>%%with-i>;\n"
+            + "    30: itrenta; itrent>%%with-i>;\n"
+            + "    40: iquaranta; iquarant>%%with-a>;\n"
+            + "    50: icinquanta; icinquant>%%with-a>;\n"
+            + "    60: isessanta; isessant>%%with-a>;\n"
+            + "    70: isettanta; isettant>%%with-a>;\n"
+            + "    80: ottanta; ottant>%%with-a>;\n"
+            + "    90: inovanta; inovant>%%with-a>;\n"
+            + "    100: icento; icent[>%%with-o>];\n"
+            + "    200: <%%with-i<cento; <%%with-i<cent[>%%with-o>];\n"
+            + "    1000: imille; imill[>%%with-i>];\n"
+            + "    2000: <%%with-i<mila; <%%with-i<mil[>%%with-a>];\n"
+            + "    100,000: =%main=;\n"
+            + "%%with-o:\n"
+            + "    ozero; uno; odue; otre; oquattro; ocinque; osei; osette; otto;\n"
+            + "        onove;\n"
+            + "    odieci; undici; ododici; otredici; oquattordici; oquindici; osedici;\n"
+            + "        odiciasette; odiciotto; odiciannove;\n"
+            + "    20: oventi; ovent>%%with-i>;\n"
+            + "    30: otrenta; otrent>%%with-i>;\n"
+            + "    40: oquaranta; oquarant>%%with-a>;\n"
+            + "    50: ocinquanta; ocinquant>%%with-a>;\n"
+            + "    60: osessanta; osessant>%%with-a>;\n"
+            + "    70: osettanta; osettant>%%with-a>;\n"
+            + "    80: ottanta; ottant>%%with-a>;\n"
+            + "    90: onovanta; onovant>%%with-a>;\n"
+            + "    100: ocento; ocent[>%%with-o>];\n"
+            + "    200: <%%with-o<cento; <%%with-o<cent[>%%with-o>];\n"
+            + "    1000: omille; omill[>%%with-i>];\n"
+            + "    2000: <%%with-o<mila; <%%with-o<mil[>%%with-a>];\n"
+            + "    100,000: =%main=;\n" }
+        // Can someone confirm that I did the vowel-eliding thing right?  I'm
+        // not 100% sure I'm doing it in all the right places, or completely
+        // correctly.  Also, I don't have information for negatives and decimals,
+        // and I lack words fror values from 1,000,000 on up.
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_iw.java b/src/com/ibm/text/resources/NumberFormatRules_iw.java
new file mode 100755
index 0000000..ac39373
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_iw.java
@@ -0,0 +1,65 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_iw.java,v $ 
+ * $Date: 2000/03/10 04:07:28 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Hebrew
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:28 $
+ */
+public class NumberFormatRules_iw extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Hebrew.  Hebrew actually has inflected forms for
+         * most of the lower-order numbers.  The masculine forms are shown
+         * here.
+         */
+        { "SpelloutRules",
+            "zero (incomplete data); \u05d0\u05d4\u05d3; \u05e9\u05d2\u05d9\u05d9\u05dd; \u05e9\u05dc\u05d5\u05e9\u05d4;\n"
+            + "4: \u05d0\u05d3\u05d1\u05e6\u05d4; \u05d7\u05d2\u05d5\u05d9\u05e9\u05d4; \u05e9\u05e9\u05d4;\n"
+            + "7: \u05e9\u05d1\u05e6\u05d4; \u05e9\u05de\u05d5\u05d2\u05d4; \u05ea\u05e9\u05e6\u05d4;\n"
+            + "10: \u05e6\u05e9\u05d3\u05d4[ >>];\n"
+            + "20: \u05e6\u05e9\u05d3\u05d9\u05dd[ >>];\n"
+            + "30: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd[ >>];\n"
+            + "40: \u05d0\u05d3\u05d1\u05e6\u05d9\u05dd[ >>];\n"
+            + "50: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd[ >>];\n"
+            + "60: \u05e9\u05e9\u05d9\u05dd[ >>];\n"
+            + "70: \u05e9\u05d1\u05e6\u05d9\u05dd[ >>];\n"
+            + "80: \u05e9\u05de\u05d5\u05d2\u05d9\u05dd[ >>];\n"
+            + "90: \u05ea\u05e9\u05e6\u05d9\u05dd[ >>];\n"
+            + "100: \u05de\u05d0\u05d4[ >>];\n"
+            + "200: << \u05de\u05d0\u05d4[ >>];\n"
+            + "1000: \u05d0\u05dc\u05e3[ >>];\n"
+            + "2000: << \u05d0\u05dc\u05e3[ >>];\n"
+            + "1,000,000: =#,##0= (incomplete data);" }
+        // This data is woefully incomplete.  Can someone fill me in on the
+        // various inflected forms of the numbers, which seem to be necessary
+        // to do Hebrew correctly?  Can somone supply me with data for values
+        // from 1,000,000 on up?  What about the word for zero?  What about
+        // information on negatives and decimals?
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_ja.java b/src/com/ibm/text/resources/NumberFormatRules_ja.java
new file mode 100755
index 0000000..3d17369
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_ja.java
@@ -0,0 +1,74 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_ja.java,v $ 
+ * $Date: 2000/03/10 04:07:28 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Japanese
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:28 $
+ */
+public class NumberFormatRules_ja extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Japanese.  In Japanese, there really isn't any
+         * distinction between a number written out in digits and a number
+         * written out in words: the ideographic characters are both digits
+         * and words.  This rule set provides two variants:  %traditional
+         * uses the traditional CJK numerals (which are also used in China
+         * and Korea).  %financial uses alternate ideographs for many numbers
+         * that are harder to alter than the traditional numerals (one could
+         * fairly easily change a one to
+         * a three just by adding two strokes, for example).  This is also done in
+         * the other countries using Chinese idographs, but different ideographs
+         * are used in those places.
+         */
+        { "SpelloutRules",
+            "%financial:\n"
+            + "    \u96f6; \u58f1; \u5f10; \u53c2; \u56db; \u4f0d; \u516d; \u4e03; \u516b; \u4e5d;\n"
+            + "    \u62fe[>>];\n"
+            + "    20: <<\u62fe[>>];\n"
+            + "    100: <<\u767e[>>];\n"
+            + "    1000: <<\u5343[>>];\n"
+            + "    10,000: <<\u4e07[>>];\n"
+            + "    100,000,000: <<\u5104[>>];\n"
+            + "    1,000,000,000,000: <<\u5146[>>];\n"
+            + "    10,000,000,000,000,000: =#,##0=;\n"
+            + "%traditional:\n"
+            + "    \u96f6; \u4e00; \u4e8c; \u4e09; \u56db; \u4e94; \u516d; \u4e03; \u516b; \u4e5d;\n"
+            + "    \u5341[>>];\n"
+            + "    20: <<\u5341[>>];\n"
+            + "    100: <<\u767e[>>];\n"
+            + "    1000: <<\u5343[>>];\n"
+            + "    10,000: <<\u4e07[>>];\n"
+            + "    100,000,000: <<\u5104[>>];\n"
+            + "    1,000,000,000,000: <<\u5146[>>];\n"
+            + "    10,000,000,000,000,000: =#,##0=;" }
+        // Can someone supply me with the right fraud-proof ideographs for
+        // Simplified and Traditional Chinese, and for Korean?  Can someone
+        // supply me with information on negatives and decimals?
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_nl.java b/src/com/ibm/text/resources/NumberFormatRules_nl.java
new file mode 100755
index 0000000..d27ec60
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_nl.java
@@ -0,0 +1,60 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_nl.java,v $ 
+ * $Date: 2000/03/10 04:07:29 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Dutch
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:29 $
+ */
+class NumberFormatRules_nl extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Swedish.
+         */
+        { "SpelloutRules",
+            " -x: min >>;\n"
+            + "x.x: << komma >>;\n"
+            + "(zero?); een; twee; drie; vier; vijf; zes; zeven; acht; negen;\n"
+            + "tien; elf; twaalf; dertien; veertien; vijftien; zestien;\n"
+            + "zeventien; achtien; negentien;\n"
+            + "20: [>> en ]twintig;\n"
+            + "30: [>> en ]dertig;\n"
+            + "40: [>> en ]veertig;\n"
+            + "50: [>> en ]vijftig;\n"
+            + "60: [>> en ]zestig;\n"
+            + "70: [>> en ]zeventig;\n"
+            + "80: [>> en ]tachtig;\n"
+            + "90: [>> en ]negentig;\n"
+            + "100: << honderd[ >>];\n"
+            + "1000: << duizend[ >>];\n"
+            + "1,000,000: << miljoen[ >>];\n"
+            + "1,000,000,000: << biljoen[ >>];\n"
+            + "1,000,000,000,000: =#,##0=" }
+            // can someone supply me with information on negatives and decimals?
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_ru.java b/src/com/ibm/text/resources/NumberFormatRules_ru.java
new file mode 100755
index 0000000..3ab07cd
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_ru.java
@@ -0,0 +1,71 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_ru.java,v $ 
+ * $Date: 2000/03/10 04:07:29 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Russian
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:29 $
+ */
+public class NumberFormatRules_ru extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Russian.
+         */
+        { "SpelloutRules",
+            "\u043d\u043e\u043b\u044c; \u043e\u0434\u0438\u043d; \u0434\u0432\u0430; \u0442\u0440\u0438; "
+            + "\u0447\u0435\u0442\u044b\u0440\u0435; \u043f\u044f\u0442; \u0448\u0435\u0441\u0442; "
+            + "\u0441\u0435\u043c\u044c; \u0432\u043e\u0441\u0435\u043c\u044c; \u0434\u0435\u0432\u044f\u0442;\n"
+            + "10: \u0434\u0435\u0441\u044f\u0442; "
+            + "\u043e\u0434\u0438\u043d\u043d\u0430\u0434\u0446\u0430\u0442\u044c;\n"
+            + "\u0434\u0432\u0435\u043d\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+            + "\u0442\u0440\u0438\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+            + "\u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c;\n"
+            + "15: \u043f\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+            + "\u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+            + "\u0441\u0435\u043c\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+            + "\u0432\u043e\u0441\u0435\u043c\u043d\u0430\u0434\u0446\u0430\u0442\u044c; "
+            + "\u0434\u0435\u0432\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c;\n"
+            + "20: \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c[ >>];\n"
+            + "30: \u0442\u0440\u043b\u0434\u0446\u0430\u0442\u044c[ >>];\n"
+            + "40: \u0441\u043e\u0440\u043e\u043a[ >>];\n"
+            + "50: \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+            + "60: \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+            + "70: \u0441\u0435\u043c\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+            + "80: \u0432\u043e\u0441\u0435\u043c\u044c\u0434\u0435\u0441\u044f\u0442[ >>];\n"
+            + "90: \u0434\u0435\u0432\u044f\u043d\u043e\u0441\u0442\u043e[ >>];\n"
+            + "100: \u0441\u0442\u043e[ >>];\n"
+            + "200: << \u0441\u0442\u043e[ >>];\n"
+            + "1000: \u0442\u044b\u0441\u044f\u0447\u0430[ >>];\n"
+            + "2000: << \u0442\u044b\u0441\u044f\u0447\u0430[ >>];\n"
+            + "1,000,000: \u043c\u0438\u043b\u043b\u0438\u043e\u043d[ >>];\n"
+            + "2,000,000: << \u043c\u0438\u043b\u043b\u0438\u043e\u043d[ >>];\n"
+            + "1,000,000,000: =#,##0=;" }
+        // Can someone supply me with information on negatives and decimals?
+        // How about words for billions and trillions?
+    };
+}
diff --git a/src/com/ibm/text/resources/NumberFormatRules_sv.java b/src/com/ibm/text/resources/NumberFormatRules_sv.java
new file mode 100755
index 0000000..197088a
--- /dev/null
+++ b/src/com/ibm/text/resources/NumberFormatRules_sv.java
@@ -0,0 +1,62 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/NumberFormatRules_sv.java,v $ 
+ * $Date: 2000/03/10 04:07:29 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * RuleBasedNumberFormat data for Swedish
+ *
+ * @author Richard Gillam
+ * @version $Version$ $Date: 2000/03/10 04:07:29 $
+ */
+public class NumberFormatRules_sv extends ListResourceBundle {
+    /**
+     * Puts a copyright in the .class file
+     */
+    private static final String copyrightNotice
+        = "Copyright \u00a91997-1998 IBM Corp.  All rights reserved.";
+    public Object[][] getContents() {
+        return contents;
+    }
+
+    Object[][] contents = {
+        /**
+         * Spellout rules for Swedish.
+         */
+        { "SpelloutRules",
+            "noll; ett; tv\u00e5; tre; fyra; fem; sex; sjo; \u00e5tta; nio;\n"
+            + "tio; elva; tolv; tretton; fjorton; femton; sexton; sjutton; arton; nitton;\n"
+            + "20: tjugo[>>];\n"
+            + "30: trettio[>>];\n"
+            + "40: fyrtio[>>];\n"
+            + "50: femtio[>>];\n"
+            + "60: sextio[>>];\n"
+            + "70: sjuttio[>>];\n"
+            + "80: \u00e5ttio[>>];\n"
+            + "90: nittio[>>];\n"
+            + "100: hundra[>>];\n"
+            + "200: <<hundra[>>];\n"
+            + "1000: tusen[ >>];\n"
+            + "2000: << tusen[ >>];\n"
+            + "1,000,000: en miljon[ >>];\n"
+            + "2,000,000: << miljon[ >>];\n"
+            + "1,000,000,000: en miljard[ >>];\n"
+            + "2,000,000,000: << miljard[ >>];\n"
+            + "1,000,000,000,000: en biljon[ >>];\n"
+            + "2,000,000,000,000: << biljon[ >>];\n"
+            + "1,000,000,000,000,000: =#,##0=" }
+        // can someone supply me with information on negatives and decimals?
+    };
+}
diff --git a/src/com/ibm/text/resources/ResourceReader.java b/src/com/ibm/text/resources/ResourceReader.java
new file mode 100755
index 0000000..c1b445c
--- /dev/null
+++ b/src/com/ibm/text/resources/ResourceReader.java
@@ -0,0 +1,105 @@
+package com.ibm.text.resources;
+import java.io.*;
+
+/**
+ * A reader for text resource data in the current package.  The
+ * resource data is loaded through the class loader, so it will
+ * typically be a file in the same directory as the *.class files, or
+ * a file within a JAR file in the corresponding subdirectory.  The
+ * file must be a text file in one of the supported encodings; when the
+ * resource is opened by constructing a <code>ResourceReader</code>
+ * object the encoding is specified.
+ *
+ * <p>Although this class has a public API, it is designed for
+ * internal use by classes in the <code>com.ibm.text</code> package.
+ *
+ * @author Alan Liu
+ */
+public class ResourceReader {
+    private BufferedReader reader;
+    private String resourceName;
+    private String encoding; // null for default encoding
+    private boolean isReset; // TRUE if we are at the start of the file
+
+    /**
+     * Construct a reader object for the text file of the given name
+     * in this package, using the given encoding.
+     * @param resourceName the name of the text file located in this
+     * package
+     * @param encoding the encoding of the text file; if unsupported
+     * an exception is thrown
+     * @exception UnsupportedEncodingException if
+     * <code>encoding</code> is not supported by the JDK.
+     */
+    public ResourceReader(String resourceName, String encoding)
+        throws UnsupportedEncodingException {
+
+        this.resourceName = resourceName;
+        this.encoding = encoding;
+        isReset = false;
+        _reset();
+    }
+
+    /**
+     * Construct a reader object for the text file of the given name
+     * in this package, using the default encoding.
+     * @param resourceName the name of the text file located in this
+     * package
+     */
+    public ResourceReader(String resourceName) {
+        this.resourceName = resourceName;
+        this.encoding = null;
+        isReset = false;
+        try {
+            _reset();
+        } catch (UnsupportedEncodingException e) {}
+    }
+
+    /**
+     * Read and return the next line of the file or <code>null</code>
+     * if the end of the file has been reached.
+     */
+    public String readLine() throws IOException {
+        isReset = false;
+        return reader.readLine();
+    }
+
+    /**
+     * Reset this reader so that the next call to
+     * <code>readLine()</code> returns the first line of the file
+     * again.  This is a somewhat expensive call, however, calling
+     * <code>reset()</code> after calling it the first time does
+     * nothing if <code>readLine()</code> has not been called in
+     * between.
+     */
+    public void reset() {
+        try {
+            _reset();
+        } catch (UnsupportedEncodingException e) {}
+        // We swallow this exception, if there is one.  If the encoding is
+        // invalid, the constructor will have thrown this exception already and
+        // the caller shouldn't use the object afterwards.
+    }
+
+    /**
+     * Reset to the start by reconstructing the stream and readers.
+     * We could also use mark() and reset() on the stream or reader,
+     * but that would cause them to keep the stream data around in
+     * memory.  We don't want that because some of the resource files
+     * are large, e.g., 400k.
+     */
+    private void _reset() throws UnsupportedEncodingException {
+        if (isReset) {
+            return;
+        }
+        InputStream is = getClass().getResourceAsStream(resourceName);
+        if (is == null) {
+            throw new IllegalArgumentException("Can't open " + resourceName);
+        }
+        InputStreamReader isr =
+            (encoding == null) ? new InputStreamReader(is) :
+                                 new InputStreamReader(is, encoding);
+        reader = new BufferedReader(isr);
+        isReset = true;
+    }
+}
diff --git a/src/com/ibm/text/resources/Transliterator_Bengali_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Bengali_InterIndic.utf8.txt
new file mode 100755
index 0000000..d80f7c8
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Bengali_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Devanagari_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Devanagari_InterIndic.utf8.txt
new file mode 100755
index 0000000..b2f9276
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Devanagari_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Fullwidth_Halfwidth.utf8.txt b/src/com/ibm/text/resources/Transliterator_Fullwidth_Halfwidth.utf8.txt
new file mode 100755
index 0000000..dd19ca2
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Fullwidth_Halfwidth.utf8.txt
@@ -0,0 +1,269 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:41:57 2001

+#--------------------------------------------------------------------

+

+# Fullwidth-Halfwidth

+

+# Mechanically generated from Unicode Character Database

+

+# multicharacter

+

+ガ<>ガ; #  to KATAKANA LETTER GA

+ギ<>ギ; #  to KATAKANA LETTER GI

+グ<>グ; #  to KATAKANA LETTER GU

+ゲ<>ゲ; #  to KATAKANA LETTER GE

+ゴ<>ゴ; #  to KATAKANA LETTER GO

+ザ<>ザ; #  to KATAKANA LETTER ZA

+ジ<>ジ; #  to KATAKANA LETTER ZI

+ズ<>ズ; #  to KATAKANA LETTER ZU

+ゼ<>ゼ; #  to KATAKANA LETTER ZE

+ゾ<>ゾ; #  to KATAKANA LETTER ZO

+ダ<>ダ; #  to KATAKANA LETTER DA

+ヂ<>ヂ; #  to KATAKANA LETTER DI

+ヅ<>ヅ; #  to KATAKANA LETTER DU

+デ<>デ; #  to KATAKANA LETTER DE

+ド<>ド; #  to KATAKANA LETTER DO

+バ<>バ; #  to KATAKANA LETTER BA

+パ<>パ; #  to KATAKANA LETTER PA

+ビ<>ビ; #  to KATAKANA LETTER BI

+ピ<>ピ; #  to KATAKANA LETTER PI

+ブ<>ブ; #  to KATAKANA LETTER BU

+プ<>プ; #  to KATAKANA LETTER PU

+ベ<>ベ; #  to KATAKANA LETTER BE

+ペ<>ペ; #  to KATAKANA LETTER PE

+ボ<>ボ; #  to KATAKANA LETTER BO

+ポ<>ポ; #  to KATAKANA LETTER PO

+ヴ<>ヴ; #  to KATAKANA LETTER VU

+ヷ<>ヷ; #  to KATAKANA LETTER VA

+ヺ<>ヺ; #  to KATAKANA LETTER VO

+

+# single character

+

+!<>'!'; #  from FULLWIDTH EXCLAMATION MARK

+"<>'\"'; #  from FULLWIDTH QUOTATION MARK

+#<>'#'; #  from FULLWIDTH NUMBER SIGN

+$<>'$'; #  from FULLWIDTH DOLLAR SIGN

+%<>'%'; #  from FULLWIDTH PERCENT SIGN

+&<>'&'; #  from FULLWIDTH AMPERSAND

+'<>''; #  from FULLWIDTH APOSTROPHE

+(<>'('; #  from FULLWIDTH LEFT PARENTHESIS

+)<>')'; #  from FULLWIDTH RIGHT PARENTHESIS

+*<>'*'; #  from FULLWIDTH ASTERISK

++<>'+'; #  from FULLWIDTH PLUS SIGN

+,<>','; #  from FULLWIDTH COMMA

+-<>'-'; #  from FULLWIDTH HYPHEN-MINUS

+.<>'.'; #  from FULLWIDTH FULL STOP

+/<>'/'; #  from FULLWIDTH SOLIDUS

+0<>'0'; #  from FULLWIDTH DIGIT ZERO

+1<>'1'; #  from FULLWIDTH DIGIT ONE

+2<>'2'; #  from FULLWIDTH DIGIT TWO

+3<>'3'; #  from FULLWIDTH DIGIT THREE

+4<>'4'; #  from FULLWIDTH DIGIT FOUR

+5<>'5'; #  from FULLWIDTH DIGIT FIVE

+6<>'6'; #  from FULLWIDTH DIGIT SIX

+7<>'7'; #  from FULLWIDTH DIGIT SEVEN

+8<>'8'; #  from FULLWIDTH DIGIT EIGHT

+9<>'9'; #  from FULLWIDTH DIGIT NINE

+:<>':'; #  from FULLWIDTH COLON

+;<>';'; #  from FULLWIDTH SEMICOLON

+<<>'<'; #  from FULLWIDTH LESS-THAN SIGN

+=<>'='; #  from FULLWIDTH EQUALS SIGN

+><>'>'; #  from FULLWIDTH GREATER-THAN SIGN

+?<>'?'; #  from FULLWIDTH QUESTION MARK

+@<>'@'; #  from FULLWIDTH COMMERCIAL AT

+A<>A; #  from FULLWIDTH LATIN CAPITAL LETTER A

+B<>B; #  from FULLWIDTH LATIN CAPITAL LETTER B

+C<>C; #  from FULLWIDTH LATIN CAPITAL LETTER C

+D<>D; #  from FULLWIDTH LATIN CAPITAL LETTER D

+E<>E; #  from FULLWIDTH LATIN CAPITAL LETTER E

+F<>F; #  from FULLWIDTH LATIN CAPITAL LETTER F

+G<>G; #  from FULLWIDTH LATIN CAPITAL LETTER G

+H<>H; #  from FULLWIDTH LATIN CAPITAL LETTER H

+I<>I; #  from FULLWIDTH LATIN CAPITAL LETTER I

+J<>J; #  from FULLWIDTH LATIN CAPITAL LETTER J

+K<>K; #  from FULLWIDTH LATIN CAPITAL LETTER K

+L<>L; #  from FULLWIDTH LATIN CAPITAL LETTER L

+M<>M; #  from FULLWIDTH LATIN CAPITAL LETTER M

+N<>N; #  from FULLWIDTH LATIN CAPITAL LETTER N

+O<>O; #  from FULLWIDTH LATIN CAPITAL LETTER O

+P<>P; #  from FULLWIDTH LATIN CAPITAL LETTER P

+Q<>Q; #  from FULLWIDTH LATIN CAPITAL LETTER Q

+R<>R; #  from FULLWIDTH LATIN CAPITAL LETTER R

+S<>S; #  from FULLWIDTH LATIN CAPITAL LETTER S

+T<>T; #  from FULLWIDTH LATIN CAPITAL LETTER T

+U<>U; #  from FULLWIDTH LATIN CAPITAL LETTER U

+V<>V; #  from FULLWIDTH LATIN CAPITAL LETTER V

+W<>W; #  from FULLWIDTH LATIN CAPITAL LETTER W

+X<>X; #  from FULLWIDTH LATIN CAPITAL LETTER X

+Y<>Y; #  from FULLWIDTH LATIN CAPITAL LETTER Y

+Z<>Z; #  from FULLWIDTH LATIN CAPITAL LETTER Z

+[<>'['; #  from FULLWIDTH LEFT SQUARE BRACKET

+\<>'\\'; #  from FULLWIDTH REVERSE SOLIDUS {double escape - aliu}

+]<>']'; #  from FULLWIDTH RIGHT SQUARE BRACKET

+^<>'^'; #  from FULLWIDTH CIRCUMFLEX ACCENT

+_<>'_'; #  from FULLWIDTH LOW LINE

+`<>'`'; #  from FULLWIDTH GRAVE ACCENT

+a<>a; #  from FULLWIDTH LATIN SMALL LETTER A

+b<>b; #  from FULLWIDTH LATIN SMALL LETTER B

+c<>c; #  from FULLWIDTH LATIN SMALL LETTER C

+d<>d; #  from FULLWIDTH LATIN SMALL LETTER D

+e<>e; #  from FULLWIDTH LATIN SMALL LETTER E

+f<>f; #  from FULLWIDTH LATIN SMALL LETTER F

+g<>g; #  from FULLWIDTH LATIN SMALL LETTER G

+h<>h; #  from FULLWIDTH LATIN SMALL LETTER H

+i<>i; #  from FULLWIDTH LATIN SMALL LETTER I

+j<>j; #  from FULLWIDTH LATIN SMALL LETTER J

+k<>k; #  from FULLWIDTH LATIN SMALL LETTER K

+l<>l; #  from FULLWIDTH LATIN SMALL LETTER L

+m<>m; #  from FULLWIDTH LATIN SMALL LETTER M

+n<>n; #  from FULLWIDTH LATIN SMALL LETTER N

+o<>o; #  from FULLWIDTH LATIN SMALL LETTER O

+p<>p; #  from FULLWIDTH LATIN SMALL LETTER P

+q<>q; #  from FULLWIDTH LATIN SMALL LETTER Q

+r<>r; #  from FULLWIDTH LATIN SMALL LETTER R

+s<>s; #  from FULLWIDTH LATIN SMALL LETTER S

+t<>t; #  from FULLWIDTH LATIN SMALL LETTER T

+u<>u; #  from FULLWIDTH LATIN SMALL LETTER U

+v<>v; #  from FULLWIDTH LATIN SMALL LETTER V

+w<>w; #  from FULLWIDTH LATIN SMALL LETTER W

+x<>x; #  from FULLWIDTH LATIN SMALL LETTER X

+y<>y; #  from FULLWIDTH LATIN SMALL LETTER Y

+z<>z; #  from FULLWIDTH LATIN SMALL LETTER Z

+{<>'{'; #  from FULLWIDTH LEFT CURLY BRACKET

+|<>'|'; #  from FULLWIDTH VERTICAL LINE

+}<>'}'; #  from FULLWIDTH RIGHT CURLY BRACKET

+~<>'~'; #  from FULLWIDTH TILDE

+。<>。; #  to HALFWIDTH IDEOGRAPHIC FULL STOP

+「<>「; #  to HALFWIDTH LEFT CORNER BRACKET

+」<>」; #  to HALFWIDTH RIGHT CORNER BRACKET

+、<>、; #  to HALFWIDTH IDEOGRAPHIC COMMA

+・<>・; #  to HALFWIDTH KATAKANA MIDDLE DOT

+ヲ<>ヲ; #  to HALFWIDTH KATAKANA LETTER WO

+ァ<>ァ; #  to HALFWIDTH KATAKANA LETTER SMALL A

+ィ<>ィ; #  to HALFWIDTH KATAKANA LETTER SMALL I

+ゥ<>ゥ; #  to HALFWIDTH KATAKANA LETTER SMALL U

+ェ<>ェ; #  to HALFWIDTH KATAKANA LETTER SMALL E

+ォ<>ォ; #  to HALFWIDTH KATAKANA LETTER SMALL O

+ャ<>ャ; #  to HALFWIDTH KATAKANA LETTER SMALL YA

+ュ<>ュ; #  to HALFWIDTH KATAKANA LETTER SMALL YU

+ョ<>ョ; #  to HALFWIDTH KATAKANA LETTER SMALL YO

+ッ<>ッ; #  to HALFWIDTH KATAKANA LETTER SMALL TU

+ー<>ー; #  to HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK

+ア<>ア; #  to HALFWIDTH KATAKANA LETTER A

+イ<>イ; #  to HALFWIDTH KATAKANA LETTER I

+ウ<>ウ; #  to HALFWIDTH KATAKANA LETTER U

+エ<>エ; #  to HALFWIDTH KATAKANA LETTER E

+オ<>オ; #  to HALFWIDTH KATAKANA LETTER O

+カ<>カ; #  to HALFWIDTH KATAKANA LETTER KA

+キ<>キ; #  to HALFWIDTH KATAKANA LETTER KI

+ク<>ク; #  to HALFWIDTH KATAKANA LETTER KU

+ケ<>ケ; #  to HALFWIDTH KATAKANA LETTER KE

+コ<>コ; #  to HALFWIDTH KATAKANA LETTER KO

+サ<>サ; #  to HALFWIDTH KATAKANA LETTER SA

+シ<>シ; #  to HALFWIDTH KATAKANA LETTER SI

+ス<>ス; #  to HALFWIDTH KATAKANA LETTER SU

+セ<>セ; #  to HALFWIDTH KATAKANA LETTER SE

+ソ<>ソ; #  to HALFWIDTH KATAKANA LETTER SO

+タ<>タ; #  to HALFWIDTH KATAKANA LETTER TA

+チ<>チ; #  to HALFWIDTH KATAKANA LETTER TI

+ツ<>ツ; #  to HALFWIDTH KATAKANA LETTER TU

+テ<>テ; #  to HALFWIDTH KATAKANA LETTER TE

+ト<>ト; #  to HALFWIDTH KATAKANA LETTER TO

+ナ<>ナ; #  to HALFWIDTH KATAKANA LETTER NA

+ニ<>ニ; #  to HALFWIDTH KATAKANA LETTER NI

+ヌ<>ヌ; #  to HALFWIDTH KATAKANA LETTER NU

+ネ<>ネ; #  to HALFWIDTH KATAKANA LETTER NE

+ノ<>ノ; #  to HALFWIDTH KATAKANA LETTER NO

+ハ<>ハ; #  to HALFWIDTH KATAKANA LETTER HA

+ヒ<>ヒ; #  to HALFWIDTH KATAKANA LETTER HI

+フ<>フ; #  to HALFWIDTH KATAKANA LETTER HU

+ヘ<>ヘ; #  to HALFWIDTH KATAKANA LETTER HE

+ホ<>ホ; #  to HALFWIDTH KATAKANA LETTER HO

+マ<>マ; #  to HALFWIDTH KATAKANA LETTER MA

+ミ<>ミ; #  to HALFWIDTH KATAKANA LETTER MI

+ム<>ム; #  to HALFWIDTH KATAKANA LETTER MU

+メ<>メ; #  to HALFWIDTH KATAKANA LETTER ME

+モ<>モ; #  to HALFWIDTH KATAKANA LETTER MO

+ヤ<>ヤ; #  to HALFWIDTH KATAKANA LETTER YA

+ユ<>ユ; #  to HALFWIDTH KATAKANA LETTER YU

+ヨ<>ヨ; #  to HALFWIDTH KATAKANA LETTER YO

+ラ<>ラ; #  to HALFWIDTH KATAKANA LETTER RA

+リ<>リ; #  to HALFWIDTH KATAKANA LETTER RI

+ル<>ル; #  to HALFWIDTH KATAKANA LETTER RU

+レ<>レ; #  to HALFWIDTH KATAKANA LETTER RE

+ロ<>ロ; #  to HALFWIDTH KATAKANA LETTER RO

+ワ<>ワ; #  to HALFWIDTH KATAKANA LETTER WA

+ン<>ン; #  to HALFWIDTH KATAKANA LETTER N

+゙<>゙; #  to HALFWIDTH KATAKANA VOICED SOUND MARK

+゚<>゚; #  to HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK

+ᅠ<>ᅠ; #  to HALFWIDTH HANGUL FILLER

+ᄀ<>ᄀ; #  to HALFWIDTH HANGUL LETTER KIYEOK

+ᄁ<>ᄁ; #  to HALFWIDTH HANGUL LETTER SSANGKIYEOK

+ᆪ<>ᆪ; #  to HALFWIDTH HANGUL LETTER KIYEOK-SIOS

+ᄂ<>ᄂ; #  to HALFWIDTH HANGUL LETTER NIEUN

+ᆬ<>ᆬ; #  to HALFWIDTH HANGUL LETTER NIEUN-CIEUC

+ᆭ<>ᆭ; #  to HALFWIDTH HANGUL LETTER NIEUN-HIEUH

+ᄃ<>ᄃ; #  to HALFWIDTH HANGUL LETTER TIKEUT

+ᄄ<>ᄄ; #  to HALFWIDTH HANGUL LETTER SSANGTIKEUT

+ᄅ<>ᄅ; #  to HALFWIDTH HANGUL LETTER RIEUL

+ᆰ<>ᆰ; #  to HALFWIDTH HANGUL LETTER RIEUL-KIYEOK

+ᆱ<>ᆱ; #  to HALFWIDTH HANGUL LETTER RIEUL-MIEUM

+ᆲ<>ᆲ; #  to HALFWIDTH HANGUL LETTER RIEUL-PIEUP

+ᆳ<>ᆳ; #  to HALFWIDTH HANGUL LETTER RIEUL-SIOS

+ᆴ<>ᆴ; #  to HALFWIDTH HANGUL LETTER RIEUL-THIEUTH

+ᆵ<>ᆵ; #  to HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH

+ᄚ<>ᄚ; #  to HALFWIDTH HANGUL LETTER RIEUL-HIEUH

+ᄆ<>ᄆ; #  to HALFWIDTH HANGUL LETTER MIEUM

+ᄇ<>ᄇ; #  to HALFWIDTH HANGUL LETTER PIEUP

+ᄈ<>ᄈ; #  to HALFWIDTH HANGUL LETTER SSANGPIEUP

+ᄡ<>ᄡ; #  to HALFWIDTH HANGUL LETTER PIEUP-SIOS

+ᄉ<>ᄉ; #  to HALFWIDTH HANGUL LETTER SIOS

+ᄊ<>ᄊ; #  to HALFWIDTH HANGUL LETTER SSANGSIOS

+ᄋ<>ᄋ; #  to HALFWIDTH HANGUL LETTER IEUNG

+ᄌ<>ᄌ; #  to HALFWIDTH HANGUL LETTER CIEUC

+ᄍ<>ᄍ; #  to HALFWIDTH HANGUL LETTER SSANGCIEUC

+ᄎ<>ᄎ; #  to HALFWIDTH HANGUL LETTER CHIEUCH

+ᄏ<>ᄏ; #  to HALFWIDTH HANGUL LETTER KHIEUKH

+ᄐ<>ᄐ; #  to HALFWIDTH HANGUL LETTER THIEUTH

+ᄑ<>ᄑ; #  to HALFWIDTH HANGUL LETTER PHIEUPH

+ᄒ<>ᄒ; #  to HALFWIDTH HANGUL LETTER HIEUH

+ᅡ<>ᅡ; #  to HALFWIDTH HANGUL LETTER A

+ᅢ<>ᅢ; #  to HALFWIDTH HANGUL LETTER AE

+ᅣ<>ᅣ; #  to HALFWIDTH HANGUL LETTER YA

+ᅤ<>ᅤ; #  to HALFWIDTH HANGUL LETTER YAE

+ᅥ<>ᅥ; #  to HALFWIDTH HANGUL LETTER EO

+ᅦ<>ᅦ; #  to HALFWIDTH HANGUL LETTER E

+ᅧ<>ᅧ; #  to HALFWIDTH HANGUL LETTER YEO

+ᅨ<>ᅨ; #  to HALFWIDTH HANGUL LETTER YE

+ᅩ<>ᅩ; #  to HALFWIDTH HANGUL LETTER O

+ᅪ<>ᅪ; #  to HALFWIDTH HANGUL LETTER WA

+ᅫ<>ᅫ; #  to HALFWIDTH HANGUL LETTER WAE

+ᅬ<>ᅬ; #  to HALFWIDTH HANGUL LETTER OE

+ᅭ<>ᅭ; #  to HALFWIDTH HANGUL LETTER YO

+ᅮ<>ᅮ; #  to HALFWIDTH HANGUL LETTER U

+ᅯ<>ᅯ; #  to HALFWIDTH HANGUL LETTER WEO

+ᅰ<>ᅰ; #  to HALFWIDTH HANGUL LETTER WE

+ᅱ<>ᅱ; #  to HALFWIDTH HANGUL LETTER WI

+ᅲ<>ᅲ; #  to HALFWIDTH HANGUL LETTER YU

+ᅳ<>ᅳ; #  to HALFWIDTH HANGUL LETTER EU

+ᅴ<>ᅴ; #  to HALFWIDTH HANGUL LETTER YI

+ᅵ<>ᅵ; #  to HALFWIDTH HANGUL LETTER I

+¢<>'¢'; #  from FULLWIDTH CENT SIGN

+£<>'£'; #  from FULLWIDTH POUND SIGN

+¬<>'¬'; #  from FULLWIDTH NOT SIGN

+ ̄<>' '̄; #  from FULLWIDTH MACRON

+¦<>'¦'; #  from FULLWIDTH BROKEN BAR

+¥<>'¥'; #  from FULLWIDTH YEN SIGN

+₩<>₩; #  from FULLWIDTH WON SIGN

+│<>│; #  to HALFWIDTH FORMS LIGHT VERTICAL

+←<>←; #  to HALFWIDTH LEFTWARDS ARROW

+↑<>↑; #  to HALFWIDTH UPWARDS ARROW

+→<>→; #  to HALFWIDTH RIGHTWARDS ARROW

+↓<>↓; #  to HALFWIDTH DOWNWARDS ARROW

+■<>■; #  to HALFWIDTH BLACK SQUARE

+○<>○; #  to HALFWIDTH WHITE CIRCLE

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Gujarati_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Gujarati_InterIndic.utf8.txt
new file mode 100755
index 0000000..05c33f5
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Gujarati_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Gurmukhi_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Gurmukhi_InterIndic.utf8.txt
new file mode 100755
index 0000000..5fa8366
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Gurmukhi_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Han_Pinyin.utf8.txt b/src/com/ibm/text/resources/Transliterator_Han_Pinyin.utf8.txt
new file mode 100755
index 0000000..209f9d2
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Han_Pinyin.utf8.txt
@@ -0,0 +1,20365 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Generated: Fri Jan 26 15:14:48 2001

+# Tool: ..\..\tools\translit\hanpinyin.pl

+#--------------------------------------------------------------------

+

+# Han-Pinyin

+

+# Mechanically derived from \desk\Unihan.txt (ftp.unicode.org), version:

+#

+#	Name:             Unihan database

+#	Unicode version:  3.0b1

+#	Table version:    1.1

+#	Date:             2 July 1999

+#

+#	Copyright (c) 1996-1999 Unicode, Inc.  All Rights reserved.

+

+丁 > dīng; #4E01

+丂 > kăo; #4E02

+七 > qī; #4E03

+丄 > shàng; #4E04

+丅 > xià; #4E05

+万 > mò; #4E07

+丈 > zhàng; #4E08

+三 > sān; #4E09

+上 > shàng; #4E0A

+下 > xià; #4E0B

+丌 > jī; #4E0C

+不 > bù; #4E0D

+与 > yŭ; #4E0E

+丏 > miăn; #4E0F

+丐 > gài; #4E10

+丑 > chŏu; #4E11

+丒 > chŏu; #4E12

+专 > zhuān; #4E13

+且 > qiĕ; #4E14

+丕 > pī; #4E15

+世 > shì; #4E16

+丗 > shì; #4E17

+丘 > qīu; #4E18

+丙 > bĭng; #4E19

+业 > yè; #4E1A

+丛 > cóng; #4E1B

+东 > dōng; #4E1C

+丝 > sī; #4E1D

+丞 > chéng; #4E1E

+丟 > dīu; #4E1F

+丠 > qīu; #4E20

+両 > liăng; #4E21

+丢 > dīu; #4E22

+丣 > yŏu; #4E23

+两 > liăng; #4E24

+严 > yán; #4E25

+並 > bìng; #4E26

+丧 > sāng; #4E27

+丨 > gŭn; #4E28

+丩 > jīu; #4E29

+个 > gè; #4E2A

+丫 > yā; #4E2B

+丬 > qiáng; #4E2C

+中 > zhōng; #4E2D

+丮 > jĭ; #4E2E

+丯 > jiè; #4E2F

+丰 > fēng; #4E30

+丱 > guàn; #4E31

+串 > chuàn; #4E32

+丳 > chăn; #4E33

+临 > lín; #4E34

+丵 > zhŭo; #4E35

+丶 > zhŭ; #4E36

+丸 > wán; #4E38

+丹 > dān; #4E39

+为 > wèi; #4E3A

+主 > zhŭ; #4E3B

+丼 > jĭng; #4E3C

+丽 > lì; #4E3D

+举 > jŭ; #4E3E

+丿 > piĕ; #4E3F

+乀 > fú; #4E40

+乁 > yí; #4E41

+乂 > yì; #4E42

+乃 > năi; #4E43

+久 > jĭu; #4E45

+乆 > jĭu; #4E46

+乇 > zhé; #4E47

+么 > yāo; #4E48

+义 > yì; #4E49

+之 > zhī; #4E4B

+乌 > wū; #4E4C

+乍 > zhà; #4E4D

+乎 > hū; #4E4E

+乏 > fá; #4E4F

+乐 > lè; #4E50

+乑 > zhòng; #4E51

+乒 > pīng; #4E52

+乓 > pang; #4E53

+乔 > qiáo; #4E54

+乕 > hŭ; #4E55

+乖 > guāi; #4E56

+乗 > chéng; #4E57

+乘 > chéng; #4E58

+乙 > yĭ; #4E59

+乚 > yĭn; #4E5A

+乜 > miē; #4E5C

+九 > jĭu; #4E5D

+乞 > qĭ; #4E5E

+也 > yĕ; #4E5F

+习 > xí; #4E60

+乡 > xiāng; #4E61

+乢 > gài; #4E62

+乣 > dīu; #4E63

+书 > shū; #4E66

+乨 > shĭ; #4E68

+乩 > jī; #4E69

+乪 > nāng; #4E6A

+乫 > jiā; #4E6B

+乭 > shí; #4E6D

+买 > măi; #4E70

+乱 > luàn; #4E71

+乳 > rŭ; #4E73

+乴 > xué; #4E74

+乵 > yăn; #4E75

+乶 > fŭ; #4E76

+乷 > shā; #4E77

+乸 > nă; #4E78

+乹 > gān; #4E79

+乾 > gān; #4E7E

+乿 > chì; #4E7F

+亀 > gūi; #4E80

+亁 > gān; #4E81

+亂 > luàn; #4E82

+亃 > lín; #4E83

+亄 > yì; #4E84

+亅 > jué; #4E85

+了 > liăo; #4E86

+予 > yú; #4E88

+争 > zhēng; #4E89

+亊 > shì; #4E8A

+事 > shì; #4E8B

+二 > èr; #4E8C

+亍 > chù; #4E8D

+于 > yú; #4E8E

+亏 > yú; #4E8F

+亐 > yú; #4E90

+云 > yún; #4E91

+互 > hù; #4E92

+亓 > qí; #4E93

+五 > wŭ; #4E94

+井 > jĭng; #4E95

+亖 > sì; #4E96

+亗 > sùi; #4E97

+亘 > gèn; #4E98

+亙 > gèn; #4E99

+亚 > yà; #4E9A

+些 > xiē; #4E9B

+亜 > yà; #4E9C

+亝 > qí; #4E9D

+亞 > yà; #4E9E

+亟 > jí; #4E9F

+亠 > tóu; #4EA0

+亡 > wáng; #4EA1

+亢 > kàng; #4EA2

+亣 > tà; #4EA3

+交 > jiāo; #4EA4

+亥 > hài; #4EA5

+亦 > yì; #4EA6

+产 > chăn; #4EA7

+亨 > hēng; #4EA8

+亩 > mŭ; #4EA9

+享 > xiăng; #4EAB

+京 > jīng; #4EAC

+亭 > tíng; #4EAD

+亮 > liàng; #4EAE

+亯 > xiăng; #4EAF

+亰 > jīng; #4EB0

+亱 > yè; #4EB1

+亲 > qīn; #4EB2

+亳 > bó; #4EB3

+亴 > yòu; #4EB4

+亵 > xiè; #4EB5

+亶 > dăn; #4EB6

+亷 > lián; #4EB7

+亸 > dŭo; #4EB8

+亹 > wĕi; #4EB9

+人 > rén; #4EBA

+亻 > rén; #4EBB

+亼 > jí; #4EBC

+亾 > wáng; #4EBE

+亿 > yì; #4EBF

+什 > shí; #4EC0

+仁 > rén; #4EC1

+仂 > lè; #4EC2

+仃 > dīng; #4EC3

+仄 > zè; #4EC4

+仅 > jĭn; #4EC5

+仆 > pū; #4EC6

+仇 > chóu; #4EC7

+仈 > bā; #4EC8

+仉 > zhăng; #4EC9

+今 > jīn; #4ECA

+介 > jiè; #4ECB

+仌 > bīng; #4ECC

+仍 > réng; #4ECD

+从 > cóng; #4ECE

+仏 > fó; #4ECF

+仐 > săn; #4ED0

+仑 > lún; #4ED1

+仓 > cāng; #4ED3

+仔 > zĭ; #4ED4

+仕 > shì; #4ED5

+他 > tā; #4ED6

+仗 > zhàng; #4ED7

+付 > fù; #4ED8

+仙 > xiān; #4ED9

+仚 > xiān; #4EDA

+仛 > tūo; #4EDB

+仜 > hóng; #4EDC

+仝 > tóng; #4EDD

+仞 > rèn; #4EDE

+仟 > qiān; #4EDF

+仠 > gán; #4EE0

+仡 > yì; #4EE1

+仢 > dí; #4EE2

+代 > dài; #4EE3

+令 > lìng; #4EE4

+以 > yĭ; #4EE5

+仦 > chào; #4EE6

+仧 > cháng; #4EE7

+仨 > sā; #4EE8

+仪 > yí; #4EEA

+仫 > mù; #4EEB

+们 > men; #4EEC

+仭 > rèn; #4EED

+仮 > jiă; #4EEE

+仯 > chào; #4EEF

+仰 > yăng; #4EF0

+仱 > qián; #4EF1

+仲 > zhòng; #4EF2

+仳 > pĭ; #4EF3

+仴 > wàn; #4EF4

+仵 > wŭ; #4EF5

+件 > jiàn; #4EF6

+价 > jiè; #4EF7

+仸 > yăo; #4EF8

+仹 > fēng; #4EF9

+仺 > cāng; #4EFA

+任 > rèn; #4EFB

+仼 > wáng; #4EFC

+份 > fèn; #4EFD

+仾 > dī; #4EFE

+仿 > făng; #4EFF

+伀 > zhōng; #4F00

+企 > qĭ; #4F01

+伂 > pèi; #4F02

+伃 > yú; #4F03

+伄 > diào; #4F04

+伅 > dùn; #4F05

+伆 > wèn; #4F06

+伇 > yì; #4F07

+伈 > xĭn; #4F08

+伉 > kàng; #4F09

+伊 > yī; #4F0A

+伋 > jí; #4F0B

+伌 > ài; #4F0C

+伍 > wŭ; #4F0D

+伎 > jì; #4F0E

+伏 > fú; #4F0F

+伐 > fá; #4F10

+休 > xīu; #4F11

+伒 > jìn; #4F12

+伓 > bēi; #4F13

+伔 > dăn; #4F14

+伕 > fū; #4F15

+伖 > tăng; #4F16

+众 > zhòng; #4F17

+优 > yōu; #4F18

+伙 > hŭo; #4F19

+会 > hùi; #4F1A

+伛 > yŭ; #4F1B

+伜 > cùi; #4F1C

+伝 > chuán; #4F1D

+伞 > săn; #4F1E

+伟 > wĕi; #4F1F

+传 > chuán; #4F20

+伡 > chē; #4F21

+伢 > yá; #4F22

+伣 > xiàn; #4F23

+伤 > shāng; #4F24

+伥 > chāng; #4F25

+伦 > lún; #4F26

+伧 > cāng; #4F27

+伨 > xùn; #4F28

+伩 > xìn; #4F29

+伪 > wĕi; #4F2A

+伫 > zhù; #4F2B

+伭 > xuán; #4F2D

+伮 > nú; #4F2E

+伯 > bó; #4F2F

+估 > gū; #4F30

+伱 > nĭ; #4F31

+伲 > nĭ; #4F32

+伳 > xiè; #4F33

+伴 > bàn; #4F34

+伵 > xù; #4F35

+伶 > líng; #4F36

+伷 > zhòu; #4F37

+伸 > shēn; #4F38

+伹 > qū; #4F39

+伺 > sì; #4F3A

+伻 > bēng; #4F3B

+似 > sì; #4F3C

+伽 > jiā; #4F3D

+伾 > pī; #4F3E

+伿 > yì; #4F3F

+佀 > sì; #4F40

+佁 > ăi; #4F41

+佂 > zhēng; #4F42

+佃 > diàn; #4F43

+佄 > hán; #4F44

+佅 > mài; #4F45

+但 > dàn; #4F46

+佇 > zhù; #4F47

+佈 > bù; #4F48

+佉 > qū; #4F49

+佊 > bĭ; #4F4A

+佋 > shào; #4F4B

+佌 > cĭ; #4F4C

+位 > wèi; #4F4D

+低 > dī; #4F4E

+住 > zhù; #4F4F

+佐 > zŭo; #4F50

+佑 > yòu; #4F51

+佒 > yāng; #4F52

+体 > tĭ; #4F53

+佔 > zhàn; #4F54

+何 > hé; #4F55

+佖 > bì; #4F56

+佗 > tūo; #4F57

+佘 > shé; #4F58

+余 > yú; #4F59

+佚 > yì; #4F5A

+佛 > fó; #4F5B

+作 > zùo; #4F5C

+佝 > kòu; #4F5D

+佞 > nìng; #4F5E

+佟 > tóng; #4F5F

+你 > nĭ; #4F60

+佡 > xuān; #4F61

+佢 > qú; #4F62

+佣 > yòng; #4F63

+佤 > wă; #4F64

+佥 > qiān; #4F65

+佧 > kă; #4F67

+佩 > pèi; #4F69

+佪 > huái; #4F6A

+佫 > hè; #4F6B

+佬 > lăo; #4F6C

+佭 > xiáng; #4F6D

+佮 > gé; #4F6E

+佯 > yáng; #4F6F

+佰 > băi; #4F70

+佱 > fă; #4F71

+佲 > míng; #4F72

+佳 > jia; #4F73

+佴 > èr; #4F74

+併 > bìng; #4F75

+佶 > jí; #4F76

+佷 > hĕn; #4F77

+佸 > húo; #4F78

+佹 > gŭi; #4F79

+佺 > quán; #4F7A

+佻 > tiāo; #4F7B

+佼 > jiăo; #4F7C

+佽 > cì; #4F7D

+佾 > yì; #4F7E

+使 > shĭ; #4F7F

+侀 > xíng; #4F80

+侁 > shēn; #4F81

+侂 > tūo; #4F82

+侃 > kăn; #4F83

+侄 > zhí; #4F84

+侅 > gāi; #4F85

+來 > lái; #4F86

+侇 > yí; #4F87

+侈 > chĭ; #4F88

+侉 > kuā; #4F89

+侊 > guāng; #4F8A

+例 > lì; #4F8B

+侌 > yīn; #4F8C

+侍 > shì; #4F8D

+侎 > mĭ; #4F8E

+侏 > zhū; #4F8F

+侐 > xù; #4F90

+侑 > yòu; #4F91

+侒 > ān; #4F92

+侓 > lù; #4F93

+侔 > móu; #4F94

+侕 > ér; #4F95

+侖 > lún; #4F96

+侗 > tóng; #4F97

+侘 > chà; #4F98

+侙 > chì; #4F99

+侚 > xùn; #4F9A

+供 > gōng; #4F9B

+侜 > zhōu; #4F9C

+依 > yī; #4F9D

+侞 > rŭ; #4F9E

+侟 > jiàn; #4F9F

+侠 > xiá; #4FA0

+価 > jià; #4FA1

+侢 > zài; #4FA2

+侣 > lǚ; #4FA3

+侥 > jiăo; #4FA5

+侦 > zhēn; #4FA6

+侧 > cè; #4FA7

+侨 > qiáo; #4FA8

+侩 > kuài; #4FA9

+侪 > chái; #4FAA

+侫 > nìng; #4FAB

+侬 > nóng; #4FAC

+侭 > jĭn; #4FAD

+侮 > wŭ; #4FAE

+侯 > hóu; #4FAF

+侰 > jĭong; #4FB0

+侱 > chĕng; #4FB1

+侲 > zhèn; #4FB2

+侳 > zùo; #4FB3

+侴 > chŏu; #4FB4

+侵 > qīn; #4FB5

+侶 > lǚ; #4FB6

+侷 > jú; #4FB7

+侸 > shù; #4FB8

+侹 > tĭng; #4FB9

+侺 > shèn; #4FBA

+侻 > tūo; #4FBB

+侼 > bó; #4FBC

+侽 > nán; #4FBD

+侾 > hāo; #4FBE

+便 > biàn; #4FBF

+俀 > tŭi; #4FC0

+俁 > yŭ; #4FC1

+係 > xì; #4FC2

+促 > cù; #4FC3

+俄 > é; #4FC4

+俅 > qíu; #4FC5

+俆 > xú; #4FC6

+俇 > kuăng; #4FC7

+俈 > kù; #4FC8

+俉 > wù; #4FC9

+俊 > jùn; #4FCA

+俋 > yì; #4FCB

+俌 > fŭ; #4FCC

+俍 > láng; #4FCD

+俎 > zŭ; #4FCE

+俏 > qiào; #4FCF

+俐 > lì; #4FD0

+俑 > yŏng; #4FD1

+俒 > hùn; #4FD2

+俓 > jìng; #4FD3

+俔 > xiàn; #4FD4

+俕 > sàn; #4FD5

+俖 > păi; #4FD6

+俗 > sú; #4FD7

+俘 > fú; #4FD8

+俙 > xī; #4FD9

+俚 > lĭ; #4FDA

+俛 > fŭ; #4FDB

+俜 > pīng; #4FDC

+保 > băo; #4FDD

+俞 > yú; #4FDE

+俟 > sì; #4FDF

+俠 > xiá; #4FE0

+信 > xìn; #4FE1

+俢 > xīu; #4FE2

+俣 > yŭ; #4FE3

+俤 > tì; #4FE4

+俥 > chē; #4FE5

+俦 > chóu; #4FE6

+俨 > yăn; #4FE8

+俩 > liă; #4FE9

+俪 > lì; #4FEA

+俫 > lái; #4FEB

+俭 > jiăn; #4FED

+修 > xīu; #4FEE

+俯 > fŭ; #4FEF

+俰 > hè; #4FF0

+俱 > jù; #4FF1

+俲 > xiào; #4FF2

+俳 > pái; #4FF3

+俴 > jiàn; #4FF4

+俵 > biào; #4FF5

+俶 > chù; #4FF6

+俷 > fèi; #4FF7

+俸 > fèng; #4FF8

+俹 > yà; #4FF9

+俺 > ăn; #4FFA

+俻 > bèi; #4FFB

+俼 > yù; #4FFC

+俽 > xīn; #4FFD

+俾 > bĭ; #4FFE

+俿 > jiàn; #4FFF

+倀 > chāng; #5000

+倁 > chí; #5001

+倂 > bìng; #5002

+倃 > zán; #5003

+倄 > yáo; #5004

+倅 > cùi; #5005

+倆 > liă; #5006

+倇 > wăn; #5007

+倈 > lái; #5008

+倉 > cāng; #5009

+倊 > zòng; #500A

+個 > gè; #500B

+倌 > guān; #500C

+倍 > bèi; #500D

+倎 > tiān; #500E

+倏 > shū; #500F

+倐 > shū; #5010

+們 > men; #5011

+倒 > dăo; #5012

+倓 > tán; #5013

+倔 > jué; #5014

+倕 > chúi; #5015

+倖 > xìng; #5016

+倗 > péng; #5017

+倘 > tăng; #5018

+候 > hòu; #5019

+倚 > yĭ; #501A

+倛 > qī; #501B

+倜 > tì; #501C

+倝 > gàn; #501D

+倞 > jìng; #501E

+借 > jiè; #501F

+倠 > sūi; #5020

+倡 > chàng; #5021

+倢 > jié; #5022

+倣 > făng; #5023

+値 > zhí; #5024

+倥 > kōng; #5025

+倦 > juàn; #5026

+倧 > zōng; #5027

+倨 > jù; #5028

+倩 > qiàn; #5029

+倪 > ní; #502A

+倫 > lún; #502B

+倬 > zhūo; #502C

+倭 > wēi; #502D

+倮 > lŭo; #502E

+倯 > sōng; #502F

+倰 > léng; #5030

+倱 > hùn; #5031

+倲 > dōng; #5032

+倳 > zì; #5033

+倴 > bèn; #5034

+倵 > wŭ; #5035

+倶 > jù; #5036

+倷 > nài; #5037

+倸 > căi; #5038

+倹 > jiăn; #5039

+债 > zhài; #503A

+倻 > yē; #503B

+值 > zhí; #503C

+倽 > shà; #503D

+倾 > qīng; #503E

+偀 > yīng; #5040

+偁 > chēng; #5041

+偂 > jiān; #5042

+偃 > yăn; #5043

+偄 > nuàn; #5044

+偅 > zhòng; #5045

+偆 > chŭn; #5046

+假 > jiă; #5047

+偈 > jié; #5048

+偉 > wĕi; #5049

+偊 > yŭ; #504A

+偋 > bĭng; #504B

+偌 > rùo; #504C

+偍 > tí; #504D

+偎 > wēi; #504E

+偏 > piān; #504F

+偐 > yàn; #5050

+偑 > fēng; #5051

+偒 > tăng; #5052

+偓 > wò; #5053

+偔 > è; #5054

+偕 > xié; #5055

+偖 > chĕ; #5056

+偗 > shĕng; #5057

+偘 > kăn; #5058

+偙 > dì; #5059

+做 > zùo; #505A

+偛 > chā; #505B

+停 > tíng; #505C

+偝 > bèi; #505D

+偞 > yè; #505E

+偟 > huáng; #505F

+偠 > yăo; #5060

+偡 > zhàn; #5061

+偢 > chŏu; #5062

+偣 > yān; #5063

+偤 > yŏu; #5064

+健 > jiàn; #5065

+偦 > xū; #5066

+偧 > zhā; #5067

+偨 > cī; #5068

+偩 > fù; #5069

+偪 > bī; #506A

+偫 > zhì; #506B

+偬 > zŏng; #506C

+偭 > miăn; #506D

+偮 > jí; #506E

+偯 > yĭ; #506F

+偰 > xiè; #5070

+偱 > xún; #5071

+偲 > sī; #5072

+偳 > duān; #5073

+側 > cè; #5074

+偵 > zhēn; #5075

+偶 > ŏu; #5076

+偷 > tōu; #5077

+偸 > tōu; #5078

+偹 > bèi; #5079

+偺 > zá; #507A

+偻 > lǚ; #507B

+偼 > jié; #507C

+偽 > wĕi; #507D

+偾 > fèn; #507E

+偿 > cháng; #507F

+傀 > gūi; #5080

+傁 > sŏu; #5081

+傂 > zhì; #5082

+傃 > sù; #5083

+傄 > xiā; #5084

+傅 > fù; #5085

+傆 > yuàn; #5086

+傇 > rŏng; #5087

+傈 > lì; #5088

+傉 > rù; #5089

+傊 > yŭn; #508A

+傋 > gòu; #508B

+傌 > mà; #508C

+傍 > bàng; #508D

+傎 > diān; #508E

+傏 > táng; #508F

+傐 > hào; #5090

+傑 > jié; #5091

+傒 > xī; #5092

+傓 > shàn; #5093

+傔 > qiàn; #5094

+傕 > jué; #5095

+傖 > cāng; #5096

+傗 > chù; #5097

+傘 > săn; #5098

+備 > bèi; #5099

+傚 > xiào; #509A

+傛 > yŏng; #509B

+傜 > yáo; #509C

+傝 > tàn; #509D

+傞 > sūo; #509E

+傟 > yăng; #509F

+傠 > fā; #50A0

+傡 > bìng; #50A1

+傢 > jiā; #50A2

+傣 > dăi; #50A3

+傤 > zài; #50A4

+傥 > tăng; #50A5

+傧 > bìn; #50A7

+储 > chŭ; #50A8

+傩 > núo; #50A9

+傪 > cān; #50AA

+傫 > lĕi; #50AB

+催 > cūi; #50AC

+傭 > yōng; #50AD

+傮 > zāo; #50AE

+傯 > zŏng; #50AF

+傰 > péng; #50B0

+傱 > sŏng; #50B1

+傲 > ào; #50B2

+傳 > chuán; #50B3

+傴 > yŭ; #50B4

+債 > zhài; #50B5

+傶 > còu; #50B6

+傷 > shāng; #50B7

+傸 > qiăng; #50B8

+傹 > jìng; #50B9

+傺 > chì; #50BA

+傻 > shă; #50BB

+傼 > hàn; #50BC

+傽 > zhāng; #50BD

+傾 > qīng; #50BE

+傿 > yàn; #50BF

+僀 > dì; #50C0

+僁 > xī; #50C1

+僂 > lǚ; #50C2

+僃 > bèi; #50C3

+僄 > piào; #50C4

+僅 > jĭn; #50C5

+僆 > lián; #50C6

+僇 > lù; #50C7

+僈 > màn; #50C8

+僉 > qiān; #50C9

+僊 > xiān; #50CA

+僋 > tàn; #50CB

+僌 > yíng; #50CC

+働 > dòng; #50CD

+僎 > zhuàn; #50CE

+像 > xiàng; #50CF

+僐 > shàn; #50D0

+僑 > qiáo; #50D1

+僒 > jĭong; #50D2

+僓 > tŭi; #50D3

+僔 > zŭn; #50D4

+僕 > pú; #50D5

+僖 > xī; #50D6

+僗 > láo; #50D7

+僘 > chăng; #50D8

+僙 > guāng; #50D9

+僚 > liáo; #50DA

+僛 > qī; #50DB

+僜 > dèng; #50DC

+僝 > chán; #50DD

+僞 > wĕi; #50DE

+僟 > jī; #50DF

+僠 > fān; #50E0

+僡 > hùi; #50E1

+僢 > chuăn; #50E2

+僣 > jiàn; #50E3

+僤 > dàn; #50E4

+僥 > jiăo; #50E5

+僦 > jìu; #50E6

+僧 > sēng; #50E7

+僨 > fèn; #50E8

+僩 > xiàn; #50E9

+僪 > jué; #50EA

+僫 > è; #50EB

+僬 > jiāo; #50EC

+僭 > jiàn; #50ED

+僮 > tóng; #50EE

+僯 > lĭn; #50EF

+僰 > bó; #50F0

+僱 > gù; #50F1

+僳 > sù; #50F3

+僴 > xiàn; #50F4

+僵 > jiāng; #50F5

+僶 > mĭn; #50F6

+僷 > yè; #50F7

+僸 > jìn; #50F8

+價 > jià; #50F9

+僺 > qiào; #50FA

+僻 > pì; #50FB

+僼 > fēng; #50FC

+僽 > zhòu; #50FD

+僾 > ài; #50FE

+僿 > sài; #50FF

+儀 > yí; #5100

+儁 > jùn; #5101

+儂 > nóng; #5102

+儃 > chán; #5103

+億 > yì; #5104

+儅 > dāng; #5105

+儆 > jĭng; #5106

+儇 > xuān; #5107

+儈 > kuài; #5108

+儉 > jiăn; #5109

+儊 > chù; #510A

+儋 > dān; #510B

+儌 > jiăo; #510C

+儍 > shă; #510D

+儎 > zài; #510E

+儐 > bìn; #5110

+儑 > àn; #5111

+儒 > rú; #5112

+儓 > tái; #5113

+儔 > chóu; #5114

+儕 > chái; #5115

+儖 > lán; #5116

+儗 > nĭ; #5117

+儘 > jĭn; #5118

+儙 > qiàn; #5119

+儚 > méng; #511A

+儛 > wŭ; #511B

+儜 > níng; #511C

+儝 > qíong; #511D

+儞 > nĭ; #511E

+償 > cháng; #511F

+儠 > liè; #5120

+儡 > lĕi; #5121

+儢 > lǚ; #5122

+儣 > kuàng; #5123

+儤 > bào; #5124

+儥 > dú; #5125

+儦 > biāo; #5126

+儧 > zăn; #5127

+儨 > zhí; #5128

+儩 > sì; #5129

+優 > yōu; #512A

+儫 > háo; #512B

+儬 > chèn; #512C

+儭 > chèn; #512D

+儮 > lì; #512E

+儯 > téng; #512F

+儰 > wĕi; #5130

+儱 > lŏng; #5131

+儲 > chŭ; #5132

+儳 > chàn; #5133

+儴 > ráng; #5134

+儵 > shū; #5135

+儶 > hùi; #5136

+儷 > lì; #5137

+儸 > lúo; #5138

+儹 > zăn; #5139

+儺 > núo; #513A

+儻 > tăng; #513B

+儼 > yăn; #513C

+儽 > lĕi; #513D

+儾 > nàng; #513E

+儿 > ér; #513F

+兀 > wù; #5140

+允 > yŭn; #5141

+兂 > zān; #5142

+元 > yuán; #5143

+兄 > xīong; #5144

+充 > chōng; #5145

+兆 > zhào; #5146

+兇 > xīong; #5147

+先 > xiān; #5148

+光 > guāng; #5149

+兊 > dùi; #514A

+克 > kè; #514B

+兌 > dùi; #514C

+免 > miăn; #514D

+兎 > tù; #514E

+兏 > cháng; #514F

+児 > ér; #5150

+兑 > dùi; #5151

+兒 > ér; #5152

+兓 > xīn; #5153

+兔 > tù; #5154

+兕 > sì; #5155

+兖 > yăn; #5156

+兗 > yăn; #5157

+兘 > shĭ; #5158

+兙 > shí' 'kè; #5159

+党 > dăng; #515A

+兛 > qiān; #515B

+兜 > dōu; #515C

+兝 > fēn; #515D

+兞 > máo; #515E

+兟 > shēn; #515F

+兠 > dōu; #5160

+兡 > băi' 'kè; #5161

+兢 > jīng; #5162

+兣 > lĭ; #5163

+兤 > huáng; #5164

+入 > rù; #5165

+兦 > wáng; #5166

+內 > nèi; #5167

+全 > quán; #5168

+兩 > liăng; #5169

+兪 > yú; #516A

+八 > bā; #516B

+公 > gōng; #516C

+六 > lìu; #516D

+兮 > xī; #516E

+兰 > lán; #5170

+共 > gòng; #5171

+兲 > tiān; #5172

+关 > guān; #5173

+兴 > xīng; #5174

+兵 > bīng; #5175

+其 > qí; #5176

+具 > jù; #5177

+典 > diăn; #5178

+兹 > zī; #5179

+养 > yăng; #517B

+兼 > jiān; #517C

+兽 > shòu; #517D

+兾 > jì; #517E

+兿 > yì; #517F

+冀 > jì; #5180

+冁 > chăn; #5181

+冂 > jīong; #5182

+冃 > mao; #5183

+冄 > răn; #5184

+内 > nèi; #5185

+円 > yuan; #5186

+冇 > măo; #5187

+冈 > gāng; #5188

+冉 > răn; #5189

+冊 > cè; #518A

+冋 > jīong; #518B

+册 > cè; #518C

+再 > zài; #518D

+冎 > guă; #518E

+冏 > jĭong; #518F

+冐 > mào; #5190

+冑 > zhòu; #5191

+冒 > mòu; #5192

+冓 > gòu; #5193

+冔 > xŭ; #5194

+冕 > miăn; #5195

+冖 > mì; #5196

+冗 > rŏng; #5197

+冘 > yín; #5198

+写 > xiĕ; #5199

+冚 > kăn; #519A

+军 > jūn; #519B

+农 > nóng; #519C

+冝 > yí; #519D

+冞 > mí; #519E

+冟 > shì; #519F

+冠 > guān; #51A0

+冡 > méng; #51A1

+冢 > zhŏng; #51A2

+冣 > jù; #51A3

+冤 > yuān; #51A4

+冥 > míng; #51A5

+冦 > kòu; #51A6

+冨 > fù; #51A8

+冩 > xiĕ; #51A9

+冪 > mì; #51AA

+冫 > bīng; #51AB

+冬 > dōng; #51AC

+冭 > tái; #51AD

+冮 > gāng; #51AE

+冯 > féng; #51AF

+冰 > bīng; #51B0

+冱 > hù; #51B1

+冲 > chōng; #51B2

+决 > jué; #51B3

+冴 > hù; #51B4

+况 > kuàng; #51B5

+冶 > yĕ; #51B6

+冷 > lĕng; #51B7

+冸 > pàn; #51B8

+冹 > fú; #51B9

+冺 > mĭn; #51BA

+冻 > dòng; #51BB

+冼 > xiăn; #51BC

+冽 > liè; #51BD

+冾 > xiá; #51BE

+冿 > jiān; #51BF

+净 > jìng; #51C0

+凁 > shù; #51C1

+凂 > mĕi; #51C2

+凃 > tú; #51C3

+凄 > qī; #51C4

+凅 > gù; #51C5

+准 > zhŭn; #51C6

+凇 > sòng; #51C7

+凈 > jìng; #51C8

+凉 > liáng; #51C9

+凊 > qìng; #51CA

+凋 > diāo; #51CB

+凌 > líng; #51CC

+凍 > dòng; #51CD

+凎 > gàn; #51CE

+减 > jiăn; #51CF

+凐 > yīn; #51D0

+凑 > còu; #51D1

+凒 > yí; #51D2

+凓 > lì; #51D3

+凔 > cāng; #51D4

+凕 > mĭng; #51D5

+凖 > zhuĕn; #51D6

+凗 > cúi; #51D7

+凘 > sī; #51D8

+凙 > dúo; #51D9

+凚 > jìn; #51DA

+凛 > lĭn; #51DB

+凜 > lĭn; #51DC

+凝 > níng; #51DD

+凞 > xī; #51DE

+凟 > dú; #51DF

+几 > jī; #51E0

+凡 > fán; #51E1

+凢 > fán; #51E2

+凣 > fán; #51E3

+凤 > fèng; #51E4

+凥 > jū; #51E5

+処 > chŭ; #51E6

+凨 > fēng; #51E8

+凫 > fú; #51EB

+凬 > fēng; #51EC

+凭 > píng; #51ED

+凮 > fēng; #51EE

+凯 > kăi; #51EF

+凰 > huáng; #51F0

+凱 > kăi; #51F1

+凲 > gān; #51F2

+凳 > dèng; #51F3

+凴 > píng; #51F4

+凵 > qū; #51F5

+凶 > xīong; #51F6

+凷 > kuài; #51F7

+凸 > tū; #51F8

+凹 > āo; #51F9

+出 > chū; #51FA

+击 > jí; #51FB

+凼 > dàng; #51FC

+函 > hán; #51FD

+凾 > hán; #51FE

+凿 > záo; #51FF

+刀 > dāo; #5200

+刁 > diāo; #5201

+刂 > dāo; #5202

+刃 > rèn; #5203

+刄 > rèn; #5204

+刅 > chuāng; #5205

+分 > fēn; #5206

+切 > qiē; #5207

+刈 > yì; #5208

+刉 > jī; #5209

+刊 > kān; #520A

+刋 > qiàn; #520B

+刌 > cŭn; #520C

+刍 > chú; #520D

+刎 > wĕn; #520E

+刏 > jī; #520F

+刐 > dăn; #5210

+刑 > xíng; #5211

+划 > huá; #5212

+刓 > wán; #5213

+刔 > jué; #5214

+刕 > lí; #5215

+刖 > yuè; #5216

+列 > liè; #5217

+刘 > líu; #5218

+则 > zé; #5219

+刚 > gāng; #521A

+创 > chuàng; #521B

+刜 > fú; #521C

+初 > chū; #521D

+刞 > qù; #521E

+刟 > jū; #521F

+删 > shān; #5220

+刡 > mĭn; #5221

+刢 > líng; #5222

+刣 > zhōng; #5223

+判 > pàn; #5224

+別 > bié; #5225

+刦 > jié; #5226

+刧 > jié; #5227

+刨 > bào; #5228

+利 > lì; #5229

+刪 > shān; #522A

+别 > bié; #522B

+刬 > chăn; #522C

+刭 > jĭng; #522D

+刮 > guā; #522E

+刯 > gēn; #522F

+到 > dào; #5230

+刱 > chuàng; #5231

+刲 > kūi; #5232

+刳 > kū; #5233

+刴 > dùo; #5234

+刵 > èr; #5235

+制 > zhì; #5236

+刷 > shuā; #5237

+券 > quàn; #5238

+刹 > chà; #5239

+刺 > cì; #523A

+刻 > kè; #523B

+刼 > jié; #523C

+刽 > gùi; #523D

+刾 > cì; #523E

+刿 > gùi; #523F

+剀 > kăi; #5240

+剁 > dùo; #5241

+剂 > jì; #5242

+剃 > tì; #5243

+剄 > jĭng; #5244

+剅 > lóu; #5245

+剆 > gēn; #5246

+則 > zé; #5247

+剈 > yuān; #5248

+剉 > cùo; #5249

+削 > xuē; #524A

+剋 > kè; #524B

+剌 > là; #524C

+前 > qián; #524D

+剎 > chà; #524E

+剏 > chuàng; #524F

+剐 > guă; #5250

+剑 > jiàn; #5251

+剒 > cùo; #5252

+剓 > lí; #5253

+剔 > tī; #5254

+剕 > fèi; #5255

+剖 > pōu; #5256

+剗 > chăn; #5257

+剘 > qí; #5258

+剙 > chuàng; #5259

+剚 > zì; #525A

+剛 > gāng; #525B

+剜 > wān; #525C

+剝 > bō; #525D

+剞 > jī; #525E

+剟 > dūo; #525F

+剠 > qíng; #5260

+剡 > yăn; #5261

+剢 > zhúo; #5262

+剣 > jiàn; #5263

+剤 > jì; #5264

+剥 > bō; #5265

+剦 > yān; #5266

+剧 > jù; #5267

+剨 > hùo; #5268

+剩 > shèng; #5269

+剪 > jiăn; #526A

+剫 > dúo; #526B

+剬 > duān; #526C

+剭 > wū; #526D

+剮 > guă; #526E

+副 > fù; #526F

+剰 > shèng; #5270

+剱 > jiàn; #5271

+割 > gē; #5272

+剳 > zhā; #5273

+剴 > kăi; #5274

+創 > chuàng; #5275

+剶 > juān; #5276

+剷 > chăn; #5277

+剸 > tuán; #5278

+剹 > lù; #5279

+剺 > lí; #527A

+剻 > fóu; #527B

+剼 > shān; #527C

+剽 > piào; #527D

+剾 > kōu; #527E

+剿 > jiăo; #527F

+劀 > guā; #5280

+劁 > qiāo; #5281

+劂 > jué; #5282

+劃 > huà; #5283

+劄 > zhá; #5284

+劅 > zhùo; #5285

+劆 > lián; #5286

+劇 > jù; #5287

+劈 > pī; #5288

+劉 > líu; #5289

+劊 > gùi; #528A

+劋 > jiăo; #528B

+劌 > gùi; #528C

+劍 > jiàn; #528D

+劎 > jiàn; #528E

+劏 > tāng; #528F

+劐 > hūo; #5290

+劑 > jì; #5291

+劒 > jiàn; #5292

+劓 > yì; #5293

+劔 > jiàn; #5294

+劕 > zhí; #5295

+劖 > chán; #5296

+劗 > cuán; #5297

+劘 > mó; #5298

+劙 > lí; #5299

+劚 > zhú; #529A

+力 > lì; #529B

+劜 > yā; #529C

+劝 > quàn; #529D

+办 > bàn; #529E

+功 > gōng; #529F

+加 > jiā; #52A0

+务 > wù; #52A1

+劢 > mài; #52A2

+劣 > liè; #52A3

+劤 > jìn; #52A4

+劥 > kēng; #52A5

+劦 > xié; #52A6

+劧 > zhĭ; #52A7

+动 > dòng; #52A8

+助 > zhù; #52A9

+努 > nŭ; #52AA

+劫 > jié; #52AB

+劬 > qú; #52AC

+劭 > shào; #52AD

+劮 > yì; #52AE

+劯 > zhū; #52AF

+劰 > miăo; #52B0

+励 > lì; #52B1

+劲 > jìng; #52B2

+劳 > láo; #52B3

+労 > láo; #52B4

+劵 > juàn; #52B5

+劶 > kŏu; #52B6

+劷 > yáng; #52B7

+劸 > wā; #52B8

+効 > xiào; #52B9

+劺 > móu; #52BA

+劻 > kuāng; #52BB

+劼 > jié; #52BC

+劽 > liè; #52BD

+劾 > hé; #52BE

+势 > shì; #52BF

+勀 > kè; #52C0

+勁 > jìng; #52C1

+勂 > háo; #52C2

+勃 > bó; #52C3

+勄 > mĭn; #52C4

+勅 > chì; #52C5

+勆 > láng; #52C6

+勇 > yŏng; #52C7

+勈 > yŏng; #52C8

+勉 > miăn; #52C9

+勊 > kè; #52CA

+勋 > xūn; #52CB

+勌 > juàn; #52CC

+勍 > qíng; #52CD

+勎 > lù; #52CE

+勏 > pŏu; #52CF

+勐 > mĕng; #52D0

+勑 > lài; #52D1

+勒 > lè; #52D2

+勓 > kài; #52D3

+勔 > miăn; #52D4

+動 > dòng; #52D5

+勖 > xù; #52D6

+勗 > xù; #52D7

+勘 > kān; #52D8

+務 > wù; #52D9

+勚 > yì; #52DA

+勛 > xūn; #52DB

+勜 > wĕng; #52DC

+勝 > shèng; #52DD

+勞 > láo; #52DE

+募 > mù; #52DF

+勠 > lù; #52E0

+勡 > piào; #52E1

+勢 > shì; #52E2

+勣 > jī; #52E3

+勤 > qín; #52E4

+勥 > qiăng; #52E5

+勦 > jiăo; #52E6

+勧 > quàn; #52E7

+勨 > yăng; #52E8

+勩 > yì; #52E9

+勪 > jué; #52EA

+勫 > fán; #52EB

+勬 > juàn; #52EC

+勭 > tóng; #52ED

+勮 > jù; #52EE

+勯 > dān; #52EF

+勰 > xié; #52F0

+勱 > mài; #52F1

+勲 > xūn; #52F2

+勳 > xūn; #52F3

+勴 > lǜ; #52F4

+勵 > lì; #52F5

+勶 > chè; #52F6

+勷 > ráng; #52F7

+勸 > quàn; #52F8

+勹 > bāo; #52F9

+勺 > sháo; #52FA

+勻 > yún; #52FB

+勼 > jīu; #52FC

+勽 > bào; #52FD

+勾 > gōu; #52FE

+勿 > wù; #52FF

+匀 > yún; #5300

+匃 > gài; #5303

+匄 > gài; #5304

+包 > bāo; #5305

+匆 > cōng; #5306

+匈 > xīong; #5308

+匉 > pēng; #5309

+匊 > jú; #530A

+匋 > táo; #530B

+匌 > gé; #530C

+匍 > pú; #530D

+匎 > àn; #530E

+匏 > páo; #530F

+匐 > fú; #5310

+匑 > gōng; #5311

+匒 > dá; #5312

+匓 > jìu; #5313

+匔 > qīong; #5314

+匕 > bĭ; #5315

+化 > huà; #5316

+北 > bĕi; #5317

+匘 > năo; #5318

+匙 > chí; #5319

+匚 > fāng; #531A

+匛 > jìu; #531B

+匜 > yí; #531C

+匝 > zā; #531D

+匞 > jiàng; #531E

+匟 > kàng; #531F

+匠 > jiàng; #5320

+匡 > kuāng; #5321

+匢 > hū; #5322

+匣 > xiá; #5323

+匤 > qū; #5324

+匥 > biàn; #5325

+匦 > gŭi; #5326

+匧 > qiè; #5327

+匨 > zāng; #5328

+匩 > kuāng; #5329

+匪 > fĕi; #532A

+匫 > hū; #532B

+匬 > tóu; #532C

+匭 > gŭi; #532D

+匮 > gùi; #532E

+匯 > hùi; #532F

+匰 > dān; #5330

+匱 > gùi; #5331

+匲 > lián; #5332

+匳 > lián; #5333

+匴 > suăn; #5334

+匵 > dú; #5335

+匶 > jìu; #5336

+匷 > qú; #5337

+匸 > xĭ; #5338

+匹 > pĭ; #5339

+区 > qū; #533A

+医 > yì; #533B

+匼 > qià; #533C

+匽 > yăn; #533D

+匾 > biăn; #533E

+匿 > nì; #533F

+區 > qū; #5340

+十 > shí; #5341

+卂 > xìn; #5342

+千 > qiān; #5343

+卄 > niàn; #5344

+卅 > sà; #5345

+卆 > zú; #5346

+升 > shēng; #5347

+午 > wŭ; #5348

+卉 > hùi; #5349

+半 > bàn; #534A

+卋 > shì; #534B

+卌 > xì; #534C

+卍 > wàn; #534D

+华 > huá; #534E

+协 > xié; #534F

+卐 > wàn; #5350

+卑 > bēi; #5351

+卒 > zú; #5352

+卓 > zhūo; #5353

+協 > xié; #5354

+单 > dān; #5355

+卖 > mài; #5356

+南 > nán; #5357

+単 > dān; #5358

+卙 > jí; #5359

+博 > bó; #535A

+卛 > shuài; #535B

+卜 > bŭ; #535C

+卝 > kuàng; #535D

+卞 > biàn; #535E

+卟 > bŭ; #535F

+占 > zhān; #5360

+卡 > qiă; #5361

+卢 > lú; #5362

+卣 > yŏu; #5363

+卤 > lŭ; #5364

+卥 > xī; #5365

+卦 > guà; #5366

+卧 > wò; #5367

+卨 > xiè; #5368

+卩 > jié; #5369

+卪 > jié; #536A

+卫 > wèi; #536B

+卬 > áng; #536C

+卭 > qíong; #536D

+卮 > zhī; #536E

+卯 > măo; #536F

+印 > yìn; #5370

+危 > wēi; #5371

+卲 > shào; #5372

+即 > jí; #5373

+却 > què; #5374

+卵 > luăn; #5375

+卶 > shì; #5376

+卷 > juàn; #5377

+卸 > xiè; #5378

+卹 > xù; #5379

+卺 > jĭn; #537A

+卻 > què; #537B

+卼 > wù; #537C

+卽 > jí; #537D

+卾 > è; #537E

+卿 > qīng; #537F

+厀 > xī; #5380

+厂 > hàn; #5382

+厃 > zhān; #5383

+厄 > è; #5384

+厅 > tīng; #5385

+历 > lì; #5386

+厇 > zhé; #5387

+厈 > hăn; #5388

+厉 > lì; #5389

+厊 > yă; #538A

+压 > yā; #538B

+厌 > yàn; #538C

+厍 > shè; #538D

+厎 > zhĭ; #538E

+厏 > zhă; #538F

+厐 > páng; #5390

+厒 > hé; #5392

+厓 > yá; #5393

+厔 > zhì; #5394

+厕 > cè; #5395

+厖 > páng; #5396

+厗 > tí; #5397

+厘 > lí; #5398

+厙 > shè; #5399

+厚 > hòu; #539A

+厛 > tīng; #539B

+厜 > zūi; #539C

+厝 > cùo; #539D

+厞 > fèi; #539E

+原 > yuán; #539F

+厠 > cè; #53A0

+厡 > yuán; #53A1

+厢 > xiāng; #53A2

+厣 > yăn; #53A3

+厤 > lì; #53A4

+厥 > jué; #53A5

+厦 > shà; #53A6

+厧 > diān; #53A7

+厨 > chú; #53A8

+厩 > jìu; #53A9

+厪 > qín; #53AA

+厫 > áo; #53AB

+厬 > gŭi; #53AC

+厭 > yàn; #53AD

+厮 > sī; #53AE

+厯 > lì; #53AF

+厰 > chăng; #53B0

+厱 > lán; #53B1

+厲 > lì; #53B2

+厳 > yán; #53B3

+厴 > yăn; #53B4

+厵 > yuán; #53B5

+厶 > sī; #53B6

+厷 > gōng; #53B7

+厸 > lín; #53B8

+厹 > qíu; #53B9

+厺 > qù; #53BA

+去 > qù; #53BB

+厽 > lĕi; #53BD

+厾 > dū; #53BE

+县 > xiàn; #53BF

+叀 > zhuān; #53C0

+叁 > sān; #53C1

+参 > cān; #53C2

+參 > cān; #53C3

+叄 > cān; #53C4

+叅 > cān; #53C5

+叆 > ài; #53C6

+叇 > dài; #53C7

+又 > yòu; #53C8

+叉 > cha; #53C9

+及 > jí; #53CA

+友 > yŏu; #53CB

+双 > shuāng; #53CC

+反 > făn; #53CD

+収 > shōu; #53CE

+叏 > guài; #53CF

+叐 > bá; #53D0

+发 > fā; #53D1

+叒 > rùo; #53D2

+叓 > shì; #53D3

+叔 > shū; #53D4

+叕 > zhúo; #53D5

+取 > qū; #53D6

+受 > shòu; #53D7

+变 > biàn; #53D8

+叙 > xù; #53D9

+叚 > jiă; #53DA

+叛 > pàn; #53DB

+叜 > sŏu; #53DC

+叝 > gào; #53DD

+叞 > wèi; #53DE

+叟 > sŏu; #53DF

+叠 > dié; #53E0

+叡 > rùi; #53E1

+叢 > cóng; #53E2

+口 > kŏu; #53E3

+古 > gŭ; #53E4

+句 > jù; #53E5

+另 > lìng; #53E6

+叧 > guă; #53E7

+叨 > tāo; #53E8

+叩 > kòu; #53E9

+只 > zhĭ; #53EA

+叫 > jiào; #53EB

+召 > zhào; #53EC

+叭 > bā; #53ED

+叮 > dīng; #53EE

+可 > kĕ; #53EF

+台 > tái; #53F0

+叱 > chì; #53F1

+史 > shĭ; #53F2

+右 > yòu; #53F3

+叴 > qíu; #53F4

+叵 > pŏ; #53F5

+叶 > xié; #53F6

+号 > hào; #53F7

+司 > sī; #53F8

+叹 > tàn; #53F9

+叺 > chĭ; #53FA

+叻 > lè; #53FB

+叼 > diāo; #53FC

+叽 > jī; #53FD

+叿 > hōng; #53FF

+吀 > miē; #5400

+吁 > xū; #5401

+吂 > máng; #5402

+吃 > chī; #5403

+各 > gè; #5404

+吅 > xuān; #5405

+吆 > yāo; #5406

+吇 > zĭ; #5407

+合 > hé; #5408

+吉 > jí; #5409

+吊 > diào; #540A

+吋 > cùn; #540B

+同 > tóng; #540C

+名 > míng; #540D

+后 > hòu; #540E

+吏 > lì; #540F

+吐 > tŭ; #5410

+向 > xiàng; #5411

+吒 > zhà; #5412

+吓 > xià; #5413

+吔 > yĕ; #5414

+吕 > lǚ; #5415

+吖 > ā; #5416

+吗 > ma; #5417

+吘 > ŏu; #5418

+吙 > xuē; #5419

+吚 > yī; #541A

+君 > jūn; #541B

+吜 > chŏu; #541C

+吝 > lìn; #541D

+吞 > tūn; #541E

+吟 > yín; #541F

+吠 > fèi; #5420

+吡 > bĭ; #5421

+吢 > qìn; #5422

+吣 > qìn; #5423

+吤 > jiè; #5424

+吥 > bù; #5425

+否 > fŏu; #5426

+吧 > ba; #5427

+吨 > dūn; #5428

+吩 > fēn; #5429

+吪 > é; #542A

+含 > hán; #542B

+听 > tīng; #542C

+吭 > háng; #542D

+吮 > shŭn; #542E

+启 > qĭ; #542F

+吰 > hóng; #5430

+吱 > zhī; #5431

+吲 > shĕn; #5432

+吳 > wú; #5433

+吴 > wú; #5434

+吵 > chăo; #5435

+吶 > nè; #5436

+吷 > xuè; #5437

+吸 > xī; #5438

+吹 > chūi; #5439

+吺 > dōu; #543A

+吻 > wĕn; #543B

+吼 > hŏu; #543C

+吽 > óu; #543D

+吾 > wú; #543E

+吿 > gào; #543F

+呀 > yā; #5440

+呁 > jùn; #5441

+呂 > lǚ; #5442

+呃 > è; #5443

+呄 > gé; #5444

+呅 > méi; #5445

+呆 > ái; #5446

+呇 > qĭ; #5447

+呈 > chéng; #5448

+呉 > wú; #5449

+告 > gào; #544A

+呋 > fū; #544B

+呌 > jiào; #544C

+呍 > hōng; #544D

+呎 > chĭ; #544E

+呏 > shēng; #544F

+呐 > nè; #5450

+呑 > tūn; #5451

+呒 > fŭ; #5452

+呓 > yì; #5453

+呔 > dāi; #5454

+呕 > ōu; #5455

+呖 > lì; #5456

+呗 > bài; #5457

+员 > yuán; #5458

+呙 > kuāi; #5459

+呛 > qiāng; #545B

+呜 > wū; #545C

+呝 > è; #545D

+呞 > shī; #545E

+呟 > quăn; #545F

+呠 > pēn; #5460

+呡 > wĕn; #5461

+呢 > ní; #5462

+呣 > ḿ; #5463

+呤 > lĭng; #5464

+呥 > răn; #5465

+呦 > yōu; #5466

+呧 > dĭ; #5467

+周 > zhōu; #5468

+呩 > shì; #5469

+呪 > zhòu; #546A

+呫 > tiē; #546B

+呬 > xì; #546C

+呭 > yì; #546D

+呮 > qì; #546E

+呯 > píng; #546F

+呰 > zĭ; #5470

+呱 > gū; #5471

+呲 > zī; #5472

+味 > wèi; #5473

+呴 > xū; #5474

+呵 > hē; #5475

+呶 > náo; #5476

+呷 > xiā; #5477

+呸 > pēi; #5478

+呹 > yì; #5479

+呺 > xiāo; #547A

+呻 > shēn; #547B

+呼 > hū; #547C

+命 > mìng; #547D

+呾 > dá; #547E

+呿 > qū; #547F

+咀 > jŭ; #5480

+咁 > gèm; #5481

+咂 > zā; #5482

+咃 > tūo; #5483

+咄 > dūo; #5484

+咅 > pòu; #5485

+咆 > páo; #5486

+咇 > bì; #5487

+咈 > fú; #5488

+咉 > yāng; #5489

+咊 > hé; #548A

+咋 > zhà; #548B

+和 > hé; #548C

+咍 > hāi; #548D

+咎 > jìu; #548E

+咏 > yŏng; #548F

+咐 > fù; #5490

+咑 > què; #5491

+咒 > zhòu; #5492

+咓 > wă; #5493

+咔 > kă; #5494

+咕 > gū; #5495

+咖 > kā; #5496

+咗 > zŭo; #5497

+咘 > bù; #5498

+咙 > lóng; #5499

+咚 > dōng; #549A

+咛 > níng; #549B

+咝 > sī; #549D

+咞 > xiàn; #549E

+咟 > hùo; #549F

+咠 > qì; #54A0

+咡 > èr; #54A1

+咢 > è; #54A2

+咣 > guāng; #54A3

+咤 > zhà; #54A4

+咥 > xì; #54A5

+咦 > yí; #54A6

+咧 > liĕ; #54A7

+咨 > zī; #54A8

+咩 > miē; #54A9

+咪 > mī; #54AA

+咫 > zhĭ; #54AB

+咬 > yăo; #54AC

+咭 > jī; #54AD

+咮 > zhòu; #54AE

+咯 > gē; #54AF

+咰 > shuài; #54B0

+咱 > zán; #54B1

+咲 > xiào; #54B2

+咳 > ké; #54B3

+咴 > hūi; #54B4

+咵 > kuā; #54B5

+咶 > huài; #54B6

+咷 > táo; #54B7

+咸 > xián; #54B8

+咹 > è; #54B9

+咺 > xuān; #54BA

+咻 > xīu; #54BB

+咼 > wāi; #54BC

+咽 > yān; #54BD

+咾 > lăo; #54BE

+咿 > yī; #54BF

+哀 > āi; #54C0

+品 > pĭn; #54C1

+哂 > shĕn; #54C2

+哃 > tóng; #54C3

+哄 > hōng; #54C4

+哅 > xīong; #54C5

+哆 > chĭ; #54C6

+哇 > wā; #54C7

+哈 > hā; #54C8

+哉 > zāi; #54C9

+哊 > yù; #54CA

+哋 > dì; #54CB

+哌 > pài; #54CC

+响 > xiăng; #54CD

+哎 > āi; #54CE

+哏 > hĕn; #54CF

+哐 > kuāng; #54D0

+哑 > yă; #54D1

+哒 > dā; #54D2

+哓 > xiāo; #54D3

+哔 > bì; #54D4

+哕 > yuĕ; #54D5

+哗 > huā; #54D7

+哙 > kuài; #54D9

+哚 > dŭo; #54DA

+哜 > jì; #54DC

+哝 > nóng; #54DD

+哞 > mōu; #54DE

+哟 > yo; #54DF

+哠 > hào; #54E0

+員 > yuán; #54E1

+哢 > lòng; #54E2

+哣 > pŏu; #54E3

+哤 > máng; #54E4

+哥 > gē; #54E5

+哦 > é; #54E6

+哧 > chī; #54E7

+哨 > shào; #54E8

+哩 > lī; #54E9

+哪 > nă; #54EA

+哫 > zú; #54EB

+哬 > hé; #54EC

+哭 > kū; #54ED

+哮 > xiāo; #54EE

+哯 > xiàn; #54EF

+哰 > láo; #54F0

+哱 > bō; #54F1

+哲 > zhé; #54F2

+哳 > zhā; #54F3

+哴 > liàng; #54F4

+哵 > bā; #54F5

+哶 > miē; #54F6

+哷 > lè; #54F7

+哸 > sūi; #54F8

+哹 > fóu; #54F9

+哺 > bŭ; #54FA

+哻 > hàn; #54FB

+哼 > hēng; #54FC

+哽 > gĕng; #54FD

+哾 > shūo; #54FE

+哿 > gĕ; #54FF

+唀 > yŏu; #5500

+唁 > yàn; #5501

+唂 > gŭ; #5502

+唃 > gŭ; #5503

+唄 > bài; #5504

+唅 > hān; #5505

+唆 > sūo; #5506

+唇 > chún; #5507

+唈 > yì; #5508

+唉 > āi; #5509

+唊 > jiá; #550A

+唋 > tŭ; #550B

+唌 > xián; #550C

+唍 > huăn; #550D

+唎 > lī; #550E

+唏 > xī; #550F

+唐 > táng; #5510

+唑 > zùo; #5511

+唒 > qíu; #5512

+唓 > chē; #5513

+唔 > wú; #5514

+唕 > zào; #5515

+唖 > yă; #5516

+唗 > dōu; #5517

+唘 > qĭ; #5518

+唙 > dí; #5519

+唚 > qìn; #551A

+唛 > mà; #551B

+唝 > hŏng; #551D

+唞 > dŏu; #551E

+唠 > láo; #5520

+唡 > liăng; #5521

+唢 > sŭo; #5522

+唣 > zào; #5523

+唤 > huàn; #5524

+唦 > shā; #5526

+唧 > jī; #5527

+唨 > zŭo; #5528

+唩 > wō; #5529

+唪 > fĕng; #552A

+唫 > yín; #552B

+唬 > hŭ; #552C

+唭 > qī; #552D

+售 > shòu; #552E

+唯 > wéi; #552F

+唰 > shuā; #5530

+唱 > chàng; #5531

+唲 > ér; #5532

+唳 > lì; #5533

+唴 > qiàng; #5534

+唵 > ăn; #5535

+唶 > jiè; #5536

+唷 > yō; #5537

+唸 > niàn; #5538

+唹 > yū; #5539

+唺 > tiăn; #553A

+唻 > lăi; #553B

+唼 > shà; #553C

+唽 > xī; #553D

+唾 > tùo; #553E

+唿 > hū; #553F

+啀 > ái; #5540

+啁 > zhōu; #5541

+啂 > nòu; #5542

+啃 > kĕn; #5543

+啄 > zhúo; #5544

+啅 > zhúo; #5545

+商 > shāng; #5546

+啇 > dí; #5547

+啈 > hèng; #5548

+啉 > lán; #5549

+啊 > a; #554A

+啋 > xiāo; #554B

+啌 > xiāng; #554C

+啍 > tūn; #554D

+啎 > wŭ; #554E

+問 > wèn; #554F

+啐 > cùi; #5550

+啑 > shà; #5551

+啒 > hū; #5552

+啓 > qĭ; #5553

+啔 > qĭ; #5554

+啕 > táo; #5555

+啖 > dàn; #5556

+啗 > dàn; #5557

+啘 > yè; #5558

+啙 > zĭ; #5559

+啚 > bĭ; #555A

+啛 > cùi; #555B

+啜 > chùo; #555C

+啝 > hé; #555D

+啞 > yă; #555E

+啟 > qĭ; #555F

+啠 > zhé; #5560

+啡 > pēi; #5561

+啢 > liăng; #5562

+啣 > xián; #5563

+啤 > pí; #5564

+啥 > shà; #5565

+啦 > la; #5566

+啧 > zé; #5567

+啨 > qīng; #5568

+啩 > guà; #5569

+啪 > pā; #556A

+啫 > zhĕ; #556B

+啬 > sè; #556C

+啭 > zhuàn; #556D

+啮 > niè; #556E

+啯 > guo; #556F

+啰 > lūo; #5570

+啱 > yān; #5571

+啲 > dì; #5572

+啳 > quán; #5573

+啴 > tān; #5574

+啵 > bo; #5575

+啶 > dìng; #5576

+啷 > lāng; #5577

+啸 > xiào; #5578

+啺 > táng; #557A

+啻 > chì; #557B

+啼 > tí; #557C

+啽 > án; #557D

+啾 > jīu; #557E

+啿 > dàn; #557F

+喀 > kè; #5580

+喁 > yóng; #5581

+喂 > wèi; #5582

+喃 > nán; #5583

+善 > shàn; #5584

+喅 > yù; #5585

+喆 > zhé; #5586

+喇 > lă; #5587

+喈 > jiē; #5588

+喉 > hóu; #5589

+喊 > hăn; #558A

+喋 > dié; #558B

+喌 > zhōu; #558C

+喍 > chái; #558D

+喎 > wāi; #558E

+喏 > rĕ; #558F

+喐 > yù; #5590

+喑 > yīn; #5591

+喒 > zán; #5592

+喓 > yāo; #5593

+喔 > wō; #5594

+喕 > miăn; #5595

+喖 > hú; #5596

+喗 > yŭn; #5597

+喘 > chuăn; #5598

+喙 > hùi; #5599

+喚 > huàn; #559A

+喛 > huàn; #559B

+喜 > xĭ; #559C

+喝 > hē; #559D

+喞 > jī; #559E

+喟 > kùi; #559F

+喠 > zhŏng; #55A0

+喡 > wĕi; #55A1

+喢 > shà; #55A2

+喣 > xŭ; #55A3

+喤 > huáng; #55A4

+喥 > dù; #55A5

+喦 > niè; #55A6

+喧 > 1xuān; #55A7

+喨 > liàng; #55A8

+喩 > yù; #55A9

+喪 > sāng; #55AA

+喫 > chī; #55AB

+喬 > qiáo; #55AC

+喭 > yàn; #55AD

+單 > dān; #55AE

+喯 > pēn; #55AF

+喰 > cān; #55B0

+喱 > lí; #55B1

+喲 > yo; #55B2

+喳 > zhā; #55B3

+喴 > wēi; #55B4

+喵 > miāo; #55B5

+営 > yíng; #55B6

+喷 > pēn; #55B7

+喹 > kúi; #55B9

+喺 > xì; #55BA

+喻 > yù; #55BB

+喼 > jié; #55BC

+喽 > lou; #55BD

+喾 > kù; #55BE

+喿 > sào; #55BF

+嗀 > hùo; #55C0

+嗁 > tí; #55C1

+嗂 > yáo; #55C2

+嗃 > hè; #55C3

+嗄 > á; #55C4

+嗅 > xìu; #55C5

+嗆 > qiāng; #55C6

+嗇 > sè; #55C7

+嗈 > yōng; #55C8

+嗉 > sù; #55C9

+嗊 > hŏng; #55CA

+嗋 > xié; #55CB

+嗌 > yì; #55CC

+嗍 > sūo; #55CD

+嗎 > ma; #55CE

+嗏 > chā; #55CF

+嗐 > hài; #55D0

+嗑 > kè; #55D1

+嗒 > tà; #55D2

+嗓 > săng; #55D3

+嗔 > tián; #55D4

+嗕 > rù; #55D5

+嗖 > sōu; #55D6

+嗗 > wā; #55D7

+嗘 > jī; #55D8

+嗙 > păng; #55D9

+嗚 > wū; #55DA

+嗛 > xián; #55DB

+嗜 > shì; #55DC

+嗝 > gé; #55DD

+嗞 > zī; #55DE

+嗟 > jiē; #55DF

+嗠 > lùo; #55E0

+嗡 > wēng; #55E1

+嗢 > wà; #55E2

+嗣 > sì; #55E3

+嗤 > chī; #55E4

+嗥 > háo; #55E5

+嗦 > sūo; #55E6

+嗧 > jiā' 'lún; #55E7

+嗨 > hăi; #55E8

+嗩 > sŭo; #55E9

+嗪 > qín; #55EA

+嗫 > niè; #55EB

+嗬 > hē; #55EC

+嗮 > sài; #55EE

+嗯 > ǹg; #55EF

+嗰 > gè; #55F0

+嗱 > ná; #55F1

+嗲 > diă; #55F2

+嗳 > ài; #55F3

+嗵 > tōng; #55F5

+嗶 > bì; #55F6

+嗷 > áo; #55F7

+嗸 > áo; #55F8

+嗹 > lián; #55F9

+嗺 > cūi; #55FA

+嗻 > zhē; #55FB

+嗼 > mò; #55FC

+嗽 > sòu; #55FD

+嗾 > sŏu; #55FE

+嗿 > tăn; #55FF

+嘀 > dí; #5600

+嘁 > qī; #5601

+嘂 > jiào; #5602

+嘃 > chōng; #5603

+嘄 > jiāo; #5604

+嘅 > kăi; #5605

+嘆 > tàn; #5606

+嘇 > sān; #5607

+嘈 > cáo; #5608

+嘉 > jiā; #5609

+嘊 > ái; #560A

+嘋 > xiāo; #560B

+嘌 > piāo; #560C

+嘍 > lou; #560D

+嘎 > gā; #560E

+嘏 > gŭ; #560F

+嘐 > xiāo; #5610

+嘑 > hū; #5611

+嘒 > hùi; #5612

+嘓 > guo; #5613

+嘔 > ōu; #5614

+嘕 > xiān; #5615

+嘖 > zé; #5616

+嘗 > cháng; #5617

+嘘 > xū; #5618

+嘙 > pó; #5619

+嘚 > dé; #561A

+嘛 > ma; #561B

+嘜 > mà; #561C

+嘝 > hú; #561D

+嘞 > lei; #561E

+嘟 > dū; #561F

+嘠 > gā; #5620

+嘡 > tāng; #5621

+嘢 > yĕ; #5622

+嘣 > bēng; #5623

+嘤 > yīng; #5624

+嘦 > jiào; #5626

+嘧 > mī; #5627

+嘨 > xiào; #5628

+嘩 > huā; #5629

+嘪 > măi; #562A

+嘫 > rán; #562B

+嘬 > zūo; #562C

+嘭 > pēng; #562D

+嘮 > láo; #562E

+嘯 > xiào; #562F

+嘰 > jī; #5630

+嘱 > zhŭ; #5631

+嘲 > cháo; #5632

+嘳 > kùi; #5633

+嘴 > zŭi; #5634

+嘵 > xiāo; #5635

+嘶 > sī; #5636

+嘷 > háo; #5637

+嘸 > fŭ; #5638

+嘹 > liáo; #5639

+嘺 > qiáo; #563A

+嘻 > xī; #563B

+嘼 > xìu; #563C

+嘽 > tān; #563D

+嘾 > tán; #563E

+嘿 > mò; #563F

+噀 > xùn; #5640

+噁 > ĕ; #5641

+噂 > zŭn; #5642

+噃 > fān; #5643

+噄 > chī; #5644

+噅 > hūi; #5645

+噆 > zăn; #5646

+噇 > chuáng; #5647

+噈 > cù; #5648

+噉 > dàn; #5649

+噊 > yù; #564A

+噋 > tūn; #564B

+噌 > chēng; #564C

+噍 > jiào; #564D

+噎 > yē; #564E

+噏 > xī; #564F

+噐 > qì; #5650

+噑 > háo; #5651

+噒 > lián; #5652

+噓 > xū; #5653

+噔 > dēng; #5654

+噕 > hūi; #5655

+噖 > yín; #5656

+噗 > pū; #5657

+噘 > juē; #5658

+噙 > qín; #5659

+噚 > xún; #565A

+噛 > niè; #565B

+噜 > lū; #565C

+噝 > sī; #565D

+噞 > yăn; #565E

+噟 > yìng; #565F

+噠 > dā; #5660

+噡 > dān; #5661

+噢 > yŭ; #5662

+噣 > zhòu; #5663

+噤 > jìn; #5664

+噥 > nóng; #5665

+噦 > yuĕ; #5666

+噧 > hùi; #5667

+器 > qì; #5668

+噩 > è; #5669

+噪 > zào; #566A

+噫 > yī; #566B

+噬 > shì; #566C

+噭 > jiào; #566D

+噮 > yuān; #566E

+噯 > ài; #566F

+噰 > yōng; #5670

+噱 > jué; #5671

+噲 > kuài; #5672

+噳 > yŭ; #5673

+噴 > pēn; #5674

+噵 > dào; #5675

+噶 > gé; #5676

+噷 > xīn; #5677

+噸 > dūn; #5678

+噹 > dāng; #5679

+噻 > sai; #567B

+噼 > pī; #567C

+噽 > pĭ; #567D

+噾 > yīn; #567E

+噿 > zŭi; #567F

+嚀 > níng; #5680

+嚁 > dí; #5681

+嚂 > làn; #5682

+嚃 > tā; #5683

+嚄 > hùo; #5684

+嚅 > rú; #5685

+嚆 > hāo; #5686

+嚇 > xià; #5687

+嚈 > yà; #5688

+嚉 > dūo; #5689

+嚊 > xì; #568A

+嚋 > chóu; #568B

+嚌 > jì; #568C

+嚍 > jìn; #568D

+嚎 > háo; #568E

+嚏 > tì; #568F

+嚐 > cháng; #5690

+嚓 > cā; #5693

+嚔 > tì; #5694

+嚕 > lū; #5695

+嚖 > hùi; #5696

+嚗 > bó; #5697

+嚘 > yōu; #5698

+嚙 > niè; #5699

+嚚 > yín; #569A

+嚛 > hù; #569B

+嚜 > mò; #569C

+嚝 > huāng; #569D

+嚞 > zhé; #569E

+嚟 > lí; #569F

+嚠 > líu; #56A0

+嚢 > náng; #56A2

+嚣 > xiāo; #56A3

+嚤 > mó; #56A4

+嚥 > yàn; #56A5

+嚦 > lì; #56A6

+嚧 > lú; #56A7

+嚨 > lóng; #56A8

+嚩 > fú; #56A9

+嚪 > dàn; #56AA

+嚫 > chèn; #56AB

+嚬 > pín; #56AC

+嚭 > pĭ; #56AD

+嚮 > xiàng; #56AE

+嚯 > hùo; #56AF

+嚰 > mó; #56B0

+嚱 > xì; #56B1

+嚲 > dŭo; #56B2

+嚳 > kù; #56B3

+嚴 > yán; #56B4

+嚵 > chán; #56B5

+嚶 > yīng; #56B6

+嚷 > răng; #56B7

+嚸 > diăn; #56B8

+嚹 > lā; #56B9

+嚺 > tà; #56BA

+嚻 > xiāo; #56BB

+嚼 > jiáo; #56BC

+嚽 > chùo; #56BD

+嚾 > huān; #56BE

+嚿 > hùo; #56BF

+囀 > zhuàn; #56C0

+囁 > niè; #56C1

+囂 > xiāo; #56C2

+囃 > cà; #56C3

+囄 > lí; #56C4

+囅 > chăn; #56C5

+囆 > chài; #56C6

+囇 > lì; #56C7

+囈 > yì; #56C8

+囉 > lūo; #56C9

+囊 > náng; #56CA

+囋 > zàn; #56CB

+囌 > sū; #56CC

+囍 > xĭ; #56CD

+囏 > jiān; #56CF

+囐 > zá; #56D0

+囑 > zhŭ; #56D1

+囒 > lán; #56D2

+囓 > niè; #56D3

+囔 > nāng; #56D4

+囗 > wéi; #56D7

+囘 > húi; #56D8

+囙 > yīn; #56D9

+囚 > qíu; #56DA

+四 > sì; #56DB

+囜 > nín; #56DC

+囝 > jiăn; #56DD

+回 > húi; #56DE

+囟 > xìn; #56DF

+因 > yīn; #56E0

+囡 > nān; #56E1

+团 > tuán; #56E2

+団 > tuán; #56E3

+囤 > dùn; #56E4

+囥 > kàng; #56E5

+囦 > yuān; #56E6

+囧 > jĭong; #56E7

+囨 > piān; #56E8

+囩 > yùn; #56E9

+囪 > cōng; #56EA

+囫 > hú; #56EB

+囬 > húi; #56EC

+园 > yuán; #56ED

+囮 > yóu; #56EE

+囯 > gúo; #56EF

+困 > kùn; #56F0

+囱 > cōng; #56F1

+囲 > wéi; #56F2

+図 > tú; #56F3

+围 > wéi; #56F4

+囵 > lún; #56F5

+囶 > gúo; #56F6

+囷 > qūn; #56F7

+囸 > rì; #56F8

+囹 > líng; #56F9

+固 > gù; #56FA

+囻 > gúo; #56FB

+囼 > tāi; #56FC

+国 > gúo; #56FD

+图 > tú; #56FE

+囿 > yòu; #56FF

+圀 > gúo; #5700

+圁 > yín; #5701

+圂 > hùn; #5702

+圃 > pŭ; #5703

+圄 > yŭ; #5704

+圅 > hán; #5705

+圆 > yuán; #5706

+圇 > lún; #5707

+圈 > quān; #5708

+圉 > yŭ; #5709

+圊 > qīng; #570A

+國 > gúo; #570B

+圌 > chuán; #570C

+圍 > wéi; #570D

+圎 > yuán; #570E

+圏 > quān; #570F

+圐 > kū; #5710

+圑 > fù; #5711

+園 > yuán; #5712

+圓 > yuán; #5713

+圔 > è; #5714

+圕 > tú' 'shū' 'guăn; #5715

+圖 > tú; #5716

+圗 > tú; #5717

+團 > tuán; #5718

+圙 > lǜe; #5719

+圚 > hùi; #571A

+圛 > yì; #571B

+圜 > yuán; #571C

+圝 > luán; #571D

+圞 > luán; #571E

+土 > tŭ; #571F

+圠 > yà; #5720

+圡 > tŭ; #5721

+圢 > tīng; #5722

+圣 > shèng; #5723

+圤 > pŭ; #5724

+圥 > lù; #5725

+圧 > yā; #5727

+在 > zài; #5728

+圩 > wéi; #5729

+圪 > gē; #572A

+圫 > yù; #572B

+圬 > wū; #572C

+圭 > gūi; #572D

+圮 > pĭ; #572E

+圯 > yí; #572F

+地 > dì; #5730

+圱 > qiān; #5731

+圲 > qiān; #5732

+圳 > zhèn; #5733

+圴 > zhúo; #5734

+圵 > dàng; #5735

+圶 > qià; #5736

+圹 > kuàng; #5739

+场 > cháng; #573A

+圻 > qí; #573B

+圼 > niè; #573C

+圽 > mò; #573D

+圾 > jí; #573E

+圿 > jiá; #573F

+址 > zhĭ; #5740

+坁 > zhĭ; #5741

+坂 > băn; #5742

+坃 > xūn; #5743

+坄 > tóu; #5744

+坅 > qĭn; #5745

+坆 > fén; #5746

+均 > jūn; #5747

+坈 > kēng; #5748

+坉 > tún; #5749

+坊 > fāng; #574A

+坋 > fèn; #574B

+坌 > bèn; #574C

+坍 > tān; #574D

+坎 > kăn; #574E

+坏 > pī; #574F

+坐 > zùo; #5750

+坑 > kēng; #5751

+坒 > bì; #5752

+坓 > xíng; #5753

+坔 > dì; #5754

+坕 > jīng; #5755

+坖 > jì; #5756

+块 > kuài; #5757

+坘 > dĭ; #5758

+坙 > jīng; #5759

+坚 > jiān; #575A

+坛 > tán; #575B

+坜 > lì; #575C

+坝 > bà; #575D

+坞 > wù; #575E

+坟 > fén; #575F

+坠 > zhùi; #5760

+坡 > pō; #5761

+坢 > păn; #5762

+坣 > tāng; #5763

+坤 > kūn; #5764

+坥 > qū; #5765

+坦 > tăn; #5766

+坧 > zhī; #5767

+坨 > túo; #5768

+坩 > gān; #5769

+坪 > píng; #576A

+坫 > diàn; #576B

+坬 > guà; #576C

+坭 > ní; #576D

+坮 > tái; #576E

+坯 > pī; #576F

+坰 > jīong; #5770

+坱 > yăng; #5771

+坲 > fó; #5772

+坳 > ào; #5773

+坴 > lìu; #5774

+坵 > qīu; #5775

+坶 > mù; #5776

+坷 > kĕ; #5777

+坸 > gòu; #5778

+坹 > xuè; #5779

+坺 > bá; #577A

+坻 > chí; #577B

+坼 > chè; #577C

+坽 > líng; #577D

+坾 > zhù; #577E

+坿 > fù; #577F

+垀 > hū; #5780

+垁 > zhì; #5781

+垂 > chúi; #5782

+垃 > lā; #5783

+垄 > lŏng; #5784

+垅 > lŏng; #5785

+垆 > lú; #5786

+垇 > ào; #5787

+垉 > páo; #5789

+型 > xíng; #578B

+垌 > dòng; #578C

+垍 > jì; #578D

+垎 > kè; #578E

+垏 > lù; #578F

+垐 > cí; #5790

+垑 > chĭ; #5791

+垒 > lĕi; #5792

+垓 > gāi; #5793

+垔 > yīn; #5794

+垕 > hòu; #5795

+垖 > dūi; #5796

+垗 > zhào; #5797

+垘 > fú; #5798

+垙 > guāng; #5799

+垚 > yáo; #579A

+垛 > dŭo; #579B

+垜 > dŭo; #579C

+垝 > gŭi; #579D

+垞 > chá; #579E

+垟 > yáng; #579F

+垠 > yín; #57A0

+垡 > fá; #57A1

+垢 > gòu; #57A2

+垣 > yuán; #57A3

+垤 > dié; #57A4

+垥 > xié; #57A5

+垦 > kĕn; #57A6

+垧 > jīong; #57A7

+垨 > shŏu; #57A8

+垩 > è; #57A9

+垫 > diàn; #57AB

+垬 > hóng; #57AC

+垭 > wù; #57AD

+垮 > kuă; #57AE

+垱 > dàng; #57B1

+垲 > kăi; #57B2

+垴 > năo; #57B4

+垵 > ăn; #57B5

+垶 > xīng; #57B6

+垷 > xiàn; #57B7

+垸 > huàn; #57B8

+垹 > bāng; #57B9

+垺 > pēi; #57BA

+垻 > bà; #57BB

+垼 > yì; #57BC

+垽 > yìn; #57BD

+垾 > hàn; #57BE

+垿 > xù; #57BF

+埀 > chúi; #57C0

+埁 > cén; #57C1

+埂 > gĕng; #57C2

+埃 > āi; #57C3

+埄 > péng; #57C4

+埅 > fáng; #57C5

+埆 > què; #57C6

+埇 > yŏng; #57C7

+埈 > xùn; #57C8

+埉 > jiá; #57C9

+埊 > dì; #57CA

+埋 > mái; #57CB

+埌 > làng; #57CC

+埍 > xuàn; #57CD

+城 > chéng; #57CE

+埏 > yán; #57CF

+埐 > jīn; #57D0

+埑 > zhé; #57D1

+埒 > lèi; #57D2

+埓 > liè; #57D3

+埔 > bù; #57D4

+埕 > chéng; #57D5

+埗 > bù; #57D7

+埘 > shí; #57D8

+埙 > xūn; #57D9

+埚 > gūo; #57DA

+埛 > jīong; #57DB

+埜 > yĕ; #57DC

+埝 > niàn; #57DD

+埞 > dĭ; #57DE

+域 > yù; #57DF

+埠 > bù; #57E0

+埡 > yà; #57E1

+埢 > juăn; #57E2

+埣 > sùi; #57E3

+埤 > pí; #57E4

+埥 > chēng; #57E5

+埦 > wăn; #57E6

+埧 > jù; #57E7

+埨 > lŭn; #57E8

+埩 > zhēng; #57E9

+埪 > kōng; #57EA

+埫 > chŏng; #57EB

+埬 > dōng; #57EC

+埭 > dài; #57ED

+埮 > tàn; #57EE

+埯 > ăn; #57EF

+埰 > cài; #57F0

+埱 > shú; #57F1

+埲 > bĕng; #57F2

+埳 > kăn; #57F3

+埴 > zhí; #57F4

+埵 > dŭo; #57F5

+埶 > yì; #57F6

+執 > zhí; #57F7

+埸 > yì; #57F8

+培 > péi; #57F9

+基 > jī; #57FA

+埻 > zhŭn; #57FB

+埼 > qí; #57FC

+埽 > sào; #57FD

+埾 > jù; #57FE

+埿 > ní; #57FF

+堀 > kū; #5800

+堁 > kè; #5801

+堂 > táng; #5802

+堃 > kūn; #5803

+堄 > nì; #5804

+堅 > jiān; #5805

+堆 > dūi; #5806

+堇 > jĭn; #5807

+堈 > gāng; #5808

+堉 > yù; #5809

+堊 > è; #580A

+堋 > péng; #580B

+堌 > gù; #580C

+堍 > tù; #580D

+堎 > lèng; #580E

+堐 > yá; #5810

+堑 > qiàn; #5811

+堓 > àn; #5813

+堕 > dùo; #5815

+堖 > năo; #5816

+堗 > tū; #5817

+堘 > chéng; #5818

+堙 > yīn; #5819

+堚 > hún; #581A

+堛 > bì; #581B

+堜 > liàn; #581C

+堝 > gūo; #581D

+堞 > dié; #581E

+堟 > zhuàn; #581F

+堠 > hòu; #5820

+堡 > băo; #5821

+堢 > băo; #5822

+堣 > yú; #5823

+堤 > dī; #5824

+堥 > máo; #5825

+堦 > jiē; #5826

+堧 > ruán; #5827

+堨 > è; #5828

+堩 > gèng; #5829

+堪 > kān; #582A

+堫 > zōng; #582B

+堬 > yú; #582C

+堭 > huáng; #582D

+堮 > è; #582E

+堯 > yáo; #582F

+堰 > yàn; #5830

+報 > bào; #5831

+堲 > jí; #5832

+堳 > méi; #5833

+場 > cháng; #5834

+堵 > dŭ; #5835

+堶 > túo; #5836

+堷 > yìn; #5837

+堸 > féng; #5838

+堹 > zhòng; #5839

+堺 > jiè; #583A

+堻 > zhēn; #583B

+堼 > fēng; #583C

+堽 > gāng; #583D

+堾 > chuăn; #583E

+堿 > jiăn; #583F

+塂 > xiàng; #5842

+塃 > huāng; #5843

+塄 > léng; #5844

+塅 > duàn; #5845

+塇 > xuān; #5847

+塈 > jì; #5848

+塉 > jí; #5849

+塊 > kuài; #584A

+塋 > yíng; #584B

+塌 > tā; #584C

+塍 > chéng; #584D

+塎 > yŏng; #584E

+塏 > kăi; #584F

+塐 > sù; #5850

+塑 > sù; #5851

+塒 > shí; #5852

+塓 > mì; #5853

+塔 > tă; #5854

+塕 > wĕng; #5855

+塖 > chéng; #5856

+塗 > tú; #5857

+塘 > táng; #5858

+塙 > què; #5859

+塚 > zhŏng; #585A

+塛 > lì; #585B

+塜 > péng; #585C

+塝 > bàng; #585D

+塞 > sāi; #585E

+塟 > zàng; #585F

+塠 > dūi; #5860

+塡 > tián; #5861

+塢 > wù; #5862

+塣 > chĕng; #5863

+塤 > xūn; #5864

+塥 > gé; #5865

+塦 > zhèn; #5866

+塧 > ài; #5867

+塨 > gōng; #5868

+塩 > yán; #5869

+塪 > kăn; #586A

+填 > tián; #586B

+塬 > yuán; #586C

+塭 > wēn; #586D

+塮 > xiè; #586E

+塯 > lìu; #586F

+塱 > lăng; #5871

+塲 > cháng; #5872

+塳 > péng; #5873

+塴 > bèng; #5874

+塵 > chén; #5875

+塶 > cù; #5876

+塷 > lŭ; #5877

+塸 > ŏu; #5878

+塹 > qiàn; #5879

+塺 > méi; #587A

+塻 > mò; #587B

+塼 > zhuān; #587C

+塽 > shuăng; #587D

+塾 > shú; #587E

+塿 > lŏu; #587F

+墀 > chí; #5880

+墁 > màn; #5881

+墂 > biāo; #5882

+境 > jìng; #5883

+墄 > qī; #5884

+墅 > shù; #5885

+墆 > dì; #5886

+墇 > zhāng; #5887

+墈 > kàn; #5888

+墉 > yōng; #5889

+墊 > diàn; #588A

+墋 > chĕn; #588B

+墌 > zhī; #588C

+墍 > xì; #588D

+墎 > gūo; #588E

+墏 > qiăng; #588F

+墐 > jìn; #5890

+墑 > dī; #5891

+墒 > shāng; #5892

+墓 > mù; #5893

+墔 > cūi; #5894

+墕 > yàn; #5895

+墖 > tă; #5896

+増 > zēng; #5897

+墘 > qí; #5898

+墙 > qiáng; #5899

+墚 > liáng; #589A

+墜 > zhùi; #589C

+墝 > qiāo; #589D

+增 > zēng; #589E

+墟 > xū; #589F

+墠 > shàn; #58A0

+墡 > shàn; #58A1

+墢 > bá; #58A2

+墣 > pū; #58A3

+墤 > kuài; #58A4

+墥 > dŏng; #58A5

+墦 > fán; #58A6

+墧 > què; #58A7

+墨 > mò; #58A8

+墩 > dūn; #58A9

+墪 > dūn; #58AA

+墫 > dūn; #58AB

+墬 > dì; #58AC

+墭 > shèng; #58AD

+墮 > dùo; #58AE

+墯 > dùo; #58AF

+墰 > tán; #58B0

+墱 > dèng; #58B1

+墲 > wŭ; #58B2

+墳 > fén; #58B3

+墴 > huáng; #58B4

+墵 > tán; #58B5

+墶 > dā; #58B6

+墷 > yè; #58B7

+墺 > yù; #58BA

+墻 > qiáng; #58BB

+墼 > jī; #58BC

+墽 > qiāo; #58BD

+墾 > kĕn; #58BE

+墿 > yì; #58BF

+壀 > pí; #58C0

+壁 > bì; #58C1

+壂 > diàn; #58C2

+壃 > jiāng; #58C3

+壄 > yĕ; #58C4

+壅 > yōng; #58C5

+壆 > bó; #58C6

+壇 > tán; #58C7

+壈 > lăn; #58C8

+壉 > jù; #58C9

+壊 > huài; #58CA

+壋 > dàng; #58CB

+壌 > răng; #58CC

+壍 > qiàn; #58CD

+壎 > xūn; #58CE

+壏 > làn; #58CF

+壐 > xĭ; #58D0

+壑 > hè; #58D1

+壒 > ài; #58D2

+壓 > yā; #58D3

+壔 > dăo; #58D4

+壕 > háo; #58D5

+壖 > ruán; #58D6

+壘 > lĕi; #58D8

+壙 > kuàng; #58D9

+壚 > lú; #58DA

+壛 > yán; #58DB

+壜 > tán; #58DC

+壝 > wéi; #58DD

+壞 > huài; #58DE

+壟 > lŏng; #58DF

+壠 > lŏng; #58E0

+壡 > rùi; #58E1

+壢 > lì; #58E2

+壣 > lín; #58E3

+壤 > răng; #58E4

+壦 > xūn; #58E6

+壧 > yán; #58E7

+壨 > léi; #58E8

+壩 > bà; #58E9

+士 > shì; #58EB

+壬 > rén; #58EC

+壮 > zhuàng; #58EE

+壯 > zhuàng; #58EF

+声 > shēng; #58F0

+壱 > yī; #58F1

+売 > mài; #58F2

+壳 > ké; #58F3

+壴 > zhŭ; #58F4

+壵 > zhuàng; #58F5

+壶 > hú; #58F6

+壷 > hú; #58F7

+壸 > kŭn; #58F8

+壹 > yī; #58F9

+壺 > hú; #58FA

+壻 > xù; #58FB

+壼 > kŭn; #58FC

+壽 > shòu; #58FD

+壾 > măng; #58FE

+壿 > zŭn; #58FF

+夀 > shòu; #5900

+夁 > yī; #5901

+夂 > zhĭ; #5902

+夃 > gū; #5903

+处 > chù; #5904

+夅 > jiàng; #5905

+夆 > fēng; #5906

+备 > bèi; #5907

+変 > biàn; #5909

+夊 > sūi; #590A

+夋 > qūn; #590B

+夌 > líng; #590C

+复 > fù; #590D

+夎 > zùo; #590E

+夏 > xià; #590F

+夐 > xìong; #5910

+夒 > náo; #5912

+夓 > xià; #5913

+夔 > kúi; #5914

+夕 > xī; #5915

+外 > wài; #5916

+夗 > yuàn; #5917

+夘 > măo; #5918

+夙 > sù; #5919

+多 > dūo; #591A

+夛 > dūo; #591B

+夜 > yè; #591C

+夝 > qíng; #591D

+够 > gòu; #591F

+夠 > gòu; #5920

+夡 > qì; #5921

+夢 > mèng; #5922

+夣 > mèng; #5923

+夤 > yín; #5924

+夥 > hŭo; #5925

+夦 > chèn; #5926

+大 > dà; #5927

+夨 > zè; #5928

+天 > tiān; #5929

+太 > tài; #592A

+夫 > fū; #592B

+夬 > guài; #592C

+夭 > yăo; #592D

+央 > yāng; #592E

+夯 > hāng; #592F

+夰 > găo; #5930

+失 > shī; #5931

+夲 > bĕn; #5932

+夳 > tài; #5933

+头 > tóu; #5934

+夵 > yăn; #5935

+夶 > bĭ; #5936

+夷 > yí; #5937

+夸 > kuā; #5938

+夹 > jiā; #5939

+夺 > dúo; #593A

+夼 > kuăng; #593C

+夽 > yùn; #593D

+夾 > jiā; #593E

+夿 > pā; #593F

+奀 > ēn; #5940

+奁 > lián; #5941

+奂 > huàn; #5942

+奃 > dì; #5943

+奄 > yăn; #5944

+奅 > pào; #5945

+奆 > quăn; #5946

+奇 > qí; #5947

+奈 > nài; #5948

+奉 > fèng; #5949

+奊 > xié; #594A

+奋 > fèn; #594B

+奌 > diăn; #594C

+奎 > kúi; #594E

+奏 > zòu; #594F

+奐 > huàn; #5950

+契 > qì; #5951

+奒 > kāi; #5952

+奓 > zhà; #5953

+奔 > bēn; #5954

+奕 > yì; #5955

+奖 > jiăng; #5956

+套 > tào; #5957

+奘 > zàng; #5958

+奙 > bĕn; #5959

+奚 > xī; #595A

+奛 > xiăng; #595B

+奜 > fĕi; #595C

+奝 > diāo; #595D

+奞 > xùn; #595E

+奟 > kēng; #595F

+奠 > diàn; #5960

+奡 > ào; #5961

+奢 > shē; #5962

+奣 > wĕng; #5963

+奤 > păn; #5964

+奥 > ào; #5965

+奦 > wù; #5966

+奧 > ào; #5967

+奨 > jiăng; #5968

+奩 > lián; #5969

+奪 > dúo; #596A

+奫 > yūn; #596B

+奬 > jiăng; #596C

+奭 > shì; #596D

+奮 > fèn; #596E

+奯 > hùo; #596F

+奰 > bì; #5970

+奱 > lián; #5971

+奲 > dŭo; #5972

+女 > nǚ; #5973

+奴 > nú; #5974

+奵 > dīng; #5975

+奶 > năi; #5976

+奷 > qiān; #5977

+奸 > jiān; #5978

+她 > tā; #5979

+奺 > jĭu; #597A

+奻 > nán; #597B

+奼 > chà; #597C

+好 > hăo; #597D

+奾 > xiān; #597E

+奿 > fàn; #597F

+妀 > jĭ; #5980

+妁 > shùo; #5981

+如 > rú; #5982

+妃 > fēi; #5983

+妄 > wàng; #5984

+妅 > hóng; #5985

+妆 > zhuāng; #5986

+妇 > fù; #5987

+妈 > mā; #5988

+妉 > dān; #5989

+妊 > rèn; #598A

+妋 > fū; #598B

+妌 > jìng; #598C

+妍 > yán; #598D

+妎 > xiè; #598E

+妏 > wèn; #598F

+妐 > zhōng; #5990

+妑 > pā; #5991

+妒 > dù; #5992

+妓 > jì; #5993

+妔 > kēng; #5994

+妕 > zhòng; #5995

+妖 > yāo; #5996

+妗 > jìn; #5997

+妘 > yún; #5998

+妙 > miào; #5999

+妚 > pēi; #599A

+妜 > yuè; #599C

+妝 > zhuāng; #599D

+妞 > nīu; #599E

+妟 > yàn; #599F

+妠 > nà; #59A0

+妡 > xīn; #59A1

+妢 > fén; #59A2

+妣 > bĭ; #59A3

+妤 > yú; #59A4

+妥 > tŭo; #59A5

+妦 > fēng; #59A6

+妧 > yuán; #59A7

+妨 > fáng; #59A8

+妩 > wŭ; #59A9

+妪 > yù; #59AA

+妫 > gūi; #59AB

+妬 > dù; #59AC

+妭 > bá; #59AD

+妮 > nī; #59AE

+妯 > zhóu; #59AF

+妰 > zhúo; #59B0

+妱 > zhāo; #59B1

+妲 > dá; #59B2

+妳 > năi; #59B3

+妴 > yuăn; #59B4

+妵 > tŏu; #59B5

+妶 > xuán; #59B6

+妷 > zhí; #59B7

+妸 > ē; #59B8

+妹 > mèi; #59B9

+妺 > mò; #59BA

+妻 > qī; #59BB

+妼 > bì; #59BC

+妽 > shēn; #59BD

+妾 > qiè; #59BE

+妿 > ē; #59BF

+姀 > hé; #59C0

+姁 > xŭ; #59C1

+姂 > fá; #59C2

+姃 > zhēng; #59C3

+姄 > mín; #59C4

+姅 > bàn; #59C5

+姆 > mŭ; #59C6

+姇 > fū; #59C7

+姈 > líng; #59C8

+姉 > zĭ; #59C9

+姊 > zĭ; #59CA

+始 > shĭ; #59CB

+姌 > răn; #59CC

+姍 > shān; #59CD

+姎 > yāng; #59CE

+姏 > mán; #59CF

+姐 > jiĕ; #59D0

+姑 > gū; #59D1

+姒 > sì; #59D2

+姓 > xìng; #59D3

+委 > wĕi; #59D4

+姕 > zī; #59D5

+姖 > jù; #59D6

+姗 > shān; #59D7

+姘 > pīn; #59D8

+姙 > rèn; #59D9

+姚 > yáo; #59DA

+姛 > tŏng; #59DB

+姜 > jiāng; #59DC

+姝 > shū; #59DD

+姞 > jí; #59DE

+姟 > gāi; #59DF

+姠 > shàng; #59E0

+姡 > kùo; #59E1

+姢 > juān; #59E2

+姣 > jiāo; #59E3

+姤 > gòu; #59E4

+姥 > mŭ; #59E5

+姦 > jiān; #59E6

+姧 > jiān; #59E7

+姨 > yí; #59E8

+姩 > niàn; #59E9

+姪 > zhí; #59EA

+姫 > jī; #59EB

+姬 > jī; #59EC

+姭 > xiàn; #59ED

+姮 > héng; #59EE

+姯 > guāng; #59EF

+姰 > jūn; #59F0

+姱 > kuā; #59F1

+姲 > yàn; #59F2

+姳 > mĭng; #59F3

+姴 > liè; #59F4

+姵 > pèi; #59F5

+姶 > yăn; #59F6

+姷 > yòu; #59F7

+姸 > yán; #59F8

+姹 > chà; #59F9

+姺 > shēn; #59FA

+姻 > yīn; #59FB

+姼 > chĭ; #59FC

+姽 > gŭi; #59FD

+姾 > quān; #59FE

+姿 > zī; #59FF

+娀 > sōng; #5A00

+威 > wēi; #5A01

+娂 > hóng; #5A02

+娃 > wá; #5A03

+娄 > lóu; #5A04

+娅 > yà; #5A05

+娆 > răo; #5A06

+娇 > jiāo; #5A07

+娈 > luán; #5A08

+娉 > pīng; #5A09

+娊 > xiàn; #5A0A

+娋 > shào; #5A0B

+娌 > lĭ; #5A0C

+娍 > chéng; #5A0D

+娎 > xiào; #5A0E

+娏 > máng; #5A0F

+娐 > fu; #5A10

+娑 > sūo; #5A11

+娒 > wŭ; #5A12

+娓 > wĕi; #5A13

+娔 > kè; #5A14

+娕 > lài; #5A15

+娖 > chùo; #5A16

+娗 > dìng; #5A17

+娘 > niáng; #5A18

+娙 > xíng; #5A19

+娚 > nán; #5A1A

+娛 > yú; #5A1B

+娜 > núo; #5A1C

+娝 > pēi; #5A1D

+娞 > nĕi; #5A1E

+娟 > juān; #5A1F

+娠 > shēn; #5A20

+娡 > zhì; #5A21

+娢 > hán; #5A22

+娣 > dì; #5A23

+娤 > zhuāng; #5A24

+娥 > é; #5A25

+娦 > pín; #5A26

+娧 > tùi; #5A27

+娨 > hàn; #5A28

+娩 > miăn; #5A29

+娪 > wú; #5A2A

+娫 > yán; #5A2B

+娬 > wŭ; #5A2C

+娭 > xī; #5A2D

+娮 > yán; #5A2E

+娯 > yú; #5A2F

+娰 > sì; #5A30

+娱 > yú; #5A31

+娲 > wā; #5A32

+娴 > xián; #5A34

+娵 > jū; #5A35

+娶 > qŭ; #5A36

+娷 > shùi; #5A37

+娸 > qī; #5A38

+娹 > xián; #5A39

+娺 > zhūi; #5A3A

+娻 > dōng; #5A3B

+娼 > chāng; #5A3C

+娽 > lù; #5A3D

+娾 > ăi; #5A3E

+娿 > ē; #5A3F

+婀 > ē; #5A40

+婁 > lóu; #5A41

+婂 > mián; #5A42

+婃 > cóng; #5A43

+婄 > pŏu; #5A44

+婅 > jú; #5A45

+婆 > pó; #5A46

+婇 > căi; #5A47

+婈 > díng; #5A48

+婉 > wăn; #5A49

+婊 > biăo; #5A4A

+婋 > xiāo; #5A4B

+婌 > shŭ; #5A4C

+婍 > qĭ; #5A4D

+婎 > hūi; #5A4E

+婏 > fù; #5A4F

+婐 > ē; #5A50

+婑 > wŏ; #5A51

+婒 > tán; #5A52

+婓 > fēi; #5A53

+婔 > wei; #5A54

+婕 > jié; #5A55

+婖 > tiān; #5A56

+婗 > ní; #5A57

+婘 > quán; #5A58

+婙 > jìng; #5A59

+婚 > hūn; #5A5A

+婛 > jīng; #5A5B

+婜 > qiān; #5A5C

+婝 > diàn; #5A5D

+婞 > xìng; #5A5E

+婟 > hù; #5A5F

+婠 > wà; #5A60

+婡 > lái; #5A61

+婢 > bì; #5A62

+婣 > yīn; #5A63

+婤 > chōu; #5A64

+婥 > chùo; #5A65

+婦 > fù; #5A66

+婧 > jìng; #5A67

+婨 > lún; #5A68

+婩 > yàn; #5A69

+婪 > lán; #5A6A

+婫 > kūn; #5A6B

+婬 > yín; #5A6C

+婭 > yà; #5A6D

+婮 > ju; #5A6E

+婯 > lì; #5A6F

+婰 > diăn; #5A70

+婱 > xián; #5A71

+婳 > huà; #5A73

+婴 > yīng; #5A74

+婵 > chán; #5A75

+婶 > shĕn; #5A76

+婷 > tíng; #5A77

+婸 > dàng; #5A78

+婹 > yăo; #5A79

+婺 > wù; #5A7A

+婻 > nàn; #5A7B

+婼 > rùo; #5A7C

+婽 > jiă; #5A7D

+婾 > tōu; #5A7E

+婿 > xù; #5A7F

+媀 > yú; #5A80

+媁 > wēi; #5A81

+媂 > tí; #5A82

+媃 > róu; #5A83

+媄 > mĕi; #5A84

+媅 > dān; #5A85

+媆 > ruăn; #5A86

+媇 > qīn; #5A87

+媈 > hui; #5A88

+媉 > wū; #5A89

+媊 > qián; #5A8A

+媋 > chūn; #5A8B

+媌 > máo; #5A8C

+媍 > fù; #5A8D

+媎 > jiĕ; #5A8E

+媏 > duān; #5A8F

+媐 > xī; #5A90

+媑 > zhòng; #5A91

+媒 > méi; #5A92

+媓 > huáng; #5A93

+媔 > mián; #5A94

+媕 > ān; #5A95

+媖 > yīng; #5A96

+媗 > xuān; #5A97

+媘 > jie; #5A98

+媙 > wēi; #5A99

+媚 > mèi; #5A9A

+媛 > yuàn; #5A9B

+媜 > zhēn; #5A9C

+媝 > qīu; #5A9D

+媞 > tí; #5A9E

+媟 > xiè; #5A9F

+媠 > tŭo; #5AA0

+媡 > liàn; #5AA1

+媢 > mào; #5AA2

+媣 > răn; #5AA3

+媤 > sī; #5AA4

+媥 > piān; #5AA5

+媦 > wèi; #5AA6

+媧 > wā; #5AA7

+媨 > jìu; #5AA8

+媩 > hú; #5AA9

+媪 > ăo; #5AAA

+媭 > xū; #5AAD

+媮 > tōu; #5AAE

+媯 > gūi; #5AAF

+媰 > zōu; #5AB0

+媱 > yáo; #5AB1

+媲 > pì; #5AB2

+媳 > xí; #5AB3

+媴 > yuán; #5AB4

+媵 > yìng; #5AB5

+媶 > róng; #5AB6

+媷 > rù; #5AB7

+媸 > chī; #5AB8

+媹 > líu; #5AB9

+媺 > mĕi; #5ABA

+媻 > pán; #5ABB

+媼 > ăo; #5ABC

+媽 > mā; #5ABD

+媾 > gòu; #5ABE

+媿 > kùi; #5ABF

+嫀 > qín; #5AC0

+嫁 > jià; #5AC1

+嫂 > săo; #5AC2

+嫃 > zhēn; #5AC3

+嫄 > yuán; #5AC4

+嫅 > chā; #5AC5

+嫆 > yóng; #5AC6

+嫇 > míng; #5AC7

+嫈 > yīng; #5AC8

+嫉 > jí; #5AC9

+嫊 > sù; #5ACA

+嫋 > niăo; #5ACB

+嫌 > xián; #5ACC

+嫍 > tāo; #5ACD

+嫎 > páng; #5ACE

+嫏 > láng; #5ACF

+嫐 > năo; #5AD0

+嫑 > báo; #5AD1

+嫒 > ài; #5AD2

+嫓 > pì; #5AD3

+嫔 > pín; #5AD4

+嫕 > yì; #5AD5

+嫖 > piào; #5AD6

+嫗 > yù; #5AD7

+嫘 > léi; #5AD8

+嫙 > xuán; #5AD9

+嫚 > màn; #5ADA

+嫛 > yī; #5ADB

+嫜 > zhāng; #5ADC

+嫝 > kāng; #5ADD

+嫞 > yóng; #5ADE

+嫟 > nì; #5ADF

+嫠 > lí; #5AE0

+嫡 > dí; #5AE1

+嫢 > gūi; #5AE2

+嫣 > yān; #5AE3

+嫤 > jìn; #5AE4

+嫥 > zhuān; #5AE5

+嫦 > cháng; #5AE6

+嫧 > cè; #5AE7

+嫨 > hān; #5AE8

+嫩 > nèn; #5AE9

+嫪 > lào; #5AEA

+嫫 > mó; #5AEB

+嫬 > zhē; #5AEC

+嫭 > hù; #5AED

+嫮 > hù; #5AEE

+嫯 > ào; #5AEF

+嫰 > nèn; #5AF0

+嫱 > qiáng; #5AF1

+嫳 > piè; #5AF3

+嫴 > gū; #5AF4

+嫵 > wŭ; #5AF5

+嫶 > jiáo; #5AF6

+嫷 > tŭo; #5AF7

+嫸 > zhăn; #5AF8

+嫹 > máo; #5AF9

+嫺 > xián; #5AFA

+嫻 > xián; #5AFB

+嫼 > mò; #5AFC

+嫽 > liáo; #5AFD

+嫾 > lián; #5AFE

+嫿 > huà; #5AFF

+嬀 > gūi; #5B00

+嬁 > dēng; #5B01

+嬂 > zhī; #5B02

+嬃 > xū; #5B03

+嬄 > yi; #5B04

+嬅 > huá; #5B05

+嬆 > xī; #5B06

+嬇 > hùi; #5B07

+嬈 > răo; #5B08

+嬉 > xī; #5B09

+嬊 > yàn; #5B0A

+嬋 > chán; #5B0B

+嬌 > jiāo; #5B0C

+嬍 > mĕi; #5B0D

+嬎 > fàn; #5B0E

+嬏 > fān; #5B0F

+嬐 > xiān; #5B10

+嬑 > yì; #5B11

+嬒 > wèi; #5B12

+嬓 > jiào; #5B13

+嬔 > fù; #5B14

+嬕 > shì; #5B15

+嬖 > bì; #5B16

+嬗 > shàn; #5B17

+嬘 > sùi; #5B18

+嬙 > qiáng; #5B19

+嬚 > liăn; #5B1A

+嬛 > huán; #5B1B

+嬜 > xin; #5B1C

+嬝 > niăo; #5B1D

+嬞 > dŏng; #5B1E

+嬟 > yì; #5B1F

+嬠 > cán; #5B20

+嬡 > ài; #5B21

+嬢 > niáng; #5B22

+嬣 > néng; #5B23

+嬤 > mā; #5B24

+嬥 > tiăo; #5B25

+嬦 > chóu; #5B26

+嬧 > jìn; #5B27

+嬨 > cí; #5B28

+嬩 > yú; #5B29

+嬪 > pín; #5B2A

+嬫 > yong; #5B2B

+嬬 > xū; #5B2C

+嬭 > năi; #5B2D

+嬮 > yān; #5B2E

+嬯 > tái; #5B2F

+嬰 > yīng; #5B30

+嬱 > cán; #5B31

+嬲 > niăo; #5B32

+嬳 > wo; #5B33

+嬴 > yíng; #5B34

+嬵 > mián; #5B35

+嬷 > mā; #5B37

+嬸 > shĕn; #5B38

+嬹 > xìng; #5B39

+嬺 > nì; #5B3A

+嬻 > dú; #5B3B

+嬼 > lĭu; #5B3C

+嬽 > yuān; #5B3D

+嬾 > lăn; #5B3E

+嬿 > yàn; #5B3F

+孀 > shuāng; #5B40

+孁 > líng; #5B41

+孂 > jiăo; #5B42

+孃 > niáng; #5B43

+孄 > lăn; #5B44

+孅 > xiān; #5B45

+孆 > yīng; #5B46

+孇 > shuāng; #5B47

+孈 > shuāi; #5B48

+孉 > quán; #5B49

+孊 > mĭ; #5B4A

+孋 > lí; #5B4B

+孌 > luán; #5B4C

+孍 > yán; #5B4D

+孎 > zhŭ; #5B4E

+孏 > lăn; #5B4F

+子 > zĭ; #5B50

+孑 > jié; #5B51

+孒 > jué; #5B52

+孓 > jué; #5B53

+孔 > kŏng; #5B54

+孕 > yùn; #5B55

+孖 > zī; #5B56

+字 > zì; #5B57

+存 > cún; #5B58

+孙 > sūn; #5B59

+孚 > fú; #5B5A

+孛 > bèi; #5B5B

+孜 > zī; #5B5C

+孝 > xiào; #5B5D

+孞 > xìn; #5B5E

+孟 > mèng; #5B5F

+孠 > sì; #5B60

+孡 > tāi; #5B61

+孢 > bāo; #5B62

+季 > jì; #5B63

+孤 > gū; #5B64

+孥 > nú; #5B65

+学 > xué; #5B66

+孨 > zhuăn; #5B68

+孩 > hái; #5B69

+孪 > luán; #5B6A

+孫 > sūn; #5B6B

+孬 > huài; #5B6C

+孭 > miē; #5B6D

+孮 > cóng; #5B6E

+孯 > qiān; #5B6F

+孰 > shú; #5B70

+孱 > chán; #5B71

+孲 > yā; #5B72

+孳 > zī; #5B73

+孴 > nĭ; #5B74

+孵 > fū; #5B75

+孶 > zī; #5B76

+孷 > lí; #5B77

+學 > xué; #5B78

+孹 > bò; #5B79

+孺 > rú; #5B7A

+孻 > lái; #5B7B

+孼 > niè; #5B7C

+孽 > niè; #5B7D

+孾 > yīng; #5B7E

+孿 > luán; #5B7F

+宀 > mián; #5B80

+宁 > zhù; #5B81

+宂 > rŏng; #5B82

+它 > tā; #5B83

+宄 > gŭi; #5B84

+宅 > zhái; #5B85

+宆 > qíong; #5B86

+宇 > yŭ; #5B87

+守 > shŏu; #5B88

+安 > ān; #5B89

+宊 > tú; #5B8A

+宋 > sòng; #5B8B

+完 > wán; #5B8C

+宍 > ròu; #5B8D

+宎 > yăo; #5B8E

+宏 > hóng; #5B8F

+宐 > yí; #5B90

+宑 > jĭng; #5B91

+宒 > zhūn; #5B92

+宓 > mì; #5B93

+宔 > zhŭ; #5B94

+宕 > dàng; #5B95

+宖 > hóng; #5B96

+宗 > zōng; #5B97

+官 > guān; #5B98

+宙 > zhòu; #5B99

+定 > dìng; #5B9A

+宛 > wăn; #5B9B

+宜 > yí; #5B9C

+宝 > băo; #5B9D

+实 > shí; #5B9E

+実 > shí; #5B9F

+宠 > chŏng; #5BA0

+审 > shĕn; #5BA1

+客 > kè; #5BA2

+宣 > xuān; #5BA3

+室 > shì; #5BA4

+宥 > yòu; #5BA5

+宦 > huàn; #5BA6

+宧 > yí; #5BA7

+宨 > tiăo; #5BA8

+宩 > shĭ; #5BA9

+宪 > xiàn; #5BAA

+宫 > gōng; #5BAB

+宬 > chéng; #5BAC

+宭 > qún; #5BAD

+宮 > gōng; #5BAE

+宯 > xiāo; #5BAF

+宰 > zăi; #5BB0

+宱 > zhà; #5BB1

+宲 > băo; #5BB2

+害 > hài; #5BB3

+宴 > yàn; #5BB4

+宵 > xiāo; #5BB5

+家 > jiā; #5BB6

+宷 > shĕn; #5BB7

+宸 > chén; #5BB8

+容 > róng; #5BB9

+宺 > huăng; #5BBA

+宻 > mì; #5BBB

+宼 > kòu; #5BBC

+宽 > kuān; #5BBD

+宾 > bīn; #5BBE

+宿 > sù; #5BBF

+寀 > cài; #5BC0

+寁 > zăn; #5BC1

+寂 > jì; #5BC2

+寃 > yuān; #5BC3

+寄 > jì; #5BC4

+寅 > yín; #5BC5

+密 > mì; #5BC6

+寇 > kòu; #5BC7

+寈 > qīng; #5BC8

+寉 > què; #5BC9

+寊 > zhēn; #5BCA

+寋 > jiăn; #5BCB

+富 > fù; #5BCC

+寍 > níng; #5BCD

+寎 > bìng; #5BCE

+寏 > huán; #5BCF

+寐 > mèi; #5BD0

+寑 > qĭn; #5BD1

+寒 > hán; #5BD2

+寓 > yù; #5BD3

+寔 > shí; #5BD4

+寕 > níng; #5BD5

+寖 > qìn; #5BD6

+寗 > níng; #5BD7

+寘 > zhì; #5BD8

+寙 > yŭ; #5BD9

+寚 > băo; #5BDA

+寛 > kuān; #5BDB

+寜 > níng; #5BDC

+寝 > qĭn; #5BDD

+寞 > mò; #5BDE

+察 > chá; #5BDF

+寠 > jù; #5BE0

+寡 > guă; #5BE1

+寢 > qĭn; #5BE2

+寣 > hū; #5BE3

+寤 > wù; #5BE4

+寥 > liáo; #5BE5

+實 > shí; #5BE6

+寧 > zhù; #5BE7

+寨 > zhài; #5BE8

+審 > shĕn; #5BE9

+寪 > wĕi; #5BEA

+寫 > xiĕ; #5BEB

+寬 > kuān; #5BEC

+寭 > hùi; #5BED

+寮 > liáo; #5BEE

+寯 > jùn; #5BEF

+寰 > huán; #5BF0

+寱 > yì; #5BF1

+寲 > yí; #5BF2

+寳 > băo; #5BF3

+寴 > qìn; #5BF4

+寵 > chŏng; #5BF5

+寶 > băo; #5BF6

+寷 > fēng; #5BF7

+寸 > cùn; #5BF8

+对 > dùi; #5BF9

+寺 > sì; #5BFA

+寻 > xún; #5BFB

+导 > dăo; #5BFC

+寽 > lǜ; #5BFD

+対 > dùi; #5BFE

+寿 > shòu; #5BFF

+尀 > pŏ; #5C00

+封 > fēng; #5C01

+専 > zhuān; #5C02

+尃 > fū; #5C03

+射 > shè; #5C04

+尅 > kè; #5C05

+将 > jiāng; #5C06

+將 > jiāng; #5C07

+專 > zhuān; #5C08

+尉 > wèi; #5C09

+尊 > zūn; #5C0A

+尋 > xún; #5C0B

+尌 > shù; #5C0C

+對 > dùi; #5C0D

+導 > dăo; #5C0E

+小 > xiăo; #5C0F

+尐 > jī; #5C10

+少 > shăo; #5C11

+尒 > ĕr; #5C12

+尓 > ĕr; #5C13

+尔 > ĕr; #5C14

+尕 > gă; #5C15

+尖 > jiān; #5C16

+尗 > shú; #5C17

+尘 > chén; #5C18

+尙 > shàng; #5C19

+尚 > shàng; #5C1A

+尛 > mo; #5C1B

+尜 > gá; #5C1C

+尝 > cháng; #5C1D

+尞 > liào; #5C1E

+尟 > xiăn; #5C1F

+尠 > xiăn; #5C20

+尢 > wāng; #5C22

+尣 > wāng; #5C23

+尤 > yóu; #5C24

+尥 > liào; #5C25

+尦 > liào; #5C26

+尧 > yáo; #5C27

+尨 > máng; #5C28

+尩 > wāng; #5C29

+尪 > wāng; #5C2A

+尫 > wāng; #5C2B

+尬 > gà; #5C2C

+尭 > yáo; #5C2D

+尮 > dùo; #5C2E

+尯 > kùi; #5C2F

+尰 > zhŏng; #5C30

+就 > jìu; #5C31

+尲 > gān; #5C32

+尳 > gŭ; #5C33

+尴 > gān; #5C34

+尵 > túi; #5C35

+尶 > gān; #5C36

+尷 > gān; #5C37

+尸 > shī; #5C38

+尹 > yĭn; #5C39

+尺 > chĭ; #5C3A

+尻 > kāo; #5C3B

+尼 > ní; #5C3C

+尽 > jĭn; #5C3D

+尾 > wĕi; #5C3E

+尿 > niào; #5C3F

+局 > jú; #5C40

+屁 > pì; #5C41

+层 > céng; #5C42

+屃 > xì; #5C43

+屄 > bī; #5C44

+居 > jū; #5C45

+屆 > jiè; #5C46

+屇 > tián; #5C47

+屈 > qū; #5C48

+屉 > tì; #5C49

+届 > jiè; #5C4A

+屋 > wū; #5C4B

+屌 > diăo; #5C4C

+屍 > shī; #5C4D

+屎 > shĭ; #5C4E

+屏 > píng; #5C4F

+屐 > jī; #5C50

+屑 > xiè; #5C51

+屒 > chén; #5C52

+屓 > xì; #5C53

+屔 > ní; #5C54

+展 > zhăn; #5C55

+屖 > xī; #5C56

+屘 > măn; #5C58

+屙 > ē; #5C59

+屚 > lòu; #5C5A

+屛 > píng; #5C5B

+屜 > tì; #5C5C

+屝 > fèi; #5C5D

+属 > shŭ; #5C5E

+屟 > xiè; #5C5F

+屠 > tú; #5C60

+屡 > lǚ; #5C61

+屢 > lǚ; #5C62

+屣 > xĭ; #5C63

+層 > céng; #5C64

+履 > lǚ; #5C65

+屦 > jù; #5C66

+屧 > xiè; #5C67

+屨 > jù; #5C68

+屩 > juē; #5C69

+屪 > liáo; #5C6A

+屫 > jué; #5C6B

+屬 > shŭ; #5C6C

+屭 > xì; #5C6D

+屮 > chè; #5C6E

+屯 > tún; #5C6F

+屰 > nì; #5C70

+山 > shān; #5C71

+屳 > xiān; #5C73

+屴 > lì; #5C74

+屵 > xuē; #5C75

+屸 > lóng; #5C78

+屹 > yì; #5C79

+屺 > qĭ; #5C7A

+屻 > rèn; #5C7B

+屼 > wù; #5C7C

+屽 > hàn; #5C7D

+屾 > shēn; #5C7E

+屿 > yŭ; #5C7F

+岀 > chū; #5C80

+岁 > sùi; #5C81

+岂 > qĭ; #5C82

+岄 > yuè; #5C84

+岅 > băn; #5C85

+岆 > yăo; #5C86

+岇 > áng; #5C87

+岈 > yá; #5C88

+岉 > wù; #5C89

+岊 > jié; #5C8A

+岋 > è; #5C8B

+岌 > jí; #5C8C

+岍 > qiān; #5C8D

+岎 > fēn; #5C8E

+岏 > yuán; #5C8F

+岐 > qí; #5C90

+岑 > cén; #5C91

+岒 > qián; #5C92

+岓 > qí; #5C93

+岔 > chà; #5C94

+岕 > jiè; #5C95

+岖 > qū; #5C96

+岗 > găng; #5C97

+岘 > xiàn; #5C98

+岙 > ào; #5C99

+岚 > lán; #5C9A

+岛 > dăo; #5C9B

+岜 > bā; #5C9C

+岝 > zùo; #5C9D

+岞 > zùo; #5C9E

+岟 > yăng; #5C9F

+岠 > jù; #5CA0

+岡 > gāng; #5CA1

+岢 > kĕ; #5CA2

+岣 > gŏu; #5CA3

+岤 > xuè; #5CA4

+岥 > bēi; #5CA5

+岦 > lì; #5CA6

+岧 > tiáo; #5CA7

+岨 > jū; #5CA8

+岩 > yán; #5CA9

+岪 > fú; #5CAA

+岫 > xìu; #5CAB

+岬 > jiă; #5CAC

+岭 > líng; #5CAD

+岮 > túo; #5CAE

+岯 > pēi; #5CAF

+岰 > yŏu; #5CB0

+岱 > dài; #5CB1

+岲 > kuàng; #5CB2

+岳 > yuè; #5CB3

+岴 > qū; #5CB4

+岵 > hù; #5CB5

+岶 > pò; #5CB6

+岷 > mín; #5CB7

+岸 > àn; #5CB8

+岹 > tiáo; #5CB9

+岺 > líng; #5CBA

+岻 > chí; #5CBB

+岽 > dōng; #5CBD

+岿 > kūi; #5CBF

+峀 > xìu; #5CC0

+峁 > măo; #5CC1

+峂 > tóng; #5CC2

+峃 > xué; #5CC3

+峄 > yì; #5CC4

+峆 > hē; #5CC6

+峇 > kē; #5CC7

+峈 > lùo; #5CC8

+峉 > ē; #5CC9

+峊 > fù; #5CCA

+峋 > xún; #5CCB

+峌 > dié; #5CCC

+峍 > lù; #5CCD

+峎 > ān; #5CCE

+峏 > ĕr; #5CCF

+峐 > gāi; #5CD0

+峑 > quán; #5CD1

+峒 > tóng; #5CD2

+峓 > yí; #5CD3

+峔 > mŭ; #5CD4

+峕 > shí; #5CD5

+峖 > ān; #5CD6

+峗 > wéi; #5CD7

+峘 > hū; #5CD8

+峙 > zhì; #5CD9

+峚 > mì; #5CDA

+峛 > lĭ; #5CDB

+峜 > jī; #5CDC

+峝 > tóng; #5CDD

+峞 > wéi; #5CDE

+峟 > yòu; #5CDF

+峡 > xiá; #5CE1

+峢 > lĭ; #5CE2

+峣 > yáo; #5CE3

+峤 > jiào; #5CE4

+峥 > zhēng; #5CE5

+峦 > luán; #5CE6

+峧 > jiāo; #5CE7

+峨 > é; #5CE8

+峩 > é; #5CE9

+峪 > yù; #5CEA

+峫 > yé; #5CEB

+峬 > bū; #5CEC

+峭 > qiào; #5CED

+峮 > qūn; #5CEE

+峯 > fēng; #5CEF

+峰 > fēng; #5CF0

+峱 > náo; #5CF1

+峲 > lĭ; #5CF2

+峳 > yóu; #5CF3

+峴 > xiàn; #5CF4

+峵 > hóng; #5CF5

+島 > dăo; #5CF6

+峷 > shēn; #5CF7

+峸 > chéng; #5CF8

+峹 > tú; #5CF9

+峺 > gĕng; #5CFA

+峻 > jùn; #5CFB

+峼 > hào; #5CFC

+峽 > xiá; #5CFD

+峾 > yīn; #5CFE

+峿 > yŭ; #5CFF

+崀 > làng; #5D00

+崁 > kăn; #5D01

+崂 > láo; #5D02

+崃 > lái; #5D03

+崄 > xiăn; #5D04

+崅 > què; #5D05

+崆 > kōng; #5D06

+崇 > chóng; #5D07

+崈 > chóng; #5D08

+崉 > tà; #5D09

+崊 > lin; #5D0A

+崋 > huá; #5D0B

+崌 > jū; #5D0C

+崍 > lái; #5D0D

+崎 > qí; #5D0E

+崏 > mín; #5D0F

+崐 > kūn; #5D10

+崑 > kūn; #5D11

+崒 > zú; #5D12

+崓 > gù; #5D13

+崔 > cūi; #5D14

+崕 > yá; #5D15

+崖 > yá; #5D16

+崗 > găng; #5D17

+崘 > lún; #5D18

+崙 > lún; #5D19

+崚 > léng; #5D1A

+崛 > jué; #5D1B

+崜 > dūo; #5D1C

+崝 > zhēng; #5D1D

+崞 > gūo; #5D1E

+崟 > yín; #5D1F

+崠 > dōng; #5D20

+崡 > hán; #5D21

+崢 > zhēng; #5D22

+崣 > wĕi; #5D23

+崤 > yáo; #5D24

+崥 > pĭ; #5D25

+崦 > yān; #5D26

+崧 > sōng; #5D27

+崨 > jié; #5D28

+崩 > bēng; #5D29

+崪 > zú; #5D2A

+崫 > jué; #5D2B

+崬 > dōng; #5D2C

+崭 > zhăn; #5D2D

+崮 > gù; #5D2E

+崯 > yín; #5D2F

+崱 > zé; #5D31

+崲 > huáng; #5D32

+崳 > yú; #5D33

+崴 > wēi; #5D34

+崵 > yáng; #5D35

+崶 > fēng; #5D36

+崷 > qíu; #5D37

+崸 > dùn; #5D38

+崹 > tí; #5D39

+崺 > yĭ; #5D3A

+崻 > zhì; #5D3B

+崼 > shì; #5D3C

+崽 > zăi; #5D3D

+崾 > yăo; #5D3E

+崿 > è; #5D3F

+嵀 > zhù; #5D40

+嵁 > kān; #5D41

+嵂 > lǜ; #5D42

+嵃 > yăn; #5D43

+嵄 > mĕi; #5D44

+嵅 > gān; #5D45

+嵆 > jī; #5D46

+嵇 > jī; #5D47

+嵈 > huăn; #5D48

+嵉 > tíng; #5D49

+嵊 > shèng; #5D4A

+嵋 > méi; #5D4B

+嵌 > qiàn; #5D4C

+嵍 > wù; #5D4D

+嵎 > yú; #5D4E

+嵏 > zōng; #5D4F

+嵐 > lán; #5D50

+嵑 > jué; #5D51

+嵒 > yán; #5D52

+嵓 > yán; #5D53

+嵔 > wĕi; #5D54

+嵕 > zōng; #5D55

+嵖 > chá; #5D56

+嵗 > sùi; #5D57

+嵘 > róng; #5D58

+嵚 > qīn; #5D5A

+嵛 > yú; #5D5B

+嵝 > lŏu; #5D5D

+嵞 > tú; #5D5E

+嵟 > dūi; #5D5F

+嵠 > xī; #5D60

+嵡 > wēng; #5D61

+嵢 > cāng; #5D62

+嵣 > dāng; #5D63

+嵤 > hóng; #5D64

+嵥 > jié; #5D65

+嵦 > ái; #5D66

+嵧 > líu; #5D67

+嵨 > wŭ; #5D68

+嵩 > sōng; #5D69

+嵪 > qiāo; #5D6A

+嵫 > zī; #5D6B

+嵬 > wéi; #5D6C

+嵭 > bēng; #5D6D

+嵮 > diān; #5D6E

+嵯 > cúo; #5D6F

+嵰 > qiăn; #5D70

+嵱 > yŏng; #5D71

+嵲 > niè; #5D72

+嵳 > cúo; #5D73

+嵴 > jí; #5D74

+嵷 > sŏng; #5D77

+嵸 > zōng; #5D78

+嵹 > jiàng; #5D79

+嵺 > liáo; #5D7A

+嵻 > kang; #5D7B

+嵼 > chăn; #5D7C

+嵽 > dié; #5D7D

+嵾 > cēn; #5D7E

+嵿 > dĭng; #5D7F

+嶀 > tū; #5D80

+嶁 > lŏu; #5D81

+嶂 > zhàng; #5D82

+嶃 > zhăn; #5D83

+嶄 > zhăn; #5D84

+嶅 > áo; #5D85

+嶆 > cáo; #5D86

+嶇 > qū; #5D87

+嶈 > qiāng; #5D88

+嶉 > zūi; #5D89

+嶊 > zŭi; #5D8A

+嶋 > dăo; #5D8B

+嶌 > dăo; #5D8C

+嶍 > xí; #5D8D

+嶎 > yù; #5D8E

+嶏 > bó; #5D8F

+嶐 > lóng; #5D90

+嶑 > xiăng; #5D91

+嶒 > céng; #5D92

+嶓 > bō; #5D93

+嶔 > qīn; #5D94

+嶕 > jiāo; #5D95

+嶖 > yăn; #5D96

+嶗 > láo; #5D97

+嶘 > zhàn; #5D98

+嶙 > lín; #5D99

+嶚 > liáo; #5D9A

+嶛 > liáo; #5D9B

+嶜 > jīn; #5D9C

+嶝 > dèng; #5D9D

+嶞 > dùo; #5D9E

+嶟 > zūn; #5D9F

+嶠 > jiào; #5DA0

+嶡 > gùi; #5DA1

+嶢 > yáo; #5DA2

+嶣 > qiáo; #5DA3

+嶤 > yáo; #5DA4

+嶥 > jué; #5DA5

+嶦 > zhān; #5DA6

+嶧 > yì; #5DA7

+嶨 > xué; #5DA8

+嶩 > náo; #5DA9

+嶪 > yè; #5DAA

+嶫 > yè; #5DAB

+嶬 > yí; #5DAC

+嶭 > è; #5DAD

+嶮 > xiăn; #5DAE

+嶯 > jí; #5DAF

+嶰 > xiè; #5DB0

+嶱 > kĕ; #5DB1

+嶲 > xī; #5DB2

+嶳 > dì; #5DB3

+嶴 > ào; #5DB4

+嶵 > zŭi; #5DB5

+嶷 > nì; #5DB7

+嶸 > róng; #5DB8

+嶹 > dăo; #5DB9

+嶺 > lĭng; #5DBA

+嶻 > zá; #5DBB

+嶼 > yŭ; #5DBC

+嶽 > yuè; #5DBD

+嶾 > yĭn; #5DBE

+巀 > jiē; #5DC0

+巁 > lì; #5DC1

+巂 > sŭi; #5DC2

+巃 > lóng; #5DC3

+巄 > lóng; #5DC4

+巅 > diān; #5DC5

+巆 > yíng; #5DC6

+巇 > xī; #5DC7

+巈 > jú; #5DC8

+巉 > chán; #5DC9

+巊 > yĭng; #5DCA

+巋 > kūi; #5DCB

+巌 > yán; #5DCC

+巍 > wēi; #5DCD

+巎 > náo; #5DCE

+巏 > quán; #5DCF

+巐 > chăo; #5DD0

+巑 > cuán; #5DD1

+巒 > luán; #5DD2

+巓 > diān; #5DD3

+巔 > diān; #5DD4

+巖 > yán; #5DD6

+巗 > yán; #5DD7

+巘 > yăn; #5DD8

+巙 > náo; #5DD9

+巚 > yăn; #5DDA

+巛 > chuān; #5DDB

+巜 > gùi; #5DDC

+川 > chuān; #5DDD

+州 > zhōu; #5DDE

+巟 > huāng; #5DDF

+巠 > jīng; #5DE0

+巡 > xún; #5DE1

+巢 > cháo; #5DE2

+巣 > cháo; #5DE3

+巤 > liē; #5DE4

+工 > gōng; #5DE5

+左 > zŭo; #5DE6

+巧 > qiăo; #5DE7

+巨 > jù; #5DE8

+巩 > gŏng; #5DE9

+巫 > wū; #5DEB

+差 > chāi; #5DEE

+巯 > qíu; #5DEF

+巰 > qíu; #5DF0

+己 > jĭ; #5DF1

+已 > yĭ; #5DF2

+巳 > sì; #5DF3

+巴 > bā; #5DF4

+巵 > zhī; #5DF5

+巶 > zhāo; #5DF6

+巷 > xiàng; #5DF7

+巸 > yí; #5DF8

+巹 > jĭn; #5DF9

+巺 > xùn; #5DFA

+巻 > juàn; #5DFB

+巽 > xùn; #5DFD

+巾 > jīn; #5DFE

+巿 > fú; #5DFF

+帀 > zā; #5E00

+币 > bì; #5E01

+市 > shì; #5E02

+布 > bù; #5E03

+帄 > dīng; #5E04

+帅 > shuài; #5E05

+帆 > fān; #5E06

+帇 > niè; #5E07

+师 > shī; #5E08

+帉 > fēn; #5E09

+帊 > pà; #5E0A

+帋 > zhĭ; #5E0B

+希 > xī; #5E0C

+帍 > hù; #5E0D

+帎 > dàn; #5E0E

+帏 > wéi; #5E0F

+帐 > zhàng; #5E10

+帑 > tăng; #5E11

+帒 > dài; #5E12

+帓 > mà; #5E13

+帔 > pèi; #5E14

+帕 > pà; #5E15

+帖 > tiē; #5E16

+帗 > fú; #5E17

+帘 > lián; #5E18

+帙 > zhì; #5E19

+帚 > zhŏu; #5E1A

+帛 > bó; #5E1B

+帜 > zhì; #5E1C

+帝 > dì; #5E1D

+帞 > mò; #5E1E

+帟 > yì; #5E1F

+帠 > yì; #5E20

+帡 > píng; #5E21

+帢 > qià; #5E22

+帣 > juàn; #5E23

+帤 > rú; #5E24

+帥 > shuài; #5E25

+带 > dài; #5E26

+帧 > zhèng; #5E27

+帨 > shùi; #5E28

+帩 > qiào; #5E29

+帪 > zhēn; #5E2A

+師 > shī; #5E2B

+帬 > qún; #5E2C

+席 > xí; #5E2D

+帮 > bāng; #5E2E

+帯 > dài; #5E2F

+帰 > gūi; #5E30

+帱 > chóu; #5E31

+帲 > píng; #5E32

+帳 > zhàng; #5E33

+帴 > shā; #5E34

+帵 > wān; #5E35

+帶 > dài; #5E36

+帷 > wéi; #5E37

+常 > cháng; #5E38

+帹 > shà; #5E39

+帺 > qí; #5E3A

+帻 > zé; #5E3B

+帼 > gúo; #5E3C

+帽 > mào; #5E3D

+帾 > dŭ; #5E3E

+帿 > hóu; #5E3F

+幀 > zhèng; #5E40

+幁 > xū; #5E41

+幂 > mì; #5E42

+幃 > wéi; #5E43

+幄 > wò; #5E44

+幅 > fú; #5E45

+幆 > yì; #5E46

+幇 > bāng; #5E47

+幈 > píng; #5E48

+幊 > gōng; #5E4A

+幋 > pán; #5E4B

+幌 > huăng; #5E4C

+幍 > dāo; #5E4D

+幎 > mì; #5E4E

+幏 > jiā; #5E4F

+幐 > téng; #5E50

+幑 > hūi; #5E51

+幒 > zhōng; #5E52

+幓 > shān; #5E53

+幔 > màn; #5E54

+幕 > mù; #5E55

+幖 > biāo; #5E56

+幗 > gúo; #5E57

+幘 > zé; #5E58

+幙 > mù; #5E59

+幚 > bāng; #5E5A

+幛 > zhàng; #5E5B

+幜 > jĭong; #5E5C

+幝 > chăn; #5E5D

+幞 > fú; #5E5E

+幟 > zhì; #5E5F

+幠 > hū; #5E60

+幡 > fān; #5E61

+幢 > chuáng; #5E62

+幣 > bì; #5E63

+幦 > mì; #5E66

+幧 > qiāo; #5E67

+幨 > chān; #5E68

+幩 > fén; #5E69

+幪 > méng; #5E6A

+幫 > bāng; #5E6B

+幬 > chóu; #5E6C

+幭 > miè; #5E6D

+幮 > chú; #5E6E

+幯 > jié; #5E6F

+幰 > xiăn; #5E70

+幱 > lán; #5E71

+干 > gān; #5E72

+平 > píng; #5E73

+年 > nián; #5E74

+幵 > qiān; #5E75

+并 > bìng; #5E76

+幷 > bìng; #5E77

+幸 > xìng; #5E78

+幹 > gàn; #5E79

+幺 > yāo; #5E7A

+幻 > huàn; #5E7B

+幼 > yòu; #5E7C

+幽 > yōu; #5E7D

+幾 > jĭ; #5E7E

+广 > yăn; #5E7F

+庀 > pĭ; #5E80

+庁 > tīng; #5E81

+庂 > zè; #5E82

+広 > guăng; #5E83

+庄 > zhuāng; #5E84

+庅 > mo; #5E85

+庆 > qìng; #5E86

+庇 > bì; #5E87

+庈 > qín; #5E88

+庉 > dùn; #5E89

+床 > chuáng; #5E8A

+庋 > gŭi; #5E8B

+庌 > yă; #5E8C

+庍 > bài; #5E8D

+庎 > jiè; #5E8E

+序 > xù; #5E8F

+庐 > lú; #5E90

+庑 > wŭ; #5E91

+库 > kù; #5E93

+应 > yìng; #5E94

+底 > dĭ; #5E95

+庖 > páo; #5E96

+店 > diàn; #5E97

+庘 > yā; #5E98

+庙 > miào; #5E99

+庚 > gēng; #5E9A

+庛 > cī; #5E9B

+府 > fŭ; #5E9C

+庝 > tóng; #5E9D

+庞 > páng; #5E9E

+废 > fèi; #5E9F

+庠 > xiáng; #5EA0

+庡 > yĭ; #5EA1

+庢 > zhì; #5EA2

+庣 > tiāo; #5EA3

+庤 > zhì; #5EA4

+庥 > xīu; #5EA5

+度 > dù; #5EA6

+座 > zùo; #5EA7

+庨 > xiāo; #5EA8

+庩 > tú; #5EA9

+庪 > gŭi; #5EAA

+庫 > kù; #5EAB

+庬 > páng; #5EAC

+庭 > tíng; #5EAD

+庮 > yŏu; #5EAE

+庯 > bū; #5EAF

+庰 > dīng; #5EB0

+庱 > chĕng; #5EB1

+庲 > lái; #5EB2

+庳 > bēi; #5EB3

+庴 > jí; #5EB4

+庵 > ān; #5EB5

+庶 > shù; #5EB6

+康 > kāng; #5EB7

+庸 > yōng; #5EB8

+庹 > tŭo; #5EB9

+庺 > sōng; #5EBA

+庻 > shù; #5EBB

+庼 > qĭng; #5EBC

+庽 > yù; #5EBD

+庾 > yŭ; #5EBE

+庿 > miào; #5EBF

+廀 > sōu; #5EC0

+廁 > cè; #5EC1

+廂 > xiāng; #5EC2

+廃 > fèi; #5EC3

+廄 > jìu; #5EC4

+廅 > hé; #5EC5

+廆 > hùi; #5EC6

+廇 > lìu; #5EC7

+廈 > shà; #5EC8

+廉 > lián; #5EC9

+廊 > láng; #5ECA

+廋 > sōu; #5ECB

+廌 > jiàn; #5ECC

+廍 > pŏu; #5ECD

+廎 > qĭng; #5ECE

+廏 > jìu; #5ECF

+廐 > jìu; #5ED0

+廑 > qín; #5ED1

+廒 > áo; #5ED2

+廓 > kùo; #5ED3

+廔 > lóu; #5ED4

+廕 > yīn; #5ED5

+廖 > liào; #5ED6

+廗 > dài; #5ED7

+廘 > lù; #5ED8

+廙 > yì; #5ED9

+廚 > chú; #5EDA

+廛 > chán; #5EDB

+廜 > tū; #5EDC

+廝 > sī; #5EDD

+廞 > xīn; #5EDE

+廟 > miào; #5EDF

+廠 > chăng; #5EE0

+廡 > wŭ; #5EE1

+廢 > fèi; #5EE2

+廣 > guăng; #5EE3

+廥 > kuài; #5EE5

+廦 > bì; #5EE6

+廧 > qiáng; #5EE7

+廨 > xiè; #5EE8

+廩 > lĭn; #5EE9

+廪 > lĭn; #5EEA

+廫 > liáo; #5EEB

+廬 > lú; #5EEC

+廮 > yíng; #5EEE

+廯 > xiān; #5EEF

+廰 > tīng; #5EF0

+廱 > yōng; #5EF1

+廲 > lí; #5EF2

+廳 > tīng; #5EF3

+廴 > yĭn; #5EF4

+廵 > xún; #5EF5

+延 > yán; #5EF6

+廷 > tíng; #5EF7

+廸 > dí; #5EF8

+廹 > pò; #5EF9

+建 > jiàn; #5EFA

+廻 > húi; #5EFB

+廼 > năi; #5EFC

+廽 > húi; #5EFD

+廾 > gòng; #5EFE

+廿 > niàn; #5EFF

+开 > kāi; #5F00

+弁 > biàn; #5F01

+异 > yì; #5F02

+弃 > qì; #5F03

+弄 > nòng; #5F04

+弅 > fén; #5F05

+弆 > jŭ; #5F06

+弇 > yăn; #5F07

+弈 > yì; #5F08

+弉 > zàng; #5F09

+弊 > bì; #5F0A

+弋 > yì; #5F0B

+弌 > yī; #5F0C

+弍 > èr; #5F0D

+弎 > sān; #5F0E

+式 > shì; #5F0F

+弐 > èr; #5F10

+弑 > shì; #5F11

+弒 > shì; #5F12

+弓 > gōng; #5F13

+弔 > diào; #5F14

+引 > yĭn; #5F15

+弖 > hù; #5F16

+弗 > fú; #5F17

+弘 > hóng; #5F18

+弙 > wū; #5F19

+弚 > túi; #5F1A

+弛 > chí; #5F1B

+弜 > jiàng; #5F1C

+弝 > bà; #5F1D

+弞 > shĕn; #5F1E

+弟 > dì; #5F1F

+张 > zhāng; #5F20

+弡 > jué; #5F21

+弢 > tāo; #5F22

+弣 > fŭ; #5F23

+弤 > dĭ; #5F24

+弥 > mí; #5F25

+弦 > xián; #5F26

+弧 > hú; #5F27

+弨 > chāo; #5F28

+弩 > nŭ; #5F29

+弪 > jìng; #5F2A

+弫 > zhĕn; #5F2B

+弬 > yí; #5F2C

+弭 > mĭ; #5F2D

+弮 > quān; #5F2E

+弯 > wān; #5F2F

+弰 > shāo; #5F30

+弱 > rùo; #5F31

+弲 > xuān; #5F32

+弳 > jìng; #5F33

+弴 > dūn; #5F34

+張 > zhāng; #5F35

+弶 > jiàng; #5F36

+強 > qiáng; #5F37

+弸 > péng; #5F38

+弹 > dàn; #5F39

+强 > qiáng; #5F3A

+弻 > bì; #5F3B

+弼 > bì; #5F3C

+弽 > shè; #5F3D

+弾 > dàn; #5F3E

+弿 > jiăn; #5F3F

+彀 > gòu; #5F40

+彂 > fā; #5F42

+彃 > bì; #5F43

+彄 > kōu; #5F44

+彆 > biè; #5F46

+彇 > xiāo; #5F47

+彈 > dàn; #5F48

+彉 > kùo; #5F49

+彊 > qiáng; #5F4A

+彋 > hóng; #5F4B

+彌 > mí; #5F4C

+彍 > kùo; #5F4D

+彎 > wān; #5F4E

+彏 > jué; #5F4F

+彐 > jì; #5F50

+彑 > jì; #5F51

+归 > gūi; #5F52

+当 > dāng; #5F53

+彔 > lù; #5F54

+录 > lù; #5F55

+彖 > tuàn; #5F56

+彗 > hùi; #5F57

+彘 > zhì; #5F58

+彙 > hùi; #5F59

+彚 > hùi; #5F5A

+彛 > yí; #5F5B

+彜 > yí; #5F5C

+彝 > yí; #5F5D

+彞 > yí; #5F5E

+彟 > hùo; #5F5F

+彠 > hùo; #5F60

+彡 > shān; #5F61

+形 > xíng; #5F62

+彣 > wén; #5F63

+彤 > tóng; #5F64

+彥 > yàn; #5F65

+彦 > yàn; #5F66

+彧 > yù; #5F67

+彨 > chī; #5F68

+彩 > căi; #5F69

+彪 > biāo; #5F6A

+彫 > diāo; #5F6B

+彬 > bīn; #5F6C

+彭 > péng; #5F6D

+彮 > yŏng; #5F6E

+彯 > piāo; #5F6F

+彰 > zhāng; #5F70

+影 > yĭng; #5F71

+彲 > chī; #5F72

+彳 > chì; #5F73

+彴 > zhúo; #5F74

+彵 > tŭo; #5F75

+彶 > jí; #5F76

+彷 > páng; #5F77

+彸 > zhōng; #5F78

+役 > yì; #5F79

+彺 > wáng; #5F7A

+彻 > chè; #5F7B

+彼 > bĭ; #5F7C

+彽 > chí; #5F7D

+彾 > lĭng; #5F7E

+彿 > fú; #5F7F

+往 > wăng; #5F80

+征 > zhēng; #5F81

+徂 > cú; #5F82

+徃 > wăng; #5F83

+径 > jìng; #5F84

+待 > dài; #5F85

+徆 > xī; #5F86

+徇 > xùn; #5F87

+很 > hĕn; #5F88

+徉 > yáng; #5F89

+徊 > huái; #5F8A

+律 > lǜ; #5F8B

+後 > hòu; #5F8C

+徍 > wā; #5F8D

+徎 > chĕng; #5F8E

+徏 > zhì; #5F8F

+徐 > xú; #5F90

+徑 > jìng; #5F91

+徒 > tú; #5F92

+従 > cóng; #5F93

+徕 > lái; #5F95

+徖 > cóng; #5F96

+得 > dé; #5F97

+徘 > pái; #5F98

+徙 > xĭ; #5F99

+徛 > qì; #5F9B

+徜 > cháng; #5F9C

+徝 > zhì; #5F9D

+從 > cóng; #5F9E

+徟 > zhōu; #5F9F

+徠 > lái; #5FA0

+御 > yù; #5FA1

+徢 > xiè; #5FA2

+徣 > jiè; #5FA3

+徤 > jiàn; #5FA4

+徥 > chí; #5FA5

+徦 > jiă; #5FA6

+徧 > biàn; #5FA7

+徨 > huáng; #5FA8

+復 > fù; #5FA9

+循 > xún; #5FAA

+徫 > wĕi; #5FAB

+徬 > páng; #5FAC

+徭 > yáo; #5FAD

+微 > wēi; #5FAE

+徯 > xī; #5FAF

+徰 > zhēng; #5FB0

+徱 > piào; #5FB1

+徲 > chí; #5FB2

+徳 > dé; #5FB3

+徴 > zhēng; #5FB4

+徵 > zhēng; #5FB5

+徶 > biè; #5FB6

+德 > dé; #5FB7

+徸 > chōng; #5FB8

+徹 > chè; #5FB9

+徺 > jiăo; #5FBA

+徻 > wèi; #5FBB

+徼 > jiào; #5FBC

+徽 > hūi; #5FBD

+徾 > méi; #5FBE

+徿 > lòng; #5FBF

+忀 > xiāng; #5FC0

+忁 > bào; #5FC1

+忂 > qú; #5FC2

+心 > xīn; #5FC3

+忄 > shù' 'xīn' 'páng; #5FC4

+必 > bì; #5FC5

+忆 > yì; #5FC6

+忇 > lè; #5FC7

+忈 > rén; #5FC8

+忉 > dāo; #5FC9

+忊 > dìng; #5FCA

+忋 > găi; #5FCB

+忌 > jì; #5FCC

+忍 > rĕn; #5FCD

+忎 > rén; #5FCE

+忏 > chàn; #5FCF

+忐 > tăn; #5FD0

+忑 > tè; #5FD1

+忒 > tè; #5FD2

+忓 > gān; #5FD3

+忔 > qì; #5FD4

+忕 > shì; #5FD5

+忖 > cŭn; #5FD6

+志 > zhì; #5FD7

+忘 > wàng; #5FD8

+忙 > máng; #5FD9

+忚 > xī; #5FDA

+忛 > fán; #5FDB

+応 > yīng; #5FDC

+忝 > tiăn; #5FDD

+忞 > mín; #5FDE

+忟 > mín; #5FDF

+忠 > zhōng; #5FE0

+忡 > chōng; #5FE1

+忢 > wù; #5FE2

+忣 > jí; #5FE3

+忤 > wŭ; #5FE4

+忥 > xì; #5FE5

+忦 > yè; #5FE6

+忧 > yōu; #5FE7

+忨 > wàn; #5FE8

+忩 > cōng; #5FE9

+忪 > zhōng; #5FEA

+快 > kuài; #5FEB

+忬 > yù; #5FEC

+忭 > biàn; #5FED

+忮 > zhì; #5FEE

+忯 > qí; #5FEF

+忰 > cùi; #5FF0

+忱 > chén; #5FF1

+忲 > tài; #5FF2

+忳 > tún; #5FF3

+忴 > qián; #5FF4

+念 > niàn; #5FF5

+忶 > hún; #5FF6

+忷 > xīong; #5FF7

+忸 > nĭu; #5FF8

+忹 > wăng; #5FF9

+忺 > xiān; #5FFA

+忻 > xīn; #5FFB

+忼 > kāng; #5FFC

+忽 > hū; #5FFD

+忾 > kài; #5FFE

+忿 > fèn; #5FFF

+怀 > huái; #6000

+态 > tài; #6001

+怂 > sŏng; #6002

+怃 > wŭ; #6003

+怄 > òu; #6004

+怅 > chàng; #6005

+怆 > chuàng; #6006

+怇 > jù; #6007

+怈 > yì; #6008

+怉 > băo; #6009

+怊 > chāo; #600A

+怋 > mín; #600B

+怌 > pēi; #600C

+怍 > zùo; #600D

+怎 > zĕn; #600E

+怏 > yàng; #600F

+怐 > kòu; #6010

+怑 > bàn; #6011

+怒 > nù; #6012

+怓 > náo; #6013

+怔 > zhēng; #6014

+怕 > pà; #6015

+怖 > bù; #6016

+怗 > tiē; #6017

+怘 > gù; #6018

+怙 > hù; #6019

+怚 > jù; #601A

+怛 > dá; #601B

+怜 > lián; #601C

+思 > sī; #601D

+怞 > chōu; #601E

+怟 > dì; #601F

+怠 > dài; #6020

+怡 > yí; #6021

+怢 > tú; #6022

+怣 > yóu; #6023

+怤 > fū; #6024

+急 > jí; #6025

+怦 > pēng; #6026

+性 > xìng; #6027

+怨 > yuàn; #6028

+怩 > ní; #6029

+怪 > guài; #602A

+怫 > fú; #602B

+怬 > xì; #602C

+怭 > bì; #602D

+怮 > yōu; #602E

+怯 > qiè; #602F

+怰 > xuàn; #6030

+怱 > cōng; #6031

+怲 > bĭng; #6032

+怳 > huăng; #6033

+怴 > xù; #6034

+怵 > chù; #6035

+怶 > pī; #6036

+怷 > xī; #6037

+怸 > xī; #6038

+怹 > tān; #6039

+总 > zŏng; #603B

+怼 > dùi; #603C

+怿 > yì; #603F

+恀 > chĭ; #6040

+恁 > rèn; #6041

+恂 > xún; #6042

+恃 > shì; #6043

+恄 > xì; #6044

+恅 > lăo; #6045

+恆 > héng; #6046

+恇 > kuāng; #6047

+恈 > mú; #6048

+恉 > zhĭ; #6049

+恊 > xié; #604A

+恋 > liàn; #604B

+恌 > tiāo; #604C

+恍 > huăng; #604D

+恎 > dié; #604E

+恏 > hăo; #604F

+恐 > kŏng; #6050

+恑 > gŭi; #6051

+恒 > héng; #6052

+恓 > xī; #6053

+恔 > xiào; #6054

+恕 > shù; #6055

+恖 > sī; #6056

+恗 > kuă; #6057

+恘 > qīu; #6058

+恙 > yàng; #6059

+恚 > hùi; #605A

+恛 > húi; #605B

+恜 > chì; #605C

+恝 > jiá; #605D

+恞 > yí; #605E

+恟 > xīong; #605F

+恠 > guài; #6060

+恡 > lìn; #6061

+恢 > hūi; #6062

+恣 > zì; #6063

+恤 > xù; #6064

+恥 > chĭ; #6065

+恦 > xiàng; #6066

+恧 > nǜ; #6067

+恨 > hèn; #6068

+恩 > ēn; #6069

+恪 > kè; #606A

+恫 > tōng; #606B

+恬 > tián; #606C

+恭 > gōng; #606D

+恮 > quán; #606E

+息 > xī; #606F

+恰 > qià; #6070

+恱 > yuè; #6071

+恲 > pēng; #6072

+恳 > kĕn; #6073

+恴 > dé; #6074

+恵 > hùi; #6075

+恶 > è; #6076

+恸 > tòng; #6078

+恹 > yàn; #6079

+恺 > kăi; #607A

+恻 > cè; #607B

+恼 > năo; #607C

+恽 > yùn; #607D

+恾 > máng; #607E

+恿 > yŏng; #607F

+悀 > yŏng; #6080

+悁 > yuān; #6081

+悂 > pī; #6082

+悃 > kŭn; #6083

+悄 > qiăo; #6084

+悅 > yuè; #6085

+悆 > yù; #6086

+悇 > yù; #6087

+悈 > jiè; #6088

+悉 > xī; #6089

+悊 > zhé; #608A

+悋 > lìn; #608B

+悌 > tì; #608C

+悍 > hàn; #608D

+悎 > hào; #608E

+悏 > qiè; #608F

+悐 > tì; #6090

+悑 > bù; #6091

+悒 > yì; #6092

+悓 > qiàn; #6093

+悔 > hŭi; #6094

+悕 > xī; #6095

+悖 > bèi; #6096

+悗 > mán; #6097

+悘 > yī; #6098

+悙 > hēng; #6099

+悚 > sŏng; #609A

+悛 > quān; #609B

+悜 > chĕng; #609C

+悝 > hūi; #609D

+悞 > wù; #609E

+悟 > wù; #609F

+悠 > yōu; #60A0

+悡 > lí; #60A1

+悢 > liàng; #60A2

+患 > huàn; #60A3

+悤 > cōng; #60A4

+悥 > yì; #60A5

+悦 > yuè; #60A6

+悧 > lì; #60A7

+您 > nín; #60A8

+悩 > năo; #60A9

+悪 > è; #60AA

+悫 > què; #60AB

+悬 > xuán; #60AC

+悭 > qiān; #60AD

+悮 > wù; #60AE

+悯 > mĭn; #60AF

+悰 > cóng; #60B0

+悱 > fĕi; #60B1

+悲 > bēi; #60B2

+悳 > dúo; #60B3

+悴 > cùi; #60B4

+悵 > chàng; #60B5

+悶 > mèn; #60B6

+悷 > lì; #60B7

+悸 > jì; #60B8

+悹 > guàn; #60B9

+悺 > guàn; #60BA

+悻 > xìng; #60BB

+悼 > dào; #60BC

+悽 > qī; #60BD

+悾 > kōng; #60BE

+悿 > tiăn; #60BF

+惀 > lún; #60C0

+惁 > xī; #60C1

+惂 > kăn; #60C2

+惃 > kūn; #60C3

+惄 > nì; #60C4

+情 > qíng; #60C5

+惆 > chóu; #60C6

+惇 > dūn; #60C7

+惈 > gŭo; #60C8

+惉 > chān; #60C9

+惊 > liáng; #60CA

+惋 > wăn; #60CB

+惌 > yuān; #60CC

+惍 > jīn; #60CD

+惎 > jì; #60CE

+惏 > lín; #60CF

+惐 > yù; #60D0

+惑 > hùo; #60D1

+惒 > hé; #60D2

+惓 > quán; #60D3

+惔 > tán; #60D4

+惕 > tì; #60D5

+惖 > tì; #60D6

+惗 > niē; #60D7

+惘 > wăng; #60D8

+惙 > chùo; #60D9

+惚 > bū; #60DA

+惛 > hūn; #60DB

+惜 > xī; #60DC

+惝 > tăng; #60DD

+惞 > xīn; #60DE

+惟 > wéi; #60DF

+惠 > hùi; #60E0

+惡 > è; #60E1

+惢 > rŭi; #60E2

+惣 > zŏng; #60E3

+惤 > jiān; #60E4

+惥 > yŏng; #60E5

+惦 > diàn; #60E6

+惧 > jù; #60E7

+惨 > căn; #60E8

+惩 > chéng; #60E9

+惪 > dé; #60EA

+惫 > bèi; #60EB

+惬 > qiè; #60EC

+惭 > cán; #60ED

+惮 > dàn; #60EE

+惯 > guàn; #60EF

+惰 > dùo; #60F0

+惱 > năo; #60F1

+惲 > yùn; #60F2

+想 > xiăng; #60F3

+惴 > zhùi; #60F4

+惵 > diè; #60F5

+惶 > huáng; #60F6

+惷 > chŭn; #60F7

+惸 > qíong; #60F8

+惹 > rĕ; #60F9

+惺 > xīng; #60FA

+惻 > cè; #60FB

+惼 > biăn; #60FC

+惽 > hūn; #60FD

+惾 > zōng; #60FE

+惿 > tí; #60FF

+愀 > qiăo; #6100

+愁 > chóu; #6101

+愂 > bèi; #6102

+愃 > xuān; #6103

+愄 > wēi; #6104

+愅 > gé; #6105

+愆 > qiān; #6106

+愇 > wĕi; #6107

+愈 > yù; #6108

+愉 > yú; #6109

+愊 > bì; #610A

+愋 > xuān; #610B

+愌 > huàn; #610C

+愍 > mĭn; #610D

+愎 > bì; #610E

+意 > yì; #610F

+愐 > miăn; #6110

+愑 > yŏng; #6111

+愒 > kài; #6112

+愓 > dàng; #6113

+愔 > yīn; #6114

+愕 > è; #6115

+愖 > chén; #6116

+愗 > mòu; #6117

+愘 > kè; #6118

+愙 > kè; #6119

+愚 > yú; #611A

+愛 > ài; #611B

+愜 > qiè; #611C

+愝 > yăn; #611D

+愞 > nùo; #611E

+感 > găn; #611F

+愠 > yùn; #6120

+愡 > zŏng; #6121

+愢 > sāi; #6122

+愣 > léng; #6123

+愤 > fèn; #6124

+愦 > kùi; #6126

+愧 > kùi; #6127

+愨 > què; #6128

+愩 > gōng; #6129

+愪 > yún; #612A

+愫 > sù; #612B

+愬 > sù; #612C

+愭 > qí; #612D

+愮 > yáo; #612E

+愯 > sŏng; #612F

+愰 > huăng; #6130

+愱 > jí; #6131

+愲 > gŭ; #6132

+愳 > jù; #6133

+愴 > chuàng; #6134

+愵 > nì; #6135

+愶 > xié; #6136

+愷 > kăi; #6137

+愸 > zhĕng; #6138

+愹 > yŏng; #6139

+愺 > căo; #613A

+愻 > sùn; #613B

+愼 > shèn; #613C

+愽 > bó; #613D

+愾 > kài; #613E

+愿 > yuàn; #613F

+慀 > xié; #6140

+慁 > hùn; #6141

+慂 > yŏng; #6142

+慃 > yăng; #6143

+慄 > lì; #6144

+慅 > sāo; #6145

+慆 > tāo; #6146

+慇 > yīn; #6147

+慈 > cí; #6148

+慉 > xù; #6149

+慊 > qiàn; #614A

+態 > tài; #614B

+慌 > huāng; #614C

+慍 > yùn; #614D

+慎 > shèn; #614E

+慏 > mĭng; #614F

+慑 > shè; #6151

+慒 > cóng; #6152

+慓 > piào; #6153

+慔 > mò; #6154

+慕 > mù; #6155

+慖 > gúo; #6156

+慗 > chì; #6157

+慘 > căn; #6158

+慙 > cán; #6159

+慚 > cán; #615A

+慛 > cúi; #615B

+慜 > mĭn; #615C

+慝 > tè; #615D

+慞 > zhāng; #615E

+慟 > tòng; #615F

+慠 > ào; #6160

+慡 > shuăng; #6161

+慢 > màn; #6162

+慣 > guàn; #6163

+慤 > què; #6164

+慥 > zào; #6165

+慦 > jìu; #6166

+慧 > hùi; #6167

+慨 > kăi; #6168

+慩 > lián; #6169

+慪 > òu; #616A

+慫 > sŏng; #616B

+慬 > jĭn; #616C

+慭 > yìn; #616D

+慮 > lǜ; #616E

+慯 > shāng; #616F

+慰 > wèi; #6170

+慱 > tuán; #6171

+慲 > mán; #6172

+慳 > qiān; #6173

+慴 > shè; #6174

+慵 > yōng; #6175

+慶 > qìng; #6176

+慷 > kāng; #6177

+慸 > dì; #6178

+慹 > zhí; #6179

+慺 > lóu; #617A

+慻 > juàn; #617B

+慼 > qī; #617C

+慽 > qī; #617D

+慾 > yù; #617E

+慿 > píng; #617F

+憀 > liáo; #6180

+憁 > cōng; #6181

+憂 > yōu; #6182

+憃 > chōng; #6183

+憄 > zhì; #6184

+憅 > tòng; #6185

+憆 > chēng; #6186

+憇 > qì; #6187

+憈 > qū; #6188

+憉 > péng; #6189

+憊 > bèi; #618A

+憋 > biē; #618B

+憌 > chún; #618C

+憍 > jiāo; #618D

+憎 > zēng; #618E

+憏 > chì; #618F

+憐 > lián; #6190

+憑 > píng; #6191

+憒 > kùi; #6192

+憓 > hùi; #6193

+憔 > qiáo; #6194

+憕 > chéng; #6195

+憖 > yìn; #6196

+憗 > yìn; #6197

+憘 > xĭ; #6198

+憙 > xĭ; #6199

+憚 > dàn; #619A

+憛 > tán; #619B

+憜 > dŭo; #619C

+憝 > dùi; #619D

+憞 > dùi; #619E

+憟 > sù; #619F

+憠 > jué; #61A0

+憡 > cè; #61A1

+憢 > xiāo; #61A2

+憣 > fán; #61A3

+憤 > fèn; #61A4

+憥 > láo; #61A5

+憦 > lào; #61A6

+憧 > chōng; #61A7

+憨 > hān; #61A8

+憩 > qì; #61A9

+憪 > xián; #61AA

+憫 > mĭn; #61AB

+憬 > jĭng; #61AC

+憭 > liăo; #61AD

+憮 > wŭ; #61AE

+憯 > căn; #61AF

+憰 > jué; #61B0

+憱 > cù; #61B1

+憲 > xiàn; #61B2

+憳 > tăn; #61B3

+憴 > shéng; #61B4

+憵 > pī; #61B5

+憶 > yì; #61B6

+憷 > chŭ; #61B7

+憸 > xiān; #61B8

+憹 > náo; #61B9

+憺 > dàn; #61BA

+憻 > tăn; #61BB

+憼 > jĭng; #61BC

+憽 > sōng; #61BD

+憾 > hàn; #61BE

+憿 > jiāo; #61BF

+懀 > wài; #61C0

+懁 > huán; #61C1

+懂 > dŏng; #61C2

+懃 > qín; #61C3

+懄 > qín; #61C4

+懅 > qú; #61C5

+懆 > căo; #61C6

+懇 > kĕn; #61C7

+懈 > xiè; #61C8

+應 > yìng; #61C9

+懊 > ào; #61CA

+懋 > mào; #61CB

+懌 > yì; #61CC

+懍 > lĭn; #61CD

+懎 > sè; #61CE

+懏 > jùn; #61CF

+懐 > huái; #61D0

+懑 > mèn; #61D1

+懒 > lăn; #61D2

+懓 > ài; #61D3

+懔 > lĭn; #61D4

+懕 > yān; #61D5

+懖 > guā; #61D6

+懗 > xià; #61D7

+懘 > chì; #61D8

+懙 > yŭ; #61D9

+懚 > yìn; #61DA

+懛 > dāi; #61DB

+懜 > mèng; #61DC

+懝 > ài; #61DD

+懞 > méng; #61DE

+懟 > dùi; #61DF

+懠 > qí; #61E0

+懡 > mŏ; #61E1

+懢 > lán; #61E2

+懣 > mèn; #61E3

+懤 > chóu; #61E4

+懥 > zhì; #61E5

+懦 > nùo; #61E6

+懧 > nùo; #61E7

+懨 > yān; #61E8

+懩 > yăng; #61E9

+懪 > bó; #61EA

+懫 > zhí; #61EB

+懬 > kuàng; #61EC

+懭 > kuàng; #61ED

+懮 > yŏu; #61EE

+懯 > fū; #61EF

+懰 > líu; #61F0

+懱 > miè; #61F1

+懲 > chéng; #61F2

+懴 > chàn; #61F4

+懵 > méng; #61F5

+懶 > lăn; #61F6

+懷 > huái; #61F7

+懸 > xuán; #61F8

+懹 > ràng; #61F9

+懺 > chàn; #61FA

+懻 > jì; #61FB

+懼 > jù; #61FC

+懽 > huān; #61FD

+懾 > shè; #61FE

+懿 > yì; #61FF

+戀 > liàn; #6200

+戁 > năn; #6201

+戂 > mí; #6202

+戃 > tăng; #6203

+戄 > jué; #6204

+戅 > gàng; #6205

+戆 > gàng; #6206

+戇 > gàng; #6207

+戈 > gē; #6208

+戉 > yuè; #6209

+戊 > wù; #620A

+戋 > jiān; #620B

+戌 > xū; #620C

+戍 > shù; #620D

+戎 > róng; #620E

+戏 > xì; #620F

+成 > chéng; #6210

+我 > wŏ; #6211

+戒 > jiè; #6212

+戓 > gē; #6213

+戔 > jiān; #6214

+戕 > qiāng; #6215

+或 > hùo; #6216

+戗 > qiāng; #6217

+战 > zhàn; #6218

+戙 > dòng; #6219

+戚 > qī; #621A

+戛 > jiá; #621B

+戜 > dié; #621C

+戝 > zéi; #621D

+戞 > jiá; #621E

+戟 > jĭ; #621F

+戠 > shì; #6220

+戡 > kān; #6221

+戢 > jí; #6222

+戣 > kúi; #6223

+戤 > gài; #6224

+戥 > dĕng; #6225

+戦 > zhàn; #6226

+戧 > chuāng; #6227

+戨 > gē; #6228

+戩 > jiăn; #6229

+截 > jié; #622A

+戫 > yù; #622B

+戬 > jiăn; #622C

+戭 > yăn; #622D

+戮 > lù; #622E

+戯 > xì; #622F

+戰 > zhàn; #6230

+戱 > xì; #6231

+戲 > xì; #6232

+戳 > chūo; #6233

+戴 > dài; #6234

+戵 > qú; #6235

+戶 > hù; #6236

+户 > hù; #6237

+戸 > hù; #6238

+戹 > è; #6239

+戺 > shì; #623A

+戻 > lì; #623B

+戼 > măo; #623C

+戽 > hù; #623D

+戾 > lì; #623E

+房 > fáng; #623F

+所 > sŭo; #6240

+扁 > biăn; #6241

+扂 > diàn; #6242

+扃 > jīong; #6243

+扄 > shăng; #6244

+扅 > yí; #6245

+扆 > yĭ; #6246

+扇 > shàn; #6247

+扈 > hù; #6248

+扉 > fēi; #6249

+扊 > yăn; #624A

+手 > shŏu; #624B

+扌 > t̄' 'shŏu' 'páng; #624C

+才 > cái; #624D

+扎 > zhā; #624E

+扏 > qíu; #624F

+扐 > lè; #6250

+扑 > bū; #6251

+扒 > bā; #6252

+打 > dă; #6253

+扔 > rēng; #6254

+払 > fú; #6255

+扗 > zài; #6257

+托 > tūo; #6258

+扙 > zhàng; #6259

+扚 > diāo; #625A

+扛 > káng; #625B

+扜 > yū; #625C

+扝 > kū; #625D

+扞 > hàn; #625E

+扟 > shēn; #625F

+扠 > chā; #6260

+扡 > yĭ; #6261

+扢 > gŭ; #6262

+扣 > kòu; #6263

+扤 > wù; #6264

+扥 > tūo; #6265

+扦 > qiān; #6266

+执 > zhí; #6267

+扨 > rèn; #6268

+扩 > kùo; #6269

+扪 > mén; #626A

+扫 > săo; #626B

+扬 > yáng; #626C

+扭 > nĭu; #626D

+扮 > bàn; #626E

+扯 > chĕ; #626F

+扰 > răo; #6270

+扱 > xī; #6271

+扲 > qián; #6272

+扳 > bān; #6273

+扴 > jiá; #6274

+扵 > yú; #6275

+扶 > fú; #6276

+扷 > ào; #6277

+扸 > xī; #6278

+批 > pī; #6279

+扺 > zhĭ; #627A

+扻 > zì; #627B

+扼 > è; #627C

+扽 > dùn; #627D

+找 > zhăo; #627E

+承 > chéng; #627F

+技 > jì; #6280

+抁 > yăn; #6281

+抂 > kuáng; #6282

+抃 > biàn; #6283

+抄 > chāo; #6284

+抅 > jū; #6285

+抆 > wèn; #6286

+抇 > hú; #6287

+抈 > yuè; #6288

+抉 > jué; #6289

+把 > bă; #628A

+抋 > qìn; #628B

+抌 > zhĕn; #628C

+抍 > zhĕng; #628D

+抎 > yŭn; #628E

+抏 > wán; #628F

+抐 > nù; #6290

+抑 > yì; #6291

+抒 > shū; #6292

+抓 > zhuā; #6293

+抔 > póu; #6294

+投 > tóu; #6295

+抖 > dŏu; #6296

+抗 > kàng; #6297

+折 > zhé; #6298

+抙 > póu; #6299

+抚 > fŭ; #629A

+抛 > pāo; #629B

+抜 > bá; #629C

+抝 > ăo; #629D

+択 > zé; #629E

+抟 > tuán; #629F

+抠 > kōu; #62A0

+抡 > lún; #62A1

+抢 > qiăng; #62A2

+护 > hù; #62A4

+报 > bào; #62A5

+抦 > bĭng; #62A6

+抧 > zhĭ; #62A7

+抨 > pēng; #62A8

+抩 > tān; #62A9

+抪 > pū; #62AA

+披 > pī; #62AB

+抬 > tái; #62AC

+抭 > yăo; #62AD

+抮 > zhĕn; #62AE

+抯 > zhā; #62AF

+抰 > yăng; #62B0

+抱 > bào; #62B1

+抲 > hē; #62B2

+抳 > nĭ; #62B3

+抴 > yì; #62B4

+抵 > dĭ; #62B5

+抶 > chì; #62B6

+抷 > pī; #62B7

+抸 > zā; #62B8

+抹 > mŏ; #62B9

+抺 > mŏ; #62BA

+抻 > shèn; #62BB

+押 > yā; #62BC

+抽 > chōu; #62BD

+抾 > qū; #62BE

+抿 > mĭn; #62BF

+拀 > chù; #62C0

+拁 > jiā; #62C1

+拂 > fú; #62C2

+拃 > zhăn; #62C3

+拄 > zhŭ; #62C4

+担 > dàn; #62C5

+拆 > chāi; #62C6

+拇 > mŭ; #62C7

+拈 > nián; #62C8

+拉 > lā; #62C9

+拊 > fŭ; #62CA

+拋 > pāo; #62CB

+拌 > bàn; #62CC

+拍 > pāi; #62CD

+拎 > līng; #62CE

+拏 > ná; #62CF

+拐 > guăi; #62D0

+拑 > qián; #62D1

+拒 > jù; #62D2

+拓 > tùo; #62D3

+拔 > bá; #62D4

+拕 > tūo; #62D5

+拖 > tūo; #62D6

+拗 > ăo; #62D7

+拘 > jū; #62D8

+拙 > zhúo; #62D9

+拚 > pàn; #62DA

+招 > zhāo; #62DB

+拜 > bài; #62DC

+拝 > bài; #62DD

+拞 > dĭ; #62DE

+拟 > nĭ; #62DF

+拠 > jù; #62E0

+拡 > kùo; #62E1

+拢 > lŏng; #62E2

+拣 > jiăn; #62E3

+拥 > yŏng; #62E5

+拦 > lán; #62E6

+拧 > níng; #62E7

+拨 > bō; #62E8

+择 > zé; #62E9

+拪 > qiān; #62EA

+拫 > hén; #62EB

+括 > guā; #62EC

+拭 > shì; #62ED

+拮 > jié; #62EE

+拯 > zhĕng; #62EF

+拰 > nĭn; #62F0

+拱 > gŏng; #62F1

+拲 > gŏng; #62F2

+拳 > quán; #62F3

+拴 > shuān; #62F4

+拵 > cún; #62F5

+拶 > zăn; #62F6

+拷 > kăo; #62F7

+拸 > chĭ; #62F8

+拹 > xié; #62F9

+拺 > cè; #62FA

+拻 > hūi; #62FB

+拼 > pīn; #62FC

+拽 > zhuāi; #62FD

+拾 > shí; #62FE

+拿 > ná; #62FF

+挀 > bò; #6300

+持 > chí; #6301

+挂 > guà; #6302

+挃 > zhì; #6303

+挄 > kùo; #6304

+挅 > dŭo; #6305

+挆 > dŭo; #6306

+指 > zhĭ; #6307

+挈 > qiè; #6308

+按 > àn; #6309

+挊 > nòng; #630A

+挋 > zhèn; #630B

+挌 > gé; #630C

+挍 > jiào; #630D

+挎 > kū; #630E

+挏 > dòng; #630F

+挐 > rú; #6310

+挑 > tiāo; #6311

+挒 > liè; #6312

+挓 > zhā; #6313

+挔 > lǚ; #6314

+挕 > dié; #6315

+挖 > wā; #6316

+挗 > jué; #6317

+挙 > jŭ; #6319

+挚 > zhì; #631A

+挛 > luán; #631B

+挜 > yà; #631C

+挝 > zhuā; #631D

+挞 > tà; #631E

+挟 > xié; #631F

+挠 > náo; #6320

+挡 > dăng; #6321

+挢 > jiăo; #6322

+挣 > zhēng; #6323

+挤 > jĭ; #6324

+挥 > hūi; #6325

+挦 > xún; #6326

+挨 > āi; #6328

+挩 > tūo; #6329

+挪 > núo; #632A

+挫 > cùo; #632B

+挬 > bó; #632C

+挭 > gĕng; #632D

+挮 > tĭ; #632E

+振 > zhèn; #632F

+挰 > chéng; #6330

+挱 > sūo; #6331

+挲 > sūo; #6332

+挳 > kēng; #6333

+挴 > mĕi; #6334

+挵 > lòng; #6335

+挶 > jú; #6336

+挷 > péng; #6337

+挸 > jiăn; #6338

+挹 > yì; #6339

+挺 > tĭng; #633A

+挻 > shān; #633B

+挼 > nùo; #633C

+挽 > wăn; #633D

+挾 > xié; #633E

+挿 > chā; #633F

+捀 > fēng; #6340

+捁 > jiăo; #6341

+捂 > wŭ; #6342

+捃 > jùn; #6343

+捄 > jìu; #6344

+捅 > tŏng; #6345

+捆 > kŭn; #6346

+捇 > hùo; #6347

+捈 > tú; #6348

+捉 > zhūo; #6349

+捊 > póu; #634A

+捋 > lè; #634B

+捌 > bā; #634C

+捍 > hàn; #634D

+捎 > shāo; #634E

+捏 > niē; #634F

+捐 > juān; #6350

+捑 > zé; #6351

+捒 > sŏng; #6352

+捓 > yé; #6353

+捔 > jué; #6354

+捕 > bŭ; #6355

+捖 > huán; #6356

+捗 > bù; #6357

+捘 > zùn; #6358

+捙 > yì; #6359

+捚 > zhāi; #635A

+捛 > lǚ; #635B

+捜 > sōu; #635C

+捝 > tūo; #635D

+捞 > lāo; #635E

+损 > sŭn; #635F

+捠 > bāng; #6360

+捡 > jiăn; #6361

+换 > huàn; #6362

+捣 > dăo; #6363

+捥 > wàn; #6365

+捦 > qín; #6366

+捧 > pĕng; #6367

+捨 > shĕ; #6368

+捩 > liè; #6369

+捪 > mín; #636A

+捫 > mén; #636B

+捬 > fŭ; #636C

+捭 > băi; #636D

+据 > jù; #636E

+捯 > dăo; #636F

+捰 > wŏ; #6370

+捱 > ái; #6371

+捲 > juăn; #6372

+捳 > yuè; #6373

+捴 > zŏng; #6374

+捵 > chĕn; #6375

+捶 > chúi; #6376

+捷 > jié; #6377

+捸 > tū; #6378

+捹 > bèn; #6379

+捺 > nà; #637A

+捻 > niăn; #637B

+捼 > núo; #637C

+捽 > zú; #637D

+捾 > wò; #637E

+捿 > xī; #637F

+掀 > xiān; #6380

+掁 > chéng; #6381

+掂 > diān; #6382

+掃 > săo; #6383

+掄 > lún; #6384

+掅 > qìng; #6385

+掆 > gāng; #6386

+掇 > dúo; #6387

+授 > shòu; #6388

+掉 > diào; #6389

+掊 > póu; #638A

+掋 > dĭ; #638B

+掌 > zhăng; #638C

+掍 > gŭn; #638D

+掎 > jĭ; #638E

+掏 > tāo; #638F

+掐 > qiā; #6390

+掑 > qí; #6391

+排 > pái; #6392

+掓 > shú; #6393

+掔 > qiān; #6394

+掕 > lìng; #6395

+掖 > yì; #6396

+掗 > yà; #6397

+掘 > jué; #6398

+掙 > zhēng; #6399

+掚 > liăng; #639A

+掛 > guà; #639B

+掜 > yĭ; #639C

+掝 > hùo; #639D

+掞 > shàn; #639E

+掟 > zhĕng; #639F

+掠 > lǜe; #63A0

+採 > căi; #63A1

+探 > tàn; #63A2

+掣 > chè; #63A3

+掤 > bīng; #63A4

+接 > jiē; #63A5

+掦 > tì; #63A6

+控 > kòng; #63A7

+推 > tūi; #63A8

+掩 > yăn; #63A9

+措 > cùo; #63AA

+掫 > zōu; #63AB

+掬 > jú; #63AC

+掭 > tiàn; #63AD

+掮 > qián; #63AE

+掯 > kèn; #63AF

+掰 > bāi; #63B0

+掱 > shŏu; #63B1

+掲 > jiē; #63B2

+掳 > lŭ; #63B3

+掴 > gúo; #63B4

+掷 > zhí; #63B7

+掸 > dăn; #63B8

+掺 > xiān; #63BA

+掻 > sāo; #63BB

+掼 > guàn; #63BC

+掽 > pèng; #63BD

+掾 > yuàn; #63BE

+掿 > nùo; #63BF

+揀 > jiăn; #63C0

+揁 > zhēn; #63C1

+揂 > jīu; #63C2

+揃 > jiān; #63C3

+揄 > yú; #63C4

+揅 > yán; #63C5

+揆 > kúi; #63C6

+揇 > năn; #63C7

+揈 > hōng; #63C8

+揉 > róu; #63C9

+揊 > pì; #63CA

+揋 > wēi; #63CB

+揌 > sāi; #63CC

+揍 > zòu; #63CD

+揎 > xuān; #63CE

+描 > miáo; #63CF

+提 > tí; #63D0

+揑 > niē; #63D1

+插 > chā; #63D2

+揓 > shì; #63D3

+揔 > zŏng; #63D4

+揕 > zhèn; #63D5

+揖 > yī; #63D6

+揗 > shŭn; #63D7

+揘 > héng; #63D8

+揙 > biàn; #63D9

+揚 > yáng; #63DA

+換 > huàn; #63DB

+揜 > yăn; #63DC

+揝 > zuàn; #63DD

+揞 > ăn; #63DE

+揟 > xū; #63DF

+揠 > yà; #63E0

+握 > wò; #63E1

+揢 > kè; #63E2

+揣 > chuăi; #63E3

+揤 > jí; #63E4

+揥 > tì; #63E5

+揦 > lá; #63E6

+揧 > là; #63E7

+揨 > chéng; #63E8

+揩 > kāi; #63E9

+揪 > jīu; #63EA

+揫 > jīu; #63EB

+揬 > tú; #63EC

+揭 > jiē; #63ED

+揮 > hūi; #63EE

+揯 > gēng; #63EF

+揰 > chòng; #63F0

+揱 > shùo; #63F1

+揲 > shé; #63F2

+揳 > xiè; #63F3

+援 > yuán; #63F4

+揵 > qián; #63F5

+揶 > yé; #63F6

+揷 > chā; #63F7

+揸 > zhā; #63F8

+揹 > bēi; #63F9

+揺 > yáo; #63FA

+揽 > lăn; #63FD

+揾 > wèn; #63FE

+揿 > qìn; #63FF

+搀 > chān; #6400

+搁 > gē; #6401

+搂 > lŏu; #6402

+搃 > zŏng; #6403

+搄 > gēng; #6404

+搅 > jiăo; #6405

+搆 > gòu; #6406

+搇 > qìn; #6407

+搈 > yŏng; #6408

+搉 > què; #6409

+搊 > chōu; #640A

+搋 > chĭ; #640B

+搌 > zhăn; #640C

+損 > sŭn; #640D

+搎 > sūn; #640E

+搏 > bó; #640F

+搐 > chù; #6410

+搑 > rŏng; #6411

+搒 > bèng; #6412

+搓 > cūo; #6413

+搔 > sāo; #6414

+搕 > kè; #6415

+搖 > yáo; #6416

+搗 > dăo; #6417

+搘 > zhī; #6418

+搙 > nù; #6419

+搚 > xié; #641A

+搛 > jiān; #641B

+搜 > sōu; #641C

+搝 > qĭu; #641D

+搞 > găo; #641E

+搟 > xiăn; #641F

+搠 > shùo; #6420

+搡 > săng; #6421

+搢 > jìn; #6422

+搣 > miè; #6423

+搤 > è; #6424

+搥 > chúi; #6425

+搦 > nùo; #6426

+搧 > shān; #6427

+搨 > tà; #6428

+搩 > jié; #6429

+搪 > táng; #642A

+搫 > pán; #642B

+搬 > bān; #642C

+搭 > dā; #642D

+搮 > lì; #642E

+搯 > tāo; #642F

+搰 > hú; #6430

+搱 > zhì; #6431

+搲 > wā; #6432

+搳 > xiá; #6433

+搴 > qiān; #6434

+搵 > wèn; #6435

+搶 > qiăng; #6436

+搷 > tián; #6437

+搸 > zhēn; #6438

+搹 > è; #6439

+携 > xī; #643A

+搻 > nùo; #643B

+搼 > quán; #643C

+搽 > chá; #643D

+搾 > zhà; #643E

+搿 > gé; #643F

+摀 > wŭ; #6440

+摁 > èn; #6441

+摂 > shè; #6442

+摃 > káng; #6443

+摄 > shè; #6444

+摅 > shū; #6445

+摆 > băi; #6446

+摇 > yáo; #6447

+摈 > bìn; #6448

+摉 > sōu; #6449

+摊 > tān; #644A

+摋 > sà; #644B

+摌 > chăn; #644C

+摍 > sūo; #644D

+摎 > liáo; #644E

+摏 > chōng; #644F

+摐 > chuāng; #6450

+摑 > gúo; #6451

+摒 > bìng; #6452

+摓 > féng; #6453

+摔 > shuāi; #6454

+摕 > dì; #6455

+摖 > qì; #6456

+摗 > sou; #6457

+摘 > zhāi; #6458

+摙 > liăn; #6459

+摚 > táng; #645A

+摛 > chī; #645B

+摜 > guàn; #645C

+摝 > lù; #645D

+摞 > lúo; #645E

+摟 > lŏu; #645F

+摠 > zŏng; #6460

+摡 > gài; #6461

+摢 > hù; #6462

+摣 > zhā; #6463

+摤 > chuăng; #6464

+摥 > tàng; #6465

+摦 > huà; #6466

+摧 > cūi; #6467

+摨 > nái; #6468

+摩 > mó; #6469

+摪 > jiāng; #646A

+摫 > gūi; #646B

+摬 > yìng; #646C

+摭 > zhí; #646D

+摮 > áo; #646E

+摯 > zhì; #646F

+摰 > niè; #6470

+摱 > mán; #6471

+摲 > shàn; #6472

+摳 > kōu; #6473

+摴 > shū; #6474

+摵 > sŭo; #6475

+摶 > tuán; #6476

+摷 > jiăo; #6477

+摸 > mō; #6478

+摹 > mó; #6479

+摺 > zhé; #647A

+摻 > xiān; #647B

+摼 > kēng; #647C

+摽 > piăo; #647D

+摾 > jiàng; #647E

+摿 > yīn; #647F

+撀 > gòu; #6480

+撁 > qiān; #6481

+撂 > lǜe; #6482

+撃 > jí; #6483

+撄 > yīng; #6484

+撅 > juē; #6485

+撆 > piē; #6486

+撇 > piĕ; #6487

+撈 > lāo; #6488

+撉 > dūn; #6489

+撊 > xiàn; #648A

+撋 > ruán; #648B

+撌 > kùi; #648C

+撍 > zăn; #648D

+撎 > yì; #648E

+撏 > xún; #648F

+撐 > chēng; #6490

+撑 > chēng; #6491

+撒 > să; #6492

+撓 > náo; #6493

+撔 > hèng; #6494

+撕 > sī; #6495

+撖 > qiăn; #6496

+撗 > huáng; #6497

+撘 > dā; #6498

+撙 > zŭn; #6499

+撚 > niăn; #649A

+撛 > lĭn; #649B

+撜 > zhĕng; #649C

+撝 > hūi; #649D

+撞 > zhuàng; #649E

+撟 > jiăo; #649F

+撠 > jĭ; #64A0

+撡 > cāo; #64A1

+撢 > dăn; #64A2

+撣 > dăn; #64A3

+撤 > chè; #64A4

+撥 > bō; #64A5

+撦 > chĕ; #64A6

+撧 > jué; #64A7

+撨 > xiāo; #64A8

+撩 > liáo; #64A9

+撪 > bèn; #64AA

+撫 > fŭ; #64AB

+撬 > qiào; #64AC

+播 > bò; #64AD

+撮 > cūo; #64AE

+撯 > zhúo; #64AF

+撰 > zhuàn; #64B0

+撱 > tŭo; #64B1

+撲 > pū; #64B2

+撳 > qìn; #64B3

+撴 > dūn; #64B4

+撵 > niăn; #64B5

+撷 > xié; #64B7

+撸 > lŭ; #64B8

+撹 > jiăo; #64B9

+撺 > cuān; #64BA

+撻 > tà; #64BB

+撼 > hàn; #64BC

+撽 > qiào; #64BD

+撾 > zhuā; #64BE

+撿 > jiăn; #64BF

+擀 > găn; #64C0

+擁 > yŏng; #64C1

+擂 > léi; #64C2

+擃 > kŭo; #64C3

+擄 > lŭ; #64C4

+擅 > shàn; #64C5

+擆 > zhúo; #64C6

+擇 > zé; #64C7

+擈 > pū; #64C8

+擉 > chùo; #64C9

+擊 > jí; #64CA

+擋 > dăng; #64CB

+擌 > sŭo; #64CC

+操 > cāo; #64CD

+擎 > qíng; #64CE

+擏 > jìng; #64CF

+擐 > huàn; #64D0

+擑 > jiē; #64D1

+擒 > qín; #64D2

+擓 > kuăi; #64D3

+擔 > dān; #64D4

+擕 > xī; #64D5

+擖 > gĕ; #64D6

+擗 > pì; #64D7

+擘 > bò; #64D8

+擙 > ào; #64D9

+據 > jù; #64DA

+擛 > yè; #64DB

+擞 > sŏu; #64DE

+擟 > mí; #64DF

+擠 > jĭ; #64E0

+擡 > tái; #64E1

+擢 > zhúo; #64E2

+擣 > dăo; #64E3

+擤 > xĭng; #64E4

+擥 > lăn; #64E5

+擦 > cā; #64E6

+擧 > jŭ; #64E7

+擨 > yé; #64E8

+擩 > rŭ; #64E9

+擪 > yè; #64EA

+擫 > yè; #64EB

+擬 > nĭ; #64EC

+擭 > hù; #64ED

+擮 > jí; #64EE

+擯 > bìn; #64EF

+擰 > níng; #64F0

+擱 > gē; #64F1

+擲 > zhí; #64F2

+擳 > jié; #64F3

+擴 > kùo; #64F4

+擵 > mó; #64F5

+擶 > jiàn; #64F6

+擷 > xié; #64F7

+擸 > liè; #64F8

+擹 > tān; #64F9

+擺 > băi; #64FA

+擻 > sŏu; #64FB

+擼 > lŭ; #64FC

+擽 > lǜe; #64FD

+擾 > răo; #64FE

+擿 > zhí; #64FF

+攀 > pān; #6500

+攁 > yăng; #6501

+攂 > lèi; #6502

+攃 > sà; #6503

+攄 > shū; #6504

+攅 > zăn; #6505

+攆 > niăn; #6506

+攇 > xiăn; #6507

+攈 > jùn; #6508

+攉 > hùo; #6509

+攊 > lì; #650A

+攋 > là; #650B

+攌 > hàn; #650C

+攍 > yíng; #650D

+攎 > lú; #650E

+攏 > lŏng; #650F

+攐 > qiān; #6510

+攑 > qiān; #6511

+攒 > zăn; #6512

+攓 > qiān; #6513

+攔 > lán; #6514

+攕 > sān; #6515

+攖 > yīng; #6516

+攗 > méi; #6517

+攘 > ráng; #6518

+攙 > chān; #6519

+攛 > cuān; #651B

+攜 > xī; #651C

+攝 > shè; #651D

+攞 > lŭo; #651E

+攟 > jùn; #651F

+攠 > mí; #6520

+攡 > lí; #6521

+攢 > zăn; #6522

+攣 > lǘan; #6523

+攤 > tān; #6524

+攥 > zuàn; #6525

+攦 > lì; #6526

+攧 > diān; #6527

+攨 > wā; #6528

+攩 > dăng; #6529

+攪 > jiăo; #652A

+攫 > jué; #652B

+攬 > lăn; #652C

+攭 > lì; #652D

+攮 > năng; #652E

+支 > zhī; #652F

+攰 > gùi; #6530

+攱 > gŭi; #6531

+攲 > qī; #6532

+攳 > xín; #6533

+攴 > pū; #6534

+攵 > sūi; #6535

+收 > shōu; #6536

+攷 > káo; #6537

+攸 > yōu; #6538

+改 > găi; #6539

+攺 > yĭ; #653A

+攻 > gōng; #653B

+攼 > gān; #653C

+攽 > bān; #653D

+放 > fàng; #653E

+政 > zhèng; #653F

+敀 > bó; #6540

+敁 > diān; #6541

+敂 > kòu; #6542

+敃 > mĭn; #6543

+敄 > wù; #6544

+故 > gù; #6545

+敆 > hé; #6546

+敇 > cè; #6547

+效 > xiào; #6548

+敉 > mĭ; #6549

+敊 > chù; #654A

+敋 > gé; #654B

+敌 > dí; #654C

+敍 > xù; #654D

+敎 > jiào; #654E

+敏 > mĭn; #654F

+敐 > chén; #6550

+救 > jìu; #6551

+敒 > zhèn; #6552

+敓 > dúo; #6553

+敔 > yŭ; #6554

+敕 > chì; #6555

+敖 > áo; #6556

+敗 > bài; #6557

+敘 > xù; #6558

+教 > jiào; #6559

+敚 > dúo; #655A

+敛 > liàn; #655B

+敜 > niè; #655C

+敝 > bì; #655D

+敞 > chăng; #655E

+敟 > diăn; #655F

+敠 > dúo; #6560

+敡 > yì; #6561

+敢 > găn; #6562

+散 > sàn; #6563

+敤 > kĕ; #6564

+敥 > yàn; #6565

+敦 > dūn; #6566

+敧 > qĭ; #6567

+敨 > dŏu; #6568

+敩 > xiào; #6569

+敪 > dúo; #656A

+敫 > jiào; #656B

+敬 > jìng; #656C

+敭 > yáng; #656D

+敮 > xiá; #656E

+敯 > mín; #656F

+数 > shù; #6570

+敱 > ái; #6571

+敲 > qiāo; #6572

+敳 > ái; #6573

+整 > zhĕng; #6574

+敵 > dí; #6575

+敶 > zhèn; #6576

+敷 > fū; #6577

+數 > shù; #6578

+敹 > liáo; #6579

+敺 > qū; #657A

+敻 > xìong; #657B

+敼 > xĭ; #657C

+敽 > jiăo; #657D

+敿 > jiăo; #657F

+斀 > zhúo; #6580

+斁 > yì; #6581

+斂 > liàn; #6582

+斃 > bì; #6583

+斄 > lì; #6584

+斅 > xiào; #6585

+斆 > xiào; #6586

+文 > wén; #6587

+斈 > xué; #6588

+斉 > qí; #6589

+斊 > qí; #658A

+斋 > zhāi; #658B

+斌 > bīn; #658C

+斍 > jué; #658D

+斎 > zhāi; #658E

+斐 > fĕi; #6590

+斑 > bān; #6591

+斒 > bān; #6592

+斓 > lán; #6593

+斔 > yŭ; #6594

+斕 > lán; #6595

+斖 > wĕi; #6596

+斗 > dŏu; #6597

+斘 > shēng; #6598

+料 > liào; #6599

+斚 > jiă; #659A

+斛 > hú; #659B

+斜 > xié; #659C

+斝 > jiă; #659D

+斞 > yŭ; #659E

+斟 > zhēn; #659F

+斠 > jiào; #65A0

+斡 > wò; #65A1

+斢 > tŏu; #65A2

+斣 > chù; #65A3

+斤 > jīn; #65A4

+斥 > chì; #65A5

+斦 > yín; #65A6

+斧 > fŭ; #65A7

+斨 > qiāng; #65A8

+斩 > zhăn; #65A9

+斪 > qú; #65AA

+斫 > zhúo; #65AB

+斬 > zhăn; #65AC

+断 > duàn; #65AD

+斮 > zhúo; #65AE

+斯 > sī; #65AF

+新 > xīn; #65B0

+斱 > zhúo; #65B1

+斲 > zhúo; #65B2

+斳 > qín; #65B3

+斴 > lín; #65B4

+斵 > zhúo; #65B5

+斶 > chù; #65B6

+斷 > duàn; #65B7

+斸 > zhŭ; #65B8

+方 > fāng; #65B9

+斺 > xiè; #65BA

+斻 > háng; #65BB

+於 > yú; #65BC

+施 > shī; #65BD

+斾 > pèi; #65BE

+斿 > yóu; #65BF

+旁 > páng; #65C1

+旂 > qí; #65C2

+旃 > zhān; #65C3

+旄 > máo; #65C4

+旅 > lǚ; #65C5

+旆 > pèi; #65C6

+旇 > pī; #65C7

+旈 > líu; #65C8

+旉 > fū; #65C9

+旊 > făng; #65CA

+旋 > xuán; #65CB

+旌 > jīng; #65CC

+旍 > jīng; #65CD

+旎 > nĭ; #65CE

+族 > zú; #65CF

+旐 > zhào; #65D0

+旑 > yĭ; #65D1

+旒 > líu; #65D2

+旓 > shāo; #65D3

+旔 > jiàn; #65D4

+旖 > yĭ; #65D6

+旗 > qí; #65D7

+旘 > zhì; #65D8

+旙 > fān; #65D9

+旚 > piāo; #65DA

+旛 > fān; #65DB

+旜 > zhān; #65DC

+旝 > guài; #65DD

+旞 > sùi; #65DE

+旟 > yú; #65DF

+无 > wú; #65E0

+旡 > jì; #65E1

+既 > jì; #65E2

+旣 > jì; #65E3

+旤 > hùo; #65E4

+日 > rì; #65E5

+旦 > dàn; #65E6

+旧 > jìu; #65E7

+旨 > zhĭ; #65E8

+早 > zăo; #65E9

+旪 > xié; #65EA

+旫 > tiāo; #65EB

+旬 > xún; #65EC

+旭 > xù; #65ED

+旮 > xù; #65EE

+旯 > xù; #65EF

+旰 > gàn; #65F0

+旱 > hàn; #65F1

+旲 > tái; #65F2

+旳 > dì; #65F3

+旴 > xū; #65F4

+旵 > chăn; #65F5

+时 > shí; #65F6

+旷 > kuàng; #65F7

+旸 > yáng; #65F8

+旹 > shí; #65F9

+旺 > wàng; #65FA

+旻 > mín; #65FB

+旼 > mín; #65FC

+旽 > tūn; #65FD

+旾 > chūn; #65FE

+旿 > wŭ; #65FF

+昀 > yún; #6600

+昁 > bèi; #6601

+昂 > áng; #6602

+昃 > zè; #6603

+昄 > băn; #6604

+昅 > jié; #6605

+昆 > kūn; #6606

+昇 > shēng; #6607

+昈 > hù; #6608

+昉 > făng; #6609

+昊 > hào; #660A

+昋 > gùi; #660B

+昌 > chāng; #660C

+昍 > xuān; #660D

+明 > míng; #660E

+昏 > hūn; #660F

+昐 > fēn; #6610

+昑 > qĭn; #6611

+昒 > hū; #6612

+易 > yì; #6613

+昔 > xí; #6614

+昕 > xīn; #6615

+昖 > yán; #6616

+昗 > zè; #6617

+昘 > făng; #6618

+昙 > tán; #6619

+昚 > shèn; #661A

+昛 > jù; #661B

+昜 > yáng; #661C

+昝 > zăn; #661D

+昞 > bĭng; #661E

+星 > xīng; #661F

+映 > yìng; #6620

+昡 > xuàn; #6621

+昢 > pĕi; #6622

+昣 > zhĕn; #6623

+昤 > līng; #6624

+春 > chūn; #6625

+昦 > hào; #6626

+昧 > mèi; #6627

+昨 > zúo; #6628

+昩 > mò; #6629

+昪 > biàn; #662A

+昫 > xŭ; #662B

+昬 > hūn; #662C

+昭 > zhāo; #662D

+昮 > zòng; #662E

+是 > shì; #662F

+昰 > shì; #6630

+昱 > yù; #6631

+昲 > fèi; #6632

+昳 > dié; #6633

+昴 > măo; #6634

+昵 > nì; #6635

+昶 > chăng; #6636

+昷 > wēn; #6637

+昸 > dōng; #6638

+昹 > ăi; #6639

+昺 > bĭng; #663A

+昻 > áng; #663B

+昼 > zhòu; #663C

+昽 > lóng; #663D

+显 > xiăn; #663E

+昿 > kuàng; #663F

+晀 > tiăo; #6640

+晁 > cháo; #6641

+時 > shí; #6642

+晃 > huăng; #6643

+晄 > huăng; #6644

+晅 > xuān; #6645

+晆 > kúi; #6646

+晇 > xū; #6647

+晈 > jiăo; #6648

+晉 > jìn; #6649

+晊 > zhĭ; #664A

+晋 > jìn; #664B

+晌 > shăng; #664C

+晍 > tóng; #664D

+晎 > hŏng; #664E

+晏 > yàn; #664F

+晐 > gāi; #6650

+晑 > xiăng; #6651

+晒 > shài; #6652

+晓 > xiăo; #6653

+晔 > yē; #6654

+晕 > yūn; #6655

+晖 > hūi; #6656

+晗 > hán; #6657

+晘 > hàn; #6658

+晙 > jùn; #6659

+晚 > wăn; #665A

+晛 > xiàn; #665B

+晜 > kūn; #665C

+晝 > zhòu; #665D

+晞 > xī; #665E

+晟 > chéng; #665F

+晠 > shéng; #6660

+晡 > bū; #6661

+晢 > zhē; #6662

+晣 > zhē; #6663

+晤 > wù; #6664

+晥 > hàn; #6665

+晦 > hùi; #6666

+晧 > hào; #6667

+晨 > chén; #6668

+晩 > wăn; #6669

+晪 > tiăn; #666A

+晫 > zhúo; #666B

+晬 > zùi; #666C

+晭 > zhŏu; #666D

+普 > pŭ; #666E

+景 > jĭng; #666F

+晰 > xī; #6670

+晱 > shăn; #6671

+晲 > yĭ; #6672

+晳 > xì; #6673

+晴 > qíng; #6674

+晵 > qĭ; #6675

+晶 > jīng; #6676

+晷 > gŭi; #6677

+晸 > zhĕn; #6678

+晹 > yì; #6679

+智 > zhì; #667A

+晻 > ăn; #667B

+晼 > wăn; #667C

+晽 > lín; #667D

+晾 > liàng; #667E

+晿 > chāng; #667F

+暀 > wăng; #6680

+暁 > xiăo; #6681

+暂 > zàn; #6682

+暄 > xuān; #6684

+暅 > xuăn; #6685

+暆 > yí; #6686

+暇 > xiá; #6687

+暈 > yūn; #6688

+暉 > hūi; #6689

+暊 > fŭ; #668A

+暋 > mĭn; #668B

+暌 > kúi; #668C

+暍 > hè; #668D

+暎 > yìng; #668E

+暏 > dŭ; #668F

+暐 > wĕi; #6690

+暑 > shŭ; #6691

+暒 > qíng; #6692

+暓 > mào; #6693

+暔 > nán; #6694

+暕 > jiăn; #6695

+暖 > nuăn; #6696

+暗 > àn; #6697

+暘 > yáng; #6698

+暙 > chūn; #6699

+暚 > yáo; #669A

+暛 > sŭo; #669B

+暜 > jìn; #669C

+暝 > míng; #669D

+暞 > jiăo; #669E

+暟 > kăi; #669F

+暠 > găo; #66A0

+暡 > wĕng; #66A1

+暢 > chàng; #66A2

+暣 > qì; #66A3

+暤 > hào; #66A4

+暥 > yàn; #66A5

+暦 > lì; #66A6

+暧 > ài; #66A7

+暨 > jì; #66A8

+暩 > gùi; #66A9

+暪 > mĕn; #66AA

+暫 > zàn; #66AB

+暬 > xiè; #66AC

+暭 > hào; #66AD

+暮 > mù; #66AE

+暯 > mò; #66AF

+暰 > cōng; #66B0

+暱 > nì; #66B1

+暲 > zhāng; #66B2

+暳 > hùi; #66B3

+暴 > bào; #66B4

+暵 > hàn; #66B5

+暶 > xuán; #66B6

+暷 > chuán; #66B7

+暸 > liáo; #66B8

+暹 > xiān; #66B9

+暺 > dàn; #66BA

+暻 > jĭng; #66BB

+暼 > piē; #66BC

+暽 > lín; #66BD

+暾 > tūn; #66BE

+暿 > xĭ; #66BF

+曀 > yì; #66C0

+曁 > jì; #66C1

+曂 > huàng; #66C2

+曃 > tài; #66C3

+曄 > yè; #66C4

+曅 > yè; #66C5

+曆 > lì; #66C6

+曇 > tán; #66C7

+曈 > tóng; #66C8

+曉 > xiăo; #66C9

+曊 > fèi; #66CA

+曋 > qĭn; #66CB

+曌 > zhào; #66CC

+曍 > hào; #66CD

+曎 > yì; #66CE

+曏 > xiàng; #66CF

+曐 > xīng; #66D0

+曑 > sēn; #66D1

+曒 > jiăo; #66D2

+曓 > bào; #66D3

+曔 > jìng; #66D4

+曕 > yiàn; #66D5

+曖 > ài; #66D6

+曗 > yè; #66D7

+曘 > rú; #66D8

+曙 > shù; #66D9

+曚 > méng; #66DA

+曛 > xūn; #66DB

+曜 > yào; #66DC

+曝 > pù; #66DD

+曞 > lì; #66DE

+曟 > chén; #66DF

+曠 > kuàng; #66E0

+曡 > dié; #66E1

+曣 > yàn; #66E3

+曤 > hùo; #66E4

+曥 > lú; #66E5

+曦 > xī; #66E6

+曧 > róng; #66E7

+曨 > lóng; #66E8

+曩 > năng; #66E9

+曪 > lŭo; #66EA

+曫 > luán; #66EB

+曬 > shài; #66EC

+曭 > tăng; #66ED

+曮 > yăn; #66EE

+曯 > chú; #66EF

+曰 > yuē; #66F0

+曱 > yuē; #66F1

+曲 > qŭ; #66F2

+曳 > yì; #66F3

+更 > gèng; #66F4

+曵 > yè; #66F5

+曶 > hū; #66F6

+曷 > hé; #66F7

+書 > shū; #66F8

+曹 > cáo; #66F9

+曺 > cáo; #66FA

+曼 > màn; #66FC

+曽 > cēng; #66FD

+曾 > céng; #66FE

+替 > tì; #66FF

+最 > zùi; #6700

+朁 > căn; #6701

+朂 > xù; #6702

+會 > hùi; #6703

+朄 > yìn; #6704

+朅 > qiè; #6705

+朆 > fēn; #6706

+朇 > pí; #6707

+月 > yuè; #6708

+有 > yŏu; #6709

+朊 > ruăn; #670A

+朋 > péng; #670B

+朌 > bān; #670C

+服 > fú; #670D

+朎 > líng; #670E

+朏 > fĕi; #670F

+朐 > qú; #6710

+朒 > nǜ; #6712

+朓 > tiào; #6713

+朔 > shùo; #6714

+朕 > zhèn; #6715

+朖 > lăng; #6716

+朗 > lăng; #6717

+朘 > juān; #6718

+朙 > míng; #6719

+朚 > huāng; #671A

+望 > wàng; #671B

+朜 > tūn; #671C

+朝 > zhāo; #671D

+朞 > jī; #671E

+期 > qí; #671F

+朠 > yīng; #6720

+朡 > zōng; #6721

+朢 > wàng; #6722

+朣 > tóng; #6723

+朤 > lăng; #6724

+朦 > méng; #6726

+朧 > lóng; #6727

+木 > mù; #6728

+朩 > dĕng; #6729

+未 > wèi; #672A

+末 > mò; #672B

+本 > bĕn; #672C

+札 > zhá; #672D

+朮 > zhú; #672E

+术 > zhú; #672F

+朱 > zhū; #6731

+朲 > rén; #6732

+朳 > bā; #6733

+朴 > pò; #6734

+朵 > dŭo; #6735

+朶 > dŭo; #6736

+朷 > dāo; #6737

+朸 > lì; #6738

+朹 > qíu; #6739

+机 > jī; #673A

+朻 > jīu; #673B

+朼 > bĭ; #673C

+朽 > xĭu; #673D

+朾 > tíng; #673E

+朿 > cì; #673F

+杀 > shā; #6740

+杂 > zá; #6742

+权 > quán; #6743

+杄 > qiān; #6744

+杅 > yú; #6745

+杆 > gān; #6746

+杇 > wū; #6747

+杈 > chā; #6748

+杉 > shān; #6749

+杊 > xún; #674A

+杋 > fān; #674B

+杌 > wù; #674C

+杍 > zĭ; #674D

+李 > lĭ; #674E

+杏 > xìng; #674F

+材 > cái; #6750

+村 > cūn; #6751

+杒 > rèn; #6752

+杓 > sháo; #6753

+杔 > tūo; #6754

+杕 > dì; #6755

+杖 > zhàng; #6756

+杗 > máng; #6757

+杘 > chì; #6758

+杙 > yì; #6759

+杚 > gŭ; #675A

+杛 > gōng; #675B

+杜 > dù; #675C

+杝 > yí; #675D

+杞 > qĭ; #675E

+束 > shù; #675F

+杠 > gāng; #6760

+条 > tiáo; #6761

+来 > lái; #6765

+杧 > máng; #6767

+杨 > yáng; #6768

+杩 > mà; #6769

+杪 > miăo; #676A

+杫 > sì; #676B

+杬 > yuán; #676C

+杭 > háng; #676D

+杮 > fèi; #676E

+杯 > bēi; #676F

+杰 > jié; #6770

+東 > dōng; #6771

+杲 > găo; #6772

+杳 > yăo; #6773

+杴 > xiān; #6774

+杵 > chŭ; #6775

+杶 > qūn; #6776

+杷 > pá; #6777

+杸 > shū; #6778

+杹 > huà; #6779

+杺 > xīn; #677A

+杻 > chŏu; #677B

+杼 > zhù; #677C

+杽 > chŏu; #677D

+松 > sōng; #677E

+板 > băn; #677F

+枀 > sōng; #6780

+极 > jí; #6781

+枂 > yuè; #6782

+枃 > jìn; #6783

+构 > gōu; #6784

+枅 > jī; #6785

+枆 > máo; #6786

+枇 > pí; #6787

+枈 > bì; #6788

+枉 > wăng; #6789

+枊 > àng; #678A

+枋 > fāng; #678B

+枌 > fén; #678C

+枍 > yì; #678D

+枎 > fú; #678E

+枏 > nán; #678F

+析 > xī; #6790

+枑 > hù; #6791

+枒 > yá; #6792

+枓 > dŏu; #6793

+枔 > xún; #6794

+枕 > zhĕn; #6795

+枖 > yāo; #6796

+林 > lín; #6797

+枘 > rùi; #6798

+枙 > é; #6799

+枚 > méi; #679A

+枛 > zhào; #679B

+果 > gŭo; #679C

+枝 > zhī; #679D

+枞 > cōng; #679E

+枟 > yùn; #679F

+枡 > dŏu; #67A1

+枢 > shū; #67A2

+枣 > zăo; #67A3

+枥 > lì; #67A5

+枧 > jiàn; #67A7

+枨 > chéng; #67A8

+枪 > qiāng; #67AA

+枫 > fēng; #67AB

+枬 > nán; #67AC

+枭 > xiāo; #67AD

+枮 > xiān; #67AE

+枯 > kū; #67AF

+枰 > píng; #67B0

+枱 > yí; #67B1

+枲 > xĭ; #67B2

+枳 > zhī; #67B3

+枴 > guăi; #67B4

+枵 > xiāo; #67B5

+架 > jià; #67B6

+枷 > jiā; #67B7

+枸 > gŏu; #67B8

+枹 > fū; #67B9

+枺 > mò; #67BA

+枻 > yì; #67BB

+枼 > yè; #67BC

+枽 > yè; #67BD

+枾 > shì; #67BE

+枿 > niè; #67BF

+柀 > bĭ; #67C0

+柁 > dùo; #67C1

+柂 > yí; #67C2

+柃 > líng; #67C3

+柄 > bĭng; #67C4

+柅 > nĭ; #67C5

+柆 > lā; #67C6

+柇 > hé; #67C7

+柈 > pán; #67C8

+柉 > fán; #67C9

+柊 > zhōng; #67CA

+柋 > dài; #67CB

+柌 > cí; #67CC

+柍 > yāng; #67CD

+柎 > fū; #67CE

+柏 > bó; #67CF

+某 > mŏu; #67D0

+柑 > gān; #67D1

+柒 > qī; #67D2

+染 > răn; #67D3

+柔 > róu; #67D4

+柕 > mào; #67D5

+柖 > zhāo; #67D6

+柗 > sōng; #67D7

+柘 > zhè; #67D8

+柙 > xiá; #67D9

+柚 > yòu; #67DA

+柛 > shēn; #67DB

+柜 > jŭ; #67DC

+柝 > tùo; #67DD

+柞 > zùo; #67DE

+柟 > nán; #67DF

+柠 > níng; #67E0

+柡 > yŏng; #67E1

+柢 > dĭ; #67E2

+柣 > zhí; #67E3

+柤 > zhā; #67E4

+查 > chá; #67E5

+柦 > dàn; #67E6

+柧 > gū; #67E7

+柨 > pu; #67E8

+柩 > jìu; #67E9

+柪 > āo; #67EA

+柫 > fú; #67EB

+柬 > jiăn; #67EC

+柭 > bō; #67ED

+柮 > dùo; #67EE

+柯 > kē; #67EF

+柰 > nài; #67F0

+柱 > zhù; #67F1

+柲 > bì; #67F2

+柳 > lĭu; #67F3

+柴 > chái; #67F4

+柵 > zhà; #67F5

+柶 > sì; #67F6

+柷 > zhù; #67F7

+柸 > pēi; #67F8

+柹 > shì; #67F9

+柺 > guăi; #67FA

+査 > chá; #67FB

+柼 > yăo; #67FC

+柽 > jué; #67FD

+柾 > jìu; #67FE

+柿 > shì; #67FF

+栀 > zhī; #6800

+栁 > lĭu; #6801

+栂 > méi; #6802

+栄 > róng; #6804

+栅 > zhà; #6805

+标 > biāo; #6807

+栈 > zhàn; #6808

+栉 > jié; #6809

+栊 > lóng; #680A

+栋 > dòng; #680B

+栌 > lú; #680C

+栎 > lì; #680E

+栏 > lán; #680F

+栐 > yŏng; #6810

+树 > shù; #6811

+栒 > xún; #6812

+栓 > shuān; #6813

+栔 > qì; #6814

+栕 > zhēn; #6815

+栖 > qī; #6816

+栗 > lì; #6817

+栘 > yĭ; #6818

+栙 > xiáng; #6819

+栚 > zhèn; #681A

+栛 > lì; #681B

+栜 > sù; #681C

+栝 > guā; #681D

+栞 > kān; #681E

+栟 > bīng; #681F

+栠 > rĕn; #6820

+校 > xiào; #6821

+栢 > bó; #6822

+栣 > rĕn; #6823

+栤 > bìng; #6824

+栥 > zī; #6825

+栦 > chóu; #6826

+栧 > yì; #6827

+栨 > jié; #6828

+栩 > xŭ; #6829

+株 > zhū; #682A

+栫 > jiàn; #682B

+栬 > zùi; #682C

+栭 > ér; #682D

+栮 > ĕr; #682E

+栯 > yŏu; #682F

+栰 > fá; #6830

+栱 > gŏng; #6831

+栲 > kăo; #6832

+栳 > lăo; #6833

+栴 > zhān; #6834

+栵 > lì; #6835

+栶 > yin; #6836

+样 > yáng; #6837

+核 > hé; #6838

+根 > gēn; #6839

+栺 > zhĭ; #683A

+栻 > chì; #683B

+格 > gé; #683C

+栽 > zāi; #683D

+栾 > luán; #683E

+栿 > fú; #683F

+桀 > jié; #6840

+桁 > háng; #6841

+桂 > gùi; #6842

+桃 > táo; #6843

+桄 > guàng; #6844

+桅 > wéi; #6845

+框 > kuàng; #6846

+桇 > rú; #6847

+案 > àn; #6848

+桉 > àn; #6849

+桊 > juàn; #684A

+桋 > yí; #684B

+桌 > zhūo; #684C

+桍 > kū; #684D

+桎 > zhí; #684E

+桏 > qíong; #684F

+桐 > tóng; #6850

+桑 > sāng; #6851

+桒 > sāng; #6852

+桓 > huán; #6853

+桔 > jié; #6854

+桕 > jìu; #6855

+桖 > xuè; #6856

+桗 > dùo; #6857

+桘 > zhùi; #6858

+桙 > yú; #6859

+桚 > zăn; #685A

+桜 > yīng; #685C

+桟 > zhàn; #685F

+桠 > yá; #6860

+桡 > náo; #6861

+桢 > zhēn; #6862

+档 > dăng; #6863

+桤 > qī; #6864

+桥 > qiáo; #6865

+桦 > huà; #6866

+桧 > kuài; #6867

+桨 > jiăng; #6868

+桩 > zhuāng; #6869

+桪 > xún; #686A

+桫 > sūo; #686B

+桬 > shā; #686C

+桭 > zhēn; #686D

+桮 > bēi; #686E

+桯 > tīng; #686F

+桰 > guā; #6870

+桱 > jìng; #6871

+桲 > bó; #6872

+桳 > bèn; #6873

+桴 > fú; #6874

+桵 > rŭi; #6875

+桶 > tŏng; #6876

+桷 > jué; #6877

+桸 > xī; #6878

+桹 > láng; #6879

+桺 > lĭu; #687A

+桻 > fēng; #687B

+桼 > qī; #687C

+桽 > wĕn; #687D

+桾 > jūn; #687E

+桿 > găn; #687F

+梀 > cù; #6880

+梁 > liáng; #6881

+梂 > qíu; #6882

+梃 > tĭng; #6883

+梄 > yŏu; #6884

+梅 > méi; #6885

+梆 > bāng; #6886

+梇 > lòng; #6887

+梈 > pēng; #6888

+梉 > zhuāng; #6889

+梊 > dì; #688A

+梋 > xuān; #688B

+梌 > tú; #688C

+梍 > zào; #688D

+梎 > āo; #688E

+梏 > gù; #688F

+梐 > bì; #6890

+梑 > dí; #6891

+梒 > hán; #6892

+梓 > zĭ; #6893

+梔 > zhī; #6894

+梕 > rèn; #6895

+梖 > bèi; #6896

+梗 > gĕng; #6897

+梘 > jiàn; #6898

+梙 > huàn; #6899

+梚 > wăn; #689A

+梛 > núo; #689B

+梜 > jiá; #689C

+條 > tiáo; #689D

+梞 > jì; #689E

+梟 > xiāo; #689F

+梠 > lǚ; #68A0

+梡 > huán; #68A1

+梢 > shāo; #68A2

+梣 > cén; #68A3

+梤 > fén; #68A4

+梥 > sōng; #68A5

+梦 > mèng; #68A6

+梧 > wú; #68A7

+梨 > lí; #68A8

+梩 > lí; #68A9

+梪 > dòu; #68AA

+梫 > cēn; #68AB

+梬 > yĭng; #68AC

+梭 > sūo; #68AD

+梮 > jú; #68AE

+梯 > tī; #68AF

+械 > jiè; #68B0

+梱 > kŭn; #68B1

+梲 > zhúo; #68B2

+梳 > shū; #68B3

+梴 > chān; #68B4

+梵 > fàn; #68B5

+梶 > wĕi; #68B6

+梷 > jìng; #68B7

+梸 > lí; #68B8

+梹 > bīng; #68B9

+梼 > táo; #68BC

+梽 > zhì; #68BD

+梾 > lái; #68BE

+梿 > lián; #68BF

+检 > jiăn; #68C0

+棁 > zhúo; #68C1

+棂 > líng; #68C2

+棃 > lí; #68C3

+棄 > qì; #68C4

+棅 > bìng; #68C5

+棆 > zhūn; #68C6

+棇 > cōng; #68C7

+棈 > qiàn; #68C8

+棉 > mián; #68C9

+棊 > qí; #68CA

+棋 > qí; #68CB

+棌 > căi; #68CC

+棍 > gùn; #68CD

+棎 > chán; #68CE

+棏 > tè; #68CF

+棐 > fĕi; #68D0

+棑 > pái; #68D1

+棒 > bàng; #68D2

+棓 > pŏu; #68D3

+棔 > hūn; #68D4

+棕 > zōng; #68D5

+棖 > chéng; #68D6

+棗 > zăo; #68D7

+棘 > jí; #68D8

+棙 > lì; #68D9

+棚 > péng; #68DA

+棛 > yù; #68DB

+棜 > yù; #68DC

+棝 > gù; #68DD

+棞 > hún; #68DE

+棟 > dòng; #68DF

+棠 > táng; #68E0

+棡 > gāng; #68E1

+棢 > wăng; #68E2

+棣 > dì; #68E3

+棤 > xí; #68E4

+棥 > fán; #68E5

+棦 > chēng; #68E6

+棧 > zhàn; #68E7

+棨 > qĭ; #68E8

+棩 > yuān; #68E9

+棪 > yăn; #68EA

+棫 > yù; #68EB

+棬 > quān; #68EC

+棭 > yì; #68ED

+森 > sēn; #68EE

+棯 > rĕn; #68EF

+棰 > chúi; #68F0

+棱 > léng; #68F1

+棲 > qī; #68F2

+棳 > zhúo; #68F3

+棴 > fú; #68F4

+棵 > kē; #68F5

+棶 > lái; #68F6

+棷 > zōu; #68F7

+棸 > zōu; #68F8

+棹 > zhūo; #68F9

+棺 > guān; #68FA

+棻 > fén; #68FB

+棼 > fén; #68FC

+棽 > chēn; #68FD

+棾 > qíong; #68FE

+棿 > niè; #68FF

+椀 > wăn; #6900

+椁 > gŭo; #6901

+椂 > lù; #6902

+椃 > háo; #6903

+椄 > jiē; #6904

+椅 > yĭ; #6905

+椆 > chóu; #6906

+椇 > jŭ; #6907

+椈 > jú; #6908

+椉 > chéng; #6909

+椊 > zúo; #690A

+椋 > liáng; #690B

+椌 > qiāng; #690C

+植 > zhí; #690D

+椎 > zhūi; #690E

+椏 > yā; #690F

+椐 > jū; #6910

+椑 > bēi; #6911

+椒 > jiāo; #6912

+椓 > zhúo; #6913

+椔 > zī; #6914

+椕 > bīn; #6915

+椖 > péng; #6916

+椗 > dìng; #6917

+椘 > chŭ; #6918

+検 > jiăn; #691C

+椝 > gūi; #691D

+椞 > xì; #691E

+椟 > dú; #691F

+椠 > qiàn; #6920

+椤 > lúo; #6924

+椥 > zhī; #6925

+椪 > pèng; #692A

+椫 > zhăn; #692B

+椭 > tŭo; #692D

+椮 > sēn; #692E

+椯 > dúo; #692F

+椰 > yé; #6930

+椱 > fòu; #6931

+椲 > wĕi; #6932

+椳 > wēi; #6933

+椴 > duàn; #6934

+椵 > jiă; #6935

+椶 > zōng; #6936

+椷 > jiān; #6937

+椸 > yí; #6938

+椹 > shèn; #6939

+椺 > xí; #693A

+椻 > yàn; #693B

+椼 > yăn; #693C

+椽 > chuán; #693D

+椾 > zhàn; #693E

+椿 > chūn; #693F

+楀 > yŭ; #6940

+楁 > hé; #6941

+楂 > zhā; #6942

+楃 > wò; #6943

+楄 > pián; #6944

+楅 > bì; #6945

+楆 > yāo; #6946

+楇 > hùo; #6947

+楈 > xū; #6948

+楉 > rùo; #6949

+楊 > yáng; #694A

+楋 > là; #694B

+楌 > yán; #694C

+楍 > bĕn; #694D

+楎 > hún; #694E

+楏 > kúi; #694F

+楐 > jiè; #6950

+楑 > kúi; #6951

+楒 > sī; #6952

+楓 > fēng; #6953

+楔 > xiè; #6954

+楕 > tŭo; #6955

+楖 > zhì; #6956

+楗 > jiàn; #6957

+楘 > mù; #6958

+楙 > mào; #6959

+楚 > chŭ; #695A

+楛 > hù; #695B

+楜 > hú; #695C

+楝 > liàn; #695D

+楞 > léng; #695E

+楟 > tíng; #695F

+楠 > nán; #6960

+楡 > yú; #6961

+楢 > yóu; #6962

+楣 > méi; #6963

+楤 > sŏng; #6964

+楥 > xuàn; #6965

+楦 > xuàn; #6966

+楧 > yīng; #6967

+楨 > zhēn; #6968

+楩 > pián; #6969

+楪 > yè; #696A

+楫 > jí; #696B

+楬 > jié; #696C

+業 > yè; #696D

+楮 > chŭ; #696E

+楯 > shŭn; #696F

+楰 > yú; #6970

+楱 > còu; #6971

+楲 > wēi; #6972

+楳 > méi; #6973

+楴 > dì; #6974

+極 > jí; #6975

+楶 > jié; #6976

+楷 > kăi; #6977

+楸 > qīu; #6978

+楹 > yíng; #6979

+楺 > róu; #697A

+楻 > héng; #697B

+楼 > lóu; #697C

+楽 > lè; #697D

+榀 > pĭn; #6980

+概 > gài; #6982

+榃 > tán; #6983

+榄 > lăn; #6984

+榅 > yún; #6985

+榆 > yú; #6986

+榇 > chèn; #6987

+榈 > lǘ; #6988

+榉 > jŭ; #6989

+榍 > xiè; #698D

+榎 > jiă; #698E

+榏 > yì; #698F

+榐 > zhăn; #6990

+榑 > fù; #6991

+榒 > nài; #6992

+榓 > mì; #6993

+榔 > láng; #6994

+榕 > róng; #6995

+榖 > gŭ; #6996

+榗 > jiàn; #6997

+榘 > jŭ; #6998

+榙 > tă; #6999

+榚 > yăo; #699A

+榛 > zhēn; #699B

+榜 > băng; #699C

+榝 > shā; #699D

+榞 > yuán; #699E

+榟 > zĭ; #699F

+榠 > mīng; #69A0

+榡 > sù; #69A1

+榢 > jià; #69A2

+榣 > yáo; #69A3

+榤 > jié; #69A4

+榥 > huăng; #69A5

+榦 > gàn; #69A6

+榧 > fĕi; #69A7

+榨 > zhà; #69A8

+榩 > qián; #69A9

+榪 > mà; #69AA

+榫 > sŭn; #69AB

+榬 > yuán; #69AC

+榭 > xiè; #69AD

+榮 > róng; #69AE

+榯 > shí; #69AF

+榰 > zhī; #69B0

+榱 > cūi; #69B1

+榲 > yún; #69B2

+榳 > tíng; #69B3

+榴 > líu; #69B4

+榵 > róng; #69B5

+榶 > táng; #69B6

+榷 > què; #69B7

+榸 > zhāi; #69B8

+榹 > sī; #69B9

+榺 > shèng; #69BA

+榻 > tà; #69BB

+榼 > kè; #69BC

+榽 > xī; #69BD

+榾 > gù; #69BE

+榿 > qī; #69BF

+槀 > kăo; #69C0

+槁 > găo; #69C1

+槂 > sūn; #69C2

+槃 > pán; #69C3

+槄 > tāo; #69C4

+槅 > gé; #69C5

+槆 > xún; #69C6

+槇 > diān; #69C7

+槈 > nòu; #69C8

+槉 > jí; #69C9

+槊 > shùo; #69CA

+構 > gòu; #69CB

+槌 > chúi; #69CC

+槍 > qiāng; #69CD

+槎 > chā; #69CE

+槏 > qiăn; #69CF

+槐 > huái; #69D0

+槑 > méi; #69D1

+槒 > xù; #69D2

+槓 > gàng; #69D3

+槔 > gāo; #69D4

+槕 > zhúo; #69D5

+槖 > tùo; #69D6

+様 > yàng; #69D8

+槙 > diān; #69D9

+槚 > jiă; #69DA

+槛 > jiàn; #69DB

+槜 > zùi; #69DC

+槟 > bīn; #69DF

+槠 > zhū; #69E0

+槢 > xí; #69E2

+槣 > qĭ; #69E3

+槤 > lián; #69E4

+槥 > hùi; #69E5

+槦 > yóng; #69E6

+槧 > qiàn; #69E7

+槨 > gŭo; #69E8

+槩 > gài; #69E9

+槪 > gài; #69EA

+槫 > tuán; #69EB

+槬 > huà; #69EC

+槭 > cù; #69ED

+槮 > sēn; #69EE

+槯 > cūi; #69EF

+槰 > bèng; #69F0

+槱 > yŏu; #69F1

+槲 > hú; #69F2

+槳 > jiăng; #69F3

+槴 > hù; #69F4

+槵 > huàn; #69F5

+槶 > kùi; #69F6

+槷 > yì; #69F7

+槸 > niè; #69F8

+槹 > gāo; #69F9

+槺 > kāng; #69FA

+槻 > gūi; #69FB

+槼 > gūi; #69FC

+槽 > cáo; #69FD

+槾 > mán; #69FE

+槿 > jĭn; #69FF

+樀 > dì; #6A00

+樁 > zhuāng; #6A01

+樂 > lè; #6A02

+樃 > láng; #6A03

+樄 > chén; #6A04

+樅 > cōng; #6A05

+樆 > lí; #6A06

+樇 > xīu; #6A07

+樈 > qíng; #6A08

+樉 > shuăng; #6A09

+樊 > fán; #6A0A

+樋 > tōng; #6A0B

+樌 > guàn; #6A0C

+樍 > jī; #6A0D

+樎 > sūo; #6A0E

+樏 > lĕi; #6A0F

+樐 > lŭ; #6A10

+樑 > liáng; #6A11

+樒 > mì; #6A12

+樓 > lóu; #6A13

+樔 > cháo; #6A14

+樕 > sù; #6A15

+樖 > kē; #6A16

+樗 > shū; #6A17

+樘 > táng; #6A18

+標 > biāo; #6A19

+樚 > lù; #6A1A

+樛 > jīu; #6A1B

+樜 > shù; #6A1C

+樝 > zhā; #6A1D

+樞 > shū; #6A1E

+樟 > zhāng; #6A1F

+樠 > mén; #6A20

+模 > mó; #6A21

+樢 > niăo; #6A22

+樣 > yàng; #6A23

+樤 > tiáo; #6A24

+樥 > péng; #6A25

+樦 > zhù; #6A26

+樧 > shā; #6A27

+樨 > xī; #6A28

+権 > quán; #6A29

+横 > héng; #6A2A

+樫 > jiān; #6A2B

+樬 > cōng; #6A2C

+樯 > qiáng; #6A2F

+樱 > yīng; #6A31

+樲 > èr; #6A32

+樳 > xín; #6A33

+樴 > zhí; #6A34

+樵 > qiáo; #6A35

+樶 > zūi; #6A36

+樷 > cōng; #6A37

+樸 > pú; #6A38

+樹 > shù; #6A39

+樺 > huà; #6A3A

+樻 > kùi; #6A3B

+樼 > zhēn; #6A3C

+樽 > zūn; #6A3D

+樾 > yuè; #6A3E

+樿 > zhăn; #6A3F

+橀 > xī; #6A40

+橁 > xún; #6A41

+橂 > diàn; #6A42

+橃 > fā; #6A43

+橄 > găn; #6A44

+橅 > mó; #6A45

+橆 > wŭ; #6A46

+橇 > qiāo; #6A47

+橈 > náo; #6A48

+橉 > lìn; #6A49

+橊 > líu; #6A4A

+橋 > qiáo; #6A4B

+橌 > xiàn; #6A4C

+橍 > rùn; #6A4D

+橎 > fán; #6A4E

+橏 > zhăn; #6A4F

+橐 > tùo; #6A50

+橑 > lăo; #6A51

+橒 > yún; #6A52

+橓 > shùn; #6A53

+橔 > túi; #6A54

+橕 > chēng; #6A55

+橖 > táng; #6A56

+橗 > méng; #6A57

+橘 > jú; #6A58

+橙 > chéng; #6A59

+橚 > sù; #6A5A

+橛 > jué; #6A5B

+橜 > jué; #6A5C

+橝 > tān; #6A5D

+橞 > hùi; #6A5E

+機 > jī; #6A5F

+橠 > nŭo; #6A60

+橡 > xiàng; #6A61

+橢 > tŭo; #6A62

+橣 > nĭng; #6A63

+橤 > rŭi; #6A64

+橥 > zhū; #6A65

+橦 > chuáng; #6A66

+橧 > zēng; #6A67

+橨 > fén; #6A68

+橩 > qíong; #6A69

+橪 > răn; #6A6A

+橫 > héng; #6A6B

+橬 > cén; #6A6C

+橭 > gū; #6A6D

+橮 > lĭu; #6A6E

+橯 > lào; #6A6F

+橰 > gāo; #6A70

+橱 > chú; #6A71

+橶 > jí; #6A76

+橷 > dōu; #6A77

+橹 > lŭ; #6A79

+橼 > yuán; #6A7C

+橽 > tà; #6A7D

+橾 > shū; #6A7E

+橿 > jiāng; #6A7F

+檀 > tán; #6A80

+檁 > lĭn; #6A81

+檂 > nóng; #6A82

+檃 > yĭn; #6A83

+檄 > xí; #6A84

+檅 > sùi; #6A85

+檆 > shān; #6A86

+檇 > zùi; #6A87

+檈 > xuán; #6A88

+檉 > chēng; #6A89

+檊 > gàn; #6A8A

+檋 > jū; #6A8B

+檌 > zùi; #6A8C

+檍 > yì; #6A8D

+檎 > qín; #6A8E

+檏 > pŭ; #6A8F

+檐 > yán; #6A90

+檑 > léi; #6A91

+檒 > fēng; #6A92

+檓 > hŭi; #6A93

+檔 > dăng; #6A94

+檕 > jì; #6A95

+檖 > sùi; #6A96

+檗 > bò; #6A97

+檘 > bì; #6A98

+檙 > dĭng; #6A99

+檚 > chŭ; #6A9A

+檛 > zhuā; #6A9B

+檜 > kuài; #6A9C

+檝 > jí; #6A9D

+檞 > jiĕ; #6A9E

+檟 > jiă; #6A9F

+檠 > qíng; #6AA0

+檡 > zhè; #6AA1

+檢 > jiăn; #6AA2

+檣 > qiáng; #6AA3

+檤 > dào; #6AA4

+檥 > yĭ; #6AA5

+檦 > biăo; #6AA6

+檧 > sōng; #6AA7

+檨 > shē; #6AA8

+檩 > lĭn; #6AA9

+檫 > chá; #6AAB

+檬 > méng; #6AAC

+檭 > yín; #6AAD

+檮 > táo; #6AAE

+檯 > tái; #6AAF

+檰 > mián; #6AB0

+檱 > qí; #6AB1

+檲 > tóan; #6AB2

+檳 > bīn; #6AB3

+檴 > hùo; #6AB4

+檵 > jì; #6AB5

+檶 > qiān; #6AB6

+檷 > mí; #6AB7

+檸 > níng; #6AB8

+檹 > yī; #6AB9

+檺 > găo; #6ABA

+檻 > jiàn; #6ABB

+檼 > yìn; #6ABC

+檽 > ér; #6ABD

+檾 > qĭng; #6ABE

+檿 > yăn; #6ABF

+櫀 > qí; #6AC0

+櫁 > mì; #6AC1

+櫂 > zhào; #6AC2

+櫃 > gùi; #6AC3

+櫄 > chūn; #6AC4

+櫅 > jī; #6AC5

+櫆 > kúi; #6AC6

+櫇 > pó; #6AC7

+櫈 > dèng; #6AC8

+櫉 > chú; #6AC9

+櫋 > mián; #6ACB

+櫌 > yōu; #6ACC

+櫍 > zhì; #6ACD

+櫎 > guàng; #6ACE

+櫏 > qiān; #6ACF

+櫐 > lĕi; #6AD0

+櫑 > lĕi; #6AD1

+櫒 > sà; #6AD2

+櫓 > lŭ; #6AD3

+櫔 > lì; #6AD4

+櫕 > cuán; #6AD5

+櫖 > lǘ; #6AD6

+櫗 > miè; #6AD7

+櫘 > hùi; #6AD8

+櫙 > ōu; #6AD9

+櫚 > lǘ; #6ADA

+櫛 > jié; #6ADB

+櫜 > gāo; #6ADC

+櫝 > dú; #6ADD

+櫞 > yuán; #6ADE

+櫟 > lì; #6ADF

+櫠 > fèi; #6AE0

+櫡 > zhúo; #6AE1

+櫢 > sŏu; #6AE2

+櫣 > lián; #6AE3

+櫥 > chú; #6AE5

+櫧 > zhū; #6AE7

+櫨 > lú; #6AE8

+櫩 > yán; #6AE9

+櫪 > lì; #6AEA

+櫫 > zhū; #6AEB

+櫬 > chèn; #6AEC

+櫭 > jié; #6AED

+櫮 > è; #6AEE

+櫯 > sū; #6AEF

+櫰 > huái; #6AF0

+櫱 > niè; #6AF1

+櫲 > yù; #6AF2

+櫳 > lóng; #6AF3

+櫴 > lài; #6AF4

+櫶 > xiăn; #6AF6

+櫸 > jŭ; #6AF8

+櫹 > xiāo; #6AF9

+櫺 > líng; #6AFA

+櫻 > yīng; #6AFB

+櫼 > jiān; #6AFC

+櫽 > yĭn; #6AFD

+櫾 > yóu; #6AFE

+櫿 > yíng; #6AFF

+欀 > xiāng; #6B00

+欁 > nóng; #6B01

+欂 > bó; #6B02

+欃 > chán; #6B03

+欄 > lán; #6B04

+欅 > jŭ; #6B05

+欆 > shuāng; #6B06

+欇 > shè; #6B07

+欈 > wéi; #6B08

+欉 > còng; #6B09

+權 > quán; #6B0A

+欋 > qú; #6B0B

+欎 > yù; #6B0E

+欏 > lúo; #6B0F

+欐 > lĭ; #6B10

+欑 > zàn; #6B11

+欒 > luán; #6B12

+欓 > dăng; #6B13

+欔 > jué; #6B14

+欖 > lăn; #6B16

+欗 > lán; #6B17

+欘 > zhŭ; #6B18

+欙 > léi; #6B19

+欚 > lĭ; #6B1A

+欛 > bà; #6B1B

+欜 > náng; #6B1C

+欝 > yù; #6B1D

+欞 > líng; #6B1E

+欠 > qiàn; #6B20

+次 > cì; #6B21

+欢 > huān; #6B22

+欣 > xīn; #6B23

+欤 > yú; #6B24

+欥 > yù; #6B25

+欦 > qiān; #6B26

+欧 > ōu; #6B27

+欨 > xū; #6B28

+欩 > chāo; #6B29

+欪 > chù; #6B2A

+欫 > chī; #6B2B

+欬 > kài; #6B2C

+欭 > yì; #6B2D

+欮 > jué; #6B2E

+欯 > xí; #6B2F

+欰 > xū; #6B30

+欱 > xià; #6B31

+欲 > yù; #6B32

+欳 > kuài; #6B33

+欴 > láng; #6B34

+欵 > kuăn; #6B35

+欶 > shùo; #6B36

+欷 > xī; #6B37

+欸 > ăi; #6B38

+欹 > yī; #6B39

+欺 > qī; #6B3A

+欻 > hū; #6B3B

+欼 > chĭ; #6B3C

+欽 > qīn; #6B3D

+款 > kuăn; #6B3E

+欿 > kăn; #6B3F

+歀 > kuăn; #6B40

+歁 > kăn; #6B41

+歂 > chuán; #6B42

+歃 > shà; #6B43

+歄 > gua; #6B44

+歅 > yīn; #6B45

+歆 > xīn; #6B46

+歇 > xiē; #6B47

+歈 > yú; #6B48

+歉 > qiàn; #6B49

+歊 > xiāo; #6B4A

+歋 > yí; #6B4B

+歌 > gē; #6B4C

+歍 > wū; #6B4D

+歎 > tàn; #6B4E

+歏 > jìn; #6B4F

+歐 > ōu; #6B50

+歑 > hū; #6B51

+歒 > tì; #6B52

+歓 > huān; #6B53

+歔 > xū; #6B54

+歕 > pèn; #6B55

+歖 > xī; #6B56

+歗 > xiào; #6B57

+歘 > xū; #6B58

+歙 > xì; #6B59

+歛 > liàn; #6B5B

+歜 > chù; #6B5C

+歝 > yì; #6B5D

+歞 > kăn; #6B5E

+歟 > yú; #6B5F

+歠 > chùo; #6B60

+歡 > huān; #6B61

+止 > zhĭ; #6B62

+正 > zhèng; #6B63

+此 > cĭ; #6B64

+步 > bù; #6B65

+武 > wŭ; #6B66

+歧 > qí; #6B67

+歨 > bù; #6B68

+歩 > bù; #6B69

+歪 > wāi; #6B6A

+歫 > jù; #6B6B

+歬 > qián; #6B6C

+歭 > chí; #6B6D

+歮 > sè; #6B6E

+歯 > chĭ; #6B6F

+歰 > sè; #6B70

+歱 > zhŏng; #6B71

+歲 > sùi; #6B72

+歳 > sùi; #6B73

+歴 > lì; #6B74

+歵 > cùo; #6B75

+歶 > yú; #6B76

+歷 > lì; #6B77

+歸 > gūi; #6B78

+歹 > dăi; #6B79

+歺 > dăi; #6B7A

+死 > sĭ; #6B7B

+歼 > jiān; #6B7C

+歽 > zhé; #6B7D

+歾 > mò; #6B7E

+歿 > mò; #6B7F

+殀 > yăo; #6B80

+殁 > mò; #6B81

+殂 > cú; #6B82

+殃 > yāng; #6B83

+殄 > tiăn; #6B84

+殅 > shēng; #6B85

+殆 > dài; #6B86

+殇 > shāng; #6B87

+殈 > xù; #6B88

+殉 > xùn; #6B89

+殊 > shū; #6B8A

+残 > cán; #6B8B

+殌 > jué; #6B8C

+殍 > piăo; #6B8D

+殎 > qià; #6B8E

+殏 > qìu; #6B8F

+殐 > sù; #6B90

+殑 > qíng; #6B91

+殒 > yŭn; #6B92

+殓 > liàn; #6B93

+殔 > yì; #6B94

+殕 > fŏu; #6B95

+殖 > zhí; #6B96

+殗 > yè; #6B97

+殘 > cán; #6B98

+殙 > hūn; #6B99

+殚 > dān; #6B9A

+殛 > jí; #6B9B

+殜 > yè; #6B9C

+殝 > zhen; #6B9D

+殞 > yŭn; #6B9E

+殟 > wēn; #6B9F

+殠 > chòu; #6BA0

+殡 > bìn; #6BA1

+殢 > tì; #6BA2

+殣 > jĭn; #6BA3

+殤 > shāng; #6BA4

+殥 > yín; #6BA5

+殦 > diāo; #6BA6

+殧 > cù; #6BA7

+殨 > hùi; #6BA8

+殩 > cuàn; #6BA9

+殪 > yì; #6BAA

+殫 > dān; #6BAB

+殬 > dù; #6BAC

+殭 > jiāng; #6BAD

+殮 > liàn; #6BAE

+殯 > bìn; #6BAF

+殰 > dú; #6BB0

+殲 > jiān; #6BB2

+殳 > shū; #6BB3

+殴 > ōu; #6BB4

+段 > duàn; #6BB5

+殶 > zhù; #6BB6

+殷 > yīn; #6BB7

+殸 > qìng; #6BB8

+殹 > yì; #6BB9

+殺 > shā; #6BBA

+殻 > què; #6BBB

+殼 > ké; #6BBC

+殽 > yáo; #6BBD

+殾 > jùn; #6BBE

+殿 > diàn; #6BBF

+毀 > hŭi; #6BC0

+毁 > hŭi; #6BC1

+毂 > gŭ; #6BC2

+毃 > què; #6BC3

+毄 > jī; #6BC4

+毅 > yì; #6BC5

+毆 > ōu; #6BC6

+毇 > hŭi; #6BC7

+毈 > duàn; #6BC8

+毉 > yī; #6BC9

+毊 > xiāo; #6BCA

+毋 > wú; #6BCB

+毌 > guàn; #6BCC

+母 > mŭ; #6BCD

+毎 > mĕi; #6BCE

+每 > mĕi; #6BCF

+毐 > ăi; #6BD0

+毑 > zŭo; #6BD1

+毒 > dú; #6BD2

+毓 > yù; #6BD3

+比 > bĭ; #6BD4

+毕 > bì; #6BD5

+毖 > bì; #6BD6

+毗 > pí; #6BD7

+毘 > pí; #6BD8

+毙 > bì; #6BD9

+毚 > chán; #6BDA

+毛 > máo; #6BDB

+毞 > pú; #6BDE

+毠 > jiā; #6BE0

+毡 > zhān; #6BE1

+毢 > sāi; #6BE2

+毣 > mù; #6BE3

+毤 > tùo; #6BE4

+毥 > xún; #6BE5

+毦 > èr; #6BE6

+毧 > róng; #6BE7

+毨 > xiăn; #6BE8

+毩 > jú; #6BE9

+毪 > mú; #6BEA

+毫 > háo; #6BEB

+毬 > qíu; #6BEC

+毭 > dòu; #6BED

+毯 > tăn; #6BEF

+毰 > péi; #6BF0

+毱 > jú; #6BF1

+毲 > dúo; #6BF2

+毳 > cùi; #6BF3

+毴 > bī; #6BF4

+毵 > sān; #6BF5

+毷 > mào; #6BF7

+毸 > sūi; #6BF8

+毹 > yū; #6BF9

+毺 > yū; #6BFA

+毻 > tùo; #6BFB

+毼 > hé; #6BFC

+毽 > jiàn; #6BFD

+毾 > tà; #6BFE

+毿 > sān; #6BFF

+氀 > lǘ; #6C00

+氁 > mú; #6C01

+氂 > lí; #6C02

+氃 > tóng; #6C03

+氄 > rŏng; #6C04

+氅 > chăng; #6C05

+氆 > pŭ; #6C06

+氇 > lúo; #6C07

+氈 > zhān; #6C08

+氉 > sào; #6C09

+氊 > zhān; #6C0A

+氋 > méng; #6C0B

+氌 > lúo; #6C0C

+氍 > qú; #6C0D

+氎 > dié; #6C0E

+氏 > shì; #6C0F

+氐 > dĭ; #6C10

+民 > mín; #6C11

+氒 > jué; #6C12

+氓 > máng; #6C13

+气 > qì; #6C14

+氕 > piē; #6C15

+氖 > năi; #6C16

+気 > qì; #6C17

+氘 > dāo; #6C18

+氙 > xiān; #6C19

+氚 > chuān; #6C1A

+氛 > fēn; #6C1B

+氜 > rì; #6C1C

+氝 > nèi; #6C1D

+氟 > fú; #6C1F

+氠 > shēn; #6C20

+氡 > dōng; #6C21

+氢 > qīng; #6C22

+氣 > qì; #6C23

+氤 > yīn; #6C24

+氥 > xī; #6C25

+氦 > hài; #6C26

+氧 > yăng; #6C27

+氨 > ān; #6C28

+氩 > yà; #6C29

+氪 > kè; #6C2A

+氫 > qīng; #6C2B

+氬 > yà; #6C2C

+氭 > dōng; #6C2D

+氮 > dàn; #6C2E

+氯 > lǜ; #6C2F

+氰 > qīng; #6C30

+氱 > yăng; #6C31

+氲 > yūn; #6C32

+氳 > yūn; #6C33

+水 > shŭi; #6C34

+氵 > sān' 'diăn' 'shŭi; #6C35

+氶 > zhĕng; #6C36

+氷 > bīng; #6C37

+永 > yŏng; #6C38

+氹 > dàng; #6C39

+氻 > lè; #6C3B

+氼 > nì; #6C3C

+氽 > tŭn; #6C3D

+氾 > fàn; #6C3E

+氿 > gŭi; #6C3F

+汀 > tīng; #6C40

+汁 > zhī; #6C41

+求 > qíu; #6C42

+汃 > bīn; #6C43

+汄 > zè; #6C44

+汅 > miăn; #6C45

+汆 > cuān; #6C46

+汇 > hùi; #6C47

+汈 > diāo; #6C48

+汉 > yì; #6C49

+汊 > chà; #6C4A

+汋 > zhúo; #6C4B

+汌 > chuàn; #6C4C

+汍 > wán; #6C4D

+汎 > fàn; #6C4E

+汏 > dài; #6C4F

+汐 > xì; #6C50

+汑 > tūo; #6C51

+汒 > máng; #6C52

+汓 > qíu; #6C53

+汔 > qì; #6C54

+汕 > shàn; #6C55

+汖 > pài; #6C56

+汗 > hàn; #6C57

+汘 > qiān; #6C58

+汙 > wū; #6C59

+汚 > wū; #6C5A

+汛 > xùn; #6C5B

+汜 > sì; #6C5C

+汝 > rŭ; #6C5D

+汞 > gŏng; #6C5E

+江 > jiāng; #6C5F

+池 > chí; #6C60

+污 > wū; #6C61

+汤 > tāng; #6C64

+汥 > zhī; #6C65

+汦 > chí; #6C66

+汧 > qiān; #6C67

+汨 > mì; #6C68

+汩 > yù; #6C69

+汪 > wāng; #6C6A

+汫 > qìng; #6C6B

+汬 > jĭng; #6C6C

+汭 > rùi; #6C6D

+汮 > jūn; #6C6E

+汯 > hóng; #6C6F

+汰 > tài; #6C70

+汱 > quăn; #6C71

+汲 > jí; #6C72

+汳 > biàn; #6C73

+汴 > biàn; #6C74

+汵 > gàn; #6C75

+汶 > wèn; #6C76

+汷 > zhōng; #6C77

+汸 > fāng; #6C78

+汹 > xīong; #6C79

+決 > jué; #6C7A

+汻 > hăng; #6C7B

+汼 > niōu; #6C7C

+汽 > qì; #6C7D

+汾 > fén; #6C7E

+汿 > xù; #6C7F

+沀 > xù; #6C80

+沁 > qìn; #6C81

+沂 > yí; #6C82

+沃 > wò; #6C83

+沄 > yún; #6C84

+沅 > yuán; #6C85

+沆 > háng; #6C86

+沇 > yăn; #6C87

+沈 > chén; #6C88

+沉 > chén; #6C89

+沊 > dàn; #6C8A

+沋 > yóu; #6C8B

+沌 > dùn; #6C8C

+沍 > hù; #6C8D

+沎 > hùo; #6C8E

+沏 > qiē; #6C8F

+沐 > mù; #6C90

+沑 > róu; #6C91

+沒 > méi; #6C92

+沓 > tà; #6C93

+沔 > miăn; #6C94

+沕 > wù; #6C95

+沖 > chōng; #6C96

+沗 > tiān; #6C97

+沘 > bĭ; #6C98

+沙 > shā; #6C99

+沚 > zhĭ; #6C9A

+沛 > pèi; #6C9B

+沜 > pàn; #6C9C

+沝 > zhŭi; #6C9D

+沞 > zā; #6C9E

+沟 > gōu; #6C9F

+沠 > líu; #6CA0

+没 > méi; #6CA1

+沢 > zé; #6CA2

+沣 > fēng; #6CA3

+沤 > òu; #6CA4

+沥 > lì; #6CA5

+沦 > lún; #6CA6

+沧 > cāng; #6CA7

+沨 > féng; #6CA8

+沩 > wéi; #6CA9

+沪 > hù; #6CAA

+沫 > mò; #6CAB

+沬 > mèi; #6CAC

+沭 > shù; #6CAD

+沮 > jū; #6CAE

+沯 > zăn; #6CAF

+沰 > tūo; #6CB0

+沱 > túo; #6CB1

+沲 > túo; #6CB2

+河 > hé; #6CB3

+沴 > lì; #6CB4

+沵 > mĭ; #6CB5

+沶 > yí; #6CB6

+沷 > fā; #6CB7

+沸 > fèi; #6CB8

+油 > yóu; #6CB9

+沺 > tián; #6CBA

+治 > zhì; #6CBB

+沼 > zhăo; #6CBC

+沽 > gū; #6CBD

+沾 > zhān; #6CBE

+沿 > yán; #6CBF

+泀 > sī; #6CC0

+況 > kuàng; #6CC1

+泂 > jĭong; #6CC2

+泃 > jù; #6CC3

+泄 > xiè; #6CC4

+泅 > qíu; #6CC5

+泆 > yī; #6CC6

+泇 > jiā; #6CC7

+泈 > zhōng; #6CC8

+泉 > quán; #6CC9

+泊 > bó; #6CCA

+泋 > hùi; #6CCB

+泌 > mì; #6CCC

+泍 > bēn; #6CCD

+泎 > zhúo; #6CCE

+泏 > chù; #6CCF

+泐 > lè; #6CD0

+泑 > yŏu; #6CD1

+泒 > gū; #6CD2

+泓 > hóng; #6CD3

+泔 > gān; #6CD4

+法 > fă; #6CD5

+泖 > măo; #6CD6

+泗 > sì; #6CD7

+泘 > hū; #6CD8

+泙 > píng; #6CD9

+泚 > cĭ; #6CDA

+泛 > fàn; #6CDB

+泜 > chí; #6CDC

+泝 > sù; #6CDD

+泞 > nìng; #6CDE

+泟 > chēng; #6CDF

+泠 > líng; #6CE0

+泡 > pào; #6CE1

+波 > bō; #6CE2

+泣 > qì; #6CE3

+泤 > sì; #6CE4

+泥 > ní; #6CE5

+泦 > jú; #6CE6

+泧 > yuè; #6CE7

+注 > zhù; #6CE8

+泩 > shēng; #6CE9

+泪 > lèi; #6CEA

+泫 > xuàn; #6CEB

+泬 > xuè; #6CEC

+泭 > fū; #6CED

+泮 > pàn; #6CEE

+泯 > mĭn; #6CEF

+泰 > tài; #6CF0

+泱 > yāng; #6CF1

+泲 > jĭ; #6CF2

+泳 > yŏng; #6CF3

+泴 > guàn; #6CF4

+泵 > bèng; #6CF5

+泶 > xué; #6CF6

+泷 > lóng; #6CF7

+泸 > lú; #6CF8

+泺 > bó; #6CFA

+泻 > xiè; #6CFB

+泼 > pō; #6CFC

+泽 > zé; #6CFD

+泾 > jīng; #6CFE

+泿 > yín; #6CFF

+洀 > zhōu; #6D00

+洁 > jí; #6D01

+洂 > yì; #6D02

+洃 > hūi; #6D03

+洄 > húi; #6D04

+洅 > zŭi; #6D05

+洆 > chéng; #6D06

+洇 > yīn; #6D07

+洈 > wéi; #6D08

+洉 > hòu; #6D09

+洊 > jiàn; #6D0A

+洋 > yáng; #6D0B

+洌 > liè; #6D0C

+洍 > sì; #6D0D

+洎 > jì; #6D0E

+洏 > ér; #6D0F

+洐 > xíng; #6D10

+洑 > fú; #6D11

+洒 > să; #6D12

+洓 > sŭo; #6D13

+洔 > zhĭ; #6D14

+洕 > yīn; #6D15

+洖 > wú; #6D16

+洗 > xĭ; #6D17

+洘 > kăo; #6D18

+洙 > zhū; #6D19

+洚 > jiàng; #6D1A

+洛 > lùo; #6D1B

+洝 > àn; #6D1D

+洞 > dòng; #6D1E

+洟 > yí; #6D1F

+洠 > móu; #6D20

+洡 > lĕi; #6D21

+洢 > yī; #6D22

+洣 > mĭ; #6D23

+洤 > quán; #6D24

+津 > jīn; #6D25

+洦 > mò; #6D26

+洧 > wĕi; #6D27

+洨 > xiáo; #6D28

+洩 > xiè; #6D29

+洪 > hóng; #6D2A

+洫 > xù; #6D2B

+洬 > shùo; #6D2C

+洭 > kuāng; #6D2D

+洮 > tāo; #6D2E

+洯 > qiè; #6D2F

+洰 > jù; #6D30

+洱 > ĕr; #6D31

+洲 > zhōu; #6D32

+洳 > rù; #6D33

+洴 > píng; #6D34

+洵 > xún; #6D35

+洶 > xīong; #6D36

+洷 > zhì; #6D37

+洸 > guāng; #6D38

+洹 > huán; #6D39

+洺 > míng; #6D3A

+活 > húo; #6D3B

+洼 > wā; #6D3C

+洽 > qià; #6D3D

+派 > pài; #6D3E

+洿 > wū; #6D3F

+浀 > qŭ; #6D40

+流 > líu; #6D41

+浂 > yì; #6D42

+浃 > jiá; #6D43

+浄 > jìng; #6D44

+浅 > qiăn; #6D45

+浆 > jiāng; #6D46

+浇 > jiāo; #6D47

+浈 > chéng; #6D48

+浉 > shī; #6D49

+浊 > zhúo; #6D4A

+测 > cè; #6D4B

+浍 > kuài; #6D4D

+济 > jì; #6D4E

+浏 > líu; #6D4F

+浐 > chăn; #6D50

+浑 > hún; #6D51

+浒 > hŭ; #6D52

+浓 > nóng; #6D53

+浔 > xún; #6D54

+浕 > jìn; #6D55

+浖 > liè; #6D56

+浗 > qíu; #6D57

+浘 > wĕi; #6D58

+浙 > zhè; #6D59

+浚 > jùn; #6D5A

+浛 > hàn; #6D5B

+浜 > bāng; #6D5C

+浝 > máng; #6D5D

+浞 > zhúo; #6D5E

+浟 > yóu; #6D5F

+浠 > xī; #6D60

+浡 > bó; #6D61

+浢 > dòu; #6D62

+浣 > wăn; #6D63

+浤 > hóng; #6D64

+浥 > yì; #6D65

+浦 > pŭ; #6D66

+浧 > yĭng; #6D67

+浨 > lăn; #6D68

+浩 > hào; #6D69

+浪 > làng; #6D6A

+浫 > hăn; #6D6B

+浬 > lĭ; #6D6C

+浭 > gēng; #6D6D

+浮 > fú; #6D6E

+浯 > wú; #6D6F

+浰 > liàn; #6D70

+浱 > chún; #6D71

+浲 > féng; #6D72

+浳 > yì; #6D73

+浴 > yù; #6D74

+浵 > tóng; #6D75

+浶 > láo; #6D76

+海 > hăi; #6D77

+浸 > jìn; #6D78

+浹 > jiá; #6D79

+浺 > chōng; #6D7A

+浻 > wĕng; #6D7B

+浼 > mĕi; #6D7C

+浽 > sūi; #6D7D

+浾 > chēng; #6D7E

+浿 > pèi; #6D7F

+涀 > xiàn; #6D80

+涁 > shèn; #6D81

+涂 > tú; #6D82

+涃 > kùn; #6D83

+涄 > pīn; #6D84

+涅 > niè; #6D85

+涆 > hàn; #6D86

+涇 > jīng; #6D87

+消 > xiāo; #6D88

+涉 > shè; #6D89

+涊 > niàn; #6D8A

+涋 > tū; #6D8B

+涌 > yŏng; #6D8C

+涍 > xiào; #6D8D

+涎 > xián; #6D8E

+涏 > tĭng; #6D8F

+涐 > é; #6D90

+涑 > sù; #6D91

+涒 > tūn; #6D92

+涓 > juān; #6D93

+涔 > cén; #6D94

+涕 > tì; #6D95

+涖 > lì; #6D96

+涗 > shùi; #6D97

+涘 > sì; #6D98

+涙 > lèi; #6D99

+涚 > shùi; #6D9A

+涛 > tāo; #6D9B

+涜 > dú; #6D9C

+涝 > lào; #6D9D

+涞 > lái; #6D9E

+涟 > lián; #6D9F

+涠 > wéi; #6DA0

+涡 > wō; #6DA1

+涢 > yún; #6DA2

+涣 > huàn; #6DA3

+涤 > dí; #6DA4

+润 > rùn; #6DA6

+涧 > jiàn; #6DA7

+涨 > zhăng; #6DA8

+涩 > sè; #6DA9

+涪 > fú; #6DAA

+涫 > guàn; #6DAB

+涬 > xìng; #6DAC

+涭 > shòu; #6DAD

+涮 > shuàn; #6DAE

+涯 > yá; #6DAF

+涰 > chùo; #6DB0

+涱 > zhàng; #6DB1

+液 > yè; #6DB2

+涳 > kōng; #6DB3

+涴 > wò; #6DB4

+涵 > hán; #6DB5

+涶 > tūo; #6DB6

+涷 > dōng; #6DB7

+涸 > hé; #6DB8

+涹 > wō; #6DB9

+涺 > jū; #6DBA

+涻 > gàn; #6DBB

+涼 > liáng; #6DBC

+涽 > hūn; #6DBD

+涾 > tà; #6DBE

+涿 > zhúo; #6DBF

+淀 > diàn; #6DC0

+淁 > qiè; #6DC1

+淂 > dé; #6DC2

+淃 > juàn; #6DC3

+淄 > zī; #6DC4

+淅 > xī; #6DC5

+淆 > yáo; #6DC6

+淇 > qí; #6DC7

+淈 > gŭ; #6DC8

+淉 > gŭo; #6DC9

+淊 > hàn; #6DCA

+淋 > lín; #6DCB

+淌 > tăng; #6DCC

+淍 > zhōu; #6DCD

+淎 > pĕng; #6DCE

+淏 > hào; #6DCF

+淐 > chāng; #6DD0

+淑 > shú; #6DD1

+淒 > qī; #6DD2

+淓 > fāng; #6DD3

+淔 > chì; #6DD4

+淕 > lù; #6DD5

+淖 > nào; #6DD6

+淗 > jú; #6DD7

+淘 > táo; #6DD8

+淙 > cóng; #6DD9

+淚 > lèi; #6DDA

+淛 > zhì; #6DDB

+淜 > péng; #6DDC

+淝 > féi; #6DDD

+淞 > sōng; #6DDE

+淟 > tiăn; #6DDF

+淠 > pì; #6DE0

+淡 > dàn; #6DE1

+淢 > yù; #6DE2

+淣 > ní; #6DE3

+淤 > yū; #6DE4

+淥 > lù; #6DE5

+淦 > gàn; #6DE6

+淧 > mì; #6DE7

+淨 > jìng; #6DE8

+淩 > líng; #6DE9

+淪 > lún; #6DEA

+淫 > yín; #6DEB

+淬 > cùi; #6DEC

+淭 > qú; #6DED

+淮 > huái; #6DEE

+淯 > yù; #6DEF

+淰 > niàn; #6DF0

+深 > shēn; #6DF1

+淲 > piáo; #6DF2

+淳 > chún; #6DF3

+淴 > wà; #6DF4

+淵 > yuān; #6DF5

+淶 > lái; #6DF6

+混 > hŭn; #6DF7

+淸 > qīng; #6DF8

+淹 > yān; #6DF9

+淺 > qiăn; #6DFA

+添 > tiān; #6DFB

+淼 > miăo; #6DFC

+淽 > zhĭ; #6DFD

+淾 > yĭn; #6DFE

+淿 > mì; #6DFF

+渀 > bēn; #6E00

+渁 > yuān; #6E01

+渂 > wèn; #6E02

+渃 > rè; #6E03

+渄 > fēi; #6E04

+清 > qīng; #6E05

+渆 > yuān; #6E06

+渇 > kĕ; #6E07

+済 > jì; #6E08

+渉 > shè; #6E09

+渊 > yuān; #6E0A

+渌 > lù; #6E0C

+渍 > zì; #6E0D

+渎 > dú; #6E0E

+渐 > jiàn; #6E10

+渑 > mĭn; #6E11

+渒 > pì; #6E12

+渔 > yú; #6E14

+渕 > yuān; #6E15

+渖 > shĕn; #6E16

+渗 > shèn; #6E17

+渘 > róu; #6E18

+渙 > huàn; #6E19

+渚 > zhŭ; #6E1A

+減 > jiăn; #6E1B

+渜 > nuăn; #6E1C

+渝 > yú; #6E1D

+渞 > qíu; #6E1E

+渟 > tíng; #6E1F

+渠 > qú; #6E20

+渡 > dù; #6E21

+渢 > féng; #6E22

+渣 > zhā; #6E23

+渤 > bó; #6E24

+渥 > wò; #6E25

+渦 > wō; #6E26

+渧 > dì; #6E27

+渨 > wēi; #6E28

+温 > wēn; #6E29

+渪 > rú; #6E2A

+渫 > xiè; #6E2B

+測 > cè; #6E2C

+渭 > wèi; #6E2D

+渮 > gē; #6E2E

+港 > găng; #6E2F

+渰 > yăn; #6E30

+渱 > hóng; #6E31

+渲 > xuàn; #6E32

+渳 > mĭ; #6E33

+渴 > kĕ; #6E34

+渵 > máo; #6E35

+渶 > yīng; #6E36

+渷 > yăn; #6E37

+游 > yóu; #6E38

+渹 > hōng; #6E39

+渺 > miăo; #6E3A

+渻 > xĭng; #6E3B

+渼 > mĕi; #6E3C

+渽 > zāi; #6E3D

+渾 > hún; #6E3E

+渿 > nài; #6E3F

+湀 > kúi; #6E40

+湁 > shí; #6E41

+湂 > è; #6E42

+湃 > pài; #6E43

+湄 > méi; #6E44

+湅 > liàn; #6E45

+湆 > qì; #6E46

+湇 > qì; #6E47

+湈 > méi; #6E48

+湉 > tián; #6E49

+湊 > còu; #6E4A

+湋 > wéi; #6E4B

+湌 > cān; #6E4C

+湍 > tuān; #6E4D

+湎 > miăn; #6E4E

+湏 > hùi; #6E4F

+湐 > mò; #6E50

+湑 > xŭ; #6E51

+湒 > jí; #6E52

+湓 > pén; #6E53

+湔 > jiān; #6E54

+湕 > jiăn; #6E55

+湖 > hú; #6E56

+湗 > fèng; #6E57

+湘 > xiāng; #6E58

+湙 > yì; #6E59

+湚 > yìn; #6E5A

+湛 > zhàn; #6E5B

+湜 > shí; #6E5C

+湝 > jiē; #6E5D

+湞 > chéng; #6E5E

+湟 > huáng; #6E5F

+湠 > tàn; #6E60

+湡 > yú; #6E61

+湢 > bì; #6E62

+湣 > mĭn; #6E63

+湤 > shī; #6E64

+湥 > tú; #6E65

+湦 > shēng; #6E66

+湧 > yŏng; #6E67

+湨 > qù; #6E68

+湩 > zhòng; #6E69

+湪 > suèi; #6E6A

+湫 > jīu; #6E6B

+湬 > jiăo; #6E6C

+湭 > qióu; #6E6D

+湮 > yīn; #6E6E

+湯 > tāng; #6E6F

+湰 > lóng; #6E70

+湱 > hùo; #6E71

+湲 > yuán; #6E72

+湳 > năn; #6E73

+湴 > bàn; #6E74

+湵 > yŏu; #6E75

+湶 > quán; #6E76

+湷 > chúi; #6E77

+湸 > liàng; #6E78

+湹 > chán; #6E79

+湺 > yán; #6E7A

+湻 > chún; #6E7B

+湼 > niè; #6E7C

+湽 > zī; #6E7D

+湾 > wān; #6E7E

+湿 > shī; #6E7F

+満 > măn; #6E80

+溁 > yíng; #6E81

+溃 > kùi; #6E83

+溅 > jiàn; #6E85

+溆 > xù; #6E86

+溇 > lǚ; #6E87

+溈 > gūi; #6E88

+溉 > gài; #6E89

+溌 > pō; #6E8C

+溍 > jìn; #6E8D

+溎 > gùi; #6E8E

+溏 > táng; #6E8F

+源 > yuán; #6E90

+溑 > sŭo; #6E91

+溒 > yuán; #6E92

+溓 > lián; #6E93

+溔 > yăo; #6E94

+溕 > mèng; #6E95

+準 > zhŭn; #6E96

+溗 > shéng; #6E97

+溘 > kè; #6E98

+溙 > tài; #6E99

+溚 > dá; #6E9A

+溛 > wā; #6E9B

+溜 > līu; #6E9C

+溝 > gōu; #6E9D

+溞 > sāo; #6E9E

+溟 > míng; #6E9F

+溠 > zhà; #6EA0

+溡 > shí; #6EA1

+溢 > yì; #6EA2

+溣 > lún; #6EA3

+溤 > mă; #6EA4

+溥 > pŭ; #6EA5

+溦 > wéi; #6EA6

+溧 > lì; #6EA7

+溨 > cái; #6EA8

+溩 > wù; #6EA9

+溪 > xī; #6EAA

+溫 > wēn; #6EAB

+溬 > qiāng; #6EAC

+溭 > zé; #6EAD

+溮 > shī; #6EAE

+溯 > sù; #6EAF

+溰 > yī; #6EB0

+溱 > zhēn; #6EB1

+溲 > sōu; #6EB2

+溳 > yún; #6EB3

+溴 > xìu; #6EB4

+溵 > yīn; #6EB5

+溶 > róng; #6EB6

+溷 > hùn; #6EB7

+溸 > sù; #6EB8

+溹 > sù; #6EB9

+溺 > nì; #6EBA

+溻 > tà; #6EBB

+溼 > shī; #6EBC

+溽 > rù; #6EBD

+溾 > wēi; #6EBE

+溿 > pàn; #6EBF

+滀 > chù; #6EC0

+滁 > chú; #6EC1

+滂 > pāng; #6EC2

+滃 > wĕng; #6EC3

+滄 > cāng; #6EC4

+滅 > miè; #6EC5

+滆 > hé; #6EC6

+滇 > diān; #6EC7

+滈 > hào; #6EC8

+滉 > huăng; #6EC9

+滊 > xì; #6ECA

+滋 > zī; #6ECB

+滌 > dí; #6ECC

+滍 > zhĭ; #6ECD

+滎 > yíng; #6ECE

+滏 > fŭ; #6ECF

+滐 > jié; #6ED0

+滑 > huá; #6ED1

+滒 > gē; #6ED2

+滓 > zĭ; #6ED3

+滔 > tāo; #6ED4

+滕 > téng; #6ED5

+滖 > sūi; #6ED6

+滗 > bĭ; #6ED7

+滘 > jiào; #6ED8

+滙 > hùi; #6ED9

+滚 > gŭn; #6EDA

+滛 > yín; #6EDB

+滜 > gāo; #6EDC

+滝 > lóng; #6EDD

+滞 > zhì; #6EDE

+滟 > yàn; #6EDF

+滠 > shè; #6EE0

+满 > măn; #6EE1

+滢 > yìng; #6EE2

+滣 > chún; #6EE3

+滤 > lǜ; #6EE4

+滥 > làn; #6EE5

+滦 > luán; #6EE6

+滨 > bīn; #6EE8

+滩 > tān; #6EE9

+滪 > yù; #6EEA

+滫 > sŏu; #6EEB

+滬 > hù; #6EEC

+滭 > bì; #6EED

+滮 > biāo; #6EEE

+滯 > zhì; #6EEF

+滰 > jiăng; #6EF0

+滱 > kòu; #6EF1

+滲 > shèn; #6EF2

+滳 > shāng; #6EF3

+滴 > dī; #6EF4

+滵 > mì; #6EF5

+滶 > áo; #6EF6

+滷 > lŭ; #6EF7

+滸 > hŭ; #6EF8

+滹 > hū; #6EF9

+滺 > yóu; #6EFA

+滻 > chăn; #6EFB

+滼 > fàn; #6EFC

+滽 > yóng; #6EFD

+滾 > gŭn; #6EFE

+滿 > măn; #6EFF

+漀 > qìng; #6F00

+漁 > yú; #6F01

+漂 > piāo; #6F02

+漃 > jí; #6F03

+漄 > yá; #6F04

+漅 > jiăo; #6F05

+漆 > qī; #6F06

+漇 > xĭ; #6F07

+漈 > jì; #6F08

+漉 > lù; #6F09

+漊 > lǚ; #6F0A

+漋 > lóng; #6F0B

+漌 > jĭn; #6F0C

+漍 > gúo; #6F0D

+漎 > cóng; #6F0E

+漏 > lòu; #6F0F

+漐 > zhí; #6F10

+漑 > gài; #6F11

+漒 > qiáng; #6F12

+漓 > lí; #6F13

+演 > yăn; #6F14

+漕 > cáo; #6F15

+漖 > jiào; #6F16

+漗 > cōng; #6F17

+漘 > qún; #6F18

+漙 > tuán; #6F19

+漚 > òu; #6F1A

+漛 > téng; #6F1B

+漜 > yĕ; #6F1C

+漝 > xí; #6F1D

+漞 > mì; #6F1E

+漟 > táng; #6F1F

+漠 > mò; #6F20

+漡 > shāng; #6F21

+漢 > hàn; #6F22

+漣 > lián; #6F23

+漤 > lăn; #6F24

+漥 > wā; #6F25

+漦 > lí; #6F26

+漧 > qián; #6F27

+漨 > féng; #6F28

+漩 > xuán; #6F29

+漪 > yī; #6F2A

+漫 > màn; #6F2B

+漬 > zì; #6F2C

+漭 > măng; #6F2D

+漮 > kāng; #6F2E

+漯 > lĕi; #6F2F

+漰 > pēng; #6F30

+漱 > shù; #6F31

+漲 > zhăng; #6F32

+漳 > zhāng; #6F33

+漴 > chóng; #6F34

+漵 > xù; #6F35

+漶 > huàn; #6F36

+漷 > kùo; #6F37

+漸 > jiàn; #6F38

+漹 > yān; #6F39

+漺 > chuăng; #6F3A

+漻 > liáo; #6F3B

+漼 > cŭi; #6F3C

+漽 > tí; #6F3D

+漾 > yàng; #6F3E

+漿 > jiāng; #6F3F

+潀 > cóng; #6F40

+潁 > yĭng; #6F41

+潂 > hóng; #6F42

+潃 > xún; #6F43

+潄 > shù; #6F44

+潅 > guàn; #6F45

+潆 > yíng; #6F46

+潇 > xiāo; #6F47

+潊 > xù; #6F4A

+潋 > liàn; #6F4B

+潌 > zhì; #6F4C

+潍 > wéi; #6F4D

+潎 > pì; #6F4E

+潏 > jué; #6F4F

+潐 > jiào; #6F50

+潑 > pō; #6F51

+潒 > dàng; #6F52

+潓 > hùi; #6F53

+潔 > jié; #6F54

+潕 > wŭ; #6F55

+潖 > pá; #6F56

+潗 > jí; #6F57

+潘 > pān; #6F58

+潙 > gúi; #6F59

+潚 > xiāo; #6F5A

+潛 > qián; #6F5B

+潜 > qián; #6F5C

+潝 > xī; #6F5D

+潞 > lù; #6F5E

+潟 > xì; #6F5F

+潠 > xuàn; #6F60

+潡 > dùn; #6F61

+潢 > huáng; #6F62

+潣 > mĭn; #6F63

+潤 > rùn; #6F64

+潥 > sù; #6F65

+潦 > liáo; #6F66

+潧 > zhēn; #6F67

+潨 > zhōng; #6F68

+潩 > yì; #6F69

+潪 > dí; #6F6A

+潫 > wān; #6F6B

+潬 > dàn; #6F6C

+潭 > tán; #6F6D

+潮 > cháo; #6F6E

+潯 > xún; #6F6F

+潰 > kùi; #6F70

+潱 > yie; #6F71

+潲 > shào; #6F72

+潳 > tú; #6F73

+潴 > zhū; #6F74

+潵 > sàn; #6F75

+潶 > hēi; #6F76

+潷 > bĭ; #6F77

+潸 > shān; #6F78

+潹 > chán; #6F79

+潺 > chán; #6F7A

+潻 > shŭ; #6F7B

+潼 > tóng; #6F7C

+潽 > pŭ; #6F7D

+潾 > lín; #6F7E

+潿 > wéi; #6F7F

+澀 > sè; #6F80

+澁 > sè; #6F81

+澂 > chéng; #6F82

+澃 > jìong; #6F83

+澄 > chéng; #6F84

+澅 > huà; #6F85

+澆 > jiāo; #6F86

+澇 > lào; #6F87

+澈 > chè; #6F88

+澉 > găn; #6F89

+澊 > cūn; #6F8A

+澋 > hèng; #6F8B

+澌 > sī; #6F8C

+澍 > shù; #6F8D

+澎 > péng; #6F8E

+澏 > hàn; #6F8F

+澐 > yún; #6F90

+澑 > lìu; #6F91

+澒 > hòng; #6F92

+澓 > fú; #6F93

+澔 > hào; #6F94

+澕 > hé; #6F95

+澖 > xiān; #6F96

+澗 > jiàn; #6F97

+澘 > shān; #6F98

+澙 > xì; #6F99

+澜 > lán; #6F9C

+澞 > yú; #6F9E

+澟 > lĭn; #6F9F

+澠 > mĭn; #6FA0

+澡 > zăo; #6FA1

+澢 > dāng; #6FA2

+澣 > wăn; #6FA3

+澤 > zé; #6FA4

+澥 > xiè; #6FA5

+澦 > yù; #6FA6

+澧 > lĭ; #6FA7

+澨 > shì; #6FA8

+澩 > xué; #6FA9

+澪 > líng; #6FAA

+澫 > màn; #6FAB

+澬 > zī; #6FAC

+澭 > yōng; #6FAD

+澮 > kuài; #6FAE

+澯 > càn; #6FAF

+澰 > liàn; #6FB0

+澱 > diàn; #6FB1

+澲 > yè; #6FB2

+澳 > ào; #6FB3

+澴 > huán; #6FB4

+澵 > zhēn; #6FB5

+澶 > chán; #6FB6

+澷 > màn; #6FB7

+澸 > dăn; #6FB8

+澹 > dàn; #6FB9

+澺 > yì; #6FBA

+澻 > sùi; #6FBB

+澼 > pì; #6FBC

+澽 > jù; #6FBD

+澾 > tà; #6FBE

+澿 > qín; #6FBF

+激 > jī; #6FC0

+濁 > zhúo; #6FC1

+濂 > lián; #6FC2

+濃 > nóng; #6FC3

+濄 > gūo; #6FC4

+濅 > jìn; #6FC5

+濆 > fén; #6FC6

+濇 > sè; #6FC7

+濈 > jí; #6FC8

+濉 > sūi; #6FC9

+濊 > hùi; #6FCA

+濋 > chŭ; #6FCB

+濌 > tà; #6FCC

+濍 > sōng; #6FCD

+濎 > dĭng; #6FCE

+濐 > zhŭ; #6FD0

+濑 > lài; #6FD1

+濒 > bīn; #6FD2

+濓 > lián; #6FD3

+濔 > mĭ; #6FD4

+濕 > shī; #6FD5

+濖 > shù; #6FD6

+濗 > mì; #6FD7

+濘 > nìng; #6FD8

+濙 > yíng; #6FD9

+濚 > yíng; #6FDA

+濛 > méng; #6FDB

+濜 > jìn; #6FDC

+濝 > qí; #6FDD

+濞 > pì; #6FDE

+濟 > jì; #6FDF

+濠 > háo; #6FE0

+濡 > rú; #6FE1

+濢 > zŭi; #6FE2

+濣 > wò; #6FE3

+濤 > tāo; #6FE4

+濥 > yìn; #6FE5

+濦 > yĭn; #6FE6

+濧 > dùi; #6FE7

+濨 > cí; #6FE8

+濩 > hùo; #6FE9

+濪 > jìng; #6FEA

+濫 > làn; #6FEB

+濬 > jùn; #6FEC

+濭 > ài; #6FED

+濮 > pū; #6FEE

+濯 > zhúo; #6FEF

+濰 > wéi; #6FF0

+濱 > bīn; #6FF1

+濲 > gŭ; #6FF2

+濳 > qián; #6FF3

+濴 > xíng; #6FF4

+濶 > kùo; #6FF6

+濷 > fèi; #6FF7

+濺 > jiàn; #6FFA

+濻 > wĕi; #6FFB

+濼 > lùo; #6FFC

+濽 > zàn; #6FFD

+濾 > lǜ; #6FFE

+濿 > lì; #6FFF

+瀀 > yōu; #7000

+瀁 > yàng; #7001

+瀂 > lŭ; #7002

+瀃 > sì; #7003

+瀄 > jié; #7004

+瀅 > yìng; #7005

+瀆 > dú; #7006

+瀇 > wăng; #7007

+瀈 > hūi; #7008

+瀉 > xiè; #7009

+瀊 > pán; #700A

+瀋 > shĕn; #700B

+瀌 > biāo; #700C

+瀍 > chán; #700D

+瀎 > mò; #700E

+瀏 > líu; #700F

+瀐 > jiān; #7010

+瀑 > pù; #7011

+瀒 > sè; #7012

+瀓 > chéng; #7013

+瀔 > gŭ; #7014

+瀕 > bīn; #7015

+瀖 > hùo; #7016

+瀗 > xiàn; #7017

+瀘 > lú; #7018

+瀙 > qīn; #7019

+瀚 > hàn; #701A

+瀛 > yíng; #701B

+瀜 > yōng; #701C

+瀝 > lì; #701D

+瀞 > jìng; #701E

+瀟 > xiāo; #701F

+瀠 > yíng; #7020

+瀡 > sŭi; #7021

+瀢 > wéi; #7022

+瀣 > xiè; #7023

+瀤 > huái; #7024

+瀥 > hào; #7025

+瀦 > zhū; #7026

+瀧 > lóng; #7027

+瀨 > lài; #7028

+瀩 > dùi; #7029

+瀪 > fán; #702A

+瀫 > hú; #702B

+瀬 > lài; #702C

+瀯 > yíng; #702F

+瀰 > mí; #7030

+瀱 > jì; #7031

+瀲 > liàn; #7032

+瀳 > jiàn; #7033

+瀴 > yĭng; #7034

+瀵 > fèn; #7035

+瀶 > lín; #7036

+瀷 > yì; #7037

+瀸 > jiān; #7038

+瀹 > yuè; #7039

+瀺 > chán; #703A

+瀻 > dài; #703B

+瀼 > ráng; #703C

+瀽 > jiăn; #703D

+瀾 > lán; #703E

+瀿 > fán; #703F

+灀 > shuàng; #7040

+灁 > yuān; #7041

+灂 > zhúo; #7042

+灃 > fēng; #7043

+灄 > shè; #7044

+灅 > lĕi; #7045

+灆 > lán; #7046

+灇 > cóng; #7047

+灈 > qú; #7048

+灉 > yōng; #7049

+灊 > qián; #704A

+灋 > fă; #704B

+灌 > guàn; #704C

+灍 > què; #704D

+灎 > yàn; #704E

+灏 > hào; #704F

+灑 > să; #7051

+灒 > zàn; #7052

+灓 > luán; #7053

+灔 > yàn; #7054

+灕 > lí; #7055

+灖 > mĭ; #7056

+灗 > shàn; #7057

+灘 > tān; #7058

+灙 > dăng; #7059

+灚 > jiăo; #705A

+灛 > chăn; #705B

+灝 > hào; #705D

+灞 > bà; #705E

+灟 > zhú; #705F

+灠 > lăn; #7060

+灡 > lán; #7061

+灢 > năng; #7062

+灣 > wān; #7063

+灤 > luán; #7064

+灥 > xún; #7065

+灦 > xiăn; #7066

+灧 > yàn; #7067

+灨 > găn; #7068

+灩 > yàn; #7069

+灪 > yù; #706A

+火 > hŭo; #706B

+灬 > sì' 'diăn' 'hŭo; #706C

+灭 > miè; #706D

+灮 > guāng; #706E

+灯 > dēng; #706F

+灰 > hūi; #7070

+灱 > xiāo; #7071

+灲 > xiāo; #7072

+灳 > hū1; #7073

+灴 > hóng; #7074

+灵 > líng; #7075

+灶 > zào; #7076

+灷 > zhuàn; #7077

+灸 > jĭu; #7078

+灹 > zhà; #7079

+灺 > xiè; #707A

+灻 > chì; #707B

+灼 > zhúo; #707C

+災 > zāi; #707D

+灾 > zāi; #707E

+灿 > càn; #707F

+炀 > yáng; #7080

+炁 > qì; #7081

+炂 > zhōng; #7082

+炃 > fén; #7083

+炄 > nĭu; #7084

+炅 > jĭong; #7085

+炆 > wén; #7086

+炇 > pò; #7087

+炈 > yì; #7088

+炉 > lú; #7089

+炊 > chūi; #708A

+炋 > pī; #708B

+炌 > kài; #708C

+炍 > pàn; #708D

+炎 > yán; #708E

+炏 > kài; #708F

+炐 > pàng; #7090

+炑 > mù; #7091

+炒 > chăo; #7092

+炓 > liào; #7093

+炔 > gùi; #7094

+炕 > kàng; #7095

+炖 > tūn; #7096

+炗 > guāng; #7097

+炘 > xīn; #7098

+炙 > zhì; #7099

+炚 > guang; #709A

+炛 > guāng; #709B

+炜 > wĕi; #709C

+炝 > qiàng; #709D

+炟 > dá; #709F

+炠 > xiá; #70A0

+炡 > zhēng; #70A1

+炢 > zhú; #70A2

+炣 > kĕ; #70A3

+炤 > zhào; #70A4

+炥 > fú; #70A5

+炦 > bá; #70A6

+炧 > dùo; #70A7

+炨 > dùo; #70A8

+炩 > lìng; #70A9

+炪 > zhúo; #70AA

+炫 > xuàn; #70AB

+炬 > jù; #70AC

+炭 > tàn; #70AD

+炮 > pào; #70AE

+炯 > jĭong; #70AF

+炰 > páo; #70B0

+炱 > tái; #70B1

+炲 > tái; #70B2

+炳 > bĭng; #70B3

+炴 > yăng; #70B4

+炵 > tōng; #70B5

+炶 > hān; #70B6

+炷 > zhù; #70B7

+炸 > zhà; #70B8

+点 > diăn; #70B9

+為 > wèi; #70BA

+炻 > shí; #70BB

+炼 > liàn; #70BC

+炽 > chì; #70BD

+炾 > huăng; #70BE

+烀 > hū; #70C0

+烁 > shùo; #70C1

+烂 > làn; #70C2

+烃 > jĭng; #70C3

+烄 > jiăo; #70C4

+烅 > xù; #70C5

+烆 > xíng; #70C6

+烇 > quàn; #70C7

+烈 > liè; #70C8

+烉 > huàn; #70C9

+烊 > yáng; #70CA

+烋 > xiāo; #70CB

+烌 > xīu; #70CC

+烍 > xiăn; #70CD

+烎 > yín; #70CE

+烏 > wū; #70CF

+烐 > zhōu; #70D0

+烑 > yáo; #70D1

+烒 > shì; #70D2

+烓 > wēi; #70D3

+烔 > tóng; #70D4

+烕 > xuè; #70D5

+烖 > zāi; #70D6

+烗 > kài; #70D7

+烘 > hōng; #70D8

+烙 > lùo; #70D9

+烚 > xiá; #70DA

+烛 > zhú; #70DB

+烜 > xuăn; #70DC

+烝 > zhēng; #70DD

+烞 > pò; #70DE

+烟 > yān; #70DF

+烠 > hŭi; #70E0

+烡 > guāng; #70E1

+烢 > zhè; #70E2

+烣 > hūi; #70E3

+烤 > kăo; #70E4

+烦 > fán; #70E6

+烧 > shāo; #70E7

+烨 > yè; #70E8

+烩 > hùi; #70E9

+烫 > tàng; #70EB

+烬 > jìn; #70EC

+热 > rè; #70ED

+烯 > xī; #70EF

+烰 > fú; #70F0

+烱 > jĭong; #70F1

+烲 > chè; #70F2

+烳 > pŭ; #70F3

+烴 > jĭng; #70F4

+烵 > zhúo; #70F5

+烶 > tĭng; #70F6

+烷 > wán; #70F7

+烸 > hăi; #70F8

+烹 > pēng; #70F9

+烺 > lăng; #70FA

+烻 > shān; #70FB

+烼 > hū; #70FC

+烽 > fēng; #70FD

+烾 > chì; #70FE

+烿 > róng; #70FF

+焀 > hú; #7100

+焁 > xi; #7101

+焂 > shú; #7102

+焃 > hè; #7103

+焄 > xūn; #7104

+焅 > kù; #7105

+焆 > jué; #7106

+焇 > xiāo; #7107

+焈 > xī; #7108

+焉 > yān; #7109

+焊 > hàn; #710A

+焋 > zhuàng; #710B

+焌 > jùn; #710C

+焍 > dì; #710D

+焎 > xiè; #710E

+焏 > jí; #710F

+焐 > wù; #7110

+焓 > hán; #7113

+焔 > yàn; #7114

+焕 > huàn; #7115

+焖 > mèn; #7116

+焗 > jú; #7117

+焘 > chóu; #7118

+焙 > bèi; #7119

+焚 > fén; #711A

+焛 > lìn; #711B

+焜 > kūn; #711C

+焝 > hùn; #711D

+焞 > tūn; #711E

+焟 > xí; #711F

+焠 > cùi; #7120

+無 > wú; #7121

+焢 > hōng; #7122

+焣 > jù; #7123

+焤 > fŭ; #7124

+焥 > wò; #7125

+焦 > jiāo; #7126

+焧 > cōng; #7127

+焨 > fèng; #7128

+焩 > pīng; #7129

+焪 > qīong; #712A

+焫 > rùo; #712B

+焬 > xí; #712C

+焭 > qíong; #712D

+焮 > xìn; #712E

+焯 > zhúo; #712F

+焰 > yàn; #7130

+焱 > yàn; #7131

+焲 > yì; #7132

+焳 > jué; #7133

+焴 > yù; #7134

+焵 > gàng; #7135

+然 > rán; #7136

+焷 > pí; #7137

+焸 > gŭ; #7138

+焺 > shēng; #713A

+焻 > chàng; #713B

+焼 > shāo; #713C

+煁 > chén; #7141

+煂 > hè; #7142

+煃 > kŭi; #7143

+煄 > zhōng; #7144

+煅 > duàn; #7145

+煆 > xiā; #7146

+煇 > hūi; #7147

+煈 > fèng; #7148

+煉 > liàn; #7149

+煊 > xuān; #714A

+煋 > xīng; #714B

+煌 > huáng; #714C

+煍 > jiăo; #714D

+煎 > jiān; #714E

+煏 > bì; #714F

+煐 > yīng; #7150

+煑 > zhŭ; #7151

+煒 > wĕi; #7152

+煓 > tuān; #7153

+煔 > tiàn; #7154

+煕 > xī; #7155

+煖 > nuăn; #7156

+煗 > nuăn; #7157

+煘 > chán; #7158

+煙 > yān; #7159

+煚 > jĭong; #715A

+煛 > jĭong; #715B

+煜 > yù; #715C

+煝 > mèi; #715D

+煞 > shà; #715E

+煟 > wèi; #715F

+煠 > yè; #7160

+煡 > xìn; #7161

+煢 > qíong; #7162

+煣 > rŏu; #7163

+煤 > méi; #7164

+煥 > huàn; #7165

+煦 > xŭ; #7166

+照 > zhào; #7167

+煨 > wēi; #7168

+煩 > fán; #7169

+煪 > qíu; #716A

+煫 > sùi; #716B

+煬 > yáng; #716C

+煭 > liè; #716D

+煮 > zhŭ; #716E

+煯 > jie; #716F

+煰 > gào; #7170

+煱 > guā; #7171

+煲 > bào; #7172

+煳 > hú; #7173

+煴 > yūn; #7174

+煵 > xiā; #7175

+煸 > biān; #7178

+煹 > gòu; #7179

+煺 > tùi; #717A

+煻 > táng; #717B

+煼 > chăo; #717C

+煽 > shān; #717D

+煾 > n; #717E

+煿 > bó; #717F

+熀 > huăng; #7180

+熁 > xié; #7181

+熂 > xì; #7182

+熃 > wù; #7183

+熄 > xí; #7184

+熅 > yún; #7185

+熆 > hé; #7186

+熇 > hè; #7187

+熈 > xī; #7188

+熉 > yún; #7189

+熊 > xíong; #718A

+熋 > nái; #718B

+熌 > shàn; #718C

+熍 > qiong; #718D

+熎 > yào; #718E

+熏 > xūn; #718F

+熐 > mì; #7190

+熑 > lián; #7191

+熒 > yíng; #7192

+熓 > wèn; #7193

+熔 > róng; #7194

+熗 > qiàng; #7197

+熘 > līu; #7198

+熙 > xī; #7199

+熚 > bì; #719A

+熛 > biāo; #719B

+熜 > zŏng; #719C

+熝 > lù; #719D

+熞 > jiān; #719E

+熟 > shóu; #719F

+熠 > yì; #71A0

+熡 > lóu; #71A1

+熢 > fēng; #71A2

+熣 > sūi; #71A3

+熤 > yì; #71A4

+熥 > tōng; #71A5

+熦 > jué; #71A6

+熧 > zōng; #71A7

+熨 > yùn; #71A8

+熩 > hù; #71A9

+熪 > yí; #71AA

+熫 > zhì; #71AB

+熬 > áo; #71AC

+熭 > wèi; #71AD

+熮 > liáo; #71AE

+熯 > hàn; #71AF

+熰 > ōu; #71B0

+熱 > rè; #71B1

+熲 > jĭong; #71B2

+熳 > màn; #71B3

+熵 > shāng; #71B5

+熶 > cuàn; #71B6

+熷 > zēng; #71B7

+熸 > jiān; #71B8

+熹 > xī; #71B9

+熺 > xī; #71BA

+熻 > xī; #71BB

+熼 > yì; #71BC

+熽 > xiào; #71BD

+熾 > chì; #71BE

+熿 > huáng; #71BF

+燀 > chăn; #71C0

+燁 > yè; #71C1

+燂 > qián; #71C2

+燃 > rán; #71C3

+燄 > yàn; #71C4

+燅 > xián; #71C5

+燆 > qiáo; #71C6

+燇 > zùn; #71C7

+燈 > dēng; #71C8

+燉 > dùn; #71C9

+燊 > shēn; #71CA

+燋 > jiāo; #71CB

+燌 > fén; #71CC

+燍 > sī; #71CD

+燎 > liào; #71CE

+燏 > yù; #71CF

+燐 > lín; #71D0

+燑 > tóng; #71D1

+燒 > shāo; #71D2

+燓 > fēn; #71D3

+燔 > fán; #71D4

+燕 > yàn; #71D5

+燖 > xún; #71D6

+燗 > làn; #71D7

+燘 > mĕi; #71D8

+燙 > tàng; #71D9

+燚 > yī; #71DA

+燛 > jĭng; #71DB

+燜 > mèn; #71DC

+營 > yíng; #71DF

+燠 > yù; #71E0

+燡 > yì; #71E1

+燢 > xué; #71E2

+燣 > lán; #71E3

+燤 > tài; #71E4

+燥 > zào; #71E5

+燦 > càn; #71E6

+燧 > sùi; #71E7

+燨 > xī; #71E8

+燩 > què; #71E9

+燪 > cōng; #71EA

+燫 > lián; #71EB

+燬 > hŭi; #71EC

+燭 > zhú; #71ED

+燮 > xiè; #71EE

+燯 > líng; #71EF

+燰 > wēi; #71F0

+燱 > yì; #71F1

+燲 > xié; #71F2

+燳 > zhào; #71F3

+燴 > hùi; #71F4

+燷 > lán; #71F7

+燸 > rú; #71F8

+燹 > xiăn; #71F9

+燺 > kăo; #71FA

+燻 > xūn; #71FB

+燼 > jìn; #71FC

+燽 > chóu; #71FD

+燾 > chóu; #71FE

+燿 > yào; #71FF

+爀 > hè; #7200

+爁 > làn; #7201

+爂 > biāo; #7202

+爃 > róng; #7203

+爄 > lì; #7204

+爅 > mò; #7205

+爆 > bào; #7206

+爇 > rùo; #7207

+爈 > lǘ; #7208

+爉 > là; #7209

+爊 > áo; #720A

+爋 > xùn; #720B

+爌 > kuàng; #720C

+爍 > shùo; #720D

+爏 > lì; #720F

+爐 > lú; #7210

+爑 > jué; #7211

+爒 > liào; #7212

+爓 > yàn; #7213

+爔 > xī; #7214

+爕 > xiè; #7215

+爖 > lóng; #7216

+爗 > yè; #7217

+爙 > răng; #7219

+爚 > yuè; #721A

+爛 > làn; #721B

+爜 > cóng; #721C

+爝 > jué; #721D

+爞 > tóng; #721E

+爟 > guàn; #721F

+爡 > chè; #7221

+爢 > mí; #7222

+爣 > tăng; #7223

+爤 > làn; #7224

+爥 > zhú; #7225

+爧 > líng; #7227

+爨 > cuàn; #7228

+爩 > yù; #7229

+爪 > zhuă; #722A

+爬 > pá; #722C

+爭 > zhēng; #722D

+爮 > páo; #722E

+爯 > chēng; #722F

+爰 > yuán; #7230

+爱 > ài; #7231

+爲 > wèi; #7232

+爴 > jué; #7234

+爵 > jué; #7235

+父 > fù; #7236

+爷 > yé; #7237

+爸 > bà; #7238

+爹 > diē; #7239

+爺 > yé; #723A

+爻 > yáo; #723B

+爼 > zŭ; #723C

+爽 > shuăng; #723D

+爾 > ĕr; #723E

+爿 > qiáng; #723F

+牀 > chuáng; #7240

+牁 > gē; #7241

+牂 > zāng; #7242

+牃 > dié; #7243

+牄 > qiāng; #7244

+牅 > yóng; #7245

+牆 > qiáng; #7246

+片 > piàn; #7247

+版 > băn; #7248

+牉 > pàn; #7249

+牊 > sháo; #724A

+牋 > jiān; #724B

+牌 > pái; #724C

+牍 > dú; #724D

+牎 > chuāng; #724E

+牏 > tóu; #724F

+牐 > zhá; #7250

+牑 > biān; #7251

+牒 > dié; #7252

+牓 > băng; #7253

+牔 > bó; #7254

+牕 > chuāng; #7255

+牖 > yŏu; #7256

+牘 > dú; #7258

+牙 > yá; #7259

+牚 > chèng; #725A

+牛 > níu; #725B

+牝 > pìn; #725D

+牞 > jīu; #725E

+牟 > móu; #725F

+牠 > tūo; #7260

+牡 > mŭ; #7261

+牢 > láo; #7262

+牣 > rèn; #7263

+牤 > máng; #7264

+牥 > fāng; #7265

+牦 > máo; #7266

+牧 > mù; #7267

+牨 > gāng; #7268

+物 > wù; #7269

+牪 > yàn; #726A

+牫 > gē; #726B

+牬 > bèi; #726C

+牭 > sì; #726D

+牮 > jiàn; #726E

+牯 > gŭ; #726F

+牰 > yòu; #7270

+牱 > gē; #7271

+牲 > shēng; #7272

+牳 > mŭ; #7273

+牴 > dĭ; #7274

+牵 > qiān; #7275

+牶 > quàn; #7276

+牷 > quán; #7277

+牸 > zì; #7278

+特 > tè; #7279

+牺 > xī; #727A

+牻 > máng; #727B

+牼 > kēng; #727C

+牽 > qiān; #727D

+牾 > wú; #727E

+牿 > gù; #727F

+犀 > xī; #7280

+犁 > lí; #7281

+犂 > lí; #7282

+犃 > pŏu; #7283

+犄 > jī; #7284

+犅 > gāng; #7285

+犆 > zhí; #7286

+犇 > bēn; #7287

+犈 > quán; #7288

+犉 > rún; #7289

+犊 > dú; #728A

+犋 > jù; #728B

+犌 > jiā; #728C

+犍 > jiān; #728D

+犎 > fēng; #728E

+犏 > piān; #728F

+犐 > kē; #7290

+犑 > jú; #7291

+犒 > kào; #7292

+犓 > chú; #7293

+犔 > xì; #7294

+犕 > bèi; #7295

+犖 > lùo; #7296

+犗 > jiè; #7297

+犘 > má; #7298

+犙 > sān; #7299

+犚 > wèi; #729A

+犛 > lí; #729B

+犜 > dūn; #729C

+犝 > tóng; #729D

+犟 > jiàng; #729F

+犡 > lì; #72A1

+犢 > dú; #72A2

+犣 > liè; #72A3

+犤 > pí; #72A4

+犥 > piăo; #72A5

+犦 > bào; #72A6

+犧 > xī; #72A7

+犨 > chōu; #72A8

+犩 > wèi; #72A9

+犪 > kúi; #72AA

+犫 > chōu; #72AB

+犬 > quăn; #72AC

+犭 > făn' 'quăn' 'páng; #72AD

+犮 > bá; #72AE

+犯 > fàn; #72AF

+犰 > qíu; #72B0

+犱 > jĭ; #72B1

+犲 > cái; #72B2

+犳 > chúo; #72B3

+犴 > àn; #72B4

+犵 > jié; #72B5

+状 > zhuàng; #72B6

+犷 > guăng; #72B7

+犸 > mà; #72B8

+犹 > yóu; #72B9

+犺 > kàng; #72BA

+犻 > bó; #72BB

+犼 > hŏu; #72BC

+犽 > yá; #72BD

+犾 > yín; #72BE

+犿 > huān; #72BF

+狀 > zhuàng; #72C0

+狁 > yŭn; #72C1

+狂 > kuáng; #72C2

+狃 > nĭu; #72C3

+狄 > dí; #72C4

+狅 > qīng; #72C5

+狆 > zhòng; #72C6

+狇 > mù; #72C7

+狈 > bèi; #72C8

+狉 > pī; #72C9

+狊 > jú; #72CA

+狋 > ní; #72CB

+狌 > shēng; #72CC

+狍 > páo; #72CD

+狎 > xiá; #72CE

+狏 > túo; #72CF

+狐 > hú; #72D0

+狑 > líng; #72D1

+狒 > fèi; #72D2

+狓 > pī; #72D3

+狔 > nĭ; #72D4

+狕 > ăo; #72D5

+狖 > yòu; #72D6

+狗 > gŏu; #72D7

+狘 > yuè; #72D8

+狙 > jū; #72D9

+狚 > dàn; #72DA

+狛 > pò; #72DB

+狜 > gŭ; #72DC

+狝 > xiăn; #72DD

+狞 > níng; #72DE

+狟 > huán; #72DF

+狠 > hĕn; #72E0

+狡 > jiăo; #72E1

+狢 > hé; #72E2

+狣 > zhào; #72E3

+狤 > jí; #72E4

+狥 > xùn; #72E5

+狦 > shān; #72E6

+狧 > tà; #72E7

+狨 > róng; #72E8

+狩 > shòu; #72E9

+狪 > tōng; #72EA

+狫 > lăo; #72EB

+独 > dú; #72EC

+狭 > xiá; #72ED

+狮 > shī; #72EE

+狯 > huá; #72EF

+狰 > zhēng; #72F0

+狱 > yù; #72F1

+狲 > sūn; #72F2

+狳 > yú; #72F3

+狴 > bì; #72F4

+狵 > máng; #72F5

+狶 > xĭ; #72F6

+狷 > juàn; #72F7

+狸 > lí; #72F8

+狹 > xiá; #72F9

+狺 > yín; #72FA

+狻 > suān; #72FB

+狼 > láng; #72FC

+狽 > bèi; #72FD

+狾 > zhì; #72FE

+狿 > yán; #72FF

+猀 > shā; #7300

+猁 > lì; #7301

+猂 > hàn; #7302

+猃 > xiăn; #7303

+猄 > jīng; #7304

+猅 > pái; #7305

+猆 > fēi; #7306

+猇 > yáo; #7307

+猈 > bà; #7308

+猉 > qí; #7309

+猊 > ní; #730A

+猋 > biāo; #730B

+猌 > yìn; #730C

+猍 > lái; #730D

+猎 > xí; #730E

+猏 > jiān; #730F

+猐 > qiāng; #7310

+猑 > kūn; #7311

+猒 > yān; #7312

+猓 > gŭo; #7313

+猔 > zòng; #7314

+猕 > mí; #7315

+猖 > chāng; #7316

+猗 > yī; #7317

+猘 > zhì; #7318

+猙 > zhēng; #7319

+猚 > yá; #731A

+猛 > mĕng; #731B

+猜 > cāi; #731C

+猝 > cù; #731D

+猞 > shè; #731E

+猡 > lúo; #7321

+猢 > hú; #7322

+猣 > zōng; #7323

+猤 > jì; #7324

+猥 > wĕi; #7325

+猦 > fēng; #7326

+猧 > wō; #7327

+猨 > yuán; #7328

+猩 > xīng; #7329

+猪 > zhū; #732A

+猫 > māo; #732B

+猬 > wèi; #732C

+猭 > yuán; #732D

+献 > xiàn; #732E

+猯 > tuān; #732F

+猰 > yà; #7330

+猱 > náo; #7331

+猲 > xiē; #7332

+猳 > jiā; #7333

+猴 > hóu; #7334

+猵 > biān; #7335

+猶 > yóu; #7336

+猷 > yóu; #7337

+猸 > méi; #7338

+猹 > zhā; #7339

+猺 > yáo; #733A

+猻 > sūn; #733B

+猼 > bó; #733C

+猽 > míng; #733D

+猾 > huá; #733E

+猿 > yuán; #733F

+獀 > sōu; #7340

+獁 > mà; #7341

+獂 > yuán; #7342

+獃 > dāi; #7343

+獄 > yù; #7344

+獅 > shī; #7345

+獆 > háo; #7346

+獈 > yì; #7348

+獉 > zhēn; #7349

+獊 > chuàng; #734A

+獋 > háo; #734B

+獌 > màn; #734C

+獍 > jìng; #734D

+獎 > jiăng; #734E

+獏 > mú; #734F

+獐 > zhāng; #7350

+獑 > chán; #7351

+獒 > áo; #7352

+獓 > áo; #7353

+獔 > háo; #7354

+獕 > cūi; #7355

+獖 > fén; #7356

+獗 > jué; #7357

+獘 > bì; #7358

+獙 > bì; #7359

+獚 > huáng; #735A

+獛 > pú; #735B

+獜 > lín; #735C

+獝 > yù; #735D

+獞 > tóng; #735E

+獟 > yào; #735F

+獠 > liáo; #7360

+獡 > shùo; #7361

+獢 > xiāo; #7362

+獥 > xí; #7365

+獦 > gé; #7366

+獧 > juàn; #7367

+獨 > dú; #7368

+獩 > hùi; #7369

+獪 > kuài; #736A

+獫 > xiăn; #736B

+獬 > xiè; #736C

+獭 > tà; #736D

+獮 > xiăn; #736E

+獯 > xūn; #736F

+獰 > níng; #7370

+獱 > pín; #7371

+獲 > hùo; #7372

+獳 > nòu; #7373

+獴 > méng; #7374

+獵 > liè; #7375

+獶 > náo; #7376

+獷 > guăng; #7377

+獸 > shòu; #7378

+獹 > lú; #7379

+獺 > tà; #737A

+獻 > xiàn; #737B

+獼 > mí; #737C

+獽 > ráng; #737D

+獾 > huān; #737E

+獿 > náo; #737F

+玀 > lúo; #7380

+玁 > xiăn; #7381

+玂 > qí; #7382

+玃 > jué; #7383

+玄 > xuán; #7384

+玅 > miào; #7385

+玆 > zī; #7386

+率 > lǜ; #7387

+玈 > lú; #7388

+玉 > yù; #7389

+玊 > sù; #738A

+王 > wáng; #738B

+玌 > qíu; #738C

+玍 > gă; #738D

+玎 > dīng; #738E

+玏 > lè; #738F

+玐 > bā; #7390

+玑 > jī; #7391

+玒 > hóng; #7392

+玓 > dì; #7393

+玔 > quàn; #7394

+玕 > gān; #7395

+玖 > jĭu; #7396

+玗 > yú; #7397

+玘 > jĭ; #7398

+玙 > yú; #7399

+玚 > yáng; #739A

+玛 > mă; #739B

+玜 > gōng; #739C

+玝 > wŭ; #739D

+玞 > fū; #739E

+玟 > wén; #739F

+玠 > jiè; #73A0

+玡 > yà; #73A1

+玢 > fén; #73A2

+玣 > biàn; #73A3

+玤 > bĕng; #73A4

+玥 > yuè; #73A5

+玦 > jué; #73A6

+玧 > yŭn; #73A7

+玨 > jué; #73A8

+玩 > wán; #73A9

+玪 > jiān; #73AA

+玫 > méi; #73AB

+玬 > dăn; #73AC

+玭 > pí; #73AD

+玮 > wĕi; #73AE

+环 > huán; #73AF

+现 > xiàn; #73B0

+玱 > qiāng; #73B1

+玲 > líng; #73B2

+玳 > dài; #73B3

+玴 > yì; #73B4

+玵 > án; #73B5

+玶 > píng; #73B6

+玷 > diàn; #73B7

+玸 > fú; #73B8

+玹 > xuán; #73B9

+玺 > xĭ; #73BA

+玻 > bō; #73BB

+玼 > cĭ; #73BC

+玽 > gŏu; #73BD

+玾 > jiă; #73BE

+玿 > sháo; #73BF

+珀 > pò; #73C0

+珁 > cí; #73C1

+珂 > kē; #73C2

+珃 > răn; #73C3

+珄 > shēng; #73C4

+珅 > shēn; #73C5

+珆 > yí; #73C6

+珇 > zŭ; #73C7

+珈 > jiā; #73C8

+珉 > mín; #73C9

+珊 > shān; #73CA

+珋 > lĭu; #73CB

+珌 > bì; #73CC

+珍 > zhēn; #73CD

+珎 > zhēn; #73CE

+珏 > jué; #73CF

+珐 > fà; #73D0

+珑 > lóng; #73D1

+珒 > jīn; #73D2

+珓 > jiào; #73D3

+珔 > jiàn; #73D4

+珕 > lì; #73D5

+珖 > guāng; #73D6

+珗 > xiān; #73D7

+珘 > zhōu; #73D8

+珙 > gŏng; #73D9

+珚 > yān; #73DA

+珛 > xìu; #73DB

+珜 > yáng; #73DC

+珝 > xŭ; #73DD

+珞 > lùo; #73DE

+珟 > sù; #73DF

+珠 > zhū; #73E0

+珡 > qín; #73E1

+珢 > kèn; #73E2

+珣 > xún; #73E3

+珤 > băo; #73E4

+珥 > ĕr; #73E5

+珦 > xiàng; #73E6

+珧 > yáo; #73E7

+珨 > xiá; #73E8

+珩 > héng; #73E9

+珪 > gūi; #73EA

+珫 > chōng; #73EB

+珬 > xù; #73EC

+班 > bān; #73ED

+珮 > pèi; #73EE

+珰 > dāng; #73F0

+珲 > hún; #73F2

+珳 > wén; #73F3

+珴 > é; #73F4

+珵 > chéng; #73F5

+珶 > tí; #73F6

+珷 > wŭ; #73F7

+珸 > wú; #73F8

+珹 > chéng; #73F9

+珺 > jùn; #73FA

+珻 > méi; #73FB

+珼 > bèi; #73FC

+珽 > tĭng; #73FD

+現 > xiàn; #73FE

+珿 > chùo; #73FF

+琀 > hán; #7400

+琁 > xuan; #7401

+琂 > yán; #7402

+球 > qíu; #7403

+琄 > quăn; #7404

+琅 > láng; #7405

+理 > lĭ; #7406

+琇 > xìu; #7407

+琈 > fú; #7408

+琉 > líu; #7409

+琊 > yé; #740A

+琋 > xī; #740B

+琌 > líng; #740C

+琍 > lì; #740D

+琎 > jìn; #740E

+琏 > lián; #740F

+琐 > sŭo; #7410

+琓 > wán; #7413

+琔 > diàn; #7414

+琕 > pín; #7415

+琖 > zhăn; #7416

+琗 > cùi; #7417

+琘 > mín; #7418

+琙 > yù; #7419

+琚 > jū; #741A

+琛 > chēn; #741B

+琜 > lái; #741C

+琝 > wén; #741D

+琞 > shèng; #741E

+琟 > wéi; #741F

+琠 > diăn; #7420

+琡 > chù; #7421

+琢 > zhúo; #7422

+琣 > pĕi; #7423

+琤 > chēng; #7424

+琥 > hŭ; #7425

+琦 > qí; #7426

+琧 > è; #7427

+琨 > kūn; #7428

+琩 > chāng; #7429

+琪 > qí; #742A

+琫 > bĕng; #742B

+琬 > wăn; #742C

+琭 > lù; #742D

+琮 > cóng; #742E

+琯 > guăn; #742F

+琰 > yăn; #7430

+琱 > diāo; #7431

+琲 > bèi; #7432

+琳 > lín; #7433

+琴 > qín; #7434

+琵 > pí; #7435

+琶 > pá; #7436

+琷 > què; #7437

+琸 > zhúo; #7438

+琹 > qín; #7439

+琺 > fà; #743A

+琼 > qíong; #743C

+琽 > dŭ; #743D

+琾 > jiè; #743E

+琿 > hún; #743F

+瑀 > yŭ; #7440

+瑁 > mào; #7441

+瑂 > méi; #7442

+瑃 > chun; #7443

+瑄 > xuān; #7444

+瑅 > tí; #7445

+瑆 > xīng; #7446

+瑇 > dài; #7447

+瑈 > róu; #7448

+瑉 > mín; #7449

+瑊 > zhēn; #744A

+瑋 > wĕi; #744B

+瑌 > ruăn; #744C

+瑍 > huàn; #744D

+瑎 > jiē; #744E

+瑏 > chuān; #744F

+瑐 > jiăn; #7450

+瑑 > zhuàn; #7451

+瑒 > yáng; #7452

+瑓 > liàn; #7453

+瑔 > quán; #7454

+瑕 > xiá; #7455

+瑖 > duàn; #7456

+瑗 > yuàn; #7457

+瑘 > yé; #7458

+瑙 > năo; #7459

+瑚 > hú; #745A

+瑛 > yīng; #745B

+瑜 > yú; #745C

+瑝 > huáng; #745D

+瑞 > rùi; #745E

+瑟 > sè; #745F

+瑠 > líu; #7460

+瑡 > shi; #7461

+瑢 > róng; #7462

+瑣 > sŭo; #7463

+瑤 > yáo; #7464

+瑥 > wēn; #7465

+瑦 > wū; #7466

+瑧 > jīn; #7467

+瑨 > jìn; #7468

+瑩 > yíng; #7469

+瑪 > mă; #746A

+瑫 > tāo; #746B

+瑬 > líu; #746C

+瑭 > táng; #746D

+瑮 > lì; #746E

+瑯 > láng; #746F

+瑰 > gūi; #7470

+瑱 > zhèn; #7471

+瑲 > qiāng; #7472

+瑳 > cŭo; #7473

+瑴 > jué; #7474

+瑵 > zhăo; #7475

+瑶 > yáo; #7476

+瑷 > ài; #7477

+瑸 > bīn; #7478

+瑹 > tú; #7479

+瑺 > cháng; #747A

+瑻 > kūn; #747B

+瑼 > zhuān; #747C

+瑽 > cōng; #747D

+瑾 > jĭn; #747E

+瑿 > yī; #747F

+璀 > cŭi; #7480

+璁 > cōng; #7481

+璂 > qí; #7482

+璃 > lí; #7483

+璄 > yĭng; #7484

+璅 > sŭo; #7485

+璆 > qíu; #7486

+璇 > xuán; #7487

+璈 > áo; #7488

+璉 > lián; #7489

+璊 > mán; #748A

+璋 > zhāng; #748B

+璌 > yín; #748C

+璎 > yīng; #748E

+璏 > zhì; #748F

+璐 > lù; #7490

+璑 > wú; #7491

+璒 > dēng; #7492

+璓 > xiòu; #7493

+璔 > zēng; #7494

+璕 > xún; #7495

+璖 > qú; #7496

+璗 > dàng; #7497

+璘 > lín; #7498

+璙 > liáo; #7499

+璚 > qíong; #749A

+璛 > sù; #749B

+璜 > huáng; #749C

+璝 > gūi; #749D

+璞 > pú; #749E

+璟 > jĭng; #749F

+璠 > fán; #74A0

+璡 > jìn; #74A1

+璢 > líu; #74A2

+璣 > jī; #74A3

+璥 > jĭng; #74A5

+璦 > ài; #74A6

+璧 > bì; #74A7

+璨 > càn; #74A8

+璩 > qú; #74A9

+璪 > zăo; #74AA

+璫 > dāng; #74AB

+璬 > jiăo; #74AC

+璭 > gùn; #74AD

+璮 > tăn; #74AE

+璯 > hùi; #74AF

+環 > huán; #74B0

+璱 > sè; #74B1

+璲 > sùi; #74B2

+璳 > tián; #74B3

+璵 > yú; #74B5

+璶 > jìn; #74B6

+璷 > lú; #74B7

+璸 > bīn; #74B8

+璹 > shòu; #74B9

+璺 > wèn; #74BA

+璻 > zŭi; #74BB

+璼 > lán; #74BC

+璽 > xĭ; #74BD

+璾 > jì; #74BE

+璿 > xuán; #74BF

+瓀 > ruăn; #74C0

+瓁 > hùo; #74C1

+瓂 > gài; #74C2

+瓃 > léi; #74C3

+瓄 > dú; #74C4

+瓅 > lì; #74C5

+瓆 > zhí; #74C6

+瓇 > róu; #74C7

+瓈 > lí; #74C8

+瓉 > zàn; #74C9

+瓊 > qíong; #74CA

+瓋 > zhé; #74CB

+瓌 > gūi; #74CC

+瓍 > sùi; #74CD

+瓎 > là; #74CE

+瓏 > lóng; #74CF

+瓐 > lú; #74D0

+瓑 > lì; #74D1

+瓒 > zàn; #74D2

+瓓 > làn; #74D3

+瓔 > yīng; #74D4

+瓕 > mí; #74D5

+瓖 > xiāng; #74D6

+瓗 > xī; #74D7

+瓘 > guàn; #74D8

+瓙 > dào; #74D9

+瓚 > zàn; #74DA

+瓛 > huán; #74DB

+瓜 > guā; #74DC

+瓝 > bó; #74DD

+瓞 > dié; #74DE

+瓟 > báo; #74DF

+瓠 > hù; #74E0

+瓡 > zhí; #74E1

+瓢 > piáo; #74E2

+瓣 > bàn; #74E3

+瓤 > ráng; #74E4

+瓥 > lì; #74E5

+瓦 > wă; #74E6

+瓨 > jiāng; #74E8

+瓩 > qián' 'wă; #74E9

+瓪 > făn; #74EA

+瓫 > pén; #74EB

+瓬 > făng; #74EC

+瓭 > dăn; #74ED

+瓮 > wèng; #74EE

+瓯 > ōu; #74EF

+瓳 > hú; #74F3

+瓴 > líng; #74F4

+瓵 > yí; #74F5

+瓶 > píng; #74F6

+瓷 > cí; #74F7

+瓹 > juàn; #74F9

+瓺 > cháng; #74FA

+瓻 > chī; #74FB

+瓽 > dàng; #74FD

+瓾 > mĕng; #74FE

+瓿 > pŏu; #74FF

+甀 > zhùi; #7500

+甁 > píng; #7501

+甂 > biān; #7502

+甃 > zhòu; #7503

+甄 > zhēn; #7504

+甆 > cí; #7506

+甇 > yīng; #7507

+甈 > qì; #7508

+甉 > xián; #7509

+甊 > lŏu; #750A

+甋 > dì; #750B

+甌 > ōu; #750C

+甍 > méng; #750D

+甎 > zhuān; #750E

+甏 > pèng; #750F

+甐 > lín; #7510

+甑 > zèng; #7511

+甒 > wŭ; #7512

+甓 > pì; #7513

+甔 > dān; #7514

+甕 > wèng; #7515

+甖 > yīng; #7516

+甗 > yăn; #7517

+甘 > gān; #7518

+甙 > dài; #7519

+甚 > shén; #751A

+甛 > tián; #751B

+甜 > tián; #751C

+甝 > hān; #751D

+甞 > cháng; #751E

+生 > shēng; #751F

+甠 > qíng; #7520

+甡 > shēng; #7521

+產 > chăn; #7522

+産 > chăn; #7523

+甤 > rúi; #7524

+甥 > shēng; #7525

+甦 > sū; #7526

+甧 > sēn; #7527

+用 > yòng; #7528

+甩 > shuăi; #7529

+甪 > lù; #752A

+甫 > fŭ; #752B

+甬 > yŏng; #752C

+甭 > béng; #752D

+甮 > fèng; #752E

+甯 > níng; #752F

+田 > tián; #7530

+由 > yóu; #7531

+甲 > jiă; #7532

+申 > shēn; #7533

+甴 > zhá; #7534

+电 > diàn; #7535

+甶 > fú; #7536

+男 > nán; #7537

+甸 > diàn; #7538

+甹 > píng; #7539

+町 > tĭng; #753A

+画 > huà; #753B

+甼 > tĭng; #753C

+甽 > quăn; #753D

+甾 > zī; #753E

+甿 > méng; #753F

+畀 > bì; #7540

+畁 > qí; #7541

+畂 > lìu; #7542

+畃 > xún; #7543

+畄 > líu; #7544

+畅 > chàng; #7545

+畆 > mŭ; #7546

+畇 > yún; #7547

+畈 > fàn; #7548

+畉 > fú; #7549

+畊 > gēng; #754A

+畋 > tián; #754B

+界 > jiè; #754C

+畍 > jiè; #754D

+畎 > quăn; #754E

+畏 > wèi; #754F

+畐 > fú; #7550

+畑 > tián; #7551

+畒 > mŭ; #7552

+畔 > pàn; #7554

+畕 > jiāng; #7555

+畖 > wā; #7556

+畗 > dá; #7557

+畘 > nán; #7558

+留 > líu; #7559

+畚 > bĕn; #755A

+畛 > zhĕn; #755B

+畜 > chù; #755C

+畝 > mŭ; #755D

+畞 > mŭ; #755E

+畟 > cè; #755F

+畡 > gāi; #7561

+畢 > bì; #7562

+畣 > dá; #7563

+畤 > zhì; #7564

+略 > lǜe; #7565

+畦 > qí; #7566

+畧 > lǜe; #7567

+畨 > pān; #7568

+番 > fān; #756A

+畫 > huà; #756B

+畬 > yú; #756C

+畭 > yú; #756D

+畮 > mŭ; #756E

+畯 > jùn; #756F

+異 > yì; #7570

+畱 > líu; #7571

+畲 > yú; #7572

+畳 > dié; #7573

+畴 > chóu; #7574

+畵 > huà; #7575

+當 > dāng; #7576

+畷 > chùo; #7577

+畸 > jī; #7578

+畹 > wăn; #7579

+畺 > jiāng; #757A

+畻 > shéng; #757B

+畼 > chàng; #757C

+畽 > tuăn; #757D

+畾 > léi; #757E

+畿 > jī; #757F

+疀 > chā; #7580

+疁 > líu; #7581

+疃 > tuăn; #7583

+疄 > lín; #7584

+疅 > jiāng; #7585

+疆 > jiāng; #7586

+疇 > chóu; #7587

+疈 > bò; #7588

+疉 > dié; #7589

+疊 > dié; #758A

+疋 > pĭ; #758B

+疌 > niè; #758C

+疍 > dàn; #758D

+疎 > shū; #758E

+疏 > shū; #758F

+疐 > zhì; #7590

+疑 > yí; #7591

+疒 > chuáng; #7592

+疓 > năi; #7593

+疔 > dīng; #7594

+疕 > bĭ; #7595

+疖 > jié; #7596

+疗 > liáo; #7597

+疘 > gōng; #7598

+疙 > gē; #7599

+疚 > jìu; #759A

+疛 > zhŏu; #759B

+疜 > xià; #759C

+疝 > shàn; #759D

+疞 > xū; #759E

+疟 > nǜe; #759F

+疠 > lì; #75A0

+疡 > yáng; #75A1

+疢 > chèn; #75A2

+疣 > yóu; #75A3

+疤 > bā; #75A4

+疥 > jiè; #75A5

+疦 > jué; #75A6

+疧 > zhī; #75A7

+疨 > xiā; #75A8

+疩 > cùi; #75A9

+疪 > bì; #75AA

+疫 > yì; #75AB

+疬 > lì; #75AC

+疭 > zòng; #75AD

+疮 > chuāng; #75AE

+疯 > fēng; #75AF

+疰 > zhù; #75B0

+疱 > pào; #75B1

+疲 > pí; #75B2

+疳 > gān; #75B3

+疴 > kē; #75B4

+疵 > cī; #75B5

+疶 > xiè; #75B6

+疷 > qí; #75B7

+疸 > dăn; #75B8

+疹 > zhĕn; #75B9

+疺 > fá; #75BA

+疻 > zhĭ; #75BB

+疼 > téng; #75BC

+疽 > jū; #75BD

+疾 > jí; #75BE

+疿 > fèi; #75BF

+痀 > qú; #75C0

+痁 > diàn; #75C1

+痂 > jiā; #75C2

+痃 > xián; #75C3

+痄 > chá; #75C4

+病 > bìng; #75C5

+痆 > nì; #75C6

+症 > zhèng; #75C7

+痈 > yōng; #75C8

+痉 > jìng; #75C9

+痊 > quán; #75CA

+痋 > chóng; #75CB

+痌 > tōng; #75CC

+痍 > yí; #75CD

+痎 > kāi; #75CE

+痏 > wĕi; #75CF

+痐 > húi; #75D0

+痑 > dŭo; #75D1

+痒 > yăng; #75D2

+痓 > chì; #75D3

+痔 > zhì; #75D4

+痕 > hén; #75D5

+痖 > yă; #75D6

+痗 > mèi; #75D7

+痘 > dòu; #75D8

+痙 > jìng; #75D9

+痚 > xiāo; #75DA

+痛 > tòng; #75DB

+痜 > tū; #75DC

+痝 > máng; #75DD

+痞 > pĭ; #75DE

+痟 > xiāo; #75DF

+痠 > suān; #75E0

+痡 > pū; #75E1

+痢 > lì; #75E2

+痣 > zhì; #75E3

+痤 > cúo; #75E4

+痥 > dúo; #75E5

+痦 > wù; #75E6

+痧 > shā; #75E7

+痨 > láo; #75E8

+痩 > shòu; #75E9

+痪 > huàn; #75EA

+痫 > xián; #75EB

+痬 > yì; #75EC

+痭 > péng; #75ED

+痮 > zhàng; #75EE

+痯 > guăn; #75EF

+痰 > tán; #75F0

+痱 > fèi; #75F1

+痲 > má; #75F2

+痳 > lín; #75F3

+痴 > chī; #75F4

+痵 > jì; #75F5

+痶 > diăn; #75F6

+痷 > ān; #75F7

+痸 > chì; #75F8

+痹 > bì; #75F9

+痺 > bēi; #75FA

+痻 > mín; #75FB

+痼 > gū; #75FC

+痽 > dūi; #75FD

+痾 > ē; #75FE

+痿 > wĕi; #75FF

+瘀 > yū; #7600

+瘁 > cùi; #7601

+瘂 > yă; #7602

+瘃 > zhŭ; #7603

+瘄 > cù; #7604

+瘅 > dàn; #7605

+瘆 > shèn; #7606

+瘇 > zhŭng; #7607

+瘈 > jì; #7608

+瘉 > yù; #7609

+瘊 > hóu; #760A

+瘋 > fēng; #760B

+瘌 > là; #760C

+瘍 > yáng; #760D

+瘎 > shèn; #760E

+瘏 > tú; #760F

+瘐 > yŭ; #7610

+瘑 > guā; #7611

+瘒 > wén; #7612

+瘓 > huàn; #7613

+瘔 > kù; #7614

+瘕 > jiă; #7615

+瘖 > yīn; #7616

+瘗 > yì; #7617

+瘘 > lǘ; #7618

+瘙 > sāo; #7619

+瘚 > jué; #761A

+瘛 > chì; #761B

+瘜 > xí; #761C

+瘝 > guān; #761D

+瘞 > yì; #761E

+瘟 > wēn; #761F

+瘠 > jí; #7620

+瘡 > chuāng; #7621

+瘢 > bān; #7622

+瘣 > lĕi; #7623

+瘤 > líu; #7624

+瘥 > chài; #7625

+瘦 > shòu; #7626

+瘧 > nǜe; #7627

+瘨 > diān; #7628

+瘩 > dā; #7629

+瘪 > piē; #762A

+瘫 > tān; #762B

+瘬 > zhàng; #762C

+瘭 > biāo; #762D

+瘮 > shen; #762E

+瘯 > cù; #762F

+瘰 > lŭo; #7630

+瘱 > yì; #7631

+瘲 > zòng; #7632

+瘳 > chōu; #7633

+瘴 > zhàng; #7634

+瘵 > zhài; #7635

+瘶 > sòu; #7636

+瘷 > sŭo; #7637

+瘸 > qué; #7638

+瘹 > diào; #7639

+瘺 > lòu; #763A

+瘻 > lǘ; #763B

+瘼 > mò; #763C

+瘽 > jìn; #763D

+瘾 > yĭn; #763E

+瘿 > yĭng; #763F

+癀 > huáng; #7640

+癁 > fú; #7641

+療 > liáo; #7642

+癃 > lóng; #7643

+癄 > qiáo; #7644

+癅 > líu; #7645

+癆 > láo; #7646

+癇 > xián; #7647

+癈 > fèi; #7648

+癉 > dàn; #7649

+癊 > yìn; #764A

+癋 > hè; #764B

+癌 > yán; #764C

+癍 > bān; #764D

+癎 > xián; #764E

+癏 > guān; #764F

+癐 > guài; #7650

+癑 > nóng; #7651

+癒 > yù; #7652

+癓 > wéi; #7653

+癔 > yì; #7654

+癕 > yōng; #7655

+癖 > pĭ; #7656

+癗 > lĕi; #7657

+癘 > lì; #7658

+癙 > shŭ; #7659

+癚 > dàn; #765A

+癛 > lĭn; #765B

+癜 > diàn; #765C

+癝 > lĭn; #765D

+癞 > lài; #765E

+癟 > piē; #765F

+癠 > jì; #7660

+癡 > chī; #7661

+癢 > yăng; #7662

+癣 > xiăn; #7663

+癤 > jié; #7664

+癥 > zhēng; #7665

+癧 > lì; #7667

+癨 > hùo; #7668

+癩 > lài; #7669

+癫 > diān; #766B

+癬 > xiăn; #766C

+癭 > yĭng; #766D

+癮 > yĭn; #766E

+癯 > qú; #766F

+癰 > yōng; #7670

+癱 > tān; #7671

+癲 > diān; #7672

+癳 > lŭo; #7673

+癴 > lǘan; #7674

+癵 > luán; #7675

+癶 > bō; #7676

+癸 > gŭi; #7678

+癹 > pō; #7679

+発 > fā; #767A

+登 > dēng; #767B

+發 > fā; #767C

+白 > bái; #767D

+百 > băi; #767E

+癿 > qié; #767F

+皀 > bī; #7680

+皁 > zào; #7681

+皂 > zào; #7682

+皃 > mào; #7683

+的 > de; #7684

+皅 > pā; #7685

+皆 > jiē; #7686

+皇 > huáng; #7687

+皈 > gūi; #7688

+皉 > cĭ; #7689

+皊 > líng; #768A

+皋 > gāo; #768B

+皌 > mò; #768C

+皍 > jí; #768D

+皎 > jiăo; #768E

+皏 > pĕng; #768F

+皐 > gāo; #7690

+皑 > ái; #7691

+皒 > é; #7692

+皓 > hào; #7693

+皔 > hàn; #7694

+皕 > bī; #7695

+皖 > wăn; #7696

+皗 > chóu; #7697

+皘 > qiàn; #7698

+皙 > xī; #7699

+皚 > ái; #769A

+皛 > jĭong; #769B

+皜 > hào; #769C

+皝 > huăng; #769D

+皞 > hào; #769E

+皟 > zé; #769F

+皠 > cŭi; #76A0

+皡 > hào; #76A1

+皢 > xiăo; #76A2

+皣 > yè; #76A3

+皤 > pó; #76A4

+皥 > hào; #76A5

+皦 > jiăo; #76A6

+皧 > ài; #76A7

+皨 > xīng; #76A8

+皩 > huàng; #76A9

+皪 > lì; #76AA

+皫 > piăo; #76AB

+皬 > hè; #76AC

+皭 > jiào; #76AD

+皮 > pí; #76AE

+皯 > găn; #76AF

+皰 > pào; #76B0

+皱 > zhòu; #76B1

+皲 > jūn; #76B2

+皳 > qíu; #76B3

+皴 > cūn; #76B4

+皵 > què; #76B5

+皶 > zhā; #76B6

+皷 > gŭ; #76B7

+皸 > jūn; #76B8

+皹 > jūn; #76B9

+皺 > zhòu; #76BA

+皻 > zhā; #76BB

+皼 > gŭ; #76BC

+皽 > zhăn; #76BD

+皾 > dú; #76BE

+皿 > mĭn; #76BF

+盀 > qĭ; #76C0

+盁 > yíng; #76C1

+盂 > yú; #76C2

+盃 > bēi; #76C3

+盄 > zhāo; #76C4

+盅 > zhōng; #76C5

+盆 > pén; #76C6

+盇 > hé; #76C7

+盈 > yíng; #76C8

+盉 > hé; #76C9

+益 > yì; #76CA

+盋 > bō; #76CB

+盌 > wăn; #76CC

+盍 > hé; #76CD

+盎 > àng; #76CE

+盏 > zhăn; #76CF

+盐 > yán; #76D0

+监 > jiān; #76D1

+盒 > hé; #76D2

+盓 > yū; #76D3

+盔 > kūi; #76D4

+盕 > fàn; #76D5

+盖 > gài; #76D6

+盗 > dào; #76D7

+盘 > pán; #76D8

+盙 > fŭ; #76D9

+盚 > qíu; #76DA

+盛 > shèng; #76DB

+盜 > dào; #76DC

+盝 > lù; #76DD

+盞 > zhăn; #76DE

+盟 > méng; #76DF

+盠 > lĭ; #76E0

+盡 > jìn; #76E1

+盢 > xù; #76E2

+監 > jiān; #76E3

+盤 > pán; #76E4

+盥 > guàn; #76E5

+盦 > ān; #76E6

+盧 > lú; #76E7

+盨 > shŭ; #76E8

+盩 > zhōu; #76E9

+盪 > dàng; #76EA

+盫 > ān; #76EB

+盬 > gŭ; #76EC

+盭 > lì; #76ED

+目 > mù; #76EE

+盯 > chéng; #76EF

+盰 > găn; #76F0

+盱 > xū; #76F1

+盲 > máng; #76F2

+盳 > máng; #76F3

+直 > zhí; #76F4

+盵 > qì; #76F5

+盶 > ruăn; #76F6

+盷 > tián; #76F7

+相 > xiāng; #76F8

+盹 > dùn; #76F9

+盺 > xīn; #76FA

+盻 > xì; #76FB

+盼 > pàn; #76FC

+盽 > fēng; #76FD

+盾 > dùn; #76FE

+盿 > mín; #76FF

+眀 > míng; #7700

+省 > shĕng; #7701

+眂 > shì; #7702

+眃 > yún; #7703

+眄 > miăn; #7704

+眅 > pān; #7705

+眆 > făng; #7706

+眇 > miăo; #7707

+眈 > dān; #7708

+眉 > méi; #7709

+眊 > mào; #770A

+看 > kàn; #770B

+県 > xiàn; #770C

+眍 > ōu; #770D

+眎 > shì; #770E

+眏 > yāng; #770F

+眐 > zhēng; #7710

+眑 > yăo; #7711

+眒 > shèn; #7712

+眓 > hùo; #7713

+眔 > dà; #7714

+眕 > zhĕn; #7715

+眖 > kuàng; #7716

+眗 > jū; #7717

+眘 > shèn; #7718

+眙 > chì; #7719

+眚 > shĕng; #771A

+眛 > mèi; #771B

+眜 > mò; #771C

+眝 > zhù; #771D

+眞 > zhēn; #771E

+真 > zhēn; #771F

+眠 > mián; #7720

+眡 > dī; #7721

+眢 > yuān; #7722

+眣 > dié; #7723

+眤 > yí; #7724

+眥 > zì; #7725

+眦 > zì; #7726

+眧 > chăo; #7727

+眨 > zhă; #7728

+眩 > xuàn; #7729

+眪 > bĭng; #772A

+眫 > mĭ; #772B

+眬 > lóng; #772C

+眭 > sūi; #772D

+眮 > dòng; #772E

+眯 > mĭ; #772F

+眰 > dié; #7730

+眱 > yí; #7731

+眲 > èr; #7732

+眳 > mĭng; #7733

+眴 > xuàn; #7734

+眵 > chī; #7735

+眶 > kuàng; #7736

+眷 > juàn; #7737

+眸 > móu; #7738

+眹 > zhèn; #7739

+眺 > tiào; #773A

+眻 > yáng; #773B

+眼 > yăn; #773C

+眽 > mò; #773D

+眾 > zhòng; #773E

+眿 > mài; #773F

+着 > zháo; #7740

+睁 > zhēng; #7741

+睂 > méi; #7742

+睃 > jùn; #7743

+睄 > shào; #7744

+睅 > hàn; #7745

+睆 > huăn; #7746

+睇 > dì; #7747

+睈 > chĕng; #7748

+睉 > cūo; #7749

+睊 > juàn; #774A

+睋 > é; #774B

+睌 > wăn; #774C

+睍 > xiàn; #774D

+睎 > xī; #774E

+睏 > kùn; #774F

+睐 > lài; #7750

+睑 > jiăn; #7751

+睒 > shăn; #7752

+睓 > tiăn; #7753

+睔 > hŭn; #7754

+睕 > wăn; #7755

+睖 > líng; #7756

+睗 > shì; #7757

+睘 > qíong; #7758

+睙 > liè; #7759

+睚 > yái; #775A

+睛 > jīng; #775B

+睜 > zhēng; #775C

+睝 > lí; #775D

+睞 > lài; #775E

+睟 > sùi; #775F

+睠 > juàn; #7760

+睡 > shùi; #7761

+睢 > sūi; #7762

+督 > dū; #7763

+睤 > bì; #7764

+睥 > bì; #7765

+睦 > mù; #7766

+睧 > hūn; #7767

+睨 > nì; #7768

+睩 > lù; #7769

+睪 > yì; #776A

+睫 > jié; #776B

+睬 > căi; #776C

+睭 > zhŏu; #776D

+睮 > yú; #776E

+睯 > hūn; #776F

+睰 > mà; #7770

+睱 > xià; #7771

+睲 > xĭng; #7772

+睳 > xī; #7773

+睴 > gùn; #7774

+睵 > cai; #7775

+睶 > chŭn; #7776

+睷 > jiān; #7777

+睸 > mèi; #7778

+睹 > dŭ; #7779

+睺 > hóu; #777A

+睻 > xuān; #777B

+睼 > tì; #777C

+睽 > kúi; #777D

+睾 > gāo; #777E

+睿 > rùi; #777F

+瞀 > mòu; #7780

+瞁 > xù; #7781

+瞂 > fā; #7782

+瞃 > wēn; #7783

+瞄 > miáo; #7784

+瞅 > chŏu; #7785

+瞆 > kùi; #7786

+瞇 > mī; #7787

+瞈 > wĕng; #7788

+瞉 > kòu; #7789

+瞊 > dàng; #778A

+瞋 > chēn; #778B

+瞌 > kē; #778C

+瞍 > sŏu; #778D

+瞎 > xiā; #778E

+瞏 > qíong; #778F

+瞐 > mào; #7790

+瞑 > míng; #7791

+瞒 > mán; #7792

+瞓 > shùi; #7793

+瞔 > zé; #7794

+瞕 > zhàng; #7795

+瞖 > yì; #7796

+瞗 > diāo; #7797

+瞘 > ōu; #7798

+瞙 > mò; #7799

+瞚 > shùn; #779A

+瞛 > cōng; #779B

+瞜 > lōu; #779C

+瞝 > chī; #779D

+瞞 > mán; #779E

+瞟 > piăo; #779F

+瞠 > chēng; #77A0

+瞡 > jì; #77A1

+瞢 > méng; #77A2

+瞤 > rún; #77A4

+瞥 > piē; #77A5

+瞦 > xī; #77A6

+瞧 > qiáo; #77A7

+瞨 > pú; #77A8

+瞩 > zhŭ; #77A9

+瞪 > dèng; #77AA

+瞫 > shĕn; #77AB

+瞬 > shùn; #77AC

+瞭 > liăo; #77AD

+瞮 > chè; #77AE

+瞯 > xián; #77AF

+瞰 > kàn; #77B0

+瞱 > yè; #77B1

+瞲 > xù; #77B2

+瞳 > tóng; #77B3

+瞴 > móu; #77B4

+瞵 > lín; #77B5

+瞶 > kùi; #77B6

+瞷 > xián; #77B7

+瞸 > yè; #77B8

+瞹 > ài; #77B9

+瞺 > hùi; #77BA

+瞻 > zhān; #77BB

+瞼 > jiăn; #77BC

+瞽 > gŭ; #77BD

+瞾 > zhào; #77BE

+瞿 > qū; #77BF

+矀 > wéi; #77C0

+矁 > chŏu; #77C1

+矂 > sào; #77C2

+矃 > nĭng; #77C3

+矄 > xūn; #77C4

+矅 > yào; #77C5

+矆 > hùo; #77C6

+矇 > méng; #77C7

+矈 > mián; #77C8

+矉 > bīn; #77C9

+矊 > mián; #77CA

+矋 > lì; #77CB

+矌 > kuàng; #77CC

+矍 > jué; #77CD

+矎 > xuān; #77CE

+矏 > mián; #77CF

+矐 > hùo; #77D0

+矑 > lú; #77D1

+矒 > méng; #77D2

+矓 > lóng; #77D3

+矔 > guàn; #77D4

+矕 > măn; #77D5

+矖 > xĭ; #77D6

+矗 > chù; #77D7

+矘 > tăng; #77D8

+矙 > kàn; #77D9

+矚 > zhŭ; #77DA

+矛 > máo; #77DB

+矜 > jīn; #77DC

+矝 > lín; #77DD

+矞 > yù; #77DE

+矟 > shùo; #77DF

+矠 > cè; #77E0

+矡 > jué; #77E1

+矢 > shĭ; #77E2

+矣 > yĭ; #77E3

+矤 > shĕn; #77E4

+知 > zhī; #77E5

+矦 > hóu; #77E6

+矧 > shĕn; #77E7

+矨 > yĭng; #77E8

+矩 > jŭ; #77E9

+矪 > zhōu; #77EA

+矫 > jiăo; #77EB

+矬 > cúo; #77EC

+短 > duăn; #77ED

+矮 > ăi; #77EE

+矯 > jiăo; #77EF

+矰 > zēng; #77F0

+矱 > hùo; #77F1

+矲 > băi; #77F2

+石 > shí; #77F3

+矴 > dìng; #77F4

+矵 > qì; #77F5

+矶 > jī; #77F6

+矷 > zĭ; #77F7

+矸 > gān; #77F8

+矹 > wù; #77F9

+矺 > tūo; #77FA

+矻 > kù; #77FB

+矼 > qiāng; #77FC

+矽 > xì; #77FD

+矾 > fán; #77FE

+矿 > kuàng; #77FF

+砀 > dàng; #7800

+码 > mă; #7801

+砂 > shā; #7802

+砃 > dān; #7803

+砄 > jué; #7804

+砅 > lì; #7805

+砆 > fū; #7806

+砇 > mín; #7807

+砈 > nŭo; #7808

+砉 > hùo; #7809

+砊 > kàng; #780A

+砋 > zhĭ; #780B

+砌 > qì; #780C

+砍 > kăn; #780D

+砎 > jiè; #780E

+砏 > fēn; #780F

+砐 > è; #7810

+砑 > yà; #7811

+砒 > pī; #7812

+砓 > zhé; #7813

+研 > yán; #7814

+砕 > sùi; #7815

+砖 > zhuān; #7816

+砗 > chē; #7817

+砘 > dùn; #7818

+砙 > pān; #7819

+砚 > yàn; #781A

+砜 > fēng; #781C

+砝 > fá; #781D

+砞 > mò; #781E

+砟 > zhà; #781F

+砠 > qū; #7820

+砡 > yù; #7821

+砢 > lŭo; #7822

+砣 > túo; #7823

+砤 > túo; #7824

+砥 > dĭ; #7825

+砦 > zhài; #7826

+砧 > zhēn; #7827

+砨 > ài; #7828

+砩 > fèi; #7829

+砪 > mŭ; #782A

+砫 > zhŭ; #782B

+砬 > lì; #782C

+砭 > biān; #782D

+砮 > nŭ; #782E

+砯 > pīng; #782F

+砰 > pēng; #7830

+砱 > líng; #7831

+砲 > pào; #7832

+砳 > lè; #7833

+破 > pò; #7834

+砵 > bō; #7835

+砶 > pò; #7836

+砷 > shēn; #7837

+砸 > zá; #7838

+砹 > nŭo; #7839

+砺 > lì; #783A

+砻 > lóng; #783B

+砼 > tóng; #783C

+砾 > lì; #783E

+础 > chŭ; #7840

+硁 > kēng; #7841

+硂 > quán; #7842

+硃 > zhū; #7843

+硄 > kuāng; #7844

+硅 > hùo; #7845

+硆 > è; #7846

+硇 > náo; #7847

+硈 > jiá; #7848

+硉 > lù; #7849

+硊 > wĕi; #784A

+硋 > ài; #784B

+硌 > lùo; #784C

+硍 > kèn; #784D

+硎 > xíng; #784E

+硏 > yán; #784F

+硐 > tóng; #7850

+硑 > pēng; #7851

+硒 > xī; #7852

+硔 > hóng; #7854

+硕 > shùo; #7855

+硖 > xiá; #7856

+硗 > qiāo; #7857

+硙 > wèi; #7859

+硚 > qiáo; #785A

+硜 > kēng; #785C

+硝 > xiāo; #785D

+硞 > què; #785E

+硟 > chàn; #785F

+硠 > lăng; #7860

+硡 > hóng; #7861

+硢 > yú; #7862

+硣 > xiāo; #7863

+硤 > xiá; #7864

+硥 > măng; #7865

+硦 > lòng; #7866

+硧 > ĭong; #7867

+硨 > chē; #7868

+硩 > chè; #7869

+硪 > é; #786A

+硫 > líu; #786B

+硬 > yìng; #786C

+硭 > máng; #786D

+确 > què; #786E

+硯 > yàn; #786F

+硰 > shā; #7870

+硱 > kŭn; #7871

+硲 > yù; #7872

+硵 > lŭ; #7875

+硶 > chĕn; #7876

+硷 > jiăn; #7877

+硸 > nuè; #7878

+硹 > sōng; #7879

+硺 > zhúo; #787A

+硻 > kēng; #787B

+硼 > péng; #787C

+硽 > yăn; #787D

+硾 > zhùi; #787E

+硿 > kōng; #787F

+碀 > céng; #7880

+碁 > qí; #7881

+碂 > zòng; #7882

+碃 > qìng; #7883

+碄 > lín; #7884

+碅 > jūn; #7885

+碆 > bō; #7886

+碇 > dìng; #7887

+碈 > mín; #7888

+碉 > diāo; #7889

+碊 > jiān; #788A

+碋 > hè; #788B

+碌 > lù; #788C

+碍 > ài; #788D

+碎 > sùi; #788E

+碏 > què; #788F

+碐 > líng; #7890

+碑 > bēi; #7891

+碒 > yín; #7892

+碓 > dùi; #7893

+碔 > wŭ; #7894

+碕 > qí; #7895

+碖 > lùn; #7896

+碗 > wăn; #7897

+碘 > diăn; #7898

+碙 > gāng; #7899

+碚 > péi; #789A

+碛 > qì; #789B

+碜 > chĕn; #789C

+碝 > ruăn; #789D

+碞 > yán; #789E

+碟 > dié; #789F

+碠 > dìng; #78A0

+碡 > dú; #78A1

+碢 > túo; #78A2

+碣 > jié; #78A3

+碤 > yīng; #78A4

+碥 > biăn; #78A5

+碦 > kè; #78A6

+碧 > bì; #78A7

+碨 > wēi; #78A8

+碩 > shùo; #78A9

+碪 > zhēn; #78AA

+碫 > duàn; #78AB

+碬 > xiá; #78AC

+碭 > dàng; #78AD

+碮 > tí; #78AE

+碯 > năo; #78AF

+碰 > pèng; #78B0

+碱 > jiăn; #78B1

+碲 > dì; #78B2

+碳 > tàn; #78B3

+碴 > chá; #78B4

+碶 > qì; #78B6

+碸 > fēng; #78B8

+碹 > xuàn; #78B9

+確 > què; #78BA

+碻 > què; #78BB

+碼 > mă; #78BC

+碽 > gōng; #78BD

+碾 > niàn; #78BE

+碿 > sù; #78BF

+磀 > é; #78C0

+磁 > cí; #78C1

+磂 > lìu; #78C2

+磃 > sī; #78C3

+磄 > táng; #78C4

+磅 > bàng; #78C5

+磆 > huá; #78C6

+磇 > pī; #78C7

+磈 > wĕi; #78C8

+磉 > săng; #78C9

+磊 > lĕi; #78CA

+磋 > cūo; #78CB

+磌 > zhēn; #78CC

+磍 > xiá; #78CD

+磎 > qī; #78CE

+磏 > lián; #78CF

+磐 > pán; #78D0

+磑 > wèi; #78D1

+磒 > yŭn; #78D2

+磓 > dūi; #78D3

+磔 > zhé; #78D4

+磕 > kē; #78D5

+磖 > lā; #78D6

+磘 > qìng; #78D8

+磙 > gŭn; #78D9

+磚 > zhuān; #78DA

+磛 > chán; #78DB

+磜 > qì; #78DC

+磝 > áo; #78DD

+磞 > pēng; #78DE

+磟 > lù; #78DF

+磠 > lŭ; #78E0

+磡 > kàn; #78E1

+磢 > qiăng; #78E2

+磣 > chĕn; #78E3

+磤 > yĭn; #78E4

+磥 > lĕi; #78E5

+磦 > biāo; #78E6

+磧 > qì; #78E7

+磨 > mó; #78E8

+磩 > qī; #78E9

+磪 > cūi; #78EA

+磫 > zōng; #78EB

+磬 > qìng; #78EC

+磭 > chùo; #78ED

+磯 > jī; #78EF

+磰 > shàn; #78F0

+磱 > láo; #78F1

+磲 > qú; #78F2

+磳 > zēng; #78F3

+磴 > dèng; #78F4

+磵 > jiàn; #78F5

+磶 > xì; #78F6

+磷 > lìn; #78F7

+磸 > dìng; #78F8

+磹 > diàn; #78F9

+磺 > huáng; #78FA

+磻 > pán; #78FB

+磼 > zá; #78FC

+磽 > qiāo; #78FD

+磾 > dī; #78FE

+磿 > lì; #78FF

+礁 > jiāo; #7901

+礃 > zhăng; #7903

+礄 > qiáo; #7904

+礅 > dūn; #7905

+礆 > xiăn; #7906

+礇 > yù; #7907

+礈 > zhùi; #7908

+礉 > hé; #7909

+礊 > hùo; #790A

+礋 > zhái; #790B

+礌 > lèi; #790C

+礍 > kĕ; #790D

+礎 > chŭ; #790E

+礏 > jí; #790F

+礐 > què; #7910

+礑 > dàng; #7911

+礒 > yĭ; #7912

+礓 > jiāng; #7913

+礔 > pì; #7914

+礕 > pī; #7915

+礖 > yù; #7916

+礗 > pīn; #7917

+礘 > qì; #7918

+礙 > ài; #7919

+礚 > kài; #791A

+礛 > jiān; #791B

+礜 > yù; #791C

+礝 > ruăn; #791D

+礞 > méng; #791E

+礟 > pào; #791F

+礠 > cí; #7920

+礣 > miè; #7923

+礤 > că; #7924

+礥 > xián; #7925

+礦 > kuàng; #7926

+礧 > lèi; #7927

+礨 > lĕi; #7928

+礩 > zhì; #7929

+礪 > lì; #792A

+礫 > lì; #792B

+礬 > fán; #792C

+礭 > què; #792D

+礮 > pào; #792E

+礯 > yīng; #792F

+礰 > lì; #7930

+礱 > lóng; #7931

+礲 > lóng; #7932

+礳 > mò; #7933

+礴 > bó; #7934

+礵 > shuāng; #7935

+礶 > guàn; #7936

+礷 > lán; #7937

+礸 > zăn; #7938

+礹 > yán; #7939

+示 > shì; #793A

+礻 > shì' 'zì' 'páng; #793B

+礼 > lĭ; #793C

+礽 > réng; #793D

+社 > shè; #793E

+礿 > yuè; #793F

+祀 > sì; #7940

+祁 > qí; #7941

+祂 > tā; #7942

+祃 > mà; #7943

+祄 > xiè; #7944

+祅 > xiān; #7945

+祆 > xiān; #7946

+祇 > zhī; #7947

+祈 > qí; #7948

+祉 > zhĭ; #7949

+祊 > bēng; #794A

+祋 > dùi; #794B

+祌 > zhòng; #794C

+祎 > yī; #794E

+祏 > shí; #794F

+祐 > yòu; #7950

+祑 > zhì; #7951

+祒 > tiáo; #7952

+祓 > fú; #7953

+祔 > fù; #7954

+祕 > mì; #7955

+祖 > zŭ; #7956

+祗 > zhī; #7957

+祘 > suàn; #7958

+祙 > mèi; #7959

+祚 > zùo; #795A

+祛 > qū; #795B

+祜 > hù; #795C

+祝 > zhù; #795D

+神 > shén; #795E

+祟 > sùi; #795F

+祠 > cí; #7960

+祡 > chái; #7961

+祢 > mí; #7962

+祣 > lǚ; #7963

+祤 > yŭ; #7964

+祥 > xiáng; #7965

+祦 > wú; #7966

+祧 > tiāo; #7967

+票 > piào; #7968

+祩 > zhū; #7969

+祪 > gŭi; #796A

+祫 > xiá; #796B

+祬 > zhī; #796C

+祭 > jì; #796D

+祮 > gào; #796E

+祯 > zhēn; #796F

+祰 > gào; #7970

+祱 > shùi; #7971

+祲 > jīn; #7972

+祳 > chĕn; #7973

+祴 > gāi; #7974

+祵 > kŭn; #7975

+祶 > dì; #7976

+祷 > dăo; #7977

+祸 > hùo; #7978

+祹 > táo; #7979

+祺 > qí; #797A

+祻 > gù; #797B

+祼 > guàn; #797C

+祽 > zùi; #797D

+祾 > líng; #797E

+祿 > lù; #797F

+禀 > bĭng; #7980

+禁 > jìn; #7981

+禂 > dăo; #7982

+禃 > zhí; #7983

+禄 > lù; #7984

+禅 > shàn; #7985

+禆 > bēi; #7986

+禇 > zhĕ; #7987

+禈 > hūi; #7988

+禉 > yŏu; #7989

+禊 > xì; #798A

+禋 > yīn; #798B

+禌 > zī; #798C

+禍 > hùo; #798D

+禎 > zhēn; #798E

+福 > fú; #798F

+禐 > yuàn; #7990

+禑 > wú; #7991

+禒 > xiăn; #7992

+禓 > yáng; #7993

+禔 > tí; #7994

+禕 > yī; #7995

+禖 > méi; #7996

+禗 > sī; #7997

+禘 > dì; #7998

+禚 > zhúo; #799A

+禛 > zhēn; #799B

+禜 > yŏng; #799C

+禝 > jí; #799D

+禞 > gào; #799E

+禟 > táng; #799F

+禠 > sī; #79A0

+禡 > mà; #79A1

+禢 > tā; #79A2

+禤 > xuān; #79A4

+禥 > qí; #79A5

+禦 > yù; #79A6

+禧 > xī; #79A7

+禨 > jī; #79A8

+禩 > sì; #79A9

+禪 > chán; #79AA

+禫 > tăn; #79AB

+禬 > kuài; #79AC

+禭 > sùi; #79AD

+禮 > lĭ; #79AE

+禯 > nóng; #79AF

+禰 > nĭ; #79B0

+禱 > dăo; #79B1

+禲 > lì; #79B2

+禳 > ráng; #79B3

+禴 > yuè; #79B4

+禵 > tí; #79B5

+禶 > zăn; #79B6

+禷 > lèi; #79B7

+禸 > róu; #79B8

+禹 > yŭ; #79B9

+禺 > yú; #79BA

+离 > chī; #79BB

+禼 > xiè; #79BC

+禽 > qín; #79BD

+禾 > hé; #79BE

+禿 > tū; #79BF

+秀 > xìu; #79C0

+私 > sī; #79C1

+秂 > rén; #79C2

+秃 > tū; #79C3

+秄 > zĭ; #79C4

+秅 > chá; #79C5

+秆 > găn; #79C6

+秇 > yì; #79C7

+秈 > xiān; #79C8

+秉 > bĭng; #79C9

+秊 > nián; #79CA

+秋 > qīu; #79CB

+秌 > qīu; #79CC

+种 > chóng; #79CD

+秎 > fén; #79CE

+秏 > hào; #79CF

+秐 > yún; #79D0

+科 > kē; #79D1

+秒 > miăo; #79D2

+秓 > zhī; #79D3

+秔 > gēng; #79D4

+秕 > bĭ; #79D5

+秖 > zhī; #79D6

+秗 > yù; #79D7

+秘 > mì; #79D8

+秙 > kù; #79D9

+秚 > bàn; #79DA

+秛 > pī; #79DB

+秜 > ní; #79DC

+秝 > lì; #79DD

+秞 > yóu; #79DE

+租 > zū; #79DF

+秠 > pī; #79E0

+秡 > bá; #79E1

+秢 > líng; #79E2

+秣 > mò; #79E3

+秤 > chèng; #79E4

+秥 > nián; #79E5

+秦 > qín; #79E6

+秧 > yāng; #79E7

+秨 > zúo; #79E8

+秩 > zhì; #79E9

+秪 > zhī; #79EA

+秫 > shú; #79EB

+秬 > jù; #79EC

+秭 > zĭ; #79ED

+秮 > húo; #79EE

+积 > jī; #79EF

+称 > chēng; #79F0

+秱 > tóng; #79F1

+秲 > zhì; #79F2

+秳 > húo; #79F3

+秴 > hé; #79F4

+秵 > yīn; #79F5

+秶 > zī; #79F6

+秷 > zhí; #79F7

+秸 > jiē; #79F8

+秹 > rĕn; #79F9

+秺 > dù; #79FA

+移 > yí; #79FB

+秼 > zhū; #79FC

+秽 > hùi; #79FD

+秾 > nóng; #79FE

+秿 > fŭ; #79FF

+稀 > xī; #7A00

+稁 > kăo; #7A01

+稂 > láng; #7A02

+稃 > fū; #7A03

+稄 > zè; #7A04

+稅 > shùi; #7A05

+稆 > lǚ; #7A06

+稇 > kŭn; #7A07

+稈 > găn; #7A08

+稉 > gēng; #7A09

+稊 > tí; #7A0A

+程 > chéng; #7A0B

+稌 > tú; #7A0C

+稍 > shāo; #7A0D

+税 > shùi; #7A0E

+稏 > yà; #7A0F

+稐 > lŭn; #7A10

+稑 > lù; #7A11

+稒 > gù; #7A12

+稓 > zúo; #7A13

+稔 > rĕn; #7A14

+稕 > zhùn; #7A15

+稖 > bàng; #7A16

+稗 > bài; #7A17

+稘 > jī; #7A18

+稙 > zhí; #7A19

+稚 > zhì; #7A1A

+稛 > kŭn; #7A1B

+稜 > léng; #7A1C

+稝 > péng; #7A1D

+稞 > kē; #7A1E

+稟 > bĭng; #7A1F

+稠 > chóu; #7A20

+稡 > zú; #7A21

+稢 > yù; #7A22

+稣 > sū; #7A23

+稤 > lǜe; #7A24

+稦 > yī; #7A26

+稧 > xì; #7A27

+稨 > biān; #7A28

+稩 > jì; #7A29

+稪 > fù; #7A2A

+稫 > bī; #7A2B

+稬 > nùo; #7A2C

+稭 > jiē; #7A2D

+種 > zhŏng; #7A2E

+稯 > zōng; #7A2F

+稰 > xū; #7A30

+稱 > chēng; #7A31

+稲 > dào; #7A32

+稳 > wĕn; #7A33

+稴 > lián; #7A34

+稵 > zī; #7A35

+稶 > yù; #7A36

+稷 > jì; #7A37

+稸 > xù; #7A38

+稹 > zhĕn; #7A39

+稺 > zhì; #7A3A

+稻 > dào; #7A3B

+稼 > jià; #7A3C

+稽 > jī; #7A3D

+稾 > găo; #7A3E

+稿 > găo; #7A3F

+穀 > gŭ; #7A40

+穁 > róng; #7A41

+穂 > sùi; #7A42

+穄 > jì; #7A44

+穅 > kāng; #7A45

+穆 > mù; #7A46

+穇 > shān; #7A47

+穈 > mén; #7A48

+穉 > zhì; #7A49

+穊 > jì; #7A4A

+穋 > lù; #7A4B

+穌 > sū; #7A4C

+積 > jī; #7A4D

+穎 > yĭng; #7A4E

+穏 > wĕn; #7A4F

+穐 > qīu; #7A50

+穑 > sè; #7A51

+穓 > yì; #7A53

+穔 > huáng; #7A54

+穕 > qiè; #7A55

+穖 > jĭ; #7A56

+穗 > sùi; #7A57

+穘 > xiāo; #7A58

+穙 > pú; #7A59

+穚 > jiāo; #7A5A

+穛 > zhūo; #7A5B

+穜 > tóng; #7A5C

+穞 > lǚ; #7A5E

+穟 > sùi; #7A5F

+穠 > nóng; #7A60

+穡 > sè; #7A61

+穢 > hùi; #7A62

+穣 > ráng; #7A63

+穤 > nùo; #7A64

+穥 > yù; #7A65

+穦 > bin; #7A66

+穧 > jì; #7A67

+穨 > túi; #7A68

+穩 > wĕn; #7A69

+穪 > chēng; #7A6A

+穫 > hùo; #7A6B

+穬 > gŏng; #7A6C

+穭 > lǚ; #7A6D

+穮 > biāo; #7A6E

+穰 > ráng; #7A70

+穱 > zhūo; #7A71

+穲 > lí; #7A72

+穳 > zàn; #7A73

+穴 > xuè; #7A74

+穵 > wā; #7A75

+究 > jìu; #7A76

+穷 > qíong; #7A77

+穸 > xì; #7A78

+穹 > qīong; #7A79

+空 > kōng; #7A7A

+穻 > yū; #7A7B

+穼 > sēn; #7A7C

+穽 > jĭng; #7A7D

+穾 > yào; #7A7E

+穿 > chuān; #7A7F

+窀 > zhūn; #7A80

+突 > tú; #7A81

+窂 > láo; #7A82

+窃 > qiè; #7A83

+窄 > zhăi; #7A84

+窅 > yăo; #7A85

+窆 > biăn; #7A86

+窇 > báo; #7A87

+窈 > yăo; #7A88

+窉 > bĭng; #7A89

+窊 > wā; #7A8A

+窋 > zhú; #7A8B

+窌 > jiào; #7A8C

+窍 > qiào; #7A8D

+窎 > diào; #7A8E

+窏 > wū; #7A8F

+窐 > gūi; #7A90

+窑 > yáo; #7A91

+窒 > zhì; #7A92

+窓 > chuāng; #7A93

+窔 > yăo; #7A94

+窕 > tiăo; #7A95

+窖 > jiào; #7A96

+窗 > chuāng; #7A97

+窘 > jĭong; #7A98

+窙 > xiāo; #7A99

+窚 > chéng; #7A9A

+窛 > kòu; #7A9B

+窜 > cuàn; #7A9C

+窝 > wō; #7A9D

+窞 > dàn; #7A9E

+窟 > kū; #7A9F

+窠 > kē; #7AA0

+窡 > zhùi; #7AA1

+窢 > xù; #7AA2

+窣 > sù; #7AA3

+窤 > guan; #7AA4

+窥 > kūi; #7AA5

+窦 > dòu; #7AA6

+窨 > yìn; #7AA8

+窩 > wō; #7AA9

+窪 > wā; #7AAA

+窫 > yà; #7AAB

+窬 > yú; #7AAC

+窭 > jù; #7AAD

+窮 > qíong; #7AAE

+窯 > yáo; #7AAF

+窰 > yáo; #7AB0

+窱 > tiào; #7AB1

+窲 > cháo; #7AB2

+窳 > yŭ; #7AB3

+窴 > tián; #7AB4

+窵 > diào; #7AB5

+窶 > jù; #7AB6

+窷 > liáo; #7AB7

+窸 > xī; #7AB8

+窹 > wù; #7AB9

+窺 > kūi; #7ABA

+窻 > chuāng; #7ABB

+窼 > zhāo; #7ABC

+窾 > kuăn; #7ABE

+窿 > lóng; #7ABF

+竀 > chēng; #7AC0

+竁 > cùi; #7AC1

+竂 > piáo; #7AC2

+竃 > zào; #7AC3

+竄 > cuàn; #7AC4

+竅 > qiào; #7AC5

+竆 > qíong; #7AC6

+竇 > dòu; #7AC7

+竈 > zào; #7AC8

+竉 > lŏng; #7AC9

+竊 > qiè; #7ACA

+立 > lì; #7ACB

+竌 > chù; #7ACC

+竍 > shí' 'gōng' 'shēng; #7ACD

+竎 > fòu; #7ACE

+竏 > qiān' 'gōng' 'shēng; #7ACF

+竐 > chù; #7AD0

+竑 > hóng; #7AD1

+竒 > qí; #7AD2

+竓 > qiān' 'fēn' 'zhī' 'yī' 'gōng' 'shēng; #7AD3

+竔 > gōng' 'shēng; #7AD4

+竕 > shí' 'fēn' 'zhī' 'yī' 'gōng' 'shēng; #7AD5

+竖 > shù; #7AD6

+竗 > miào; #7AD7

+竘 > jŭ; #7AD8

+站 > zhàn; #7AD9

+竚 > zhù; #7ADA

+竛 > líng; #7ADB

+竜 > lóng; #7ADC

+竝 > bìng; #7ADD

+竞 > jìng; #7ADE

+竟 > jìng; #7ADF

+章 > zhāng; #7AE0

+竡 > yī' 'gōng' 'shēng' 'de' 'yī' 'băi' 'bèi; #7AE1

+竢 > sì; #7AE2

+竣 > jùn; #7AE3

+竤 > hóng; #7AE4

+童 > tóng; #7AE5

+竦 > sŏng; #7AE6

+竧 > jìng; #7AE7

+竨 > diào; #7AE8

+竩 > yì; #7AE9

+竪 > shù; #7AEA

+竫 > jìng; #7AEB

+竬 > qŭ; #7AEC

+竭 > jié; #7AED

+竮 > píng; #7AEE

+端 > duān; #7AEF

+竰 > sháo; #7AF0

+竱 > zhuăn; #7AF1

+竲 > céng; #7AF2

+竳 > dēng; #7AF3

+竴 > cūi; #7AF4

+竵 > huāi; #7AF5

+競 > jìng; #7AF6

+竷 > kàn; #7AF7

+竸 > jìng; #7AF8

+竹 > zhú; #7AF9

+竺 > zhú; #7AFA

+竻 > lè; #7AFB

+竼 > péng; #7AFC

+竽 > yú; #7AFD

+竾 > chí; #7AFE

+竿 > gān; #7AFF

+笀 > máng; #7B00

+笁 > zhú; #7B01

+笃 > dŭ; #7B03

+笄 > jī; #7B04

+笅 > xiáo; #7B05

+笆 > bā; #7B06

+笇 > suàn; #7B07

+笈 > jí; #7B08

+笉 > zhĕn; #7B09

+笊 > zhào; #7B0A

+笋 > sŭn; #7B0B

+笌 > yá; #7B0C

+笍 > zhùi; #7B0D

+笎 > yuán; #7B0E

+笏 > hù; #7B0F

+笐 > gāng; #7B10

+笑 > xiào; #7B11

+笒 > cén; #7B12

+笓 > pí; #7B13

+笔 > bĭ; #7B14

+笕 > jiăn; #7B15

+笖 > yĭ; #7B16

+笗 > dōng; #7B17

+笘 > shān; #7B18

+笙 > shēng; #7B19

+笚 > xiá; #7B1A

+笛 > dí; #7B1B

+笜 > zhú; #7B1C

+笝 > nà; #7B1D

+笞 > chī; #7B1E

+笟 > gū; #7B1F

+笠 > lì; #7B20

+笡 > qiè; #7B21

+笢 > mĭn; #7B22

+笣 > bāo; #7B23

+笤 > tiáo; #7B24

+笥 > sì; #7B25

+符 > fú; #7B26

+笧 > cè; #7B27

+笨 > bèn; #7B28

+笩 > pèi; #7B29

+笪 > dá; #7B2A

+笫 > zĭ; #7B2B

+第 > dì; #7B2C

+笭 > líng; #7B2D

+笮 > zé; #7B2E

+笯 > nú; #7B2F

+笰 > fú; #7B30

+笱 > gŏu; #7B31

+笲 > fān; #7B32

+笳 > jiā; #7B33

+笴 > gĕ; #7B34

+笵 > fàn; #7B35

+笶 > shĭ; #7B36

+笷 > măo; #7B37

+笸 > pŏ; #7B38

+笺 > jiān; #7B3A

+笻 > qíong; #7B3B

+笼 > lóng; #7B3C

+笾 > biān; #7B3E

+笿 > lùo; #7B3F

+筀 > gùi; #7B40

+筁 > qŭ; #7B41

+筂 > chí; #7B42

+筃 > yīn; #7B43

+筄 > yào; #7B44

+筅 > xiăn; #7B45

+筆 > bĭ; #7B46

+筇 > qíong; #7B47

+筈 > guā; #7B48

+等 > dĕng; #7B49

+筊 > jiăo; #7B4A

+筋 > jīn; #7B4B

+筌 > quán; #7B4C

+筍 > sŭn; #7B4D

+筎 > rú; #7B4E

+筏 > fá; #7B4F

+筐 > kuāng; #7B50

+筑 > zhú; #7B51

+筒 > tŏng; #7B52

+筓 > jī; #7B53

+答 > dá; #7B54

+筕 > xíng; #7B55

+策 > cè; #7B56

+筗 > zhòng; #7B57

+筘 > kòu; #7B58

+筙 > lái; #7B59

+筚 > bì; #7B5A

+筛 > shāi; #7B5B

+筜 > dāng; #7B5C

+筝 > zhēng; #7B5D

+筞 > cè; #7B5E

+筟 > fū; #7B5F

+筠 > yún; #7B60

+筡 > tú; #7B61

+筢 > pá; #7B62

+筣 > lì; #7B63

+筤 > láng; #7B64

+筥 > jŭ; #7B65

+筦 > guăn; #7B66

+筧 > jiăn; #7B67

+筨 > hán; #7B68

+筩 > tóng; #7B69

+筪 > xiá; #7B6A

+筫 > zhì; #7B6B

+筬 > chéng; #7B6C

+筭 > suàn; #7B6D

+筮 > shì; #7B6E

+筯 > zhù; #7B6F

+筰 > zúo; #7B70

+筱 > xiăo; #7B71

+筲 > shāo; #7B72

+筳 > tíng; #7B73

+筴 > cè; #7B74

+筵 > yán; #7B75

+筶 > găo; #7B76

+筷 > kuài; #7B77

+筸 > gān; #7B78

+筹 > chóu; #7B79

+筻 > gàng; #7B7B

+筼 > yún; #7B7C

+签 > qiān; #7B7E

+筿 > xiăo; #7B7F

+简 > jiăn; #7B80

+箁 > pú; #7B81

+箂 > lái; #7B82

+箃 > zōu; #7B83

+箄 > bì; #7B84

+箅 > bì; #7B85

+箆 > bì; #7B86

+箇 > gè; #7B87

+箈 > chí; #7B88

+箉 > guăi; #7B89

+箊 > yū; #7B8A

+箋 > jiān; #7B8B

+箌 > zhào; #7B8C

+箍 > gū; #7B8D

+箎 > chí; #7B8E

+箏 > zhēng; #7B8F

+箐 > jīng; #7B90

+箑 > shà; #7B91

+箒 > zhŏu; #7B92

+箓 > lù; #7B93

+箔 > bó; #7B94

+箕 > jī; #7B95

+箖 > lín; #7B96

+算 > suàn; #7B97

+箘 > jùn; #7B98

+箙 > fú; #7B99

+箚 > zhá; #7B9A

+箛 > gū; #7B9B

+箜 > kōng; #7B9C

+箝 > qián; #7B9D

+箞 > quān; #7B9E

+箟 > jùn; #7B9F

+箠 > chúi; #7BA0

+管 > guăn; #7BA1

+箢 > yuān; #7BA2

+箣 > cè; #7BA3

+箤 > jú; #7BA4

+箥 > bŏ; #7BA5

+箦 > zé; #7BA6

+箧 > qiè; #7BA7

+箨 > tùo; #7BA8

+箩 > lúo; #7BA9

+箪 > dān; #7BAA

+箫 > xiāo; #7BAB

+箬 > rùo; #7BAC

+箭 > jiàn; #7BAD

+箮 > xuan; #7BAE

+箯 > biān; #7BAF

+箰 > sŭn; #7BB0

+箱 > xiāng; #7BB1

+箲 > xiăn; #7BB2

+箳 > píng; #7BB3

+箴 > zhēn; #7BB4

+箵 > shĕng; #7BB5

+箶 > hú; #7BB6

+箷 > shī; #7BB7

+箸 > zhù; #7BB8

+箹 > yuē; #7BB9

+箺 > chŭn; #7BBA

+箻 > lǜ; #7BBB

+箼 > wū; #7BBC

+箽 > dŏng; #7BBD

+箾 > xiāo; #7BBE

+箿 > jí; #7BBF

+節 > jié; #7BC0

+篁 > huáng; #7BC1

+篂 > xīng; #7BC2

+篃 > méi; #7BC3

+範 > fàn; #7BC4

+篅 > chúi; #7BC5

+篆 > zhuàn; #7BC6

+篇 > piān; #7BC7

+篈 > fēng; #7BC8

+築 > zhú; #7BC9

+篊 > hóng; #7BCA

+篋 > qiè; #7BCB

+篌 > hóu; #7BCC

+篍 > qīu; #7BCD

+篎 > miăo; #7BCE

+篏 > qiàn; #7BCF

+篑 > kùi; #7BD1

+篓 > lŏu; #7BD3

+篔 > yún; #7BD4

+篕 > hé; #7BD5

+篖 > táng; #7BD6

+篗 > yuè; #7BD7

+篘 > chōu; #7BD8

+篙 > gāo; #7BD9

+篚 > fĕi; #7BDA

+篛 > rùo; #7BDB

+篜 > zhēng; #7BDC

+篝 > gōu; #7BDD

+篞 > niè; #7BDE

+篟 > qiàn; #7BDF

+篠 > xiăo; #7BE0

+篡 > cuàn; #7BE1

+篢 > gōng; #7BE2

+篣 > páng; #7BE3

+篤 > dŭ; #7BE4

+篥 > lì; #7BE5

+篦 > bì; #7BE6

+篧 > zhúo; #7BE7

+篨 > chú; #7BE8

+篩 > shāi; #7BE9

+篪 > chí; #7BEA

+篫 > zhú; #7BEB

+篬 > qiāng; #7BEC

+篭 > lóng; #7BED

+篮 > lán; #7BEE

+篯 > jiān; #7BEF

+篰 > bù; #7BF0

+篱 > lí; #7BF1

+篲 > hùi; #7BF2

+篳 > bì; #7BF3

+篴 > dí; #7BF4

+篵 > cōng; #7BF5

+篶 > yān; #7BF6

+篷 > péng; #7BF7

+篸 > sēn; #7BF8

+篹 > zhuàn; #7BF9

+篺 > pái; #7BFA

+篻 > piào; #7BFB

+篼 > dōu; #7BFC

+篽 > yŭ; #7BFD

+篾 > miè; #7BFE

+篿 > zhuān; #7BFF

+簀 > zé; #7C00

+簁 > xĭ; #7C01

+簂 > gúo; #7C02

+簃 > yí; #7C03

+簄 > hù; #7C04

+簅 > chăn; #7C05

+簆 > kòu; #7C06

+簇 > cù; #7C07

+簈 > píng; #7C08

+簉 > chòu; #7C09

+簊 > jī; #7C0A

+簋 > gŭi; #7C0B

+簌 > sù; #7C0C

+簍 > lŏu; #7C0D

+簎 > zhà; #7C0E

+簏 > lù; #7C0F

+簐 > niăn; #7C10

+簑 > sūo; #7C11

+簒 > cuàn; #7C12

+簔 > sūo; #7C14

+簕 > lè; #7C15

+簖 > duàn; #7C16

+簘 > xiāo; #7C18

+簙 > bó; #7C19

+簚 > mì; #7C1A

+簛 > sī; #7C1B

+簜 > dàng; #7C1C

+簝 > liáo; #7C1D

+簞 > dān; #7C1E

+簟 > diàn; #7C1F

+簠 > fŭ; #7C20

+簡 > jiăn; #7C21

+簢 > mĭn; #7C22

+簣 > kùi; #7C23

+簤 > dài; #7C24

+簥 > qiáo; #7C25

+簦 > dēng; #7C26

+簧 > huáng; #7C27

+簨 > sŭn; #7C28

+簩 > láo; #7C29

+簪 > zān; #7C2A

+簫 > xiāo; #7C2B

+簬 > dù; #7C2C

+簭 > shì; #7C2D

+簮 > zān; #7C2E

+簰 > pái; #7C30

+簲 > pái; #7C32

+簳 > gàn; #7C33

+簴 > jù; #7C34

+簵 > dù; #7C35

+簶 > lù; #7C36

+簷 > yán; #7C37

+簸 > bò; #7C38

+簹 > dāng; #7C39

+簺 > sài; #7C3A

+簻 > kē; #7C3B

+簼 > lóng; #7C3C

+簽 > qiān; #7C3D

+簾 > lián; #7C3E

+簿 > bó; #7C3F

+籀 > zhòu; #7C40

+籁 > lài; #7C41

+籃 > lán; #7C43

+籄 > kùi; #7C44

+籅 > yú; #7C45

+籆 > yuè; #7C46

+籇 > háo; #7C47

+籈 > zhēn; #7C48

+籉 > tái; #7C49

+籊 > tì; #7C4A

+籋 > mí; #7C4B

+籌 > chóu; #7C4C

+籍 > jí; #7C4D

+籐 > téng; #7C50

+籑 > zhuàn; #7C51

+籒 > zhòu; #7C52

+籓 > fān; #7C53

+籔 > sŏu; #7C54

+籕 > zhòu; #7C55

+籗 > zhúo; #7C57

+籘 > téng; #7C58

+籙 > lù; #7C59

+籚 > lú; #7C5A

+籛 > jiān; #7C5B

+籜 > tùo; #7C5C

+籝 > yíng; #7C5D

+籞 > yù; #7C5E

+籟 > lài; #7C5F

+籠 > lóng; #7C60

+籢 > lián; #7C62

+籣 > lán; #7C63

+籤 > qiān; #7C64

+籥 > yuè; #7C65

+籦 > zhōng; #7C66

+籧 > qú; #7C67

+籨 > lián; #7C68

+籩 > biān; #7C69

+籪 > duàn; #7C6A

+籫 > zuăn; #7C6B

+籬 > lí; #7C6C

+籭 > sī; #7C6D

+籮 > lúo; #7C6E

+籯 > yíng; #7C6F

+籰 > yuè; #7C70

+籱 > zhúo; #7C71

+籲 > xū; #7C72

+米 > mĭ; #7C73

+籴 > dí; #7C74

+籵 > fán; #7C75

+籶 > shēn; #7C76

+籷 > zhé; #7C77

+籸 > shēn; #7C78

+籹 > nǚ; #7C79

+籺 > xié; #7C7A

+类 > lèi; #7C7B

+籼 > xiān; #7C7C

+籽 > zĭ; #7C7D

+籾 > ní; #7C7E

+籿 > cùn; #7C7F

+粁 > qiān; #7C81

+粃 > bĭ; #7C83

+粄 > băn; #7C84

+粅 > wù; #7C85

+粆 > shā; #7C86

+粇 > kāng; #7C87

+粈 > rŏu; #7C88

+粉 > fĕn; #7C89

+粊 > bì; #7C8A

+粋 > cùi; #7C8B

+粍 > lí; #7C8D

+粎 > chĭ; #7C8E

+粑 > bā; #7C91

+粒 > lì; #7C92

+粓 > gān; #7C93

+粔 > jù; #7C94

+粕 > pò; #7C95

+粖 > mò; #7C96

+粗 > cū; #7C97

+粘 > nián; #7C98

+粙 > zhòu; #7C99

+粚 > lí; #7C9A

+粛 > sù; #7C9B

+粜 > tiào; #7C9C

+粝 > lì; #7C9D

+粞 > qī; #7C9E

+粟 > sù; #7C9F

+粠 > hóng; #7CA0

+粡 > tóng; #7CA1

+粢 > zī; #7CA2

+粣 > cè; #7CA3

+粤 > yuè; #7CA4

+粥 > zhōu; #7CA5

+粦 > lìn; #7CA6

+粧 > zhuāng; #7CA7

+粨 > băi; #7CA8

+粪 > fèn; #7CAA

+粮 > liáng; #7CAE

+粯 > xiàn; #7CAF

+粰 > fú; #7CB0

+粱 > liáng; #7CB1

+粲 > càn; #7CB2

+粳 > gēng; #7CB3

+粴 > lĭ; #7CB4

+粵 > yuè; #7CB5

+粶 > lù; #7CB6

+粷 > jú; #7CB7

+粸 > qí; #7CB8

+粹 > cùi; #7CB9

+粺 > bài; #7CBA

+粻 > zhāng; #7CBB

+粼 > lín; #7CBC

+粽 > zòng; #7CBD

+精 > jīng; #7CBE

+粿 > gŭo; #7CBF

+糁 > sān; #7CC1

+糂 > săn; #7CC2

+糃 > táng; #7CC3

+糄 > biān; #7CC4

+糅 > rŏu; #7CC5

+糆 > miàn; #7CC6

+糇 > hóu; #7CC7

+糈 > xŭ; #7CC8

+糉 > zòng; #7CC9

+糊 > hú; #7CCA

+糋 > jiàn; #7CCB

+糌 > zán; #7CCC

+糍 > cí; #7CCD

+糎 > lí; #7CCE

+糏 > xiè; #7CCF

+糐 > fū; #7CD0

+糑 > nì; #7CD1

+糒 > bèi; #7CD2

+糓 > gŭ; #7CD3

+糔 > xĭu; #7CD4

+糕 > gāo; #7CD5

+糖 > táng; #7CD6

+糗 > qĭu; #7CD7

+糙 > cāo; #7CD9

+糚 > zhuāng; #7CDA

+糛 > táng; #7CDB

+糜 > mí; #7CDC

+糝 > sān; #7CDD

+糞 > fèn; #7CDE

+糟 > zāo; #7CDF

+糠 > kāng; #7CE0

+糡 > jiàng; #7CE1

+糢 > mó; #7CE2

+糣 > săn; #7CE3

+糤 > săn; #7CE4

+糥 > nùo; #7CE5

+糦 > xī; #7CE6

+糧 > liáng; #7CE7

+糨 > jiàng; #7CE8

+糩 > kuài; #7CE9

+糪 > bó; #7CEA

+糫 > huán; #7CEB

+糭 > zòng; #7CED

+糮 > xiàn; #7CEE

+糯 > nùo; #7CEF

+糰 > tuán; #7CF0

+糱 > niè; #7CF1

+糲 > lì; #7CF2

+糳 > zùo; #7CF3

+糴 > dí; #7CF4

+糵 > niè; #7CF5

+糶 > tiào; #7CF6

+糷 > lán; #7CF7

+糸 > mì; #7CF8

+糹 > jiăo' 'sī' 'páng; #7CF9

+糺 > jīu; #7CFA

+系 > xì; #7CFB

+糼 > gōng; #7CFC

+糽 > zhĕng; #7CFD

+糾 > jīu; #7CFE

+糿 > yòu; #7CFF

+紀 > jì; #7D00

+紁 > chà; #7D01

+紂 > zhòu; #7D02

+紃 > xún; #7D03

+約 > yuē; #7D04

+紅 > hóng; #7D05

+紆 > yū; #7D06

+紇 > hé; #7D07

+紈 > wán; #7D08

+紉 > rèn; #7D09

+紊 > wèn; #7D0A

+紋 > wén; #7D0B

+紌 > qíu; #7D0C

+納 > nà; #7D0D

+紎 > zī; #7D0E

+紏 > tŏu; #7D0F

+紐 > nĭu; #7D10

+紑 > fóu; #7D11

+紒 > jiè; #7D12

+紓 > shū; #7D13

+純 > chún; #7D14

+紕 > pí; #7D15

+紖 > yĭn; #7D16

+紗 > shā; #7D17

+紘 > hóng; #7D18

+紙 > zhĭ; #7D19

+級 > jí; #7D1A

+紛 > fēn; #7D1B

+紜 > yún; #7D1C

+紝 > rén; #7D1D

+紞 > dăn; #7D1E

+紟 > jīn; #7D1F

+素 > sù; #7D20

+紡 > făng; #7D21

+索 > sŭo; #7D22

+紣 > cùi; #7D23

+紤 > jĭu; #7D24

+紥 > zhá; #7D25

+紧 > jĭn; #7D27

+紨 > fù; #7D28

+紩 > zhì; #7D29

+紪 > cĭ; #7D2A

+紫 > zĭ; #7D2B

+紬 > chóu; #7D2C

+紭 > hóng; #7D2D

+紮 > zhá; #7D2E

+累 > lèi; #7D2F

+細 > xì; #7D30

+紱 > fú; #7D31

+紲 > xiè; #7D32

+紳 > shēn; #7D33

+紴 > bèi; #7D34

+紵 > zhù; #7D35

+紶 > qŭ; #7D36

+紷 > líng; #7D37

+紸 > zhù; #7D38

+紹 > shào; #7D39

+紺 > gàn; #7D3A

+紻 > yāng; #7D3B

+紼 > fú; #7D3C

+紽 > túo; #7D3D

+紾 > zhĕn; #7D3E

+紿 > dài; #7D3F

+絀 > zhúo; #7D40

+絁 > shī; #7D41

+終 > zhōng; #7D42

+絃 > xián; #7D43

+組 > zŭ; #7D44

+絅 > jĭong; #7D45

+絆 > bàn; #7D46

+絇 > jù; #7D47

+絈 > mò; #7D48

+絉 > shù; #7D49

+絊 > zùi; #7D4A

+経 > jīng; #7D4C

+絍 > rén; #7D4D

+絎 > hèng; #7D4E

+絏 > xiè; #7D4F

+結 > jié; #7D50

+絑 > zhū; #7D51

+絒 > chóu; #7D52

+絓 > guà; #7D53

+絔 > băi; #7D54

+絕 > jué; #7D55

+絖 > kuàng; #7D56

+絗 > hú; #7D57

+絘 > cì; #7D58

+絙 > gēng; #7D59

+絚 > gēng; #7D5A

+絛 > tāo; #7D5B

+絜 > xié; #7D5C

+絝 > kù; #7D5D

+絞 > jiăo; #7D5E

+絟 > quān; #7D5F

+絠 > găi; #7D60

+絡 > lùo; #7D61

+絢 > xuàn; #7D62

+絣 > bīng; #7D63

+絤 > xiàn; #7D64

+絥 > fú; #7D65

+給 > gĕi; #7D66

+絧 > tóng; #7D67

+絨 > róng; #7D68

+絩 > tiào; #7D69

+絪 > yīn; #7D6A

+絫 > lĕi; #7D6B

+絬 > xiè; #7D6C

+絭 > quàn; #7D6D

+絮 > xù; #7D6E

+絯 > lǜn; #7D6F

+絰 > dié; #7D70

+統 > tŏng; #7D71

+絲 > sī; #7D72

+絳 > jiàng; #7D73

+絴 > xiáng; #7D74

+絵 > hùi; #7D75

+絶 > jué; #7D76

+絷 > zhí; #7D77

+絸 > jiăn; #7D78

+絹 > juàn; #7D79

+絺 > chī; #7D7A

+絻 > miăn; #7D7B

+絼 > zhĕn; #7D7C

+絽 > lǚ; #7D7D

+絾 > chéng; #7D7E

+絿 > qíu; #7D7F

+綀 > shū; #7D80

+綁 > băng; #7D81

+綂 > tŏng; #7D82

+綃 > xiāo; #7D83

+綄 > wàn; #7D84

+綅 > qīn; #7D85

+綆 > gĕng; #7D86

+綇 > xĭu; #7D87

+綈 > tí; #7D88

+綉 > xìu; #7D89

+綊 > xié; #7D8A

+綋 > hóng; #7D8B

+綌 > xì; #7D8C

+綍 > fú; #7D8D

+綎 > tīng; #7D8E

+綏 > sūi; #7D8F

+綐 > dùi; #7D90

+綑 > kŭn; #7D91

+綒 > fū; #7D92

+經 > jīng; #7D93

+綔 > hù; #7D94

+綕 > zhī; #7D95

+綖 > yán; #7D96

+綗 > jĭong; #7D97

+綘 > féng; #7D98

+継 > jì; #7D99

+綜 > zòng; #7D9C

+綝 > lín; #7D9D

+綞 > dŭo; #7D9E

+綟 > lì; #7D9F

+綠 > lǜ; #7DA0

+綡 > liáng; #7DA1

+綢 > chóu; #7DA2

+綣 > quăn; #7DA3

+綤 > shào; #7DA4

+綥 > qì; #7DA5

+綦 > qí; #7DA6

+綧 > zhŭn; #7DA7

+綨 > qí; #7DA8

+綩 > wăn; #7DA9

+綪 > qiàn; #7DAA

+綫 > xiàn; #7DAB

+綬 > shòu; #7DAC

+維 > wéi; #7DAD

+綮 > qĭ; #7DAE

+綯 > táo; #7DAF

+綰 > wăn; #7DB0

+綱 > gāng; #7DB1

+網 > wăng; #7DB2

+綳 > bēng; #7DB3

+綴 > zhùi; #7DB4

+綵 > căi; #7DB5

+綶 > gŭo; #7DB6

+綷 > cùi; #7DB7

+綸 > lún; #7DB8

+綹 > lĭu; #7DB9

+綺 > qĭ; #7DBA

+綻 > zhàn; #7DBB

+綼 > bēi; #7DBC

+綽 > chùo; #7DBD

+綾 > líng; #7DBE

+綿 > mián; #7DBF

+緀 > qī; #7DC0

+緁 > qiè; #7DC1

+緂 > tān; #7DC2

+緃 > zōng; #7DC3

+緄 > gŭn; #7DC4

+緅 > zōu; #7DC5

+緆 > yì; #7DC6

+緇 > zī; #7DC7

+緈 > xìng; #7DC8

+緉 > liăng; #7DC9

+緊 > jĭn; #7DCA

+緋 > fēi; #7DCB

+緌 > rúi; #7DCC

+緍 > mín; #7DCD

+緎 > yù; #7DCE

+総 > zŏng; #7DCF

+緐 > fán; #7DD0

+緑 > lǜ; #7DD1

+緒 > xù; #7DD2

+緓 > yingl; #7DD3

+緔 > zhàng; #7DD4

+緖 > xù; #7DD6

+緗 > xiāng; #7DD7

+緘 > jiān; #7DD8

+緙 > kè; #7DD9

+線 > xiàn; #7DDA

+緛 > ruăn; #7DDB

+緜 > mián; #7DDC

+緝 > qì; #7DDD

+緞 > duàn; #7DDE

+緟 > zhòng; #7DDF

+締 > dì; #7DE0

+緡 > mín; #7DE1

+緢 > miáo; #7DE2

+緣 > yuán; #7DE3

+緤 > xiè; #7DE4

+緥 > băo; #7DE5

+緦 > sī; #7DE6

+緧 > qīu; #7DE7

+編 > biān; #7DE8

+緩 > huăn; #7DE9

+緪 > gēng; #7DEA

+緫 > cōng; #7DEB

+緬 > miăn; #7DEC

+緭 > wèi; #7DED

+緮 > fù; #7DEE

+緯 > wĕi; #7DEF

+緰 > yú; #7DF0

+緱 > gōu; #7DF1

+緲 > miăo; #7DF2

+緳 > xié; #7DF3

+練 > liàn; #7DF4

+緵 > zōng; #7DF5

+緶 > biàn; #7DF6

+緷 > yùn; #7DF7

+緸 > yīn; #7DF8

+緹 > tí; #7DF9

+緺 > guā; #7DFA

+緻 > zhì; #7DFB

+緼 > yūn; #7DFC

+緽 > chēng; #7DFD

+緾 > chán; #7DFE

+緿 > dài; #7DFF

+縀 > xiá; #7E00

+縁 > yuán; #7E01

+縂 > zŏng; #7E02

+縃 > xū; #7E03

+縆 > gēng; #7E06

+縈 > yíng; #7E08

+縉 > jìn; #7E09

+縊 > yì; #7E0A

+縋 > zhùi; #7E0B

+縌 > nì; #7E0C

+縍 > bāng; #7E0D

+縎 > gŭ; #7E0E

+縏 > pán; #7E0F

+縐 > zhòu; #7E10

+縑 > jiān; #7E11

+縒 > cŭo; #7E12

+縓 > quăn; #7E13

+縔 > shuăng; #7E14

+縕 > yūn; #7E15

+縖 > xiá; #7E16

+縗 > shuāi; #7E17

+縘 > xī; #7E18

+縙 > róng; #7E19

+縚 > tāo; #7E1A

+縛 > fú; #7E1B

+縜 > yún; #7E1C

+縝 > zhēn; #7E1D

+縞 > găo; #7E1E

+縟 > rù; #7E1F

+縠 > hú; #7E20

+縡 > zăi; #7E21

+縢 > téng; #7E22

+縣 > xiàn; #7E23

+縤 > sù; #7E24

+縥 > zhĕn; #7E25

+縦 > zòng; #7E26

+縧 > tāo; #7E27

+縩 > cài; #7E29

+縪 > bì; #7E2A

+縫 > féng; #7E2B

+縬 > cù; #7E2C

+縭 > lí; #7E2D

+縮 > sūo; #7E2E

+縯 > yĭn; #7E2F

+縰 > xĭ; #7E30

+縱 > zòng; #7E31

+縲 > léi; #7E32

+縳 > zhuàn; #7E33

+縴 > qiān; #7E34

+縵 > màn; #7E35

+縶 > zhí; #7E36

+縷 > lǚ; #7E37

+縸 > mò; #7E38

+縹 > piăo; #7E39

+縺 > lián; #7E3A

+縻 > mí; #7E3B

+縼 > xuàn; #7E3C

+總 > zŏng; #7E3D

+績 > jī; #7E3E

+縿 > shān; #7E3F

+繀 > sùi; #7E40

+繁 > fán; #7E41

+繂 > shuài; #7E42

+繃 > bēng; #7E43

+繄 > yī; #7E44

+繅 > sāo; #7E45

+繆 > móu; #7E46

+繇 > zhòu; #7E47

+繈 > qiăng; #7E48

+繉 > hún; #7E49

+繋 > xì; #7E4B

+繍 > xìu; #7E4D

+繎 > rán; #7E4E

+繏 > xuàn; #7E4F

+繐 > hùi; #7E50

+繑 > qiāo; #7E51

+繒 > zēng; #7E52

+繓 > zŭo; #7E53

+織 > zhī; #7E54

+繕 > shàn; #7E55

+繖 > săn; #7E56

+繗 > lín; #7E57

+繘 > yù; #7E58

+繙 > fān; #7E59

+繚 > liáo; #7E5A

+繛 > chùo; #7E5B

+繜 > zūn; #7E5C

+繝 > jiàn; #7E5D

+繞 > rào; #7E5E

+繟 > chăn; #7E5F

+繠 > rŭi; #7E60

+繡 > xìu; #7E61

+繢 > hùi; #7E62

+繣 > huà; #7E63

+繤 > zuăn; #7E64

+繥 > xī; #7E65

+繦 > qiăng; #7E66

+繨 > dá; #7E68

+繩 > shéng; #7E69

+繪 > hùi; #7E6A

+繫 > xì; #7E6B

+繬 > sè; #7E6C

+繭 > jiăn; #7E6D

+繮 > jiāng; #7E6E

+繯 > huán; #7E6F

+繰 > zăo; #7E70

+繱 > cōng; #7E71

+繲 > jiè; #7E72

+繳 > jiăo; #7E73

+繴 > bò; #7E74

+繵 > chán; #7E75

+繶 > yì; #7E76

+繷 > náo; #7E77

+繸 > sùi; #7E78

+繹 > yì; #7E79

+繺 > shăi; #7E7A

+繻 > xū; #7E7B

+繼 > jì; #7E7C

+繽 > bīn; #7E7D

+繾 > qiăn; #7E7E

+繿 > lán; #7E7F

+纀 > pú; #7E80

+纁 > xūn; #7E81

+纂 > zuăn; #7E82

+纃 > qí; #7E83

+纄 > péng; #7E84

+纅 > lì; #7E85

+纆 > mò; #7E86

+纇 > lèi; #7E87

+纈 > xié; #7E88

+纉 > zuăn; #7E89

+纊 > kuàng; #7E8A

+纋 > yōu; #7E8B

+續 > xù; #7E8C

+纍 > léi; #7E8D

+纎 > xiān; #7E8E

+纏 > chán; #7E8F

+纑 > lú; #7E91

+纒 > chán; #7E92

+纓 > yīng; #7E93

+纔 > cái; #7E94

+纕 > xiāng; #7E95

+纖 > xiān; #7E96

+纗 > zūi; #7E97

+纘 > zuăn; #7E98

+纙 > lùo; #7E99

+纚 > xĭ; #7E9A

+纛 > dào; #7E9B

+纜 > làn; #7E9C

+纝 > léi; #7E9D

+纞 > liàn; #7E9E

+纟 > sī; #7E9F

+纠 > jīu; #7EA0

+纡 > yū; #7EA1

+红 > hóng; #7EA2

+纣 > zhòu; #7EA3

+纤 > xiān; #7EA4

+纥 > hé; #7EA5

+约 > yuē; #7EA6

+级 > jí; #7EA7

+纨 > wán; #7EA8

+纩 > kuàng; #7EA9

+纪 > jì; #7EAA

+纫 > rèn; #7EAB

+纬 > wĕi; #7EAC

+纭 > yún; #7EAD

+纮 > hóng; #7EAE

+纯 > chún; #7EAF

+纰 > pí; #7EB0

+纱 > shā; #7EB1

+纲 > gāng; #7EB2

+纳 > nà; #7EB3

+纴 > rén; #7EB4

+纵 > zòng; #7EB5

+纶 > lún; #7EB6

+纷 > fēn; #7EB7

+纸 > zhĭ; #7EB8

+纹 > wén; #7EB9

+纺 > făng; #7EBA

+纻 > zhù; #7EBB

+纼 > yĭn; #7EBC

+纽 > nĭu; #7EBD

+纾 > shū; #7EBE

+线 > xiàn; #7EBF

+绀 > gàn; #7EC0

+绁 > xiè; #7EC1

+绂 > fú; #7EC2

+练 > liàn; #7EC3

+组 > zŭ; #7EC4

+绅 > shēn; #7EC5

+细 > xì; #7EC6

+织 > zhī; #7EC7

+终 > zhōng; #7EC8

+绉 > zhòu; #7EC9

+绊 > bàn; #7ECA

+绋 > fú; #7ECB

+绌 > zhúo; #7ECC

+绍 > shào; #7ECD

+绎 > yì; #7ECE

+经 > jīng; #7ECF

+绐 > dài; #7ED0

+绑 > băng; #7ED1

+绒 > róng; #7ED2

+结 > jié; #7ED3

+绔 > kù; #7ED4

+绕 > rào; #7ED5

+绖 > dié; #7ED6

+绗 > hèng; #7ED7

+绘 > hùi; #7ED8

+给 > gĕi; #7ED9

+绚 > xuàn; #7EDA

+绛 > jiàng; #7EDB

+络 > lùo; #7EDC

+绝 > jué; #7EDD

+绞 > jiăo; #7EDE

+统 > tŏng; #7EDF

+绠 > gĕng; #7EE0

+绡 > xiāo; #7EE1

+绢 > juàn; #7EE2

+绣 > xìu; #7EE3

+绤 > xì; #7EE4

+绥 > sūi; #7EE5

+绦 > tāo; #7EE6

+继 > jì; #7EE7

+绨 > tí; #7EE8

+绩 > jī; #7EE9

+绪 > xù; #7EEA

+绫 > líng; #7EEB

+续 > xù; #7EED

+绮 > qĭ; #7EEE

+绯 > fēi; #7EEF

+绰 > chùo; #7EF0

+绱 > zhăng; #7EF1

+绲 > gŭn; #7EF2

+绳 > shéng; #7EF3

+维 > wéi; #7EF4

+绵 > mián; #7EF5

+绶 > shòu; #7EF6

+绷 > bēng; #7EF7

+绸 > chóu; #7EF8

+绹 > táo; #7EF9

+绺 > lĭu; #7EFA

+绻 > quăn; #7EFB

+综 > zòng; #7EFC

+绽 > zhàn; #7EFD

+绾 > wăn; #7EFE

+绿 > lǜ; #7EFF

+缀 > zhùi; #7F00

+缁 > zī; #7F01

+缂 > kè; #7F02

+缃 > xiāng; #7F03

+缄 > jiān; #7F04

+缅 > miăn; #7F05

+缆 > làn; #7F06

+缇 > tí; #7F07

+缈 > miăo; #7F08

+缉 > qì; #7F09

+缊 > yūn; #7F0A

+缋 > hùi; #7F0B

+缌 > sī; #7F0C

+缍 > dŭo; #7F0D

+缎 > duàn; #7F0E

+缏 > biàn; #7F0F

+缐 > xiàn; #7F10

+缑 > gōu; #7F11

+缒 > zhùi; #7F12

+缓 > huăn; #7F13

+缔 > dì; #7F14

+缕 > lǚ; #7F15

+编 > biān; #7F16

+缗 > mín; #7F17

+缘 > yuán; #7F18

+缙 > jìn; #7F19

+缚 > fú; #7F1A

+缛 > rù; #7F1B

+缜 > zhēn; #7F1C

+缝 > féng; #7F1D

+缞 > shuāi; #7F1E

+缟 > găo; #7F1F

+缠 > chán; #7F20

+缡 > lí; #7F21

+缢 > yì; #7F22

+缣 > jiān; #7F23

+缤 > bīn; #7F24

+缥 > piăo; #7F25

+缦 > màn; #7F26

+缧 > léi; #7F27

+缨 > yīng; #7F28

+缩 > sūo; #7F29

+缪 > móu; #7F2A

+缫 > sāo; #7F2B

+缬 > xié; #7F2C

+缭 > liáo; #7F2D

+缮 > shàn; #7F2E

+缯 > zēng; #7F2F

+缰 > jiāng; #7F30

+缱 > qiăn; #7F31

+缲 > zăo; #7F32

+缳 > huán; #7F33

+缴 > jiăo; #7F34

+缵 > zuăn; #7F35

+缶 > fŏu; #7F36

+缷 > xiè; #7F37

+缸 > gāng; #7F38

+缹 > fŏu; #7F39

+缺 > quē; #7F3A

+缻 > fŏu; #7F3B

+缽 > bō; #7F3D

+缾 > píng; #7F3E

+缿 > hòu; #7F3F

+罁 > gāng; #7F41

+罂 > yīng; #7F42

+罃 > yīng; #7F43

+罄 > qìng; #7F44

+罅 > xià; #7F45

+罆 > guàn; #7F46

+罇 > zūn; #7F47

+罈 > tán; #7F48

+罊 > qì; #7F4A

+罋 > wèng; #7F4B

+罌 > yīng; #7F4C

+罍 > léi; #7F4D

+罎 > tán; #7F4E

+罏 > lú; #7F4F

+罐 > guàn; #7F50

+网 > wăng; #7F51

+罒 > wăng; #7F52

+罓 > gāng; #7F53

+罔 > wăng; #7F54

+罕 > hăn; #7F55

+罗 > lūo; #7F57

+罘 > fú; #7F58

+罙 > mí; #7F59

+罚 > fá; #7F5A

+罛 > gū; #7F5B

+罜 > zhŭ; #7F5C

+罝 > jū; #7F5D

+罞 > máo; #7F5E

+罟 > gŭ; #7F5F

+罠 > mín; #7F60

+罡 > gāng; #7F61

+罢 > bà; #7F62

+罣 > guà; #7F63

+罤 > tí; #7F64

+罥 > juàn; #7F65

+罦 > fū; #7F66

+罧 > lín; #7F67

+罨 > yăn; #7F68

+罩 > zhào; #7F69

+罪 > zùi; #7F6A

+罫 > guà; #7F6B

+罬 > zhúo; #7F6C

+罭 > yù; #7F6D

+置 > zhì; #7F6E

+罯 > ăn; #7F6F

+罰 > fá; #7F70

+罱 > năn; #7F71

+署 > shŭ; #7F72

+罳 > sī; #7F73

+罴 > pí; #7F74

+罵 > mà; #7F75

+罶 > lĭu; #7F76

+罷 > bà; #7F77

+罸 > fá; #7F78

+罹 > lí; #7F79

+罺 > chāo; #7F7A

+罻 > wèi; #7F7B

+罼 > bì; #7F7C

+罽 > jì; #7F7D

+罾 > zēng; #7F7E

+罿 > tóng; #7F7F

+羀 > lĭu; #7F80

+羁 > jī; #7F81

+羂 > juàn; #7F82

+羃 > mì; #7F83

+羄 > zhào; #7F84

+羅 > lúo; #7F85

+羆 > pí; #7F86

+羇 > jī; #7F87

+羈 > jī; #7F88

+羉 > luán; #7F89

+羊 > yáng; #7F8A

+羋 > miē; #7F8B

+羌 > qiāng; #7F8C

+羍 > tà; #7F8D

+美 > mĕi; #7F8E

+羏 > yáng; #7F8F

+羐 > yŏu; #7F90

+羑 > yŏu; #7F91

+羒 > fén; #7F92

+羓 > bā; #7F93

+羔 > gāo; #7F94

+羕 > yàng; #7F95

+羖 > gŭ; #7F96

+羗 > qiāng; #7F97

+羘 > zāng; #7F98

+羙 > gāo; #7F99

+羚 > líng; #7F9A

+羛 > yì; #7F9B

+羜 > zhù; #7F9C

+羝 > dī; #7F9D

+羞 > xīu; #7F9E

+羟 > qiān; #7F9F

+羠 > yí; #7FA0

+羡 > xiàn; #7FA1

+羢 > róng; #7FA2

+羣 > qún; #7FA3

+群 > qún; #7FA4

+羥 > qiān; #7FA5

+羦 > huán; #7FA6

+羧 > zūi; #7FA7

+羨 > xiàn; #7FA8

+義 > yì; #7FA9

+羫 > qiāng; #7FAB

+羬 > xián; #7FAC

+羭 > yú; #7FAD

+羮 > gēng; #7FAE

+羯 > jié; #7FAF

+羰 > tāng; #7FB0

+羱 > yuán; #7FB1

+羲 > xī; #7FB2

+羳 > fán; #7FB3

+羴 > shān; #7FB4

+羵 > fĕn; #7FB5

+羶 > shān; #7FB6

+羷 > liăn; #7FB7

+羸 > léi; #7FB8

+羹 > gēng; #7FB9

+羺 > nóu; #7FBA

+羻 > qiàng; #7FBB

+羼 > chàn; #7FBC

+羽 > yŭ; #7FBD

+羾 > gòng; #7FBE

+羿 > yì; #7FBF

+翀 > chóng; #7FC0

+翁 > wēng; #7FC1

+翂 > fēn; #7FC2

+翃 > hóng; #7FC3

+翄 > chì; #7FC4

+翅 > chì; #7FC5

+翆 > cùi; #7FC6

+翇 > fú; #7FC7

+翈 > xiá; #7FC8

+翉 > pĕn; #7FC9

+翊 > yì; #7FCA

+翋 > lā; #7FCB

+翌 > yì; #7FCC

+翍 > pī; #7FCD

+翎 > líng; #7FCE

+翏 > lìu; #7FCF

+翐 > zhì; #7FD0

+翑 > qú; #7FD1

+習 > xí; #7FD2

+翓 > xié; #7FD3

+翔 > xiáng; #7FD4

+翕 > xì; #7FD5

+翖 > xì; #7FD6

+翗 > qí; #7FD7

+翘 > qiáo; #7FD8

+翙 > hùi; #7FD9

+翚 > hūi; #7FDA

+翛 > xiāo; #7FDB

+翜 > sè; #7FDC

+翝 > hóng; #7FDD

+翞 > jiāng; #7FDE

+翟 > dí; #7FDF

+翠 > cùi; #7FE0

+翡 > fĕi; #7FE1

+翢 > tāo; #7FE2

+翣 > shà; #7FE3

+翤 > chì; #7FE4

+翥 > zhù; #7FE5

+翦 > jiăn; #7FE6

+翧 > xuān; #7FE7

+翨 > shì; #7FE8

+翩 > piān; #7FE9

+翪 > zōng; #7FEA

+翫 > wàn; #7FEB

+翬 > hūi; #7FEC

+翭 > hóu; #7FED

+翮 > hé; #7FEE

+翯 > hè; #7FEF

+翰 > hàn; #7FF0

+翱 > áo; #7FF1

+翲 > piāo; #7FF2

+翳 > yì; #7FF3

+翴 > lián; #7FF4

+翵 > qú; #7FF5

+翷 > lín; #7FF7

+翸 > pĕn; #7FF8

+翹 > qiáo; #7FF9

+翺 > áo; #7FFA

+翻 > fān; #7FFB

+翼 > yì; #7FFC

+翽 > hùi; #7FFD

+翾 > xuān; #7FFE

+翿 > dào; #7FFF

+耀 > yào; #8000

+老 > lăo; #8001

+考 > kăo; #8003

+耄 > mào; #8004

+者 > zhĕ; #8005

+耆 > qí; #8006

+耇 > gŏu; #8007

+耈 > gŏu; #8008

+耉 > gŏu; #8009

+耊 > diè; #800A

+耋 > diè; #800B

+而 > ér; #800C

+耍 > shuă; #800D

+耎 > ruăn; #800E

+耏 > ér; #800F

+耐 > nài; #8010

+耑 > zhuān; #8011

+耒 > lĕi; #8012

+耓 > tīng; #8013

+耔 > zĭ; #8014

+耕 > gēng; #8015

+耖 > chào; #8016

+耗 > hào; #8017

+耘 > yún; #8018

+耙 > pá; #8019

+耚 > pī; #801A

+耛 > chí; #801B

+耜 > sì; #801C

+耝 > chú; #801D

+耞 > jiā; #801E

+耟 > jù; #801F

+耠 > hé; #8020

+耡 > chú; #8021

+耢 > lào; #8022

+耣 > lŭn; #8023

+耤 > jí; #8024

+耥 > tăng; #8025

+耦 > ŏu; #8026

+耧 > lóu; #8027

+耨 > nòu; #8028

+耩 > gōu; #8029

+耪 > păng; #802A

+耫 > zé; #802B

+耬 > lóu; #802C

+耭 > jī; #802D

+耮 > lào; #802E

+耯 > hùo; #802F

+耰 > yōu; #8030

+耱 > mò; #8031

+耲 > huái; #8032

+耳 > ĕr; #8033

+耴 > zhé; #8034

+耵 > tīng; #8035

+耶 > yé; #8036

+耷 > dā; #8037

+耸 > sŏng; #8038

+耹 > qín; #8039

+耺 > yún; #803A

+耻 > chĭ; #803B

+耼 > dān; #803C

+耽 > dān; #803D

+耾 > hóng; #803E

+耿 > gĕng; #803F

+聀 > zhí; #8040

+聂 > niè; #8042

+聃 > dān; #8043

+聄 > zhĕn; #8044

+聅 > chè; #8045

+聆 > líng; #8046

+聇 > zhēng; #8047

+聈 > yŏu; #8048

+聉 > wā; #8049

+聊 > liáo; #804A

+聋 > lóng; #804B

+职 > zhí; #804C

+聍 > níng; #804D

+聎 > tiāo; #804E

+聏 > ér; #804F

+聐 > yà; #8050

+聑 > dié; #8051

+聒 > guā; #8052

+联 > lián; #8054

+聕 > hào; #8055

+聖 > shèng; #8056

+聗 > liè; #8057

+聘 > pìn; #8058

+聙 > jīng; #8059

+聚 > jù; #805A

+聛 > bì; #805B

+聜 > dĭ; #805C

+聝 > gúo; #805D

+聞 > wén; #805E

+聟 > xù; #805F

+聠 > píng; #8060

+聡 > cōng; #8061

+聤 > tíng; #8064

+聥 > yŭ; #8065

+聦 > cōng; #8066

+聧 > kúi; #8067

+聩 > kùi; #8069

+聪 > cōng; #806A

+聫 > lián; #806B

+聬 > wĕng; #806C

+聭 > kùi; #806D

+聮 > lián; #806E

+聯 > lián; #806F

+聰 > cōng; #8070

+聱 > áo; #8071

+聲 > shēng; #8072

+聳 > sŏng; #8073

+聴 > tīng; #8074

+聵 > kùi; #8075

+聶 > niè; #8076

+職 > zhí; #8077

+聸 > dān; #8078

+聹 > níng; #8079

+聺 > qie; #807A

+聻 > jī; #807B

+聼 > tīng; #807C

+聽 > tīng; #807D

+聾 > lóng; #807E

+聿 > yù; #807F

+肀 > yù; #8080

+肁 > zhào; #8081

+肂 > sì; #8082

+肃 > sù; #8083

+肄 > yì; #8084

+肅 > sù; #8085

+肆 > sì; #8086

+肇 > zhào; #8087

+肈 > zhào; #8088

+肉 > ròu; #8089

+肊 > yì; #808A

+肋 > lè; #808B

+肌 > jī; #808C

+肍 > qíu; #808D

+肎 > kĕn; #808E

+肏 > cào; #808F

+肐 > gē; #8090

+肑 > dì; #8091

+肒 > huán; #8092

+肓 > huāng; #8093

+肔 > yĭ; #8094

+肕 > rèn; #8095

+肖 > xiào; #8096

+肗 > rŭ; #8097

+肘 > zhŏu; #8098

+肙 > yuān; #8099

+肚 > dù; #809A

+肛 > gāng; #809B

+肜 > róng; #809C

+肝 > gān; #809D

+肞 > chā; #809E

+肟 > wò; #809F

+肠 > cháng; #80A0

+股 > gŭ; #80A1

+肢 > zhī; #80A2

+肣 > hán; #80A3

+肤 > fū; #80A4

+肥 > féi; #80A5

+肦 > fén; #80A6

+肧 > pēi; #80A7

+肨 > pàng; #80A8

+肩 > jiān; #80A9

+肪 > fáng; #80AA

+肫 > zhūn; #80AB

+肬 > yóu; #80AC

+肭 > nà; #80AD

+肮 > háng; #80AE

+肯 > kĕn; #80AF

+肰 > rán; #80B0

+肱 > gōng; #80B1

+育 > yù; #80B2

+肳 > wĕn; #80B3

+肴 > yáo; #80B4

+肵 > jìn; #80B5

+肶 > pí; #80B6

+肷 > qiān; #80B7

+肸 > xì; #80B8

+肹 > xī; #80B9

+肺 > fèi; #80BA

+肻 > kĕn; #80BB

+肼 > jĭng; #80BC

+肽 > tài; #80BD

+肾 > shèn; #80BE

+肿 > zhŏng; #80BF

+胀 > zhàng; #80C0

+胁 > xié; #80C1

+胂 > shēn; #80C2

+胃 > wèi; #80C3

+胄 > zhòu; #80C4

+胅 > dié; #80C5

+胆 > dăn; #80C6

+胇 > fèi; #80C7

+胈 > bá; #80C8

+胉 > bó; #80C9

+胊 > qú; #80CA

+胋 > tián; #80CB

+背 > bèi; #80CC

+胍 > guā; #80CD

+胎 > tāi; #80CE

+胏 > zĭ; #80CF

+胐 > kū; #80D0

+胑 > zhī; #80D1

+胒 > nì; #80D2

+胓 > píng; #80D3

+胔 > zì; #80D4

+胕 > fù; #80D5

+胖 > pàng; #80D6

+胗 > zhēn; #80D7

+胘 > xián; #80D8

+胙 > zùo; #80D9

+胚 > pēi; #80DA

+胛 > jiă; #80DB

+胜 > shèng; #80DC

+胝 > zhī; #80DD

+胞 > bāo; #80DE

+胟 > mŭ; #80DF

+胠 > qū; #80E0

+胡 > hú; #80E1

+胢 > kē; #80E2

+胣 > yĭ; #80E3

+胤 > yìn; #80E4

+胥 > xū; #80E5

+胦 > yāng; #80E6

+胧 > lóng; #80E7

+胨 > dòng; #80E8

+胩 > kă; #80E9

+胪 > lú; #80EA

+胫 > jìng; #80EB

+胬 > nŭ; #80EC

+胭 > yān; #80ED

+胮 > páng; #80EE

+胯 > kuà; #80EF

+胰 > yí; #80F0

+胱 > guāng; #80F1

+胲 > gāi; #80F2

+胳 > gē; #80F3

+胴 > dòng; #80F4

+胵 > zhì; #80F5

+胶 > xiáo; #80F6

+胷 > xīong; #80F7

+胸 > xīong; #80F8

+胹 > ér; #80F9

+胺 > è; #80FA

+胻 > xíng; #80FB

+胼 > pián; #80FC

+能 > néng; #80FD

+胾 > zì; #80FE

+胿 > gui; #80FF

+脀 > chéng; #8100

+脁 > tiào; #8101

+脂 > zhī; #8102

+脃 > cùi; #8103

+脄 > méi; #8104

+脅 > xié; #8105

+脆 > cùi; #8106

+脇 > xié; #8107

+脈 > mò; #8108

+脉 > mài; #8109

+脊 > jí; #810A

+脍 > kuài; #810D

+脎 > sà; #810E

+脏 > zāng; #810F

+脐 > qí; #8110

+脑 > năo; #8111

+脒 > mĭ; #8112

+脓 > nóng; #8113

+脔 > luán; #8114

+脕 > wăn; #8115

+脖 > bó; #8116

+脗 > wĕn; #8117

+脘 > guăn; #8118

+脙 > qíu; #8119

+脚 > jiăo; #811A

+脛 > jìng; #811B

+脜 > róu; #811C

+脝 > hēng; #811D

+脞 > cŭo; #811E

+脟 > liè; #811F

+脠 > shān; #8120

+脡 > tĭng; #8121

+脢 > méi; #8122

+脣 > chún; #8123

+脤 > shèn; #8124

+脥 > xié; #8125

+脦 > de; #8126

+脧 > zūi; #8127

+脨 > cù; #8128

+脩 > xīu; #8129

+脪 > xìn; #812A

+脫 > tūo; #812B

+脬 > pāo; #812C

+脭 > chéng; #812D

+脮 > nĕi; #812E

+脯 > fŭ; #812F

+脰 > dòu; #8130

+脱 > tūo; #8131

+脲 > niào; #8132

+脴 > pĭ; #8134

+脵 > gŭ; #8135

+脶 > guā; #8136

+脷 > lì; #8137

+脸 > liăn; #8138

+脹 > zhàng; #8139

+脺 > cùi; #813A

+脻 > jié; #813B

+脼 > liăng; #813C

+脽 > zhōu; #813D

+脾 > pí; #813E

+脿 > biāo; #813F

+腀 > lún; #8140

+腁 > pián; #8141

+腂 > gùo; #8142

+腃 > kùi; #8143

+腄 > chúi; #8144

+腅 > dàn; #8145

+腆 > tiăn; #8146

+腇 > nĕi; #8147

+腈 > jīng; #8148

+腉 > jiē; #8149

+腊 > là; #814A

+腋 > yì; #814B

+腌 > ān; #814C

+腍 > rĕn; #814D

+腎 > shèn; #814E

+腏 > chùo; #814F

+腐 > fŭ; #8150

+腑 > fŭ; #8151

+腒 > jū; #8152

+腓 > féi; #8153

+腔 > qiāng; #8154

+腕 > wàn; #8155

+腖 > dòng; #8156

+腗 > pí; #8157

+腘 > gúo; #8158

+腙 > zōng; #8159

+腚 > dìng; #815A

+腛 > wū; #815B

+腜 > méi; #815C

+腝 > ruăn; #815D

+腞 > zhuàn; #815E

+腟 > zhì; #815F

+腠 > còu; #8160

+腡 > guā; #8161

+腢 > ŏu; #8162

+腣 > dì; #8163

+腤 > ān; #8164

+腥 > xīng; #8165

+腦 > năo; #8166

+腧 > yú; #8167

+腨 > chuăn; #8168

+腩 > năn; #8169

+腪 > yùn; #816A

+腫 > zhŏng; #816B

+腬 > róu; #816C

+腭 > è; #816D

+腮 > sāi; #816E

+腯 > tú; #816F

+腰 > yāo; #8170

+腱 > jiàn; #8171

+腲 > wĕi; #8172

+腳 > jiăo; #8173

+腴 > yú; #8174

+腵 > jiā; #8175

+腶 > duàn; #8176

+腷 > bì; #8177

+腸 > cháng; #8178

+腹 > fù; #8179

+腺 > xiàn; #817A

+腻 > nì; #817B

+腼 > miăn; #817C

+腽 > wà; #817D

+腾 > téng; #817E

+腿 > tŭi; #817F

+膀 > băng; #8180

+膁 > qiān; #8181

+膂 > lǚ; #8182

+膃 > wà; #8183

+膄 > sòu; #8184

+膅 > táng; #8185

+膆 > sù; #8186

+膇 > zhùi; #8187

+膈 > gé; #8188

+膉 > yì; #8189

+膊 > bó; #818A

+膋 > liáo; #818B

+膌 > jí; #818C

+膍 > pí; #818D

+膎 > xié; #818E

+膏 > gāo; #818F

+膐 > lǚ; #8190

+膑 > bìn; #8191

+膒 > ou; #8192

+膓 > cháng; #8193

+膔 > lù; #8194

+膕 > gúo; #8195

+膖 > pāng; #8196

+膗 > chuái; #8197

+膘 > piăo; #8198

+膙 > jiăng; #8199

+膚 > fū; #819A

+膛 > táng; #819B

+膜 > mò; #819C

+膝 > xī; #819D

+膞 > zhuān; #819E

+膟 > lǜ; #819F

+膠 > jiāo; #81A0

+膡 > yìng; #81A1

+膢 > lǘ; #81A2

+膣 > zhì; #81A3

+膥 > chūn; #81A5

+膦 > liăn; #81A6

+膧 > tóng; #81A7

+膨 > péng; #81A8

+膩 > nì; #81A9

+膪 > zhà; #81AA

+膫 > liáo; #81AB

+膬 > cùi; #81AC

+膭 > gūi; #81AD

+膮 > xiāo; #81AE

+膯 > tēng; #81AF

+膰 > fán; #81B0

+膱 > zhí; #81B1

+膲 > jiāo; #81B2

+膳 > shàn; #81B3

+膴 > wú; #81B4

+膵 > cùi; #81B5

+膶 > rùn; #81B6

+膷 > xiāng; #81B7

+膸 > sŭi; #81B8

+膹 > fèn; #81B9

+膺 > yīng; #81BA

+膻 > tăn; #81BB

+膼 > zhuā; #81BC

+膽 > dăn; #81BD

+膾 > kuài; #81BE

+膿 > nóng; #81BF

+臀 > tún; #81C0

+臁 > lián; #81C1

+臂 > bì; #81C2

+臃 > yŏng; #81C3

+臄 > jué; #81C4

+臅 > chù; #81C5

+臆 > yì; #81C6

+臇 > juăn; #81C7

+臈 > là; #81C8

+臉 > liăn; #81C9

+臊 > sāo; #81CA

+臋 > tún; #81CB

+臌 > gŭ; #81CC

+臍 > qí; #81CD

+臎 > cùi; #81CE

+臏 > bìn; #81CF

+臐 > xūn; #81D0

+臑 > rú; #81D1

+臒 > hùo; #81D2

+臓 > zàng; #81D3

+臔 > xiàn; #81D4

+臕 > biāo; #81D5

+臖 > xìng; #81D6

+臗 > kuān; #81D7

+臘 > là; #81D8

+臙 > yān; #81D9

+臚 > lú; #81DA

+臛 > hùo; #81DB

+臜 > zāng; #81DC

+臝 > lŭo; #81DD

+臞 > qú; #81DE

+臟 > zàng; #81DF

+臠 > luán; #81E0

+臡 > ní; #81E1

+臢 > zāng; #81E2

+臣 > chén; #81E3

+臤 > qiān; #81E4

+臥 > wò; #81E5

+臦 > guàng; #81E6

+臧 > záng; #81E7

+臨 > lín; #81E8

+臩 > guàng; #81E9

+自 > zì; #81EA

+臫 > jiăo; #81EB

+臬 > niè; #81EC

+臭 > chòu; #81ED

+臮 > jì; #81EE

+臯 > gāo; #81EF

+臰 > chòu; #81F0

+臱 > mián; #81F1

+臲 > niè; #81F2

+至 > zhì; #81F3

+致 > zhì; #81F4

+臵 > gé; #81F5

+臶 > jiàn; #81F6

+臷 > dié; #81F7

+臸 > zhì; #81F8

+臹 > xīu; #81F9

+臺 > tái; #81FA

+臻 > zhēn; #81FB

+臼 > jìu; #81FC

+臽 > xiàn; #81FD

+臾 > yú; #81FE

+臿 > chā; #81FF

+舀 > yăo; #8200

+舁 > yú; #8201

+舂 > chōng; #8202

+舃 > xì; #8203

+舄 > xì; #8204

+舅 > jìu; #8205

+舆 > yú; #8206

+與 > yŭ; #8207

+興 > xīng; #8208

+舉 > jŭ; #8209

+舊 > jìu; #820A

+舋 > xìn; #820B

+舌 > shé; #820C

+舍 > shè; #820D

+舏 > jĭu; #820F

+舐 > shì; #8210

+舑 > tān; #8211

+舒 > shū; #8212

+舓 > shì; #8213

+舔 > tiăn; #8214

+舕 > dàn; #8215

+舖 > pù; #8216

+舗 > pù; #8217

+舘 > guăn; #8218

+舙 > huà; #8219

+舚 > tān; #821A

+舛 > chuăn; #821B

+舜 > shùn; #821C

+舝 > xiá; #821D

+舞 > wŭ; #821E

+舟 > zhōu; #821F

+舠 > dāo; #8220

+舡 > gāng; #8221

+舢 > shān; #8222

+舣 > yĭ; #8223

+舥 > pā; #8225

+舦 > tài; #8226

+舧 > fán; #8227

+舨 > băn; #8228

+舩 > chuán; #8229

+航 > háng; #822A

+舫 > făng; #822B

+般 > bān; #822C

+舭 > què; #822D

+舯 > zhōng; #822F

+舰 > jiàn; #8230

+舱 > cāng; #8231

+舲 > líng; #8232

+舳 > zhú; #8233

+舴 > zé; #8234

+舵 > dùo; #8235

+舶 > bó; #8236

+舷 > xián; #8237

+舸 > gĕ; #8238

+船 > chuán; #8239

+舺 > jiá; #823A

+舻 > lŭ; #823B

+舼 > hóng; #823C

+舽 > páng; #823D

+舾 > xī; #823E

+艀 > fú; #8240

+艁 > zào; #8241

+艂 > féng; #8242

+艃 > lí; #8243

+艄 > shāo; #8244

+艅 > yú; #8245

+艆 > láng; #8246

+艇 > tĭng; #8247

+艉 > wĕi; #8249

+艊 > bó; #824A

+艋 > mĕng; #824B

+艌 > niàn; #824C

+艍 > jū; #824D

+艎 > huáng; #824E

+艏 > shŏu; #824F

+艐 > zōng; #8250

+艑 > biàn; #8251

+艒 > mào; #8252

+艓 > dié; #8253

+艕 > bàng; #8255

+艖 > chā; #8256

+艗 > yì; #8257

+艘 > sāo; #8258

+艙 > cāng; #8259

+艚 > cáo; #825A

+艛 > lóu; #825B

+艜 > dài; #825C

+艞 > yào; #825E

+艟 > tóng; #825F

+艡 > dāng; #8261

+艢 > tán; #8262

+艣 > lŭ; #8263

+艤 > yĭ; #8264

+艥 > jiè; #8265

+艦 > jiàn; #8266

+艧 > hùo; #8267

+艨 > méng; #8268

+艩 > qí; #8269

+艪 > lŭ; #826A

+艫 > lú; #826B

+艬 > chán; #826C

+艭 > shuāng; #826D

+艮 > gèn; #826E

+良 > liáng; #826F

+艰 > jiān; #8270

+艱 > jiān; #8271

+色 > sè; #8272

+艳 > yàn; #8273

+艴 > fú; #8274

+艵 > píng; #8275

+艶 > yàn; #8276

+艷 > yàn; #8277

+艸 > căo; #8278

+艹 > căo' 'zì' 'tóu; #8279

+艺 > yì; #827A

+艻 > lè; #827B

+艼 > tīng; #827C

+艽 > qíu; #827D

+艾 > ài; #827E

+艿 > năi; #827F

+芀 > tiáo; #8280

+芁 > jiāo; #8281

+节 > jié; #8282

+芃 > péng; #8283

+芄 > wán; #8284

+芅 > yì; #8285

+芆 > chāi; #8286

+芇 > mián; #8287

+芈 > miē; #8288

+芉 > gān; #8289

+芊 > qiān; #828A

+芋 > yù; #828B

+芌 > yù; #828C

+芍 > shùo; #828D

+芎 > qīong; #828E

+芏 > tŭ; #828F

+芐 > xià; #8290

+芑 > qĭ; #8291

+芒 > máng; #8292

+芓 > zĭ; #8293

+芔 > hŭi; #8294

+芕 > sūi; #8295

+芖 > zhì; #8296

+芗 > xiāng; #8297

+芘 > bī; #8298

+芙 > fú; #8299

+芚 > tún; #829A

+芛 > wĕi; #829B

+芜 > wú; #829C

+芝 > zhī; #829D

+芞 > qĭ; #829E

+芟 > shān; #829F

+芠 > wén; #82A0

+芡 > qiàn; #82A1

+芢 > rén; #82A2

+芣 > fŏu; #82A3

+芤 > kōu; #82A4

+芥 > jiè; #82A5

+芦 > lú; #82A6

+芧 > xù; #82A7

+芨 > jí; #82A8

+芩 > qín; #82A9

+芪 > qí; #82AA

+芫 > yuán; #82AB

+芬 > fēn; #82AC

+芭 > bā; #82AD

+芮 > rùi; #82AE

+芯 > xīn; #82AF

+芰 > jì; #82B0

+花 > huā; #82B1

+芲 > huā; #82B2

+芳 > fāng; #82B3

+芴 > wù; #82B4

+芵 > jué; #82B5

+芶 > gōu; #82B6

+芷 > zhĭ; #82B7

+芸 > yún; #82B8

+芹 > qín; #82B9

+芺 > ăo; #82BA

+芻 > chú; #82BB

+芼 > mào; #82BC

+芽 > yá; #82BD

+芾 > fèi; #82BE

+芿 > rèng; #82BF

+苀 > háng; #82C0

+苁 > cōng; #82C1

+苂 > yín; #82C2

+苃 > yŏu; #82C3

+苄 > biàn; #82C4

+苅 > yì; #82C5

+苇 > wĕi; #82C7

+苈 > lì; #82C8

+苉 > pĭ; #82C9

+苊 > è; #82CA

+苋 > xiàn; #82CB

+苌 > cháng; #82CC

+苍 > cāng; #82CD

+苎 > méng; #82CE

+苏 > sū; #82CF

+苐 > yí; #82D0

+苑 > yuàn; #82D1

+苒 > răn; #82D2

+苓 > líng; #82D3

+苔 > tái; #82D4

+苕 > tiáo; #82D5

+苖 > dĭ; #82D6

+苗 > miáo; #82D7

+苘 > qĭong; #82D8

+苙 > lì; #82D9

+苚 > yòng; #82DA

+苛 > kē; #82DB

+苜 > mù; #82DC

+苝 > pèi; #82DD

+苞 > bāo; #82DE

+苟 > gŏu; #82DF

+苠 > mín; #82E0

+苡 > yĭ; #82E1

+苢 > yĭ; #82E2

+苣 > jù; #82E3

+苤 > pĭ; #82E4

+若 > rùo; #82E5

+苦 > kŭ; #82E6

+苧 > zhù; #82E7

+苨 > nĭ; #82E8

+苩 > bó; #82E9

+苪 > bĭng; #82EA

+苫 > shān; #82EB

+苬 > qíu; #82EC

+苭 > yăo; #82ED

+苮 > xiān; #82EE

+苯 > bĕn; #82EF

+苰 > hóng; #82F0

+英 > yīng; #82F1

+苲 > zhă; #82F2

+苳 > dōng; #82F3

+苴 > jū; #82F4

+苵 > dié; #82F5

+苶 > nié; #82F6

+苷 > gān; #82F7

+苸 > hū; #82F8

+苹 > píng; #82F9

+苺 > méi; #82FA

+苻 > fú; #82FB

+苼 > shēng; #82FC

+苽 > gū; #82FD

+苾 > bì; #82FE

+苿 > wèi; #82FF

+茀 > fú; #8300

+茁 > zhúo; #8301

+茂 > mào; #8302

+范 > fàn; #8303

+茄 > qié; #8304

+茅 > máo; #8305

+茆 > măo; #8306

+茇 > bá; #8307

+茈 > zĭ; #8308

+茉 > mò; #8309

+茊 > zī; #830A

+茋 > dĭ; #830B

+茌 > chí; #830C

+茍 > jì; #830D

+茎 > jīng; #830E

+茏 > lóng; #830F

+茑 > niăo; #8311

+茓 > xué; #8313

+茔 > yíng; #8314

+茕 > qíong; #8315

+茖 > gé; #8316

+茗 > mĭng; #8317

+茘 > lì; #8318

+茙 > róng; #8319

+茚 > yìn; #831A

+茛 > gèn; #831B

+茜 > qiàn; #831C

+茝 > chăi; #831D

+茞 > chén; #831E

+茟 > yù; #831F

+茠 > xīu; #8320

+茡 > zì; #8321

+茢 > liè; #8322

+茣 > wú; #8323

+茤 > jì; #8324

+茥 > kūi; #8325

+茦 > cè; #8326

+茧 > chóng; #8327

+茨 > cí; #8328

+茩 > gŏu; #8329

+茪 > guāng; #832A

+茫 > máng; #832B

+茬 > chí; #832C

+茭 > jiāo; #832D

+茮 > jiāo; #832E

+茯 > fú; #832F

+茰 > yú; #8330

+茱 > zhū; #8331

+茲 > zī; #8332

+茳 > jiāng; #8333

+茴 > húi; #8334

+茵 > yīn; #8335

+茶 > chá; #8336

+茷 > fá; #8337

+茸 > róng; #8338

+茹 > rú; #8339

+茺 > chōng; #833A

+茻 > măng; #833B

+茼 > tóng; #833C

+茽 > zhòng; #833D

+茿 > zhú; #833F

+荀 > xún; #8340

+荁 > huán; #8341

+荂 > kuā; #8342

+荃 > quán; #8343

+荄 > gāi; #8344

+荅 > dā; #8345

+荆 > jīng; #8346

+荇 > xìng; #8347

+荈 > quàn; #8348

+草 > căo; #8349

+荊 > jīng; #834A

+荋 > ér; #834B

+荌 > àn; #834C

+荍 > shōu; #834D

+荎 > chí; #834E

+荏 > rĕn; #834F

+荐 > jiàn; #8350

+荑 > tí; #8351

+荒 > huāng; #8352

+荓 > píng; #8353

+荔 > lì; #8354

+荕 > jīn; #8355

+荖 > lăo; #8356

+荗 > shù; #8357

+荘 > zhuāng; #8358

+荙 > dá; #8359

+荚 > jiá; #835A

+荛 > ráo; #835B

+荜 > bì; #835C

+荝 > zé; #835D

+荞 > qiáo; #835E

+荟 > hùi; #835F

+荠 > qí; #8360

+荡 > dàng; #8361

+荣 > róng; #8363

+荤 > hūn; #8364

+荥 > yíng; #8365

+荦 > lùo; #8366

+荧 > yíng; #8367

+荨 > xún; #8368

+荩 > jìn; #8369

+荪 > sūn; #836A

+荫 > yìn; #836B

+荬 > măi; #836C

+荭 > hóng; #836D

+荮 > zhòu; #836E

+药 > yào; #836F

+荰 > dù; #8370

+荱 > wĕi; #8371

+荲 > chù; #8372

+荳 > dòu; #8373

+荴 > fū; #8374

+荵 > rĕn; #8375

+荶 > yín; #8376

+荷 > hé; #8377

+荸 > bí; #8378

+荹 > bù; #8379

+荺 > yún; #837A

+荻 > dí; #837B

+荼 > tú; #837C

+荽 > sūi; #837D

+荾 > sūi; #837E

+荿 > chéng; #837F

+莀 > chén; #8380

+莁 > wú; #8381

+莂 > bié; #8382

+莃 > xī; #8383

+莄 > gĕng; #8384

+莅 > lì; #8385

+莆 > fŭ; #8386

+莇 > zhù; #8387

+莈 > mò; #8388

+莉 > lì; #8389

+莊 > zhuāng; #838A

+莋 > jí; #838B

+莌 > dúo; #838C

+莍 > qíu; #838D

+莎 > shā; #838E

+莏 > sūo; #838F

+莐 > chén; #8390

+莑 > fēng; #8391

+莒 > jŭ; #8392

+莓 > méi; #8393

+莔 > méng; #8394

+莕 > xìng; #8395

+莖 > jīng; #8396

+莗 > chē; #8397

+莘 > xīn; #8398

+莙 > jūn; #8399

+莚 > yán; #839A

+莛 > tíng; #839B

+莜 > diào; #839C

+莝 > cùo; #839D

+莞 > wăn; #839E

+莟 > hàn; #839F

+莠 > yŏu; #83A0

+莡 > cùo; #83A1

+莢 > jiá; #83A2

+莣 > wáng; #83A3

+莤 > yóu; #83A4

+莥 > nĭu; #83A5

+莦 > shāo; #83A6

+莧 > xiàn; #83A7

+莨 > láng; #83A8

+莩 > fú; #83A9

+莪 > é; #83AA

+莫 > mò; #83AB

+莬 > wèn; #83AC

+莭 > jié; #83AD

+莮 > nán; #83AE

+莯 > mù; #83AF

+莰 > kăn; #83B0

+莱 > lái; #83B1

+莲 > lián; #83B2

+莳 > shí; #83B3

+莴 > wō; #83B4

+莶 > liăn; #83B6

+获 > hùo; #83B7

+莸 > yóu; #83B8

+莹 > yíng; #83B9

+莺 > yīng; #83BA

+莼 > chún; #83BC

+莽 > măng; #83BD

+莾 > măng; #83BE

+莿 > cì; #83BF

+菀 > wăn; #83C0

+菁 > jīng; #83C1

+菂 > dī; #83C2

+菃 > qú; #83C3

+菄 > dōng; #83C4

+菅 > jiān; #83C5

+菆 > zōu; #83C6

+菇 > gū; #83C7

+菈 > lā; #83C8

+菉 > lù; #83C9

+菊 > jú; #83CA

+菋 > wèi; #83CB

+菌 > jùn; #83CC

+菍 > niè; #83CD

+菎 > kūn; #83CE

+菏 > hé; #83CF

+菐 > pú; #83D0

+菑 > zī; #83D1

+菒 > găo; #83D2

+菓 > gŭo; #83D3

+菔 > fú; #83D4

+菕 > lún; #83D5

+菖 > chāng; #83D6

+菗 > chóu; #83D7

+菘 > sōng; #83D8

+菙 > chúi; #83D9

+菚 > zhàn; #83DA

+菛 > mén; #83DB

+菜 > cài; #83DC

+菝 > bá; #83DD

+菞 > lí; #83DE

+菟 > tù; #83DF

+菠 > bō; #83E0

+菡 > hàn; #83E1

+菢 > bào; #83E2

+菣 > qìn; #83E3

+菤 > juăn; #83E4

+菥 > xī; #83E5

+菦 > qín; #83E6

+菧 > dĭ; #83E7

+菨 > jiē; #83E8

+菩 > pú; #83E9

+菪 > dàng; #83EA

+菫 > jĭn; #83EB

+菬 > zhăo; #83EC

+菭 > tái; #83ED

+菮 > gēng; #83EE

+華 > huá; #83EF

+菰 > gū; #83F0

+菱 > líng; #83F1

+菲 > fēi; #83F2

+菳 > jīn; #83F3

+菴 > ān; #83F4

+菵 > wăng; #83F5

+菶 > bĕng; #83F6

+菷 > zhŏu; #83F7

+菸 > yān; #83F8

+菹 > jū; #83F9

+菺 > jiān; #83FA

+菻 > lĭn; #83FB

+菼 > tăn; #83FC

+菽 > shú; #83FD

+菾 > tián; #83FE

+菿 > dào; #83FF

+萀 > hŭ; #8400

+萁 > qí; #8401

+萂 > hé; #8402

+萃 > cùi; #8403

+萄 > táo; #8404

+萅 > chūn; #8405

+萆 > bēi; #8406

+萇 > cháng; #8407

+萈 > huán; #8408

+萉 > féi; #8409

+萊 > lái; #840A

+萋 > qī; #840B

+萌 > méng; #840C

+萍 > píng; #840D

+萎 > wēi; #840E

+萏 > dàn; #840F

+萐 > shà; #8410

+萑 > huán; #8411

+萒 > yăn; #8412

+萓 > yí; #8413

+萔 > tiáo; #8414

+萕 > qí; #8415

+萖 > wăn; #8416

+萗 > cè; #8417

+萘 > nài; #8418

+萚 > tùo; #841A

+萛 > jīu; #841B

+萜 > tiē; #841C

+萝 > lúo; #841D

+萠 > méng; #8420

+萤 > yíng; #8424

+营 > yíng; #8425

+萦 > yíng; #8426

+萧 > xiāo; #8427

+萨 > sà; #8428

+萩 > qīu; #8429

+萪 > kē; #842A

+萫 > xiàng; #842B

+萬 > wàn; #842C

+萭 > yŭ; #842D

+萮 > yù; #842E

+萯 > fù; #842F

+萰 > liàn; #8430

+萱 > xuān; #8431

+萲 > yuán; #8432

+萳 > nán; #8433

+萴 > zé; #8434

+萵 > wō; #8435

+萶 > chŭn; #8436

+萷 > xiāo; #8437

+萸 > yú; #8438

+萹 > piān; #8439

+萺 > mào; #843A

+萻 > ān; #843B

+萼 > è; #843C

+落 > lùo; #843D

+萾 > yíng; #843E

+萿 > húo; #843F

+葀 > guā; #8440

+葁 > jiāng; #8441

+葂 > miăn; #8442

+葃 > zúo; #8443

+葄 > zùo; #8444

+葅 > jū; #8445

+葆 > băo; #8446

+葇 > róu; #8447

+葈 > xĭ; #8448

+葉 > xié; #8449

+葊 > ān; #844A

+葋 > qú; #844B

+葌 > jiān; #844C

+葍 > fú; #844D

+葎 > lǜ; #844E

+葏 > jīng; #844F

+葐 > pén; #8450

+葑 > fēng; #8451

+葒 > hóng; #8452

+葓 > hóng; #8453

+葔 > hóu; #8454

+葕 > yán; #8455

+葖 > tú; #8456

+著 > zhù; #8457

+葘 > zī; #8458

+葙 > xiāng; #8459

+葚 > shèn; #845A

+葛 > gĕ; #845B

+葜 > jié; #845C

+葝 > jìng; #845D

+葞 > mĭ; #845E

+葟 > huáng; #845F

+葠 > shēn; #8460

+葡 > pú; #8461

+葢 > gài; #8462

+董 > dŏng; #8463

+葤 > zhòu; #8464

+葥 > qián; #8465

+葦 > wĕi; #8466

+葧 > bó; #8467

+葨 > wēi; #8468

+葩 > pā; #8469

+葪 > jì; #846A

+葫 > hú; #846B

+葬 > zàng; #846C

+葭 > jiā; #846D

+葮 > duàn; #846E

+葯 > yào; #846F

+葰 > jùn; #8470

+葱 > cōng; #8471

+葲 > quán; #8472

+葳 > wēi; #8473

+葴 > xián; #8474

+葵 > kúi; #8475

+葶 > tíng; #8476

+葷 > hūn; #8477

+葸 > xĭ; #8478

+葹 > shī; #8479

+葺 > qì; #847A

+葻 > lán; #847B

+葼 > zōng; #847C

+葽 > yāo; #847D

+葾 > yuān; #847E

+葿 > méi; #847F

+蒀 > yūn; #8480

+蒁 > shù; #8481

+蒂 > dì; #8482

+蒃 > zhuàn; #8483

+蒄 > guān; #8484

+蒆 > xuē; #8486

+蒇 > chăn; #8487

+蒈 > kăi; #8488

+蒉 > kùi; #8489

+蒋 > jiăng; #848B

+蒌 > lóu; #848C

+蒍 > wéi; #848D

+蒎 > pài; #848E

+蒐 > sōu; #8490

+蒑 > yīn; #8491

+蒒 > shī; #8492

+蒓 > chún; #8493

+蒔 > shí; #8494

+蒕 > yūn; #8495

+蒖 > zhēn; #8496

+蒗 > làng; #8497

+蒘 > nú; #8498

+蒙 > méng; #8499

+蒚 > hé; #849A

+蒛 > quē; #849B

+蒜 > suàn; #849C

+蒝 > yuán; #849D

+蒞 > lì; #849E

+蒟 > jŭ; #849F

+蒠 > xí; #84A0

+蒡 > páng; #84A1

+蒢 > chú; #84A2

+蒣 > xú; #84A3

+蒤 > tú; #84A4

+蒥 > líu; #84A5

+蒦 > wò; #84A6

+蒧 > zhēn; #84A7

+蒨 > qiàn; #84A8

+蒩 > zū; #84A9

+蒪 > pò; #84AA

+蒫 > cūo; #84AB

+蒬 > yuān; #84AC

+蒭 > chú; #84AD

+蒮 > yù; #84AE

+蒯 > kuăi; #84AF

+蒰 > pán; #84B0

+蒱 > pú; #84B1

+蒲 > pú; #84B2

+蒳 > nà; #84B3

+蒴 > shùo; #84B4

+蒵 > xī; #84B5

+蒶 > fén; #84B6

+蒷 > yún; #84B7

+蒸 > zhēng; #84B8

+蒹 > jiān; #84B9

+蒺 > jí; #84BA

+蒻 > rùo; #84BB

+蒼 > cāng; #84BC

+蒽 > ēn; #84BD

+蒾 > mí; #84BE

+蒿 > hāo; #84BF

+蓀 > sūn; #84C0

+蓁 > zhēn; #84C1

+蓂 > míng; #84C2

+蓃 > sou; #84C3

+蓄 > xù; #84C4

+蓅 > líu; #84C5

+蓆 > xí; #84C6

+蓇 > gŭ; #84C7

+蓈 > láng; #84C8

+蓉 > róng; #84C9

+蓊 > wĕng; #84CA

+蓋 > gài; #84CB

+蓌 > cùo; #84CC

+蓍 > shī; #84CD

+蓎 > táng; #84CE

+蓏 > lŭo; #84CF

+蓐 > rù; #84D0

+蓑 > sūo; #84D1

+蓒 > xiān; #84D2

+蓓 > bèi; #84D3

+蓔 > yăo; #84D4

+蓕 > gùi; #84D5

+蓖 > bī; #84D6

+蓗 > zŏng; #84D7

+蓘 > gŭn; #84D8

+蓚 > xīu; #84DA

+蓛 > cè; #84DB

+蓝 > lán; #84DD

+蓟 > jì; #84DF

+蓠 > lí; #84E0

+蓡 > cān; #84E1

+蓢 > láng; #84E2

+蓣 > yù; #84E3

+蓥 > yìng; #84E5

+蓦 > mò; #84E6

+蓧 > diào; #84E7

+蓨 > tiāo; #84E8

+蓩 > mào; #84E9

+蓪 > tōng; #84EA

+蓫 > zhú; #84EB

+蓬 > péng; #84EC

+蓭 > ān; #84ED

+蓮 > lián; #84EE

+蓯 > cōng; #84EF

+蓰 > xĭ; #84F0

+蓱 > píng; #84F1

+蓲 > qīu; #84F2

+蓳 > jìn; #84F3

+蓴 > chún; #84F4

+蓵 > jié; #84F5

+蓶 > wĕi; #84F6

+蓷 > tūi; #84F7

+蓸 > cáo; #84F8

+蓹 > yŭ; #84F9

+蓺 > yì; #84FA

+蓻 > jí; #84FB

+蓼 > liăo; #84FC

+蓽 > bì; #84FD

+蓾 > lŭ; #84FE

+蓿 > sù; #84FF

+蔀 > bù; #8500

+蔁 > zhāng; #8501

+蔂 > lúo; #8502

+蔃 > jiàng; #8503

+蔄 > màn; #8504

+蔅 > yán; #8505

+蔆 > líng; #8506

+蔇 > jì; #8507

+蔈 > piăo; #8508

+蔉 > gŭn; #8509

+蔊 > hăn; #850A

+蔋 > dí; #850B

+蔌 > sù; #850C

+蔍 > lù; #850D

+蔎 > shè; #850E

+蔏 > shāng; #850F

+蔐 > dí; #8510

+蔑 > miè; #8511

+蔒 > xūn; #8512

+蔓 > màn; #8513

+蔔 > bó; #8514

+蔕 > dì; #8515

+蔖 > cúo; #8516

+蔗 > zhè; #8517

+蔘 > sēn; #8518

+蔙 > xuàn; #8519

+蔚 > wèi; #851A

+蔛 > hú; #851B

+蔜 > áo; #851C

+蔝 > mĭ; #851D

+蔞 > lóu; #851E

+蔟 > cù; #851F

+蔠 > zhōng; #8520

+蔡 > cài; #8521

+蔢 > pó; #8522

+蔣 > jiăng; #8523

+蔤 > mì; #8524

+蔥 > cōng; #8525

+蔦 > niăo; #8526

+蔧 > hùi; #8527

+蔨 > jùn; #8528

+蔩 > yín; #8529

+蔪 > jiàn; #852A

+蔫 > yān; #852B

+蔬 > shū; #852C

+蔭 > yìn; #852D

+蔮 > kùi; #852E

+蔯 > chén; #852F

+蔰 > hù; #8530

+蔱 > shā; #8531

+蔲 > kòu; #8532

+蔳 > qiàn; #8533

+蔴 > má; #8534

+蔵 > zāng; #8535

+蔷 > qiáng; #8537

+蔸 > dōu; #8538

+蔹 > liàn; #8539

+蔺 > lìn; #853A

+蔻 > kòu; #853B

+蔼 > ăi; #853C

+蔽 > bì; #853D

+蔾 > lí; #853E

+蔿 > wéi; #853F

+蕀 > jí; #8540

+蕁 > xún; #8541

+蕂 > shèng; #8542

+蕃 > fán; #8543

+蕄 > méng; #8544

+蕅 > ŏu; #8545

+蕆 > chăn; #8546

+蕇 > diăn; #8547

+蕈 > xùn; #8548

+蕉 > jiāo; #8549

+蕊 > rŭi; #854A

+蕋 > rŭi; #854B

+蕌 > lĕi; #854C

+蕍 > yú; #854D

+蕎 > qiáo; #854E

+蕏 > chú; #854F

+蕐 > huá; #8550

+蕑 > jiān; #8551

+蕒 > măi; #8552

+蕓 > yún; #8553

+蕔 > bāo; #8554

+蕕 > yóu; #8555

+蕖 > qú; #8556

+蕗 > lù; #8557

+蕘 > ráo; #8558

+蕙 > hùi; #8559

+蕚 > è; #855A

+蕛 > téng; #855B

+蕜 > fĕi; #855C

+蕝 > jué; #855D

+蕞 > zùi; #855E

+蕟 > fà; #855F

+蕠 > rú; #8560

+蕡 > fén; #8561

+蕢 > kùi; #8562

+蕣 > shùn; #8563

+蕤 > rúi; #8564

+蕥 > yă; #8565

+蕦 > xū; #8566

+蕧 > fù; #8567

+蕨 > jué; #8568

+蕩 > dàng; #8569

+蕪 > wú; #856A

+蕫 > tóng; #856B

+蕬 > sī; #856C

+蕭 > xiāo; #856D

+蕮 > xì; #856E

+蕯 > lóng; #856F

+蕰 > yùn; #8570

+蕲 > qí; #8572

+蕳 > jiān; #8573

+蕴 > yùn; #8574

+蕵 > sūn; #8575

+蕶 > líng; #8576

+蕷 > yù; #8577

+蕸 > xiá; #8578

+蕹 > yōng; #8579

+蕺 > jí; #857A

+蕻 > hòng; #857B

+蕼 > sì; #857C

+蕽 > nóng; #857D

+蕾 > lĕi; #857E

+蕿 > xuān; #857F

+薀 > yùn; #8580

+薁 > yù; #8581

+薂 > xí; #8582

+薃 > hào; #8583

+薄 > bó; #8584

+薅 > hāo; #8585

+薆 > ài; #8586

+薇 > wéi; #8587

+薈 > hùi; #8588

+薉 > wèi; #8589

+薊 > jì; #858A

+薋 > cī; #858B

+薌 > xiāng; #858C

+薍 > luàn; #858D

+薎 > miè; #858E

+薏 > yì; #858F

+薐 > léng; #8590

+薑 > jiāng; #8591

+薒 > càn; #8592

+薓 > shēn; #8593

+薔 > qiáng; #8594

+薕 > lián; #8595

+薖 > kē; #8596

+薗 > yuán; #8597

+薘 > dá; #8598

+薙 > tì; #8599

+薚 > táng; #859A

+薛 > xiē; #859B

+薜 > bì; #859C

+薝 > zhán; #859D

+薞 > sūn; #859E

+薟 > liăn; #859F

+薠 > fán; #85A0

+薡 > dĭng; #85A1

+薢 > jiē; #85A2

+薣 > gŭ; #85A3

+薤 > xiè; #85A4

+薥 > shŭ; #85A5

+薦 > jiàn; #85A6

+薧 > kăo; #85A7

+薨 > hōng; #85A8

+薩 > sà; #85A9

+薪 > xīn; #85AA

+薫 > xūn; #85AB

+薬 > yào; #85AC

+薮 > sŏu; #85AE

+薯 > shŭ; #85AF

+薰 > xūn; #85B0

+薱 > dùi; #85B1

+薲 > pín; #85B2

+薳 > wĕi; #85B3

+薴 > néng; #85B4

+薵 > chóu; #85B5

+薶 > mái; #85B6

+薷 > rú; #85B7

+薸 > piāo; #85B8

+薹 > tái; #85B9

+薺 > qí; #85BA

+薻 > zăo; #85BB

+薼 > chén; #85BC

+薽 > zhēn; #85BD

+薾 > ĕr; #85BE

+薿 > nĭ; #85BF

+藀 > yíng; #85C0

+藁 > găo; #85C1

+藂 > còng; #85C2

+藃 > xiāo; #85C3

+藄 > qí; #85C4

+藅 > fá; #85C5

+藆 > jiăn; #85C6

+藇 > xù; #85C7

+藈 > kūi; #85C8

+藉 > jiè; #85C9

+藊 > biăn; #85CA

+藋 > diào; #85CB

+藌 > mì; #85CC

+藍 > lán; #85CD

+藎 > jìn; #85CE

+藏 > cáng; #85CF

+藐 > miăo; #85D0

+藑 > qíong; #85D1

+藒 > qiè; #85D2

+藓 > xiăn; #85D3

+藕 > ŏu; #85D5

+藖 > xián; #85D6

+藗 > sù; #85D7

+藘 > lǘ; #85D8

+藙 > yì; #85D9

+藚 > xù; #85DA

+藛 > xiĕ; #85DB

+藜 > lí; #85DC

+藝 > yì; #85DD

+藞 > lă; #85DE

+藟 > lĕi; #85DF

+藠 > xiào; #85E0

+藡 > dí; #85E1

+藢 > zhĭ; #85E2

+藣 > bēi; #85E3

+藤 > téng; #85E4

+藥 > yào; #85E5

+藦 > mò; #85E6

+藧 > huăn; #85E7

+藨 > piăo; #85E8

+藩 > fán; #85E9

+藪 > sŏu; #85EA

+藫 > tán; #85EB

+藬 > tūi; #85EC

+藭 > qíong; #85ED

+藮 > qiáo; #85EE

+藯 > wèi; #85EF

+藰 > líu; #85F0

+藱 > hùi; #85F1

+藳 > găo; #85F3

+藴 > yùn; #85F4

+藶 > lì; #85F6

+藷 > shŭ; #85F7

+藸 > chú; #85F8

+藹 > ăi; #85F9

+藺 > lìn; #85FA

+藻 > zăo; #85FB

+藼 > xuān; #85FC

+藽 > chèn; #85FD

+藾 > lài; #85FE

+藿 > hùo; #85FF

+蘀 > tùo; #8600

+蘁 > wù; #8601

+蘂 > rŭi; #8602

+蘃 > rŭi; #8603

+蘄 > qí; #8604

+蘅 > héng; #8605

+蘆 > lú; #8606

+蘇 > sū; #8607

+蘈 > túi; #8608

+蘉 > máng; #8609

+蘊 > yùn; #860A

+蘋 > pín; #860B

+蘌 > yŭ; #860C

+蘍 > xūn; #860D

+蘎 > jì; #860E

+蘏 > jīong; #860F

+蘐 > xiān; #8610

+蘑 > mó; #8611

+蘓 > sū; #8613

+蘔 > jīong; #8614

+蘖 > niè; #8616

+蘗 > bò; #8617

+蘘 > ráng; #8618

+蘙 > yì; #8619

+蘚 > xiăn; #861A

+蘛 > yú; #861B

+蘜 > jú; #861C

+蘝 > liàn; #861D

+蘞 > liàn; #861E

+蘟 > yĭn; #861F

+蘠 > qiáng; #8620

+蘡 > yīng; #8621

+蘢 > lóng; #8622

+蘣 > tòng; #8623

+蘤 > wĕi; #8624

+蘥 > yuè; #8625

+蘦 > líng; #8626

+蘧 > qú; #8627

+蘨 > yáo; #8628

+蘩 > fán; #8629

+蘪 > mí; #862A

+蘫 > lán; #862B

+蘬 > kūi; #862C

+蘭 > lán; #862D

+蘮 > jì; #862E

+蘯 > dàng; #862F

+蘱 > lèi; #8631

+蘲 > léi; #8632

+蘳 > huă; #8633

+蘴 > fēng; #8634

+蘵 > zhí; #8635

+蘶 > wèi; #8636

+蘷 > kúi; #8637

+蘸 > zhàn; #8638

+蘹 > huài; #8639

+蘺 > lí; #863A

+蘻 > jì; #863B

+蘼 > mí; #863C

+蘽 > lĕi; #863D

+蘾 > huài; #863E

+蘿 > lúo; #863F

+虀 > jī; #8640

+虁 > kúi; #8641

+虂 > lù; #8642

+虃 > jiān; #8643

+虆 > léi; #8646

+虇 > quăn; #8647

+虈 > xiāo; #8648

+虉 > yì; #8649

+虊 > luán; #864A

+虋 > mén; #864B

+虌 > biē; #864C

+虍 > hū; #864D

+虎 > hŭ; #864E

+虏 > lŭ; #864F

+虐 > nǜe; #8650

+虑 > lǜ; #8651

+虒 > sī; #8652

+虓 > xiāo; #8653

+虔 > qián; #8654

+處 > chù; #8655

+虖 > hū; #8656

+虗 > xū; #8657

+虘 > cúo; #8658

+虙 > fú; #8659

+虚 > xū; #865A

+虛 > xū; #865B

+虜 > lŭ; #865C

+虝 > hŭ; #865D

+虞 > yú; #865E

+號 > hào; #865F

+虠 > jiăo; #8660

+虡 > jù; #8661

+虢 > gúo; #8662

+虣 > bào; #8663

+虤 > yán; #8664

+虥 > zhàn; #8665

+虦 > zhàn; #8666

+虧 > kūi; #8667

+虨 > bān; #8668

+虩 > xì; #8669

+虪 > shú; #866A

+虫 > chóng; #866B

+虬 > qíu; #866C

+虭 > diāo; #866D

+虮 > jī; #866E

+虯 > qíu; #866F

+虰 > chéng; #8670

+虱 > shī; #8671

+虳 > dì; #8673

+虴 > zhé; #8674

+虵 > shé; #8675

+虶 > yū; #8676

+虷 > gān; #8677

+虸 > zĭ; #8678

+虹 > hóng; #8679

+虺 > hŭi; #867A

+虻 > méng; #867B

+虼 > gè; #867C

+虽 > sūi; #867D

+虾 > xiā; #867E

+虿 > chài; #867F

+蚀 > shí; #8680

+蚁 > yĭ; #8681

+蚂 > mă; #8682

+蚃 > xiàng; #8683

+蚄 > fāng; #8684

+蚅 > è; #8685

+蚆 > pā; #8686

+蚇 > chĭ; #8687

+蚈 > qiān; #8688

+蚉 > wén; #8689

+蚊 > wén; #868A

+蚋 > rùi; #868B

+蚌 > bàng; #868C

+蚍 > bĭ; #868D

+蚎 > yuè; #868E

+蚏 > yuè; #868F

+蚐 > jūn; #8690

+蚑 > qí; #8691

+蚒 > rán; #8692

+蚓 > yĭn; #8693

+蚔 > qí; #8694

+蚕 > tiăn; #8695

+蚖 > yuán; #8696

+蚗 > jué; #8697

+蚘 > húi; #8698

+蚙 > qín; #8699

+蚚 > qí; #869A

+蚛 > zhòng; #869B

+蚜 > yá; #869C

+蚝 > cì; #869D

+蚞 > mù; #869E

+蚟 > wáng; #869F

+蚠 > fén; #86A0

+蚡 > fén; #86A1

+蚢 > háng; #86A2

+蚣 > gōng; #86A3

+蚤 > zăo; #86A4

+蚥 > fŭ; #86A5

+蚦 > rán; #86A6

+蚧 > jiè; #86A7

+蚨 > fú; #86A8

+蚩 > chī; #86A9

+蚪 > dŏu; #86AA

+蚫 > piáo; #86AB

+蚬 > xiàn; #86AC

+蚭 > ní; #86AD

+蚮 > tè; #86AE

+蚯 > qīu; #86AF

+蚰 > yóu; #86B0

+蚱 > zhà; #86B1

+蚲 > píng; #86B2

+蚳 > chí; #86B3

+蚴 > yŏu; #86B4

+蚵 > hé; #86B5

+蚶 > hān; #86B6

+蚷 > jù; #86B7

+蚸 > lì; #86B8

+蚹 > fù; #86B9

+蚺 > rán; #86BA

+蚻 > zhá; #86BB

+蚼 > gŏu; #86BC

+蚽 > pí; #86BD

+蚾 > bŏ; #86BE

+蚿 > xián; #86BF

+蛀 > zhù; #86C0

+蛁 > diāo; #86C1

+蛂 > biĕ; #86C2

+蛃 > bĭng; #86C3

+蛄 > gū; #86C4

+蛅 > rán; #86C5

+蛆 > qū; #86C6

+蛇 > shé; #86C7

+蛈 > tiè; #86C8

+蛉 > líng; #86C9

+蛊 > gŭ; #86CA

+蛋 > dàn; #86CB

+蛌 > gŭ; #86CC

+蛍 > yíng; #86CD

+蛎 > lì; #86CE

+蛏 > chēng; #86CF

+蛐 > qū; #86D0

+蛑 > móu; #86D1

+蛒 > gé; #86D2

+蛓 > cì; #86D3

+蛔 > húi; #86D4

+蛕 > húi; #86D5

+蛖 > máng; #86D6

+蛗 > fù; #86D7

+蛘 > yáng; #86D8

+蛙 > wā; #86D9

+蛚 > liè; #86DA

+蛛 > zhū; #86DB

+蛜 > yī; #86DC

+蛝 > xián; #86DD

+蛞 > kùo; #86DE

+蛟 > jiāo; #86DF

+蛠 > lì; #86E0

+蛡 > yì; #86E1

+蛢 > píng; #86E2

+蛣 > jī; #86E3

+蛤 > há; #86E4

+蛥 > shé; #86E5

+蛦 > yí; #86E6

+蛧 > wăng; #86E7

+蛨 > mò; #86E8

+蛩 > qíong; #86E9

+蛪 > qiè; #86EA

+蛫 > gŭi; #86EB

+蛬 > gŏng; #86EC

+蛭 > zhì; #86ED

+蛮 > mán; #86EE

+蛰 > zhí; #86F0

+蛱 > jiá; #86F1

+蛲 > ráo; #86F2

+蛳 > sī; #86F3

+蛴 > qí; #86F4

+蛵 > xīng; #86F5

+蛶 > liè; #86F6

+蛷 > qíu; #86F7

+蛸 > shāo; #86F8

+蛹 > yŏng; #86F9

+蛺 > jiá; #86FA

+蛻 > shùi; #86FB

+蛼 > chē; #86FC

+蛽 > bài; #86FD

+蛾 > é; #86FE

+蛿 > hàn; #86FF

+蜀 > shŭ; #8700

+蜁 > xuán; #8701

+蜂 > fēng; #8702

+蜃 > shèn; #8703

+蜄 > zhèn; #8704

+蜅 > fŭ; #8705

+蜆 > xiàn; #8706

+蜇 > zhé; #8707

+蜈 > wú; #8708

+蜉 > fú; #8709

+蜊 > lí; #870A

+蜋 > láng; #870B

+蜌 > bì; #870C

+蜍 > chú; #870D

+蜎 > yuān; #870E

+蜏 > yŏu; #870F

+蜐 > jié; #8710

+蜑 > dàn; #8711

+蜒 > yán; #8712

+蜓 > tíng; #8713

+蜔 > diàn; #8714

+蜕 > shùi; #8715

+蜖 > húi; #8716

+蜗 > guā; #8717

+蜘 > zhī; #8718

+蜙 > sōng; #8719

+蜚 > fēi; #871A

+蜛 > jū; #871B

+蜜 > mì; #871C

+蜝 > qí; #871D

+蜞 > qí; #871E

+蜟 > yù; #871F

+蜠 > jŭn; #8720

+蜡 > zhà; #8721

+蜢 > mĕng; #8722

+蜣 > qiāng; #8723

+蜤 > sī; #8724

+蜥 > xī; #8725

+蜦 > lún; #8726

+蜧 > lì; #8727

+蜨 > dié; #8728

+蜩 > tiáo; #8729

+蜪 > tāo; #872A

+蜫 > kūn; #872B

+蜬 > gān; #872C

+蜭 > hàn; #872D

+蜮 > yù; #872E

+蜯 > bàng; #872F

+蜰 > féi; #8730

+蜱 > pí; #8731

+蜲 > wĕi; #8732

+蜳 > dūn; #8733

+蜴 > yì; #8734

+蜵 > yuān; #8735

+蜶 > sù; #8736

+蜷 > quán; #8737

+蜸 > qiăn; #8738

+蜹 > rùi; #8739

+蜺 > ní; #873A

+蜻 > qīng; #873B

+蜼 > wèi; #873C

+蜽 > liăng; #873D

+蜾 > gŭo; #873E

+蜿 > wān; #873F

+蝀 > dōng; #8740

+蝁 > è; #8741

+蝂 > băn; #8742

+蝃 > dì; #8743

+蝄 > wăng; #8744

+蝅 > cán; #8745

+蝆 > yăng; #8746

+蝇 > yíng; #8747

+蝈 > gūo; #8748

+蝉 > chán; #8749

+蝋 > là; #874B

+蝌 > kē; #874C

+蝍 > jí; #874D

+蝎 > hé; #874E

+蝏 > tíng; #874F

+蝐 > mài; #8750

+蝑 > xū; #8751

+蝒 > mián; #8752

+蝓 > yú; #8753

+蝔 > jiē; #8754

+蝕 > shí; #8755

+蝖 > xuān; #8756

+蝗 > huáng; #8757

+蝘 > yăn; #8758

+蝙 > biān; #8759

+蝚 > róu; #875A

+蝛 > wēi; #875B

+蝜 > fù; #875C

+蝝 > yuán; #875D

+蝞 > mèi; #875E

+蝟 > wèi; #875F

+蝠 > fú; #8760

+蝡 > ruăn; #8761

+蝢 > xié; #8762

+蝣 > yóu; #8763

+蝤 > qíu; #8764

+蝥 > máo; #8765

+蝦 > xiā; #8766

+蝧 > yīng; #8767

+蝨 > shī; #8768

+蝩 > chóng; #8769

+蝪 > tāng; #876A

+蝫 > zhū; #876B

+蝬 > zōng; #876C

+蝭 > tí; #876D

+蝮 > fù; #876E

+蝯 > yuán; #876F

+蝰 > hŭi; #8770

+蝱 > méng; #8771

+蝲 > là; #8772

+蝳 > dú; #8773

+蝴 > hú; #8774

+蝵 > qīu; #8775

+蝶 > dié; #8776

+蝷 > lì; #8777

+蝸 > guā; #8778

+蝹 > yūn; #8779

+蝺 > jŭ; #877A

+蝻 > năn; #877B

+蝼 > lóu; #877C

+蝽 > qŭn; #877D

+蝾 > róng; #877E

+蝿 > yíng; #877F

+螀 > jiāng; #8780

+螂 > láng; #8782

+螃 > páng; #8783

+螄 > sī; #8784

+螅 > xī; #8785

+螆 > cì; #8786

+螇 > xī; #8787

+螈 > yuán; #8788

+螉 > wēng; #8789

+螊 > lián; #878A

+螋 > sōu; #878B

+螌 > bān; #878C

+融 > róng; #878D

+螎 > róng; #878E

+螏 > jí; #878F

+螐 > wū; #8790

+螑 > qìu; #8791

+螒 > hàn; #8792

+螓 > qín; #8793

+螔 > yí; #8794

+螕 > bī; #8795

+螖 > huá; #8796

+螗 > táng; #8797

+螘 > yĭ; #8798

+螙 > dù; #8799

+螚 > nài; #879A

+螛 > hé; #879B

+螜 > hú; #879C

+螝 > hùi; #879D

+螞 > mă; #879E

+螟 > míng; #879F

+螠 > yì; #87A0

+螡 > wén; #87A1

+螢 > yíng; #87A2

+螣 > téng; #87A3

+螤 > yŭ; #87A4

+螥 > cāng; #87A5

+螨 > măn; #87A8

+螪 > shāng; #87AA

+螫 > zhē; #87AB

+螬 > cáo; #87AC

+螭 > chī; #87AD

+螮 > dì; #87AE

+螯 > áo; #87AF

+螰 > lù; #87B0

+螱 > wèi; #87B1

+螲 > zhì; #87B2

+螳 > táng; #87B3

+螴 > chén; #87B4

+螵 > piāo; #87B5

+螶 > qú; #87B6

+螷 > pí; #87B7

+螸 > yú; #87B8

+螹 > jiàn; #87B9

+螺 > lúo; #87BA

+螻 > lóu; #87BB

+螼 > qĭn; #87BC

+螽 > zhōng; #87BD

+螾 > yĭn; #87BE

+螿 > jiāng; #87BF

+蟀 > shuài; #87C0

+蟁 > wén; #87C1

+蟂 > jiāo; #87C2

+蟃 > wàn; #87C3

+蟄 > zhí; #87C4

+蟅 > zhè; #87C5

+蟆 > má; #87C6

+蟇 > má; #87C7

+蟈 > gūo; #87C8

+蟉 > líu; #87C9

+蟊 > máo; #87CA

+蟋 > xī; #87CB

+蟌 > cōng; #87CC

+蟍 > lí; #87CD

+蟎 > măn; #87CE

+蟏 > xiāo; #87CF

+蟑 > zhāng; #87D1

+蟒 > măng; #87D2

+蟓 > xiàng; #87D3

+蟔 > mò; #87D4

+蟕 > zūi; #87D5

+蟖 > sī; #87D6

+蟗 > qīu; #87D7

+蟘 > tè; #87D8

+蟙 > zhí; #87D9

+蟚 > péng; #87DA

+蟛 > péng; #87DB

+蟜 > jiăo; #87DC

+蟝 > qú; #87DD

+蟞 > bié; #87DE

+蟟 > liáo; #87DF

+蟠 > pán; #87E0

+蟡 > gŭi; #87E1

+蟢 > xĭ; #87E2

+蟣 > jĭ; #87E3

+蟤 > zhuān; #87E4

+蟥 > huáng; #87E5

+蟦 > fèi; #87E6

+蟧 > láo; #87E7

+蟨 > jué; #87E8

+蟩 > jué; #87E9

+蟪 > hùi; #87EA

+蟫 > yín; #87EB

+蟬 > chán; #87EC

+蟭 > jiāo; #87ED

+蟮 > shàn; #87EE

+蟯 > ráo; #87EF

+蟰 > xiāo; #87F0

+蟱 > móu; #87F1

+蟲 > chóng; #87F2

+蟳 > xún; #87F3

+蟴 > sī; #87F4

+蟶 > chēng; #87F6

+蟷 > dāng; #87F7

+蟸 > lĭ; #87F8

+蟹 > xiè; #87F9

+蟺 > shàn; #87FA

+蟻 > yĭ; #87FB

+蟼 > jĭng; #87FC

+蟽 > dá; #87FD

+蟾 > chán; #87FE

+蟿 > qì; #87FF

+蠀 > cī; #8800

+蠁 > xiàng; #8801

+蠂 > shè; #8802

+蠃 > lŭo; #8803

+蠄 > qín; #8804

+蠅 > yíng; #8805

+蠆 > chài; #8806

+蠇 > lì; #8807

+蠈 > zé; #8808

+蠉 > xuān; #8809

+蠊 > lián; #880A

+蠋 > zhú; #880B

+蠌 > zé; #880C

+蠍 > xiē; #880D

+蠎 > măng; #880E

+蠏 > xiè; #880F

+蠐 > qí; #8810

+蠑 > róng; #8811

+蠒 > jiăn; #8812

+蠓 > mĕng; #8813

+蠔 > háo; #8814

+蠕 > ruăn; #8815

+蠖 > hùo; #8816

+蠗 > zhúo; #8817

+蠘 > jié; #8818

+蠙 > bīn; #8819

+蠚 > hè; #881A

+蠛 > miè; #881B

+蠜 > fán; #881C

+蠝 > léi; #881D

+蠞 > jié; #881E

+蠟 > là; #881F

+蠠 > mì; #8820

+蠡 > lĭ; #8821

+蠢 > chŭn; #8822

+蠣 > lì; #8823

+蠤 > qīu; #8824

+蠥 > niè; #8825

+蠦 > lú; #8826

+蠧 > dù; #8827

+蠨 > xiāo; #8828

+蠩 > zhū; #8829

+蠪 > lóng; #882A

+蠫 > lì; #882B

+蠬 > lóng; #882C

+蠭 > fēng; #882D

+蠮 > yē; #882E

+蠯 > bèng; #882F

+蠰 > shàng; #8830

+蠱 > gŭ; #8831

+蠲 > juān; #8832

+蠳 > yīng; #8833

+蠵 > xī; #8835

+蠶 > cán; #8836

+蠷 > qú; #8837

+蠸 > quán; #8838

+蠹 > dù; #8839

+蠺 > cán; #883A

+蠻 > mán; #883B

+蠼 > jué; #883C

+蠽 > jié; #883D

+蠾 > zhú; #883E

+蠿 > zhá; #883F

+血 > xiĕ; #8840

+衁 > huāng; #8841

+衂 > nìu; #8842

+衃 > pēi; #8843

+衄 > nǜ; #8844

+衅 > xìn; #8845

+衆 > zhòng; #8846

+衇 > mò; #8847

+衈 > èr; #8848

+衉 > kè; #8849

+衊 > miè; #884A

+衋 > xì; #884B

+行 > xíng; #884C

+衍 > yăn; #884D

+衎 > kàn; #884E

+衏 > yuàn; #884F

+衑 > líng; #8851

+衒 > xuàn; #8852

+術 > shù; #8853

+衔 > xián; #8854

+衕 > tòng; #8855

+衖 > lòng; #8856

+街 > jiē; #8857

+衘 > xián; #8858

+衙 > yá; #8859

+衚 > hú; #885A

+衛 > wèi; #885B

+衜 > dào; #885C

+衝 > chōng; #885D

+衞 > wèi; #885E

+衟 > dào; #885F

+衠 > zhūn; #8860

+衡 > héng; #8861

+衢 > qú; #8862

+衣 > yī; #8863

+衤 > yī' 'zì' 'páng; #8864

+补 > bŭ; #8865

+衦 > găn; #8866

+衧 > yú; #8867

+表 > biăo; #8868

+衩 > chà; #8869

+衪 > yĭ; #886A

+衫 > shān; #886B

+衬 > chèn; #886C

+衭 > fū; #886D

+衮 > gŭn; #886E

+衯 > fēn; #886F

+衰 > shuāi; #8870

+衱 > jié; #8871

+衲 > nà; #8872

+衳 > zhōng; #8873

+衴 > dăn; #8874

+衵 > rì; #8875

+衶 > zhòng; #8876

+衷 > zhōng; #8877

+衸 > xiè; #8878

+衹 > qí; #8879

+衺 > xié; #887A

+衻 > rán; #887B

+衼 > zhī; #887C

+衽 > rèn; #887D

+衾 > qīn; #887E

+衿 > jīn; #887F

+袀 > jūn; #8880

+袁 > yuán; #8881

+袂 > mèi; #8882

+袃 > chài; #8883

+袄 > ăo; #8884

+袅 > niăo; #8885

+袆 > hūi; #8886

+袇 > rán; #8887

+袈 > jiā; #8888

+袉 > túo; #8889

+袊 > lĭng; #888A

+袋 > dài; #888B

+袌 > bào; #888C

+袍 > páo; #888D

+袎 > yào; #888E

+袏 > zùo; #888F

+袐 > bì; #8890

+袑 > shào; #8891

+袒 > tăn; #8892

+袓 > jŭ; #8893

+袔 > hè; #8894

+袕 > shù; #8895

+袖 > xìu; #8896

+袗 > zhĕn; #8897

+袘 > yí; #8898

+袙 > pà; #8899

+袚 > bō; #889A

+袛 > dī; #889B

+袜 > wà; #889C

+袝 > fù; #889D

+袞 > gŭn; #889E

+袟 > zhì; #889F

+袠 > zhì; #88A0

+袡 > rán; #88A1

+袢 > pàn; #88A2

+袣 > yì; #88A3

+袤 > mào; #88A4

+袥 > tuo; #88A5

+袦 > nà; #88A6

+袧 > kōu; #88A7

+袨 > xiàn; #88A8

+袩 > chān; #88A9

+袪 > qū; #88AA

+被 > bèi; #88AB

+袬 > gŭn; #88AC

+袭 > xí; #88AD

+袯 > bó; #88AF

+袱 > fú; #88B1

+袲 > yí; #88B2

+袳 > chĭ; #88B3

+袴 > kù; #88B4

+袵 > rèn; #88B5

+袶 > jiàng; #88B6

+袷 > jiá; #88B7

+袸 > cún; #88B8

+袹 > mò; #88B9

+袺 > jié; #88BA

+袻 > ér; #88BB

+袼 > lùo; #88BC

+袽 > rú; #88BD

+袾 > zhū; #88BE

+袿 > gūi; #88BF

+裀 > yīn; #88C0

+裁 > cái; #88C1

+裂 > liè; #88C2

+装 > zhuāng; #88C5

+裆 > dāng; #88C6

+裈 > kūn; #88C8

+裉 > kèn; #88C9

+裊 > niăo; #88CA

+裋 > shù; #88CB

+裌 > jiá; #88CC

+裍 > kŭn; #88CD

+裎 > chéng; #88CE

+裏 > lĭ; #88CF

+裐 > juān; #88D0

+裑 > shēn; #88D1

+裒 > póu; #88D2

+裓 > gé; #88D3

+裔 > yì; #88D4

+裕 > yù; #88D5

+裖 > zhĕn; #88D6

+裗 > líu; #88D7

+裘 > qíu; #88D8

+裙 > qún; #88D9

+裚 > jì; #88DA

+裛 > yì; #88DB

+補 > bŭ; #88DC

+裝 > zhuāng; #88DD

+裞 > shùi; #88DE

+裟 > shā; #88DF

+裠 > qún; #88E0

+裡 > lĭ; #88E1

+裢 > lián; #88E2

+裣 > liàn; #88E3

+裤 > kù; #88E4

+裥 > jiăn; #88E5

+裦 > fóu; #88E6

+裧 > chān; #88E7

+裨 > bì; #88E8

+裩 > gūn; #88E9

+裪 > táo; #88EA

+裫 > yuàn; #88EB

+裬 > líng; #88EC

+裭 > chĭ; #88ED

+裮 > chāng; #88EE

+裯 > chóu; #88EF

+裰 > dúo; #88F0

+裱 > biăo; #88F1

+裲 > liăng; #88F2

+裳 > cháng; #88F3

+裴 > péi; #88F4

+裵 > péi; #88F5

+裶 > fēi; #88F6

+裷 > yuān; #88F7

+裸 > lŭo; #88F8

+裹 > gŭo; #88F9

+裺 > yăn; #88FA

+裻 > dŭ; #88FB

+裼 > xí; #88FC

+製 > zhì; #88FD

+裾 > jū; #88FE

+裿 > qĭ; #88FF

+褀 > jì; #8900

+褁 > zhí; #8901

+褂 > guà; #8902

+褃 > kèn; #8903

+褅 > tì; #8905

+褆 > tí; #8906

+複 > fù; #8907

+褈 > chóng; #8908

+褉 > xiē; #8909

+褊 > biăn; #890A

+褋 > dié; #890B

+褌 > kūn; #890C

+褍 > duān; #890D

+褎 > xìu; #890E

+褏 > xìu; #890F

+褐 > hé; #8910

+褑 > yuàn; #8911

+褒 > bāo; #8912

+褓 > băo; #8913

+褔 > fù; #8914

+褕 > yú; #8915

+褖 > tuàn; #8916

+褗 > yăn; #8917

+褘 > hūi; #8918

+褙 > bèi; #8919

+褚 > chŭ; #891A

+褛 > lǚ; #891B

+褞 > yŭn; #891E

+褟 > dá; #891F

+褠 > gōu; #8920

+褡 > dā; #8921

+褢 > huái; #8922

+褣 > róng; #8923

+褤 > yuàn; #8924

+褥 > rù; #8925

+褦 > nài; #8926

+褧 > jĭong; #8927

+褨 > sŭo; #8928

+褩 > bān; #8929

+褪 > tùn; #892A

+褫 > chĭ; #892B

+褬 > săng; #892C

+褭 > niăo; #892D

+褮 > yīng; #892E

+褯 > jiè; #892F

+褰 > qiān; #8930

+褱 > huái; #8931

+褲 > kù; #8932

+褳 > lián; #8933

+褴 > băo; #8934

+褵 > lí; #8935

+褶 > zhé; #8936

+褷 > shī; #8937

+褸 > lǚ; #8938

+褹 > yì; #8939

+褺 > dié; #893A

+褻 > xiè; #893B

+褼 > xiān; #893C

+褽 > wèi; #893D

+褾 > biăo; #893E

+褿 > cáo; #893F

+襀 > jī; #8940

+襁 > jiăng; #8941

+襂 > sēn; #8942

+襃 > bāo; #8943

+襄 > xiāng; #8944

+襆 > pú; #8946

+襇 > jiăn; #8947

+襈 > zhuàn; #8948

+襉 > jiàn; #8949

+襊 > zùi; #894A

+襋 > jí; #894B

+襌 > dān; #894C

+襍 > zá; #894D

+襎 > fán; #894E

+襏 > bó; #894F

+襐 > xiàng; #8950

+襑 > xín; #8951

+襒 > bié; #8952

+襓 > ráo; #8953

+襔 > măn; #8954

+襕 > lán; #8955

+襖 > ăo; #8956

+襗 > dúo; #8957

+襘 > gùi; #8958

+襙 > cào; #8959

+襚 > sùi; #895A

+襛 > nóng; #895B

+襜 > chān; #895C

+襝 > liàn; #895D

+襞 > bì; #895E

+襟 > jīn; #895F

+襠 > dāng; #8960

+襡 > shú; #8961

+襢 > tăn; #8962

+襣 > bì; #8963

+襤 > lán; #8964

+襥 > pú; #8965

+襦 > rú; #8966

+襧 > zhĭ; #8967

+襩 > shŭ; #8969

+襪 > wà; #896A

+襫 > shì; #896B

+襬 > băi; #896C

+襭 > xié; #896D

+襮 > bó; #896E

+襯 > chèn; #896F

+襰 > lài; #8970

+襱 > lóng; #8971

+襲 > xí; #8972

+襳 > xiān; #8973

+襴 > lán; #8974

+襵 > zhé; #8975

+襶 > dài; #8976

+襸 > zàn; #8978

+襹 > shī; #8979

+襺 > jiăn; #897A

+襻 > pàn; #897B

+襼 > yì; #897C

+襾 > yà; #897E

+西 > xī; #897F

+覀 > xī; #8980

+要 > yào; #8981

+覂 > fĕng; #8982

+覃 > tán; #8983

+覅 > biào; #8985

+覆 > fù; #8986

+覇 > bà; #8987

+覈 > hé; #8988

+覉 > jī; #8989

+覊 > jī; #898A

+見 > jiàn; #898B

+覌 > guān; #898C

+覍 > biàn; #898D

+覎 > yàn; #898E

+規 > gūi; #898F

+覐 > jué; #8990

+覑 > piăn; #8991

+覒 > máo; #8992

+覓 > mì; #8993

+覔 > mì; #8994

+覕 > miè; #8995

+視 > shì; #8996

+覗 > sī; #8997

+覘 > zhān; #8998

+覙 > lúo; #8999

+覚 > jué; #899A

+覛 > mì; #899B

+覜 > tiào; #899C

+覝 > lián; #899D

+覞 > yào; #899E

+覟 > zhì; #899F

+覠 > jūn; #89A0

+覡 > xí; #89A1

+覢 > shăn; #89A2

+覣 > wēi; #89A3

+覤 > xì; #89A4

+覥 > tiăn; #89A5

+覦 > yú; #89A6

+覧 > lăn; #89A7

+覨 > è; #89A8

+覩 > dŭ; #89A9

+親 > qīn; #89AA

+覫 > păng; #89AB

+覬 > jì; #89AC

+覭 > míng; #89AD

+覮 > yíng; #89AE

+覯 > gòu; #89AF

+覰 > qù; #89B0

+覱 > zhàn; #89B1

+覲 > jĭn; #89B2

+観 > guān; #89B3

+覴 > dēng; #89B4

+覵 > jiàn; #89B5

+覶 > lúo; #89B6

+覷 > qù; #89B7

+覸 > jiàn; #89B8

+覹 > wéi; #89B9

+覺 > jué; #89BA

+覻 > qù; #89BB

+覼 > lúo; #89BC

+覽 > lăn; #89BD

+覾 > shĕn; #89BE

+覿 > dí; #89BF

+觀 > guān; #89C0

+见 > jiàn; #89C1

+观 > guān; #89C2

+觃 > yàn; #89C3

+规 > gūi; #89C4

+觅 > mì; #89C5

+视 > shì; #89C6

+觇 > zhān; #89C7

+览 > lăn; #89C8

+觉 > jué; #89C9

+觊 > jì; #89CA

+觋 > xí; #89CB

+觌 > dí; #89CC

+觍 > tiăn; #89CD

+觎 > yú; #89CE

+觏 > gòu; #89CF

+觐 > jĭn; #89D0

+觑 > qù; #89D1

+角 > jiăo; #89D2

+觓 > jīu; #89D3

+觔 > jīn; #89D4

+觕 > cū; #89D5

+觖 > jué; #89D6

+觗 > zhì; #89D7

+觘 > chào; #89D8

+觙 > jí; #89D9

+觚 > gū; #89DA

+觛 > dàn; #89DB

+觜 > zŭi; #89DC

+觝 > dĭ; #89DD

+觞 > shāng; #89DE

+觟 > huà; #89DF

+觠 > quán; #89E0

+觡 > gé; #89E1

+觢 > chì; #89E2

+解 > jiĕ; #89E3

+觤 > gŭi; #89E4

+觥 > gōng; #89E5

+触 > hóng; #89E6

+觧 > jiĕ; #89E7

+觨 > hùn; #89E8

+觩 > qíu; #89E9

+觪 > xīng; #89EA

+觫 > sù; #89EB

+觬 > ní; #89EC

+觭 > jī; #89ED

+觮 > lù; #89EE

+觯 > zhì; #89EF

+觰 > zhā; #89F0

+觱 > bì; #89F1

+觲 > xīng; #89F2

+觳 > hú; #89F3

+觴 > shāng; #89F4

+觵 > gōng; #89F5

+觶 > zhì; #89F6

+觷 > xué; #89F7

+觸 > chù; #89F8

+觹 > xī; #89F9

+觺 > yí; #89FA

+觻 > lù; #89FB

+觼 > jué; #89FC

+觽 > xī; #89FD

+觾 > yàn; #89FE

+觿 > xī; #89FF

+言 > yán; #8A00

+訁 > yán' 'zì' 'páng; #8A01

+訂 > dìng; #8A02

+訃 > fù; #8A03

+訄 > qíu; #8A04

+訅 > qíu; #8A05

+訆 > jiào; #8A06

+訇 > hōng; #8A07

+計 > jì; #8A08

+訉 > fàn; #8A09

+訊 > xùn; #8A0A

+訋 > diào; #8A0B

+訌 > hóng; #8A0C

+訍 > chà; #8A0D

+討 > tăo; #8A0E

+訏 > xū; #8A0F

+訐 > jié; #8A10

+訑 > yí; #8A11

+訒 > rèn; #8A12

+訓 > xùn; #8A13

+訔 > yín; #8A14

+訕 > shàn; #8A15

+訖 > qì; #8A16

+託 > tūo; #8A17

+記 > jì; #8A18

+訙 > xùn; #8A19

+訚 > yín; #8A1A

+訛 > é; #8A1B

+訜 > fēn; #8A1C

+訝 > yà; #8A1D

+訞 > yāo; #8A1E

+訟 > sòng; #8A1F

+訠 > shĕn; #8A20

+訡 > yín; #8A21

+訢 > xīn; #8A22

+訣 > jué; #8A23

+訤 > xiáo; #8A24

+訥 > nè; #8A25

+訦 > chén; #8A26

+訧 > yóu; #8A27

+訨 > zhĭ; #8A28

+訩 > xīong; #8A29

+訪 > făng; #8A2A

+訫 > xìn; #8A2B

+訬 > chāo; #8A2C

+設 > shè; #8A2D

+訮 > xiān; #8A2E

+訯 > shă; #8A2F

+訰 > tún; #8A30

+許 > xŭ; #8A31

+訲 > yì; #8A32

+訳 > yì; #8A33

+訴 > sù; #8A34

+訵 > chī; #8A35

+訶 > hē; #8A36

+訷 > shēn; #8A37

+訸 > hé; #8A38

+訹 > xù; #8A39

+診 > zhĕn; #8A3A

+註 > zhù; #8A3B

+証 > zhèng; #8A3C

+訽 > gòu; #8A3D

+訾 > zĭ; #8A3E

+訿 > zĭ; #8A3F

+詀 > zhān; #8A40

+詁 > gŭ; #8A41

+詂 > fù; #8A42

+詃 > quăn; #8A43

+詄 > dié; #8A44

+詅 > líng; #8A45

+詆 > dĭ; #8A46

+詇 > yàng; #8A47

+詈 > lì; #8A48

+詉 > náo; #8A49

+詊 > pàn; #8A4A

+詋 > zhòu; #8A4B

+詌 > gàn; #8A4C

+詍 > yì; #8A4D

+詎 > jù; #8A4E

+詏 > ào; #8A4F

+詐 > zhà; #8A50

+詑 > túo; #8A51

+詒 > yí; #8A52

+詓 > qŭ; #8A53

+詔 > zhào; #8A54

+評 > píng; #8A55

+詖 > bì; #8A56

+詗 > xìong; #8A57

+詘 > qù; #8A58

+詙 > bá; #8A59

+詚 > dá; #8A5A

+詛 > zŭ; #8A5B

+詜 > tāo; #8A5C

+詝 > zhŭ; #8A5D

+詞 > cí; #8A5E

+詟 > zhé; #8A5F

+詠 > yŏng; #8A60

+詡 > xŭ; #8A61

+詢 > xún; #8A62

+詣 > yì; #8A63

+詤 > huăng; #8A64

+詥 > hé; #8A65

+試 > shì; #8A66

+詧 > chá; #8A67

+詨 > jiāo; #8A68

+詩 > shī; #8A69

+詪 > hĕn; #8A6A

+詫 > chà; #8A6B

+詬 > gòu; #8A6C

+詭 > gŭi; #8A6D

+詮 > quán; #8A6E

+詯 > hùi; #8A6F

+詰 > jié; #8A70

+話 > huà; #8A71

+該 > gāi; #8A72

+詳 > xiáng; #8A73

+詴 > wēi; #8A74

+詵 > shēn; #8A75

+詶 > chóu; #8A76

+詷 > tóng; #8A77

+詸 > mí; #8A78

+詹 > zhān; #8A79

+詺 > mìng; #8A7A

+詻 > è; #8A7B

+詼 > hūi; #8A7C

+詽 > yán; #8A7D

+詾 > xīong; #8A7E

+詿 > guà; #8A7F

+誀 > èr; #8A80

+誁 > bĕng; #8A81

+誂 > tiăo; #8A82

+誃 > chĭ; #8A83

+誄 > lĕi; #8A84

+誅 > zhū; #8A85

+誆 > kuāng; #8A86

+誇 > kuā; #8A87

+誈 > wú; #8A88

+誉 > yù; #8A89

+誊 > téng; #8A8A

+誋 > jì; #8A8B

+誌 > zhì; #8A8C

+認 > rèn; #8A8D

+誎 > sù; #8A8E

+誏 > lăng; #8A8F

+誐 > é; #8A90

+誑 > kuáng; #8A91

+誒 > è; #8A92

+誓 > shì; #8A93

+誔 > tĭng; #8A94

+誕 > dàn; #8A95

+誖 > bó; #8A96

+誗 > chán; #8A97

+誘 > yòu; #8A98

+誙 > héng; #8A99

+誚 > qiào; #8A9A

+誛 > qīn; #8A9B

+誜 > shuà; #8A9C

+誝 > ān; #8A9D

+語 > yŭ; #8A9E

+誟 > xiào; #8A9F

+誠 > chéng; #8AA0

+誡 > jiè; #8AA1

+誢 > xiàn; #8AA2

+誣 > wú; #8AA3

+誤 > wù; #8AA4

+誥 > gào; #8AA5

+誦 > sòng; #8AA6

+誧 > pŭ; #8AA7

+誨 > hùi; #8AA8

+誩 > jìng; #8AA9

+說 > shūo; #8AAA

+誫 > zhèn; #8AAB

+説 > shūo; #8AAC

+読 > dú; #8AAD

+誯 > chàng; #8AAF

+誰 > shúi; #8AB0

+誱 > jié; #8AB1

+課 > kè; #8AB2

+誳 > qū; #8AB3

+誴 > cóng; #8AB4

+誵 > xiáo; #8AB5

+誶 > sùi; #8AB6

+誷 > wăng; #8AB7

+誸 > xuán; #8AB8

+誹 > fĕi; #8AB9

+誺 > chī; #8ABA

+誻 > tà; #8ABB

+誼 > yí; #8ABC

+誽 > ná; #8ABD

+誾 > yín; #8ABE

+調 > diào; #8ABF

+諀 > pĭ; #8AC0

+諁 > chùo; #8AC1

+諂 > chăn; #8AC2

+諃 > chēn; #8AC3

+諄 > zhūn; #8AC4

+諅 > jī; #8AC5

+諆 > qī; #8AC6

+談 > tán; #8AC7

+諈 > zhùi; #8AC8

+諉 > wĕi; #8AC9

+諊 > jú; #8ACA

+請 > qĭng; #8ACB

+諌 > jiàn; #8ACC

+諍 > zhēng; #8ACD

+諎 > zé; #8ACE

+諏 > zōu; #8ACF

+諐 > qiān; #8AD0

+諑 > zhúo; #8AD1

+諒 > liàng; #8AD2

+諓 > jiàn; #8AD3

+諔 > zhù; #8AD4

+諕 > háo; #8AD5

+論 > lùn; #8AD6

+諗 > shĕn; #8AD7

+諘 > biăo; #8AD8

+諙 > huài; #8AD9

+諚 > pián; #8ADA

+諛 > yú; #8ADB

+諜 > dié; #8ADC

+諝 > xŭ; #8ADD

+諞 > pián; #8ADE

+諟 > shì; #8ADF

+諠 > xuān; #8AE0

+諡 > shì; #8AE1

+諢 > hùn; #8AE2

+諣 > huà; #8AE3

+諤 > è; #8AE4

+諥 > zhòng; #8AE5

+諦 > dì; #8AE6

+諧 > xié; #8AE7

+諨 > fú; #8AE8

+諩 > pŭ; #8AE9

+諪 > tíng; #8AEA

+諫 > jiàn; #8AEB

+諬 > qĭ; #8AEC

+諭 > yù; #8AED

+諮 > zī; #8AEE

+諯 > chuán; #8AEF

+諰 > xĭ; #8AF0

+諱 > hùi; #8AF1

+諲 > yīn; #8AF2

+諳 > ān; #8AF3

+諴 > xián; #8AF4

+諵 > nán; #8AF5

+諶 > chén; #8AF6

+諷 > fēng; #8AF7

+諸 > zhū; #8AF8

+諹 > yáng; #8AF9

+諺 > yàn; #8AFA

+諻 > hēng; #8AFB

+諼 > xuān; #8AFC

+諽 > gé; #8AFD

+諾 > nùo; #8AFE

+諿 > qì; #8AFF

+謀 > móu; #8B00

+謁 > yè; #8B01

+謂 > wèi; #8B02

+謄 > téng; #8B04

+謅 > zōu; #8B05

+謆 > shàn; #8B06

+謇 > jiăn; #8B07

+謈 > bó; #8B08

+謉 > kù1; #8B09

+謊 > huăng; #8B0A

+謋 > hùo; #8B0B

+謌 > gē; #8B0C

+謍 > yíng; #8B0D

+謎 > mí; #8B0E

+謏 > xiăo; #8B0F

+謐 > mì; #8B10

+謑 > xì; #8B11

+謒 > qiāng; #8B12

+謓 > chēn; #8B13

+謔 > nǜe; #8B14

+謕 > tí; #8B15

+謖 > sù; #8B16

+謗 > bàng; #8B17

+謘 > chí; #8B18

+謙 > qiān; #8B19

+謚 > shì; #8B1A

+講 > jiăng; #8B1B

+謜 > yuàn; #8B1C

+謝 > xiè; #8B1D

+謞 > xuè; #8B1E

+謟 > tāo; #8B1F

+謠 > yáo; #8B20

+謡 > yáo; #8B21

+謣 > yú; #8B23

+謤 > biāo; #8B24

+謥 > còng; #8B25

+謦 > qìng; #8B26

+謧 > lí; #8B27

+謨 > mó; #8B28

+謩 > mò; #8B29

+謪 > shāng; #8B2A

+謫 > zhé; #8B2B

+謬 > mìu; #8B2C

+謭 > jiăn; #8B2D

+謮 > zé; #8B2E

+謯 > jiē; #8B2F

+謰 > lián; #8B30

+謱 > lóu; #8B31

+謲 > cān; #8B32

+謳 > ōu; #8B33

+謴 > guàn; #8B34

+謵 > xí; #8B35

+謶 > zhúo; #8B36

+謷 > áo; #8B37

+謸 > áo; #8B38

+謹 > jĭn; #8B39

+謺 > zhé; #8B3A

+謻 > yí; #8B3B

+謼 > hù; #8B3C

+謽 > jiàng; #8B3D

+謾 > mán; #8B3E

+謿 > cháo; #8B3F

+譀 > hàn; #8B40

+譁 > huá; #8B41

+譂 > chăn; #8B42

+譃 > xū; #8B43

+譄 > zēng; #8B44

+譅 > sè; #8B45

+譆 > xī; #8B46

+譇 > shē; #8B47

+譈 > dùi; #8B48

+證 > zhèng; #8B49

+譊 > náo; #8B4A

+譋 > lán; #8B4B

+譌 > é; #8B4C

+譍 > yìng; #8B4D

+譎 > jué; #8B4E

+譏 > jī; #8B4F

+譐 > zŭn; #8B50

+譑 > jiăo; #8B51

+譒 > bò; #8B52

+譓 > hùi; #8B53

+譔 > zhuàn; #8B54

+譕 > mú; #8B55

+譖 > zèn; #8B56

+譗 > zhá; #8B57

+識 > shì; #8B58

+譙 > qiáo; #8B59

+譚 > tán; #8B5A

+譛 > zèn; #8B5B

+譜 > pŭ; #8B5C

+譝 > shéng; #8B5D

+譞 > xuān; #8B5E

+譟 > zào; #8B5F

+譠 > tān; #8B60

+譡 > dăng; #8B61

+譢 > sùi; #8B62

+譣 > qiān; #8B63

+譤 > jī; #8B64

+譥 > jiào; #8B65

+警 > jĭng; #8B66

+譧 > lián; #8B67

+譨 > nóu; #8B68

+譩 > yī; #8B69

+譪 > ài; #8B6A

+譫 > zhān; #8B6B

+譬 > pì; #8B6C

+譭 > hŭi; #8B6D

+譮 > huà; #8B6E

+譯 > yì; #8B6F

+議 > yì; #8B70

+譱 > shàn; #8B71

+譲 > ràng; #8B72

+譳 > nòu; #8B73

+譴 > qiăn; #8B74

+譵 > zhùi; #8B75

+譶 > tà; #8B76

+護 > hù; #8B77

+譸 > zhōu; #8B78

+譹 > háo; #8B79

+譺 > yè; #8B7A

+譻 > yīng; #8B7B

+譼 > jiàn; #8B7C

+譽 > yù; #8B7D

+譾 > jiăn; #8B7E

+譿 > hùi; #8B7F

+讀 > dú; #8B80

+讁 > zhé; #8B81

+讂 > xuàn; #8B82

+讃 > zàn; #8B83

+讄 > lĕi; #8B84

+讅 > shĕn; #8B85

+讆 > wèi; #8B86

+讇 > chăn; #8B87

+讈 > lì; #8B88

+讉 > yí; #8B89

+變 > biàn; #8B8A

+讋 > zhé; #8B8B

+讌 > yàn; #8B8C

+讍 > è; #8B8D

+讎 > chóu; #8B8E

+讏 > wèi; #8B8F

+讐 > chóu; #8B90

+讑 > yào; #8B91

+讒 > chán; #8B92

+讓 > ràng; #8B93

+讔 > yĭn; #8B94

+讕 > lán; #8B95

+讖 > chèn; #8B96

+讗 > hùo; #8B97

+讘 > zhé; #8B98

+讙 > huān; #8B99

+讚 > zàn; #8B9A

+讛 > yì; #8B9B

+讜 > dăng; #8B9C

+讝 > zhān; #8B9D

+讞 > yàn; #8B9E

+讟 > dú; #8B9F

+讠 > yán; #8BA0

+计 > jì; #8BA1

+订 > dìng; #8BA2

+讣 > fù; #8BA3

+认 > rèn; #8BA4

+讥 > jī; #8BA5

+讦 > jié; #8BA6

+讧 > hóng; #8BA7

+讨 > tăo; #8BA8

+让 > ràng; #8BA9

+讪 > shàn; #8BAA

+讫 > qì; #8BAB

+讬 > tūo; #8BAC

+训 > xùn; #8BAD

+议 > yì; #8BAE

+讯 > xùn; #8BAF

+记 > jì; #8BB0

+讱 > rèn; #8BB1

+讲 > jiăng; #8BB2

+讳 > hùi; #8BB3

+讴 > ōu; #8BB4

+讵 > jù; #8BB5

+讶 > yà; #8BB6

+讷 > nè; #8BB7

+许 > xŭ; #8BB8

+讹 > é; #8BB9

+论 > lùn; #8BBA

+讻 > xīong; #8BBB

+讼 > sòng; #8BBC

+讽 > fēng; #8BBD

+设 > shè; #8BBE

+访 > făng; #8BBF

+诀 > jué; #8BC0

+证 > zhèng; #8BC1

+诂 > gŭ; #8BC2

+诃 > hē; #8BC3

+评 > píng; #8BC4

+诅 > zŭ; #8BC5

+识 > shì; #8BC6

+诇 > xìong; #8BC7

+诈 > zhà; #8BC8

+诉 > sù; #8BC9

+诊 > zhĕn; #8BCA

+诋 > dĭ; #8BCB

+诌 > zōu; #8BCC

+词 > cí; #8BCD

+诎 > qù; #8BCE

+诏 > zhào; #8BCF

+诐 > bì; #8BD0

+译 > yì; #8BD1

+诒 > yí; #8BD2

+诓 > kuāng; #8BD3

+诔 > lĕi; #8BD4

+试 > shì; #8BD5

+诖 > guà; #8BD6

+诗 > shī; #8BD7

+诘 > jié; #8BD8

+诙 > hūi; #8BD9

+诚 > chéng; #8BDA

+诛 > zhū; #8BDB

+诜 > shēn; #8BDC

+话 > huà; #8BDD

+诞 > dàn; #8BDE

+诟 > gòu; #8BDF

+诠 > quán; #8BE0

+诡 > gŭi; #8BE1

+询 > xún; #8BE2

+诣 > yì; #8BE3

+诤 > zhēng; #8BE4

+该 > gāi; #8BE5

+详 > xiáng; #8BE6

+诧 > chà; #8BE7

+诨 > hùn; #8BE8

+诩 > xŭ; #8BE9

+诪 > zhōu; #8BEA

+诫 > jiè; #8BEB

+诬 > wú; #8BEC

+语 > yŭ; #8BED

+诮 > qiào; #8BEE

+误 > wù; #8BEF

+诰 > gào; #8BF0

+诱 > yòu; #8BF1

+诲 > hùi; #8BF2

+诳 > kuáng; #8BF3

+说 > shūo; #8BF4

+诵 > sòng; #8BF5

+诶 > āi; #8BF6

+请 > qĭng; #8BF7

+诸 > zhū; #8BF8

+诹 > zōu; #8BF9

+诺 > nùo; #8BFA

+读 > dú; #8BFB

+诼 > zhúo; #8BFC

+诽 > fĕi; #8BFD

+课 > kè; #8BFE

+诿 > wĕi; #8BFF

+谀 > yú; #8C00

+谁 > shúi; #8C01

+谂 > shĕn; #8C02

+调 > diào; #8C03

+谄 > chăn; #8C04

+谅 > liàng; #8C05

+谆 > zhūn; #8C06

+谇 > sùi; #8C07

+谈 > tán; #8C08

+谉 > shĕn; #8C09

+谊 > yí; #8C0A

+谋 > móu; #8C0B

+谌 > chén; #8C0C

+谍 > dié; #8C0D

+谎 > huăng; #8C0E

+谏 > jiàn; #8C0F

+谐 > xié; #8C10

+谑 > nǜe; #8C11

+谒 > yè; #8C12

+谓 > wèi; #8C13

+谔 > è; #8C14

+谕 > yù; #8C15

+谖 > xuān; #8C16

+谗 > chán; #8C17

+谘 > zī; #8C18

+谙 > ān; #8C19

+谚 > yàn; #8C1A

+谛 > dì; #8C1B

+谜 > mí; #8C1C

+谝 > pián; #8C1D

+谞 > xŭ; #8C1E

+谟 > mó; #8C1F

+谠 > dăng; #8C20

+谡 > sù; #8C21

+谢 > xiè; #8C22

+谣 > yáo; #8C23

+谤 > bàng; #8C24

+谥 > shì; #8C25

+谦 > qiān; #8C26

+谧 > mì; #8C27

+谨 > jĭn; #8C28

+谩 > mán; #8C29

+谪 > zhé; #8C2A

+谫 > jiăn; #8C2B

+谬 > mìu; #8C2C

+谭 > tán; #8C2D

+谮 > zèn; #8C2E

+谯 > qiáo; #8C2F

+谰 > lán; #8C30

+谱 > pŭ; #8C31

+谲 > jué; #8C32

+谳 > yàn; #8C33

+谴 > qiăn; #8C34

+谵 > zhān; #8C35

+谶 > chèn; #8C36

+谷 > gŭ; #8C37

+谸 > qiān; #8C38

+谹 > hóng; #8C39

+谺 > xiā; #8C3A

+谻 > jué; #8C3B

+谼 > hóng; #8C3C

+谽 > hān; #8C3D

+谾 > hōng; #8C3E

+谿 > xī; #8C3F

+豀 > xī; #8C40

+豁 > hùo; #8C41

+豂 > liáo; #8C42

+豃 > hăn; #8C43

+豄 > dú; #8C44

+豅 > lóng; #8C45

+豆 > dòu; #8C46

+豇 > jiāng; #8C47

+豈 > qĭ; #8C48

+豉 > shì; #8C49

+豊 > lĭ; #8C4A

+豋 > dēng; #8C4B

+豌 > wān; #8C4C

+豍 > bī; #8C4D

+豎 > shù; #8C4E

+豏 > xiàn; #8C4F

+豐 > fēng; #8C50

+豑 > zhì; #8C51

+豒 > zhì; #8C52

+豓 > yàn; #8C53

+豔 > yàn; #8C54

+豕 > shĭ; #8C55

+豖 > chù; #8C56

+豗 > hūi; #8C57

+豘 > tún; #8C58

+豙 > yì; #8C59

+豚 > tún; #8C5A

+豛 > yì; #8C5B

+豜 > jiān; #8C5C

+豝 > bā; #8C5D

+豞 > hòu; #8C5E

+豟 > è; #8C5F

+豠 > cú; #8C60

+象 > xiàng; #8C61

+豢 > huàn; #8C62

+豣 > jiān; #8C63

+豤 > kĕn; #8C64

+豥 > gāi; #8C65

+豦 > qú; #8C66

+豧 > fū; #8C67

+豨 > xī; #8C68

+豩 > bīn; #8C69

+豪 > háo; #8C6A

+豫 > yù; #8C6B

+豬 > zhū; #8C6C

+豭 > jiā; #8C6D

+豯 > xī; #8C6F

+豰 > bó; #8C70

+豱 > wēn; #8C71

+豲 > huán; #8C72

+豳 > bīn; #8C73

+豴 > dí; #8C74

+豵 > zōng; #8C75

+豶 > fén; #8C76

+豷 > yì; #8C77

+豸 > zhì; #8C78

+豹 > bào; #8C79

+豺 > chái; #8C7A

+豻 > hàn; #8C7B

+豼 > pí; #8C7C

+豽 > nà; #8C7D

+豾 > pī; #8C7E

+豿 > gŏu; #8C7F

+貀 > nà; #8C80

+貁 > yòu; #8C81

+貂 > diāo; #8C82

+貃 > mò; #8C83

+貄 > sì; #8C84

+貅 > xīu; #8C85

+貆 > huán; #8C86

+貇 > kūn; #8C87

+貈 > hé; #8C88

+貉 > hé; #8C89

+貊 > mò; #8C8A

+貋 > hàn; #8C8B

+貌 > mào; #8C8C

+貍 > lí; #8C8D

+貎 > ní; #8C8E

+貏 > bĭ; #8C8F

+貐 > yŭ; #8C90

+貑 > jiā; #8C91

+貒 > tuān; #8C92

+貓 > māo; #8C93

+貔 > pí; #8C94

+貕 > xī; #8C95

+貖 > è; #8C96

+貗 > jù; #8C97

+貘 > mò; #8C98

+貙 > chū; #8C99

+貚 > tán; #8C9A

+貛 > huān; #8C9B

+貜 > jué; #8C9C

+貝 > bèi; #8C9D

+貞 > zhēn; #8C9E

+貟 > yuán; #8C9F

+負 > fù; #8CA0

+財 > cái; #8CA1

+貢 > gòng; #8CA2

+貣 > tè; #8CA3

+貤 > yí; #8CA4

+貥 > háng; #8CA5

+貦 > wàn; #8CA6

+貧 > pín; #8CA7

+貨 > hùo; #8CA8

+販 > fàn; #8CA9

+貪 > tān; #8CAA

+貫 > guàn; #8CAB

+責 > zé; #8CAC

+貭 > zhí; #8CAD

+貮 > èr; #8CAE

+貯 > zhŭ; #8CAF

+貰 > shì; #8CB0

+貱 > bì; #8CB1

+貲 > zī; #8CB2

+貳 > èr; #8CB3

+貴 > gùi; #8CB4

+貵 > piăn; #8CB5

+貶 > biăn; #8CB6

+買 > măi; #8CB7

+貸 > dài; #8CB8

+貹 > shèng; #8CB9

+貺 > kuàng; #8CBA

+費 > fèi; #8CBB

+貼 > tiē; #8CBC

+貽 > yí; #8CBD

+貾 > chí; #8CBE

+貿 > mào; #8CBF

+賀 > hè; #8CC0

+賁 > bì; #8CC1

+賂 > lù; #8CC2

+賃 > rèn; #8CC3

+賄 > hùi; #8CC4

+賅 > gāi; #8CC5

+賆 > pián; #8CC6

+資 > zī; #8CC7

+賈 > jiă; #8CC8

+賉 > xù; #8CC9

+賊 > zéi; #8CCA

+賋 > jiăo; #8CCB

+賌 > gài; #8CCC

+賍 > zāng; #8CCD

+賎 > jiàn; #8CCE

+賏 > yìng; #8CCF

+賐 > xùn; #8CD0

+賑 > zhèn; #8CD1

+賒 > shē; #8CD2

+賓 > bīn; #8CD3

+賔 > bīn; #8CD4

+賕 > qíu; #8CD5

+賖 > shē; #8CD6

+賗 > chuàn; #8CD7

+賘 > zāng; #8CD8

+賙 > zhōu; #8CD9

+賚 > lài; #8CDA

+賛 > zàn; #8CDB

+賜 > sì; #8CDC

+賝 > chēn; #8CDD

+賞 > shăng; #8CDE

+賟 > tiăn; #8CDF

+賠 > péi; #8CE0

+賡 > gēng; #8CE1

+賢 > xián; #8CE2

+賣 > mài; #8CE3

+賤 > jiàn; #8CE4

+賥 > sùi; #8CE5

+賦 > fù; #8CE6

+賧 > tàn; #8CE7

+賨 > cóng; #8CE8

+賩 > cóng; #8CE9

+質 > zhí; #8CEA

+賫 > jī; #8CEB

+賬 > zhàng; #8CEC

+賭 > dŭ; #8CED

+賮 > jìn; #8CEE

+賯 > xīong; #8CEF

+賰 > shŭn; #8CF0

+賱 > yŭn; #8CF1

+賲 > băo; #8CF2

+賳 > zāi; #8CF3

+賴 > lài; #8CF4

+賵 > fèng; #8CF5

+賶 > càng; #8CF6

+賷 > jī; #8CF7

+賸 > shèng; #8CF8

+賹 > ài; #8CF9

+賺 > zhuàn; #8CFA

+賻 > fù; #8CFB

+購 > gòu; #8CFC

+賽 > sài; #8CFD

+賾 > zé; #8CFE

+賿 > liáo; #8CFF

+贀 > wèi; #8D00

+贁 > bài; #8D01

+贂 > chĕn; #8D02

+贃 > zhuàn; #8D03

+贄 > zhì; #8D04

+贅 > zhùi; #8D05

+贆 > biāo; #8D06

+贇 > yūn; #8D07

+贈 > zèng; #8D08

+贉 > tăn; #8D09

+贊 > zàn; #8D0A

+贋 > yàn; #8D0B

+贍 > shàn; #8D0D

+贎 > wàn; #8D0E

+贏 > yíng; #8D0F

+贐 > jìn; #8D10

+贑 > găn; #8D11

+贒 > xián; #8D12

+贓 > zāng; #8D13

+贔 > bì; #8D14

+贕 > dú; #8D15

+贖 > shú; #8D16

+贗 > yàn; #8D17

+贙 > xuàn; #8D19

+贚 > lòng; #8D1A

+贛 > gàn; #8D1B

+贜 > zāng; #8D1C

+贝 > bèi; #8D1D

+贞 > zhēn; #8D1E

+负 > fù; #8D1F

+贠 > yuán; #8D20

+贡 > gòng; #8D21

+财 > cái; #8D22

+责 > zé; #8D23

+贤 > xián; #8D24

+败 > bài; #8D25

+账 > zhàng; #8D26

+货 > hùo; #8D27

+质 > zhí; #8D28

+贩 > fàn; #8D29

+贪 > tān; #8D2A

+贫 > pín; #8D2B

+贬 > biăn; #8D2C

+购 > gòu; #8D2D

+贮 > zhŭ; #8D2E

+贯 > guàn; #8D2F

+贰 > èr; #8D30

+贱 > jiàn; #8D31

+贲 > bì; #8D32

+贳 > shì; #8D33

+贴 > tiē; #8D34

+贵 > gùi; #8D35

+贶 > kuàng; #8D36

+贷 > dài; #8D37

+贸 > mào; #8D38

+费 > fèi; #8D39

+贺 > hè; #8D3A

+贻 > yí; #8D3B

+贼 > zéi; #8D3C

+贽 > zhì; #8D3D

+贾 > jiă; #8D3E

+贿 > hùi; #8D3F

+赀 > zī; #8D40

+赁 > rèn; #8D41

+赂 > lù; #8D42

+赃 > zāng; #8D43

+资 > zī; #8D44

+赅 > gāi; #8D45

+赆 > jìn; #8D46

+赇 > qíu; #8D47

+赈 > zhèn; #8D48

+赉 > lài; #8D49

+赊 > shē; #8D4A

+赋 > fù; #8D4B

+赌 > dŭ; #8D4C

+赍 > jī; #8D4D

+赎 > shú; #8D4E

+赏 > shăng; #8D4F

+赐 > sì; #8D50

+赑 > bì; #8D51

+赒 > zhōu; #8D52

+赓 > gēng; #8D53

+赔 > péi; #8D54

+赕 > tàn; #8D55

+赖 > lài; #8D56

+赗 > fèng; #8D57

+赘 > zhùi; #8D58

+赙 > fù; #8D59

+赚 > zhuàn; #8D5A

+赛 > sài; #8D5B

+赜 > zé; #8D5C

+赝 > yàn; #8D5D

+赞 > zàn; #8D5E

+赟 > yūn; #8D5F

+赠 > zèng; #8D60

+赡 > shàn; #8D61

+赢 > yíng; #8D62

+赣 > gàn; #8D63

+赤 > chì; #8D64

+赥 > xì; #8D65

+赦 > shè; #8D66

+赧 > năn; #8D67

+赨 > xíong; #8D68

+赩 > xì; #8D69

+赪 > chēng; #8D6A

+赫 > hè; #8D6B

+赬 > chēng; #8D6C

+赭 > zhĕ; #8D6D

+赮 > xiá; #8D6E

+赯 > táng; #8D6F

+走 > zŏu; #8D70

+赱 > zŏu; #8D71

+赲 > lì; #8D72

+赳 > jĭu; #8D73

+赴 > fù; #8D74

+赵 > zhào; #8D75

+赶 > găn; #8D76

+起 > qĭ; #8D77

+赸 > shàn; #8D78

+赹 > qíong; #8D79

+赺 > qín; #8D7A

+赻 > xiăn; #8D7B

+赼 > cī; #8D7C

+赽 > jué; #8D7D

+赾 > qĭn; #8D7E

+赿 > chí; #8D7F

+趀 > cī; #8D80

+趁 > chèn; #8D81

+趂 > chèn; #8D82

+趃 > dié; #8D83

+趄 > jū; #8D84

+超 > chāo; #8D85

+趆 > dī; #8D86

+趇 > sè; #8D87

+趈 > zhān; #8D88

+趉 > zhú; #8D89

+越 > yuè; #8D8A

+趋 > qū; #8D8B

+趌 > jié; #8D8C

+趍 > chí; #8D8D

+趎 > chú; #8D8E

+趏 > guā; #8D8F

+趐 > xuè; #8D90

+趑 > cī; #8D91

+趒 > tiáo; #8D92

+趓 > dŭo; #8D93

+趔 > liè; #8D94

+趕 > găn; #8D95

+趖 > sūo; #8D96

+趗 > cù; #8D97

+趘 > xí; #8D98

+趙 > zhào; #8D99

+趚 > sù; #8D9A

+趛 > yĭn; #8D9B

+趜 > jú; #8D9C

+趝 > jiàn; #8D9D

+趞 > què; #8D9E

+趟 > tàng; #8D9F

+趠 > chùo; #8DA0

+趡 > cŭi; #8DA1

+趢 > lù; #8DA2

+趣 > qù; #8DA3

+趤 > dàng; #8DA4

+趥 > qīu; #8DA5

+趦 > zī; #8DA6

+趧 > tí; #8DA7

+趨 > qū; #8DA8

+趩 > chì; #8DA9

+趪 > huáng; #8DAA

+趫 > qiáo; #8DAB

+趬 > qiáo; #8DAC

+趭 > yào; #8DAD

+趮 > zào; #8DAE

+趯 > tì; #8DAF

+趱 > zăn; #8DB1

+趲 > zăn; #8DB2

+足 > zú; #8DB3

+趴 > pā; #8DB4

+趵 > bào; #8DB5

+趶 > kù; #8DB6

+趷 > kē; #8DB7

+趸 > dŭn; #8DB8

+趹 > jué; #8DB9

+趺 > fū; #8DBA

+趻 > chĕn; #8DBB

+趼 > jiăn; #8DBC

+趽 > fàng; #8DBD

+趾 > zhĭ; #8DBE

+趿 > sà; #8DBF

+跀 > yuè; #8DC0

+跁 > pá; #8DC1

+跂 > qí; #8DC2

+跃 > yuè; #8DC3

+跄 > qiāng; #8DC4

+跅 > tùo; #8DC5

+跆 > tái; #8DC6

+跇 > yì; #8DC7

+跈 > niăn; #8DC8

+跉 > líng; #8DC9

+跊 > mèi; #8DCA

+跋 > bá; #8DCB

+跌 > diē; #8DCC

+跍 > kū; #8DCD

+跎 > túo; #8DCE

+跏 > jiā; #8DCF

+跐 > cĭ; #8DD0

+跑 > păo; #8DD1

+跒 > qiă; #8DD2

+跓 > zhù; #8DD3

+跔 > jū; #8DD4

+跕 > dié; #8DD5

+跖 > zhī; #8DD6

+跗 > fū; #8DD7

+跘 > pán; #8DD8

+跙 > jŭ; #8DD9

+跚 > shān; #8DDA

+跛 > bŏ; #8DDB

+跜 > ní; #8DDC

+距 > jù; #8DDD

+跞 > lì; #8DDE

+跟 > gēn; #8DDF

+跠 > yí; #8DE0

+跡 > jī; #8DE1

+跢 > dài; #8DE2

+跣 > xiăn; #8DE3

+跤 > jiāo; #8DE4

+跥 > dùo; #8DE5

+跦 > zhū; #8DE6

+跧 > zhuān; #8DE7

+跨 > kuà; #8DE8

+跩 > zhuăi; #8DE9

+跪 > gùi; #8DEA

+跫 > qíong; #8DEB

+跬 > kŭi; #8DEC

+跭 > xiáng; #8DED

+跮 > chì; #8DEE

+路 > lù; #8DEF

+跰 > bèng; #8DF0

+跱 > zhì; #8DF1

+跲 > jiá; #8DF2

+跳 > tiào; #8DF3

+跴 > căi; #8DF4

+践 > jiàn; #8DF5

+跶 > tà; #8DF6

+跷 > qiāo; #8DF7

+跸 > bì; #8DF8

+跹 > xiān; #8DF9

+跺 > dùo; #8DFA

+跻 > jī; #8DFB

+跼 > jú; #8DFC

+跽 > jì; #8DFD

+跾 > shú; #8DFE

+跿 > tú; #8DFF

+踀 > chù; #8E00

+踁 > jìng; #8E01

+踂 > niè; #8E02

+踃 > xiāo; #8E03

+踄 > bó; #8E04

+踅 > chì; #8E05

+踆 > qūn; #8E06

+踇 > mŏu; #8E07

+踈 > shū; #8E08

+踉 > láng; #8E09

+踊 > yŏng; #8E0A

+踋 > jiăo; #8E0B

+踌 > chóu; #8E0C

+踍 > qiāo; #8E0D

+踏 > tà; #8E0F

+踐 > jiàn; #8E10

+踑 > qí; #8E11

+踒 > wō; #8E12

+踓 > wĕi; #8E13

+踔 > zhúo; #8E14

+踕 > jié; #8E15

+踖 > jí; #8E16

+踗 > niē; #8E17

+踘 > jú; #8E18

+踙 > jū; #8E19

+踚 > lún; #8E1A

+踛 > lù; #8E1B

+踜 > lèng; #8E1C

+踝 > huái; #8E1D

+踞 > jù; #8E1E

+踟 > chí; #8E1F

+踠 > wăn; #8E20

+踡 > quán; #8E21

+踢 > tī; #8E22

+踣 > bó; #8E23

+踤 > zú; #8E24

+踥 > qiè; #8E25

+踦 > jĭ; #8E26

+踧 > cù; #8E27

+踨 > zōng; #8E28

+踩 > căi; #8E29

+踪 > zōng; #8E2A

+踫 > pèng; #8E2B

+踬 > zhì; #8E2C

+踭 > zhēng; #8E2D

+踮 > diăn; #8E2E

+踯 > zhí; #8E2F

+踰 > yú; #8E30

+踱 > dùo; #8E31

+踲 > dùn; #8E32

+踳 > chŭn; #8E33

+踴 > yŏng; #8E34

+踵 > zhŏng; #8E35

+踶 > dì; #8E36

+踷 > zhĕ; #8E37

+踸 > chĕn; #8E38

+踹 > chuài; #8E39

+踺 > jiàn; #8E3A

+踻 > guā; #8E3B

+踼 > táng; #8E3C

+踽 > jŭ; #8E3D

+踾 > fú; #8E3E

+踿 > zú; #8E3F

+蹀 > dié; #8E40

+蹁 > pián; #8E41

+蹂 > róu; #8E42

+蹃 > nùo; #8E43

+蹄 > tí; #8E44

+蹅 > chă; #8E45

+蹆 > tŭi; #8E46

+蹇 > jiăn; #8E47

+蹈 > dào; #8E48

+蹉 > cūo; #8E49

+蹊 > xī; #8E4A

+蹋 > tà; #8E4B

+蹌 > qiāng; #8E4C

+蹍 > zhăn; #8E4D

+蹎 > diān; #8E4E

+蹏 > tí; #8E4F

+蹐 > jí; #8E50

+蹑 > niè; #8E51

+蹒 > mán; #8E52

+蹓 > līu; #8E53

+蹔 > zhàn; #8E54

+蹕 > bì; #8E55

+蹖 > chōng; #8E56

+蹗 > lù; #8E57

+蹘 > liáo; #8E58

+蹙 > cù; #8E59

+蹚 > tāng; #8E5A

+蹛 > dài; #8E5B

+蹜 > sūo; #8E5C

+蹝 > xĭ; #8E5D

+蹞 > kŭi; #8E5E

+蹟 > jī; #8E5F

+蹠 > zhí; #8E60

+蹡 > qiāng; #8E61

+蹢 > dí; #8E62

+蹣 > mán; #8E63

+蹤 > zōng; #8E64

+蹥 > lián; #8E65

+蹦 > bèng; #8E66

+蹧 > zāo; #8E67

+蹨 > niăn; #8E68

+蹩 > bié; #8E69

+蹪 > túi; #8E6A

+蹫 > jú; #8E6B

+蹬 > dèng; #8E6C

+蹭 > cèng; #8E6D

+蹮 > xiān; #8E6E

+蹯 > fán; #8E6F

+蹰 > chú; #8E70

+蹱 > zhōng; #8E71

+蹲 > dūn; #8E72

+蹳 > bō; #8E73

+蹴 > cù; #8E74

+蹵 > zú; #8E75

+蹶 > jué; #8E76

+蹷 > jué; #8E77

+蹸 > lìn; #8E78

+蹹 > tà; #8E79

+蹺 > qiāo; #8E7A

+蹻 > qiāo; #8E7B

+蹼 > pú; #8E7C

+蹽 > liāo; #8E7D

+蹾 > dūn; #8E7E

+蹿 > cuān; #8E7F

+躀 > kuàng; #8E80

+躁 > zào; #8E81

+躂 > tà; #8E82

+躃 > bì; #8E83

+躄 > bì; #8E84

+躅 > zhú; #8E85

+躆 > jù; #8E86

+躇 > chú; #8E87

+躈 > qiào; #8E88

+躉 > dŭn; #8E89

+躊 > chóu; #8E8A

+躋 > jī; #8E8B

+躌 > wŭ; #8E8C

+躍 > yuè; #8E8D

+躎 > niăn; #8E8E

+躏 > lìn; #8E8F

+躐 > liè; #8E90

+躑 > zhí; #8E91

+躒 > lì; #8E92

+躓 > zhì; #8E93

+躔 > chán; #8E94

+躕 > chú; #8E95

+躖 > duàn; #8E96

+躗 > wèi; #8E97

+躘 > lóng; #8E98

+躙 > lìn; #8E99

+躚 > xiān; #8E9A

+躛 > wèi; #8E9B

+躜 > zuān; #8E9C

+躝 > lán; #8E9D

+躞 > xiè; #8E9E

+躟 > ráng; #8E9F

+躠 > xiĕ; #8EA0

+躡 > niè; #8EA1

+躢 > tà; #8EA2

+躣 > qú; #8EA3

+躤 > jiè; #8EA4

+躥 > cuān; #8EA5

+躦 > zuān; #8EA6

+躧 > xĭ; #8EA7

+躨 > kúi; #8EA8

+躩 > jué; #8EA9

+躪 > lìn; #8EAA

+身 > shēn; #8EAB

+躬 > gōng; #8EAC

+躭 > dān; #8EAD

+躯 > qū; #8EAF

+躰 > tĭ; #8EB0

+躱 > dŭo; #8EB1

+躲 > dŭo; #8EB2

+躳 > gōng; #8EB3

+躴 > láng; #8EB4

+躶 > lŭo; #8EB6

+躷 > ăi; #8EB7

+躸 > jī; #8EB8

+躹 > jú; #8EB9

+躺 > tăng; #8EBA

+躽 > yăn; #8EBD

+躿 > kāng; #8EBF

+軀 > qū; #8EC0

+軁 > lóu; #8EC1

+軂 > lào; #8EC2

+軃 > tŭo; #8EC3

+軄 > zhí; #8EC4

+軆 > tĭ; #8EC6

+軇 > dào; #8EC7

+軉 > yù; #8EC9

+車 > chē; #8ECA

+軋 > yà; #8ECB

+軌 > gŭi; #8ECC

+軍 > jūn; #8ECD

+軎 > wèi; #8ECE

+軏 > yuè; #8ECF

+軐 > xìn; #8ED0

+軑 > dì; #8ED1

+軒 > xuān; #8ED2

+軓 > fàn; #8ED3

+軔 > rèn; #8ED4

+軕 > shān; #8ED5

+軖 > qiáng; #8ED6

+軗 > shū; #8ED7

+軘 > tún; #8ED8

+軙 > chén; #8ED9

+軚 > dài; #8EDA

+軛 > è; #8EDB

+軜 > nà; #8EDC

+軝 > qí; #8EDD

+軞 > máo; #8EDE

+軟 > ruăn; #8EDF

+軠 > rèn; #8EE0

+軡 > făn; #8EE1

+転 > zhuăn; #8EE2

+軣 > hōng; #8EE3

+軤 > hū; #8EE4

+軥 > qú; #8EE5

+軦 > huàng; #8EE6

+軧 > dĭ; #8EE7

+軨 > líng; #8EE8

+軩 > dài; #8EE9

+軪 > āo; #8EEA

+軫 > zhĕn; #8EEB

+軬 > fàn; #8EEC

+軭 > kuāng; #8EED

+軮 > ăng; #8EEE

+軯 > pēng; #8EEF

+軰 > bèi; #8EF0

+軱 > gū; #8EF1

+軲 > kū; #8EF2

+軳 > páo; #8EF3

+軴 > zhù; #8EF4

+軵 > rŏng; #8EF5

+軶 > è; #8EF6

+軷 > bá; #8EF7

+軸 > zhóu; #8EF8

+軹 > zhĭ; #8EF9

+軺 > yáo; #8EFA

+軻 > kē; #8EFB

+軼 > yì; #8EFC

+軽 > qīng; #8EFD

+軾 > shì; #8EFE

+軿 > píng; #8EFF

+輀 > ér; #8F00

+輁 > qíong; #8F01

+輂 > jú; #8F02

+較 > jiào; #8F03

+輄 > guāng; #8F04

+輅 > lù; #8F05

+輆 > kăi; #8F06

+輇 > quán; #8F07

+輈 > zhōu; #8F08

+載 > zài; #8F09

+輊 > zhì; #8F0A

+輋 > shē; #8F0B

+輌 > liàng; #8F0C

+輍 > yù; #8F0D

+輎 > shāo; #8F0E

+輏 > yóu; #8F0F

+輐 > huăn; #8F10

+輑 > yŭn; #8F11

+輒 > zhé; #8F12

+輓 > wăn; #8F13

+輔 > fŭ; #8F14

+輕 > qīng; #8F15

+輖 > zhōu; #8F16

+輗 > ní; #8F17

+輘 > líng; #8F18

+輙 > zhé; #8F19

+輚 > zhàn; #8F1A

+輛 > liàng; #8F1B

+輜 > zī; #8F1C

+輝 > hūi; #8F1D

+輞 > wăng; #8F1E

+輟 > chùo; #8F1F

+輠 > gŭo; #8F20

+輡 > kăn; #8F21

+輢 > yĭ; #8F22

+輣 > péng; #8F23

+輤 > qiàn; #8F24

+輥 > gŭn; #8F25

+輦 > niăn; #8F26

+輧 > pián; #8F27

+輨 > guăn; #8F28

+輩 > bèi; #8F29

+輪 > lún; #8F2A

+輫 > pái; #8F2B

+輬 > liáng; #8F2C

+輭 > ruăn; #8F2D

+輮 > róu; #8F2E

+輯 > jí; #8F2F

+輰 > yáng; #8F30

+輱 > xián; #8F31

+輲 > chuán; #8F32

+輳 > còu; #8F33

+輴 > qūn; #8F34

+輵 > gé; #8F35

+輶 > yóu; #8F36

+輷 > hōng; #8F37

+輸 > shū; #8F38

+輹 > fù; #8F39

+輺 > zī; #8F3A

+輻 > fú; #8F3B

+輼 > wēn; #8F3C

+輽 > bèn; #8F3D

+輾 > zhăn; #8F3E

+輿 > yú; #8F3F

+轀 > wēn; #8F40

+轁 > tāo; #8F41

+轂 > gŭ; #8F42

+轃 > zhēn; #8F43

+轄 > xiá; #8F44

+轅 > yuán; #8F45

+轆 > lù; #8F46

+轇 > jīu; #8F47

+轈 > cháo; #8F48

+轉 > zhuăn; #8F49

+轊 > wèi; #8F4A

+轋 > hún; #8F4B

+轍 > chè; #8F4D

+轎 > jiào; #8F4E

+轏 > zhàn; #8F4F

+轐 > pú; #8F50

+轑 > lăo; #8F51

+轒 > fén; #8F52

+轓 > fān; #8F53

+轔 > lín; #8F54

+轕 > gé; #8F55

+轖 > sè; #8F56

+轗 > kăn; #8F57

+轘 > huàn; #8F58

+轙 > yĭ; #8F59

+轚 > jí; #8F5A

+轛 > dùi; #8F5B

+轜 > ér; #8F5C

+轝 > yú; #8F5D

+轞 > xiàn; #8F5E

+轟 > hōng; #8F5F

+轠 > lĕi; #8F60

+轡 > pèi; #8F61

+轢 > lì; #8F62

+轣 > lì; #8F63

+轤 > lú; #8F64

+轥 > lìn; #8F65

+车 > chē; #8F66

+轧 > yà; #8F67

+轨 > gŭi; #8F68

+轩 > xuān; #8F69

+轪 > dì; #8F6A

+轫 > rèn; #8F6B

+转 > zhuăn; #8F6C

+轭 > è; #8F6D

+轮 > lún; #8F6E

+软 > ruăn; #8F6F

+轰 > hōng; #8F70

+轱 > kū; #8F71

+轲 > kē; #8F72

+轳 > lú; #8F73

+轴 > zhóu; #8F74

+轵 > zhĭ; #8F75

+轶 > yì; #8F76

+轷 > hū; #8F77

+轸 > zhĕn; #8F78

+轹 > lì; #8F79

+轺 > yáo; #8F7A

+轻 > qīng; #8F7B

+轼 > shì; #8F7C

+载 > zài; #8F7D

+轾 > zhì; #8F7E

+轿 > jiào; #8F7F

+辀 > zhōu; #8F80

+辁 > quán; #8F81

+辂 > lù; #8F82

+较 > jiào; #8F83

+辄 > zhé; #8F84

+辅 > fŭ; #8F85

+辆 > liàng; #8F86

+辇 > niăn; #8F87

+辈 > bèi; #8F88

+辉 > hūi; #8F89

+辊 > gŭn; #8F8A

+辋 > wăng; #8F8B

+辌 > liáng; #8F8C

+辍 > chùo; #8F8D

+辎 > zī; #8F8E

+辏 > còu; #8F8F

+辐 > fú; #8F90

+辑 > jí; #8F91

+辒 > wēn; #8F92

+输 > shū; #8F93

+辔 > pèi; #8F94

+辕 > yuán; #8F95

+辖 > xiá; #8F96

+辗 > zhăn; #8F97

+辘 > lù; #8F98

+辙 > chè; #8F99

+辚 > lín; #8F9A

+辛 > xīn; #8F9B

+辜 > gū; #8F9C

+辝 > cí; #8F9D

+辞 > cí; #8F9E

+辟 > pì; #8F9F

+辠 > zùi; #8FA0

+辡 > biàn; #8FA1

+辢 > là; #8FA2

+辣 > là; #8FA3

+辤 > cí; #8FA4

+辥 > xuē; #8FA5

+辦 > bàn; #8FA6

+辧 > biàn; #8FA7

+辨 > biàn; #8FA8

+辩 > biàn; #8FA9

+辫 > biàn; #8FAB

+辬 > bān; #8FAC

+辭 > cí; #8FAD

+辮 > biàn; #8FAE

+辯 > biàn; #8FAF

+辰 > chén; #8FB0

+辱 > rù; #8FB1

+農 > nóng; #8FB2

+辳 > nóng; #8FB3

+辴 > zhĕn; #8FB4

+辵 > chùo; #8FB5

+辶 > chùo; #8FB6

+辸 > réng; #8FB8

+边 > biān; #8FB9

+辺 > biān; #8FBA

+辽 > liáo; #8FBD

+达 > dá; #8FBE

+辿 > chān; #8FBF

+迀 > gān; #8FC0

+迁 > qiān; #8FC1

+迂 > yū; #8FC2

+迃 > yū; #8FC3

+迄 > qì; #8FC4

+迅 > xùn; #8FC5

+迆 > yĭ; #8FC6

+过 > gùo; #8FC7

+迈 > mài; #8FC8

+迉 > qí; #8FC9

+迊 > zā; #8FCA

+迋 > wàng; #8FCB

+迌 > jia; #8FCC

+迍 > zhūn; #8FCD

+迎 > yíng; #8FCE

+迏 > tì; #8FCF

+运 > yùn; #8FD0

+近 > jìn; #8FD1

+迒 > háng; #8FD2

+迓 > yà; #8FD3

+返 > făn; #8FD4

+迕 > wù; #8FD5

+迖 > dá; #8FD6

+迗 > é; #8FD7

+还 > huán; #8FD8

+这 > zhè; #8FD9

+进 > jìn; #8FDB

+远 > yuăn; #8FDC

+违 > wéi; #8FDD

+连 > lián; #8FDE

+迟 > chí; #8FDF

+迠 > chè; #8FE0

+迡 > nì; #8FE1

+迢 > tiáo; #8FE2

+迣 > zhì; #8FE3

+迤 > yĭ; #8FE4

+迥 > jĭong; #8FE5

+迦 > jiā; #8FE6

+迧 > chén; #8FE7

+迨 > dài; #8FE8

+迩 > ĕr; #8FE9

+迪 > dí; #8FEA

+迫 > pò; #8FEB

+迬 > wăng; #8FEC

+迭 > dié; #8FED

+迮 > zé; #8FEE

+迯 > táo; #8FEF

+述 > shù; #8FF0

+迱 > túo; #8FF1

+迳 > jìng; #8FF3

+迴 > húi; #8FF4

+迵 > tóng; #8FF5

+迶 > yòu; #8FF6

+迷 > mí; #8FF7

+迸 > bèng; #8FF8

+迹 > jī; #8FF9

+迺 > năi; #8FFA

+迻 > yí; #8FFB

+迼 > jié; #8FFC

+追 > zhūi; #8FFD

+迾 > liè; #8FFE

+迿 > xùn; #8FFF

+退 > tùi; #9000

+送 > sòng; #9001

+适 > guā; #9002

+逃 > táo; #9003

+逄 > páng; #9004

+逅 > hòu; #9005

+逆 > nì; #9006

+逇 > dùn; #9007

+逈 > jĭong; #9008

+选 > xuăn; #9009

+逊 > xùn; #900A

+逋 > bū; #900B

+逌 > yóu; #900C

+逍 > xiāo; #900D

+逎 > qíu; #900E

+透 > tòu; #900F

+逐 > zhú; #9010

+逑 > qíu; #9011

+递 > dì; #9012

+逓 > dì; #9013

+途 > tú; #9014

+逕 > jìng; #9015

+逖 > tì; #9016

+逗 > dòu; #9017

+逘 > yĭ; #9018

+這 > zhè; #9019

+通 > tōng; #901A

+逛 > guàng; #901B

+逜 > wù; #901C

+逝 > shì; #901D

+逞 > chĕng; #901E

+速 > sù; #901F

+造 > zào; #9020

+逡 > qūn; #9021

+逢 > féng; #9022

+連 > lián; #9023

+逤 > sùo; #9024

+逥 > húi; #9025

+逦 > lĭ; #9026

+逨 > lái; #9028

+逩 > bèn; #9029

+逪 > cùo; #902A

+逫 > jué; #902B

+逬 > bèng; #902C

+逭 > huàn; #902D

+逮 > dài; #902E

+逯 > lù; #902F

+逰 > yóu; #9030

+週 > zhōu; #9031

+進 > jìn; #9032

+逳 > yù; #9033

+逴 > chùo; #9034

+逵 > kúi; #9035

+逶 > wēi; #9036

+逷 > tì; #9037

+逸 > yì; #9038

+逹 > dá; #9039

+逺 > yuăn; #903A

+逻 > lúo; #903B

+逼 > bī; #903C

+逽 > nùo; #903D

+逾 > yú; #903E

+逿 > dàng; #903F

+遀 > súi; #9040

+遁 > dùn; #9041

+遂 > sùi; #9042

+遃 > yăn; #9043

+遄 > chuán; #9044

+遅 > chí; #9045

+遆 > tí; #9046

+遇 > yù; #9047

+遈 > shí; #9048

+遉 > zhēn; #9049

+遊 > yóu; #904A

+運 > yùn; #904B

+遌 > è; #904C

+遍 > biàn; #904D

+過 > gùo; #904E

+遏 > è; #904F

+遐 > xiá; #9050

+遑 > huáng; #9051

+遒 > qíu; #9052

+道 > dào; #9053

+達 > dá; #9054

+違 > wéi; #9055

+遗 > yí; #9057

+遘 > gòu; #9058

+遙 > yáo; #9059

+遚 > chù; #905A

+遛 > líu; #905B

+遜 > xùn; #905C

+遝 > tà; #905D

+遞 > dì; #905E

+遟 > chí; #905F

+遠 > yuăn; #9060

+遡 > sù; #9061

+遢 > tà; #9062

+遣 > qiăn; #9063

+遥 > yáo; #9065

+遦 > guàn; #9066

+遧 > zhāng; #9067

+遨 > áo; #9068

+適 > shì; #9069

+遪 > cè; #906A

+遫 > chì; #906B

+遬 > sù; #906C

+遭 > zāo; #906D

+遮 > zhē; #906E

+遯 > dùn; #906F

+遰 > dì; #9070

+遱 > lóu; #9071

+遲 > chí; #9072

+遳 > cūo; #9073

+遴 > lín; #9074

+遵 > zūn; #9075

+遶 > rào; #9076

+遷 > qiān; #9077

+選 > xuăn; #9078

+遹 > yù; #9079

+遺 > yí; #907A

+遻 > wù; #907B

+遼 > liáo; #907C

+遽 > jù; #907D

+遾 > shì; #907E

+避 > bì; #907F

+邀 > yāo; #9080

+邁 > mài; #9081

+邂 > xiè; #9082

+邃 > sùi; #9083

+還 > huán; #9084

+邅 > zhān; #9085

+邆 > téng; #9086

+邇 > ĕr; #9087

+邈 > miăo; #9088

+邉 > biān; #9089

+邊 > biān; #908A

+邋 > lá; #908B

+邌 > lí; #908C

+邍 > yuán; #908D

+邎 > yáo; #908E

+邏 > lúo; #908F

+邐 > lĭ; #9090

+邑 > yì; #9091

+邒 > tíng; #9092

+邓 > dèng; #9093

+邔 > qĭ; #9094

+邕 > yōng; #9095

+邖 > shān; #9096

+邗 > hán; #9097

+邘 > yú; #9098

+邙 > máng; #9099

+邚 > rú; #909A

+邛 > qíong; #909B

+邝 > kuàng; #909D

+邞 > fū; #909E

+邟 > kàng; #909F

+邠 > bīn; #90A0

+邡 > fāng; #90A1

+邢 > xíng; #90A2

+那 > nà; #90A3

+邤 > xin; #90A4

+邥 > shĕn; #90A5

+邦 > bāng; #90A6

+邧 > yuán; #90A7

+邨 > cūn; #90A8

+邩 > hŭo; #90A9

+邪 > xié; #90AA

+邫 > bāng; #90AB

+邬 > wū; #90AC

+邭 > jù; #90AD

+邮 > yóu; #90AE

+邯 > hán; #90AF

+邰 > tái; #90B0

+邱 > qīu; #90B1

+邲 > bì; #90B2

+邳 > péi; #90B3

+邴 > bĭng; #90B4

+邵 > shào; #90B5

+邶 > bèi; #90B6

+邷 > wă; #90B7

+邸 > dĭ; #90B8

+邹 > zōu; #90B9

+邺 > yè; #90BA

+邻 > lín; #90BB

+邼 > kuāng; #90BC

+邽 > gūi; #90BD

+邾 > zhū; #90BE

+邿 > shī; #90BF

+郀 > kū; #90C0

+郁 > yù; #90C1

+郂 > gāi; #90C2

+郃 > gé; #90C3

+郄 > xì; #90C4

+郅 > zhì; #90C5

+郆 > jí; #90C6

+郇 > xún; #90C7

+郈 > hòu; #90C8

+郉 > xíng; #90C9

+郊 > jiāo; #90CA

+郋 > xí; #90CB

+郌 > gūi; #90CC

+郍 > núo; #90CD

+郎 > láng; #90CE

+郏 > jiá; #90CF

+郐 > kuài; #90D0

+郑 > zhèng; #90D1

+郓 > yùn; #90D3

+郔 > yán; #90D4

+郕 > chéng; #90D5

+郖 > dōu; #90D6

+郗 > chī; #90D7

+郘 > lǚ; #90D8

+郙 > fŭ; #90D9

+郚 > wú; #90DA

+郛 > fú; #90DB

+郜 > gào; #90DC

+郝 > hăo; #90DD

+郞 > láng; #90DE

+郟 > jiá; #90DF

+郠 > gĕng; #90E0

+郡 > jùn; #90E1

+郢 > yĭng; #90E2

+郣 > bó; #90E3

+郤 > xì; #90E4

+郥 > bèi; #90E5

+郦 > lì; #90E6

+郧 > yún; #90E7

+部 > bù; #90E8

+郩 > xiáo; #90E9

+郪 > qī; #90EA

+郫 > pí; #90EB

+郬 > qīng; #90EC

+郭 > gūo; #90ED

+郮 > zhou; #90EE

+郯 > tán; #90EF

+郰 > zōu; #90F0

+郱 > píng; #90F1

+郲 > lái; #90F2

+郳 > ní; #90F3

+郴 > chēn; #90F4

+郵 > yóu; #90F5

+郶 > bù; #90F6

+郷 > xiāng; #90F7

+郸 > dān; #90F8

+郹 > jú; #90F9

+郺 > yōng; #90FA

+郻 > qiāo; #90FB

+郼 > yī; #90FC

+都 > dū; #90FD

+郾 > yăn; #90FE

+郿 > méi; #90FF

+鄀 > rùo; #9100

+鄁 > bèi; #9101

+鄂 > è; #9102

+鄃 > yú; #9103

+鄄 > juàn; #9104

+鄅 > yŭ; #9105

+鄆 > yùn; #9106

+鄇 > hòu; #9107

+鄈 > kúi; #9108

+鄉 > xiāng; #9109

+鄊 > xiāng; #910A

+鄋 > sōu; #910B

+鄌 > táng; #910C

+鄍 > míng; #910D

+鄎 > xì; #910E

+鄏 > rù; #910F

+鄐 > chù; #9110

+鄑 > zī; #9111

+鄒 > zōu; #9112

+鄓 > jú; #9113

+鄔 > wū; #9114

+鄕 > xiāng; #9115

+鄖 > yún; #9116

+鄗 > hào; #9117

+鄘 > yōng; #9118

+鄙 > bĭ; #9119

+鄚 > mò; #911A

+鄛 > cháo; #911B

+鄜 > fū; #911C

+鄝 > liăo; #911D

+鄞 > yín; #911E

+鄟 > zhuān; #911F

+鄠 > hù; #9120

+鄡 > qiāo; #9121

+鄢 > yān; #9122

+鄣 > zhāng; #9123

+鄤 > fàn; #9124

+鄥 > qiāo; #9125

+鄦 > xŭ; #9126

+鄧 > dèng; #9127

+鄨 > bì; #9128

+鄩 > xín; #9129

+鄪 > bì; #912A

+鄫 > céng; #912B

+鄬 > wéi; #912C

+鄭 > zhèng; #912D

+鄮 > mào; #912E

+鄯 > shàn; #912F

+鄰 > lín; #9130

+鄱 > pó; #9131

+鄲 > dān; #9132

+鄳 > méng; #9133

+鄴 > yè; #9134

+鄵 > cāo; #9135

+鄶 > kuài; #9136

+鄷 > fēng; #9137

+鄸 > méng; #9138

+鄹 > zōu; #9139

+鄺 > kuàng; #913A

+鄻 > lián; #913B

+鄼 > zàn; #913C

+鄽 > chán; #913D

+鄾 > yōu; #913E

+鄿 > qí; #913F

+酀 > yān; #9140

+酁 > chán; #9141

+酂 > zàn; #9142

+酃 > líng; #9143

+酄 > huān; #9144

+酅 > xī; #9145

+酆 > fēng; #9146

+酇 > zàn; #9147

+酈 > lì; #9148

+酉 > yŏu; #9149

+酊 > dĭng; #914A

+酋 > qíu; #914B

+酌 > zhúo; #914C

+配 > pèi; #914D

+酎 > zhòu; #914E

+酏 > yí; #914F

+酐 > hăng; #9150

+酑 > yŭ; #9151

+酒 > jĭu; #9152

+酓 > yăn; #9153

+酔 > zùi; #9154

+酕 > máo; #9155

+酖 > dān; #9156

+酗 > xù; #9157

+酘 > tóu; #9158

+酙 > zhēn; #9159

+酚 > fēn; #915A

+酝 > yùn; #915D

+酞 > tài; #915E

+酟 > tiān; #915F

+酠 > qiă; #9160

+酡 > túo; #9161

+酢 > zùo; #9162

+酣 > hān; #9163

+酤 > gū; #9164

+酥 > sū; #9165

+酦 > pò; #9166

+酧 > chóu; #9167

+酨 > zài; #9168

+酩 > míng; #9169

+酪 > lùo; #916A

+酫 > chùo; #916B

+酬 > chóu; #916C

+酭 > yòu; #916D

+酮 > tóng; #916E

+酯 > zhĭ; #916F

+酰 > xiān; #9170

+酱 > jiàng; #9171

+酲 > chéng; #9172

+酳 > yìn; #9173

+酴 > tú; #9174

+酵 > xiào; #9175

+酶 > méi; #9176

+酷 > kù; #9177

+酸 > suān; #9178

+酹 > lèi; #9179

+酺 > pú; #917A

+酻 > zùi; #917B

+酼 > hăi; #917C

+酽 > yàn; #917D

+酾 > xĭ; #917E

+酿 > niàng; #917F

+醀 > wéi; #9180

+醁 > lù; #9181

+醂 > lăn; #9182

+醃 > yān; #9183

+醄 > táo; #9184

+醅 > pēi; #9185

+醆 > zhăn; #9186

+醇 > chún; #9187

+醈 > tán; #9188

+醉 > zùi; #9189

+醊 > chùo; #918A

+醋 > cù; #918B

+醌 > kūn; #918C

+醍 > tí; #918D

+醎 > mián; #918E

+醏 > dū; #918F

+醐 > hú; #9190

+醑 > xŭ; #9191

+醒 > xĭng; #9192

+醓 > tăn; #9193

+醔 > jīu; #9194

+醕 > chún; #9195

+醖 > yùn; #9196

+醗 > pò; #9197

+醘 > kè; #9198

+醙 > sōu; #9199

+醚 > mí; #919A

+醛 > quán; #919B

+醜 > chŏu; #919C

+醝 > cúo; #919D

+醞 > yùn; #919E

+醟 > yòng; #919F

+醠 > àng; #91A0

+醡 > zhà; #91A1

+醢 > hăi; #91A2

+醣 > táng; #91A3

+醤 > jiàng; #91A4

+醥 > piăo; #91A5

+醦 > shăn; #91A6

+醧 > yù; #91A7

+醨 > lí; #91A8

+醩 > záo; #91A9

+醪 > láo; #91AA

+醫 > yī; #91AB

+醬 > jiàng; #91AC

+醭 > pū; #91AD

+醮 > jiào; #91AE

+醯 > xī; #91AF

+醰 > tán; #91B0

+醱 > pò; #91B1

+醲 > nóng; #91B2

+醳 > yì; #91B3

+醴 > lĭ; #91B4

+醵 > jù; #91B5

+醶 > jiào; #91B6

+醷 > yì; #91B7

+醸 > niàng; #91B8

+醹 > rú; #91B9

+醺 > xūn; #91BA

+醻 > chóu; #91BB

+醼 > yàn; #91BC

+醽 > líng; #91BD

+醾 > mí; #91BE

+醿 > mí; #91BF

+釀 > niàng; #91C0

+釁 > xìn; #91C1

+釂 > jiào; #91C2

+釃 > xĭ; #91C3

+釄 > mí; #91C4

+釅 > yàn; #91C5

+釆 > biàn; #91C6

+采 > căi; #91C7

+釈 > shì; #91C8

+釉 > yòu; #91C9

+释 > shì; #91CA

+釋 > shì; #91CB

+里 > lĭ; #91CC

+重 > zhòng; #91CD

+野 > yĕ; #91CE

+量 > liàng; #91CF

+釐 > lí; #91D0

+金 > jīn; #91D1

+釒 > jīn' 'zì' 'páng; #91D2

+釓 > qíu; #91D3

+釔 > yĭ; #91D4

+釕 > diăo; #91D5

+釖 > dāo; #91D6

+釗 > zhāo; #91D7

+釘 > dīng; #91D8

+釙 > pò; #91D9

+釚 > qíu; #91DA

+釛 > hé; #91DB

+釜 > fŭ; #91DC

+針 > zhēn; #91DD

+釞 > zhí; #91DE

+釟 > bā; #91DF

+釠 > luàn; #91E0

+釡 > fŭ; #91E1

+釢 > nái; #91E2

+釣 > diào; #91E3

+釤 > shàn; #91E4

+釥 > qiăo; #91E5

+釦 > kòu; #91E6

+釧 > chuàn; #91E7

+釨 > zĭ; #91E8

+釩 > fán; #91E9

+釪 > yú; #91EA

+釫 > huá; #91EB

+釬 > hàn; #91EC

+釭 > gōng; #91ED

+釮 > qí; #91EE

+釯 > máng; #91EF

+釰 > rì; #91F0

+釱 > dì; #91F1

+釲 > sì; #91F2

+釳 > xì; #91F3

+釴 > yì; #91F4

+釵 > chāi; #91F5

+釶 > shī; #91F6

+釷 > tŭ; #91F7

+釸 > xì; #91F8

+釹 > nǚ; #91F9

+釺 > qiān; #91FA

+釼 > jiàn; #91FC

+釽 > pī; #91FD

+釾 > yé; #91FE

+釿 > yín; #91FF

+鈀 > bă; #9200

+鈁 > fāng; #9201

+鈂 > chén; #9202

+鈃 > xíng; #9203

+鈄 > tŏu; #9204

+鈅 > yuè; #9205

+鈆 > yán; #9206

+鈇 > fū; #9207

+鈈 > pī; #9208

+鈉 > nà; #9209

+鈊 > xīn; #920A

+鈋 > é; #920B

+鈌 > jué; #920C

+鈍 > dùn; #920D

+鈎 > gōu; #920E

+鈏 > yĭn; #920F

+鈐 > qián; #9210

+鈑 > băn; #9211

+鈒 > jí; #9212

+鈓 > rén; #9213

+鈔 > chāo; #9214

+鈕 > nĭu; #9215

+鈖 > fēn; #9216

+鈗 > yŭn; #9217

+鈘 > jĭ; #9218

+鈙 > qín; #9219

+鈚 > pí; #921A

+鈛 > gūo; #921B

+鈜 > hóng; #921C

+鈝 > yín; #921D

+鈞 > jūn; #921E

+鈟 > shī; #921F

+鈠 > yì; #9220

+鈡 > zhōng; #9221

+鈢 > niē; #9222

+鈣 > gài; #9223

+鈤 > rì; #9224

+鈥 > húo; #9225

+鈦 > tài; #9226

+鈧 > kàng; #9227

+鈬 > dúo; #922C

+鈭 > zī; #922D

+鈮 > nĭ; #922E

+鈯 > tú; #922F

+鈰 > shì; #9230

+鈱 > mín; #9231

+鈲 > gū; #9232

+鈳 > ē; #9233

+鈴 > líng; #9234

+鈵 > bìng; #9235

+鈶 > yí; #9236

+鈷 > gū; #9237

+鈸 > bá; #9238

+鈹 > pī; #9239

+鈺 > yù; #923A

+鈻 > sì; #923B

+鈼 > zúo; #923C

+鈽 > bù; #923D

+鈾 > yóu; #923E

+鈿 > diàn; #923F

+鉀 > jiă; #9240

+鉁 > zhēn; #9241

+鉂 > shĭ; #9242

+鉃 > shì; #9243

+鉄 > tiĕ; #9244

+鉅 > jù; #9245

+鉆 > zhān; #9246

+鉇 > shī; #9247

+鉈 > shé; #9248

+鉉 > xuàn; #9249

+鉊 > zhāo; #924A

+鉋 > bào; #924B

+鉌 > hé; #924C

+鉍 > bì; #924D

+鉎 > shēng; #924E

+鉏 > chú; #924F

+鉐 > shí; #9250

+鉑 > bó; #9251

+鉒 > zhù; #9252

+鉓 > chì; #9253

+鉔 > zā; #9254

+鉕 > pō; #9255

+鉖 > tóng; #9256

+鉗 > qián; #9257

+鉘 > fú; #9258

+鉙 > zhăi; #9259

+鉚 > lĭu; #925A

+鉛 > qiān; #925B

+鉜 > fú; #925C

+鉝 > lì; #925D

+鉞 > yuè; #925E

+鉟 > pī; #925F

+鉠 > yāng; #9260

+鉡 > bàn; #9261

+鉢 > bō; #9262

+鉣 > jié; #9263

+鉤 > gōu; #9264

+鉥 > shù; #9265

+鉦 > zhēng; #9266

+鉧 > mŭ; #9267

+鉨 > nĭ; #9268

+鉩 > niē; #9269

+鉪 > dì; #926A

+鉫 > jiā; #926B

+鉬 > mù; #926C

+鉭 > dàn; #926D

+鉮 > shēn; #926E

+鉯 > yĭ; #926F

+鉰 > sī; #9270

+鉱 > kuàng; #9271

+鉲 > kă; #9272

+鉳 > bĕi; #9273

+鉴 > jiàn; #9274

+鉵 > tóng; #9275

+鉶 > xíng; #9276

+鉷 > hóng; #9277

+鉸 > jiăo; #9278

+鉹 > chĭ; #9279

+鉺 > èr; #927A

+鉻 > gè; #927B

+鉼 > bĭng; #927C

+鉽 > shì; #927D

+鉾 > móu; #927E

+鉿 > jiá; #927F

+銀 > yín; #9280

+銁 > jūn; #9281

+銂 > zhōu; #9282

+銃 > chòng; #9283

+銄 > shàng; #9284

+銅 > tóng; #9285

+銆 > mò; #9286

+銇 > lèi; #9287

+銈 > jī; #9288

+銉 > yù; #9289

+銊 > xù; #928A

+銋 > rén; #928B

+銌 > zùn; #928C

+銍 > zhì; #928D

+銎 > qīong; #928E

+銏 > shàn; #928F

+銐 > chì; #9290

+銑 > xiăn; #9291

+銒 > xíng; #9292

+銓 > quán; #9293

+銔 > pī; #9294

+銕 > tiĕ; #9295

+銖 > zhū; #9296

+銗 > hóu; #9297

+銘 > míng; #9298

+銙 > kuă; #9299

+銚 > yáo; #929A

+銛 > xiān; #929B

+銜 > xián; #929C

+銝 > xīu; #929D

+銞 > jūn; #929E

+銟 > chā; #929F

+銠 > lăo; #92A0

+銡 > jí; #92A1

+銢 > pĭ; #92A2

+銣 > rŭ; #92A3

+銤 > mĭ; #92A4

+銥 > yĭ; #92A5

+銦 > yīn; #92A6

+銧 > guāng; #92A7

+銨 > ān; #92A8

+銩 > diōu; #92A9

+銪 > yŏu; #92AA

+銫 > sè; #92AB

+銬 > kào; #92AC

+銭 > qián; #92AD

+銮 > luán; #92AE

+銰 > āi; #92B0

+銱 > diào; #92B1

+銲 > hàn; #92B2

+銳 > rùi; #92B3

+銴 > shì; #92B4

+銵 > kēng; #92B5

+銶 > qíu; #92B6

+銷 > xiāo; #92B7

+銸 > zhé; #92B8

+銹 > xìu; #92B9

+銺 > zàng; #92BA

+銻 > tì; #92BB

+銼 > cùo; #92BC

+銽 > guā; #92BD

+銾 > gŏng; #92BE

+銿 > zhōng; #92BF

+鋀 > dòu; #92C0

+鋁 > lǚ; #92C1

+鋂 > méi; #92C2

+鋃 > láng; #92C3

+鋄 > wăn; #92C4

+鋅 > xīn; #92C5

+鋆 > yún; #92C6

+鋇 > bèi; #92C7

+鋈 > wù; #92C8

+鋉 > sù; #92C9

+鋊 > yù; #92CA

+鋋 > chán; #92CB

+鋌 > tĭng; #92CC

+鋍 > bó; #92CD

+鋎 > hàn; #92CE

+鋏 > jiá; #92CF

+鋐 > hóng; #92D0

+鋑 > cuān; #92D1

+鋒 > fēng; #92D2

+鋓 > chān; #92D3

+鋔 > wăn; #92D4

+鋕 > zhì; #92D5

+鋖 > sī; #92D6

+鋗 > xuān; #92D7

+鋘 > wú; #92D8

+鋙 > wú; #92D9

+鋚 > tiáo; #92DA

+鋛 > gŏng; #92DB

+鋜 > zhúo; #92DC

+鋝 > lǜe; #92DD

+鋞 > xíng; #92DE

+鋟 > qiān; #92DF

+鋠 > shèn; #92E0

+鋡 > hán; #92E1

+鋢 > lǜe; #92E2

+鋣 > xié; #92E3

+鋤 > chú; #92E4

+鋥 > zhèng; #92E5

+鋦 > jú; #92E6

+鋧 > xiàn; #92E7

+鋨 > tiĕ; #92E8

+鋩 > máng; #92E9

+鋪 > pū; #92EA

+鋫 > lí; #92EB

+鋬 > pàn; #92EC

+鋭 > rùi; #92ED

+鋮 > chéng; #92EE

+鋯 > gào; #92EF

+鋰 > lĭ; #92F0

+鋱 > tè; #92F1

+鋳 > zhù; #92F3

+鋵 > tū; #92F5

+鋶 > lĭu; #92F6

+鋷 > zùi; #92F7

+鋸 > jù; #92F8

+鋹 > chăng; #92F9

+鋺 > yuān; #92FA

+鋻 > jiàn; #92FB

+鋼 > gāng; #92FC

+鋽 > diào; #92FD

+鋾 > táo; #92FE

+鋿 > cháng; #92FF

+錀 > lún; #9300

+錁 > kuă; #9301

+錂 > líng; #9302

+錃 > bēi; #9303

+錄 > lù; #9304

+錅 > lí; #9305

+錆 > qiāng; #9306

+錇 > póu; #9307

+錈 > juàn; #9308

+錉 > mín; #9309

+錊 > zùi; #930A

+錋 > péng; #930B

+錌 > àn; #930C

+錍 > pí; #930D

+錎 > xiàn; #930E

+錏 > yà; #930F

+錐 > zhūi; #9310

+錑 > lèi; #9311

+錒 > ā; #9312

+錓 > kōng; #9313

+錔 > tà; #9314

+錕 > kūn; #9315

+錖 > dŭ; #9316

+錗 > wèi; #9317

+錘 > chúi; #9318

+錙 > zī; #9319

+錚 > zhēng; #931A

+錛 > bēn; #931B

+錜 > niē; #931C

+錝 > cóng; #931D

+錞 > qún; #931E

+錟 > tán; #931F

+錠 > dìng; #9320

+錡 > qí; #9321

+錢 > qián; #9322

+錣 > zhúo; #9323

+錤 > qí; #9324

+錥 > yù; #9325

+錦 > jĭn; #9326

+錧 > guăn; #9327

+錨 > máo; #9328

+錩 > chāng; #9329

+錪 > tiăn; #932A

+錫 > xí; #932B

+錬 > liàn; #932C

+錭 > táo; #932D

+錮 > gù; #932E

+錯 > cùo; #932F

+錰 > shù; #9330

+錱 > zhēn; #9331

+録 > lù; #9332

+錳 > mĕng; #9333

+錴 > lù; #9334

+錵 > huā; #9335

+錶 > biăo; #9336

+錷 > gá; #9337

+錸 > lái; #9338

+錹 > kĕn; #9339

+錼 > nài; #933C

+錽 > wăn; #933D

+錾 > zàn; #933E

+鍀 > dé; #9340

+鍁 > xiān; #9341

+鍃 > hūo; #9343

+鍄 > liàng; #9344

+鍆 > mén; #9346

+鍇 > kăi; #9347

+鍈 > yīng; #9348

+鍉 > dī; #9349

+鍊 > liàn; #934A

+鍋 > gūo; #934B

+鍌 > xiăn; #934C

+鍍 > dù; #934D

+鍎 > tú; #934E

+鍏 > wéi; #934F

+鍐 > cōng; #9350

+鍑 > fù; #9351

+鍒 > róu; #9352

+鍓 > jí; #9353

+鍔 > è; #9354

+鍕 > róu; #9355

+鍖 > chĕn; #9356

+鍗 > tí; #9357

+鍘 > zhá; #9358

+鍙 > hòng; #9359

+鍚 > yáng; #935A

+鍛 > duàn; #935B

+鍜 > xiā; #935C

+鍝 > yú; #935D

+鍞 > kēng; #935E

+鍟 > xīng; #935F

+鍠 > huáng; #9360

+鍡 > wĕi; #9361

+鍢 > fù; #9362

+鍣 > zhāo; #9363

+鍤 > chá; #9364

+鍥 > qiè; #9365

+鍦 > shé; #9366

+鍧 > hōng; #9367

+鍨 > kúi; #9368

+鍩 > tiăn; #9369

+鍪 > móu; #936A

+鍫 > qiāo; #936B

+鍬 > qiāo; #936C

+鍭 > hóu; #936D

+鍮 > tōu; #936E

+鍯 > cōng; #936F

+鍰 > huán; #9370

+鍱 > yè; #9371

+鍲 > mín; #9372

+鍳 > jiàn; #9373

+鍴 > duān; #9374

+鍵 > jiàn; #9375

+鍶 > sōng; #9376

+鍷 > kūi; #9377

+鍸 > hú; #9378

+鍹 > xuān; #9379

+鍺 > dŭo; #937A

+鍻 > jié; #937B

+鍼 > zhēn; #937C

+鍽 > biān; #937D

+鍾 > zhōng; #937E

+鍿 > zī; #937F

+鎀 > xīu; #9380

+鎁 > yé; #9381

+鎂 > mĕi; #9382

+鎃 > pài; #9383

+鎄 > āi; #9384

+鎅 > jiè; #9385

+鎇 > méi; #9387

+鎈 > chūo; #9388

+鎉 > tà; #9389

+鎊 > bàng; #938A

+鎋 > xiá; #938B

+鎌 > lián; #938C

+鎍 > sŭo; #938D

+鎎 > xì; #938E

+鎏 > líu; #938F

+鎐 > zú; #9390

+鎑 > yè; #9391

+鎒 > nòu; #9392

+鎓 > wēng; #9393

+鎔 > róng; #9394

+鎕 > táng; #9395

+鎖 > sŭo; #9396

+鎗 > qiāng; #9397

+鎘 > gé; #9398

+鎙 > shùo; #9399

+鎚 > chúi; #939A

+鎛 > bó; #939B

+鎜 > pán; #939C

+鎝 > sà; #939D

+鎞 > bì; #939E

+鎟 > săng; #939F

+鎠 > gāng; #93A0

+鎡 > zī; #93A1

+鎢 > wù; #93A2

+鎣 > yìng; #93A3

+鎤 > huăng; #93A4

+鎥 > tiáo; #93A5

+鎦 > líu; #93A6

+鎧 > kăi; #93A7

+鎨 > sŭn; #93A8

+鎩 > shā; #93A9

+鎪 > sōu; #93AA

+鎫 > wàn; #93AB

+鎬 > hào; #93AC

+鎭 > zhèn; #93AD

+鎮 > zhèn; #93AE

+鎯 > lŭo; #93AF

+鎰 > yì; #93B0

+鎱 > yuán; #93B1

+鎲 > tăng; #93B2

+鎳 > niè; #93B3

+鎴 > xí; #93B4

+鎵 > jiā; #93B5

+鎶 > gē; #93B6

+鎷 > mă; #93B7

+鎸 > juān; #93B8

+鎻 > sŭo; #93BB

+鎿 > ná; #93BF

+鏀 > lŭ; #93C0

+鏁 > sŭo; #93C1

+鏂 > ōu; #93C2

+鏃 > zú; #93C3

+鏄 > tuán; #93C4

+鏅 > xīu; #93C5

+鏆 > guàn; #93C6

+鏇 > xuàn; #93C7

+鏈 > liàn; #93C8

+鏉 > shòu; #93C9

+鏊 > áo; #93CA

+鏋 > măn; #93CB

+鏌 > mò; #93CC

+鏍 > lúo; #93CD

+鏎 > bì; #93CE

+鏏 > wèi; #93CF

+鏐 > líu; #93D0

+鏑 > dí; #93D1

+鏒 > qiāo; #93D2

+鏓 > cōng; #93D3

+鏔 > yí; #93D4

+鏕 > lù; #93D5

+鏖 > áo; #93D6

+鏗 > kēng; #93D7

+鏘 > qiāng; #93D8

+鏙 > cūi; #93D9

+鏚 > qì; #93DA

+鏛 > cháng; #93DB

+鏜 > tāng; #93DC

+鏝 > màn; #93DD

+鏞 > yōng; #93DE

+鏟 > chăn; #93DF

+鏠 > fēng; #93E0

+鏡 > jìng; #93E1

+鏢 > biāo; #93E2

+鏣 > shù; #93E3

+鏤 > lòu; #93E4

+鏥 > xìu; #93E5

+鏦 > cōng; #93E6

+鏧 > lóng; #93E7

+鏨 > zàn; #93E8

+鏩 > jiàn; #93E9

+鏪 > cáo; #93EA

+鏫 > lí; #93EB

+鏬 > xià; #93EC

+鏭 > xī; #93ED

+鏮 > kāng; #93EE

+鏰 > bèng; #93F0

+鏳 > zhēng; #93F3

+鏴 > lù; #93F4

+鏵 > huá; #93F5

+鏶 > jí; #93F6

+鏷 > pú; #93F7

+鏸 > hùi; #93F8

+鏹 > qiāng; #93F9

+鏺 > pō; #93FA

+鏻 > lín; #93FB

+鏼 > sŭo; #93FC

+鏽 > xìu; #93FD

+鏾 > săn; #93FE

+鏿 > chēng; #93FF

+鐀 > kùi; #9400

+鐁 > sī; #9401

+鐂 > lìu; #9402

+鐃 > náo; #9403

+鐄 > héng; #9404

+鐅 > piĕ; #9405

+鐆 > sùi; #9406

+鐇 > fán; #9407

+鐈 > qiáo; #9408

+鐉 > quān; #9409

+鐊 > yáng; #940A

+鐋 > tàng; #940B

+鐌 > xiàng; #940C

+鐍 > jué; #940D

+鐎 > jiāo; #940E

+鐏 > zūn; #940F

+鐐 > liáo; #9410

+鐑 > jié; #9411

+鐒 > láo; #9412

+鐓 > dùi; #9413

+鐔 > tán; #9414

+鐕 > zān; #9415

+鐖 > jī; #9416

+鐗 > jiăn; #9417

+鐘 > zhōng; #9418

+鐙 > dēng; #9419

+鐚 > yà; #941A

+鐛 > yìng; #941B

+鐜 > dùi; #941C

+鐝 > jué; #941D

+鐞 > nòu; #941E

+鐟 > tì; #941F

+鐠 > pŭ; #9420

+鐡 > tiĕ; #9421

+鐤 > dĭng; #9424

+鐥 > shàn; #9425

+鐦 > kāi; #9426

+鐧 > jiăn; #9427

+鐨 > fèi; #9428

+鐩 > sùi; #9429

+鐪 > lŭ; #942A

+鐫 > juān; #942B

+鐬 > hùi; #942C

+鐭 > yù; #942D

+鐮 > lián; #942E

+鐯 > zhúo; #942F

+鐰 > qiāo; #9430

+鐱 > qiān; #9431

+鐲 > zhúo; #9432

+鐳 > léi; #9433

+鐴 > bì; #9434

+鐵 > tiĕ; #9435

+鐶 > huán; #9436

+鐷 > yè; #9437

+鐸 > dúo; #9438

+鐹 > gŭo; #9439

+鐺 > dāng; #943A

+鐻 > jù; #943B

+鐼 > fén; #943C

+鐽 > dá; #943D

+鐾 > bèi; #943E

+鐿 > yì; #943F

+鑀 > ài; #9440

+鑁 > zōng; #9441

+鑂 > xùn; #9442

+鑃 > diào; #9443

+鑄 > zhù; #9444

+鑅 > héng; #9445

+鑆 > zhùi; #9446

+鑇 > jī; #9447

+鑈 > niē; #9448

+鑉 > tà; #9449

+鑊 > hùo; #944A

+鑋 > qìng; #944B

+鑌 > bīn; #944C

+鑍 > yīng; #944D

+鑎 > kùi; #944E

+鑏 > níng; #944F

+鑐 > xū; #9450

+鑑 > jiàn; #9451

+鑒 > jiàn; #9452

+鑔 > chă; #9454

+鑕 > zhì; #9455

+鑖 > miè; #9456

+鑗 > lí; #9457

+鑘 > léi; #9458

+鑙 > jī; #9459

+鑚 > zuàn; #945A

+鑛 > kuàng; #945B

+鑜 > shàng; #945C

+鑝 > péng; #945D

+鑞 > là; #945E

+鑟 > dú; #945F

+鑠 > shùo; #9460

+鑡 > chùo; #9461

+鑢 > lǜ; #9462

+鑣 > biāo; #9463

+鑤 > bào; #9464

+鑥 > lŭ; #9465

+鑨 > lóng; #9468

+鑩 > è; #9469

+鑪 > lú; #946A

+鑫 > xīn; #946B

+鑬 > jiàn; #946C

+鑭 > làn; #946D

+鑮 > bó; #946E

+鑯 > jiān; #946F

+鑰 > yào; #9470

+鑱 > chán; #9471

+鑲 > xiāng; #9472

+鑳 > jiàn; #9473

+鑴 > xī; #9474

+鑵 > guàn; #9475

+鑶 > cáng; #9476

+鑷 > niè; #9477

+鑸 > lĕi; #9478

+鑹 > cuàn; #9479

+鑺 > qú; #947A

+鑻 > pàn; #947B

+鑼 > lúo; #947C

+鑽 > zuàn; #947D

+鑾 > luán; #947E

+鑿 > záo; #947F

+钀 > niè; #9480

+钁 > jué; #9481

+钂 > tăng; #9482

+钃 > shŭ; #9483

+钄 > lán; #9484

+钅 > jīn; #9485

+钆 > qíu; #9486

+钇 > yĭ; #9487

+针 > zhēn; #9488

+钉 > dīng; #9489

+钊 > zhāo; #948A

+钋 > pò; #948B

+钌 > diăo; #948C

+钍 > tŭ; #948D

+钎 > qiān; #948E

+钏 > chuàn; #948F

+钐 > shàn; #9490

+钑 > jí; #9491

+钒 > fán; #9492

+钓 > diào; #9493

+钔 > mén; #9494

+钕 > nǚ; #9495

+钖 > xí; #9496

+钗 > chāi; #9497

+钘 > xíng; #9498

+钙 > gài; #9499

+钚 > bù; #949A

+钛 > tài; #949B

+钜 > jù; #949C

+钝 > dùn; #949D

+钞 > chāo; #949E

+钟 > zhōng; #949F

+钠 > nà; #94A0

+钡 > bèi; #94A1

+钢 > gāng; #94A2

+钣 > băn; #94A3

+钤 > qián; #94A4

+钥 > yào; #94A5

+钦 > qīn; #94A6

+钧 > jūn; #94A7

+钨 > wù; #94A8

+钩 > gōu; #94A9

+钪 > kàng; #94AA

+钫 > fāng; #94AB

+钬 > húo; #94AC

+钭 > tŏu; #94AD

+钮 > nĭu; #94AE

+钯 > bă; #94AF

+钰 > yù; #94B0

+钱 > qián; #94B1

+钲 > zhēng; #94B2

+钳 > qián; #94B3

+钴 > gū; #94B4

+钵 > bō; #94B5

+钶 > ē; #94B6

+钷 > pō; #94B7

+钸 > bù; #94B8

+钹 > bá; #94B9

+钺 > yuè; #94BA

+钻 > zuàn; #94BB

+钼 > mù; #94BC

+钽 > dàn; #94BD

+钾 > jiă; #94BE

+钿 > diàn; #94BF

+铀 > yóu; #94C0

+铁 > tiĕ; #94C1

+铂 > bó; #94C2

+铃 > líng; #94C3

+铄 > shùo; #94C4

+铅 > qiān; #94C5

+铆 > lĭu; #94C6

+铇 > bào; #94C7

+铈 > shì; #94C8

+铉 > xuàn; #94C9

+铊 > shé; #94CA

+铋 > bì; #94CB

+铌 > nĭ; #94CC

+铍 > pī; #94CD

+铎 > dúo; #94CE

+铏 > xíng; #94CF

+铐 > kào; #94D0

+铑 > lăo; #94D1

+铒 > èr; #94D2

+铓 > máng; #94D3

+铔 > yà; #94D4

+铕 > yŏu; #94D5

+铖 > chéng; #94D6

+铗 > jiá; #94D7

+铘 > yé; #94D8

+铙 > náo; #94D9

+铚 > zhì; #94DA

+铛 > dāng; #94DB

+铜 > tóng; #94DC

+铝 > lǚ; #94DD

+铞 > diào; #94DE

+铟 > yīn; #94DF

+铠 > kăi; #94E0

+铡 > zhá; #94E1

+铢 > zhū; #94E2

+铣 > xiăn; #94E3

+铤 > tĭng; #94E4

+铥 > dīu; #94E5

+铦 > xiān; #94E6

+铧 > huá; #94E7

+铨 > quán; #94E8

+铩 > shā; #94E9

+铪 > jiá; #94EA

+铫 > yáo; #94EB

+铬 > gè; #94EC

+铭 > míng; #94ED

+铮 > zhēng; #94EE

+铯 > sè; #94EF

+铰 > jiăo; #94F0

+铱 > yĭ; #94F1

+铲 > chăn; #94F2

+铳 > chòng; #94F3

+铴 > tàng; #94F4

+铵 > ān; #94F5

+银 > yín; #94F6

+铷 > rŭ; #94F7

+铸 > zhù; #94F8

+铹 > láo; #94F9

+铺 > pū; #94FA

+铻 > wú; #94FB

+铼 > lái; #94FC

+铽 > tè; #94FD

+链 > liàn; #94FE

+铿 > kēng; #94FF

+销 > xiāo; #9500

+锁 > sŭo; #9501

+锂 > lĭ; #9502

+锃 > zhèng; #9503

+锄 > chú; #9504

+锅 > gūo; #9505

+锆 > gào; #9506

+锇 > tiĕ; #9507

+锈 > xìu; #9508

+锉 > cùo; #9509

+锊 > lǜe; #950A

+锋 > fēng; #950B

+锌 > xīn; #950C

+锍 > lĭu; #950D

+锎 > kāi; #950E

+锏 > jiăn; #950F

+锐 > rùi; #9510

+锑 > tì; #9511

+锒 > láng; #9512

+锓 > qiān; #9513

+锔 > jú; #9514

+锕 > ā; #9515

+锖 > qiāng; #9516

+锗 > dŭo; #9517

+锘 > tiăn; #9518

+错 > cùo; #9519

+锚 > máo; #951A

+锛 > bēn; #951B

+锜 > qí; #951C

+锝 > dé; #951D

+锞 > kuă; #951E

+锟 > kūn; #951F

+锠 > chāng; #9520

+锡 > xí; #9521

+锢 > gù; #9522

+锣 > lúo; #9523

+锤 > chúi; #9524

+锥 > zhūi; #9525

+锦 > jĭn; #9526

+锧 > zhì; #9527

+锨 > xiān; #9528

+锩 > juàn; #9529

+锪 > hūo; #952A

+锫 > póu; #952B

+锬 > tán; #952C

+锭 > dìng; #952D

+键 > jiàn; #952E

+锯 > jù; #952F

+锰 > mĕng; #9530

+锱 > zī; #9531

+锲 > qiè; #9532

+锳 > yīng; #9533

+锴 > kăi; #9534

+锵 > qiāng; #9535

+锶 > sōng; #9536

+锷 > è; #9537

+锸 > chá; #9538

+锹 > qiāo; #9539

+锺 > zhōng; #953A

+锻 > duàn; #953B

+锼 > sōu; #953C

+锽 > huáng; #953D

+锾 > huán; #953E

+锿 > āi; #953F

+镀 > dù; #9540

+镁 > mĕi; #9541

+镂 > lòu; #9542

+镃 > zī; #9543

+镄 > fèi; #9544

+镅 > méi; #9545

+镆 > mò; #9546

+镇 > zhèn; #9547

+镈 > bó; #9548

+镉 > gé; #9549

+镊 > niè; #954A

+镋 > tăng; #954B

+镌 > juān; #954C

+镍 > niè; #954D

+镎 > ná; #954E

+镏 > líu; #954F

+镐 > hào; #9550

+镑 > bàng; #9551

+镒 > yì; #9552

+镓 > jiā; #9553

+镔 > bīn; #9554

+镕 > róng; #9555

+镖 > biāo; #9556

+镗 > tāng; #9557

+镘 > màn; #9558

+镙 > lúo; #9559

+镚 > bèng; #955A

+镛 > yōng; #955B

+镜 > jìng; #955C

+镝 > dí; #955D

+镞 > zú; #955E

+镟 > xuàn; #955F

+镠 > líu; #9560

+镡 > tán; #9561

+镢 > jué; #9562

+镣 > liáo; #9563

+镤 > pú; #9564

+镥 > lŭ; #9565

+镦 > dùi; #9566

+镧 > làn; #9567

+镨 > pŭ; #9568

+镩 > cuàn; #9569

+镪 > qiāng; #956A

+镫 > dēng; #956B

+镬 > hùo; #956C

+镭 > léi; #956D

+镮 > huán; #956E

+镯 > zhúo; #956F

+镰 > lián; #9570

+镱 > yì; #9571

+镲 > chă; #9572

+镳 > biāo; #9573

+镴 > là; #9574

+镵 > chán; #9575

+镶 > xiāng; #9576

+長 > cháng; #9577

+镸 > cháng; #9578

+镹 > jĭu; #9579

+镺 > ăo; #957A

+镻 > dié; #957B

+镼 > qū; #957C

+镽 > liăo; #957D

+镾 > mí; #957E

+长 > cháng; #957F

+門 > mén; #9580

+閁 > mà; #9581

+閂 > shuān; #9582

+閃 > shăn; #9583

+閄 > hùo; #9584

+閅 > mén; #9585

+閆 > yàn; #9586

+閇 > bì; #9587

+閈 > hàn; #9588

+閉 > bì; #9589

+開 > kāi; #958B

+閌 > kàng; #958C

+閍 > bēng; #958D

+閎 > hóng; #958E

+閏 > rùn; #958F

+閐 > sàn; #9590

+閑 > xián; #9591

+閒 > xián; #9592

+間 > jiān; #9593

+閔 > mĭn; #9594

+閕 > xiā; #9595

+閗 > dòu; #9597

+閘 > zhá; #9598

+閙 > nào; #9599

+閚 > jian; #959A

+閛 > pēng; #959B

+閜 > xiă; #959C

+閝 > líng; #959D

+閞 > biàn; #959E

+閟 > bì; #959F

+閠 > rùn; #95A0

+閡 > hé; #95A1

+関 > guān; #95A2

+閣 > gé; #95A3

+閤 > gé; #95A4

+閥 > fá; #95A5

+閦 > chù; #95A6

+閧 > hòng; #95A7

+閨 > gūi; #95A8

+閩 > mĭn; #95A9

+閫 > kŭn; #95AB

+閬 > lăng; #95AC

+閭 > lǘ; #95AD

+閮 > tíng; #95AE

+閯 > shà; #95AF

+閰 > jú; #95B0

+閱 > yuè; #95B1

+閲 > yuè; #95B2

+閳 > chăn; #95B3

+閴 > qù; #95B4

+閵 > lìn; #95B5

+閶 > chāng; #95B6

+閷 > shài; #95B7

+閸 > kŭn; #95B8

+閹 > yān; #95B9

+閺 > mín; #95BA

+閻 > yán; #95BB

+閼 > è; #95BC

+閽 > hūn; #95BD

+閾 > yù; #95BE

+閿 > wén; #95BF

+闀 > xiàng; #95C0

+闁 > bao; #95C1

+闂 > xiàng; #95C2

+闃 > qù; #95C3

+闄 > yăo; #95C4

+闅 > wén; #95C5

+闆 > băn; #95C6

+闇 > àn; #95C7

+闈 > wéi; #95C8

+闉 > yīn; #95C9

+闊 > kùo; #95CA

+闋 > què; #95CB

+闌 > lán; #95CC

+闍 > dū; #95CD

+闐 > tián; #95D0

+闑 > niè; #95D1

+闒 > tà; #95D2

+闓 > kăi; #95D3

+闔 > hé; #95D4

+闕 > què; #95D5

+闖 > chuăng; #95D6

+闗 > guān; #95D7

+闘 > dòu; #95D8

+闙 > qĭ; #95D9

+闚 > kūi; #95DA

+闛 > táng; #95DB

+關 > guān; #95DC

+闝 > piáo; #95DD

+闞 > kàn; #95DE

+闟 > xì; #95DF

+闠 > hùi; #95E0

+闡 > chăn; #95E1

+闢 > pì; #95E2

+闣 > dàng; #95E3

+闤 > huán; #95E4

+闥 > tà; #95E5

+闦 > wén; #95E6

+门 > mén; #95E8

+闩 > shuān; #95E9

+闪 > shăn; #95EA

+闫 > yàn; #95EB

+闬 > hàn; #95EC

+闭 > bì; #95ED

+问 > wèn; #95EE

+闯 > chuăng; #95EF

+闰 > rùn; #95F0

+闱 > wéi; #95F1

+闲 > xián; #95F2

+闳 > hóng; #95F3

+间 > jiān; #95F4

+闵 > mĭn; #95F5

+闶 > kàng; #95F6

+闷 > mèn; #95F7

+闸 > zhá; #95F8

+闹 > nào; #95F9

+闺 > gūi; #95FA

+闻 > wén; #95FB

+闼 > tà; #95FC

+闽 > mĭn; #95FD

+闾 > lǘ; #95FE

+闿 > kăi; #95FF

+阀 > fá; #9600

+阁 > gé; #9601

+阂 > hé; #9602

+阃 > kŭn; #9603

+阄 > jīu; #9604

+阅 > yuè; #9605

+阆 > lăng; #9606

+阇 > dū; #9607

+阈 > yù; #9608

+阉 > yān; #9609

+阊 > chāng; #960A

+阋 > xì; #960B

+阌 > wén; #960C

+阍 > hūn; #960D

+阎 > yán; #960E

+阏 > è; #960F

+阐 > chăn; #9610

+阑 > lán; #9611

+阒 > qù; #9612

+阓 > hùi; #9613

+阔 > kùo; #9614

+阕 > què; #9615

+阖 > gé; #9616

+阗 > tián; #9617

+阘 > tà; #9618

+阙 > què; #9619

+阚 > kàn; #961A

+阛 > huán; #961B

+阜 > fù; #961C

+阝 > fù; #961D

+阞 > lè; #961E

+队 > dùi; #961F

+阠 > xìn; #9620

+阡 > qiān; #9621

+阢 > wù; #9622

+阣 > yì; #9623

+阤 > túo; #9624

+阥 > yīn; #9625

+阦 > yáng; #9626

+阧 > dŏu; #9627

+阨 > è; #9628

+阩 > shēng; #9629

+阪 > băn; #962A

+阫 > péi; #962B

+阬 > kēng; #962C

+阭 > yŭn; #962D

+阮 > ruăn; #962E

+阯 > zhĭ; #962F

+阰 > pí; #9630

+阱 > jĭng; #9631

+防 > fáng; #9632

+阳 > yáng; #9633

+阴 > yīn; #9634

+阵 > zhèn; #9635

+阶 > jiē; #9636

+阷 > chēng; #9637

+阸 > è; #9638

+阹 > qū; #9639

+阺 > dĭ; #963A

+阻 > zŭ; #963B

+阼 > zùo; #963C

+阽 > diàn; #963D

+阾 > lĭng; #963E

+阿 > ā; #963F

+陀 > túo; #9640

+陁 > túo; #9641

+陂 > pō; #9642

+陃 > bĭng; #9643

+附 > fù; #9644

+际 > jì; #9645

+陆 > lù; #9646

+陇 > lŏng; #9647

+陈 > chén; #9648

+陉 > xíng; #9649

+陊 > dùo; #964A

+陋 > lòu; #964B

+陌 > mò; #964C

+降 > jiàng; #964D

+陎 > shū; #964E

+陏 > dùo; #964F

+限 > xiàn; #9650

+陑 > ér; #9651

+陒 > gŭi; #9652

+陓 > yū; #9653

+陔 > gāi; #9654

+陕 > shăn; #9655

+陖 > xùn; #9656

+陗 > qiào; #9657

+陘 > xíng; #9658

+陙 > chún; #9659

+陚 > fù; #965A

+陛 > bì; #965B

+陜 > xiá; #965C

+陝 > shăn; #965D

+陞 > shēng; #965E

+陟 > zhì; #965F

+陠 > pū; #9660

+陡 > dŏu; #9661

+院 > yuàn; #9662

+陣 > zhèn; #9663

+除 > chú; #9664

+陥 > xiàn; #9665

+陧 > niè; #9667

+陨 > yŭn; #9668

+险 > xiăn; #9669

+陪 > péi; #966A

+陫 > péi; #966B

+陬 > zōu; #966C

+陭 > yī; #966D

+陮 > dŭi; #966E

+陯 > lún; #966F

+陰 > yīn; #9670

+陱 > jū; #9671

+陲 > chúi; #9672

+陳 > chén; #9673

+陴 > pí; #9674

+陵 > líng; #9675

+陶 > táo; #9676

+陷 > xiàn; #9677

+陸 > lù; #9678

+陹 > sheng; #9679

+険 > xiăn; #967A

+陻 > yīn; #967B

+陼 > zhŭ; #967C

+陽 > yáng; #967D

+陾 > réng; #967E

+陿 > shăn; #967F

+隀 > chóng; #9680

+隁 > yàn; #9681

+隂 > yīn; #9682

+隃 > yú; #9683

+隄 > tí; #9684

+隅 > yú; #9685

+隆 > lóng; #9686

+隇 > wēi; #9687

+隈 > wēi; #9688

+隉 > niè; #9689

+隊 > dùi; #968A

+隋 > súi; #968B

+隌 > ăn; #968C

+隍 > huáng; #968D

+階 > jiē; #968E

+随 > súi; #968F

+隐 > yĭn; #9690

+隑 > gāi; #9691

+隒 > yăn; #9692

+隓 > hūi; #9693

+隔 > gé; #9694

+隕 > yŭn; #9695

+隖 > wù; #9696

+隗 > wĕi; #9697

+隘 > ài; #9698

+隙 > xì; #9699

+隚 > táng; #969A

+際 > jì; #969B

+障 > zhàng; #969C

+隝 > dăo; #969D

+隞 > áo; #969E

+隟 > xì; #969F

+隠 > yĭn; #96A0

+隢 > rào; #96A2

+隣 > lín; #96A3

+隤 > túi; #96A4

+隥 > dèng; #96A5

+隦 > pĭ; #96A6

+隧 > sùi; #96A7

+隨 > súi; #96A8

+隩 > yù; #96A9

+險 > xiăn; #96AA

+隫 > fēn; #96AB

+隬 > nĭ; #96AC

+隭 > ér; #96AD

+隮 > jī; #96AE

+隯 > dăo; #96AF

+隰 > xí; #96B0

+隱 > yĭn; #96B1

+隲 > é; #96B2

+隳 > hūi; #96B3

+隴 > lŏng; #96B4

+隵 > xī; #96B5

+隶 > lì; #96B6

+隷 > lì; #96B7

+隸 > lì; #96B8

+隹 > zhūi; #96B9

+隺 > hè; #96BA

+隻 > zhī; #96BB

+隼 > zhŭn; #96BC

+隽 > jùn; #96BD

+难 > nán; #96BE

+隿 > yì; #96BF

+雀 > què; #96C0

+雁 > yàn; #96C1

+雂 > qián; #96C2

+雃 > yă; #96C3

+雄 > xíong; #96C4

+雅 > yă; #96C5

+集 > jí; #96C6

+雇 > gù; #96C7

+雈 > huán; #96C8

+雉 > zhì; #96C9

+雊 > gòu; #96CA

+雋 > jùn; #96CB

+雌 > cí; #96CC

+雍 > yōng; #96CD

+雎 > jū; #96CE

+雏 > chú; #96CF

+雐 > hū; #96D0

+雑 > zá; #96D1

+雒 > lùo; #96D2

+雓 > yú; #96D3

+雔 > chóu; #96D4

+雕 > diāo; #96D5

+雖 > sūi; #96D6

+雗 > hàn; #96D7

+雘 > hùo; #96D8

+雙 > shuāng; #96D9

+雚 > guàn; #96DA

+雛 > chú; #96DB

+雜 > zá; #96DC

+雝 > yōng; #96DD

+雞 > jī; #96DE

+雟 > xī; #96DF

+雠 > chóu; #96E0

+雡 > lìu; #96E1

+離 > lí; #96E2

+難 > nán; #96E3

+雤 > xué; #96E4

+雥 > zá; #96E5

+雦 > jí; #96E6

+雧 > jí; #96E7

+雨 > yŭ; #96E8

+雩 > yú; #96E9

+雪 > xuĕ; #96EA

+雫 > nă; #96EB

+雬 > fŏu; #96EC

+雭 > sè; #96ED

+雮 > mù; #96EE

+雯 > wén; #96EF

+雰 > fēn; #96F0

+雱 > páng; #96F1

+雲 > yún; #96F2

+雳 > lì; #96F3

+雴 > lì; #96F4

+雵 > ăng; #96F5

+零 > líng; #96F6

+雷 > léi; #96F7

+雸 > án; #96F8

+雹 > báo; #96F9

+雺 > méng; #96FA

+電 > diàn; #96FB

+雼 > dàng; #96FC

+雽 > xíng; #96FD

+雾 > wù; #96FE

+雿 > zhào; #96FF

+需 > xū; #9700

+霁 > jì; #9701

+霂 > mù; #9702

+霃 > chén; #9703

+霄 > xiāo; #9704

+霅 > zhá; #9705

+霆 > tíng; #9706

+震 > zhèn; #9707

+霈 > pèi; #9708

+霉 > méi; #9709

+霊 > líng; #970A

+霋 > qī; #970B

+霌 > chōu; #970C

+霍 > hùo; #970D

+霎 > shà; #970E

+霏 > fēi; #970F

+霐 > wēng; #9710

+霑 > zhān; #9711

+霒 > yīn; #9712

+霓 > ní; #9713

+霔 > chòu; #9714

+霕 > tún; #9715

+霖 > lín; #9716

+霘 > dòng; #9718

+霙 > yīng; #9719

+霚 > wù; #971A

+霛 > líng; #971B

+霜 > shuāng; #971C

+霝 > líng; #971D

+霞 > xiá; #971E

+霟 > hóng; #971F

+霠 > yīn; #9720

+霡 > mò; #9721

+霢 > mài; #9722

+霣 > yŭn; #9723

+霤 > lìu; #9724

+霥 > mèng; #9725

+霦 > bīn; #9726

+霧 > wù; #9727

+霨 > wèi; #9728

+霩 > hùo; #9729

+霪 > yín; #972A

+霫 > xí; #972B

+霬 > yì; #972C

+霭 > ăi; #972D

+霮 > dàn; #972E

+霯 > dèng; #972F

+霰 > xiàn; #9730

+霱 > yù; #9731

+露 > lù; #9732

+霳 > lóng; #9733

+霴 > dài; #9734

+霵 > jí; #9735

+霶 > páng; #9736

+霷 > yáng; #9737

+霸 > bà; #9738

+霹 > pī; #9739

+霺 > wéi; #973A

+霼 > xĭ; #973C

+霽 > jì; #973D

+霾 > mái; #973E

+霿 > mèng; #973F

+靀 > méng; #9740

+靁 > léi; #9741

+靂 > lì; #9742

+靃 > hùo; #9743

+靄 > ăi; #9744

+靅 > fèi; #9745

+靆 > dài; #9746

+靇 > lóng; #9747

+靈 > líng; #9748

+靉 > ài; #9749

+靊 > fēng; #974A

+靋 > lì; #974B

+靌 > băo; #974C

+靎 > hè; #974E

+靏 > hè; #974F

+靐 > bìng; #9750

+靑 > qīng; #9751

+青 > qīng; #9752

+靓 > jìng; #9753

+靔 > tiān; #9754

+靕 > zhēn; #9755

+靖 > jìng; #9756

+靗 > chèng; #9757

+靘 > qìng; #9758

+静 > jìng; #9759

+靚 > jìng; #975A

+靛 > diàn; #975B

+靜 > jìng; #975C

+靝 > tiān; #975D

+非 > fēi; #975E

+靟 > fēi; #975F

+靠 > kào; #9760

+靡 > mĭ; #9761

+面 > miàn; #9762

+靣 > miàn; #9763

+靤 > pào; #9764

+靥 > yè; #9765

+靦 > tiăn; #9766

+靧 > hùi; #9767

+靨 > yè; #9768

+革 > gé; #9769

+靪 > dīng; #976A

+靫 > chā; #976B

+靬 > jiān; #976C

+靭 > rèn; #976D

+靮 > dí; #976E

+靯 > dù; #976F

+靰 > wù; #9770

+靱 > rèn; #9771

+靲 > qín; #9772

+靳 > jìn; #9773

+靴 > xuē; #9774

+靵 > nĭu; #9775

+靶 > bă; #9776

+靷 > yĭn; #9777

+靸 > să; #9778

+靹 > nà; #9779

+靺 > mò; #977A

+靻 > zŭ; #977B

+靼 > dá; #977C

+靽 > bàn; #977D

+靾 > yì; #977E

+靿 > yào; #977F

+鞀 > táo; #9780

+鞁 > túo; #9781

+鞂 > jiá; #9782

+鞃 > hóng; #9783

+鞄 > páo; #9784

+鞅 > yăng; #9785

+鞇 > yīn; #9787

+鞈 > jiá; #9788

+鞉 > táo; #9789

+鞊 > jí; #978A

+鞋 > xié; #978B

+鞌 > ān; #978C

+鞍 > ān; #978D

+鞎 > hén; #978E

+鞏 > gŏng; #978F

+鞑 > dá; #9791

+鞒 > qiāo; #9792

+鞓 > tīng; #9793

+鞔 > wăn; #9794

+鞕 > yìng; #9795

+鞖 > sūi; #9796

+鞗 > tiáo; #9797

+鞘 > qiào; #9798

+鞙 > xuàn; #9799

+鞚 > kòng; #979A

+鞛 > bĕng; #979B

+鞜 > tà; #979C

+鞝 > zhăng; #979D

+鞞 > bĭng; #979E

+鞟 > kùo; #979F

+鞠 > jú; #97A0

+鞡 > la; #97A1

+鞢 > xiè; #97A2

+鞣 > róu; #97A3

+鞤 > bāng; #97A4

+鞥 > yì; #97A5

+鞦 > qīu; #97A6

+鞧 > qīu; #97A7

+鞨 > hé; #97A8

+鞩 > xiào; #97A9

+鞪 > mù; #97AA

+鞫 > jú; #97AB

+鞬 > jiān; #97AC

+鞭 > biān; #97AD

+鞮 > dī; #97AE

+鞯 > jiān; #97AF

+鞱 > tāo; #97B1

+鞲 > gōu; #97B2

+鞳 > tà; #97B3

+鞴 > bèi; #97B4

+鞵 > xié; #97B5

+鞶 > pán; #97B6

+鞷 > gé; #97B7

+鞸 > bì; #97B8

+鞹 > kùo; #97B9

+鞺 > tang; #97BA

+鞻 > lóu; #97BB

+鞼 > gùi; #97BC

+鞽 > qiáo; #97BD

+鞾 > xuē; #97BE

+鞿 > jī; #97BF

+韀 > jiān; #97C0

+韁 > jiāng; #97C1

+韂 > chàn; #97C2

+韃 > dá; #97C3

+韄 > hùo; #97C4

+韅 > xiăn; #97C5

+韆 > qiān; #97C6

+韇 > dú; #97C7

+韈 > wà; #97C8

+韉 > jiān; #97C9

+韊 > lán; #97CA

+韋 > wéi; #97CB

+韌 > rèn; #97CC

+韍 > fú; #97CD

+韎 > mèi; #97CE

+韏 > juàn; #97CF

+韐 > gé; #97D0

+韑 > wĕi; #97D1

+韒 > qiào; #97D2

+韓 > hán; #97D3

+韔 > chàng; #97D4

+韖 > róu; #97D6

+韗 > xùn; #97D7

+韘 > shè; #97D8

+韙 > wĕi; #97D9

+韚 > gé; #97DA

+韛 > bèi; #97DB

+韜 > tāo; #97DC

+韝 > gōu; #97DD

+韞 > yùn; #97DE

+韠 > bì; #97E0

+韡 > wĕi; #97E1

+韢 > hùi; #97E2

+韣 > dú; #97E3

+韤 > wà; #97E4

+韥 > dú; #97E5

+韦 > wéi; #97E6

+韧 > rèn; #97E7

+韨 > fú; #97E8

+韩 > hán; #97E9

+韪 > wĕi; #97EA

+韫 > yùn; #97EB

+韬 > tāo; #97EC

+韭 > jĭu; #97ED

+韮 > jĭu; #97EE

+韯 > xiān; #97EF

+韰 > xiè; #97F0

+韱 > xiān; #97F1

+韲 > jī; #97F2

+音 > yīn; #97F3

+韴 > zá; #97F4

+韵 > yùn; #97F5

+韶 > sháo; #97F6

+韷 > lè; #97F7

+韸 > péng; #97F8

+韹 > héng; #97F9

+韺 > yīng; #97FA

+韻 > yùn; #97FB

+韼 > péng; #97FC

+韽 > yīn; #97FD

+韾 > yīn; #97FE

+響 > xiăng; #97FF

+頀 > hù; #9800

+頁 > yè; #9801

+頂 > dĭng; #9802

+頃 > qĭng; #9803

+頄 > pàn; #9804

+項 > xiàng; #9805

+順 > shùn; #9806

+頇 > hān; #9807

+須 > xū; #9808

+頉 > yí; #9809

+頊 > xù; #980A

+頋 > gù; #980B

+頌 > sòng; #980C

+頍 > kŭi; #980D

+頎 > qí; #980E

+頏 > háng; #980F

+預 > yù; #9810

+頑 > wán; #9811

+頒 > bān; #9812

+頓 > dùn; #9813

+頔 > dí; #9814

+頕 > dān; #9815

+頖 > pàn; #9816

+頗 > pŏ; #9817

+領 > lĭng; #9818

+頙 > cè; #9819

+頚 > jĭng; #981A

+頛 > lĕi; #981B

+頜 > hé; #981C

+頝 > qiāo; #981D

+頞 > è; #981E

+頟 > é; #981F

+頠 > wĕi; #9820

+頡 > jié; #9821

+頢 > guā; #9822

+頣 > shĕn; #9823

+頤 > yí; #9824

+頥 > shĕn; #9825

+頦 > hái; #9826

+頧 > dūi; #9827

+頨 > piān; #9828

+頩 > pīng; #9829

+頪 > lèi; #982A

+頫 > fŭ; #982B

+頬 > jiá; #982C

+頭 > tóu; #982D

+頮 > hùi; #982E

+頯 > kúi; #982F

+頰 > jiá; #9830

+頱 > lè; #9831

+頲 > tian; #9832

+頳 > chēng; #9833

+頴 > yĭng; #9834

+頵 > jūn; #9835

+頶 > hú; #9836

+頷 > hàn; #9837

+頸 > jĭng; #9838

+頹 > túi; #9839

+頺 > túi; #983A

+頻 > pín; #983B

+頼 > lài; #983C

+頽 > túi; #983D

+頾 > zī; #983E

+頿 > zī; #983F

+顀 > chúi; #9840

+顁 > dìng; #9841

+顂 > lài; #9842

+顃 > yán; #9843

+顄 > hàn; #9844

+顅 > jiān; #9845

+顆 > kē; #9846

+顇 > cùi; #9847

+顈 > jĭong; #9848

+顉 > qīn; #9849

+顊 > yí; #984A

+顋 > sāi; #984B

+題 > tí; #984C

+額 > é; #984D

+顎 > è; #984E

+顏 > yán; #984F

+顐 > hún; #9850

+顑 > kăn; #9851

+顒 > yóng; #9852

+顓 > zhuān; #9853

+顔 > yán; #9854

+顕 > xiăn; #9855

+顖 > xìn; #9856

+顗 > yĭ; #9857

+願 > yuàn; #9858

+顙 > săng; #9859

+顚 > diān; #985A

+顛 > diān; #985B

+顜 > jiăng; #985C

+顝 > kū; #985D

+類 > lèi; #985E

+顟 > liáo; #985F

+顠 > piào; #9860

+顡 > yì; #9861

+顢 > mán; #9862

+顣 > qī; #9863

+顤 > rào; #9864

+顥 > hào; #9865

+顦 > qiáo; #9866

+顧 > gù; #9867

+顨 > xùn; #9868

+顩 > qiān; #9869

+顪 > hūi; #986A

+顫 > zhàn; #986B

+顬 > rú; #986C

+顭 > hōng; #986D

+顮 > bīn; #986E

+顯 > xiăn; #986F

+顰 > pín; #9870

+顱 > lú; #9871

+顲 > lăn; #9872

+顳 > niè; #9873

+顴 > quán; #9874

+页 > yè; #9875

+顶 > dĭng; #9876

+顷 > qĭng; #9877

+顸 > hān; #9878

+项 > xiàng; #9879

+顺 > shùn; #987A

+须 > xū; #987B

+顼 > xù; #987C

+顽 > wán; #987D

+顾 > gù; #987E

+顿 > dùn; #987F

+颀 > qí; #9880

+颁 > bān; #9881

+颂 > sòng; #9882

+颃 > háng; #9883

+预 > yù; #9884

+颅 > lú; #9885

+领 > lĭng; #9886

+颇 > pŏ; #9887

+颈 > jĭng; #9888

+颉 > jié; #9889

+颊 > jiá; #988A

+颋 > tian; #988B

+颌 > hàn; #988C

+颍 > yĭng; #988D

+颎 > jĭong; #988E

+颏 > hái; #988F

+颐 > yí; #9890

+频 > pín; #9891

+颒 > hùi; #9892

+颓 > túi; #9893

+颔 > hàn; #9894

+颕 > yĭng; #9895

+颖 > yĭng; #9896

+颗 > kē; #9897

+题 > tí; #9898

+颙 > yóng; #9899

+颚 > è; #989A

+颛 > zhuān; #989B

+颜 > yán; #989C

+额 > é; #989D

+颞 > niè; #989E

+颟 > mán; #989F

+颠 > diān; #98A0

+颡 > săng; #98A1

+颢 > hào; #98A2

+颣 > lèi; #98A3

+颤 > zhàn; #98A4

+颥 > rú; #98A5

+颦 > pín; #98A6

+颧 > quán; #98A7

+風 > fēng; #98A8

+颩 > biāo; #98A9

+颫 > fú; #98AB

+颬 > xiā; #98AC

+颭 > zhăn; #98AD

+颮 > biāo; #98AE

+颯 > sà; #98AF

+颰 > bá; #98B0

+颱 > tái; #98B1

+颲 > liè; #98B2

+颳 > guā; #98B3

+颴 > xuàn; #98B4

+颵 > shào; #98B5

+颶 > jù; #98B6

+颷 > bī; #98B7

+颸 > sī; #98B8

+颹 > wĕi; #98B9

+颺 > yáng; #98BA

+颻 > yáo; #98BB

+颼 > sōu; #98BC

+颽 > kăi; #98BD

+颾 > sāo; #98BE

+颿 > fán; #98BF

+飀 > líu; #98C0

+飁 > xí; #98C1

+飂 > liáo; #98C2

+飃 > piāo; #98C3

+飄 > piāo; #98C4

+飅 > líu; #98C5

+飆 > biāo; #98C6

+飇 > biāo; #98C7

+飈 > biăo; #98C8

+飉 > liáo; #98C9

+飋 > sè; #98CB

+飌 > fēng; #98CC

+飍 > biāo; #98CD

+风 > fēng; #98CE

+飏 > yáng; #98CF

+飐 > zhăn; #98D0

+飑 > biāo; #98D1

+飒 > sà; #98D2

+飓 > jù; #98D3

+飔 > sī; #98D4

+飕 > sōu; #98D5

+飖 > yáo; #98D6

+飗 > líu; #98D7

+飘 > piāo; #98D8

+飙 > biāo; #98D9

+飚 > biāo; #98DA

+飛 > fēi; #98DB

+飜 > fān; #98DC

+飝 > fēi; #98DD

+飞 > fēi; #98DE

+食 > shí; #98DF

+飠 > shí; #98E0

+飡 > cān; #98E1

+飢 > jī; #98E2

+飣 > dìng; #98E3

+飤 > sì; #98E4

+飥 > tūo; #98E5

+飦 > zhān; #98E6

+飧 > sūn; #98E7

+飨 > xiăng; #98E8

+飩 > tún; #98E9

+飪 > rèn; #98EA

+飫 > yù; #98EB

+飬 > juàn; #98EC

+飭 > chì; #98ED

+飮 > yĭn; #98EE

+飯 > fàn; #98EF

+飰 > fàn; #98F0

+飱 > sūn; #98F1

+飲 > yĭn; #98F2

+飳 > zhù; #98F3

+飴 > yí; #98F4

+飵 > zhăi; #98F5

+飶 > bì; #98F6

+飷 > jiĕ; #98F7

+飸 > tāo; #98F8

+飹 > lĭu; #98F9

+飺 > cí; #98FA

+飻 > tiè; #98FB

+飼 > sì; #98FC

+飽 > băo; #98FD

+飾 > shì; #98FE

+飿 > dùo; #98FF

+餀 > hài; #9900

+餁 > rèn; #9901

+餂 > tiăn; #9902

+餃 > jiăo; #9903

+餄 > jiá; #9904

+餅 > bĭng; #9905

+餆 > yáo; #9906

+餇 > tóng; #9907

+餈 > cí; #9908

+餉 > xiăng; #9909

+養 > yăng; #990A

+餋 > yăng; #990B

+餌 > ĕr; #990C

+餍 > yàn; #990D

+餎 > le; #990E

+餏 > yī; #990F

+餐 > cān; #9910

+餑 > bó; #9911

+餒 > nĕi; #9912

+餓 > è; #9913

+餔 > bū; #9914

+餕 > jùn; #9915

+餖 > dòu; #9916

+餗 > sù; #9917

+餘 > yú; #9918

+餙 > shì; #9919

+餚 > yáo; #991A

+餛 > hún; #991B

+餜 > gŭo; #991C

+餝 > shì; #991D

+餞 > jiàn; #991E

+餟 > zhùi; #991F

+餠 > bĭng; #9920

+餡 > xiàn; #9921

+餢 > bù; #9922

+餣 > yè; #9923

+餤 > tán; #9924

+餥 > fĕi; #9925

+餦 > zhāng; #9926

+餧 > wèi; #9927

+館 > guăn; #9928

+餩 > è; #9929

+餪 > nuăn; #992A

+餫 > hún; #992B

+餬 > hú; #992C

+餭 > huáng; #992D

+餮 > tiè; #992E

+餯 > hùi; #992F

+餰 > jiān; #9930

+餱 > hóu; #9931

+餲 > hé; #9932

+餳 > xíng; #9933

+餴 > fēn; #9934

+餵 > wèi; #9935

+餶 > gŭ; #9936

+餷 > chā; #9937

+餸 > sòng; #9938

+餹 > táng; #9939

+餺 > bó; #993A

+餻 > gāo; #993B

+餼 > xì; #993C

+餽 > kùi; #993D

+餾 > lìu; #993E

+餿 > sōu; #993F

+饀 > táo; #9940

+饁 > yè; #9941

+饂 > yún; #9942

+饃 > mó; #9943

+饄 > táng; #9944

+饅 > mán; #9945

+饆 > bì; #9946

+饇 > yù; #9947

+饈 > xīu; #9948

+饉 > jĭn; #9949

+饊 > săn; #994A

+饋 > kùi; #994B

+饌 > zhuàn; #994C

+饍 > shàn; #994D

+饎 > chì; #994E

+饏 > dàn; #994F

+饐 > yì; #9950

+饑 > jī; #9951

+饒 > ráo; #9952

+饓 > chēng; #9953

+饔 > yōng; #9954

+饕 > tāo; #9955

+饖 > hùi; #9956

+饗 > xiăng; #9957

+饘 > zhān; #9958

+饙 > fēn; #9959

+饚 > hài; #995A

+饛 > méng; #995B

+饜 > yàn; #995C

+饝 > mó; #995D

+饞 > chán; #995E

+饟 > xiăng; #995F

+饠 > lúo; #9960

+饡 > zuàn; #9961

+饢 > năng; #9962

+饣 > shí; #9963

+饤 > dìng; #9964

+饥 > jī; #9965

+饦 > tūo; #9966

+饧 > xíng; #9967

+饨 > tún; #9968

+饩 > xì; #9969

+饪 > rèn; #996A

+饫 > yù; #996B

+饬 > chì; #996C

+饭 > fàn; #996D

+饮 > yĭn; #996E

+饯 > jiàn; #996F

+饰 > shì; #9970

+饱 > băo; #9971

+饲 > sì; #9972

+饳 > dùo; #9973

+饴 > yí; #9974

+饵 > ĕr; #9975

+饶 > ráo; #9976

+饷 > xiăng; #9977

+饸 > jiá; #9978

+饹 > le; #9979

+饺 > jiăo; #997A

+饻 > yī; #997B

+饼 > bĭng; #997C

+饽 > bó; #997D

+饾 > dòu; #997E

+饿 > è; #997F

+馀 > yú; #9980

+馁 > nĕi; #9981

+馂 > jùn; #9982

+馃 > gŭo; #9983

+馄 > hún; #9984

+馅 > xiàn; #9985

+馆 > guăn; #9986

+馇 > chā; #9987

+馈 > kùi; #9988

+馉 > gŭ; #9989

+馊 > sōu; #998A

+馋 > chán; #998B

+馌 > yè; #998C

+馍 > mó; #998D

+馎 > bó; #998E

+馏 > lìu; #998F

+馐 > xīu; #9990

+馑 > jĭn; #9991

+馒 > mán; #9992

+馓 > săn; #9993

+馔 > zhuàn; #9994

+馕 > năng; #9995

+首 > shŏu; #9996

+馗 > kúi; #9997

+馘 > gúo; #9998

+香 > xiāng; #9999

+馚 > fén; #999A

+馛 > bá; #999B

+馜 > nĭ; #999C

+馝 > bì; #999D

+馞 > bó; #999E

+馟 > tú; #999F

+馠 > hān; #99A0

+馡 > fēi; #99A1

+馢 > jiān; #99A2

+馣 > ān; #99A3

+馤 > ăi; #99A4

+馥 > fù; #99A5

+馦 > xiān; #99A6

+馧 > wēn; #99A7

+馨 > xīn; #99A8

+馩 > fén; #99A9

+馪 > bīn; #99AA

+馫 > xīng; #99AB

+馬 > mă; #99AC

+馭 > yù; #99AD

+馮 > féng; #99AE

+馯 > hàn; #99AF

+馰 > dì; #99B0

+馱 > túo; #99B1

+馲 > tūo; #99B2

+馳 > chí; #99B3

+馴 > xún; #99B4

+馵 > zhù; #99B5

+馶 > zhī; #99B6

+馷 > pèi; #99B7

+馸 > xìn; #99B8

+馹 > rì; #99B9

+馺 > sà; #99BA

+馻 > yĭn; #99BB

+馼 > wén; #99BC

+馽 > zhí; #99BD

+馾 > dàn; #99BE

+馿 > lǘ; #99BF

+駀 > yóu; #99C0

+駁 > bó; #99C1

+駂 > băo; #99C2

+駃 > kuài; #99C3

+駄 > túo; #99C4

+駅 > yì; #99C5

+駆 > qū; #99C6

+駈 > qū; #99C8

+駉 > jīong; #99C9

+駊 > bŏ; #99CA

+駋 > zhāo; #99CB

+駌 > yuān; #99CC

+駍 > pēng; #99CD

+駎 > zhòu; #99CE

+駏 > jù; #99CF

+駐 > zhù; #99D0

+駑 > nú; #99D1

+駒 > jū; #99D2

+駓 > pí; #99D3

+駔 > zăng; #99D4

+駕 > jià; #99D5

+駖 > líng; #99D6

+駗 > zhēn; #99D7

+駘 > tái; #99D8

+駙 > fù; #99D9

+駚 > yăng; #99DA

+駛 > shĭ; #99DB

+駜 > bì; #99DC

+駝 > túo; #99DD

+駞 > túo; #99DE

+駟 > sì; #99DF

+駠 > líu; #99E0

+駡 > mà; #99E1

+駢 > pián; #99E2

+駣 > táo; #99E3

+駤 > zhì; #99E4

+駥 > róng; #99E5

+駦 > téng; #99E6

+駧 > dòng; #99E7

+駨 > xún; #99E8

+駩 > quán; #99E9

+駪 > shēn; #99EA

+駫 > jīong; #99EB

+駬 > ĕr; #99EC

+駭 > hài; #99ED

+駮 > bó; #99EE

+駯 > zhu; #99EF

+駰 > yīn; #99F0

+駱 > lùo; #99F1

+駳 > dàn; #99F3

+駴 > xiè; #99F4

+駵 > líu; #99F5

+駶 > jú; #99F6

+駷 > sŏng; #99F7

+駸 > qīn; #99F8

+駹 > máng; #99F9

+駺 > liáng; #99FA

+駻 > hàn; #99FB

+駼 > tú; #99FC

+駽 > xuàn; #99FD

+駾 > tùi; #99FE

+駿 > jùn; #99FF

+騀 > é; #9A00

+騁 > chĕng; #9A01

+騂 > xīn; #9A02

+騃 > ái; #9A03

+騄 > lù; #9A04

+騅 > zhūi; #9A05

+騆 > zhōu; #9A06

+騇 > shĕ; #9A07

+騈 > pián; #9A08

+騉 > kūn; #9A09

+騊 > táo; #9A0A

+騋 > lái; #9A0B

+騌 > zōng; #9A0C

+騍 > kè; #9A0D

+騎 > qí; #9A0E

+騏 > qí; #9A0F

+騐 > yàn; #9A10

+騑 > fēi; #9A11

+騒 > sāo; #9A12

+験 > yăn; #9A13

+騔 > jié; #9A14

+騕 > yăo; #9A15

+騖 > wù; #9A16

+騗 > piàn; #9A17

+騘 > cōng; #9A18

+騙 > piàn; #9A19

+騚 > qián; #9A1A

+騛 > fēi; #9A1B

+騜 > huáng; #9A1C

+騝 > jiān; #9A1D

+騞 > hùo; #9A1E

+騟 > yù; #9A1F

+騠 > tí; #9A20

+騡 > quán; #9A21

+騢 > xiá; #9A22

+騣 > zōng; #9A23

+騤 > kúi; #9A24

+騥 > róu; #9A25

+騦 > sī; #9A26

+騧 > guā; #9A27

+騨 > túo; #9A28

+騩 > kùi; #9A29

+騪 > sōu; #9A2A

+騫 > qiān; #9A2B

+騬 > chéng; #9A2C

+騭 > zhì; #9A2D

+騮 > líu; #9A2E

+騯 > páng; #9A2F

+騰 > téng; #9A30

+騱 > xī; #9A31

+騲 > căo; #9A32

+騳 > dú; #9A33

+騴 > yàn; #9A34

+騵 > yuán; #9A35

+騶 > zōu; #9A36

+騷 > sāo; #9A37

+騸 > shàn; #9A38

+騹 > lí; #9A39

+騺 > zhì; #9A3A

+騻 > shuăng; #9A3B

+騼 > lù; #9A3C

+騽 > xí; #9A3D

+騾 > lúo; #9A3E

+騿 > zhāng; #9A3F

+驀 > mò; #9A40

+驁 > áo; #9A41

+驂 > cān; #9A42

+驃 > piào; #9A43

+驄 > cōng; #9A44

+驅 > qū; #9A45

+驆 > bì; #9A46

+驇 > zhì; #9A47

+驈 > yù; #9A48

+驉 > xū; #9A49

+驊 > huá; #9A4A

+驋 > bō; #9A4B

+驌 > sù; #9A4C

+驍 > xiāo; #9A4D

+驎 > lín; #9A4E

+驏 > chăn; #9A4F

+驐 > dūn; #9A50

+驑 > líu; #9A51

+驒 > túo; #9A52

+驓 > zēng; #9A53

+驔 > tán; #9A54

+驕 > jiāo; #9A55

+驖 > tiĕ; #9A56

+驗 > yàn; #9A57

+驘 > lúo; #9A58

+驙 > zhān; #9A59

+驚 > jīng; #9A5A

+驛 > yì; #9A5B

+驜 > yè; #9A5C

+驝 > tūo; #9A5D

+驞 > bīn; #9A5E

+驟 > zòu; #9A5F

+驠 > yàn; #9A60

+驡 > péng; #9A61

+驢 > lǘ; #9A62

+驣 > téng; #9A63

+驤 > xiāng; #9A64

+驥 > jì; #9A65

+驦 > shuāng; #9A66

+驧 > jú; #9A67

+驨 > xī; #9A68

+驩 > huān; #9A69

+驪 > lí; #9A6A

+驫 > biāo; #9A6B

+马 > mă; #9A6C

+驭 > yù; #9A6D

+驮 > túo; #9A6E

+驯 > xún; #9A6F

+驰 > chí; #9A70

+驱 > qū; #9A71

+驲 > rì; #9A72

+驳 > bó; #9A73

+驴 > lǘ; #9A74

+驵 > zăng; #9A75

+驶 > shĭ; #9A76

+驷 > sì; #9A77

+驸 > fù; #9A78

+驹 > jū; #9A79

+驺 > zōu; #9A7A

+驻 > zhù; #9A7B

+驼 > túo; #9A7C

+驽 > nú; #9A7D

+驾 > jià; #9A7E

+驿 > yì; #9A7F

+骀 > tái; #9A80

+骁 > xiāo; #9A81

+骂 > mà; #9A82

+骃 > yīn; #9A83

+骄 > jiāo; #9A84

+骅 > huá; #9A85

+骆 > lùo; #9A86

+骇 > hài; #9A87

+骈 > pián; #9A88

+骉 > biāo; #9A89

+骊 > lí; #9A8A

+骋 > chĕng; #9A8B

+验 > yàn; #9A8C

+骍 > xīn; #9A8D

+骎 > qīn; #9A8E

+骏 > jùn; #9A8F

+骐 > qí; #9A90

+骑 > qí; #9A91

+骒 > kè; #9A92

+骓 > zhūi; #9A93

+骔 > zōng; #9A94

+骕 > sù; #9A95

+骖 > cān; #9A96

+骗 > piàn; #9A97

+骘 > zhì; #9A98

+骙 > kúi; #9A99

+骚 > sāo; #9A9A

+骛 > wù; #9A9B

+骜 > áo; #9A9C

+骝 > líu; #9A9D

+骞 > qiān; #9A9E

+骟 > shàn; #9A9F

+骠 > piào; #9AA0

+骡 > lúo; #9AA1

+骢 > cōng; #9AA2

+骣 > chăn; #9AA3

+骤 > zòu; #9AA4

+骥 > jì; #9AA5

+骦 > shuāng; #9AA6

+骧 > xiāng; #9AA7

+骨 > gŭ; #9AA8

+骩 > wĕi; #9AA9

+骪 > wĕi; #9AAA

+骫 > wĕi; #9AAB

+骬 > yú; #9AAC

+骭 > gàn; #9AAD

+骮 > yì; #9AAE

+骯 > āng; #9AAF

+骰 > tóu; #9AB0

+骱 > xiè; #9AB1

+骲 > bāo; #9AB2

+骳 > bì; #9AB3

+骴 > chī; #9AB4

+骵 > tĭ; #9AB5

+骶 > dĭ; #9AB6

+骷 > kū; #9AB7

+骸 > hái; #9AB8

+骹 > qiāo; #9AB9

+骺 > gòu; #9ABA

+骻 > kuà; #9ABB

+骼 > gé; #9ABC

+骽 > tŭi; #9ABD

+骾 > gĕng; #9ABE

+骿 > pián; #9ABF

+髀 > bì; #9AC0

+髁 > kē; #9AC1

+髂 > kà; #9AC2

+髃 > yú; #9AC3

+髄 > sŭi; #9AC4

+髅 > lóu; #9AC5

+髆 > bó; #9AC6

+髇 > xiāo; #9AC7

+髈 > páng; #9AC8

+髉 > bō; #9AC9

+髊 > cī; #9ACA

+髋 > kuān; #9ACB

+髌 > bìn; #9ACC

+髍 > mó; #9ACD

+髎 > liáo; #9ACE

+髏 > lóu; #9ACF

+髐 > náo; #9AD0

+髑 > dú; #9AD1

+髒 > zāng; #9AD2

+髓 > sŭi; #9AD3

+體 > tĭ; #9AD4

+髕 > bìn; #9AD5

+髖 > kuān; #9AD6

+髗 > lú; #9AD7

+高 > gāo; #9AD8

+髙 > gāo; #9AD9

+髚 > qiào; #9ADA

+髛 > kāo; #9ADB

+髜 > qiāo; #9ADC

+髝 > lào; #9ADD

+髞 > zào; #9ADE

+髟 > biāo; #9ADF

+髠 > kūn; #9AE0

+髡 > kūn; #9AE1

+髢 > tì; #9AE2

+髣 > făng; #9AE3

+髤 > xīu; #9AE4

+髥 > rán; #9AE5

+髦 > máo; #9AE6

+髧 > dàn; #9AE7

+髨 > kūn; #9AE8

+髩 > bìn; #9AE9

+髪 > fà; #9AEA

+髫 > tiáo; #9AEB

+髬 > peng; #9AEC

+髭 > zī; #9AED

+髮 > fă; #9AEE

+髯 > rán; #9AEF

+髰 > tì; #9AF0

+髱 > pào; #9AF1

+髲 > pī; #9AF2

+髳 > máo; #9AF3

+髴 > fú; #9AF4

+髵 > ér; #9AF5

+髶 > róng; #9AF6

+髷 > qū; #9AF7

+髸 > gong; #9AF8

+髹 > xīu; #9AF9

+髺 > guà; #9AFA

+髻 > jì; #9AFB

+髼 > péng; #9AFC

+髽 > zhuā; #9AFD

+髾 > shāo; #9AFE

+髿 > shā; #9AFF

+鬀 > tì; #9B00

+鬁 > lì; #9B01

+鬂 > bìn; #9B02

+鬃 > zōng; #9B03

+鬄 > tì; #9B04

+鬅 > péng; #9B05

+鬆 > sōng; #9B06

+鬇 > zhēng; #9B07

+鬈 > quán; #9B08

+鬉 > zōng; #9B09

+鬊 > shùn; #9B0A

+鬋 > jiān; #9B0B

+鬌 > dŭo; #9B0C

+鬍 > hú; #9B0D

+鬎 > là; #9B0E

+鬏 > jīu; #9B0F

+鬐 > qí; #9B10

+鬑 > lián; #9B11

+鬒 > zhĕn; #9B12

+鬓 > bìn; #9B13

+鬔 > péng; #9B14

+鬕 > mò; #9B15

+鬖 > sān; #9B16

+鬗 > màn; #9B17

+鬘 > mán; #9B18

+鬙 > sēng; #9B19

+鬚 > xū; #9B1A

+鬛 > liè; #9B1B

+鬜 > qiān; #9B1C

+鬝 > qiān; #9B1D

+鬞 > nóng; #9B1E

+鬟 > huán; #9B1F

+鬠 > kuài; #9B20

+鬡 > níng; #9B21

+鬢 > bìn; #9B22

+鬣 > liè; #9B23

+鬤 > ráng; #9B24

+鬥 > dòu; #9B25

+鬦 > dòu; #9B26

+鬧 > nào; #9B27

+鬨 > hōng; #9B28

+鬩 > xì; #9B29

+鬪 > dòu; #9B2A

+鬫 > hăn; #9B2B

+鬬 > dòu; #9B2C

+鬭 > dòu; #9B2D

+鬮 > jīu; #9B2E

+鬯 > chàng; #9B2F

+鬰 > yù; #9B30

+鬱 > yù; #9B31

+鬲 > lì; #9B32

+鬳 > juàn; #9B33

+鬴 > fŭ; #9B34

+鬵 > qián; #9B35

+鬶 > gūi; #9B36

+鬷 > zōng; #9B37

+鬸 > lìu; #9B38

+鬹 > gūi; #9B39

+鬺 > shāng; #9B3A

+鬻 > yù; #9B3B

+鬼 > gŭi; #9B3C

+鬽 > mèi; #9B3D

+鬾 > jì; #9B3E

+鬿 > qí; #9B3F

+魀 > jiè; #9B40

+魁 > kúi; #9B41

+魂 > hún; #9B42

+魃 > bá; #9B43

+魄 > pò; #9B44

+魅 > mèi; #9B45

+魆 > xù; #9B46

+魇 > yăn; #9B47

+魈 > xiāo; #9B48

+魉 > liăng; #9B49

+魊 > yù; #9B4A

+魋 > túi; #9B4B

+魌 > qī; #9B4C

+魍 > wăng; #9B4D

+魎 > liăng; #9B4E

+魏 > wèi; #9B4F

+魐 > jiān; #9B50

+魑 > chī; #9B51

+魒 > piāo; #9B52

+魓 > bì; #9B53

+魔 > mó; #9B54

+魕 > jĭ; #9B55

+魖 > xū; #9B56

+魗 > chŏu; #9B57

+魘 > yăn; #9B58

+魙 > zhăn; #9B59

+魚 > yú; #9B5A

+魛 > dāo; #9B5B

+魜 > rén; #9B5C

+魝 > jì; #9B5D

+魟 > gōng; #9B5F

+魠 > túo; #9B60

+魡 > diào; #9B61

+魢 > jĭ; #9B62

+魣 > xù; #9B63

+魤 > é; #9B64

+魥 > è; #9B65

+魦 > shā; #9B66

+魧 > háng; #9B67

+魨 > tún; #9B68

+魩 > mò; #9B69

+魪 > jiè; #9B6A

+魫 > shĕn; #9B6B

+魬 > făn; #9B6C

+魭 > yuán; #9B6D

+魮 > bí; #9B6E

+魯 > lŭ; #9B6F

+魰 > wén; #9B70

+魱 > hú; #9B71

+魲 > lú; #9B72

+魳 > zá; #9B73

+魴 > fáng; #9B74

+魵 > fén; #9B75

+魶 > nà; #9B76

+魷 > yóu; #9B77

+魺 > hé; #9B7A

+魻 > xiá; #9B7B

+魼 > qū; #9B7C

+魽 > hān; #9B7D

+魾 > pí; #9B7E

+魿 > líng; #9B7F

+鮀 > túo; #9B80

+鮁 > bō; #9B81

+鮂 > qíu; #9B82

+鮃 > píng; #9B83

+鮄 > fú; #9B84

+鮅 > bì; #9B85

+鮆 > jì; #9B86

+鮇 > wèi; #9B87

+鮈 > jū; #9B88

+鮉 > diāo; #9B89

+鮊 > bó; #9B8A

+鮋 > yóu; #9B8B

+鮌 > gŭn; #9B8C

+鮍 > pī; #9B8D

+鮎 > nián; #9B8E

+鮏 > xīng; #9B8F

+鮐 > tái; #9B90

+鮑 > bào; #9B91

+鮒 > fù; #9B92

+鮓 > zhă; #9B93

+鮔 > jù; #9B94

+鮕 > gū; #9B95

+鮙 > tà; #9B99

+鮚 > jié; #9B9A

+鮛 > shù; #9B9B

+鮜 > hòu; #9B9C

+鮝 > xiăng; #9B9D

+鮞 > ér; #9B9E

+鮟 > àn; #9B9F

+鮠 > wéi; #9BA0

+鮡 > tiāo; #9BA1

+鮢 > zhū; #9BA2

+鮣 > yìn; #9BA3

+鮤 > liè; #9BA4

+鮥 > lùo; #9BA5

+鮦 > tóng; #9BA6

+鮧 > yí; #9BA7

+鮨 > qí; #9BA8

+鮩 > bìng; #9BA9

+鮪 > wĕi; #9BAA

+鮫 > jiăo; #9BAB

+鮬 > bù; #9BAC

+鮭 > gūi; #9BAD

+鮮 > xiān; #9BAE

+鮯 > gé; #9BAF

+鮰 > húi; #9BB0

+鮳 > kăo; #9BB3

+鮵 > dúo; #9BB5

+鮶 > jūn; #9BB6

+鮷 > tí; #9BB7

+鮸 > măn; #9BB8

+鮹 > xiāo; #9BB9

+鮺 > ză; #9BBA

+鮻 > shā; #9BBB

+鮼 > qīn; #9BBC

+鮽 > yú; #9BBD

+鮾 > nĕi; #9BBE

+鮿 > zhé; #9BBF

+鯀 > gŭn; #9BC0

+鯁 > gĕng; #9BC1

+鯂 > su; #9BC2

+鯃 > wú; #9BC3

+鯄 > qíu; #9BC4

+鯅 > tíng; #9BC5

+鯆 > fŭ; #9BC6

+鯇 > wăn; #9BC7

+鯈 > yóu; #9BC8

+鯉 > lĭ; #9BC9

+鯊 > shā; #9BCA

+鯋 > shā; #9BCB

+鯌 > gào; #9BCC

+鯍 > méng; #9BCD

+鯒 > yŏng; #9BD2

+鯓 > ní; #9BD3

+鯔 > zī; #9BD4

+鯕 > qí; #9BD5

+鯖 > qīng; #9BD6

+鯗 > xiăng; #9BD7

+鯘 > nĕi; #9BD8

+鯙 > chún; #9BD9

+鯚 > jì; #9BDA

+鯛 > diāo; #9BDB

+鯜 > qiè; #9BDC

+鯝 > gù; #9BDD

+鯞 > zhŏu; #9BDE

+鯟 > dōng; #9BDF

+鯠 > lái; #9BE0

+鯡 > fēi; #9BE1

+鯢 > ní; #9BE2

+鯣 > yì; #9BE3

+鯤 > kūn; #9BE4

+鯥 > lù; #9BE5

+鯦 > jìu; #9BE6

+鯧 > chāng; #9BE7

+鯨 > jīng; #9BE8

+鯩 > lún; #9BE9

+鯪 > líng; #9BEA

+鯫 > zōu; #9BEB

+鯬 > lí; #9BEC

+鯭 > mĕng; #9BED

+鯮 > zōng; #9BEE

+鯯 > zhì; #9BEF

+鯰 > nián; #9BF0

+鯴 > shī; #9BF4

+鯵 > shēn; #9BF5

+鯶 > hŭn; #9BF6

+鯷 > shì; #9BF7

+鯸 > hóu; #9BF8

+鯹 > xīng; #9BF9

+鯺 > zhū; #9BFA

+鯻 > là; #9BFB

+鯼 > zōng; #9BFC

+鯽 > jì; #9BFD

+鯾 > biān; #9BFE

+鯿 > biān; #9BFF

+鰀 > huàn; #9C00

+鰁 > quán; #9C01

+鰂 > zé; #9C02

+鰃 > wēi; #9C03

+鰄 > wēi; #9C04

+鰅 > yú; #9C05

+鰆 > qūn; #9C06

+鰇 > róu; #9C07

+鰈 > dié; #9C08

+鰉 > huáng; #9C09

+鰊 > liàn; #9C0A

+鰋 > yăn; #9C0B

+鰌 > qíu; #9C0C

+鰍 > qīu; #9C0D

+鰎 > jiàn; #9C0E

+鰏 > bì; #9C0F

+鰐 > è; #9C10

+鰑 > yáng; #9C11

+鰒 > fù; #9C12

+鰓 > sāi; #9C13

+鰔 > jiăn; #9C14

+鰕 > xiá; #9C15

+鰖 > tŭo; #9C16

+鰗 > hú; #9C17

+鰙 > rùo; #9C19

+鰛 > wēn; #9C1B

+鰜 > jiān; #9C1C

+鰝 > hào; #9C1D

+鰞 > wū; #9C1E

+鰟 > fáng; #9C1F

+鰠 > sāo; #9C20

+鰡 > líu; #9C21

+鰢 > mă; #9C22

+鰣 > shí; #9C23

+鰤 > shī; #9C24

+鰥 > yín; #9C25

+鰦 > z̄; #9C26

+鰧 > téng; #9C27

+鰨 > tà; #9C28

+鰩 > yáo; #9C29

+鰪 > gé; #9C2A

+鰫 > róng; #9C2B

+鰬 > qián; #9C2C

+鰭 > qí; #9C2D

+鰮 > wēn; #9C2E

+鰯 > rùo; #9C2F

+鰱 > lián; #9C31

+鰲 > áo; #9C32

+鰳 > lè; #9C33

+鰴 > hūi; #9C34

+鰵 > mĭn; #9C35

+鰶 > jì; #9C36

+鰷 > tiáo; #9C37

+鰸 > qū; #9C38

+鰹 > jiān; #9C39

+鰺 > sāo; #9C3A

+鰻 > mán; #9C3B

+鰼 > xí; #9C3C

+鰽 > qíu; #9C3D

+鰾 > biào; #9C3E

+鰿 > jī; #9C3F

+鱀 > jì; #9C40

+鱁 > zhú; #9C41

+鱂 > jiāng; #9C42

+鱃 > qīu; #9C43

+鱄 > zhuān; #9C44

+鱅 > yóng; #9C45

+鱆 > zhāng; #9C46

+鱇 > kāng; #9C47

+鱈 > xuĕ; #9C48

+鱉 > biē; #9C49

+鱊 > jué; #9C4A

+鱋 > qū; #9C4B

+鱌 > xiàng; #9C4C

+鱍 > bō; #9C4D

+鱎 > jiāo; #9C4E

+鱏 > xún; #9C4F

+鱐 > sù; #9C50

+鱑 > huáng; #9C51

+鱒 > zùn; #9C52

+鱓 > shàn; #9C53

+鱔 > shàn; #9C54

+鱕 > fān; #9C55

+鱖 > jué; #9C56

+鱗 > lín; #9C57

+鱘 > xún; #9C58

+鱙 > miáo; #9C59

+鱚 > xĭ; #9C5A

+鱝 > fèn; #9C5D

+鱞 > guān; #9C5E

+鱟 > hòu; #9C5F

+鱠 > kuài; #9C60

+鱡 > zéi; #9C61

+鱢 > sāo; #9C62

+鱣 > zhān; #9C63

+鱤 > găn; #9C64

+鱥 > gùi; #9C65

+鱦 > shéng; #9C66

+鱧 > lĭ; #9C67

+鱨 > cháng; #9C68

+鱬 > rú; #9C6C

+鱭 > jì; #9C6D

+鱮 > xù; #9C6E

+鱯 > hùo; #9C6F

+鱱 > lì; #9C71

+鱲 > liè; #9C72

+鱳 > lì; #9C73

+鱴 > miè; #9C74

+鱵 > zhēn; #9C75

+鱶 > xiăng; #9C76

+鱷 > è; #9C77

+鱸 > lú; #9C78

+鱹 > guàn; #9C79

+鱺 > lí; #9C7A

+鱻 > xiān; #9C7B

+鱼 > yú; #9C7C

+鱽 > dāo; #9C7D

+鱾 > jĭ; #9C7E

+鱿 > yóu; #9C7F

+鲀 > tún; #9C80

+鲁 > lŭ; #9C81

+鲂 > fáng; #9C82

+鲃 > bā; #9C83

+鲄 > hé; #9C84

+鲅 > bō; #9C85

+鲆 > píng; #9C86

+鲇 > nián; #9C87

+鲈 > lú; #9C88

+鲉 > yóu; #9C89

+鲊 > zhă; #9C8A

+鲋 > fù; #9C8B

+鲌 > bó; #9C8C

+鲍 > bào; #9C8D

+鲎 > hòu; #9C8E

+鲏 > pī; #9C8F

+鲐 > tái; #9C90

+鲑 > gūi; #9C91

+鲒 > jié; #9C92

+鲓 > kăo; #9C93

+鲔 > wĕi; #9C94

+鲕 > ér; #9C95

+鲖 > tóng; #9C96

+鲗 > zé; #9C97

+鲘 > hòu; #9C98

+鲙 > kuài; #9C99

+鲚 > jì; #9C9A

+鲛 > jiăo; #9C9B

+鲜 > xiān; #9C9C

+鲝 > ză; #9C9D

+鲞 > xiăng; #9C9E

+鲟 > xún; #9C9F

+鲠 > gĕng; #9CA0

+鲡 > lí; #9CA1

+鲢 > lián; #9CA2

+鲣 > jiān; #9CA3

+鲤 > lĭ; #9CA4

+鲥 > shí; #9CA5

+鲦 > tiáo; #9CA6

+鲧 > gŭn; #9CA7

+鲨 > shā; #9CA8

+鲩 > wăn; #9CA9

+鲪 > jūn; #9CAA

+鲫 > jì; #9CAB

+鲬 > yŏng; #9CAC

+鲭 > qīng; #9CAD

+鲮 > líng; #9CAE

+鲯 > qí; #9CAF

+鲰 > zōu; #9CB0

+鲱 > fēi; #9CB1

+鲲 > kūn; #9CB2

+鲳 > chāng; #9CB3

+鲴 > gù; #9CB4

+鲵 > ní; #9CB5

+鲶 > nián; #9CB6

+鲷 > diāo; #9CB7

+鲸 > jīng; #9CB8

+鲹 > shēn; #9CB9

+鲺 > shī; #9CBA

+鲻 > zī; #9CBB

+鲼 > fèn; #9CBC

+鲽 > dié; #9CBD

+鲾 > bì; #9CBE

+鲿 > cháng; #9CBF

+鳀 > shì; #9CC0

+鳁 > wēn; #9CC1

+鳂 > wēi; #9CC2

+鳃 > sāi; #9CC3

+鳄 > è; #9CC4

+鳅 > qīu; #9CC5

+鳆 > fù; #9CC6

+鳇 > huáng; #9CC7

+鳈 > quán; #9CC8

+鳉 > jiāng; #9CC9

+鳊 > biān; #9CCA

+鳋 > sāo; #9CCB

+鳌 > áo; #9CCC

+鳍 > qí; #9CCD

+鳎 > tà; #9CCE

+鳏 > yín; #9CCF

+鳐 > yáo; #9CD0

+鳑 > fáng; #9CD1

+鳒 > jiān; #9CD2

+鳓 > lè; #9CD3

+鳔 > biào; #9CD4

+鳕 > xuĕ; #9CD5

+鳖 > biē; #9CD6

+鳗 > mán; #9CD7

+鳘 > mĭn; #9CD8

+鳙 > yóng; #9CD9

+鳚 > wèi; #9CDA

+鳛 > xí; #9CDB

+鳜 > jué; #9CDC

+鳝 > shàn; #9CDD

+鳞 > lín; #9CDE

+鳟 > zùn; #9CDF

+鳠 > hùo; #9CE0

+鳡 > găn; #9CE1

+鳢 > lĭ; #9CE2

+鳣 > zhān; #9CE3

+鳤 > guăn; #9CE4

+鳥 > niăo; #9CE5

+鳦 > yĭ; #9CE6

+鳧 > fú; #9CE7

+鳨 > lì; #9CE8

+鳩 > jīu; #9CE9

+鳪 > bŭ; #9CEA

+鳫 > yàn; #9CEB

+鳬 > fú; #9CEC

+鳭 > diāo; #9CED

+鳮 > jī; #9CEE

+鳯 > fèng; #9CEF

+鳱 > gān; #9CF1

+鳲 > shī; #9CF2

+鳳 > fèng; #9CF3

+鳴 > míng; #9CF4

+鳵 > băo; #9CF5

+鳶 > yuān; #9CF6

+鳷 > zhī; #9CF7

+鳸 > hù; #9CF8

+鳹 > qín; #9CF9

+鳺 > fū; #9CFA

+鳻 > fēn; #9CFB

+鳼 > wén; #9CFC

+鳽 > jiān; #9CFD

+鳾 > shī; #9CFE

+鳿 > yù; #9CFF

+鴀 > fŏu; #9D00

+鴁 > yiāo; #9D01

+鴂 > juè; #9D02

+鴃 > jué; #9D03

+鴄 > pī; #9D04

+鴅 > huān; #9D05

+鴆 > zhèn; #9D06

+鴇 > băo; #9D07

+鴈 > yàn; #9D08

+鴉 > yā; #9D09

+鴊 > zhèng; #9D0A

+鴋 > fāng; #9D0B

+鴌 > fèng; #9D0C

+鴍 > wén; #9D0D

+鴎 > ōu; #9D0E

+鴏 > tè; #9D0F

+鴐 > jiā; #9D10

+鴑 > nú; #9D11

+鴒 > líng; #9D12

+鴓 > miè; #9D13

+鴔 > fú; #9D14

+鴕 > túo; #9D15

+鴖 > wén; #9D16

+鴗 > lì; #9D17

+鴘 > biàn; #9D18

+鴙 > zhì; #9D19

+鴚 > gē; #9D1A

+鴛 > yuān; #9D1B

+鴜 > zī; #9D1C

+鴝 > qú; #9D1D

+鴞 > xiāo; #9D1E

+鴟 > zhī; #9D1F

+鴠 > dàn; #9D20

+鴡 > jū; #9D21

+鴢 > yòu; #9D22

+鴣 > gū; #9D23

+鴤 > zhōng; #9D24

+鴥 > yù; #9D25

+鴦 > yāng; #9D26

+鴧 > ròng; #9D27

+鴨 > yā; #9D28

+鴩 > tiĕ; #9D29

+鴪 > yù; #9D2A

+鴬 > yīng; #9D2C

+鴭 > zhūi; #9D2D

+鴮 > wū; #9D2E

+鴯 > ér; #9D2F

+鴰 > guā; #9D30

+鴱 > ài; #9D31

+鴲 > zhī; #9D32

+鴳 > yàn; #9D33

+鴴 > héng; #9D34

+鴵 > jiāo; #9D35

+鴶 > jí; #9D36

+鴷 > liè; #9D37

+鴸 > zhū; #9D38

+鴹 > rén; #9D39

+鴺 > yí; #9D3A

+鴻 > hóng; #9D3B

+鴼 > lùo; #9D3C

+鴽 > rú; #9D3D

+鴾 > móu; #9D3E

+鴿 > gē; #9D3F

+鵀 > rèn; #9D40

+鵁 > jiāo; #9D41

+鵂 > xīu; #9D42

+鵃 > zhōu; #9D43

+鵄 > zhī; #9D44

+鵅 > lùo; #9D45

+鵉 > luán; #9D49

+鵊 > jiá; #9D4A

+鵋 > jì; #9D4B

+鵌 > yú; #9D4C

+鵍 > huān; #9D4D

+鵎 > tŭo; #9D4E

+鵏 > bū; #9D4F

+鵐 > wú; #9D50

+鵑 > juān; #9D51

+鵒 > yù; #9D52

+鵓 > bó; #9D53

+鵔 > xùn; #9D54

+鵕 > xùn; #9D55

+鵖 > bì; #9D56

+鵗 > xī; #9D57

+鵘 > jùn; #9D58

+鵙 > jú; #9D59

+鵚 > tú; #9D5A

+鵛 > jīng; #9D5B

+鵜 > tí; #9D5C

+鵝 > é; #9D5D

+鵞 > é; #9D5E

+鵟 > kuáng; #9D5F

+鵠 > hú; #9D60

+鵡 > wŭ; #9D61

+鵢 > shēn; #9D62

+鵣 > lài; #9D63

+鵦 > lù; #9D66

+鵧 > píng; #9D67

+鵨 > shū; #9D68

+鵩 > fú; #9D69

+鵪 > ān; #9D6A

+鵫 > zhào; #9D6B

+鵬 > péng; #9D6C

+鵭 > qín; #9D6D

+鵮 > qiān; #9D6E

+鵯 > bēi; #9D6F

+鵰 > diāo; #9D70

+鵱 > lù; #9D71

+鵲 > què; #9D72

+鵳 > jiān; #9D73

+鵴 > jú; #9D74

+鵵 > tù; #9D75

+鵶 > yā; #9D76

+鵷 > yuān; #9D77

+鵸 > qí; #9D78

+鵹 > lí; #9D79

+鵺 > yè; #9D7A

+鵻 > zhūi; #9D7B

+鵼 > kōng; #9D7C

+鵽 > zhùi; #9D7D

+鵾 > kūn; #9D7E

+鵿 > shēng; #9D7F

+鶀 > qí; #9D80

+鶁 > jīng; #9D81

+鶂 > yì; #9D82

+鶃 > yì; #9D83

+鶄 > jīng; #9D84

+鶅 > zī; #9D85

+鶆 > lái; #9D86

+鶇 > dōng; #9D87

+鶈 > qī; #9D88

+鶉 > chún; #9D89

+鶊 > gēng; #9D8A

+鶋 > jū; #9D8B

+鶌 > qū; #9D8C

+鶏 > jī; #9D8F

+鶐 > shù; #9D90

+鶒 > chì; #9D92

+鶓 > miáo; #9D93

+鶔 > róu; #9D94

+鶕 > ān; #9D95

+鶖 > qīu; #9D96

+鶗 > tí; #9D97

+鶘 > hú; #9D98

+鶙 > tí; #9D99

+鶚 > è; #9D9A

+鶛 > jiē; #9D9B

+鶜 > máo; #9D9C

+鶝 > fú; #9D9D

+鶞 > chūn; #9D9E

+鶟 > tú; #9D9F

+鶠 > yăn; #9DA0

+鶡 > hé; #9DA1

+鶢 > yuán; #9DA2

+鶣 > piān; #9DA3

+鶤 > yùn; #9DA4

+鶥 > méi; #9DA5

+鶦 > hú; #9DA6

+鶧 > yīng; #9DA7

+鶨 > dùn; #9DA8

+鶩 > mù; #9DA9

+鶪 > jú; #9DAA

+鶬 > cāng; #9DAC

+鶭 > făng; #9DAD

+鶮 > gù; #9DAE

+鶯 > yīng; #9DAF

+鶰 > yuán; #9DB0

+鶱 > xuān; #9DB1

+鶲 > wēng; #9DB2

+鶳 > shī; #9DB3

+鶴 > hè; #9DB4

+鶵 > chú; #9DB5

+鶶 > táng; #9DB6

+鶷 > xià; #9DB7

+鶸 > rùo; #9DB8

+鶹 > líu; #9DB9

+鶺 > jí; #9DBA

+鶻 > gú; #9DBB

+鶼 > jiān; #9DBC

+鶽 > zhŭn; #9DBD

+鶾 > hàn; #9DBE

+鶿 > zī; #9DBF

+鷀 > zī; #9DC0

+鷁 > nì; #9DC1

+鷂 > yào; #9DC2

+鷃 > yàn; #9DC3

+鷄 > jī; #9DC4

+鷅 > lì; #9DC5

+鷆 > tián; #9DC6

+鷇 > kòu; #9DC7

+鷈 > tī; #9DC8

+鷉 > tī; #9DC9

+鷊 > nì; #9DCA

+鷋 > tú; #9DCB

+鷌 > mă; #9DCC

+鷍 > jiāo; #9DCD

+鷎 > gāo; #9DCE

+鷏 > tián; #9DCF

+鷐 > chén; #9DD0

+鷑 > lì; #9DD1

+鷒 > zhuān; #9DD2

+鷓 > zhè; #9DD3

+鷔 > áo; #9DD4

+鷕 > yăo; #9DD5

+鷖 > yī; #9DD6

+鷗 > ōu; #9DD7

+鷘 > chì; #9DD8

+鷙 > zhì; #9DD9

+鷚 > liáo; #9DDA

+鷛 > róng; #9DDB

+鷜 > lóu; #9DDC

+鷝 > bì; #9DDD

+鷞 > shuāng; #9DDE

+鷟 > zhúo; #9DDF

+鷠 > yú; #9DE0

+鷡 > wú; #9DE1

+鷢 > jué; #9DE2

+鷣 > yín; #9DE3

+鷤 > quán; #9DE4

+鷥 > sī; #9DE5

+鷦 > jiāo; #9DE6

+鷧 > yì; #9DE7

+鷨 > huā; #9DE8

+鷩 > bì; #9DE9

+鷪 > yīng; #9DEA

+鷫 > sù; #9DEB

+鷬 > huáng; #9DEC

+鷭 > fán; #9DED

+鷮 > jiāo; #9DEE

+鷯 > liáo; #9DEF

+鷰 > yàn; #9DF0

+鷱 > kāo; #9DF1

+鷲 > jìu; #9DF2

+鷳 > xián; #9DF3

+鷴 > xián; #9DF4

+鷵 > tú; #9DF5

+鷶 > măi; #9DF6

+鷷 > zūn; #9DF7

+鷸 > yù; #9DF8

+鷹 > yīng; #9DF9

+鷺 > lù; #9DFA

+鷻 > tuán; #9DFB

+鷼 > xián; #9DFC

+鷽 > xué; #9DFD

+鷾 > yì; #9DFE

+鷿 > pì; #9DFF

+鸀 > shú; #9E00

+鸁 > lúo; #9E01

+鸂 > qī; #9E02

+鸃 > yí; #9E03

+鸄 > jí; #9E04

+鸅 > zhé; #9E05

+鸆 > yú; #9E06

+鸇 > zhān; #9E07

+鸈 > yè; #9E08

+鸉 > yáng; #9E09

+鸊 > pì; #9E0A

+鸋 > níng; #9E0B

+鸌 > hùo; #9E0C

+鸍 > mí; #9E0D

+鸎 > yīng; #9E0E

+鸏 > méng; #9E0F

+鸐 > dí; #9E10

+鸑 > yuè; #9E11

+鸒 > yú; #9E12

+鸓 > lĕi; #9E13

+鸔 > bào; #9E14

+鸕 > lú; #9E15

+鸖 > hè; #9E16

+鸗 > lóng; #9E17

+鸘 > shuāng; #9E18

+鸙 > yuè; #9E19

+鸚 > yīng; #9E1A

+鸛 > guàn; #9E1B

+鸜 > qú; #9E1C

+鸝 > lí; #9E1D

+鸞 > luán; #9E1E

+鸟 > niăo; #9E1F

+鸠 > jīu; #9E20

+鸡 > jī; #9E21

+鸢 > yuān; #9E22

+鸣 > míng; #9E23

+鸤 > shī; #9E24

+鸥 > ōu; #9E25

+鸦 > yā; #9E26

+鸧 > cāng; #9E27

+鸨 > băo; #9E28

+鸩 > zhèn; #9E29

+鸪 > gū; #9E2A

+鸫 > dōng; #9E2B

+鸬 > lú; #9E2C

+鸭 > yā; #9E2D

+鸮 > xiāo; #9E2E

+鸯 > yāng; #9E2F

+鸰 > líng; #9E30

+鸱 > zhī; #9E31

+鸲 > qú; #9E32

+鸳 > yuān; #9E33

+鸴 > xué; #9E34

+鸵 > túo; #9E35

+鸶 > sī; #9E36

+鸷 > zhì; #9E37

+鸸 > ér; #9E38

+鸹 > guā; #9E39

+鸺 > xīu; #9E3A

+鸻 > héng; #9E3B

+鸼 > zhōu; #9E3C

+鸽 > gē; #9E3D

+鸾 > luán; #9E3E

+鸿 > hóng; #9E3F

+鹀 > wú; #9E40

+鹁 > bó; #9E41

+鹂 > lí; #9E42

+鹃 > juān; #9E43

+鹄 > hú; #9E44

+鹅 > é; #9E45

+鹆 > yù; #9E46

+鹇 > xián; #9E47

+鹈 > tí; #9E48

+鹉 > wŭ; #9E49

+鹊 > què; #9E4A

+鹋 > miáo; #9E4B

+鹌 > ān; #9E4C

+鹍 > kūn; #9E4D

+鹎 > bēi; #9E4E

+鹏 > péng; #9E4F

+鹐 > qiān; #9E50

+鹑 > chún; #9E51

+鹒 > gēng; #9E52

+鹓 > yuān; #9E53

+鹔 > sù; #9E54

+鹕 > hú; #9E55

+鹖 > hé; #9E56

+鹗 > è; #9E57

+鹘 > gú; #9E58

+鹙 > qīu; #9E59

+鹚 > zī; #9E5A

+鹛 > méi; #9E5B

+鹜 > mù; #9E5C

+鹝 > nì; #9E5D

+鹞 > yào; #9E5E

+鹟 > wēng; #9E5F

+鹠 > líu; #9E60

+鹡 > jí; #9E61

+鹢 > nì; #9E62

+鹣 > jiān; #9E63

+鹤 > hè; #9E64

+鹥 > yī; #9E65

+鹦 > yīng; #9E66

+鹧 > zhè; #9E67

+鹨 > liáo; #9E68

+鹩 > liáo; #9E69

+鹪 > jiāo; #9E6A

+鹫 > jìu; #9E6B

+鹬 > yù; #9E6C

+鹭 > lù; #9E6D

+鹮 > xuán; #9E6E

+鹯 > zhān; #9E6F

+鹰 > yīng; #9E70

+鹱 > hùo; #9E71

+鹲 > méng; #9E72

+鹳 > guàn; #9E73

+鹴 > shuāng; #9E74

+鹵 > lŭ; #9E75

+鹶 > jīn; #9E76

+鹷 > líng; #9E77

+鹸 > jiăn; #9E78

+鹹 > xián; #9E79

+鹺 > cúo; #9E7A

+鹻 > jiăn; #9E7B

+鹼 > jiăn; #9E7C

+鹽 > yán; #9E7D

+鹾 > cúo; #9E7E

+鹿 > lù; #9E7F

+麀 > yōu; #9E80

+麁 > cū; #9E81

+麂 > jĭ; #9E82

+麃 > biāo; #9E83

+麄 > cū; #9E84

+麅 > biāo; #9E85

+麆 > zhù; #9E86

+麇 > jūn; #9E87

+麈 > zhŭ; #9E88

+麉 > jiān; #9E89

+麊 > mí; #9E8A

+麋 > mí; #9E8B

+麌 > wú; #9E8C

+麍 > líu; #9E8D

+麎 > chén; #9E8E

+麏 > jūn; #9E8F

+麐 > lín; #9E90

+麑 > ní; #9E91

+麒 > qí; #9E92

+麓 > lù; #9E93

+麔 > jìu; #9E94

+麕 > jūn; #9E95

+麖 > jīng; #9E96

+麗 > lì; #9E97

+麘 > xiāng; #9E98

+麙 > yán; #9E99

+麚 > jiā; #9E9A

+麛 > mí; #9E9B

+麜 > lì; #9E9C

+麝 > shè; #9E9D

+麞 > zhāng; #9E9E

+麟 > lín; #9E9F

+麠 > jīng; #9EA0

+麡 > jī; #9EA1

+麢 > líng; #9EA2

+麣 > yán; #9EA3

+麤 > cū; #9EA4

+麥 > mài; #9EA5

+麦 > mài; #9EA6

+麧 > gē; #9EA7

+麨 > chăo; #9EA8

+麩 > fū; #9EA9

+麪 > miăn; #9EAA

+麫 > miăn; #9EAB

+麬 > fū; #9EAC

+麭 > pào; #9EAD

+麮 > qù; #9EAE

+麯 > qú; #9EAF

+麰 > móu; #9EB0

+麱 > fū; #9EB1

+麲 > xiàn; #9EB2

+麳 > lái; #9EB3

+麴 > qú; #9EB4

+麵 > miàn; #9EB5

+麷 > fēng; #9EB7

+麸 > fū; #9EB8

+麹 > qú; #9EB9

+麺 > miàn; #9EBA

+麻 > má; #9EBB

+麼 > mo; #9EBC

+麽 > mo; #9EBD

+麾 > hūi; #9EBE

+黀 > zōu; #9EC0

+黁 > nēn; #9EC1

+黂 > fén; #9EC2

+黃 > huáng; #9EC3

+黄 > huáng; #9EC4

+黅 > jīn; #9EC5

+黆 > guāng; #9EC6

+黇 > tiān; #9EC7

+黈 > tŏu; #9EC8

+黉 > héng; #9EC9

+黊 > xī; #9ECA

+黋 > kuăng; #9ECB

+黌 > héng; #9ECC

+黍 > shŭ; #9ECD

+黎 > lí; #9ECE

+黏 > nián; #9ECF

+黐 > chī; #9ED0

+黑 > hēi; #9ED1

+黒 > hēi; #9ED2

+黓 > yì; #9ED3

+黔 > qián; #9ED4

+黕 > dān; #9ED5

+黖 > xì; #9ED6

+黗 > tuăn; #9ED7

+默 > mò; #9ED8

+黙 > mò; #9ED9

+黚 > qián; #9EDA

+黛 > dài; #9EDB

+黜 > chù; #9EDC

+黝 > yŏu; #9EDD

+點 > diăn; #9EDE

+黟 > yī; #9EDF

+黠 > xiá; #9EE0

+黡 > yăn; #9EE1

+黢 > qū; #9EE2

+黣 > mĕi; #9EE3

+黤 > yăn; #9EE4

+黥 > jīng; #9EE5

+黦 > yù; #9EE6

+黧 > lí; #9EE7

+黨 > dăng; #9EE8

+黩 > dú; #9EE9

+黪 > căn; #9EEA

+黫 > yīn; #9EEB

+黬 > àn; #9EEC

+黭 > yān; #9EED

+黮 > tăn; #9EEE

+黯 > àn; #9EEF

+黰 > zhĕn; #9EF0

+黱 > dài; #9EF1

+黲 > căn; #9EF2

+黳 > yī; #9EF3

+黴 > méi; #9EF4

+黵 > dăn; #9EF5

+黶 > yăn; #9EF6

+黷 > dú; #9EF7

+黸 > lú; #9EF8

+黹 > zhĭ; #9EF9

+黺 > fĕn; #9EFA

+黻 > fù; #9EFB

+黼 > fŭ; #9EFC

+黽 > mĭn; #9EFD

+黾 > mĭn; #9EFE

+黿 > yuán; #9EFF

+鼀 > cù; #9F00

+鼁 > qù; #9F01

+鼂 > cháo; #9F02

+鼃 > wā; #9F03

+鼄 > zhū; #9F04

+鼅 > zhī; #9F05

+鼆 > máng; #9F06

+鼇 > áo; #9F07

+鼈 > biē; #9F08

+鼉 > túo; #9F09

+鼊 > bì; #9F0A

+鼋 > yuán; #9F0B

+鼌 > cháo; #9F0C

+鼍 > túo; #9F0D

+鼎 > dĭng; #9F0E

+鼏 > mì; #9F0F

+鼐 > nài; #9F10

+鼑 > dĭng; #9F11

+鼒 > zī; #9F12

+鼓 > gŭ; #9F13

+鼔 > gŭ; #9F14

+鼕 > dōng; #9F15

+鼖 > fén; #9F16

+鼗 > táo; #9F17

+鼘 > yuān; #9F18

+鼙 > pí; #9F19

+鼚 > chāng; #9F1A

+鼛 > gāo; #9F1B

+鼜 > qì; #9F1C

+鼝 > yuān; #9F1D

+鼞 > tāng; #9F1E

+鼟 > tēng; #9F1F

+鼠 > shŭ; #9F20

+鼡 > shŭ; #9F21

+鼢 > fén; #9F22

+鼣 > fèi; #9F23

+鼤 > wén; #9F24

+鼥 > bá; #9F25

+鼦 > diāo; #9F26

+鼧 > túo; #9F27

+鼨 > tóng; #9F28

+鼩 > qú; #9F29

+鼪 > shēng; #9F2A

+鼫 > shí; #9F2B

+鼬 > yòu; #9F2C

+鼭 > shí; #9F2D

+鼮 > tíng; #9F2E

+鼯 > wú; #9F2F

+鼰 > niàn; #9F30

+鼱 > jīng; #9F31

+鼲 > hún; #9F32

+鼳 > jú; #9F33

+鼴 > yăn; #9F34

+鼵 > tú; #9F35

+鼶 > tí; #9F36

+鼷 > xī; #9F37

+鼸 > xiăn; #9F38

+鼹 > yăn; #9F39

+鼺 > léi; #9F3A

+鼻 > bí; #9F3B

+鼼 > yăo; #9F3C

+鼽 > qíu; #9F3D

+鼾 > hān; #9F3E

+鼿 > wū; #9F3F

+齀 > wù; #9F40

+齁 > hóu; #9F41

+齂 > xì; #9F42

+齃 > gé; #9F43

+齄 > zhā; #9F44

+齅 > xìu; #9F45

+齆 > wèng; #9F46

+齇 > zhā; #9F47

+齈 > nóng; #9F48

+齉 > nàng; #9F49

+齊 > qí; #9F4A

+齋 > zhāi; #9F4B

+齌 > jì; #9F4C

+齍 > zī; #9F4D

+齎 > jī; #9F4E

+齏 > jī; #9F4F

+齐 > qí; #9F50

+齑 > jī; #9F51

+齒 > chĭ; #9F52

+齓 > chèn; #9F53

+齔 > chèn; #9F54

+齕 > hé; #9F55

+齖 > yá; #9F56

+齗 > kĕn; #9F57

+齘 > xiè; #9F58

+齙 > páo; #9F59

+齚 > cùo; #9F5A

+齛 > shì; #9F5B

+齜 > zī; #9F5C

+齝 > chī; #9F5D

+齞 > niàn; #9F5E

+齟 > jŭ; #9F5F

+齠 > tiáo; #9F60

+齡 > líng; #9F61

+齢 > líng; #9F62

+齣 > chū; #9F63

+齤 > quán; #9F64

+齥 > xiè; #9F65

+齦 > kĕn; #9F66

+齧 > niè; #9F67

+齨 > jìu; #9F68

+齩 > yăo; #9F69

+齪 > chùo; #9F6A

+齫 > kŭn; #9F6B

+齬 > yŭ; #9F6C

+齭 > chŭ; #9F6D

+齮 > yĭ; #9F6E

+齯 > ní; #9F6F

+齰 > cùo; #9F70

+齱 > zōu; #9F71

+齲 > qŭ; #9F72

+齳 > nĕn; #9F73

+齴 > xiăn; #9F74

+齵 > óu; #9F75

+齶 > è; #9F76

+齷 > wò; #9F77

+齸 > yì; #9F78

+齹 > chūo; #9F79

+齺 > zōu; #9F7A

+齻 > diān; #9F7B

+齼 > chŭ; #9F7C

+齽 > jìn; #9F7D

+齾 > yà; #9F7E

+齿 > chĭ; #9F7F

+龀 > chèn; #9F80

+龁 > hé; #9F81

+龂 > kĕn; #9F82

+龃 > jŭ; #9F83

+龄 > líng; #9F84

+龅 > páo; #9F85

+龆 > tiáo; #9F86

+龇 > zī; #9F87

+龈 > kĕn; #9F88

+龉 > yŭ; #9F89

+龊 > chùo; #9F8A

+龋 > qŭ; #9F8B

+龌 > wò; #9F8C

+龍 > lóng; #9F8D

+龎 > páng; #9F8E

+龏 > gōng; #9F8F

+龐 > páng; #9F90

+龑 > yăn; #9F91

+龒 > lóng; #9F92

+龓 > lóng; #9F93

+龔 > gōng; #9F94

+龕 > kān; #9F95

+龖 > tà; #9F96

+龗 > líng; #9F97

+龘 > tà; #9F98

+龙 > lóng; #9F99

+龚 > gōng; #9F9A

+龛 > kān; #9F9B

+龜 > gūi; #9F9C

+龝 > qīu; #9F9D

+龞 > biē; #9F9E

+龟 > gūi; #9F9F

+龠 > yuè; #9FA0

+龡 > chùi; #9FA1

+龢 > hé; #9FA2

+龣 > jué; #9FA3

+龤 > xié; #9FA4

+龥 > yù; #9FA5

+癩 > là; #F90E

+兀 > wù; #FA0C

+嗀 > hùo; #FA0D

+塚 > zhŏng; #FA10

+晴 > qíng; #FA12

+凞 > xī; #FA15

+猪 > zhū; #FA16

+益 > yì; #FA17

+礼 > lĭ; #FA18

+神 > shén; #FA19

+祥 > xiáng; #FA1A

+福 > fú; #FA1B

+靖 > jìng; #FA1C

+精 > jīng; #FA1D

+羽 > yŭ; #FA1E

+諸 > zhū; #FA22

+逸 > yì; #FA25

+都 > dū; #FA26

+飯 > fàn; #FA2A

+飼 > sì; #FA2B

+館 > guăn; #FA2C

+鶴 > hè; #FA2D

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Hiragana_Katakana.utf8.txt b/src/com/ibm/text/resources/Transliterator_Hiragana_Katakana.utf8.txt
new file mode 100755
index 0000000..df904d4
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Hiragana_Katakana.utf8.txt
@@ -0,0 +1,200 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 2001

+#--------------------------------------------------------------------

+

+# Hiragana-Katana

+

+# This is largely a one-to-one mapping, but it has a

+# few kinks:

+

+# 1. The Katakana va/vi/ve/vo (30F7-30FA) have no

+# Hiragana equivalents.  We use Hiragana wa/wi/we/wo

+# (308F-3092) with a voicing mark (3099), which is

+# semantically equivalent.  However, this is a non-

+# roundtripping transformation.

+

+# 2. The Katakana small ka/ke (30F5,30F6) have no

+# Hiragana equiavlents.  We convert them to normal

+# Hiragana ka/ke (304B,3051).  This is a one-way

+# information-losing transformation and precludes

+# round-tripping of 30F5 and 30F6.

+

+# 3. The combining marks 3099-309C are in the Hiragana

+# block, but they apply to Katakana as well, so we

+# leave them untouched.

+

+# 4. The Katakana prolonged sound mark 30FC doubles the

+# preceding vowel.  This is a one-way information-

+# losing transformation from Katakana to Hiragana.

+

+# 5. The Katakana middle dot separates words in foreign

+# expressions; we leave this unmodified.

+

+# The above points preclude successful round-trip

+# transformations of arbitrary input text.  However,

+# they provide naturalistic results that should conform

+# to user expectations.

+

+

+# Combining equivalents va/vi/ve/vo

+わ゙ <> ヷ;

+ゐ゙ <> ヸ;

+ゑ゙ <> ヹ;

+を゙ <> ヺ;

+

+# One-to-one mappings, main block

+# 3041:3094 <> 30A1:30F4

+# 309D,E <> 30FD,E

+ぁ <> ァ;

+あ <> ア;

+ぃ <> ィ;

+い <> イ;

+ぅ <> ゥ;

+う <> ウ;

+ぇ <> ェ;

+え <> エ;

+ぉ <> ォ;

+お <> オ;

+か <> カ;

+が <> ガ;

+き <> キ;

+ぎ <> ギ;

+く <> ク;

+ぐ <> グ;

+け <> ケ;

+げ <> ゲ;

+こ <> コ;

+ご <> ゴ;

+さ <> サ;

+ざ <> ザ;

+し <> シ;

+じ <> ジ;

+す <> ス;

+ず <> ズ;

+せ <> セ;

+ぜ <> ゼ;

+そ <> ソ;

+ぞ <> ゾ;

+た <> タ;

+だ <> ダ;

+ち <> チ;

+ぢ <> ヂ;

+っ <> ッ;

+つ <> ツ;

+づ <> ヅ;

+て <> テ;

+で <> デ;

+と <> ト;

+ど <> ド;

+な <> ナ;

+に <> ニ;

+ぬ <> ヌ;

+ね <> ネ;

+の <> ノ;

+は <> ハ;

+ば <> バ;

+ぱ <> パ;

+ひ <> ヒ;

+び <> ビ;

+ぴ <> ピ;

+ふ <> フ;

+ぶ <> ブ;

+ぷ <> プ;

+へ <> ヘ;

+べ <> ベ;

+ぺ <> ペ;

+ほ <> ホ;

+ぼ <> ボ;

+ぽ <> ポ;

+ま <> マ;

+み <> ミ;

+む <> ム;

+め <> メ;

+も <> モ;

+ゃ <> ャ;

+や <> ヤ;

+ゅ <> ュ;

+ゆ <> ユ;

+ょ <> ョ;

+よ <> ヨ;

+ら <> ラ;

+り <> リ;

+る <> ル;

+れ <> レ;

+ろ <> ロ;

+ゎ <> ヮ;

+わ <> ワ;

+ゐ <> ヰ;

+ゑ <> ヱ;

+を <> ヲ;

+ん <> ン;

+ゔ <> ヴ;

+ゝ <> ヽ;

+ゞ <> ヾ;

+

+# One-way Katakana-Hiragana xform of small K ka/ke to

+# normal H ka/ke.

+か < ヵ;

+け < ヶ;

+

+# Katakana followed by a prolonged sound mark 30FC has

+# its final vowel doubled.  This is a Katakana-Hiragana

+# one-way information-losing transformation.  We

+# include the small Katakana (e.g., small A 3041) and

+# do not distinguish them from their large

+# counterparts.  It doesn't make sense to double a

+# small counterpart vowel as a small Hiragana vowel, so

+# we don't do so.  In natural text this should never

+# occur anyway.  If a 30FC is seen without a preceding

+# vowel sound (e.g., after n 30F3) we do not change it.

+

+### $long = ー;

+

+# The following categories are Hiragana, not Katakana

+# as might be expected, since by the time we get to the

+# 30FC, the preceding character will have already been

+# transformed to Hiragana.

+

+# {The following mechanically generated from the

+# Unicode 3.0 data:}

+

+$xa = [ \

+ぁ あ か が さ ざ \

+た だ な は ば ぱ \

+ま ゃ や ら ゎ わ \

+];

+

+$xi = [ \

+ぃ い き ぎ し じ \

+ち ぢ に ひ び ぴ \

+み り ゐ \

+];

+

+$xu = [ \

+ぅ う く ぐ す ず \

+っ つ づ ぬ ふ ぶ \

+ぷ む ゅ ゆ る ゔ \

+];

+

+$xe = [ \

+ぇ え け げ せ ぜ \

+て で ね へ べ ぺ \

+め れ ゑ \

+];

+

+$xo = [ \

+ぉ お こ ご そ ぞ \

+と ど の ほ ぼ ぽ \

+も ょ よ ろ を \

+];

+

+あ < $xa {ー};

+い < $xi {ー};

+う < $xu {ー};

+え < $xe {ー};

+お < $xo {ー};

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Bengali.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Bengali.utf8.txt
new file mode 100755
index 0000000..c3cb536
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Bengali.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Devanagari.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Devanagari.utf8.txt
new file mode 100755
index 0000000..6b9ac08
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Devanagari.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Gujarati.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Gujarati.utf8.txt
new file mode 100755
index 0000000..41dbcee
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Gujarati.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Gurmukhi.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Gurmukhi.utf8.txt
new file mode 100755
index 0000000..cc60ea9
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Gurmukhi.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Kannada.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Kannada.utf8.txt
new file mode 100755
index 0000000..b1ad591
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Kannada.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Malayalam.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Malayalam.utf8.txt
new file mode 100755
index 0000000..10931d8
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Malayalam.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Oriya.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Oriya.utf8.txt
new file mode 100755
index 0000000..cdf7c2c
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Oriya.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Tamil.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Tamil.utf8.txt
new file mode 100755
index 0000000..5427ac2
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Tamil.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_InterIndic_Telugu.utf8.txt b/src/com/ibm/text/resources/Transliterator_InterIndic_Telugu.utf8.txt
new file mode 100755
index 0000000..fc2b6d2
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_InterIndic_Telugu.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Kanji_English.utf8.txt b/src/com/ibm/text/resources/Transliterator_Kanji_English.utf8.txt
new file mode 100755
index 0000000..9f05282
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Kanji_English.utf8.txt
@@ -0,0 +1,6366 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:42:02 2001

+#--------------------------------------------------------------------

+

+# Kanji-English

+

+丁>'[male adult]';

+七>'[seven]';

+万>'[ten thousand]';

+丈>'[unit of length equal 3.3 meters]';

+三>'[three]';

+上>'[top]';

+下>'[under]';

+不>'[no]';

+与>'[and]';

+丐>'[beggar]';

+丑>'[clown]';

+且>'[moreover]';

+丕>'[great]';

+世>'[generation]';

+丗>'[thirty]';

+丘>'[hill]';

+丙>'[third of heavenly stems]';

+丞>'[assist]';

+両>'[two]';

+並>'[equal to]';

+个>'[numerary adjunct]';

+中>'[central]';

+丱>'[child''s hairstyle bound in two tufts]';

+串>'[string]';

+丶>'[dot]';

+丸>'[small round object]';

+丹>'[cinnabar (native HgS)]';

+主>'[master]';

+丼>'[bowl of food]';

+丿>'[line]';

+乂>'[govern]';

+乃>'[then]';

+久>'[long time (ago)]';

+之>'[''s (marks preceding phrase as modifier of following phrase)]';

+乍>'[suddenly]';

+乎>'[interrogative or exclamatory final particle]';

+乏>'[lack]';

+乕>'[tiger]';

+乖>'[rebel]';

+乗>'[ride]';

+乘>'[ride]';

+乙>'[second heaven''s stem]';

+九>'[nine]';

+乞>'[beg]';

+也>'[also]';

+乢>'[lid]';

+乱>'[confusion]';

+乳>'[breast]';

+乾>'[dry]';

+亀>'[turtle or tortoise]';

+亂>'[confusion]';

+亅>'[hook]';

+了>'[to finish]';

+予>'[I]';

+争>'[dispute]';

+亊>'[affair]';

+事>'[affair]';

+二>'[two]';

+于>'[in]';

+云>'[say]';

+互>'[mutually]';

+五>'[five]';

+井>'[well]';

+亘>'[extend across]';

+亙>'[extend across]';

+些>'[little]';

+亜>'[asia]';

+亞>'[asia]';

+亟>'[urgently]';

+亠>'[head]';

+亡>'[death]';

+亢>'[high]';

+交>'[mix]';

+亥>'[last of 12 earth branches]';

+亦>'[also]';

+亨>'[smoothly]';

+享>'[enjoy]';

+京>'[capital city]';

+亭>'[pavilion]';

+亮>'[bright]';

+亰>'[capital city]';

+亳>'[name of district in Anhui]';

+亶>'[sincere]';

+人>'[man]';

+什>'[file of ten soldiers]';

+仁>'[humaneness]';

+仂>'[surplus or excess]';

+仄>'[slanting]';

+仆>'[fall forward]';

+仇>'[enemy]';

+今>'[now]';

+介>'[forerunner]';

+仍>'[yet]';

+从>'[from]';

+仏>'[buddha]';

+仔>'[small thing]';

+仕>'[official]';

+他>'[other]';

+仗>'[rely upon]';

+付>'[give]';

+仙>'[Taoist super-being]';

+仝>'[together]';

+仞>'[ancient unit of measure (8 feet)]';

+仟>'[one thousand]';

+代>'[replace]';

+令>'[command]';

+以>'[by means of]';

+仭>'[ancient unit of measure (8 feet)]';

+仮>'[falsehood]';

+仰>'[raise the head to look]';

+仲>'[middle brother]';

+件>'[numerary adjunct for article]';

+价>'[price]';

+任>'[trust to]';

+企>'[plan a project]';

+伉>'[compare]';

+伊>'[third person pronoun]';

+伍>'[five]';

+伎>'[talent]';

+伏>'[crouch]';

+伐>'[cut down]';

+休>'[rest]';

+会>'[assemble]';

+伜>'[deputy]';

+伝>'[summon]';

+伯>'[older brother]';

+估>'[merchant]';

+伴>'[companion]';

+伶>'[lonely]';

+伸>'[extend]';

+伺>'[serve]';

+似>'[resemble]';

+伽>'[transcription of sanskrit gha in buddhist texts ('ëmâæ' \"samgha\")]';

+佃>'[tenant farmer]';

+但>'[only]';

+佇>'[wait]';

+位>'[throne]';

+低>'[low]';

+住>'[reside]';

+佐>'[assist]';

+佑>'[help]';

+体>'[body]';

+何>'[what]';

+佗>'[other]';

+余>'[I]';

+佚>'[indulge in pleasures]';

+佛>'[buddha (contraction of MC 'bhiêtdha')]';

+作>'[make]';

+佝>'[rickets]';

+佞>'[flattery]';

+佩>'[belt ornament]';

+佯>'[pretend]';

+佰>'[hundred]';

+佳>'[good]';

+併>'[combine]';

+佶>'[strong]';

+佻>'[frivolous]';

+佼>'[beautiful]';

+使>'[cause]';

+侃>'[upright and strong]';

+來>'[come]';

+侈>'[luxurious]';

+例>'[precedent]';

+侍>'[serve]';

+侏>'[small]';

+侑>'[help]';

+侖>'[logical reasons]';

+侘>'[disappointed]';

+供>'[supply]';

+依>'[rely on]';

+侠>'[chivalrous person]';

+価>'[price]';

+侫>'[flattery]';

+侭>'[complete]';

+侮>'[insult]';

+侯>'[marquis]';

+侵>'[invade]';

+侶>'[companion]';

+便>'[convenience]';

+係>'[bind]';

+促>'[urge]';

+俄>'[sudden(ly)]';

+俊>'[talented]';

+俎>'[chopping board or block]';

+俐>'[smooth]';

+俑>'[wooden figure buried with dead]';

+俔>'[like]';

+俗>'[social customs]';

+俘>'[prisoner of war]';

+俚>'[rustic]';

+俛>'[make effort]';

+保>'[protect]';

+俟>'[wait for]';

+信>'[trust]';

+俣>'[big]';

+#"俣>'[big]'",

+俥>'[rickshaw]';

+修>'[study]';

+俯>'[bow down]';

+俳>'[actor]';

+俵>'[divide]';

+俶>'[start]';

+俸>'[wages]';

+俺>'[personal pronoun]';

+俾>'[so that]';

+倅>'[deputy]';

+倆>'[clever]';

+倉>'[granary]';

+個>'[numerary adjunct]';

+倍>'[times]';

+倏>'[hastily]';

+們>'[adjunct pronoun indicate plural]';

+倒>'[fall over]';

+倔>'[stubborn]';

+倖>'[lucky]';

+候>'[wait]';

+倚>'[rely on]';

+借>'[borrow]';

+倡>'[guide]';

+倣>'[imitate]';

+値>'[price]';

+倥>'[boorish]';

+倦>'[be tired of]';

+倨>'[arrogant]';

+倩>'[beautiful]';

+倪>'[feeble]';

+倫>'[normal human relationships]';

+倬>'[noticeable]';

+倭>'[dwarf]';

+倶>'[all]';

+倹>'[temperate]';

+偃>'[cease]';

+假>'[falsehood]';

+偈>'[brave]';

+偉>'[great]';

+偏>'[inclined one side]';

+偐>'[false]';

+偕>'[together]';

+偖>'[rip up]';

+做>'[work]';

+停>'[stop]';

+健>'[strong]';

+偬>'[urgent]';

+偲>'[talented]';

+側>'[side]';

+偵>'[spy]';

+偶>'[accidentally]';

+偸>'[to steal]';

+偽>'[false]';

+傀>'[great]';

+傅>'[tutor]';

+傍>'[by side of]';

+傑>'[hero]';

+傘>'[umbrella]';

+備>'[prepare]';

+傚>'[imitate]';

+催>'[press]';

+傭>'[hire]';

+傲>'[proud]';

+傳>'[summon]';

+傴>'[humpback]';

+債>'[debt]';

+傷>'[wound]';

+傾>'[upset]';

+僂>'[humpback]';

+僅>'[only]';

+僉>'[all]';

+僊>'[Taoist super-being]';

+働>'[labor]';

+像>'[picture]';

+僑>'[sojourn]';

+僕>'[slave]';

+僖>'[joy]';

+僚>'[companion]';

+僞>'[false]';

+僣>'[assume]';

+僥>'[be lucky]';

+僧>'[buddhist priest]';

+僭>'[assume]';

+僮>'[page]';

+僵>'[stiff and motionless]';

+價>'[price]';

+僻>'[out-of-the-way]';

+儀>'[ceremony]';

+儁>'[outstanding]';

+儂>'[I]';

+億>'[hundred million]';

+儉>'[temperate]';

+儒>'[confucian scholar]';

+儔>'[companion]';

+儕>'[a company]';

+#"儕>'[a company]'",

+儘>'[utmost]';

+#"儘>'[utmost]'",

+償>'[repay]';

+儡>'[puppet]';

+優>'[superior]';

+儲>'[save money]';

+儷>'[spouse]';

+儺>'[rich]';

+儻>'[if]';

+儼>'[grave]';

+儿>'[son]';

+兀>'[to cut off the feet]';

+允>'[to grant]';

+元>'[first]';

+兄>'[elder brother]';

+充>'[fill]';

+兆>'[omen]';

+兇>'[atrocious]';

+先>'[first]';

+光>'[light]';

+克>'[gram]';

+兌>'[cash]';

+免>'[spare]';

+兎>'[rabbit]';

+児>'[son]';

+兒>'[son]';

+兔>'[rabbit]';

+党>'[political party]';

+兜>'[pouch]';

+兢>'[fearful]';

+入>'[enter]';

+全>'[maintain]';

+兩>'[two]';

+兪>'[surname]';

+八>'[eight]';

+公>'[fair]';

+六>'[number six]';

+兮>'[exclamatory particle]';

+共>'[together with]';

+兵>'[soldier]';

+其>'[his]';

+具>'[tool]';

+典>'[law]';

+兼>'[unite]';

+冀>'[hope for]';

+冂>'[wide]';

+内>'[inside]';

+円>'[yen]';

+冉>'[tender]';

+冊>'[book]';

+册>'[book]';

+再>'[again]';

+冏>'[[not found in dictionary]]';

+冐>'[risk]';

+冑>'[helmet]';

+冒>'[risk]';

+冓>'[a secluded place]';

+冕>'[crown]';

+冖>'[cover]';

+冗>'[excessive]';

+写>'[write]';

+冠>'[cap]';

+冢>'[burial mound]';

+冤>'[grievance]';

+冥>'[dark]';

+冦>'[bandits]';

+冨>'[abundant]';

+冩>'[write]';

+冪>'[cover-cloth]';

+冫>'[ice]';

+冬>'[winter]';

+冰>'[ice]';

+冱>'[freezing]';

+冲>'[soar]';

+决>'[decide]';

+冴>'[freezing]';

+况>'[condition]';

+冶>'[smelt]';

+冷>'[cold]';

+冽>'[cold and raw]';

+凄>'[bitter cold]';

+凅>'[dried up]';

+准>'[approve]';

+凉>'[cool]';

+凋>'[be withered]';

+凌>'[pure]';

+凍>'[freeze]';

+凖>'[rule]';

+凛>'[to shiver with cold or fear]';

+凜>'[shiver with cold or fear]';

+凝>'[coagulate]';

+几>'[small table]';

+凡>'[all]';

+処>'[place]';

+凧>'[kite]';

+凩>'[wintry wind]';

+凪>'[calm]';

+凭>'[lean on]';

+凰>'[female phoenix]';

+凱>'[triumphant]';

+凵>'[receptacle]';

+凶>'[culprit]';

+凸>'[protrude]';

+凹>'[concave]';

+出>'[go out]';

+函>'[correspondence]';

+凾>'[correspondence]';

+刀>'[knife]';

+刃>'[edged tool]';

+刄>'[edged tool]';

+分>'[divide]';

+切>'[cut]';

+刈>'[cut off]';

+刊>'[publication]';

+刋>'[publication]';

+刎>'[behead]';

+刑>'[punishment]';

+刔>'[scoop out]';

+列>'[line]';

+初>'[beginning]';

+判>'[judge]';

+別>'[separate]';

+刧>'[disaster]';

+利>'[gains]';

+刪>'[to cut]';

+刮>'[shave]';

+到>'[go to]';

+刳>'[cut out]';

+制>'[system]';

+刷>'[brush]';

+券>'[certificate]';

+刹>'[temple]';

+刺>'[stab]';

+刻>'[carve]';

+剃>'[shave]';

+剄>'[cut throat]';

+則>'[rule]';

+削>'[scrape off]';

+剋>'[subdue]';

+剌>'[slash]';

+前>'[in front]';

+剏>'[establish]';

+剔>'[pick out]';

+剖>'[split in two]';

+剛>'[hard]';

+剞>'[carving or engraving knife]';

+剣>'[sword]';

+剤>'[medicinal preparation]';

+剥>'[peel]';

+剩>'[leftovers]';

+剪>'[scissors]';

+副>'[assist]';

+剰>'[leftovers]';

+剱>'[sword]';

+割>'[cut]';

+剳>'[brief note]';

+剴>'[sharpen]';

+創>'[establish]';

+剽>'[rob]';

+剿>'[destroy]';

+劃>'[divide]';

+劇>'[theatrical plays]';

+劈>'[cut apart]';

+劉>'[surname]';

+劍>'[sword]';

+劑>'[medicinal preparation]';

+劒>'[sword]';

+劔>'[sword]';

+力>'[power]';

+功>'[achievement]';

+加>'[add to]';

+劣>'[bad]';

+助>'[help]';

+努>'[exert]';

+劫>'[take by force]';

+劬>'[be diligent]';

+劭>'[encourage]';

+励>'[strive]';

+労>'[labor]';

+劵>'[certificate]';

+効>'[efficacious]';

+劼>'[be discreet]';

+劾>'[examine into]';

+勁>'[strong]';

+勃>'[suddenly]';

+勅>'[imperial degree]';

+勇>'[brave]';

+勉>'[endeavor]';

+勍>'[strong]';

+勒>'[strangle]';

+動>'[move]';

+勗>'[enjoin]';

+勘>'[investigate]';

+務>'[affairs]';

+勝>'[victory]';

+勞>'[labor]';

+募>'[levy]';

+勠>'[join forces]';

+勢>'[power]';

+勣>'[achievements]';

+勤>'[industrious]';

+勦>'[destroy]';

+勧>'[recommend]';

+勲>'[meritorious deed]';

+勳>'[meritorious deed]';

+勵>'[strive]';

+勸>'[recommend]';

+勹>'[wrap]';

+勺>'[spoon]';

+勾>'[hook]';

+勿>'[must not]';

+匁>'[Japanese unit of weight (1/1000 of a kan)]';

+匂>'[fragrance]';

+包>'[wrap]';

+匆>'[hastily]';

+匈>'[breast]';

+匍>'[crawl]';

+匏>'[gourd]';

+匐>'[fall prostrate]';

+匕>'[spoon]';

+化>'[change]';

+北>'[north]';

+匙>'[spoon]';

+匚>'[box]';

+匝>'[full circle]';

+匠>'[craftsman]';

+匡>'[correct]';

+匣>'[small box]';

+匪>'[bandits]';

+匯>'[concourse]';

+匱>'[to lack]';

+匳>'[ladies toilet case with mirror]';

+匸>'[box]';

+匹>'[bolt of cloth]';

+区>'[area]';

+医>'[cure]';

+匿>'[hide]';

+區>'[area]';

+十>'[ten]';

+千>'[thousand]';

+卅>'[thirty]';

+卆>'[soldier]';

+升>'[arise]';

+午>'[noon]';

+卉>'[general term for plants]';

+半>'[half]';

+卍>'[swastika - fourth of auspicious]';

+卑>'[humble]';

+卒>'[soldier]';

+卓>'[profound]';

+協>'[be united]';

+南>'[south]';

+#"南>'[south]'",

+博>'[gamble]';

+卜>'[fortune telling]';

+卞>'[be impatient]';

+占>'[divine]';

+卦>'[fortune telling]';

+卩>'[seal]';

+卮>'[measuring cup]';

+卯>'[4th of Earth Branches]';

+印>'[print]';

+危>'[dangerous]';

+即>'[promptly]';

+却>'[still]';

+卵>'[egg]';

+卷>'[scroll]';

+卸>'[lay down]';

+卻>'[still]';

+卿>'[noble]';

+厂>'[factory]';

+厄>'[adversity]';

+厖>'[bulky]';

+厘>'[thousandth part of tael]';

+厚>'[thick]';

+原>'[source]';

+厠>'[mingle with]';

+厥>'[personal pronoun - he]';

+厦>'[big building]';

+厨>'[kitchen]';

+厩>'[stable]';

+厭>'[dislike]';

+厮>'[servant]';

+厰>'[factory]';

+厳>'[strict]';

+厶>'[private]';

+去>'[go away]';

+参>'[take part in]';

+參>'[take part in]';

+又>'[and]';

+叉>'[crotch]';

+及>'[extend]';

+友>'[friend]';

+双>'[set of two]';

+反>'[reverse]';

+収>'[gather together]';

+叔>'[father''s younger brother]';

+取>'[take]';

+受>'[receive]';

+叙>'[express]';

+叛>'[rebel]';

+叟>'[old man]';

+叡>'[astute]';

+叢>'[bush]';

+口>'[mouth]';

+古>'[old]';

+句>'[sentence]';

+叨>'[talkative]';

+叩>'[knock]';

+只>'[only]';

+叫>'[cry]';

+召>'[imperial decree]';

+叭>'[trumpet]';

+叮>'[exhort or enjoin repeatedly]';

+可>'[may]';

+台>'[platform]';

+叱>'[scold]';

+史>'[history]';

+右>'[right]';

+叶>'[to harmonize]';

+号>'[mark]';

+司>'[take charge of]';

+#"叹>'[sigh]'",

+吁>'[interjection \"Alas!\"]';

+吃>'[eat]';

+各>'[each]';

+合>'[combine]';

+吉>'[lucky]';

+吊>'[condole]';

+吋>'[inch]';

+同>'[same]';

+名>'[name]';

+后>'[queen]';

+吏>'[government official]';

+吐>'[vomit]';

+向>'[toward]';

+君>'[sovereign]';

+吝>'[stingy]';

+吟>'[sing]';

+吠>'[bark]';

+否>'[not]';

+吩>'[order]';

+含>'[hold in mouth]';

+听>'[hear]';

+吭>'[throat]';

+吮>'[suck with mouth]';

+吶>'[raise voice]';

+吸>'[inhale]';

+吹>'[blow]';

+吻>'[kiss]';

+吼>'[roar]';

+吽>'[\"OM\"]';

+吾>'[i]';

+呀>'[particle used express surprise]';

+呂>'[surname]';

+呆>'[dull]';

+呈>'[submit]';

+呉>'[one of warring states]';

+告>'[tell]';

+呎>'[foot]';

+呑>'[swallow]';

+#"呜>'[sound of crying]'",

+周>'[zhou dynasty]';

+呪>'[curse]';

+#"呰>'[................................]'",

+呱>'[wail]';

+味>'[taste]';

+呵>'[scold]';

+呶>'[talkative]';

+呷>'[suck]';

+呻>'[groan]';

+呼>'[breathe sigh]';

+命>'[life]';

+咀>'[suck]';

+咄>'[noise of rage]';

+咆>'[roar]';

+咋>'[why? how? what?]';

+和>'[harmony]';

+咎>'[fault]';

+咏>'[sing song or poem]';

+咐>'[instruct]';

+咒>'[curse]';

+咢>'[sound]';

+咤>'[scold]';

+咥>'[sound of cat]';

+咨>'[inquire]';

+咫>'[foot measure of Zhou dynasty]';

+咬>'[bite]';

+咯>'[final particle]';

+咲>'[smile]';

+咳>'[cough]';

+咸>'[together]';

+咼>'[chat]';

+咽>'[throat]';

+咾>'[a noise]';

+哀>'[sad]';

+品>'[article]';

+哂>'[smile]';

+哄>'[coax]';

+哇>'[vomit]';

+哈>'[sound of laughter]';

+哉>'[final exclamatory particle]';

+#"哗>'[rushing sound]'",

+員>'[member]';

+哢>'[syllable]';

+哥>'[elder brother]';

+哦>'[oh? really? is that so?]';

+哨>'[whistle]';

+哩>'[mile]';

+哭>'[weep]';

+哮>'[cough]';

+哲>'[wise]';

+哺>'[chew food]';

+哽>'[choke]';

+唄>'[final particle of assertion pathaka]';

+唆>'[make mischief]';

+唇>'[lips]';

+唏>'[weep or sob]';

+唐>'[tang dynasty]';

+唔>'[hold in mouth]';

+唖>'[dumb]';

+售>'[sell]';

+唯>'[only]';

+唱>'[sing]';

+唳>'[cry of bird]';

+唸>'[recite]';

+唹>'[to smile at]';

+唾>'[spit]';

+啀>'[gnaw]';

+啄>'[to peck]';

+#"啄>'[to peck]'",

+商>'[commerce]';

+啌>'[animal disease]';

+問>'[ask (about)]';

+啓>'[open]';

+啖>'[eat]';

+啗>'[eat]';

+啜>'[sip]';

+#"啜>'[sip]'",

+啣>'[hold in mouth]';

+啻>'[only]';

+啼>'[weep]';

+啾>'[wailing of child]';

+喀>'[vomit]';

+喃>'[keep talking]';

+善>'[good]';

+喇>'[horn]';

+喉>'[throat]';

+喊>'[shout]';

+喋>'[nag]';

+喘>'[pant]';

+喙>'[beak]';

+喚>'[call]';

+喜>'[like]';

+喝>'[drink]';

+喞>'[chirping of insects]';

+喟>'[heave sigh]';

+喧>'[lively]';

+喨>'[wail]';

+喩>'[metaphor]';

+喪>'[mourning]';

+喫>'[eat]';

+喬>'[tall]';

+單>'[single]';

+喰>'[to eat]';

+営>'[encampment]';

+嗄>'[hoarse of voice]';

+嗅>'[smell]';

+嗇>'[miserly]';

+嗔>'[be angry at]';

+嗚>'[sound of crying]';

+嗜>'[be fond of]';

+嗟>'[sigh]';

+嗣>'[to connect]';

+嗤>'[laugh at]';

+嗷>'[loud clamor]';

+嗹>'[chatter]';

+嗽>'[cough]';

+嗾>'[to set a dog on]';

+嘆>'[sigh]';

+嘉>'[excellent]';

+嘔>'[vomit]';

+嘖>'[interjection of approval or admi]';

+嘗>'[taste]';

+嘘>'[exhale]';

+嘛>'[final exclamatory particle]';

+嘩>'[rushing sound]';

+嘯>'[roar]';

+嘱>'[order]';

+嘲>'[ridicule]';

+嘴>'[mouth]';

+嘶>'[neighing of a horse]';

+嘸>'[unclear]';

+噂>'[meet]';

+噌>'[scold]';

+噎>'[choke]';

+噐>'[receptacle]';

+噛>'[bite]';

+噤>'[close]';

+器>'[receptacle]';

+噪>'[be noisy]';

+噫>'[belch]';

+噬>'[bite]';

+噴>'[spurt]';

+噸>'[metric ton]';

+噺>'[story]';

+嚀>'[enjoin]';

+嚆>'[give forth sound]';

+嚇>'[scare]';

+嚊>'[to pant]';

+嚏>'[sneeze]';

+嚔>'[sneeze]';

+#"嚜>'[be silent]'",

+嚢>'[bag]';

+嚥>'[swallow]';

+嚮>'[guide]';

+嚴>'[strict]';

+嚶>'[seek friends]';

+嚼>'[prattle]';

+囀>'[sing]';

+囁>'[move lip when speaking]';

+囂>'[be noisy]';

+#"囂>'[be noisy]'",

+囈>'[talk in one''s sleep]';

+#"囍>'[double happiness]'",

+囑>'[order]';

+囓>'[gnaw]';

+囗>'[erect]';

+囘>'[return]';

+囚>'[prisoner]';

+四>'[four]';

+回>'[return]';

+因>'[cause]';

+団>'[sphere]';

+囮>'[inveigle]';

+困>'[surround]';

+囲>'[surround]';

+図>'[diagram]';

+囹>'[prison]';

+固>'[become solid]';

+国>'[nation]';

+囿>'[pen up]';

+圀>'[nation]';

+圃>'[garden]';

+圄>'[prison]';

+圈>'[to circle]';

+圉>'[stable]';

+國>'[nation]';

+圍>'[surround]';

+圏>'[to circle]';

+園>'[garden]';

+圓>'[circle]';

+圖>'[diagram]';

+團>'[sphere]';

+圜>'[circle]';

+土>'[soil]';

+圦>'[(kokuji) water gate]';

+#"圦>'[(kokuji) water gate]'",

+在>'[be at]';

+圭>'[jade pointed at top]';

+地>'[earth]';

+#"圳>'[furrow in field]'",

+#"圳>'[furrow in field]'",

+圻>'[border]';

+址>'[site]';

+坂>'[hillside]';

+均>'[equal]';

+坊>'[neighborhood]';

+坎>'[pit]';

+坏>'[rotten]';

+坐>'[sit]';

+坑>'[pit]';

+坡>'[slope]';

+坤>'[earth]';

+坦>'[flat]';

+坩>'[earthenware]';

+坪>'[level ground]';

+坿>'[mound]';

+垂>'[let down]';

+#"垆>'[black clods of earth]'",

+#"垉>'[................................]'",

+型>'[pattern]';

+垓>'[border]';

+垠>'[boundary]';

+垢>'[dirt]';

+垣>'[low wall]';

+垤>'[ant-hill]';

+#"垩>'[holy]'",

+#"垮>'[be defeated]'",

+#"垲>'[high and dry place]'",

+埀>'[let down]';

+埃>'[fine dust]';

+埆>'[stony]';

+埋>'[bury]';

+城>'[castle]';

+埒>'[enclosure]';

+埓>'[enclosure]';

+埔>'[plain]';

+#"埔>'[plain]'",

+埜>'[open country]';

+域>'[district]';

+埠>'[port city]';

+#"埣>'[................................]'",

+埴>'[soil with large clay content]';

+執>'[hold in hand]';

+培>'[bank up with dirt]';

+基>'[foundation]';

+埼>'[headland]';

+堀>'[cave]';

+堂>'[hall]';

+堅>'[hard]';

+堆>'[heap]';

+堊>'[white earth]';

+堋>'[bury]';

+堕>'[fall]';

+堙>'[bury]';

+堝>'[crucible]';

+堡>'[fort]';

+堤>'[dike]';

+堪>'[adequately capable of]';

+堯>'[a legendary ancient emperor-sage]';

+堰>'[dam]';

+報>'[report]';

+場>'[open space]';

+堵>'[wall]';

+堺>'[person''s name]';

+堽>'[mound]';

+塀>'[wall]';

+塁>'[rampart]';

+塊>'[piece]';

+塋>'[grave]';

+塑>'[model in clay]';

+塒>'[roost]';

+塔>'[tower]';

+塗>'[smear]';

+塘>'[pond]';

+塙>'[truly]';

+塚>'[cemetery]';

+塞>'[stop up]';

+塢>'[entrenchment]';

+塩>'[salt]';

+填>'[fill in]';

+#"塭>'[[not found in any dictionary]]'",

+塲>'[open space]';

+塵>'[dust]';

+塹>'[moat]';

+塾>'[village school]';

+境>'[boundery]';

+墅>'[villa]';

+墓>'[grave]';

+増>'[increase]';

+墜>'[fall down]';

+墟>'[high mound]';

+墨>'[ink]';

+墫>'[cup]';

+墮>'[fall]';

+墳>'[grave]';

+#"墳>'[grave]'",

+#"墳>'[grave]'",

+墺>'[4 walls]';

+墻>'[wall]';

+墾>'[cultivate]';

+壁>'[partition wall]';

+壅>'[to obstruct]';

+壇>'[altar]';

+壊>'[bad]';

+壌>'[soil]';

+壑>'[bed of torrent]';

+壓>'[press]';

+壕>'[trench]';

+#"壖>'[open space along water]'",

+壘>'[rampart]';

+壙>'[tomb]';

+壜>'[earthen jar or jug]';

+壞>'[bad]';

+壟>'[grave]';

+壤>'[soil]';

+#"壥>'[................................]'",

+士>'[scholar]';

+壬>'[ninth of ten celestial stems]';

+壮>'[big]';

+壯>'[big]';

+声>'[sound]';

+壱>'[number one]';

+売>'[sell]';

+壷>'[jar]';

+壹>'[number one]';

+壺>'[jar]';

+壻>'[son-in-law]';

+壼>'[palace corridor or passageway]';

+壽>'[old age]';

+夂>'[go]';

+変>'[change]';

+夊>'[Radical No. 35]';

+夏>'[summer]';

+夐>'[long]';

+夕>'[evening]';

+外>'[out]';

+夘>'[4th of Earth Branches]';

+夙>'[early in morning]';

+多>'[much]';

+夛>'[much]';

+夜>'[night]';

+夢>'[dream]';

+夥>'[companion]';

+大>'[big]';

+天>'[sky]';

+太>'[very]';

+夫>'[man]';

+夬>'[parted]';

+夭>'[young]';

+央>'[center]';

+失>'[lose]';

+夲>'[advance quickly]';

+夷>'[ancient barbarian tribes]';

+夸>'[extravagant]';

+夾>'[be wedged or inserted between]';

+奄>'[ere long]';

+奇>'[strange]';

+奈>'[but]';

+奉>'[offer]';

+奎>'[stride of man]';

+奏>'[memorialize emperor]';

+奐>'[be numerous]';

+契>'[deed]';

+奔>'[run fast]';

+奕>'[in sequence]';

+套>'[case]';

+奘>'[large]';

+奚>'[where? what? how? why?]';

+奠>'[pay respect]';

+奢>'[extravagant]';

+奥>'[mysterious]';

+奧>'[mysterious]';

+奨>'[prize]';

+奩>'[lady''s vanity case]';

+奪>'[take by force]';

+奬>'[prize]';

+奮>'[strive]';

+女>'[woman]';

+奴>'[slave]';

+奸>'[crafty]';

+好>'[good]';

+妁>'[act as go-between]';

+如>'[if]';

+妃>'[wife]';

+妄>'[absurd]';

+妊>'[conceive]';

+妍>'[beautiful]';

+妓>'[prostitute]';

+妖>'[strange]';

+妙>'[mysterious]';

+#"妙>'[mysterious]'",

+妝>'[adorn oneself]';

+妣>'[one''s deceased mother]';

+妥>'[satisfactory]';

+妨>'[interfere with]';

+妬>'[jealous]';

+妲>'[concubine of last ruler of shang]';

+妹>'[younger sister]';

+妻>'[wife]';

+妾>'[concubine]';

+姆>'[child''s governess]';

+姉>'[elder sister]';

+始>'[begin]';

+姐>'[elder sister]';

+姑>'[father''s sister]';

+姓>'[one''s family name]';

+委>'[appoint]';

+姙>'[conceive]';

+姚>'[handsome]';

+姜>'[surname]';

+姥>'[maternal grandmother]';

+姦>'[adultery]';

+姨>'[mother/wife''s sister]';

+姪>'[niece]';

+姫>'[beauty]';

+#"姱>'[beautiful]'",

+姻>'[relatives by marriage]';

+姿>'[one''s manner]';

+威>'[pomp]';

+娃>'[baby]';

+娉>'[beautiful]';

+娑>'[dance]';

+娘>'[mother]';

+#"娚>'[................................]'",

+娜>'[elegant]';

+娟>'[beautiful]';

+娠>'[pregnant]';

+娥>'[be beautiful]';

+娩>'[give birth child]';

+娯>'[pleasure]';

+娵>'[star]';

+娶>'[marry]';

+娼>'[prostitute]';

+婀>'[be beautiful]';

+婁>'[surname]';

+婆>'[old woman]';

+婉>'[amiable]';

+婚>'[get married]';

+婢>'[servant girl]';

+婦>'[married women]';

+婪>'[covet]';

+婬>'[obscene]';

+婿>'[son-in-law]';

+媒>'[go-between]';

+媚>'[charming]';

+媛>'[beauty]';

+媼>'[old woman]';

+媽>'[mother]';

+媾>'[marry]';

+嫁>'[marry]';

+嫂>'[sister-in-law]';

+嫉>'[jealousy]';

+嫋>'[slender and delicate]';

+嫌>'[hate]';

+嫐>'[frolic]';

+嫖>'[patronize prostitutes]';

+嫗>'[old woman]';

+嫡>'[legal wife]';

+嫣>'[charming]';

+嫦>'[name of a moon goddess]';

+嫩>'[soft]';

+嫺>'[refined]';

+嫻>'[elegant]';

+嬉>'[enjoy]';

+嬋>'[beautiful]';

+嬌>'[seductive and loveable]';

+嬖>'[favorite]';

+嬢>'[troubled]';

+嬪>'[court lady]';

+嬬>'[mistress]';

+嬰>'[baby]';

+嬲>'[frolic]';

+#"嬴>'[to win]'",

+嬾>'[lazy]';

+孀>'[widow]';

+孃>'[troubled]';

+孅>'[slender]';

+子>'[offspring]';

+孑>'[remaining]';

+孔>'[opening]';

+孕>'[be pregnant]';

+字>'[letter]';

+存>'[exist]';

+孚>'[brood over eggs]';

+孛>'[comet]';

+孜>'[be as diligent as possible]';

+孝>'[filial piety]';

+孟>'[first in series]';

+季>'[quarter of year]';

+孤>'[orphan]';

+孥>'[one''s children]';

+学>'[learning]';

+孩>'[baby]';

+孫>'[grandchild]';

+孰>'[who? which? what? which one?]';

+孱>'[weak]';

+孳>'[breed in large numbers]';

+孵>'[sit on eggs]';

+學>'[learning]';

+孺>'[child]';

+宀>'[roof]';

+它>'[it]';

+宅>'[residence]';

+宇>'[house]';

+守>'[defend]';

+安>'[peaceful]';

+宋>'[Song dynasty]';

+完>'[complete]';

+宍>'[flesh]';

+宏>'[wide]';

+宕>'[stone quarry]';

+宗>'[lineage]';

+官>'[official]';

+宙>'[time as concept]';

+定>'[decide]';

+宛>'[seem]';

+宜>'[suitable]';

+宝>'[treasure]';

+実>'[real]';

+客>'[guest]';

+宣>'[declare]';

+室>'[room]';

+宥>'[forgive]';

+宦>'[officialdom]';

+宮>'[palace]';

+宰>'[to slaughter]';

+害>'[injure]';

+宴>'[entertain]';

+宵>'[night]';

+家>'[house]';

+宸>'[imperial]';

+容>'[looks]';

+宿>'[stop]';

+寂>'[still]';

+寃>'[grievance]';

+寄>'[send]';

+寅>'[respect]';

+密>'[dense]';

+寇>'[bandits]';

+#"寉>'[................................]'",

+富>'[abundant]';

+寐>'[sleep]';

+寒>'[cold]';

+寓>'[residence]';

+寔>'[real]';

+寛>'[broad]';

+寝>'[sleep]';

+寞>'[silent]';

+察>'[examine]';

+寡>'[widowed]';

+寢>'[sleep]';

+寤>'[few]';

+寥>'[few]';

+實>'[real]';

+寧>'[repose]';

+寨>'[stockade]';

+審>'[examine]';

+寫>'[write]';

+寮>'[shanty]';

+寰>'[great domain]';

+寳>'[treasure]';

+寵>'[favorite]';

+寶>'[treasure]';

+寸>'[inch]';

+寺>'[court]';

+対>'[correct]';

+寿>'[old age]';

+封>'[letter]';

+専>'[monopolize]';

+射>'[shoot]';

+尅>'[subdue]';

+将>'[will]';

+將>'[will]';

+專>'[monopolize]';

+尉>'[officer]';

+尊>'[respect]';

+尋>'[seek]';

+對>'[correct]';

+導>'[direct]';

+小>'[small]';

+少>'[few]';

+尓>'[you]';

+尖>'[sharp]';

+尚>'[still]';

+尠>'[very few]';

+尢>'[weak]';

+尤>'[especially]';

+尨>'[shaggy haired dog]';

+尭>'[a legendary ancient emperor-sage]';

+就>'[just]';

+尸>'[corpse]';

+尹>'[govern]';

+尺>'[chinese measure approx. \"foot\"]';

+尻>'[end of spine]';

+尼>'[buddhist nun]';

+尽>'[exhaust]';

+尾>'[tail]';

+尿>'[urine]';

+局>'[bureau]';

+屁>'[break wind]';

+居>'[live]';

+屆>'[numerary adjunct for time]';

+屈>'[bend]';

+届>'[numerary adjunct for time]';

+屋>'[house]';

+屍>'[corpse]';

+屎>'[excrement]';

+屏>'[folding screen]';

+屐>'[wooden shoes]';

+屑>'[bits]';

+屓>'[gigantic strength]';

+展>'[open]';

+属>'[class]';

+屠>'[butcher]';

+屡>'[frequently]';

+層>'[storey]';

+履>'[footwear]';

+屬>'[class]';

+屮>'[sprout]';

+屯>'[village]';

+山>'[mountain]';

+屶>'[lofty]';

+屹>'[to rise high]';

+岌>'[perilous]';

+岐>'[high]';

+岑>'[steep]';

+岔>'[diverge]';

+岡>'[ridge or crest of hill]';

+岨>'[uneven]';

+岩>'[cliff]';

+岫>'[mountain peak]';

+岬>'[cape]';

+岱>'[daishan one of five sacred mount]';

+岳>'[mountain peak]';

+#"岶>'[................................]'",

+岷>'[min mountain]';

+岸>'[bank]';

+#"岺>'[mountain ridge]'",

+#"岺>'[mountain ridge]'",

+岾>'[mountain pass (korean)]';

+#"峄>'[range of peaks]'",

+峇>'[cave]';

+峙>'[stand erect]';

+峠>'[mountain pass]';

+峡>'[gorge]';

+峨>'[lofty]';

+峩>'[lofty]';

+峪>'[valley]';

+峭>'[steep]';

+峯>'[peak]';

+峰>'[peak]';

+島>'[island]';

+#"峺>'[................................]'",

+峻>'[high]';

+峽>'[gorge]';

+崇>'[esteem]';

+崋>'[flowery]';

+崎>'[rough]';

+崑>'[Kunlun mountains in Jiang Su province.]';

+崔>'[high]';

+崕>'[cliff]';

+崖>'[cliff]';

+崗>'[post]';

+崘>'[kunlun mountains in jiangsu]';

+崙>'[kunlun mountains in jiangsu]';

+崚>'[hilly]';

+崛>'[towering]';

+崟>'[cliffs]';

+崢>'[high]';

+崩>'[rupture]';

+嵋>'[omei mountain in sichuan]';

+嵌>'[inlay]';

+嵎>'[mountain recess]';

+嵐>'[mountain mist]';

+嵒>'[cliff]';

+嵜>'[rough]';

+嵩>'[high]';

+嵬>'[high]';

+嵯>'[high]';

+嵳>'[high]';

+嵶>'[low part of a mountain]';

+嶂>'[cliff]';

+嶄>'[high]';

+嶇>'[steep]';

+嶋>'[island]';

+嶌>'[island]';

+#"嶐>'[................................]'",

+嶝>'[path leading up a mountain]';

+嶢>'[high or tall]';

+#"嶬>'[................................]'",

+嶮>'[high]';

+嶷>'[range of mountains in hunan prov]';

+嶺>'[mountain ridge]';

+嶼>'[island]';

+嶽>'[mountain peak]';

+巉>'[steep]';

+巌>'[cliff]';

+巍>'[high]';

+巒>'[mountain range]';

+巓>'[summit of mountain]';

+巖>'[cliff]';

+巛>'[river]';

+川>'[stream]';

+州>'[administrative division]';

+巡>'[patrol]';

+巣>'[nest]';

+工>'[labor]';

+左>'[left]';

+巧>'[skillful]';

+巨>'[large]';

+巫>'[wizard]';

+差>'[differ]';

+己>'[self]';

+已>'[already]';

+巳>'[sixth of twelve branches]';

+巴>'[greatly desire]';

+巵>'[measuring cup]';

+巷>'[alley]';

+巻>'[scroll]';

+巽>'[5th of the 8 trigrams]';

+巾>'[kerchief]';

+市>'[market]';

+布>'[cotton cloth]';

+帆>'[sail]';

+帋>'[paper]';

+希>'[rare]';

+帑>'[a treasury]';

+帖>'[invitation card]';

+帙>'[book cover]';

+帚>'[broom]';

+帛>'[silks]';

+帝>'[supreme ruler]';

+帥>'[commander]';

+師>'[teacher]';

+席>'[seat]';

+帯>'[belt]';

+帰>'[return]';

+帳>'[tent]';

+帶>'[belt]';

+帷>'[tent]';

+常>'[common]';

+帽>'[hat]';

+幀>'[picture]';

+幃>'[curtain that forms wall]';

+幄>'[tent]';

+幅>'[piece]';

+幇>'[help]';

+幌>'[curtain]';

+幎>'[cover-cloth]';

+幔>'[curtain]';

+幕>'[curtain]';

+幗>'[women''s headgear]';

+幟>'[flag]';

+幡>'[pennant]';

+幢>'[carriage curtain]';

+幣>'[currency]';

+幤>'[evil]';

+干>'[oppose]';

+平>'[flat]';

+年>'[year]';

+幵>'[even level. to raise in both hands]';

+并>'[combine]';

+幸>'[luck(ily)]';

+幹>'[trunk of tree or of human body]';

+幺>'[one]';

+幻>'[illusion]';

+幼>'[infant]';

+幽>'[quiet]';

+幾>'[how many? how much? (a)few]';

+广>'[wide]';

+庁>'[hall]';

+広>'[broad]';

+庄>'[village]';

+庇>'[cover]';

+床>'[bed]';

+序>'[series]';

+底>'[bottom]';

+庖>'[kitchen]';

+店>'[shop]';

+庚>'[seventh of ten cyclical stems]';

+府>'[prefecture]';

+庠>'[village school]';

+度>'[degree]';

+座>'[seat]';

+庫>'[armory]';

+庭>'[courtyard]';

+庵>'[buddhist monastery or nunnery]';

+庶>'[numerous]';

+康>'[peaceful]';

+庸>'[usual]';

+廁>'[toilet]';

+廂>'[side-room]';

+廃>'[abrogate]';

+廈>'[big building]';

+廉>'[upright]';

+廊>'[corridor]';

+廏>'[stable]';

+廐>'[stable]';

+廓>'[broad]';

+廖>'[surname]';

+廚>'[kitchen]';

+廛>'[store]';

+廝>'[servant]';

+廟>'[temple]';

+廠>'[factory]';

+廡>'[corridor]';

+廢>'[abrogate]';

+廣>'[broad]';

+廨>'[government office]';

+廩>'[granary]';

+廬>'[hut]';

+廰>'[hall]';

+廱>'[harmonious]';

+廳>'[hall]';

+廴>'[go]';

+延>'[delay]';

+廷>'[court]';

+廸>'[enlighten]';

+建>'[build]';

+廻>'[circle around]';

+廼>'[then]';

+廾>'[two hands]';

+廿>'[twenty]';

+弁>'[conical cap worn under zhou dyna]';

+弃>'[reject]';

+弄>'[do]';

+弉>'[large]';

+弊>'[evil]';

+弋>'[catch]';

+弌>'[number one]';

+弍>'[number two]';

+式>'[style]';

+弐>'[number two]';

+弑>'[to kill one''s superior]';

+弓>'[bow]';

+弔>'[condole]';

+引>'[pull]';

+弖>'[phonetic for \"te\" (Japanese)]';

+弗>'[not]';

+弘>'[enlarge]';

+弛>'[loosen]';

+弟>'[young brother]';

+弥>'[extensive]';

+弦>'[string]';

+弧>'[wooden bow]';

+弩>'[cross-bow]';

+弭>'[stop]';

+弯>'[bend]';

+弱>'[weak]';

+張>'[stretch]';

+強>'[strong]';

+弸>'[bow stretched full]';

+弼>'[aid]';

+#"弼>'[aid]'",

+#"彁>'[................................]'",

+彈>'[pellet]';

+彊>'[stubborn]';

+彌>'[extensive]';

+彎>'[bend]';

+彑>'[snout]';

+当>'[bear]';

+彖>'[a hog]';

+彗>'[broomstick]';

+彙>'[collect]';

+彜>'[yi]';

+彝>'[yi]';

+彡>'[hair]';

+形>'[form]';

+彦>'[elegant]';

+彩>'[hue]';

+彪>'[tiger]';

+彫>'[carve]';

+彬>'[cultivated]';

+彭>'[name of ancient country]';

+彰>'[clear]';

+影>'[shadow]';

+彳>'[step with left foot]';

+彷>'[like]';

+役>'[service]';

+彼>'[that]';

+彿>'[resembling]';

+往>'[go]';

+征>'[invade]';

+徂>'[go]';

+徃>'[go]';

+径>'[narrow path]';

+待>'[treat]';

+徇>'[comply with]';

+很>'[very]';

+徊>'[linger]';

+律>'[statute]';

+後>'[behind]';

+徐>'[slowly]';

+徑>'[narrow path]';

+徒>'[disciple]';

+従>'[from]';

+得>'[obtain]';

+徘>'[walk back and forth]';

+徙>'[move one''s abode]';

+從>'[from]';

+徠>'[induce]';

+御>'[drive]';

+徨>'[doubtful]';

+復>'[return]';

+循>'[obey]';

+徭>'[conscript labor]';

+微>'[small]';

+徳>'[virtue]';

+徴>'[summon]';

+徹>'[penetrate]';

+徼>'[frontier]';

+徽>'[a badge]';

+心>'[heart]';

+必>'[surely]';

+忌>'[jealous]';

+忍>'[endure]';

+忖>'[guess]';

+志>'[purpose]';

+忘>'[forget]';

+忙>'[busy]';

+応>'[should]';

+忝>'[disgrace]';

+忠>'[loyalty]';

+忤>'[insubordinate]';

+快>'[rapid]';

+忰>'[suffer]';

+忱>'[truth]';

+念>'[think of]';

+忸>'[blush]';

+忻>'[delightful]';

+忽>'[suddenly]';

+忿>'[get angry]';

+怎>'[what? why? how?]';

+怏>'[discontented]';

+#"怐>'[................................]'",

+怒>'[anger]';

+怕>'[fear]';

+怖>'[terror]';

+怙>'[rely on]';

+怛>'[grieved]';

+怜>'[pity]';

+思>'[think]';

+怠>'[idle]';

+怡>'[harmony]';

+急>'[quick]';

+怦>'[eager]';

+性>'[nature]';

+怨>'[hatred]';

+怩>'[shy]';

+怪>'[strange]';

+怫>'[sorry]';

+怯>'[lacking in courage]';

+怱>'[hastily]';

+怺>'[to endure]';

+恁>'[that]';

+恂>'[careful]';

+恃>'[rely on]';

+恆>'[constant]';

+恊>'[be united]';

+恋>'[love]';

+恍>'[seemingly]';

+恐>'[fear]';

+恒>'[constant]';

+恕>'[forgive]';

+恙>'[illness]';

+恚>'[anger]';

+恟>'[scared]';

+恠>'[strange]';

+恢>'[restore]';

+恣>'[indulge oneself]';

+恤>'[show pity]';

+恥>'[shame]';

+恨>'[hatred]';

+恩>'[kindness]';

+恪>'[respectful]';

+恫>'[in pain]';

+恬>'[quiet]';

+恭>'[respectful]';

+息>'[rest]';

+恰>'[just]';

+恵>'[favor]';

+#"恶>'[evil]'",

+悁>'[irritable]';

+悃>'[sincere]';

+悄>'[silent]';

+悉>'[know]';

+悋>'[stingy]';

+悌>'[brotherly]';

+悍>'[courageous]';

+悒>'[sorrowful]';

+悔>'[repent]';

+悖>'[be contradictory to]';

+#"悖>'[be contradictory to]'",

+悚>'[be afraid]';

+悛>'[repent]';

+悟>'[apprehend]';

+悠>'[long]';

+患>'[suffer]';

+悦>'[pleased]';

+悧>'[smooth]';

+悩>'[angered]';

+悪>'[evil]';

+悲>'[sorrow]';

+悳>'[ethics]';

+悴>'[suffer]';

+悵>'[disappointed]';

+悶>'[gloomy]';

+悸>'[fearful]';

+悼>'[grieve]';

+悽>'[sorrowful]';

+情>'[feeling]';

+惆>'[distressed]';

+惇>'[be kind]';

+惑>'[confuse]';

+惓>'[careful]';

+惘>'[disconcerted]';

+惚>'[absent-minded]';

+惜>'[pity]';

+惟>'[but]';

+惠>'[favor]';

+惡>'[evil]';

+惣>'[overall [questionable variant]]';

+惧>'[fear]';

+惨>'[sad]';

+惰>'[indolent]';

+惱>'[angered]';

+想>'[think]';

+惴>'[afraid]';

+惶>'[fearful]';

+惷>'[wriggle]';

+惹>'[irritate]';

+惺>'[intelligent]';

+惻>'[feel anguish]';

+愀>'[change one''s countenance]';

+愁>'[anxiety]';

+愃>'[relax]';

+愆>'[fault]';

+愈>'[more and more]';

+愉>'[pleasant]';

+愍>'[pity]';

+愎>'[obstinate]';

+意>'[thought]';

+愕>'[startled]';

+愚>'[stupid]';

+愛>'[love]';

+感>'[feel]';

+愡>'[absent-minded]';

+愧>'[ashamed]';

+愨>'[sincerity]';

+愬>'[accuse]';

+愴>'[sad]';

+愼>'[act with care]';

+愽>'[gamble]';

+愾>'[anger]';

+愿>'[sincere]';

+慂>'[urge]';

+慄>'[shiver]';

+慇>'[careful]';

+慈>'[kind]';

+慊>'[to resent]';

+態>'[manner]';

+慌>'[nervous]';

+慍>'[angry]';

+慎>'[act with care]';

+#"慓>'[................................]'",

+慕>'[long for]';

+慘>'[sad]';

+慙>'[ashamed]';

+慚>'[ashamed]';

+慝>'[do evil in secret]';

+慟>'[sadness]';

+慢>'[slow(ly)]';

+慣>'[habit]';

+慥>'[sincere]';

+慧>'[bright]';

+慨>'[sigh]';

+慫>'[to alarm]';

+慮>'[be concerned]';

+#"慯>'[................................]'",

+慰>'[comfort]';

+慱>'[sad]';

+慳>'[miserly]';

+慴>'[fear]';

+慵>'[indolent]';

+慶>'[congratulate]';

+慷>'[ardent]';

+慾>'[lust]';

+憂>'[sad]';

+憇>'[rest]';

+憊>'[tired]';

+憎>'[hate]';

+憐>'[pity]';

+憑>'[lean on]';

+憔>'[be worn-out]';

+憖>'[cautious]';

+憙>'[like]';

+憚>'[dread]';

+憤>'[resent]';

+憧>'[irresolute]';

+憩>'[rest]';

+憫>'[pity]';

+憬>'[rouse]';

+憮>'[regretful]';

+憲>'[constitution]';

+憶>'[remember]';

+憺>'[peace]';

+憾>'[regret]';

+懃>'[courteous]';

+懆>'[anxious]';

+懇>'[sincere]';

+懈>'[idle]';

+應>'[should]';

+懊>'[vexed]';

+懋>'[splendid]';

+懌>'[enjoy]';

+懍>'[be afraid of]';

+懐>'[bosom]';

+懣>'[be sick at heart]';

+懦>'[weak]';

+懲>'[punish]';

+懴>'[regret]';

+懶>'[lazy]';

+懷>'[bosom]';

+懸>'[hang]';

+懺>'[regret]';

+懼>'[fear]';

+懽>'[happy]';

+懾>'[afraid]';

+懿>'[virtuous]';

+戀>'[love]';

+戈>'[halberd]';

+戉>'[a battle-axe]';

+戊>'[fifth of ten celestial stems]';

+戌>'[eleventh of terrestrial branches]';

+戍>'[defend borders]';

+戎>'[arms]';

+成>'[completed]';

+我>'[our]';

+戒>'[warn]';

+戔>'[small]';

+或>'[or]';

+戚>'[relative]';

+戛>'[lance]';

+戝>'[pirate]';

+戞>'[lance]';

+戟>'[halberd with crescent blade]';

+戡>'[subjugate]';

+戦>'[war]';

+截>'[cut off]';

+戮>'[kill]';

+戯>'[theatrical play]';

+戰>'[war]';

+戲>'[theatrical play]';

+戳>'[prick]';

+戴>'[wear on top]';

+戸>'[door]';

+戻>'[perverse]';

+房>'[house]';

+所>'[place]';

+扁>'[flat]';

+扇>'[fan]';

+扈>'[escort]';

+扉>'[door panel]';

+手>'[hand]';

+才>'[talent]';

+扎>'[pull up]';

+打>'[strike]';

+払>'[shake off]';

+托>'[hold up with palm]';

+扛>'[carry on shoulders]';

+扞>'[ward off]';

+扠>'[pick up with fork or pincers]';

+扣>'[knock]';

+扨>'[pick up with fork or pincers]';

+扮>'[dress up]';

+扱>'[collect]';

+扶>'[support]';

+批>'[comment]';

+扼>'[grasp]';

+找>'[search]';

+承>'[inherit]';

+技>'[skill]';

+#"抂>'[................................]'",

+抃>'[to clap hands]';

+抄>'[copy]';

+抉>'[choose]';

+把>'[hold]';

+抑>'[press down]';

+抒>'[express]';

+抓>'[scratch]';

+抔>'[take or hold up in both hands]';

+投>'[throw]';

+抖>'[tremble]';

+抗>'[resist]';

+折>'[break off]';

+抛>'[throw (away)]';

+抜>'[uproot]';

+択>'[select]';

+披>'[wear]';

+抬>'[lift]';

+抱>'[embrace]';

+抵>'[resist]';

+抹>'[smear]';

+抻>'[pull]';

+押>'[mortgage]';

+抽>'[draw out]';

+拂>'[shake off]';

+担>'[carry]';

+拆>'[break up]';

+拇>'[thumb]';

+拈>'[pick up with fingers]';

+拉>'[pull]';

+拊>'[slap]';

+拌>'[mix]';

+拍>'[clap]';

+拏>'[take]';

+拐>'[kidnap]';

+拑>'[to clamp]';

+拒>'[ward off with hand]';

+拓>'[expand]';

+拔>'[uproot]';

+拗>'[obstinate]';

+拘>'[restrain]';

+拙>'[stupid]';

+招>'[beckon]';

+拜>'[do obeisance]';

+拝>'[do obeisance]';

+拠>'[occupy]';

+拡>'[expand]';

+括>'[include]';

+拭>'[wipe away stains with cloth]';

+拮>'[laboring hard]';

+拯>'[help]';

+拱>'[fold hands on breast]';

+拳>'[fist]';

+#"拴>'[bind with rope]'",

+拶>'[press]';

+拷>'[torture and interrogate]';

+拾>'[pick up]';

+拿>'[take]';

+持>'[sustain]';

+挂>'[hang]';

+指>'[finger]';

+挈>'[assist]';

+按>'[put hand on]';

+挌>'[fight]';

+挑>'[load carried on shoulders]';

+挙>'[raise]';

+挟>'[clasp under arm]';

+#"挥>'[direct]'",

+挨>'[near]';

+挫>'[push down]';

+振>'[raise]';

+挺>'[stand upright]';

+挽>'[pull]';

+挾>'[clasp under arm]';

+挿>'[insert]';

+捉>'[grasp]';

+捌>'[break open]';

+捍>'[ward off]';

+捏>'[pick with fingers]';

+捐>'[contribute]';

+捕>'[arrest]';

+捗>'[make progress]';

+捜>'[search]';

+捧>'[hold up in two hands]';

+捨>'[discard]';

+捩>'[twist with hands]';

+捫>'[stoke]';

+据>'[occupy]';

+捲>'[curl]';

+捶>'[strike with stick]';

+捷>'[win]';

+捺>'[press down heavily with fringers]';

+捻>'[twist with fingers]';

+掀>'[lift]';

+掃>'[sweep]';

+授>'[give to]';

+掉>'[turn]';

+掌>'[palm of hand]';

+掎>'[drag aside]';

+掏>'[take out]';

+排>'[row]';

+掖>'[stick in]';

+掘>'[dig]';

+掛>'[hang]';

+#"掟>'[................................]'",

+掠>'[rob]';

+採>'[gather]';

+探>'[find]';

+掣>'[drag]';

+接>'[receive]';

+控>'[accuse]';

+推>'[push]';

+掩>'[cover]';

+措>'[place]';

+掫>'[be on night watch]';

+掬>'[grasp with both hands]';

+#"掱>'[pickpocket]'",

+掴>'[box one''s ears]';

+#"掴>'[box one''s ears]'",

+掻>'[scratch lightly]';

+掾>'[a general designation of officials]';

+揀>'[choose]';

+揃>'[shear]';

+揄>'[lift]';

+揆>'[prime minister]';

+揉>'[rub]';

+描>'[copy]';

+提>'[hold in hand]';

+插>'[insert]';

+揖>'[salute]';

+揚>'[scatter]';

+換>'[change]';

+握>'[grasp]';

+揣>'[put things under clothes]';

+揩>'[rub and wipe]';

+揮>'[direct]';

+援>'[aid]';

+揶>'[make fun of]';

+揺>'[wag]';

+搆>'[pull]';

+損>'[diminish]';

+搏>'[seize]';

+搓>'[trample]';

+搖>'[wag]';

+搗>'[hull]';

+搜>'[search]';

+搦>'[grasp]';

+搨>'[rub]';

+搬>'[transfer]';

+搭>'[join together]';

+搴>'[extract]';

+搶>'[plunder]';

+携>'[lead by hand]';

+搾>'[press]';

+摂>'[take in]';

+摎>'[to strangle]';

+摘>'[pluck]';

+摧>'[destroy]';

+摩>'[rub]';

+摯>'[sincere]';

+摶>'[roll around with hand]';

+摸>'[gently touch with hand]';

+摺>'[fold]';

+撃>'[strike]';

+撈>'[scoop out of water]';

+撒>'[release]';

+撓>'[scratch]';

+撕>'[rip]';

+撚>'[twirl in fingers]';

+撞>'[knock against]';

+撤>'[omit]';

+撥>'[move]';

+撩>'[lift up]';

+撫>'[pat]';

+播>'[sow]';

+撮>'[little bit]';

+撰>'[compose]';

+撲>'[pound]';

+撹>'[disturb]';

+撻>'[flog]';

+撼>'[move]';

+擁>'[embrace]';

+擂>'[rub]';

+擅>'[monopolize]';

+擇>'[select]';

+操>'[conduct]';

+擒>'[catch]';

+擔>'[carry]';

+擘>'[thumb]';

+據>'[occupy]';

+擠>'[crowd]';

+擡>'[carry]';

+擢>'[pull up]';

+擣>'[hull]';

+擦>'[wipe]';

+擧>'[raise]';

+擬>'[draft]';

+擯>'[exclude]';

+擱>'[place]';

+擲>'[throw]';

+擴>'[expand]';

+#"擶>'[................................]'",

+擺>'[put]';

+擽>'[tickle]';

+擾>'[disturb]';

+攀>'[climb]';

+攅>'[save]';

+攘>'[seize]';

+攜>'[lead by hand]';

+攝>'[take in]';

+攣>'[tangled]';

+攤>'[spread out]';

+攪>'[disturb]';

+攫>'[snatch away]';

+攬>'[grasp]';

+支>'[disperse]';

+攴>'[rap]';

+攵>'[rap]';

+收>'[gather together]';

+攷>'[examine]';

+攸>'[distant]';

+改>'[change]';

+攻>'[attack]';

+放>'[put]';

+政>'[government]';

+故>'[ancient]';

+效>'[result]';

+敍>'[express]';

+敏>'[fast]';

+救>'[save]';

+敕>'[an imperial order or decree]';

+敖>'[ramble]';

+敗>'[be defeated]';

+敘>'[express]';

+教>'[teach]';

+敝>'[break]';

+敞>'[roomy]';

+敢>'[dare]';

+散>'[scatter]';

+敦>'[esteem]';

+敬>'[respect]';

+数>'[number]';

+敲>'[strike]';

+整>'[orderly]';

+敵>'[enemy]';

+敷>'[spread]';

+數>'[number]';

+斂>'[draw back]';

+斃>'[kill]';

+文>'[literature]';

+斈>'[learning]';

+斉>'[even]';

+斌>'[refined]';

+斎>'[vegetarian diet]';

+斐>'[graceful]';

+斑>'[mottled]';

+斗>'[chinese peck]';

+料>'[consider]';

+斛>'[dry measure 10 or 5 times of dou]';

+斜>'[slanting]';

+斟>'[pour wine or tea into cup]';

+斡>'[revolve]';

+斤>'[catty]';

+斥>'[scold]';

+斧>'[axe]';

+斫>'[cut]';

+斬>'[cut]';

+断>'[sever]';

+斯>'[this]';

+新>'[new]';

+斷>'[sever]';

+方>'[square]';

+於>'[in]';

+施>'[grant]';

+旁>'[side]';

+旃>'[silk banner with bent pole]';

+旄>'[a kind of ancient flag]';

+旅>'[trip]';

+旆>'[flag ornament]';

+旋>'[revolve]';

+旌>'[banner or flag adorned with feat]';

+族>'[family clan]';

+旒>'[fringes of pearls on crowns]';

+旗>'[banner]';

+旙>'[a pennant]';

+旛>'[a pennant]';

+无>'[negative]';

+旡>'[choke on something eaten]';

+既>'[already]';

+日>'[sun]';

+旦>'[dawn]';

+旧>'[old]';

+旨>'[purpose]';

+早>'[early]';

+旬>'[ten-day period]';

+旭>'[rising sun]';

+旱>'[drought]';

+旺>'[prosper]';

+旻>'[heaven]';

+昂>'[rise]';

+昃>'[afternoon]';

+昆>'[elder brother]';

+昇>'[rise]';

+昊>'[summer time]';

+昌>'[light of sun]';

+明>'[bright]';

+昏>'[dusk]';

+易>'[change]';

+昔>'[formerly]';

+昜>'[to open out]';

+星>'[star]';

+映>'[project]';

+春>'[spring]';

+昧>'[obscure]';

+昨>'[yesterday]';

+昭>'[bright]';

+是>'[indeed]';

+昴>'[one of the 28 constellations]';

+昵>'[intimate]';

+昶>'[a long day. bright. extended. clear]';

+昼>'[daytime]';

+昿>'[extensive]';

+晁>'[morning]';

+時>'[time]';

+晃>'[bright]';

+晄>'[bright]';

+晉>'[advance]';

+晋>'[advance]';

+晏>'[peaceful]';

+晒>'[dry in sun]';

+晝>'[daytime]';

+晞>'[dry]';

+晟>'[clear]';

+晢>'[light of stars]';

+晤>'[have interview with]';

+晦>'[dark]';

+晧>'[daybreak]';

+晨>'[early morning]';

+晩>'[night]';

+普>'[universal]';

+景>'[scenery]';

+晰>'[clear]';

+晴>'[clear weather]';

+晶>'[crystal]';

+智>'[wisdom]';

+暁>'[dawn]';

+#"暂>'[temporary]'",

+暄>'[warm]';

+暇>'[leisure]';

+暈>'[halo in sky]';

+暉>'[sunshine]';

+暎>'[sun beginning decline]';

+暑>'[hot]';

+暖>'[warm]';

+暗>'[dark]';

+暘>'[rising sun]';

+暝>'[dark]';

+暢>'[smoothly]';

+暦>'[calendar]';

+暫>'[temporary]';

+暮>'[evening]';

+暴>'[violent]';

+暸>'[bright]';

+暹>'[rise]';

+暼>'[take fleeting glance at]';

+暾>'[morning sun]';

+曁>'[and]';

+曄>'[bright]';

+曇>'[become cloudy]';

+曉>'[dawn]';

+曖>'[obscure]';

+曙>'[bright]';

+曚>'[twilight just before sun rises]';

+曜>'[glorious]';

+曝>'[sun]';

+曠>'[extensive]';

+曦>'[sunlight]';

+曩>'[in ancient times]';

+曰>'[say]';

+曲>'[crooked]';

+曳>'[trail]';

+更>'[more]';

+曵>'[trail]';

+曷>'[why? what? where?]';

+書>'[book]';

+曹>'[ministry officials]';

+曼>'[long]';

+曽>'[already]';

+曾>'[already]';

+替>'[change]';

+最>'[most]';

+會>'[assemble]';

+月>'[moon]';

+有>'[have]';

+朋>'[friend]';

+服>'[clothes]';

+朏>'[light of crescent moon]';

+朔>'[first day of lunar month]';

+朕>'[pronoun \"i\"]';

+朖>'[clear]';

+朗>'[clear]';

+望>'[look at or forward]';

+朝>'[dynasty]';

+朞>'[full year]';

+期>'[period of time]';

+朦>'[condition or appearance of moon]';

+朧>'[condition or appearance of moon]';

+木>'[tree]';

+未>'[not yet]';

+末>'[final]';

+本>'[root]';

+札>'[letter]';

+朮>'[skill]';

+朱>'[cinnabar]';

+朴>'[simple]';

+朶>'[cluster of flowers]';

+#"朶>'[cluster of flowers]'",

+#"朶>'[cluster of flowers]'",

+机>'[desk]';

+朽>'[decayed]';

+朿>'[stab]';

+#"杀>'[kill]'",

+杆>'[pole]';

+杉>'[various species of pine and fir]';

+李>'[plum]';

+杏>'[apricot]';

+材>'[material]';

+村>'[village]';

+杓>'[handle of cup]';

+杖>'[cane]';

+杙>'[a tiny wooden post]';

+杜>'[stop]';

+杞>'[willow]';

+束>'[bind]';

+杠>'[lever]';

+条>'[clause]';

+杢>'[woodworker]';

+#"杢>'[woodworker]'",

+杤>'[type of oak]';

+来>'[come]';

+杪>'[tip of twig]';

+杭>'[cross stream]';

+杯>'[cup]';

+杰>'[hero]';

+東>'[east]';

+杲>'[bright sun]';

+杳>'[obscure]';

+杵>'[pestle]';

+杷>'[loquat]';

+杼>'[shuttle of loom]';

+松>'[pine tree]';

+板>'[plank]';

+#"枅>'[................................]'",

+枇>'[loquat]';

+枉>'[useless]';

+枋>'[sandalwood]';

+枌>'[variety of elm with small seeds]';

+析>'[split wood]';

+枕>'[pillow]';

+林>'[forest]';

+枚>'[stalk of shrub]';

+果>'[fruit]';

+枝>'[branches]';

+#"枟>'[wood streaks]'",

+#"枟>'[wood streaks]'",

+枢>'[door hinge]';

+#"枦>'[................................]'",

+枩>'[pine tree]';

+枯>'[dried out]';

+枳>'[trifoliate orange]';

+枴>'[cane]';

+架>'[rack]';

+枷>'[cangue scaffold]';

+枸>'[kind of aspen found in sichuan]';

+枹>'[drumstick]';

+柁>'[large tie-beams]';

+柄>'[handle]';

+#"柆>'[................................]'",

+#"柈>'[container]'",

+柎>'[calyx of flower]';

+柏>'[cypress]';

+某>'[certain thing or person]';

+柑>'[tangerine]';

+染>'[dye]';

+柔>'[soft]';

+柘>'[a thorny tree]';

+柚>'[pumelo]';

+柝>'[watchman''s rattle]';

+柞>'[oak]';

+柢>'[root]';

+柤>'[hawthorn]';

+#"柧>'[................................]'",

+柩>'[coffin which contains corpse]';

+柬>'[letter]';

+柮>'[flat pieces of wood]';

+柯>'[axe-handle]';

+柱>'[pillar]';

+柳>'[willow tree]';

+柴>'[firewood]';

+柵>'[fence]';

+査>'[investigate]';

+柾>'[straight grain]';

+柿>'[persimmon]';

+栂>'[a kind of evergreen tree]';

+栃>'[type of oak]';

+栄>'[glory]';

+栓>'[wooden peg]';

+栖>'[perch]';

+栗>'[chestnut tree]';

+栞>'[publication]';

+校>'[school]';

+栢>'[cypress]';

+栩>'[species of oak]';

+株>'[numerary adjunct for trees]';

+栫>'[fence]';

+栲>'[mangrove]';

+栴>'[sandalwood]';

+核>'[seed]';

+根>'[root]';

+格>'[pattern]';

+栽>'[cultivate]';

+桀>'[chicken roost]';

+桁>'[cross-beams of roof]';

+桂>'[cassia or cinnamon]';

+桃>'[peach]';

+框>'[frame]';

+案>'[table]';

+#"桍>'[................................]'",

+桎>'[fetters]';

+桐>'[name applied various trees]';

+桑>'[mulberry tree]';

+桓>'[variety of tree]';

+桔>'[chinese bellflower]';

+#"桙>'[................................]'",

+桜>'[cherry]';

+桝>'[................]';

+#"桝>'[................]'",

+档>'[shelf]';

+桧>'[chinese cypress]';

+桴>'[raft]';

+桶>'[pail]';

+桷>'[rafter]';

+#"桾>'[................................]'",

+桿>'[pole]';

+梁>'[bridge]';

+梃>'[a club]';

+梅>'[plums]';

+梍>'[tree name]';

+梏>'[handcuffs]';

+梓>'[catalpa ovata]';

+梔>'[gardenia]';

+梗>'[stem of flower]';

+#"梘>'[bamboo tube]'",

+條>'[clause]';

+梟>'[owl thus]';

+梠>'[small beam supporting rafters at]';

+梢>'[pointed tip of something long like a branch]';

+梦>'[dream]';

+梧>'[sterculia platanifolia]';

+梨>'[pear]';

+梭>'[weaver''s shuttle]';

+梯>'[ladder]';

+械>'[weapons]';

+梱>'[doorsill]';

+梳>'[comb]';

+梵>'[buddhist]';

+梶>'[oar]';

+梹>'[the areca-nut]';

+#"梹>'[the areca-nut]'",

+梼>'[block of wood]';

+棄>'[reject]';

+#"棆>'[................................]'",

+棉>'[cotton]';

+棊>'[chess]';

+棋>'[chess]';

+棍>'[stick]';

+棒>'[stick]';

+#"棔>'[................................]'",

+棕>'[hemp palm]';

+棗>'[date tree]';

+棘>'[jujube tree]';

+棚>'[tent]';

+棟>'[main beams supporting house]';

+棠>'[crab apple tree]';

+#"棡>'[................................]'",

+棣>'[kerria japonica plant]';

+棧>'[warehouse]';

+森>'[forest]';

+棯>'[jujube tree]';

+棲>'[perch]';

+棹>'[oar]';

+棺>'[coffin]';

+椀>'[bowl]';

+椁>'[outer-coffin]';

+椄>'[to graft]';

+椅>'[chair]';

+椈>'[cedar]';

+椋>'[fruit]';

+椌>'[instrument]';

+植>'[plant]';

+椎>'[hammer]';

+椏>'[the forking branch of a tree]';

+椒>'[pepper]';

+#"椓>'[strike]'",

+#"椚>'[................................]'",

+椛>'[type of birch]';

+検>'[check]';

+#"椡>'[................................]'",

+#"椢>'[................................]'",

+#"椣>'[................................]'",

+#"椥>'[................................]'",

+#"椦>'[................................]'",

+#"椨>'[................................]'",

+椪>'[machilus nanmu]';

+椰>'[palm tree]';

+椴>'[poplar]';

+椶>'[palm tree]';

+椹>'[a chopping board]';

+椽>'[beams]';

+椿>'[father]';

+楊>'[willow]';

+楓>'[maple tree]';

+楔>'[wedge]';

+楕>'[oval-shaped]';

+楙>'[name of plant]';

+楚>'[name of feudal state]';

+#"楜>'[................................]'",

+楝>'[melia japonica]';

+楞>'[used for ceylon in buddhist text]';

+楠>'[name of tree]';

+楡>'[elm tree]';

+楢>'[tinder]';

+楪>'[small dish]';

+楫>'[oar]';

+業>'[profession]';

+楮>'[mulberry]';

+楯>'[shield]';

+楳>'[plums]';

+#"楴>'[................................]'",

+極>'[extreme]';

+楷>'[model style of chinese writing]';

+楸>'[mallotus japonicus]';

+楹>'[column]';

+楼>'[building of two or more stories]';

+楽>'[happy]';

+#"楽>'[happy]'",

+#"榀>'[[not found in dictionary]]'",

+概>'[generally]';

+#"榉>'[type of elm]'",

+榎>'[small evergreen shrub]';

+#"榑>'[................................]'",

+榔>'[betel-nut tree]';

+榕>'[banyan tree]';

+榛>'[hazelnut]';

+榜>'[placard]';

+#"榠>'[................................]'",

+榧>'[type of yew]';

+榮>'[glory]';

+榱>'[rafter]';

+榲>'[pillar]';

+榴>'[pomegranate]';

+榻>'[cot]';

+榾>'[pieces of wood]';

+榿>'[alder]';

+槁>'[wither]';

+槃>'[tray]';

+槇>'[tip of a tree]';

+槊>'[spear]';

+構>'[frame]';

+槌>'[hammer]';

+槍>'[spear]';

+槎>'[raft]';

+槐>'[locust tree]';

+槓>'[lever]';

+様>'[shape]';

+#"様>'[shape]'",

+#"槛>'[threshold]'",

+#"槛>'[threshold]'",

+槧>'[wooden tablet]';

+槨>'[outer-coffin]';

+#"槫>'[................................]'",

+槭>'[maple]';

+槲>'[type of oak]';

+槹>'[spar]';

+槻>'[zelkova tree]';

+槽>'[trough]';

+槿>'[hibiscus]';

+樂>'[happy]';

+樅>'[fir tree]';

+樊>'[a railing]';

+樋>'[tree name]';

+#"樌>'[................................]'",

+#"樒>'[................................]'",

+樓>'[building of two or more stories]';

+#"樓>'[building of two or more stories]'",

+樗>'[kind of tree with useless timber]';

+標>'[mark]';

+樛>'[bending branches]';

+樞>'[door hinge]';

+樟>'[camphor tree]';

+模>'[model]';

+#"樢>'[................................]'",

+樣>'[shape]';

+権>'[power]';

+横>'[across]';

+#"横>'[across]'",

+#"横>'[across]'",

+樵>'[woodcutter]';

+樶>'[c]';

+樸>'[simple]';

+樹>'[tree]';

+樺>'[type of birch]';

+樽>'[goblet]';

+橄>'[olive]';

+橇>'[a sledge for transportation]';

+橈>'[bent or twisted piece of wood]';

+橋>'[bridge]';

+橘>'[orange]';

+橙>'[orange]';

+機>'[machine]';

+橡>'[chestnut oak]';

+橢>'[oval-shaped]';

+橦>'[tree]';

+#"橱>'[cabinet]'",

+#"橵>'[wood placed under roof tiles]'",

+#"橿>'[................................]'",

+檀>'[sandalwood]';

+檄>'[call arms]';

+檍>'[ilex]';

+檎>'[small red apple]';

+檐>'[eaves of house]';

+檗>'[tree]';

+檜>'[chinese cypress]';

+檠>'[stand for lamp]';

+檢>'[check]';

+檣>'[mast]';

+檪>'[chestnut-leaved oak]';

+檬>'[type of locust oracacia]';

+檮>'[block of wood]';

+檳>'[betelnut]';

+檸>'[lemon]';

+檻>'[threshold]';

+#"櫁>'[................................]'",

+櫂>'[oar]';

+櫃>'[cupboard]';

+#"櫑>'[................................]'",

+櫓>'[oar]';

+櫚>'[palm]';

+櫛>'[comb out]';

+櫞>'[citrus]';

+櫟>'[chestnut-leaved oak]';

+櫨>'[supporting block]';

+櫪>'[type of oak]';

+櫺>'[carved or patterned window sills]';

+櫻>'[cherry]';

+欄>'[railing]';

+欅>'[zelkova]';

+權>'[power]';

+欒>'[name of tree]';

+欖>'[olive]';

+欝>'[luxuriant]';

+#"欞>'[the lattice of a window a sill]'",

+欠>'[owe]';

+次>'[order]';

+欣>'[happy]';

+欧>'[translit.: europe]';

+欲>'[desire]';

+欷>'[sob]';

+欸>'[sighs]';

+欹>'[fierce dog]';

+欺>'[cheat]';

+欽>'[respect]';

+款>'[item]';

+歃>'[smear one''s mouth with blood of a victim when taking an oath]';

+歇>'[rest]';

+歉>'[deficient]';

+歌>'[song]';

+歎>'[sigh]';

+歐>'[translit.: europe]';

+歓>'[happy]';

+歔>'[blow through nose]';

+歙>'[to suck]';

+歛>'[draw back]';

+歟>'[final particle used express ques]';

+歡>'[happy]';

+止>'[stop]';

+正>'[right]';

+此>'[this]';

+武>'[military]';

+歩>'[step]';

+歪>'[slant]';

+歯>'[teeth]';

+歳>'[year]';

+歴>'[take place]';

+歸>'[return]';

+歹>'[bad]';

+死>'[die]';

+歿>'[die]';

+殀>'[die young]';

+殃>'[misfortune]';

+殄>'[to end]';

+殆>'[dangerous]';

+殉>'[die for cause]';

+殊>'[different]';

+残>'[injure]';

+殍>'[to starve to death]';

+殕>'[[not found in dictionary]]';

+殖>'[breed]';

+殘>'[injure]';

+殞>'[die]';

+殤>'[die young]';

+殪>'[die]';

+殫>'[utmost]';

+殯>'[encoffin]';

+殱>'[annihilate]';

+殲>'[annihilate]';

+殳>'[name of old weapon]';

+殴>'[beat]';

+段>'[section]';

+殷>'[many]';

+殺>'[kill]';

+殻>'[casing]';

+殼>'[casing]';

+殿>'[hall]';

+毀>'[destroy]';

+毅>'[resolute]';

+毆>'[beat]';

+毋>'[do not]';

+母>'[mother]';

+毎>'[every]';

+毒>'[poison]';

+毓>'[give birth to]';

+比>'[compare]';

+毘>'[help]';

+毛>'[hair]';

+#"毟>'[................................]'",

+毫>'[fine hair]';

+毬>'[ball]';

+毯>'[rug]';

+毳>'[fine hair or fur on animals]';

+氈>'[felt]';

+氏>'[clan]';

+民>'[people]';

+氓>'[people]';

+气>'[steam]';

+気>'[air]';

+氛>'[gas]';

+氣>'[air]';

+氤>'[hanging fog]';

+水>'[water]';

+氷>'[ice]';

+永>'[long]';

+氾>'[overflow]';

+汀>'[sandbar]';

+汁>'[juice]';

+求>'[seek]';

+汎>'[float]';

+汐>'[night tides]';

+汕>'[basket for catching fish]';

+汗>'[perspiration]';

+汚>'[filthy]';

+汝>'[you]';

+汞>'[element mercury]';

+江>'[large river]';

+池>'[pool]';

+#"汢>'[................................]'",

+汨>'[Mi(luo) river in hunan province where Qu Yuan drowned himself]';

+汪>'[vast]';

+汰>'[excessive]';

+汲>'[draw water from well]';

+#"汲>'[draw water from well]'",

+決>'[decide]';

+汽>'[steam]';

+汾>'[river in shanxi province]';

+沁>'[soak into]';

+沂>'[river in southeast shandong flow]';

+沃>'[water]';

+沈>'[sink]';

+沌>'[chaotic]';

+沍>'[freezing]';

+沐>'[bathe]';

+沒>'[not]';

+沓>'[connected]';

+沖>'[pour]';

+沙>'[sand]';

+沚>'[islet in stream]';

+沛>'[abundant]';

+没>'[not]';

+沢>'[marsh]';

+沫>'[froth]';

+沮>'[stop]';

+沱>'[rivers]';

+河>'[river]';

+沸>'[boil]';

+油>'[oil]';

+沺>'[turbulent]';

+治>'[govern]';

+沼>'[lake]';

+沽>'[buy and sell]';

+沾>'[moisten]';

+沿>'[follow course]';

+況>'[condition]';

+泄>'[leak]';

+泅>'[swim]';

+泉>'[spring]';

+泊>'[anchor vessel]';

+泌>'[to seep out]';

+泓>'[clear]';

+法>'[law]';

+泗>'[mucous]';

+泙>'[roar]';

+泛>'[drift]';

+泝>'[go upstream]';

+泡>'[bubbles]';

+波>'[waves]';

+泣>'[cry]';

+泥>'[mud]';

+注>'[concentrate]';

+泪>'[tears]';

+泯>'[destroy]';

+泰>'[great]';

+泱>'[great]';

+泳>'[dive]';

+洋>'[ocean]';

+洌>'[clear]';

+洒>'[sprinkle]';

+洗>'[wash]';

+洙>'[name of a river in shandong]';

+洛>'[river in shaanxi province]';

+洞>'[cave]';

+洟>'[snivel]';

+津>'[ferry]';

+洩>'[leak]';

+洪>'[vast]';

+洫>'[to ditch]';

+洲>'[continent]';

+洳>'[damp]';

+洵>'[true]';

+洶>'[the rush of water]';

+洸>'[sparkle]';

+活>'[live]';

+洽>'[spread]';

+派>'[school of thought]';

+流>'[flow]';

+浄>'[pure]';

+浅>'[shallow]';

+浙>'[zhejiang province]';

+浚>'[dredge]';

+浜>'[creek]';

+浣>'[to wash]';

+浤>'[beating of ocean]';

+浦>'[bank of river]';

+浩>'[great]';

+浪>'[wave]';

+浬>'[nautical mile]';

+浮>'[float]';

+浴>'[bathe]';

+海>'[sea]';

+浸>'[soak]';

+浹>'[saturate]';

+涅>'[blacken]';

+消>'[vanish]';

+涌>'[surge up]';

+涎>'[saliva]';

+涓>'[brook]';

+涕>'[tear]';

+涙>'[tears]';

+涛>'[large waves]';

+涜>'[ditch]';

+涯>'[shore]';

+液>'[sap]';

+涵>'[soak]';

+涸>'[dried up]';

+涼>'[cool]';

+淀>'[shallow water]';

+淅>'[water used wash rice]';

+淆>'[confused]';

+淇>'[river in henan province]';

+淋>'[drip]';

+淌>'[trickle]';

+淑>'[good]';

+淒>'[bitter cold]';

+#"淕>'[................................]'",

+淘>'[wash in sieve]';

+淙>'[gurgling sound of water]';

+淞>'[name of a river in Jiangsu]';

+淡>'[weak]';

+淤>'[mud]';

+淦>'[river in jiangxi province: water]';

+淨>'[pure]';

+淪>'[be lost]';

+淫>'[obscene]';

+淬>'[temper]';

+淮>'[river in anhui province]';

+深>'[deep]';

+淳>'[cyanogen]';

+淵>'[gulf]';

+混>'[mix]';

+淹>'[drown]';

+淺>'[shallow]';

+添>'[append]';

+清>'[clear]';

+渇>'[thirsty]';

+済>'[help]';

+渉>'[ford stream]';

+渊>'[surge up]';

+渋>'[astringent]';

+渓>'[mountain stream]';

+渕>'[surge up]';

+渙>'[scatter]';

+渚>'[small sand bank]';

+減>'[decrease]';

+渝>'[change]';

+渟>'[(of water) not flowing]';

+渠>'[ditch]';

+渡>'[cross]';

+渣>'[refuse]';

+渤>'[swelling]';

+渥>'[moisten]';

+渦>'[swirl]';

+温>'[lukewarm]';

+渫>'[beating of ocean]';

+測>'[measure]';

+渭>'[name of a river in shaanxi]';

+渮>'[river in shandong province]';

+港>'[port]';

+游>'[swim]';

+渺>'[endlessly long]';

+渾>'[muddy]';

+湃>'[sound of waves]';

+湊>'[piece together]';

+湍>'[rapid water current]';

+湎>'[flushed with drink]';

+湖>'[lake]';

+湘>'[hunan province]';

+湛>'[deep]';

+湟>'[river in qinghai province]';

+湧>'[well up]';

+湫>'[a small pond]';

+湮>'[bury]';

+湯>'[hot water]';

+湲>'[flow]';

+#"湳>'[[not found in dictionary]]'",

+湾>'[bay]';

+湿>'[wet]';

+#"湿>'[wet]'",

+#"湿>'[wet]'",

+溌>'[pour]';

+溏>'[pool]';

+源>'[spring]';

+準>'[rule]';

+溘>'[abruptly]';

+溜>'[slide]';

+溝>'[ditch]';

+溟>'[drizzling rain]';

+溢>'[overflow]';

+溥>'[big]';

+溪>'[mountain stream]';

+溯>'[go upstream]';

+溲>'[urinate]';

+溶>'[melt]';

+溷>'[privy]';

+溺>'[drown]';

+溽>'[moist]';

+滂>'[torrential]';

+滄>'[blue]';

+滅>'[extinguish]';

+滉>'[deep]';

+滋>'[grow]';

+滌>'[wash]';

+滑>'[slip]';

+滓>'[sediment]';

+滔>'[overflow]';

+滕>'[<arch> county in shandong province]';

+滝>'[raining]';

+滞>'[block up]';

+滬>'[shanghai]';

+滯>'[block up]';

+滲>'[soak through]';

+滴>'[drip]';

+滷>'[thick gravy]';

+滸>'[riverbank]';

+滾>'[turn]';

+滿>'[fill]';

+漁>'[to fish]';

+漂>'[float]';

+漆>'[varnish]';

+漉>'[filter]';

+漏>'[leak]';

+漑>'[water]';

+漓>'[river in guangxi province]';

+演>'[perform]';

+漕>'[transport by water]';

+漠>'[desert]';

+漢>'[chinese people]';

+漣>'[flowing water]';

+漫>'[overflow of water]';

+漬>'[soak]';

+漱>'[gargle]';

+漲>'[rise in price]';

+漸>'[gradually]';

+漾>'[overflow]';

+漿>'[any thick fluid]';

+潁>'[river in anhui]';

+潅>'[pour]';

+潔>'[clean]';

+潘>'[surname]';

+潛>'[hide]';

+潜>'[hide]';

+潟>'[land inundated with salt from ti]';

+潤>'[soft]';

+潦>'[to flood]';

+潭>'[deep pool]';

+潮>'[tide]';

+潯>'[steep bank by stream]';

+潰>'[flooding river]';

+潴>'[pond]';

+潸>'[weep]';

+潺>'[sound of flowing water]';

+潼>'[high]';

+澀>'[astringent]';

+澁>'[astringent]';

+澂>'[clear and still water]';

+澄>'[purify water by allowing sedimen]';

+澆>'[spray]';

+澎>'[splatter]';

+澑>'[slide]';

+澗>'[brook]';

+澡>'[wash]';

+澣>'[cleanse]';

+澤>'[marsh]';

+#"澪>'[................................]'",

+澱>'[sediment]';

+澳>'[inlet]';

+澹>'[calm]';

+激>'[arouse]';

+濁>'[muddy]';

+濂>'[waterfall]';

+濃>'[thick]';

+濆>'[river bank]';

+濔>'[many]';

+濕>'[wet]';

+濘>'[mud]';

+濛>'[drizzling]';

+濟>'[help]';

+濠>'[moat]';

+濡>'[immerse]';

+濤>'[large waves]';

+濫>'[flood]';

+濬>'[dredge]';

+濮>'[county in Henan province]';

+濯>'[wash out]';

+濱>'[beach]';

+濳>'[hide]';

+濶>'[broad]';

+濺>'[sprinkle]';

+濾>'[strain out]';

+瀁>'[waves]';

+瀉>'[drain off]';

+瀋>'[juice]';

+瀏>'[clear]';

+瀑>'[waterfall]';

+瀕>'[approach]';

+瀘>'[river in jiangxi province]';

+瀚>'[vast]';

+瀛>'[sea]';

+瀝>'[trickle]';

+瀞>'[pool in a river]';

+瀟>'[sound of beating wind and rain]';

+瀦>'[pond]';

+瀧>'[raining]';

+瀬>'[swift current]';

+瀰>'[overflow]';

+瀲>'[waves]';

+瀾>'[overflowing]';

+灌>'[pour]';

+灑>'[sprinkle]';

+灘>'[bank]';

+灣>'[bay]';

+火>'[fire]';

+灯>'[lantern]';

+灰>'[ashes]';

+灸>'[cauterize with moxa]';

+灼>'[burn]';

+災>'[calamity]';

+炉>'[fireplace]';

+炊>'[cook]';

+炎>'[flame]';

+炒>'[fry]';

+炙>'[roast]';

+炬>'[torch]';

+炭>'[charcoal]';

+炮>'[large gun]';

+炯>'[bright]';

+炳>'[bright]';

+炸>'[fry in oil]';

+点>'[dot]';

+為>'[do]';

+烈>'[fiery]';

+烋>'[boast]';

+烏>'[crow]';

+烙>'[brand]';

+烝>'[rise]';

+烟>'[smoke]';

+烱>'[bright]';

+烹>'[boil]';

+烽>'[signal fire]';

+焉>'[thereupon]';

+焔>'[flame]';

+焙>'[dry over slow fire]';

+焚>'[burn]';

+焜>'[fire]';

+無>'[negative]';

+焦>'[burned]';

+然>'[yes]';

+焼>'[burn]';

+煉>'[smelt]';

+煌>'[bright]';

+煎>'[fry in fat or oil]';

+煕>'[bright]';

+煖>'[warm]';

+煙>'[smoke]';

+煢>'[alone]';

+煤>'[coal]';

+煥>'[shining]';

+煦>'[kind]';

+照>'[shine]';

+煩>'[bother]';

+煬>'[roast]';

+煮>'[cook]';

+煽>'[stir up]';

+熄>'[put out]';

+熈>'[bright]';

+熊>'[bear]';

+熏>'[smoke]';

+熔>'[melt]';

+#"熕>'[................................]'",

+熙>'[bright]';

+熟>'[well cooked]';

+熨>'[iron]';

+熬>'[cook down]';

+熱>'[hot]';

+熹>'[dim light]';

+熾>'[burning hot]';

+燃>'[burn]';

+燈>'[lantern]';

+燉>'[heat with fire]';

+燎>'[burn]';

+燐>'[phosphorus]';

+燒>'[burn]';

+燔>'[to roast]';

+燕>'[swallow (bird)]';

+#"燗>'[................................]'",

+營>'[encampment]';

+燠>'[warm]';

+燥>'[dry]';

+燦>'[vivid]';

+燧>'[flintstone]';

+燬>'[burn down]';

+燭>'[candle]';

+燮>'[harmonize]';

+#"燵>'[................................]'",

+燹>'[fire]';

+燻>'[smoke]';

+燼>'[cinders]';

+燿>'[shine]';

+爆>'[crackle]';

+爍>'[shine]';

+爐>'[fireplace]';

+爛>'[rotten]';

+爨>'[oven]';

+爪>'[claw]';

+爬>'[crawl]';

+爭>'[dispute]';

+爰>'[lead on to]';

+爲>'[do]';

+爵>'[feudal title or rank]';

+父>'[father]';

+爺>'[father]';

+爻>'[diagrams for divination]';

+爼>'[chopping board or block]';

+爽>'[happy]';

+爾>'[you]';

+爿>'[half of tree trunk]';

+牀>'[bed]';

+牆>'[wall]';

+片>'[slice]';

+版>'[printing blocks]';

+牋>'[memorandum]';

+牌>'[signboard]';

+牒>'[documents]';

+牘>'[writing tablet]';

+牙>'[tooth]';

+牛>'[cow]';

+牝>'[female of species]';

+牟>'[make]';

+牡>'[male of animals]';

+牢>'[prison]';

+牧>'[tend cattle]';

+物>'[thing]';

+牲>'[sacrificial animal]';

+牴>'[gore]';

+特>'[special]';

+牽>'[drag]';

+牾>'[to oppose]';

+犀>'[rhinoceros]';

+犁>'[plow]';

+犂>'[plow]';

+犇>'[run fast]';

+犒>'[entertain victorious soldiers]';

+犖>'[brindled ox]';

+犠>'[sacrifice]';

+犢>'[calf]';

+犧>'[sacrifice]';

+犬>'[dog]';

+犯>'[commit crime]';

+犲>'[wolf]';

+状>'[form]';

+犹>'[like]';

+狂>'[insane]';

+狃>'[to covet]';

+狄>'[tribe from northern china]';

+狆>'[pekinese dog]';

+狎>'[be familiar with]';

+狐>'[species of fox]';

+狒>'[baboon]';

+狗>'[dog]';

+狙>'[ape]';

+#"狛>'[................................]'",

+狠>'[vicious]';

+狡>'[cunning]';

+狢>'[animal name]';

+狩>'[winter hunting]';

+独>'[alone]';

+狭>'[narrow]';

+狷>'[rash]';

+狸>'[fox]';

+狹>'[narrow]';

+狼>'[wolf]';

+狽>'[legendary animal with short fore]';

+猊>'[lion]';

+猖>'[mad]';

+猗>'[exclamation of admiration]';

+猛>'[violent]';

+猜>'[guess]';

+猝>'[abruptly]';

+猟>'[hunt]';

+猥>'[vulgar]';

+猩>'[species of orangutan]';

+猪>'[pig]';

+猫>'[cat]';

+献>'[offer]';

+#"猯>'[................................]'",

+猴>'[monkey]';

+猶>'[like]';

+猷>'[plan]';

+猾>'[crafty]';

+猿>'[ape]';

+獄>'[prison]';

+獅>'[lion]';

+獎>'[prize]';

+獏>'[the panther]';

+獗>'[unruly]';

+獣>'[beast]';

+獨>'[alone]';

+獪>'[sly]';

+獰>'[ferocious appearance]';

+獲>'[obtain]';

+獵>'[hunt]';

+獸>'[beast]';

+獺>'[otter]';

+獻>'[offer]';

+玄>'[deep]';

+率>'[to lead]';

+玉>'[jade]';

+王>'[king]';

+玖>'[black-colored jade]';

+玩>'[play with]';

+玲>'[tinkling of jade]';

+玳>'[tortoise shell]';

+玻>'[glass]';

+珀>'[amber]';

+珂>'[inferior kind of jade]';

+珈>'[ornament attached woman''s hairpi]';

+珊>'[coral]';

+珍>'[precious]';

+珎>'[precious]';

+珞>'[kind of necklace]';

+珠>'[precious stone]';

+珥>'[ear ornament]';

+珪>'[jade table conferred upon feudal]';

+班>'[class]';

+珮>'[jade ornament]';

+珱>'[necklace made of precious stones]';

+#"珸>'[................................]'",

+現>'[appear]';

+球>'[ball]';

+琅>'[variety of white carnelian]';

+理>'[reason]';

+琉>'[sparkling stone]';

+琢>'[polish jade]';

+琥>'[jewel in shape of tiger]';

+琲>'[necklace]';

+琳>'[beautiful jade]';

+琴>'[chinese lute or guitar]';

+琵>'[guitar-like instrument]';

+琶>'[guitar-like instrument]';

+琺>'[enamel]';

+琿>'[bright]';

+瑁>'[fine piece of jade]';

+瑕>'[flaw in gem]';

+瑙>'[agate]';

+瑚>'[coral]';

+瑛>'[luster of gem]';

+瑜>'[flawless gem or jewel]';

+瑞>'[felicitous omen]';

+瑟>'[large stringed musical instrument]';

+瑠>'[precious stone]';

+瑣>'[fragments]';

+瑤>'[precious jade]';

+瑩>'[lustre of gems]';

+瑪>'[agate]';

+瑯>'[kind of white cornelian]';

+瑰>'[extraordinary]';

+瑳>'[luster of gem]';

+瑶>'[precious jade]';

+瑾>'[brilliance of gems]';

+璃>'[glass]';

+璋>'[jade plaything]';

+璞>'[unpolished gem]';

+璢>'[precious stone]';

+璧>'[piece of jade with hole in it]';

+環>'[jade ring or bracelet]';

+璽>'[imperial signet]';

+瓊>'[jade]';

+瓏>'[gem cut like dragon]';

+瓔>'[necklace made of precious stones]';

+瓜>'[melon]';

+瓠>'[bottle gourd]';

+瓢>'[ladle made from dried gourd]';

+瓣>'[petal]';

+瓦>'[tile]';

+瓧>'[decagram]';

+瓩>'[kilowatt]';

+瓮>'[earthen jar]';

+瓰>'[[not found in dictionary]]';

+瓱>'[milligram]';

+#"瓲>'[................................]'",

+瓶>'[jug]';

+瓷>'[crockery]';

+瓸>'[hectogram]';

+甃>'[brick wall of a well]';

+甄>'[examine]';

+甅>'[centigram]';

+甌>'[bowl]';

+甍>'[rafters supporting roof tiles]';

+甎>'[brick]';

+甑>'[boiler for steaming rice]';

+甓>'[glazed tiles]';

+甕>'[earthen jar]';

+甘>'[sweetness]';

+甚>'[great extent]';

+甜>'[sweet]';

+甞>'[taste]';

+生>'[life]';

+産>'[give birth]';

+甥>'[sister''s child]';

+甦>'[be reborn]';

+用>'[use]';

+甫>'[begin]';

+甬>'[path]';

+田>'[field]';

+由>'[cause]';

+甲>'[armor]';

+申>'[to state to a superior]';

+男>'[male]';

+甸>'[suburbs of capital]';

+町>'[raised path between fields]';

+画>'[painting]';

+甼>'[raised path between fields]';

+畄>'[stop]';

+畆>'[chinese land measure]';

+#"畉>'[................................]'",

+畊>'[plow]';

+畋>'[till land]';

+界>'[boundary]';

+#"畍>'[................................]'",

+畏>'[fear]';

+畑>'[dry (as opposed to rice) field]';

+畔>'[boundary path dividing fields]';

+留>'[stop]';

+畚>'[straw basket]';

+畛>'[border]';

+畜>'[livestock]';

+畝>'[chinese land measure]';

+畠>'[garden]';

+畢>'[end]';

+畤>'[place for worshipping the haven]';

+略>'[approximately]';

+畦>'[sections in vegetable farm]';

+畧>'[approximately]';

+#"畩>'[................................]'",

+番>'[take turns]';

+畫>'[delineate]';

+#"畭>'[................................]'",

+異>'[different]';

+畳>'[repeat]';

+畴>'[farmland]';

+當>'[bear]';

+畷>'[raised path between fields]';

+畸>'[odd]';

+畿>'[imperial domain]';

+疂>'[repeat]';

+疆>'[boundary]';

+疇>'[farmland]';

+疉>'[repeat]';

+疊>'[repeat]';

+疋>'[roll]';

+疎>'[neglect]';

+疏>'[neglect]';

+疑>'[doubt]';

+疔>'[carbuncle]';

+疚>'[chronic disease]';

+疝>'[hernia]';

+疣>'[wart]';

+疥>'[scabies]';

+疫>'[epidemic]';

+疱>'[acne]';

+疲>'[feel tired]';

+疳>'[childhood diseases]';

+疵>'[flaw]';

+疸>'[jaundice]';

+疹>'[measles]';

+疼>'[aches]';

+疽>'[ulcer]';

+疾>'[illness]';

+痂>'[scab]';

+痃>'[indigestion]';

+病>'[illness]';

+症>'[disease]';

+痊>'[be healed]';

+痍>'[wound]';

+痒>'[itch]';

+痔>'[hemorrhoids]';

+痕>'[scar]';

+痘>'[smallpox]';

+痙>'[convulsions]';

+痛>'[pain]';

+痞>'[dyspepsia]';

+痢>'[dysentry]';

+痣>'[spots]';

+痩>'[thin]';

+痰>'[phlegm]';

+痲>'[pock-marked]';

+痳>'[pock-marked]';

+痴>'[foolish]';

+痺>'[paralysis]';

+痼>'[chronic disease]';

+痾>'[chronic illness]';

+痿>'[paralysis]';

+瘁>'[feel tired]';

+瘉>'[get well]';

+瘋>'[crazy]';

+瘍>'[ulcers]';

+瘟>'[epidemic]';

+瘠>'[thin]';

+瘡>'[tumor]';

+瘢>'[scar]';

+瘤>'[tumor]';

+瘧>'[intermittent fever]';

+瘰>'[scrofula]';

+瘴>'[malaria pestilential vapors]';

+瘻>'[fistula]';

+療>'[be healed]';

+癆>'[consumption]';

+癇>'[epilepsy]';

+癈>'[abrogate]';

+癌>'[cancer]';

+癒>'[get well]';

+癖>'[craving]';

+癘>'[sore]';

+癜>'[erythema]';

+癡>'[silly]';

+癢>'[itch]';

+癧>'[scrofulous lumps or swellings]';

+癨>'[quickly]';

+癩>'[leprosy]';

+癪>'[spasms]';

+癬>'[ringworms]';

+癰>'[carbuncle]';

+癲>'[crazy]';

+癶>'[legs]';

+癸>'[last of ten celestial stems]';

+発>'[issue]';

+登>'[rise]';

+發>'[issue]';

+白>'[white]';

+百>'[one hundred]';

+皀>'[kernel]';

+皃>'[countenance]';

+的>'[possessive]';

+皆>'[all]';

+皇>'[royal]';

+皈>'[follow]';

+皋>'[the high land along a river]';

+皎>'[white]';

+皐>'[the high land along a river]';

+皓>'[bright]';

+皖>'[anhui province]';

+皙>'[white]';

+皚>'[brilliant white]';

+皮>'[skin]';

+皰>'[pimples]';

+皴>'[chapped]';

+皷>'[drum]';

+皸>'[crack]';

+皹>'[crack]';

+皺>'[wrinkles]';

+皿>'[shallow container]';

+盂>'[basin]';

+盃>'[glass]';

+盆>'[basin]';

+盈>'[fill]';

+益>'[profit]';

+盍>'[what? why not? correspond]';

+盒>'[small box or case]';

+盖>'[cover]';

+盗>'[rob]';

+盛>'[abundant]';

+盜>'[rob]';

+盞>'[small cup or container]';

+盟>'[swear]';

+盡>'[exhaust]';

+監>'[supervise]';

+盤>'[tray]';

+盥>'[wash]';

+盧>'[cottage]';

+盪>'[to toss about]';

+目>'[eye]';

+盲>'[blind]';

+直>'[straight]';

+相>'[mutual]';

+盻>'[glare]';

+盾>'[shield]';

+省>'[province]';

+眄>'[to look askance]';

+眇>'[blind in one eye]';

+眈>'[gloat]';

+眉>'[eyebrows]';

+看>'[look]';

+県>'[county]';

+眛>'[dim]';

+#"眞>'[real]'",

+真>'[real]';

+眠>'[close eyes]';

+#"眤>'[................................]'",

+眥>'[eye sockets]';

+眦>'[corner of the eyes]';

+眩>'[confuse]';

+眷>'[take interest in]';

+眸>'[pupil of eye]';

+眺>'[look at]';

+眼>'[eye]';

+着>'[make move]';

+睇>'[look at]';

+睚>'[corner of eye]';

+睛>'[eyeball]';

+睡>'[sleep]';

+督>'[supervise]';

+睥>'[look askance at]';

+睦>'[friendly]';

+睨>'[look askance at]';

+睫>'[eyelashes]';

+睹>'[look at]';

+睾>'[testicle]';

+睿>'[shrewd]';

+瞋>'[glare with anger]';

+瞎>'[blind]';

+瞑>'[close eyes]';

+瞞>'[deceive]';

+瞠>'[look at]';

+瞥>'[take fleeting glance at]';

+瞬>'[wink]';

+瞭>'[bright]';

+瞰>'[watch]';

+瞳>'[pupil of eye]';

+瞶>'[dim]';

+#"瞶>'[dim]'",

+瞻>'[look]';

+瞼>'[eyelid]';

+瞽>'[blind]';

+瞿>'[surname]';

+矇>'[stupid]';

+矍>'[look about in firght or alarm]';

+矗>'[straight]';

+矚>'[watch carefully]';

+矛>'[spear]';

+矜>'[pity]';

+矢>'[arrow]';

+矣>'[particle of completed action]';

+知>'[know]';

+矧>'[much more]';

+矩>'[carpenter''s square]';

+短>'[short]';

+矮>'[short]';

+矯>'[correct]';

+石>'[stone]';

+矼>'[stone bridge]';

+砂>'[sand]';

+砌>'[stone steps]';

+砒>'[arsenic]';

+研>'[grind]';

+砕>'[break]';

+砠>'[rocky]';

+砥>'[whetstone]';

+砦>'[stockade]';

+砧>'[anvil]';

+砲>'[gun]';

+破>'[break]';

+砺>'[whetstone]';

+砿>'[mine]';

+硅>'[silicon]';

+硝>'[saltpeter]';

+硫>'[sulfur]';

+硬>'[hard]';

+硯>'[inkstone]';

+#"硲>'[................................]'",

+#"硴>'[................................]'",

+硼>'[borax]';

+碁>'[chess]';

+碆>'[arrow-tip]';

+碇>'[anchor]';

+碌>'[rough]';

+碍>'[obstruct]';

+碎>'[break]';

+碑>'[stone tablet]';

+碓>'[pestle]';

+#"碕>'[................................]'",

+碗>'[bowl]';

+碚>'[suburb]';

+碣>'[stone tablet]';

+碧>'[jade]';

+碩>'[great]';

+碪>'[stone slab used for washing clot]';

+碯>'[agate]';

+#"碵>'[................................]'",

+確>'[sure]';

+碼>'[number]';

+碾>'[roller]';

+磁>'[magnetic]';

+磅>'[pound]';

+#"磆>'[................................]'",

+磊>'[pile of rocks or stones]';

+磋>'[polish]';

+磐>'[large rock]';

+磑>'[stone mill]';

+磔>'[downward stroke slanting righ]';

+磚>'[tile]';

+磧>'[sand and gravel]';

+磨>'[grind]';

+磬>'[musical instrument]';

+磯>'[jetty]';

+磴>'[steps on ledge]';

+磽>'[barren land]';

+礁>'[reef]';

+#"礇>'[................................]'",

+礎>'[foundation stone]';

+#"礎>'[foundation stone]'",

+#"礒>'[................................]'",

+礙>'[obstruct]';

+礦>'[mine]';

+礪>'[whetstone]';

+礫>'[gravel]';

+礬>'[alum]';

+示>'[show]';

+礼>'[social custom]';

+社>'[god of the soil and altars to him]';

+祀>'[to sacrifice]';

+祁>'[pray]';

+祇>'[only]';

+祈>'[pray]';

+祉>'[happiness]';

+祐>'[divine intervention]';

+祓>'[exorcise]';

+祕>'[mysterious]';

+祖>'[ancestor]';

+祗>'[respect]';

+祚>'[throne]';

+祝>'[pray for happiness or blessings]';

+神>'[spirit]';

+祟>'[evil spirit]';

+祠>'[ancestral temple]';

+祢>'[one''s deceased father]';

+祥>'[good luck]';

+票>'[slip of paper or bamboo]';

+祭>'[sacrifice to]';

+祷>'[pray]';

+祺>'[good luck]';

+祿>'[blessing]';

+禀>'[report to]';

+禁>'[restrict]';

+禄>'[blessing]';

+禅>'[meditation]';

+禊>'[semi-annual ceremony of purifica]';

+禍>'[misfortune]';

+禎>'[lucky]';

+福>'[happiness]';

+禝>'[[not found in dictionary]]';

+禦>'[defend]';

+禧>'[happiness]';

+禪>'[meditation]';

+禮>'[social custom]';

+禰>'[one''s deceased father]';

+禳>'[pray or sacrifice]';

+禹>'[legendary hsia dynasty founder]';

+禺>'[district]';

+禽>'[birds]';

+禾>'[grain still on stalk]';

+禿>'[bald]';

+秀>'[ear of grain]';

+私>'[private]';

+秉>'[grasp]';

+秋>'[autumn]';

+科>'[section]';

+秒>'[beard of grain or corn]';

+秕>'[empty grain or rice husk]';

+秘>'[secret]';

+租>'[rent]';

+#"秡>'[................................]'",

+秣>'[fodder]';

+秤>'[balance]';

+秦>'[feudal state of qin]';

+秧>'[rice seedlings]';

+秩>'[order]';

+秬>'[black millet]';

+称>'[call]';

+移>'[change place]';

+稀>'[rare]';

+稈>'[stalk of grain]';

+程>'[journey]';

+稍>'[little]';

+税>'[taxes]';

+稔>'[ripe grain]';

+稗>'[darnels]';

+#"稘>'[................................]'",

+稙>'[grain ready for grinding]';

+稚>'[young]';

+稜>'[corner]';

+稟>'[report to]';

+稠>'[dense]';

+種>'[seed]';

+稱>'[call]';

+稲>'[rice growing in field]';

+稷>'[god of cereals]';

+稻>'[rice growing in field]';

+稼>'[sow grain]';

+稽>'[examine]';

+稾>'[draft]';

+稿>'[draft]';

+穀>'[corn]';

+穂>'[ear of grain]';

+#"穃>'[................................]'",

+穆>'[majestic]';

+穉>'[young grain]';

+積>'[accumulate]';

+穎>'[rice tassel]';

+#"穎>'[rice tassel]'",

+穐>'[fall]';

+穗>'[ear of grain]';

+穡>'[farm]';

+穢>'[dirty]';

+穣>'[stalks of grain]';

+穩>'[stable]';

+穫>'[harvest]';

+穰>'[stalks of grain]';

+穴>'[cave]';

+究>'[examine]';

+穹>'[high and vast]';

+空>'[empty]';

+穽>'[hole]';

+穿>'[penetrate]';

+突>'[suddenly]';

+窃>'[secretly]';

+窄>'[narrow]';

+窈>'[obscure]';

+窒>'[stop up]';

+窓>'[window]';

+窕>'[slender]';

+窖>'[pit]';

+窗>'[window]';

+窘>'[embrassassed]';

+窟>'[hole]';

+窩>'[nest]';

+窪>'[hollow]';

+窮>'[poor]';

+窯>'[kiln]';

+窰>'[kiln]';

+窶>'[poor]';

+窺>'[peep]';

+窿>'[mine shaft]';

+竃>'[furnace]';

+竄>'[run away]';

+竅>'[hole]';

+竇>'[surname]';

+竈>'[furnace]';

+竊>'[secretly]';

+立>'[stand]';

+竍>'[decaliter]';

+竏>'[kiloliter]';

+竒>'[strange]';

+竓>'[milliliter]';

+竕>'[deciliter]';

+站>'[stand up]';

+竚>'[stand and wait for long time]';

+竜>'[dragon]';

+竝>'[combine]';

+竟>'[finally]';

+章>'[composition]';

+竡>'[hectoliter]';

+竢>'[wait for]';

+竣>'[terminate]';

+童>'[child]';

+竦>'[revere]';

+竪>'[perpendicular]';

+竭>'[put forth great effort]';

+端>'[end]';

+竰>'[centiliter]';

+競>'[contend]';

+竸>'[contend]';

+竹>'[bamboo]';

+竺>'[india]';

+竿>'[bamboo pole]';

+#"笂>'[................................]'",

+笄>'[hairpin]';

+笆>'[bamboo fence]';

+笈>'[bamboo box used carry books]';

+笊>'[ladle]';

+笋>'[bamboo shoots]';

+笏>'[tablet held by someone having au]';

+笑>'[smile]';

+#"笘>'[................................]'",

+笙>'[small gourd-shaped musical instrument]';

+笛>'[bamboo flute]';

+笞>'[bamboo rod used for beatings]';

+笠>'[bamboo hat]';

+笥>'[a hamper]';

+符>'[i.d. tag]';

+笨>'[foolish]';

+第>'[sequence]';

+笳>'[a reed leaf whistle]';

+笵>'[a bamboo form]';

+#"笶>'[................................]'",

+笹>'[small bamboo]';

+筅>'[bamboo brush]';

+筆>'[writing brush]';

+筈>'[arrow end]';

+等>'[rank]';

+筋>'[muscles]';

+筌>'[bamboo fish trap]';

+筍>'[bamboo shoot]';

+筏>'[raft]';

+筐>'[bamboo basket or chest]';

+筑>'[ancient lute]';

+筒>'[thick piece of bamboo]';

+答>'[answer]';

+策>'[scheme]';

+筝>'[stringed musical instrument]';

+筥>'[round-shaped bamboo basket for]';

+筧>'[bamboo water pipe]';

+筬>'[reed of a loom]';

+筮>'[divination with stalks of plants]';

+筰>'[cable]';

+筱>'[dwarf bamboo]';

+筴>'[type of grass used in divination]';

+筵>'[bamboo mat]';

+筺>'[bamboo basket or chest]';

+箆>'[fine-toothed comb]';

+箇>'[numerary adjunct]';

+箋>'[note]';

+箍>'[hoop]';

+箏>'[stringed musical instrument]';

+箒>'[broom]';

+箔>'[reed screen]';

+箕>'[sieve]';

+算>'[count]';

+箘>'[fine bamboo]';

+箙>'[quiver]';

+箚>'[brief note]';

+箜>'[ancient string music instrument]';

+箝>'[tweezers]';

+#"箟>'[................................]'",

+管>'[pipe]';

+箪>'[small bamboo basket for holding]';

+箭>'[arrow]';

+箱>'[case]';

+箴>'[needle]';

+箸>'[chopsticks]';

+節>'[knot]';

+篁>'[bamboo grove]';

+範>'[pattern]';

+篆>'[seal script]';

+篇>'[chapter]';

+築>'[build]';

+篋>'[ratton box]';

+篌>'[ancient music instrument]';

+篏>'[inlay]';

+篝>'[bamboo basket]';

+篠>'[dwarf bamboo]';

+篤>'[deep]';

+篥>'[bulgle]';

+篦>'[fine-toothed comb]';

+篩>'[sieve]';

+篭>'[cage]';

+篳>'[wicker]';

+#"篶>'[................................]'",

+篷>'[awning]';

+簀>'[bed mat]';

+簇>'[swarm]';

+簍>'[bamboo basket]';

+簑>'[a coir raincoat]';

+簒>'[usurp]';

+#"簓>'[................................]'",

+簔>'[a coir raincoat]';

+#"簗>'[................................]'",

+簟>'[bamboo mat]';

+簡>'[simple]';

+簣>'[bamboo basket for carrying earth]';

+簧>'[reed of woodwind instrument]';

+簪>'[hairpin]';

+簫>'[musical instrument like pan-pipes]';

+簷>'[eaves of house]';

+簸>'[winnower]';

+簽>'[sign]';

+簾>'[a blind]';

+簿>'[register]';

+籀>'[recite]';

+籃>'[basket]';

+籌>'[chip]';

+籍>'[record]';

+籏>'[flag]';

+籐>'[climbing plants]';

+籔>'[bamboo basket]';

+籖>'[tally]';

+籘>'[climbing plants]';

+籟>'[bamboo flute]';

+籠>'[cage]';

+籤>'[tally]';

+籥>'[key]';

+籬>'[bamboo or wooden fence]';

+米>'[hulled or husked uncooked rice]';

+籵>'[dm]';

+籾>'[unhulled rice]';

+粁>'[km]';

+粂>'[surname]';

+粃>'[empty husks of grain]';

+粉>'[powder]';

+粋>'[pure]';

+粍>'[mm]';

+#"粐>'[................................]'",

+粒>'[grain]';

+粕>'[lees]';

+粗>'[rough]';

+粘>'[viscous]';

+粛>'[pay respects]';

+粟>'[unhusked millet]';

+#"粡>'[................................]'",

+粢>'[grain offered in ritual sacrific]';

+粤>'[Guangdong and Guangxi provinces]';

+粥>'[rice gruel]';

+粧>'[toilet]';

+粨>'[hm]';

+#"粫>'[................................]'",

+#"粭>'[................................]'",

+粮>'[food]';

+粱>'[better varieties of millet]';

+粲>'[polish]';

+粳>'[non-glutinous rice]';

+粹>'[pure]';

+粽>'[dumpling made of glutinous rice]';

+精>'[essence]';

+#"糀>'[................................]'",

+#"糂>'[................................]'",

+糅>'[blend]';

+糊>'[paste]';

+糎>'[mm]';

+糒>'[food for a journey]';

+糖>'[sugar]';

+#"糘>'[................................]'",

+糜>'[rice gruel]';

+糞>'[manure]';

+糟>'[sediment]';

+糠>'[chaff]';

+糢>'[rice snacks]';

+糧>'[food]';

+糯>'[glutinous rice]';

+糲>'[unpolished rice]';

+糴>'[purchase grains]';

+糶>'[sell grains]';

+糸>'[silk]';

+糺>'[to collaborate]';

+系>'[system]';

+糾>'[investigate]';

+紀>'[record]';

+紂>'[name of an emperor]';

+約>'[treaty]';

+紅>'[red]';

+紆>'[bend]';

+紊>'[confused]';

+紋>'[line]';

+納>'[admit]';

+紐>'[knot]';

+純>'[pure]';

+紕>'[spoiled silk]';

+紗>'[gauze]';

+紘>'[string]';

+紙>'[paper]';

+級>'[level]';

+紛>'[in disorder]';

+紜>'[confused]';

+素>'[white (silk)]';

+紡>'[spin]';

+索>'[large rope]';

+紫>'[purple]';

+紬>'[kind of thin silk]';

+紮>'[tie]';

+累>'[tired]';

+細>'[fine]';

+紲>'[bridle]';

+紳>'[girdle]';

+紵>'[ramie]';

+紹>'[continue]';

+紺>'[dark blue color]';

+紿>'[cheat]';

+終>'[end]';

+絃>'[string on musical instrument]';

+組>'[class]';

+絅>'[unlined garment]';

+絆>'[loop]';

+#"絋>'[................................]'",

+経>'[classic works]';

+絎>'[baste]';

+絏>'[rope]';

+結>'[knot]';

+絖>'[fine silks]';

+絛>'[silk braid]';

+絞>'[twist]';

+絡>'[enmesh]';

+絢>'[variegated]';

+絣>'[to baste for sewing]';

+給>'[give]';

+絨>'[silk]';

+絮>'[waste cotton]';

+統>'[govern]';

+絲>'[silk]';

+絳>'[deep red]';

+絵>'[draw]';

+絶>'[cut]';

+絹>'[kind of thick stiff silk]';

+#"絽>'[................................]'",

+綉>'[embroider]';

+綏>'[soothe]';

+經>'[classic works]';

+継>'[continue]';

+続>'[continue]';

+#"綛>'[................................]'",

+綜>'[arrange threads for weaving]';

+#"綟>'[................................]'",

+綢>'[silk cloth]';

+綣>'[affectionate]';

+綫>'[line]';

+綬>'[silk ribbon attached as a seal]';

+維>'[maintain]';

+綮>'[embroidered banner]';

+綯>'[braid]';

+綰>'[to string together]';

+綱>'[heavy rope]';

+網>'[net]';

+綴>'[patch together]';

+綵>'[varicolored silk]';

+綸>'[green silk thread or tassel]';

+綺>'[fine thin silk]';

+綻>'[ripped seam]';

+綽>'[graceful]';

+綾>'[thin silk]';

+綿>'[cotton wad]';

+緇>'[black silk]';

+緊>'[tense]';

+緋>'[scarlet]';

+総>'[collect]';

+緑>'[green]';

+緒>'[end of thread]';

+#"緕>'[................................]'",

+緘>'[seal]';

+線>'[thread]';

+緜>'[cotton wad]';

+緝>'[to sew in close stitches]';

+緞>'[satin]';

+締>'[tie]';

+緡>'[fishing-line]';

+緤>'[cord]';

+編>'[knit]';

+緩>'[slow]';

+緬>'[distant]';

+緯>'[woof]';

+緲>'[indistinct]';

+練>'[practice]';

+緻>'[delicate]';

+縁>'[hem]';

+縄>'[rope]';

+#"縄>'[rope]'",

+縉>'[red silk]';

+縊>'[hang]';

+縋>'[climd down rope]';

+#"縑>'[fine silk]'",

+縛>'[to tie]';

+縞>'[white raw silk]';

+縟>'[decorative]';

+縡>'[matter]';

+縢>'[bind]';

+縣>'[county]';

+縦>'[indulge in]';

+縫>'[sew]';

+縮>'[contract]';

+縱>'[indulge in]';

+縲>'[chain or rope used bind criminal]';

+縵>'[plain silk]';

+縷>'[thread]';

+縹>'[light blue silk]';

+#"縺>'[................................]'",

+縻>'[halter for ox]';

+總>'[collect]';

+績>'[spin]';

+繁>'[complicated]';

+繃>'[bind]';

+繆>'[wind around]';

+繊>'[fine]';

+繋>'[attach]';

+繍>'[embroider]';

+織>'[weave]';

+繕>'[repair]';

+繖>'[umbrella]';

+繙>'[interpret]';

+繚>'[wind round]';

+#"繝>'[................................]'",

+繞>'[entwine]';

+繦>'[string of copper coins]';

+#"繧>'[................................]'",

+繩>'[rope]';

+繪>'[draw]';

+繭>'[cocoon]';

+繰>'[to reel silk from cocoons]';

+繹>'[unravel or unreel silk]';

+繻>'[fine silk guaze]';

+繼>'[continue]';

+繽>'[flourishing]';

+#"繿>'[................................]'",

+纂>'[edit]';

+#"纃>'[................................]'",

+纈>'[patterned silk]';

+#"纉>'[................................]'",

+續>'[continue]';

+纎>'[fine]';

+纏>'[wrap]';

+#"纐>'[................................]'",

+纒>'[wrap]';

+纓>'[chin strap]';

+纔>'[talent]';

+纖>'[fine]';

+纛>'[a banner]';

+纜>'[hawser]';

+缶>'[earthen crock or jar]';

+缸>'[earthen jug]';

+缺>'[be short of]';

+罅>'[crack]';

+罌>'[long necked jar or bottle]';

+罍>'[large earthenware wine jar]';

+罎>'[an earthenware jar]';

+罐>'[jar]';

+网>'[net]';

+罔>'[net]';

+罕>'[rare]';

+罘>'[screen used in ancient times]';

+罟>'[net]';

+罠>'[animal trap]';

+#"罧>'[................................]'",

+罨>'[medical compress]';

+罩>'[basket for catching fish]';

+罪>'[crime]';

+罫>'[hinder]';

+置>'[place]';

+罰>'[penalty]';

+署>'[public office]';

+罵>'[accuse]';

+罷>'[cease]';

+罸>'[penalty]';

+罹>'[sorrow]';

+#"羂>'[................................]'",

+羃>'[cover-cloth]';

+羅>'[net for catching birds]';

+羆>'[brown bear]';

+羇>'[inn]';

+羈>'[halter]';

+羊>'[sheep]';

+羌>'[qiang nationality]';

+美>'[beautiful]';

+羔>'[lamb]';

+羚>'[species of antelope]';

+羝>'[ram]';

+羞>'[disgrace]';

+羣>'[group]';

+群>'[group]';

+羨>'[envy]';

+義>'[right conduct]';

+羮>'[soup]';

+羯>'[wether]';

+羲>'[ancient emperor]';

+羶>'[rank odor]';

+羸>'[weak]';

+羹>'[soup]';

+羽>'[feather]';

+翁>'[old man]';

+翅>'[wings]';

+翆>'[color green]';

+翊>'[flying]';

+翌>'[bright]';

+習>'[practice]';

+翔>'[soar]';

+翕>'[agree]';

+翠>'[color green]';

+翡>'[kingfisher]';

+翦>'[scissors]';

+翩>'[fly]';

+翫>'[careless]';

+翰>'[writing brush]';

+翳>'[shade]';

+翹>'[turn up]';

+翻>'[flip over]';

+翼>'[wings]';

+耀>'[shine]';

+老>'[old]';

+考>'[examine]';

+耄>'[elderly person]';

+者>'[that which]';

+耆>'[man of sixty]';

+耋>'[aged]';

+而>'[and]';

+耐>'[endure]';

+耒>'[handle of plow]';

+耕>'[plow]';

+耗>'[consume]';

+耘>'[weed]';

+耙>'[rake]';

+耜>'[spade-shaped tool]';

+耡>'[hoe]';

+耨>'[hoe]';

+耳>'[ear]';

+耶>'[used in transliteration]';

+耻>'[shame]';

+耽>'[indulge in]';

+耿>'[bright]';

+聆>'[listen]';

+聊>'[somewhat]';

+聒>'[clamor]';

+聖>'[holy]';

+聘>'[engage]';

+聚>'[assemble]';

+聞>'[hear]';

+聟>'[son-in-law]';

+聡>'[intelligent]';

+#"聢>'[................................]'",

+聨>'[connect]';

+聯>'[connect]';

+聰>'[intelligent]';

+聲>'[sound]';

+聳>'[urge on]';

+聴>'[hear]';

+聶>'[whisper]';

+職>'[duty]';

+聹>'[earwax]';

+聽>'[hear]';

+聾>'[deaf]';

+聿>'[writing brush]';

+肄>'[learn]';

+肅>'[pay respects]';

+肆>'[indulge]';

+肇>'[begin]';

+肉>'[flesh]';

+肋>'[ribs]';

+肌>'[muscle tissue]';

+肓>'[region between heart and diaphragm]';

+肖>'[look like]';

+肘>'[elbow]';

+肚>'[belly]';

+肛>'[anus]';

+肝>'[liver]';

+股>'[thighs]';

+肢>'[human limbs]';

+肥>'[fat]';

+肩>'[shoulders]';

+肪>'[animal fat]';

+肬>'[wart]';

+肭>'[fat]';

+肯>'[willing]';

+肱>'[forearm]';

+育>'[produce]';

+肴>'[cooked or prepared meat]';

+肺>'[lungs]';

+胃>'[stomach]';

+胄>'[helmet]';

+胆>'[gall bladder]';

+背>'[back]';

+胎>'[unborn child]';

+胖>'[fat]';

+胙>'[food offered in sacrificial serv]';

+胚>'[embryo]';

+胛>'[the shoulder]';

+胝>'[callous]';

+胞>'[womb]';

+胡>'[recklessly]';

+胤>'[heir]';

+胥>'[all]';

+胯>'[pelvis]';

+胱>'[bladder]';

+胴>'[the large intestine]';

+胸>'[breast]';

+胼>'[callus]';

+能>'[be able]';

+脂>'[fat]';

+脅>'[ribs]';

+脆>'[crisp]';

+脇>'[ribs]';

+脈>'[blood vessels]';

+脉>'[blood vessels]';

+脊>'[spine]';

+脚>'[leg]';

+脛>'[shinbone]';

+脣>'[lips]';

+脩>'[dried meat (used as teachers payment in ancient times)]';

+脯>'[dried meat]';

+脱>'[take off]';

+脳>'[brain]';

+脹>'[swell]';

+脾>'[spleen]';

+腆>'[prosperous]';

+腋>'[armpit]';

+腎>'[kidneys]';

+腐>'[rot]';

+腑>'[bowels]';

+腓>'[calf]';

+腔>'[chest cavity]';

+腕>'[wrist]';

+腟>'[vagina]';

+腥>'[raw meat]';

+腦>'[brain]';

+腫>'[swell]';

+腮>'[lower part of face]';

+腰>'[waist]';

+腱>'[tendons]';

+腴>'[fat]';

+腸>'[intestines]';

+腹>'[stomach]';

+腺>'[gland]';

+腿>'[legs]';

+膀>'[upper arm]';

+膂>'[backbone]';

+膃>'[fat]';

+膈>'[diaphragm]';

+膊>'[shoulders]';

+膏>'[grease]';

+膓>'[intestines]';

+膕>'[hollow]';

+膚>'[skin]';

+膜>'[membrane]';

+膝>'[knee]';

+膠>'[glue]';

+膣>'[vagina]';

+#"膤>'[................................]'",

+膨>'[swell]';

+膩>'[greasy]';

+膰>'[cook meat for sacrifice or offer]';

+膳>'[meals]';

+膵>'[pancreas]';

+#"膸>'[................................]'",

+膺>'[breast]';

+膽>'[gall bladder]';

+膾>'[minced meat or fish]';

+膿>'[pus]';

+臀>'[buttocks]';

+臂>'[arm]';

+臆>'[chest]';

+臈>'[year end sacrifice]';

+臉>'[face]';

+臍>'[abdominal area of crab]';

+臑>'[soft]';

+臓>'[internal organs]';

+臘>'[year end sacrifice]';

+臙>'[rouge]';

+臚>'[arrange in order]';

+臟>'[internal organs]';

+臠>'[small lump of meat]';

+臣>'[minister]';

+臥>'[lie down]';

+臧>'[good]';

+臨>'[draw near]';

+自>'[self]';

+臭>'[smell]';

+至>'[reach]';

+致>'[send]';

+臺>'[tower]';

+臻>'[reach]';

+臼>'[mortar]';

+臾>'[moment]';

+舁>'[carry on one''s shoulder]';

+舂>'[grind in mortar]';

+舅>'[mother''s brother]';

+與>'[and]';

+興>'[thrive]';

+舉>'[raise]';

+舊>'[old]';

+舌>'[tongue]';

+舍>'[house]';

+舎>'[house]';

+舐>'[lick with tongue]';

+舒>'[open up]';

+舖>'[store]';

+舗>'[store]';

+舘>'[a mansion]';

+舛>'[oppose]';

+舜>'[legendary ruler]';

+舞>'[dance]';

+舟>'[boat]';

+舩>'[boat]';

+航>'[sail]';

+舫>'[fancy boat]';

+般>'[sort]';

+舮>'[bow or prow of boat]';

+舳>'[stern of ship]';

+舵>'[rudder]';

+舶>'[large]';

+舷>'[sides of boat]';

+舸>'[large boat]';

+船>'[ship]';

+艀>'[[not found in dictionary]]';

+艇>'[small boat]';

+艘>'[counter for ships]';

+艙>'[hold of ship]';

+艚>'[ship]';

+#"艝>'[................................]'",

+艟>'[ancient warship]';

+艢>'[a mast]';

+艤>'[to moor a boat to the bank]';

+艦>'[warship]';

+艨>'[long and narrow war-boat]';

+艪>'[oar]';

+艫>'[bow or prow of boat]';

+艮>'[seventh of eight diagrams]';

+良>'[good]';

+艱>'[difficult]';

+色>'[color]';

+艶>'[beautiful]';

+艷>'[beautiful]';

+艸>'[grass]';

+艾>'[artemisia]';

+芋>'[taro]';

+芍>'[peony]';

+芒>'[miscanthus sinensis]';

+芙>'[hibiscus]';

+芝>'[purplish mushroom thought promot]';

+芟>'[mow]';

+芥>'[mustard plant]';

+芦>'[rushes]';

+芫>'[daphne genkwa]';

+芬>'[fragrance]';

+芭>'[plantain or banana palm]';

+芯>'[pith from rush (juncus effusus)]';

+花>'[flower]';

+芳>'[fragrant]';

+芸>'[rue]';

+芹>'[celery]';

+芻>'[mow]';

+芽>'[bud]';

+苅>'[cut off]';

+苑>'[pasture]';

+苒>'[lush]';

+苓>'[fungus]';

+苔>'[moss]';

+苗>'[sprouts]';

+苙>'[pigsty]';

+苛>'[small]';

+苜>'[clover]';

+苞>'[variety of rush]';

+苟>'[careless]';

+苡>'[barley]';

+苣>'[kind of lettuce]';

+若>'[if]';

+苦>'[bitter]';

+苧>'[china grass]';

+苫>'[rush or straw matting]';

+英>'[petal]';

+#"苳>'[................................]'",

+苴>'[sackcloth]';

+苹>'[artemisia]';

+苺>'[berries]';

+苻>'[kind of herb]';

+茂>'[thick]';

+范>'[surname]';

+茄>'[eggplant]';

+茅>'[reeds]';

+茆>'[species of grass]';

+茉>'[white jasmine]';

+茎>'[stem]';

+茖>'[allium victorialis]';

+茗>'[tea]';

+#"茗>'[tea]'",

+茜>'[madder]';

+#"茣>'[................................]'",

+茨>'[caltrop]';

+茫>'[vast]';

+茯>'[china root]';

+茱>'[dogwood]';

+茲>'[now]';

+茴>'[fennel]';

+茵>'[cushion]';

+茶>'[tea]';

+茸>'[soft]';

+茹>'[roots]';

+荀>'[surname]';

+荅>'[answer: small bean]';

+草>'[grass]';

+荊>'[thorns]';

+荏>'[beans]';

+荐>'[repeat]';

+荒>'[wasteland]';

+荘>'[village]';

+荳>'[beans]';

+#"荵>'[................................]'",

+荷>'[lotus]';

+荻>'[reed]';

+荼>'[bitter vegetable]';

+莅>'[attend]';

+#"莇>'[................................]'",

+莉>'[white jasmine]';

+莊>'[village]';

+莎>'[kind of sedge grass]';

+莓>'[moss]';

+莖>'[stem]';

+莚>'[bamboo mat]';

+莞>'[smiling]';

+#"莟>'[................................]'",

+莠>'[weeds]';

+莢>'[pods of leguminous plants]';

+莨>'[herb]';

+莪>'[artemisia]';

+莫>'[do not]';

+莱>'[goosefoot]';

+莵>'[dodder]';

+莽>'[thicket]';

+菁>'[flower of leek family]';

+菅>'[coarse grass]';

+菊>'[chrysanthemum]';

+菌>'[mushroom]';

+菎>'[beautiful jade]';

+菓>'[fruits]';

+菖>'[iris]';

+菘>'[celery]';

+菜>'[vegetables]';

+菟>'[dodder]';

+菠>'[spinach and similar greens]';

+菩>'[herb]';

+菫>'[celery]';

+華>'[flowery]';

+菰>'[wild rice]';

+菱>'[water-chestnut]';

+菲>'[fragrant]';

+菴>'[small buddhist monastery]';

+#"菷>'[................................]'",

+菻>'[artemisia]';

+菽>'[beans and peas]';

+萃>'[dense]';

+萄>'[grapes]';

+萇>'[averrhora carambola]';

+萋>'[luxuriant foliage]';

+萌>'[bud]';

+萍>'[duckweed]';

+萎>'[wither]';

+#"萓>'[................................]'",

+萠>'[bud]';

+#"萢>'[................................]'",

+萩>'[scandent hop]';

+#"萪>'[................................]'",

+萬>'[ten thousand]';

+萱>'[day-lily]';

+萵>'[lettuce]';

+萸>'[dogwood]';

+萼>'[calyx of flower]';

+落>'[fall]';

+葆>'[reserve]';

+葉>'[leaf]';

+#"葎>'[................................]'",

+著>'[manifest]';

+葛>'[edible bean]';

+葡>'[grapes]';

+葢>'[cover]';

+董>'[direct]';

+葦>'[reed]';

+葩>'[flowers]';

+葫>'[bottle-gourd]';

+葬>'[bury]';

+葭>'[bulrush]';

+#"葭>'[bulrush]'",

+葯>'[leaf of angelica plant]';

+葱>'[scallions]';

+葵>'[sunflower]';

+葷>'[meat diet]';

+葹>'[kind of chrysanthemum]';

+葺>'[thatch]';

+蒂>'[peduncle or stem of plants]';

+#"蒄>'[................................]'",

+蒋>'[surname]';

+蒐>'[collect]';

+蒔>'[transplant]';

+蒙>'[cover]';

+蒜>'[garlic]';

+蒟>'[betel pepper]';

+蒡>'[burdock]';

+蒭>'[to cutgrass]';

+蒲>'[type of rush]';

+蒸>'[steam]';

+蒹>'[reed]';

+蒻>'[rushes]';

+蒼>'[blue]';

+蒿>'[mugwort]';

+蓁>'[abundant]';

+蓄>'[store]';

+蓆>'[straw mat]';

+蓉>'[hibiscus]';

+蓊>'[luxuriant vegetation]';

+蓋>'[cover]';

+蓍>'[milfoil]';

+蓐>'[straw bed mat]';

+蓑>'[rain coat made of straw]';

+蓖>'[castor-oil plant]';

+#"蓙>'[................................]'",

+蓚>'[oxalic (used in compounds)]';

+蓬>'[type of raspberry]';

+蓮>'[lotus]';

+蓴>'[edible water plant]';

+蓼>'[smartweed]';

+蓿>'[clover]';

+蔀>'[screen]';

+蔆>'[water-chestnut]';

+蔑>'[disdain]';

+蔓>'[creeping plants]';

+蔔>'[radish]';

+蔕>'[peduncle or stem of plants]';

+蔗>'[sugar cane]';

+蔘>'[ginsen]';

+蔚>'[luxuriant]';

+蔟>'[frame on which silkworms spin]';

+蔡>'[surname]';

+蔦>'[parasitic plants]';

+蔬>'[vegetables]';

+蔭>'[shade]';

+蔵>'[hide]';

+蔽>'[cover]';

+#"蕀>'[................................]'",

+蕁>'[nettle]';

+蕃>'[foreign things]';

+蕈>'[mushrooms]';

+蕉>'[banana]';

+蕊>'[unopened flowers]';

+蕋>'[unopened flowers]';

+蕎>'[buckwheat]';

+蕕>'[caryopteris divaricata]';

+#"蕗>'[................................]'",

+蕘>'[fuel]';

+蕚>'[calyx of flower]';

+蕣>'[hibiscus]';

+蕨>'[pteris aquilina]';

+蕩>'[pond]';

+蕪>'[luxurious growth of weeds]';

+蕭>'[common artemisia]';

+蕷>'[yam]';

+蕾>'[buds]';

+薀>'[the hippuris or mare''s tail plant]';

+薄>'[thin]';

+薇>'[osmunda regalis]';

+薈>'[luxuriant]';

+薊>'[circium]';

+薐>'[spinach]';

+薑>'[ginger]';

+薔>'[rose]';

+薗>'[garden]';

+薙>'[weed]';

+薛>'[kind of marsh grass]';

+薜>'[evergreen shrubs]';

+薤>'[allium bakeri]';

+薦>'[offer]';

+薨>'[death of prince]';

+薩>'[transliteration of \"sat\" of boddhisattva etc.]';

+薪>'[fuel]';

+薫>'[a medicinal herb]';

+薬>'[drugs]';

+薮>'[marsh]';

+薯>'[yam]';

+薹>'[cyperus rotundus]';

+薺>'[water-chestnuts]';

+藁>'[straw]';

+藉>'[mat]';

+藍>'[blue]';

+藏>'[hide]';

+藐>'[disregard]';

+藕>'[lotus root]';

+藜>'[chenopodium album]';

+藝>'[art]';

+藤>'[rattan]';

+藥>'[drugs]';

+藩>'[fence]';

+藪>'[marsh]';

+藷>'[yam]';

+藹>'[lush]';

+藺>'[rush used in making mats]';

+藻>'[splendid]';

+藾>'[shade]';

+蘂>'[stamen or pistil]';

+蘆>'[rushes]';

+蘇>'[thyme]';

+蘊>'[collect]';

+蘋>'[apple]';

+蘓>'[thyme]';

+蘖>'[stump]';

+蘗>'[stump]';

+蘚>'[moss]';

+蘢>'[tall grass]';

+蘭>'[orchid]';

+蘯>'[to toss about]';

+#"蘯>'[to toss about]'",

+蘿>'[type of creeping plant]';

+虍>'[tiger]';

+虎>'[tiger]';

+虐>'[cruel]';

+虔>'[act with reverence]';

+處>'[place]';

+虚>'[false]';

+虜>'[capture]';

+虞>'[concerned about]';

+號>'[mark]';

+虧>'[lose]';

+虫>'[insects]';

+虱>'[louse]';

+虹>'[rainbow]';

+虻>'[horsefly]';

+蚊>'[mosquito]';

+蚋>'[gnat]';

+蚌>'[oysters]';

+蚓>'[earthworm]';

+蚕>'[silkworms]';

+蚣>'[centipede]';

+蚤>'[flea]';

+蚩>'[worm]';

+蚪>'[tadpole]';

+蚫>'[abalone]';

+蚯>'[earthworm]';

+蚰>'[millipede]';

+蚶>'[kind of clam]';

+蛄>'[mole cricket]';

+蛆>'[maggots]';

+蛇>'[snake]';

+蛉>'[dragonfly]';

+蛋>'[eggs]';

+蛍>'[glow-worm]';

+蛎>'[oyster]';

+蛔>'[tapeworm]';

+蛙>'[frog]';

+蛛>'[spider]';

+蛞>'[snail]';

+蛟>'[scaly dragon with four legs]';

+蛤>'[clam]';

+蛩>'[cricket]';

+#"蛩>'[cricket]'",

+蛭>'[leech]';

+蛮>'[barbarians]';

+蛯>'[shrimp]';

+蛸>'[long legged spider]';

+蛹>'[chrysalis]';

+蛻>'[molt]';

+蛾>'[moth]';

+蜀>'[name of an ancient state]';

+蜂>'[bee]';

+蜃>'[marine monster which can change its shape]';

+蜆>'[a variety of bivalves]';

+蜈>'[centipede]';

+蜉>'[mayfly]';

+蜊>'[clam]';

+蜍>'[toad]';

+蜑>'[egg]';

+蜒>'[millipede]';

+蜘>'[spider]';

+蜚>'[cockroach]';

+蜜>'[honey]';

+蜥>'[lizard]';

+蜩>'[cicada]';

+蜴>'[lizard]';

+蜷>'[creep like worm]';

+蜻>'[dragonfly]';

+蜿>'[creep]';

+蝉>'[cicada]';

+蝋>'[wax]';

+蝌>'[tadpole]';

+蝎>'[scorpion]';

+蝓>'[snail]';

+蝕>'[nibble away]';

+蝗>'[kind of locust]';

+蝙>'[bat]';

+蝟>'[hedgehog]';

+蝠>'[kind of bat]';

+蝣>'[mayfly]';

+蝦>'[shrimp]';

+蝨>'[louse]';

+#"蝨>'[louse]'",

+蝮>'[venomous snake]';

+蝴>'[butterfly]';

+蝶>'[butterfly]';

+蝸>'[snail]';

+蝿>'[flies]';

+螂>'[mantis]';

+融>'[melt]';

+螟>'[kind of caterpillar]';

+螢>'[glow-worm]';

+螫>'[poison]';

+螯>'[nippers]';

+螳>'[mantis]';

+螺>'[spiral shell]';

+螻>'[gryllotalpa africana]';

+螽>'[katydid]';

+蟀>'[cricket]';

+蟄>'[to hibernate]';

+蟆>'[frog]';

+蟇>'[frog]';

+蟋>'[cricket]';

+#"蟋>'[cricket]'",

+蟒>'[python]';

+蟠>'[coil]';

+蟯>'[worms]';

+蟲>'[worms]';

+蟶>'[razor clam]';

+蟷>'[mantis]';

+蟹>'[crab]';

+蟻>'[ants]';

+蟾>'[toad]';

+蠅>'[flies]';

+蠍>'[scorpion]';

+蠎>'[python]';

+蠏>'[crab]';

+蠑>'[lizard]';

+蠕>'[eumenes polifomis]';

+蠖>'[measuring worm]';

+蠡>'[wood-boring insect]';

+蠢>'[wriggle]';

+蠣>'[oyster]';

+蠧>'[moth]';

+蠱>'[posion]';

+蠶>'[silkworms]';

+蠹>'[moth]';

+蠻>'[barbarians]';

+血>'[blood]';

+衂>'[to be defeated]';

+衄>'[epistaxis]';

+衆>'[multitude]';

+行>'[go]';

+衍>'[overflow]';

+衒>'[brag]';

+術>'[art]';

+街>'[street]';

+衙>'[public office]';

+衛>'[guard]';

+衝>'[rush against]';

+衞>'[guard]';

+衡>'[measure]';

+衢>'[highway]';

+衣>'[clothes]';

+表>'[show]';

+衫>'[shirt]';

+衰>'[decline]';

+衲>'[mend]';

+衵>'[chemise]';

+衷>'[heart]';

+衽>'[lapel]';

+衾>'[coverlet]';

+衿>'[collar or lapel of garment]';

+袁>'[robe]';

+袂>'[sleeves]';

+袈>'[buddhist cassock]';

+袋>'[pocket]';

+袍>'[long gown]';

+袒>'[strip]';

+袖>'[sleeve]';

+袗>'[unlined garments]';

+#"袙>'[................................]'",

+袞>'[ceremonial dress worn by emperor]';

+袢>'[robe]';

+袤>'[longitude]';

+被>'[passive indicator \"by\"]';

+#"袮>'[................................]'",

+#"袰>'[................................]'",

+袱>'[piece of cloth used wrap bundles]';

+袴>'[pants]';

+袵>'[lapel]';

+袷>'[lined garment]';

+袿>'[gown]';

+裁>'[cut out]';

+裂>'[split]';

+#"裂>'[split]'",

+#"裂>'[split]'",

+装>'[dress]';

+裏>'[inside]';

+裔>'[progeny]';

+裕>'[abundant]';

+裘>'[fur garments]';

+裙>'[skirt]';

+補>'[mend]';

+裝>'[dress]';

+裟>'[a cassock or robe of a monk]';

+裡>'[inside]';

+裨>'[aid]';

+裲>'[waistcoat]';

+裳>'[clothes]';

+裴>'[surname]';

+裸>'[bare]';

+裹>'[wrap]';

+裼>'[to take off one''s top]';

+製>'[make]';

+裾>'[lapel]';

+褂>'[jacket]';

+#"褃>'[a seam in a garment]'",

+複>'[repeat]';

+褊>'[cramped]';

+褌>'[trousers]';

+褐>'[coarse woolen cloth]';

+褒>'[praise]';

+褓>'[swaddling cloth]';

+褝>'[unlined garment]';

+#"褞>'[................................]'",

+褥>'[mattress]';

+褪>'[strip]';

+褫>'[strip]';

+褶>'[pleat]';

+褸>'[lapel]';

+褻>'[dirty]';

+襁>'[swaddling clothes]';

+襃>'[commend]';

+襄>'[aid]';

+襌>'[unlined garment]';

+襍>'[mixed]';

+襖>'[outer garments]';

+襞>'[fold]';

+襟>'[lapel]';

+襠>'[crotch or seat of pants]';

+襤>'[ragged]';

+襦>'[short coat]';

+襪>'[socks]';

+襭>'[tuck up hem of garment and wrap]';

+襯>'[underwear]';

+襲>'[raid]';

+襴>'[a one piece garment]';

+#"襶>'[ignorant]'",

+襾>'[cover]';

+西>'[west(ern)]';

+要>'[necessary]';

+覃>'[reach to]';

+覆>'[cover]';

+覇>'[rule by might rather than right]';

+覈>'[investigate]';

+覊>'[halter]';

+見>'[see]';

+規>'[rules]';

+覓>'[seek]';

+視>'[look at]';

+覗>'[peek]';

+覘>'[peek]';

+覚>'[wake up from sleep]';

+覡>'[wizard]';

+覦>'[desire strongly]';

+覧>'[look at]';

+覩>'[see]';

+親>'[relatives]';

+覬>'[covet]';

+覯>'[meet or see unexpectedly]';

+覲>'[have imperial audience]';

+観>'[see]';

+覺>'[wake up from sleep]';

+覽>'[look at]';

+覿>'[see]';

+觀>'[see]';

+角>'[horn]';

+觚>'[jug]';

+觜>'[beak]';

+觝>'[gore]';

+解>'[loosen]';

+触>'[butt]';

+觧>'[loosen]';

+觴>'[wine vessel]';

+觸>'[touch]';

+言>'[words]';

+訂>'[draw up agreement]';

+訃>'[obituary]';

+計>'[plan]';

+訊>'[inquire]';

+訌>'[confusion]';

+討>'[ask for]';

+訐>'[expose other''s secrets]';

+訓>'[teach]';

+訖>'[finish]';

+託>'[entrust]';

+記>'[record]';

+訛>'[swindle]';

+訝>'[express surprise]';

+訟>'[accuse]';

+訣>'[take leave of]';

+訥>'[slow of speech]';

+訪>'[visit]';

+設>'[build]';

+許>'[allow]';

+訳>'[translate]';

+訴>'[accuse]';

+訶>'[scold loudly]';

+診>'[examine patient]';

+註>'[explain]';

+証>'[prove]';

+詁>'[exegesis]';

+詆>'[slander]';

+詈>'[scold]';

+詐>'[cheat]';

+詑>'[cheat]';

+詒>'[bequeath]';

+詔>'[decree]';

+評>'[appraise]';

+詛>'[curse]';

+詞>'[words]';

+詠>'[sing]';

+詢>'[inquire into]';

+詣>'[reach]';

+試>'[test]';

+詩>'[poetry]';

+詫>'[be surprised]';

+詬>'[abuse]';

+詭>'[deceive]';

+詮>'[explain]';

+詰>'[question]';

+話>'[speech]';

+該>'[should]';

+詳>'[detailed]';

+詼>'[tease]';

+誂>'[tempt]';

+誄>'[eulogize]';

+誅>'[execute]';

+誇>'[exaggerate]';

+誉>'[fame]';

+誌>'[write down]';

+認>'[recognize]';

+誑>'[deceive]';

+誓>'[swear]';

+誕>'[bear children]';

+誘>'[persuade]';

+誚>'[criticize]';

+語>'[language]';

+誠>'[sincere]';

+誡>'[warn]';

+誣>'[make false accusation]';

+誤>'[err]';

+誥>'[inform]';

+誦>'[recite]';

+誨>'[teach]';

+説>'[speak]';

+読>'[read]';

+誰>'[who? whom? whose? anyone?]';

+課>'[lesson]';

+誹>'[slander]';

+誼>'[friendship]';

+調>'[transfer]';

+諂>'[flatter]';

+諄>'[patient]';

+談>'[talk]';

+請>'[ask]';

+諌>'[remonstrate]';

+諍>'[to expostulate]';

+諏>'[consult]';

+諒>'[excuse]';

+論>'[debate]';

+諚>'[(kokuji) command]';

+諛>'[flatter]';

+諜>'[intelligence report]';

+諞>'[brag]';

+諠>'[noisy]';

+諡>'[posthumous name]';

+諢>'[jokes]';

+諤>'[honest speech]';

+諦>'[careful]';

+諧>'[harmonize]';

+諫>'[remonstrate]';

+諭>'[proclaim]';

+諮>'[consult]';

+諱>'[conceal]';

+諳>'[versed in]';

+諷>'[recite]';

+諸>'[several]';

+諺>'[proverb]';

+諾>'[promise]';

+謀>'[plan]';

+謁>'[visit]';

+謂>'[say]';

+謄>'[copy]';

+謇>'[stutter]';

+謌>'[slander]';

+謎>'[riddle]';

+謐>'[calm]';

+謔>'[jeer]';

+謖>'[rise up]';

+謗>'[slander]';

+謙>'[humble]';

+謚>'[to confer posthumous titles]';

+講>'[explain]';

+謝>'[thank]';

+謠>'[sing]';

+謡>'[sing]';

+謦>'[t speak softly]';

+謨>'[scheme]';

+謫>'[charge]';

+謬>'[error]';

+謳>'[sing]';

+謹>'[prudent]';

+謾>'[deceive]';

+譁>'[noise]';

+證>'[proof]';

+譌>'[false]';

+譎>'[cunning]';

+譏>'[ridicule]';

+譖>'[to slander]';

+識>'[recognize]';

+譚>'[surname]';

+譛>'[to slander]';

+譜>'[register]';

+譟>'[clamor]';

+警>'[guard]';

+譫>'[talkative]';

+譬>'[metaphor]';

+譯>'[translate]';

+議>'[consult]';

+#"譱>'[................................]'",

+譲>'[allow]';

+譴>'[reprimand]';

+護>'[protect]';

+譽>'[fame]';

+讀>'[read]';

+讃>'[praise]';

+變>'[change]';

+讌>'[feast]';

+讎>'[enemy]';

+讐>'[enemy]';

+讒>'[slander]';

+讓>'[allow]';

+讖>'[prophecy]';

+讙>'[cheer]';

+讚>'[praise]';

+谷>'[valley]';

+谺>'[the mouth of a valley]';

+谿>'[valley]';

+豁>'[open up]';

+豆>'[beans]';

+豈>'[how? what?]';

+豊>'[abundant]';

+豌>'[peas]';

+豎>'[vertical]';

+豐>'[abundant]';

+豕>'[pigs]';

+豚>'[small pig]';

+象>'[elephant]';

+豢>'[domestic animals]';

+豪>'[brave]';

+豫>'[relaxed]';

+豬>'[pig]';

+豸>'[radical 153]';

+豹>'[leopard]';

+豺>'[wolf]';

+豼>'[fox]';

+貂>'[marten]';

+貅>'[brave]';

+貉>'[badger]';

+貊>'[leopard]';

+貌>'[countenance]';

+貍>'[a fox-like animal]';

+貎>'[lion]';

+貔>'[fox]';

+貘>'[the panther]';

+貝>'[sea shell]';

+貞>'[virtuous]';

+負>'[load]';

+財>'[wealth]';

+貢>'[offer tribute]';

+貧>'[poor]';

+貨>'[goods]';

+販>'[peddler]';

+貪>'[greedy]';

+貫>'[string of 1000 coins]';

+責>'[one''s responsibility]';

+貭>'[matter]';

+貮>'[number two]';

+貯>'[store]';

+貰>'[borrow]';

+貲>'[property]';

+貳>'[number two]';

+貴>'[expensive]';

+貶>'[decrease]';

+買>'[buy]';

+貸>'[lend]';

+費>'[expenses]';

+貼>'[paste to]';

+貽>'[give to]';

+貿>'[trade]';

+賀>'[congratulate]';

+賁>'[forge ahead]';

+賂>'[bribe]';

+賃>'[rent]';

+賄>'[bribe]';

+資>'[property]';

+賈>'[surname]';

+賊>'[thief]';

+賍>'[booty]';

+賎>'[mean]';

+賑>'[relieve]';

+賓>'[guest]';

+賚>'[give]';

+賛>'[help]';

+賜>'[give]';

+賞>'[reward]';

+賠>'[indemnify]';

+賢>'[virtuous]';

+賣>'[sell]';

+賤>'[mean]';

+賦>'[tax]';

+質>'[matter]';

+賭>'[bet]';

+賺>'[make money]';

+賻>'[gift of money help pay funeral]';

+購>'[buy]';

+賽>'[compete]';

+贄>'[gift superior]';

+贅>'[unnecessary]';

+贇>'[affable]';

+贈>'[give present]';

+贊>'[help]';

+贋>'[false]';

+贍>'[support]';

+贏>'[win]';

+贐>'[farewell present]';

+贓>'[booty]';

+贔>'[strong]';

+贖>'[buy]';

+赤>'[red]';

+赦>'[forgive]';

+赧>'[blush]';

+赫>'[bright]';

+赭>'[reddish brown]';

+走>'[walk]';

+赱>'[walk]';

+赳>'[grand]';

+赴>'[go to]';

+起>'[rise]';

+趁>'[take advantage of]';

+超>'[jump over]';

+越>'[exceed]';

+趙>'[surname]';

+趣>'[what attracts one''s attention]';

+趨>'[hasten]';

+足>'[foot]';

+趺>'[sit cross-legged]';

+趾>'[toe]';

+跂>'[creeping]';

+跋>'[go by foot]';

+跌>'[stumble]';

+跏>'[sit cross-legged]';

+跖>'[sole (of the foot)]';

+跚>'[stagger]';

+跛>'[lame]';

+距>'[distance]';

+跟>'[heel]';

+跡>'[search]';

+跣>'[bare footed]';

+跨>'[straddle]';

+跪>'[kneel]';

+跫>'[sound of footsteps]';

+路>'[road]';

+跳>'[jump]';

+践>'[trample]';

+跼>'[bent]';

+#"跿>'[................................]'",

+踈>'[neglect]';

+踉>'[hop]';

+踊>'[leap]';

+踏>'[step on]';

+踐>'[trample]';

+踝>'[ankle]';

+踞>'[crouch]';

+踟>'[hesitate]';

+踪>'[footprints]';

+踰>'[exceed]';

+踴>'[leap]';

+踵>'[heel]';

+蹂>'[trample under foot]';

+蹄>'[hoof]';

+蹇>'[lame]';

+蹈>'[stamp feet]';

+蹉>'[error]';

+蹊>'[footpath]';

+蹌>'[walk rapidly]';

+蹐>'[take short steps]';

+蹕>'[clear way]';

+蹙>'[urgent]';

+蹟>'[trace]';

+蹠>'[step on]';

+蹣>'[to jump over]';

+蹤>'[footprints]';

+蹲>'[squat]';

+蹴>'[kick]';

+蹶>'[stumble]';

+蹼>'[webbed feet of waterfowl]';

+躁>'[tense]';

+躄>'[cripple]';

+躅>'[walk carefully]';

+躇>'[hesitate]';

+躊>'[hesitate]';

+躋>'[ascend]';

+躍>'[skip]';

+躑>'[waver]';

+躓>'[stumble]';

+躔>'[follow in]';

+躙>'[trample down]';

+躡>'[tread]';

+躪>'[trample down]';

+身>'[body]';

+躬>'[body]';

+躯>'[body]';

+躰>'[body]';

+躱>'[hide]';

+#"躺>'[lie down]'",

+#"軄>'[to govern]'",

+軆>'[body]';

+#"軆>'[body]'",

+車>'[cart]';

+軋>'[crush by weight]';

+軌>'[track]';

+軍>'[army]';

+軒>'[carriage]';

+軛>'[yoke]';

+軟>'[soft]';

+転>'[shift]';

+軣>'[rumble]';

+軫>'[cross board at rear of carriage]';

+軸>'[axle]';

+軻>'[axle]';

+軼>'[rush forth]';

+軽>'[light]';

+軾>'[horizontal wooden bar in front of a sedan chair]';

+較>'[compare]';

+輅>'[chariot]';

+載>'[load]';

+輊>'[low rear portion of cart]';

+輌>'[numerary adjunct for vehicles]';

+輒>'[sides of chariot where weapons]';

+輓>'[mourn]';

+輔>'[cheek bone]';

+輕>'[light]';

+輙>'[sides of chariot were weapons]';

+輛>'[numerary adjunct for vehicles]';

+輜>'[supply cart]';

+輝>'[brightness]';

+輟>'[stop]';

+輦>'[hand-cart]';

+輩>'[generation]';

+輪>'[wheel]';

+輯>'[gather up]';

+輳>'[hubs of wheel]';

+輸>'[transport]';

+輹>'[two pieces of wood underneath ca]';

+輻>'[spokes of wheel]';

+輾>'[turn over]';

+輿>'[cart]';

+轂>'[hub of wheel]';

+轄>'[linchpin of wheel]';

+轅>'[axle]';

+轆>'[windlass]';

+轉>'[shift]';

+轌>'[sled]';

+轍>'[wagon ruts]';

+轎>'[sedan-chair]';

+轗>'[fail]';

+轜>'[hearse]';

+轟>'[rumble]';

+轡>'[bridle of horse]';

+轢>'[run over something with vehicle]';

+#"轣>'[................................]'",

+轤>'[pulley]';

+辛>'[bitter]';

+辜>'[crime]';

+辞>'[words]';

+辟>'[law]';

+辣>'[peppery]';

+辧>'[manage]';

+辨>'[distinguish]';

+辭>'[words]';

+辮>'[braid]';

+辯>'[dispute]';

+辰>'[early morning]';

+辱>'[humiliate]';

+農>'[agriculture]';

+辷>'[smooth]';

+辺>'[edge]';

+辻>'[crossroads]';

+込>'[crowd into]';

+辿>'[follow]';

+迂>'[doctrinaire]';

+迄>'[extend]';

+迅>'[quick]';

+迎>'[receive]';

+近>'[near]';

+返>'[return]';

+迚>'[very]';

+迢>'[far]';

+迥>'[distant]';

+迦>'[character for transliteration]';

+迩>'[be near]';

+迪>'[enlighten]';

+迫>'[coerce]';

+迭>'[repeatedly]';

+迯>'[escape]';

+述>'[narrate]';

+迴>'[revolve]';

+迷>'[bewitch]';

+迸>'[gush out]';

+迹>'[traces]';

+迺>'[then]';

+追>'[pursue]';

+退>'[step back]';

+送>'[see off]';

+逃>'[escape]';

+逅>'[meet unexpectedly]';

+逆>'[disobey]';

+逋>'[flee]';

+逍>'[ramble]';

+逎>'[strong]';

+透>'[penetrate]';

+逐>'[chase]';

+逑>'[collect]';

+逓>'[hand over]';

+途>'[way]';

+逕>'[pass by]';

+逖>'[far]';

+逗>'[tempt]';

+這>'[this]';

+通>'[pass through]';

+逝>'[pass away]';

+逞>'[indulge oneself]';

+速>'[quick]';

+造>'[construct]';

+逡>'[retreat]';

+逢>'[come upon]';

+連>'[join]';

+#"逦>'[meandering]'",

+逮>'[seize]';

+週>'[week]';

+進>'[advance]';

+逵>'[thoroughfare]';

+逶>'[winding]';

+逸>'[flee]';

+逹>'[arrive at]';

+逼>'[compel]';

+逾>'[go over]';

+遁>'[hide]';

+遂>'[comply with]';

+遅>'[late]';

+遇>'[meet]';

+遉>'[spy]';

+遊>'[wander]';

+運>'[luck]';

+遍>'[everywhere]';

+過>'[pass]';

+遏>'[stop]';

+遐>'[afar]';

+遑>'[leisure]';

+遒>'[strong]';

+道>'[path]';

+達>'[arrive at]';

+違>'[disobey]';

+#"違>'[disobey]'",

+遘>'[to meet]';

+遙>'[far away]';

+遜>'[humble]';

+遞>'[hand over]';

+遠>'[distant]';

+遡>'[go upstream]';

+遣>'[send]';

+遥>'[far away]';

+遨>'[ramble]';

+適>'[match]';

+遭>'[come across]';

+遮>'[cover]';

+遯>'[deceive]';

+遲>'[late]';

+遵>'[obey]';

+遶>'[entwine]';

+遷>'[move]';

+選>'[choose]';

+遺>'[lose]';

+遼>'[distant]';

+遽>'[suddenly]';

+避>'[avoid]';

+邀>'[invite]';

+邁>'[take a big stride]';

+邂>'[unexpected meeting]';

+邃>'[profound]';

+還>'[still]';

+邇>'[be near]';

+邉>'[edge]';

+邊>'[edge]';

+邏>'[patrol]';

+邑>'[area]';

+那>'[that]';

+邦>'[nation]';

+邨>'[village]';

+邪>'[wrong]';

+邯>'[city in hebei province]';

+邱>'[surname]';

+邵>'[surname]';

+邸>'[official residence]';

+郁>'[sweet smelling]';

+郊>'[suburbs]';

+郎>'[gentleman]';

+郛>'[outer walls of city]';

+郡>'[administrative division]';

+郢>'[state in today''s hubei province]';

+郤>'[crack]';

+部>'[part]';

+郭>'[outer part (of a city)]';

+郵>'[postal]';

+郷>'[country]';

+都>'[metropolis]';

+鄂>'[hubei province]';

+鄒>'[name of an ancient state]';

+鄙>'[mean]';

+鄭>'[state in today''s henan]';

+鄰>'[neighbor]';

+鄲>'[county in hebei proincev]';

+酉>'[tenth in series of twelve cyclic]';

+酊>'[drunk]';

+酋>'[chief of tribe]';

+酌>'[serve wine]';

+配>'[match]';

+酎>'[double-fermented wine]';

+酒>'[wine]';

+酔>'[intoxicated]';

+酖>'[wine with bird poison added]';

+#"酘>'[................................]'",

+酢>'[toast one''s host with wine]';

+酣>'[enjoy intoxicants]';

+酥>'[butter]';

+酩>'[drunk]';

+酪>'[cream]';

+酬>'[toast]';

+酲>'[hangover]';

+#"酲>'[hangover]'",

+酵>'[yeast]';

+酷>'[strong]';

+酸>'[tart]';

+#"醁>'[a kind of green-colored wine]'",

+醇>'[rich]';

+醉>'[intoxicated]';

+醋>'[vinegar]';

+醍>'[essential oil of butter]';

+醐>'[purest cream]';

+醒>'[wake up]';

+醗>'[to brew for the second time]';

+醜>'[ugly looking]';

+醢>'[minced pickled meat]';

+醤>'[any jam-like or paste-like food]';

+醪>'[unclear wine]';

+醫>'[cure]';

+醯>'[vinegar]';

+醴>'[sweet wine]';

+醵>'[contribute for drinks]';

+醸>'[brew]';

+醺>'[get drunk]';

+釀>'[brew]';

+釁>'[smear with blood in sacrifice]';

+釆>'[distinguish]';

+采>'[collect]';

+釈>'[interprete]';

+釉>'[glaze]';

+釋>'[interprete]';

+里>'[unit of distance]';

+重>'[heavy]';

+野>'[open country]';

+量>'[measure]';

+釐>'[manage]';

+金>'[gold]';

+釖>'[knife]';

+釘>'[nail]';

+#"釛>'[................................]'",

+釜>'[cauldron]';

+針>'[needle]';

+#"釟>'[................................]'",

+釡>'[cauldron]';

+釣>'[fish]';

+釦>'[button]';

+釧>'[bracelet]';

+釵>'[ornamental hairpin]';

+#"釶>'[................................]'",

+釼>'[sword]';

+#"釿>'[................................]'",

+鈍>'[blunt]';

+鈎>'[hook]';

+鈑>'[plate]';

+鈔>'[paper money]';

+鈕>'[button]';

+鈞>'[unit of measure equivalent thirt]';

+鈩>'[fireplace]';

+鈬>'[bell]';

+鈴>'[bell]';

+鈷>'[cobalt]';

+鈿>'[hairpin]';

+鉄>'[iron]';

+鉅>'[steel]';

+鉈>'[thallium]';

+鉉>'[device for carrying a tripod]';

+鉋>'[carpenter''s plane]';

+#"鉐>'[................................]'",

+鉗>'[pincers]';

+鉚>'[rivet]';

+鉛>'[lead plumbum]';

+鉞>'[broad-axe]';

+鉢>'[earthenware basin]';

+鉤>'[hook]';

+鉦>'[kind of gong used in ancient tim]';

+鉱>'[mine]';

+鉾>'[spear]';

+銀>'[silver]';

+銃>'[ancient weapon]';

+銅>'[copper]';

+銑>'[mill]';

+銓>'[weigh]';

+銕>'[iron]';

+銖>'[unit of weight]';

+銘>'[inscribe]';

+銚>'[large hoe]';

+銛>'[sharp]';

+銜>'[bit]';

+銭>'[money]';

+銷>'[melt]';

+銹>'[rust]';

+鋏>'[tongs]';

+鋒>'[point of spear]';

+鋤>'[hoe]';

+鋩>'[point of sword]';

+鋪>'[spread out]';

+鋭>'[sharp]';

+鋲>'[rivet]';

+鋳>'[melt]';

+鋸>'[a saw]';

+#"鋺>'[................................]'",

+鋼>'[steel]';

+錆>'[the color of a mineral]';

+錏>'[soft steel]';

+錐>'[gimlet]';

+錘>'[balance weight on scale]';

+錙>'[8 oz]';

+錚>'[clanging sound]';

+錠>'[spindle]';

+錢>'[money]';

+#"錣>'[................................]'",

+錦>'[brocade]';

+錨>'[anchor]';

+錫>'[tin]';

+錬>'[smelt metals]';

+錮>'[run metal into cracks]';

+錯>'[error]';

+録>'[copy]';

+#"錵>'[................................]'",

+#"錺>'[................................]'",

+#"錻>'[................................]'",

+#"鍄>'[................................]'",

+鍋>'[cooking-pot]';

+鍍>'[plate]';

+鍔>'[high]';

+#"鍖>'[................................]'",

+鍛>'[forge metal]';

+#"鍜>'[................................]'",

+鍠>'[weapon]';

+鍬>'[shovel]';

+鍮>'[brass]';

+鍵>'[door bolt]';

+鍼>'[needle]';

+鍾>'[cup]';

+鎌>'[sickle]';

+鎔>'[fuse]';

+鎖>'[lock]';

+鎗>'[rifle]';

+鎚>'[hammer]';

+鎧>'[armor]';

+鎬>'[stove]';

+鎭>'[town]';

+鎮>'[town]';

+鎰>'[measure of weight for gold]';

+#"鎹>'[................................]'",

+鏃>'[arrowhead]';

+鏈>'[chain]';

+鏐>'[pure gold]';

+鏑>'[dysprosium the barb of an arrow]';

+鏖>'[fight end]';

+鏗>'[strike]';

+鏘>'[tinkle]';

+鏝>'[trowel]';

+鏡>'[mirror]';

+鏤>'[carve]';

+鏥>'[rust]';

+鏨>'[engraving tool]';

+鐃>'[cymbals]';

+鐇>'[vanadium]';

+鐐>'[fetters]';

+鐓>'[ferrule]';

+鐔>'[dagger]';

+鐘>'[clock]';

+鐙>'[lamp]';

+鐚>'[soft steel]';

+鐡>'[iron]';

+鐫>'[engraving tool]';

+鐵>'[iron]';

+鐶>'[metal ring]';

+鐸>'[bell]';

+鐺>'[frying pan]';

+#"鑁>'[................................]'",

+鑄>'[melt]';

+鑑>'[mirror]';

+鑒>'[mirror]';

+鑓>'[spear]';

+鑚>'[drill]';

+鑛>'[mine]';

+鑞>'[solder]';

+鑠>'[melt]';

+鑢>'[file]';

+鑪>'[fireplace]';

+鑰>'[key]';

+鑵>'[jar]';

+鑷>'[tweezers]';

+鑼>'[gong]';

+鑽>'[drill]';

+鑾>'[bells hung on horse]';

+鑿>'[chisel]';

+钁>'[a mattock]';

+長>'[long]';

+門>'[gate]';

+閂>'[bolt]';

+閃>'[flash]';

+閇>'[shut]';

+閉>'[shut]';

+#"閉>'[shut]'",

+開>'[open]';

+閏>'[intercalary]';

+閑>'[fence]';

+間>'[interval]';

+閔>'[mourn]';

+#"閔>'[mourn]'",

+閘>'[sluice]';

+閙>'[quarrel]';

+閠>'[intercalary]';

+関>'[frontier pass]';

+閣>'[chamber]';

+閤>'[small side door]';

+閥>'[powerful and influential group]';

+閧>'[boisterous]';

+閨>'[small entrance]';

+閭>'[village of twenty-five families]';

+閲>'[examine]';

+閹>'[castrate]';

+閻>'[village gate]';

+閼>'[block]';

+閾>'[threshold]';

+闃>'[alone]';

+闇>'[close]';

+闊>'[broad]';

+闌>'[door screen]';

+闍>'[tower over city gate]';

+闔>'[close]';

+闕>'[watch tower]';

+闖>'[rush in]';

+闘>'[struggle]';

+關>'[frontier pass]';

+闡>'[explain]';

+闢>'[open]';

+闥>'[door]';

+阜>'[mound]';

+阡>'[footpaths between fields]';

+阨>'[in distress]';

+阪>'[hillside farmland]';

+阮>'[ancient musical instrument: surname]';

+阯>'[foundation]';

+防>'[defend]';

+阻>'[impede]';

+阿>'[prefix to name]';

+陀>'[steep bank]';

+陂>'[dam]';

+附>'[adhere to]';

+陋>'[narrow]';

+陌>'[foot path between rice fields]';

+降>'[descend]';

+#"降>'[descend]'",

+限>'[boundary]';

+陛>'[steps leading throne]';

+陜>'[narrow]';

+陝>'[mountain pass]';

+陞>'[promote]';

+陟>'[climb]';

+院>'[courtyard]';

+陣>'[column]';

+除>'[eliminate]';

+陥>'[submerge]';

+#"陥>'[submerge]'",

+陪>'[accompany]';

+陬>'[corner]';

+陰>'[\"female\" principle]';

+陲>'[frontier]';

+陳>'[exhibit]';

+陵>'[hill]';

+陶>'[pottery]';

+陷>'[submerge]';

+陸>'[land]';

+険>'[narrow pass]';

+陽>'[\"male\" principle]';

+隅>'[corner]';

+隆>'[prosperous]';

+隈>'[cove]';

+隊>'[team]';

+隋>'[Sui dynasty]';

+隍>'[dry ditch]';

+階>'[stairs]';

+随>'[follow]';

+隔>'[separate]';

+隕>'[fall]';

+隗>'[high]';

+隘>'[narrow]';

+隙>'[crack]';

+際>'[border]';

+障>'[separate]';

+#"障>'[separate]'",

+隣>'[neighbor]';

+隧>'[tunnel]';

+隨>'[follow]';

+險>'[narrow pass]';

+隰>'[low]';

+隱>'[hide]';

+隲>'[stallion]';

+隴>'[mountain located between shaanxi]';

+隶>'[subservient]';

+隷>'[be subservient to]';

+隸>'[be subservient to]';

+隹>'[bird]';

+隻>'[single]';

+隼>'[aquiline (nose)]';

+雀>'[sparrow]';

+雁>'[wild goose]';

+雄>'[male of species]';

+雅>'[elegant]';

+集>'[assemble]';

+雇>'[employ]';

+雉>'[pheasant]';

+雋>'[superior]';

+雌>'[female]';

+雍>'[harmony]';

+雎>'[osprey]';

+雑>'[mixed]';

+雕>'[engrave]';

+雖>'[although]';

+雙>'[set of two]';

+雛>'[chick]';

+雜>'[mixed]';

+離>'[leave]';

+難>'[difficult]';

+雨>'[rain]';

+雪>'[snow]';

+#"雫>'[................................]'",

+雰>'[atmosphere]';

+雲>'[clouds]';

+零>'[zero]';

+雷>'[thunder]';

+雹>'[hail]';

+電>'[electricity]';

+需>'[need]';

+霄>'[sky]';

+霆>'[a sudden peal of thunder]';

+震>'[shake]';

+霈>'[torrential rains]';

+霊>'[spirit]';

+霍>'[quickly]';

+霎>'[light rain]';

+霏>'[falling of snow and rain]';

+霑>'[be moistened]';

+霓>'[rainbow]';

+霖>'[long spell of rain]';

+霙>'[sleet]';

+霜>'[frost]';

+霞>'[rosy clouds]';

+霤>'[drip]';

+霧>'[fog]';

+霪>'[long and heavy rain]';

+霰>'[hail]';

+露>'[dew]';

+霸>'[rule by might rather than right]';

+霹>'[thunder]';

+霽>'[clear up after rain cease be ang]';

+霾>'[misty]';

+靂>'[thunderclap]';

+靄>'[cloudy sky]';

+靆>'[cloudy sky]';

+靈>'[spirit]';

+靉>'[cloudy sky]';

+青>'[blue]';

+靖>'[pacify]';

+静>'[quiet]';

+靜>'[quiet]';

+非>'[not]';

+靠>'[lean on]';

+靡>'[divide]';

+面>'[face]';

+#"靤>'[................................]'",

+靦>'[timid]';

+靨>'[dimples]';

+革>'[leather]';

+靫>'[strong and pliable]';

+靭>'[strong and pliable]';

+靱>'[strong and pliable]';

+靴>'[boots]';

+#"靹>'[................................]'",

+靺>'[stocking]';

+靼>'[tartars]';

+#"鞁>'[................................]'",

+鞄>'[to work hides]';

+鞅>'[leather strap over horse''s neck]';

+#"鞅>'[leather strap over horse''s neck]'",

+鞋>'[shoes]';

+鞍>'[saddle]';

+鞏>'[bind]';

+#"鞏>'[bind]'",

+鞘>'[scabbard]';

+#"鞜>'[................................]'",

+鞠>'[bow]';

+鞣>'[tan]';

+鞦>'[leather stap]';

+鞨>'[tribe]';

+鞫>'[interrogate]';

+鞭>'[whip]';

+#"鞳>'[................................]'",

+鞴>'[saddle up horse]';

+韃>'[tatars]';

+韆>'[swing]';

+韈>'[socks]';

+韋>'[tanned leather]';

+韓>'[fence]';

+韜>'[sheath]';

+韭>'[scallion]';

+韮>'[scallion]';

+韲>'[break or smash into pieces]';

+音>'[sound]';

+韵>'[rhyme]';

+韶>'[music of emperor Shun]';

+韻>'[rhyme]';

+響>'[make sound]';

+頁>'[page]';

+頂>'[top]';

+頃>'[moment]';

+項>'[neck]';

+順>'[obey]';

+須>'[must]';

+頌>'[laud]';

+頏>'[fly down or downward]';

+預>'[prepare]';

+頑>'[obstinate]';

+頒>'[confer]';

+頓>'[pause]';

+頗>'[lean one side]';

+領>'[neck]';

+頚>'[neck]';

+頡>'[fly upward]';

+頤>'[cheeks]';

+頬>'[cheeks]';

+頭>'[head]';

+頴>'[rice tassel]';

+頷>'[chin]';

+頸>'[neck]';

+頻>'[frequently]';

+頼>'[rely]';

+頽>'[ruined]';

+顆>'[grain]';

+顋>'[lower part of face]';

+題>'[forehead]';

+額>'[forehead]';

+顎>'[jaw]';

+顏>'[face]';

+顔>'[face]';

+顕>'[manifest]';

+願>'[desire]';

+顛>'[top]';

+類>'[class]';

+顧>'[look back]';

+顫>'[shiver]';

+顯>'[manifest]';

+顰>'[frown]';

+顱>'[skull]';

+顳>'[the temporal bone]';

+顴>'[cheek bones]';

+風>'[wind]';

+#"風>'[wind]'",

+颯>'[sound of wind]';

+颱>'[taiphoon]';

+颶>'[cyclone]';

+飃>'[whirlwind]';

+飄>'[whirlwind]';

+飆>'[whirlwind]';

+飛>'[fly]';

+飜>'[flip over]';

+食>'[eat]';

+飢>'[hunger]';

+飩>'[stuffed dumplings]';

+飫>'[surfeited]';

+飭>'[order]';

+飮>'[drink]';

+飯>'[cooked rice]';

+飲>'[drink]';

+飴>'[sweet-meats]';

+飼>'[raise animals]';

+飽>'[eat heartily]';

+飾>'[decorate]';

+餃>'[stuffed dumplings]';

+餅>'[rice-cakes]';

+餉>'[rations and pay for soldiers]';

+養>'[raise]';

+餌>'[bait]';

+餐>'[eat]';

+餒>'[hungry]';

+餓>'[be hungry]';

+餔>'[eat]';

+餘>'[surplus]';

+#"餝>'[................................]'",

+餞>'[farewell party]';

+餠>'[rice-cakes]';

+餡>'[pastry filling]';

+餤>'[incite]';

+館>'[public building]';

+餬>'[porridge]';

+餮>'[a legendary animal]';

+餽>'[make present of food]';

+餾>'[distill]';

+#"饁>'[carry meal to workers in field]'",

+饅>'[steamed bread]';

+饉>'[time of famine or crop failure]';

+饋>'[offer food superior]';

+饌>'[feed]';

+饐>'[spoiled]';

+饑>'[starve]';

+饒>'[bountiful]';

+饕>'[gluttonous]';

+饗>'[host banquet]';

+首>'[head]';

+馗>'[cheekbone]';

+馘>'[cut off left ear]';

+香>'[fragrant]';

+馥>'[fragrance]';

+馨>'[fragrant]';

+馬>'[horse]';

+馭>'[drive]';

+馮>'[surname]';

+馳>'[go quickly or swiftly]';

+馴>'[tame]';

+#"馼>'[................................]'",

+駁>'[varicolored]';

+#"駃>'[gallop]'",

+駅>'[relay station]';

+駆>'[spur horse on]';

+駈>'[spur horse on]';

+駐>'[to be stationed at]';

+駑>'[tired]';

+駒>'[colt]';

+駕>'[drive]';

+駘>'[tired]';

+駛>'[sail]';

+駝>'[camel]';

+駟>'[team of four horses]';

+駢>'[team of horses]';

+駭>'[terrify]';

+駮>'[a kind of fierce animal]';

+駱>'[white horse w. black mane]';

+#"駱>'[white horse w. black mane]'",

+駸>'[galloping]';

+#"駻>'[................................]'",

+駿>'[excellent horse]';

+騁>'[gallop horse]';

+騅>'[piebald horse]';

+騎>'[ride horseback]';

+騏>'[piebald horse]';

+騒>'[harass]';

+験>'[test]';

+騙>'[swindle]';

+騨>'[dappled]';

+騫>'[raise]';

+騰>'[fly]';

+騷>'[harass]';

+騾>'[mule]';

+驀>'[suddenly]';

+驂>'[two outside ones in three horse]';

+驃>'[charger]';

+驅>'[spur horse on]';

+驍>'[excellent horse]';

+驕>'[spirited horse]';

+驗>'[test]';

+驚>'[frighten]';

+驛>'[relay station]';

+驟>'[procedure]';

+驢>'[donkey]';

+驤>'[gallop about with head uplifted]';

+驥>'[thoroughbred horse]';

+驩>'[happy]';

+驪>'[pure black horse]';

+驫>'[horses]';

+骨>'[bone]';

+骭>'[shin bone]';

+骰>'[die]';

+骸>'[skelton]';

+骼>'[bone]';

+髀>'[buttocks]';

+髄>'[bone marrow]';

+髏>'[skull]';

+髑>'[skull]';

+髓>'[bone marrow]';

+體>'[body]';

+高>'[high]';

+髞>'[high]';

+髟>'[hair]';

+髢>'[wig]';

+髣>'[similar to]';

+髦>'[flowing hair of young child]';

+髪>'[hair]';

+髫>'[children''s hair style]';

+髭>'[mustache]';

+髮>'[hair]';

+髯>'[beard]';

+#"髱>'[................................]'",

+髴>'[disheveled hair]';

+#"髷>'[................................]'",

+髻>'[hair rolled up in a bun]';

+鬆>'[lax]';

+鬘>'[beautiful hair]';

+鬚>'[beard]';

+鬟>'[dress hair in coiled knot]';

+鬢>'[hair on temples]';

+鬣>'[horse''s mane]';

+鬥>'[struggle]';

+鬧>'[quarrel]';

+鬨>'[boisterous]';

+鬩>'[feud]';

+鬪>'[struggle]';

+鬮>'[lots (to be drawn)]';

+鬯>'[sacrificial wine]';

+鬱>'[luxuriant]';

+鬲>'[type of caldron]';

+鬻>'[sell]';

+鬼>'[ghost]';

+魁>'[chief]';

+魂>'[soul]';

+魃>'[drought demon]';

+魄>'[vigor]';

+魅>'[kind of forest demon]';

+魍>'[demons]';

+魎>'[a kind of monster]';

+魏>'[kingdom of wei]';

+魑>'[a montain demon resembling tiger]';

+魔>'[demon]';

+魘>'[nightmare]';

+魚>'[fish]';

+魯>'[foolish]';

+魴>'[bream]';

+#"鮁>'[the bonito]'",

+鮎>'[sheatfish]';

+鮑>'[abalone]';

+鮒>'[carp]';

+鮓>'[minced and salted fish]';

+#"鮓>'[minced and salted fish]'",

+#"鮓>'[minced and salted fish]'",

+鮟>'[anglerfish]';

+鮠>'[a kind of shad with a head like a sturgeon]';

+#"鮨>'[................................]'",

+鮪>'[kind of sturgeon]';

+鮫>'[shark]';

+鮭>'[salmon]';

+鮮>'[fresh]';

+#"鮴>'[................................]'",

+#"鮹>'[................................]'",

+鯀>'[giant fish]';

+鯆>'[the skate or ray]';

+鯉>'[carp]';

+鯊>'[shark]';

+鯏>'[a dialect........ name of fish]';

+#"鯑>'[................................]'",

+#"鯒>'[................................]'",

+鯔>'[mullet]';

+鯖>'[mackerel]';

+鯛>'[pagrosomus major]';

+鯡>'[herring]';

+鯢>'[cryptobranchus japonicus]';

+#"鯣>'[................................]'",

+鯤>'[spawn]';

+鯨>'[whale]';

+鯰>'[sheat]';

+#"鯱>'[................................]'",

+#"鯱>'[................................]'",

+#"鯱>'[................................]'",

+#"鰄>'[................................]'",

+#"鰆>'[................................]'",

+鰈>'[flatfish]';

+鰉>'[sturgeon]';

+#"鰊>'[................................]'",

+鰌>'[loach]';

+鰍>'[loach]';

+鰐>'[alligator]';

+鰒>'[abalone]';

+鰓>'[fish gills]';

+#"鰔>'[................................]'",

+鰕>'[shrimp]';

+鰛>'[sardine]';

+#"鰡>'[................................]'",

+#"鰤>'[................................]'",

+鰥>'[huge fish]';

+鰭>'[fin]';

+鰮>'[sardine]';

+#"鰯>'[................................]'",

+#"鰯>'[................................]'",

+鰲>'[huge sea turtle]';

+鰹>'[skipjack]';

+#"鰺>'[................................]'",

+鰻>'[eel]';

+鰾>'[swimming bladder of fish]';

+#"鱆>'[................................]'",

+鱇>'[anglerfish]';

+鱈>'[codfish]';

+鱒>'[barbel]';

+鱗>'[fish scales]';

+#"鱘>'[sturgeon]'",

+鱠>'[minced fish]';

+鱧>'[snakehead]';

+#"鱶>'[................................]'",

+鱸>'[sea perch]';

+鳥>'[bird]';

+鳧>'[wild duck]';

+鳩>'[pigeon]';

+鳫>'[wild goose]';

+鳬>'[wild duck]';

+#"鳰>'[................................]'",

+鳳>'[male phoenix]';

+鳴>'[cry of bird or animal]';

+鳶>'[kite]';

+鴃>'[shrike]';

+鴆>'[bird resembling secretary falcon]';

+鴇>'[bustard]';

+鴈>'[wild goose]';

+鴉>'[crow]';

+鴎>'[seagull]';

+鴒>'[species of lark]';

+鴕>'[ostrich]';

+鴛>'[male mandarin duck]';

+鴟>'[kite]';

+鴣>'[species of taiwan pigeon]';

+鴦>'[female mandarin duck]';

+鴨>'[duck]';

+鴪>'[swoop]';

+鴫>'[a snipe]';

+鴬>'[oriole]';

+鴻>'[species of wild swan]';

+#"鴾>'[................................]'",

+鴿>'[pigeon]';

+#"鵁>'[................................]'",

+鵄>'[kite]';

+#"鵄>'[kite]'",

+#"鵄>'[kite]'",

+#"鵐>'[................................]'",

+鵑>'[cuckoo]';

+鵙>'[a shrike]';

+鵜>'[pelican]';

+鵝>'[goose]';

+鵞>'[goose]';

+鵠>'[target]';

+鵡>'[species of parrot]';

+#"鵡>'[species of parrot]'",

+鵬>'[fabulous bird of enormous size]';

+鵯>'[bird]';

+鵲>'[magpie]';

+#"鵺>'[................................]'",

+鶇>'[thrush]';

+鶉>'[quail]';

+鶏>'[chicken]';

+鶚>'[osprey]';

+#"鶤>'[................................]'",

+鶩>'[duck]';

+鶫>'[thrush]';

+鶯>'[oriole]';

+#"鶱>'[soar]'",

+鶴>'[crane]';

+鶸>'[[not found in any dictionary]]';

+鶺>'[wagtail]';

+鶻>'[a kind of pigeon]';

+鷁>'[fishhawk bow or prow]';

+鷂>'[sparrow hawk]';

+鷄>'[chicken]';

+鷆>'[bird name]';

+鷏>'[bird name]';

+鷓>'[partridge]';

+鷙>'[hawk]';

+鷦>'[wren]';

+#"鷫>'[turquoise kingfisher]'",

+鷯>'[wren]';

+鷲>'[condor]';

+鷸>'[snipe]';

+鷹>'[eagle]';

+鷺>'[heron]';

+鷽>'[oriental bullfinch]';

+鸚>'[species of parrot]';

+鸛>'[crane]';

+鸞>'[fabulous bird]';

+鹵>'[saline soil]';

+鹸>'[alkaline]';

+鹹>'[salty]';

+鹽>'[salt]';

+鹿>'[deer]';

+麁>'[rough]';

+麈>'[species of deer]';

+麋>'[elk]';

+麌>'[stag]';

+麑>'[fawn]';

+麒>'[legendary auspicious animal]';

+麓>'[foot of hill]';

+麕>'[muntjac deer]';

+麗>'[beautiful]';

+麝>'[musk deer]';

+麟>'[female of chinese unicorn]';

+麥>'[wheat]';

+麦>'[wheat]';

+麩>'[bran]';

+麪>'[flour]';

+#"麫>'[flour]'",

+麸>'[bran]';

+麹>'[yeast]';

+麺>'[flour]';

+麻>'[hemp]';

+麼>'[interrogative final particle]';

+麾>'[pennant]';

+麿>'[I]';

+黄>'[yellow]';

+黌>'[school]';

+黍>'[glutinous millet]';

+黎>'[surname]';

+黏>'[stick to]';

+黐>'[stick]';

+黒>'[black]';

+黔>'[black]';

+默>'[silent]';

+黙>'[silent]';

+黛>'[blacken eyebrows]';

+黜>'[dismiss]';

+黝>'[black]';

+點>'[dot]';

+黠>'[sly]';

+黥>'[tattooing face]';

+黨>'[political party]';

+黯>'[dark]';

+黴>'[mold]';

+黶>'[mole]';

+黷>'[dishonor]';

+黹>'[embroidery]';

+黻>'[special pattern of embroidery]';

+黼>'[embroidered official or sacrific]';

+黽>'[to strive]';

+鼇>'[huge sea turtle]';

+鼈>'[fresh water turtle]';

+鼎>'[large]';

+鼓>'[drum]';

+鼕>'[rattle of drums]';

+鼠>'[rat]';

+鼡>'[rat]';

+鼬>'[weasel]';

+鼻>'[nose]';

+鼾>'[snore loudly]';

+齊>'[even]';

+齋>'[vegetarian diet]';

+齎>'[take in both hands and offer to]';

+齏>'[break or smash into pieces]';

+齒>'[teeth]';

+齔>'[lose baby teeth and get adult te]';

+齟>'[irregular teeth]';

+齠>'[lose baby teeth and get adult teeth]';

+齡>'[age]';

+齢>'[age]';

+齣>'[act]';

+齦>'[gums]';

+齧>'[bite]';

+齪>'[narrow]';

+齬>'[uneven teeth]';

+齲>'[tooth decay]';

+齶>'[palate]';

+齷>'[narrow]';

+龍>'[dragon]';

+龕>'[niche]';

+龜>'[turtle or tortoise]';

+龝>'[autumn]';

+龠>'[flute]';

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Kanji_OnRomaji.utf8.txt b/src/com/ibm/text/resources/Transliterator_Kanji_OnRomaji.utf8.txt
new file mode 100755
index 0000000..5eff26c
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Kanji_OnRomaji.utf8.txt
@@ -0,0 +1,6216 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:42:03 2001

+#--------------------------------------------------------------------

+

+# Kanji-OnRomaji

+

+丁>Tei;

+七>Shichi;

+万>Man;

+丈>Jou;

+三>San;

+上>Jou;

+下>Ka;

+不>Fu;

+与>Yo;

+丐>Kai;

+丑>Chuu;

+且>Sha;

+丕>Hi;

+世>Se;

+丗>Sei;

+丘>Kyuu;

+丙>Hei;

+丞>Shou;

+両>Ryou;

+並>Hei;

+个>Ka;

+中>Chuu;

+丱>Kan;

+串>Sen;

+丶>Chu;

+丸>Gan;

+丹>Tan;

+主>Shu;

+丼>Sei;

+丿>Hetsu;

+乂>Gai;

+乃>Dai;

+久>Kyuu;

+之>Shi;

+乍>Saku;

+乎>Ko;

+乏>Bou;

+乕>Ko;

+乖>Kai;

+乗>Jou;

+乘>Jou;

+乙>Otsu;

+九>Kyuu;

+乞>Kotsu;

+也>Ya;

+乢>Gai;

+乱>Ran;

+乳>Nyuu;

+乾>Kan;

+亀>Ki;

+亂>Ran;

+亅>Ketsu;

+了>Ryou;

+予>Yo;

+争>Sou;

+亊>Ji;

+事>Ji;

+二>Ni;

+于>U;

+云>Un;

+互>Go;

+五>Go;

+井>Sei;

+亘>Sen;

+亙>Kou;

+些>Sa;

+亜>A;

+亞>A;

+亟>Kyoku;

+亠>Tou;

+亡>Bou;

+亢>Kou;

+交>Kou;

+亥>Gai;

+亦>Eki;

+亨>Kyou;

+享>Kyou;

+京>Kyou;

+亭>Tei;

+亮>Ryou;

+亰>Kei;

+亳>Haku;

+亶>Tan;

+人>Jin;

+什>Shuu;

+仁>Jin;

+仂>Roku;

+仄>Soku;

+仆>Fu;

+仇>Kyuu;

+今>Kon;

+介>Kai;

+仍>Jou;

+从>Juu;

+仏>Butsu;

+仔>Shi;

+仕>Shi;

+他>Ta;

+仗>Jou;

+付>Fu;

+仙>Sen;

+仝>Dou;

+仞>Jin;

+仟>Sen;

+代>Dai;

+令>Rei;

+以>I;

+仭>Jin;

+仮>Ka;

+仰>Gyou;

+仲>Chuu;

+件>Ken;

+价>Kai;

+任>Nin;

+企>Ki;

+伉>Kou;

+伊>I;

+伍>Go;

+伎>Ki;

+伏>Fuku;

+伐>Batsu;

+休>Kyuu;

+会>Kai;

+伜>Sai;

+伝>Den;

+伯>Haku;

+估>Ko;

+伴>Han;

+伶>Rei;

+伸>Shin;

+伺>Shi;

+似>Ji;

+伽>Kya;

+佃>Ten;

+但>Tan;

+佇>Cho;

+位>I;

+低>Tei;

+住>Juu;

+佐>Sa;

+佑>Yuu;

+体>Tei;

+何>Ka;

+佗>Ta;

+余>Yo;

+佚>Itsu;

+佛>Butsu;

+作>Saku;

+佝>Kou;

+佞>Nei;

+佩>Hai;

+佯>You;

+佰>Haku;

+佳>Ka;

+併>Hei;

+佶>Kitsu;

+佻>Chou;

+佼>Kou;

+使>Shi;

+侃>Kan;

+來>Rai;

+侈>Shi;

+例>Rei;

+侍>Ji;

+侏>Shu;

+侑>Yuu;

+侖>Ron;

+侘>Ta;

+供>Kyou;

+依>I;

+侠>Kyou;

+価>Ka;

+侫>Nei;

+侭>Jin;

+侮>Bu;

+侯>Kou;

+侵>Shin;

+侶>Ryo;

+便>Ben;

+係>Kei;

+促>Soku;

+俄>Ga;

+俊>Shun;

+俎>Sho;

+俐>Ri;

+俑>You;

+俔>Ken;

+俗>Zoku;

+俘>Fu;

+俚>Ri;

+俛>Ben;

+保>Ho;

+俟>Shi;

+信>Shin;

+修>Shuu;

+俯>Fu;

+俳>Hai;

+俵>Hyou;

+俶>Shuku;

+俸>Hou;

+俺>En;

+俾>Hi;

+倅>Sai;

+倆>Ryou;

+倉>Sou;

+個>Ko;

+倍>Bai;

+倏>Shuku;

+們>Mon;

+倒>Tou;

+倔>Kutsu;

+倖>Kou;

+候>Kou;

+倚>I;

+借>Shaku;

+倡>Shou;

+倣>Hou;

+値>Chi;

+倥>Kou;

+倦>Ken;

+倨>Kyo;

+倩>Sen;

+倪>Gei;

+倫>Rin;

+倬>Taku;

+倭>I;

+倶>Ku;

+倹>Ken;

+偃>En;

+假>Ka;

+偈>Ketsu;

+偉>I;

+偏>Hen;

+偐>Gan;

+偕>Kai;

+偖>Sha;

+做>Saku;

+停>Tei;

+健>Ken;

+偬>Sou;

+偲>Shi;

+側>Soku;

+偵>Tei;

+偶>Guu;

+偸>Chuu;

+偽>Gi;

+傀>Kai;

+傅>Fu;

+傍>Bou;

+傑>Ketsu;

+傘>San;

+備>Bi;

+傚>Kou;

+催>Sai;

+傭>You;

+傲>Gou;

+傳>Den;

+傴>U;

+債>Sai;

+傷>Shou;

+傾>Kei;

+僂>Rou;

+僅>Kin;

+僉>Sen;

+僊>Sen;

+働>Dou;

+像>Zou;

+僑>Kyou;

+僕>Boku;

+僖>Ki;

+僚>Ryou;

+僞>Gi;

+僣>Sen;

+僥>Kyou;

+僧>Sou;

+僭>Sen;

+僮>Dou;

+僵>Kyou;

+價>Ka;

+僻>Heki;

+儀>Gi;

+儁>Shun;

+儂>Dou;

+億>Oku;

+儉>Ken;

+儒>Ju;

+儔>Chuu;

+儕>Sei;

+儖>Ran;

+儘>Jin;

+儚>Bou;

+償>Shou;

+儡>Rai;

+優>Yuu;

+儲>Cho;

+儷>Rei;

+儺>Da;

+儻>Tou;

+儼>Gen;

+儿>Jin;

+兀>Kotsu;

+允>In;

+元>Gen;

+兄>Kei;

+充>Juu;

+兆>Chou;

+兇>Kyou;

+先>Sen;

+光>Kou;

+克>Koku;

+兌>Da;

+免>Men;

+兎>To;

+児>Ji;

+兒>Ji;

+兔>To;

+党>Tou;

+兜>Tou;

+兢>Kyou;

+入>Nyuu;

+全>Zen;

+兩>Ryou;

+兪>Yu;

+八>Hachi;

+公>Kou;

+六>Roku;

+兮>Kei;

+共>Kyou;

+兵>Hei;

+其>Ki;

+具>Gu;

+典>Ten;

+兼>Ken;

+冀>Ki;

+冂>Kei;

+内>Dai;

+円>En;

+冉>Nen;

+冊>Satsu;

+册>Satsu;

+再>Sai;

+冏>Kei;

+冐>Bou;

+冑>Chuu;

+冒>Bou;

+冓>Kou;

+冕>Ben;

+冖>Beki;

+冗>Jou;

+写>Sha;

+冠>Kan;

+冢>Chou;

+冤>En;

+冥>Mei;

+冦>Kou;

+冨>Fu;

+冩>Sha;

+冪>Beki;

+冫>Hyou;

+冬>Tou;

+冰>Hyou;

+冱>Go;

+冲>Chuu;

+决>Ketsu;

+冴>Go;

+况>Kyou;

+冶>Ya;

+冷>Rei;

+冽>Retsu;

+凄>Sei;

+凅>Ko;

+准>Jun;

+凉>Ryou;

+凋>Chou;

+凌>Ryou;

+凍>Tou;

+凖>Jun;

+凛>Rin;

+凜>Rin;

+凝>Gyou;

+几>Ki;

+凡>Bon;

+処>Sho;

+凭>Hyou;

+凰>Kou;

+凱>Gai;

+凵>Kan;

+凶>Kyou;

+凸>Totsu;

+凹>Ou;

+出>Shutsu;

+函>Kan;

+凾>Kan;

+刀>Tou;

+刃>Jin;

+刄>Jin;

+分>Bun;

+切>Setsu;

+刈>Gai;

+刊>Kan;

+刋>Sen;

+刎>Fun;

+刑>Kei;

+刔>Ketsu;

+列>Retsu;

+初>Sho;

+判>Han;

+別>Betsu;

+刧>Gou;

+利>Ri;

+刪>San;

+刮>Katsu;

+到>Tou;

+刳>Ko;

+制>Sei;

+刷>Satsu;

+券>Ken;

+刹>Satsu;

+刺>Shi;

+刻>Koku;

+剃>Tei;

+剄>Kei;

+則>Soku;

+削>Saku;

+剋>Koku;

+剌>Ratsu;

+前>Zen;

+剏>Sou;

+剔>Teki;

+剖>Bou;

+剛>Gou;

+剞>Ki;

+剣>Ken;

+剤>Zai;

+剥>Haku;

+剩>Jou;

+剪>Sen;

+副>Fuku;

+剰>Jou;

+剱>Ken;

+割>Katsu;

+剳>Tou;

+剴>Gai;

+創>Sou;

+剽>Hyou;

+剿>Shou;

+劃>Kaku;

+劇>Geki;

+劈>Heki;

+劉>Ru;

+劍>Ken;

+劑>Zai;

+劒>Ken;

+劔>Ken;

+力>Ryoku;

+功>Kou;

+加>Ka;

+劣>Retsu;

+助>Jo;

+努>Do;

+劫>Gou;

+劬>Ku;

+劭>Shou;

+励>Rei;

+労>Rou;

+劵>Ken;

+効>Kou;

+劼>Katsu;

+劾>Gai;

+勁>Kei;

+勃>Botsu;

+勅>Choku;

+勇>Yuu;

+勉>Ben;

+勍>Kei;

+勒>Roku;

+動>Dou;

+勗>Bou;

+勘>Kan;

+務>Mu;

+勝>Shou;

+勞>Rou;

+募>Bo;

+勠>Riku;

+勢>Sei;

+勣>Seki;

+勤>Kin;

+勦>Sou;

+勧>Kan;

+勲>Kun;

+勳>Kun;

+勵>Rei;

+勸>Kan;

+勹>Hou;

+勺>Shaku;

+勾>Kou;

+勿>Butsu;

+包>Hou;

+匆>Sou;

+匈>Kyou;

+匍>Ho;

+匏>Hou;

+匐>Hoku;

+匕>Hi;

+化>Ka;

+北>Hoku;

+匙>Shi;

+匚>Hou;

+匝>Sou;

+匠>Shou;

+匡>Kyou;

+匣>Kou;

+匪>Hi;

+匯>Wai;

+匱>Ki;

+匳>Ren;

+匸>Kei;

+匹>Hitsu;

+区>Ku;

+医>I;

+匿>Toku;

+區>Ku;

+十>Juu;

+千>Sen;

+卅>Sou;

+卆>Sotsu;

+升>Shou;

+午>Go;

+卉>Ki;

+半>Han;

+卍>Ban;

+卑>Hi;

+卒>Sotsu;

+卓>Taku;

+協>Kyou;

+南>Nan;

+単>Tan;

+博>Haku;

+卜>Boku;

+卞>Hen;

+占>Sen;

+卦>Ka;

+卩>Setsu;

+卮>Shi;

+卯>Bou;

+印>In;

+危>Ki;

+即>Soku;

+却>Kyaku;

+卵>Ran;

+卷>Kan;

+卸>Sha;

+卻>Kyaku;

+卿>Kyou;

+厂>Kan;

+厄>Yaku;

+厖>Bou;

+厘>Rin;

+厚>Kou;

+原>Gen;

+厠>Shi;

+厥>Ketsu;

+厦>Ka;

+厨>Zu;

+厩>Kyuu;

+厭>En;

+厮>Shi;

+厰>Shou;

+厳>Gen;

+厶>Shi;

+去>Kyo;

+参>San;

+參>San;

+又>Yuu;

+叉>Sha;

+及>Kyuu;

+友>Yuu;

+双>Sou;

+反>Han;

+収>Shuu;

+叔>Shuku;

+取>Shu;

+受>Ju;

+叙>Jo;

+叛>Han;

+叟>Sou;

+叡>Ei;

+叢>Sou;

+口>Kou;

+古>Ko;

+句>Ku;

+叨>Tou;

+叩>Kou;

+只>Shi;

+叫>Kyou;

+召>Shou;

+叭>Hatsu;

+叮>Tei;

+可>Ka;

+台>Dai;

+叱>Shitsu;

+史>Shi;

+右>U;

+叶>Kyou;

+号>Gou;

+司>Shi;

+吁>Ku;

+吃>Kitsu;

+各>Kaku;

+合>Gou;

+吉>Kichi;

+吊>Chou;

+吋>Sun;

+同>Dou;

+名>Mei;

+后>Kou;

+吏>Ri;

+吐>To;

+向>Kou;

+君>Kun;

+吝>Rin;

+吟>Gin;

+吠>Hai;

+否>Hi;

+吩>Fun;

+含>Gan;

+听>Kin;

+吭>Kou;

+吮>Sen;

+吶>Totsu;

+吸>Kyuu;

+吹>Sui;

+吻>Fun;

+吼>Kou;

+吽>In;

+吾>Go;

+呀>Ga;

+呂>Ryo;

+呆>Bou;

+呈>Tei;

+呉>Go;

+告>Koku;

+呎>Seki;

+呑>Don;

+呟>Gen;

+周>Shuu;

+呪>Ju;

+呰>Shi;

+呱>Ko;

+味>Mi;

+呵>Ka;

+呶>Do;

+呷>Kou;

+呻>Shin;

+呼>Ko;

+命>Mei;

+咀>So;

+咄>Totsu;

+咆>Hou;

+咋>Saku;

+和>Wa;

+咎>Kyuu;

+咏>Ei;

+咐>Ho;

+咒>Shu;

+咢>Gaku;

+咤>Ta;

+咥>Ki;

+咨>Shi;

+咫>Shi;

+咬>Kou;

+咯>Kaku;

+咲>Shou;

+咳>Gai;

+咸>Kan;

+咼>Ka;

+咽>In;

+咾>Rou;

+哀>Ai;

+品>Hin;

+哂>Shin;

+哄>Kou;

+哇>Ai;

+哈>Gou;

+哉>Sai;

+員>In;

+哢>Rou;

+哥>Ka;

+哦>Ga;

+哨>Shou;

+哩>Ri;

+哭>Koku;

+哮>Kou;

+哲>Tetsu;

+哺>Ho;

+哽>Kou;

+唄>Bai;

+唆>Sa;

+唇>Shin;

+唏>Ki;

+唐>Tou;

+唔>Go;

+唖>A;

+售>Shuu;

+唯>Yui;

+唱>Shou;

+唳>Rei;

+唸>Ten;

+唹>Yo;

+唾>Da;

+啀>Gai;

+啄>Taku;

+啅>Taku;

+商>Shou;

+啌>Kou;

+問>Mon;

+啓>Kei;

+啖>Tan;

+啗>Tan;

+啜>Setsu;

+啝>Ka;

+啣>Kan;

+啻>Shi;

+啼>Tei;

+啾>Shuu;

+喀>Kaku;

+喃>Nan;

+善>Zen;

+喇>Ratsu;

+喉>Kou;

+喊>Kan;

+喋>Chou;

+喘>Zen;

+喙>Kai;

+喚>Kan;

+喜>Ki;

+喝>Katsu;

+喞>Soku;

+喟>Ki;

+喧>Ken;

+喨>Ryou;

+喩>Yu;

+喪>Sou;

+喫>Kitsu;

+喬>Kyou;

+單>Tan;

+営>Ei;

+嗄>Sa;

+嗅>Kyuu;

+嗇>Shoku;

+嗔>Shin;

+嗚>O;

+嗜>Shi;

+嗟>Sa;

+嗣>Shi;

+嗤>Shi;

+嗷>Gou;

+嗹>Ren;

+嗽>Soku;

+嗾>Sou;

+嘆>Tan;

+嘉>Ka;

+嘔>Ou;

+嘖>Saku;

+嘗>Shou;

+嘘>Kyo;

+嘛>Ma;

+嘩>Ka;

+嘯>Shou;

+嘱>Shoku;

+嘲>Tou;

+嘴>Shi;

+嘶>Sei;

+嘸>Bu;

+噂>Son;

+噌>Sou;

+噎>Itsu;

+噐>Ki;

+噛>Gou;

+噤>Kin;

+器>Ki;

+噪>Sou;

+噫>I;

+噬>Zei;

+噴>Fun;

+噸>Ton;

+嚀>Dei;

+嚆>Kou;

+嚇>Kaku;

+嚊>Hi;

+嚏>Tei;

+嚔>Tei;

+嚠>Ryuu;

+嚢>Nou;

+嚥>En;

+嚮>Kou;

+嚴>Gen;

+嚶>Ou;

+嚼>Shaku;

+囀>Ten;

+囁>Shou;

+囂>Gou;

+囃>Sou;

+囈>Gei;

+囎>So;

+囑>Shoku;

+囓>Ketsu;

+囗>I;

+囘>Kai;

+囚>Shuu;

+四>Shi;

+回>Kai;

+因>In;

+団>Dan;

+囮>Ka;

+困>Kon;

+囲>I;

+図>To;

+囹>Rei;

+固>Ko;

+国>Koku;

+囿>Yuu;

+圀>Koku;

+圃>Ho;

+圄>Gyo;

+圈>Ken;

+圉>Gyo;

+國>Koku;

+圍>I;

+圏>Ken;

+園>En;

+圓>En;

+圖>To;

+團>Dan;

+圜>Kan;

+土>Do;

+圧>Atsu;

+在>Zai;

+圭>Kei;

+地>Chi;

+圻>Ki;

+址>Shi;

+坂>Han;

+均>Kin;

+坊>Bou;

+坎>Kan;

+坏>Hai;

+坐>Za;

+坑>Kou;

+坡>Ha;

+坤>Kon;

+坦>Tan;

+坩>Kan;

+坪>Hei;

+坿>Fu;

+垂>Sui;

+垈>Tai;

+垉>Hou;

+型>Kei;

+垓>Gai;

+垠>Gin;

+垢>Kou;

+垣>En;

+垤>Tetsu;

+埀>Sui;

+埃>Ai;

+埆>Kaku;

+埋>Mai;

+城>Jou;

+埒>Rachi;

+埓>Rachi;

+埔>Ho;

+埜>Sho;

+域>Iki;

+埠>Fu;

+埣>Sai;

+埴>Shoku;

+執>Shitsu;

+培>Bai;

+基>Ki;

+埼>Ki;

+堀>Kutsu;

+堂>Dou;

+堅>Ken;

+堆>Tai;

+堊>A;

+堋>Hou;

+堕>Da;

+堙>In;

+堝>Ka;

+堡>Hou;

+堤>Tei;

+堪>Kan;

+堯>Gyou;

+堰>En;

+報>Hou;

+場>Jou;

+堵>To;

+堺>Kai;

+堽>Kou;

+塁>Rui;

+塊>Kai;

+塋>Ei;

+塑>So;

+塒>Shi;

+塔>Tou;

+塗>To;

+塘>Tou;

+塙>Kaku;

+塚>Chou;

+塞>Soku;

+塢>O;

+塩>En;

+填>Ten;

+塲>Jou;

+塵>Jin;

+塹>Zan;

+塾>Juku;

+境>Kyou;

+墅>Sho;

+墓>Bo;

+増>Zou;

+墜>Tsui;

+墟>Kyo;

+墨>Boku;

+墫>Shun;

+墮>Da;

+墳>Fun;

+墸>Sho;

+墺>Ou;

+墻>Shou;

+墾>Kon;

+壁>Heki;

+壅>You;

+壇>Dan;

+壊>Kai;

+壌>Jou;

+壑>Gaku;

+壓>Atsu;

+壕>Gou;

+壘>Rui;

+壙>Kou;

+壜>Tan;

+壞>Kai;

+壟>Ryou;

+壤>Jou;

+壥>Ten;

+士>Shi;

+壬>Jin;

+壮>Sou;

+壯>Sou;

+声>Sei;

+壱>Ichi;

+売>Bai;

+壷>Ko;

+壹>Ichi;

+壺>Ko;

+壻>Sei;

+壼>Kon;

+壽>Ju;

+夂>Chi;

+変>Hen;

+夊>Sui;

+夏>Ka;

+夐>Kei;

+夕>Seki;

+外>Gai;

+夘>Bou;

+夙>Shuku;

+多>Ta;

+夛>Ta;

+夜>Ya;

+夢>Mu;

+夥>Ka;

+大>Tai;

+天>Ten;

+太>Ta;

+夫>Fu;

+夬>Ketsu;

+夭>You;

+央>Ou;

+失>Shitsu;

+夲>Tou;

+夷>I;

+夸>Ko;

+夾>Kou;

+奄>En;

+奇>Ki;

+奈>Na;

+奉>Hou;

+奎>Kei;

+奏>Sou;

+奐>Kan;

+契>Setsu;

+奔>Hon;

+奕>Eki;

+套>Tou;

+奘>Jou;

+奚>Kei;

+奠>Ten;

+奢>Sha;

+奥>Ou;

+奧>Ou;

+奨>Shou;

+奩>Ren;

+奪>Datsu;

+奬>Shou;

+奮>Fun;

+女>Jo;

+奴>Do;

+奸>Kan;

+好>Kou;

+妁>Shaku;

+如>Jo;

+妃>Hi;

+妄>Bou;

+妊>Nin;

+妍>Ken;

+妓>Ki;

+妖>You;

+妙>Myou;

+妛>Shi;

+妝>Sou;

+妣>Hi;

+妥>Da;

+妨>Bou;

+妬>To;

+妲>Datsu;

+妹>Mai;

+妻>Sai;

+妾>Shou;

+姆>Bo;

+姉>Shi;

+始>Shi;

+姐>So;

+姑>Ko;

+姓>Sei;

+委>I;

+姙>Nin;

+姚>You;

+姜>Kyou;

+姥>Bo;

+姦>Kan;

+姨>I;

+姪>Tetsu;

+姫>Ki;

+姶>Ou;

+姻>In;

+姿>Shi;

+威>I;

+娃>A;

+娉>Hei;

+娑>Sha;

+娘>Jou;

+娚>Nan;

+娜>Da;

+娟>Ken;

+娠>Shin;

+娥>Ga;

+娩>Ben;

+娯>Go;

+娵>Shu;

+娶>Shu;

+娼>Shou;

+婀>A;

+婁>Rou;

+婆>Ba;

+婉>En;

+婚>Kon;

+婢>Hi;

+婦>Fu;

+婪>Ran;

+婬>In;

+婿>Sei;

+媒>Bai;

+媚>Bi;

+媛>En;

+媼>Ou;

+媽>Bo;

+媾>Kou;

+嫁>Ka;

+嫂>Sou;

+嫉>Shitsu;

+嫋>Jou;

+嫌>Ken;

+嫐>Jou;

+嫖>Hyou;

+嫗>Ou;

+嫡>Chaku;

+嫣>En;

+嫦>Kou;

+嫩>Don;

+嫺>Kan;

+嫻>Kan;

+嬉>Ki;

+嬋>Sen;

+嬌>Kyou;

+嬖>Hei;

+嬢>Jou;

+嬪>Hin;

+嬬>Shu;

+嬰>Ei;

+嬲>Jou;

+嬾>Ran;

+孀>Sou;

+孃>Jou;

+孅>Sen;

+子>Shi;

+孑>Getsu;

+孔>Kou;

+孕>You;

+字>Ji;

+存>Son;

+孚>Fu;

+孛>Botsu;

+孜>Shi;

+孝>Kou;

+孟>Mou;

+季>Ki;

+孤>Ko;

+孥>Do;

+学>Gaku;

+孩>Kai;

+孫>Son;

+孰>Juku;

+孱>Sen;

+孳>Shi;

+孵>Fu;

+學>Gaku;

+孺>Ju;

+宀>Ben;

+它>Ta;

+宅>Taku;

+宇>U;

+守>Shu;

+安>An;

+宋>Sou;

+完>Kan;

+宍>Niku;

+宏>Kou;

+宕>Tou;

+宗>Shuu;

+官>Kan;

+宙>Chuu;

+定>Tei;

+宛>En;

+宜>Gi;

+宝>Hou;

+実>Jitsu;

+客>Kyaku;

+宣>Sen;

+室>Shitsu;

+宥>Yuu;

+宦>Kan;

+宮>Kyuu;

+宰>Sai;

+害>Gai;

+宴>En;

+宵>Shou;

+家>Ka;

+宸>Shin;

+容>You;

+宿>Shuku;

+寂>Jaku;

+寃>En;

+寄>Ki;

+寅>In;

+密>Mitsu;

+寇>Kou;

+寉>Kaku;

+富>Fu;

+寐>Bi;

+寒>Kan;

+寓>Guu;

+寔>Shoku;

+寛>Kan;

+寝>Shin;

+寞>Baku;

+察>Satsu;

+寡>Ka;

+寢>Shin;

+寤>Go;

+寥>Ryou;

+實>Jitsu;

+寧>Nei;

+寨>Sai;

+審>Shin;

+寫>Sha;

+寮>Ryou;

+寰>Kan;

+寳>Hou;

+寵>Chou;

+寶>Hou;

+寸>Sun;

+寺>Ji;

+対>Tai;

+寿>Ju;

+封>Fuu;

+専>Sen;

+射>Sha;

+尅>Koku;

+将>Shou;

+將>Shou;

+專>Sen;

+尉>I;

+尊>Son;

+尋>Jin;

+對>Tai;

+導>Dou;

+小>Shou;

+少>Shou;

+尓>Ji;

+尖>Sen;

+尚>Shou;

+尠>Sen;

+尢>Ou;

+尤>Yuu;

+尨>Bou;

+尭>Gyou;

+就>Shuu;

+尸>Shi;

+尹>In;

+尺>Shaku;

+尻>Kou;

+尼>Ni;

+尽>Jin;

+尾>Bi;

+尿>Nyou;

+局>Kyoku;

+屁>Hi;

+居>Kyo;

+屆>Kai;

+屈>Kutsu;

+届>Kai;

+屋>Oku;

+屍>Shi;

+屎>Shi;

+屏>Hei;

+屐>Geki;

+屑>Setsu;

+屓>Ki;

+展>Ten;

+属>Zoku;

+屠>To;

+屡>Ru;

+層>Sou;

+履>Ri;

+屬>Zoku;

+屮>Sa;

+屯>Ton;

+山>San;

+屹>Kitsu;

+岌>Kyuu;

+岐>Ki;

+岑>Shin;

+岔>Sa;

+岡>Kou;

+岨>So;

+岩>Gan;

+岫>Shuu;

+岬>Kou;

+岱>Tai;

+岳>Gaku;

+岶>Haku;

+岷>Bin;

+岸>Gan;

+岻>Ji;

+岾>Sen;

+峇>Kou;

+峙>Ji;

+峡>Kyou;

+峨>Ga;

+峩>Ga;

+峪>Yoku;

+峭>Shou;

+峯>Hou;

+峰>Hou;

+島>Tou;

+峺>Kou;

+峻>Shun;

+峽>Kyou;

+崇>Suu;

+崋>Ka;

+崎>Ki;

+崑>Kon;

+崔>Sai;

+崕>Gai;

+崖>Gai;

+崗>Kou;

+崘>Ron;

+崙>Ron;

+崚>Ryou;

+崛>Kutsu;

+崟>Gin;

+崢>Sou;

+崩>Hou;

+嵋>Bi;

+嵌>Kan;

+嵎>Guu;

+嵐>Ran;

+嵒>Gan;

+嵜>Ki;

+嵩>Suu;

+嵬>Kai;

+嵯>Sa;

+嵳>Sa;

+嶂>Shou;

+嶄>San;

+嶇>Ku;

+嶋>Tou;

+嶌>Tou;

+嶐>Ryuu;

+嶝>Tou;

+嶢>Gyou;

+嶬>Gi;

+嶮>Ken;

+嶷>Gi;

+嶺>Rei;

+嶼>Sho;

+嶽>Gaku;

+巉>San;

+巌>Gan;

+巍>Gi;

+巒>Ran;

+巓>Ten;

+巖>Gan;

+巛>Sen;

+川>Sen;

+州>Shuu;

+巡>Jun;

+巣>Sou;

+工>Kou;

+左>Sa;

+巧>Kou;

+巨>Kyo;

+巫>Fu;

+差>Shi;

+己>Ki;

+已>I;

+巳>Shi;

+巴>Ha;

+巵>Shi;

+巷>Kou;

+巻>Kan;

+巽>Son;

+巾>Kin;

+市>Shi;

+布>Fu;

+帆>Han;

+帋>Shi;

+希>Ki;

+帑>Do;

+帖>Jou;

+帙>Chitsu;

+帚>Sou;

+帛>Haku;

+帝>Tei;

+帥>Sotsu;

+師>Shi;

+席>Seki;

+帯>Tai;

+帰>Ki;

+帳>Chou;

+帶>Tai;

+帷>I;

+常>Jou;

+帽>Bou;

+幀>Tei;

+幃>I;

+幄>Aku;

+幅>Fuku;

+幇>Hou;

+幌>Kou;

+幎>Beki;

+幔>Ban;

+幕>Maku;

+幗>Kaku;

+幟>Shi;

+幡>Han;

+幢>Tou;

+幣>Hei;

+幤>Hei;

+干>Kan;

+平>Hei;

+年>Nen;

+幵>Ken;

+并>Hei;

+幸>Kou;

+幹>Kan;

+幺>You;

+幻>Gen;

+幼>You;

+幽>Yuu;

+幾>Ki;

+广>Gen;

+庁>Chou;

+広>Kou;

+庄>Sou;

+庇>Hi;

+床>Shou;

+序>Jo;

+底>Tei;

+庖>Hou;

+店>Ten;

+庚>Kou;

+府>Fu;

+庠>Shou;

+度>Taku;

+座>Za;

+庫>Ko;

+庭>Tei;

+庵>An;

+庶>Sho;

+康>Kou;

+庸>You;

+廁>Shi;

+廂>Shou;

+廃>Hai;

+廈>Ka;

+廉>Ren;

+廊>Rou;

+廐>Kyuu;

+廓>Kaku;

+廖>Ryou;

+廚>Zu;

+廛>Ten;

+廝>Shi;

+廟>Byou;

+廠>Shou;

+廡>Bu;

+廢>Hai;

+廣>Kou;

+廨>Kai;

+廩>Rin;

+廬>Ryo;

+廰>Chou;

+廱>You;

+廳>Chou;

+廴>In;

+延>En;

+廷>Tei;

+廸>Teki;

+建>Ken;

+廻>Kai;

+廼>Dai;

+廾>Kyou;

+廿>Juu;

+弁>Ben;

+弃>Ki;

+弄>Rou;

+弉>Jou;

+弊>Hei;

+弋>Yoku;

+弌>Itsu;

+弍>Ni;

+式>Shiki;

+弐>Ni;

+弑>Shi;

+弓>Kyuu;

+弔>Chou;

+引>In;

+弗>Futsu;

+弘>Kou;

+弛>Shi;

+弟>Tei;

+弥>Mi;

+弦>Gen;

+弧>Ko;

+弩>Do;

+弭>Bi;

+弯>Wan;

+弱>Jaku;

+張>Chou;

+強>Kyou;

+弸>Hou;

+弼>Hitsu;

+弾>Dan;

+彁>Sei;

+彈>Dan;

+彊>Kyou;

+彌>Bi;

+彎>Wan;

+彑>Kei;

+当>Tou;

+彖>Tan;

+彗>Sui;

+彙>I;

+彜>I;

+彝>I;

+彡>San;

+形>Kei;

+彦>Gen;

+彩>Sai;

+彪>Hyou;

+彫>Chou;

+彬>Hin;

+彭>Hou;

+彰>Shou;

+影>Ei;

+彳>Teki;

+彷>Hou;

+役>Yaku;

+彼>Hi;

+彿>Futsu;

+往>Ou;

+征>Sei;

+徂>So;

+徃>Ou;

+径>Kei;

+待>Tai;

+徇>Shun;

+很>Kon;

+徊>Kai;

+律>Ritsu;

+後>Go;

+徐>Jo;

+徑>Kei;

+徒>To;

+従>Juu;

+得>Toku;

+徘>Hai;

+徙>Shi;

+從>Juu;

+徠>Rai;

+御>Gyo;

+徨>Kou;

+復>Fuku;

+循>Jun;

+徭>You;

+微>Bi;

+徳>Toku;

+徴>Chou;

+徹>Tetsu;

+徼>Kyou;

+徽>Ki;

+心>Shin;

+必>Hitsu;

+忌>Ki;

+忍>Nin;

+忖>Son;

+志>Shi;

+忘>Bou;

+忙>Bou;

+応>Ou;

+忝>Ten;

+忠>Chuu;

+忤>Go;

+快>Kai;

+忰>Sui;

+忱>Shin;

+念>Nen;

+忸>Jiku;

+忻>Kin;

+忽>Kotsu;

+忿>Fun;

+怎>Shin;

+怏>You;

+怐>Kou;

+怒>Do;

+怕>Ha;

+怖>Fu;

+怙>Ko;

+怛>Datsu;

+怜>Rei;

+思>Shi;

+怠>Tai;

+怡>I;

+急>Kyuu;

+怦>Hou;

+性>Sei;

+怨>En;

+怩>Ji;

+怪>Kai;

+怫>Futsu;

+怯>Kyou;

+怱>Sou;

+恁>In;

+恂>Jun;

+恃>Ji;

+恆>Kou;

+恊>Kyou;

+恋>Ren;

+恍>Kou;

+恐>Kyou;

+恒>Kou;

+恕>Jo;

+恙>You;

+恚>I;

+恟>Kyou;

+恠>Kai;

+恢>Kai;

+恣>Shi;

+恤>Jutsu;

+恥>Chi;

+恨>Kon;

+恩>On;

+恪>Kaku;

+恫>Dou;

+恬>Ten;

+恭>Kyou;

+息>Soku;

+恰>Kou;

+恵>Kei;

+恷>Kyuu;

+悁>En;

+悃>Kon;

+悄>Shou;

+悉>Shitsu;

+悋>Rin;

+悌>Tei;

+悍>Kan;

+悒>Yuu;

+悔>Kai;

+悖>Hai;

+悗>Ban;

+悚>Shou;

+悛>Sen;

+悟>Go;

+悠>Yuu;

+患>Kan;

+悦>Etsu;

+悧>Ri;

+悩>Nou;

+悪>Aku;

+悲>Hi;

+悳>Toku;

+悴>Sui;

+悵>Chou;

+悶>Mon;

+悸>Ki;

+悼>Tou;

+悽>Sei;

+情>Jou;

+惆>Chuu;

+惇>Ton;

+惑>Waku;

+惓>Ken;

+惘>Bou;

+惚>Kotsu;

+惜>Seki;

+惟>I;

+惠>Kei;

+惡>O;

+惣>Sou;

+惧>Ku;

+惨>San;

+惰>Da;

+惱>Nou;

+想>Sou;

+惴>Zui;

+惶>Kou;

+惷>Shun;

+惹>Ja;

+惺>Sei;

+惻>Soku;

+愀>Shou;

+愁>Shuu;

+愃>Ken;

+愆>Ken;

+愈>Yu;

+愉>Yu;

+愍>Bin;

+愎>Hyoku;

+意>I;

+愕>Gaku;

+愚>Gu;

+愛>Ai;

+感>Kan;

+愡>Sou;

+愧>Ki;

+愨>Kaku;

+愬>So;

+愴>Sou;

+愼>Shin;

+愽>Haku;

+愾>Ki;

+愿>Gen;

+慂>You;

+慄>Ritsu;

+慇>In;

+慈>Ji;

+慊>Ken;

+態>Tai;

+慌>Kou;

+慍>Un;

+慎>Shin;

+慓>Hyou;

+慕>Bo;

+慘>San;

+慙>Zan;

+慚>Zan;

+慝>Toku;

+慟>Dou;

+慢>Man;

+慣>Kan;

+慥>Zou;

+慧>Kei;

+慨>Gai;

+慫>Shou;

+慮>Ryo;

+慯>Shou;

+慰>I;

+慱>Tan;

+慳>Kan;

+慴>Shou;

+慵>You;

+慶>Kei;

+慷>Kou;

+慾>Yoku;

+憂>Yuu;

+憇>Kei;

+憊>Hai;

+憎>Zou;

+憐>Ren;

+憑>Hyou;

+憔>Shou;

+憖>Gin;

+憙>Ki;

+憚>Tan;

+憤>Fun;

+憧>Dou;

+憩>Kei;

+憫>Bin;

+憬>Kei;

+憮>Bu;

+憲>Ken;

+憶>Oku;

+憺>Tan;

+憾>Kan;

+懃>Kin;

+懆>Sou;

+懇>Kon;

+懈>Kai;

+應>You;

+懊>Ou;

+懋>Bou;

+懌>Eki;

+懍>Rin;

+懐>Kai;

+懣>Mon;

+懦>Da;

+懲>Chou;

+懴>Zan;

+懶>Ran;

+懷>Kai;

+懸>Ken;

+懺>Zan;

+懼>Ku;

+懽>Kan;

+懾>Shou;

+懿>I;

+戀>Ren;

+戈>Ka;

+戉>Etsu;

+戊>Bo;

+戌>Jutsu;

+戍>Ju;

+戎>Juu;

+成>Sei;

+我>Ga;

+戒>Kai;

+戔>San;

+或>Waku;

+戚>Seki;

+戛>Katsu;

+戝>Zoku;

+戞>Katsu;

+戟>Geki;

+戡>Kan;

+戦>Sen;

+截>Setsu;

+戮>Riku;

+戯>Gi;

+戰>Sen;

+戲>Gi;

+戳>Taku;

+戴>Tai;

+戸>Ko;

+戻>Rei;

+房>Bou;

+所>Sho;

+扁>Hen;

+扇>Sen;

+扈>Ko;

+扉>Hi;

+手>Shu;

+才>Sai;

+扎>Satsu;

+打>Da;

+払>Futsu;

+托>Taku;

+扛>Kou;

+扞>Kan;

+扠>Sa;

+扣>Kou;

+扮>Fun;

+扱>Sou;

+扶>Fu;

+批>Hi;

+扼>Aku;

+找>Ka;

+承>Shou;

+技>Gi;

+抂>Kyou;

+抃>Ben;

+抄>Shou;

+抉>Ketsu;

+把>Ha;

+抑>Yoku;

+抒>Jo;

+抓>Sou;

+抔>Hou;

+投>Tou;

+抖>Tou;

+抗>Kou;

+折>Setsu;

+抛>Hou;

+抜>Batsu;

+択>Taku;

+披>Hi;

+抬>Tai;

+抱>Hou;

+抵>Tei;

+抹>Matsu;

+抻>Shin;

+押>Ou;

+抽>Chuu;

+拂>Futsu;

+担>Tan;

+拆>Taku;

+拇>Bo;

+拈>Den;

+拉>Ratsu;

+拊>Fu;

+拌>Han;

+拍>Haku;

+拏>Da;

+拐>Kai;

+拑>Kan;

+拒>Kyo;

+拓>Taku;

+拔>Batsu;

+拗>Ou;

+拘>Kou;

+拙>Setsu;

+招>Shou;

+拜>Hai;

+拝>Hai;

+拠>Kyo;

+拡>Kaku;

+括>Katsu;

+拭>Shiki;

+拮>Kitsu;

+拯>Jou;

+拱>Kyou;

+拳>Ken;

+拵>Son;

+拶>Satsu;

+拷>Gou;

+拾>Shuu;

+拿>Da;

+持>Ji;

+挂>Kei;

+指>Shi;

+挈>Ketsu;

+按>An;

+挌>Kaku;

+挑>Chou;

+挙>Kyo;

+挟>Kyou;

+挧>Ku;

+挨>Ai;

+挫>Za;

+振>Shin;

+挺>Tei;

+挽>Ban;

+挾>Kyou;

+挿>Sou;

+捉>Soku;

+捌>Hatsu;

+捍>Kan;

+捏>Detsu;

+捐>En;

+捕>Ho;

+捗>Ho;

+捜>Sou;

+捧>Hou;

+捨>Sha;

+捩>Retsu;

+捫>Mon;

+据>Kyo;

+捲>Ken;

+捶>Sui;

+捷>Shou;

+捺>Natsu;

+捻>Nen;

+掀>Kin;

+掃>Sou;

+授>Ju;

+掉>Tou;

+掌>Shou;

+掎>Ki;

+掏>Tou;

+排>Hai;

+掖>Eki;

+掘>Kutsu;

+掛>Ka;

+掟>Tou;

+掠>Ryaku;

+採>Sai;

+探>Tan;

+掣>Sei;

+接>Setsu;

+控>Kou;

+推>Sui;

+掩>En;

+措>So;

+掫>Sou;

+掬>Kiku;

+掲>Kei;

+掴>Kaku;

+掻>Sou;

+掾>En;

+揀>Kan;

+揃>Sen;

+揄>Yu;

+揆>Ki;

+揉>Juu;

+描>Byou;

+提>Tei;

+插>Sou;

+揖>Yuu;

+揚>You;

+換>Kan;

+握>Aku;

+揣>Shi;

+揩>Kai;

+揮>Ki;

+援>En;

+揶>Ya;

+揺>You;

+搆>Kou;

+損>Son;

+搏>Haku;

+搓>Sa;

+搖>You;

+搗>Tou;

+搜>Sou;

+搦>Jaku;

+搨>Tou;

+搬>Han;

+搭>Tou;

+搴>Ken;

+搶>Shou;

+携>Kei;

+搾>Saku;

+摂>Setsu;

+摎>Kyuu;

+摘>Teki;

+摧>Sai;

+摩>Ma;

+摯>Shi;

+摶>Tan;

+摸>Mo;

+摺>Shou;

+撃>Geki;

+撈>Rou;

+撒>San;

+撓>Dou;

+撕>Sei;

+撚>Nen;

+撞>Shu;

+撤>Tetsu;

+撥>Hatsu;

+撩>Ryou;

+撫>Bu;

+播>Ha;

+撮>Satsu;

+撰>San;

+撲>Boku;

+撹>Kaku;

+撻>Tachi;

+撼>Kan;

+擁>You;

+擂>Rai;

+擅>Sen;

+擇>Taku;

+操>Sou;

+擒>Kin;

+擔>Tan;

+擘>Haku;

+據>Kyo;

+擠>Sei;

+擡>Tai;

+擢>Teki;

+擣>Tou;

+擦>Satsu;

+擧>Kyo;

+擬>Gi;

+擯>Hin;

+擱>Kaku;

+擲>Teki;

+擴>Kaku;

+擶>Sen;

+擺>Hai;

+擽>Ryaku;

+擾>Jou;

+攀>Han;

+攅>San;

+攘>Jou;

+攜>Kei;

+攝>Setsu;

+攣>Ren;

+攤>Tan;

+攪>Kaku;

+攫>Kaku;

+攬>Ran;

+支>Shi;

+攴>Hoku;

+攵>Boku;

+收>Shuu;

+攷>Kou;

+攸>Yuu;

+改>Kai;

+攻>Kou;

+放>Hou;

+政>Sei;

+故>Ko;

+效>Kou;

+敍>Jo;

+敏>Bin;

+救>Kyuu;

+敕>Choku;

+敖>Gou;

+敗>Hai;

+敘>Jo;

+教>Kyou;

+敝>Hei;

+敞>Shou;

+敢>Kan;

+散>San;

+敦>Ton;

+敬>Kei;

+数>Suu;

+敲>Kou;

+整>Sei;

+敵>Teki;

+敷>Fu;

+數>Suu;

+斂>Ren;

+斃>Hei;

+文>Bun;

+斈>Gaku;

+斉>Sei;

+斌>Hin;

+斎>Sai;

+斐>Hi;

+斑>Han;

+斗>To;

+料>Ryou;

+斛>Koku;

+斜>Sha;

+斟>Shin;

+斡>Atsu;

+斤>Kin;

+斥>Seki;

+斧>Fu;

+斫>Shaku;

+斬>Zan;

+断>Dan;

+斯>Shi;

+新>Shin;

+斷>Dan;

+方>Hou;

+於>O;

+施>Shi;

+旁>Hou;

+旃>Sen;

+旄>Bou;

+旅>Ryo;

+旆>Hai;

+旋>Sen;

+旌>Sei;

+族>Zoku;

+旒>Ryuu;

+旗>Ki;

+旙>Han;

+旛>Han;

+无>Bu;

+旡>Ki;

+既>Ki;

+日>Nichi;

+旦>Tan;

+旧>Kyuu;

+旨>Shi;

+早>Sou;

+旬>Jun;

+旭>Kyoku;

+旱>Kan;

+旺>Ou;

+旻>Bin;

+昂>Kou;

+昃>Soku;

+昆>Kon;

+昇>Shou;

+昊>Kou;

+昌>Shou;

+明>Mei;

+昏>Kon;

+易>Eki;

+昔>Seki;

+昜>You;

+星>Sei;

+映>Ei;

+春>Shun;

+昧>Mai;

+昨>Saku;

+昭>Shou;

+是>Ze;

+昴>Bou;

+昵>Jitsu;

+昶>Chou;

+昼>Chuu;

+昿>Kou;

+晁>Chou;

+時>Ji;

+晃>Kou;

+晄>Kou;

+晉>Shin;

+晋>Shin;

+晏>An;

+晒>Sai;

+晝>Chuu;

+晞>Ki;

+晟>Sei;

+晢>Setsu;

+晤>Go;

+晦>Kai;

+晧>Kou;

+晨>Shin;

+晩>Ban;

+普>Fu;

+景>Kei;

+晰>Seki;

+晴>Sei;

+晶>Shou;

+智>Chi;

+暁>Gyou;

+暃>Hi;

+暄>Ken;

+暇>Ka;

+暈>Un;

+暉>Ki;

+暎>Ei;

+暑>Sho;

+暖>Dan;

+暗>An;

+暘>You;

+暝>Mei;

+暢>Chou;

+暦>Reki;

+暫>Zan;

+暮>Bo;

+暴>Bou;

+暸>Ryou;

+暹>Sen;

+暼>Hetsu;

+暾>Ton;

+曁>Ki;

+曄>You;

+曇>Don;

+曉>Gyou;

+曖>Ai;

+曙>Sho;

+曚>Bou;

+曜>You;

+曝>Baku;

+曠>Kou;

+曦>Gi;

+曩>Dou;

+曰>Etsu;

+曲>Kyoku;

+曳>Ei;

+更>Kou;

+曵>Ei;

+曷>Katsu;

+書>Sho;

+曹>Sou;

+曼>Ban;

+曽>Zo;

+曾>So;

+替>Tai;

+最>Sai;

+會>Kai;

+月>Getsu;

+有>Yuu;

+朋>Hou;

+服>Fuku;

+朏>Hi;

+朔>Saku;

+朕>Chin;

+朖>Rou;

+朗>Rou;

+望>Bou;

+朝>Chou;

+朞>Ki;

+期>Ki;

+朦>Bou;

+朧>Rou;

+木>Boku;

+未>Mi;

+末>Matsu;

+本>Hon;

+札>Satsu;

+朮>Jutsu;

+朱>Shu;

+朴>Boku;

+朶>Da;

+朷>Tou;

+朸>Ryoku;

+机>Ki;

+朽>Kyuu;

+朿>Shi;

+杆>Kan;

+杉>San;

+李>Ri;

+杏>Kyou;

+材>Zai;

+村>Son;

+杓>Hyou;

+杖>Jou;

+杙>Yoku;

+杜>Do;

+杞>Ko;

+束>Soku;

+杠>Kou;

+条>Jou;

+来>Rai;

+杪>Byou;

+杭>Kou;

+杯>Hai;

+杰>Ketsu;

+東>Tou;

+杲>Kou;

+杳>You;

+杵>Sho;

+杷>Ha;

+杼>Cho;

+松>Shou;

+板>Han;

+枅>Kei;

+枇>Hi;

+枉>Ou;

+枋>Hou;

+枌>Fun;

+析>Seki;

+枕>Chin;

+林>Rin;

+枚>Mai;

+果>Ka;

+枝>Shi;

+枢>Suu;

+枦>Ro;

+枩>Shou;

+枯>Ko;

+枳>Ki;

+枴>Kai;

+架>Ka;

+枷>Ka;

+枸>Ku;

+枹>Hou;

+柁>Ta;

+柄>Hei;

+柆>Rou;

+柊>Shuu;

+柎>Fu;

+柏>Haku;

+某>Bou;

+柑>Kan;

+染>Sen;

+柔>Nyuu;

+柘>Sha;

+柚>Yuu;

+柝>Taku;

+柞>Saku;

+柢>Tei;

+柤>Sa;

+柧>Ko;

+柩>Kyuu;

+柬>Kan;

+柮>Totsu;

+柯>Ka;

+柱>Chuu;

+柳>Ryuu;

+柴>Sai;

+柵>Saku;

+査>Sa;

+柾>Kyuu;

+柿>Shi;

+栄>Ei;

+栓>Sen;

+栖>Sei;

+栗>Ritsu;

+栞>Kan;

+校>Kou;

+栢>Haku;

+栩>Ku;

+株>Chu;

+栫>Son;

+栲>Gou;

+栴>Sen;

+核>Kaku;

+根>Kon;

+格>Kou;

+栽>Sai;

+桀>Ketsu;

+桁>Kou;

+桂>Kei;

+桃>Tou;

+框>Kyou;

+案>An;

+桍>Ko;

+桎>Shitsu;

+桐>Dou;

+桑>Sou;

+桓>Kan;

+桔>Kitsu;

+桙>U;

+桜>Ou;

+桟>San;

+档>Tou;

+桧>Kai;

+桴>Fu;

+桶>Tou;

+桷>Kaku;

+桾>Kun;

+桿>Kan;

+梁>Ryou;

+梃>Tei;

+梅>Bai;

+梍>Sou;

+梏>Koku;

+梓>Shi;

+梔>Shi;

+梗>Kou;

+梛>Da;

+條>Jou;

+梟>Kyou;

+梠>Ryo;

+梢>Shou;

+梦>Mu;

+梧>Go;

+梨>Ri;

+梭>Sa;

+梯>Tei;

+械>Kai;

+梱>Kon;

+梳>So;

+梵>Fuu;

+梶>Bi;

+梹>Bin;

+梼>Tou;

+棄>Ki;

+棆>Rin;

+棉>Men;

+棊>Ki;

+棋>Ki;

+棍>Kon;

+棒>Bou;

+棔>Kon;

+棕>Shu;

+棗>Sou;

+棘>Kyoku;

+棚>Hou;

+棟>Tou;

+棠>Tou;

+棡>Kou;

+棣>Tei;

+棧>San;

+森>Shin;

+棯>Jin;

+棲>Sei;

+棹>Tou;

+棺>Kan;

+椀>Wan;

+椁>Kaku;

+椄>Setsu;

+椅>I;

+椈>Kiku;

+椋>Ryou;

+椌>Kou;

+植>Shoku;

+椎>Tsui;

+椏>A;

+椒>Shou;

+検>Ken;

+椢>Kai;

+椦>Ken;

+椰>Ya;

+椴>Tan;

+椶>Shu;

+椹>Chin;

+椽>Ten;

+椿>Chin;

+楊>You;

+楓>Fuu;

+楔>Setsu;

+楕>Da;

+楙>Bou;

+楚>So;

+楜>Ko;

+楝>Ren;

+楞>Rou;

+楠>Nan;

+楡>Yu;

+楢>Shuu;

+楪>You;

+楫>Shuu;

+業>Gyou;

+楮>Cho;

+楯>Jun;

+楳>Bai;

+楴>Tei;

+極>Goku;

+楷>Kai;

+楸>Shuu;

+楹>Ei;

+楼>Rou;

+楽>Gaku;

+概>Gai;

+榎>Ka;

+榑>Fu;

+榔>Rou;

+榕>You;

+榛>Shin;

+榜>Bou;

+榠>Bei;

+榧>Hi;

+榮>Ei;

+榱>Sui;

+榲>Otsu;

+榴>Ryuu;

+榻>Tou;

+榾>Kotsu;

+榿>Ki;

+槁>Kou;

+槃>Han;

+槇>Ten;

+槊>Saku;

+構>Kou;

+槌>Tsui;

+槍>Sou;

+槎>Sa;

+槐>Kai;

+槓>Kou;

+様>You;

+槙>Ten;

+槝>Tou;

+槞>Rou;

+槧>San;

+槨>Kaku;

+槫>Tan;

+槭>Shuku;

+槲>Koku;

+槹>Kou;

+槻>Ki;

+槽>Sou;

+槿>Kin;

+樂>Gaku;

+樅>Shou;

+樊>Han;

+樋>Tou;

+樌>Kan;

+樒>Mitsu;

+樓>Rou;

+樔>Sou;

+樗>Cho;

+標>Hyou;

+樛>Kyuu;

+樞>Suu;

+樟>Shou;

+模>Mo;

+樢>Boku;

+樣>You;

+権>Ken;

+横>Ou;

+樵>Shou;

+樶>Sai;

+樸>Boku;

+樹>Ju;

+樺>Ka;

+樽>Son;

+橄>Kan;

+橇>Zei;

+橈>Dou;

+橋>Kyou;

+橘>Kitsu;

+橙>Tou;

+機>Ki;

+橡>Shou;

+橢>Da;

+橦>Tou;

+橸>Shou;

+橿>Kyou;

+檀>Tan;

+檄>Geki;

+檍>Yoku;

+檎>Go;

+檐>En;

+檗>Haku;

+檜>Kai;

+檠>Kei;

+檢>Ken;

+檣>Shou;

+檪>Reki;

+檬>Bou;

+檮>Tou;

+檳>Bin;

+檸>Nei;

+檻>Kan;

+櫁>Mitsu;

+櫂>Tou;

+櫃>Ki;

+櫑>Rai;

+櫓>Ro;

+櫚>Ryo;

+櫛>Shitsu;

+櫞>En;

+櫟>Reki;

+櫨>Ro;

+櫪>Reki;

+櫺>Rei;

+櫻>Ou;

+欄>Ran;

+欅>Kyo;

+權>Ken;

+欒>Ran;

+欖>Ran;

+欝>Utsu;

+欠>Ketsu;

+次>Ji;

+欣>Gon;

+欧>Ou;

+欲>Yoku;

+欷>Ki;

+欸>Ai;

+欹>I;

+欺>Gi;

+欽>Kin;

+款>Kan;

+歃>Sou;

+歇>Ketsu;

+歉>Ken;

+歌>Ka;

+歎>Tan;

+歐>Ou;

+歓>Kan;

+歔>Kyo;

+歙>Kyuu;

+歛>Kan;

+歟>Yo;

+歡>Kan;

+止>Shi;

+正>Sei;

+此>Shi;

+武>Bu;

+歩>Ho;

+歪>Wai;

+歯>Shi;

+歳>Sei;

+歴>Reki;

+歸>Ki;

+歹>Gatsu;

+死>Shi;

+歿>Botsu;

+殀>You;

+殃>You;

+殄>Ten;

+殆>Tai;

+殉>Jun;

+殊>Shu;

+残>Zan;

+殍>Hyou;

+殕>Fuu;

+殖>Shoku;

+殘>Zan;

+殞>In;

+殤>Shou;

+殪>Ei;

+殫>Tan;

+殯>Hin;

+殱>Sen;

+殲>Sen;

+殳>Shu;

+殴>Ou;

+段>Dan;

+殷>In;

+殺>Satsu;

+殻>Kaku;

+殼>Kaku;

+殿>Ten;

+毀>Ki;

+毅>Ki;

+毆>Ou;

+毋>Bu;

+母>Bo;

+毎>Mai;

+毒>Doku;

+毓>Iku;

+比>Hi;

+毘>Hi;

+毛>Mou;

+毫>Kou;

+毬>Kyuu;

+毯>Tan;

+毳>Zei;

+氈>Sen;

+氏>Shi;

+民>Min;

+氓>Bou;

+气>Ki;

+気>Ki;

+氛>Fun;

+氣>Ki;

+氤>In;

+水>Sui;

+氷>Hyou;

+永>Ei;

+氾>Han;

+汀>Tei;

+汁>Juu;

+求>Kyuu;

+汎>Han;

+汐>Seki;

+汕>San;

+汗>Kan;

+汚>O;

+汝>Jo;

+汞>Kou;

+江>Kou;

+池>Chi;

+汨>Beki;

+汪>Ou;

+汰>Ta;

+汲>Kyuu;

+汳>Hen;

+決>Ketsu;

+汽>Ki;

+汾>Fun;

+沁>Shin;

+沂>Ki;

+沃>Yoku;

+沈>Chin;

+沌>Ton;

+沍>Go;

+沐>Boku;

+沒>Botsu;

+沓>Tou;

+沖>Chuu;

+沙>Sa;

+沚>Shi;

+沛>Hai;

+没>Botsu;

+沢>Taku;

+沫>Matsu;

+沮>Sho;

+沱>Ta;

+河>Ka;

+沸>Futsu;

+油>Yu;

+沺>Ten;

+治>Ji;

+沼>Shou;

+沽>Ko;

+沾>Ten;

+沿>En;

+況>Kyou;

+泄>Ei;

+泅>Shuu;

+泉>Sen;

+泊>Haku;

+泌>Hitsu;

+泓>Ou;

+法>Hou;

+泗>Shi;

+泙>Hou;

+泛>Han;

+泝>So;

+泡>Hou;

+波>Ha;

+泣>Kyuu;

+泥>Dei;

+注>Chuu;

+泪>Rui;

+泯>Bin;

+泰>Tai;

+泱>Ou;

+泳>Ei;

+洋>You;

+洌>Retsu;

+洒>Sei;

+洗>Sen;

+洙>Shu;

+洛>Raku;

+洞>Dou;

+洟>I;

+津>Shin;

+洩>Ei;

+洪>Kou;

+洫>Kyoku;

+洲>Shuu;

+洳>Jo;

+洵>Shun;

+洶>Kyou;

+洸>Kou;

+活>Katsu;

+洽>Kou;

+派>Ha;

+流>Ryuu;

+浄>Jou;

+浅>Sen;

+浙>Setsu;

+浚>Shun;

+浜>Hin;

+浣>Kan;

+浤>Kou;

+浦>Ho;

+浩>Kou;

+浪>Rou;

+浬>Ri;

+浮>Fu;

+浴>Yoku;

+海>Kai;

+浸>Shin;

+浹>Shou;

+涅>Netsu;

+消>Shou;

+涌>Yuu;

+涎>Sen;

+涓>Ken;

+涕>Tei;

+涙>Rui;

+涛>Tou;

+涜>Toku;

+涯>Gai;

+液>Eki;

+涵>Kan;

+涸>Ko;

+涼>Ryou;

+淀>Ten;

+淅>Seki;

+淆>Kou;

+淇>Ki;

+淋>Rin;

+淌>Shou;

+淑>Shuku;

+淒>Sei;

+淕>Riku;

+淘>Tou;

+淙>Sou;

+淞>Shou;

+淡>Tan;

+淤>Yo;

+淦>Kan;

+淨>Jou;

+淪>Rin;

+淫>In;

+淬>Sai;

+淮>Wai;

+深>Shin;

+淳>Shun;

+淵>En;

+混>Kon;

+淹>En;

+淺>Sen;

+添>Ten;

+清>Sei;

+渇>Katsu;

+済>Sai;

+渉>Shou;

+渊>En;

+渋>Juu;

+渓>Kei;

+渕>En;

+渙>Kan;

+渚>Sho;

+減>Gen;

+渝>Yu;

+渟>Tei;

+渠>Kyo;

+渡>To;

+渣>Sa;

+渤>Botsu;

+渥>Aku;

+渦>Ka;

+温>On;

+渫>Setsu;

+測>Soku;

+渭>I;

+渮>Ka;

+港>Kou;

+游>Yuu;

+渺>Byou;

+渾>Kon;

+湃>Hai;

+湊>Sou;

+湍>Tan;

+湎>Ben;

+湖>Ko;

+湘>Shou;

+湛>Tan;

+湟>Kou;

+湧>Yuu;

+湫>Shou;

+湮>In;

+湯>Tou;

+湲>Kan;

+湶>Sen;

+湾>Wan;

+湿>Shitsu;

+満>Man;

+溂>Ratsu;

+溌>Hatsu;

+溏>Tou;

+源>Gen;

+準>Jun;

+溘>Kou;

+溜>Ryuu;

+溝>Kou;

+溟>Mei;

+溢>Itsu;

+溥>Ho;

+溪>Kei;

+溯>So;

+溲>Sou;

+溶>You;

+溷>Kon;

+溺>Deki;

+溽>Joku;

+滂>Bou;

+滄>Sou;

+滅>Metsu;

+滉>Kou;

+滋>Ji;

+滌>Deki;

+滑>Katsu;

+滓>Sai;

+滔>Tou;

+滕>Tou;

+滝>Sou;

+滞>Tai;

+滬>Ko;

+滯>Tai;

+滲>Shin;

+滴>Teki;

+滷>Ro;

+滸>Ko;

+滾>Kon;

+滿>Man;

+漁>Ryou;

+漂>Hyou;

+漆>Shitsu;

+漉>Roku;

+漏>Rou;

+漑>Gai;

+漓>Ri;

+演>En;

+漕>Sou;

+漠>Baku;

+漢>Kan;

+漣>Ran;

+漫>Man;

+漬>Shi;

+漱>Sou;

+漲>Chou;

+漸>Zen;

+漾>You;

+漿>Shou;

+潁>Ei;

+潅>Kan;

+潔>Ketsu;

+潘>Han;

+潛>Sen;

+潜>Sen;

+潟>Seki;

+潤>Jun;

+潦>Rou;

+潭>Tan;

+潮>Chou;

+潯>Jin;

+潰>Kai;

+潴>Cho;

+潸>San;

+潺>San;

+潼>Dou;

+澀>Juu;

+澁>Juu;

+澂>Chou;

+澄>Chou;

+澆>Gyou;

+澎>Hou;

+澑>Ryuu;

+澗>Kan;

+澡>Sou;

+澣>Kan;

+澤>Taku;

+澪>Rei;

+澱>Ten;

+澳>Iku;

+澹>Tan;

+激>Geki;

+濁>Daku;

+濂>Ren;

+濃>Nou;

+濆>Fun;

+濔>Dei;

+濕>Shitsu;

+濘>Nei;

+濟>Sai;

+濠>Gou;

+濡>Ju;

+濤>Tou;

+濫>Ran;

+濬>Shun;

+濮>Hoku;

+濯>Taku;

+濱>Hin;

+濳>Sen;

+濶>Katsu;

+濺>Sen;

+濾>Ryo;

+瀁>You;

+瀉>Sha;

+瀋>Shin;

+瀏>Ryuu;

+瀑>Baku;

+瀕>Hin;

+瀘>Ro;

+瀚>Kan;

+瀛>Ei;

+瀝>Reki;

+瀞>Jou;

+瀟>Shou;

+瀦>Cho;

+瀧>Sou;

+瀬>Rai;

+瀰>Bi;

+瀲>Ren;

+瀾>Ran;

+灌>Kan;

+灑>Sai;

+灘>Dan;

+灣>Wan;

+火>Ka;

+灯>Tou;

+灰>Kai;

+灸>Kyuu;

+灼>Shaku;

+災>Sai;

+炉>Ro;

+炊>Sui;

+炎>En;

+炒>Sou;

+炙>Sha;

+炬>Ko;

+炭>Tan;

+炮>Hou;

+炯>Kei;

+炳>Hei;

+炸>Saku;

+点>Ten;

+為>I;

+烈>Retsu;

+烋>Kou;

+烏>U;

+烙>Raku;

+烝>Jou;

+烟>En;

+烱>Kei;

+烹>Hou;

+烽>Hou;

+焉>En;

+焔>En;

+焙>Hou;

+焚>Fun;

+焜>Kon;

+無>Mu;

+焦>Shou;

+然>Zen;

+焼>Shou;

+煉>Ren;

+煌>Kou;

+煎>Sen;

+煕>Ki;

+煖>Dan;

+煙>En;

+煢>Kei;

+煤>Bai;

+煥>Kan;

+煦>Ku;

+照>Shou;

+煩>Han;

+煬>You;

+煮>Sha;

+煽>Sen;

+熄>Soku;

+熈>Ki;

+熊>Yuu;

+熏>Kun;

+熔>You;

+熕>Kou;

+熙>Ki;

+熟>Juku;

+熨>I;

+熬>Gou;

+熱>Netsu;

+熹>Ki;

+熾>Shi;

+燃>Nen;

+燈>Tou;

+燉>Ton;

+燎>Ryou;

+燐>Rin;

+燒>Shou;

+燔>Han;

+燕>En;

+燗>Ran;

+營>Ei;

+燠>Iku;

+燥>Sou;

+燦>San;

+燧>Sui;

+燬>Ki;

+燭>Shoku;

+燮>Shou;

+燵>Tatsu;

+燹>Sen;

+燻>Kun;

+燼>Jin;

+燿>You;

+爆>Baku;

+爍>Shaku;

+爐>Ro;

+爛>Ran;

+爨>San;

+爪>Sou;

+爬>Ha;

+爭>Sou;

+爰>En;

+爲>I;

+爵>Shaku;

+父>Fu;

+爺>Ya;

+爻>Kou;

+爼>Sho;

+爽>Sou;

+爾>Ji;

+爿>Shou;

+牀>Sou;

+牆>Shou;

+片>Hen;

+版>Han;

+牋>Sen;

+牌>Hai;

+牒>Chou;

+牘>Toku;

+牙>Ga;

+牛>Gyuu;

+牝>Hin;

+牟>Bou;

+牡>Bo;

+牢>Rou;

+牧>Boku;

+物>Motsu;

+牲>Sei;

+牴>Tei;

+特>Toku;

+牽>Ken;

+牾>Go;

+犀>Sei;

+犁>Ri;

+犂>Ri;

+犇>Hon;

+犒>Kou;

+犖>Raku;

+犠>Gi;

+犢>Toku;

+犧>Gi;

+犬>Ken;

+犯>Han;

+犲>Sai;

+状>Jou;

+犹>Yuu;

+狂>Kyou;

+狃>Juu;

+狄>Teki;

+狆>Chuu;

+狎>Kou;

+狐>Ko;

+狒>Hi;

+狗>Kou;

+狙>Sho;

+狛>Haku;

+狠>Gan;

+狡>Kou;

+狢>Kaku;

+狩>Shu;

+独>Doku;

+狭>Kyou;

+狷>Ken;

+狸>Ri;

+狹>Kyou;

+狼>Rou;

+狽>Hai;

+猊>Gei;

+猖>Shou;

+猗>I;

+猛>Mou;

+猜>Sai;

+猝>Sotsu;

+猟>Ryou;

+猥>Wai;

+猩>Sei;

+猪>Cho;

+猫>Byou;

+献>Ken;

+猯>Tan;

+猴>Kou;

+猶>Yuu;

+猷>Yuu;

+猾>Katsu;

+猿>En;

+獄>Goku;

+獅>Shi;

+獎>Shou;

+獏>Baku;

+獗>Ketsu;

+獣>Juu;

+獨>Doku;

+獪>Kai;

+獰>Dou;

+獲>Kaku;

+獵>Ryou;

+獸>Juu;

+獺>Datsu;

+獻>Ken;

+玄>Gen;

+率>Ritsu;

+玉>Gyoku;

+王>Ou;

+玖>Kyuu;

+玩>Gan;

+玲>Rei;

+玳>Tai;

+玻>Ha;

+珀>Haku;

+珂>Ka;

+珈>Ka;

+珊>San;

+珍>Chin;

+珎>Chin;

+珞>Raku;

+珠>Shu;

+珥>Ji;

+珪>Kei;

+班>Han;

+珮>Hai;

+珱>Ei;

+珸>Go;

+現>Gen;

+球>Kyuu;

+琅>Rou;

+理>Ri;

+琉>Ryuu;

+琢>Taku;

+琥>Ko;

+琲>Hai;

+琳>Rin;

+琴>Kin;

+琵>Bi;

+琶>Ha;

+琺>Hou;

+琿>Kon;

+瑁>Bou;

+瑕>Ka;

+瑙>Dou;

+瑚>Ko;

+瑛>Ei;

+瑜>Yu;

+瑞>Zui;

+瑟>Shitsu;

+瑠>Ryuu;

+瑣>Sa;

+瑤>You;

+瑩>Ei;

+瑪>Ba;

+瑯>Rou;

+瑰>Kai;

+瑳>Sa;

+瑶>You;

+瑾>Kin;

+璃>Ri;

+璋>Shou;

+璞>Haku;

+璢>Ryuu;

+璧>Heki;

+環>Kan;

+璽>Ji;

+瓊>Kei;

+瓏>Rou;

+瓔>Ei;

+瓜>Ka;

+瓠>Ko;

+瓢>Hyou;

+瓣>Ben;

+瓦>Ga;

+瓮>Ou;

+瓶>Hei;

+瓷>Shi;

+甃>Shuu;

+甄>Ken;

+甌>Ou;

+甍>Bou;

+甎>Sen;

+甑>Sou;

+甓>Heki;

+甕>Ou;

+甘>Kan;

+甚>Shin;

+甜>Ten;

+甞>Shou;

+生>Sei;

+産>San;

+甥>Sei;

+甦>So;

+用>You;

+甫>Ho;

+甬>You;

+田>Den;

+由>Yuu;

+甲>Kou;

+申>Shin;

+男>Dan;

+甸>Ten;

+町>Chou;

+画>Ga;

+甼>Chou;

+畄>Ryuu;

+畆>Ho;

+畉>Fu;

+畊>Kou;

+畋>Ten;

+界>Kai;

+畍>Kai;

+畏>I;

+畔>Han;

+留>Ryuu;

+畚>Hon;

+畛>Shin;

+畜>Chiku;

+畝>Ho;

+畢>Hitsu;

+畤>Shi;

+略>Ryaku;

+畦>Kei;

+畧>Ryaku;

+番>Ban;

+畫>Kaku;

+畭>Yo;

+異>I;

+畳>Jou;

+畴>Chuu;

+當>Tou;

+畷>Tetsu;

+畸>Ki;

+畿>Ki;

+疂>Jou;

+疆>Kyou;

+疇>Chuu;

+疉>Jou;

+疊>Jou;

+疋>So;

+疎>So;

+疏>So;

+疑>Gi;

+疔>Chou;

+疚>Kyuu;

+疝>San;

+疣>Yuu;

+疥>Kai;

+疫>Eki;

+疱>Hou;

+疲>Hi;

+疳>Kan;

+疵>Shi;

+疸>Tan;

+疹>Shin;

+疼>Tou;

+疽>Sho;

+疾>Shitsu;

+痂>Ka;

+痃>Ken;

+病>Byou;

+症>Shou;

+痊>Sen;

+痍>I;

+痒>You;

+痔>Ji;

+痕>Kon;

+痘>Tou;

+痙>Kei;

+痛>Ts;

+痞>Hi;

+痢>Ri;

+痣>Shi;

+痩>Sou;

+痰>Tan;

+痲>Ma;

+痳>Rin;

+痴>Chi;

+痺>Hi;

+痼>Ko;

+痾>A;

+痿>I;

+瘁>Sui;

+瘉>Yu;

+瘋>Fuu;

+瘍>You;

+瘟>On;

+瘠>Seki;

+瘡>Sou;

+瘢>Han;

+瘤>Ryuu;

+瘧>Gyaku;

+瘰>Rui;

+瘴>Shou;

+瘻>Rou;

+療>Ryou;

+癆>Rou;

+癇>Kan;

+癈>Hai;

+癌>Gan;

+癒>Yu;

+癖>Heki;

+癘>Rei;

+癜>Den;

+癡>Chi;

+癢>You;

+癧>Reki;

+癨>Kaku;

+癩>Rai;

+癪>Shaku;

+癬>Sen;

+癰>You;

+癲>Ten;

+癶>Hatsu;

+癸>Ki;

+発>Hotsu;

+登>Tou;

+發>Hotsu;

+白>Haku;

+百>Hyaku;

+皀>Hyuu;

+皃>Bou;

+的>Teki;

+皆>Kai;

+皇>Kou;

+皈>Ki;

+皋>Kou;

+皎>Kou;

+皐>Kou;

+皓>Kou;

+皖>Kan;

+皙>Seki;

+皚>Gai;

+皮>Hi;

+皰>Hou;

+皴>Shun;

+皷>Ko;

+皸>Kun;

+皹>Kun;

+皺>Suu;

+皿>Bai;

+盂>U;

+盃>Hai;

+盆>Bon;

+盈>Ei;

+益>Eki;

+盍>Kou;

+盒>Kou;

+盖>Gai;

+盗>Tou;

+盛>Sei;

+盜>Tou;

+盞>San;

+盟>Mei;

+盡>Jin;

+監>Kan;

+盤>Ban;

+盥>Kan;

+盧>Ro;

+盪>Tou;

+目>Moku;

+盲>Mou;

+直>Choku;

+相>Shou;

+盻>Kei;

+盾>Jun;

+省>Sei;

+眄>Ben;

+眇>Byou;

+眈>Tan;

+眉>Bi;

+看>Kan;

+県>Ken;

+眛>Mai;

+眞>Shin;

+真>Shin;

+眠>Min;

+眤>Tei;

+眥>Sei;

+眦>Sei;

+眩>Gen;

+眷>Ken;

+眸>Bou;

+眺>Chou;

+眼>Gan;

+着>Chaku;

+睇>Tei;

+睚>Gai;

+睛>Sei;

+睡>Sui;

+督>Toku;

+睥>Hei;

+睦>Boku;

+睨>Gei;

+睫>Shou;

+睹>To;

+睾>Kou;

+睿>Ei;

+瞋>Shin;

+瞎>Katsu;

+瞑>Mei;

+瞞>Ban;

+瞠>Dou;

+瞥>Betsu;

+瞬>Shun;

+瞭>Ryou;

+瞰>Kan;

+瞳>Dou;

+瞶>Ki;

+瞹>Ai;

+瞻>Sen;

+瞼>Ken;

+瞽>Ko;

+瞿>Ku;

+矇>Mou;

+矍>Kaku;

+矗>Chiku;

+矚>Shoku;

+矛>Mu;

+矜>Kin;

+矢>Shi;

+矣>I;

+知>Chi;

+矧>Shin;

+矩>Ku;

+短>Tan;

+矮>Wai;

+矯>Kyou;

+石>Shaku;

+矼>Kou;

+砂>Sa;

+砌>Sei;

+砒>Hi;

+研>Ken;

+砕>Sai;

+砠>Sho;

+砥>Shi;

+砦>Sai;

+砧>Chin;

+砲>Hou;

+破>Ha;

+砺>Rei;

+砿>Kou;

+硅>Kei;

+硝>Shou;

+硫>Ryuu;

+硬>Kou;

+硯>Ken;

+硼>Hou;

+碁>Go;

+碆>Ha;

+碇>Tei;

+碌>Roku;

+碍>Gai;

+碎>Sai;

+碑>Hi;

+碓>Tai;

+碕>Ki;

+碗>Wan;

+碚>Hai;

+碣>Ketsu;

+碧>Heki;

+碩>Seki;

+碪>Chin;

+碯>Dou;

+碵>Seki;

+確>Kaku;

+碼>Ba;

+碾>Ten;

+磁>Ji;

+磅>Hou;

+磆>Katsu;

+磊>Rai;

+磋>Sa;

+磐>Han;

+磑>Gai;

+磔>Taku;

+磚>Sen;

+磧>Seki;

+磨>Ma;

+磬>Kei;

+磯>Ki;

+磴>Tou;

+磽>Kou;

+礁>Shou;

+礇>Iku;

+礎>So;

+礑>Tou;

+礒>Gi;

+礙>Gai;

+礦>Kou;

+礪>Rei;

+礫>Reki;

+礬>Ban;

+示>Shi;

+礼>Rei;

+社>Sha;

+祀>Shi;

+祁>Ki;

+祇>Ki;

+祈>Ki;

+祉>Shi;

+祐>Yuu;

+祓>Futsu;

+祕>Hi;

+祖>So;

+祗>Shi;

+祚>So;

+祝>Shuku;

+神>Shin;

+祟>Sui;

+祠>Shi;

+祢>Dei;

+祥>Shou;

+票>Hyou;

+祭>Sai;

+祷>Tou;

+祺>Ki;

+祿>Roku;

+禀>Rin;

+禁>Kin;

+禄>Roku;

+禅>Zen;

+禊>Kei;

+禍>Ka;

+禎>Tei;

+福>Fuku;

+禝>Shoku;

+禦>Gyo;

+禧>Ki;

+禪>Zen;

+禮>Rei;

+禰>Dei;

+禳>Jou;

+禹>U;

+禺>Guu;

+禽>Kin;

+禾>Ka;

+禿>Toku;

+秀>Shuu;

+私>Shi;

+秉>Hei;

+秋>Shuu;

+科>Ka;

+秒>Byou;

+秕>Hi;

+秘>Hi;

+租>So;

+秡>Hatsu;

+秣>Matsu;

+秤>Shou;

+秦>Shin;

+秧>Ou;

+秩>Chitsu;

+秬>Kyo;

+称>Shou;

+移>I;

+稀>Ki;

+稈>Kan;

+程>Tei;

+稍>Sou;

+税>Zei;

+稔>Jin;

+稗>Hai;

+稘>Ki;

+稙>Choku;

+稚>Chi;

+稜>Ryou;

+稟>Rin;

+稠>Chuu;

+種>Shu;

+稱>Shou;

+稲>Tou;

+稷>Shoku;

+稻>Tou;

+稼>Ka;

+稽>Kei;

+稾>Kou;

+稿>Kou;

+穀>Koku;

+穂>Sui;

+穃>You;

+穆>Boku;

+穉>Chi;

+積>Seki;

+穎>Ei;

+穏>On;

+穐>Shuu;

+穗>Sui;

+穡>Shoku;

+穢>Ai;

+穣>Jou;

+穩>On;

+穫>Kaku;

+穰>Jou;

+穴>Ketsu;

+究>Kyuu;

+穹>Kyuu;

+空>Kuu;

+穽>Sei;

+穿>Sen;

+突>Totsu;

+窃>Setsu;

+窄>Saku;

+窈>You;

+窒>Chitsu;

+窓>Sou;

+窕>Chou;

+窖>Kou;

+窗>Sou;

+窘>Kin;

+窟>Kutsu;

+窩>Ka;

+窪>Wa;

+窮>Kyuu;

+窯>You;

+窰>You;

+窶>Ku;

+窺>Ki;

+窿>Ryuu;

+竃>Sou;

+竄>Zan;

+竅>Kyou;

+竇>Tou;

+竈>Sou;

+竊>Setsu;

+立>Ritsu;

+竒>Ki;

+站>Tan;

+竚>Cho;

+竜>Ryuu;

+竝>Hei;

+竟>Kei;

+章>Shou;

+竢>Shi;

+竣>Shun;

+童>Dou;

+竦>Shou;

+竪>Ju;

+竭>Ketsu;

+端>Tan;

+競>Kyou;

+竸>Kei;

+竹>Chiku;

+竺>Toku;

+竿>Kan;

+笄>Kei;

+笆>Ha;

+笈>Kyuu;

+笊>Sou;

+笋>Jun;

+笏>Kotsu;

+笑>Shou;

+笘>Sen;

+笙>Sou;

+笛>Teki;

+笞>Chi;

+笠>Ryuu;

+笥>Shi;

+符>Fu;

+笨>Hon;

+第>Dai;

+笳>Ka;

+笵>Han;

+笶>Shi;

+筅>Sen;

+筆>Hitsu;

+筈>Katsu;

+等>Tou;

+筋>Kin;

+筌>Sen;

+筍>Jun;

+筏>Batsu;

+筐>Kyou;

+筑>Chiku;

+筒>Tou;

+答>Tou;

+策>Saku;

+筝>Sou;

+筥>Kyo;

+筧>Ken;

+筬>Sei;

+筮>Sei;

+筰>Saku;

+筱>Shou;

+筴>Kyou;

+筵>En;

+筺>Kyou;

+箆>Hei;

+箇>Ka;

+箋>Sen;

+箍>Ko;

+箏>Sou;

+箒>Sou;

+箔>Haku;

+箕>Ki;

+算>San;

+箘>Kin;

+箙>Fuku;

+箚>Satsu;

+箜>Kou;

+箝>Kan;

+箟>Kin;

+管>Kan;

+箪>Tan;

+箭>Sen;

+箱>Shou;

+箴>Shin;

+箸>Cho;

+節>Setsu;

+篁>Kou;

+範>Han;

+篆>Ten;

+篇>Hen;

+築>Chiku;

+篋>Kyou;

+篌>Kou;

+篏>Kan;

+篝>Kou;

+篠>Shou;

+篤>Toku;

+篥>Ritsu;

+篦>Hei;

+篩>Shi;

+篭>Rou;

+篳>Hitsu;

+篶>En;

+篷>Hou;

+簀>Saku;

+簇>Sou;

+簍>Rou;

+簑>Sa;

+簒>San;

+簓>Sen;

+簔>Sa;

+簟>Ten;

+簡>Kan;

+簣>Ki;

+簧>Kou;

+簪>Shin;

+簫>Shou;

+簷>En;

+簸>Ha;

+簽>Sen;

+簾>Ren;

+簿>Bo;

+籀>Chuu;

+籃>Ran;

+籌>Chuu;

+籍>Seki;

+籐>Tou;

+籔>Su;

+籖>Sen;

+籘>Tou;

+籟>Rai;

+籠>Rou;

+籤>Sen;

+籥>Yaku;

+籬>Ri;

+米>Bei;

+粃>Hi;

+粉>Fun;

+粋>Sui;

+粐>Ro;

+粒>Ryuu;

+粕>Haku;

+粗>So;

+粘>Nen;

+粛>Shuku;

+粟>Zoku;

+粡>Tou;

+粢>Shi;

+粤>Etsu;

+粥>Shuku;

+粧>Shou;

+粫>Ji;

+粮>Ryou;

+粱>Ryou;

+粲>San;

+粳>Kou;

+粹>Sui;

+粽>Sou;

+精>Sei;

+糂>San;

+糅>Juu;

+糊>Ko;

+糒>Hi;

+糖>Tou;

+糜>Bi;

+糞>Fun;

+糟>Sou;

+糠>Kou;

+糢>Bo;

+糧>Ryou;

+糯>Da;

+糲>Rei;

+糴>Teki;

+糶>Chou;

+糸>Shi;

+糺>Kyuu;

+系>Kei;

+糾>Kyuu;

+紀>Ki;

+紂>Chuu;

+約>Yaku;

+紅>Ku;

+紆>U;

+紊>Bin;

+紋>Mon;

+納>Tou;

+紐>Chuu;

+純>Shun;

+紕>Hi;

+紗>Sa;

+紘>Kou;

+紙>Shi;

+級>Kyuu;

+紛>Fun;

+紜>Un;

+素>So;

+紡>Bou;

+索>Saku;

+紫>Shi;

+紬>Chuu;

+紮>Satsu;

+累>Rui;

+細>Sei;

+紲>Setsu;

+紳>Shin;

+紵>Cho;

+紹>Shou;

+紺>Kon;

+紿>Tai;

+終>Shuu;

+絃>Gen;

+組>So;

+絅>Kei;

+絆>Ban;

+絋>Kou;

+経>Kei;

+絎>Kou;

+絏>Setsu;

+結>Ketsu;

+絖>Kou;

+絛>Jou;

+絞>Kou;

+絡>Raku;

+絢>Ken;

+絣>Hou;

+給>Kyuu;

+絨>Juu;

+絮>Jo;

+統>Tou;

+絲>Shi;

+絳>Kou;

+絵>Kai;

+絶>Zetsu;

+絹>Ken;

+絽>Ryo;

+綉>Tou;

+綏>Sui;

+經>Kei;

+継>Kei;

+続>Zoku;

+綜>Sou;

+綟>Rei;

+綢>Chuu;

+綣>Ken;

+綫>Sen;

+綬>Ju;

+維>I;

+綮>Kei;

+綯>Tou;

+綰>Wan;

+綱>Kou;

+網>Mou;

+綴>Tei;

+綵>Sai;

+綸>Rin;

+綺>Ki;

+綻>Tan;

+綽>Shaku;

+綾>Ryou;

+綿>Men;

+緇>Shi;

+緊>Kin;

+緋>Hi;

+総>Sou;

+緑>Ryoku;

+緒>Sho;

+緘>Kan;

+線>Sen;

+緜>Ben;

+緝>Shuu;

+緞>Tan;

+締>Tei;

+緡>Bin;

+緤>Setsu;

+編>Hen;

+緩>Kan;

+緬>Men;

+緯>I;

+緲>Byou;

+練>Ren;

+緻>Chi;

+縁>En;

+縄>Jou;

+縉>Shin;

+縊>Ei;

+縋>Tsui;

+縒>Shi;

+縛>Baku;

+縞>Kou;

+縟>Joku;

+縡>Sai;

+縢>Tou;

+縣>Ken;

+縦>Juu;

+縫>Hou;

+縮>Shuku;

+縱>Juu;

+縲>Rui;

+縵>Ban;

+縷>Ru;

+縹>Hyou;

+縺>Ren;

+縻>Bi;

+總>Sou;

+績>Seki;

+繁>Han;

+繃>Hou;

+繆>Kyuu;

+繊>Sen;

+繋>Kei;

+繍>Shuu;

+織>Shoku;

+繕>Zen;

+繖>San;

+繙>Han;

+繚>Ryou;

+繝>Kan;

+繞>Jou;

+繦>Kyou;

+繧>Un;

+繩>Jou;

+繪>Kai;

+繭>Ken;

+繰>Sou;

+繹>Eki;

+繻>Ju;

+繼>Kei;

+繽>Hin;

+繿>Ran;

+纂>San;

+纈>Ketsu;

+纉>San;

+續>Zoku;

+纎>Sen;

+纏>Ten;

+纒>Ten;

+纓>Ei;

+纔>San;

+纖>Sen;

+纛>Tou;

+纜>Ran;

+缶>Kan;

+缸>Kou;

+缺>Ketsu;

+罅>Ka;

+罌>Ou;

+罍>Rai;

+罎>Tan;

+罐>Kan;

+网>Bou;

+罔>Bou;

+罕>Kan;

+罘>Fu;

+罟>Ko;

+罠>Bin;

+罧>Shin;

+罨>An;

+罩>Tou;

+罪>Zai;

+罫>Kei;

+置>Chi;

+罰>Batsu;

+署>Sho;

+罵>Ba;

+罷>Hi;

+罸>Batsu;

+罹>Ri;

+羂>Ken;

+羃>Beki;

+羅>Ra;

+羆>Hi;

+羇>Ki;

+羈>Ki;

+羊>You;

+羌>Kyou;

+美>Bi;

+羔>Kou;

+羚>Rei;

+羝>Tei;

+羞>Shuu;

+羣>Gun;

+群>Gun;

+羨>Sen;

+義>Gi;

+羮>Kou;

+羯>Katsu;

+羲>Gi;

+羶>Sen;

+羸>Rui;

+羹>Kou;

+羽>U;

+翁>Ou;

+翅>Shi;

+翆>Sui;

+翊>Yoku;

+翌>Yoku;

+習>Shuu;

+翔>Shou;

+翕>Kyuu;

+翠>Sui;

+翡>Hi;

+翦>Sen;

+翩>Hen;

+翫>Gan;

+翰>Kan;

+翳>Ei;

+翹>Gyou;

+翻>Hon;

+翼>Yoku;

+耀>You;

+老>Rou;

+考>Kou;

+耄>Mou;

+者>Sha;

+耆>Ki;

+耋>Tetsu;

+而>Ji;

+耐>Tai;

+耒>Rai;

+耕>Kou;

+耗>Mou;

+耘>Un;

+耙>Ha;

+耜>Shi;

+耡>Jo;

+耨>Dou;

+耳>Ji;

+耶>Ya;

+耻>Chi;

+耽>Tan;

+耿>Kou;

+聆>Rei;

+聊>Ryou;

+聒>Katsu;

+聖>Sei;

+聘>Hei;

+聚>Shuu;

+聞>Bun;

+聟>Sei;

+聡>Sou;

+聨>Ren;

+聯>Ren;

+聰>Sou;

+聲>Sei;

+聳>Shou;

+聴>Chou;

+聶>Jou;

+職>Shoku;

+聹>Dei;

+聽>Chou;

+聾>Rou;

+聿>Itsu;

+肄>I;

+肅>Shuku;

+肆>Shi;

+肇>Chou;

+肉>Niku;

+肋>Roku;

+肌>Ki;

+肓>Kou;

+肖>Shou;

+肘>Chuu;

+肚>To;

+肛>Kou;

+肝>Kan;

+股>Ko;

+肢>Shi;

+肥>Hi;

+肩>Ken;

+肪>Bou;

+肬>Yuu;

+肭>Dotsu;

+肯>Kou;

+肱>Kou;

+育>Iku;

+肴>Kou;

+肺>Hai;

+胃>I;

+胄>Chuu;

+胆>Tan;

+背>Hai;

+胎>Tai;

+胖>Han;

+胙>So;

+胚>Hai;

+胛>Kou;

+胝>Chi;

+胞>Hou;

+胡>Ko;

+胤>In;

+胥>Sho;

+胯>Ko;

+胱>Kou;

+胴>Dou;

+胸>Kyou;

+胼>Hen;

+能>Nou;

+脂>Shi;

+脅>Kyou;

+脆>Zei;

+脇>Kyou;

+脈>Myaku;

+脉>Myaku;

+脊>Seki;

+脚>Kyaku;

+脛>Kei;

+脣>Shin;

+脩>Shuu;

+脯>Ho;

+脱>Datsu;

+脳>Nou;

+脹>Chou;

+脾>Hi;

+腆>Ten;

+腋>Eki;

+腎>Jin;

+腐>Fu;

+腑>Fu;

+腓>Hi;

+腔>Kou;

+腕>Wan;

+腟>Chitsu;

+腥>Sei;

+腦>Nou;

+腫>Shou;

+腮>Sai;

+腰>You;

+腱>Ken;

+腴>Yu;

+腸>Chou;

+腹>Fuku;

+腺>Sen;

+腿>Tai;

+膀>Hou;

+膂>Ryo;

+膃>Otsu;

+膈>Kaku;

+膊>Haku;

+膏>Kou;

+膓>Chou;

+膕>Kaku;

+膚>Fu;

+膜>Maku;

+膝>Shitsu;

+膠>Kou;

+膣>Chitsu;

+膨>Bou;

+膩>Ji;

+膰>Han;

+膳>Sen;

+膵>Sui;

+膸>Zui;

+膺>You;

+膽>Tan;

+膾>Kai;

+膿>Dou;

+臀>Den;

+臂>Hi;

+臆>Oku;

+臈>Rou;

+臉>Ren;

+臍>Sei;

+臑>Dau;

+臓>Zou;

+臘>Rou;

+臙>En;

+臚>Ryo;

+臟>Zou;

+臠>Ren;

+臣>Shin;

+臥>Ga;

+臧>Zou;

+臨>Rin;

+自>Shi;

+臭>Shuu;

+至>Shi;

+致>Chi;

+臺>Tai;

+臻>Shin;

+臼>Kyuu;

+臾>Yu;

+舁>Yo;

+舂>Shou;

+舅>Kyuu;

+與>Yo;

+興>Kyou;

+舉>Kyo;

+舊>Kyuu;

+舌>Zetsu;

+舍>Sha;

+舎>Sha;

+舐>Shi;

+舒>Jo;

+舖>Ho;

+舗>Ho;

+舘>Kan;

+舛>Sen;

+舜>Shun;

+舞>Bu;

+舟>Shuu;

+舩>Sen;

+航>Kou;

+舫>Hou;

+般>Han;

+舮>Ro;

+舳>Chiku;

+舵>Ta;

+舶>Haku;

+舷>Ken;

+舸>Ka;

+船>Sen;

+艀>Fu;

+艇>Tei;

+艘>Sou;

+艙>Sou;

+艚>Sou;

+艟>Dou;

+艢>Shou;

+艤>Gi;

+艦>Kan;

+艨>Mou;

+艪>Ro;

+艫>Ro;

+艮>Kon;

+良>Ryou;

+艱>Kan;

+色>Shoku;

+艶>En;

+艷>En;

+艸>Sou;

+艾>Gai;

+芋>U;

+芍>Shaku;

+芒>Bou;

+芙>Fu;

+芝>Shi;

+芟>San;

+芥>Kai;

+芦>Ro;

+芫>Gen;

+芬>Fun;

+芭>Ba;

+芯>Shin;

+花>Ka;

+芳>Hou;

+芸>Gei;

+芹>Kin;

+芻>Suu;

+芽>Ga;

+苅>Gai;

+苑>En;

+苒>Zen;

+苓>Rei;

+苔>Tai;

+苗>Byou;

+苙>Ryuu;

+苛>Ka;

+苜>Boku;

+苞>Hou;

+苟>Kou;

+苡>I;

+苣>Kyo;

+若>Jaku;

+苦>Ku;

+苧>Cho;

+苫>Sen;

+英>Ei;

+苳>Tou;

+苴>So;

+苹>Hei;

+苺>Mai;

+苻>Fu;

+茂>Mo;

+范>Han;

+茄>Ka;

+茅>Bou;

+茆>Bou;

+茉>Matsu;

+茎>Kei;

+茖>Kaku;

+茗>Mei;

+茘>Ri;

+茜>Sen;

+茣>Go;

+茨>Shi;

+茫>Bou;

+茯>Fuku;

+茱>Shu;

+茲>Ji;

+茴>Kai;

+茵>In;

+茶>Cha;

+茸>Jou;

+茹>Jo;

+荀>Jun;

+荅>Tou;

+草>Sou;

+荊>Kei;

+荏>Jin;

+荐>Sen;

+荒>Kou;

+荘>Sou;

+荳>Tou;

+荵>Jin;

+荷>Ka;

+荻>Teki;

+荼>To;

+莅>Ri;

+莇>Cho;

+莉>Chi;

+莊>Sou;

+莎>Sa;

+莓>Mai;

+莖>Kei;

+莚>En;

+莞>Kan;

+莟>Kan;

+莠>Yuu;

+莢>Kyou;

+莨>Rou;

+莪>Ga;

+莫>Bo;

+莱>Rai;

+莵>To;

+莽>Bou;

+菁>Sei;

+菅>Kan;

+菊>Kiku;

+菌>Kin;

+菎>Kon;

+菓>Ka;

+菖>Shou;

+菘>Suu;

+菜>Sai;

+菟>To;

+菠>Ha;

+菩>Hai;

+菫>Kin;

+華>Ka;

+菰>Ko;

+菱>Ryou;

+菲>Hi;

+菴>An;

+菷>Sou;

+菻>Rin;

+菽>Shuku;

+萃>Sui;

+萄>Tou;

+萇>Chou;

+萋>Sei;

+萌>Hou;

+萍>Hei;

+萎>I;

+萓>Gi;

+萠>Hou;

+萩>Shuu;

+萪>Kuwa;

+萬>Man;

+萱>Ken;

+萵>Wa;

+萸>Yu;

+萼>Gaku;

+落>Raku;

+葆>Ho;

+葉>You;

+葎>Ritsu;

+著>Cho;

+葛>Katsu;

+葡>Ho;

+葢>Gai;

+董>Tou;

+葦>I;

+葩>Ha;

+葫>Ko;

+葬>Sou;

+葭>Ka;

+葮>Tan;

+葯>Yaku;

+葱>Sou;

+葵>Ki;

+葷>Gun;

+葹>Shi;

+葺>Shuu;

+蒂>Tei;

+蒄>Kan;

+蒋>Shou;

+蒐>Shuu;

+蒔>Shi;

+蒙>Bou;

+蒜>San;

+蒟>Kon;

+蒡>Hou;

+蒭>Suu;

+蒲>Ho;

+蒸>Jou;

+蒹>Ken;

+蒻>Jaku;

+蒼>Sou;

+蒿>Kou;

+蓁>Shin;

+蓄>Chiku;

+蓆>Seki;

+蓉>You;

+蓊>Ou;

+蓋>Gai;

+蓍>Shi;

+蓐>Joku;

+蓑>Sa;

+蓖>Hi;

+蓚>Chou;

+蓬>Hou;

+蓮>Ren;

+蓴>Shun;

+蓼>Ryou;

+蓿>Shuku;

+蔀>Hou;

+蔆>Ryou;

+蔑>Betsu;

+蔓>Ban;

+蔔>Fuku;

+蔕>Tei;

+蔗>Sho;

+蔘>Shin;

+蔚>Utsu;

+蔟>Zoku;

+蔡>Sai;

+蔦>Chou;

+蔬>So;

+蔭>In;

+蔵>Zou;

+蔽>Hei;

+蕀>Kyoku;

+蕁>Jin;

+蕃>Ban;

+蕈>Shin;

+蕉>Shou;

+蕊>Zui;

+蕋>Zui;

+蕎>Kyou;

+蕕>Yuu;

+蕗>Ro;

+蕘>Jou;

+蕚>Gaku;

+蕣>Shun;

+蕨>Ketsu;

+蕩>Tou;

+蕪>Bu;

+蕭>Shou;

+蕷>Yo;

+蕾>Rai;

+薀>Un;

+薄>Haku;

+薇>Bi;

+薈>Kai;

+薊>Kei;

+薐>Rou;

+薑>Kyou;

+薔>Shoku;

+薗>En;

+薙>Tei;

+薛>Setsu;

+薜>Heki;

+薤>Kai;

+薦>Sen;

+薨>Kou;

+薩>Satsu;

+薪>Shin;

+薫>Kun;

+薬>Yaku;

+薮>Sou;

+薯>Sho;

+薹>Tai;

+薺>Sei;

+藁>Kou;

+藉>Sha;

+藍>Ran;

+藏>Zou;

+藐>Baku;

+藕>Guu;

+藜>Rei;

+藝>Gei;

+藤>Tou;

+藥>Yaku;

+藩>Han;

+藪>Sou;

+藷>Sho;

+藹>Ai;

+藺>Rin;

+藻>Sou;

+藾>Rai;

+蘂>Zui;

+蘆>Ro;

+蘇>So;

+蘊>Un;

+蘋>Hin;

+蘓>So;

+蘖>Getsu;

+蘗>Haku;

+蘚>Sen;

+蘢>Rou;

+蘭>Ran;

+蘯>Tou;

+蘿>Ra;

+虍>Ko;

+虎>Ko;

+虐>Gyaku;

+虔>Ken;

+處>Sho;

+虚>Kyo;

+虜>Ryo;

+虞>Gu;

+號>Gou;

+虧>Ki;

+虫>Chuu;

+虱>Shitsu;

+虹>Kou;

+虻>Bou;

+蚊>Bun;

+蚋>Zei;

+蚌>Hou;

+蚓>In;

+蚕>San;

+蚣>Kou;

+蚤>Sou;

+蚩>Shi;

+蚪>Tou;

+蚫>Hou;

+蚯>Kyuu;

+蚰>Yuu;

+蚶>Kan;

+蛄>Ko;

+蛆>Sho;

+蛇>Ja;

+蛉>Rei;

+蛋>Tan;

+蛍>Kei;

+蛎>Rei;

+蛔>Kai;

+蛙>A;

+蛛>Shu;

+蛞>Katsu;

+蛟>Kou;

+蛤>Kou;

+蛩>Kyou;

+蛬>Kyou;

+蛭>Shitsu;

+蛮>Ban;

+蛸>Sou;

+蛹>You;

+蛻>Zei;

+蛾>Ga;

+蜀>Shoku;

+蜂>Hou;

+蜃>Shin;

+蜆>Ken;

+蜈>Go;

+蜉>Fu;

+蜊>Ri;

+蜍>Sho;

+蜑>Tan;

+蜒>En;

+蜘>Chi;

+蜚>Hi;

+蜜>Mitsu;

+蜥>Seki;

+蜩>Chou;

+蜴>Eki;

+蜷>Ken;

+蜻>Sei;

+蜿>En;

+蝉>Sen;

+蝋>Rou;

+蝌>Ka;

+蝎>Katsu;

+蝓>Yu;

+蝕>Shoku;

+蝗>Kou;

+蝙>Hen;

+蝟>I;

+蝠>Fuku;

+蝣>Yuu;

+蝦>Ka;

+蝨>Shitsu;

+蝪>Tou;

+蝮>Fuku;

+蝴>Ko;

+蝶>Chou;

+蝸>Ka;

+蝿>You;

+螂>Rou;

+融>Yuu;

+螟>Mei;

+螢>Kei;

+螫>Seki;

+螯>Gou;

+螳>Tou;

+螺>Ra;

+螻>Rou;

+螽>Shuu;

+蟀>Shutsu;

+蟄>Chitsu;

+蟆>Ba;

+蟇>Ba;

+蟋>Shitsu;

+蟐>Tou;

+蟒>Bou;

+蟠>Han;

+蟯>Gyou;

+蟲>Ki;

+蟶>Tei;

+蟷>Tou;

+蟹>Kai;

+蟻>Gi;

+蟾>Sen;

+蠅>You;

+蠍>Katsu;

+蠎>Bou;

+蠏>Kai;

+蠑>Ei;

+蠕>Da;

+蠖>Kaku;

+蠡>Rei;

+蠢>Shun;

+蠣>Rei;

+蠧>To;

+蠱>Ko;

+蠶>San;

+蠹>To;

+蠻>Ban;

+血>Ketsu;

+衂>Jiku;

+衄>Jiku;

+衆>Shuu;

+行>Kou;

+衍>En;

+衒>Ken;

+術>Jutsu;

+街>Gai;

+衙>Gyo;

+衛>Ei;

+衝>Shou;

+衞>Ei;

+衡>Kou;

+衢>Ku;

+衣>I;

+表>Hyou;

+衫>San;

+衰>Sa;

+衲>Dou;

+衵>Jitsu;

+衷>Chuu;

+衽>Jin;

+衾>Kin;

+衿>Kin;

+袁>En;

+袂>Bei;

+袈>Ka;

+袋>Tai;

+袍>Hou;

+袒>Tan;

+袖>Shuu;

+袗>Shin;

+袙>Ha;

+袞>Kon;

+袢>Han;

+袤>Bou;

+被>Hi;

+袮>Ne;

+袱>Fuku;

+袴>Ko;

+袵>Jin;

+袷>Kou;

+袿>Kei;

+裁>Sai;

+裂>Retsu;

+装>Sou;

+裏>Ri;

+裔>Ei;

+裕>Yuu;

+裘>Kyuu;

+裙>Kun;

+補>Ho;

+裝>Sou;

+裟>Sa;

+裡>Ri;

+裨>Hi;

+裲>Ryou;

+裳>Shou;

+裴>Hai;

+裸>Ra;

+裹>Ka;

+裼>Seki;

+製>Sei;

+裾>Kyo;

+褂>Kai;

+複>Fuku;

+褊>Hen;

+褌>Kon;

+褐>Katsu;

+褒>Hou;

+褓>Ho;

+褝>Tan;

+褞>On;

+褥>Joku;

+褪>Tai;

+褫>Chi;

+褶>Chou;

+褸>Rou;

+褻>Setsu;

+襁>Kyou;

+襃>Hou;

+襄>Jou;

+襌>Tan;

+襍>Zatsu;

+襖>Ou;

+襞>Heki;

+襟>Kin;

+襠>Tou;

+襤>Ran;

+襦>Ju;

+襪>Betsu;

+襭>Ketsu;

+襯>Shin;

+襲>Shuu;

+襴>Ran;

+襾>Aka;

+西>Sei;

+要>You;

+覃>Tan;

+覆>Fuku;

+覇>Ha;

+覈>Kaku;

+覊>Ki;

+見>Ken;

+規>Ki;

+覓>Beki;

+視>Shi;

+覗>Shi;

+覘>Ten;

+覚>Kaku;

+覡>Geki;

+覦>Yu;

+覧>Ran;

+覩>To;

+親>Shin;

+覬>Ki;

+覯>Kou;

+覲>Kin;

+観>Kan;

+覺>Kaku;

+覽>Ran;

+覿>Teki;

+觀>Kan;

+角>Kaku;

+觚>Ko;

+觜>Shi;

+觝>Tei;

+解>Kai;

+触>Shoku;

+觧>Kai;

+觴>Shou;

+觸>Shoku;

+言>Gen;

+訂>Tei;

+訃>Fu;

+計>Kei;

+訊>Jin;

+訌>Kou;

+討>Tou;

+訐>Ketsu;

+訓>Kun;

+訖>Kitsu;

+託>Taku;

+記>Ki;

+訛>Ka;

+訝>Ga;

+訟>Shou;

+訣>Ketsu;

+訥>Totsu;

+訪>Hou;

+設>Setsu;

+許>Kyo;

+訳>Yaku;

+訴>So;

+訶>Ka;

+診>Shin;

+註>Chuu;

+証>Shou;

+詁>Ko;

+詆>Tei;

+詈>Ri;

+詐>Sa;

+詑>Ta;

+詒>Tai;

+詔>Shou;

+評>Hyou;

+詛>So;

+詞>Shi;

+詠>Ei;

+詢>Jun;

+詣>Kei;

+試>Shi;

+詩>Shi;

+詫>Ta;

+詬>Kou;

+詭>Ki;

+詮>Sen;

+詰>Kitsu;

+話>Wa;

+該>Gai;

+詳>Shou;

+詼>Kai;

+誂>Chou;

+誄>Rui;

+誅>Chuu;

+誇>Ko;

+誉>Yo;

+誌>Shi;

+認>Nin;

+誑>Kyou;

+誓>Sei;

+誕>Tan;

+誘>Yuu;

+誚>Shou;

+語>Go;

+誠>Sei;

+誡>Kai;

+誣>Fu;

+誤>Go;

+誥>Kou;

+誦>Shou;

+誨>Kai;

+説>Setsu;

+読>Toku;

+誰>Sui;

+課>Ka;

+誹>Hi;

+誼>Gi;

+調>Chou;

+諂>Ten;

+諄>Jun;

+談>Dan;

+請>Sei;

+諌>Kan;

+諍>Sou;

+諏>Shu;

+諒>Ryou;

+論>Ron;

+諚>Jou;

+諛>Yu;

+諜>Chou;

+諞>Hen;

+諠>Ken;

+諡>Shi;

+諢>Kon;

+諤>Gaku;

+諦>Tei;

+諧>Kai;

+諫>Kan;

+諭>Yu;

+諮>Shi;

+諱>Ki;

+諳>An;

+諷>Fuu;

+諸>Sho;

+諺>Gen;

+諾>Daku;

+謀>Bou;

+謁>Etsu;

+謂>I;

+謄>Tou;

+謇>Ken;

+謌>Ka;

+謎>Mei;

+謐>Hitsu;

+謔>Gyaku;

+謖>Shoku;

+謗>Bou;

+謙>Ken;

+謚>Shi;

+講>Kou;

+謝>Sha;

+謠>You;

+謡>You;

+謦>Kei;

+謨>Bo;

+謫>Taku;

+謬>Byou;

+謳>Ou;

+謹>Kin;

+謾>Ban;

+譁>Ka;

+證>Shou;

+譌>Ka;

+譎>Kitsu;

+譏>Ki;

+譖>Shin;

+識>Shiki;

+譚>Tan;

+譛>Shin;

+譜>Fu;

+譟>Sou;

+警>Kei;

+譫>Sen;

+譬>Hi;

+譯>Yaku;

+議>Gi;

+譱>Zen;

+譲>Jou;

+譴>Ken;

+護>Go;

+譽>Yo;

+讀>Toku;

+讃>San;

+變>Hen;

+讌>En;

+讎>Shuu;

+讐>Shuu;

+讒>San;

+讓>Jou;

+讖>Shin;

+讙>Kan;

+讚>San;

+谷>Koku;

+谺>Ka;

+谿>Kei;

+豁>Katsu;

+豆>Tou;

+豈>Ki;

+豊>Hou;

+豌>En;

+豎>Ju;

+豐>Hou;

+豕>Shi;

+豚>Ton;

+象>Shou;

+豢>Ken;

+豪>Gou;

+豫>Yo;

+豬>Cho;

+豸>Chi;

+豹>Hou;

+豺>Sai;

+豼>Hi;

+貂>Chou;

+貅>Kyuu;

+貉>Kaku;

+貊>Haku;

+貌>Bou;

+貍>Ri;

+貎>Gei;

+貔>Hi;

+貘>Baku;

+貝>Bai;

+貞>Tei;

+負>Fu;

+財>Zai;

+貢>Kou;

+貧>Hin;

+貨>Ka;

+販>Han;

+貪>Don;

+貫>Kan;

+責>Seki;

+貭>Shitsu;

+貮>Ni;

+貯>Cho;

+貰>Sei;

+貲>Shi;

+貳>Ni;

+貴>Ki;

+貶>Hen;

+買>Bai;

+貸>Tai;

+費>Hi;

+貼>Ten;

+貽>I;

+貿>Bou;

+賀>Ga;

+賁>Hi;

+賂>Ro;

+賃>Chin;

+賄>Wai;

+資>Shi;

+賈>Ko;

+賊>Zoku;

+賍>Sou;

+賎>Sen;

+賑>Shin;

+賓>Hin;

+賚>Rai;

+賛>San;

+賜>Shi;

+賞>Shou;

+賠>Bai;

+賢>Ken;

+賣>Bai;

+賤>Sen;

+賦>Fu;

+質>Shitsu;

+賭>To;

+賺>Tan;

+賻>Fu;

+購>Kou;

+賽>Sai;

+贄>Shi;

+贅>Zei;

+贇>In;

+贈>Zou;

+贊>San;

+贋>Gan;

+贍>Sen;

+贏>Ei;

+贐>Shin;

+贓>Zou;

+贔>Hi;

+贖>Shoku;

+赤>Seki;

+赦>Sha;

+赧>Tan;

+赫>Kaku;

+赭>Sha;

+走>Sou;

+赱>Sou;

+赳>Kyuu;

+赴>Fu;

+起>Ki;

+趁>Chin;

+超>Chou;

+越>Etsu;

+趙>Chou;

+趣>Shu;

+趨>Suu;

+足>Soku;

+趺>Fu;

+趾>Shi;

+跂>Ki;

+跋>Batsu;

+跌>Tetsu;

+跏>Ka;

+跖>Seki;

+跚>San;

+跛>Ha;

+距>Kyo;

+跟>Kon;

+跡>Seki;

+跣>Sen;

+跨>Ko;

+跪>Ki;

+跫>Kyou;

+路>Ro;

+跳>Chou;

+践>Sen;

+跼>Kyoku;

+跿>To;

+踈>Sho;

+踉>Ryou;

+踊>You;

+踏>Tou;

+踐>Sen;

+踝>Ka;

+踞>Kyo;

+踟>Chi;

+踪>Shou;

+踰>Yu;

+踴>You;

+踵>Shou;

+蹂>Juu;

+蹄>Tei;

+蹇>Ken;

+蹈>Tou;

+蹉>Sa;

+蹊>Kei;

+蹌>Shou;

+蹐>Seki;

+蹕>Hitsu;

+蹙>Shuku;

+蹟>Seki;

+蹠>Seki;

+蹣>Man;

+蹤>Shou;

+蹲>Son;

+蹴>Shuu;

+蹶>Ketsu;

+蹼>Boku;

+躁>Sou;

+躄>Heki;

+躅>Choku;

+躇>Cho;

+躊>Chuu;

+躋>Sei;

+躍>Yaku;

+躑>Teki;

+躓>Chi;

+躔>Ten;

+躙>Rin;

+躡>Jou;

+躪>Rin;

+身>Shin;

+躬>Kyuu;

+躯>Ku;

+躰>Tei;

+躱>Ta;

+軆>Tei;

+車>Sha;

+軋>Atsu;

+軌>Ki;

+軍>Gun;

+軒>Ken;

+軛>Aku;

+軟>Nan;

+転>Ten;

+軣>Gou;

+軫>Shin;

+軸>Jiku;

+軻>Ka;

+軼>Itsu;

+軽>Kei;

+軾>Shoku;

+較>Kaku;

+輅>Ro;

+載>Sai;

+輊>Chi;

+輌>Ryou;

+輒>Chou;

+輓>Ban;

+輔>Fu;

+輕>Kei;

+輙>Chou;

+輛>Ryou;

+輜>Shi;

+輝>Ki;

+輟>Tetsu;

+輦>Ren;

+輩>Hai;

+輪>Rin;

+輯>Shuu;

+輳>Sou;

+輸>Yu;

+輹>Fuku;

+輻>Fuku;

+輾>Ten;

+輿>Yo;

+轂>Koku;

+轄>Katsu;

+轅>En;

+轆>Roku;

+轉>Ten;

+轍>Tetsu;

+轎>Kyou;

+轗>Kan;

+轜>Ji;

+轟>Gou;

+轡>Hi;

+轢>Reki;

+轣>Reki;

+轤>Ro;

+辛>Shin;

+辜>Ko;

+辞>Ji;

+辟>Heki;

+辣>Ratsu;

+辧>Ben;

+辨>Ben;

+辭>Ji;

+辮>Hen;

+辯>Ben;

+辰>Shin;

+辱>Joku;

+農>Nou;

+辺>Hen;

+辿>Ten;

+迂>U;

+迄>Kitsu;

+迅>Jin;

+迎>Gei;

+近>Kin;

+返>Hen;

+迢>Chou;

+迥>Kei;

+迦>Ka;

+迩>Ji;

+迪>Teki;

+迫>Haku;

+迭>Tetsu;

+迯>Tou;

+述>Jutsu;

+迴>Kai;

+迷>Mei;

+迸>Hou;

+迹>Seki;

+迺>Dai;

+追>Tsui;

+退>Tai;

+送>Sou;

+逃>Tou;

+逅>Kou;

+逆>Gyaku;

+逋>Ho;

+逍>Shou;

+逎>Shuu;

+透>Tou;

+逐>Chiku;

+逑>Kyuu;

+逓>Tei;

+途>To;

+逕>Kei;

+逖>Teki;

+逗>Tou;

+這>Gen;

+通>Ts;

+逝>Sei;

+逞>Tei;

+速>Soku;

+造>Zou;

+逡>Shun;

+逢>Hou;

+連>Ren;

+逮>Tai;

+週>Shuu;

+進>Shin;

+逵>Ki;

+逶>I;

+逸>Itsu;

+逹>Tatsu;

+逼>Hitsu;

+逾>Yu;

+遁>Ton;

+遂>Sui;

+遅>Chi;

+遇>Guu;

+遉>Tei;

+遊>Yuu;

+運>Un;

+遍>Hen;

+過>Ka;

+遏>Atsu;

+遐>Ka;

+遑>Kou;

+遒>Shuu;

+道>Dou;

+達>Tatsu;

+違>I;

+遘>Kou;

+遙>You;

+遜>Son;

+遞>Tei;

+遠>En;

+遡>So;

+遣>Ken;

+遥>You;

+遨>Gou;

+適>Teki;

+遭>Sou;

+遮>Sha;

+遯>Ton;

+遲>Chi;

+遵>Jun;

+遶>Jou;

+遷>Sen;

+選>Sen;

+遺>I;

+遼>Ryou;

+遽>Kyo;

+避>Hi;

+邀>You;

+邁>Bai;

+邂>Kai;

+邃>Sui;

+還>Kan;

+邇>Ji;

+邉>Hen;

+邊>Hen;

+邏>Ra;

+邑>Yuu;

+那>Da;

+邦>Hou;

+邨>Son;

+邪>Ya;

+邯>Kan;

+邱>Kyuu;

+邵>Shou;

+邸>Tei;

+郁>Iku;

+郊>Kou;

+郎>Rou;

+郛>Fu;

+郡>Gun;

+郢>Ei;

+郤>Geki;

+部>Bu;

+郭>Kaku;

+郵>Yuu;

+郷>Kyou;

+都>To;

+鄂>Gaku;

+鄒>Suu;

+鄙>Hi;

+鄭>Tei;

+鄰>Rin;

+鄲>Tan;

+酉>Yuu;

+酊>Tei;

+酋>Shuu;

+酌>Shaku;

+配>Hai;

+酎>Chuu;

+酒>Shu;

+酔>Sui;

+酖>Tan;

+酘>Tou;

+酢>Saku;

+酣>Kan;

+酥>So;

+酩>Mei;

+酪>Raku;

+酬>Shuu;

+酲>Tei;

+酳>In;

+酵>Kou;

+酷>Koku;

+酸>San;

+醂>Rin;

+醇>Shun;

+醉>Sui;

+醋>Saku;

+醍>Tei;

+醐>Ko;

+醒>Sei;

+醗>Hatsu;

+醜>Shuu;

+醢>Kai;

+醤>Shou;

+醪>Rou;

+醫>I;

+醯>Kei;

+醴>Rei;

+醵>Kyo;

+醸>Jou;

+醺>Kun;

+釀>Jou;

+釁>Kin;

+釆>Han;

+采>Sai;

+釈>Shaku;

+釉>Yuu;

+釋>Shaku;

+里>Ri;

+重>Chou;

+野>Ya;

+量>Ryou;

+釐>Ri;

+金>Kin;

+釖>Tou;

+釘>Tei;

+釛>Koku;

+釜>Fu;

+針>Shin;

+釟>Hatsu;

+釡>Fu;

+釣>Chou;

+釦>Kou;

+釧>Sen;

+釵>Sa;

+釶>Shi;

+釼>Ken;

+釿>Kin;

+鈍>Don;

+鈎>Kou;

+鈑>Han;

+鈔>Shou;

+鈕>Chuu;

+鈞>Kin;

+鈩>Ro;

+鈬>Taku;

+鈴>Rei;

+鈷>Ko;

+鈿>Ten;

+鉄>Tetsu;

+鉅>Kyo;

+鉈>Sha;

+鉉>Ken;

+鉋>Hou;

+鉐>Seki;

+鉗>Kan;

+鉚>Ryuu;

+鉛>En;

+鉞>Etsu;

+鉢>Hachi;

+鉤>Kou;

+鉦>Sei;

+鉱>Kou;

+鉾>Bou;

+銀>Gin;

+銃>Juu;

+銅>Dou;

+銑>Sen;

+銓>Sen;

+銕>Tetsu;

+銖>Shu;

+銘>Mei;

+銚>You;

+銛>Sen;

+銜>Kan;

+銭>Sen;

+銷>Shou;

+銹>Shuu;

+鋏>Kyou;

+鋒>Hou;

+鋤>Jo;

+鋩>Bou;

+鋪>Ho;

+鋭>Ei;

+鋳>Chuu;

+鋸>Kyo;

+鋺>En;

+鋼>Kou;

+錆>Sei;

+錏>A;

+錐>Sui;

+錘>Tsui;

+錙>Shi;

+錚>Sou;

+錠>Jou;

+錢>Sen;

+錣>Tei;

+錦>Kin;

+錨>Byou;

+錫>Seki;

+錬>Ren;

+錮>Ko;

+錯>Saku;

+録>Roku;

+錻>Bu;

+鍄>Kei;

+鍋>Ka;

+鍍>To;

+鍔>Gaku;

+鍖>Chin;

+鍛>Tan;

+鍜>Ka;

+鍠>Kou;

+鍬>Shuu;

+鍮>Chuu;

+鍵>Ken;

+鍼>Shin;

+鍾>Shou;

+鎌>Ren;

+鎔>You;

+鎖>Sa;

+鎗>Sou;

+鎚>Tsui;

+鎧>Gai;

+鎬>Kou;

+鎭>Chin;

+鎮>Chin;

+鎰>Itsu;

+鏃>Zoku;

+鏈>Ren;

+鏐>Ryuu;

+鏑>Teki;

+鏖>Ou;

+鏗>Kou;

+鏘>Shou;

+鏝>Man;

+鏡>Kyou;

+鏤>Rou;

+鏥>Shuu;

+鏨>San;

+鐃>Dou;

+鐇>Han;

+鐐>Ryou;

+鐓>Tai;

+鐔>Shin;

+鐘>Shou;

+鐙>Tou;

+鐚>A;

+鐡>Tetsu;

+鐫>Sen;

+鐵>Tetsu;

+鐶>Kan;

+鐸>Taku;

+鐺>Tou;

+鑁>Ban;

+鑄>Chuu;

+鑑>Kan;

+鑒>Kan;

+鑚>San;

+鑛>Kou;

+鑞>Rou;

+鑠>Shaku;

+鑢>Ryo;

+鑪>Ro;

+鑰>Yaku;

+鑵>Kan;

+鑷>Jou;

+鑼>Ra;

+鑽>San;

+鑾>Ran;

+鑿>Saku;

+钁>Kaku;

+長>Chou;

+門>Mon;

+閂>San;

+閃>Sen;

+閇>Hei;

+閉>Hei;

+開>Kai;

+閏>Jun;

+閑>Kan;

+間>Kan;

+閔>Bin;

+閘>Kou;

+閙>Tou;

+関>Kan;

+閣>Kaku;

+閤>Kou;

+閥>Batsu;

+閧>Kou;

+閨>Kei;

+閭>Ro;

+閲>Etsu;

+閹>En;

+閻>En;

+閼>A;

+閾>Yoku;

+闃>Geki;

+闇>An;

+闊>Katsu;

+闌>Ran;

+闍>To;

+闔>Kou;

+闕>Ketsu;

+闖>Chin;

+闘>Tou;

+關>Kan;

+闡>Sen;

+闢>Heki;

+闥>Tatsu;

+阜>Fu;

+阡>Sen;

+阨>Aku;

+阪>Han;

+阮>Gen;

+阯>Shi;

+防>Bou;

+阻>So;

+阿>A;

+陀>Da;

+陂>Ha;

+附>Fu;

+陋>Rou;

+陌>Haku;

+降>Kou;

+陏>Ta;

+限>Gen;

+陛>Hei;

+陜>Kou;

+陝>Sen;

+陞>Shou;

+陟>Choku;

+院>In;

+陣>Jin;

+除>Jo;

+陥>Kan;

+陦>Tou;

+陪>Bai;

+陬>Suu;

+陰>In;

+陲>Sui;

+陳>Chin;

+陵>Ryou;

+陶>Tou;

+陷>Kan;

+陸>Riku;

+険>Ken;

+陽>You;

+隅>Guu;

+隆>Ryuu;

+隈>Wai;

+隊>Tai;

+隋>Ta;

+隍>Kou;

+階>Kai;

+随>Zui;

+隔>Kaku;

+隕>In;

+隗>Kai;

+隘>Ai;

+隙>Geki;

+際>Sai;

+障>Shou;

+隠>In;

+隣>Rin;

+隧>Sui;

+隨>Zui;

+險>Ken;

+隰>Shitsu;

+隱>In;

+隲>Shitsu;

+隴>Rou;

+隶>Tai;

+隷>Rei;

+隸>Rei;

+隹>Sui;

+隻>Seki;

+隼>Jun;

+雀>Jaku;

+雁>Gan;

+雄>Yuu;

+雅>Ga;

+集>Shuu;

+雇>Ko;

+雉>Chi;

+雋>Sen;

+雌>Shi;

+雍>You;

+雎>Sho;

+雑>Zatsu;

+雕>Chou;

+雖>Sui;

+雙>Sou;

+雛>Suu;

+雜>Zatsu;

+離>Ri;

+難>Nan;

+雨>U;

+雪>Setsu;

+雫>Da;

+雰>Fun;

+雲>Un;

+零>Rei;

+雷>Rai;

+雹>Haku;

+電>Den;

+需>Ju;

+霄>Shou;

+霆>Tei;

+震>Shin;

+霈>Hai;

+霊>Rei;

+霍>Kaku;

+霎>Sou;

+霏>Hi;

+霑>Ten;

+霓>Gei;

+霖>Rin;

+霙>Ei;

+霜>Sou;

+霞>Ka;

+霤>Ryuu;

+霧>Mu;

+霪>In;

+霰>San;

+露>Ro;

+霸>Haku;

+霹>Heki;

+霽>Sei;

+霾>Bai;

+靂>Reki;

+靄>Ai;

+靆>Tai;

+靈>Rei;

+靉>Ai;

+青>Sei;

+靖>Sei;

+静>Sei;

+靜>Sei;

+非>Hi;

+靠>Kou;

+靡>Hi;

+面>Men;

+靤>Hou;

+靦>Ten;

+靨>You;

+革>Kaku;

+靫>Sai;

+靭>Jin;

+靱>Jin;

+靴>Ka;

+靹>Ketsu;

+靺>Matsu;

+靼>Tan;

+鞁>Hi;

+鞄>Hou;

+鞅>Ou;

+鞋>Ai;

+鞍>An;

+鞏>Kyou;

+鞘>Sou;

+鞜>Tou;

+鞠>Kiku;

+鞣>Juu;

+鞦>Shuu;

+鞨>Katsu;

+鞫>Kiku;

+鞭>Hen;

+鞳>Tou;

+鞴>Fuku;

+韃>Datsu;

+韆>Sen;

+韈>Betsu;

+韋>I;

+韓>Kan;

+韜>Tou;

+韭>Kyuu;

+韮>Kyou;

+韲>Sei;

+音>On;

+韵>In;

+韶>Shou;

+韻>In;

+響>Kyou;

+頁>Ketsu;

+頂>Chou;

+頃>Kei;

+項>Kou;

+順>Jun;

+須>Shu;

+頌>Shou;

+頏>Kou;

+預>Yo;

+頑>Gan;

+頒>Han;

+頓>Ton;

+頗>Ha;

+領>Ryou;

+頚>Kei;

+頡>Kitsu;

+頤>I;

+頬>Kyou;

+頭>Tou;

+頴>Ei;

+頷>Kan;

+頸>Kei;

+頻>Hin;

+頼>Rai;

+頽>Tai;

+顆>Ka;

+顋>Sai;

+題>Dai;

+額>Gaku;

+顎>Gaku;

+顏>Gan;

+顔>Gan;

+顕>Ken;

+願>Gan;

+顛>Ten;

+類>Rui;

+顧>Ko;

+顫>Sen;

+顯>Ken;

+顰>Hin;

+顱>Ro;

+顳>Shou;

+顴>Kan;

+風>Fuu;

+颯>Satsu;

+颱>Tai;

+颶>Ku;

+飃>Hyou;

+飄>Hyou;

+飆>Hyou;

+飛>Hi;

+飜>Hon;

+食>Shoku;

+飢>Ki;

+飩>Ton;

+飫>Yo;

+飭>Choku;

+飮>In;

+飯>Han;

+飲>In;

+飴>I;

+飼>Shi;

+飽>Hou;

+飾>Shoku;

+餃>Kou;

+餅>Hei;

+餉>Shou;

+養>You;

+餌>Ji;

+餐>San;

+餒>Dai;

+餓>Ga;

+餔>Ho;

+餘>Yo;

+餝>Shoku;

+餞>Sen;

+餠>Hei;

+餡>Kan;

+餤>Tan;

+館>Kan;

+餬>Ko;

+餮>Tetsu;

+餽>Ki;

+餾>Ryuu;

+饂>Un;

+饅>Man;

+饉>Kin;

+饋>Ki;

+饌>Sen;

+饐>I;

+饑>Ki;

+饒>Jou;

+饕>Tou;

+饗>Kyou;

+首>Shu;

+馗>Ki;

+馘>Kaku;

+香>Kou;

+馥>Fuku;

+馨>Kei;

+馬>Ba;

+馭>Gyo;

+馮>Hyou;

+馳>Chi;

+馴>Shun;

+馼>Bun;

+駁>Baku;

+駄>Ta;

+駅>Eki;

+駆>Ku;

+駈>Ku;

+駐>Chuu;

+駑>Do;

+駒>Ku;

+駕>Ga;

+駘>Tai;

+駛>Shi;

+駝>Ta;

+駟>Shi;

+駢>Hen;

+駭>Kai;

+駮>Haku;

+駱>Raku;

+駸>Shin;

+駻>Kan;

+駿>Shun;

+騁>Tei;

+騅>Sui;

+騎>Ki;

+騏>Ki;

+騒>Sou;

+験>Ken;

+騙>Hen;

+騨>Tan;

+騫>Ken;

+騰>Tou;

+騷>Sou;

+騾>Ra;

+驀>Baku;

+驂>San;

+驃>Hyou;

+驅>Ku;

+驍>Gyou;

+驕>Kyou;

+驗>Ken;

+驚>Kyou;

+驛>Eki;

+驟>Shuu;

+驢>Ryo;

+驤>Jou;

+驥>Ki;

+驩>Kan;

+驪>Ri;

+驫>Hyuu;

+骨>Kotsu;

+骭>Kan;

+骰>Tou;

+骸>Kai;

+骼>Kaku;

+髀>Hi;

+髄>Zui;

+髏>Rou;

+髑>Toku;

+髓>Zui;

+體>Tei;

+高>Kou;

+髞>Sou;

+髟>Hyou;

+髢>Tei;

+髣>Hou;

+髦>Bou;

+髪>Hatsu;

+髫>Chou;

+髭>Shi;

+髮>Hatsu;

+髯>Zen;

+髱>Hou;

+髴>Futsu;

+髷>Kyoku;

+髻>Kei;

+鬆>Shou;

+鬘>Ban;

+鬚>Shu;

+鬟>Kan;

+鬢>Hin;

+鬣>Ryou;

+鬥>Tou;

+鬧>Tou;

+鬨>Kou;

+鬩>Geki;

+鬪>Tou;

+鬮>Kyuu;

+鬯>Chou;

+鬱>Utsu;

+鬲>Reki;

+鬻>Shuku;

+鬼>Ki;

+魁>Kai;

+魂>Kon;

+魃>Batsu;

+魄>Haku;

+魅>Mi;

+魍>Bou;

+魎>Ryou;

+魏>Gi;

+魑>Chi;

+魔>Ma;

+魘>En;

+魚>Gyo;

+魯>Ro;

+魴>Hou;

+鮃>Hyou;

+鮎>Nen;

+鮑>Hou;

+鮒>Fu;

+鮓>Sa;

+鮟>An;

+鮠>Gai;

+鮨>Shi;

+鮪>I;

+鮫>Kou;

+鮭>Kei;

+鮮>Sen;

+鮹>Sou;

+鯀>Kon;

+鯆>Ho;

+鯉>Ri;

+鯊>Sa;

+鯔>Shi;

+鯖>Sei;

+鯛>Chou;

+鯡>Hi;

+鯢>Gei;

+鯣>Eki;

+鯤>Kon;

+鯨>Gei;

+鯰>Nen;

+鯵>Sou;

+鰄>I;

+鰆>Shun;

+鰈>Chou;

+鰉>Kou;

+鰊>Ren;

+鰌>Shuu;

+鰍>Shuu;

+鰐>Gaku;

+鰒>Fuku;

+鰓>Sai;

+鰔>Kan;

+鰕>Ka;

+鰛>On;

+鰡>Ryuu;

+鰤>Shi;

+鰥>Kan;

+鰭>Ki;

+鰮>On;

+鰲>Gou;

+鰹>Ken;

+鰺>Sou;

+鰻>Ban;

+鰾>Hyou;

+鱆>Shou;

+鱇>Kou;

+鱈>Setsu;

+鱒>Son;

+鱗>Rin;

+鱠>Kai;

+鱧>Rei;

+鱶>Shou;

+鱸>Ro;

+鳥>Chou;

+鳧>Fu;

+鳩>Kyuu;

+鳫>Gan;

+鳬>Fu;

+鳳>Hou;

+鳴>Mei;

+鳶>En;

+鴃>Ketsu;

+鴆>Chin;

+鴇>Hou;

+鴈>Gan;

+鴉>A;

+鴎>Ou;

+鴒>Rei;

+鴕>Ta;

+鴛>En;

+鴟>Shi;

+鴣>Ko;

+鴦>You;

+鴨>Ou;

+鴪>Itsu;

+鴬>Ou;

+鴻>Kou;

+鴾>Bou;

+鴿>Kou;

+鵁>Kou;

+鵄>Shi;

+鵐>Bu;

+鵑>Ken;

+鵙>Geki;

+鵜>Tei;

+鵝>Ga;

+鵞>Ga;

+鵠>Koku;

+鵡>Bu;

+鵬>Hou;

+鵯>Hi;

+鵲>Jaku;

+鵺>Ya;

+鶇>Tou;

+鶉>Shun;

+鶏>Kei;

+鶚>Gaku;

+鶤>Kon;

+鶩>Boku;

+鶯>Ou;

+鶲>Ou;

+鶴>Kaku;

+鶸>Jaku;

+鶺>Seki;

+鶻>Kotsu;

+鷁>Geki;

+鷂>You;

+鷄>Kei;

+鷆>Ten;

+鷏>Ten;

+鷓>Sha;

+鷙>Shi;

+鷦>Shou;

+鷭>Ban;

+鷯>Ryou;

+鷲>Shuu;

+鷸>Itsu;

+鷹>You;

+鷺>Ro;

+鷽>Kaku;

+鸚>Ou;

+鸛>Kan;

+鸞>Ran;

+鹵>Ro;

+鹸>Ken;

+鹹>Kan;

+鹽>En;

+鹿>Roku;

+麁>So;

+麈>Shu;

+麋>Bi;

+麌>Gu;

+麑>Gei;

+麒>Ki;

+麓>Roku;

+麕>Kin;

+麗>Rei;

+麝>Sha;

+麟>Rin;

+麥>Baku;

+麦>Baku;

+麩>Fu;

+麪>Men;

+麭>Hou;

+麸>Fu;

+麹>Kiku;

+麺>Men;

+麻>Ma;

+麼>Ma;

+麾>Ki;

+麿>Ro;

+黄>Kou;

+黌>Kou;

+黍>Sho;

+黎>Rei;

+黏>Nen;

+黐>Chi;

+黒>Koku;

+黔>Ken;

+默>Moku;

+黙>Moku;

+黛>Tai;

+黜>Chutsu;

+黝>Yuu;

+點>Ten;

+黠>Katsu;

+黥>Gei;

+黨>Tou;

+黯>An;

+黴>Bai;

+黶>En;

+黷>Toku;

+黹>Chi;

+黻>Futsu;

+黼>Ho;

+黽>Bou;

+鼇>Gou;

+鼈>Betsu;

+鼎>Tei;

+鼓>Ko;

+鼕>Tou;

+鼠>So;

+鼡>Sho;

+鼬>Yuu;

+鼻>Bi;

+鼾>Kan;

+齊>Sei;

+齋>Sai;

+齎>Sei;

+齏>Sei;

+齒>Shi;

+齔>Shin;

+齟>So;

+齠>Chou;

+齡>Rei;

+齢>Rei;

+齣>Shutsu;

+齦>Gin;

+齧>Ketsu;

+齪>Soku;

+齬>Gyo;

+齲>Ku;

+齶>Gaku;

+齷>Aku;

+龍>Ryuu;

+龕>Gan;

+龜>Ki;

+龝>Shuu;

+龠>Yaku;

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Kannada_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Kannada_InterIndic.utf8.txt
new file mode 100755
index 0000000..d7fd778
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Kannada_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_KeyboardEscape_Latin1.utf8.txt b/src/com/ibm/text/resources/Transliterator_KeyboardEscape_Latin1.utf8.txt
new file mode 100755
index 0000000..dab031f
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_KeyboardEscape_Latin1.utf8.txt
@@ -0,0 +1,125 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:42:05 2001

+#--------------------------------------------------------------------

+

+# KeyboardEscape-Latin1

+

+### $esc='';

+### $grave='`';

+### $acute='';

+### $hat='^';

+### $tilde='~';

+### $umlaut=':';

+### $ring='.';

+### $cedilla=',';

+### $slash='/';

+### $super='^';

+

+# Make keyboard entry of {esc} possible

+# and of backslash

+'\\'''>'';

+'\\\\'>'\\';

+

+# Long keys

+cur''>¤;

+sec''>§;

+not''>¬;

+mul''>×;

+div''>÷;

+

+\\ ''> ; # non-breaking space

+'!'''>¡; # inverted exclamation

+c'/'''>¢; # cent sign

+lb''>£; # pound sign

+'|'''>¦; # broken vertical bar

+':'''>¨; # umlaut

+'^' a''>ª; # feminine ordinal

+'<<'''>«;

+r''>®;

+'--'''>¯;

+'-'''>­;

+'+-'''>±;

+'^' 2''>²;

+'^' 3''>³;

+''''>´;

+m''>µ;

+para''>¶;

+dot''>·;

+','''>¸;

+'^' 1''>¹;

+'^' o''>º; # masculine ordinal

+'>>'''>»;

+'1/4'''>¼;

+'1/2'''>½;

+'3/4'''>¾;

+'?'''>¿;

+A'`'''>À;

+A''''>Á;

+A'^'''>Â;

+A'~'''>Ã;

+A':'''>Ä;

+A'.'''>Å;

+AE''>Æ;

+C','''>Ç;

+E'`'''>È;

+E''''>É;

+E'^'''>Ê;

+E':'''>Ë;

+I'`'''>Ì;

+I''''>Í;

+I'^'''>Î;

+I':'''>Ï;

+'D-'''>Ð;

+N'~'''>Ñ;

+O'`'''>Ò;

+O''''>Ó;

+O'^'''>Ô;

+O'~'''>Õ;

+O':'''>Ö;

+O'/'''>Ø;

+U'`'''>Ù;

+U''''>Ú;

+U'^'''>Û;

+U':'''>Ü;

+Y''''>Ý;

+TH''>Þ;

+ss''>ß;

+a'`'''>à;

+a''''>á;

+a'^'''>â;

+a'~'''>ã;

+a':'''>ä;

+a'.'''>å;

+ae''>æ;

+c','''>ç;

+c''>©; # copyright - after c{cedilla}

+e'`'''>è;

+e''''>é;

+e'^'''>ê;

+e':'''>ë;

+i'`'''>ì;

+i''''>í;

+i'^'''>î;

+i':'''>ï;

+'d-'''>ð;

+n'~'''>ñ;

+o'`'''>ò;

+o''''>ó;

+o'^'''>ô;

+o'~'''>õ;

+o':'''>ö;

+o'/'''>ø;

+o''>°;

+u'`'''>ù;

+u''''>ú;

+u'^'''>û;

+u':'''>ü;

+y''''>ý;

+y''>¥; # yen sign

+th''>þ;

+#masked: + "ss''>ÿ;"

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Latin_Arabic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Latin_Arabic.utf8.txt
new file mode 100755
index 0000000..edbc72c
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Latin_Arabic.utf8.txt
@@ -0,0 +1,189 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 2001

+#--------------------------------------------------------------------

+

+# To Do: finish adding shadda, add sokoon

+# [Is this done?  Can someone finish this?]

+

+### $alefmadda=آ;

+### $alefuhamza=أ;

+### $wauuhamza=ؤ;

+### $alefhamza=إ;

+### $yehuhamza=ئ;

+### $alef=ا;

+### $beh=ب;

+### $tehmarbuta=ة;

+### $teh=ت;

+### $theh=ث;

+### $geem=ج;

+### $hah=ح;

+### $kha=خ;

+### $dal=د;

+### $dhal=ذ;

+### $reh=ر;

+### $zain=ز;

+### $seen=س;

+### $sheen=ش;

+### $sad=ص;

+### $dad=ض;

+### $tah=ط;

+### $zah=ظ;

+### $ein=ع;

+### $ghein=غ;

+### $feh=ف;

+### $qaaf=ق;

+### $kaf=ك;

+### $lam=ل;

+### $meem=م;

+### $noon=ن;

+### $heh=ه;

+### $wau=و;

+### $yehmaqsura=ى;

+### $yeh=ي;

+### $peh=ڤ;

+

+### $hamza=ء;

+### $fathatein=ً;

+### $dammatein=ٌ;

+### $kasratein=ٍ;

+### $fatha=َ;

+### $damma=ُ;

+### $kasra=ِ;

+### $shadda=ّ;

+### $sokoon=ْ;

+

+# Doubles - liu

+t'' < {ت} [تثةط];

+h'' < {ه} [هح];

+s'' < {س} ش;

+

+# A few pathological special cases to make round

+# trip work. - liu

+d'~'d   <> د د;

+dh'~'dh <> ذ ذ;

+dd'~'dd <> ض ض;

+

+# Shadda:  Map x ّ to x x, where x is dh, dd, or

+# d (that is, ذ, ض, or د).  If x is d, d'd is

+# output.  Net effect is to map s.th. like ض ّ

+# to dd'dd. - liu

+ذ {dh} <> dh {ّ};

+ض  {dd} <> dd {ّ};

+د {''d} [^dh] <> d {ّ}; # Avoid d'dd or d'dh

+

+# [This should be removed, but it's good for demos]

+Arabic> \

+تتمتع' ' \

+اللغة' ' \

+العرببية' ' \

+ببنظم' ' \

+كتاببية' ' \

+جميلة;

+

+# Main rules              

+''ai<a{آ;

+ai<>آ;

+''ae<a{أ;

+ae<>أ;

+''ao<a{إ;

+ao<>إ;

+''aa<a{ا;

+aa<>ا;

+''an<a{ً;

+an<>ً;

+''a<a{َ;

+a<>َ;

+b<>ب;

+''dh<d{ذ;

+dh<>ذ;

+''dd<d{ض;

+dd<>ض;

+''d<d{د;

+d<>د;

+''e<a{ع;

+''e<w{ع;

+''e<y{ع;

+e<>ع;

+f<>ف;

+gh<>غ;

+''hh<d{ح;

+''hh<t{ح;

+''hh<k{ح;

+''hh<s{ح;

+hh<>ح;

+''h<d{ه;

+''h<t{ه;

+''h<k{ه;

+''h<s{ه;

+h<>ه;

+''ii<i{ٍ;

+ii<>ٍ;

+''i<i{ِ;

+i<>ِ;

+j<>ج;

+kh<>خ;

+k<>ك;

+l<>ل;

+''m<y{م;

+''m<t{م;

+m<>م;

+n<>ن;

+''o<a{ء;

+o<>ء;

+p<>ڤ;

+q<>ق;

+r<>ر;

+sh<>ش;

+''ss<s{ص;

+ss<>ص;

+''s<s{س;

+s<>س;

+th<>ث;

+tm<>ة;

+''tt<t{ط;

+tt<>ط;

+''t<t{ت;

+t<>ت;

+''uu<u{ٌ;

+uu<>ٌ;

+''u<u{ُ;

+u<>ُ;

+we<>ؤ;

+w<>و;

+ye<>ئ;

+ym<>ى;

+''y<y{ي;

+y<>ي;

+''zz<z{ظ;

+zz<>ظ;

+''z<z{ز;

+z<>ز;

+

+# One-way Latin-Arabic compatability rules

+c>ك;

+g>ج;

+x>كّس;

+v>ب;

+

+# Digits

+0<>٠; # Arabic digit 0

+1<>١; # Arabic digit 1

+2<>٢; # Arabic digit 2

+3<>٣; # Arabic digit 3

+4<>٤; # Arabic digit 4

+5<>٥; # Arabic digit 5

+6<>٦; # Arabic digit 6

+7<>٧; # Arabic digit 7

+8<>٨; # Arabic digit 8

+9<>٩; # Arabic digit 9

+'%'<>٪; # Arabic %

+'.'<>٫; # Arabic decimal separator

+','<>٬; # Arabic thousands separator

+'*'<>٭; # Arabic five-pointed star

+

+''>;

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Latin_Cyrillic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Latin_Cyrillic.utf8.txt
new file mode 100755
index 0000000..8899d95
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Latin_Cyrillic.utf8.txt
@@ -0,0 +1,305 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:42:05 2001

+#--------------------------------------------------------------------

+

+# Latin-Cyrillic

+

+

+# These rules provide general Latin-Cyrillic

+# transliteration. The standard Russian transliterations

+# are generally used for the letters from Russian,

+# with additional Cyrillic characters given consistent

+# mappings.

+

+### $S_hacek=Š;

+### $s_hacek=š;

+

+### $YO=Ё;

+### $J=Ј;

+### $A=А;

+### $B=Б;

+### $V=В;

+### $G=Г;

+### $D=Д;

+### $YE=Е;

+### $ZH=Ж;

+### $Z=З;

+### $YI=И;

+### $Y=Й;

+### $K=К;

+### $L=Л;

+### $M=М;

+### $N=Н;

+### $O=О;

+### $P=П;

+### $R=Р;

+### $S=С;

+### $T=Т;

+### $U=У;

+### $F=Ф;

+### $KH=Х;

+### $TS=Ц;

+### $CH=Ч;

+### $SH=Ш;

+### $SHCH=Щ;

+### $HARD=Ъ;

+### $I=Ы;

+### $SOFT=Ь;

+### $E=Э;

+### $YU=Ю;

+### $YA=Я;

+

+# Lowercase

+

+### $a=а;

+### $b=б;

+### $v=в;

+### $g=г;

+### $d=д;

+### $ye=е;

+### $zh=ж;

+### $z=з;

+### $yi=и;

+### $y=й;

+### $k=к;

+### $l=л;

+### $m=м;

+### $n=н;

+### $o=о;

+### $p=п;

+### $r=р;

+### $s=с;

+### $t=т;

+### $u=у;

+### $f=ф;

+### $kh=х;

+### $ts=ц;

+### $ch=ч;

+### $sh=ш;

+### $shch=щ;

+### $hard=ъ;

+### $i=ы;

+### $soft=ь;

+### $e=э;

+### $yu=ю;

+### $ya=я;

+

+### $yo=ё;

+### $j=ј;

+

+# variables

+# some are duplicated so lowercasing works

+

+$csoft=[eiyEIY];

+$CSOFT=[eiyEIY];

+

+$BECOMES_H=[Ъъ];

+$becomes_h=[Ъъ];

+

+$BECOMES_S=[Сс];

+$becomes_s=[Сс];

+

+$BECOMES_C=[Чч];

+$becomes_c=[Чч];

+

+$BECOMES_VOWEL=[АЭЫОУаэыоу];

+$becomes_vowel=[АЭЫОУаэыоу];

+

+$letter=[[:Lu:][:Ll:]];

+$lower=[[:Ll:]];

+

+# Modified to combine display transliterator and typing transliterator.

+# The display mapping uses accents for the "soft" vowels.

+# It does not, although it could, use characters like š instead of digraphs

+# like sh.

+

+# #############################################

+# Special titlecase forms, not duplicated

+# #############################################

+

+Sh''ch<>Шч; # LIU Distinguish Шч from Щ

+

+Ch   <> {Ч}  $lower;

+Kh   <> {Х}  $lower;

+Shch <> {Щ}$lower;

+Sh   <> {Ш}  $lower;

+Ts   <> {Ц}  $lower;

+Zh   <> {Ж}  $lower;

+Yi>И;

+Ye>Е;

+Yo>Ё;

+Yu>Ю;

+Ya>Я;

+

+# #############################################

+# Rules to Duplicate

+# To get the lowercase versions, copy these and lowercase

+# #############################################

+

+# variant spellings in English

+

+SHTCH>Щ;

+TCH>Ч;

+TH>З;

+Q>К;

+WH>В;

+W>В;

+X>КС; #+ "X<КС;"

+

+# Separate letters that would otherwise join

+

+SH''<Ш}$BECOMES_C;

+T''<Т}$BECOMES_S;

+T''<Т}[ЧЩщ]; # LIU add special cases

+

+K''<К}$BECOMES_H;

+S''<С}$BECOMES_H;

+T''<Т}$BECOMES_H;

+Z''<З}$BECOMES_H;

+

+Y''<Й}$BECOMES_VOWEL;

+

+# Main letters

+

+A<>А;

+B<>Б;

+CH<>Ч;

+D<>Д;

+E<>Э;

+F<>Ф;

+G<>Г;

+Ì<>И;

+I<>Ы;

+KH<>Х;

+K<>К;

+L<>Л;

+M<>М;

+N<>Н;

+O<>О;

+P<>П;

+R<>Р;

+SHCH<>Щ;

+SH>Ш; #+ "SH<Ш;"

+Š<>Ш;

+S<>С;

+TS<>Ц;

+T<>Т;

+U<>У;

+V<>В;

+#ÌÀÈÒÙ

+YE>Е; #+ "YE<Е;"

+È<>Е;

+YO>Ё; #+ "YO<Ё;"

+Ò<>Ё;

+YU>Ю; #+ "YU<Ю;"

+Ù<>Ю;

+YA>Я; #+ "YA<Я;"

+À<>Я;

+Y<>Й;

+ZH<>Ж;

+Z<>З;

+

+H<>Ъ;

+Ÿ<>Ь;

+

+# Non-russian

+

+J<>Ј;

+

+# variant spellings in English

+

+C}$csoft>С;

+C>К;

+

+# #############################################

+# Duplicated Rules

+# Copy and lowercase the above rules

+# #############################################

+

+# variant spellings in english

+

+shtch>щ;

+tch>ч;

+th>з;

+q>к;

+wh>в;

+w>в;

+x>кс; #+ "x<кс;"

+

+# separate letters that would otherwise join

+

+sh''<ш}$becomes_c;

+t''<т}$becomes_s;

+t''<т}[чщ]; # LIU add special cases

+

+k''<к}$becomes_h;

+s''<с}$becomes_h;

+t''<т}$becomes_h;

+z''<з}$becomes_h;

+

+y''<й}$becomes_vowel;

+

+# main letters

+

+a<>а;

+b<>б;

+ch<>ч;

+d<>д;

+e<>э;

+f<>ф;

+g<>г;

+ì<>и;

+i<>ы;

+kh<>х;

+k<>к;

+l<>л;

+m<>м;

+n<>н;

+o<>о;

+p<>п;

+r<>р;

+shch<>щ;

+sh>ш; #+ "sh<ш;"

+š<>ш;

+s<>с;

+ts<>ц;

+t<>т;

+u<>у;

+v<>в;

+#ìàèòù

+ye>е; #+ "ye<е;"

+è<>е;

+yo>ё; #+ "yo<ё;"

+ò<>ё;

+yu>ю; #+ "yu<ю;"

+ù<>ю;

+ya>я; #+ "ya<я;"

+à<>я;

+y<>й;

+zh<>ж;

+z<>з;

+

+h<>ъ;

+ÿ<>ь;

+

+# non-russian

+

+j<>ј;

+

+# variant spellings in english

+

+c}$csoft>с;

+c>к;

+

+

+# #############################################

+# End of Duplicated Rules

+# #############################################

+

+#generally the last rule

+''>;

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Latin_Devanagari.utf8.txt b/src/com/ibm/text/resources/Transliterator_Latin_Devanagari.utf8.txt
new file mode 100755
index 0000000..75124d2
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Latin_Devanagari.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Latin_Greek.utf8.txt b/src/com/ibm/text/resources/Transliterator_Latin_Greek.utf8.txt
new file mode 100755
index 0000000..31a6a01
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Latin_Greek.utf8.txt
@@ -0,0 +1,375 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:18:45 2001

+#--------------------------------------------------------------------

+

+# Latin-Greek

+

+# ==============================================

+# Modern Greek Transliteration Rules

+#

+# This transliterates modern Greek characters, but using rules

+# that are traditional for Ancient Greek, and

+# thus more resemble Greek words that have become part

+# of English. It differs from the official Greek

+# transliteration, which is more phonetic (since

+# most modern Greek vowels, for example, have

+# degenerated simply to sound like "ee").

+#

+# There are only a few tricky parts.

+# 1. eta and omega don't map directly to Latin vowels,

+#    so we use a macron on e and o, and some

+#    other combinations if they are accented.

+# 2. The accented, diaeresis i and y are substituted too.

+# 3. Some letters use digraphs, like "ph". While typical,

+#    they need some special handling.

+# 4. A gamma before a gamma or a few other letters is

+#    transliterated as an "n", as in "Anglo"

+# 5. An ypsilon after a vowel is a "u", as in

+#    "Mouseio". Otherwise it is a "y" as in "Physikon"

+# 6. The construction of the rules is made simpler by making sure

+#    that most rules for lowercase letters exactly correspond to the

+#    rules for uppercase letters, *except* for the case of the letters

+#    in the rule itself. That way, after modifying the uppercase rules,

+#    you can just copy, paste, and "set to lowercase" to get

+#    the rules for lowercase letters!

+# ==============================================

+

+# ==============================================

+# Variables, used to make the rules more comprehensible

+# and for conditionals.

+# ==============================================

+

+### $quote='\"';

+

+# Latin Letters

+

+### $E_MACRON=Ē;

+### $e_macron=ē;

+### $O_MACRON=Ō;

+### $o_macron=ō;

+### $Y_UMLAUT=Ÿ;

+### $y_umlaut=ÿ;

+

+#! // with real accents.

+#! + "$E_MACRON_ACUTE=Ḗ;"

+#! + "$e_macron_acute=ḗ;"

+#! + "$O_MACRON_ACUTE=Ṓ;"

+#! + "$o_macron_acute=ṓ;"

+#! + "$y_umlaut_acute=ÿ́;"

+#! + "$u00ef_acute=ḯ;"

+#! + "$u00fc_acute=ǘ;"

+#! //

+

+# single letter equivalents

+

+### $E_MACRON_ACUTE=Ê;

+### $e_macron_acute=ê;

+### $O_MACRON_ACUTE=Ô;

+### $o_macron_acute=ô;

+### $y_umlaut_acute=ŷ;

+### $u00ef_acute=î;

+### $u00fc_acute=û;

+

+# Greek Letters

+

+### $ALPHA=Α;

+### $BETA=Β;

+### $GAMMA=Γ;

+### $DELTA=Δ;

+### $EPSILON=Ε;

+### $ZETA=Ζ;

+### $ETA=Η;

+### $THETA=Θ;

+### $IOTA=Ι;

+### $KAPPA=Κ;

+### $LAMBDA=Λ;

+### $MU=Μ;

+### $NU=Ν;

+### $XI=Ξ;

+### $OMICRON=Ο;

+### $PI=Π;

+### $RHO=Ρ;

+### $SIGMA=Σ;

+### $TAU=Τ;

+### $YPSILON=Υ;

+### $PHI=Φ;

+### $CHI=Χ;

+### $PSI=Ψ;

+### $OMEGA=Ω;

+

+### $ALPHA2=Ά;

+### $EPSILON2=Έ;

+### $ETA2=Ή;

+### $IOTA2=Ί;

+### $OMICRON2=Ό;

+### $YPSILON2=Ύ;

+### $OMEGA2=Ώ;

+### $IOTA_DIAERESIS=Ϊ;

+### $YPSILON_DIAERESIS=Ϋ;

+

+### $alpha=α;

+### $beta=β;

+### $gamma=γ;

+### $delta=δ;

+### $epsilon=ε;

+### $zeta=ζ;

+### $eta=η;

+### $theta=θ;

+### $iota=ι;

+### $kappa=κ;

+### $lambda=λ;

+### $mu=μ;

+### $nu=ν;

+### $xi=ξ;

+### $omicron=ο;

+### $pi=π;

+### $rho=ρ;

+### $sigma=σ;

+### $tau=τ;

+### $ypsilon=υ;

+### $phi=φ;

+### $chi=χ;

+### $psi=ψ;

+### $omega=ω;

+

+#forms

+

+### $alpha2=ά;

+### $epsilon2=έ;

+### $eta2=ή;

+### $iota2=ί;

+### $omicron2=ό;

+### $ypsilon2=ύ;

+### $omega2=ώ;

+### $iota_diaeresis=ϊ;

+### $ypsilon_diaeresis=ϋ;

+### $iota_diaeresis2=ΐ;

+### $ypsilon_diaeresis2=ΰ;

+### $sigma2=ς;

+

+# Variables for conditional mappings

+

+# Use lowercase for all variable names, to allow cut/paste below.

+

+$letter=[~[:Lu:][:Ll:]];

+$lower=[[:Ll:]];

+$softener=[eiyEIY];

+$vowel=[aeiouAEIOU \

+ ΑΕΗΙΟΥΩ \

+ ΆΈΉΊΌΎΏ \

+ ΪΫ \

+ αεηιουω \

+ άέήίόύώ \

+ ϊϋ \

+ ΐΰ \

+ ];

+$n_gamma=[GKXCgkxc];

+$gamma_n=[ΓΚΧΞγκχξ];

+$pp=[Pp];

+

+# ==============================================

+# Rules

+# ==============================================

+# The following are special titlecases, and should

+# not be copied when duplicating the lowercase

+# ==============================================

+

+Th <> Θ}$lower;

+Ph <> Φ}$lower;

+Ch <> Χ}$lower;

+#masked: + "Ps<Φ}$lower;"

+

+# Because there is no uppercase forms for final sigma,

+# we had to move all the sigma rules up here.

+

+# Remember to insert ' to preserve round trip, for double letters

+# don't need to do this for the digraphs with h,

+# since it is not created when mapping back from greek

+

+# use special form for s

+

+''S <> $pp{Σ; # handle PS

+S <> Σ;

+

+# The following are a bit tricky. 's' takes two forms in greek

+# final or non final.

+# We use ~s to represent the abnormal form: final before letter

+# or non-final before non-letter.

+# We use 's to separate p and s (otherwise ps is one letter)

+# so, we break out the following forms:

+

+''s < $pp{σ}$letter;

+s <          σ}$letter;

+'~'s <         σ;

+

+'~'s <         ς}$letter;

+''s < $pp{ς;

+s <          ς;

+

+'~'s }$letter>ς;

+'~'s             > σ;

+''s }$letter>σ;

+''s            > ς;

+s }$letter>σ;

+s              > ς;

+

+# because there are no uppercase forms, had to move these up too.

+

+i'\"''`'>ΐ;

+y'\"''`'>ΰ;

+

+î<>ΐ;

+û<>$vowel{ΰ;

+ŷ<>ΰ;

+

+# ==============================================

+# Uppercase Forms.

+# To make lowercase forms, just copy and lowercase below

+# ==============================================

+

+# Typing variants, in case the keyboard doesn't have accents

+

+'A`'>Ά;

+'E`'>Έ;

+'EE`'>Ή;

+EE>Η;

+'I`'>Ί;

+'O`'>Ό;

+'OO`'>Ώ;

+OO>Ω;

+I'\"'>Ϊ;

+Y'\"'>Ϋ;

+

+# Basic Letters

+

+A<>Α;

+Á<>Ά;

+B<>Β;

+N }$n_gamma<>Γ}$gamma_n;

+G<>Γ;

+D<>Δ;

+''E <> [Ee]{Ε; # handle EE

+E<>Ε;

+É<>Έ;

+Z<>Ζ;

+Ê<>Ή;

+Ē<>Η;

+TH<>Θ;

+I<>Ι;

+Í<>Ί;

+Ï<>Ϊ;

+K<>Κ;

+L<>Λ;

+M<>Μ;

+N'' <> Ν}$gamma_n;

+N<>Ν;

+X<>Ξ;

+''O <> [Oo]{ Ο; # handle OO

+O<>Ο;

+Ó<>Ό;

+PH<>Φ; # needs ordering before P

+PS<>Ψ; # needs ordering before P

+P<>Π;

+R<>Ρ;

+T<>Τ;

+U <> $vowel{Υ;

+Ú <> $vowel{Ύ;

+Ü <> $vowel{Ϋ;

+Y<>Υ;

+Ý<>Ύ;

+Ÿ<>Ϋ;

+CH<>Χ;

+Ô<>Ώ;

+Ō<>Ω;

+

+# Extra English Letters. Mapped for completeness

+

+C}$softener>|S;

+C>|K;

+F>|PH;

+H>|CH;

+J>|I;

+Q>|K;

+V>|U;

+W>|U;

+

+# ==============================================

+# Lowercase Forms. Just copy above and lowercase

+# ==============================================

+

+# typing variants, in case the keyboard doesn't have accents

+

+'a`'>ά;

+'e`'>έ;

+'ee`'>ή;

+ee>η;

+'i`'>ί;

+'o`'>ό;

+'oo`'>ώ;

+oo>ω;

+i'\"'>ϊ;

+y'\"'>ϋ;

+

+# basic letters

+

+a<>α;

+á<>ά;

+b<>β;

+n }$n_gamma<>γ}$gamma_n;

+g<>γ;

+d<>δ;

+''e <> [Ee]{ε; # handle EE

+e<>ε;

+é<>έ;

+z<>ζ;

+ê<>ή;

+ē<>η;

+th<>θ;

+i<>ι;

+í<>ί;

+ï<>ϊ;

+k<>κ;

+l<>λ;

+m<>μ;

+n'' <> ν}$gamma_n;

+n<>ν;

+x<>ξ;

+''o <> [Oo]{ ο; # handle OO

+o<>ο;

+ó<>ό;

+ph<>φ; # needs ordering before p

+ps<>ψ; # needs ordering before p

+p<>π;

+r<>ρ;

+t<>τ;

+u <> $vowel{υ;

+ú <> $vowel{ύ;

+ü <> $vowel{ϋ;

+y<>υ;

+ý<>ύ;

+ÿ<>ϋ;

+ch<>χ;

+ô<>ώ;

+ō<>ω;

+

+# extra english letters. mapped for completeness

+

+c}$softener>|s;

+c>|k;

+f>|ph;

+h>|ch;

+j>|i;

+q>|k;

+v>|u;

+w>|u;

+

+# ====================================

+# Normal final rule: remove '

+# ====================================

+

+#+ "''>;"

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Latin_Hebrew.utf8.txt b/src/com/ibm/text/resources/Transliterator_Latin_Hebrew.utf8.txt
new file mode 100755
index 0000000..5fc7c89
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Latin_Hebrew.utf8.txt
@@ -0,0 +1,216 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:42:06 2001

+#--------------------------------------------------------------------

+

+# Latin-Hebrew

+

+

+# Variable names, derived from the Unicode names.

+### $POINT_SHEVA=ְ;

+### $POINT_HATAF_SEGOL=ֱ;

+### $POINT_HATAF_PATAH=ֲ;

+### $POINT_HATAF_QAMATS=ֳ;

+### $POINT_HIRIQ=ִ;

+### $POINT_TSERE=ֵ;

+### $POINT_SEGOL=ֶ;

+### $POINT_PATAH=ַ;

+### $POINT_QAMATS=ָ;

+### $POINT_HOLAM=ֹ;

+### $POINT_QUBUTS=ֻ;

+### $POINT_DAGESH_OR_MAPIQ=ּ;

+### $POINT_METEG=ֽ;

+### $PUNCTUATION_MAQAF=־;

+### $POINT_RAFE=ֿ;

+### $PUNCTUATION_PASEQ=׀;

+### $POINT_SHIN_DOT=ׁ;

+### $POINT_SIN_DOT=ׂ;

+### $PUNCTUATION_SOF_PASUQ=׃;

+### $ALEF=א;

+### $BET=ב;

+### $GIMEL=ג;

+### $DALET=ד;

+### $HE=ה;

+### $VAV=ו;

+### $ZAYIN=ז;

+### $HET=ח;

+### $TET=ט;

+### $YOD=י;

+### $FINAL_KAF=ך;

+### $KAF=כ;

+### $LAMED=ל;

+### $FINAL_MEM=ם;

+### $MEM=מ;

+### $FINAL_NUN=ן;

+### $NUN=נ;

+### $SAMEKH=ס;

+### $AYIN=ע;

+### $FINAL_PE=ף;

+### $PE=פ;

+### $FINAL_TSADI=ץ;

+### $TSADI=צ;

+### $QOF=ק;

+### $RESH=ר;

+### $SHIN=ש;

+### $TAV=ת;

+### $YIDDISH_DOUBLE_VAV=װ;

+### $YIDDISH_VAV_YOD=ױ;

+### $YIDDISH_DOUBLE_YOD=ײ;

+### $PUNCTUATION_GERESH=׳;

+### $PUNCTUATION_GERSHAYIM=״;

+

+$letter=[a-zA-Z];

+$softvowel=[eiyEIY];

+$vowellike=[אעיו];

+$hebrew=[֐-׿]; # the whole block -liu

+

+# [Why is this a special case? -liu]

+k''h <> כ ה ;

+

+# Mark non-final forms in final position as x~ -liu

+k    <  כ   } $hebrew ;

+m    <  מ   } $hebrew ;

+n    <  נ   } $hebrew ;

+p    <  פ    } $hebrew ;

+ts   <  צ } $hebrew ;

+k'~' <> כ   ;

+m'~' <> מ   ;

+n'~' <> נ   ;

+p'~' <> פ    ;

+ts'~'<> צ ;

+

+# Mark final forms in non-final position as x^ -liu

+k'^' <> ך   } $hebrew ;

+m'^' <> ם   } $hebrew ;

+n'^' <> ן   } $hebrew ;

+p'^' <> ף    } $hebrew ;

+ts'^'<> ץ } $hebrew ;

+k    <  ך;

+m    <  ם;

+n    <  ן;

+p    <  ף;

+ts   <  ץ;

+

+# Main rules

+a<>א;

+A>א;

+

+b<>ב;

+B>ב;

+

+c}$softvowel>ס;

+C}$softvowel>ס;

+c}$letter>כ;

+C}$letter>כ;

+c>ך;

+C>ך;

+

+d<>ד;

+D>ד;

+

+e<>ע;

+E>ע;

+

+f}$letter>פ;

+f>ף;

+F}$letter>פ;

+F>ף;

+

+g<>ג;

+G>ג;

+

+h<>ה;

+H>ה;

+

+i>י;

+I>י;

+

+j>דש;

+J>דש;

+

+kh<>ח;

+kH>ח;

+Kh>ח;

+KH>ח;

+k}$letter>כ;

+K}$letter>כ;

+k>ך;

+K>ך;

+

+l<>ל;

+L>ל;

+

+m}$letter>מ;

+m>ם;

+M}$letter>מ;

+M>ם;

+

+n}$letter>נ;

+n>ן;

+N}$letter>נ;

+N>ן;

+

+o>ו;

+O>ו;

+

+p}$letter>פ;

+p>ף;

+P}$letter>פ;

+P>ף;

+

+q<>ק;

+Q>ק;

+

+r<>ר;

+R>ר;

+

+sh<>ש;

+sH>ש;

+Sh>ש;

+SH>ש;

+s''<ס}ה;

+s<>ס;

+S>ס;

+

+th<>ת;

+tH>ת;

+Th>ת;

+TH>ת;

+tS}$letter>צ;

+ts}$letter>צ;

+Ts}$letter>צ;

+TS}$letter>צ;

+tS>ץ;

+ts>ץ;

+Ts>ץ;

+TS>ץ;

+t''<ט}[ה ס ש];

+t<>ט;

+T>ט;

+

+v<ו}$vowellike;

+u<>ו;

+U>ו;

+

+v>ו;

+V>ו;

+

+w>ו;

+W>ו;

+

+x>כס;

+X>כס;

+

+y<>י;

+Y>י;

+

+z<>ז;

+Z>ז;

+

+# Delete stray apostrophes

+''>;

+<'';

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Latin_Jamo.utf8.txt b/src/com/ibm/text/resources/Transliterator_Latin_Jamo.utf8.txt
new file mode 100755
index 0000000..bbcbb8f
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Latin_Jamo.utf8.txt
@@ -0,0 +1,511 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+

+# Latin-Jamo

+

+# Transliteration from Latin characters to Korean script is done in

+# two steps: Latin to Jamo, then Jamo to Hangul.  The Jamo-Hangul

+# transliteration is done algorithmically following Unicode 3.0

+# section 3.11.  This file implements the Latin to Jamo

+# transliteration using rules.

+

+# Jamo occupy the block 1100-11FF.  Within this block there are three

+# groups of characters: initial consonants or choseong (I), medial

+# vowels or jungseong (M), and trailing consonants or jongseong (F).

+# Standard Korean syllables are of the form I+M+F*.

+

+# Section 3.11 describes the use of 'filler' jamo to convert

+# nonstandard syllables to standard form: the choseong filler 115F and

+# the junseong filler 1160.  In this transliterator, we will not use

+# 115F or 1160.

+

+# We will, however, insert two 'null' jamo to make foreign words

+# conform to Korean syllable structure.  These are the null initial

+# consonant 110B (IEUNG) and the null vowel 1173 (EU).  In Latin text,

+# we will use the hyphen in order to disambiguate strings,

+# e.g. "kan-ggan" (initial GG) vs. "kanggan" (final NG + initial G).

+

+# We will not use all of the characters in the jamo block.  We will

+# only use the 19 initials, 21 medials, and 27 finals possessing a

+# jamo short name as defined in section 4.4 of the Unicode book.

+

+# Rules of thumb.  These guidelines provide the basic framework

+# for the rules.  They are phrased in terms of Latin-Jamo transliteration.

+# The Jamo-Latin rules derive from these, since the Jamo-Latin rules are

+# just context-free transliteration of jamo to corresponding short names,

+# with the addition of hyphens to maintain round-trip integrity

+# in the context of the Latin-Jamo rules.

+

+# A sequence of vowels:

+# - Take the longest sequence you can. If there are too many, or you don't

+#   have a starting consonant, introduce a 110B necessary.

+

+# A sequence of consonants.

+# - First join the double consonants: G + G -> GG

+# - In the remaining list,

+# -- If there is no preceding vowel, take the first consonant, and insert EU

+#    after it. Continue with the rest of the consonants.

+# -- If there is one consonant, attach to the following vowel

+# -- If there are two consonants and a following vowel, attach one to the

+#    preceeding vowel, and one to the following vowel.

+# -- If there are more than two consonants, join the first two together if you

+#    can: L + G => LG

+# -- If you still end up with more than 2 consonants, insert EU after the

+#    first one, and continue with the rest of the consonants.

+

+#----------------------------------------------------------------------

+# Variables

+

+# Some latin consonants or consonant pairs only occur as initials, and

+# some only as finals, but some occur as both.  This makes some jamo

+# consonants ambiguous when transliterated into latin.

+#   Initial only: IEUNG BB DD JJ R

+#   Final only: BS GS L LB LG LH LM LP LS LT NG NH NJ

+#   Initial and Final: B C D G GG H J K M N P S SS T

+

+  $Gi = \u1100;

+  $GGi = \u1101;

+  $Ni = \u1102;

+  $Di = \u1103;

+  $DD = \u1104;

+  $R = \u1105;

+  $Mi = \u1106;

+  $Bi = \u1107;

+  $BB = \u1108;

+  $Si = \u1109;

+  $SSi = \u110A;

+  $IEUNG = \u110B; # null initial, inserted during Latin-Jamo

+  $Ji = \u110C;

+  $JJ = \u110D;

+  $Ci = \u110E;

+  $Ki = \u110F;

+  $Ti = \u1110;

+  $Pi = \u1111;

+  $Hi = \u1112;

+

+  $A = \u1161;

+  $AE = \u1162;

+  $YA = \u1163;

+  $YAE = \u1164;

+  $EO = \u1165;

+  $E = \u1166;

+  $YEO = \u1167;

+  $YE = \u1168;

+  $O = \u1169;

+  $WA = \u116A;

+  $WAE = \u116B;

+  $OE = \u116C;

+  $YO = \u116D;

+  $U = \u116E;

+  $WEO = \u116F;

+  $WE = \u1170;

+  $WI = \u1171;

+  $YU = \u1172;

+  $EU = \u1173; # null medial, inserted during Latin-Jamo

+  $YI = \u1174;

+  $I = \u1175;

+

+  $Gf = \u11A8;

+  $GGf = \u11A9;

+  $GS = \u11AA;

+  $Nf = \u11AB;

+  $NJ = \u11AC;

+  $NH = \u11AD;

+  $Df = \u11AE;

+  $L = \u11AF;

+  $LG = \u11B0;

+  $LM = \u11B1;

+  $LB = \u11B2;

+  $LS = \u11B3;

+  $LT = \u11B4;

+  $LP = \u11B5;

+  $LH = \u11B6;

+  $Mf = \u11B7;

+  $Bf = \u11B8;

+  $BS = \u11B9;

+  $Sf = \u11BA;

+  $SSf = \u11BB;

+  $NG = \u11BC;

+  $Jf = \u11BD;

+  $Cf = \u11BE;

+  $Kf = \u11BF;

+  $Tf = \u11C0;

+  $Pf = \u11C1;

+  $Hf = \u11C2;

+  

+  $jamoInitial = [\u1100-\u1112];

+

+  $jamoMedial = [\u1161-\u1175];

+

+  $latinInitial = [bcdghjkmnprst];

+

+  # Any character in the latin transliteration of a medial

+  $latinMedial = [aeiouwy];

+

+  # The last character of the latin transliteration of a medial

+  $latinMedialEnd = [aeiou];

+

+#----------------------------------------------------------------------

+# Jamo-Latin

+

+# Jamo to latin is relatively simple, since it is the latin that is

+# ambiguous.  Most rules are straightforward, and we encode them below

+# as simple add-on back rule, e.g.:

+

+#   $jamoMedial {bs} > $BS;

+

+# becomes

+

+#   $jamoMedial {bs} <> $BS;

+

+# Furthermore, we don't care about the ordering for Jamo-Latin because

+# we are going from single characters, so we can very easily piggyback

+# on the Latin-Jamo.

+

+# The main issue with Jamo-Latin is when to insert hyphens.

+# Hyphens are inserted to obtain correct round trip behavior.  For

+# example, the sequence Ki A Gf Gi E, if transliterated to "kagge",

+# would then round trip to Ki A GGi E.  To prevent this, we insert a

+# hyphen: "kag-ge".  IMPORTANT: The need for hyphens depends

+# very specifically on the behavior of the Latin-Jamo rules.  A change

+# in the Latin-Jamo behavior can completely change the way the

+# hyphen insertion must be done.

+

+# First try to preserve actual hyphens in the jamo text by doubling

+# them.  This fixes problems like:

+# (Di)(A)(Ji)(U)(NG)-(IEUNG)(YEO)(Nf)(Gi)(YEO)(L) => dajung-yeongyeol

+# => (Di)(A)(Ji)(U)(NG)(IEUNG)(YEO)(Nf)(Gi)(YEO)(L).  This is optional

+# -- if we don't care about losing hyphens in the jamo, we can delete

+# this rule.

+

+  '--' <> '-';

+

+# Triple consonants.  For three consonants "axxx" we insert a

+# hyphen between the first and second "x" if XXf, Xf, and Xi all

+# exist, and we have A Xf XXi.  This prevents the reverse

+# transliteration to A XXf Xi.

+

+  '-' < $latinMedialEnd g {} $GGi;

+  '-' < $latinMedialEnd s {} $SSi;

+

+# For vowels the rule is similar.  If there is a vowel "ae" such that

+# "a" by itself and "e" by itself are vowels, then we want to map A E

+# to "a-e" so as not to round trip to AE.  However, in the text Ki EO

+# IEUNG E we don't need to map to "keo-e".  "keoe" suffices.  For

+# vowels of the form "aei", both "ae" + "i" and "a" + "ei" must be

+# tested.  NOTE: These rules used to have a left context of

+# $latinInitial instead of [^$latinMedial].  The problem with this is

+# sequences where an initial IEUNG is transliterated away:

+#   (IEUNG)(A)(IEUNG)(EO) => aeo => (IEUNG)(AE)(IEUNG)(O)

+

+  '-' < [^$latinMedial] [y w] e {} [$O $OE];

+  '-' < [^$latinMedial] e {} [$O $OE $U];

+  '-' < [^$latinMedial] [o a] {} [$E $EO $EU];

+  '-' < [^$latinMedial] [w y] a {} [$E $EO $EU];

+

+# Similar to the above, but with an intervening $IEUNG.

+

+  '-' < [^$latinMedial] [y w] e {} $IEUNG [$O $OE];

+  '-' < [^$latinMedial] e {} $IEUNG [$O $OE $U];

+  '-' < [^$latinMedial] [o a] {} $IEUNG [$E $EO $EU];

+  '-' < [^$latinMedial] [w y] a {} $IEUNG [$E $EO $EU];

+

+# Single finals followed by IEUNG.  The jamo sequence A Xf IEUNG E,

+# where Xi also exists, must be transliterated as "ax-e" to prevent

+# the round trip conversion to A Xi E.

+

+  '-' < $latinMedialEnd b {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd c {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd d {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd g {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd h {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd j {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd k {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd m {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd n {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd p {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd s {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd t {} $IEUNG $jamoMedial;

+

+# Double finals followed by IEUNG.  Similar to the single finals

+# followed by IEUNG.  Any latin consonant pair X Y, between medials,

+# that we would split by Latin-Jamo, we must handle when it occurs as

+# part of A XYf IEUNG E, to prevent round trip conversion to A Xf Yi

+# E.

+

+  '-' < $latinMedialEnd b s {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd g g {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd g s {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd l b {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd l g {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd l h {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd l m {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd l p {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd l s {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd l t {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd n g {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd n h {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd n j {} $IEUNG $jamoMedial;

+  '-' < $latinMedialEnd s s {} $IEUNG $jamoMedial;

+

+# Split doubles.  Text of the form A Xi Xf E, where XXi also occurs,

+# we transliterate as "ax-xe" to prevent round trip transliteration as

+# A XXi E.

+

+  '-' < $latinMedialEnd b {} $Bi $jamoMedial;

+  '-' < $latinMedialEnd d {} $Di $jamoMedial;

+  '-' < $latinMedialEnd j {} $Ji $jamoMedial;

+  '-' < $latinMedialEnd g {} $Gi $jamoMedial;

+  '-' < $latinMedialEnd s {} $Si $jamoMedial;

+

+# XYY.  This corresponds to the XYY rule in Latin-Jamo.  By default

+# Latin-Jamo maps "xyy" to Xf YYi, to keep YY together.  As a result,

+# "xyy" forms that correspond to XYf Yi must be transliterated as

+# "xy-y".

+

+  '-' < $latinMedialEnd b s {} [$Si $SSi];

+  '-' < $latinMedialEnd g s {} [$Si $SSi];

+  '-' < $latinMedialEnd l b {} [$Bi $BB];

+  '-' < $latinMedialEnd l g {} [$Gi $GGi];

+  '-' < $latinMedialEnd l s {} [$Si $SSi];

+  '-' < $latinMedialEnd n g {} [$Gi $GGi];

+  '-' < $latinMedialEnd n j {} [$Ji $JJ];

+

+# Deletion of IEUNG is handled below.

+

+#----------------------------------------------------------------------

+# Latin-Jamo

+

+# [Basic, context-free Jamo-Latin rules are embedded here too.  See

+# above.]

+

+# Split digraphs: Text of the form 'axye', where 'xy' is a final

+# digraph, 'x' is a final (by itself), 'y' is an initial, and 'a' and

+# 'e' are medials, we want to transliterate this as A Xf Yi E rather

+# than A XYf IEUNG E.  We do NOT include text of the form "axxe",

+# since that is handled differently below.  These rules are generated

+# programmatically from the jamo data.

+

+  $jamoMedial {b s} $latinMedial > $Bf $Si;

+  $jamoMedial {g s} $latinMedial > $Gf $Si;

+  $jamoMedial {l b} $latinMedial > $L $Bi;

+  $jamoMedial {l g} $latinMedial > $L $Gi;

+  $jamoMedial {l h} $latinMedial > $L $Hi;

+  $jamoMedial {l m} $latinMedial > $L $Mi;

+  $jamoMedial {l p} $latinMedial > $L $Pi;

+  $jamoMedial {l s} $latinMedial > $L $Si;

+  $jamoMedial {l t} $latinMedial > $L $Ti;

+  $jamoMedial {n g} $latinMedial > $Nf $Gi;

+  $jamoMedial {n h} $latinMedial > $Nf $Hi;

+  $jamoMedial {n j} $latinMedial > $Nf $Ji;

+

+# Single consonants are initials: Text of the form 'axe', where 'x'

+# can be an initial or a final, and 'a' and 'e' are medials, we want

+# to transliterate as A Xi E rather than A Xf IEUNG E.

+

+  $jamoMedial {b} $latinMedial > $Bi;

+  $jamoMedial {c} $latinMedial > $Ci;

+  $jamoMedial {d} $latinMedial > $Di;

+  $jamoMedial {g} $latinMedial > $Gi;

+  $jamoMedial {h} $latinMedial > $Hi;

+  $jamoMedial {j} $latinMedial > $Ji;

+  $jamoMedial {k} $latinMedial > $Ki;

+  $jamoMedial {m} $latinMedial > $Mi;

+  $jamoMedial {n} $latinMedial > $Ni;

+  $jamoMedial {p} $latinMedial > $Pi;

+  $jamoMedial {s} $latinMedial > $Si;

+  $jamoMedial {t} $latinMedial > $Ti;

+

+# Doubled initials.  The sequence "axxe", where XX exists as an initial

+# (XXi), and also Xi and Xf exist (true of all digraphs XX), we want

+# to transliterate as A XXi E, rather than split to A Xf Xi E.

+

+  $jamoMedial {b b} $latinMedial > $BB;

+  $jamoMedial {d d} $latinMedial > $DD;

+  $jamoMedial {j j} $latinMedial > $JJ;

+  $jamoMedial {g g} $latinMedial > $GGi;

+  $jamoMedial {s s} $latinMedial > $SSi;

+

+# XYY.  Because doubled consonants bind more strongly than XY

+# consonants, we must handle the sequence "axyy" specially.  Here XYf

+# and YYi must exist.  In these cases, we map to Xf YYi rather than

+# XYf.

+

+  $jamoMedial {b} s s > $Bf;

+  $jamoMedial {g} s s > $Gf;

+  $jamoMedial {l} b b > $L;

+  $jamoMedial {l} g g > $L;

+  $jamoMedial {l} s s > $L;

+  $jamoMedial {n} g g > $Nf;

+  $jamoMedial {n} j j > $Nf;

+

+# Finals: Attach consonant with preceding medial to preceding medial.

+# Do this BEFORE mapping consonants to initials.  Longer keys must

+# precede shorter keys that they start with, e.g., the rule for 'bs'

+# must precede 'b'.

+

+# [BASIC Jamo-Latin FINALS handled here.  Order irrelevant within this

+# block for Jamo-Latin.]

+

+  $jamoMedial {bs} <> $BS;

+  $jamoMedial {b} <> $Bf;

+  $jamoMedial {c} <> $Cf;

+  $jamoMedial {d} <> $Df;

+  $jamoMedial {gg} <> $GGf;

+  $jamoMedial {gs} <> $GS;

+  $jamoMedial {g} <> $Gf;

+  $jamoMedial {h} <> $Hf;

+  $jamoMedial {j} <> $Jf;

+  $jamoMedial {k} <> $Kf;

+  $jamoMedial {lb} <> $LB;  $jamoMedial {lg} <> $LG;

+  $jamoMedial {lh} <> $LH;

+  $jamoMedial {lm} <> $LM;

+  $jamoMedial {lp} <> $LP;

+  $jamoMedial {ls} <> $LS;

+  $jamoMedial {lt} <> $LT;

+  $jamoMedial {l} <> $L;

+  $jamoMedial {m} <> $Mf;

+  $jamoMedial {ng} <> $NG;

+  $jamoMedial {nh} <> $NH;

+  $jamoMedial {nj} <> $NJ;

+  $jamoMedial {n} <> $Nf;

+  $jamoMedial {p} <> $Pf;

+  $jamoMedial {ss} <> $SSf;

+  $jamoMedial {s} <> $Sf;

+  $jamoMedial {t} <> $Tf;

+

+# Initials: Attach single consonant to following medial.  Do this

+# AFTER mapping finals.  Longer keys must precede shorter keys that

+# they start with, e.g., the rule for 'gg' must precede 'g'.

+

+# [BASIC Jamo-Latin INITIALS handled here.  Order irrelevant within

+# this block for Jamo-Latin.]

+

+  {gg} $latinMedial <> $GGi;

+  {g} $latinMedial <> $Gi;

+  {n} $latinMedial <> $Ni;

+  {dd} $latinMedial <> $DD;

+  {d} $latinMedial <> $Di;

+  {r} $latinMedial <> $R;

+  {m} $latinMedial <> $Mi;

+  {bb} $latinMedial <> $BB;

+  {b} $latinMedial <> $Bi;

+  {ss} $latinMedial <> $SSi;

+  {s} $latinMedial <> $Si;

+  {jj} $latinMedial <> $JJ;

+  {j} $latinMedial <> $Ji;

+  {c} $latinMedial <> $Ci;

+  {k} $latinMedial <> $Ki;

+  {t} $latinMedial <> $Ti;

+  {p} $latinMedial <> $Pi;

+  {h} $latinMedial <> $Hi;

+

+# 'r' in final position.  Because of the equivalency of the 'l' and

+# 'r' jamo (the glyphs are the same), we try to provide the same

+# equivalency in Latin-Jamo.  The 'l' to 'r' conversion is handled

+# below.  If we see an 'r' in an apparent final position, treat it

+# like 'l'.  For example, "karka" => Ki A R EU Ki A without this rule.

+# Instead, we want Ki A L Ki A.

+

+  $jamoMedial {r} $latinInitial > | l;

+

+# Initial + Final: If we match the next rule, we have initial then

+# final consonant with no intervening medial.  We insert the null

+# vowel BEFORE it to create a well-formed syllable.  (In the next rule

+# we insert a null vowel AFTER an anomalous initial.)

+

+  $jamoInitial {} [bcdghjklmnpst] > $EU;

+

+# Initial + X: This block matches an initial consonant not followed by

+# a medial.  We insert the null vowel after it.  We handle double

+# initials explicitly here; for single initial consonants we insert EU

+# (as Latin) after them and let standard rules do the rest.

+

+# BREAKS ROUND TRIP INTEGRITY

+

+  gg > $GGi $EU;

+  dd > $DD $EU;

+  bb > $BB $EU;

+  ss > $SSi $EU;

+  jj > $JJ $EU;

+

+  ([bcdghjkmnprst]) > | $1 eu;

+

+# X + Final: Finally we have to deal with a consonant that can only be

+# interpreted as a final (not an initial) and which is preceded

+# neither by an initial nor a medial.  It is the start of the

+# syllable, but cannot be.  Most of these will already be handled by

+# the above rules.  'bs' splits into Bi EU Sf.  Similar for 'gs' 'ng'

+# 'nh' 'nj'.  The only problem is 'l' and digraphs starting with 'l'.

+# For this isolated case, we could add a null initial and medial,

+# which would give "la" => IEUNG EU L IEUNG A, for example.  A more

+# economical solution is to transliterate isolated "l" (that is,

+# initial "l") to "r".  (Other similar conversions of consonants that

+# occur neither as initials nor as finals are handled below.)

+

+  l > | r;

+

+# Medials.  If a medial is preceded by an initial, then we proceed

+# normally.  As usual, longer keys must precede shorter ones.

+

+# [BASIC Jamo-Latin MEDIALS handled here.  Order irrelevant within

+# this block for Jamo-Latin.]

+

+  $jamoInitial {ae} <> $AE;

+  $jamoInitial {a} <> $A;

+  $jamoInitial {eo} <> $EO;

+  $jamoInitial {eu} <> $EU;

+  $jamoInitial {e} <> $E;

+  $jamoInitial {i} <> $I;

+  $jamoInitial {oe} <> $OE;

+  $jamoInitial {o} <> $O;

+  $jamoInitial {u} <> $U;

+  $jamoInitial {wae} <> $WAE;

+  $jamoInitial {wa} <> $WA;

+  $jamoInitial {weo} <> $WEO;

+  $jamoInitial {we} <> $WE;

+  $jamoInitial {wi} <> $WI;

+  $jamoInitial {yae} <> $YAE;

+  $jamoInitial {ya} <> $YA;

+  $jamoInitial {yeo} <> $YEO;

+  $jamoInitial {ye} <> $YE;

+  $jamoInitial {yi} <> $YI;

+  $jamoInitial {yo} <> $YO;

+  $jamoInitial {yu} <> $YU;

+

+# We may see an anomalous isolated 'w' or 'y'.  In that case, we

+# interpret it as 'wi' and 'yu', respectively.

+

+# BREAKS ROUND TRIP INTEGRITY

+

+  $jamoInitial {w} > | wi;

+  $jamoInitial {y} > | yu;

+

+# Otherwise, insert a null consonant IEUNG before the medial (which is

+# still an untransliterated latin vowel).

+

+  ($latinMedial) > $IEUNG | $1;

+

+# Convert non-jamo latin consonants to equivalents.  These occur as

+# neither initials nor finals in jamo.  'l' occurs as a final, but not

+# an initial; it is handled above.  The following letters (left hand

+# side) will never be output by Jamo-Latin.

+

+  f > | p;

+  q > | k;

+  v > | b;

+  x > | ks;

+  z > | s;

+

+# Delete hyphens (Latin-Jamo).

+

+  '-' > ;

+

+# Delete null consonants (Jamo-Latin).  Do NOT delete null EU vowels,

+# since these may also occur in text.

+

+  < $IEUNG;

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Latin_Kana.utf8.txt b/src/com/ibm/text/resources/Transliterator_Latin_Kana.utf8.txt
new file mode 100755
index 0000000..33f245c
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Latin_Kana.utf8.txt
@@ -0,0 +1,969 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:18:46 2001

+#--------------------------------------------------------------------

+

+# Latin-Kana

+

+

+# Japanese hiragana and katakana to and from latin

+# (romaji).  Lower case latin corresponds to hiragana;

+# upper case latin to katakana.  The handling of

+# Hiragana and Katakana is largely the same.  The bulk

+# of the transliterator consists of two identical sets

+# of rules, differing only in case.

+

+# Because of minor differences between the two blocks

+# (e.g., the existence of small katakana ka and ke, but

+# no corresponding hiragana), some rules exist for only

+# one script.

+

+# Uses modified Hepburn. Small changes to make

+# unambiguous.

+

+#| Kunrei-shiki: Hepburn/MHepburn

+#| ------------------------------

+#| si:     shi

+#| si ~ya: sha

+#| si ~yu: shu

+#| si ~yo: sho

+#| zi:     ji

+#| zi ~ya: ja

+#| zi ~yu: ju

+#| zi ~yo: jo

+#| ti:     chi

+#| ti ~ya: cha

+#| ti ~yu: chu

+#| ti ~yu: cho

+#| tu:     tsu

+#| di:     ji/dji

+#| du:     zu/dzu

+#| hu:     fu

+

+#| For foreign words:

+#| -----------------

+#| se ~i   si

+#| si ~e   she

+#|

+#| ze ~i   zi

+#| zi ~e   je

+#|

+#| te ~i   ti

+#| ti ~e   che

+#| te ~u   tu

+#|

+#| de ~i   di

+#| de ~u   du

+#| de ~i   di

+#|

+#| he ~u:  hu

+#| hu ~a   fa

+#| hu ~i   fi

+#| hu ~e   he

+#| hu ~o   ho

+

+# Most small forms are generated, but if necessary

+# explicit small forms are given with ~a, ~ya, etc.

+

+#------------------------------------------------------

+# Variables

+

+$vowel=[aeiou];

+### $QUOTE='';

+

+# Hiragana block

+

+### $a2=ぁ;

+### $a=あ;

+### $i2=ぃ;

+### $i=い;

+### $u2=ぅ;

+### $u=う;

+### $e2=ぇ;

+### $e=え;

+### $o2=ぉ;

+### $o=お;

+

+### $ka=か;

+### $ga=が;

+### $ki=き;

+### $gi=ぎ;

+### $ku=く;

+### $gu=ぐ;

+### $ke=け;

+### $ge=げ;

+### $ko=こ;

+### $go=ご;

+

+### $sa=さ;

+### $za=ざ;

+### $si=し;

+### $zi=じ;

+### $su=す;

+### $zu=ず;

+### $se=せ;

+### $ze=ぜ;

+### $so=そ;

+### $zo=ぞ;

+

+### $ta=た;

+### $da=だ;

+### $ti=ち;

+### $di=ぢ;

+### $tu2=っ;

+### $tu=つ;

+### $du=づ;

+### $te=て;

+### $de=で;

+### $to=と;

+### $do=ど;

+

+### $na=な;

+### $ni=に;

+### $nu=ぬ;

+### $ne=ね;

+### $no=の;

+

+### $ha=は;

+### $ba=ば;

+### $pa=ぱ;

+### $hi=ひ;

+### $bi=び;

+### $pi=ぴ;

+### $hu=ふ;

+### $bu=ぶ;

+### $pu=ぷ;

+### $he=へ;

+### $be=べ;

+### $pe=ぺ;

+### $ho=ほ;

+### $bo=ぼ;

+### $po=ぽ;

+

+### $ma=ま;

+### $mi=み;

+### $mu=む;

+### $me=め;

+### $mo=も;

+

+### $ya2=ゃ;

+### $ya=や;

+### $yu2=ゅ;

+### $yu=ゆ;

+### $yo2=ょ;

+### $yo=よ;

+

+### $ra=ら;

+### $ri=り;

+### $ru=る;

+### $re=れ;

+### $ro=ろ;

+

+### $wa2=ゎ;

+### $wa=わ;

+### $wi=ゐ;

+### $we=ゑ;

+### $wo=を;

+

+### $n=ん;

+### $vu=ゔ;

+

+# Alternates, just to make the rules easier

+### $yi2=ぃ;

+### $yi=い;

+### $ye2=ぇ;

+### $ye=え;

+### $wu=$u;

+# End alternates

+

+# Katakana block

+

+### $A2=ァ;

+### $A=ア;

+### $I2=ィ;

+### $I=イ;

+### $U2=ゥ;

+### $U=ウ;

+### $E2=ェ;

+### $E=エ;

+### $O2=ォ;

+### $O=オ;

+

+### $KA=カ;

+### $GA=ガ;

+### $KI=キ;

+### $GI=ギ;

+### $KU=ク;

+### $GU=グ;

+### $KE=ケ;

+### $GE=ゲ;

+### $KO=コ;

+### $GO=ゴ;

+

+### $KA2=ヵ; # Small Katakana KA; no Hiragana equiv.

+### $KE2=ヶ; # Small Katakana KE; no Hiragana equiv.

+

+### $SA=サ;

+### $ZA=ザ;

+### $SI=シ;

+### $ZI=ジ;

+### $SU=ス;

+### $ZU=ズ;

+### $SE=セ;

+### $ZE=ゼ;

+### $SO=ソ;

+### $ZO=ゾ;

+

+### $TA=タ;

+### $DA=ダ;

+### $TI=チ;

+### $DI=ヂ;

+### $TU2=ッ;

+### $TU=ツ;

+### $DU=ヅ;

+### $TE=テ;

+### $DE=デ;

+### $TO=ト;

+### $DO=ド;

+

+### $NA=ナ;

+### $NI=ニ;

+### $NU=ヌ;

+### $NE=ネ;

+### $NO=ノ;

+

+### $HA=ハ;

+### $BA=バ;

+### $PA=パ;

+### $HI=ヒ;

+### $BI=ビ;

+### $PI=ピ;

+### $HU=フ;

+### $BU=ブ;

+### $PU=プ;

+### $HE=ヘ;

+### $BE=ベ;

+### $PE=ペ;

+### $HO=ホ;

+### $BO=ボ;

+### $PO=ポ;

+

+### $MA=マ;

+### $MI=ミ;

+### $MU=ム;

+### $ME=メ;

+### $MO=モ;

+

+### $YA2=ャ;

+### $YA=ヤ;

+### $YU2=ュ;

+### $YU=ユ;

+### $YO2=ョ;

+### $YO=ヨ;

+### $WA2=ヮ;

+

+# Alternates, just to make the rules easier

+### $YI2=ィ;

+### $YI=イ;

+### $YE2=ェ;

+### $YE=エ;

+### $WU=$U;

+# End alternates

+

+### $RA=ラ;

+### $RI=リ;

+### $RU=ル;

+### $RE=レ;

+### $RO=ロ;

+

+### $VA=ヷ;

+### $VI=ヸ;

+### $VU=ヴ;

+### $VE=ヹ;

+### $VO=ヺ;

+

+### $WA=ワ;

+### $WI=ヰ;

+### $WE=ヱ;

+### $WO=ヲ;

+

+### $N=ン;

+### $LONG=ー;

+

+# Variables used for doubled-consonants with tsu

+

+$K_START=[カキクケコかきくけこ];

+$G_START=[ガギグゲゴがぎぐげご];

+

+$S_START=[サシスセソさしすせそ];

+$Z_START=[ザズゼゾざずぜぞ];

+$J_START=[ジじ];

+

+$T_START=[タチツテトたちつてと];

+$D_START=[ダヂヅデドだぢづでど];

+

+$N_START=[ナニヌネノなにぬねの];

+

+$H_START=[ハヒヘホはひへほ];

+$F_START=[フふ];

+$B_START=[バビブベボばびぶべぼ];

+$P_START=[パピプペポぱぴぷぺぽ];

+

+$M_START=[マミムメモまみむめも];

+

+$Y_START=[ヤユヨやゆよ];

+

+$R_START=[ラリルレロらりるれろ];

+

+$W_START=[ワヰヱヲわゐゑを];

+

+$V_START=[ヷヸヴヹヺゔ];

+

+# If ン is followed by $N_QUOTER, then it needs an

+# apostrophe after its romaji form to disambiguate it.

+# E.g., ン ア != ナ, so represent as "n'a", not "na".

+

+$N_QUOTER = [ア イ ウ エ オ ナ ニ ヌ ネ ノ \

+             ヤ ユ ヨ ン];

+

+$n_quoter = [あ い う え お な に ぬ ね の \

+             や ゆ よ ん];

+

+# Lowercase copies for convenience in making hiragana

+# rule set copy

+

+### $long = $LONG;

+### $quote = $QUOTE;

+### $k_start=$K_START;

+### $g_start=$G_START;

+### $s_start=$S_START;

+### $z_start=$Z_START;

+### $j_start=$J_START;

+### $t_start=$T_START;

+### $d_start=$D_START;

+### $n_start=$N_START;

+### $h_start=$H_START;

+### $f_start=$F_START;

+### $b_start=$B_START;

+### $p_start=$P_START;

+### $m_start=$M_START;

+### $y_start=$Y_START;

+### $r_start=$R_START;

+### $w_start=$W_START;

+### $v_start=$V_START;

+

+#------------------------------------------------------

+# Katakana rules

+

+# The rules immediately following are not shared.  That

+# is, they exist only for katakana, not for hiragana.

+

+VA<>ヷ;

+VI<>ヸ;

+VE<>ヹ;

+VO<>ヺ;

+'~KA'<>ヵ;

+'~KE'<>ヶ;

+

+# ~~~ BEGIN shared rules ~~~

+

+# The shared rules are copied from katakana to hiragana

+# and then mechanically lowercased.

+

+A<>ア;

+

+BA<>バ;

+BYA<ビャ;

+BYI<ビィ;

+BYU<ビュ;

+BYE<ビェ;

+BYO<ビョ;

+BI<>ビ;

+BU<>ブ;

+BE<>ベ;

+BO<>ボ;

+BY>ビ|'~Y';

+

+CHA<チャ;

+CHI'~I'<チィ; # Liu

+CHU<チュ;

+CHE<チェ;

+CHO<チョ;

+CHI<>チ;

+CH>チ|'~Y';

+

+C}I>|S;

+C}E>|S;

+

+DA<>ダ;

+DI<>ディ;

+DU<>デゥ;

+DE<>デ;

+DO<>ド;

+DZU<>ヅ;

+DJA<ヂャ;

+DJI'~I'<ヂィ; # Liu

+DJU<ヂュ;

+DJE<ヂェ;

+DJO<ヂョ;

+DJI<>ヂ;

+DJ>ヂ|'~Y';

+

+E<>エ;

+

+FA<ファ;

+FI<フィ;

+FE<フェ;

+FO<フォ;

+FU<>フ;

+

+GA<>ガ;

+GYA<ギャ;

+GYI<ギィ;

+GYU<ギュ;

+GYE<ギェ;

+GYO<ギョ;

+GI<>ギ;

+GU<>グ;

+GE<>ゲ;

+GO<>ゴ;

+GY>ギ|'~Y';

+

+HA<>ハ;

+HI<>ヒ;

+HU<>ヘゥ;

+HE<>ヘ;

+HO<>ホ;

+

+I<>イ;

+

+JA<ジャ;

+JI'~I'<ジィ; # Liu

+JU<ジュ;

+JE<ジェ;

+JO<ジョ;

+JI<>ジ;

+

+KA<>カ;

+KYA<キャ;

+KYI<キィ;

+KYU<キュ;

+KYE<キェ;

+KYO<キョ;

+KI<>キ;

+KU<>ク;

+KE<>ケ;

+KO<>コ;

+KY>キ|'~Y';

+

+MA<>マ;

+MYA<ミャ;

+MYI<ミィ;

+MYU<ミュ;

+MYE<ミェ;

+MYO<ミョ;

+MI<>ミ;

+MU<>ム;

+ME<>メ;

+MO<>モ;

+MY>ミ|'~Y';

+

+M}P>ン;

+M}B>ン;

+M}F>ン;

+M}V>ン;

+

+NA<>ナ;

+NYA<ニャ;

+NYI<ニィ;

+NYU<ニュ;

+NYE<ニェ;

+NYO<ニョ;

+NI<>ニ;

+NU<>ヌ;

+NE<>ネ;

+NO<>ノ;

+NY>ニ|'~Y';

+

+O<>オ;

+

+PA<>パ;

+PYA<ピャ;

+PYI<ピィ;

+PYU<ピュ;

+PYE<ピェ;

+PYO<ピョ;

+PI<>ピ;

+PU<>プ;

+PE<>ペ;

+PO<>ポ;

+PY>ピ|'~Y';

+

+RA<>ラ;

+RYA<リャ;

+RYI<リィ;

+RYU<リュ;

+RYE<リェ;

+RYO<リョ;

+RI<>リ;

+RU<>ル;

+RE<>レ;

+RO<>ロ;

+RY>リ|'~Y';

+

+SA<>サ;

+SI<>セィ;

+SU<>ス;

+SE<>セ;

+SO<>ソ;

+

+SHA<シャ;

+SHI'~I'<シィ; # Liu

+SHU<シュ;

+SHE<シェ;

+SHO<ショ;

+SHI<>シ;

+SH>シ|'~Y';

+

+TA<>タ;

+TI<>ティ;

+TU<>テゥ;

+TE<>テ;

+TO<>ト;

+

+# Double consonants

+

+B}B<>ッ}$B_START;

+C}K>ッ;

+C}C>ッ;

+C}Q>ッ;

+D}D<>ッ}$D_START;

+F}F<>ッ}$F_START;

+G}G<>ッ}$G_START;

+H}H<>ッ}$H_START;

+J}J<>ッ}$J_START;

+K}K<>ッ}$K_START;

+L}L>ッ;

+M}M<>ッ}$M_START;

+N}N<>ッ}$N_START;

+P}P<>ッ}$P_START;

+Q}Q>ッ;

+R}R<>ッ}$R_START;

+S}SH>ッ;

+S}S<>ッ}$S_START;

+T}CH>ッ;

+T}T<>ッ}$T_START;

+V}V<>ッ}$V_START;

+W}W<>ッ}$W_START;

+X}X>ッ;

+Y}Y<>ッ}$Y_START;

+Z}Z<>ッ}$Z_START;

+

+TSU<>ツ;

+

+U<>ウ;

+

+'V~A'<ヴァ; # Liu

+'V~I'<ヴィ; # Liu

+'V~E'<ヴェ; # Liu

+'V~O'<ヴォ; # Liu

+VU<>ヴ;

+

+WA<>ワ;

+WI<>ヰ;

+WU>ウ;

+WE<>ヱ;

+WO<>ヲ;

+

+YA<>ヤ;

+YI>イ;

+YU<>ユ;

+YE>エ;

+YO<>ヨ;

+

+ZA<>ザ;

+ZI<>ゼィ;

+ZU<>ズ;

+ZE<>ゼ;

+ZO<>ゾ;

+

+# Prolonged vowel mark. This indicates a doubling of

+# the preceding vowel sound in both katakana and

+# hiragana.

+

+A<A{ー; # Liu

+E<E{ー; # Liu

+I<I{ー; # Liu

+O<O{ー; # Liu

+U<U{ー; # Liu

+

+# Small forms

+

+'~A'<>ァ;

+'~I'<>ィ;

+'~U'<>ゥ;

+'~E'<>ェ;

+'~O'<>ォ;

+'~TSU'<>ッ;

+'~WA'<>ヮ;

+'~YA'<>ャ;

+'~YI'>ィ;

+'~YU'<>ュ;

+'~YE'>ェ;

+'~YO'<>ョ;

+

+# One-way latin->kana rules.  These do not occur in

+# well-formed romaji representing actual Japanese text.

+# Their purpose is to make all romaji map to kana of

+# some sort.

+

+# The following are not really necessary, but produce

+# slightly more natural results.

+

+CY>セィ;

+DY>ディ;

+HY>ヒ;

+SY>セィ;

+TY>ティ;

+ZY>ゼィ;

+

+# Simple substitutions using backup

+

+C>|K;

+F>フ|'~';

+J>ジ|'~Y';

+L>|R;

+Q>|K;

+V>ヴ|'~';

+W>ウ|'~';

+X>|KS;

+

+# Isolated consonants listed here so as not to mask

+# longer rules above.

+

+B>ブ;

+D>デ;

+G>グ;

+H>ヘ;

+K>ク;

+M>ン;

+N''<ン}$N_QUOTER;

+N<>ン;

+P>プ;

+R>ル;

+S>ス;

+T>テ;

+Y>イ;

+Z>ズ;

+

+# ~~~ END shared rules ~~~

+

+#------------------------------------------------------

+# Hiragana rules

+

+# Currently, there are no hiragana rules other than the

+# shared rules.

+

+# ~~~ BEGIN shared rules ~~~

+

+# The shared rules are copied from katakana to hiragana

+# and then mechanically lowercased.

+

+a<>あ;

+

+ba<>ば;

+bya<びゃ;

+byi<びぃ;

+byu<びゅ;

+bye<びぇ;

+byo<びょ;

+bi<>び;

+bu<>ぶ;

+be<>べ;

+bo<>ぼ;

+by>び|'~y';

+

+cha<ちゃ;

+chi'~i'<ちぃ; # liu

+chu<ちゅ;

+che<ちぇ;

+cho<ちょ;

+chi<>ち;

+ch>ち|'~y';

+

+c}i>|s;

+c}e>|s;

+

+da<>だ;

+di<>でぃ;

+du<>でぅ;

+de<>で;

+do<>ど;

+dzu<>づ;

+dja<ぢゃ;

+dji'~i'<ぢぃ; # liu

+dju<ぢゅ;

+dje<ぢぇ;

+djo<ぢょ;

+dji<>ぢ;

+dj>ぢ|'~y';

+

+e<>え;

+

+fa<ふぁ;

+fi<ふぃ;

+fe<ふぇ;

+fo<ふぉ;

+fu<>ふ;

+

+ga<>が;

+gya<ぎゃ;

+gyi<ぎぃ;

+gyu<ぎゅ;

+gye<ぎぇ;

+gyo<ぎょ;

+gi<>ぎ;

+gu<>ぐ;

+ge<>げ;

+go<>ご;

+gy>ぎ|'~y';

+

+ha<>は;

+hi<>ひ;

+hu<>へぅ;

+he<>へ;

+ho<>ほ;

+

+i<>い;

+

+ja<じゃ;

+ji'~i'<じぃ; # liu

+ju<じゅ;

+je<じぇ;

+jo<じょ;

+ji<>じ;

+

+ka<>か;

+kya<きゃ;

+kyi<きぃ;

+kyu<きゅ;

+kye<きぇ;

+kyo<きょ;

+ki<>き;

+ku<>く;

+ke<>け;

+ko<>こ;

+ky>き|'~y';

+

+ma<>ま;

+mya<みゃ;

+myi<みぃ;

+myu<みゅ;

+mye<みぇ;

+myo<みょ;

+mi<>み;

+mu<>む;

+me<>め;

+mo<>も;

+my>み|'~y';

+

+m}p>ん;

+m}b>ん;

+m}f>ん;

+m}v>ん;

+

+na<>な;

+nya<にゃ;

+nyi<にぃ;

+nyu<にゅ;

+nye<にぇ;

+nyo<にょ;

+ni<>に;

+nu<>ぬ;

+ne<>ね;

+no<>の;

+ny>に|'~y';

+

+o<>お;

+

+pa<>ぱ;

+pya<ぴゃ;

+pyi<ぴぃ;

+pyu<ぴゅ;

+pye<ぴぇ;

+pyo<ぴょ;

+pi<>ぴ;

+pu<>ぷ;

+pe<>ぺ;

+po<>ぽ;

+py>ぴ|'~y';

+

+ra<>ら;

+rya<りゃ;

+ryi<りぃ;

+ryu<りゅ;

+rye<りぇ;

+ryo<りょ;

+ri<>り;

+ru<>る;

+re<>れ;

+ro<>ろ;

+ry>り|'~y';

+

+sa<>さ;

+si<>せぃ;

+su<>す;

+se<>せ;

+so<>そ;

+

+sha<しゃ;

+shi'~i'<しぃ; # liu

+shu<しゅ;

+she<しぇ;

+sho<しょ;

+shi<>し;

+sh>し|'~y';

+

+ta<>た;

+ti<>てぃ;

+tu<>てぅ;

+te<>て;

+to<>と;

+

+# double consonants

+

+b}b<>っ}$B_START;

+c}k>っ;

+c}c>っ;

+c}q>っ;

+d}d<>っ}$D_START;

+f}f<>っ}$F_START;

+g}g<>っ}$G_START;

+h}h<>っ}$H_START;

+j}j<>っ}$J_START;

+k}k<>っ}$K_START;

+l}l>っ;

+m}m<>っ}$M_START;

+n}n<>っ}$N_START;

+p}p<>っ}$P_START;

+q}q>っ;

+r}r<>っ}$R_START;

+s}sh>っ;

+s}s<>っ}$S_START;

+t}ch>っ;

+t}t<>っ}$T_START;

+v}v<>っ}$V_START;

+w}w<>っ}$W_START;

+x}x>っ;

+y}y<>っ}$Y_START;

+z}z<>っ}$Z_START;

+

+tsu<>つ;

+

+u<>う;

+

+'v~a'<ゔぁ; # liu

+'v~i'<ゔぃ; # liu

+'v~e'<ゔぇ; # liu

+'v~o'<ゔぉ; # liu

+vu<>ゔ;

+

+wa<>わ;

+wi<>ゐ;

+wu>う;

+we<>ゑ;

+wo<>を;

+

+ya<>や;

+yi>い;

+yu<>ゆ;

+ye>え;

+yo<>よ;

+

+za<>ざ;

+zi<>ぜぃ;

+zu<>ず;

+ze<>ぜ;

+zo<>ぞ;

+

+# prolonged vowel mark. this indicates a doubling of

+# the preceding vowel sound in both katakana and

+# hiragana.

+

+a<a{ー; # liu

+e<e{ー; # liu

+i<i{ー; # liu

+o<o{ー; # liu

+u<u{ー; # liu

+

+# small forms

+

+'~a'<>ぁ;

+'~i'<>ぃ;

+'~u'<>ぅ;

+'~e'<>ぇ;

+'~o'<>ぉ;

+'~tsu'<>っ;

+'~wa'<>ゎ;

+'~ya'<>ゃ;

+'~yi'>ぃ;

+'~yu'<>ゅ;

+'~ye'>ぇ;

+'~yo'<>ょ;

+

+# one-way latin->kana rules.  these do not occur in

+# well-formed romaji representing actual japanese text.

+# their purpose is to make all romaji map to kana of

+# some sort.

+

+# the following are not really necessary, but produce

+# slightly more natural results.

+

+cy>せぃ;

+dy>でぃ;

+hy>ひ;

+sy>せぃ;

+ty>てぃ;

+zy>ぜぃ;

+

+# simple substitutions using backup

+

+c>|k;

+f>ふ|'~';

+j>じ|'~y';

+l>|r;

+q>|k;

+v>ゔ|'~';

+w>う|'~';

+x>|ks;

+

+# isolated consonants listed here so as not to mask

+# longer rules above.

+

+b>ぶ;

+d>で;

+g>ぐ;

+h>へ;

+k>く;

+m>ん;

+n''<ん}$n_quoter;

+n<>ん;

+p>ぷ;

+r>る;

+s>す;

+t>て;

+y>い;

+z>ず;

+

+# ~~~ END shared rules ~~~

+

+#------------------------------------------------------

+# Final cleanup

+

+'~'>; # delete stray tildes

+''>; # delete stray quotes

+'-'>ー;

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Malayalam_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Malayalam_InterIndic.utf8.txt
new file mode 100755
index 0000000..0da0b36
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Malayalam_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Oriya_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Oriya_InterIndic.utf8.txt
new file mode 100755
index 0000000..6d3c4f6
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Oriya_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_StraightQuotes_CurlyQuotes.utf8.txt b/src/com/ibm/text/resources/Transliterator_StraightQuotes_CurlyQuotes.utf8.txt
new file mode 100755
index 0000000..df4ef91
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_StraightQuotes_CurlyQuotes.utf8.txt
@@ -0,0 +1,77 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:42:07 2001

+#--------------------------------------------------------------------

+

+# StraightQuotes-CurlyQuotes

+

+# Rewritten using character codes [LIU]

+$white=[[:Zs:][:Zl:][:Zp:]];

+$black=[^$white];

+$open=[:Ps:];

+### $dquote='\"';

+

+### $lAng=〈;

+### $ldAng=《;

+### $lBrk='[';

+### $lBrc='{';

+

+### $lquote=‘;

+### $rquote=’;

+### $ldquote=“;

+### $rdquote=”;

+

+### $ldguill=«;

+### $rdguill=»;

+### $lguill=‹;

+### $rguill=›;

+

+### $mdash=—;

+

+########################################

+# Conversions from input

+########################################

+

+# join single quotes

+‘''>“;

+‘‘>“;

+’''>”;

+’’>”;

+

+#smart single quotes

+$white{''>‘;

+$open{''>‘;

+$black{''>’;

+''>‘;

+

+#smart doubles

+$white{'\"'>“;

+$open{'\"'>“;

+$black{'\"'>”;

+'\"'>“;

+

+# join single guillemets

+››>»;

+'>>'>»;

+‹‹>«;

+'<<'>«;

+

+# prevent double spaces

+\\ {\\ >;

+

+# join hyphens into dash ### BIDIRECTIONAL ###

+'--'<>—;

+

+########################################

+# Conversions back to input

+########################################

+

+#smart quotes

+''<‘;

+''<’;

+'\"'<“;

+'\"'<”;

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_Tamil_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Tamil_InterIndic.utf8.txt
new file mode 100755
index 0000000..c902b21
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Tamil_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_Telugu_InterIndic.utf8.txt b/src/com/ibm/text/resources/Transliterator_Telugu_InterIndic.utf8.txt
new file mode 100755
index 0000000..414183d
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_Telugu_InterIndic.utf8.txt
Binary files differ
diff --git a/src/com/ibm/text/resources/Transliterator_UnicodeName_UnicodeChar.utf8.txt b/src/com/ibm/text/resources/Transliterator_UnicodeName_UnicodeChar.utf8.txt
new file mode 100755
index 0000000..ba5ace2
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_UnicodeName_UnicodeChar.utf8.txt
@@ -0,0 +1,1522 @@
+#--------------------------------------------------------------------

+# Copyright (c) 1999-2001, International Business Machines

+# Corporation and others.  All Rights Reserved.

+#--------------------------------------------------------------------

+# Date: Tue Jan 23 12:42:08 2001

+#--------------------------------------------------------------------

+

+# UnicodeName-UnicodeChar

+

+'account of%'>℀

+'addressed to the subject%'>℁

+'adi shakti%'>☬

+'airplane%'>✈

+'all equal to%'>≌

+'almost equal or equal to%'>≊

+'almost equal to%'>≈

+'angle%'>∠

+'angstrom unit%'>Å

+'ankh%'>☥

+'anticlockwise contour integral%'>∳

+'anticlockwise open circle arrow%'>↺

+'anticlockwise top semicircle arrow%'>↶

+'apl compose operator%'>⌀

+'apl out%'>⌁

+'apple logo%'>

+'approaches the limit%'>≐

+'approximately but not actually equal to%'>≆

+'approximately equal to or the image of%'>≒

+'approximately equal to%'>≅

+'aquarius%'>♒

+'arc%'>⌒

+'aries%'>♈

+'ascending node%'>☊

+'assertion%'>⊦

+'asterisk operator%'>∗

+'asterism%'>⁂

+'asymptotically equal to%'>≃

+'back-tilted shadowed white right arrow%'>➫

+'balloon-spoked asterisk%'>❉

+'ballot box with check%'>☑

+'ballot box with x%'>☒

+'ballot box%'>☐

+'ballot x%'>✘

+'barred eighth notes%'>♫

+'barred sixteenth notes%'>♬

+'because%'>∵

+'benzene ring%'>⌬

+'between%'>≬

+'biohazard%'>☣

+'black center white star%'>✬

+'black chess bishop%'>♝

+'black chess king%'>♚

+'black chess knight%'>♞

+'black chess pawn%'>♟

+'black chess queen%'>♛

+'black chess rook%'>♜

+'black circle%'>●

+'black club suit%'>♣

+'black diamond minus white x%'>❖

+'black diamond suit%'>♦

+'black diamond%'>◆

+'black down pointing small triangle%'>▾

+'black down pointing triangle%'>▼

+'black florette%'>✿

+'black four pointed star%'>✦

+'black heart suit%'>♥

+'black left pointing index%'>☚

+'black left pointing pointer%'>◄

+'black left pointing small triangle%'>◂

+'black left pointing triangle%'>◀

+'black lower left triangle%'>◣

+'black lower right triangle%'>◢

+'black nib%'>✒

+'black parallelogram%'>▰

+'black rectangle%'>▬

+'black right arrow%'>➡

+'black right arrowhead%'>➤

+'black right pointing index%'>☛

+'black right pointing pointer%'>►

+'black right pointing small triangle%'>▸

+'black right pointing triangle%'>▶

+'black scissors%'>✂

+'black small square%'>▪

+'black smiling face%'>☻

+'black spade suit%'>♠

+'black square%'>■

+'black star%'>★

+'black sun with rays%'>☀

+'black telephone%'>☎

+'black up pointing small triangle%'>▴

+'black up pointing triangle%'>▲

+'black upper left triangle%'>◤

+'black upper right triangle%'>◥

+'black vertical rectangle%'>▮

+'black-feathered lower right arrow%'>➴

+'black-feathered right arrow%'>➵

+'black-feathered upper right arrow%'>➶

+'black-letter c%'>ℭ

+'black-letter h%'>ℌ

+'black-letter i%'>ℑ

+'black-letter r%'>ℜ

+'black-letter z%'>ℨ

+'blank%'>␢

+'bottom half integral%'>⌡

+'bottom left corner%'>⌞

+'bottom left crop%'>⌍

+'bottom right corner%'>⌟

+'bottom right crop%'>⌌

+'bowtie%'>⋈

+'bra%'>⟨

+'broken vertical bar%'>¦

+'bullet operator%'>∙

+'bullet%'>•

+'bullseye%'>◎

+'c l symbol%'>℄

+'cada una%'>℆

+'caduceus%'>☤

+'cancer%'>♋

+'capricorn%'>♑

+'care of%'>℅

+'caret insertion point%'>⁁

+'caret%'>‸

+'caution sign%'>☡

+'cent sign%'>¢

+'character tie%'>⁀

+'check mark%'>✓

+'chi rho%'>☧

+'circle with all but upper left quadrant black%'>◕

+'circle with left half black%'>◐

+'circle with lower half black%'>◒

+'circle with right half black%'>◑

+'circle with upper half black%'>◓

+'circle with upper right quadrant black%'>◔

+'circle with vertical fill%'>◍

+'circled asterisk operator%'>⊛

+'circled dash%'>⊝

+'circled digit eight%'>⑧

+'circled digit five%'>⑤

+'circled digit four%'>④

+'circled digit nine%'>⑨

+'circled digit one%'>①

+'circled digit seven%'>⑦

+'circled digit six%'>⑥

+'circled digit three%'>③

+'circled digit two%'>②

+'circled digit zero%'>⓪

+'circled division slash%'>⊘

+'circled dot operator%'>⊙

+'circled equals%'>⊜

+'circled heavy white right arrow%'>➲

+'circled latin capital letter a%'>Ⓐ

+'circled latin capital letter b%'>Ⓑ

+'circled latin capital letter c%'>Ⓒ

+'circled latin capital letter d%'>Ⓓ

+'circled latin capital letter e%'>Ⓔ

+'circled latin capital letter f%'>Ⓕ

+'circled latin capital letter g%'>Ⓖ

+'circled latin capital letter h%'>Ⓗ

+'circled latin capital letter i%'>Ⓘ

+'circled latin capital letter j%'>Ⓙ

+'circled latin capital letter k%'>Ⓚ

+'circled latin capital letter l%'>Ⓛ

+'circled latin capital letter m%'>Ⓜ

+'circled latin capital letter n%'>Ⓝ

+'circled latin capital letter o%'>Ⓞ

+'circled latin capital letter p%'>Ⓟ

+'circled latin capital letter q%'>Ⓠ

+'circled latin capital letter r%'>Ⓡ

+'circled latin capital letter s%'>Ⓢ

+'circled latin capital letter t%'>Ⓣ

+'circled latin capital letter u%'>Ⓤ

+'circled latin capital letter v%'>Ⓥ

+'circled latin capital letter w%'>Ⓦ

+'circled latin capital letter x%'>Ⓧ

+'circled latin capital letter y%'>Ⓨ

+'circled latin capital letter z%'>Ⓩ

+'circled latin small letter a%'>ⓐ

+'circled latin small letter b%'>ⓑ

+'circled latin small letter c%'>ⓒ

+'circled latin small letter d%'>ⓓ

+'circled latin small letter e%'>ⓔ

+'circled latin small letter f%'>ⓕ

+'circled latin small letter g%'>ⓖ

+'circled latin small letter h%'>ⓗ

+'circled latin small letter i%'>ⓘ

+'circled latin small letter j%'>ⓙ

+'circled latin small letter k%'>ⓚ

+'circled latin small letter l%'>ⓛ

+'circled latin small letter m%'>ⓜ

+'circled latin small letter n%'>ⓝ

+'circled latin small letter o%'>ⓞ

+'circled latin small letter p%'>ⓟ

+'circled latin small letter q%'>ⓠ

+'circled latin small letter r%'>ⓡ

+'circled latin small letter s%'>ⓢ

+'circled latin small letter t%'>ⓣ

+'circled latin small letter u%'>ⓤ

+'circled latin small letter v%'>ⓥ

+'circled latin small letter w%'>ⓦ

+'circled latin small letter x%'>ⓧ

+'circled latin small letter y%'>ⓨ

+'circled latin small letter z%'>ⓩ

+'circled minus%'>⊖

+'circled number eighteen%'>⑱

+'circled number eleven%'>⑪

+'circled number fifteen%'>⑮

+'circled number fourteen%'>⑭

+'circled number nineteen%'>⑲

+'circled number seventeen%'>⑰

+'circled number sixteen%'>⑯

+'circled number ten%'>⑩

+'circled number thirteen%'>⑬

+'circled number twelve%'>⑫

+'circled number twenty%'>⑳

+'circled open center eight pointed star%'>❂

+'circled plus%'>⊕

+'circled postal mark%'>〶

+'circled ring operator%'>⊚

+'circled sans serif digit eight%'>➇

+'circled sans serif digit five%'>➄

+'circled sans serif digit four%'>➃

+'circled sans serif digit nine%'>➈

+'circled sans serif digit one%'>➀

+'circled sans serif digit seven%'>➆

+'circled sans serif digit six%'>➅

+'circled sans serif digit three%'>➂

+'circled sans serif digit two%'>➁

+'circled sans serif number ten%'>➉

+'circled times%'>⊗

+'circled white star%'>✪

+'clear key%'>⌧

+'clockwise contour integral%'>∲

+'clockwise integral%'>∱

+'clockwise open circle arrow%'>↻

+'clockwise top semicircle arrow%'>↷

+'closing angle bracket%'>〉

+'closing black lenticular bracket%'>】

+'closing corner bracket%'>」

+'closing double angle bracket%'>》

+'closing tortoise shell bracket%'>〕

+'closing white corner bracket%'>』

+'closing white lenticular bracket%'>〗

+'closing white square bracket%'>〛

+'closing white tortoise shell bracket%'>〙

+'cloud%'>☁

+'colon equal%'>≔

+'colon sign%'>₡

+'comet%'>☄

+'command key%'>⌘

+'complement%'>∁

+'conjunction%'>☌

+'contains as member%'>∋

+'contains as normal subgroup or equal to%'>⊵

+'contains as normal subgroup%'>⊳

+'contour integral%'>∮

+'copyright sign%'>©

+'corresponds to%'>≘

+'cross of jerusalem%'>☩

+'cross of lorraine%'>☨

+'cruzeiro sign%'>₢

+'cube root%'>∛

+'curly logical and%'>⋏

+'curly logical or%'>⋎

+'currency sign%'>¤

+'curved stem paragraph sign ornament%'>❡

+'dagger%'>†

+'dark shade%'>▓

+'dashed triangle-headed right arrow%'>➟

+'degree sign%'>°

+'degrees centigrade%'>℃

+'degrees fahrenheit%'>℉

+'degrees kelvin%'>K

+'delete to the left key%'>⌫

+'delete to the right key%'>⌦

+'delta equal to%'>≜

+'descending node%'>☋

+'diamond operator%'>⋄

+'difference between%'>≏

+'digit eight period%'>⒏

+'digit five period%'>⒌

+'digit four period%'>⒋

+'digit nine period%'>⒐

+'digit one period%'>⒈

+'digit seven period%'>⒎

+'digit six period%'>⒍

+'digit three period%'>⒊

+'digit two period%'>⒉

+'ditto mark%'>〃

+'divides%'>∣

+'division sign%'>÷

+'division slash%'>∕

+'division times%'>⋇

+'does not contain as member%'>∌

+'does not contain as normal subgroup or equal%'>⋭

+'does not contain as normal subgroup%'>⋫

+'does not divide%'>∤

+'does not force%'>⊮

+'does not precede or equal%'>⋠

+'does not precede%'>⊀

+'does not prove%'>⊬

+'does not succeed or equal%'>⋡

+'does not succeed%'>⊁

+'dot minus%'>∸

+'dot operator%'>⋅

+'dot plus%'>∔

+'dotted circle%'>◌

+'double comma quotation mark%'>”

+'double dagger%'>‡

+'double exclamation mark%'>‼

+'double hyphen%'>‿

+'double integral%'>∬

+'double intersection%'>⋒

+'double prime quotation mark%'>〞

+'double prime%'>″

+'double reversed comma quotation mark%'>‟

+'double subset%'>⋐

+'double superset%'>⋑

+'double turned comma quotation mark%'>“

+'double union%'>⋓

+'double vertical bar double right turnstile%'>⊫

+'double vertical bar%'>‖

+'double-struck c%'>ℂ

+'double-struck h%'>ℍ

+'double-struck n%'>ℕ

+'double-struck p%'>ℙ

+'double-struck q%'>ℚ

+'double-struck r%'>ℝ

+'double-struck z%'>ℤ

+'down arrow from bar%'>↧

+'down arrow with corner left%'>↵

+'down arrow with double stroke%'>⇟

+'down arrow with tip left%'>↲

+'down arrow with tip right%'>↳

+'down arrow%'>↓

+'down arrowhead%'>⌄

+'down dashed arrow%'>⇣

+'down double arrow%'>⇓

+'down harpoon with barb left%'>⇃

+'down harpoon with barb right%'>⇂

+'down paired arrows%'>⇊

+'down right diagonal ellipsis%'>⋱

+'down tack%'>⊤

+'down two headed arrow%'>↡

+'down zigzag arrow%'>↯

+'drafting point right arrow%'>➛

+'earth%'>♁

+'eight petalled outlined black florette%'>❁

+'eight pointed black star%'>✴

+'eight pointed pinwheel star%'>✵

+'eight pointed rectilinear black star%'>✷

+'eight spoked asterisk%'>✳

+'eight teardrop-spoked propeller asterisk%'>❊

+'eighth note%'>♪

+'element of%'>∈

+'small element of%'>∊

+'element precedes under relation%'>⊰

+'element succeeds under relation%'>⊱

+'em dash%'>—

+'em quad%'> 

+'em space%'> 

+'empty set%'>∅

+'en dash%'>–

+'en quad%'> 

+'en space%'> 

+'enclosing circle slash%'>⃠

+'enclosing circle%'>⃝

+'enclosing diamond%'>⃟

+'enclosing square%'>⃞

+'end of proof%'>∎

+'enter key%'>⌤

+'envelope%'>✉

+'equal and parallel to%'>⋕

+'equal colon%'>≕

+'equal to by definition%'>≝

+'equal to or greater than%'>⋝

+'equal to or less than%'>⋜

+'equal to or precedes%'>⋞

+'equal to or succeeds%'>⋟

+'equiangular to%'>≚

+'equivalent to%'>≍

+'estimates%'>≙

+'eulers%'>ℇ

+'euro-currency sign%'>₠

+'european standard packaging%'>℮

+'excess%'>∹

+'female sign%'>♀

+'feminine ordinal indicator%'>ª

+'figure dash%'>‒

+'figure space%'> 

+'first quarter moon%'>☽

+'first transfinite cardinal%'>ℵ

+'fisheye%'>◉

+'flat%'>♭

+'floral heart%'>❦

+'for all%'>∀

+'forces%'>⊩

+'forms double down and horizontal%'>╦

+'forms double down and left%'>╗

+'forms double down and right%'>╔

+'forms double horizontal%'>═

+'forms double up and horizontal%'>╩

+'forms double up and left%'>╝

+'forms double up and right%'>╚

+'forms double vertical and horizontal%'>╬

+'forms double vertical and left%'>╣

+'forms double vertical and right%'>╠

+'forms double vertical%'>║

+'forms down double and horizontal single%'>╥

+'forms down double and left single%'>╖

+'forms down double and right single%'>╓

+'forms down heavy and horizontal light%'>┰

+'forms down heavy and left light%'>┒

+'forms down heavy and left up light%'>┧

+'forms down heavy and right light%'>┎

+'forms down heavy and right up light%'>┟

+'forms down heavy and up horizontal light%'>╁

+'forms down light and horizontal heavy%'>┯

+'forms down light and left heavy%'>┑

+'forms down light and left up heavy%'>┩

+'forms down light and right heavy%'>┍

+'forms down light and right up heavy%'>┡

+'forms down light and up horizontal heavy%'>╇

+'forms down single and horizontal double%'>╤

+'forms down single and left double%'>╕

+'forms down single and right double%'>╒

+'forms heavy double dash horizontal%'>╍

+'forms heavy double dash vertical%'>╏

+'forms heavy down and horizontal%'>┳

+'forms heavy down and left%'>┓

+'forms heavy down and right%'>┏

+'forms heavy down%'>╻

+'forms heavy horizontal%'>━

+'forms heavy left and light right%'>╾

+'forms heavy left%'>╸

+'forms heavy quadruple dash horizontal%'>┉

+'forms heavy quadruple dash vertical%'>┋

+'forms heavy right%'>╺

+'forms heavy triple dash horizontal%'>┅

+'forms heavy triple dash vertical%'>┇

+'forms heavy up and horizontal%'>┻

+'forms heavy up and left%'>┛

+'forms heavy up and light down%'>╿

+'forms heavy up and right%'>┗

+'forms heavy up%'>╹

+'forms heavy vertical and horizontal%'>╋

+'forms heavy vertical and left%'>┫

+'forms heavy vertical and right%'>┣

+'forms heavy vertical%'>┃

+'forms left down heavy and right up light%'>╅

+'forms left heavy and right down light%'>┭

+'forms left heavy and right up light%'>┵

+'forms left heavy and right vertical light%'>┽

+'forms left lighand right down heavy%'>┲

+'forms left light and right down heavy%'>┲

+'forms left light and right up heavy%'>┺

+'forms left light and right vertical heavy%'>╊

+'forms left up heavy and right down light%'>╃

+'forms light arc down and left%'>╮

+'forms light arc down and right%'>╭

+'forms light arc up and left%'>╯

+'forms light arc up and right%'>╰

+'forms light diagonal cross%'>╳

+'forms light diagonal upper left to lower right%'>╲

+'forms light diagonal upper right to lower left%'>╱

+'forms light double dash horizontal%'>╌

+'forms light double dash vertical%'>╎

+'forms light down and horizontal%'>┬

+'forms light down and left%'>┐

+'forms light down and right%'>┌

+'forms light down%'>╷

+'forms light horizontal%'>─

+'forms light left and heavy right%'>╼

+'forms light left%'>╴

+'forms light quadruple dash horizontal%'>┈

+'forms light quadruple dash vertical%'>┊

+'forms light right%'>╶

+'forms light triple dash horizontal%'>┄

+'forms light triple dash vertical%'>┆

+'forms light up and heavy down%'>╽

+'forms light up and horizontal%'>┴

+'forms light up and left%'>┘

+'forms light up and right%'>└

+'forms light up%'>╵

+'forms light vertical and horizontal%'>┼

+'forms light vertical and left%'>┤

+'forms light vertical and right%'>├

+'forms light vertical%'>│

+'forms right down heavy and left up light%'>╆

+'forms right heavy and left down light%'>┮

+'forms right heavy and left up light%'>┶

+'forms right heavy and left vertical light%'>┾

+'forms right light and left down heavy%'>┱

+'forms right light and left up heavy%'>┹

+'forms right light and left vertical heavy%'>╉

+'forms right up heavy and left down light%'>╄

+'forms up double and horizontal single%'>╨

+'forms up double and left single%'>╜

+'forms up double and right single%'>╙

+'forms up heavy and down horizontal light%'>╀

+'forms up heavy and horizontal light%'>┸

+'forms up heavy and left down light%'>┦

+'forms up heavy and left light%'>┚

+'forms up heavy and right down light%'>┞

+'forms up heavy and right light%'>┖

+'forms up light and down horizontal heavy%'>╈

+'forms up light and horizontal heavy%'>┷

+'forms up light and left down heavy%'>┪

+'forms up light and left heavy%'>┙

+'forms up light and right down heavy%'>┢

+'forms up light and right heavy%'>┕

+'forms up single and horizontal double%'>╧

+'forms up single and left double%'>╛

+'forms up single and right double%'>╘

+'forms vertical double and horizontal single%'>╫

+'forms vertical double and left single%'>╢

+'forms vertical double and right single%'>╟

+'forms vertical heavy and horizontal light%'>╂

+'forms vertical heavy and left light%'>┨

+'forms vertical heavy and right light%'>┠

+'forms vertical light and horizontal heavy%'>┿

+'forms vertical light and left heavy%'>┥

+'forms vertical light and right heavy%'>┝

+'forms vertical single and horizontal double%'>╪

+'forms vertical single and left double%'>╡

+'forms vertical single and right double%'>╞

+'four balloon-spoked asterisk%'>✣

+'four club-spoked asterisk%'>✥

+'four teardrop-spoked asterisk%'>✢

+'four-per-em space%'> 

+'fourth root%'>∜

+'fourth transfinite cardinal%'>ℸ

+'fraction five eighths%'>⅝

+'fraction five sixths%'>⅚

+'fraction four fifths%'>⅘

+'fraction numerator one%'>⅟

+'fraction one eighth%'>⅛

+'fraction one fifth%'>⅕

+'fraction one half%'>½

+'fraction one quarter%'>¼

+'fraction one sixth%'>⅙

+'fraction one third%'>⅓

+'fraction seven eighths%'>⅞

+'fraction slash%'>⁄

+'fraction three eighths%'>⅜

+'fraction three fifths%'>⅗

+'fraction three quarters%'>¾

+'fraction two fifths%'>⅖

+'fraction two thirds%'>⅔

+'french franc sign%'>₣

+'front-tilted shadowed white right arrow%'>➬

+'frown%'>⌢

+'full block%'>█

+'gemini%'>♊

+'geometric proportion%'>∺

+'geometrically equal to%'>≑

+'geometrically equivalent to%'>≎

+'geta mark%'>〓

+'graphic for acknowledge%'>␆

+'graphic for backspace%'>␈

+'graphic for bell%'>␇

+'graphic for cancel%'>␘

+'graphic for carriage return%'>␍

+'graphic for data link escape%'>␐

+'graphic for delete%'>␡

+'graphic for device control four%'>␔

+'graphic for device control one%'>␑

+'graphic for device control three%'>␓

+'graphic for device control two%'>␒

+'graphic for end of medium%'>␙

+'graphic for end of text%'>␃

+'graphic for end of transmission block%'>␗

+'graphic for end of transmission%'>␄

+'graphic for enquiry%'>␅

+'graphic for escape%'>␛

+'graphic for file separator%'>␜

+'graphic for form feed%'>␌

+'graphic for group separator%'>␝

+'graphic for horizontal tabulation%'>␉

+'graphic for line feed%'>␊

+'graphic for negative acknowledge%'>␕

+'graphic for newline%'>␤

+'graphic for null%'>␀

+'graphic for record separator%'>␞

+'graphic for shift in%'>␏

+'graphic for shift out%'>␎

+'graphic for space%'>␠

+'graphic for start of heading%'>␁

+'graphic for start of text%'>␂

+'graphic for substitute%'>␚

+'graphic for synchronous idle%'>␖

+'graphic for unit separator%'>␟

+'graphic for vertical tabulation%'>␋

+'greater than but not equal to%'>≩

+'greater than but not equivalent to%'>⋧

+'greater than equal to or less than%'>⋛

+'greater than or equal to%'>≥

+'greater than or equivalent to%'>≳

+'greater than or less than%'>≷

+'greater than over equal to%'>≧

+'greater than with dot%'>⋗

+'hair space%'> 

+'hammer and sickle%'>☭

+'hangul double dot tone mark%'>〯

+'hangul single dot tone mark%'>〮

+'hangzhou numeral eight%'>〨

+'hangzhou numeral five%'>〥

+'hangzhou numeral four%'>〤

+'hangzhou numeral nine%'>〩

+'hangzhou numeral one%'>〡

+'hangzhou numeral seven%'>〧

+'hangzhou numeral six%'>〦

+'hangzhou numeral three%'>〣

+'hangzhou numeral two%'>〢

+'heavy asterisk%'>✱

+'heavy black curved down and right arrow%'>➥

+'heavy black curved up and right arrow%'>➦

+'heavy black heart%'>❤

+'heavy black-feathered lower right arrow%'>➷

+'heavy black-feathered right arrow%'>➸

+'heavy black-feathered upper right arrow%'>➹

+'heavy check mark%'>✔

+'heavy chevron snowflake%'>❆

+'heavy concave-pointed black right arrow%'>➨

+'heavy dashed triangle-headed right arrow%'>➠

+'heavy double comma quotation mark ornament%'>❞

+'heavy double turned comma quotation mark ornament%'>❝

+'heavy eight pointed rectilinear black star%'>✸

+'heavy eight teardrop-spoked propeller asterisk%'>❋

+'heavy exclamation mark ornament%'>❢

+'heavy four balloon-spoked asterisk%'>✤

+'heavy greek cross%'>✚

+'heavy heart exclamation mark ornament%'>❣

+'heavy lower right arrow%'>➘

+'heavy lower right-shadowed white right arrow%'>➭

+'heavy multiplication x%'>✖

+'heavy open center cross%'>✜

+'heavy outlined black star%'>✮

+'heavy right arrow%'>➙

+'heavy round-tipped right arrow%'>➜

+'heavy single comma quotation mark ornament%'>❜

+'heavy single turned comma quotation mark ornament%'>❛

+'heavy sparkle%'>❈

+'heavy teardrop-shanked right arrow%'>➻

+'heavy teardrop-spoked asterisk%'>✽

+'heavy teardrop-spoked pinwheel asterisk%'>❃

+'heavy triangle-headed right arrow%'>➞

+'heavy upper right arrow%'>➚

+'heavy upper right-shadowed white right arrow%'>➮

+'heavy vertical bar%'>❚

+'heavy wedge-tailed right arrow%'>➽

+'heavy wide-headed right arrow%'>➔

+'hermitian conjugate matrix%'>⊹

+'homothetic%'>∻

+'horizontal ellipsis%'>…

+'hot springs%'>♨

+'hourglass%'>⌛

+'house%'>⌂

+'hyphen bullet%'>⁃

+'hyphen%'>‐

+'hyphenation point%'>‧

+'identical to%'>≡

+'ideographic closing mark%'>〆

+'ideographic comma%'>、

+'ideographic departing tone mark%'>〬

+'ideographic ditto mark%'>〄

+'ideographic entering tone mark%'>〭

+'ideographic half fill space%'>〿

+'ideographic iteration mark%'>々

+'ideographic level tone mark%'>〪

+'ideographic number zero%'>〇

+'ideographic period%'>。

+'ideographic rising tone mark%'>〫

+'ideographic space%'> 

+'image of or approximately equal to%'>≓

+'image of%'>⊷

+'increment%'>∆

+'infinity%'>∞

+'integral%'>∫

+'intercalate%'>⊺

+'interrobang%'>‽

+'intersection%'>∩

+'inverse bullet%'>◘

+'inverse circled digit eight%'>❽

+'inverse circled digit five%'>❺

+'inverse circled digit four%'>❹

+'inverse circled digit nine%'>❾

+'inverse circled digit one%'>❶

+'inverse circled digit seven%'>❼

+'inverse circled digit six%'>❻

+'inverse circled digit three%'>❸

+'inverse circled digit two%'>❷

+'inverse circled number ten%'>❿

+'inverse circled sans serif digit eight%'>➑

+'inverse circled sans serif digit five%'>➎

+'inverse circled sans serif digit four%'>➍

+'inverse circled sans serif digit nine%'>➒

+'inverse circled sans serif digit one%'>➊

+'inverse circled sans serif digit seven%'>➐

+'inverse circled sans serif digit six%'>➏

+'inverse circled sans serif digit three%'>➌

+'inverse circled sans serif digit two%'>➋

+'inverse circled sans serif number ten%'>➓

+'inverse white circle%'>◙

+'inverted exclamation mark%'>¡

+'inverted lazy s%'>∾

+'inverted question mark%'>¿

+'jupiter%'>♃

+'ket%'>⟩

+'keyboard%'>⌨

+'l b bar symbol%'>℔

+'last quarter moon%'>☾

+'latin cross%'>✝

+'left arrow from bar%'>↤

+'left arrow over right arrow%'>⇆

+'left arrow to bar over right arrow to bar%'>↹

+'left arrow to bar%'>⇤

+'left arrow with hook%'>↩

+'left arrow with loop%'>↫

+'left arrow with stroke%'>↚

+'left arrow with tail%'>↢

+'left arrow%'>←

+'left ceiling%'>⌈

+'left dashed arrow%'>⇠

+'left double arrow with stroke%'>⇍

+'left double arrow%'>⇐

+'left five eighths block%'>▋

+'left floor%'>⌊

+'left half black circle%'>◖

+'left half block%'>▌

+'left harpoon over right harpoon%'>⇋

+'left harpoon with barb down%'>↽

+'left harpoon with barb up%'>↼

+'left normal factor semidirect product%'>⋉

+'left one eighth block%'>▏

+'left one quarter block%'>▎

+'left paired arrows%'>⇇

+'left pointing guillemet%'>«

+'left pointing single guillemet%'>‹

+'left right arrow with stroke%'>↮

+'left right arrow%'>↔

+'left right double arrow with stroke%'>⇎

+'left right double arrow%'>⇔

+'left right wave arrow%'>↭

+'left semidirect product%'>⋋

+'left seven eighths block%'>▉

+'left squiggle arrow%'>⇜

+'left tack%'>⊣

+'left three eighths block%'>▍

+'left three quarter block%'>▊

+'left triple arrow%'>⇚

+'left two headed arrow%'>↞

+'left wave arrow%'>↜

+'left-shaded white right arrow%'>➪

+'left-to-right embedding%'>‪

+'left-to-right mark%'>‎

+'left-to-right override%'>‭

+'leo%'>♌

+'less than but not equal to%'>≨

+'less than but not equivalent to%'>⋦

+'less than equal to or greater than%'>⋚

+'less than or equal to%'>≤

+'less than or equivalent to%'>≲

+'less than or greater than%'>≶

+'less than over equal to%'>≦

+'less than with dot%'>⋖

+'libra%'>♎

+'light shade%'>░

+'light vertical bar%'>❘

+'lightning%'>☇

+'line separator%'>


+'lira sign%'>₤

+'logical and%'>∧

+'logical or%'>∨

+'low double comma quotation mark%'>„

+'low double prime quotation mark%'>〟

+'low single comma quotation mark%'>‚

+'lower blade scissors%'>✃

+'lower five eighths block%'>▅

+'lower half block%'>▄

+'lower half circle%'>◡

+'lower half inverse white circle%'>◛

+'lower left arrow%'>↙

+'lower left double arrow%'>⇙

+'lower left quadrant circular arc%'>◟

+'lower one eighth block%'>▁

+'lower one quarter block%'>▂

+'lower right arrow%'>↘

+'lower right double arrow%'>⇘

+'lower right drop-shadowed white square%'>❏

+'lower right pencil%'>✎

+'lower right quadrant circular arc%'>◞

+'lower right shadowed white square%'>❑

+'lower seven eighths block%'>▇

+'lower three eighths block%'>▃

+'lower three quarter block%'>▆

+'lozenge%'>◊

+'male sign%'>♂

+'maltese cross%'>✠

+'masculine ordinal indicator%'>º

+'measured angle%'>∡

+'measured by%'>≞

+'medium shade%'>▒

+'medium vertical bar%'>❙

+'mercury%'>☿

+'mho%'>℧

+'micro sign%'>µ

+'middle dot%'>·

+'midline horizontal ellipsis%'>⋯

+'mill sign%'>₥

+'minus sign%'>−

+'minus tilde%'>≂

+'minus-or-plus sign%'>∓

+'models%'>⊧

+'modifier letter acute%'>ˊ

+'modifier letter apostrophe%'>ʼ

+'modifier letter centered left half ring%'>˓

+'modifier letter centered right half ring%'>˒

+'modifier letter circumflex%'>ˆ

+'modifier letter double prime%'>ʺ

+'modifier letter down arrowhead%'>˅

+'modifier letter down tack%'>˕

+'modifier letter extra-high tone bar%'>˥

+'modifier letter extra-low tone bar%'>˩

+'modifier letter glottal stop%'>ˀ

+'modifier letter grave%'>ˋ

+'modifier letter hacek%'>ˇ

+'modifier letter half triangular colon%'>ˑ

+'modifier letter high tone bar%'>˦

+'modifier letter left arrowhead%'>˂

+'modifier letter left half ring%'>ʿ

+'modifier letter low acute%'>ˏ

+'modifier letter low grave%'>ˎ

+'modifier letter low macron%'>ˍ

+'modifier letter low tone bar%'>˨

+'modifier letter low vertical line%'>ˌ

+'modifier letter macron%'>ˉ

+'modifier letter mid tone bar%'>˧

+'modifier letter minus sign%'>˗

+'modifier letter plus sign%'>˖

+'modifier letter prime%'>ʹ

+'modifier letter reversed comma%'>ʽ

+'modifier letter reversed glottal stop%'>ˁ

+'modifier letter rhotic hook%'>˞

+'modifier letter right arrowhead%'>˃

+'modifier letter right half ring%'>ʾ

+'modifier letter small capital inverted r%'>ʶ

+'modifier letter small gamma%'>ˠ

+'modifier letter small h hook%'>ʱ

+'modifier letter small h%'>ʰ

+'modifier letter small j%'>ʲ

+'modifier letter small l%'>ˡ

+'modifier letter small r%'>ʳ

+'modifier letter small reversed glottal stop%'>ˤ

+'modifier letter small s%'>ˢ

+'modifier letter small turned r hook%'>ʵ

+'modifier letter small turned r%'>ʴ

+'modifier letter small w%'>ʷ

+'modifier letter small x%'>ˣ

+'modifier letter small y%'>ʸ

+'modifier letter triangular colon%'>ː

+'modifier letter turned comma%'>ʻ

+'modifier letter up arrowhead%'>˄

+'modifier letter up tack%'>˔

+'modifier letter vertical line%'>ˈ

+'much greater than%'>≫

+'much less than%'>≪

+'multimap%'>⊸

+'multiplication sign%'>×

+'multiplication x%'>✕

+'multiset multiplication%'>⊍

+'multiset union%'>⊎

+'multiset%'>⊌

+'n-ary coproduct%'>∐

+'n-ary intersection%'>⋂

+'n-ary logical and%'>⋀

+'n-ary logical or%'>⋁

+'n-ary product%'>∏

+'n-ary summation%'>∑

+'n-ary union%'>⋃

+'nabla%'>∇

+'naira sign%'>₦

+'nand%'>⊼

+'natural%'>♮

+'negated double vertical bar double right turnstile%'>⊯

+'neither a subset of nor equal to%'>⊈

+'neither a superset of nor equal to%'>⊉

+'neither approximately nor actually equal to%'>≇

+'neither greater than nor equal to%'>≱

+'neither greater than nor equivalent to%'>≵

+'neither greater than nor less than%'>≹

+'neither less than nor equal to%'>≰

+'neither less than nor equivalent to%'>≴

+'neither less than nor greater than%'>≸

+'neptune%'>♆

+'new sheqel sign%'>₪

+'non-breaking hyphen%'>‑

+'non-breaking space%'> 

+'non-spacing acute below%'>̗

+'non-spacing acute tone mark%'>͈

+'non-spacing acute%'>́

+'non-spacing anticlockwise arrow above%'>⃔

+'non-spacing anticlockwise ring overlay%'>⃚

+'non-spacing breve below%'>̮

+'non-spacing breve%'>̆

+'non-spacing bridge below%'>̪

+'non-spacing candrabindu%'>̐

+'non-spacing cedilla%'>̧

+'non-spacing centerline overscore%'>́

+'non-spacing centerline underscore%'>ͅ

+'non-spacing circumflex below%'>̭

+'non-spacing circumflex%'>̂

+'non-spacing clockwise arrow above%'>⃕

+'non-spacing clockwise ring overlay%'>⃙

+'non-spacing comma above right%'>̕

+'non-spacing comma above%'>̓

+'non-spacing comma below%'>̦

+'non-spacing dashed overscore%'>̀

+'non-spacing dashed underscore%'>̈́

+'non-spacing diaeresis%'>̈

+'non-spacing dot above%'>̇

+'non-spacing dot below%'>̣

+'non-spacing double acute%'>̋

+'non-spacing double dot below%'>̤

+'non-spacing double grave%'>̏

+'non-spacing double overscore%'>̿

+'non-spacing double underscore%'>̳

+'non-spacing double vertical line above%'>̎

+'non-spacing double wavy overscore%'>̓

+'non-spacing down tack below%'>̞

+'non-spacing four dots above%'>⃜

+'non-spacing grave below%'>̖

+'non-spacing grave tone mark%'>͇

+'non-spacing grave%'>̀

+'non-spacing hacek below%'>̬

+'non-spacing hacek%'>̌

+'non-spacing hook above%'>̉

+'non-spacing horn%'>̛

+'non-spacing inverted breve below%'>̯

+'non-spacing inverted breve%'>̑

+'non-spacing inverted bridge below%'>̺

+'non-spacing inverted double arch below%'>̫

+'non-spacing left angle above%'>̚

+'non-spacing left arrow above%'>⃖

+'non-spacing left half ring below%'>̜

+'non-spacing left harpoon above%'>⃐

+'non-spacing left right arrow above%'>⃡

+'non-spacing left tack below%'>̘

+'non-spacing long bar overlay%'>̶

+'non-spacing long slash overlay%'≯

+'non-spacing long vertical bar overlay%'>⃒

+'non-spacing macron below%'>̱

+'non-spacing macron%'>̄

+'non-spacing minus sign below%'>̠

+'non-spacing ogonek%'>̨

+'non-spacing overscore%'>̅

+'non-spacing palatalized hook below%'>̡

+'non-spacing plus sign below%'>̟

+'non-spacing retroflex hook below%'>̢

+'non-spacing reversed comma above%'>̔

+'non-spacing right arrow above%'>⃗

+'non-spacing right half ring below%'>̹

+'non-spacing right harpoon above%'>⃑

+'non-spacing right tack below%'>̙

+'non-spacing ring above%'>̊

+'non-spacing ring below%'>̥

+'non-spacing ring overlay%'>⃘

+'non-spacing seagull below%'>̼

+'non-spacing short bar overlay%'>̵

+'non-spacing short slash overlay%'>̷

+'non-spacing short vertical bar overlay%'>⃓

+'non-spacing square below%'>̻

+'non-spacing three dots above%'>⃛

+'non-spacing tilde below%'>̰

+'non-spacing tilde overlay%'>̴

+'non-spacing tilde%'>̃

+'non-spacing turned comma above%'>̒

+'non-spacing underscore%'>̲

+'non-spacing up tack below%'>̝

+'non-spacing vertical line above%'>̍

+'non-spacing vertical line below%'>̩

+'non-spacing vertical tilde%'>̾

+'non-spacing wavy overscore%'>͂

+'non-spacing wavy underscore%'>͆

+'non-spacing x above%'>̽

+'nor%'>⊽

+'normal subgroup of or equal to%'>⊴

+'normal subgroup of%'>⊲

+'not a subset of%'>⊄

+'not a superset of%'>⊅

+'not almost equal to%'>≉

+'not an element of%'>∉

+'not asymptotically equal to%'>≄

+'not equal to%'>≠

+'not equivalent to%'>≭

+'not greater than%'>≯

+'not identical to%'>≢

+'not less than%'>≮

+'not normal subgroup of or equal to%'>⋬

+'not normal subgroup of%'>⋪

+'not parallel to%'>∦

+'not sign%'>¬

+'not square image of or equal to%'>⋢

+'not square original of or equal to%'>⋣

+'not tilde%'>≁

+'not true%'>⊭

+'notched lower right-shadowed white right arrow%'>➯

+'notched upper right-shadowed white right arrow%'>➱

+'number eighteen period%'>⒙

+'number eleven period%'>⒒

+'number fifteen period%'>⒖

+'number fourteen period%'>⒕

+'number nineteen period%'>⒚

+'number seventeen period%'>⒘

+'number sixteen period%'>⒗

+'number ten period%'>⒑

+'number thirteen period%'>⒔

+'number twelve period%'>⒓

+'number twenty period%'>⒛

+'numero%'>№

+'ocr amount of check%'>⑇

+'ocr belt buckle%'>⑄

+'ocr bow tie%'>⑅

+'ocr branch bank identification%'>⑆

+'ocr chair%'>⑁

+'ocr customer account number%'>⑉

+'ocr dash%'>⑈

+'ocr double backslash%'>⑊

+'ocr fork%'>⑂

+'ocr hook%'>⑀

+'ocr inverted fork%'>⑃

+'ohm%'>Ω

+'one dot leader%'>․

+'open box%'>␣

+'open center asterisk%'>✲

+'open center black star%'>✫

+'open center cross%'>✛

+'open center teardrop-spoked asterisk%'>✼

+'open-outlined right arrow%'>➾

+'opening angle bracket%'>〈

+'opening black lenticular bracket%'>【

+'opening corner bracket%'>「

+'opening double angle bracket%'>《

+'opening tortoise shell bracket%'>〔

+'opening white corner bracket%'>『

+'opening white lenticular bracket%'>〖

+'opening white square bracket%'>〚

+'opening white tortoise shell bracket%'>〘

+'opposition%'>☍

+'option key%'>⌥

+'original of%'>⊶

+'orthodox cross%'>☦

+'ounce%'>℥

+'outlined black star%'>✭

+'outlined greek cross%'>✙

+'outlined latin cross%'>✟

+'paragraph separator%'>


+'paragraph sign%'>¶

+'parallel to%'>∥

+'parenthesized digit eight%'>⑻

+'parenthesized digit five%'>⑸

+'parenthesized digit four%'>⑷

+'parenthesized digit nine%'>⑼

+'parenthesized digit one%'>⑴

+'parenthesized digit seven%'>⑺

+'parenthesized digit six%'>⑹

+'parenthesized digit three%'>⑶

+'parenthesized digit two%'>⑵

+'parenthesized latin small letter a%'>⒜

+'parenthesized latin small letter b%'>⒝

+'parenthesized latin small letter c%'>⒞

+'parenthesized latin small letter d%'>⒟

+'parenthesized latin small letter e%'>⒠

+'parenthesized latin small letter f%'>⒡

+'parenthesized latin small letter g%'>⒢

+'parenthesized latin small letter h%'>⒣

+'parenthesized latin small letter i%'>⒤

+'parenthesized latin small letter j%'>⒥

+'parenthesized latin small letter k%'>⒦

+'parenthesized latin small letter l%'>⒧

+'parenthesized latin small letter m%'>⒨

+'parenthesized latin small letter n%'>⒩

+'parenthesized latin small letter o%'>⒪

+'parenthesized latin small letter p%'>⒫

+'parenthesized latin small letter q%'>⒬

+'parenthesized latin small letter r%'>⒭

+'parenthesized latin small letter s%'>⒮

+'parenthesized latin small letter t%'>⒯

+'parenthesized latin small letter u%'>⒰

+'parenthesized latin small letter v%'>⒱

+'parenthesized latin small letter w%'>⒲

+'parenthesized latin small letter x%'>⒳

+'parenthesized latin small letter y%'>⒴

+'parenthesized latin small letter z%'>⒵

+'parenthesized number eighteen%'>⒅

+'parenthesized number eleven%'>⑾

+'parenthesized number fifteen%'>⒂

+'parenthesized number fourteen%'>⒁

+'parenthesized number nineteen%'>⒆

+'parenthesized number seventeen%'>⒄

+'parenthesized number sixteen%'>⒃

+'parenthesized number ten%'>⑽

+'parenthesized number thirteen%'>⒀

+'parenthesized number twelve%'>⑿

+'parenthesized number twenty%'>⒇

+'partial differential%'>∂

+'peace symbol%'>☮

+'pencil%'>✏

+'per mille sign%'>‰

+'per ten thousand sign%'>‱

+'perspective%'>⌆

+'peseta sign%'>₧

+'pinwheel star%'>✯

+'pisces%'>♓

+'pitchfork%'>⋔

+'planck constant over 2 pi%'>ℏ

+'planck constant%'>ℎ

+'plus-or-minus sign%'>±

+'pluto%'>♇

+'pop directional embedding%'>‬

+'position indicator%'>⌖

+'postal mark face%'>〠

+'postal mark%'>〒

+'pound sign%'>£

+'precedes but not equivalent to%'>⋨

+'precedes or equal to%'>≼

+'precedes or equivalent to%'>≾

+'precedes%'>≺

+'prescription take%'>℞

+'prime%'>′

+'projective%'>⌅

+'proportion%'>∷

+'proportional to%'>∝

+'punctuation space%'> 

+'quarter note%'>♩

+'questioned equal to%'>≟

+'quotation dash%'>―

+'radioactive%'>☢

+'ratio%'>∶

+'reference mark%'>※

+'registered trade mark sign%'>®

+'response%'>℟

+'reversed double prime quotation mark%'>〝

+'reversed double prime%'>‶

+'reversed not sign%'>⌐

+'reversed prime%'>‵

+'reversed tilde equals%'>⋍

+'reversed tilde%'>∽

+'reversed triple prime%'>‷

+'right angle with arc%'>⊾

+'right angle%'>∟

+'right arrow from bar%'>↦

+'right arrow over left arrow%'>⇄

+'right arrow to bar%'>⇥

+'right arrow with corner down%'>↴

+'right arrow with hook%'>↪

+'right arrow with loop%'>↬

+'right arrow with stroke%'>↛

+'right arrow with tail%'>↣

+'right arrow%'>→

+'right ceiling%'>⌉

+'right dashed arrow%'>⇢

+'right double arrow with stroke%'>⇏

+'right double arrow%'>⇒

+'right floor%'>⌋

+'right half black circle%'>◗

+'right half block%'>▐

+'right harpoon over left harpoon%'>⇌

+'right harpoon with barb down%'>⇁

+'right harpoon with barb up%'>⇀

+'right normal factor semidirect product%'>⋊

+'right one eighth block%'>▕

+'right paired arrows%'>⇉

+'right pointing guillemet%'>»

+'right pointing single guillemet%'>›

+'right semidirect product%'>⋌

+'right squiggle arrow%'>⇝

+'right tack%'>⊢

+'right triangle%'>⊿

+'right triple arrow%'>⇛

+'right two headed arrow%'>↠

+'right wave arrow%'>↝

+'right-shaded white right arrow%'>➩

+'right-to-left embedding%'>‫

+'right-to-left mark%'>‏

+'right-to-left override%'>‮

+'ring equal to%'>≗

+'ring in equal to%'>≖

+'ring operator%'>∘

+'roman numeral eight%'>Ⅷ

+'roman numeral eleven%'>Ⅺ

+'roman numeral fifty%'>Ⅼ

+'roman numeral five hundred%'>Ⅾ

+'roman numeral five thousand%'>ↁ

+'roman numeral five%'>Ⅴ

+'roman numeral four%'>Ⅳ

+'roman numeral nine%'>Ⅸ

+'roman numeral one hundred%'>Ⅽ

+'roman numeral one thousand c d%'>ↀ

+'roman numeral one thousand%'>Ⅿ

+'roman numeral one%'>Ⅰ

+'roman numeral seven%'>Ⅶ

+'roman numeral six%'>Ⅵ

+'roman numeral ten thousand%'>ↂ

+'roman numeral ten%'>Ⅹ

+'roman numeral three%'>Ⅲ

+'roman numeral twelve%'>Ⅻ

+'roman numeral two%'>Ⅱ

+'rotated floral heart bullet%'>❧

+'rotated heavy black heart bullet%'>❥

+'rupee sign%'>₨

+'sagittarius%'>♐

+'saltire%'>☓

+'saturn%'>♄

+'scorpius%'>♏

+'script b%'>ℬ

+'script e%'>ℰ

+'script f%'>ℱ

+'script h%'>ℋ

+'script i%'>ℐ

+'script l%'>ℒ

+'script m%'>ℳ

+'script p%'>℘

+'script r%'>ℛ

+'script small e%'>ℯ

+'script small g%'>ℊ

+'script small l%'>ℓ

+'script small o%'>ℴ

+'scruple%'>℈

+'second transfinite cardinal%'>ℶ

+'section sign%'>§

+'sector%'>⌔

+'segment%'>⌓

+'service mark%'>℠

+'set minus%'>∖

+'shadowed white circle%'>❍

+'shadowed white latin cross%'>✞

+'shadowed white star%'>✰

+'sharp%'>♯

+'sine wave%'>∿

+'single comma quotation mark%'>’

+'single reversed comma quotation mark%'>‛

+'single turned comma quotation mark%'>‘

+'six petalled black and white florette%'>✾

+'six pointed black star%'>✶

+'six-per-em space%'> 

+'sixteen pointed asterisk%'>✺

+'skull and crossbones%'>☠

+'small contains as member%'>∍

+'small roman numeral eight%'>ⅷ

+'small roman numeral eleven%'>ⅺ

+'small roman numeral fifty%'>ⅼ

+'small roman numeral five hundred%'>ⅾ

+'small roman numeral five%'>ⅴ

+'small roman numeral four%'>ⅳ

+'small roman numeral nine%'>ⅸ

+'small roman numeral one hundred%'>ⅽ

+'small roman numeral one thousand%'>ⅿ

+'small roman numeral one%'>ⅰ

+'small roman numeral seven%'>ⅶ

+'small roman numeral six%'>ⅵ

+'small roman numeral ten%'>ⅹ

+'small roman numeral three%'>ⅲ

+'small roman numeral twelve%'>ⅻ

+'small roman numeral two%'>ⅱ

+'smile%'>⌣

+'snowflake%'>❄

+'snowman%'>☃

+'soft hyphen%'>­

+'sound recording copyright%'>℗

+'spacing acute%'>´

+'spacing breve%'>˘

+'spacing cedilla%'>¸

+'spacing diaeresis%'>¨

+'spacing dot above%'>˙

+'spacing double acute%'>˝

+'spacing double underscore%'>‗

+'spacing macron%'>¯

+'spacing ogonek%'>˛

+'spacing overscore%'>‾

+'spacing ring above%'>˚

+'spacing tilde%'>˜

+'sparkle%'>❇

+'spherical angle%'>∢

+'square cap%'>⊓

+'square cup%'>⊔

+'square image of or equal to%'>⊑

+'square image of or not equal to%'>⋤

+'square image of%'>⊏

+'square lozenge%'>⌑

+'square original of or equal to%'>⊒

+'square original of or not equal to%'>⋥

+'square original of%'>⊐

+'square root%'>√

+'square with diagonal crosshatch fill%'>▩

+'square with horizontal fill%'>▤

+'square with left half black%'>◧

+'square with lower right diagonal half black%'>◪

+'square with orthogonal crosshatch fill%'>▦

+'square with right half black%'>◨

+'square with upper left diagonal half black%'>◩

+'square with upper left to lower right fill%'>▧

+'square with upper right to lower left fill%'>▨

+'square with vertical fill%'>▥

+'squared dot operator%'>⊡

+'squared minus%'>⊟

+'squared plus%'>⊞

+'squared times%'>⊠

+'squat black right arrow%'>➧

+'star and crescent%'>☪

+'star equals%'>≛

+'star of david%'>✡

+'star operator%'>⋆

+'stop directional override%'> 

+'strictly equivalent to%'>≣

+'subscript closing parenthesis%'>₎

+'subscript digit eight%'>₈

+'subscript digit five%'>₅

+'subscript digit four%'>₄

+'subscript digit nine%'>₉

+'subscript digit one%'>₁

+'subscript digit seven%'>₇

+'subscript digit six%'>₆

+'subscript digit three%'>₃

+'subscript digit two%'>₂

+'subscript digit zero%'>₀

+'subscript equals sign%'>₌

+'subscript hyphen-minus%'>₋

+'subscript opening parenthesis%'>₍

+'subscript plus sign%'>₊

+'subset of or equal to%'>⊆

+'subset of or not equal to%'>⊊

+'subset of%'>⊂

+'succeeds but not equivalent to%'>⋩

+'succeeds or equal to%'>≽

+'succeeds or equivalent to%'>≿

+'succeeds%'>≻

+'superscript closing parenthesis%'>⁾

+'superscript digit eight%'>⁸

+'superscript digit five%'>⁵

+'superscript digit four%'>⁴

+'superscript digit nine%'>⁹

+'superscript digit one%'>¹

+'superscript digit seven%'>⁷

+'superscript digit six%'>⁶

+'superscript digit three%'>³

+'superscript digit two%'>²

+'superscript digit zero%'>⁰

+'superscript equals sign%'>⁼

+'superscript hyphen-minus%'>⁻

+'superscript latin small letter n%'>ⁿ

+'superscript opening parenthesis%'>⁽

+'superscript plus sign%'>⁺

+'superset of or equal to%'>⊇

+'superset of or not equal to%'>⊋

+'superset of%'>⊃

+'surface integral%'>∯

+'symbol of iran%'>☫

+'t e l symbol%'>℡

+'tape drive%'>✇

+'taurus%'>♉

+'teardrop-barbed right arrow%'>➺

+'teardrop-spoked asterisk%'>✻

+'telephone location sign%'>✆

+'telephone recorder%'>⌕

+'there does not exist%'>∄

+'there exists%'>∃

+'therefore%'>∴

+'thin space%'> 

+'third transfinite cardinal%'>ℷ

+'three-d bottom-lighted right arrowhead%'>➣

+'three-d top-lighted right arrowhead%'>➢

+'three-per-em space%'> 

+'thunderstorm%'>☈

+'tight trifoliate snowflake%'>❅

+'tilde operator%'>∼

+'top half integral%'>⌠

+'top left corner%'>⌜

+'top left crop%'>⌏

+'top right corner%'>⌝

+'top right crop%'>⌎

+'trademark%'>™

+'triangle-headed right arrow%'>➝

+'triangular bullet%'>‣

+'trigram for earth%'>☷

+'trigram for fire%'>☲

+'trigram for heaven%'>☰

+'trigram for lake%'>☱

+'trigram for mountain%'>☶

+'trigram for thunder%'>☳

+'trigram for water%'>☵

+'trigram for wind%'>☴

+'triple integral%'>∭

+'triple prime%'>‴

+'triple tilde%'>≋

+'triple vertical bar right turnstile%'>⊪

+'true%'>⊨

+'turned f%'>Ⅎ

+'turned greek small letter iota%'>℩

+'turned not sign%'>⌙

+'twelve pointed black star%'>✹

+'two dot leader%'>‥

+'umbrella%'>☂

+'union%'>∪

+'up arrow from bar%'>↥

+'up arrow left of down arrow%'>⇅

+'up arrow with double stroke%'>⇞

+'up arrow with tip left%'>↰

+'up arrow with tip right%'>↱

+'up arrow%'>↑

+'up arrowhead%'>⌃

+'up dashed arrow%'>⇡

+'up double arrow%'>⇑

+'up down arrow with base%'>↨

+'up down arrow%'>↕

+'up down double arrow%'>⇕

+'up harpoon with barb left%'>↿

+'up harpoon with barb right%'>↾

+'up paired arrows%'>⇈

+'up pointing triangle with left half black%'>◭

+'up pointing triangle with right half black%'>◮

+'up right diagonal ellipsis%'>⋰

+'up tack%'>⊥

+'up two headed arrow%'>↟

+'upper blade scissors%'>✁

+'upper half block%'>▀

+'upper half circle%'>◠

+'upper half inverse white circle%'>◚

+'upper left arrow to long bar%'>↸

+'upper left arrow%'>↖

+'upper left double arrow%'>⇖

+'upper left quadrant circular arc%'>◜

+'upper one eighth block%'>▔

+'upper right arrow%'>↗

+'upper right double arrow%'>⇗

+'upper right drop-shadowed white square%'>❐

+'upper right pencil%'>✐

+'upper right quadrant circular arc%'>◝

+'upper right shadowed white square%'>❒

+'uranus%'>♅

+'versicle%'>℣

+'vertical ellipsis%'>⋮

+'vertical kana repeat mark lower half%'>〵

+'vertical kana repeat mark upper half%'>〳

+'vertical kana repeat mark%'>〱

+'vertical kana repeat with voiced sound mark upper half%'>〴

+'vertical kana repeat with voiced sound mark%'>〲

+'very much greater than%'>⋙

+'very much less than%'>⋘

+'victory hand%'>✌

+'viewdata square%'>⌗

+'virgo%'>♍

+'volume integral%'>∰

+'watch%'>⌚

+'wave dash%'>〜

+'wavy dash%'>〰

+'wavy line%'>⌇

+'wedge-tailed right arrow%'>➼

+'wheel of dharma%'>☸

+'white bullet%'>◦

+'white chess bishop%'>♗

+'white chess king%'>♔

+'white chess knight%'>♘

+'white chess pawn%'>♙

+'white chess queen%'>♕

+'white chess rook%'>♖

+'white circle%'>○

+'white club suit%'>♧

+'white diamond containing black small diamond%'>◈

+'white diamond suit%'>♢

+'white diamond%'>◇

+'white down arrow%'>⇩

+'white down pointing index%'>☟

+'white down pointing small triangle%'>▿

+'white down pointing triangle%'>▽

+'white florette%'>❀

+'white four pointed star%'>✧

+'white frowning face%'>☹

+'white heart suit%'>♡

+'white left arrow%'>⇦

+'white left pointing index%'>☜

+'white left pointing pointer%'>◅

+'white left pointing small triangle%'>◃

+'white left pointing triangle%'>◁

+'white nib%'>✑

+'white parallelogram%'>▱

+'white rectangle%'>▭

+'white right arrow%'>⇨

+'white right pointing index%'>☞

+'white right pointing pointer%'>▻

+'white right pointing small triangle%'>▹

+'white right pointing triangle%'>▷

+'white scissors%'>✄

+'white small square%'>▫

+'white smiling face%'>☺

+'white spade suit%'>♤

+'white square containing black small square%'>▣

+'white square with rounded corners%'>▢

+'white square with vertical bisecting line%'>◫

+'white square%'>□

+'white star%'>☆

+'white sun with rays%'>☼

+'white telephone%'>☏

+'white up arrow from bar%'>⇪

+'white up arrow%'>⇧

+'white up pointing index%'>☝

+'white up pointing small triangle%'>▵

+'white up pointing triangle with dot%'>◬

+'white up pointing triangle%'>△

+'white vertical rectangle%'>▯

+'white-feathered right arrow%'>➳

+'won sign%'>₩

+'wreath product%'>≀

+'writing hand%'>✍

+'x mark3%'>✗

+'xor%'>⊻

+'yen sign%'>¥

+'yin yang%'>☯

+'zero width joiner%'>‍

+'zero width non-joiner%'>‌

+'zero width space%'>​

+

+# eof

diff --git a/src/com/ibm/text/resources/Transliterator_index.txt b/src/com/ibm/text/resources/Transliterator_index.txt
new file mode 100755
index 0000000..0e40a1e
--- /dev/null
+++ b/src/com/ibm/text/resources/Transliterator_index.txt
@@ -0,0 +1,180 @@
+# Copyright (c) 2001, International Business Machines Corporation and
+# others. All Rights Reserved.
+# 
+# TRANSLITERATOR INDEX FILE.  This file lists the non-algorithmic
+# system transliterators.  It allows arbitrary mappings between
+# transliterator IDs and file names, and also allows the system to
+# define aliases for transliterators, so that "Latin-Hangul", for
+# example, can be implemented transparently as the compound
+# "Latin-Jamo;Jamo-Hangul".  Internal IDs may also be defined; these
+# are invisible to the user, but can be composed together by the
+# system to create visible transliterators.
+# 
+# Blank lines and lines beginning with '#' are ignored.
+# 
+# Lines in this file have one of the following forms (text not
+# enclosed by <> is literal):
+# 
+#   <id>:file:<resource>:<encoding>:<direction>
+#   <id>:internal:<resource>:<encoding>:<direction>
+#   <id>:alias:<getInstanceArg>
+#  
+# <id> is the ID of the system transliterator being defined.  These
+# are public IDs enumerated by Transliterator.getAvailableIDs(),
+# unless the second field is "internal".
+# 
+# <resource> is a ResourceReader resource name.  Currently these refer
+# to file names under com/ibm/text/resources.  This string is passed
+# directly to ResourceReader, together with <encoding>.
+# 
+# <encoding> is the character encoding to use when reading <resource>;
+# passed directly to ResourceReader.  E.g., "UTF8".
+# 
+# <direction> is either "FORWARD" or "REVERSE".
+# 
+# <getInstanceArg> is a string to be passed directly to
+# Transliterator.getInstance().  The returned Transliterator object
+# then has its ID changed to <id> and is returned.
+
+
+# Bidirectional rule files
+
+Fullwidth-Halfwidth:file:Transliterator_Fullwidth_Halfwidth.utf8.txt:UTF8:FORWARD
+Halfwidth-Fullwidth:file:Transliterator_Fullwidth_Halfwidth.utf8.txt:UTF8:REVERSE
+
+Latin-Arabic:file:Transliterator_Latin_Arabic.utf8.txt:UTF8:FORWARD
+Arabic-Latin:file:Transliterator_Latin_Arabic.utf8.txt:UTF8:REVERSE
+
+Latin-Cyrillic:file:Transliterator_Latin_Cyrillic.utf8.txt:UTF8:FORWARD
+Cyrillic-Latin:file:Transliterator_Latin_Cyrillic.utf8.txt:UTF8:REVERSE
+
+Latin-Devanagari:file:Transliterator_Latin_Devanagari.utf8.txt:UTF8:FORWARD
+Devanagari-Latin:file:Transliterator_Latin_Devanagari.utf8.txt:UTF8:REVERSE
+
+Latin-Greek:file:Transliterator_Latin_Greek.utf8.txt:UTF8:FORWARD
+Greek-Latin:file:Transliterator_Latin_Greek.utf8.txt:UTF8:REVERSE
+
+Latin-Hebrew:file:Transliterator_Latin_Hebrew.utf8.txt:UTF8:FORWARD
+Hebrew-Latin:file:Transliterator_Latin_Hebrew.utf8.txt:UTF8:REVERSE
+
+Latin-Jamo:file:Transliterator_Latin_Jamo.utf8.txt:UTF8:FORWARD
+Jamo-Latin:file:Transliterator_Latin_Jamo.utf8.txt:UTF8:REVERSE
+
+Latin-Kana:file:Transliterator_Latin_Kana.utf8.txt:UTF8:FORWARD
+Kana-Latin:file:Transliterator_Latin_Kana.utf8.txt:UTF8:REVERSE
+
+Hiragana-Katakana:file:Transliterator_Hiragana_Katakana.utf8.txt:UTF8:FORWARD
+Katakana-Hiragana:file:Transliterator_Hiragana_Katakana.utf8.txt:UTF8:REVERSE
+
+StraightQuotes-CurlyQuotes:file:Transliterator_StraightQuotes_CurlyQuotes.utf8.txt:UTF8:FORWARD
+CurlyQuotes-StraightQuotes:file:Transliterator_StraightQuotes_CurlyQuotes.utf8.txt:UTF8:REVERSE
+
+# One way rules (forward only)
+
+Han-Pinyin:file:Transliterator_Han_Pinyin.utf8.txt:UTF8:FORWARD
+Kanji-English:file:Transliterator_Kanji_English.utf8.txt:UTF8:FORWARD
+Kanji-OnRomaji:file:Transliterator_Kanji_OnRomaji.utf8.txt:UTF8:FORWARD
+KeyboardEscape-Latin1:file:Transliterator_KeyboardEscape_Latin1.utf8.txt:UTF8:FORWARD
+UnicodeName-UnicodeChar:file:Transliterator_UnicodeName_UnicodeChar.utf8.txt:UTF8:FORWARD
+
+# Compound rules
+
+Latin-Hangul:alias:Latin-Jamo;Jamo-Hangul
+Hangul-Latin:alias:Hangul-Jamo;Jamo-Latin
+
+# Inter-Indic composed rules
+
+Devanagari-InterIndic:internal:Transliterator_Devanagari_InterIndic.utf8.txt:UTF8:FORWARD
+Bengali-InterIndic:internal:Transliterator_Bengali_InterIndic.utf8.txt:UTF8:FORWARD
+Gurmukhi-InterIndic:internal:Transliterator_Gurmukhi_InterIndic.utf8.txt:UTF8:FORWARD
+Gujarati-InterIndic:internal:Transliterator_Gujarati_InterIndic.utf8.txt:UTF8:FORWARD
+Oriya-InterIndic:internal:Transliterator_Oriya_InterIndic.utf8.txt:UTF8:FORWARD
+Tamil-InterIndic:internal:Transliterator_Tamil_InterIndic.utf8.txt:UTF8:FORWARD
+Telugu-InterIndic:internal:Transliterator_Telugu_InterIndic.utf8.txt:UTF8:FORWARD
+Kannada-InterIndic:internal:Transliterator_Kannada_InterIndic.utf8.txt:UTF8:FORWARD
+Malayalam-InterIndic:internal:Transliterator_Malayalam_InterIndic.utf8.txt:UTF8:FORWARD
+
+InterIndic-Devanagari:internal:Transliterator_InterIndic_Devanagari.utf8.txt:UTF8:FORWARD
+InterIndic-Bengali:internal:Transliterator_InterIndic_Bengali.utf8.txt:UTF8:FORWARD
+InterIndic-Gurmukhi:internal:Transliterator_InterIndic_Gurmukhi.utf8.txt:UTF8:FORWARD
+InterIndic-Gujarati:internal:Transliterator_InterIndic_Gujarati.utf8.txt:UTF8:FORWARD
+InterIndic-Oriya:internal:Transliterator_InterIndic_Oriya.utf8.txt:UTF8:FORWARD
+InterIndic-Tamil:internal:Transliterator_InterIndic_Tamil.utf8.txt:UTF8:FORWARD
+InterIndic-Telugu:internal:Transliterator_InterIndic_Telugu.utf8.txt:UTF8:FORWARD
+InterIndic-Kannada:internal:Transliterator_InterIndic_Kannada.utf8.txt:UTF8:FORWARD
+InterIndic-Malayalam:internal:Transliterator_InterIndic_Malayalam.utf8.txt:UTF8:FORWARD
+
+Devanagari-Bengali:alias:Devanagari-InterIndic;InterIndic-Bengali
+Devanagari-Gurmukhi:alias:Devanagari-InterIndic;InterIndic-Gurmukhi
+Devanagari-Gujarati:alias:Devanagari-InterIndic;InterIndic-Gujarati
+Devanagari-Oriya:alias:Devanagari-InterIndic;InterIndic-Oriya
+Devanagari-Tamil:alias:Devanagari-InterIndic;InterIndic-Tamil
+Devanagari-Telugu:alias:Devanagari-InterIndic;InterIndic-Telugu
+Devanagari-Kannada:alias:Devanagari-InterIndic;InterIndic-Kannada
+Devanagari-Malayalam:alias:Devanagari-InterIndic;InterIndic-Malayalam
+Bengali-Devanagari:alias:Bengali-InterIndic;InterIndic-Devanagari
+Bengali-Gurmukhi:alias:Bengali-InterIndic;InterIndic-Gurmukhi
+Bengali-Gujarati:alias:Bengali-InterIndic;InterIndic-Gujarati
+Bengali-Oriya:alias:Bengali-InterIndic;InterIndic-Oriya
+Bengali-Tamil:alias:Bengali-InterIndic;InterIndic-Tamil
+Bengali-Telugu:alias:Bengali-InterIndic;InterIndic-Telugu
+Bengali-Kannada:alias:Bengali-InterIndic;InterIndic-Kannada
+Bengali-Malayalam:alias:Bengali-InterIndic;InterIndic-Malayalam
+Gurmukhi-Devanagari:alias:Gurmukhi-InterIndic;InterIndic-Devanagari
+Gurmukhi-Bengali:alias:Gurmukhi-InterIndic;InterIndic-Bengali
+Gurmukhi-Gujarati:alias:Gurmukhi-InterIndic;InterIndic-Gujarati
+Gurmukhi-Oriya:alias:Gurmukhi-InterIndic;InterIndic-Oriya
+Gurmukhi-Tamil:alias:Gurmukhi-InterIndic;InterIndic-Tamil
+Gurmukhi-Telugu:alias:Gurmukhi-InterIndic;InterIndic-Telugu
+Gurmukhi-Kannada:alias:Gurmukhi-InterIndic;InterIndic-Kannada
+Gurmukhi-Malayalam:alias:Gurmukhi-InterIndic;InterIndic-Malayalam
+Gujarati-Devanagari:alias:Gujarati-InterIndic;InterIndic-Devanagari
+Gujarati-Bengali:alias:Gujarati-InterIndic;InterIndic-Bengali
+Gujarati-Gurmukhi:alias:Gujarati-InterIndic;InterIndic-Gurmukhi
+Gujarati-Oriya:alias:Gujarati-InterIndic;InterIndic-Oriya
+Gujarati-Tamil:alias:Gujarati-InterIndic;InterIndic-Tamil
+Gujarati-Telugu:alias:Gujarati-InterIndic;InterIndic-Telugu
+Gujarati-Kannada:alias:Gujarati-InterIndic;InterIndic-Kannada
+Gujarati-Malayalam:alias:Gujarati-InterIndic;InterIndic-Malayalam
+Oriya-Devanagari:alias:Oriya-InterIndic;InterIndic-Devanagari
+Oriya-Bengali:alias:Oriya-InterIndic;InterIndic-Bengali
+Oriya-Gurmukhi:alias:Oriya-InterIndic;InterIndic-Gurmukhi
+Oriya-Gujarati:alias:Oriya-InterIndic;InterIndic-Gujarati
+Oriya-Tamil:alias:Oriya-InterIndic;InterIndic-Tamil
+Oriya-Telugu:alias:Oriya-InterIndic;InterIndic-Telugu
+Oriya-Kannada:alias:Oriya-InterIndic;InterIndic-Kannada
+Oriya-Malayalam:alias:Oriya-InterIndic;InterIndic-Malayalam
+Tamil-Devanagari:alias:Tamil-InterIndic;InterIndic-Devanagari
+Tamil-Bengali:alias:Tamil-InterIndic;InterIndic-Bengali
+Tamil-Gurmukhi:alias:Tamil-InterIndic;InterIndic-Gurmukhi
+Tamil-Gujarati:alias:Tamil-InterIndic;InterIndic-Gujarati
+Tamil-Oriya:alias:Tamil-InterIndic;InterIndic-Oriya
+Tamil-Telugu:alias:Tamil-InterIndic;InterIndic-Telugu
+Tamil-Kannada:alias:Tamil-InterIndic;InterIndic-Kannada
+Tamil-Malayalam:alias:Tamil-InterIndic;InterIndic-Malayalam
+Telugu-Devanagari:alias:Telugu-InterIndic;InterIndic-Devanagari
+Telugu-Bengali:alias:Telugu-InterIndic;InterIndic-Bengali
+Telugu-Gurmukhi:alias:Telugu-InterIndic;InterIndic-Gurmukhi
+Telugu-Gujarati:alias:Telugu-InterIndic;InterIndic-Gujarati
+Telugu-Oriya:alias:Telugu-InterIndic;InterIndic-Oriya
+Telugu-Tamil:alias:Telugu-InterIndic;InterIndic-Tamil
+Telugu-Kannada:alias:Telugu-InterIndic;InterIndic-Kannada
+Telugu-Malayalam:alias:Telugu-InterIndic;InterIndic-Malayalam
+Kannada-Devanagari:alias:Kannada-InterIndic;InterIndic-Devanagari
+Kannada-Bengali:alias:Kannada-InterIndic;InterIndic-Bengali
+Kannada-Gurmukhi:alias:Kannada-InterIndic;InterIndic-Gurmukhi
+Kannada-Gujarati:alias:Kannada-InterIndic;InterIndic-Gujarati
+Kannada-Oriya:alias:Kannada-InterIndic;InterIndic-Oriya
+Kannada-Tamil:alias:Kannada-InterIndic;InterIndic-Tamil
+Kannada-Telugu:alias:Kannada-InterIndic;InterIndic-Telugu
+Kannada-Malayalam:alias:Kannada-InterIndic;InterIndic-Malayalam
+Malayalam-Devanagari:alias:Malayalam-InterIndic;InterIndic-Devanagari
+Malayalam-Bengali:alias:Malayalam-InterIndic;InterIndic-Bengali
+Malayalam-Gurmukhi:alias:Malayalam-InterIndic;InterIndic-Gurmukhi
+Malayalam-Gujarati:alias:Malayalam-InterIndic;InterIndic-Gujarati
+Malayalam-Oriya:alias:Malayalam-InterIndic;InterIndic-Oriya
+Malayalam-Tamil:alias:Malayalam-InterIndic;InterIndic-Tamil
+Malayalam-Telugu:alias:Malayalam-InterIndic;InterIndic-Telugu
+Malayalam-Kannada:alias:Malayalam-InterIndic;InterIndic-Kannada
+
+# eof
diff --git a/src/com/ibm/text/resources/package.html b/src/com/ibm/text/resources/package.html
new file mode 100755
index 0000000..f823e50
--- /dev/null
+++ b/src/com/ibm/text/resources/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:52 $
+-->
+</head>
+<body bgcolor="white">
+Resource data used by classes in com.ibm.text.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/text/resources/thai_dict b/src/com/ibm/text/resources/thai_dict
new file mode 100755
index 0000000..9f8f77f
--- /dev/null
+++ b/src/com/ibm/text/resources/thai_dict
Binary files differ
diff --git a/src/com/ibm/text/unames.dat b/src/com/ibm/text/unames.dat
new file mode 100755
index 0000000..84f30c2
--- /dev/null
+++ b/src/com/ibm/text/unames.dat
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be46b526e1f2ba8f154b7f393dd5f717b650620397ebf6c6f1ba332ff1617634
+size 100428
diff --git a/src/com/ibm/text/uprops.dat b/src/com/ibm/text/uprops.dat
new file mode 100755
index 0000000..f7cea8b
--- /dev/null
+++ b/src/com/ibm/text/uprops.dat
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:83064e82c1c71bf6af23d623fe79f2737c14a1be8aa65eb977a9133e4a8f80b3
+size 26420
diff --git a/src/com/ibm/textlayout/FontUtils.java b/src/com/ibm/textlayout/FontUtils.java
new file mode 100755
index 0000000..9d09528
--- /dev/null
+++ b/src/com/ibm/textlayout/FontUtils.java
@@ -0,0 +1,29 @@
+/*
+ * @(#)$RCSfile: FontUtils.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:30:44 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.textlayout;
+
+import java.awt.Font;
+
+public final class FontUtils {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+                
+    public static Font getFont(java.util.Map attributes) {
+
+        return Font.getFont(attributes);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/textlayout/Graphics2DConversion.java b/src/com/ibm/textlayout/Graphics2DConversion.java
new file mode 100755
index 0000000..ab4e927
--- /dev/null
+++ b/src/com/ibm/textlayout/Graphics2DConversion.java
@@ -0,0 +1,56 @@
+/*
+ * @(#)$RCSfile: Graphics2DConversion.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:30:44 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.textlayout;
+
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+
+/**
+ * This class allows JDK 1.1 code to use a "fake" Graphics2D
+ * for source-code compatibility with Java2 code.  On Java2 it's
+ * a trivial class.  The JDK 1.1 version of this class does interesting
+ * work.
+ */ 
+public final class Graphics2DConversion {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+                
+    public static Graphics2D getGraphics2D(Graphics g) {
+        return (Graphics2D) g;
+    }
+
+    public static Graphics getGraphics(Graphics2D g) {
+        return g;
+    }
+
+    /**
+     * Will return an instance of Paint.
+     */
+    public static Object getColorState(Graphics2D g) {
+
+        return g.getPaint();
+    }
+
+    /**
+     * State must be an instance of Paint.
+     */
+    public static void restoreColorState(Graphics2D g, Object state) {
+
+        g.setPaint((Paint) state);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/textlayout/attributes/AttributeKey.java b/src/com/ibm/textlayout/attributes/AttributeKey.java
new file mode 100755
index 0000000..6f44db4
--- /dev/null
+++ b/src/com/ibm/textlayout/attributes/AttributeKey.java
@@ -0,0 +1,165 @@
+/*
+ * @(#)$RCSfile: AttributeKey.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:33:07 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+package com.ibm.textlayout.attributes;
+
+import java.io.Serializable;
+
+/**
+ * This class provides a cannonical mapping between fields in TextAttribute
+ * and instances of itself.  It is used by AttributeMap to serialize
+ * and deserialize TextAttribute to preserve uniqueness of TextAttribute
+ * instances (ie so that TextAttribute instances remain singletons),
+ * and to provide compatability between 1.1 and 1.2 versions of
+ * TextAttribute.
+ * <p>
+ * Example use - instead of doing this:
+ * <blockquote><pre>
+ *     out.writeObject(anAttribute);
+ * </pre></blockquote>
+ * do this:
+ * <blockquote><pre>
+ *     out.writeObject(AttributeKey.mapAttributeToKey(anAttribute));
+ * </pre></blockquote>
+ * Similarly, instead of this:
+ * <blockquote><pre>
+ *     anAttribute = in.readObject();
+ * </pre></blockquote>
+ * do this:
+ * <blockquote><pre>
+ *     anAttribute = AttributeKey.mapKeyToAttribute(in.readObject());
+ * </pre></blockquote>
+ * <p>
+ * If anAttribute is not a known TextAttribute, then <code>mapAttributeToKey</code>
+ * will just return its argument.  Similarly, <code>mapKeyToAttribute</code> will
+ * return its argument if the argument is not a known AttributeKey.
+ */
+
+/*public*/ final class AttributeKey implements Serializable {
+
+/*
+    In this implementation, two parallel Vectors are
+    maintained.  TextAttribute(i) maps to AttributeKey(i).
+    For compatability with existing data, this mapping must
+    be maintained in the future!  So, when new attributes
+    are added, add them to the end of the list.
+*/
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final long serialVersionUID = 3772371253277107294L;
+
+    private static Object[] fgTextAttributes;
+    private static Object[] fgAttributeKeys;
+
+    static {
+        fgTextAttributes = new Object[] {
+            TextAttribute.FONT,
+            TextAttribute.FAMILY,
+            TextAttribute.WEIGHT,
+            TextAttribute.POSTURE,
+            TextAttribute.SIZE,
+            TextAttribute.SUPERSCRIPT,
+            TextAttribute.FOREGROUND,
+            TextAttribute.BACKGROUND,
+            TextAttribute.UNDERLINE,
+            TextAttribute.STRIKETHROUGH,
+            TextAttribute.CHAR_REPLACEMENT,
+            TextAttribute.EXTRA_LINE_SPACING,
+            TextAttribute.FIRST_LINE_INDENT,
+            TextAttribute.MIN_LINE_SPACING,
+            TextAttribute.LINE_FLUSH,
+            TextAttribute.LEADING_MARGIN,
+            TextAttribute.TRAILING_MARGIN,
+            TextAttribute.TAB_RULER,
+            TextAttribute.RUN_DIRECTION,
+            TextAttribute.BIDI_EMBEDDING,
+            TextAttribute.JUSTIFICATION,
+        };
+
+        final int attrCount = fgTextAttributes.length;
+        fgAttributeKeys = new Object[attrCount];
+
+        for (int i=0; i < attrCount; i += 1) {
+            fgAttributeKeys[i] = new AttributeKey(i);
+        }
+    }
+
+    /**
+     * Return the TextAttribute corresponding to the given key.
+     * If key is an instance of AttributeKey it will be mapped to
+     * a TextAttribute.  Otherwise, the key is returned.
+     * @param key the key to map to a TextAttribute field
+     * @return the TextAttribute for <code>key</code> if <code>key</code>
+     *    is an AttributeKey; otherwise <code>key</code> is returned
+     */
+    /*public*/ static Object mapKeyToAttribute(Object key) {
+
+        try {
+            AttributeKey aKey = (AttributeKey) key;
+            if (aKey.fId < fgTextAttributes.length) {
+                return fgTextAttributes[aKey.fId];
+            }
+            else {
+                return key;
+            }
+        }
+        catch(ClassCastException e) {
+            return key;
+        }
+    }
+
+    /**
+     * If attribute is a known TextAttribute, return an AttributeKey
+     * for it.  Otherwise the object is returned.
+     * @param attribute the attribute to map to an AttributeKey
+     * @return an AttributeKey for <code>attribute</code>
+     *     if <code>attribute</code> is a known attribute; otherwise
+     *     <code>attribute</code> is returned
+     */
+    /*public*/ static Object mapAttributeToKey(Object attribute) {
+
+        final int attrCount = fgTextAttributes.length;
+        
+        for (int index = 0; index < attrCount; index += 1) {
+            if (fgTextAttributes[index].equals(attribute)) {
+                return fgAttributeKeys[index];
+            }
+        }
+        
+        return attribute;
+    }
+
+
+    private int fId;
+
+    private AttributeKey(int id) {
+
+        fId = id;
+    }
+
+    public boolean equals(Object rhs) {
+
+        try {
+            return ((AttributeKey)rhs).fId == fId;
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+    }
+
+    public int hashCode() {
+
+        return fId;
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/textlayout/attributes/AttributeMap.java b/src/com/ibm/textlayout/attributes/AttributeMap.java
new file mode 100755
index 0000000..c823928
--- /dev/null
+++ b/src/com/ibm/textlayout/attributes/AttributeMap.java
@@ -0,0 +1,529 @@
+/*
+ * @(#)$RCSfile: AttributeMap.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:33:31 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.textlayout.attributes;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Set;
+
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
+
+/**
+ * AttributeMap is an immutable Map.  Additionally, there are
+ * several methods for common operations (union,
+ * remove, intersect);  these methods return new AttributeMap
+ * instances.
+ * <p>
+ * Although any non-null Object can be a key or value in an
+ * AttributeMap, typically the keys are fields of TextAttribute.
+ * @see TextAttribute
+ */
+public final class AttributeMap implements java.util.Map,
+                                com.ibm.textlayout.attributes.Map,
+                                Externalizable {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    private static final int CURRENT_VERSION = 1;
+
+    private static final long serialVersionUID = 9510803;
+
+    private static final String errString = "StyleSets are immutable.";
+
+    // This is passed to the Hashtable constructor as the
+    // load factor argument.  It is chosen to avoid resizing
+    // the Hashtable whenever possible.  I think that 1
+    // does this.
+    private static final int LOAD_FACTOR = 1;
+
+    private Hashtable styleTable;
+    private transient AttributeSet cachedKeySet = null;
+    private transient Collection cachedValueCollection = null;
+    private transient Set cachedEntrySet = null;
+
+    /**
+     * An empty AttributeMap.
+     */
+    public static final AttributeMap EMPTY_ATTRIBUTE_MAP = new AttributeMap();
+
+// ==============
+// Constructors
+// ==============
+
+    /**
+     * Create a new, empty AttributeMap.  EMPTY_STYLE_SET can be used
+     * in place of an AttributeMap produced by this constructor.
+     */
+    public AttributeMap() {
+
+        styleTable = new Hashtable(1, LOAD_FACTOR);
+    }
+
+    /**
+     * Create an AttributeMap with the same key-value
+     * entries as the given Map.
+     * @param map a Map whose key-value entries will
+     *      become the entries for this AttributeMap. <code>map</code>
+     *      is not modified, and must not contain null keys or values.
+     */
+    public AttributeMap(java.util.Map map) {
+
+        styleTable = new Hashtable(map.size(), LOAD_FACTOR);
+        styleTable.putAll(map);
+    }
+
+    /**
+     * Create an AttributeMap with the same key-value
+     * entries as the given Hashtable.
+     * @param table a Hashtable whose key-value entries will
+     *      become the entries for this AttributeMap. <code>table</code>
+     *      is not modified.
+     */
+    public AttributeMap(Hashtable hashtable) {
+
+        this((java.util.Map) hashtable);
+    }
+
+    /**
+     * Create an AttributeMap with a single entry of
+     * <code>{attribute, value}</code>.
+     * @param attribute the key in this AttributeMap's single entry
+     * @param value the value in this AttributeMap's single entry
+     */
+    public AttributeMap(Object key, Object value) {
+
+        styleTable = new Hashtable(1, LOAD_FACTOR);
+
+        // hashtable checks value for null
+        styleTable.put(key, value);
+    }
+
+    // For internal use only.
+    private AttributeMap(Hashtable table, boolean clone) {
+
+        if (clone) {
+            styleTable = (Hashtable) table.clone();
+        }
+        else {
+            this.styleTable = table;
+        }
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+        out.writeInt(CURRENT_VERSION);
+        out.writeInt(styleTable.size());
+        Enumeration e = styleTable.keys();
+        while (e.hasMoreElements()) {
+            Object key = e.nextElement();
+            out.writeObject(AttributeKey.mapAttributeToKey(key));
+            out.writeObject(styleTable.get(key));
+        }
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+
+        if (in.readInt() != CURRENT_VERSION) {
+            throw new IOException("Invalid version of StyleBuffer");
+        }
+
+        int count = in.readInt();
+        for (int i=0; i < count; i += 1) {
+            Object key = AttributeKey.mapKeyToAttribute(in.readObject());
+            Object value = in.readObject();
+            styleTable.put(key, value);
+        }
+    }
+
+// ==============
+// Map interface
+// ==============
+
+// queries
+    /**
+     * Return the number of entries in the AttributeMap.
+     * @return the number of entries in the AttributeMap
+     */
+    public int size() {
+
+        return styleTable.size();
+    }
+
+    /**
+     * Return true if the number of entries in the AttributeMap
+     * is 0.
+     * @return true if the number of entries in the AttributeMap
+     * is 0
+     */
+    public boolean isEmpty() {
+
+        return styleTable.isEmpty();
+    }
+
+    /**
+     * Return true if the given key is in this AttributeMap.
+     * @param key the key to test
+     * @return true if <code>key</code> is in this AttributeMap
+     */
+    public boolean containsKey(Object key) {
+
+        return styleTable.containsKey(key);
+    }
+
+    /**
+     * Return true if the given value is in this AttributeMap.
+     * @param key the value to test
+     * @return true if <code>value</code> is in this AttributeMap
+     */
+    public boolean containsValue(Object value) {
+
+        return styleTable.containsValue(value);
+    }
+
+    /**
+     * Return the value associated with the given key.  If the
+     * key is not in this AttributeMap null is returned.
+     * @param key the key to look up
+     * @return the value associated with <code>key</code>, or
+     *     null if <code>key</code> is not in this AttributeMap
+     */
+    public Object get(Object key) {
+
+        return styleTable.get(key);
+    }
+
+// modifiers - all throw exceptions
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #addAttribute
+     * @throws UnsupportedOperationException
+     */
+    public Object put(Object key, Object value) {
+
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #removeAttributes
+     * @throws UnsupportedOperationException
+     */
+    public Object remove(Object key) {
+
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #addAttributes
+     * @throws UnsupportedOperationException
+     */
+    public void putAll(java.util.Map t) {
+
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #EMPTY_ATTRIBUTE_MAP
+     * @throws UnsupportedOperationException
+     */
+    public void clear() {
+
+        throw new UnsupportedOperationException(errString);
+    }
+
+// views
+
+    /**
+     * Return an AttributeSet containing every key in this AttributeMap.
+     * @return an AttributeSet containing every key in this AttributeMap
+     */
+    public Set keySet() {
+
+        return getKeySet();
+    }
+
+    /**
+     * Return an AttributeSet containing every key in this AttributeMap.
+     * @return an AttributeSet containing every key in this AttributeMap
+     */
+    public AttributeSet getKeySet() {
+
+        AttributeSet result = cachedKeySet;
+
+        if (result == null) {
+            result = AttributeSet.createKeySet(styleTable);
+            cachedKeySet = result;
+        }
+
+        return result;
+    }
+
+    /**
+     * Return a Collection containing every value in this AttributeMap.
+     * @return a Collection containing every value in this AttributeMap
+     */
+    public Collection values() {
+
+        Collection result = cachedValueCollection;
+
+        if (result == null) {
+            result = Collections.unmodifiableCollection(styleTable.values());
+            cachedValueCollection = result;
+        }
+
+        return result;
+    }
+
+    /**
+     * Return a Set containing all entries in this AttributeMap.
+     */
+    public Set entrySet() {
+
+        Set result = cachedEntrySet;
+
+        if (result == null) {
+            result = Collections.unmodifiableSet(styleTable.entrySet());
+            cachedEntrySet = result;
+        }
+
+        return result;
+    }
+
+    public boolean equals(Object rhs) {
+
+        if (rhs == this) {
+            return true;
+        }
+
+        if (rhs == null) {
+            return false;
+        }
+
+        AttributeMap rhsStyleSet = null;
+
+        try {
+            rhsStyleSet = (AttributeMap) rhs;
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+
+        return styleTable.equals(rhsStyleSet.styleTable);
+    }
+
+    public int hashCode() {
+
+        return styleTable.hashCode();
+    }
+
+    public String toString() {
+
+        return styleTable.toString();
+    }
+
+// ==============
+// Operations
+// ==============
+
+    /**
+     * Return a AttributeMap which contains entries in this AttributeMap,
+     * along with an entry for <attribute, value>.  If attribute
+     * is already present in this AttributeMap its value becomes value.
+     */
+    public AttributeMap addAttribute(Object key, Object value) {
+
+        // try to optimize for case where <key, value> is already there?
+        Hashtable newTable = new Hashtable(styleTable.size() + 1, LOAD_FACTOR);
+        newTable.putAll(styleTable);
+        newTable.put(key, value);
+        return new AttributeMap(newTable, false);
+    }
+
+    /**
+     * Return a AttributeMap which contains entries in this AttributeMap
+     * and in rhs.  If an attribute appears in both StyleSets the
+     * value from rhs is used.
+     */
+    public AttributeMap addAttributes(AttributeMap rhs) {
+
+        int thisSize = size();
+
+        if (thisSize == 0) {
+            return rhs;
+        }
+
+        int otherSize = rhs.size();
+
+        if (otherSize == 0) {
+            return this;
+        }
+
+        Hashtable newTable = new Hashtable(thisSize + otherSize, LOAD_FACTOR);
+
+        newTable.putAll(styleTable);
+        newTable.putAll(rhs);
+
+        return new AttributeMap(newTable, false);
+    }
+
+    /**
+     * Return a AttributeMap which contains entries in this AttributeMap
+     * and in rhs.  If an attribute appears in both StyleSets the
+     * value from rhs is used.
+     * The Map's keys and values must be non-null.
+     */
+    public AttributeMap addAttributes(java.util.Map rhs) {
+
+        if (rhs instanceof AttributeMap) {
+            return addAttributes((AttributeMap)rhs);
+        }
+
+        Hashtable newTable = new Hashtable(size() + rhs.size(), LOAD_FACTOR);
+
+        newTable.putAll(styleTable);
+        newTable.putAll(rhs);
+
+        return new AttributeMap(newTable, false);
+    }
+
+    /**
+     * Return a AttributeMap with the entries in this AttributeMap, but
+     * without attribute as a key.
+     */
+    public AttributeMap removeAttribute(Object attribute) {
+
+        if (!containsKey(attribute)) {
+            return this;
+        }
+
+        Hashtable newTable = new Hashtable(styleTable.size(), LOAD_FACTOR);
+        newTable.putAll(styleTable);
+        newTable.remove(attribute);
+
+        return new AttributeMap(newTable, false);
+    }
+
+    /**
+     * Return a AttributeMap with the entries of this AttributeMap whose
+     * attributes are <b>not</b> in the Set.
+     */
+    public AttributeMap removeAttributes(AttributeSet attributes) {
+
+        Set set = attributes;
+        return removeAttributes(set);
+    }
+
+    /**
+     * Return a AttributeMap with the entries of this AttributeMap whose
+     * attributes are <b>not</b> in the Set.
+     */
+    public AttributeMap removeAttributes(Set attributes) {
+
+        // Create newTable on demand;  if null at
+        // end of iteration then return this set.
+        // Should we intersect styleTable.keySet with
+        // attributes instead?
+
+        Hashtable newTable = null;
+        Iterator attrIter = attributes.iterator();
+        while (attrIter.hasNext()) {
+            Object current = attrIter.next();
+            if (current != null && styleTable.containsKey(current)) {
+                if (newTable == null) {
+                    newTable = new Hashtable(styleTable.size(), LOAD_FACTOR);
+                    newTable.putAll(styleTable);
+                }
+                newTable.remove(current);
+            }
+        }
+
+        if (newTable != null) {
+            return new AttributeMap(newTable, false);
+        }
+        else {
+            return this;
+        }
+    }
+
+    /**
+     * Return a AttributeMap with the keys of this AttributeMap which
+     * are also in the Set.  The set must not contain null.
+     */
+    public AttributeMap intersectWith(AttributeSet attributes) {
+
+        Set set = attributes;
+        return intersectWith(set);
+    }
+
+    /**
+     * Return a AttributeMap with the keys of this AttributeMap which
+     * are also in the Set.  The set must not contain null.
+     */
+    public AttributeMap intersectWith(Set attributes) {
+
+        // For now, forget about optimizing for the case when
+        // the return value is equivalent to this set.
+
+        int attrSize = attributes.size();
+        int styleTableSize = styleTable.size();
+        int size = Math.min(attrSize, styleTableSize);
+        Hashtable newTable = new Hashtable(size, LOAD_FACTOR);
+
+        if (attrSize < styleTableSize) {
+            Iterator attrIter = attributes.iterator();
+            while (attrIter.hasNext()) {
+                Object current = attrIter.next();
+                if (current != null) {
+                    Object value = styleTable.get(current);
+                    if (value != null) {
+                        newTable.put(current, value);
+                    }
+                }
+            }
+        }
+        else {
+            Iterator attrIter = keySet().iterator();
+            while (attrIter.hasNext()) {
+                Object current = attrIter.next();
+                if (attributes.contains(current)) {
+                    newTable.put(current, styleTable.get(current));
+                }
+            }
+        }
+
+        return new AttributeMap(newTable, false);
+    }
+
+    /**
+     * Put all entries in this AttributeMap into the given Map.
+     * @param rhs the Map into which entries are placed
+     */
+    public void putAllInto(java.util.Map rhs) {
+
+        rhs.putAll(this);
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/textlayout/attributes/AttributeSet.java b/src/com/ibm/textlayout/attributes/AttributeSet.java
new file mode 100755
index 0000000..bc38425
--- /dev/null
+++ b/src/com/ibm/textlayout/attributes/AttributeSet.java
@@ -0,0 +1,345 @@
+/*
+ * @(#)$RCSfile: AttributeSet.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:33:31 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.textlayout.attributes;
+
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Collection;
+
+/**
+ * An AttributeSet is an immutable collection of unique Objects.
+ * It has several operations
+ * which return new AttributeSet instances.
+ */
+public final class AttributeSet implements Set {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+
+    /**
+     * An AttributeSet with no members.
+     */
+    public static final AttributeSet EMPTY_SET = new AttributeSet();
+
+    private Hashtable elements;
+
+    private static final String errString = "AttributeSet is immutable.";
+
+    private AttributeSet(Hashtable elements) {
+
+        this.elements = elements;
+    }
+
+    /**
+     * Package only.  For AttributeMap use.
+     */
+    static AttributeSet createKeySet(Hashtable hashtable) {
+
+        Hashtable newElements = new Hashtable();
+
+        Enumeration e = hashtable.keys();
+        while (e.hasMoreElements()) {
+            Object next = e.nextElement();
+            newElements.put(next, next);
+        }
+
+        return new AttributeSet(newElements);
+    }
+
+    /**
+     * Create a new, empty AttributeSet.  The set is semantically
+     * equivalent to EMPTY_SET.
+     */
+    public AttributeSet() {
+
+        elements = new Hashtable();
+    }
+
+    /**
+     * Create a new AttributeSet with the single element elem.
+     */
+    public AttributeSet(Object elem) {
+
+        elements = new Hashtable(1, 1);
+        elements.put(elem, elem);
+    }
+
+    /**
+     * Create a new AttributeSet containing the items in the array elems.
+     */
+    public AttributeSet(Object[] elems) {
+
+        elements = new Hashtable(elems.length, 1);
+        for (int i=0; i < elems.length; i++) {
+            Object next = elems[i];
+            elements.put(next, next);
+        }
+    }
+
+    /**
+     * Return true if the number of elements in this set is 0.
+     * @return true if the number of elements in this set is 0
+     */
+    public boolean isEmpty() {
+
+        return elements.isEmpty();
+    }
+
+    /**
+     * Return the number of elements in this set.
+     * @return the number of elements in this set
+     */
+    public int size() {
+
+        return elements.size();
+    }
+
+    public boolean equals(Object rhs) {
+
+        try {
+            return equals((AttributeSet) rhs);
+        }
+        catch(ClassCastException e) {
+            return false;
+        }
+    }
+
+    public boolean equals(AttributeSet rhs) {
+
+        if (rhs == null) {
+            return false;
+        }
+
+        return elements.equals(rhs.elements);
+    }
+
+    /**
+     * Return true if this set contains the given Object
+     * @return true if this set contains <code>o</code>
+     */
+    public boolean contains(Object o) {
+
+        Object value = elements.get(o);
+        return value != null;
+    }
+
+    /**
+     * Return true if this set contains all elements in the given
+     * Collection
+     * @param coll the collection to compare with
+     * @return true if this set contains all elements in the given
+     * Collection
+     */
+    public boolean containsAll(Collection coll) {
+
+        return elements.keySet().containsAll(coll);
+    }
+
+    /**
+     * Return an Enumeration of the elements in this set.
+     * @return an Enumeration of the elements in this set
+     */
+    public Enumeration elements() {
+
+        return elements.keys();
+    }
+
+    /**
+     * Return an Iterator with the elements in this set.
+     * @return an Iterator with the elements in this set.
+     * The Iterator cannot be used to modify this AttributeSet.
+     */
+    public Iterator iterator() {
+
+        return new EnumerationIterator(elements.keys());
+    }
+
+    /**
+     * Fill in the given array with the elements in this set.
+     * @param storage an array to fill with this set's elements.
+     * The array cannot be null.
+     * @return the <tt>storage</tt> array.
+     */
+    public Object[] toArray(Object[] storage) {
+
+        Enumeration keys = elements.keys();
+        int n=0;
+        while (keys.hasMoreElements()) {
+            storage[n++] = keys.nextElement();
+        }
+        return storage;
+    }
+
+    /**
+     * Return an array with the elements in this set.
+     * @return an array with the elements in this set
+     */
+    public Object[] toArray() {
+
+        return toArray(new Object[size()]);
+    }
+    
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #addElement
+     * @throws UnsupportedOperationException
+     */
+    public boolean add(Object o){
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @throws UnsupportedOperationException
+     */
+    public boolean remove(Object o) {
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #unionWith
+     * @throws UnsupportedOperationException
+     */
+    public boolean addAll(Collection coll) {
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #subtract
+     * @throws UnsupportedOperationException
+     */
+    public boolean removeAll(Collection coll) {
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #intersectWith
+     * @throws UnsupportedOperationException
+     */
+    public boolean retainAll(Collection coll) {
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Throws UnsupportedOperationException.
+     * @see #EMPTY_SET
+     * @throws UnsupportedOperationException
+     */
+    public void clear() {
+        throw new UnsupportedOperationException(errString);
+    }
+
+    /**
+     * Return an AttributeSet containing the elements of this set
+     * and the given element
+     * @param element the element to add
+     * @return an AttributeSet like this one, with <code>element</code>
+     * added
+     */
+    public AttributeSet addElement(Object element) {
+
+        Hashtable newElements = (Hashtable) elements.clone();
+        newElements.put(element, element);
+        return new AttributeSet(newElements);
+    }
+
+    /**
+     * Return an AttributeSet which is the union of
+     * this set with the given set.
+     * @param s the set to union with
+     * @return an AttributeSet of the elements in this set or
+     * in <code>s</code>
+     */
+    public AttributeSet unionWith(AttributeSet s) {
+
+        Hashtable newElements = (Hashtable) elements.clone();
+
+        Iterator iter = s.iterator();
+        while (iter.hasNext()) {
+            Object next = iter.next();
+            newElements.put(next, next);
+        }
+
+        return new AttributeSet(newElements);
+    }
+
+    /**
+     * Return an AttributeSet which is the intersection of
+     * this set with the given set.
+     * @param s the set to intersect with
+     * @return an AttributeSet of the elements in this set which
+     * are in <code>s</code>
+     */
+    public AttributeSet intersectWith(AttributeSet s) {
+
+        Hashtable newElements = new Hashtable();
+
+        Iterator iter = s.iterator();
+        while (iter.hasNext()) {
+            Object next = iter.next();
+            if (elements.get(next) != null) {
+                newElements.put(next, next);
+            }
+        }
+
+        return new AttributeSet(newElements);
+    }
+
+    /**
+     * Return an AttributeSet with the elements in this set which
+     * are not in the given set.
+     * @param s the set of elements to exclude
+     * @return an AttributeSet of the elements in this set which
+     * are not in <code>s</code>
+     */
+    public AttributeSet subtract(AttributeSet s) {
+
+        Hashtable newElements = (Hashtable) elements.clone();
+
+        Iterator iter = s.iterator();
+        while (iter.hasNext()) {
+            newElements.remove(iter.next());
+        }
+
+        return new AttributeSet(newElements);
+    }
+
+    private static final class EnumerationIterator implements Iterator {
+
+        private Enumeration e;
+
+        EnumerationIterator(Enumeration e) {
+            this.e = e;
+        }
+
+        public boolean hasNext() {
+            return e.hasMoreElements();
+        }
+
+        public Object next() {
+            return e.nextElement();
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException(errString);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/ibm/textlayout/attributes/Map.java b/src/com/ibm/textlayout/attributes/Map.java
new file mode 100755
index 0000000..da5b38d
--- /dev/null
+++ b/src/com/ibm/textlayout/attributes/Map.java
@@ -0,0 +1,51 @@
+/*
+ * @(#)$RCSfile: Map.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:33:07 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.textlayout.attributes;
+
+/**
+ * A Map is a collection of key-value pairs (or entries), where each
+ * key in the Map is unique.  This interface is a subset of the
+ * JDK 1.2 Map interface.  It is used by JDK 1.1-compatible code.
+ */
+public interface Map {
+
+    static final String COPYRIGHT =
+                "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
+    /**
+     * Return the number of entries in this Map.
+     * @return the number of entries in this Map
+     */
+    public int size();
+
+    /**
+     * Return true if this Map has no entries.
+     * @return true if this Map has no entries
+     */
+    public boolean isEmpty();
+
+    /**
+     * Return the value of the given key.
+     * @return the value of the given key.  If the key does not have
+     * a value in this Map, null is returned.
+     */
+    public Object get(Object key);
+
+    /**
+     * Return true if this Map contains the given key.
+     * @return true if this Map contains the given key
+     */
+    public boolean containsKey(Object key);
+}
\ No newline at end of file
diff --git a/src/com/ibm/textlayout/attributes/TextAttribute.java b/src/com/ibm/textlayout/attributes/TextAttribute.java
new file mode 100755
index 0000000..36ca6d7
--- /dev/null
+++ b/src/com/ibm/textlayout/attributes/TextAttribute.java
@@ -0,0 +1,248 @@
+/*
+ * @(#)$RCSfile: TextAttribute.java,v $ $Revision: 1.2 $ $Date: 2000/04/25 00:18:51 $
+ *
+ * (C) Copyright IBM Corp. 1998-1999.  All Rights Reserved.
+ *
+ * The program is provided "as is" without any warranty express or
+ * implied, including the warranty of non-infringement and the implied
+ * warranties of merchantibility and fitness for a particular purpose.
+ * IBM will not be liable for any damages suffered by you as a result
+ * of using the Program. In no event will IBM be liable for any
+ * special, indirect or consequential damages or lost profits even if
+ * IBM has been advised of the possibility of their occurrence. IBM
+ * will not be liable for any third party claims against you.
+ */
+// Requires Java2
+package com.ibm.textlayout.attributes;
+
+import java.util.Hashtable;
+import java.text.AttributedCharacterIterator.Attribute;
+import java.io.InvalidObjectException;
+
+/**
+ * This class contains a number of keys (or attributes) for specifying text styles
+ * in a Map.  A text style is a collection of key-value pairs, where
+ * the key represents a certain characteristic (such as size) and
+ * the value tells how that characteristic is realized (ie what the
+ * size is).
+ * <p>
+ * All of the attributes in TextAttribute specify a class for their value.
+ * Map does not enforce these class specifications;  however, text rendering code
+ * will tend to fail with a ClassCastException if a key's value
+ * has an unexpected class.
+ * <p>
+ * Some attributes are meaningful for entire paragraphs, not individual
+ * characters.  These attributes are documented as applying to paragraphs.
+ * All other attributes apply to characters.
+ * <p>
+ * Many of the field names and values in this class
+ * are taken from the JDK 1.2
+ * <code>java.awt.font.TextAttribute class</code>.
+ * @see Map
+ */
+public class TextAttribute extends Attribute {
+
+    private static final Hashtable instanceMap = new Hashtable(9);
+
+    protected TextAttribute(String name) {
+        super(name);
+        if (this.getClass() == TextAttribute.class) {
+            instanceMap.put(name, this);
+        }
+    }
+
+    protected Object readResolve() throws InvalidObjectException {
+        if (this.getClass() != TextAttribute.class) {
+            throw new InvalidObjectException("subclass didn't correctly implement readResolve");
+        }
+
+        TextAttribute instance = (TextAttribute) instanceMap.get(getName());
+        if (instance != null) {
+            return instance;
+        } else {
+            throw new InvalidObjectException("unknown attribute name");
+        }
+    }
+
+    public static final Object FONT = java.awt.font.TextAttribute.FONT;
+
+    public static final Object FAMILY = java.awt.font.TextAttribute.FAMILY;
+
+    public static final Object WEIGHT = java.awt.font.TextAttribute.WEIGHT;
+    public static final Float WEIGHT_BOLD = java.awt.font.TextAttribute.WEIGHT_BOLD;
+
+    public static final Object POSTURE = java.awt.font.TextAttribute.POSTURE;
+    public static final Float POSTURE_OBLIQUE = java.awt.font.TextAttribute.POSTURE_OBLIQUE;
+
+    public static final Object SIZE = java.awt.font.TextAttribute.SIZE;
+
+    public static final Object SUPERSCRIPT = java.awt.font.TextAttribute.SUPERSCRIPT;
+    public static final Integer SUPERSCRIPT_SUPER = java.awt.font.TextAttribute.SUPERSCRIPT_SUPER;
+    public static final Integer SUPERSCRIPT_SUB = java.awt.font.TextAttribute.SUPERSCRIPT_SUB;
+
+    /**
+     * Attribute key for the foreground and background color adornment.
+     */
+    public static final Object FOREGROUND = java.awt.font.TextAttribute.FOREGROUND;
+    public static final Object BACKGROUND = java.awt.font.TextAttribute.BACKGROUND;
+
+    public static final Object UNDERLINE = java.awt.font.TextAttribute.UNDERLINE;
+    public static final Integer UNDERLINE_ON = java.awt.font.TextAttribute.UNDERLINE_ON;
+
+    public static final Object STRIKETHROUGH = java.awt.font.TextAttribute.STRIKETHROUGH;
+    public static final Boolean STRIKETHROUGH_ON = java.awt.font.TextAttribute.STRIKETHROUGH_ON;
+
+    public static final Object OFFSET = new TextAttribute("offset");
+
+    public static final Object CHAR_REPLACEMENT = java.awt.font.TextAttribute.CHAR_REPLACEMENT;
+// Paragraph Styles
+
+// values are Floats:
+    public static final Object EXTRA_LINE_SPACING = new TextAttribute("extra_line_spacing");
+    public static final Object EXTRA_FIRST_LINE_SPACING = new TextAttribute("extra_first_line_spacing");
+
+    /**
+     * Amount beyond leading margin to indent the first line of a paragraph.
+     */
+    public static final Object FIRST_LINE_INDENT = new TextAttribute("first_line_indent");
+
+    public static final Object MIN_LINE_SPACING = new TextAttribute("min_line_spacing");
+    public static final Object MIN_FIRST_LINE_SPACING = new TextAttribute("min_first_line_spacing");
+
+    /**
+     * Flush lines left, right, or center.
+     */
+    public static final Object LINE_FLUSH = new TextAttribute("line_flush");
+
+    public static final Integer FLUSH_LEADING = new Integer(0);
+    public static final Integer FLUSH_CENTER = new Integer(1);
+    public static final Integer FLUSH_TRAILING = new Integer(2);
+    /**
+     * Value of <code>LINE_FLUSH</code> for full justification.
+     */
+    public static final Integer FULLY_JUSTIFIED = new Integer(3);
+
+    /**
+     * Leading and trailing margin in paragraph.
+     */
+    public static final Object LEADING_MARGIN = new TextAttribute("leading_margin");
+    public static final Object TRAILING_MARGIN = new TextAttribute("trailing_margin");
+
+    /**
+     * Tab ruler.  Values are MTabRuler instances.
+     */
+    public static final Object TAB_RULER = new TextAttribute("tab_ruler");
+    
+    /**
+     * Attribute key for the run direction of the line.
+     *
+     * <P><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Key</TH>
+     * <TD VALIGN="TOP">RUN_DIRECTION</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Value</TH>
+     * <TD VALIGN="TOP">Boolean</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Constants</TH>
+     * <TD VALIGN="TOP">RUN_DIRECTION_LTR = true, RUN_DIRECTION_RTL = false
+     * </TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Default</TH>
+     * <TD VALIGN="TOP">Use the default Unicode base direction from the BIDI 
+     * algorithm.</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Description</TH>
+     * <TD VALIGN="TOP"><P>Specifies which base run direction to use when 
+     * positioning mixed directional runs within a paragraph. If this value is
+     * RUN_DIRECTION_DEFAULT, <code>TextLayout</code> uses the default Unicode
+     * base direction from the BIDI algorithm.</P>
+     * <P><I>This attribute should have the same value over the whole 
+     * paragraph.</I></TD></TR>
+     * </TABLE>
+     */
+    public static final Object RUN_DIRECTION = java.awt.font.TextAttribute.RUN_DIRECTION;
+
+    /**
+     * Left-to-right run direction.
+     * @see #RUN_DIRECTION
+     */
+    public static final Boolean RUN_DIRECTION_LTR = java.awt.font.TextAttribute.RUN_DIRECTION_LTR;
+
+    /**
+     * Right-to-left run direction.
+     * @see #RUN_DIRECTION
+     */
+    public static final Boolean RUN_DIRECTION_RTL = java.awt.font.TextAttribute.RUN_DIRECTION_RTL;
+
+    /**
+     * Attribute key for the embedding level for nested bidirectional runs.
+     *
+     * <P><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Key</TH>
+     * <TD VALIGN="TOP">BIDI_EMBEDDING</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Value</TH>
+     * <TD VALIGN="TOP">Integer</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Limits</TH>
+     * <TD VALIGN="TOP">Positive values 1 through 15 are <I>embedding</I>
+     * levels, negative values<BR> through -15 are <I>override</I> levels
+     * </TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Default</TH>
+     * <TD VALIGN="TOP">Use standard BIDI to compute levels from formatting
+     * characters in the text.</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Description</TH>
+     * <TD VALIGN="TOP">Specifies the bidi embedding level of the character.
+     * When this attribute is present anywhere in a paragraph, then the 
+     * Unicode characters RLO, LRO, RLE, LRE, PDF are disregarded in the BIDI 
+     * analysis of that paragraph. 
+     * See the Unicode Standard v. 2.0, section 3-11.
+     * </TD></TR>
+     * </TABLE>
+     */
+    public static final Object BIDI_EMBEDDING = java.awt.font.TextAttribute.BIDI_EMBEDDING;
+
+    /**
+     * Attribute key for the justification of a paragraph.
+     *
+     * <P><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Key</TH>
+     * <TD VALIGN="TOP">JUSTIFICATION</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Value</TH>
+     * <TD VALIGN="TOP">Float</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Limits</TH>
+     * <TD VALIGN="TOP">0.0 through1.0</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Default</TH>
+     * <TD VALIGN="TOP">1.0</TD></TR>
+     * <TR>
+     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN=RIGHT>Description</TH>
+     * <TD VALIGN="TOP"><P>Specifies which fraction of the extra space to use 
+     * when justification is requested. For example, if the line is 50 points
+     * wide and the margins are 70 points apart, a value of 0.5 means that the
+     * line is padded to reach a width of 60 points.</P>
+     * <P><I>This attribute should have the same value over the whole
+     * paragraph.</I></TD></TR>
+     * </TABLE>
+     */
+    public static final Object JUSTIFICATION = java.awt.font.TextAttribute.JUSTIFICATION;
+
+    /**
+     * Justify the line to the full requested width.
+     * @see #JUSTIFICATION
+     */
+    public static final Float JUSTIFICATION_FULL = java.awt.font.TextAttribute.JUSTIFICATION_FULL;
+
+    /**
+     * Do not allow the line to be justified.
+     * @see #JUSTIFICATION
+     */
+    public static final Float JUSTIFICATION_NONE = java.awt.font.TextAttribute.JUSTIFICATION_NONE;
+}
diff --git a/src/com/ibm/tools/compression/CompressionTableGenerator.java b/src/com/ibm/tools/compression/CompressionTableGenerator.java
new file mode 100755
index 0000000..9d6d8d9
--- /dev/null
+++ b/src/com/ibm/tools/compression/CompressionTableGenerator.java
@@ -0,0 +1,230 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/compression/Attic/CompressionTableGenerator.java,v $ 
+ * $Date: 2000/03/10 04:17:56 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.compression;
+
+import com.ibm.text.*;
+
+/**
+ * Utility class to generate the tables used by the SCSU interface and
+ * the UnicodeCompressor class.
+ *
+ * @author Stephen F. Booth
+ * @version 1.0 08 Mar 99
+ */
+class CompressionTableGenerator
+{
+    // duplicate of constants in SCSU
+
+    final static int LATININDEX                  = 0xF9;
+    final static int IPAEXTENSIONINDEX           = 0xFA;
+    final static int GREEKINDEX                  = 0xFB;
+    final static int ARMENIANINDEX               = 0xFC;
+    final static int HIRAGANAINDEX               = 0xFD;
+    final static int KATAKANAINDEX               = 0xFE;
+    final static int HALFWIDTHKATAKANAINDEX      = 0xFF;
+
+    final static int SDEFINEX                    = 0x0B;
+    final static int SRESERVED                   = 0x0C;  // reserved value
+    final static int SQUOTEU                     = 0x0E;
+    final static int SCHANGEU                    = 0x0F;
+
+    final static int SQUOTE0                     = 0x01;
+    final static int SQUOTE1                     = 0x02;
+    final static int SQUOTE2                     = 0x03;
+    final static int SQUOTE3                     = 0x04;
+    final static int SQUOTE4                     = 0x05;
+    final static int SQUOTE5                     = 0x06;
+    final static int SQUOTE6                     = 0x07;
+    final static int SQUOTE7                     = 0x08;
+
+    final static int SCHANGE0                    = 0x10;
+    final static int SCHANGE1                    = 0x11;
+    final static int SCHANGE2                    = 0x12;
+    final static int SCHANGE3                    = 0x13;
+    final static int SCHANGE4                    = 0x14;
+    final static int SCHANGE5                    = 0x15;
+    final static int SCHANGE6                    = 0x16;
+    final static int SCHANGE7                    = 0x17;
+
+    final static int SDEFINE0                    = 0x18;
+    final static int SDEFINE1                    = 0x19;
+    final static int SDEFINE2                    = 0x1A;
+    final static int SDEFINE3                    = 0x1B;
+    final static int SDEFINE4                    = 0x1C;
+    final static int SDEFINE5                    = 0x1D;
+    final static int SDEFINE6                    = 0x1E;
+    final static int SDEFINE7                    = 0x1F;
+
+    //==========================
+    // Unicode mode tags
+    //==========================
+    final static int UCHANGE0                    = 0xE0;
+    final static int UCHANGE1                    = 0xE1;
+    final static int UCHANGE2                    = 0xE2;
+    final static int UCHANGE3                    = 0xE3;
+    final static int UCHANGE4                    = 0xE4;
+    final static int UCHANGE5                    = 0xE5;
+    final static int UCHANGE6                    = 0xE6;
+    final static int UCHANGE7                    = 0xE7;
+
+    final static int UDEFINE0                    = 0xE8;
+    final static int UDEFINE1                    = 0xE9;
+    final static int UDEFINE2                    = 0xEA;
+    final static int UDEFINE3                    = 0xEB;
+    final static int UDEFINE4                    = 0xEC;
+    final static int UDEFINE5                    = 0xED;
+    final static int UDEFINE6                    = 0xEE;
+    final static int UDEFINE7                    = 0xEF;
+
+    final static int UQUOTEU                     = 0xF0;
+    final static int UDEFINEX                    = 0xF1;
+    final static int URESERVED                   = 0xF2;  // reserved value
+
+    final static int BLOCKSIZE = 0xFF;
+    
+    /**
+     * Generate the table used as sOffsetTable in SCSU.
+     * This table contains preformed indices so we can do array lookups 
+     * instead of calculations for speed during decompression.
+     */
+    static void printOffsetTable()
+    {
+        int     i           = 0;
+	int []	offsetTable = new int [ BLOCKSIZE + 1 ];
+
+        // 0x00 is reserved
+
+        // half blocks from U+0080 to U+3380
+        for( i = 0x01; i < 0x68; i++ )
+            offsetTable[i] = i * 0x80;
+	
+        // half blocks from U+E000 to U+FF80
+        for( i = 0x68; i < 0xA8; i++ )
+            offsetTable[i] = (i * 0x80) + 0xAC00;
+	
+        // 0xA8..0xF8 is reserved
+ 
+        offsetTable[ LATININDEX ] = 0x00C0;
+        offsetTable[ IPAEXTENSIONINDEX ] = 0x0250;
+        offsetTable[ GREEKINDEX ] = 0x0370;
+        offsetTable[ ARMENIANINDEX ] = 0x0530;
+        offsetTable[ HIRAGANAINDEX ] = 0x3040;
+        offsetTable[ KATAKANAINDEX ] = 0x30A0;
+        offsetTable[ HALFWIDTHKATAKANAINDEX ] = 0xFF60;
+
+        // dump the generated table
+	System.out.println("static int [] sOffsetTable = {");
+        for(i = 0; i < offsetTable.length - 1; i++)
+            System.out.print("0x" + Integer.toHexString(offsetTable[i])
+			     + ", ");
+        for(i = offsetTable.length - 1; i < offsetTable.length; i++)
+            System.out.print("0x" + Integer.toHexString(offsetTable[i]));
+        System.out.println();
+        System.out.println("};");
+    }
+    
+    /**
+     * Generate the table used as sSingleTagTable in UnicodeCompressor.
+     * This table contains boolean values indicating if a byte is a
+     * single-byte mode tag.
+     */
+    static void printSingleTagTable()
+    {
+        int        i              = 0;
+	boolean [] singleTagTable = new boolean  [ BLOCKSIZE + 1 ];
+
+        for( i = 0x00; i <= BLOCKSIZE; i++ ) {
+            switch( i ) {
+		
+	    case SQUOTEU:  case SCHANGEU: 
+	    case SDEFINEX: case SRESERVED:
+	    case SQUOTE0:  case SQUOTE1:  
+	    case SQUOTE2:  case SQUOTE3:
+	    case SQUOTE4:  case SQUOTE5:  
+	    case SQUOTE6:  case SQUOTE7:
+	    case SCHANGE0: case SCHANGE1: 
+	    case SCHANGE2: case SCHANGE3:
+	    case SCHANGE4: case SCHANGE5: 
+	    case SCHANGE6: case SCHANGE7:
+	    case SDEFINE0: case SDEFINE1: 
+	    case SDEFINE2: case SDEFINE3:
+	    case SDEFINE4: case SDEFINE5: 
+	    case SDEFINE6: case SDEFINE7:
+		singleTagTable[i] = true;
+                break;
+		
+	    default:
+		singleTagTable[i] = false;
+                break;
+            }
+        }
+	
+        // dump the generated table
+        System.out.println("private static boolean [] sSingleTagTable = {");
+        for(i = 0; i < singleTagTable.length - 1; i++)
+            System.out.print(singleTagTable[i] + ", ");
+        for(i = singleTagTable.length - 1; i < singleTagTable.length; i++)
+            System.out.print(singleTagTable[i]);
+        System.out.println();
+        System.out.println("};");
+    }
+    
+    
+    /**
+     * Generate the table used as sUnicodeTagTable in 
+     * This table contains boolean values indicating if a byte is a
+     * unicode mode tag.
+     */
+    static void printUnicodeTagTable()
+    {
+        int        i               = 0;
+	boolean [] unicodeTagTable = new boolean  [ BLOCKSIZE + 1 ];
+
+        for( i = 0x00; i <= BLOCKSIZE; i++ ) {
+            switch( i ) {
+	    case UQUOTEU:  case UDEFINEX: 
+	    case URESERVED:
+	    case UCHANGE0: case UCHANGE1: 
+	    case UCHANGE2: case UCHANGE3:
+	    case UCHANGE4: case UCHANGE5: 
+	    case UCHANGE6: case UCHANGE7:
+	    case UDEFINE0: case UDEFINE1: 
+	    case UDEFINE2: case UDEFINE3:
+	    case UDEFINE4: case UDEFINE5: 
+	    case UDEFINE6: case UDEFINE7:
+		unicodeTagTable[i] = true;
+                break;
+		
+	    default:
+		unicodeTagTable[i] = false;
+                break;
+            }
+        }
+	
+        // dump the generated table
+        System.out.println("private static boolean [] sUnicodeTagTable = {");
+        for(i = 0; i < unicodeTagTable.length - 1; i++)
+            System.out.print(unicodeTagTable[i] + ", ");
+        for(i = unicodeTagTable.length - 1; i < unicodeTagTable.length; i++)
+            System.out.print(unicodeTagTable[i]);
+        System.out.println();
+        System.out.println("};");
+    }
+    
+    public static void main(String[] argv)
+    {
+        printOffsetTable();
+        printSingleTagTable();
+        printUnicodeTagTable();
+    }
+};
diff --git a/src/com/ibm/tools/compression/package.html b/src/com/ibm/tools/compression/package.html
new file mode 100755
index 0000000..97c7e2b
--- /dev/null
+++ b/src/com/ibm/tools/compression/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/compression/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:52 $
+-->
+</head>
+<body bgcolor="white">
+Tool used to rebuild tables used by the Unicode compression classes.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/tools/normalizer/CPPWriter.java b/src/com/ibm/tools/normalizer/CPPWriter.java
new file mode 100755
index 0000000..3bf951d
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/CPPWriter.java
@@ -0,0 +1,214 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/CPPWriter.java,v $ 
+ * $Date: 2000/09/21 22:37:55 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.normalizer;
+
+import com.ibm.text.*;
+import com.ibm.util.*;
+import com.ibm.util.CompactByteArray;
+import com.ibm.util.CompactCharArray;
+import com.ibm.util.Utility;
+import java.io.*;
+
+/**
+ * CPPWriter knows how to write data structures out to C++ source and header files
+ */
+class CPPWriter extends SourceWriter {
+    PrintWriter source;
+    PrintWriter header;
+
+    String className;
+
+    public CPPWriter(String fileName, String cName) throws FileNotFoundException {
+        className = cName;
+        int i = fileName.lastIndexOf('/');
+        String name = (i >= 0) ? fileName.substring(i+1) : fileName;
+
+        // Find the class name
+        header = new PrintWriter(new FileOutputStream(fileName + ".h"));
+        writeHeader(header);
+        header.println("#include \"unicode/utypes.h\"");
+        header.println("#include \"ucmp8.h\"");
+        header.println("#include \"ucmp16.h\"");
+        header.println("");
+        header.println("struct " + className + " {");   // "struct" makes everything public
+
+        source = new PrintWriter(new FileOutputStream(fileName + ".cpp"));
+        writeHeader(source);
+        source.println("#include \"" + name + ".h\" ");
+        source.println("");
+    }
+
+    public void close() {
+        header.println("};");
+        header.close();
+        source.close();
+        header = null;
+        source = null;
+    }
+
+    public void write(String name, short value) {
+        header.println("    enum { " + name + " = " + value + " };");
+    }
+
+    public void write(String name, int value) {
+        header.println("    enum { " + name + " = " + value + " };");
+    }
+
+    public void writeHex(String name, char value) {
+        header.println("    enum { " + name + " = 0x" + Utility.hex(value) + " };");
+    }
+
+    public void writeHex(String name, int value) {
+        header.println("    enum { " + name + " = 0x" + Integer.toString(value,16) + " };");
+    }
+
+    public void write(String name, CompactCharArray array) {
+        array.compact(false);
+
+        String indexName = name + "_index";
+        String valueName = name + "_values";
+
+        write(indexName, array.getIndexArray());
+        write(valueName, array.getValueArray());
+
+        header.println("");
+        header.println("    static CompactShortArray _" + name + ";");
+        header.println("");
+        header.println("    static const CompactShortArray* " + name + ";");
+
+        source.println("");
+        source.println("CompactShortArray " +
+                       className + "::_" + name + ";");
+        source.println("");
+        source.println("const CompactShortArray* " +
+                       className + "::" + name + " = ");
+        source.println("    ucmp16_initAliasWithBlockShift(&" + className + "::_" + name + ",");
+        source.println("                                   (uint16_t*)" + indexName + ",");
+        source.println("                                   (int16_t*)" + valueName + ",");
+        source.println("                                   " +
+                       array.getValueArray().length + ", " +
+                       "0x0000, " + // default value
+                       CompactCharArray.BLOCKSHIFT + ");");
+    }
+
+    public void write(String name, CompactByteArray array) {
+        array.compact(false);
+
+        String indexName = name + "_index";
+        String valueName = name + "_values";
+
+        write(indexName, array.getIndexArray());
+        write(valueName, array.getValueArray());
+
+        header.println("");
+        header.println("    static CompactByteArray _" + name + ";");
+        header.println("");
+        header.println("    static const CompactByteArray* " + name + ";");
+
+        source.println("");
+        source.println("CompactByteArray " +
+                       className + "::_" + name + ";");
+        source.println("");
+        source.println("const CompactByteArray* " +
+                       className + "::" + name + " = ");
+        source.println("    ucmp8_initAlias(&" + className + "::_" + name + ",");
+        source.println("                    (uint16_t*)" + indexName + ",");
+        source.println("                    (int8_t*)" + valueName + ",");
+        source.println("                    " + array.getValueArray().length + ");");
+    }
+
+    public void write(String name, StringBuffer str) {
+        write(name, str.toString().toCharArray());
+    }
+
+    public void write(String name, char[] array) {
+        header.println("");
+        header.println("    static const uint16_t " + name + "[];");
+
+        source.println("");
+        source.println("const uint16_t " + className + "::" + name + "[] = {");
+
+        source.print("    ");
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0 && i % 8 == 0) {
+                source.print(Utility.LINE_SEPARATOR + "    ");
+            }
+            source.print("0x" + Utility.hex(array[i]) + ", ");
+        }
+        source.println("};");
+    }
+
+    public void write(String name, short[] array) {
+        header.println("");
+        header.println("    static const uint16_t " + name + "[];");
+
+        source.println("");
+        source.println("const uint16_t " + className + "::" + name + "[] = {");
+
+        source.print("    ");
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0 && i % 8 == 0) {
+                source.print(Utility.LINE_SEPARATOR + "    ");
+            }
+            source.print("0x" + Utility.hex((char)array[i]) + ", ");
+        }
+        source.println("};");
+    }
+
+    public void write(String name, int[] array) {
+        header.println("");
+        header.println("    static const int32_t " + name + "[];");
+
+        source.println("");
+        source.println("const int32_t " + className + "::" + name + "[] = {");
+
+        source.print("    ");
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0 && i % 8 == 0) {
+                source.print(Utility.LINE_SEPARATOR + "    ");
+            }
+            source.print("0x" + Integer.toString(array[i],16) + ", ");
+        }
+        source.println("};");
+    }
+
+    public void write(String name, byte[] array) {
+        header.println("");
+        header.println("    static const uint8_t " + name + "[];");
+
+        source.println("");
+        source.println("const uint8_t " + className + "::" + name + "[] = {");
+
+        source.print("    ");
+        for (int i = 0; i < array.length; i++) {
+            if (i > 0 && i % 8 == 0) {
+                source.print(Utility.LINE_SEPARATOR + "    ");
+            }
+            source.print("0x" + hex2(array[i]) + ", ");
+        }
+        source.println("};");
+    }
+
+    private static StringBuffer __buf = new StringBuffer();
+
+    // This method not multithread safe!
+    private static final String hex2(int x) {
+        __buf.setLength(0);
+        __buf.append(hex1(x>>4)).append(hex1(x));
+        return __buf.toString();
+    }
+
+    private static final char hex1(int x) {
+        return "0123456789ABCDEF".charAt(x & 0xF);
+    }
+}
diff --git a/src/com/ibm/tools/normalizer/FCDBuilder.java b/src/com/ibm/tools/normalizer/FCDBuilder.java
new file mode 100755
index 0000000..1e73f44
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/FCDBuilder.java
@@ -0,0 +1,137 @@
+/*
+******************************************************************************
+* Copyright (C) 1996-2000, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/FCDBuilder.java,v $ 
+* $Date: 2001/03/28 00:01:13 $ 
+* $Revision: 1.4 $
+*
+******************************************************************************
+*/
+
+package com.ibm.tools.normalizer;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.Writer;
+import com.ibm.util.CharTrie;
+import com.ibm.text.UCharacter;
+import com.ibm.text.UTF16;
+import com.ibm.text.Normalizer;
+
+/**
+* Class to generate modified checkFCD data for collation.
+* Data generated is used only in internal ICU collation.
+* FCD is the set of strings such that for each string if you simply decomposed
+* any composites (including singleton composites) without canonical reordering.
+* FCD is not a normalization form, since there's no uniqueness.
+*/
+public class FCDBuilder
+{
+  // public methods ----------------------------------------------------
+  
+  /**
+  * constructor with default output file path
+  */
+  public FCDBuilder()
+  {
+  }
+  
+  /**
+  * Building method.
+  * Each unicode character will be used to generate data, output to the default
+  * file path  
+  */
+  public void build()
+  {
+    build(DEFAULT_OUTPUT_PATH_);
+  }
+  
+  /**
+  * Building method.
+  * Each unicode character will be used to generate data.
+  * @param output file path
+  */
+  public void build(String output)
+  {
+    char result[] = new char[UCharacter.MAX_VALUE + 1];
+    
+    String cstr,
+           nfd;
+    for (int ch = UCharacter.MIN_VALUE; ch <= UCharacter.MAX_VALUE; ch ++) {
+      result[ch] = getFCD(ch);
+    }
+    
+    CharTrie trie = new CharTrie(result);
+      
+    // testing, checking trie values
+    for (int ch = UCharacter.MIN_VALUE; ch <= UCharacter.MAX_VALUE; ch ++) {
+      if (trie.getValue(ch) != getFCD(ch))
+      {
+        System.out.println("error at 0x" + Integer.toHexString(ch) + " " +
+                           getFCD(ch));
+        break;
+      }
+    }
+   
+    try
+    {
+      FileWriter f = new FileWriter(output);
+      BufferedWriter w = new BufferedWriter(f);
+      String s = trie.toString();
+      w.write(s);
+      w.close();
+    }
+    catch(Exception e)
+    {
+      e.printStackTrace();
+    }
+  }
+  
+  /**
+  * Main method
+  */
+  public static void main(String arg[])
+  {
+    FCDBuilder fcdb = new FCDBuilder();
+    fcdb.build();
+  }
+  
+  // private methods -----------------------------------------------------
+  
+  /**
+  * Retrieved the FCDcheck value of the argument codepoint.
+  * f(ch) = combining class of 
+  * (first codepoint in (NFD of ch)) | (last code point in (NFD of ch))
+  * @param ch character to get FCD from
+  */
+  private char getFCD(int ch)
+  {
+    String cstr = UCharacter.toString(ch),
+           nfd = Normalizer.decompose(cstr, false, 0);
+    int lastindex = UTF16.countCodePoint(nfd) - 1;
+    int firstch = UTF16.charAtCodePointOffset(nfd, 0);
+    int lastch = UTF16.charAtCodePointOffset(nfd, lastindex);
+    return (char)((UCharacter.getCombiningClass(firstch) << LEAD_CC_SHIFT_) |
+                  (UCharacter.getCombiningClass(lastch) & LAST_BYTE_MASK_));
+  }
+
+  // private data members ------------------------------------------------
+  
+  /**
+  * Output file path
+  */
+  private final String DEFAULT_OUTPUT_PATH_ = "fcdcheck.txt";
+  
+  /**
+  * Lead combining class shift
+  */
+  private final int LEAD_CC_SHIFT_ = 8;
+  
+  /**
+  * Last byte mask
+  */
+  private final int LAST_BYTE_MASK_ = 0xFF;
+}
\ No newline at end of file
diff --git a/src/com/ibm/tools/normalizer/JavaWriter.java b/src/com/ibm/tools/normalizer/JavaWriter.java
new file mode 100755
index 0000000..479e1c4
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/JavaWriter.java
@@ -0,0 +1,109 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/JavaWriter.java,v $ 
+ * $Date: 2000/07/12 16:41:26 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.normalizer;
+
+//import com.ibm.text.*;
+import com.ibm.util.Utility;
+import com.ibm.util.CompactCharArray;
+import com.ibm.util.CompactByteArray;
+import java.io.*;
+
+/**
+ * JavaWriter knows how to write data structures out to a Java source file
+ */
+class JavaWriter extends SourceWriter {
+    PrintWriter out;
+
+    public JavaWriter(String name) throws FileNotFoundException {
+        // Find the class name
+        int cIndex = name.lastIndexOf('/');
+        String cName = (cIndex >= 0) ? name.substring(cIndex+1) : name;
+
+        out = new PrintWriter(new FileOutputStream(name + ".java"));
+
+        writeHeader(out);
+        out.println("class " + cName + " {");
+    }
+
+    public void close() {
+        out.println("}");
+        out.close();
+        out = null;
+    }
+
+    public void write(String name, short value) {
+        out.println("    static final short " + name + " = " + value + ";");
+    }
+
+    public void write(String name, int value) {
+        out.println("    static final int " + name + " = " + value + ";");
+    }
+
+    public void writeHex(String name, char value) {
+        out.println("    static final char " + name + " = 0x" + Integer.toString((int)value,16) + ";");
+    }
+
+    public void writeHex(String name, int value) {
+        out.println("    static final int " + name + " = 0x" + Integer.toString(value,16) + ";");
+    }
+
+    public void write(String name, CompactCharArray array) {
+        array.compact(false);
+        out.println("");
+        out.println("    static final CompactCharArray " + name + " = new CompactCharArray(");
+        out.println(Utility.formatForSource(Utility.arrayToRLEString(array.getIndexArray())));
+        out.println("        ," );
+        out.println(Utility.formatForSource(Utility.arrayToRLEString(array.getValueArray())));
+        out.println("        );" );
+    }
+
+    public void write(String name, CompactByteArray array) {
+        array.compact(false);
+        out.println("");
+        out.println("    static final CompactByteArray " + name + " = new CompactByteArray(");
+        out.println(Utility.formatForSource(Utility.arrayToRLEString(array.getIndexArray())));
+        out.println("        ," );
+        out.println(Utility.formatForSource(Utility.arrayToRLEString(array.getValueArray())));
+        out.println("        );" );
+    }
+
+    public void write(String name, StringBuffer str) {
+        out.println("");
+        out.println("    static final String " + name + " = ");
+        out.println(Utility.formatForSource(str.toString()));
+        out.println("    ;");
+    }
+
+    public void write(String name, char[] array) {
+        out.println("");
+        out.println("    static final char[] " + name + " = Utility.RLEStringToCharArray(");
+        out.println(Utility.formatForSource(Utility.arrayToRLEString(array)));
+        out.println("    );");
+    }
+
+    public void write(String name, int[] array) {
+        out.println("");
+        out.println("    static final int[] " + name + " = Utility.RLEStringToIntArray(");
+        out.println(Utility.formatForSource(Utility.arrayToRLEString(array)));
+        out.println("    );");
+    }
+
+    void writeHeader(PrintWriter out) {
+        super.writeHeader(out);
+        out.println("");
+        out.println("package com.ibm.text;");
+        out.println("import com.ibm.util.*;");
+        out.println("");
+    }
+}
+
diff --git a/src/com/ibm/tools/normalizer/MutableChar.java b/src/com/ibm/tools/normalizer/MutableChar.java
new file mode 100755
index 0000000..600e196
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/MutableChar.java
@@ -0,0 +1,46 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/MutableChar.java,v $ 
+ * $Date: 2000/03/10 04:17:56 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+// MutableChar.java
+
+package com.ibm.tools.normalizer;
+
+import com.ibm.text.*;
+import java.lang.Comparable;
+import java.io.Serializable;
+
+class MutableChar implements Cloneable, Comparable, Serializable {
+
+    public char value;
+
+    public MutableChar(char newValue) {
+        value = newValue;
+    }
+    public MutableChar set(char newValue) {
+        value = newValue;
+        return this;
+    }
+    public boolean equals(Object other) {
+        return value == ((MutableChar)other).value;
+    }
+    public int hashCode() {
+        return value;
+    }
+    public String toString() {
+        return String.valueOf(value);
+    }
+    public int compareTo(Object b) {
+        char ch = ((MutableChar)b).value;
+        return value == ch ? 0 : value < ch ? -1 : 1;
+    }
+}
+
diff --git a/src/com/ibm/tools/normalizer/NormalizerBuilder.java b/src/com/ibm/tools/normalizer/NormalizerBuilder.java
new file mode 100755
index 0000000..8400d1e
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/NormalizerBuilder.java
@@ -0,0 +1,1152 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/NormalizerBuilder.java,v $ 
+ * $Date: 2001/03/15 23:36:02 $ 
+ * $Revision: 1.12 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.tools.normalizer;
+
+import java.io.*;
+import java.util.*;
+import com.ibm.text.*;
+import com.ibm.util.CompactByteArray;
+import com.ibm.util.CompactCharArray;
+import com.ibm.util.Utility;
+import com.ibm.icu.internal.UInfo;
+
+public final class NormalizerBuilder
+{
+    public static void main(String args[]) throws IOException {
+        try {
+            NormalizerBuilder foo = new NormalizerBuilder(args);
+        } catch (Throwable e) {
+            System.err.println(e.getLocalizedMessage());
+            e.printStackTrace();
+            System.in.read();
+        }
+    }
+
+    private UInfo uinfo;
+
+    /**
+     * Map char->String.  Each entry maps a character with a
+     * decomposition (either canonical or compatibility) to that
+     * decomposition.  The decomposition is in canonical order.
+     */
+    private DecompMap decomps = new DecompMap();
+
+    /**
+     * Map of characters whose full canonical decomposition is
+     * DIFFERENT from their full compatibility decomposition.
+     */
+    private DecompMap explodeCompat = new DecompMap();
+
+    /**
+     * Map of characters with a decomposition that are neither
+     * in explodeCompat nor in permutedCompositions.
+     */
+    private DecompMap explodeOnly   = new DecompMap();
+
+    /**
+     * Map of String->char of permutations that compose to a
+     * character.  This does not include singletons or other
+     * composition exclusions.  It is an inverse list, with valid
+     * permutations, for canonical decomposition.
+     */
+    private CompMap permutedCompositions = new CompMap();
+    private CompMap binaryCompositions = new CompMap();
+
+    /**
+     * A set of characters that form the base of a combining
+     * sequence.
+     */
+    private CharSet bases = new CharSet();
+
+    /**
+     * A set of characters that form the combining character of
+     * a combining sequence.
+     */
+    private CharSet combining = new CharSet();
+
+    private Map pairExplosions = new HashMap();
+
+    private boolean fVerbose = false;
+    private boolean fWriteData = false;
+    private boolean fShowSizes = false;
+    private boolean fPrompt = false;
+    private boolean fJava = true;
+    private boolean fCPP = false;
+    private String fOutDir = null; // output directory for either Java or C++
+
+    /**
+     * The highest Unicode character that has a canonical
+     * decomposition.  (i.e. largest char that can result from a
+     * primary canonical composition.)  This is the largest char in
+     * permutedCompositions.
+     */
+    char largestChar = 0;
+
+    public NormalizerBuilder(String[] args) throws IOException
+    {
+        // Parse my command line
+        for (int i = 0; i < args.length; i++)
+        {
+            if (args[i].equals("-data")) {
+                uinfo = new UInfo(args[++i], args[++i]);
+            }
+            else if (args[i].equals("-write")) {
+                fWriteData = true;
+            }
+            else if (args[i].equals("-verbose") || args[i]. equals("-v")) {
+                fVerbose = true;
+            }
+            else if (args[i].equals("-size")) {
+                fShowSizes = true;
+            }
+            else if (args[i].equals("-prompt")) {
+                fPrompt = true;
+            }
+            else if (args[i].equals("-java")) {
+                fJava = true;
+                fCPP = false;
+            }
+            else if (args[i].equals("-cpp")) {
+                fCPP = true;
+                fJava = false;
+            }
+            else if (args[i].equals("-outdir")) {
+                fOutDir = args[++i];
+            }
+        }
+        if (uinfo == null) {
+            uinfo = new UInfo();
+        }
+        if (fOutDir == null) {
+            fOutDir = fJava ? "src/com/ibm/text/"
+                            : "./";
+        }
+        if (!fOutDir.endsWith("/")) { fOutDir += '/'; }
+
+        boolean canonicalOnly = true;
+
+        // Build decomps, a char->String mapping of characters to their
+        // decompositions, either canonical or compatibility.
+        createDecompositions();
+
+        outv("\nGenerating permuted compositions...");
+
+        // Form the list of all the permuted sequences that are
+        // canonically equivalent to the canonical decompositions.  As
+        // a by-product, find out which are not combining character
+        // sequences.
+
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            String decomp = decomps.get(ch);
+
+            if (decomp != null) {
+                boolean done = false;
+
+                if (!uinfo.getFullDecomposition(ch,true).equals(
+                            uinfo.getFullDecomposition(ch,false)))
+                {
+                    explodeCompat.put(ch, uinfo.getFullDecomposition(ch, false));
+                    done = true;
+                }
+                // It's always a combining base sequence, so removed last check - liu
+                if (uinfo.hasCanonicalDecomposition(ch) && decomp.length() > 1
+                    && !uinfo.isExcludedComposition(ch) /*&& uinfo.isCBS(decomp)*/)
+                {
+                    if (decomp.length() <= 2) {
+                        permutedCompositions.put(decomp, ch);
+                    }
+                    else {
+                        /* Create a comprehensive list of
+                         * permutations.  Assume the first char is a
+                         * base char, so don't permute it into the
+                         * middle of the string -- just concatenate it
+                         * onto the front.  However, there may be
+                         * embedded base characters, so we do a
+                         * further check for canonical decomposition
+                         * equivalence below. */
+                        List alternatives = concat(decomp.charAt(0),
+                            jumble(decomp.substring(1, decomp.length())));
+
+                        for (int i = 0; i < alternatives.size(); ++i)
+                        {
+                            String variant = (String)alternatives.get(i);
+                            String normalized = uinfo.fixCanonical(variant);
+
+                            if (normalized.equals(decomp)) {
+                                permutedCompositions.put(variant, ch);
+                            }
+                        }
+                    }
+                    largestChar = ch;
+                    done = true;
+                }
+                if (!done) {
+                    explodeOnly.put(ch, decomp);    // Disparaged
+                }
+            }
+        }
+
+        outv("\nLargest composed char: " + Utility.hex(largestChar));
+
+        // Form the binary compositions
+        outv("\nGenerating pairwise compositions...");
+
+        Iterator list = permutedCompositions.keySet().iterator();
+        while (list.hasNext()) {
+            String decomp = (String)list.next();
+            char ch = permutedCompositions.get(decomp);
+
+            if (decomp.length() > 2) {
+                //
+                // If this is a composition of more than two characters,
+                // see if its initial portion is also a composition.  If so, that lets
+                // us build up this composed character iteratively.
+                //
+                for (int i = decomp.length()-1; i > 1; --i) {
+                    String partial = decomp.substring(0,i);
+                    char partialMap = permutedCompositions.get(partial);
+                    if (partialMap != 0) {
+                        decomp = partialMap + decomp.substring(i);
+                        break;
+                    }
+                }
+            }
+            if (decomp.length() <= 2) {
+                binaryCompositions.put(decomp, ch);
+            } else {
+                //
+                // The composition takes more than two characters, and there's
+                // no way to build it up from smaller ones.
+                //
+                if (decomp.equals(uinfo.fixCanonical(decomp)))
+                {
+                    // If the decomp is in canonical order, we're in trouble,
+                    // since that means there's no way to generate this composed
+                    // character from its canonically decomposed equivalent.
+                    err("No pairwise compose of " + Utility.hex(decomp) +
+                            " > " + Utility.hex(ch) + " " + uinfo.getName(ch,true) );
+                }
+                else {
+                    // If the decomp is *not* in canonical order, it's not as
+                    // bad, since composition will still work as long as
+                    warn("No pairwise compose of non-canon " + Utility.hex(decomp) +
+                            " > " + Utility.hex(ch) + " " + uinfo.getName(ch,true) );
+                }
+            }
+
+            bases.add(decomp.charAt(0));
+
+            // add to list of all combining characters in composites
+            for (int q = 1; q < decomp.length(); ++q) {
+                combining.add(decomp.charAt(q));
+            }
+        }
+
+
+        // Generate the pairwise explosions, where a composed char + combining char
+        // transforms into a different pair of characters, usually because the
+        // canonical combining classes are reversed.
+
+        outv("\nGenerating exploding pairs....");
+
+        List binaryValues = new ArrayList(binaryCompositions.values());
+        Collections.sort(binaryValues);
+
+        for (char addOn = 0; addOn < 0xFFFF; addOn++) {
+            if (combining.contains(addOn))
+            {
+                list = binaryValues.iterator();
+
+                while (list.hasNext()) {
+                    MutableChar unichar = (MutableChar)list.next();
+                    String chStr = String.valueOf(unichar.value);
+                    String source = chStr + addOn;
+
+                    String comp = binaryComposition(source);
+
+                    if (comp.length() == 1) continue; // don't care if combines
+                    if (comp.charAt(0) == addOn || comp.charAt(1) == addOn) continue; // rearranges
+
+                    if (!source.equals(comp)) {
+                        String decomp = fullDecomposition(source);
+                        pairExplosions.put(source,comp);
+                        bases.add(unichar);
+                    }
+                }
+            }
+        }
+
+        buildDecompData();
+        buildComposeData();
+        outv("Success!");
+
+        if (fPrompt) {
+            System.out.println("\nHit any key to continue...");
+            System.in.read();
+        }
+    }
+
+    public String fullDecomposition(String s) {
+        return fullDecomposition(s, new StringBuffer()).toString();
+    }
+
+    public StringBuffer fullDecomposition(char ch, StringBuffer output) {
+        String value = decomps.get(ch);
+        if (value == null) {
+            bubbleAppend(output, ch);
+        }
+        else {
+            bubbleAppend(output, value);
+        }
+        return output;
+    }
+
+    public StringBuffer fullDecomposition(String s, StringBuffer output) {
+        for (int i = 0; i < s.length(); ++i) {
+            fullDecomposition(s.charAt(i),output);
+        }
+        return output;
+    }
+
+    public String binaryComposition(String sr) {
+        // set up decomposed string, init variables
+        StringBuffer output = new StringBuffer();
+        StringBuffer decomp = new StringBuffer();
+
+        if (sr.length() == 0) return output.toString();
+
+        // First generate the full decomposition of the input string
+        fullDecomposition(sr, decomp);
+        int basePosition = 0;
+        char base = decomp.charAt(0);
+        output.append(base);
+
+        // handle degenerate case--no base character at start
+        if (uinfo.getCanonicalClass(base) != 0) {
+            // later
+        }
+
+        // loop through, composing items with base
+        for (int i = 1; i < decomp.length(); ++i) {
+            char ch = decomp.charAt(i);
+            short can = uinfo.getCanonicalClass(ch);
+
+            char value = binaryCompositions.get(String.valueOf(base) + ch);
+
+            if (value != 0 && noObstructions(output, basePosition, can)) {
+                base = value;
+                output.setCharAt(basePosition, base);
+            } else if (can == 0) {
+                basePosition = output.length();
+                base = ch;
+                output.append(ch);
+            } else {
+                bubbleAppend(output, ch, can);
+            }
+        }
+        return output.toString();
+    }
+
+    public boolean noObstructions(StringBuffer buffer, int pos, short can) {
+        for (int j = buffer.length()-1; j > pos; --j) {
+            if (can == uinfo.getCanonicalClass(buffer.charAt(j))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public void bubbleAppend(StringBuffer buffer, char ch, short can) {
+        for (int j = buffer.length()-1; j >= 0; --j) {
+            if (can >= uinfo.getCanonicalClass(buffer.charAt(j))) {
+                buffer.insert(j + 1, ch);
+                return;
+            }
+        }
+        buffer.insert(0, ch);
+    }
+
+    public void bubbleAppend(StringBuffer buffer, char ch) {
+        bubbleAppend(buffer, ch, uinfo.getCanonicalClass(ch));
+    }
+
+    public void bubbleAppend(StringBuffer buffer, String s) {
+        for (int i = 0; i < s.length(); ++i) {
+            bubbleAppend(buffer, s.charAt(i));
+        }
+    }
+
+    String getDecomposition(char ch) {
+        return decomps.get(ch);
+    }
+
+
+    /**
+     * Generate a Map of all decompositions in Unicode.  The keys in
+     * the map are MutableChar objects, one for each character that
+     * has a decomposition.  The values are String objects containing
+     * the full decomposition for the character, in canonical order.
+     */
+    private void createDecompositions()
+    {
+        outv("\nGenerating Full decompositions...");
+        StringBuffer temp = new StringBuffer();
+
+        short compatCount=0, canonCount=0;
+
+        for (char ch = 0; ch < 0xFFFF; ++ch) {
+            if (ch >= '\u4E00' && ch <= '\uD7A3') continue; // skip ideos
+
+            short category = uinfo.getCategory(ch);
+
+            if (category == uinfo.UNASSIGNED) continue; //skip reserved
+            if (category == uinfo.CONTROL) continue;
+            if (category == uinfo.FORMAT) continue;
+            if (category == uinfo.PRIVATE_USE) continue;
+            if (category == uinfo.SURROGATE) continue;
+
+            boolean canon = uinfo.hasCanonicalDecomposition(ch);
+            boolean compat = uinfo.hasCompatibilityDecomposition(ch);
+
+            if (canon) canonCount++;
+            if (compat) compatCount++;
+
+            if (canon || compat) {
+                String decomp = uinfo.getFullDecomposition(ch, canon);
+                temp.setLength(0);
+                temp.append(decomp);
+                uinfo.fixCanonical(temp); // put into canonical order
+
+                decomps.put(ch, temp.toString() );
+            }
+        }
+    }
+
+    /**
+     * Modify a list in place by prepending the given character to all
+     * of its elements, which are assumed to be strings.
+     */
+    static List concat(char ch, List a) {
+        for (int i = 0; i < a.size(); ++i) {
+            a.set(i, ch + (String)a.get(i));
+        }
+        return a;
+    }
+
+    /**
+     * Return a list of Strings for all possible permutations of the
+     * characters in the input string.
+     */
+    static List jumble (String source)
+    {
+        ArrayList result = new ArrayList();
+        if (source.length() == 1) {
+            result.add(source);
+        } else for (int i = 0; i < source.length(); ++i) {
+            result.addAll( concat( source.charAt(i),
+                                   jumble(source.substring(0,i)
+                                          + source.substring(i+1,source.length()))));
+        }
+        return result;
+    }
+
+    static final int STR_INDEX_SHIFT = 2;
+    static final int STR_LENGTH_MASK = 0x0003;
+
+    static final int DECOMP_RECURSE = 0x00008000;
+    static final int DECOMP_MASK  = 0x00007FFF;
+
+    /**
+     * Generate a new "DecompData.java" that contains the CompactArray definitions
+     * used in the {@link Normalizer.DECOMPOSE} operation.
+     */
+    void buildDecompData() throws IOException {
+
+        outv("\nGenerating DecompData.java....");
+        //
+        // For each Unicode character that has a decomposition, we put its
+        // fully-decomposed form at the end of the "contents" string, followed
+        // by a null, and we put its index in "contents" into the CompactArray.
+        // If it does not have a decomposition, we store a bogus index.
+        //
+        // We do this first for all of the compatibility decompositions, save
+        // the index in MAX_COMPAT, and then do it again for the canonical
+        // decompositions.  When the array is used later, any character whose
+        // decomp has an index greater than MAX_COMPAT is a canonical decomp.
+        //
+        int canonIndex = 0;
+        int compatIndex = 0;
+
+        // Map from Unicode character to replacement string index
+        CompactCharArray offsets = new CompactCharArray((char)0);
+
+        // We also need a place to store the replacement strings.  Add a char at
+        // the front so that "0" won't be the index of any of the replacement strings.
+        StringBuffer replace = new StringBuffer().append("\uffff");
+
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            if (uinfo.hasCompatibilityDecomposition(ch)) {
+                compatIndex = putLength(replace, decomps.get(ch), 0);
+                offsets.setElementAt(ch, (char)compatIndex);
+            }
+        }
+
+        // Add the canonical decomps.  Their indices must be > compatIndex.
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            if (uinfo.hasCanonicalDecomposition(ch)) {
+
+                if (ch == 0x0f77) {
+                    outv("0F77: decomps.get() = " + Utility.hex(decomps.get(ch)));
+                    outv("0F77: fullDecomp = " + Utility.hex(uinfo.getFullDecomposition(ch,false)));
+                }
+
+                canonIndex = putLength(replace, decomps.get(ch), compatIndex);
+
+                // If this character's full compatibility decomposition is different from
+                // its canonical decomp, that means one of the characters in its
+                // canonical decomp itself has a compatibility decomp.  To deal with this,
+                // we set a bit flag telling the decomposer to recurse on this character.
+
+                if (!uinfo.getFullDecomposition(ch,true).equals(uinfo.getFullDecomposition(ch,false))) {
+                    offsets.setElementAt(ch, (char)(canonIndex | DECOMP_RECURSE));
+                } else {
+                    offsets.setElementAt(ch, (char)canonIndex);
+                }
+            }
+        }
+
+        //
+        // Now generate another CompactArray containing the combining class of every
+        // character in Unicode
+        //
+        final byte BASE = 0;
+        CompactByteArray canonClasses = new CompactByteArray(BASE);
+
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            short canonClass = uinfo.getCanonicalClass(ch);
+            if (canonClass != 0) {
+                canonClasses.setElementAt(ch, (byte)canonClass);
+            }
+        }
+
+        // Finally, write the data out to a compilable Java source file
+
+        if (fJava) {
+            String f = fOutDir + "DecompData";
+            out("Writing " + f);
+            writeDecompData(new JavaWriter(f),
+                        canonIndex, compatIndex, BASE, offsets, replace, canonClasses);
+            
+        }
+
+        if (fCPP) {
+            String f = fOutDir + "dcmpdata";
+            out("Writing " + f + ".(cpp|h)");
+            writeDecompData(new CPPWriter(f, "DecompData"),
+                        canonIndex, compatIndex, BASE, offsets, replace, canonClasses);
+        }
+
+        outv("Decomp data: MAX_CANONICAL = " + canonIndex + ", MAX_DECOMP = " + compatIndex);
+
+        if (fShowSizes) {
+            int offsetSize = offsets.getIndexArray().length * 2 + offsets.getValueArray().length * 2;
+            int canonSize = canonClasses.getIndexArray().length * 2 + canonClasses.getValueArray().length;
+            int replaceLength = replace.length();
+
+            outv("Total runtime size of decomp data is "
+                + (offsetSize + canonSize + replaceLength));
+
+            outv("  offsets:      " + offsetSize);
+            outv("  canonClasses: " + canonSize);
+            outv("  replace:      " + replaceLength);
+        }
+    }
+
+    void writeDecompData(SourceWriter out, int maxCanon, int maxCompat, short BASE,
+                        CompactCharArray offsets, StringBuffer contents,
+                        CompactByteArray canonClasses)
+    {
+        out.write("MAX_CANONICAL",  maxCanon        );
+        out.write("MAX_COMPAT",     maxCompat       );
+        out.write("DECOMP_MASK",    DECOMP_MASK     );
+        out.write("DECOMP_RECURSE", DECOMP_RECURSE  );
+        out.write("BASE",           BASE            );
+        out.write("offsets",        offsets         );
+        out.write("contents",       contents        );
+        out.write("canonClass",     canonClasses    );
+        out.close();
+    }
+
+
+    //==========================================================================================
+    // Methods for generating and writing the composition data
+    //
+    final int TYPE_MASK   = 0x0007;
+    final int INDEX_MASK  = 0xFFF8;
+    final int INDEX_SHIFT = 3;
+
+    // MAX_BASES is used to map a 2-diminsional (base,combining) index pair onto a
+    // one-dimensional CompactArray.  We could just use baseCount, but making it a power
+    // of two allows slightly better compaction.
+
+    final int MAX_BASES   = 1024;   // Product must be <= 64K
+    final int MAX_COMBINE = 65536/MAX_BASES;
+
+    final char                // for character types
+        IGNORE = 0,
+        BASE = 1,
+        EXPLODING_BASE = 2,
+        COMBINING = 3,
+        INITIAL_JAMO = 4,
+        MEDIAL_JAMO = 5,
+        FINAL_JAMO = 6,
+        HANGUL = 7;
+
+    // These variables actually hold the composition data.
+    short baseCount = 1;        // Leave 0 as an invalid index
+    short combineCount = 1;     // Leave 0 as an invalid index
+    short nccCount = 0;
+    int   maxCompat = 0;
+    int   maxCanon = 0;
+
+    // This array contains types (from the set above) and indices into the "replace"
+    // and "actions" arrays
+    CompactCharArray lookup = new CompactCharArray(IGNORE);
+
+    // We also need a place to store the strings that result from replacements,
+    // explosions, and combinations.  Add a char at the front so that "0" won't
+    // be the index of any of the replacement strings.
+    StringBuffer replace = new StringBuffer().append(" ");
+
+    // We need to represent each canonical character class as a single bit
+    // so that we can OR together a mask of all combining char classes seen
+    // Build an array that maps from combining class to a compacted integer
+    // from 0..n-1, where n is the number of distinct combining classes.
+    // E.g., in 3.0, there are 53 distinct combining classes.
+    int[] classMap = new int[256];
+    int[] typeBit;
+
+    // Build a two-dimensional array of the action to take for each base/combining pair
+    CompactCharArray actions = new CompactCharArray((char)0);
+
+    char[] actionIndex;
+
+    /**
+     * Generate a new "ComposeData.java" that contains the CompactArray definitions
+     * used in the {@link Normalizer.COMPOSE} operation.
+     */
+    void buildComposeData() throws IOException
+    {
+       outv("\nGenerating ComposeData.java....");
+
+        BitSet usedIndices = new BitSet();
+        CharSet explodingBases = new CharSet();
+        NonComposingCombiningMap nccMap = new NonComposingCombiningMap();
+
+        // Find all characters that are both bases *and* have compatibility
+        // decompositions.  These are weird
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            if (bases.contains(ch) && uinfo.hasCompatibilityDecomposition(ch)) {
+                //
+                // Add this character's explosion to the replacement string list.
+                // We're going to make sure that its "base index", i.e. the
+                // index for it in the actions array, is the same as the
+                // explosion's index in the replace string.  This lets
+                // us use the same index for the character's two behaviors
+                //
+                int index = put(replace, explodeCompat.get(ch), 0);
+
+                outv(Utility.hex(ch) + " is base and has compat explosion "
+                                  + Utility.hex(explodeCompat.get(ch)) );
+
+                addChar(lookup, ch, EXPLODING_BASE, index);
+                usedIndices.set(index);
+                explodingBases.add(ch);
+            }
+        }
+
+        // First add the base characters to the array.
+        // At the same time, compute their indices.
+        // Leave an empty base index of 0 as a placeholder for null operations.
+        //
+
+        for (char ch = 0; ch < 0xFFFF; ch++)
+        {
+
+            if (explodingBases.contains(ch)) {
+                continue;
+            }
+
+            short cclass = uinfo.getCanonicalClass(ch);
+
+            if (bases.contains(ch)) {
+                // Make sure that we don't use a base index that was already used
+                // for an exploding base character.
+                while (usedIndices.get(baseCount)) {
+                    baseCount++;
+                }
+                // Now add the character to lookup as a base
+                addChar(lookup, ch, BASE, baseCount++);
+            }
+            if (combining.contains(ch)) {
+                classMap[cclass] = 1;       // Mark this combining class as being used
+                addChar(lookup, ch, COMBINING, combineCount++);
+            }
+
+            if (ch >= '\u1100' && ch < '\u1160') {
+                addChar(lookup, ch, INITIAL_JAMO, 0);
+            }
+            if (ch >= '\u1161' && ch < '\u11a6') {
+                addChar(lookup, ch, MEDIAL_JAMO, 0);
+            }
+            if (ch >= '\u11a7' && ch < '\u11fa') {
+                addChar(lookup, ch, FINAL_JAMO, 0);
+            }
+            if (ch >= 0xac00 && ch <= 0xd7a4) {
+                addChar(lookup, ch, HANGUL, 0);
+            }
+
+            // Add explosions for all compatibility decompositions,
+            // including the Jamo --> Conjoining Jamo decomps.
+            // If the canonical decomposition is exactly one character
+            // one (4 hex digits) then we deal with it separately below.
+            if (explodeCompat.contains(ch) &&
+                uinfo.getDecomposition(ch).length() != 4)
+            {
+                maxCompat = put(replace, explodeCompat.get(ch), 0);
+                addExplosion(lookup, ch, maxCompat);
+            }
+        }
+
+        // Now add the explosions resulting from canonical decompositions
+        // These will all have indices greater than "maxCompat" so we can distinguish them.
+        //
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            short cclass = uinfo.getCanonicalClass(ch);
+            String explosion = null;
+
+            if (explodeOnly.contains(ch) && uinfo.hasCanonicalDecomposition(ch)) {
+                maxCanon = put(replace, explodeOnly.get(ch), maxCompat);
+                addExplosion(lookup, ch, maxCanon);
+            }
+
+//          else if (!combining.contains(ch) && cclass != 0 && classMap[cclass] != 0) {
+//              //
+//              // If a combining character didn't happen to end up in one of
+//              // the pairwise combinations or explosions we use but still has
+//              // a combining class that is the same as a character we *do* use,
+//              // we need to save its class so that we don't combine things "past" it.
+//              //
+//              // However, if the character has an explosion we *don't* need it, because
+//              // we'll never see it, only the results of its explosion.
+//              //
+//              addChar(lookup, ch, COMBINING, 0);
+//              nccCount++;
+//          }
+
+            // I'm rewriting this logic.  Having an index of zero means that
+            // the typeBit[index] gets overwritten with multiple different
+            // values.  So we must use real index values that are unique
+            // per combining class.  Also, it doesn't matter if the class
+            // has been seen or not; we still need to record the character
+            // in order to have its type and class during composition.
+            else if (!combining.contains(ch) && cclass != 0) {
+                // If a combining character didn't happen to end up in one of
+                // the pairwise combinations or explosions we use but still has
+                // a combining class that is the same as a character we *do* use,
+                // we need to save its class.
+
+                // As our index, use combineCount and up.  Reuse values by
+                // mapping them through nccMap, which keeps track of previously
+                // used values and allocates new ones only as needed, starting
+                // with zero. - Liu
+                classMap[cclass] = 1;       // Mark this combining class as being used
+                addChar(lookup, ch, COMBINING, combineCount + nccMap.getIndexFor(cclass));
+            }
+        }
+
+        nccCount = (short) nccMap.getIndexCount(); // Liu
+
+        // Remap characters that have a canonical decomposition to a singleton,
+        // and also different compatibility and canonical full decompositions
+        // (that is, also are members of explodeCompat).  These characters can't
+        // be exploded to their full decomposition since that breaks canonical
+        // composition (normalization form C).  Instead, we place their
+        // singleton decomposition in the table, at the end.  This works because
+        // the singleton will get recursively exploded by Normalizer.  As of
+        // Unicode 3.0, this fix applies to U+1FFE, 1FFD, 2000, and 2001. - Liu
+        int singleton = replace.length();
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            if (!explodingBases.contains(ch) &&
+                explodeCompat.contains(ch) &&
+                uinfo.getDecomposition(ch).length() == 4) {
+              
+                // There might be a cleaner way to do this, perhaps by folding
+                // this logic into the code above (perhaps calling
+                // addExplosion() instead of addChar()), but I couldn't find it.
+                char remap = (char)
+                    Integer.parseInt(uinfo.getDecomposition(ch), 16);
+
+                int index = put(replace, String.valueOf(remap), singleton);
+                addChar(lookup, ch, EXPLODING_BASE, index);
+
+                outv("Canonical singleton " + Utility.hex(ch) +
+                     " remaps to " + Utility.hex(remap) + " index=" + index); 
+            }
+        }
+
+        // Now run through the combining classes again and assign bit numbers
+        // in the same ascending order as the canonical classes
+        int maskShift = 0;
+        int bit = 0;
+        for (int i = 0; i < 256; i++) {
+            if (classMap[i] != 0) {
+                classMap[i] = ++bit;
+            }
+        }
+        if (bit >= 64) {
+            err(String.valueOf(bit+1) + " combining classes; max is 64");
+        }
+        outv("# of combining classes is " + (bit+1));
+
+        outv("baseCount=" + baseCount + ", combineCount=" + combineCount
+                            + ", nccCount=" + nccCount);
+
+        if (baseCount > MAX_BASES) {
+            err(Integer.toString(baseCount) + " bases, limit is " + MAX_BASES);
+            err(Integer.toString(combineCount) + " combining chars, limit is " + MAX_COMBINE);
+        }
+
+        // Now build the "actions" array that tells what to do when each base /
+        // combining pair is seen.
+        //
+        // First do character pairs that combine into a single character...
+        //
+        Iterator iter = binaryCompositions.keySet().iterator();
+        while (iter.hasNext()) {
+            String source = (String)iter.next();
+            char ch = binaryCompositions.get(source);
+
+            int baseIndex = lookup.elementAt(source.charAt(0)) >>> INDEX_SHIFT;
+            int combiningIndex = lookup.elementAt(source.charAt(1)) >>> INDEX_SHIFT;
+
+            actions.setElementAt((char)(baseIndex + MAX_BASES*combiningIndex), ch);
+        }
+
+
+        //
+        // Pair explosions: base/combining pairs that explode into something else
+        // We're squeezing the indices for these in between MAX_COMPOSED and 0xFFFF,
+        // which means they can't be indexes into the "replace" string; those are too big.
+        // Instead they're indexes into the "actionIndex" array, which in turn contains
+        // indices in "replace"
+        //
+        actionIndex = new char[ pairExplosions.size() ];
+        short index = 0;
+
+        iter = pairExplosions.keySet().iterator();
+        while (iter.hasNext()) {
+            String source = (String)iter.next();
+            char base = source.charAt(0);
+            char combining = source.charAt(1);
+
+            int strIndex = put(replace, (String)pairExplosions.get(source), 0);
+            actionIndex[index] = (char)strIndex;
+
+            int baseIndex = lookup.elementAt(base) >>> INDEX_SHIFT;
+            int combiningIndex = lookup.elementAt(combining) >>> INDEX_SHIFT;
+
+            actions.setElementAt((char)(baseIndex + MAX_BASES*combiningIndex),
+                                 (char)(index + largestChar));
+            index++;
+        }
+
+        // Fill in the array that maps from combining class value
+        // to a bit numbe representing the canonical combining class.
+        // That is, map from 0..240 (in 3.0) to 0..52.
+        typeBit = new int[combineCount + nccCount];
+
+        for (char ch = 0; ch < 0xFFFF; ch++) {
+            int value = lookup.elementAt(ch);
+            int type = value & TYPE_MASK;
+
+            if (type == COMBINING) {
+                int ind = value >>> INDEX_SHIFT;
+                int cclass = uinfo.getCanonicalClass(ch);
+                if (typeBit[ind] != 0 && typeBit[ind] != classMap[cclass]) {
+                    err("Overwriting typeBit[" + ind + "], was " +
+                        typeBit[ind] + ", changing to " + classMap[cclass] + " for class " + cclass);
+                }
+                typeBit[ind] = classMap[cclass];
+            }
+        }
+
+        if (fJava) {
+            String f = fOutDir + "ComposeData";
+            out("Writing " + f);
+            writeComposeData(new JavaWriter(f));
+        }
+        if (fCPP) {
+            String f = fOutDir + "compdata";
+            out("Writing " + f + ".(cpp|h)");
+            writeComposeData(new CPPWriter(f, "ComposeData"));
+        }
+
+        if (fShowSizes) {
+            int lookupSize = lookup.getIndexArray().length * 2 + lookup.getValueArray().length * 2;
+            int actionSize = actions.getIndexArray().length * 2 + actions.getValueArray().length * 2;
+            int actIndexSize = actionIndex.length * 2;
+            int replaceSize = replace.length();
+            int typeBitSize = typeBit.length * 2;
+
+            outv("Total runtime size of compose data is "
+                + (lookupSize + actionSize + actIndexSize + replaceSize + typeBitSize));
+
+            outv("  lookup:       " + lookupSize);
+            outv("  actions:      " + actionSize);
+            outv("  actionIndex:  " + actIndexSize);
+            outv("  typeBit:      " + typeBitSize);
+            outv("  replace:      " + replaceSize);
+        }
+    }
+
+    void writeComposeData(SourceWriter out) {
+        out.write("BASE_COUNT",         baseCount);
+        out.write("COMBINING_COUNT",    combineCount);
+        out.write("MAX_COMPAT",         maxCompat);
+        out.write("MAX_CANONICAL",      maxCanon);
+
+        out.writeHex("MAX_COMPOSED",    largestChar);
+
+        int maxIndex = replace.length();
+        out.write("MAX_INDEX",          maxIndex    );
+        out.write("INITIAL_JAMO_INDEX", maxIndex + 1);
+        out.write("MEDIAL_JAMO_INDEX",  maxIndex + 2);
+
+        out.write("MAX_BASES",          MAX_BASES  );
+        out.write("MAX_COMBINE",        MAX_COMBINE);
+
+        out.writeHex("TYPE_MASK",       TYPE_MASK);
+        out.write("INDEX_SHIFT",        INDEX_SHIFT);
+
+        // The character types
+        out.write("IGNORE",             (int)IGNORE);
+        out.write("BASE",               (int)BASE);
+        out.write("NON_COMPOSING_COMBINING", (int)EXPLODING_BASE);
+        out.write("COMBINING",          (int)COMBINING);
+        out.write("INITIAL_JAMO",       (int)INITIAL_JAMO);
+        out.write("MEDIAL_JAMO",        (int)MEDIAL_JAMO);
+        out.write("FINAL_JAMO",         (int)FINAL_JAMO);
+        out.write("HANGUL",             (int)HANGUL);
+
+        out.write("lookup",         lookup        );
+        out.write("actions",        actions       );
+        out.write("actionIndex",    actionIndex   );
+        out.write("replace",        replace       );
+        out.write("typeBit",        typeBit);
+
+        out.close();
+    }
+
+    void addChar(CompactCharArray lookup, char ch, int type, int index)
+    {
+        // First make sure it's not already present
+        if (lookup.elementAt(ch) != IGNORE)
+        {
+            char oldValue = lookup.elementAt(ch);
+            err(typeName(type) + " char is also "
+                  + typeName(oldValue & TYPE_MASK) + ": "
+                  + Utility.hex(ch) + "  " + uinfo.getName(ch,true));
+        }
+        else if ((index << INDEX_SHIFT) > 65536) {
+            err("not enough bits: index " + index + " << INDEX_SHIFT = " + (index << INDEX_SHIFT));
+        } else {
+            lookup.setElementAt(ch, (char)(type | (index << INDEX_SHIFT)));
+        }
+    }
+
+    void addExplosion(CompactCharArray lookup, char ch, int index)
+    {
+        // First make sure it doesn't already have an index
+        char oldValue = lookup.elementAt(ch);
+        int oldIndex = oldValue >>> INDEX_SHIFT;
+
+        if (oldValue != IGNORE) {
+            err("Exploding char is already " + typeName(oldValue & TYPE_MASK)
+                             + " (index " + oldIndex + "): "
+                             + Utility.hex(ch) + "  " + uinfo.getName(ch,true));
+        }
+
+        if (oldIndex != 0) {
+            err("Exploding char is already " + typeName(oldValue & TYPE_MASK)
+                             + " (index " + oldIndex + "): "
+                             + Utility.hex(ch) + "  " + uinfo.getName(ch,true));
+        }
+        else if ((index << INDEX_SHIFT) > 65536) {
+            err("not enough bits: index " + index + " << INDEX_SHIFT = " + (index << INDEX_SHIFT));
+        } else {
+            lookup.setElementAt(ch, (char)((oldValue & ~INDEX_MASK) | (index << INDEX_SHIFT)));
+        }
+    }
+
+    String typeName(int type) {
+        switch (type) {
+            case IGNORE:            return "Ignored";
+            case BASE:              return "Base";
+            case EXPLODING_BASE:    return "Exploding Base";
+            case COMBINING:         return "Combining";
+            case INITIAL_JAMO:      return "Initial Jamo";
+            case MEDIAL_JAMO:       return "Medial Jamo";
+            case FINAL_JAMO:        return "Final Jamo";
+            case HANGUL:            return "Hangul";
+            default:                return "Unknown";
+        }
+    }
+
+
+    static final int put(StringBuffer buf, String str, int minIndex)
+    {
+        str = str + '\u0000';   // Add trailing null
+
+        int index = buf.toString().indexOf(str);
+        if (index <= minIndex) {
+            index = buf.length();
+            buf.append(str);
+        }
+        return index;
+    }
+
+    static final int putLength(StringBuffer buf, String str, int minIndex) {
+        int length = str.length();
+
+        if (length >= (1 << STR_INDEX_SHIFT)) {
+            // There's no room to store the length in the index, so
+            // add a null terminator and use a 0 length to flag this
+            str = str + '\u0000';
+            length = 0;
+        }
+
+        int index = buf.toString().indexOf(str);
+        if (index <= minIndex) {
+            index = buf.length();
+            buf.append(str);
+        }
+        return (index << STR_INDEX_SHIFT) | length;
+    }
+
+    //--------------------------------------------------------------------------------
+    // Output & formatting
+
+    void out(String str) {
+        System.out.println(str);
+    }
+    void outv(String str) {
+        if (fVerbose) System.out.println(str);
+    }
+    void warn(String str) {
+        System.err.println("Warning: " + str);
+    }
+    void err(String str) {
+        System.err.println("ERROR:   " + str);
+    }
+}
+
+//-----------------------------------------------------------------------------
+// Utility classes
+//-----------------------------------------------------------------------------
+
+class DecompMap extends HashMap {
+    public DecompMap() {
+    }
+
+    void put(char ch, String value) {
+        put(new MutableChar(ch), value);
+    }
+
+    String get(char ch) {
+        Object obj = get(probe.set(ch));
+        return (obj != null) ? (String)obj : null;
+    }
+
+    boolean contains(char ch) {
+        return containsKey(probe.set(ch));
+    }
+
+    MutableChar probe = new MutableChar(' ');
+}
+
+class CompMap extends HashMap {
+    public CompMap() {
+    }
+
+    void put(String key, char value) {
+        put(key, new MutableChar(value));
+    }
+
+    char get(String key) {
+        Object obj = get((Object)key);
+        return (obj != null) ? ((MutableChar)obj).value : 0;
+    }
+}
+
+class CharSet extends HashSet {
+    public CharSet() {
+    }
+
+    public void add(char ch) {
+        add(new MutableChar(ch));
+    }
+
+    public boolean contains(char ch) {
+        return contains(probe.set(ch));
+    }
+    MutableChar probe = new MutableChar(' ');
+}
+
+/**
+ * An int->int map.  Each time a non-existent key is looked up,
+ * create a new mapping to the next available integer value.
+ */
+class NonComposingCombiningMap {
+    int index;
+    Hashtable hash;
+
+    public NonComposingCombiningMap() {
+        index = 0;
+        hash = new Hashtable();
+    }
+
+    /**
+     * Return the existing mapping of class.  If no such mapping
+     * exists, create one and return it.  New mappings map to
+     * zero, then one, etc.
+     */
+    public int getIndexFor(int cclass) {
+        Integer cl = new Integer(cclass);
+        Integer ind = (Integer) hash.get(cl);
+        if (ind != null) {
+            return ind.intValue();
+        }
+        hash.put(cl, new Integer(index));
+        return index++;
+    }
+
+    /**
+     * Return the number of mappings made so far.  That is, getIndexFor()
+     * has returned integers 0..getIndexCount()-1.
+     */
+    public int getIndexCount() {
+        return index;
+    }
+}
diff --git a/src/com/ibm/tools/normalizer/QuickCheckBuilder.java b/src/com/ibm/tools/normalizer/QuickCheckBuilder.java
new file mode 100755
index 0000000..a80a626
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/QuickCheckBuilder.java
@@ -0,0 +1,486 @@
+/*
+******************************************************************************
+* Copyright (C) 1996-2000, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/QuickCheckBuilder.java,v $ 
+* $Date: 2001/05/18 20:45:10 $ 
+* $Revision: 1.4 $
+*
+******************************************************************************
+*/
+
+package com.ibm.tools.normalizer;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.Writer;
+import java.io.Reader;
+import java.io.EOFException;
+import java.util.StringTokenizer;
+
+import com.ibm.util.ByteTrie;
+import com.ibm.text.UCharacter;
+import com.ibm.text.UTF16;
+
+/**
+* Class to generate modified quickcheck data for collation.
+* Data generated is a trie of normalization form corresponding to the index 
+* code point.
+* Hence codepoint 0xABCD will have normalization form 
+* <code>
+*    quickcheck[codepoint] = 
+*              STAGE_3_[STAGE_2_[STAGE_1_[codepoint >> STAGE_1_SHIFT_] + 
+*              ((codepoint >> STAGE_2_SHIFT_) & STAGE_2_MASK_AFTER_SHIFT_)] +
+*              (codepoint & STAGE_3_MASK_)];
+* </code>
+* value is a byte containing 2 sets of 4 bits information.<br>
+* bits 1 2 3 4                        5678<br>
+*      NFKC NFC NFKD NFD MAYBES       NFKC NFC NFKD NFD YES<br>
+* ie if quick[0xABCD] = 10000001, this means that 0xABCD is in NFD form and 
+* maybe in NFKC form.
+*/
+public class QuickCheckBuilder
+{
+  // public methods ----------------------------------------------------
+  
+  /**
+  * constructor with default input, output file path
+  */
+  public QuickCheckBuilder()
+  {
+  }
+  
+  /**
+  * Building method.
+  * Each unicode character will be used to generate data, output to the default
+  * file path  
+  */
+  public void build()
+  {
+    build(DEFAULT_INPUT_PATH_, DEFAULT_OUTPUT_PATH_);
+  }
+  
+  /**
+  * Building method.
+  * Each unicode character will be used to generate data.
+  * @param input file path
+  * @param output file path
+  */
+  public void build(String input, String output)
+  {   
+    try
+    {
+      byte result[] = getQuickCheckArray(input);
+      int notyes[] = getNotYesFirstCP(result);
+      ByteTrie trie = new ByteTrie(result);
+      FileWriter f = new FileWriter(output);
+      BufferedWriter w = new BufferedWriter(f);
+      
+      w.write("# QuickCheck data\n");
+      w.write("# Generated from NormalizationQuickCheck.txt\n\n");
+      w.write("int UQUICK_CHECK_MIN_VALUES_[] = {");
+      w.write("0x" + Integer.toHexString(notyes[0]) + ", 0x" + 
+              Integer.toHexString(notyes[1]) + ", 0x" + 
+              Integer.toHexString(notyes[2]) + ", 0x" + 
+              Integer.toHexString(notyes[3]) + "};\n");
+      
+      String s = trie.toString();
+      w.write(s);
+      w.close();
+      System.out.println("test " + test(input, trie));
+    }
+    catch(Exception e)
+    {
+      e.printStackTrace();
+    }
+  }
+  
+  /**
+  * Main method
+  */
+  public static void main(String arg[])
+  {
+    QuickCheckBuilder qcb = new QuickCheckBuilder();
+    qcb.build();
+  }
+  
+  // private methods -----------------------------------------------------
+  
+  /**
+  * Method to manipulate the values of the read in normalized form
+  * @param array of quickcheck values
+  * @param startcp starting code point
+  * @param endcp ending code point
+  * @param normalizationformat normalization format and the following argument
+  *        state indicates if codepoints from startcp to endcp are of the 
+  *        indicated normalization format
+  * @param state indicates if codepoints from startcp to endcp are of the 
+  *        argument normalization format
+  */
+  private void formQuickCheckValue(byte[] array, int startcp, int endcp,
+                                   String normalizationformat, String state) 
+  {
+    byte value = NFD_MAYBE_MASK_;
+    byte clear = NFD_NO_MASK_;
+
+    if (normalizationformat.equals(NFC_)) {
+      clear = NFC_NO_MASK_;
+      if (state.equals(NO_)) {
+        value = NFC_NO_MASK_;
+      }
+      else {
+        if (state.equals(YES_)) {
+          value = NFC_YES_MASK_;
+        }
+        else {
+          value = NFC_MAYBE_MASK_;
+        }
+      }
+    }
+    else {
+      if (normalizationformat.equals(NFD_)) {
+        if (state.equals(NO_)) {
+          value = NFD_NO_MASK_;
+        }
+        else {
+          if (state.equals(YES_)) {
+            value = NFD_YES_MASK_;
+          }
+        }
+      }
+      else {
+        if (normalizationformat.equals(NFKC_)) {
+          clear = NFKC_NO_MASK_;
+          if (state.equals(NO_)) {
+            value = NFKC_NO_MASK_;
+          }
+          else {
+            if (state.equals(YES_)) {
+              value = NFKC_YES_MASK_;
+            }
+            else {
+              value = NFKC_MAYBE_MASK_; 
+            }
+          }
+        }
+        else {
+          if (normalizationformat.equals(NFKD_)) {
+            clear = NFKD_NO_MASK_;
+            if (state.equals(NO_)) {
+              value = NFKD_NO_MASK_;
+            }
+            else {
+              if (state.equals(YES_)) {
+                value = NFKD_YES_MASK_;
+              }
+              else {
+                value = NFKD_MAYBE_MASK_;
+              }
+            }
+          }
+        }
+      }
+    }
+
+    for (; startcp <= endcp; startcp ++) {
+      array[startcp] &= clear;
+      if (value != clear) {
+        array[startcp] |= value;
+      }
+    }
+  }
+
+  /**
+  * Reads in the NormalizationQuickCheck.txt file and generates a byte of 
+  * QuickCheck data for each codepoint
+  * @param input file path
+  * @exception thrown when file reading error occurs
+  */
+  private byte[] getQuickCheckArray(String input) throws Exception
+  {
+    byte result[] = new byte[UCharacter.MAX_VALUE + 1];
+    
+    // initializing quickcheck array
+    initializeQuickCheckArray(result);
+    
+    StringTokenizer st;
+    // read in start and end codepoint
+    int startcp,
+        endcp;
+    // read in normalization format and its corresponding value
+    String token,
+           nf,
+           check;
+    
+    try
+    {
+      FileReader f = new FileReader(input);
+      BufferedReader r = new BufferedReader(f);
+      String s = "";
+      while (true)
+      {
+        s = r.readLine();
+        if (s == null)
+          break;
+          
+        if (!s.equals("") && s.charAt(0) != '#')
+        {
+          st = new StringTokenizer(s, "; ");
+          startcp = Integer.parseInt(st.nextToken(), 16);
+          endcp = Integer.parseInt(st.nextToken(), 16);
+          nf = st.nextToken();
+          check = st.nextToken();
+          formQuickCheckValue(result, startcp, endcp, nf, check);
+        }
+      }
+      r.close();
+    }
+    catch(EOFException e)
+    {
+    }
+    
+    return result;
+  }
+  
+  /**
+  * Initializing quickcheck array.
+  * All assigned codepoints have the value Y, all unassigned codepoints have 
+  * the value M, all non-character codepoints (D800..DFFF, *FFFE, *FFFF) have 
+  * the value N.
+  * @param array quickcheck byte array
+  */
+  private void initializeQuickCheckArray(byte[] array)
+  {
+    for (int ch = UCharacter.MIN_VALUE; ch <= UCharacter.MAX_VALUE; ch ++)
+    {
+      array[ch] = DEFINED_CHAR_NORM_VALUE_;  
+      if ((ch >= SURROGATE_START_ && ch <= SURROGATE_END_) || 
+          ((ch & MASK_LAST_16_BITS_) >= 
+                                     MIN_NOT_A_CHAR_AFTER_MASK_LAST_16_BITS_))
+        array[ch] = NOT_A_CHARACTER_VALUE_;
+    }
+  }
+  
+  /**
+  * Tests the generated trie with the data in the input file.
+  * @param input file path
+  * @param trie object
+  * @exception thrown when file reading error occurs
+  */
+  private boolean test(String input, ByteTrie trie) throws Exception
+  {
+    StringTokenizer st;
+    // read in start and end codepoint
+    int startcp,
+        endcp;
+    // read in normalization format and its corresponding value
+    String token,
+           nf,
+           check;
+    byte temp;
+    
+    try
+    {
+      FileReader f = new FileReader(input);
+      BufferedReader r = new BufferedReader(f);
+      String s = "";
+      while (true)
+      {
+        s = r.readLine();
+        if (s == null)
+          break;
+          
+        if (!s.equals("") && s.charAt(0) != '#')
+        {
+          st = new StringTokenizer(s, "; ");
+          startcp = Integer.parseInt(st.nextToken(), 16);
+          endcp = Integer.parseInt(st.nextToken(), 16);
+          nf = st.nextToken();
+          check = st.nextToken();
+          
+          byte mask = 0;
+          
+          if (nf.equals(NFC_))
+            mask = (byte)0x44;
+          else
+            if (nf.equals(NFD_))
+              mask = (byte)0x11;
+            else 
+              if (nf.equals(NFKC_))
+                mask = (byte)0x88;
+              else 
+                if (nf.equals(NFKD_))
+                  mask = (byte)0x22;
+          for (; startcp <= endcp; startcp ++)
+          {
+            temp = (byte)(trie.getValue(startcp) & mask);
+            if (check.equals(NO_) && (temp != 0))
+            {
+              System.out.println("Error at NO " + startcp);
+              return false;
+            }
+            
+            if (check.equals(YES_) && (temp < 0 || temp > 0x8))
+            {
+              System.out.println("Error at YES " + startcp);
+              return false;
+            }
+            
+            if (check.equals(MAYBE_) && (temp < 0x10) && (temp != -128))
+            {
+              System.out.println("Error at MAYBE " + startcp);
+              return false;
+            }
+          }
+        }
+      }
+      r.close();
+    }
+    catch(EOFException e)
+    {
+    }
+    return true;
+  }
+  
+  /**
+  * Returns an array of the first codepoints that do not have a YES for their
+  * respective normalization format. Hence 
+  * <p> getNotYesFirstCP[0] is the first codepoint that is not a NFD_YES<br>
+  * getNotYesFirstCP[1] is the first codepoint that is not a NFKD_YES<br>
+  * getNotYesFirstCP[2] is the first codepoint that is not a NFC_YES<br>
+  * getNotYesFirstCP[3] is the first codepoint that is not a NFKC_YES<br>
+  * @param quickcheck array of quickcheck values
+  * @return array of first codepoints not a YES
+  */
+  private int[] getNotYesFirstCP(byte[] quickcheck)
+  {
+    int result[] = {UCharacter.MAX_VALUE, UCharacter.MAX_VALUE, 
+                    UCharacter.MAX_VALUE, UCharacter.MAX_VALUE};
+    int length = quickcheck.length;
+    byte value;
+    for (int codepoint = 0; codepoint < UCharacter.MAX_VALUE; codepoint ++)
+    {
+      value = quickcheck[codepoint];
+      if ((value & NFD_YES_MASK_) == 0 && (codepoint < result[0]))
+        result[0] = codepoint;
+      if ((value & NFKD_YES_MASK_) == 0 && (codepoint < result[1]))
+        result[1] = codepoint;
+      if ((value & NFC_YES_MASK_) == 0 && (codepoint < result[2]))
+        result[2] = codepoint;
+      if ((value & NFKC_YES_MASK_) == 0 && (codepoint < result[3]))
+        result[3] = codepoint;
+    }
+    return result;
+  }
+  
+  // private data members ------------------------------------------------
+  
+  /**
+  * Input file path
+  */
+  private final String DEFAULT_INPUT_PATH_ = 
+                                 "data//unicode//NormalizationQuickCheck.txt";
+  
+  /**
+  * Output file path
+  */
+  private final String DEFAULT_OUTPUT_PATH_ = "QuickCheck.txt";
+  
+  /**
+  * 16 bits mask
+  */
+  private final int MASK_LAST_16_BITS_ = 0xFFFF;
+  
+  /**
+  * Minimum value of a not-a-character after the 16 bit masking
+  */
+  private final int MIN_NOT_A_CHAR_AFTER_MASK_LAST_16_BITS_ = 0xFFFE;
+  
+  /**
+  * Surrogate code points
+  */
+  private final int SURROGATE_START_ = 0xD800;
+  private final int SURROGATE_END_   = 0xDBFF;
+
+  /**
+  * NFD 2 bit mask
+  */
+  private final byte NFD_NO_MASK_ = (byte)0xEE;
+  private final byte NFD_YES_MASK_ = (byte)0x01;
+  private final byte NFD_MAYBE_MASK_ = (byte)0x10;
+
+  /**
+  * NFKD 2 bit mask
+  */
+  private final byte NFKD_NO_MASK_ = (byte)0xDD;
+  private final byte NFKD_YES_MASK_ = (byte)0x02;
+  private final byte NFKD_MAYBE_MASK_ = (byte)0xd0;
+
+  /**
+  * NFC 2 bit mask
+  */
+  private final byte NFC_NO_MASK_ = (byte)0xBB;
+  private final byte NFC_YES_MASK_ = (byte)0x04;
+  private final byte NFC_MAYBE_MASK_ = (byte)0x40;
+
+  /**
+  * NFKC 2 bit mask
+  */
+  private final byte NFKC_NO_MASK_ = (byte)0x77;
+  private final byte NFKC_YES_MASK_ = (byte)0x08;
+  private final byte NFKC_MAYBE_MASK_ = (byte)0x80;
+
+  /**
+  * Default value for undefined characters
+  */
+  private final byte UNDEFINED_CHAR_NORM_VALUE_ = (byte)0xF0;
+
+  /**
+  * Default value for defined characters
+  */
+  private final byte DEFINED_CHAR_NORM_VALUE_ = (byte)0x0F;
+
+  /**
+  * Default value for not-a-character
+  */
+  private final byte NOT_A_CHARACTER_VALUE_ = (byte)0x00;
+  
+  /**
+  * NFC name
+  */
+  private final String NFC_ = "NFC";
+  
+  /**
+  * NFKC name
+  */
+  private final String NFKC_ = "NFKC";
+  
+  /**
+  * NFD name
+  */
+  private final String NFD_ = "NFD";
+  
+  /**
+  * NFKD name
+  */
+  private final String NFKD_ = "NFKD";
+  
+  /**
+  * YES
+  */
+  private final String YES_ = "Y";
+  
+  /**
+  * NO
+  */
+  private final String NO_ = "N";
+  
+  /**
+  * MAYBE
+  */
+  private final String MAYBE_ = "M";
+}
\ No newline at end of file
diff --git a/src/com/ibm/tools/normalizer/SourceWriter.java b/src/com/ibm/tools/normalizer/SourceWriter.java
new file mode 100755
index 0000000..e951f4b
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/SourceWriter.java
@@ -0,0 +1,52 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/SourceWriter.java,v $ 
+ * $Date: 2000/07/12 16:41:26 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.normalizer;
+
+import com.ibm.text.*;
+import com.ibm.util.CompactCharArray;
+import com.ibm.util.CompactByteArray;
+import java.io.PrintWriter;
+import java.util.Date;
+
+//===========================================================================================
+// Utilities for writing data out as compilable source code
+//
+public abstract class SourceWriter {
+    abstract public void close();
+    abstract public void write(String name, short value);
+    abstract public void write(String name, int value);
+
+    abstract public void write(String name, CompactCharArray array);
+    abstract public void write(String name, CompactByteArray array);
+    abstract public void write(String name, StringBuffer str);
+
+    abstract public void write(String name, char[] array);
+    abstract public void write(String name, int[] array);
+
+    abstract public void writeHex(String name, char value);
+    abstract public void writeHex(String name, int value);
+
+    void writeHeader(PrintWriter out) {
+        out.println("/*");
+        out.println("************************************************************************");
+        out.println("*   Copyright (c) 1997-2000, International Business Machines");
+        out.println("*   Corporation and others.  All Rights Reserved.");
+        out.println("************************************************************************");
+        out.println("* > THIS FILE WAS MACHINE GENERATED <");
+        out.println("* >       DO NOT EDIT BY HAND       <");
+        out.println("* >      RUN TOOL TO REGENERATE     <");
+        out.println("* Tool: " + Normalizer.class.getName());
+        out.println("* Creation date: " + new Date());
+        out.println("*/");
+    }
+}
diff --git a/src/com/ibm/tools/normalizer/package.html b/src/com/ibm/tools/normalizer/package.html
new file mode 100755
index 0000000..11eaccd
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:52 $
+-->
+</head>
+<body bgcolor="white">
+Tool used to rebuild data tables used by Normalizer.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/tools/rbbi/BuildDictionaryFile.java b/src/com/ibm/tools/rbbi/BuildDictionaryFile.java
new file mode 100755
index 0000000..207d08f
--- /dev/null
+++ b/src/com/ibm/tools/rbbi/BuildDictionaryFile.java
@@ -0,0 +1,876 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/rbbi/Attic/BuildDictionaryFile.java,v $ 
+ * $Date: 2000/09/22 18:58:26 $ 
+ * $Revision: 1.1 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.rbbi;
+
+import com.ibm.util.CompactByteArray;
+import com.ibm.text.UnicodeSet;
+import java.io.*;
+import java.util.Enumeration;
+import java.util.Vector;
+
+public class BuildDictionaryFile {
+    public static void main(String args[])
+            throws FileNotFoundException, UnsupportedEncodingException, IOException {
+        String filename = args[0];
+        String encoding = "";
+        String outputFile = "";
+        String listingFile = "";
+
+        if (args.length >= 2)
+            encoding = args[1];
+
+        if(args.length >= 3)
+            outputFile = args[2];
+
+        if (args.length >= 4)
+            listingFile = args[3];
+
+        BuildDictionaryFile dictionary = new BuildDictionaryFile();
+        dictionary.build(filename, encoding);
+
+        DataOutputStream out = null;
+        if (outputFile.length() != 0) {
+            out = new DataOutputStream(new FileOutputStream(outputFile));
+            dictionary.writeDictionaryFile(out);
+        }
+
+        PrintWriter listing = null;
+        if (listingFile.length() != 0) {
+            listing = new PrintWriter(new OutputStreamWriter(new FileOutputStream(listingFile), "UnicodeLittle"));
+            dictionary.printWordList("", 0, listing);
+            listing.close();
+        }
+    }
+
+    public BuildDictionaryFile() {
+    }
+
+    public void build(String filename, String encoding)
+            throws FileNotFoundException, UnsupportedEncodingException, IOException {
+        FileInputStream file = new FileInputStream(filename);
+        InputStreamReader in;
+        if (encoding.length() == 0)
+            in = new InputStreamReader(file);
+        else
+            in = new InputStreamReader(file, encoding);
+
+        buildColumnMap(in);
+
+        file = new FileInputStream(filename);
+        if (encoding.length() == 0)
+            in = new InputStreamReader(file);
+        else
+            in = new InputStreamReader(file, encoding);
+
+        buildStateTable(in);
+//printTable();
+    }
+
+    public void buildColumnMap(InputStreamReader in) throws IOException {
+System.out.println("Building column map...");
+        UnicodeSet charsInFile = new UnicodeSet();
+        int c = in.read();
+int totalChars = 0;
+        while (c >= 0) {
+++totalChars; if (totalChars > 0 && totalChars % 5000 == 0) System.out.println("Read " + totalChars + " characters...");
+            if (c > ' ')
+                charsInFile.add((char)c);
+            c = in.read();
+        }
+//        Test.debugPrintln(charsInFile.toString());
+
+        StringBuffer tempReverseMap = new StringBuffer();
+        tempReverseMap.append(' ');
+
+        columnMap = new CompactByteArray();
+        int n = charsInFile.getRangeCount();
+        byte p = 1;
+        for (int i=0; i<n; ++i) {
+            char start = (char) charsInFile.getRangeStart(i);
+            char end = (char) charsInFile.getRangeEnd(i);
+            for (char ch = start; ch <= end; ch++) {
+                if (columnMap.elementAt(Character.toLowerCase(ch)) == 0) {
+                    columnMap.setElementAt(Character.toUpperCase(ch), Character.toUpperCase(ch),
+                                        p);
+                    columnMap.setElementAt(Character.toLowerCase(ch), Character.toLowerCase(ch),
+                                        p);
+                    ++p;
+                    tempReverseMap.append(ch);
+                }
+            }
+        }
+//System.out.println("Compacting...");
+        columnMap.compact();
+
+//System.out.println(tempReverseMap.toString());
+        reverseColumnMap = new char[p];
+        tempReverseMap.getChars(0, p, reverseColumnMap, 0);
+
+        System.out.println("total columns = " + p);
+        numCols = p;
+        numColGroups = (numCols >> 5) + 1;
+
+/*
+short[] index = columnMap.getIndexArray();
+System.out.println("Index:");
+for (int i = 0; i < index.length; i++) {
+if (i % 16 == 0) {
+System.out.println();
+System.out.print("    " + Integer.toHexString(i * 128) + ":");
+}
+System.out.print("\t" + Integer.toHexString(index[i]));
+}
+System.out.println();
+byte[] data = columnMap.getStringArray();
+System.out.print("Values:");
+for (int i = 0; i < data.length; i++) {
+if (i % 16 == 0) {
+System.out.println();
+System.out.print("    " + Integer.toHexString(i) + ":");
+}
+if (data[i] == 0)
+System.out.print("\t.");
+else
+System.out.print("\t" + Integer.toString(data[i]));
+}
+System.out.println();
+*/
+    }
+
+    public void buildStateTable(InputStreamReader in) throws IOException {
+        Vector tempTable = new Vector();
+        tempTable.addElement(new int[numCols + 1]);
+        int state = 0;
+
+        int c = in.read();
+        int[] row = null;
+        int charsInWord = 0;
+        while (c >= 0) {
+            charsInWord++;
+            short column = columnMap.elementAt((char)c);
+
+            row = (int[])(tempTable.elementAt(state));
+            if (column != 0) {
+                if (row[column] == 0) {
+                    row[column] = tempTable.size();
+                    ++row[numCols];
+                    state = (tempTable.size());
+                    tempTable.addElement(new int[numCols + 1]);
+                }
+                else
+                    state = row[column];
+            }
+            else if (state != 0) {
+                if (row[0] != -1) {
+                    row[0] = -1;
+                    ++row[numCols];
+                    uniqueWords++;
+                    totalUniqueWordChars += charsInWord;
+                }
+                totalWords++;
+if (totalWords % 5000 == 0) System.out.println("Read " + totalWords + " words, " + tempTable.size() + " rows...");
+                charsInWord = 0;
+                state = 0;
+            }
+            c = in.read();
+        }
+        if (state != 0) {
+            row = (int[])(tempTable.elementAt(state));
+            if (row[0] != -1) {
+                row[0] = -1;
+                uniqueWords++;
+                totalUniqueWordChars += charsInWord;
+            }
+            totalWords++;
+        }
+
+        compress(tempTable);
+
+        table = new short[numCols * tempTable.size()];
+        for (int i = 0; i < tempTable.size(); i++) {
+            row = (int[])tempTable.elementAt(i);
+            for (int j = 0; j < numCols; j++)
+                table[i * numCols + j] = (short)row[j];
+        }
+    }
+
+    private void compress(Vector tempTable) {
+System.out.println("Before compression:");
+System.out.println("  Number of rows = " + tempTable.size());
+System.out.println("  Number of columns = " + numCols);
+System.out.println("  Number of cells = " + tempTable.size() * numCols);
+        deleteDuplicateRows(tempTable);
+System.out.println("After removing duplicate rows:");
+System.out.println("  Number of rows = " + tempTable.size());
+System.out.println("  Number of columns = " + numCols);
+System.out.println("  Number of cells = " + tempTable.size() * numCols);
+        stackRows(tempTable);
+if (tempTable.size() > 32767) throw new IllegalArgumentException("Too many rows in table!");
+System.out.println("After doubling up on rows:");
+System.out.println("  Number of rows = " + tempTable.size());
+System.out.println("  Number of columns = " + numCols);
+System.out.println("  Number of cells = " + tempTable.size() * numCols);
+    }
+
+/*
+experimental...
+    private void deleteDuplicateRows(Vector tempTable) {
+        int[] rowNumMap = new int[tempTable.size()];
+        for (int i = 0; i < rowNumMap.length; i++)
+            rowNumMap[i] = i;
+
+        int nextClass = numCols;
+        int currentClass;
+        int lastClass;
+        boolean split;
+        int[] row1, row2, tempRow;
+        int tempCat;
+
+        do {
+System.out.println("Making a pass (" + nextClass + " classes)...");
+            currentClass = 0;
+            lastClass = nextClass;
+            while (currentClass < nextClass) {
+System.out.println("   currentClass = " + currentClass);
+                split = false;
+                row1 = row2 = null;
+                for (int i = 0; i < tempTable.size(); i++) {
+                    tempRow = (int[])tempTable.elementAt(i);
+                    if (tempRow[numCols] == currentClass) {
+                        if (row1 == null) {
+                            row1 = (int[])tempTable.elementAt(i);
+                        }
+                        else {
+                            row2 = (int[])tempTable.elementAt(i);
+                            for (int j = 0; j < numCols; j++) {
+                                if ((row1[j] == 0) != (row2[j] == 0) ||
+                                            (row1[j] == -1) != (row2[j] == -1)) {
+                                    row2[numCols] = nextClass;
+                                    split = true;
+                                    break;
+                                }
+                                else if (row1[j] != 0 && row2[j] != 0 && row1[j] != -1
+                                                && row2[j] != -1) {
+                                    tempRow = (int[])tempTable.elementAt(row1[j]);
+                                    tempCat = tempRow[numCols];
+                                    tempRow = (int[])tempTable.elementAt(row2[j]);
+                                    if (tempCat != tempRow[numCols]) {
+                                        row2[numCols] = nextClass;
+                                        split = true;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                if (split)
+                    ++nextClass;
+                ++currentClass;
+//System.out.println();
+            }
+        } while (lastClass != nextClass);
+
+        int[] representatives = new int[nextClass];
+        for (int i = 1; i < tempTable.size(); i++) {
+            tempRow = (int[])tempTable.elementAt(i);
+            if (representatives[tempRow[numCols]] == 0)
+                representatives[tempRow[numCols]] = i;
+            else
+                rowNumMap[i] = representatives[tempRow[numCols]];
+        }
+System.out.println("Renumbering...");
+
+        // renumber all remaining rows
+        for (int i = 0; i < rowNumMap.length; i++)
+            if (rowNumMap[i] != i)
+                tempTable.setElementAt(null, i);
+        int newRowNum = 0;
+        for (int i = 0; i < rowNumMap.length; i++)
+            if (tempTable.elementAt(i) != null)
+                rowNumMap[i] = newRowNum++;
+        for (int i = 0; i < rowNumMap.length; i++)
+            if (tempTable.elementAt(i) == null)
+                rowNumMap[i] = rowNumMap[rowNumMap[i]];
+
+        for (int i = tempTable.size() - 1; i >= 0; i--) {
+            tempRow = (int[])tempTable.elementAt(i);
+            if (tempRow == null)
+                tempTable.removeElementAt(i);
+            else {
+                for (int j = 0; j < numCols; j++)
+                    if (tempRow[j] != -1)
+                        tempRow[j] = rowNumMap[j];
+            }
+        }
+//for (int i = 1; i < rowNumMap.length; i++) rowNumMap[i] = i; int newRowNum = rowNumMap.length;
+    }
+*/
+
+    private void deleteDuplicateRows(Vector tempTable) {
+        Vector work = (Vector)(tempTable.clone());
+        boolean didDeleteRow = true;
+
+        Vector tempMapping = new Vector(work.size());
+        int[] mapping = new int[work.size()];
+        for (int i = 0; i < mapping.length; i++) {
+            mapping[i] = i;
+            tempMapping.addElement(new Integer(i));
+        }
+        boolean[] tbd = new boolean[work.size()];
+
+        while (didDeleteRow) {
+System.out.println(" " + work.size() + " rows...");
+int deletedRows = 0;
+            didDeleteRow = false;
+
+            sortTable(work, tempMapping, mapping, 1, work.size());
+            for (int i = 0; i < work.size() - 1; ) {
+System.out.print("Deleting, inspecting row " + i + ", deleted " + deletedRows + " rows...\r");
+                int rowToDelete = ((Integer)(tempMapping.elementAt(i + 1))).intValue();
+                int rowToMapTo = ((Integer)(tempMapping.elementAt(i))).intValue();
+                if (compareRows((int[])work.elementAt(i), (int[])work.elementAt(i + 1),
+                                mapping) == 0) {
+                    tbd[rowToDelete] = true;
+                    tempTable.setElementAt(null, rowToDelete);
+                    while (tbd[mapping[rowToMapTo]])
+                        mapping[rowToMapTo] = mapping[mapping[rowToMapTo]];
+                    mapping[rowToDelete] = mapping[rowToMapTo];
+                    didDeleteRow = true;
+deletedRows++;
+                    work.removeElementAt(i + 1);
+                    tempMapping.removeElementAt(i + 1);
+                }
+                else
+                    i++;
+            }
+            for (int i = 0; i < mapping.length; i++) {
+                if (tbd[i] && tbd[mapping[i]])
+                    mapping[i] = mapping[mapping[i]];
+            }
+        }
+
+        int decrementBy = 0;
+        for (int i = 0; i < mapping.length; i++) {
+            if (tbd[i])
+                decrementBy++;
+            else
+                mapping[i] -= decrementBy;
+        }
+        for (int i = 0; i < mapping.length; i++) {
+            if (tbd[i])
+                mapping[i] = mapping[mapping[i]];
+        }
+        for (int i = tempTable.size() - 1; i >= 0; i--) {
+            if (tbd[i])
+                tempTable.removeElementAt(i);
+            else {
+                int[] row = (int[])tempTable.elementAt(i);
+                for (int j = 0; j < numCols; j++)
+                    row[j] = (row[j] == -1) ? -1 : mapping[row[j]];
+            }
+        }
+    }
+
+    private void sortTable(Vector table, Vector tempMapping, int[] mapping, int start, int end) {
+System.out.print("Sorting (" + start + ", " + end + ")...\r");
+        if (start + 1 >= end)
+            return;
+        else if (start + 10 >= end) {
+            for (int i = start + 1; i < end; i++) {
+                int[] row = (int[])table.elementAt(i);
+                Integer tempMap = (Integer)tempMapping.elementAt(i);
+                int j;
+                for (j = i - 1; j >= start; j--) {
+                    if (compareRows((int[])table.elementAt(j), row, mapping) > 0) {
+                        table.setElementAt((int[])table.elementAt(j), j + 1);
+                        tempMapping.setElementAt((Integer)tempMapping.elementAt(j), j + 1);
+                    }
+                    else {
+                        table.setElementAt(row, j + 1);
+                        tempMapping.setElementAt(tempMap, j + 1);
+                        break;
+                    }
+                }
+                if (j < start) {
+                    table.setElementAt(row, start);
+                    tempMapping.setElementAt(tempMap, start);
+                }
+            }
+        }
+        else {
+            int boundaryPos = (start + end) / 2;
+            int i;
+            boolean allTheSame = true;
+            int firstDifferent = 0;
+
+            do {
+                int[] boundary = (int[])table.elementAt(boundaryPos);
+                i = start;
+                int j = end - 1;
+                int[] row = null;
+                byte compResult;
+                while (i < j) {
+                    row = (int[])table.elementAt(i);
+                    while (i <= j && compareRows(row, boundary, mapping) < 0) {
+                        i++;
+                        row = (int[])table.elementAt(i);
+                    }
+
+                    row = (int[])table.elementAt(j);
+                    compResult = compareRows(row, boundary, mapping);
+                    while (i <= j && (compResult >= 0)) {
+                        if (compResult != 0) {
+                            allTheSame = false;
+                            firstDifferent = j;
+                        }
+                        j--;
+                        row = (int[])table.elementAt(j);
+                        compResult = compareRows(row, boundary, mapping);
+                    }
+                    if (i <= j) {
+                        row = (int[])table.elementAt(j);
+                        table.setElementAt(table.elementAt(i), j);
+                        table.setElementAt(row, i);
+                        Object temp = tempMapping.elementAt(j);
+                        tempMapping.setElementAt(tempMapping.elementAt(i), j);
+                        tempMapping.setElementAt(temp, i);
+                    }
+                }
+                if (i <= start) {
+                    if (allTheSame)
+                        return;
+                    else
+                        boundaryPos = firstDifferent;
+                }
+            } while (i <= start);
+            sortTable(table, tempMapping, mapping, start, i);
+            sortTable(table, tempMapping, mapping, i, end);
+        }
+    }
+
+    private byte compareRows(int[] row1, int[] row2, int[] mapping) {
+        for (int i = 0; i < numCols; i++) {
+            int c1 = (row1[i] == -1) ? -1 : mapping[row1[i]];
+            int c2 = (row2[i] == -1) ? -1 : mapping[row2[i]];
+            if (c1 < c2)
+                return -1;
+            else if (c1 > c2)
+                return 1;
+        }
+        return 0;
+    }
+
+    private int[] buildRowIndex(Vector tempTable) {
+        int[] tempRowIndex = new int[tempTable.size()];
+        rowIndexFlagsIndex = new short[tempTable.size()];
+        Vector tempRowIndexFlags = new Vector();
+        rowIndexShifts = new byte[tempTable.size()];
+
+        // build the row index.  Each entry in the row index starts out referring
+        // to the original row (so it doesn't actually do any mapping), and we set
+        // up the index flags to show which cells in the row are populated
+        for (int i = 0; i < tempTable.size(); i++) {
+            tempRowIndex[i] = i;
+
+            int[] row = (int[])tempTable.elementAt(i);
+            if (row[numCols] == 1 && row[0] == 0) {
+                int j = 0;
+                while (row[j] == 0)
+                    ++j;
+                rowIndexFlagsIndex[i] = (short)(-j);
+            }
+            else {
+                int[] flags = new int[numColGroups];
+                int nextFlag = 1;
+                int colGroup = 0;
+                for (int j = 0; j < numCols; j++) {
+                    if (row[j] != 0)
+                        flags[colGroup] |= nextFlag;
+                    nextFlag <<= 1;
+                    if (nextFlag == 0) {
+                        ++colGroup;
+                        nextFlag = 1;
+                    }
+                }
+                colGroup = 0;
+                int j = 0;
+                while (j < tempRowIndexFlags.size()) {
+                    if (((Integer)tempRowIndexFlags.elementAt(j)).intValue() ==
+                                    flags[colGroup]) {
+                        ++colGroup;
+                        ++j;
+                        if (colGroup >= numColGroups)
+                            break;
+                    }
+                    else if (colGroup != 0)
+                        colGroup = 0;
+                    else
+                        ++j;
+                }
+                rowIndexFlagsIndex[i] = (short)(j - colGroup);
+                while (colGroup < numColGroups) {
+                    tempRowIndexFlags.addElement(new Integer(flags[colGroup]));
+                    ++colGroup;
+                }
+            }
+        }
+        rowIndexFlags = new int[tempRowIndexFlags.size()];
+        for (int i = 0; i < rowIndexFlags.length; i++)
+            rowIndexFlags[i] = ((Integer)tempRowIndexFlags.elementAt(i)).intValue();
+System.out.println("Number of column groups = " + numColGroups);
+System.out.println("Size of rowIndexFlags = " + rowIndexFlags.length);
+
+        return tempRowIndex;
+    }
+
+    private void stackRows(Vector tempTable) {
+/*
+System.out.print("Row:\t");
+for (int i = 0; i < numCols; i++)
+System.out.print(reverseColumnMap[i] + "\t");
+System.out.println();
+for (int i = 0; i < tempTable.size(); i++) {
+System.out.print(Integer.toString(i) + ":\t");
+int[] row = (int[])tempTable.elementAt(i);
+for (int j = 0; j < row.length; j++)
+if (row[j] != 0) System.out.print(Integer.toString(row[j]) + "\t");
+else System.out.print(".\t");
+System.out.println();
+}
+*/
+
+        int[] tempRowIndex = buildRowIndex(tempTable);
+        boolean[] tbd = new boolean[tempTable.size()];
+
+        // now we actually go through and stack rows together
+        for (int i = 0; i < tempTable.size(); i++) {
+            if (tbd[i])
+                continue;
+System.out.print("Stacking, inspecting row " + i + "...\r");
+//System.out.println("Stacking, inspecting row " + i + "...");
+
+            int[] destRow = (int[])tempTable.elementAt(i);
+
+            boolean[] tempFlags = new boolean[numCols];
+            boolean[] filledCells = new boolean[numCols];
+            for (int j = 0; j < numCols; j++)
+                filledCells[j] = destRow[j] != 0;
+
+            for (int j = i + 1; destRow[numCols] < numCols && j < tempTable.size(); j++) {
+                if (tbd[j])
+                    continue;
+
+                int[] srcRow = (int[])tempTable.elementAt(j);
+                if (srcRow[numCols] + destRow[numCols] > numCols)
+                    continue;
+
+                int maxLeftShift = -999;
+                int maxRightShift = 0;
+                for (int k = 0; k < numCols; k++) {
+                    tempFlags[k] = srcRow[k] != 0;
+                    if (tempFlags[k]) {
+                        if (maxLeftShift == -999)
+                            maxLeftShift = -k;
+                        maxRightShift = (numCols - 1) - k;
+                    }
+                }
+
+                int shift;
+                for (shift = maxLeftShift; shift <= maxRightShift; shift++) {
+                    int k;
+                    for (k = 0; k < numCols; k++) {
+                        if (tempFlags[k] && filledCells[k + shift])
+                            break;
+                    }
+                    if (k >= numCols)
+                        break;
+                }
+                if (shift <= maxRightShift) {
+//System.out.println("Packing row " + j + " into row " + i + " with shift = " + shift);
+                    for (int k = 0; k < numCols; k++) {
+                        if (tempFlags[k]) {
+                            filledCells[k + shift] = true;
+                            destRow[k + shift] = srcRow[k];
+                            ++destRow[numCols];
+                        }
+                    }
+                    tbd[j] = true;
+                    tempRowIndex[j] = i;
+                    rowIndexShifts[j] = (byte)shift;
+                }
+            }
+        }
+
+        // finally, we squeeze out all the deleted rows
+        int decrementBy = 0;
+        for (int i = 0; i < tempRowIndex.length; i++) {
+            if (!tbd[i])
+                tempRowIndex[i] -= decrementBy;
+            else
+                ++decrementBy;
+        }
+        rowIndex = new short[tempRowIndex.length];
+        for (int i = tempRowIndex.length - 1; i >= 0; i--) {
+            if (tbd[i]) {
+                rowIndex[i] = (short)(tempRowIndex[tempRowIndex[i]]);
+                tempTable.removeElementAt(i);
+            }
+            else
+                rowIndex[i] = (short)tempRowIndex[i];
+        }
+    }
+
+    private void printTable() {
+        short cell;
+        int populatedCells = 0;
+/*
+        System.out.println("Conceptual table:");
+        System.out.println(" Row:   a   b   c   d   e   f   g   h   i   j   k   l   m   n"
+                + "   o   p   q   r   s   t   u   v   w   x   y   z   '   #");
+
+        boolean[] rowPrintFlags = new boolean[rowIndex.length];
+        printConceptualTable("", 0, rowPrintFlags);
+*/
+
+        System.out.println();
+        System.out.println("Conceptual table:");
+        System.out.print(" Row:");
+        for (int i = 0; i < reverseColumnMap.length; i++) {
+                System.out.print("   " + reverseColumnMap[i]);
+        }
+        for (int i = 0; i < rowIndex.length; i++) {
+            System.out.println();
+            printNumber(i, 4);
+            System.out.print(":");
+            for (int j = 0; j < numCols; j++)
+                printNumber(at(i, j), 4);
+        }
+        System.out.println('\n');
+
+        System.out.println();
+        System.out.println("Internally stored table:");
+        System.out.print(" Row:");
+        for (int i = 0; i < reverseColumnMap.length; i++) {
+                System.out.print("   " + reverseColumnMap[i]);
+        }
+        for (int i = 0; i < table.length; i++) {
+            if (i % numCols == 0) {
+                System.out.println();
+                printNumber(i / numCols, 4);
+                System.out.print(":");
+            }
+            cell = table[i];
+            if (cell != 0)
+                populatedCells++;
+            printNumber(cell, 4);
+        }
+        System.out.println('\n');
+
+System.out.println("Row index:");
+for (int i = 0; i < rowIndex.length; i++) {
+    System.out.print("   " + i + " -> " + rowIndex[i]);
+    if (rowIndexFlagsIndex[i] < 0)
+        System.out.print(", flags = " + Integer.toBinaryString((1 << (-rowIndexFlagsIndex[i]))) + " (" + rowIndexFlagsIndex[i]);
+    else
+        System.out.print(", flags = " + Integer.toBinaryString(rowIndexFlags[rowIndexFlagsIndex[i]]) + " (" + rowIndexFlagsIndex[i]);
+    System.out.println("), shift = " + rowIndexShifts[i]);
+}
+/*
+        int theoreticalMinRows = populatedCells / numCols;
+        if (populatedCells % numCols != 0)
+            theoreticalMinRows++;
+        int oneCellRows = 0;
+        for (int i = 0; i < rowIndexFlags.length; i++) {
+            double temp = Math.log(rowIndexFlags[i]) / Math.log(2);
+            if (temp == (int)temp)
+                oneCellRows++;
+        }
+
+        System.out.println('\n');
+        System.out.println("Total words in input = " + totalWords);
+        System.out.println("Total unique words = " + uniqueWords + ", comprising " +
+                        totalUniqueWordChars + " characters\n");
+        System.out.println("Number of populated cells = " + populatedCells);
+        System.out.println("Total number of cells = " + (table.length));
+        System.out.println("Residency = " + ((float)populatedCells / table.length * 100) + '%');
+        System.out.println("Ratio of populated cells to unique-word characters = " +
+                        ((float)populatedCells / totalUniqueWordChars * 100) + '%');
+        System.out.println("Ratio of total cells to unique-word characters = " +
+                        ((float)table.length / totalUniqueWordChars * 100) + '%');
+        System.out.println("Number of rows = " + (table.length / numCols));
+        System.out.println("Theoretical minimum number of rows = " + theoreticalMinRows);
+        System.out.println("Ratio of number of rows to theoretical minimum = " +
+                        ((float)(table.length / numCols) / theoreticalMinRows * 100) + '%');
+        System.out.println("Number of conceptual rows = " + rowIndex.length);
+        System.out.println("Conceptual rows with only one populated cell = " + oneCellRows);
+        System.out.println("Ratio of one-cell rows to total conceptual rows = " + (((float)oneCellRows)
+                        / rowIndex.length * 100) + '%');
+        System.out.println("Average number of populated cells in multi-cell rows = " +
+                        ((float)(populatedCells - oneCellRows) / (rowIndex.length - oneCellRows)));
+
+        int storageUsed = table.length * 2 + rowIndex.length * 2
+                        + rowIndexFlags.length * 4 + rowIndexShifts.length;
+        System.out.println("Total number of bytes in table (including indexes) = " +
+                        storageUsed);
+        System.out.println("Bytes of overhead per unique-word character = " + ((double)(storageUsed
+                        - (totalUniqueWordChars * 2)) / totalUniqueWordChars));
+*/
+    }
+
+    private void printConceptualTable(String initialString, int state, boolean[] flags) {
+        if (initialString.length() == 0)
+            System.out.println("root:");
+        else
+            System.out.println(initialString + ':');
+
+        if (!flags[state]) {
+            flags[state] = true;
+            printNumber(state, 4);
+            System.out.print(":");
+            for (int i = 0; i < numCols; i++)
+                printNumber(at(state, i), 4);
+            System.out.println();
+        }
+
+        int nextState;
+        for (int i = 0; i < numCols; i++) {
+            nextState = at(state, i);
+            if (nextState > 0 && !flags[nextState]) {
+                printNumber(nextState, 4);
+                System.out.print(":");
+                for (int j = 0; j < numCols; j++)
+                    printNumber(at(nextState, j), 4);
+                System.out.println();
+            }
+        }
+        for (int i = 0; i < numCols; i++) {
+            nextState = at(state, i);
+            if (nextState > 0 && !flags[nextState]) {
+                char nextChar;
+                if (nextState == 27)
+                    nextChar = ' ';
+                else if (nextState == 26)
+                    nextChar = '\'';
+                else
+                    nextChar = (char)(i + 'a');
+                flags[nextState] = true;
+                printConceptualTable(initialString + nextChar, nextState, flags);
+            }
+        }
+    }
+
+    private void printWordList(String partialWord, int state, PrintWriter out)
+            throws IOException {
+        if (state == -1) {
+            System.out.println(partialWord);
+            if (out != null)
+                out.println(partialWord);
+        }
+        else {
+            for (int i = 0; i < numCols; i++) {
+                if (at(state, i) != 0)
+                    printWordList(partialWord + reverseColumnMap[i], at(state, i), out);
+            }
+        }
+    }
+
+    private void writeDictionaryFile(DataOutputStream out) throws IOException {
+        out.writeInt(0);    // version number
+
+        char[] columnMapIndexes = columnMap.getIndexArray();
+        out.writeInt(columnMapIndexes.length);
+        for (int i = 0; i < columnMapIndexes.length; i++)
+            out.writeShort((short)columnMapIndexes[i]);
+        byte[] columnMapValues = columnMap.getValueArray();
+        out.writeInt(columnMapValues.length);
+        for (int i = 0; i < columnMapValues.length; i++)
+            out.writeByte((byte)columnMapValues[i]);
+
+        out.writeInt(numCols);
+        out.writeInt(numColGroups);
+
+        out.writeInt(rowIndex.length);
+        for (int i = 0; i < rowIndex.length; i++)
+            out.writeShort(rowIndex[i]);
+
+        out.writeInt(rowIndexFlagsIndex.length);
+        for (int i = 0; i < rowIndexFlagsIndex.length; i++)
+            out.writeShort(rowIndexFlagsIndex[i]);
+        out.writeInt(rowIndexFlags.length);
+        for (int i = 0; i < rowIndexFlags.length; i++)
+            out.writeInt(rowIndexFlags[i]);
+
+        out.writeInt(rowIndexShifts.length);
+        for (int i = 0; i < rowIndexShifts.length; i++)
+            out.writeByte(rowIndexShifts[i]);
+
+        out.writeInt(table.length);
+        for (int i = 0; i < table.length; i++)
+            out.writeShort(table[i]);
+
+        out.close();
+    }
+
+    private void printNumber(int x, int width) {
+        String s = String.valueOf(x);
+        if (width > s.length())
+            System.out.print(spaces.substring(0, width - s.length()));
+        if (x != 0)
+            System.out.print(s);
+        else
+            System.out.print('.');
+    }
+
+    public final short at(int row, char ch) {
+        int col = columnMap.elementAt(ch);
+        return at(row, col);
+    }
+
+    public final short at(int row, int col) {
+        if (cellIsPopulated(row, col))
+            return internalAt(rowIndex[row], col + rowIndexShifts[row]);
+        else
+            return 0;
+    }
+
+    private final boolean cellIsPopulated(int row, int col) {
+        if (rowIndexFlagsIndex[row] < 0)
+            return col == -rowIndexFlagsIndex[row];
+        else {
+            int flags = rowIndexFlags[rowIndexFlagsIndex[row] + (col >> 5)];
+            return (flags & (1 << (col & 0x1f))) != 0;
+        }
+    }
+
+    private final short internalAt(int row, int col) {
+        return table[row * numCols + col];
+    }
+
+    private CompactByteArray columnMap = null;
+    private char[] reverseColumnMap = null;
+    private int numCols;
+    private int numColGroups;
+    private short[] table = null;
+    private short[] rowIndex = null;
+    private int[] rowIndexFlags = null;
+    private short[] rowIndexFlagsIndex = null;
+    private byte[] rowIndexShifts = null;
+
+    private int totalWords = 0;
+    private int uniqueWords = 0;
+    private int totalUniqueWordChars = 0;
+
+    private static final String spaces = "      ";
+}
+
diff --git a/src/com/ibm/tools/rbbi/WriteTablesToFiles.java b/src/com/ibm/tools/rbbi/WriteTablesToFiles.java
new file mode 100755
index 0000000..8028a49
--- /dev/null
+++ b/src/com/ibm/tools/rbbi/WriteTablesToFiles.java
@@ -0,0 +1,53 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/rbbi/Attic/WriteTablesToFiles.java,v $ 
+ * $Date: 2000/09/22 18:57:44 $ 
+ * $Revision: 1.1 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.rbbi;
+
+import java.io.*;
+import com.ibm.text.*;
+
+public class WriteTablesToFiles {
+    public static void main(String[] args) throws IOException {
+        writeBatch(true);
+        writeBatch(false);
+    }
+    
+    public static void writeBatch(boolean littleEndian) throws IOException {
+        BreakIterator bi;
+        String suffix = (littleEndian ? "LE" : "BE");
+        
+        bi = BreakIterator.getCharacterInstance();
+        ((RuleBasedBreakIterator)bi).writeTablesToFile(new FileOutputStream(
+                    "char" + suffix + ".brk"), littleEndian);
+        
+        bi = BreakIterator.getWordInstance();
+        ((RuleBasedBreakIterator)bi).writeTablesToFile(new FileOutputStream(
+                    "word" + suffix + ".brk"), littleEndian);
+        
+        bi = BreakIterator.getLineInstance();
+        ((RuleBasedBreakIterator)bi).writeTablesToFile(new FileOutputStream(
+                    "line" + suffix + ".brk"), littleEndian);
+        
+        bi = BreakIterator.getSentenceInstance();
+        ((RuleBasedBreakIterator)bi).writeTablesToFile(new FileOutputStream(
+                    "sent" + suffix + ".brk"), littleEndian);
+
+        java.util.Locale thai = new java.util.Locale("th", "", "");
+        bi = BreakIterator.getWordInstance(thai);
+        ((RuleBasedBreakIterator)bi).writeTablesToFile(new FileOutputStream(
+                    "word_th" + suffix + ".brk"), littleEndian);
+
+        bi = BreakIterator.getLineInstance(thai);
+        ((RuleBasedBreakIterator)bi).writeTablesToFile(new FileOutputStream(
+                    "line_th" + suffix + ".brk"), littleEndian);
+    }
+}
diff --git a/src/com/ibm/tools/translit/Trans.java b/src/com/ibm/tools/translit/Trans.java
new file mode 100755
index 0000000..34548d3
--- /dev/null
+++ b/src/com/ibm/tools/translit/Trans.java
@@ -0,0 +1,94 @@
+package com.ibm.tools.translit;
+import com.ibm.text.*;
+import java.io.*;
+
+/**
+ * A command-line interface to the ICU4J transliterators.
+ * @author Alan Liu
+ */
+public class Trans {
+
+    public static void main(String[] args) throws Exception {
+        boolean isHTML = false;
+        int pos = 0;
+        if (args.length < 3) { usage(); }
+        if (args[pos].equals("-html")) {
+            ++pos;
+            isHTML = true;
+        }
+        if ((args.length-pos) != 3) { usage(); }
+        String transName = args[pos++];
+        String inName = args[pos++];
+        String outName = args[pos++];
+        Transliterator trans = Transliterator.getInstance(transName);
+        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(inName), "UTF8"));
+        PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outName), "UTF8"));
+        trans(trans, in, out, isHTML);
+        out.close();
+    }
+
+    static void trans(Transliterator trans,
+                      BufferedReader in, PrintWriter out, boolean isHTML) throws IOException {
+        boolean inTag = false; // If true, we are within a <tag>
+        for (;;) {
+            String line = in.readLine();
+            if (line == null) {
+                break;
+            }
+            if (isHTML) {
+                // Pass tags between < and > unchanged
+                StringBuffer buf = new StringBuffer();
+                int right = -1;
+                if (inTag) {
+                    right = line.indexOf('>');
+                    if (right < 0) {
+                        right = line.length()-1;
+                    }
+                    buf.append(line.substring(0, right+1));
+                    if (DEBUG) System.out.println("*S:" + line.substring(0, right+1));
+                    inTag = false;
+                }
+                for (;;) {
+                    int left = line.indexOf('<', right+1);
+                    if (left < 0) {
+                        if (right < line.length()-1) {
+                            buf.append(trans.transliterate(line.substring(right+1)));
+                            if (DEBUG) System.out.println("T:" + line.substring(right+1));
+                        }
+                        break;
+                    }
+                    // Append transliterated segment right+1..left-1
+                    buf.append(trans.transliterate(line.substring(right+1, left)));
+                    if (DEBUG) System.out.println("T:" + line.substring(right+1, left));
+                    right = line.indexOf('>', left+1);
+                    if (right < 0) {
+                        inTag = true;
+                        buf.append(line.substring(left));
+                        if (DEBUG) System.out.println("S:" + line.substring(left));
+                        break;
+                    }
+                    buf.append(line.substring(left, right+1));
+                    if (DEBUG) System.out.println("S:" + line.substring(left, right+1));
+                }
+                line = buf.toString();
+            } else {
+                line = trans.transliterate(line);
+            }
+            out.println(line);
+        }
+    }
+
+    static final boolean DEBUG = false;
+
+    /**
+     * Emit usage and die.
+     */
+    static void usage() {
+        System.out.println("Usage: java com.ibm.tools.translit.Trans [-html] <trans> <infile> <outfile>");
+        System.out.println("<trans>   Name of transliterator");
+        System.out.println("<infile>  Name of input file");
+        System.out.println("<outfile> Name of output file");
+        System.out.println("-html     Only transliterate text outside of <tags>");
+        System.exit(0);
+    }
+}
diff --git a/src/com/ibm/tools/translit/dumpICUrules.bat b/src/com/ibm/tools/translit/dumpICUrules.bat
new file mode 100755
index 0000000..41a5e48
--- /dev/null
+++ b/src/com/ibm/tools/translit/dumpICUrules.bat
@@ -0,0 +1,327 @@
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+goto endofperl
+@rem ';
+#!perl
+#line 14
+
+# This perl script creates ICU transliterator data files, that live
+# in icu/data, from ICU4J UTF8 transliterator data files, in
+# icu4j/src/com/ibm/text/resources.
+#
+# The transformation that is done is very minimal.  The script assumes
+# that the input files use only # comments
+# and that they follow a rigid format.
+#
+# The output files are named according to ICU conventions (see NAME_MAP
+# below) and created in the current directory.  They should be manually
+# checked and then copied into the icu/data directory.  An ICU build must
+# then be initiated, and the standard suite of ICU transliterator tests
+# should be run after that.
+#
+# Alan Liu 5/19/00 2/27/01
+
+if (scalar @ARGV != 1) {
+    usage();
+}
+$DIR = shift;
+if (! -d $DIR) {
+    usage();
+}
+
+sub usage {
+    my $me = $0;
+    $me =~ s|.+[/\\]||;
+    print "Usage: $me <dir>\n";
+    print " where <dir> contains the Transliterator_*.utf8.txt\n";
+    print " files.\n";
+    print "e.g., $me F:/icu4j/src/com/ibm/text/resources\n";
+    die;
+}
+
+$JAVA_ONLY = '-';
+
+# Mapping from Java file names to ICU file names
+%NAME_MAP = (
+             "Fullwidth_Halfwidth" =>        "fullhalf",
+             "Hiragana_Katakana" =>          "kana",
+             "KeyboardEscape_Latin1" =>      "kbdescl1",
+             "Latin_Arabic" =>               "larabic",
+             "Latin_Cyrillic" =>             "lcyril",
+             "Latin_Devanagari" =>           "ldevan",
+             "Latin_Greek" =>                "lgreek",
+             "Latin_Hebrew" =>               "lhebrew",
+             "Latin_Jamo" =>                 "ljamo",
+             "Latin_Kana" =>                 "lkana",
+             "StraightQuotes_CurlyQuotes" => "quotes",
+             "UnicodeName_UnicodeChar" =>    "ucname",
+             
+             # An ICU name of "" means the ICU name == the ID
+             "Bengali_InterIndic" =>         "",
+             "Devanagari_InterIndic" =>      "",
+             "Gujarati_InterIndic" =>        "",
+             "Gurmukhi_InterIndic" =>        "",
+             "Kannada_InterIndic" =>         "",
+             "Malayalam_InterIndic" =>       "",
+             "Oriya_InterIndic" =>           "",
+             "Tamil_InterIndic" =>           "",
+             "Telugu_InterIndic" =>          "",
+             "InterIndic_Bengali" =>         "",
+             "InterIndic_Devanagari" =>      "",
+             "InterIndic_Gujarati" =>        "",
+             "InterIndic_Gurmukhi" =>        "",
+             "InterIndic_Kannada" =>         "",
+             "InterIndic_Malayalam" =>       "",
+             "InterIndic_Oriya" =>           "",
+             "InterIndic_Tamil" =>           "",
+             "InterIndic_Telugu" =>          "",
+             
+             # These files are large, so ICU doesn't want them
+             "Han_Pinyin" => $JAVA_ONLY,
+             "Kanji_English" => $JAVA_ONLY,
+             "Kanji_OnRomaji" => $JAVA_ONLY,
+             );
+
+# Header blocks of text written at start of ICU output files
+$HEADER1 = <<END;
+//--------------------------------------------------------------------
+// Copyright (c) 1999-2001, International Business Machines
+// Corporation and others.  All Rights Reserved.
+//--------------------------------------------------------------------
+// THIS IS A MACHINE-GENERATED FILE
+END
+$HEADER2 = <<END;
+//--------------------------------------------------------------------
+END
+
+$TOOL = $0;
+
+# Iterate over all Java RBT rule files
+foreach (<$DIR/Transliterator_*.utf8.txt>) {
+    next if (/~$/);
+    my ($out, $id) = convertFileName($_);
+    if ($out) {
+        if ($out eq $JAVA_ONLY) {
+            print STDERR "$id: Java only\n";
+            next;
+        }
+        file($id, $_, $out);
+    }
+}
+
+convertIndex();
+
+######################################################################
+# Convert a Java file name to C
+# Param: Java file name of the form m|Transliterator_(.+)\.utf8\.txt$|
+# Return: A C file name (e.g., ldevan.txt) or the empty string,
+#  if there is no mapping, or $JAVA_ONLY if the given file isn't
+#  intended to be incorporated into C.
+sub convertFileName {
+    local $_ = shift;
+    my $id;
+    if (m|Transliterator_(.+)\.utf8\.txt$|) {
+        $id = $1;
+    } else { die "Can't parse Java file name $_"; }
+    if (!exists $NAME_MAP{$id}) {
+        print STDERR "ERROR: $id not in map; please update $0\n";
+        return '';
+    }
+    my $out = $NAME_MAP{$id};
+    if ($out eq '') {
+        $out = $id;
+    }
+    return ($out, $id);
+}
+
+######################################################################
+# Convert the index file from Java to C format
+sub convertIndex {
+    $JAVA_INDEX = "Transliterator_index.txt";
+    $C_INDEX = "translit_index.txt";
+    open(JAVA_INDEX, "$DIR/$JAVA_INDEX") or die;
+    open(C_INDEX, ">$C_INDEX") or die;
+    
+    header(\*C_INDEX, $JAVA_INDEX);
+    
+    print C_INDEX <<END;
+//--------------------------------------------------------------------
+// N.B.: This file has been generated mechanically from the
+// corresponding ICU4J file, which is the master file that receives
+// primary updates.  The colon-delimited fields have been split into
+// separate strings.  For 'file' and 'internal' lines, the encoding
+// field has been deleted, since the encoding is processed at build
+// time in ICU4C.  Certain large rule sets not intended for general
+// use have been commented out with the notation "Java only".
+//--------------------------------------------------------------------
+
+translit_index {
+  RuleBasedTransliteratorIDs {
+END
+                
+    while (<JAVA_INDEX>) {
+        # Comments; change # to //
+        if (s|^(\s*)\#|$1//|) {
+            print C_INDEX;
+            next;
+        }
+        # Blank lines
+        if (!/\S/) {
+            print C_INDEX;
+            next;
+        }
+        # Content lines
+        chomp;
+        my $prefix = '';
+        my @a = split(':', $_);
+        if ($a[1] eq 'file' || $a[1] eq 'internal') {
+            # Convert the file name
+            my $id;
+            ($a[2], $id) = convertFileName($a[2]);
+            if ($a[2] eq $JAVA_ONLY) {
+                $prefix = '// Java only: ';
+            }
+            # Delete the encoding field
+            splice(@a, 3, 1);
+        } elsif ($a[1] eq 'alias') {
+            # Pad out with extra blank fields to make the
+            # 2-d array square
+            push @a, "";
+        } else {
+            die "Can't parse $_";
+        }
+        print C_INDEX
+            $prefix, "{ ",
+            join(", ", map("\"$_\"", @a)),
+            " },\n";
+    }
+
+    print C_INDEX <<END;
+  }
+}
+END
+
+    close(C_INDEX);
+    close(JAVA_INDEX);
+    print STDERR "$JAVA_INDEX -> $C_INDEX\n";
+}
+
+######################################################################
+# Output a header
+# Param: Filehandle
+sub header {
+    my $out = shift;
+    my $in = shift;
+    print $out $HEADER1;
+    print $out "// Tool: $TOOL\n// Source: $in\n";
+    print $out "// Date: ", scalar localtime, "\n";
+    print $out $HEADER2;
+    print $out "\n";
+}
+
+######################################################################
+# Process one file
+# Param: ID, e.g. Fullwidth-Halfwidth
+# Param: Java input file name, e.g.
+#  f:/icu4j/src/com/ibm/text/resources/Transliterator_Fullwidth_Halfwidth.utf8.txt
+# Param: ICU output file name, e.g. fullhalf
+sub file {
+    my $id = shift;
+    my $IN = shift;
+    my $out = shift;
+
+    my $OUT = "$out.txt";
+
+    # Show input size. Show output size later -- useful for quick sanity check.
+    print "$id (", -s $IN, ") -> $OUT (";
+
+    # Write output file header
+    open(OUT, ">$OUT") or die;
+    binmode OUT; # Must do this so we can write our UTF8 marker
+    
+    # Write UTF8 marker
+    print OUT pack("C3", 0xEF, 0xBB, 0xBF);
+    print OUT " // -*- Coding: utf-8; -*-\n";
+
+    header(\*OUT, $IN);
+    print OUT "// $id\n";
+    print OUT "\n";
+    print OUT "$out {\n";
+    print OUT "  Rule {\n";
+
+    open(IN, $IN) or die;
+    binmode IN; # IN is a UTF8 file
+
+    # Process each line by changing # comments to // comments
+    # and taking other text and enclosing it in double quotes
+    while (<IN>) {
+        my $raw = $_;
+        
+        # Clean the eol junk up
+        s/[\x0D\x0A]+$//;
+
+        # Transform escaped characters
+        hideEscapes();
+
+        if (/^(\s*)(\#.*)$/) {
+            # Comment-only line
+            my ($white, $cmt) = ($1, $2);
+            $cmt =~ s|\#|//|;
+            $_ = $white . $cmt;
+
+        } elsif (/^(\s*)(\S.*?)(\s*)(\#.*)?$/) {
+            # Rule line with optional comment
+            my ($white1, $rule, $white2, $cmt) = ($1, $2, $3, $4);
+            $cmt =~ s|\#|//| if ($cmt);
+            $_ = $white1 . '"' . $rule . '"' . $white2 . $cmt;
+
+        } elsif (!/\S/) {
+            # Blank line -- leave as-is
+
+        } else {
+            # Unparseable line
+            print STDERR "Error: Can't parse line: $raw";
+        }
+        
+        # Restore escaped characters
+        restoreEscapes();
+
+        print OUT $_, "\n";
+    }
+
+    # Finish up
+    close(IN);
+    print OUT "  }\n";
+    print OUT "}\n";
+    close(OUT);
+
+    # Write output file size for sanity check
+    print -s $OUT, ")\n";
+}
+
+######################################################################
+sub hideEscapes {
+    # Transform escaped characters
+    s|\\u([a-zA-Z0-9]{4})|<<u$1>>|g; # Transform Unicode escapes
+    s|\\\"|<<dq>>|; # Transform backslash double quote
+    s|\\(.)|<<q$1>>|; # Transform backslash escapes
+}
+
+######################################################################
+sub restoreEscapes {
+    # Restore escaped characters
+    s|<<dq>>|\\\"|g;
+    s|<<q(.)>>|\\$1|g;
+    s|<<u0000>>|\\\\u0000|g; # Double escape U+0000
+    s|<<u(....)>>|\\u$1|g;
+}
+
+__END__
+:endofperl
diff --git a/src/com/ibm/tools/translit/indic.bat b/src/com/ibm/tools/translit/indic.bat
new file mode 100755
index 0000000..10223c3
--- /dev/null
+++ b/src/com/ibm/tools/translit/indic.bat
@@ -0,0 +1,17 @@
+@echo off
+REM Copyright (C) 2000, International Business Machines
+REM Corporation and others.  All Rights Reserved.
+
+REM This script is a Windows launcher for the indic.pl script.  For this
+REM to work, the perl executable must be on the path.  We recommend
+REM the ActiveState build; see http://www.activestate.com.  See the
+REM tz.pl script itself for more documentation.
+
+if "%OS%" == "Windows_NT" goto WinNT
+perl -w -x indic.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto end
+:WinNT
+perl -w -x indic.pl %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto end
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+:end
diff --git a/src/com/ibm/tools/translit/indic.pl b/src/com/ibm/tools/translit/indic.pl
new file mode 100755
index 0000000..e59c47f
--- /dev/null
+++ b/src/com/ibm/tools/translit/indic.pl
@@ -0,0 +1,655 @@
+#!perl
+
+# Usage - $0 <remap file>
+#  e.g. - indic indic.txt
+# The input file should be a subset of the Unicode data file containing
+# the blocks of interest.
+#
+# The remap file should have lines of the form
+# "\u0D01>\u0D02;"
+# including the quotes.  These will be interpreted as saying that the
+# undefined code point U+D01 (derived via mapping from InterIndic)
+# can be remapped to U+D02.
+# 
+# The purpose of this script is to process the Indic script data into
+# a form usable by the IndicTransliterator, that is, the Indic-Indic
+# transliterator.  The transliterator needs two things: A mapping of
+# the code points in common, and a list of the exceptions.
+
+# Assume we are located in icu4j/src/com/ibm/tools/translit/.
+# We want the Unicode DB in icu4j/src/data/unicode/.
+$UNICODE_DB = "../../../../data/unicode/UnicodeData.txt";
+$EXCEPTIONS_FILE = shift;
+
+# Assume we are located in icu4j/src/com/ibm/tools/translit/.
+# We want to output files to icu4j/src/com/ibm/text/resources/.
+# Output directory
+$OUTDIR = "../../text/resources";
+
+# The template file should contain java code that can be used
+# to generate RuleBasedTransliterator resource files.  The template
+# should contain the following embedded symbols, which this script
+# will replace:
+# $TOOL - name of generating tool
+# $DATE - date of generation
+# $SCRIPTFROM - name of source script
+# $SCRIPTTO - name of target script
+# $RULES - rules
+$RBT_TEMPLATE = 'rbtTemplate.txt';
+
+# Name of this tool in generated RBT files
+$RBT_GEN_TOOL = 'icu4j/src/com/ibm/tools/translit/indic.pl';
+
+$DUMP = 0; # If 1, dump out internal data
+
+$DO_HEURISTIC_REMAP = 0; # If 1, do automatic heuristic remapping
+$DO_DECOMP_REMAP = 0; # If 1, do decomp remapping
+
+open(UNICODE_DB);
+while (<UNICODE_DB>) {
+    next if (m|^0[0-8]|); # Skip up to Devanagari block (0900)
+    last if (m|^0D[8-F]|i); # Bail out after Malayam block (0D00)
+    # 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+    my @data = split(/;/);
+    my $fullCode = hex($data[0]); # e.g., 0x093F
+    my $code = $fullCode & 0x7F; # e.g., 0x3F
+    my ($script, $name) = ($data[1] =~ /(\w+)\s+(.+)/);
+    die "Can't parse $_" unless ($name);
+    # e.g., $code/$script/$name = 3F/MALAYALAM/VOWEL SIGN I
+
+    # Titlecase the script
+    $script = ucfirst(lc($script));
+
+    # Fix a couple inconsistencies in the 3.0 data
+    # REVISIT: Is this okay to do?
+    if ($DO_HEURISTIC_REMAP) {
+        if ($script eq 'Gujarati' && $code >= 5 && $code <= 0x14) {
+            $name =~ s/^VOWEL/LETTER/;
+        }
+    }
+
+    # Keep track of all script names we encounter.  We also note the
+    # base of the block.
+    my $base = $fullCode & ~0x7F; # e.g., 0x900;
+    if (exists $SCRIPT_TO_BASE{$script}) {
+        die "Script base mismatch for $script: $base vs. $SCRIPT_TO_BASE{$script}"
+            if ($SCRIPT_TO_BASE{$script} ne $base);
+    } else {
+        $SCRIPT_TO_BASE{$script} = $base;
+    }
+
+    # Build up a mapping by name.  For each name, keep a hash keyed by
+    # code point.  For each code point, keep an array of script names.
+    # Also keep a total use count for each name.
+    push @{$NAME_CODE_TO_SCRIPTS{$name}{$code}}, $script;
+    ++$NAME_CODE_TO_SCRIPTS{$name}{count};
+
+    # Build a map that looks like this:
+    # $SCRIPT_NAME_TO_CODE{<script>}{<name>} = <code>
+    # or undef if there is no mapping.
+    $SCRIPT_NAME_TO_CODE{$script}{$name} = $code;
+
+    # Build a map that looks like this:
+    $SCRIPT_CODE_TO_NAME{$script}{$code} = $name;
+
+    # And a map from the fullCode point to the name
+    $FULLCODE_TO_NAME{$fullCode} = $name;
+
+    # Map code (0..7F) to name.  This is usually a 1-1 mapping, but
+    # is 1-n in a few cases.
+    if (exists $CODE_TO_NAME{$code}) {
+        if ($name ne $CODE_TO_NAME{$code}) {
+            # For multiple names on a code offset, use the format
+            # (a/b), (a/b/c), etc.
+            local $_ = $CODE_TO_NAME{$code};
+            if (m|^\(|) {
+                if (!m|[\(\)/]$name[\(\)/]|) {
+                    s|\)$|/$name\)|;
+                }
+            } else {
+                $_ = "($_/$name)";
+            }
+            $CODE_TO_NAME{$code} = $_;
+        }
+    } else {
+        $CODE_TO_NAME{$code} = $name;
+    }
+}
+close(UNICODE_DB);
+
+# Read and parse the manual remapping file.  This contains lines
+# of the form:
+
+# |"\u0956>\u0948;"  // AI Length Mark -> Devanagari Vowel Sign AI 
+
+# The left hand side contains a non-existent full code value.  It
+# should be a single value.  The right hand side contains one or more
+# real full code values.  The idea is that when a mapping from another
+# script ends up at the non-existent code point on the left, the
+# sequence on the right should be substituted.  In this example,
+# Devanagari has no AI Length Mark.  So, if transliterating from
+# Oriya, then the character 0B56 (Oriya AI Length Mark) will remap to
+# the non-existent 0956, and that remaps to 0948, our chosen
+# Devanagari equivalent.  For our purposes, the left hand side should
+# be taken to mean its equivalent point in the InterIndic range.  In
+# this example, what it really says is E056>0948 in the
+# InterIndic-Devanagari transliterator.
+
+if ($EXCEPTIONS_FILE) {
+    open(EXCEPTIONS_FILE) or die;
+    while (<EXCEPTIONS_FILE>) {
+        if (m|^\s*\"([^\"]*?)\"|) {
+            my $line = $_;
+            $_ = $1;
+            if (/^(.*)>(.*);$/) {
+                my ($rawFrom, $rawTo) = ($1, $2);
+                my @from = parseUnicodeEscape($rawFrom);
+                my @to = parseUnicodeEscape($rawTo);
+                my $from = hexArray(@from);
+                # Some entries look like this:
+                # |"\u0955>\u0955;"
+                # these do nothing; ignore them.
+                if (intArraysEqual(\@from, \@to)) {
+                    #print STDERR "Ignoring NOOP remap of $from\n";
+                } elsif (exists $EXCEPTIONS{$from}) {
+                    print STDERR "ERROR in $EXCEPTIONS_FILE - Duplicate remap entries for $from\n";
+                } elsif (scalar @from > 1) {
+                    print STDERR "ERROR in $EXCEPTIONS_FILE - Ignoring multichar remap: ", hexArray(@from), "->", hexArray(@to), "\n";                    
+                } else {
+                    # Check this for validity.  Full code on the left
+                    # should NOT exist.  Full code seq on the right should.
+                    if (exists $FULLCODE_TO_NAME{$from[0]}) {
+                        print STDERR "ERROR in $EXCEPTIONS_FILE - Invalid remap; left side defined: ", hexArray(@from), "->", hexArray(@to), "\n";
+                    } elsif (grep(! exists $FULLCODE_TO_NAME{$_}, @to)) {
+                        print STDERR "ERROR in $EXCEPTIONS_FILE - Invalid remap; right side undefined: ", hexArray(@from), "->", hexArray(@to), "\n";
+                    } else {
+                        $EXCEPTIONS{$from[0]} = \@to;
+                    }
+                }
+            } else { die "ERROR in $EXCEPTIONS_FILE - Can't parse \"$_\" in line $line"; }
+        }
+    }
+    close(EXCEPTIONS_FILE);
+    print STDERR "$EXCEPTIONS_FILE: Loaded ", scalar keys %EXCEPTIONS, " remappings\n";
+}
+
+if ($DO_DECOMP_REMAP) {
+    # Read the NamesList.txt file.  This contains decomposition data.
+    # Gather these into %DECOMP, which maps a name to n1.n2..., where n1
+    # etc. are decomposed names.  E.g. $DECOMP{'LETTER RRA'} -> 'LETTER
+    # RA.SIGN NUKTA'.  There may be different mappings in different script
+    # blocks (LETTER RRA is mapped differently in Devanagari and Bengali),
+    # in which case the name goes into %DECOMP_MISMATCH, and is removed
+    # from %DECOMP.
+    $NAMES = "NamesList.txt";
+    open(NAMES);
+    while (<NAMES>) {
+        # Skip to start of DEVANAGARI block
+        last if (/^\@\@\s+0900/);
+    }
+    while (<NAMES>) {
+        # Continue until start of SINHALA block
+        last if (/^\@\@\s+0D80/);
+        if (/^([0-9A-Z]{4})/i) {
+            $code = $1;
+        } elsif (/^\s+:\s*(.+)/) {
+            # We've found a mapping of the form:
+            # 0929    DEVANAGARI LETTER NNNA
+            #     * for transcribing Dravidian alveolar n
+            #     : 0928 093C
+            my $from = $FULLCODE_TO_NAME{hex($code)};
+            my @to = map($FULLCODE_TO_NAME{hex($_)}, split(/\s+/, $1));
+            if (exists $DECOMP{$from}) {
+                my $aref = $DECOMP{$from};
+                if (join(".", @$aref) ne join(".", @to)) {
+                    print STDERR "ERROR: Decomp mismatch for $from\n";
+                    print STDERR "     : $from = ", join(".", @$aref), "\n";
+                    print STDERR "     : $from = ", join(".", @to), "\n";
+                    $DECOMP_MISMATCH{$from} = 1;
+                }
+            } else {
+                $DECOMP{$from} = \@to;
+            }
+        }
+    }
+    close(NAMES);
+    # Remove mismatches
+    foreach (keys %DECOMP_MISMATCH) {
+        delete $DECOMP{$_};
+    }
+    if ($DUMP) {
+        foreach (keys %DECOMP) {
+            print "$_ = ", join(" + ", @{$DECOMP{$_}}), "\n";
+        }
+    }
+}
+
+# Count the total number of scripts
+
+$SCRIPT_COUNT = scalar keys %SCRIPT_TO_BASE;
+#print join("\n", sort keys %SCRIPT_TO_BASE), "\n";
+
+# Dump out the %NAME_CODE_TO_SCRIPTS map.
+
+if ($DUMP) {
+    print "\nBY NAME:\n";
+    foreach my $pass ((1, 2)) {
+        print "\nBY NAME - SINGLETONS:\n" if ($pass eq 2);
+        foreach my $name (sort keys %NAME_CODE_TO_SCRIPTS) {
+            if ($pass eq 1) {
+                next if (1 >= $NAME_CODE_TO_SCRIPTS{$name}{count});
+            } else {
+                next if (1 < $NAME_CODE_TO_SCRIPTS{$name}{count});
+            }
+            print "$name:";
+            my $href = $NAME_CODE_TO_SCRIPTS{$name};
+            foreach my $code (sort {$a <=> $b} keys %$href) {
+                next if ($code eq 'count');
+                my $aref = $href->{$code};
+                print " ", hex2($code), " (", formatScriptList($aref), ")";
+            }
+            print "\n";
+        }
+    }
+}
+
+# Create some transliterators, based on the scripts and the %NAME_CODE_TO_SCRIPTS
+# map.  Only use %NAME_CODE_TO_SCRIPTS entries with a count of 2 or more, that is,
+# names that occur in two or more scripts.  For those scripts where
+# the names occur, map both up to the InterIndic range, and down to
+# the target script.
+
+$INTERINDIC = 0xE000;
+$INTERINDIC_EXTRA = 0xE080;
+$INTERINDIC_EXTRA_NEXT = $INTERINDIC_EXTRA;
+
+# For each script, create a hash.  The hash has a key for each
+# code point, either within its block, or in the InterIndic block.
+# the value of the key is the mapping.
+
+# The script hashes are named %DEVANAGARI, etc., and referenced
+# with symbolic refs.
+
+@REMAP = ('s/\bSHORT\s+//i',
+          's/\bCANDRA\s+//i',
+          's/\bQA$/KA/i',
+          's/\bKHHA$/KHA/i',
+          's/\bGHHA$/GA/i',
+          's/\bZA$/JA/i',
+          's/\bFA$/PHA/i',
+          's/\bVA$/BA/i',
+          's/\bNNNA$/NA/i',
+          's/\bRRA$/RA/i',
+          's/\bLLLA$/LLA/i',
+          's/\bLLLA$/LA/i',
+          's/\bLLA$/LA/i',
+          's/^A(.) LENGTH MARK$/VOWEL SIGN A$1/i',
+          's/CANDRABINDU/BINDI/i',
+          's/BINDI/CANDRABINDU/i',
+          );
+
+# Do this so we see zero counts:
+foreach my $remap (@REMAP) { $REMAP{$remap} = 0; }
+
+# This loop iterates over the names in the NAME_CODE_TO_SCRIPTS hash.
+# These names are things like "LETTER NNNA".  For each name, it then
+# creates script mappings up to the InterIndic area, and back down
+# to the script areas.  If a name maps to more than one offset,
+# then it uses the InterIndic extra range.  Either way, it picks
+# a single InterIndic point, either an offset point or something in
+# the extra range, and maps up and down from that point.
+foreach my $name (sort keys %NAME_CODE_TO_SCRIPTS) {
+    next if (1 >= $NAME_CODE_TO_SCRIPTS{$name}{count});
+    my $href = $NAME_CODE_TO_SCRIPTS{$name};
+    # Count the number of different codes assigned to this name.
+    # Usually 1, but 2 for a handful of names.
+    my $codeCount = (keys %{$NAME_CODE_TO_SCRIPTS{$name}}) - 1; # less 1: {count}
+    # If $codeCount is 1, then map directly up to the $INTERINDIC
+    # base.  If $codeCount is 2, then map into unused spots starting
+    # at $INTERINDIC_EXTRA.
+    my $interIndicCode;
+    if ($codeCount > 1) {
+        # Map into the InterIndic extra range
+        $interIndicCode = $INTERINDIC_EXTRA_NEXT++;
+    }
+    my %seen;
+    foreach my $code (sort {$a ne 'count' && $b ne 'count' && $a <=> $b} keys %$href) {
+        next if ($code eq 'count');
+        my $aref = $href->{$code}; # Ref to array of scripts
+        if ($codeCount == 1) {
+            # Map directly
+            $interIndicCode = $INTERINDIC + $code;
+        }
+        # Keep track of the names of the extra InterIndic points
+        $INTERINDIC_NAME_TO_FULLCODE{$name} = $interIndicCode;
+
+        foreach my $scr (@$aref) {
+            $seen{$scr} = 1;
+            my $fullCode = $SCRIPT_TO_BASE{$scr} + $code;
+            $ {$scr}{$fullCode} = hex4($interIndicCode) . "; // $name";
+            $ {$scr}{$interIndicCode} = hex4($fullCode) . "; // $name";
+        }
+    }
+    # Now handle InterIndic->Script unmapped points.  For each name,
+    # some of the scripts will be left out -- will have no mappings
+    # to that name.  For these scripts, we can either leave them
+    # unmapped (so the InterIndic->Local mapping is empty), or
+    # try to remap.
+ unmappedScript:
+    foreach my $scr (keys %SCRIPT_TO_BASE) {
+        next if ($seen{$scr});
+
+        if ($DO_HEURISTIC_REMAP) {
+            # Try to remap through the known equivalences in our
+            # remapping table
+            foreach my $remapRE (@REMAP) {
+                local $_ = $name;
+                if (eval($remapRE)) {
+                    if (exists $SCRIPT_NAME_TO_CODE{$scr}{$_}) {
+                        $ {$scr}{$interIndicCode} =
+                            hex4($SCRIPT_TO_BASE{$scr} + $SCRIPT_NAME_TO_CODE{$scr}{$_}) .
+                                "; // REMAP: $name -> $_";
+                        ++$REMAP{$remapRE};
+                        next unmappedScript;
+                    }
+                }
+            }
+        }
+
+        # Try to remap through the file.  This contains remappings of
+        # the form 0991->0993.  That is, it contains local remappings
+        # that we can substitute and try again with.
+        #|GURMUKHI-InterIndic ------------------------------
+        #|// 0A02>; // UNMAPPED INTERNAL: SIGN BINDI
+        #|InterIndic-GURMUKHI ------------------------------
+        #|// E001>; // UNMAPPED EXTERNAL: SIGN CANDRABINDU
+        #|"\u0A01>\u0A02;"
+        # In this example, the remapping tells us that the non-existent
+        # character A01 should be considered equivalent to the real
+        # character A02.
+        # We implement this by adding two mappings; one from
+        # the InterIndic equivalent of A01, that is, E001, to A02,
+        # and one from A02, which otherwise has no mapping, to E001.
+        if ($EXCEPTIONS_FILE && $interIndicCode < $INTERINDIC_EXTRA) {
+            # Try to map this InterIndic character back to a the spot
+            # it would occupy in this script if it had a mapping.
+            my $code = $interIndicCode & 0x7F;
+            my $pseudoFullCode = $SCRIPT_TO_BASE{$scr} + $code;
+            if (exists $EXCEPTIONS{$pseudoFullCode}) {
+                my $fullCodeArray = $EXCEPTIONS{$pseudoFullCode};
+                my $comment;
+                foreach my $c (@$fullCodeArray) {
+                    $comment .= "." if ($comment);
+                    $comment .= $FULLCODE_TO_NAME{$c};
+                }
+                $comment = "; // REMAP ($EXCEPTIONS_FILE): " .
+                    hex4($pseudoFullCode) . ">" . hexArray(@$fullCodeArray) . " = " .
+                    $CODE_TO_NAME{$code} . ">" . $comment;
+                $ {$scr}{$interIndicCode} = hexArray(@$fullCodeArray) . $comment;
+                if (scalar @$fullCodeArray == 1) {
+                    if (exists $ {$scr}{$fullCodeArray->[0]}) {
+                        # There's already a proper mapping; no need to fill
+                        # in reverse
+                    } else {
+                        $ {$scr}{$fullCodeArray->[0]} = hex4($interIndicCode) . $comment;
+                    }
+                }
+                next unmappedScript;
+            }
+        }
+
+        $SCRIPT_FULLCODE_TO_IS_UNMAPPED{$scr}{$interIndicCode} = 1;
+        local $_ = "; // UNMAPPED InterIndic-$scr: $name";
+        if (exists $SCRIPT_CODE_TO_NAME{$scr}{$interIndicCode & 0x7F}) {
+            my $fullCode = $SCRIPT_TO_BASE{$scr} + ($interIndicCode & 0x7F);
+            $_ .= " (" . hex4($fullCode) . " = " . $FULLCODE_TO_NAME{$fullCode} . ")";
+        }
+        $ {$scr}{$interIndicCode} = $_;
+    }
+}
+
+# Add in unmapped entries for each script
+foreach my $scr (keys %SCRIPT_TO_BASE) {
+    my $base = $SCRIPT_TO_BASE{$scr};
+ unmappedInt:
+    foreach my $code (keys %{$SCRIPT_CODE_TO_NAME{$scr}}) {
+        my $fullCode = $code + $base;
+        next if (exists $ {$scr}{$fullCode});
+        my $name = $SCRIPT_CODE_TO_NAME{$scr}{$code};
+
+        if ($DO_HEURISTIC_REMAP) {
+            foreach my $remapRE (@REMAP) {
+                local $_ = $name;
+                if (eval($remapRE)) {
+                    if (exists $INTERINDIC_NAME_TO_FULLCODE{$_}) {
+                        $ {$scr}{$fullCode} =
+                            hex4($INTERINDIC_NAME_TO_FULLCODE{$_}) .
+                                "; // REMAP: $name -> $_";
+                        ++$REMAP{$remapRE};
+                        next unmappedInt;
+                    }
+                }
+            }
+        }
+
+        # Now try the decomp table
+        if ($DO_DECOMP_REMAP && exists $DECOMP{$name}) {
+            my $x;
+            my $cmt = "; // DECOMP: $name -> ";
+            foreach my $n (@{$DECOMP{$name}}) {
+                if (exists $SCRIPT_NAME_TO_CODE{$scr}{$n}) {
+                    $x .= hex4($SCRIPT_TO_BASE{$scr} + $SCRIPT_NAME_TO_CODE{$scr}{$n});
+                    $cmt .= $n . " + ";
+                } else {
+                    $cmt = 0;
+                    last;
+                }
+            }
+            if ($cmt) {
+                $ {$scr}{$fullCode} = $x . $cmt;
+                next unmappedInt;
+            }
+        }
+
+        $SCRIPT_FULLCODE_TO_IS_UNMAPPED{$scr}{$fullCode} = 1;
+        $ {$scr}{$fullCode} = "; // UNMAPPED $scr-InterIndic: $name";
+    }
+}
+
+# GUR
+# E00B>; // UNMAPPED EXTERNAL: LETTER VOCALIC R "\u0A0B>\u0A30\u0A3F;"
+# E00C>; // UNMAPPED EXTERNAL: LETTER VOCALIC L "\u0A0C>\u0A07;"
+# E00D>; // UNMAPPED EXTERNAL: LETTER CANDRA E "\u0A0D>\u0A10;"
+# E011>; // UNMAPPED EXTERNAL: LETTER CANDRA O "\u0A11>\u0A14;"
+# E037>; // UNMAPPED EXTERNAL: LETTER SSA "\u0A37>\u0A36;"
+# E045>; // UNMAPPED EXTERNAL: VOWEL SIGN CANDRA E "\u0A45>\u0A48;"
+# E049>; // UNMAPPED EXTERNAL: VOWEL SIGN CANDRA O "\u0A49>\u0A4C;"
+# Fix QA too
+
+# Dump out script maps
+foreach my $scr (sort keys %SCRIPT_TO_BASE) {
+    ## next unless ($scr eq 'TELUGU'); # Debugging
+    my @rules;
+    my $flag = 1;
+    foreach my $fullCode (sort {$a <=> $b} keys %{$scr}) {
+        if ($flag && $fullCode >= $INTERINDIC) {
+            # We have the complete <scr>-InterIndic rules; dump
+            # them out.
+            generateRBT($scr, "InterIndic", \@rules, $OUTDIR);
+            @rules = ();
+            $flag = 0;
+        }
+        if (exists $SCRIPT_FULLCODE_TO_IS_UNMAPPED{$scr}{$fullCode}) {
+            push @rules, "// " . hex4($fullCode) . ">" . $ {$scr}{$fullCode};
+        } else {
+            push @rules, hex4($fullCode) . ">" . $ {$scr}{$fullCode};
+        }
+    }
+    # Now generate the InterIndic-<scr> rules.
+    generateRBT("InterIndic", $scr, \@rules, $OUTDIR);
+
+#    print "$scr-InterIndic ------------------------------\n";
+#    my $flag = 1;
+#    foreach my $fullCode (sort {$a <=> $b} keys %{$scr}) {
+#        if ($flag && $fullCode >= $INTERINDIC) {
+#            print "InterIndic-$scr ------------------------------\n";
+#            $flag = 0;
+#        }
+#        if (exists $SCRIPT_FULLCODE_TO_IS_UNMAPPED{$scr}{$fullCode}) {
+#            print "// ", hex4($fullCode), ">", $ {$scr}{$fullCode}, "\n";
+#        } else {
+#            print hex4($fullCode), ">", $ {$scr}{$fullCode}, "\n";
+#        }
+#    }
+}
+
+# List successful remappings
+if ($DO_HEURISTIC_REMAP) {
+    foreach my $remap (sort keys %REMAP) {
+        print STDERR "REMAP ", $REMAP{$remap}, " x $remap\n";
+    }
+}
+
+#----------------------------------------------------------------------
+# SUBROUTINES
+
+# Return a listing of an array of scripts
+# Param: array ref
+sub formatScriptList {
+    my $aref = shift;
+    if ($SCRIPT_COUNT == @$aref) {
+        return "all";
+    } elsif (($SCRIPT_COUNT - 3) <= @$aref) {
+        my $s = "all but";
+        my %temp;
+        foreach (@$aref) { $temp{$_} = 1; }
+        foreach (sort keys %SCRIPT_TO_BASE) {
+            $s .= " $_" unless exists $temp{$_};
+        }
+        return $s;
+    } else {
+        return join(" ", @$aref);
+    }
+}
+
+# Format as %02X hex
+sub hex2 {
+    sprintf("%02X", $_[0]);
+}
+
+# Format as %04X hex
+sub hex4 {
+    sprintf("\\u%04X", $_[0]);
+}
+
+# Format an array as %04X hex, delimited by "."s
+sub hexArray {
+    join("", map { hex4($_); } @_);
+}
+
+# Parse a string of the form "\u0D01" to an array of integers.
+# Must ONLY contain escapes.
+# Return the array.
+sub parseUnicodeEscape {
+    local $_ = shift;
+    my $orig = $_;
+    my @result;
+    while (length($_)) {
+        if (/^\\u([0-9a-f]{4})(.*)/i) {
+            push @result, hex($1);
+            $_ = $2;
+        } else {
+            die "Can't parse Unicode escape $orig\n";
+        }
+    }
+    if (0 == @result) {
+        die "Can't parse Unicode escape $orig\n";        
+    }
+    @result;
+}
+
+# Return 1 if the two arrays of ints are equal.
+# Param: ref to array of ints
+# Param: ref to array of ints
+sub intArraysEqual {
+    my $a = shift;
+    my $b = shift;
+    if (scalar @$a == scalar @$b) {
+        for (my $i=0; $i<@$a; ++$i) {
+            if ($a->[$i] != $b->[$i]) {
+                return 0;
+            }
+        }
+        return 1;
+    }
+    return 0;
+}
+
+# Given a rule, possibly with trailing // comment,
+# quote the rule part and add a trailing "+" after
+# it.
+sub quoteRule {
+    my $cmt;
+    $cmt = $1 if (s|(\s*//.*)||); # isolate trailing // comment
+    s/^(.*;)/\"$1\"+/;
+    s/$/$cmt/;
+    $_;
+}
+
+# Given the name of the source script, name of the target script,
+# and array of rule strings, return a string containing the source
+# for a RuleBasedTransliterator file.
+# Param: source script name
+# Param: target script name
+# Param: ref to array of rules.  These rules are unquoted, without
+#  concatenators between them, but do have trailing ';' separators.
+# Param: name of output directory
+sub generateRBT {
+    # $TOOL - name of generating tool
+    # $DATE - date of generation
+    # $SCRIPTFROM - name of source script
+    # $SCRIPTTO - name of target script
+    # $RULES - rules
+    my ($source, $target, $rules, $outdir) = @_;
+    my $text;
+    $outdir =~ s|[/\\]$||; # Delete trailing / or \
+    my $OUT = "$outdir/TransliterationRule_${source}_$target.java";
+    open(RBT_TEMPLATE) or die;
+    open(OUT, ">$OUT") or die;
+    while (<RBT_TEMPLATE>) {
+        while (/\$([A-Za-z0-9]+)/) {
+            my $tag = $1;
+            my $sub;
+            if ($tag eq 'TOOL') {
+                $sub = $RBT_GEN_TOOL;
+            } elsif ($tag eq 'DATE') {
+                $sub = localtime;
+            } elsif ($tag eq 'SCRIPTFROM') {
+                $sub = $source;
+            } elsif ($tag eq 'SCRIPTTO') {
+                $sub = $target;
+            } elsif ($tag eq 'RULES') {
+                # Get any whitespace-only indent off the front of this tag
+                my $indent;
+                $indent = $1 if (/^(\s+)\$$tag/);
+
+                # The rules in the array are not quoted.  We need to quote
+                # them and add '+' operators between them.  We do NOT need
+                # to add ';' separators.  We DO need to separate trailing
+                # // comments and handle them.
+                $sub = join("\n$indent", map(&quoteRule, @$rules)) .
+                    "\n$indent\"\"";
+            } else {
+                print STDERR "ERROR in $RBT_TEMPLATE: Unknown tag $tag\n";
+                $sub = "[ERROR:Unknown tag \$$tag]";
+            }
+            s/\$$tag/$sub/;
+        }
+        print OUT;
+    }
+    close(OUT);
+    close(RBT_TEMPLATE);
+    print STDERR "Written: $OUT\n";
+}
+
+__END__
diff --git a/src/com/ibm/tools/translit/indicExceptions.txt b/src/com/ibm/tools/translit/indicExceptions.txt
new file mode 100755
index 0000000..cb96528
--- /dev/null
+++ b/src/com/ibm/tools/translit/indicExceptions.txt
@@ -0,0 +1,370 @@
+/* Reserved in all 9 scripts */
+
+/*
+   These codepoints are marked RESERVED in all 9 indic scripts.
+   There should not be any transliteration work on these codepoints, 
+   if they are ever encountered.  Ignore these codepoints.
+
+   Common reserved codepoints in ALL 9 scripts : (offset)
+   00, 04, 
+   3A, 3B, 
+   4E, 4F, 
+   7B, 7C, 7D, 7E, 7F
+*/
+
+/* Script-specific */
+/*
+   These codepoints are specific to their respective script.
+   Transliteration of these codepoints from one script to another is meaningless.
+
+   For example,
+      \u0B70 (Oriya) and \u0BF0 (Tamil) are non-reserved codepoints within each script.
+      On transliterating \u0B70 from Oriya to Tamil, we will get \u0BF0.
+      But \u0B70 in Oriya represents ISSHAR, whereas \u0BF0 in Tamil represents NUMBER TEN.
+
+   \u0970 Devanagari abbreviation sign
+
+   \u09F0 Bengali letter RA with middle diagonal (Assamese)
+   \u09F1 Bengali letter RA with lower diagonal 
+          (=Bengali letter VA with lower diagonal, Assamese)
+   \u09F2 Bengali rupee mark
+   \u09F3 Bengali rupee sign
+   \u09F4 Bengali currency numerator one
+   \u09F5 Bengali currency numerator two
+   \u09F6 Bengali currency numerator three
+   \u09F7 Bengali currency numerator four
+   \u09F8 Bengali currency numerator one less than the denominator
+   \u09F9 Bengali currency denominator sixteen
+   \u09FA Bengali isshar
+
+   \u0A70 Gurmukhi tippi (nasalization)
+   \u0A71 Gurmukhi addak (doubles following consonant)
+   \u0A72 Gurmukhi iri (base for vowels)
+   \u0A73 Gurmukhi ura (base for vowels)
+   \u0A74 Gurmukhi ek onkar (God is One)
+
+   \u0B70 Oriya isshar
+
+   \u0BF0 Tamil number ten
+   \u0BF1 Tamil number one hundred
+   \u0BF2 Tamil number one thousand
+*/
+
+
+
+/*****************************************************************************/
+/*  NOTE : <unknown> code will map back to itself                            */
+/*         till we find a good match                                         */
+/*****************************************************************************/
+
+
+
+/*****************************************************************************/
+/* Devanagari                                                                */
+/*****************************************************************************/
+
+"\u0955>\u0955;"  // <unknown> Length Mark - Kannada (\u0CD5), Telugu (\u0C55)
+"\u0956>\u0948;"  // AI Length Mark -> Devanagari Vowel Sign AI
+"\u0957>\u094C;"  // AU Length Mark -> Devanagari Vowel Sign AU
+
+
+
+/*****************************************************************************/
+/* Bengali                                                                   */
+/*****************************************************************************/
+
+"\u098D>\u098D;"  // <unknown> independent vowel Candra E
+"\u098E>\u098F;"  // Letter Short E -> Letter E
+"\u0991>\u0993;"  // Letter Candra O -> Letter O
+"\u0992>\u0993;"  // Letter Short O -> Letter O
+"\u09A9>\u09A8;"  // Letter NNNA -> Letter NA
+"\u09B1>\u09B0;"  // Letter RRA -> Letter RA
+"\u09B3>\u09B2;"  // Letter LLA -> Letter LA
+"\u09B4>\u09B2;"  // Letter LLLA -> Letter LA
+"\u09B5>\u09AC;"  // Letter VA -> Letter BA
+"\u09BD>\u09BD;"  // <unknown> Sign Avagraha - Devanagari (\u093D)
+"\u09C5>\u09C7;"  // Vowel Candra E -> Vowel E
+"\u09C6>\u09C7;"  // Vowel Short E -> Vowel E
+"\u09C9>\u09CB;"  // Vowel Candra O -> Vowel O
+"\u09CA>\u09CB;"  // Vowel Short O -> Vowel O
+"\u09D0>\u09D0;"  // <unknown> OM - Devanagari (\u0950), Gujarati (\u0AD0)
+"\u09D1>\u09D1;"  // <unknown> Stress - Devanagari (\u0951)
+"\u09D2>\u09D2;"  // <unknown> Stress - Devanagari (\u0952)
+"\u09D3>\u09D3;"  // <unknown> Accent - Devanagari (\u0953)
+"\u09D4>\u09D4;"  // <unknown> Accent - Devanagari (\u0954)
+"\u09D5>\u09D5;"  // <unknown> Length Mark - Kannada (\u0CD5), Telugu (\u0C55)
+"\u09D6>\u09C8;"  // AI Length Mark -> Bengali Vowel Sign AI
+"\u09D8>\u0995;"  // Letter QA -> Letter KA
+"\u09D9>\u0996;"  // Letter KHHA -> Letter KHA
+"\u09DA>\u0997;"  // Letter GHHA -> Letter GA
+"\u09DB>\u099C;"  // Letter ZA -> Letter JA
+"\u09DE>\u09AB;"  // Letter FA -> Letter PHA
+"\u09E4>\u09E4;"  // <unknown> Danda - Devanagari (\u0964)
+"\u09E5>\u09E5;"  // <unknown> Double Danda - Devanagari (\u0965)
+
+
+
+/*****************************************************************************/
+/* Gurmukhi                                                                  */
+/*****************************************************************************/
+
+"\u0A01>\u0A02;"
+"\u0A03>\u0A03;"  // <unknown> Sign Visarga - Devanagari (\u0903) & the rest
+"\u0A0B>\u0A30\u0A3F;"
+"\u0A0C>\u0A07;"
+"\u0A0D>\u0A10;"
+"\u0A0E>\u0A0F;"
+"\u0A11>\u0A14;"
+"\u0A12>\u0A13;"
+"\u0A29>\u0A28;"
+"\u0A31>\u0A30;"
+"\u0A34>\u0A33;"
+"\u0A37>\u0A36;"
+"\u0A3D>\u0A3D;"  // <unknown> Sign Avagraha - Devanagari (\u093D)
+"\u0A43>\u0A43;"  // <unknown> Vocalic R - Devanagari (\u0943)
+"\u0A44>\u0A44;"  // <unknown> Vocalic RR - Devanagari (\u0944)
+"\u0A45>\u0A48;"
+"\u0A46>\u0A47;"
+"\u0A49>\u0A4C;"
+"\u0A4A>\u0A4B;"
+"\u0A50>\u0A50;"  // <unknown> OM - Devanagari (\u0950), Gujarati (\u0AD0)
+"\u0A51>\u0A51;"  // <unknown> Stress - Devanagari (\u0951)
+"\u0A52>\u0A52;"  // <unknown> Stress - Devanagari (\u0952)
+"\u0A53>\u0A53;"  // <unknown> Accent - Devanagari (\u0953)
+"\u0A54>\u0A54;"  // <unknown> Accent - Devanagari (\u0954)
+"\u0A55>\u0A55;"  // <unknown> Length Mark - Kannada (\u0CD5), Telugu (\u0C55)
+"\u0A56>\u0A48;"  // AI Length Mark -> Gurmukhi Vowel Sign AI
+"\u0A57>\u0A4C;"  // AU Length Mark -> Gurmukhi Vowel Sign AU
+"\u0A58>\u0A15\u0A3C;"
+"\u0A5D>\u0A22\u0A3C;"  // Letter RHA -> Gurmukhi letter ddha (\u0A22) + nukta (\u0A3C)
+"\u0A5F>\u0A2F;"
+"\u0A60>\u0A30\u0A3F;"
+"\u0A61>\u0A08\u0A3C;"
+"\u0A62>\u0A3F\u0A3C;"
+"\u0A63>\u0A40\u0A3C;"
+"\u0A64>\u0A64;"  // <unknown> Danda - Devanagari (\u0964)
+"\u0A65>\u0A65;"  // <unknown> Double Danda - Devanagari (\u0965)
+
+
+
+/*****************************************************************************/
+/* Gujarati                                                                  */
+/*****************************************************************************/
+"\u0A8C>\u0AB2\u0AC3;"
+"\u0A8E>\u0A8D;"
+"\u0A92>\u0A91;"
+"\u0AA9>\u0AA8;"
+"\u0AB1>\u0AB0;"
+"\u0AB4>\u0AB3;"
+"\u0AC6>\u0AC5;"
+"\u0ACA>\u0AC9;"
+"\u0AD1>\u0AD1;"  // <unknown> Stress - Devanagari (\u0951)
+"\u0AD2>\u0AD2;"  // <unknown> Stress - Devanagari (\u0952)
+"\u0AD3>\u0AD3;"  // <unknown> Accent - Devanagari (\u0953)
+"\u0AD4>\u0AD4;"  // <unknown> Accent - Devanagari (\u0954)
+"\u0AD5>\u0AD5;"  // <unknown> Length Mark - Kannada (\u0CD5), Telugu (\u0C55)
+"\u0AD6>\u0AC8;"  // AI Length Mark -> Gujarati Vowel Sign AI
+"\u0AD7>\u0ACC;"  // AU Length Mark -> Gujarati Vowel Sign AU
+"\u0AD8>\u0A95\u0ABC;"
+"\u0AD9>\u0A96\u0ABC;"
+"\u0ADA>\u0A97\u0ABC;"
+"\u0ADB>\u0A9C\u0ABC;"
+"\u0ADC>\u0AA1\u0ABC;"
+"\u0ADD>\u0AA2\u0ABC;"
+"\u0ADE>\u0AAB\u0ABC;"
+"\u0ADF>\u0AAF\u0ABC;"
+"\u0AE1>\u0AB2\u0AC3;"
+"\u0AE2>\u0ABF\u0ABC;"
+"\u0AE3>\u0AC0\u0ABC;"
+"\u0AE4>\u0AE4;"  // <unknown> Danda - Devanagari (\u0964)
+"\u0AE5>\u0AE5;"  // <unknown> Double Danda - Devanagari (\u0965)
+
+
+
+/*****************************************************************************/
+/* Oriya                                                                     */
+/*****************************************************************************/
+"\u0B0D>\u0B0F;"
+"\u0B0E>\u0B0F;"
+"\u0B11>\u0B13;"
+"\u0B12>\u0B13;"
+"\u0B29>\u0B28;"
+"\u0B31>\u0B30;"
+"\u0B34>\u0B33;"
+"\u0B35>\u0B2C;"  // Letter VA -> Oriya Letter BA
+"\u0B44>\u0B43\u0B3C;"
+"\u0B45>\u0B47;"
+"\u0B46>\u0B47;"
+"\u0B49>\u0B4B;"
+"\u0B4A>\u0B4B;"
+"\u0B50>\u0B13\u0B01;"
+"\u0B51>\u0B51;"  // <unknown> Stress - Devanagari (\u0951)
+"\u0B52>\u0B52;"  // <unknown> Stress - Devanagari (\u0952)
+"\u0B53>\u0B53;"  // <unknown> Accent - Devanagari (\u0953)
+"\u0B54>\u0B54;"  // <unknown> Accent - Devanagari (\u0954)
+"\u0B55>\u0B55;"  // <unknown> Length Mark - Kannada (\u0CD5), Telugu (\u0C55)
+"\u0B58>\u0B15\u0B3C;"
+"\u0B59>\u0B16\u0B3C;"
+"\u0B5A>\u0B17\u0B3C;"
+"\u0B5B>\u0B1C\u0B3C;"
+"\u0B5E>\u0B2B\u0B3C;"
+"\u0B62>\u0B56\u0B3C;"
+"\u0B63>\u0B57\u0B3C;"
+"\u0B64>\u0B64;"  // <unknown> Danda - Devanagari (\u0964)
+"\u0B65>\u0B65;"  // <unknown> Double Danda - Devanagari (\u0965)
+
+
+
+/*****************************************************************************/
+/* Tamil                                                                     */
+/*****************************************************************************/
+
+"\u0B81>\u0B81;"  // <unknown> Candrabindu - Devanagari (\u0901) ,etc
+"\u0B8B>\u0BB0\u0BBF;"
+"\u0B8C>\u0B87;"
+"\u0B8D>\u0B86;"
+"\u0B91>\u0B86;"
+"\u0B96>\u0B95;"
+"\u0B97>\u0B95;"
+"\u0B98>\u0B95;"
+"\u0B9B>\u0B9A;"
+"\u0B9D>\u0B9A;"
+"\u0BA0>\u0B9F;"
+"\u0BA1>\u0B9F;"
+"\u0BA2>\u0B9F;"
+"\u0BA5>\u0BA4;"
+"\u0BA6>\u0BA4;"
+"\u0BA7>\u0BA4;"
+"\u0BAB>\u0BAA;"
+"\u0BAC>\u0BAA;"
+"\u0BAD>\u0BAA;"
+"\u0BB6>\u0BB7;"
+"\u0BBC>\u0BBC;"  // <unknown> Nukta
+"\u0BBD>\u0BBD;"  // <unknown> Sign Avagraha - Devanagari (\u093D)
+"\u0BC3>\u0BCD\u0BB0\u0BBF;"
+"\u0BC4>\u0BCD\u0BB0\u0BBF;"
+"\u0BC5>\u0BBE;"
+"\u0BC9>\u0BBE;"
+"\u0BD0>\u0B93\u0BAE\u0BCD;"
+"\u0BD1>\u0BD1;"  // <unknown> Stress - Devanagari (\u0951)
+"\u0BD2>\u0BD2;"  // <unknown> Stress - Devanagari (\u0952)
+"\u0BD3>\u0BD3;"  // <unknown> Accent - Devanagari (\u0953)
+"\u0BD4>\u0BD4;"  // <unknown> Accent - Devanagari (\u0954)
+"\u0BD5>\u0BD5;"  // <unknown> Length Mark - Kannada (\u0CD5), Telugu (\u0C55)
+"\u0BD6>\u0BC8;"  // AI Length Mark -> Tamil Vowel Sign AI
+"\u0BD8>\u0B95;"
+"\u0BD9>\u0B95;"
+"\u0BDA>\u0B95;"
+"\u0BDB>\u0B9C;"
+"\u0BDC>\u0B9F;"
+"\u0BDD>\u0B9F;"
+"\u0BDE>\u0BAA;"
+"\u0BDF>\u0BAF;"
+"\u0BE0>\u0BB0\u0BBF;"
+"\u0BE1>\u0B88;"
+"\u0BE2>\u0BE2;"  // <unknown> Vocalic L - Devanagari (\u0962)
+"\u0BE3>\u0BE3;"  // <unknown> Vocalic LL - Devanagari (\u0963)
+"\u0BE4>\u0BE4;"  // <unknown> Danda - Devanagari (\u0964)
+"\u0BE5>\u0BE5;"  // <unknown> Double Danda - Devanagari (\u0965)
+"\u0BE6>\u0030;"  // ZERO - Digit ZERO
+
+
+
+/*****************************************************************************/
+/* Telugu                                                                    */
+/*****************************************************************************/
+
+"\u0C0D>\u0C0E;"
+"\u0C11>\u0C12;"
+"\u0C29>\u0C28;"
+"\u0C34>\u0C33;"
+"\u0C3C>\u0C3C;"  // <unknown> Nukta
+"\u0C3D>\u0C3D;"  // <unknown> Sign Avagraha - Devanagari (\u093D)
+"\u0C45>\u0C46;"
+"\u0C49>\u0C4A;"
+"\u0C50>\u0C13\u0C02;"
+"\u0C51>\u0C51;"  // <unknown> Stress - Devanagari (\u0951)
+"\u0C52>\u0C52;"  // <unknown> Stress - Devanagari (\u0952)
+"\u0C53>\u0C53;"  // <unknown> Accent - Devanagari (\u0953)
+"\u0C54>\u0C54;"  // <unknown> Accent - Devanagari (\u0954)
+"\u0C57>\u0C4C;"
+"\u0C58>\u0C15;"
+"\u0C59>\u0C16;"
+"\u0C5A>\u0C17;"
+"\u0C5B>\u0C1C;"
+"\u0C5C>\u0C21;"
+"\u0C5D>\u0C22;"
+"\u0C5E>\u0C2B;"
+"\u0C5F>\u0C2F;"
+"\u0C62>\u0C3F;"
+"\u0C63>\u0C40;"
+"\u0C64>\u0C64;"  // <unknown> Danda - Devanagari (\u0964)
+"\u0C65>\u0C65;"  // <unknown> Double Danda - Devanagari (\u0965)
+
+
+
+/*****************************************************************************/
+/* Kannada                                                                   */
+/*****************************************************************************/
+
+"\u0C81>\u0C82;"
+"\u0C8D>\u0C8E;"
+"\u0C91>\u0C92;"
+"\u0CA9>\u0CA8;"
+"\u0CB4>\u0CB3;"
+"\u0CBC>\u0CBC;"  // <unknown> Nukta
+"\u0CBD>\u0CBD;"  // <unknown> Sign Avagraha - Devanagari (\u093D)
+"\u0CC5>\u0CC6;"
+"\u0CC9>\u0CCA;"
+"\u0CD0>\u0C93\u0C82;"
+"\u0CD1>\u0CD1;"  // <unknown> Stress - Devanagari (\u0951)
+"\u0CD2>\u0CD2;"  // <unknown> Stress - Devanagari (\u0952)
+"\u0CD3>\u0CD3;"  // <unknown> Accent - Devanagari (\u0953)
+"\u0CD4>\u0CD4;"  // <unknown> Accent - Devanagari (\u0954)
+"\u0CD7>\u0CCC;"
+"\u0CD8>\u0C95;"
+"\u0CD9>\u0C96;"
+"\u0CDA>\u0C97;"
+"\u0CDB>\u0C9C;"
+"\u0CDC>\u0CA1;"
+"\u0CDD>\u0CA2;"
+"\u0CDF>\u0CAF;"
+"\u0CE2>\u0CBF;"
+"\u0CE3>\u0CC0;"
+"\u0CE4>\u0CE4;"  // <unknown> Danda - Devanagari (\u0964)
+"\u0CE5>\u0CE5;"  // <unknown> Double Danda - Devanagari (\u0965)
+
+
+
+/*****************************************************************************/
+/* Malayalam                                                                 */
+/*****************************************************************************/
+
+"\u0D01>\u0D02;"
+"\u0D0D>\u0D06;"
+"\u0D11>\u0D13;"
+"\u0D29>\u0D28;"
+"\u0D3C>\u0D3C;"  // <unknown> Nukta
+"\u0D3D>\u0D3D;"  // <unknown> Sign Avagraha - Devanagari (\u093D)
+"\u0D44>\u0D44;"  // <unknown> Vocalic RR - Devanagari (\u0944)
+"\u0D45>\u0D3E;"
+"\u0D49>\u0D4B;"
+"\u0D50>\u0D50;"  // <unknown> OM - Devanagari (\u0950), Gujarati (\u0AD0)
+"\u0D51>\u0D51;"  // <unknown> Stress - Devanagari (\u0951)
+"\u0D52>\u0D52;"  // <unknown> Stress - Devanagari (\u0952)
+"\u0D53>\u0D53;"  // <unknown> Accent - Devanagari (\u0953)
+"\u0D54>\u0D54;"  // <unknown> Accent - Devanagari (\u0954)
+"\u0D55>\u0D55;"  // <unknown> Length Mark - Kannada (\u0CD5), Telugu (\u0C55)
+"\u0D56>\u0D48;"  // AI Length Mark -> Malayalam Vowel Sign AI
+"\u0D58>\u0D15;"
+"\u0D59>\u0D16;"
+"\u0D5A>\u0D17;"
+"\u0D5B>\u0D1C;"
+"\u0D5C>\u0D21;"
+"\u0D5D>\u0D22;"
+"\u0D5E>\u0D2B;"
+"\u0D5F>\u0D2F;"
+"\u0D62>\u0D62;"  // <unknown> Vocalic L - Devanagari (\u0962)
+"\u0D63>\u0D63;"  // <unknown> Vocalic LL - Devanagari (\u0963)
+"\u0D64>\u0D64;"  // <unknown> Danda - Devanagari (\u0964)
+"\u0D65>\u0D65;"  // <unknown> Double Danda - Devanagari (\u0965)
diff --git a/src/com/ibm/tools/translit/rbtTemplate.txt b/src/com/ibm/tools/translit/rbtTemplate.txt
new file mode 100755
index 0000000..0549bbd
--- /dev/null
+++ b/src/com/ibm/tools/translit/rbtTemplate.txt
@@ -0,0 +1,26 @@
+/***********************************************************************
+* Copyright (c) 2000, International Business Machines Corporation
+* and others.  All Rights Reserved.
+************************************************************************
+* > THIS FILE WAS MACHINE GENERATED <
+* >       DO NOT EDIT BY HAND       <
+* >      RUN TOOL TO REGENERATE     <
+* Tool: $TOOL
+* Creation date: $DATE
+*/
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_$SCRIPTFROM_$SCRIPTTO extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Rule",
+              $RULES
+            }
+        };
+    }
+}
diff --git a/src/com/ibm/tools/translit/varsub.bat b/src/com/ibm/tools/translit/varsub.bat
new file mode 100755
index 0000000..4892721
--- /dev/null
+++ b/src/com/ibm/tools/translit/varsub.bat
@@ -0,0 +1,74 @@
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+goto endofperl
+@rem ';
+#!perl
+#line 14
+
+# Usage: perl varsub.bat [-n|-nr] <infile> <outfile>
+#
+# Substitutes variables into rules and deletes variable definition
+# statements.  Variables that expand to UnicodeSets are NOT
+# substituted.
+#
+#  -n   Afterwards, run native2ascii -encoding UTF8
+#  -nr  Afterwards, run native2ascii -encoding UTF8 -reverse
+
+$N2A = 0;
+
+$IN = shift;
+if ($IN =~ /^-n/) {
+    $N2A = 1;
+    $N2Aoption = ($IN eq '-nr') ? " -reverse " : "";
+    $IN = shift;
+}
+$OUT = shift;
+
+if (!($IN && $OUT)) {
+    die "Usage: $0 [-n|-nr] <infile> <outfile>";
+}
+
+open(IN) or die "Can't open $IN: $!";
+open(OUT, ">$OUT") or die "Can't open $OUT: $!";
+
+while (<IN>) {
+    if (/^\s*\$([a-zA-Z0-9_]+)\s*=\s*([^;\#]+)\s*;\s*(\#.*)?$/) {
+        # This looks like a variable definition
+        my ($var, $def) = ($1, $2);
+        # Don't substitute UnicodeSet vars
+        if ($def !~ /^\[/) {
+            if (exists $VAR{$var}) {
+                print STDERR "Error: Duplicate definition of $var\n";
+            } else {
+                $VAR{$var} = $def;
+            }
+            next;
+        }
+    }
+    
+    # Do variable substitutions, and output line
+    foreach my $var (keys %VAR) {
+        my $def = $VAR{$var};
+        s/\$$var\b/$def/g;
+    }
+    print OUT;
+}
+
+close(OUT);
+close(IN);
+
+if ($N2A) {
+    `native2ascii -encoding UTF8 $N2Aoption $OUT $OUT.native2ascii`;
+    unlink $OUT;
+    rename "$OUT.native2ascii", $OUT;
+}
+
+__END__
+:endofperl
diff --git a/src/com/ibm/util/BuddhistCalendar.java b/src/com/ibm/util/BuddhistCalendar.java
new file mode 100755
index 0000000..1e3a250
--- /dev/null
+++ b/src/com/ibm/util/BuddhistCalendar.java
@@ -0,0 +1,190 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/BuddhistCalendar.java,v $ 
+ * $Date: 2000/11/28 00:50:12 $ 
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import com.ibm.util.GregorianCalendar;
+import java.util.Locale;
+
+/**
+ * <code>BuddhistCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years since the birth of the Buddha.  This is the civil calendar
+ * in some predominantly Buddhist countries such as Thailand, and it is used for
+ * religious purposes elsewhere.
+ * <p>
+ * The Buddhist calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  Years are numbered since the birth of the
+ * Buddha in 543 BC (Gregorian), so that 1 AD (Gregorian) is equivalent to 544
+ * BE (Buddhist Era) and 1998 AD is 2541 BE.
+ * <p>
+ * The Buddhist Calendar has only one allowable era: <code>BE</code>.  If the
+ * calendar is not in lenient mode (see <code>setLenient</code>), dates before
+ * 1/1/1 BE are rejected with an <code>IllegalArgumentException</code>.
+ *
+ * @see com.ibm.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+public class BuddhistCalendar extends GregorianCalendar {
+    
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    //-------------------------------------------------------------------------
+    // Constructors...
+    //-------------------------------------------------------------------------
+
+    /**
+     * Constant for the Buddhist Era.  This is the only allowable <code>ERA</code>
+     * value for the Buddhist calendar.
+     *
+     * @see com.ibm.util.Calendar#ERA
+     */
+    public static final int BE = 0;
+    
+    /**
+     * Constructs a <code>BuddhistCalendar</code> using the current time
+     * in the default time zone with the default locale.
+     */
+    public BuddhistCalendar() {
+        super();
+    }
+
+    /**
+     * Constructs a <code>BuddhistCalendar</code> based on the current time
+     * in the given time zone with the default locale.
+     *
+     * @param zone the given time zone.
+     */
+    public BuddhistCalendar(TimeZone zone) {
+        super(zone);
+    }
+
+    /**
+     * Constructs a <code>BuddhistCalendar</code> based on the current time
+     * in the default time zone with the given locale.
+     *
+     * @param aLocale the given locale.
+     */
+    public BuddhistCalendar(Locale aLocale) {
+        super(aLocale);
+    }
+
+    /**
+     * Constructs a <code>BuddhistCalendar</code> based on the current time
+     * in the given time zone with the given locale.
+     *
+     * @param zone the given time zone.
+     *
+     * @param aLocale the given locale.
+     */
+    public BuddhistCalendar(TimeZone zone, Locale aLocale) {
+        super(zone, aLocale);
+    }
+
+    /**
+     * Constructs a <code>BuddhistCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param date      The date to which the new calendar is set.
+     */
+    public BuddhistCalendar(Date date) {
+        this();
+        setTime(date);
+    }
+
+    /**
+     * Constructs a <code>BuddhistCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+     *
+     * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+     *                  The value is 0-based. e.g., 0 for January.
+     *
+     * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+     */
+    public BuddhistCalendar(int year, int month, int date) {
+        super(year, month, date);
+    }
+
+    /**
+     * Constructs a BuddhistCalendar with the given date
+     * and time set for the default time zone with the default locale.
+     *
+     * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+     *
+     * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+     *                  The value is 0-based. e.g., 0 for January.
+     *
+     * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+     *
+     * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+     *
+     * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+     *
+     * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+     */
+    public BuddhistCalendar(int year, int month, int date, int hour,
+                             int minute, int second)
+    {
+        super(year, month, date, hour, minute, second);
+    }
+
+
+    //-------------------------------------------------------------------------
+    // The only practical difference from a Gregorian calendar is that years
+    // are numbered since the birth of the Buddha.  A couple of overrides will
+    // take care of that....
+    //-------------------------------------------------------------------------
+    
+    // Starts in -543 AD, ie 544 BC
+    private static final int BUDDHIST_ERA_START = -543;
+    
+    protected int handleGetExtendedYear() {
+        int year;
+        if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR) {
+            year = internalGet(EXTENDED_YEAR, 1);
+        } else {
+            // Ignore the era, as there is only one
+            year = internalGet(YEAR, 1);
+        }
+        return year;
+    }
+
+    // Return JD of start of given month/year
+    protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) {
+        return super.handleComputeMonthStart(eyear + BUDDHIST_ERA_START, month, useMonth);
+    }
+
+    protected void handleComputeFields(int julianDay) {
+        super.handleComputeFields(julianDay);
+        int y = internalGet(EXTENDED_YEAR) - BUDDHIST_ERA_START;
+        internalSet(EXTENDED_YEAR, y);
+        internalSet(ERA, 0);
+        internalSet(YEAR, y);
+    }
+
+    /**
+     * Override GregorianCalendar.  There is only one Buddhist ERA.  We
+     * should really handle YEAR, YEAR_WOY, and EXTENDED_YEAR here too to
+     * implement the 1..5000000 range, but it's not critical.
+     */
+    protected int handleGetLimit(int field, int limitType) {
+        if (field == ERA) {
+            return BE;
+        }
+        return super.handleGetLimit(field, limitType);
+    }
+}
diff --git a/src/com/ibm/util/ByteTrie.java b/src/com/ibm/util/ByteTrie.java
new file mode 100755
index 0000000..05fedbb
--- /dev/null
+++ b/src/com/ibm/util/ByteTrie.java
@@ -0,0 +1,232 @@
+/*
+******************************************************************************
+* Copyright (C) 1996-2000, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/ByteTrie.java,v $ 
+* $Date: 2001/03/28 00:01:52 $ 
+* $Revision: 1.2 $
+*
+******************************************************************************
+*/
+
+package com.ibm.util;
+
+import com.ibm.text.UCharacter;
+
+/**
+* Class to manipulate and generate a trie.
+* This is useful for ICU data in primitive types.
+* Provides a compact way to store information that is indexed by Unicode 
+* values, such as character properties, types, keyboard values, etc. This is 
+* very useful when you have a block of Unicode data that contains significant 
+* values while the rest of the Unicode data is unused in the application or 
+* when you have a lot of redundance, such as where all 21,000 Han ideographs 
+* have the same value.  However, lookup is much faster than a hash table.
+* A trie of any primitive data type serves two purposes:
+* <UL type = round>
+*     <LI>Fast access of the indexed values.
+*     <LI>Smaller memory footprint.
+* </UL>
+* A trie is composed of 2 index array and value array. Combining the 2 index
+* array, we could get the indicies of Unicode characters to the value array.
+* The first index array will contain indexes corresponding to the first 11 
+* bits of a 21 bit codepoint, the second index array will contain indexes 
+* corresponding to the next 6 bits of the code point. The last array will 
+* contain the values. Hence to access the value of a codepoint, we can use the
+* following program
+* <p>
+*   int firstindex = ch >> FIRST_11_BITS_SHIFT;<br>
+*   int secondindex = index1[firstindex] + 
+*                       (ch >> NEXT_6_BITS_SHIFT) & NEXT_6_BITS_MASK;<br>
+*   int thirdindex = index2[secondindex] + ch & LAST_FOUR_BITS_MASK;<br>    
+*   f(ch) = value[thirdindex];<br>
+* </p>
+* @version            $Revision: 1.2 $
+* @author             Syn Wee Quek
+*/
+public final class ByteTrie
+{
+  // constructors -----------------------------------------------------
+  
+  /**
+  * constructor 
+  * @param array of data to be populated into trie
+  */
+  public ByteTrie(byte array[])
+  {
+    build(array);
+  }
+  
+  /**
+  * constructor that assigns trie the argument values. Arrays are not 
+  * duplicated.
+  * @param stage1 array of the first set of indexes
+  * @param stage2 array of the second set of indexes
+  * @param stage3 array of data
+  */
+  public ByteTrie(int stage1[], int stage2[], byte stage3[])
+  {
+    m_stage1_ = stage1;
+    m_stage2_ = stage2;
+    m_stage3_ = stage3;
+  }
+  
+  // public methods ----------------------------------------------------
+  
+  /**
+  * Getting the trie data corresponding to the argument index.
+  * @param index to be manipulated into corresponding trie index
+  * @return trie value at index
+  */
+  public byte getValue(int index)
+  {
+    // index of the first access to the database 
+    int index1 = index >> STAGE_1_SHIFT_;
+    // index of the second access to the database
+    int index2 = m_stage1_[index1] + 
+                 ((index >> STAGE_2_SHIFT_) & STAGE_2_MASK_AFTER_SHIFT_);
+    // index of the third access to the database
+    int index3 = m_stage2_[index2] + (index & STAGE_3_MASK_);  
+    // retrieves value
+    return m_stage3_[index3];
+  }
+  
+  // private data members ------------------------------------------------
+  
+  /**
+  * Stage 1 index array
+  */
+  private int m_stage1_[];
+  
+  /**
+  * Stage 2 index array
+  */
+  private int m_stage2_[];
+  
+  /**
+  * Stage 3 value array
+  */
+  private byte m_stage3_[];
+  
+  /**
+  * Stage 1 shift
+  */
+  private static final int STAGE_1_SHIFT_ = 10;
+  
+  /**
+  * Stage 2 shift
+  */
+  private static final int STAGE_2_SHIFT_ = 4;
+  
+  /**
+  * Stage 2 mask
+  */
+  private static final int STAGE_2_MASK_AFTER_SHIFT_ = 0x3F;
+  
+  /**
+  * Stage 3 mask
+  */
+  private static final int STAGE_3_MASK_ = 0xF;
+  
+  /**
+  * Number of numbers possible from a 4 bit type
+  */
+  private static final int COUNT_4_BIT_ = 0x10;
+  
+  /**
+  * Number of numbers possible from a 6 bit type
+  */
+  private static final int COUNT_6_BIT_ = 0x40;
+  
+  /**
+  * Number of numbers possible from the first 17 bits of a codepoint
+  */
+  private static final int COUNT_CODEPOINT_FIRST_17_BIT_ = 0x110000 >> 4;
+  
+  /**
+  * Number of numbers possible from the first 11 bits of a codepoint
+  */
+  private static final int COUNT_CODEPOINT_FIRST_11_BIT_ = 0x110000 >> 10;
+  
+  // private methods -----------------------------------------------------
+  
+  /**
+  * Building the trie from a argument array.
+  * Each unicode character will be used to generate data.
+  * @param output file path
+  */
+  private void build(byte array[])
+  {
+    int ch = 0;
+    
+    int stage2[] = new int[COUNT_CODEPOINT_FIRST_17_BIT_];
+    byte stage3[] = new byte[UCharacter.MAX_VALUE >> 1];
+    int size = TrieBuilder.build(array, 0, array.length, COUNT_4_BIT_, stage2, 
+                                 stage3);
+    
+    m_stage3_ = new byte[size];
+    System.arraycopy(stage3, 0, m_stage3_, 0, size);
+    
+    m_stage1_ = new int[COUNT_CODEPOINT_FIRST_11_BIT_];
+    size = TrieBuilder.build(stage2, 0, stage2.length, COUNT_6_BIT_, m_stage1_, 
+                             stage2);
+    m_stage2_ = new int[size];
+    System.arraycopy(stage2, 0, m_stage2_, 0, size);
+  }
+  
+  /**
+  * Converts trie to a readable format
+  * @return string version of the trie
+  */
+  public String toString()
+  {
+    int size = m_stage1_.length;
+    int count = 0;
+    StringBuffer result = new StringBuffer("int m_stage1_[] = {\n");
+    for (int i = 0; i < size; i ++) {
+      result.append("0x" + Integer.toHexString(m_stage1_[i]));
+      if (i != size - 1) {
+        result.append(", ");
+      }
+      count ++;
+      if (count == 10) {
+        count = 0;
+        result.append("\n");
+      }
+    }
+    result.append("\n}\n\n");
+    size = m_stage2_.length;
+    result.append("int m_stage2_[] = {\n");
+    count = 0;
+    for (int i = 0; i < size; i ++) {
+      result.append("0x" + Integer.toHexString(m_stage2_[i]));
+      if (i != size - 1) {
+        result.append(", ");
+      }
+      count ++;
+      if (count == 10) {
+        count = 0;
+        result.append("\n");
+      }
+    }
+    result.append("\n}\n\n");
+    size = m_stage3_.length;
+    result.append("byte m_stage3_[] = {\n");
+    count = 0;
+    for (int i = 0; i < size; i ++) {
+      result.append("0x" + Integer.toHexString((char)m_stage3_[i]));
+      if (i != size - 1) {
+        result.append(", ");
+      }
+      count ++;
+      if (count == 10) {
+        count = 0;
+        result.append("\n");
+      }
+    }
+    result.append("\n}");
+    return result.toString();
+  }
+}
\ No newline at end of file
diff --git a/src/com/ibm/util/Calendar.java b/src/com/ibm/util/Calendar.java
new file mode 100755
index 0000000..3a19ff2
--- /dev/null
+++ b/src/com/ibm/util/Calendar.java
@@ -0,0 +1,4467 @@
+/*
+ * @(#)Calendar.java	1.48 99/11/05
+ *
+ * (C) Copyright Taligent, Inc. 1996-1998 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1996-1998 - All Rights Reserved
+ *
+ * Portions copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ *   The original version of this source code and documentation is copyrighted
+ * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
+ * materials are provided under terms of a License Agreement between Taligent
+ * and Sun. This technology is protected by multiple US and International
+ * patents. This notice and attribution to Taligent may not be removed.
+ *   Taligent is a registered trademark of Taligent, Inc.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * and its documentation for NON-COMMERCIAL purposes and without
+ * fee is hereby granted provided that this copyright notice
+ * appears in all copies. Please refer to the file "copyright.html"
+ * for further important copyright and licensing information.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ *
+ */
+
+package com.ibm.util;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.MissingResourceException;
+import java.text.MessageFormat;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import com.ibm.text.DateFormat;
+import com.ibm.text.DateFormatSymbols;
+import com.ibm.text.SimpleDateFormat;
+
+/**
+ * <code>Calendar</code> is an abstract base class for converting between
+ * a <code>Date</code> object and a set of integer fields such as
+ * <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>HOUR</code>,
+ * and so on. (A <code>Date</code> object represents a specific instant in
+ * time with millisecond precision. See
+ * {@link Date}
+ * for information about the <code>Date</code> class.)
+ *
+ * <p><b>Note:</b>  This class is similar, but not identical, to the class
+ * <code>java.util.Calendar</code>.  Changes are detailed below.
+ *
+ * <p>
+ * Subclasses of <code>Calendar</code> interpret a <code>Date</code>
+ * according to the rules of a specific calendar system.  ICU4J contains
+ * several subclasses implementing different international calendar systems.
+ *
+ * <p>
+ * Like other locale-sensitive classes, <code>Calendar</code> provides a
+ * class method, <code>getInstance</code>, for getting a generally useful
+ * object of this type. <code>Calendar</code>'s <code>getInstance</code> method
+ * returns a <code>GregorianCalendar</code> object whose
+ * time fields have been initialized with the current date and time:
+ * <blockquote>
+ * <pre>
+ * Calendar rightNow = Calendar.getInstance();
+ * </pre>
+ * </blockquote>
+ *
+ * <p>A <code>Calendar</code> object can produce all the time field values
+ * needed to implement the date-time formatting for a particular language and
+ * calendar style (for example, Japanese-Gregorian, Japanese-Traditional).
+ * <code>Calendar</code> defines the range of values returned by certain fields,
+ * as well as their meaning.  For example, the first month of the year has value
+ * <code>MONTH</code> == <code>JANUARY</code> for all calendars.  Other values
+ * are defined by the concrete subclass, such as <code>ERA</code> and
+ * <code>YEAR</code>.  See individual field documentation and subclass
+ * documentation for details.
+ *
+ * <p>When a <code>Calendar</code> is <em>lenient</em>, it accepts a wider range
+ * of field values than it produces.  For example, a lenient
+ * <code>GregorianCalendar</code> interprets <code>MONTH</code> ==
+ * <code>JANUARY</code>, <code>DAY_OF_MONTH</code> == 32 as February 1.  A
+ * non-lenient <code>GregorianCalendar</code> throws an exception when given
+ * out-of-range field settings.  When calendars recompute field values for
+ * return by <code>get()</code>, they normalize them.  For example, a
+ * <code>GregorianCalendar</code> always produces <code>DAY_OF_MONTH</code>
+ * values between 1 and the length of the month.
+ *
+ * <p><code>Calendar</code> defines a locale-specific seven day week using two
+ * parameters: the first day of the week and the minimal days in first week
+ * (from 1 to 7).  These numbers are taken from the locale resource data when a
+ * <code>Calendar</code> is constructed.  They may also be specified explicitly
+ * through the API.
+ *
+ * <p>When setting or getting the <code>WEEK_OF_MONTH</code> or
+ * <code>WEEK_OF_YEAR</code> fields, <code>Calendar</code> must determine the
+ * first week of the month or year as a reference point.  The first week of a
+ * month or year is defined as the earliest seven day period beginning on
+ * <code>getFirstDayOfWeek()</code> and containing at least
+ * <code>getMinimalDaysInFirstWeek()</code> days of that month or year.  Weeks
+ * numbered ..., -1, 0 precede the first week; weeks numbered 2, 3,... follow
+ * it.  Note that the normalized numbering returned by <code>get()</code> may be
+ * different.  For example, a specific <code>Calendar</code> subclass may
+ * designate the week before week 1 of a year as week <em>n</em> of the previous
+ * year.
+ *
+ * <p> When computing a <code>Date</code> from time fields, two special
+ * circumstances may arise: there may be insufficient information to compute the
+ * <code>Date</code> (such as only year and month but no day in the month), or
+ * there may be inconsistent information (such as "Tuesday, July 15, 1996" --
+ * July 15, 1996 is actually a Monday).
+ *
+ * <p>
+ * <strong>Insufficient information.</strong> The calendar will use default
+ * information to specify the missing fields. This may vary by calendar; for
+ * the Gregorian calendar, the default for a field is the same as that of the
+ * start of the epoch: i.e., YEAR = 1970, MONTH = JANUARY, DATE = 1, etc.
+ *
+ * <p>
+ * <strong>Inconsistent information.</strong> If fields conflict, the calendar
+ * will give preference to fields set more recently. For example, when
+ * determining the day, the calendar will look for one of the following
+ * combinations of fields.  The most recent combination, as determined by the
+ * most recently set single field, will be used.
+ *
+ * <blockquote>
+ * <pre>
+ * MONTH + DAY_OF_MONTH
+ * MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
+ * MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
+ * DAY_OF_YEAR
+ * DAY_OF_WEEK + WEEK_OF_YEAR
+ * </pre>
+ * </blockquote>
+ *
+ * For the time of day:
+ *
+ * <blockquote>
+ * <pre>
+ * HOUR_OF_DAY
+ * AM_PM + HOUR
+ * </pre>
+ * </blockquote>
+ *
+ * <p>
+ * <strong>Note:</strong> for some non-Gregorian calendars, different
+ * fields may be necessary for complete disambiguation. For example, a full
+ * specification of the historial Arabic astronomical calendar requires year,
+ * month, day-of-month <em>and</em> day-of-week in some cases.
+ *
+ * <p>
+ * <strong>Note:</strong> There are certain possible ambiguities in
+ * interpretation of certain singular times, which are resolved in the
+ * following ways:
+ * <ol>
+ *     <li> 24:00:00 "belongs" to the following day. That is,
+ *          23:59 on Dec 31, 1969 &lt; 24:00 on Jan 1, 1970 &lt; 24:01:00 on Jan 1, 1970
+ *
+ *     <li> Although historically not precise, midnight also belongs to "am",
+ *          and noon belongs to "pm", so on the same day,
+ *          12:00 am (midnight) &lt; 12:01 am, and 12:00 pm (noon) &lt; 12:01 pm
+ * </ol>
+ *
+ * <p>
+ * The date or time format strings are not part of the definition of a
+ * calendar, as those must be modifiable or overridable by the user at
+ * runtime. Use {@link DateFormat}
+ * to format dates.
+ *
+ * <p><strong>Field manipulation methods</strong></p>
+ * 
+ * <p><code>Calendar</code> fields can be changed using three methods:
+ * <code>set()</code>, <code>add()</code>, and <code>roll()</code>.</p>
+ * 
+ * <p><strong><code>set(f, value)</code></strong> changes field
+ * <code>f</code> to <code>value</code>.  In addition, it sets an
+ * internal member variable to indicate that field <code>f</code> has
+ * been changed. Although field <code>f</code> is changed immediately,
+ * the calendar's milliseconds is not recomputed until the next call to
+ * <code>get()</code>, <code>getTime()</code>, or
+ * <code>getTimeInMillis()</code> is made. Thus, multiple calls to
+ * <code>set()</code> do not trigger multiple, unnecessary
+ * computations. As a result of changing a field using
+ * <code>set()</code>, other fields may also change, depending on the
+ * field, the field value, and the calendar system. In addition,
+ * <code>get(f)</code> will not necessarily return <code>value</code>
+ * after the fields have been recomputed. The specifics are determined by
+ * the concrete calendar class.</p>
+ * 
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>set(Calendar.MONTH,
+ * Calendar.SEPTEMBER)</code> sets the calendar to September 31,
+ * 1999. This is a temporary internal representation that resolves to
+ * October 1, 1999 if <code>getTime()</code>is then called. However, a
+ * call to <code>set(Calendar.DAY_OF_MONTH, 30)</code> before the call to
+ * <code>getTime()</code> sets the calendar to September 30, 1999, since
+ * no recomputation occurs after <code>set()</code> itself.</p>
+ * 
+ * <p><strong><code>add(f, delta)</code></strong> adds <code>delta</code>
+ * to field <code>f</code>.  This is equivalent to calling <code>set(f,
+ * get(f) + delta)</code> with two adjustments:</p>
+ * 
+ * <blockquote>
+ *   <p><strong>Add rule 1</strong>. The value of field <code>f</code>
+ *   after the call minus the value of field <code>f</code> before the
+ *   call is <code>delta</code>, modulo any overflow that has occurred in
+ *   field <code>f</code>. Overflow occurs when a field value exceeds its
+ *   range and, as a result, the next larger field is incremented or
+ *   decremented and the field value is adjusted back into its range.</p>
+ * 
+ *   <p><strong>Add rule 2</strong>. If a smaller field is expected to be
+ *   invariant, but &nbsp; it is impossible for it to be equal to its
+ *   prior value because of changes in its minimum or maximum after field
+ *   <code>f</code> is changed, then its value is adjusted to be as close
+ *   as possible to its expected value. A smaller field represents a
+ *   smaller unit of time. <code>HOUR</code> is a smaller field than
+ *   <code>DAY_OF_MONTH</code>. No adjustment is made to smaller fields
+ *   that are not expected to be invariant. The calendar system
+ *   determines what fields are expected to be invariant.</p>
+ * </blockquote>
+ * 
+ * <p>In addition, unlike <code>set()</code>, <code>add()</code> forces
+ * an immediate recomputation of the calendar's milliseconds and all
+ * fields.</p>
+ * 
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>add(Calendar.MONTH,
+ * 13)</code> sets the calendar to September 30, 2000. <strong>Add rule
+ * 1</strong> sets the <code>MONTH</code> field to September, since
+ * adding 13 months to August gives September of the next year. Since
+ * <code>DAY_OF_MONTH</code> cannot be 31 in September in a
+ * <code>GregorianCalendar</code>, <strong>add rule 2</strong> sets the
+ * <code>DAY_OF_MONTH</code> to 30, the closest possible value. Although
+ * it is a smaller field, <code>DAY_OF_WEEK</code> is not adjusted by
+ * rule 2, since it is expected to change when the month changes in a
+ * <code>GregorianCalendar</code>.</p>
+ * 
+ * <p><strong><code>roll(f, delta)</code></strong> adds
+ * <code>delta</code> to field <code>f</code> without changing larger
+ * fields. This is equivalent to calling <code>add(f, delta)</code> with
+ * the following adjustment:</p>
+ * 
+ * <blockquote>
+ *   <p><strong>Roll rule</strong>. Larger fields are unchanged after the
+ *   call. A larger field represents a larger unit of
+ *   time. <code>DAY_OF_MONTH</code> is a larger field than
+ *   <code>HOUR</code>.</p>
+ * </blockquote>
+ * 
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>roll(Calendar.MONTH,
+ * 8)</code> sets the calendar to April 30, <strong>1999</strong>.  Add
+ * rule 1 sets the <code>MONTH</code> field to April. Using a
+ * <code>GregorianCalendar</code>, the <code>DAY_OF_MONTH</code> cannot
+ * be 31 in the month April. Add rule 2 sets it to the closest possible
+ * value, 30. Finally, the <strong>roll rule</strong> maintains the
+ * <code>YEAR</code> field value of 1999.</p>
+ * 
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to Sunday June 6, 1999. Calling
+ * <code>roll(Calendar.WEEK_OF_MONTH, -1)</code> sets the calendar to
+ * Tuesday June 1, 1999, whereas calling
+ * <code>add(Calendar.WEEK_OF_MONTH, -1)</code> sets the calendar to
+ * Sunday May 30, 1999. This is because the roll rule imposes an
+ * additional constraint: The <code>MONTH</code> must not change when the
+ * <code>WEEK_OF_MONTH</code> is rolled. Taken together with add rule 1,
+ * the resultant date must be between Tuesday June 1 and Saturday June
+ * 5. According to add rule 2, the <code>DAY_OF_WEEK</code>, an invariant
+ * when changing the <code>WEEK_OF_MONTH</code>, is set to Tuesday, the
+ * closest possible value to Sunday (where Sunday is the first day of the
+ * week).</p>
+ * 
+ * <p><strong>Usage model</strong>. To motivate the behavior of
+ * <code>add()</code> and <code>roll()</code>, consider a user interface
+ * component with increment and decrement buttons for the month, day, and
+ * year, and an underlying <code>GregorianCalendar</code>. If the
+ * interface reads January 31, 1999 and the user presses the month
+ * increment button, what should it read? If the underlying
+ * implementation uses <code>set()</code>, it might read March 3, 1999. A
+ * better result would be February 28, 1999. Furthermore, if the user
+ * presses the month increment button again, it should read March 31,
+ * 1999, not March 28, 1999. By saving the original date and using either
+ * <code>add()</code> or <code>roll()</code>, depending on whether larger
+ * fields should be affected, the user interface can behave as most users
+ * will intuitively expect.</p>
+ *
+ * <p><b>Note:</b> You should always use {@link #roll roll} and {@link #add add} rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ *
+ * <p><big><big><b>Calendar Architecture in ICU4J</b></big></big></p>
+ * 
+ * <p>Recently the implementation of <code>Calendar</code> has changed
+ * significantly in order to better support subclassing. The original
+ * <code>Calendar</code> class was designed to support subclassing, but
+ * it had only one implemented subclass, <code>GregorianCalendar</code>.
+ * With the implementation of several new calendar subclasses, including
+ * the <code>BuddhistCalendar</code>, <code>ChineseCalendar</code>,
+ * <code>HebrewCalendar</code>, <code>IslamicCalendar</code>, and
+ * <code>JapaneseCalendar</code>, the subclassing API has been reworked
+ * thoroughly. This section details the new subclassing API and other
+ * ways in which <code>com.ibm.util.Calendar</code> differs from
+ * <code>java.util.Calendar</code>.
+ * </p>
+ * 
+ * <p><big><b>Changes</b></big></p>
+ * 
+ * <p>Overview of changes between the classic <code>Calendar</code>
+ * architecture and the new architecture.
+ * 
+ * <ul>
+ * 
+ *   <li>The <code>fields[]</code> array is <code>private</code> now
+ *     instead of <code>protected</code>.  Subclasses must access it
+ *     using the methods {@link #internalSet} and
+ *     {@link #internalGet}.  <b>Motivation:</b> Subclasses should
+ *     not directly access data members.</li>
+ * 
+ *   <li>The <code>time</code> long word is <code>private</code> now
+ *     instead of <code>protected</code>.  Subclasses may access it using
+ *     the method {@link #internalGetTimeInMillis}, which does not
+ *     provoke an update. <b>Motivation:</b> Subclasses should not
+ *     directly access data members.</li>
+ * 
+ *   <li>The scope of responsibility of subclasses has been drastically
+ *     reduced. As much functionality as possible is implemented in the
+ *     <code>Calendar</code> base class. As a result, it is much easier
+ *     to subclass <code>Calendar</code>. <b>Motivation:</b> Subclasses
+ *     should not have to reimplement common code. Certain behaviors are
+ *     common across calendar systems: The definition and behavior of
+ *     week-related fields and time fields, the arithmetic
+ *     ({@link #add(int, int) add} and {@link #roll(int, int) roll}) behavior of many
+ *     fields, and the field validation system.</li>
+ * 
+ *   <li>The subclassing API has been completely redesigned.</li>
+ * 
+ *   <li>The <code>Calendar</code> base class contains some Gregorian
+ *     calendar algorithmic support that subclasses can use (specifically
+ *     in {@link #handleComputeFields}).  Subclasses can use the
+ *     methods <code>getGregorianXxx()</code> to obtain precomputed
+ *     values. <b>Motivation:</b> This is required by all
+ *     <code>Calendar</code> subclasses in order to implement consistent
+ *     time zone behavior, and Gregorian-derived systems can use the
+ *     already computed data.</li>
+ * 
+ *   <li>The <code>FIELD_COUNT</code> constant has been removed. Use
+ *     {@link #getFieldCount}.  In addition, framework API has been
+ *     added to allow subclasses to define additional fields.
+ *     <b>Motivation: </b>The number of fields is not constant across
+ *     calendar systems.</li>
+ * 
+ *   <li>The range of handled dates has been narrowed from +/-
+ *     ~300,000,000 years to +/- ~5,000,000 years. In practical terms
+ *     this should not affect clients. However, it does mean that client
+ *     code cannot be guaranteed well-behaved results with dates such as
+ *     <code>Date(Long.MIN_VALUE)</code> or
+ *     <code>Date(Long.MAX_VALUE)</code>. Instead, the
+ *     <code>Calendar</code> constants {@link #MIN_DATE},
+ *     {@link #MAX_DATE}, {@link #MIN_MILLIS},
+ *     {@link #MAX_MILLIS}, {@link #MIN_JULIAN}, and
+ *     {@link #MAX_JULIAN} should be used. <b>Motivation:</b> With
+ *     the addition of the {@link #JULIAN_DAY} field, Julian day
+ *     numbers must be restricted to a 32-bit <code>int</code>.  This
+ *     restricts the overall supported range. Furthermore, restricting
+ *     the supported range simplifies the computations by removing
+ *     special case code that was used to accomodate arithmetic overflow
+ *     at millis near <code>Long.MIN_VALUE</code> and
+ *     <code>Long.MAX_VALUE</code>.</li>
+ * 
+ *   <li>New fields are implemented: {@link #JULIAN_DAY} defines
+ *     single-field specification of the
+ *     date. {@link #MILLISECONDS_IN_DAY} defines a single-field
+ *     specification of the wall time. {@link #DOW_LOCAL} and
+ *     {@link #YEAR_WOY} implement localized day-of-week and
+ *     week-of-year behavior.</li>
+ * 
+ *   <li>Subclasses can access millisecond constants
+ *     {@link #ONE_SECOND}, {@link #ONE_MINUTE},
+ *     {@link #ONE_HOUR}, {@link #ONE_DAY}, and
+ *     {@link #ONE_WEEK} defined in <code>Calendar</code>.</li>
+ * 
+ *   <li>New API has been added to suport calendar-specific subclasses
+ *     of <code>DateFormat</code>.</li>
+ * 
+ *   <li>Several subclasses have been implemented, representing
+ *     various international calendar systems.</li>
+ * 
+ * </ul>
+ * 
+ * <p><big><b>Subclass API</b></big></p>
+ * 
+ * <p>The original <code>Calendar</code> API was based on the experience
+ * of implementing a only a single subclass,
+ * <code>GregorianCalendar</code>. As a result, all of the subclassing
+ * kinks had not been worked out. The new subclassing API has been
+ * refined based on several implemented subclasses. This includes methods
+ * that must be overridden and methods for subclasses to call. Subclasses
+ * no longer have direct access to <code>fields</code> and
+ * <code>stamp</code>. Instead, they have new API to access
+ * these. Subclasses are able to allocate the <code>fields</code> array
+ * through a protected framework method; this allows subclasses to
+ * specify additional fields. </p>
+ * 
+ * <p>More functionality has been moved into the base class. The base
+ * class now contains much of the computational machinery to support the
+ * Gregorian calendar. This is based on two things: (1) Many calendars
+ * are based on the Gregorian calendar (such as the Buddhist and Japanese
+ * imperial calendars). (2) <em>All</em> calendars require basic
+ * Gregorian support in order to handle timezone computations. </p>
+ * 
+ * <p>Common computations have been moved into
+ * <code>Calendar</code>. Subclasses no longer compute the week related
+ * fields and the time related fields. These are commonly handled for all
+ * calendars by the base class. </p>
+ * 
+ * <p><b>Subclass computation of time <tt>=&gt;</tt> fields</b>
+ * 
+ * <p>The {@link #ERA}, {@link #YEAR},
+ * {@link #EXTENDED_YEAR}, {@link #MONTH},
+ * {@link #DAY_OF_MONTH}, and {@link #DAY_OF_YEAR} fields are
+ * computed by the subclass, based on the Julian day. All other fields
+ * are computed by <code>Calendar</code>.
+ * 
+ * <ul>
+ * 
+ *   <li>Subclasses should implement {@link #handleComputeFields}
+ *     to compute the {@link #ERA}, {@link #YEAR},
+ *     {@link #EXTENDED_YEAR}, {@link #MONTH},
+ *     {@link #DAY_OF_MONTH}, and {@link #DAY_OF_YEAR} fields,
+ *     based on the value of the {@link #JULIAN_DAY} field. If there
+ *     are calendar-specific fields not defined by <code>Calendar</code>,
+ *     they must also be computed. These are the only fields that the
+ *     subclass should compute. All other fields are computed by the base
+ *     class, so time and week fields behave in a consistent way across
+ *     all calendars. The default version of this method in
+ *     <code>Calendar</code> implements a proleptic Gregorian
+ *     calendar. Within this method, subclasses may call
+ *     <code>getGregorianXxx()</code> to obtain the Gregorian calendar
+ *     month, day of month, and extended year for the given date.</li>
+ * 
+ * </ul>
+ * 
+ * <p><b>Subclass computation of fields <tt>=&gt;</tt> time</b>
+ * 
+ * <p>The interpretation of most field values is handled entirely by
+ * <code>Calendar</code>. <code>Calendar</code> determines which fields
+ * are set, which are not, which are set more recently, and so on. In
+ * addition, <code>Calendar</code> handles the computation of the time
+ * from the time fields and handles the week-related fields. The only
+ * thing the subclass must do is determine the extended year, based on
+ * the year fields, and then, given an extended year and a month, it must
+ * return a Julian day number.
+ * 
+ * <ul>
+ * 
+ *   <li>Subclasses should implement {@link #handleGetExtendedYear}
+ *     to return the extended year for this calendar system, based on the
+ *     {@link #YEAR}, {@link #EXTENDED_YEAR}, and any fields that
+ *     the calendar system uses that are larger than a year, such as
+ *     {@link #ERA}.</li>
+ * 
+ *   <li>Subclasses should implement {@link #handleComputeMonthStart}
+ *     to return the Julian day number
+ *     associated with a month and extended year. This is the Julian day
+ *     number of the day before the first day of the month. The month
+ *     number is zero-based. This computation should not depend on any
+ *     field values.</li>
+ * 
+ * </ul>
+ * 
+ * <p><b>Other methods</b>
+ * 
+ * <ul>
+ * 
+ *   <li>Subclasses should implement {@link #handleGetMonthLength}
+ *     to return the number of days in a
+ *     given month of a given extended year. The month number, as always,
+ *     is zero-based.</li>
+ * 
+ *   <li>Subclasses should implement {@link #handleGetYearLength}
+ *     to return the number of days in the given
+ *     extended year. This method is used by
+ *     {@link #computeWeekFields} to compute the
+ *     {@link #WEEK_OF_YEAR} and {@link #YEAR_WOY} fields.</li>
+ * 
+ *   <li>Subclasses should implement {@link #handleGetLimit}
+ *     to return the {@link #MINIMUM},
+ *     {@link #GREATEST_MINIMUM}, {@link #LEAST_MAXIMUM}, or
+ *     {@link #MAXIMUM} of a field, depending on the value of
+ *     <code>limitType</code>. This method only needs to handle the
+ *     fields {@link #ERA}, {@link #YEAR}, {@link #MONTH},
+ *     {@link #WEEK_OF_YEAR}, {@link #WEEK_OF_MONTH},
+ *     {@link #DAY_OF_MONTH}, {@link #DAY_OF_YEAR},
+ *     {@link #DAY_OF_WEEK_IN_MONTH}, {@link #YEAR_WOY}, and
+ *     {@link #EXTENDED_YEAR}.  Other fields are invariant (with
+ *     respect to calendar system) and are handled by the base
+ *     class.</li>
+ * 
+ *   <li>Optionally, subclasses may override {@link #validateField}
+ *     to check any subclass-specific fields. If the
+ *     field's value is out of range, the method should throw an
+ *     <code>IllegalArgumentException</code>. The method may call
+ *     <code>super.validateField(field)</code> to handle fields in a
+ *     generic way, that is, to compare them to the range
+ *     <code>getMinimum(field)</code>..<code>getMaximum(field)</code>.</li>
+ * 
+ *   <li>Optionally, subclasses may override
+ *     {@link #handleCreateFields} to create an <code>int[]</code>
+ *     array large enough to hold the calendar's fields. This is only
+ *     necessary if the calendar defines additional fields beyond those
+ *     defined by <code>Calendar</code>. The length of the result must be
+ *     at least {@link #BASE_FIELD_COUNT} and no more than
+ *     {@link #MAX_FIELD_COUNT}.</li>
+ * 
+ *   <li>Optionally, subclasses may override
+ *     {@link #handleGetDateFormat} to create a
+ *     <code>DateFormat</code> appropriate to this calendar. This is only
+ *     required if a calendar subclass redefines the use of a field (for
+ *     example, changes the {@link #ERA} field from a symbolic field
+ *     to a numeric one) or defines an additional field.</li>
+ * 
+ *   <li>Optionally, subclasses may override {@link #roll roll} and
+ *     {@link #add add} to handle fields that are discontinuous. For
+ *     example, in the Hebrew calendar the month &quot;Adar I&quot; only
+ *     occurs in leap years; in other years the calendar jumps from
+ *     Shevat (month #4) to Adar (month #6). The {@link
+ *     HebrewCalendar#add HebrewCalendar.add} and {@link
+ *     HebrewCalendar#roll HebrewCalendar.roll} methods take this into
+ *     account, so that adding 1 month to Shevat gives the proper result
+ *     (Adar) in a non-leap year. The protected utility method {@link
+ *     #pinField pinField} is often useful when implementing these two
+ *     methods. </li>
+ * 
+ * </ul>
+ * 
+ * <p><big><b>Normalized behavior</b></big>
+ * 
+ * <p>The behavior of certain fields has been made consistent across all
+ * calendar systems and implemented in <code>Calendar</code>.
+ * 
+ * <ul>
+ * 
+ *   <li>Time is normalized. Even though some calendar systems transition
+ *     between days at sunset or at other times, all ICU4J calendars
+ *     transition between days at <em>local zone midnight</em>.  This
+ *     allows ICU4J to centralize the time computations in
+ *     <code>Calendar</code> and to maintain basic correpsondences
+ *     between calendar systems. Affected fields: {@link #AM_PM},
+ *     {@link #HOUR}, {@link #HOUR_OF_DAY}, {@link #MINUTE},
+ *     {@link #SECOND}, {@link #MILLISECOND},
+ *     {@link #ZONE_OFFSET}, and {@link #DST_OFFSET}.</li>
+ * 
+ *   <li>DST behavior is normalized. Daylight savings time behavior is
+ *     computed the same for all calendar systems, and depends on the
+ *     value of several <code>GregorianCalendar</code> fields: the
+ *     {@link #YEAR}, {@link #MONTH}, and
+ *     {@link #DAY_OF_MONTH}. As a result, <code>Calendar</code>
+ *     always computes these fields, even for non-Gregorian calendar
+ *     systems. These fields are available to subclasses.</li>
+ * 
+ *   <li>Weeks are normalized. Although locales define the week
+ *     differently, in terms of the day on which it starts, and the
+ *     designation of week number one of a month or year, they all use a
+ *     common mechanism. Furthermore, the day of the week has a simple
+ *     and consistent definition throughout history. For example,
+ *     although the Gregorian calendar introduced a discontinuity when
+ *     first instituted, the day of week was not disrupted. For this
+ *     reason, the fields {@link #DAY_OF_WEEK}, <code>WEEK_OF_YEAR,
+ *     WEEK_OF_MONTH</code>, {@link #DAY_OF_WEEK_IN_MONTH},
+ *     {@link #DOW_LOCAL}, {@link #YEAR_WOY} are all computed in
+ *     a consistent way in the base class, based on the
+ *     {@link #EXTENDED_YEAR}, {@link #DAY_OF_YEAR},
+ *     {@link #MONTH}, and {@link #DAY_OF_MONTH}, which are
+ *     computed by the subclass.</li>
+ * 
+ * </ul>
+ * 
+ * <p><big><b>Supported range</b></big>
+ * 
+ * <p>The allowable range of <code>Calendar</code> has been
+ * narrowed. <code>GregorianCalendar</code> used to attempt to support
+ * the range of dates with millisecond values from
+ * <code>Long.MIN_VALUE</code> to <code>Long.MAX_VALUE</code>. This
+ * introduced awkward constructions (hacks) which slowed down
+ * performance. It also introduced non-uniform behavior at the
+ * boundaries. The new <code>Calendar</code> protocol specifies the
+ * maximum range of supportable dates as those having Julian day numbers
+ * of <code>-0x7F000000</code> to <code>+0x7F000000</code>. This
+ * corresponds to years from ~5,000,000 BCE to ~5,000,000 CE. Programmers
+ * should use the constants {@link #MIN_DATE} (or
+ * {@link #MIN_MILLIS} or {@link #MIN_JULIAN}) and
+ * {@link #MAX_DATE} (or {@link #MAX_MILLIS} or
+ * {@link #MAX_JULIAN}) in <code>Calendar</code> to specify an
+ * extremely early or extremely late date.</p>
+ * 
+ * <p><big><b>General notes</b></big>
+ * 
+ * <ul>
+ * 
+ *   <li>Calendars implementations are <em>proleptic</em>. For example,
+ *     even though the Gregorian calendar was not instituted until the
+ *     16th century, the <code>GregorianCalendar</code> class supports
+ *     dates before the historical onset of the calendar by extending the
+ *     calendar system backward in time. Similarly, the
+ *     <code>HebrewCalendar</code> extends backward before the start of
+ *     its epoch into zero and negative years. Subclasses do not throw
+ *     exceptions because a date precedes the historical start of a
+ *     calendar system. Instead, they implement
+ *     {@link #handleGetLimit} to return appropriate limits on
+ *     {@link #YEAR}, {@link #ERA}, etc. fields. Then, if the
+ *     calendar is set to not be lenient, out-of-range field values will
+ *     trigger and exception.</li>
+ * 
+ *   <li>Calendar system subclasses compute a <em>extended
+ *     year</em>. This differs from the {@link #YEAR} field in that
+ *     it ranges over all integer values, including zero and negative
+ *     values, and it encapsulates the information of the
+ *     {@link #YEAR} field and all larger fields.  Thus, for the
+ *     Gregorian calendar, the {@link #EXTENDED_YEAR} is computed as
+ *     <code>ERA==AD ? YEAR : 1-YEAR</code>. Another example is the Mayan
+ *     long count, which has years (<code>KUN</code>) and nested cycles
+ *     of years (<code>KATUN</code> and <code>BAKTUN</code>). The Mayan
+ *     {@link #EXTENDED_YEAR} is computed as <code>TUN + 20 * (KATUN
+ *     + 20 * BAKTUN)</code>. The <code>Calendar</code> base class uses
+ *     the {@link #EXTENDED_YEAR} field to compute the week-related
+ *     fields.</li>
+ * 
+ * </ul>
+ *
+ * @see          Date
+ * @see          GregorianCalendar
+ * @see          TimeZone
+ * @see          DateFormat
+ * @version      $Revision: 1.19 $ $Date: 2000/11/30 21:54:16 $
+ * @author Mark Davis, David Goldsmith, Chen-Lieh Huang, Alan Liu, Laura Werner
+ * @since JDK1.1
+ */
+public abstract class Calendar implements Serializable, Cloneable {
+
+    // Data flow in Calendar
+    // ---------------------
+
+    // The current time is represented in two ways by Calendar: as UTC
+    // milliseconds from the epoch start (1 January 1970 0:00 UTC), and as local
+    // fields such as MONTH, HOUR, AM_PM, etc.  It is possible to compute the
+    // millis from the fields, and vice versa.  The data needed to do this
+    // conversion is encapsulated by a TimeZone object owned by the Calendar.
+    // The data provided by the TimeZone object may also be overridden if the
+    // user sets the ZONE_OFFSET and/or DST_OFFSET fields directly. The class
+    // keeps track of what information was most recently set by the caller, and
+    // uses that to compute any other information as needed.
+
+    // If the user sets the fields using set(), the data flow is as follows.
+    // This is implemented by the Calendar subclass's computeTime() method.
+    // During this process, certain fields may be ignored.  The disambiguation
+    // algorithm for resolving which fields to pay attention to is described
+    // above.
+
+    //   local fields (YEAR, MONTH, DATE, HOUR, MINUTE, etc.)
+    //           |
+    //           | Using Calendar-specific algorithm
+    //           V
+    //   local standard millis
+    //           |
+    //           | Using TimeZone or user-set ZONE_OFFSET / DST_OFFSET
+    //           V
+    //   UTC millis (in time data member)
+
+    // If the user sets the UTC millis using setTime(), the data flow is as
+    // follows.  This is implemented by the Calendar subclass's computeFields()
+    // method.
+
+    //   UTC millis (in time data member)
+    //           |
+    //           | Using TimeZone getOffset()
+    //           V
+    //   local standard millis
+    //           |
+    //           | Using Calendar-specific algorithm
+    //           V
+    //   local fields (YEAR, MONTH, DATE, HOUR, MINUTE, etc.)
+
+    // In general, a round trip from fields, through local and UTC millis, and
+    // back out to fields is made when necessary.  This is implemented by the
+    // complete() method.  Resolving a partial set of fields into a UTC millis
+    // value allows all remaining fields to be generated from that value.  If
+    // the Calendar is lenient, the fields are also renormalized to standard
+    // ranges when they are regenerated.
+
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * era, e.g., AD or BC in the Julian calendar. This is a calendar-specific
+     * value; see subclass documentation.
+     * @see GregorianCalendar#AD
+     * @see GregorianCalendar#BC
+     */
+    public final static int ERA = 0;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * year. This is a calendar-specific value; see subclass documentation.
+     */
+    public final static int YEAR = 1;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * month. This is a calendar-specific value. The first month of the year is
+     * <code>JANUARY</code>; the last depends on the number of months in a year.
+     * @see #JANUARY
+     * @see #FEBRUARY
+     * @see #MARCH
+     * @see #APRIL
+     * @see #MAY
+     * @see #JUNE
+     * @see #JULY
+     * @see #AUGUST
+     * @see #SEPTEMBER
+     * @see #OCTOBER
+     * @see #NOVEMBER
+     * @see #DECEMBER
+     * @see #UNDECIMBER
+     */
+    public final static int MONTH = 2;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * week number within the current year.  The first week of the year, as
+     * defined by <code>getFirstDayOfWeek()</code> and
+     * <code>getMinimalDaysInFirstWeek()</code>, has value 1.  Subclasses define
+     * the value of <code>WEEK_OF_YEAR</code> for days before the first week of
+     * the year.
+     * @see #getFirstDayOfWeek
+     * @see #getMinimalDaysInFirstWeek
+     */
+    public final static int WEEK_OF_YEAR = 3;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * week number within the current month.  The first week of the month, as
+     * defined by <code>getFirstDayOfWeek()</code> and
+     * <code>getMinimalDaysInFirstWeek()</code>, has value 1.  Subclasses define
+     * the value of <code>WEEK_OF_MONTH</code> for days before the first week of
+     * the month.
+     * @see #getFirstDayOfWeek
+     * @see #getMinimalDaysInFirstWeek
+     */
+    public final static int WEEK_OF_MONTH = 4;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * day of the month. This is a synonym for <code>DAY_OF_MONTH</code>.
+     * The first day of the month has value 1.
+     * @see #DAY_OF_MONTH
+     */
+    public final static int DATE = 5;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * day of the month. This is a synonym for <code>DATE</code>.
+     * The first day of the month has value 1.
+     * @see #DATE
+     */
+    public final static int DAY_OF_MONTH = 5;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the day
+     * number within the current year.  The first day of the year has value 1.
+     */
+    public final static int DAY_OF_YEAR = 6;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the day
+     * of the week.  This field takes values <code>SUNDAY</code>,
+     * <code>MONDAY</code>, <code>TUESDAY</code>, <code>WEDNESDAY</code>,
+     * <code>THURSDAY</code>, <code>FRIDAY</code>, and <code>SATURDAY</code>.
+     * @see #SUNDAY
+     * @see #MONDAY
+     * @see #TUESDAY
+     * @see #WEDNESDAY
+     * @see #THURSDAY
+     * @see #FRIDAY
+     * @see #SATURDAY
+     */
+    public final static int DAY_OF_WEEK = 7;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * ordinal number of the day of the week within the current month. Together
+     * with the <code>DAY_OF_WEEK</code> field, this uniquely specifies a day
+     * within a month.  Unlike <code>WEEK_OF_MONTH</code> and
+     * <code>WEEK_OF_YEAR</code>, this field's value does <em>not</em> depend on
+     * <code>getFirstDayOfWeek()</code> or
+     * <code>getMinimalDaysInFirstWeek()</code>.  <code>DAY_OF_MONTH 1</code>
+     * through <code>7</code> always correspond to <code>DAY_OF_WEEK_IN_MONTH
+     * 1</code>; <code>8</code> through <code>15</code> correspond to
+     * <code>DAY_OF_WEEK_IN_MONTH 2</code>, and so on.
+     * <code>DAY_OF_WEEK_IN_MONTH 0</code> indicates the week before
+     * <code>DAY_OF_WEEK_IN_MONTH 1</code>.  Negative values count back from the
+     * end of the month, so the last Sunday of a month is specified as
+     * <code>DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1</code>.  Because
+     * negative values count backward they will usually be aligned differently
+     * within the month than positive values.  For example, if a month has 31
+     * days, <code>DAY_OF_WEEK_IN_MONTH -1</code> will overlap
+     * <code>DAY_OF_WEEK_IN_MONTH 5</code> and the end of <code>4</code>.
+     * @see #DAY_OF_WEEK
+     * @see #WEEK_OF_MONTH
+     */
+    public final static int DAY_OF_WEEK_IN_MONTH = 8;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating
+     * whether the <code>HOUR</code> is before or after noon.
+     * E.g., at 10:04:15.250 PM the <code>AM_PM</code> is <code>PM</code>.
+     * @see #AM
+     * @see #PM
+     * @see #HOUR
+     */
+    public final static int AM_PM = 9;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * hour of the morning or afternoon. <code>HOUR</code> is used for the 12-hour
+     * clock.
+     * E.g., at 10:04:15.250 PM the <code>HOUR</code> is 10.
+     * @see #AM_PM
+     * @see #HOUR_OF_DAY
+     */
+    public final static int HOUR = 10;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * hour of the day. <code>HOUR_OF_DAY</code> is used for the 24-hour clock.
+     * E.g., at 10:04:15.250 PM the <code>HOUR_OF_DAY</code> is 22.
+     * @see #HOUR
+     */
+    public final static int HOUR_OF_DAY = 11;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * minute within the hour.
+     * E.g., at 10:04:15.250 PM the <code>MINUTE</code> is 4.
+     */
+    public final static int MINUTE = 12;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * second within the minute.
+     * E.g., at 10:04:15.250 PM the <code>SECOND</code> is 15.
+     */
+    public final static int SECOND = 13;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * millisecond within the second.
+     * E.g., at 10:04:15.250 PM the <code>MILLISECOND</code> is 250.
+     */
+    public final static int MILLISECOND = 14;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * raw offset from GMT in milliseconds.
+     */
+    public final static int ZONE_OFFSET = 15;
+    /**
+     * Field number for <code>get</code> and <code>set</code> indicating the
+     * daylight savings offset in milliseconds.
+     */
+    public final static int DST_OFFSET = 16;
+
+    /**
+     * Field number for <code>get()</code> and <code>set()</code>
+     * indicating the extended year corresponding to the
+     * <code>WEEK_OF_YEAR</code> field.  This may be one greater or less
+     * than the value of <code>EXTENDED_YEAR</code>.
+     */
+    public static final int YEAR_WOY = 17;
+
+    /**
+     * Field number for <code>get()</code> and <code>set()</code>
+     * indicating the localized day of week.  This will be a value from 1
+     * to 7 inclusive, with 1 being the localized first day of the week.
+     */
+    public static final int DOW_LOCAL = 18;
+
+    /**
+     * Field number for <code>get()</code> and <code>set()</code>
+     * indicating the extended year.  This is a single number designating
+     * the year of this calendar system, encompassing all supra-year
+     * fields.  For example, for the Julian calendar system, year numbers
+     * are positive, with an era of BCE or CE.  An extended year value for
+     * the Julian calendar system assigns positive values to CE years and
+     * negative values to BCE years, with 1 BCE being year 0.
+     */
+    public static final int EXTENDED_YEAR = 19;
+
+    /**
+     * Field number for <code>get()</code> and <code>set()</code>
+     * indicating the modified Julian day number.  This is different from
+     * the conventional Julian day number in two regards.  First, it
+     * demarcates days at local zone midnight, rather than noon GMT.
+     * Second, it is a local number; that is, it depends on the local time
+     * zone.  It can be thought of as a single number that encompasses all
+     * the date-related fields.
+     */
+    public static final int JULIAN_DAY = 20;
+
+    /**
+     * Field number for <code>get()</code> and <code>set()</code>
+     * indicating the milliseconds in the day.  This ranges from 0 to
+     * 23:59:59.999 (regardless of DST).  This field behaves
+     * <em>exactly</em> like a composite of all time-related fields, not
+     * including the zone fields.  As such, it also reflects
+     * discontinuities of those fields on DST transition days.  On a day of
+     * DST onset, it will jump forward.  On a day of DST cessation, it will
+     * jump backward.  This reflects the fact that is must be combined with
+     * the DST_OFFSET field to obtain a unique local time value.
+     */
+    public static final int MILLISECONDS_IN_DAY = 21;
+    
+    /**
+     * The number of fields defined by this class.  Subclasses may define
+     * addition fields starting with this number.
+     */
+    protected static final int BASE_FIELD_COUNT = 22;
+
+    /**
+     * The maximum number of fields possible.  Subclasses must not define
+     * more total fields than this number.
+     */
+    protected static final int MAX_FIELD_COUNT = 32;
+
+    /**
+     * Value of the <code>DAY_OF_WEEK</code> field indicating
+     * Sunday.
+     */
+    public final static int SUNDAY = 1;
+    /**
+     * Value of the <code>DAY_OF_WEEK</code> field indicating
+     * Monday.
+     */
+    public final static int MONDAY = 2;
+    /**
+     * Value of the <code>DAY_OF_WEEK</code> field indicating
+     * Tuesday.
+     */
+    public final static int TUESDAY = 3;
+    /**
+     * Value of the <code>DAY_OF_WEEK</code> field indicating
+     * Wednesday.
+     */
+    public final static int WEDNESDAY = 4;
+    /**
+     * Value of the <code>DAY_OF_WEEK</code> field indicating
+     * Thursday.
+     */
+    public final static int THURSDAY = 5;
+    /**
+     * Value of the <code>DAY_OF_WEEK</code> field indicating
+     * Friday.
+     */
+    public final static int FRIDAY = 6;
+    /**
+     * Value of the <code>DAY_OF_WEEK</code> field indicating
+     * Saturday.
+     */
+    public final static int SATURDAY = 7;
+
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * first month of the year.
+     */
+    public final static int JANUARY = 0;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * second month of the year.
+     */
+    public final static int FEBRUARY = 1;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * third month of the year.
+     */
+    public final static int MARCH = 2;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * fourth month of the year.
+     */
+    public final static int APRIL = 3;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * fifth month of the year.
+     */
+    public final static int MAY = 4;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * sixth month of the year.
+     */
+    public final static int JUNE = 5;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * seventh month of the year.
+     */
+    public final static int JULY = 6;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * eighth month of the year.
+     */
+    public final static int AUGUST = 7;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * ninth month of the year.
+     */
+    public final static int SEPTEMBER = 8;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * tenth month of the year.
+     */
+    public final static int OCTOBER = 9;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * eleventh month of the year.
+     */
+    public final static int NOVEMBER = 10;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * twelfth month of the year.
+     */
+    public final static int DECEMBER = 11;
+    /**
+     * Value of the <code>MONTH</code> field indicating the
+     * thirteenth month of the year. Although <code>GregorianCalendar</code>
+     * does not use this value, lunar calendars do.
+     */
+    public final static int UNDECIMBER = 12;
+
+    /**
+     * Value of the <code>AM_PM</code> field indicating the
+     * period of the day from midnight to just before noon.
+     */
+    public final static int AM = 0;
+    /**
+     * Value of the <code>AM_PM</code> field indicating the
+     * period of the day from noon to just before midnight.
+     */
+    public final static int PM = 1;
+
+    /**
+     * Value returned by getDayOfWeekType(int dayOfWeek) to indicate a
+     * weekday.
+     * @see #WEEKEND
+     * @see #WEEKEND_ONSET
+     * @see #WEEKEND_CEASE
+     * @see #getDayOfWeekType
+     */
+    public static final int WEEKDAY = 0;
+
+    /**
+     * Value returned by getDayOfWeekType(int dayOfWeek) to indicate a
+     * weekend day.
+     * @see #WEEKDAY
+     * @see #WEEKEND_ONSET
+     * @see #WEEKEND_CEASE
+     * @see #getDayOfWeekType
+     */
+    public static final int WEEKEND = 1;
+
+    /**
+     * Value returned by getDayOfWeekType(int dayOfWeek) to indicate a
+     * day that starts as a weekday and transitions to the weekend.
+     * Call getWeekendTransition() to get the point of transition.
+     * @see #WEEKDAY
+     * @see #WEEKEND
+     * @see #WEEKEND_CEASE
+     * @see #getDayOfWeekType
+     */
+    public static final int WEEKEND_ONSET = 2;
+
+    /**
+     * Value returned by getDayOfWeekType(int dayOfWeek) to indicate a
+     * day that starts as the weekend and transitions to a weekday.
+     * Call getWeekendTransition() to get the point of transition.
+     * @see #WEEKDAY
+     * @see #WEEKEND
+     * @see #WEEKEND_ONSET
+     * @see #getDayOfWeekType
+     */
+    public static final int WEEKEND_CEASE = 3;
+
+    /**
+     * The number of milliseconds in one second.
+     */
+    protected static final int  ONE_SECOND = 1000;
+
+    /**
+     * The number of milliseconds in one minute.
+     */
+    protected static final int  ONE_MINUTE = 60*ONE_SECOND;
+
+    /**
+     * The number of milliseconds in one hour.
+     */
+    protected static final int  ONE_HOUR   = 60*ONE_MINUTE;
+
+    /**
+     * The number of milliseconds in one day.  Although ONE_DAY and
+     * ONE_WEEK can fit into ints, they must be longs in order to prevent
+     * arithmetic overflow when performing (bug 4173516).
+     */
+    protected static final long ONE_DAY    = 24*ONE_HOUR;
+
+    /**
+     * The number of milliseconds in one week.  Although ONE_DAY and
+     * ONE_WEEK can fit into ints, they must be longs in order to prevent
+     * arithmetic overflow when performing (bug 4173516).
+     */
+    protected static final long ONE_WEEK   = 7*ONE_DAY;
+
+    /**
+     * The Julian day of the Gregorian epoch, that is, January 1, 1 on the
+     * Gregorian calendar.
+     */
+    protected static final int JAN_1_1_JULIAN_DAY = 1721426;
+
+    /**
+     * The Julian day of the epoch, that is, January 1, 1970 on the
+     * Gregorian calendar.
+     */
+    protected static final int EPOCH_JULIAN_DAY   = 2440588;
+
+    /**
+     * The minimum supported Julian day.  This value is equivalent to
+     * <code>MIN_MILLIS</code> and <code>MIN_DATE</code>.
+     * @see #JULIAN_DAY
+     */
+    protected static final int MIN_JULIAN = -0x7F000000;
+
+    /**
+     * The minimum supported epoch milliseconds.  This value is equivalent
+     * to <code>MIN_JULIAN</code> and <code>MIN_DATE</code>.
+     */
+    protected static final long MIN_MILLIS = -184303902528000000L;
+    // Get around bug in jikes 1.12 for now.  Later, use:
+    //protected static final long MIN_MILLIS = (MIN_JULIAN - EPOCH_JULIAN_DAY) * ONE_DAY;
+
+    /**
+     * The minimum supported <code>Date</code>.  This value is equivalent
+     * to <code>MIN_JULIAN</code> and <code>MIN_MILLIS</code>.
+     */
+    protected static final Date MIN_DATE = new Date(MIN_MILLIS);
+
+    /**
+     * The maximum supported Julian day.  This value is equivalent to
+     * <code>MAX_MILLIS</code> and <code>MAX_DATE</code>.
+     * @see #JULIAN_DAY
+     */
+    protected static final int MAX_JULIAN = +0x7F000000;
+
+    /**
+     * The maximum supported epoch milliseconds.  This value is equivalent
+     * to <code>MAX_JULIAN</code> and <code>MAX_DATE</code>.
+     */
+    protected static final long MAX_MILLIS = (MAX_JULIAN - EPOCH_JULIAN_DAY) * ONE_DAY;
+
+    /**
+     * The maximum supported <code>Date</code>.  This value is equivalent
+     * to <code>MAX_JULIAN</code> and <code>MAX_MILLIS</code>.
+     */
+    protected static final Date MAX_DATE = new Date(MAX_MILLIS);
+
+    // Internal notes:
+    // Calendar contains two kinds of time representations: current "time" in
+    // milliseconds, and a set of time "fields" representing the current time.
+    // The two representations are usually in sync, but can get out of sync
+    // as follows.
+    // 1. Initially, no fields are set, and the time is invalid.
+    // 2. If the time is set, all fields are computed and in sync.
+    // 3. If a single field is set, the time is invalid.
+    // Recomputation of the time and fields happens when the object needs
+    // to return a result to the user, or use a result for a computation.
+
+    /**
+     * The field values for the currently set time for this calendar.
+     * This is an array of at least <code>BASE_FIELD_COUNT</code> integers.
+     * @see #handleCreateFields
+     * @serial
+     */
+    private transient int           fields[];
+
+    /**
+     * Pseudo-time-stamps which specify when each field was set. There
+     * are two special values, UNSET and INTERNALLY_SET. Values from
+     * MINIMUM_USER_SET to Integer.MAX_VALUE are legal user set values.
+     */
+    private transient int           stamp[];
+
+    /**
+     * The currently set time for this calendar, expressed in milliseconds after
+     * January 1, 1970, 0:00:00 GMT.
+     * @see #isTimeSet
+     * @serial
+     */
+    private long          time;
+
+    /**
+     * True if then the value of <code>time</code> is valid.
+     * The time is made invalid by a change to an item of <code>field[]</code>.
+     * @see #time
+     * @serial
+     */
+    private transient boolean       isTimeSet;
+
+    /**
+     * True if <code>fields[]</code> are in sync with the currently set time.
+     * If false, then the next attempt to get the value of a field will
+     * force a recomputation of all fields from the current value of
+     * <code>time</code>.
+     * @serial
+     */
+    private transient boolean       areFieldsSet;
+
+    /**
+     * True if all fields have been set.  This is only false in a few
+     * situations: In a newly created, partially constructed object.  After
+     * a call to clear().  In an object just read from a stream using
+     * readObject().  Once computeFields() has been called this is set to
+     * true and stays true until one of the above situations recurs.
+     * @serial
+     */
+    private transient boolean       areAllFieldsSet;
+
+    /**
+     * True if this calendar allows out-of-range field values during computation
+     * of <code>time</code> from <code>fields[]</code>.
+     * @see #setLenient
+     * @serial
+     */
+    private boolean         lenient = true;
+
+    /**
+     * The <code>TimeZone</code> used by this calendar. </code>Calendar</code>
+     * uses the time zone data to translate between locale and GMT time.
+     * @serial
+     */
+    private TimeZone        zone;
+
+    /**
+     * The first day of the week, with possible values <code>SUNDAY</code>,
+     * <code>MONDAY</code>, etc.  This is a locale-dependent value.
+     * @serial
+     */
+    private int             firstDayOfWeek;
+
+    /**
+     * The number of days required for the first week in a month or year,
+     * with possible values from 1 to 7.  This is a locale-dependent value.
+     * @serial
+     */
+    private int             minimalDaysInFirstWeek;
+
+    /**
+     * First day of the weekend in this calendar's locale.  Must be in
+     * the range SUNDAY...SATURDAY (1..7).  The weekend starts at
+     * weekendOnsetMillis milliseconds after midnight on that day of
+     * the week.  This value is taken from locale resource data.
+     */
+    private int weekendOnset;
+
+    /**
+     * Milliseconds after midnight at which the weekend starts on the
+     * day of the week weekendOnset.  Times that are greater than or
+     * equal to weekendOnsetMillis are considered part of the weekend.
+     * Must be in the range 0..24*60*60*1000-1.  This value is taken
+     * from locale resource data.
+     */
+    private int weekendOnsetMillis;
+
+    /**
+     * Day of the week when the weekend stops in this calendar's
+     * locale.  Must be in the range SUNDAY...SATURDAY (1..7).  The
+     * weekend stops at weekendCeaseMillis milliseconds after midnight
+     * on that day of the week.  This value is taken from locale
+     * resource data.
+     */
+    private int weekendCease;
+
+    /**
+     * Milliseconds after midnight at which the weekend stops on the
+     * day of the week weekendCease.  Times that are greater than or
+     * equal to weekendCeaseMillis are considered not to be the
+     * weekend.  Must be in the range 0..24*60*60*1000-1.  This value
+     * is taken from locale resource data.
+     */
+    private int weekendCeaseMillis;
+
+    /**
+     * Cache to hold the firstDayOfWeek and minimalDaysInFirstWeek
+     * of a Locale.
+     */
+    private static Hashtable cachedLocaleData = new Hashtable(3);
+
+    /**
+     * Value of the time stamp <code>stamp[]</code> indicating that
+     * a field has not been set since the last call to <code>clear()</code>.
+     * @see #INTERNALLY_SET
+     * @see #MINIMUM_USER_STAMP
+     */
+    protected static final int UNSET = 0;
+
+    /**
+     * Value of the time stamp <code>stamp[]</code> indicating that a field
+     * has been set via computations from the time or from other fields.
+     * @see #UNSET
+     * @see #MINIMUM_USER_STAMP
+     */
+    protected static final int INTERNALLY_SET = 1;
+
+    /**
+     * If the time stamp <code>stamp[]</code> has a value greater than or
+     * equal to <code>MINIMUM_USER_SET</code> then it has been set by the
+     * user via a call to <code>set()</code>.
+     * @see #UNSET
+     * @see #INTERNALLY_SET
+     */
+    protected static final int MINIMUM_USER_STAMP = 2;
+
+    /**
+     * The next available value for <code>stamp[]</code>, an internal array.
+     * This actually should not be written out to the stream, and will probably
+     * be removed from the stream in the near future.  In the meantime,
+     * a value of <code>MINIMUM_USER_STAMP</code> should be used.
+     * @serial
+     */
+    private transient int             nextStamp = MINIMUM_USER_STAMP;
+
+    // the internal serial version which says which version was written
+    // - 0 (default) for version up to JDK 1.1.5
+    // - 1 for version from JDK 1.1.6, which writes a correct 'time' value
+    //     as well as compatible values for other fields.  This is a
+    //     transitional format.
+    // - 2 (not implemented yet) a future version, in which fields[],
+    //     areFieldsSet, and isTimeSet become transient, and isSet[] is
+    //     removed. In JDK 1.1.6 we write a format compatible with version 2.
+    // static final int        currentSerialVersion = 1;
+    
+    /**
+     * The version of the serialized data on the stream.  Possible values:
+     * <dl>
+     * <dt><b>0</b> or not present on stream</dt>
+     * <dd>
+     * JDK 1.1.5 or earlier.
+     * </dd>
+     * <dt><b>1</b></dt>
+     * <dd>
+     * JDK 1.1.6 or later.  Writes a correct 'time' value
+     * as well as compatible values for other fields.  This is a
+     * transitional format.
+     * </dd>
+     * </dl>
+     * When streaming out this class, the most recent format
+     * and the highest allowable <code>serialVersionOnStream</code>
+     * is written.
+     * @serial
+     * @since JDK1.1.6
+     */
+    // private int             serialVersionOnStream = currentSerialVersion;
+
+    // Proclaim serialization compatibility with JDK 1.1
+    // static final long       serialVersionUID = -1807547505821590642L;
+
+    /**
+     * Bitmask for internalSet() defining which fields may legally be set
+     * by subclasses.  Any attempt to set a field not in this bitmask
+     * results in an exception, because such fields must be set by the base
+     * class.
+     */
+    private transient int internalSetMask;
+
+    /**
+     * The Gregorian year, as computed by computeGregorianFields() and
+     * returned by getGregorianYear().
+     */
+    private transient int gregorianYear;
+
+    /**
+     * The Gregorian month, as computed by computeGregorianFields() and
+     * returned by getGregorianMonth().
+     */
+    private transient int gregorianMonth;
+
+    /**
+     * The Gregorian day of the year, as computed by
+     * computeGregorianFields() and returned by getGregorianDayOfYear().
+     */
+    private transient int gregorianDayOfYear;
+
+    /**
+     * The Gregorian day of the month, as computed by
+     * computeGregorianFields() and returned by getGregorianDayOfMonth().
+     */
+    private transient int gregorianDayOfMonth;
+
+    /**
+     * Constructs a Calendar with the default time zone
+     * and locale.
+     * @see     TimeZone#getDefault
+     */
+    protected Calendar()
+    {
+        this(TimeZone.getDefault(), Locale.getDefault());
+    }
+
+    /**
+     * Constructs a calendar with the specified time zone and locale.
+     * @param zone the time zone to use
+     * @param aLocale the locale for the week data
+     */
+    protected Calendar(TimeZone zone, Locale aLocale)
+    {
+        this.zone = zone;
+        setWeekCountData(aLocale);
+        setWeekendData(aLocale);
+
+        // Allocate fields through the framework method.  Subclasses
+        // may override this to define additional fields.
+        fields = handleCreateFields();
+        if (fields == null || fields.length < BASE_FIELD_COUNT ||
+            fields.length > MAX_FIELD_COUNT) {
+            throw new IllegalArgumentException("Invalid fields[]");
+        }
+        stamp = new int[fields.length];
+        int mask = (1 << ERA) |
+            (1 << YEAR) |
+            (1 << MONTH) |
+            (1 << DAY_OF_MONTH) |
+            (1 << DAY_OF_YEAR) |
+            (1 << EXTENDED_YEAR);
+        for (int i=BASE_FIELD_COUNT; i<fields.length; ++i) {
+            mask |= (1 << i);
+        }
+        internalSetMask = mask;
+    }
+
+    /**
+     * Gets a calendar using the default time zone and locale.
+     * @return a Calendar.
+     */
+    public static synchronized Calendar getInstance()
+    {
+        return new GregorianCalendar();
+    }
+
+    /**
+     * Gets a calendar using the specified time zone and default locale.
+     * @param zone the time zone to use
+     * @return a Calendar.
+     */
+    public static synchronized Calendar getInstance(TimeZone zone)
+    {
+        return new GregorianCalendar(zone, Locale.getDefault());
+    }
+
+    /**
+     * Gets a calendar using the default time zone and specified locale.
+     * @param aLocale the locale for the week data
+     * @return a Calendar.
+     */
+    public static synchronized Calendar getInstance(Locale aLocale)
+    {
+        return new GregorianCalendar(TimeZone.getDefault(), aLocale);
+    }
+
+    /**
+     * Gets a calendar with the specified time zone and locale.
+     * @param zone the time zone to use
+     * @param aLocale the locale for the week data
+     * @return a Calendar.
+     */
+    public static synchronized Calendar getInstance(TimeZone zone,
+                                                    Locale aLocale)
+    {
+        return new GregorianCalendar(zone, aLocale);
+    }
+
+    /**
+     * Gets the list of locales for which Calendars are installed.
+     * @return the list of locales for which Calendars are installed.
+     */
+    public static synchronized Locale[] getAvailableLocales()
+    {
+        return DateFormat.getAvailableLocales();
+    }
+
+    /**
+     * Gets this Calendar's current time.
+     * @return the current time.
+     */
+    public final Date getTime() {
+        return new Date( getTimeInMillis() );
+    }
+
+    /**
+     * Sets this Calendar's current time with the given Date.
+     * <p>
+     * Note: Calling <code>setTime()</code> with
+     * <code>Date(Long.MAX_VALUE)</code> or <code>Date(Long.MIN_VALUE)</code>
+     * may yield incorrect field values from <code>get()</code>.
+     * @param date the given Date.  */
+    public final void setTime(Date date) {
+        setTimeInMillis( date.getTime() );
+    }
+
+    /**
+     * Gets this Calendar's current time as a long.
+     * @return the current time as UTC milliseconds from the epoch.
+     */
+    public long getTimeInMillis() {
+        if (!isTimeSet) updateTime();
+        return time;
+    }
+
+    /**
+     * Sets this Calendar's current time from the given long value.
+     * @param date the new time in UTC milliseconds from the epoch.
+     */
+    public void setTimeInMillis( long millis ) {
+        if (millis > MAX_MILLIS) {
+            millis = MAX_MILLIS;
+        } else if (millis < MIN_MILLIS) {
+            millis = MIN_MILLIS;
+        }
+        time = millis;
+        isTimeSet = true;
+        computeFields();
+        areFieldsSet = true;
+        areAllFieldsSet = true;
+    }
+
+    /**
+     * Gets the value for a given time field.
+     * @param field the given time field.
+     * @return the value for the given time field.
+     */
+    public final int get(int field)
+    {
+        complete();
+        return fields[field];
+    }
+
+    /**
+     * Gets the value for a given time field.  This is an internal method
+     * for subclasses that does <em>not</em> trigger any calculations.
+     * @param field the given time field.
+     * @return the value for the given time field.
+     */
+    protected final int internalGet(int field)
+    {
+        return fields[field];
+    }
+ 
+    /**
+     * Get the value for a given time field, or return the given default
+     * value if the field is not set.  This is an internal method for
+     * subclasses that does <em>not</em> trigger any calculations.
+     * @param field the given time field.
+     * @param defaultValue value to return if field is not set
+     * @return the value for the given time field of defaultValue if the
+     * field is unset
+     */
+    protected final int internalGet(int field, int defaultValue) {
+        return (stamp[field] > UNSET) ? fields[field] : defaultValue;
+    }
+
+    /**
+     * Sets the time field with the given value.
+     * @param field the given time field.
+     * @param value the value to be set for the given time field.
+     */
+    public final void set(int field, int value)
+    {
+        isTimeSet = false;
+        fields[field] = value;
+        stamp[field] = nextStamp++;
+        areFieldsSet = false;
+    }
+
+    /**
+     * Sets the values for the fields year, month, and date.
+     * Previous values of other fields are retained.  If this is not desired,
+     * call <code>clear</code> first.
+     * @param year the value used to set the YEAR time field.
+     * @param month the value used to set the MONTH time field.
+     * Month value is 0-based. e.g., 0 for January.
+     * @param date the value used to set the DATE time field.
+     */
+    public final void set(int year, int month, int date)
+    {
+        set(YEAR, year);
+        set(MONTH, month);
+        set(DATE, date);
+    }
+
+    /**
+     * Sets the values for the fields year, month, date, hour, and minute.
+     * Previous values of other fields are retained.  If this is not desired,
+     * call <code>clear</code> first.
+     * @param year the value used to set the YEAR time field.
+     * @param month the value used to set the MONTH time field.
+     * Month value is 0-based. e.g., 0 for January.
+     * @param date the value used to set the DATE time field.
+     * @param hour the value used to set the HOUR_OF_DAY time field.
+     * @param minute the value used to set the MINUTE time field.
+     */
+    public final void set(int year, int month, int date, int hour, int minute)
+    {
+        set(YEAR, year);
+        set(MONTH, month);
+        set(DATE, date);
+        set(HOUR_OF_DAY, hour);
+        set(MINUTE, minute);
+    }
+
+    /**
+     * Sets the values for the fields year, month, date, hour, minute, and second.
+     * Previous values of other fields are retained.  If this is not desired,
+     * call <code>clear</code> first.
+     * @param year the value used to set the YEAR time field.
+     * @param month the value used to set the MONTH time field.
+     * Month value is 0-based. e.g., 0 for January.
+     * @param date the value used to set the DATE time field.
+     * @param hour the value used to set the HOUR_OF_DAY time field.
+     * @param minute the value used to set the MINUTE time field.
+     * @param second the value used to set the SECOND time field.
+     */
+    public final void set(int year, int month, int date, int hour, int minute,
+                          int second)
+    {
+        set(YEAR, year);
+        set(MONTH, month);
+        set(DATE, date);
+        set(HOUR_OF_DAY, hour);
+        set(MINUTE, minute);
+        set(SECOND, second);
+    }
+
+    /**
+     * Clears the values of all the time fields.
+     */
+    public final void clear()
+    {
+        for (int i=0; i<fields.length; ++i) {
+            fields[i] = stamp[i] = 0; // UNSET == 0
+        }
+        areFieldsSet = false;
+        areAllFieldsSet = false;
+        isTimeSet = false;
+    }
+
+    /**
+     * Clears the value in the given time field.
+     * @param field the time field to be cleared.
+     */
+    public final void clear(int field)
+    {
+        fields[field] = 0;
+        stamp[field] = UNSET;
+        areFieldsSet = false;
+        areAllFieldsSet = false;
+        isTimeSet = false;
+    }
+
+    /**
+     * Determines if the given time field has a value set.
+     * @return true if the given time field has a value set; false otherwise.
+     */
+    public final boolean isSet(int field)
+    {
+        return stamp[field] != UNSET;
+    }
+
+    /**
+     * Fills in any unset fields in the time field list.
+     */
+    protected void complete()
+    {
+        if (!isTimeSet) updateTime();
+        if (!areFieldsSet) {
+            computeFields(); // fills in unset fields
+            areFieldsSet = true;
+            areAllFieldsSet = true;
+        }
+    }
+
+    /**
+     * Compares this calendar to the specified object.
+     * The result is <code>true</code> if and only if the argument is
+     * not <code>null</code> and is a <code>Calendar</code> object that
+     * represents the same calendar as this object.
+     * @param obj the object to compare with.
+     * @return <code>true</code> if the objects are the same;
+     * <code>false</code> otherwise.
+     */
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (this.getClass() != obj.getClass()) {
+            return false;
+        }
+
+        Calendar that = (Calendar) obj;
+
+        return
+            getTimeInMillis() == that.getTime().getTime() &&
+            isLenient() == that.isLenient() &&
+            getFirstDayOfWeek() == that.getFirstDayOfWeek() &&
+            getMinimalDaysInFirstWeek() == that.getMinimalDaysInFirstWeek() &&
+            getTimeZone().equals(that.getTimeZone());
+    }
+
+    /**
+     * Returns a hash code for this calendar.
+     * @return a hash code value for this object. 
+     * @since 1.2
+     */
+    public int hashCode() {
+        /* Don't include the time because (a) we don't want the hash value to
+         * move around just because a calendar is set to different times, and
+         * (b) we don't want to trigger a time computation just to get a hash.
+         * Note that it is not necessary for unequal objects to always have
+         * unequal hashes, but equal objects must have equal hashes.  */
+        return (lenient ? 1 : 0)
+            | (firstDayOfWeek << 1)
+            | (minimalDaysInFirstWeek << 4)
+            | (zone.hashCode() << 7);
+    }
+
+    /**
+     * Return the difference in milliseconds between the moment this
+     * calendar is set to and the moment the given calendar or Date object
+     * is set to.
+     */
+    private long compare(Object that) {
+        long thatMs;
+        if (that instanceof Calendar) {
+            thatMs = ((Calendar)that).getTimeInMillis();
+        } else if (that instanceof Date) {
+            thatMs = ((Date)that).getTime();
+        } else {
+            throw new IllegalArgumentException(that + "is not a Calendar or Date");
+        }
+        return getTimeInMillis() - thatMs;
+    }
+
+    /**
+     * Compares the time field records.
+     * Equivalent to comparing result of conversion to UTC.
+     * @param when the Calendar to be compared with this Calendar.
+     * @return true if the current time of this Calendar is before
+     * the time of Calendar when; false otherwise.
+     */
+    public boolean before(Object when) {
+        return compare(when) < 0;
+    }
+
+    /**
+     * Compares the time field records.
+     * Equivalent to comparing result of conversion to UTC.
+     * @param when the Calendar to be compared with this Calendar.
+     * @return true if the current time of this Calendar is after
+     * the time of Calendar when; false otherwise.
+     */
+    public boolean after(Object when) {
+        return compare(when) > 0;
+    }
+
+    /**
+     * Return the maximum value that this field could have, given the
+     * current date.  For example, with the Gregorian date February 3, 1997
+     * and the {@link #DAY_OF_MONTH DAY_OF_MONTH} field, the actual maximum
+     * is 28; for February 3, 1996 it is 29.
+     *
+     * <p>The actual maximum computation ignores smaller fields and the
+     * current value of like-sized fields.  For example, the actual maximum
+     * of the DAY_OF_YEAR or MONTH depends only on the year and supra-year
+     * fields.  The actual maximum of the DAY_OF_MONTH depends, in
+     * addition, on the MONTH field and any other fields at that
+     * granularity (such as ChineseCalendar.IS_LEAP_MONTH).  The
+     * DAY_OF_WEEK_IN_MONTH field does not depend on the current
+     * DAY_OF_WEEK; it returns the maximum for any day of week in the
+     * current month.  Likewise for the WEEK_OF_MONTH and WEEK_OF_YEAR
+     * fields.
+     * 
+     * @param field the field whose maximum is desired
+     * @return the maximum of the given field for the current date of this calendar
+     * @see #getMaximum
+     * @see #getLeastMaximum
+     */
+    public int getActualMaximum(int field) {
+        int result;
+        
+        switch (field) {
+        case DAY_OF_MONTH:
+            {
+                Calendar cal = (Calendar) clone();
+                cal.prepareGetActual(field, false);
+                result = handleGetMonthLength(cal.get(EXTENDED_YEAR), cal.get(MONTH));
+            }
+            break;
+
+        case DAY_OF_YEAR:
+            {
+                Calendar cal = (Calendar) clone();
+                cal.prepareGetActual(field, false);
+                result = handleGetYearLength(cal.get(EXTENDED_YEAR));
+            }
+            break;
+
+        case DAY_OF_WEEK:
+        case AM_PM:
+        case HOUR:
+        case HOUR_OF_DAY:
+        case MINUTE:
+        case SECOND:
+        case MILLISECOND:
+        case ZONE_OFFSET:
+        case DST_OFFSET:
+        case DOW_LOCAL:
+        case JULIAN_DAY:
+        case MILLISECONDS_IN_DAY:
+            // These fields all have fixed minima/maxima
+            result = getMaximum(field);
+            break;
+
+        default:
+            // For all other fields, do it the hard way....
+            result = getActualHelper(field, getLeastMaximum(field), getMaximum(field));
+            break;
+        }
+        return result;
+    }
+    
+    /**
+     * Return the minimum value that this field could have, given the current date.
+     * For most fields, this is the same as {@link #getMinimum getMinimum}
+     * and {@link #getGreatestMinimum getGreatestMinimum}.  However, some fields,
+     * especially those related to week number, are more complicated.
+     * <p>
+     * For example, assume {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+     * returns 4 and {@link #getFirstDayOfWeek getFirstDayOfWeek} returns SUNDAY.
+     * If the first day of the month is Sunday, Monday, Tuesday, or Wednesday
+     * there will be four or more days in the first week, so it will be week number 1,
+     * and <code>getActualMinimum(WEEK_OF_MONTH)</code> will return 1.  However,
+     * if the first of the month is a Thursday, Friday, or Saturday, there are
+     * <em>not</em> four days in that week, so it is week number 0, and 
+     * <code>getActualMinimum(WEEK_OF_MONTH)</code> will return 0.
+     * <p>
+     * @param field the field whose actual minimum value is desired.
+     * @return the minimum of the given field for the current date of this calendar
+     *
+     * @see #getMinimum
+     * @see #getGreatestMinimum
+     */
+    public int getActualMinimum(int field) {
+        int result;
+        
+        switch (field) {
+        case DAY_OF_WEEK:
+        case AM_PM:
+        case HOUR:
+        case HOUR_OF_DAY:
+        case MINUTE:
+        case SECOND:
+        case MILLISECOND:
+        case ZONE_OFFSET:
+        case DST_OFFSET:
+        case DOW_LOCAL:
+        case JULIAN_DAY:
+        case MILLISECONDS_IN_DAY:
+            // These fields all have fixed minima/maxima
+            result = getMinimum(field);
+            break;
+            
+        default:
+            // For all other fields, do it the hard way....
+            result = getActualHelper(field, getGreatestMinimum(field), getMinimum(field));
+            break;
+        }
+        return result;
+    }
+
+    /**
+     * Prepare this calendar for computing the actual minimum or maximum.
+     * This method modifies this calendar's fields; it is called on a
+     * temporary calendar.
+     *
+     * <p>Rationale: The semantics of getActualXxx() is to return the
+     * maximum or minimum value that the given field can take, taking into
+     * account other relevant fields.  In general these other fields are
+     * larger fields.  For example, when computing the actual maximum
+     * DAY_OF_MONTH, the current value of DAY_OF_MONTH itself is ignored,
+     * as is the value of any field smaller.
+     *
+     * <p>The time fields all have fixed minima and maxima, so we don't
+     * need to worry about them.  This also lets us set the
+     * MILLISECONDS_IN_DAY to zero to erase any effects the time fields
+     * might have when computing date fields.
+     *
+     * <p>DAY_OF_WEEK is adjusted specially for the WEEK_OF_MONTH and
+     * WEEK_OF_YEAR fields to ensure that they are computed correctly.
+     */
+    protected void prepareGetActual(int field, boolean isMinimum) {
+        set(MILLISECONDS_IN_DAY, 0);
+
+        switch (field) {
+        case YEAR:
+        case YEAR_WOY:
+        case EXTENDED_YEAR:
+            set(DAY_OF_YEAR, getGreatestMinimum(DAY_OF_YEAR));
+            break;
+                
+        case MONTH:
+            set(DAY_OF_MONTH, getGreatestMinimum(DAY_OF_MONTH));
+            break;
+
+        case DAY_OF_WEEK_IN_MONTH:
+            // For dowim, the maximum occurs for the DOW of the first of the
+            // month.
+            set(DAY_OF_MONTH, 1);
+            set(DAY_OF_WEEK, get(DAY_OF_WEEK)); // Make this user set
+            break;
+                
+        case WEEK_OF_MONTH:
+        case WEEK_OF_YEAR:
+            // If we're counting weeks, set the day of the week to either the
+            // first or last localized DOW.  We know the last week of a month
+            // or year will contain the first day of the week, and that the
+            // first week will contain the last DOW.
+            {
+                int dow = firstDayOfWeek;
+                if (isMinimum) {
+                    dow = (dow + 6) % 7; // set to last DOW
+                    if (dow < SUNDAY) {
+                        dow += 7;
+                    }
+                }
+                set(DAY_OF_WEEK, dow);
+            }
+            break;
+        }
+
+        // Do this last to give it the newest time stamp
+        set(field, getGreatestMinimum(field));
+    }
+
+    private int getActualHelper(int field, int startValue, int endValue) {
+
+        if (startValue == endValue) {
+            // if we know that the maximum value is always the same, just return it
+            return startValue;
+        } 
+
+        final int delta = (endValue > startValue) ? 1 : -1;
+
+        // clone the calendar so we don't mess with the real one, and set it to
+        // accept anything for the field values
+        Calendar work = (Calendar) clone();
+        work.setLenient(true);
+        work.prepareGetActual(field, delta < 0);
+        
+        // now try each value from the start to the end one by one until
+        // we get a value that normalizes to another value.  The last value that
+        // normalizes to itself is the actual maximum for the current date
+        int result = startValue;
+        do {
+            work.set(field, startValue);
+            if (work.get(field) != startValue) {
+                break;
+            } else {
+                result = startValue;
+                startValue += delta;
+            }
+        } while (result != endValue);
+
+        return result;
+    }
+    
+    /**
+     * Rolls (up/down) a single unit of time on the given field.  If the
+     * field is rolled past its maximum allowable value, it will "wrap" back
+     * to its minimum and continue rolling. For
+     * example, to roll the current date up by one day, you can call:
+     * <p>
+     * <code>roll({@link #DATE}, true)</code>
+     * <p>
+     * When rolling on the {@link #YEAR} field, it will roll the year
+     * value in the range between 1 and the value returned by calling
+     * {@link #getMaximum getMaximum}({@link #YEAR}).
+     * <p>
+     * When rolling on certain fields, the values of other fields may conflict and
+     * need to be changed.  For example, when rolling the <code>MONTH</code> field
+     * for the Gregorian date 1/31/96 upward, the <code>DAY_OF_MONTH</code> field
+     * must be adjusted so that the result is 2/29/96 rather than the invalid
+     * 2/31/96.
+     * <p>
+     * <b>Note:</b> Calling <tt>roll(field, true)</tt> N times is <em>not</em>
+     * necessarily equivalent to calling <tt>roll(field, N)</tt>.  For example,
+     * imagine that you start with the date Gregorian date January 31, 1995.  If you call
+     * <tt>roll(Calendar.MONTH, 2)</tt>, the result will be March 31, 1995.
+     * But if you call <tt>roll(Calendar.MONTH, true)</tt>, the result will be
+     * February 28, 1995.  Calling it one more time will give March 28, 1995, which
+     * is usually not the desired result.
+     * <p>
+     * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+     * than attempting to perform arithmetic operations directly on the fields
+     * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+     * to have fields with non-linear behavior, for example missing months
+     * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+     * methods will take this into account, while simple arithmetic manipulations
+     * may give invalid results.
+     * <p>
+     * @param field the calendar field to roll.
+     *
+     * @param up    indicates if the value of the specified time field is to be
+     *              rolled up or rolled down. Use <code>true</code> if rolling up,
+     *              <code>false</code> otherwise.
+     *
+     * @exception   IllegalArgumentException if the field is invalid or refers
+     *              to a field that cannot be handled by this method.
+     * @see #roll(int, int)
+     * @see #add
+     */
+    public final void roll(int field, boolean up)
+    {
+        roll(field, up ? +1 : -1);
+    }
+
+    /**
+     * Rolls (up/down) a specified amount time on the given field.  For
+     * example, to roll the current date up by three days, you can call
+     * <code>roll(Calendar.DATE, 3)</code>.  If the
+     * field is rolled past its maximum allowable value, it will "wrap" back
+     * to its minimum and continue rolling.  
+     * For example, calling <code>roll(Calendar.DATE, 10)</code>
+     * on a Gregorian calendar set to 4/25/96 will result in the date 4/5/96.
+     * <p>
+     * When rolling on certain fields, the values of other fields may conflict and
+     * need to be changed.  For example, when rolling the {@link #MONTH MONTH} field
+     * for the Gregorian date 1/31/96 by +1, the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+     * must be adjusted so that the result is 2/29/96 rather than the invalid
+     * 2/31/96.
+     * <p>
+     * The <code>com.ibm.util.Calendar</code> implementation of this method is able to roll
+     * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+     * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+     * additional fields in their overrides of <code>roll</code>.
+     * <p>
+     * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+     * than attempting to perform arithmetic operations directly on the fields
+     * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+     * to have fields with non-linear behavior, for example missing months
+     * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+     * methods will take this into account, while simple arithmetic manipulations
+     * may give invalid results.
+     * <p>
+     * <b>Subclassing:</b><br>
+     * This implementation of <code>roll</code> assumes that the behavior of the
+     * field is continuous between its minimum and maximum, which are found by
+     * calling {@link #getActualMinimum getActualMinimum} and {@link #getActualMaximum getActualMaximum}.
+     * For most such fields, simple addition, subtraction, and modulus operations
+     * are sufficient to perform the roll.  For week-related fields,
+     * the results of {@link #getFirstDayOfWeek getFirstDayOfWeek} and
+     * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} are also necessary.
+     * Subclasses can override these two methods if their values differ from the defaults.
+     * <p>
+     * Subclasses that have fields for which the assumption of continuity breaks
+     * down must overide <code>roll</code> to handle those fields specially.
+     * For example, in the Hebrew calendar the month "Adar I"
+     * only occurs in leap years; in other years the calendar jumps from
+     * Shevat (month #4) to Adar (month #6).  The 
+     * {@link HebrewCalendar#roll HebrewCalendar.roll} method takes this into account,
+     * so that rolling the month of Shevat by one gives the proper result (Adar) in a
+     * non-leap year.
+     * <p>
+     * @param field     the calendar field to roll.
+     * @param amount    the amount by which the field should be rolled.
+     *
+     * @exception   IllegalArgumentException if the field is invalid or refers
+     *              to a field that cannot be handled by this method.
+     * @see #roll(int, boolean)
+     * @see #add
+     */
+    public void roll(int field, int amount) {
+
+        if (amount == 0) {
+            return; // Nothing to do
+        }
+
+        complete();
+
+        switch (field) {
+        case DAY_OF_MONTH:
+        case AM_PM:
+        case MINUTE:
+        case SECOND:
+        case MILLISECOND:
+        case MILLISECONDS_IN_DAY:
+            // These are the standard roll instructions.  These work for all
+            // simple cases, that is, cases in which the limits are fixed, such
+            // as the hour, the day of the month, and the era.
+            {
+                int min = getActualMinimum(field);
+                int max = getActualMaximum(field);
+                int gap = max - min + 1;
+
+                int value = internalGet(field) + amount;
+                value = (value - min) % gap;
+                if (value < 0) {
+                    value += gap;
+                }
+                value += min;
+
+                set(field, value);
+                return;
+            }
+
+        case HOUR:
+        case HOUR_OF_DAY:
+            // Rolling the hour is difficult on the ONSET and CEASE days of
+            // daylight savings.  For example, if the change occurs at
+            // 2 AM, we have the following progression:
+            // ONSET: 12 Std -> 1 Std -> 3 Dst -> 4 Dst
+            // CEASE: 12 Dst -> 1 Dst -> 1 Std -> 2 Std
+            // To get around this problem we don't use fields; we manipulate
+            // the time in millis directly.
+            {
+                // Assume min == 0 in calculations below
+                long start = getTimeInMillis();
+                int oldHour = internalGet(field);
+                int max = getMaximum(field);
+                int newHour = (oldHour + amount) % (max + 1);
+                if (newHour < 0) {
+                    newHour += max + 1;
+                }
+                setTimeInMillis(start + ONE_HOUR * (newHour - oldHour));
+                return;
+            }
+
+        case MONTH:
+            // Rolling the month involves both pinning the final value
+            // and adjusting the DAY_OF_MONTH if necessary.  We only adjust the
+            // DAY_OF_MONTH if, after updating the MONTH field, it is illegal.
+            // E.g., <jan31>.roll(MONTH, 1) -> <feb28> or <feb29>.
+            {
+                int max = getActualMaximum(MONTH);
+                int mon = (internalGet(MONTH) + amount) % (max+1);
+                
+                if (mon < 0) {
+                    mon += (max + 1);
+                }
+                set(MONTH, mon);
+                
+                // Keep the day of month in range.  We don't want to spill over
+                // into the next month; e.g., we don't want jan31 + 1 mo -> feb31 ->
+                // mar3.
+                pinField(DAY_OF_MONTH);
+                return;
+            }
+
+        case YEAR:
+        case YEAR_WOY:
+        case EXTENDED_YEAR:
+            // Rolling the year can involve pinning the DAY_OF_MONTH.
+            set(field, internalGet(field) + amount);
+            pinField(MONTH);
+            pinField(DAY_OF_MONTH);
+            return;
+
+        case WEEK_OF_MONTH:
+            {
+                // This is tricky, because during the roll we may have to shift
+                // to a different day of the week.  For example:
+
+                //    s  m  t  w  r  f  s
+                //          1  2  3  4  5
+                //    6  7  8  9 10 11 12
+
+                // When rolling from the 6th or 7th back one week, we go to the
+                // 1st (assuming that the first partial week counts).  The same
+                // thing happens at the end of the month.
+
+                // The other tricky thing is that we have to figure out whether
+                // the first partial week actually counts or not, based on the
+                // minimal first days in the week.  And we have to use the
+                // correct first day of the week to delineate the week
+                // boundaries.
+
+                // Here's our algorithm.  First, we find the real boundaries of
+                // the month.  Then we discard the first partial week if it
+                // doesn't count in this locale.  Then we fill in the ends with
+                // phantom days, so that the first partial week and the last
+                // partial week are full weeks.  We then have a nice square
+                // block of weeks.  We do the usual rolling within this block,
+                // as is done elsewhere in this method.  If we wind up on one of
+                // the phantom days that we added, we recognize this and pin to
+                // the first or the last day of the month.  Easy, eh?
+
+                // Normalize the DAY_OF_WEEK so that 0 is the first day of the week
+                // in this locale.  We have dow in 0..6.
+                int dow = internalGet(DAY_OF_WEEK) - getFirstDayOfWeek();
+                if (dow < 0) dow += 7;
+
+                // Find the day of the week (normalized for locale) for the first
+                // of the month.
+                int fdm = (dow - internalGet(DAY_OF_MONTH) + 1) % 7;
+                if (fdm < 0) fdm += 7;
+
+                // Get the first day of the first full week of the month,
+                // including phantom days, if any.  Figure out if the first week
+                // counts or not; if it counts, then fill in phantom days.  If
+                // not, advance to the first real full week (skip the partial week).
+                int start;
+                if ((7 - fdm) < getMinimalDaysInFirstWeek())
+                    start = 8 - fdm; // Skip the first partial week
+                else
+                    start = 1 - fdm; // This may be zero or negative
+
+                // Get the day of the week (normalized for locale) for the last
+                // day of the month.
+                int monthLen = getActualMaximum(DAY_OF_MONTH);
+                int ldm = (monthLen - internalGet(DAY_OF_MONTH) + dow) % 7;
+                // We know monthLen >= DAY_OF_MONTH so we skip the += 7 step here.
+
+                // Get the limit day for the blocked-off rectangular month; that
+                // is, the day which is one past the last day of the month,
+                // after the month has already been filled in with phantom days
+                // to fill out the last week.  This day has a normalized DOW of 0.
+                int limit = monthLen + 7 - ldm;
+
+                // Now roll between start and (limit - 1).
+                int gap = limit - start;
+                int day_of_month = (internalGet(DAY_OF_MONTH) + amount*7 -
+                                    start) % gap;
+                if (day_of_month < 0) day_of_month += gap;
+                day_of_month += start;
+
+                // Finally, pin to the real start and end of the month.
+                if (day_of_month < 1) day_of_month = 1;
+                if (day_of_month > monthLen) day_of_month = monthLen;
+
+                // Set the DAY_OF_MONTH.  We rely on the fact that this field
+                // takes precedence over everything else (since all other fields
+                // are also set at this point).  If this fact changes (if the
+                // disambiguation algorithm changes) then we will have to unset
+                // the appropriate fields here so that DAY_OF_MONTH is attended
+                // to.
+                set(DAY_OF_MONTH, day_of_month);
+                return;
+            }
+        case WEEK_OF_YEAR:
+            {
+                // This follows the outline of WEEK_OF_MONTH, except it applies
+                // to the whole year.  Please see the comment for WEEK_OF_MONTH
+                // for general notes.
+
+                // Normalize the DAY_OF_WEEK so that 0 is the first day of the week
+                // in this locale.  We have dow in 0..6.
+                int dow = internalGet(DAY_OF_WEEK) - getFirstDayOfWeek();
+                if (dow < 0) dow += 7;
+
+                // Find the day of the week (normalized for locale) for the first
+                // of the year.
+                int fdy = (dow - internalGet(DAY_OF_YEAR) + 1) % 7;
+                if (fdy < 0) fdy += 7;
+
+                // Get the first day of the first full week of the year,
+                // including phantom days, if any.  Figure out if the first week
+                // counts or not; if it counts, then fill in phantom days.  If
+                // not, advance to the first real full week (skip the partial week).
+                int start;
+                if ((7 - fdy) < getMinimalDaysInFirstWeek())
+                    start = 8 - fdy; // Skip the first partial week
+                else
+                    start = 1 - fdy; // This may be zero or negative
+
+                // Get the day of the week (normalized for locale) for the last
+                // day of the year.
+                int yearLen = getActualMaximum(DAY_OF_YEAR);
+                int ldy = (yearLen - internalGet(DAY_OF_YEAR) + dow) % 7;
+                // We know yearLen >= DAY_OF_YEAR so we skip the += 7 step here.
+
+                // Get the limit day for the blocked-off rectangular year; that
+                // is, the day which is one past the last day of the year,
+                // after the year has already been filled in with phantom days
+                // to fill out the last week.  This day has a normalized DOW of 0.
+                int limit = yearLen + 7 - ldy;
+
+                // Now roll between start and (limit - 1).
+                int gap = limit - start;
+                int day_of_year = (internalGet(DAY_OF_YEAR) + amount*7 -
+                                    start) % gap;
+                if (day_of_year < 0) day_of_year += gap;
+                day_of_year += start;
+
+                // Finally, pin to the real start and end of the month.
+                if (day_of_year < 1) day_of_year = 1;
+                if (day_of_year > yearLen) day_of_year = yearLen;
+
+                // Make sure that the year and day of year are attended to by
+                // clearing other fields which would normally take precedence.
+                // If the disambiguation algorithm is changed, this section will
+                // have to be updated as well.
+                set(DAY_OF_YEAR, day_of_year);
+                clear(MONTH);
+                return;
+            }
+        case DAY_OF_YEAR:
+            {
+                // Roll the day of year using millis.  Compute the millis for
+                // the start of the year, and get the length of the year.
+                long delta = amount * ONE_DAY; // Scale up from days to millis
+                long min2 = time - (internalGet(DAY_OF_YEAR) - 1) * ONE_DAY;
+                int yearLength = getActualMaximum(DAY_OF_YEAR);
+                time = (time + delta - min2) % (yearLength*ONE_DAY);
+                if (time < 0) time += yearLength*ONE_DAY;
+                setTimeInMillis(time + min2);
+                return;
+            }
+        case DAY_OF_WEEK:
+        case DOW_LOCAL:
+            {
+                // Roll the day of week using millis.  Compute the millis for
+                // the start of the week, using the first day of week setting.
+                // Restrict the millis to [start, start+7days).
+                long delta = amount * ONE_DAY; // Scale up from days to millis
+                // Compute the number of days before the current day in this
+                // week.  This will be a value 0..6.
+                int leadDays = internalGet(field);
+                leadDays -= (field == DAY_OF_WEEK) ? getFirstDayOfWeek() : 1;
+                if (leadDays < 0) leadDays += 7;
+                long min2 = time - leadDays * ONE_DAY;
+                time = (time + delta - min2) % ONE_WEEK;
+                if (time < 0) time += ONE_WEEK;
+                setTimeInMillis(time + min2);
+                return;
+            }
+        case DAY_OF_WEEK_IN_MONTH:
+            {
+                // Roll the day of week in the month using millis.  Determine
+                // the first day of the week in the month, and then the last,
+                // and then roll within that range.
+                long delta = amount * ONE_WEEK; // Scale up from weeks to millis
+                // Find the number of same days of the week before this one
+                // in this month.
+                int preWeeks = (internalGet(DAY_OF_MONTH) - 1) / 7;
+                // Find the number of same days of the week after this one
+                // in this month.
+                int postWeeks = (getActualMaximum(DAY_OF_MONTH) -
+                                 internalGet(DAY_OF_MONTH)) / 7;
+                // From these compute the min and gap millis for rolling.
+                long min2 = time - preWeeks * ONE_WEEK;
+                long gap2 = ONE_WEEK * (preWeeks + postWeeks + 1); // Must add 1!
+                // Roll within this range
+                time = (time + delta - min2) % gap2;
+                if (time < 0) time += gap2;
+                setTimeInMillis(time + min2);
+                return;
+            }
+        case JULIAN_DAY:
+            set(field, internalGet(field) + amount);
+            return;
+        default:
+            // Other fields cannot be rolled by this method
+            throw new IllegalArgumentException("Calendar.roll(" + fieldName(field) +
+                                               ") not supported");
+        }
+    }
+    
+    /**
+     * Add a signed amount to a specified field, using this calendar's rules.
+     * For example, to add three days to the current date, you can call
+     * <code>add(Calendar.DATE, 3)</code>. 
+     * <p>
+     * When adding to certain fields, the values of other fields may conflict and
+     * need to be changed.  For example, when adding one to the {@link #MONTH MONTH} field
+     * for the Gregorian date 1/31/96, the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+     * must be adjusted so that the result is 2/29/96 rather than the invalid
+     * 2/31/96.
+     * <p>
+     * The <code>com.ibm.util.Calendar</code> implementation of this method is able to add to
+     * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+     * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+     * additional fields in their overrides of <code>add</code>.
+     * <p>
+     * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+     * than attempting to perform arithmetic operations directly on the fields
+     * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+     * to have fields with non-linear behavior, for example missing months
+     * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+     * methods will take this into account, while simple arithmetic manipulations
+     * may give invalid results.
+     * <p>
+     * <b>Subclassing:</b><br>
+     * This implementation of <code>add</code> assumes that the behavior of the
+     * field is continuous between its minimum and maximum, which are found by
+     * calling {@link #getActualMinimum getActualMinimum} and
+     * {@link #getActualMaximum getActualMaximum}.
+     * For such fields, simple arithmetic operations are sufficient to
+     * perform the add.
+     * <p>
+     * Subclasses that have fields for which this assumption of continuity breaks
+     * down must overide <code>add</code> to handle those fields specially.
+     * For example, in the Hebrew calendar the month "Adar I"
+     * only occurs in leap years; in other years the calendar jumps from
+     * Shevat (month #4) to Adar (month #6).  The 
+     * {@link HebrewCalendar#add HebrewCalendar.add} method takes this into account,
+     * so that adding one month
+     * to a date in Shevat gives the proper result (Adar) in a non-leap year.
+     * <p>
+     * @param field     the time field.
+     * @param amount    the amount to add to the field.
+     *
+     * @exception   IllegalArgumentException if the field is invalid or refers
+     *              to a field that cannot be handled by this method.
+     * @see #roll(int, int)
+     */
+    public void add(int field, int amount) {
+
+        if (amount == 0) {
+            return;   // Do nothing!
+        }
+
+        // We handle most fields in the same way.  The algorithm is to add
+        // a computed amount of millis to the current millis.  The only
+        // wrinkle is with DST -- for some fields, like the DAY_OF_MONTH,
+        // we don't want the HOUR to shift due to changes in DST.  If the
+        // result of the add operation is to move from DST to Standard, or
+        // vice versa, we need to adjust by an hour forward or back,
+        // respectively.  For such fields we set keepHourInvariant to true.
+        
+        // We only adjust the DST for fields larger than an hour.  For
+        // fields smaller than an hour, we cannot adjust for DST without
+        // causing problems.  for instance, if you add one hour to April 5,
+        // 1998, 1:00 AM, in PST, the time becomes "2:00 AM PDT" (an
+        // illegal value), but then the adjustment sees the change and
+        // compensates by subtracting an hour.  As a result the time
+        // doesn't advance at all.
+
+        // For some fields larger than a day, such as a MONTH, we pin the
+        // DAY_OF_MONTH.  This allows <March 31>.add(MONTH, 1) to be
+        // <April 30>, rather than <April 31> => <May 1>.
+
+        long delta = amount; // delta in ms
+        boolean keepHourInvariant = true;
+
+        switch (field) {
+        case YEAR:
+        case EXTENDED_YEAR:
+        case YEAR_WOY:
+        case MONTH:
+            set(field, get(field) + amount);
+            pinField(DAY_OF_MONTH);
+            return;
+            
+        case WEEK_OF_YEAR:
+        case WEEK_OF_MONTH:
+        case DAY_OF_WEEK_IN_MONTH:
+            delta *= ONE_WEEK;
+            break;
+
+        case AM_PM:
+            delta *= 12 * ONE_HOUR;
+            break;
+
+        case DAY_OF_MONTH:
+        case DAY_OF_YEAR:
+        case DAY_OF_WEEK:
+        case DOW_LOCAL:
+        case JULIAN_DAY:
+            delta *= ONE_DAY;
+            break;
+
+        case HOUR_OF_DAY:
+        case HOUR:
+            delta *= ONE_HOUR;
+            keepHourInvariant = false;
+            break;
+
+        case MINUTE:
+            delta *= ONE_MINUTE;
+            keepHourInvariant = false;
+            break;
+
+        case SECOND:
+            delta *= ONE_SECOND;
+            keepHourInvariant = false;
+            break;
+
+        case MILLISECOND:
+        case MILLISECONDS_IN_DAY:
+            keepHourInvariant = false;
+            break;
+
+        default:
+            throw new IllegalArgumentException("Calendar.add(" + fieldName(field) +
+                                               ") not supported");
+        }
+
+        // In order to keep the hour invariant (for fields where this is
+        // appropriate), record the DST_OFFSET before and after the add()
+        // operation.  If it has changed, then adjust the millis to
+        // compensate.
+        int dst = 0;
+        if (keepHourInvariant) {
+            dst = get(DST_OFFSET);
+        }
+
+        setTimeInMillis(getTimeInMillis() + delta);
+
+        if (keepHourInvariant) {
+            dst -= get(DST_OFFSET);
+            if (dst != 0) {
+                setTimeInMillis(time + dst);
+            }
+        }
+    }
+    
+    /**
+     * Return the name of this calendar in the language of the given locale.
+     */
+    public String getDisplayName(Locale loc) {
+        return this.getClass().getName();
+    }
+    
+    //-------------------------------------------------------------------------
+    // Interface for creating custon DateFormats for different types of Calendars
+    //-------------------------------------------------------------------------
+
+    /**
+     * Return a <code>DateFormat</code> appropriate to this calendar.
+     * Subclasses wishing to specialize this behavior should override
+     * <code>handleGetDateFormat()</code>
+     * @see #handleGetDateFormat
+     */
+    public DateFormat getDateTimeFormat(int dateStyle, int timeStyle, Locale loc) {
+        return formatHelper(this, loc, dateStyle, timeStyle);
+    }
+
+    /**
+     * Create a <code>DateFormat</code> appropriate to this calendar.
+     * This is a framework method for subclasses to override.  This method
+     * is responsible for creating the calendar-specific DateFormat and
+     * DateFormatSymbols objects as needed.
+     * @param pattern the pattern, specific to the <code>DateFormat</code>
+     * subclass
+     * @param locale the locale for which the symbols should be drawn
+     * @return a <code>DateFormat</code> appropriate to this calendar
+     */
+    protected DateFormat handleGetDateFormat(String pattern, Locale locale) {
+        DateFormatSymbols symbols = new DateFormatSymbols(this, locale);
+        return new SimpleDateFormat(pattern, symbols);
+    }
+    
+    static private DateFormat formatHelper(Calendar cal, Locale loc,
+                                            int dateStyle, int timeStyle)
+    {
+        // See if there are any custom resources for this calendar
+        // If not, just use the default DateFormat
+        DateFormat result = null;
+
+        ResourceBundle bundle = DateFormatSymbols.getDateFormatBundle(cal, loc);
+
+        if (bundle != null) {
+
+            try {
+                String[] patterns = bundle.getStringArray("DateTimePatterns");
+
+                String pattern = null;
+                if ((timeStyle >= 0) && (dateStyle >= 0)) {
+                    Object[] dateTimeArgs = { patterns[timeStyle],
+                                              patterns[dateStyle + 4] };
+                    pattern = MessageFormat.format(patterns[8], dateTimeArgs);
+                }
+                else if (timeStyle >= 0) {
+                    pattern = patterns[timeStyle];
+                }
+                else if (dateStyle >= 0) {
+                    pattern = patterns[dateStyle + 4];
+                }
+                else {
+                    throw new IllegalArgumentException("No date or time style specified");
+                }
+                result = cal.handleGetDateFormat(pattern, loc);
+            } catch (MissingResourceException e) {
+                // No custom patterns
+                result = DateFormat.getDateTimeInstance(dateStyle, timeStyle, loc);
+                DateFormatSymbols symbols = new DateFormatSymbols(cal, loc);
+                ((SimpleDateFormat) result).setDateFormatSymbols(symbols); // aliu
+            }
+        } else {
+            result = SimpleDateFormat.getDateTimeInstance(dateStyle, timeStyle, loc);
+        }
+        result.setCalendar(cal);
+        return result;
+    }
+
+    //-------------------------------------------------------------------------
+    // Protected utility methods for use by subclasses.  These are very handy
+    // for implementing add, roll, and computeFields.
+    //-------------------------------------------------------------------------
+    
+    /**
+     * Adjust the specified field so that it is within
+     * the allowable range for the date to which this calendar is set.
+     * For example, in a Gregorian calendar pinning the {@link #DAY_OF_MONTH DAY_OF_MONTH}
+     * field for a calendar set to April 31 would cause it to be set
+     * to April 30.
+     * <p>
+     * <b>Subclassing:</b>
+     * <br>
+     * This utility method is intended for use by subclasses that need to implement
+     * their own overrides of {@link #roll roll} and {@link #add add}.
+     * <p>
+     * <b>Note:</b>
+     * <code>pinField</code> is implemented in terms of
+     * {@link #getActualMinimum getActualMinimum}
+     * and {@link #getActualMaximum getActualMaximum}.  If either of those methods uses
+     * a slow, iterative algorithm for a particular field, it would be
+     * unwise to attempt to call <code>pinField</code> for that field.  If you
+     * really do need to do so, you should override this method to do
+     * something more efficient for that field.
+     * <p>
+     * @param field The calendar field whose value should be pinned.
+     *
+     * @see #getActualMinimum
+     * @see #getActualMaximum
+     */
+    protected void pinField(int field) {
+        int max = getActualMaximum(field);
+        int min = getActualMinimum(field);
+        
+        if (fields[field] > max) {
+            set(field, max);
+        } else if (fields[field] < min) {
+            set(field, min);
+        }
+    }
+
+    /**
+     * Return the week number of a day, within a period. This may be the week number in
+     * a year or the week number in a month. Usually this will be a value >= 1, but if
+     * some initial days of the period are excluded from week 1, because
+     * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1, then 
+     * the week number will be zero for those
+     * initial days. This method requires the day number and day of week for some
+     * known date in the period in order to determine the day of week 
+     * on the desired day.
+     * <p>
+     * <b>Subclassing:</b>
+     * <br>
+     * This method is intended for use by subclasses in implementing their
+     * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
+     * It is often useful in {@link #getActualMinimum getActualMinimum} and
+     * {@link #getActualMaximum getActualMaximum} as well.
+     * <p>
+     * This variant is handy for computing the week number of some other
+     * day of a period (often the first or last day of the period) when its day
+     * of the week is not known but the day number and day of week for some other
+     * day in the period (e.g. the current date) <em>is</em> known.
+     * <p>
+     * @param desiredDay    The {@link #DAY_OF_YEAR DAY_OF_YEAR} or
+     *              {@link #DAY_OF_MONTH DAY_OF_MONTH} whose week number is desired.
+     *              Should be 1 for the first day of the period.
+     *
+     * @param knownDayOfPeriod   The {@link #DAY_OF_YEAR DAY_OF_YEAR}
+     *              or {@link #DAY_OF_MONTH DAY_OF_MONTH} for a day in the period whose
+     *              {@link #DAY_OF_WEEK DAY_OF_WEEK} is specified by the
+     *              <code>knownDayOfWeek</code> parameter.
+     *              Should be 1 for first day of period.
+     *
+     * @param knownDayOfWeek  The {@link #DAY_OF_WEEK DAY_OF_WEEK} for the day
+     *              corresponding to the <code>knownDayOfPeriod</code> parameter.
+     *              1-based with 1=Sunday.
+     *
+     * @return      The week number (one-based), or zero if the day falls before
+     *              the first week because
+     *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+     *              is more than one.
+     */
+    protected int weekNumber(int desiredDay, int dayOfPeriod, int dayOfWeek)
+    {
+        // Determine the day of the week of the first day of the period
+        // in question (either a year or a month).  Zero represents the
+        // first day of the week on this calendar.
+        int periodStartDayOfWeek = (dayOfWeek - getFirstDayOfWeek() - dayOfPeriod + 1) % 7;
+        if (periodStartDayOfWeek < 0) periodStartDayOfWeek += 7;
+
+        // Compute the week number.  Initially, ignore the first week, which
+        // may be fractional (or may not be).  We add periodStartDayOfWeek in
+        // order to fill out the first week, if it is fractional.
+        int weekNo = (desiredDay + periodStartDayOfWeek - 1)/7;
+
+        // If the first week is long enough, then count it.  If
+        // the minimal days in the first week is one, or if the period start
+        // is zero, we always increment weekNo.
+        if ((7 - periodStartDayOfWeek) >= getMinimalDaysInFirstWeek()) ++weekNo;
+
+        return weekNo;
+    }
+
+    /**
+     * Return the week number of a day, within a period. This may be the week number in
+     * a year, or the week number in a month. Usually this will be a value >= 1, but if
+     * some initial days of the period are excluded from week 1, because
+     * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1,
+     * then the week number will be zero for those
+     * initial days. This method requires the day of week for the given date in order to 
+     * determine the result.
+     * <p>
+     * <b>Subclassing:</b>
+     * <br>
+     * This method is intended for use by subclasses in implementing their
+     * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
+     * It is often useful in {@link #getActualMinimum getActualMinimum} and
+     * {@link #getActualMaximum getActualMaximum} as well.
+     * <p>
+     * @param dayOfPeriod   The {@link #DAY_OF_YEAR DAY_OF_YEAR} or
+     *                      {@link #DAY_OF_MONTH DAY_OF_MONTH} whose week number is desired.
+     *                      Should be 1 for the first day of the period.
+     *
+     * @param dayofWeek     The {@link #DAY_OF_WEEK DAY_OF_WEEK} for the day
+     *                      corresponding to the <code>dayOfPeriod</code> parameter.
+     *                      1-based with 1=Sunday.
+     *
+     * @return      The week number (one-based), or zero if the day falls before
+     *              the first week because
+     *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+     *              is more than one.
+     */
+    protected final int weekNumber(int dayOfPeriod, int dayOfWeek)
+    {
+        return weekNumber(dayOfPeriod, dayOfPeriod, dayOfWeek);
+    }
+
+    //-------------------------------------------------------------------------
+    // Constants
+    //-------------------------------------------------------------------------
+    
+    /**
+     * [NEW]
+     * Return the difference between the given time and the time this
+     * calendar object is set to.  If this calendar is set
+     * <em>before</em> the given time, the returned value will be
+     * positive.  If this calendar is set <em>after</em> the given
+     * time, the returned value will be negative.  The
+     * <code>field</code> parameter specifies the units of the return
+     * value.  For example, if <code>fieldDifference(when,
+     * Calendar.MONTH)</code> returns 3, then this calendar is set to
+     * 3 months before <code>when</code>, and possibly some addition
+     * time less than one month.
+     *
+     * <p>As a side effect of this call, this calendar is advanced
+     * toward <code>when</code> by the given amount.  That is, calling
+     * this method has the side effect of calling <code>add(field,
+     * n)</code>, where <code>n</code> is the return value.
+     *
+     * <p>Usage: To use this method, call it first with the largest
+     * field of interest, then with progressively smaller fields.  For
+     * example:
+     *
+     * <pre>
+     * int y = cal.fieldDifference(when, Calendar.YEAR);
+     * int m = cal.fieldDifference(when, Calendar.MONTH);
+     * int d = cal.fieldDifference(when, Calendar.DATE);</pre>
+     *
+     * computes the difference between <code>cal</code> and
+     * <code>when</code> in years, months, and days.
+     *
+     * <p>Note: <code>fieldDifference()</code> is
+     * <em>asymmetrical</em>.  That is, in the following code:
+     *
+     * <pre>
+     * cal.setTime(date1);
+     * int m1 = cal.fieldDifference(date2, Calendar.MONTH);
+     * int d1 = cal.fieldDifference(date2, Calendar.DATE);
+     * cal.setTime(date2);
+     * int m2 = cal.fieldDifference(date1, Calendar.MONTH);
+     * int d2 = cal.fieldDifference(date1, Calendar.DATE);</pre>
+     *
+     * one might expect that <code>m1 == -m2 && d1 == -d2</code>.
+     * However, this is not generally the case, because of
+     * irregularities in the underlying calendar system (e.g., the
+     * Gregorian calendar has a varying number of days per month).
+     *
+     * @param when the date to compare this calendar's time to
+     * @param field the field in which to compute the result
+     * @return the difference, either positive or negative, between
+     * this calendar's time and <code>when</code>, in terms of
+     * <code>field</code>.
+     */
+    public int fieldDifference(Date when, int field) {
+        int result = 0;
+        long targetMs = when.getTime();
+        long ms = getTimeInMillis();
+        if (ms < targetMs) {
+            for (;;) {
+                add(field, 1);
+                long newMs = getTimeInMillis();
+                if (newMs > targetMs) {
+                    setTimeInMillis(ms);
+                    break;
+                }
+                ms = newMs;
+                ++result;
+            }
+        } else if (ms > targetMs) {
+            for (;;) {
+                add(field, -1);
+                long newMs = getTimeInMillis();
+                if (newMs < targetMs) {
+                    setTimeInMillis(ms);
+                    break;
+                }
+                ms = newMs;
+                --result;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Sets the time zone with the given time zone value.
+     * @param value the given time zone.
+     */
+    public void setTimeZone(TimeZone value)
+    {
+        zone = value;
+        /* Recompute the fields from the time using the new zone.  This also
+         * works if isTimeSet is false (after a call to set()).  In that case
+         * the time will be computed from the fields using the new zone, then
+         * the fields will get recomputed from that.  Consider the sequence of
+         * calls: cal.setTimeZone(EST); cal.set(HOUR, 1); cal.setTimeZone(PST).
+         * Is cal set to 1 o'clock EST or 1 o'clock PST?  Answer: PST.  More
+         * generally, a call to setTimeZone() affects calls to set() BEFORE AND
+         * AFTER it up to the next call to complete().
+         */
+        areFieldsSet = false;
+    }
+
+    /**
+     * Gets the time zone.
+     * @return the time zone object associated with this calendar.
+     */
+    public TimeZone getTimeZone()
+    {
+        return zone;
+    }
+
+    /**
+     * Specify whether or not date/time interpretation is to be lenient.  With
+     * lenient interpretation, a date such as "February 942, 1996" will be
+     * treated as being equivalent to the 941st day after February 1, 1996.
+     * With strict interpretation, such dates will cause an exception to be
+     * thrown.
+     *
+     * @see DateFormat#setLenient
+     */
+    public void setLenient(boolean lenient)
+    {
+        this.lenient = lenient;
+    }
+
+    /**
+     * Tell whether date/time interpretation is to be lenient.
+     */
+    public boolean isLenient()
+    {
+        return lenient;
+    }
+
+    /**
+     * Sets what the first day of the week is; e.g., Sunday in US,
+     * Monday in France.
+     * @param value the given first day of the week.
+     */
+    public void setFirstDayOfWeek(int value)
+    {
+        firstDayOfWeek = value;
+    }
+
+    /**
+     * Gets what the first day of the week is; e.g., Sunday in US,
+     * Monday in France.
+     * @return the first day of the week.
+     */
+    public int getFirstDayOfWeek()
+    {
+        return firstDayOfWeek;
+    }
+
+    /**
+     * Sets what the minimal days required in the first week of the year are.
+     * For example, if the first week is defined as one that contains the first
+     * day of the first month of a year, call the method with value 1. If it
+     * must be a full week, use value 7.
+     * @param value the given minimal days required in the first week
+     * of the year.
+     */
+    public void setMinimalDaysInFirstWeek(int value)
+    {
+        minimalDaysInFirstWeek = value;
+    }
+
+    /**
+     * Gets what the minimal days required in the first week of the year are;
+     * e.g., if the first week is defined as one that contains the first day
+     * of the first month of a year, getMinimalDaysInFirstWeek returns 1. If
+     * the minimal days required must be a full week, getMinimalDaysInFirstWeek
+     * returns 7.
+     * @return the minimal days required in the first week of the year.
+     */
+    public int getMinimalDaysInFirstWeek()
+    {
+        return minimalDaysInFirstWeek;
+    }
+
+    private static final int LIMITS[][] = {
+        //    Minimum  Greatest min      Least max   Greatest max
+        {/*                                                      */}, // ERA
+        {/*                                                      */}, // YEAR
+        {/*                                                      */}, // MONTH
+        {/*                                                      */}, // WEEK_OF_YEAR
+        {/*                                                      */}, // WEEK_OF_MONTH
+        {/*                                                      */}, // DAY_OF_MONTH
+        {/*                                                      */}, // DAY_OF_YEAR
+        {           1,            1,             7,             7  }, // DAY_OF_WEEK
+        {/*                                                      */}, // DAY_OF_WEEK_IN_MONTH
+        {           0,            0,             1,             1  }, // AM_PM
+        {           0,            0,            11,            11  }, // HOUR
+        {           0,            0,            23,            23  }, // HOUR_OF_DAY
+        {           0,            0,            59,            59  }, // MINUTE
+        {           0,            0,            59,            59  }, // SECOND
+        {           0,            0,           999,           999  }, // MILLISECOND
+        {-12*ONE_HOUR, -12*ONE_HOUR,   12*ONE_HOUR,   12*ONE_HOUR  }, // ZONE_OFFSET
+        {           0,            0,    1*ONE_HOUR,    1*ONE_HOUR  }, // DST_OFFSET
+        {/*                                                      */}, // YEAR_WOY
+        {           1,            1,             7,             7  }, // DOW_LOCAL
+        {/*                                                      */}, // EXTENDED_YEAR
+        { -0x7F000000,  -0x7F000000,    0x7F000000,    0x7F000000  }, // JULIAN_DAY
+        {           0,            0, 24*ONE_HOUR-1, 24*ONE_HOUR-1  }, // MILLISECONDS_IN_DAY
+    };
+
+    /**
+     * Subclasses must implement this method to return limits for the
+     * following fields:
+     *
+     * <pre>ERA
+     * YEAR
+     * MONTH
+     * WEEK_OF_YEAR
+     * WEEK_OF_MONTH
+     * DAY_OF_MONTH
+     * DAY_OF_YEAR
+     * DAY_OF_WEEK_IN_MONTH
+     * YEAR_WOY
+     * EXTENDED_YEAR</pre>
+     *
+     * @param field one of the above field numbers
+     * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>,
+     * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
+     */
+    abstract protected int handleGetLimit(int field, int limitType);
+
+    /**
+     * Return a limit for a field.
+     * @param field the field, from 0..</code>getFieldCount()-1</code>
+     * @param limitType the type specifier for the limit
+     * @see #MINIMUM
+     * @see #GREATEST_MINIMUM
+     * @see #LEAST_MAXIMUM
+     * @see #MAXIMUM
+     */
+    protected int getLimit(int field, int limitType) {
+        switch (field) {
+        case DAY_OF_WEEK:
+        case AM_PM:
+        case HOUR:
+        case HOUR_OF_DAY:
+        case MINUTE:
+        case SECOND:
+        case MILLISECOND:
+        case ZONE_OFFSET:
+        case DST_OFFSET:
+        case DOW_LOCAL:
+        case JULIAN_DAY:
+        case MILLISECONDS_IN_DAY:
+            return LIMITS[field][limitType];
+        }
+        return handleGetLimit(field, limitType);
+    }
+
+    /**
+     * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+     * indicating the minimum value that a field can take (least minimum).
+     * @see #getLimit
+     * @see #handleGetLimit
+     */
+    protected static final int MINIMUM = 0;
+
+    /**
+     * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+     * indicating the greatest minimum value that a field can take.
+     * @see #getLimit
+     * @see #handleGetLimit
+     */
+    protected static final int GREATEST_MINIMUM = 1;
+
+    /**
+     * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+     * indicating the least maximum value that a field can take.
+     * @see #getLimit
+     * @see #handleGetLimit
+     */
+    protected static final int LEAST_MAXIMUM = 2;
+
+    /**
+     * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+     * indicating the maximum value that a field can take (greatest maximum).
+     * @see #getLimit
+     * @see #handleGetLimit
+     */
+    protected static final int MAXIMUM = 3;
+
+    /**
+     * Gets the minimum value for the given time field.
+     * e.g., for Gregorian DAY_OF_MONTH, 1.
+     * @param field the given time field.
+     * @return the minimum value for the given time field.
+     */
+    public final int getMinimum(int field) {
+        return getLimit(field, MINIMUM);
+    }
+
+    /**
+     * Gets the maximum value for the given time field.
+     * e.g. for Gregorian DAY_OF_MONTH, 31.
+     * @param field the given time field.
+     * @return the maximum value for the given time field.
+     */
+    public final int getMaximum(int field) {
+        return getLimit(field, MAXIMUM);
+    }
+
+    /**
+     * Gets the highest minimum value for the given field if varies.
+     * Otherwise same as getMinimum(). For Gregorian, no difference.
+     * @param field the given time field.
+     * @return the highest minimum value for the given time field.
+     */
+    public final int getGreatestMinimum(int field) {
+        return getLimit(field, GREATEST_MINIMUM);
+    }
+
+    /**
+     * Gets the lowest maximum value for the given field if varies.
+     * Otherwise same as getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.
+     * @param field the given time field.
+     * @return the lowest maximum value for the given time field.
+     */
+    public final int getLeastMaximum(int field) {
+        return getLimit(field, LEAST_MAXIMUM);
+    }
+
+    //-------------------------------------------------------------------------
+    // Weekend support -- determining which days of the week are the weekend
+    // in a given locale
+    //-------------------------------------------------------------------------
+
+    /**
+     * Return whether the given day of the week is a weekday, a
+     * weekend day, or a day that transitions from one to the other,
+     * in this calendar system.  If a transition occurs at midnight,
+     * then the days before and after the transition will have the
+     * type WEEKDAY or WEEKEND.  If a transition occurs at a time
+     * other than midnight, then the day of the transition will have
+     * the type WEEKEND_ONSET or WEEKEND_CEASE.  In this case, the
+     * method getWeekendTransition() will return the point of
+     * transition.
+     * @param dayOfWeek either SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
+     * THURSDAY, FRIDAY, or SATURDAY
+     * @return either WEEKDAY, WEEKEND, WEEKEND_ONSET, or
+     * WEEKEND_CEASE
+     * @exception IllegalArgumentException if dayOfWeek is not
+     * between SUNDAY and SATURDAY, inclusive
+     * @see #WEEKDAY
+     * @see #WEEKEND
+     * @see #WEEKEND_ONSET
+     * @see #WEEKEND_CEASE
+     * @see #getWeekendTransition
+     * @see #isWeekend(Date)
+     * @see #isWeekend()
+     */
+    public int getDayOfWeekType(int dayOfWeek) {
+        if (dayOfWeek < SUNDAY || dayOfWeek > SATURDAY) {
+            throw new IllegalArgumentException("Invalid day of week");
+        }
+        if (weekendOnset < weekendCease) {
+            if (dayOfWeek < weekendOnset || dayOfWeek > weekendCease) {
+                return WEEKDAY;
+            }
+        } else {
+            if (dayOfWeek > weekendCease && dayOfWeek < weekendOnset) {
+                return WEEKDAY;
+            }
+        } 
+        if (dayOfWeek == weekendOnset) {
+            return (weekendOnsetMillis == 0) ? WEEKEND : WEEKEND_ONSET;
+        }
+        if (dayOfWeek == weekendCease) {
+            return (weekendCeaseMillis == 0) ? WEEKDAY : WEEKEND_CEASE;
+        }
+        return WEEKEND;
+    }
+
+    /**
+     * Return the time during the day at which the weekend begins or end in
+     * this calendar system.  If getDayOfWeekType(dayOfWeek) ==
+     * WEEKEND_ONSET return the time at which the weekend begins.  If
+     * getDayOfWeekType(dayOfWeek) == WEEKEND_CEASE return the time at
+     * which the weekend ends.  If getDayOfWeekType(dayOfWeek) has some
+     * other value, then throw an exception.
+     * @param dayOfWeek either SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
+     * THURSDAY, FRIDAY, or SATURDAY
+     * @return the milliseconds after midnight at which the
+     * weekend begins or ends
+     * @exception IllegalArgumentException if dayOfWeek is not
+     * WEEKEND_ONSET or WEEKEND_CEASE
+     * @see #getDayOfWeekType
+     * @see #isWeekend(Date)
+     * @see #isWeekend()
+     */
+    public int getWeekendTransition(int dayOfWeek) {
+        if (dayOfWeek == weekendOnset) {
+            return weekendOnsetMillis;
+        } else if (dayOfWeek == weekendCease) {
+            return weekendCeaseMillis;
+        }
+        throw new IllegalArgumentException("Not weekend transition day");
+    }
+
+    /**
+     * Return true if the given date and time is in the weekend in
+     * this calendar system.  Equivalent to calling setTime() followed
+     * by isWeekend().  Note: This method changes the time this
+     * calendar is set to.
+     * @param date the date and time
+     * @return true if the given date and time is part of the
+     * weekend
+     * @see #getDayOfWeekType
+     * @see #getWeekendTransition
+     * @see #isWeekend()
+     */
+    public boolean isWeekend(Date date) {
+        setTime(date);
+        return isWeekend();
+    }
+
+    /**
+     * Return true if this Calendar's current date and time is in the
+     * weekend in this calendar system.
+     * @return true if the given date and time is part of the
+     * weekend
+     * @see #getDayOfWeekType
+     * @see #getWeekendTransition
+     * @see #isWeekend(Date)
+     */
+    public boolean isWeekend() {
+        int dow =  get(DAY_OF_WEEK);
+        int dowt = getDayOfWeekType(dow);
+        switch (dowt) {
+        case WEEKDAY:
+            return false;
+        case WEEKEND:
+            return true;
+        default: // That is, WEEKEND_ONSET or WEEKEND_CEASE
+            // Use internalGet() because the above call to get() populated
+            // all fields.
+            // [Note: There should be a better way to get millis in day.
+            //  For ICU4J, submit request for a MILLIS_IN_DAY field
+            //  and a DAY_NUMBER field (could be Julian day #). - aliu]
+            int millisInDay = internalGet(MILLISECOND) + 1000 * (internalGet(SECOND) +
+                60 * (internalGet(MINUTE) + 60 * internalGet(HOUR_OF_DAY)));
+            int transition = getWeekendTransition(dow);
+            return (dowt == WEEKEND_ONSET)
+                ? (millisInDay >= transition)
+                : (millisInDay <  transition);
+        }
+        // (We can never reach this point.)
+    }
+
+    /**
+     * Read the locale weekend data for the given locale.
+     *
+     * This is the initial placement and format of this data -- it may very
+     * well change in the future.  See the locale files themselves for
+     * details.
+     */
+    private void setWeekendData(Locale loc) {
+        ResourceBundle resource =
+            ResourceBundle.getBundle("com.ibm.util.resources.CalendarData",
+                                     loc);
+        String[] data = resource.getStringArray("Weekend");
+        weekendOnset       = Integer.parseInt(data[0]);
+        weekendOnsetMillis = Integer.parseInt(data[1]);
+        weekendCease       = Integer.parseInt(data[2]);
+        weekendCeaseMillis = Integer.parseInt(data[3]);
+    }
+
+    //-------------------------------------------------------------------------
+    // End of weekend support
+    //-------------------------------------------------------------------------
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        try {
+            Calendar other = (Calendar) super.clone();
+
+            other.fields = new int[fields.length];
+            other.stamp = new int[fields.length];
+            System.arraycopy(this.fields, 0, other.fields, 0, fields.length);
+            System.arraycopy(this.stamp, 0, other.stamp, 0, fields.length);
+
+            other.zone = (TimeZone) zone.clone();
+            return other;
+        }
+        catch (CloneNotSupportedException e) {
+            // this shouldn't happen, since we are Cloneable
+            throw new InternalError();
+        }
+    }
+
+    /**
+     * Return a string representation of this calendar. This method 
+     * is intended to be used only for debugging purposes, and the 
+     * format of the returned string may vary between implementations. 
+     * The returned string may be empty but may not be <code>null</code>.
+     * 
+     * @return  a string representation of this calendar.
+     */
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(getClass().getName());
+        buffer.append("[time=");
+        buffer.append(isTimeSet ? String.valueOf(time) : "?");
+        buffer.append(",areFieldsSet=");
+        buffer.append(areFieldsSet);
+        buffer.append(",areAllFieldsSet=");
+        buffer.append(areAllFieldsSet);
+        buffer.append(",lenient=");
+        buffer.append(lenient);
+        buffer.append(",zone=");
+        buffer.append(zone);
+        buffer.append(",firstDayOfWeek=");
+        buffer.append(firstDayOfWeek);
+        buffer.append(",minimalDaysInFirstWeek=");
+        buffer.append(minimalDaysInFirstWeek);
+        for (int i=0; i<fields.length; ++i) {
+            buffer.append(',').append(FIELD_NAME[i]).append('=');
+            buffer.append(isSet(i) ? String.valueOf(fields[i]) : "?");
+        }
+        buffer.append(']');
+        return buffer.toString();
+    }
+
+    // =======================privates===============================
+
+    /**
+     * Both firstDayOfWeek and minimalDaysInFirstWeek are locale-dependent.
+     * They are used to figure out the week count for a specific date for
+     * a given locale. These must be set when a Calendar is constructed.
+     * @param desiredLocale the given locale.
+     */
+    private void setWeekCountData(Locale desiredLocale)
+    {
+    /* try to get the Locale data from the cache */
+    int[] data = (int[]) cachedLocaleData.get(desiredLocale);
+    if (data == null) {  /* cache miss */
+        ResourceBundle resource
+        = ResourceBundle.getBundle("java.text.resources.LocaleElements",
+                       desiredLocale);
+        String[] dateTimePatterns =
+        resource.getStringArray("DateTimeElements");
+        data = new int[2];
+        data[0] = Integer.parseInt(dateTimePatterns[0]);
+        data[1] = Integer.parseInt(dateTimePatterns[1]);
+        /* cache update */
+        cachedLocaleData.put(desiredLocale, data);
+    }
+    firstDayOfWeek = data[0];
+    minimalDaysInFirstWeek = data[1];
+    }
+
+    /**
+     * Recompute the time and update the status fields isTimeSet
+     * and areFieldsSet.  Callers should check isTimeSet and only
+     * call this method if isTimeSet is false.
+     */
+    private void updateTime() {
+        computeTime();
+        // If we are lenient, we need to recompute the fields to normalize
+        // the values.  Also, if we haven't set all the fields yet (i.e.,
+        // in a newly-created object), we need to fill in the fields. [LIU]
+        if (isLenient() || !areAllFieldsSet) areFieldsSet = false;
+        isTimeSet = true;
+    }
+
+    /**
+     * Save the state of this object to a stream (i.e., serialize it).
+     *
+     * Ideally, <code>Calendar</code> would only write out its state data and
+     * the current time, and not write any field data out, such as
+     * <code>fields[]</code>, <code>isTimeSet</code>, <code>areFieldsSet</code>,
+     * and <code>isSet[]</code>.  <code>nextStamp</code> also should not be part
+     * of the persistent state. Unfortunately, this didn't happen before JDK 1.1
+     * shipped. To be compatible with JDK 1.1, we will always have to write out
+     * the field values and state flags.  However, <code>nextStamp</code> can be
+     * removed from the serialization stream; this will probably happen in the
+     * near future.
+     */
+    private void writeObject(ObjectOutputStream stream)
+         throws IOException
+    {
+        // Try to compute the time correctly, for the future (stream
+        // version 2) in which we don't write out fields[] or isSet[].
+        if (!isTimeSet) {
+            try {
+                updateTime();
+            }
+            catch (IllegalArgumentException e) {}
+        }
+
+        // Write out the 1.1 FCS object.
+        stream.defaultWriteObject();
+    }
+
+    /**
+     * Reconstitute this object from a stream (i.e., deserialize it).
+     */
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+        
+        stream.defaultReadObject();
+        fields = handleCreateFields();
+        stamp = new int[fields.length];
+        isTimeSet = true;
+        areFieldsSet = areAllFieldsSet = false;
+        nextStamp = MINIMUM_USER_STAMP;
+    }
+
+
+    //----------------------------------------------------------------------
+    // Time -> Fields
+    //----------------------------------------------------------------------
+
+    /**
+     * Converts the current millisecond time value <code>time</code> to
+     * field values in <code>fields[]</code>.  This synchronizes the time
+     * field values with a new time that is set for the calendar.  The time
+     * is <em>not</em> recomputed first; to recompute the time, then the
+     * fields, call the <code>complete</code> method.
+     * @see #complete
+     */
+    protected void computeFields() {
+        int rawOffset = getTimeZone().getRawOffset();
+        long localMillis = time + rawOffset;
+
+        // Mark fields as set.  Do this before calling handleComputeFields().
+        int mask = internalSetMask;
+        for (int i=0; i<fields.length; ++i) {
+            if ((mask & 1) == 0) {
+                stamp[i] = INTERNALLY_SET;
+            } else {
+                stamp[i] = UNSET;
+            }
+            mask >>= 1;
+        }
+
+        // We used to check for and correct extreme millis values (near
+        // Long.MIN_VALUE or Long.MAX_VALUE) here.  Such values would cause
+        // overflows from positive to negative (or vice versa) and had to
+        // be manually tweaked.  We no longer need to do this because we
+        // have limited the range of supported dates to those that have a
+        // Julian day that fits into an int.  This allows us to implement a
+        // JULIAN_DAY field and also removes some inelegant code. - Liu
+        // 11/6/00
+
+        fields[JULIAN_DAY] = (int) floorDivide(localMillis, ONE_DAY) +
+            EPOCH_JULIAN_DAY;
+
+        // In some cases we will have to call this method again below to
+        // adjust for DST pushing us into the next Julian day.
+        computeGregorianAndDOWFields(fields[JULIAN_DAY]);
+
+        long days = (long) (localMillis / ONE_DAY);
+        int millisInDay = (int) (localMillis - (days * ONE_DAY));
+        if (millisInDay < 0) millisInDay += ONE_DAY;
+
+        // Call getOffset() to get the TimeZone offset.  The millisInDay value
+        // must be _standard_ local zone millis.
+        int dstOffset = getTimeZone().getOffset(
+                gregorianYear, gregorianMonth,
+                gregorianDayOfMonth,
+                fields[DAY_OF_WEEK],
+                millisInDay,
+                gregorianMonthLength(gregorianYear, gregorianMonth),
+                gregorianPreviousMonthLength(gregorianYear, gregorianMonth))
+            - rawOffset;
+
+        // Adjust our millisInDay for DST.  dstOffset will be zero if DST
+        // is not in effect at this time of year, or if our zone does not
+        // use DST.
+        millisInDay += dstOffset;
+
+        // If DST has pushed us into the next day, we must call
+        // computeGregorianAndDOWFields() again.  This happens in DST between
+        // 12:00 am and 1:00 am every day.  The first call to
+        // computeGregorianAndDOWFields() will give the wrong day, since the
+        // Standard time is in the previous day.
+        if (millisInDay >= ONE_DAY) {
+            millisInDay -= ONE_DAY; // ASSUME dstOffset < 24:00
+
+            // We don't worry about overflow of JULIAN_DAY because the
+            // allowable range of JULIAN_DAY has slop at the ends (that is,
+            // the max is less that 0x7FFFFFFF and the min is greater than
+            // -0x80000000).
+            computeGregorianAndDOWFields(++fields[JULIAN_DAY]);
+        }
+
+        // Call framework method to have subclass compute its fields.
+        // These must include, at a minimum, MONTH, DAY_OF_MONTH,
+        // EXTENDED_YEAR, YEAR, DAY_OF_YEAR.  This method will call internalSet(),
+        // which will update stamp[].
+        handleComputeFields(fields[JULIAN_DAY]);
+
+        // Compute week-related fields, based on the subclass-computed
+        // fields computed by handleComputeFields().
+        computeWeekFields();
+
+        // Compute time-related fields.  These are indepent of the date and
+        // of the subclass algorithm.  They depend only on the local zone
+        // wall milliseconds in day.
+        fields[MILLISECONDS_IN_DAY] = millisInDay;
+        fields[MILLISECOND] = millisInDay % 1000;
+        millisInDay /= 1000;
+        fields[SECOND] = millisInDay % 60;
+        millisInDay /= 60;
+        fields[MINUTE] = millisInDay % 60;
+        millisInDay /= 60;
+        fields[HOUR_OF_DAY] = millisInDay;
+        fields[AM_PM] = millisInDay / 12; // Assume AM == 0
+        fields[HOUR] = millisInDay % 12;
+        fields[ZONE_OFFSET] = rawOffset;
+        fields[DST_OFFSET] = dstOffset;
+    }
+
+    /**
+     * Compute the Gregorian calendar year, month, and day of month from
+     * the given Julian day.  These values are not stored in fields, but in
+     * member variables gregorianXxx.  Also compute the DAY_OF_WEEK and
+     * DOW_LOCAL fields.
+     */
+    private final void computeGregorianAndDOWFields(int julianDay) {
+        computeGregorianFields(julianDay);
+
+        // Compute day of week: JD 0 = Monday
+        int dow = fields[DAY_OF_WEEK] = julianDayToDayOfWeek(julianDay);
+
+        // Calculate 1-based localized day of week
+        int dowLocal = dow - getFirstDayOfWeek() + 1;
+        if (dowLocal < 1) {
+            dowLocal += 7;
+        }
+        fields[DOW_LOCAL] = dowLocal;
+    }
+    
+    /**
+     * Compute the Gregorian calendar year, month, and day of month from the
+     * Julian day.  These values are not stored in fields, but in member
+     * variables gregorianXxx.  They are used for time zone computations and by
+     * subclasses that are Gregorian derivatives.  Subclasses may call this
+     * method to perform a Gregorian calendar millis->fields computation.
+     * To perform a Gregorian calendar fields->millis computation, call
+     * computeGregorianMonthStart().
+     * @see #computeGregorianMonthStart
+     */
+    protected final void computeGregorianFields(int julianDay) {
+        int year, month, dayOfMonth, dayOfYear;
+
+        // The Gregorian epoch day is zero for Monday January 1, year 1.
+        long gregorianEpochDay = julianDay - JAN_1_1_JULIAN_DAY;
+
+        // Here we convert from the day number to the multiple radix
+        // representation.  We use 400-year, 100-year, and 4-year cycles.
+        // For example, the 4-year cycle has 4 years + 1 leap day; giving
+        // 1461 == 365*4 + 1 days.
+        int[] rem = new int[1];
+        int n400 = floorDivide(gregorianEpochDay, 146097, rem); // 400-year cycle length
+        int n100 = floorDivide(rem[0], 36524, rem); // 100-year cycle length
+        int n4 = floorDivide(rem[0], 1461, rem); // 4-year cycle length
+        int n1 = floorDivide(rem[0], 365, rem);
+        year = 400*n400 + 100*n100 + 4*n4 + n1;
+        dayOfYear = rem[0]; // zero-based day of year
+        if (n100 == 4 || n1 == 4) {
+            dayOfYear = 365; // Dec 31 at end of 4- or 400-yr cycle
+        } else {
+            ++year;
+        }
+
+        boolean isLeap = ((year&0x3) == 0) && // equiv. to (year%4 == 0)
+            (year%100 != 0 || year%400 == 0);
+
+        int correction = 0;
+        int march1 = isLeap ? 60 : 59; // zero-based DOY for March 1
+        if (dayOfYear >= march1) correction = isLeap ? 1 : 2;
+        month = (12 * (dayOfYear + correction) + 6) / 367; // zero-based month
+        dayOfMonth = dayOfYear -
+            GREGORIAN_MONTH_COUNT[month][isLeap?3:2] + 1; // one-based DOM
+
+        gregorianYear = year;
+        gregorianMonth = month; // 0-based already
+        gregorianDayOfMonth = dayOfMonth; // 1-based already
+        gregorianDayOfYear = dayOfYear + 1; // Convert from 0-based to 1-based
+    }
+
+    /**
+     * Compute the fields WEEK_OF_YEAR, YEAR_WOY, WEEK_OF_MONTH,
+     * DAY_OF_WEEK_IN_MONTH, and DOW_LOCAL from EXTENDED_YEAR, YEAR,
+     * DAY_OF_WEEK, and DAY_OF_YEAR.  The latter fields are computed by the
+     * subclass based on the calendar system.
+     *
+     * <p>The YEAR_WOY field is computed simplistically.  It is equal to YEAR
+     * most of the time, but at the year boundary it may be adjusted to YEAR-1
+     * or YEAR+1 to reflect the overlap of a week into an adjacent year.  In
+     * this case, a simple increment or decrement is performed on YEAR, even
+     * though this may yield an invalid YEAR value.  For instance, if the YEAR
+     * is part of a calendar system with an N-year cycle field CYCLE, then
+     * incrementing the YEAR may involve incrementing CYCLE and setting YEAR
+     * back to 0 or 1.  This is not handled by this code, and in fact cannot be
+     * simply handled without having subclasses define an entire parallel set of
+     * fields for fields larger than or equal to a year.  This additional
+     * complexity is not warranted, since the intention of the YEAR_WOY field is
+     * to support ISO 8601 notation, so it will typically be used with a
+     * proleptic Gregorian calendar, which has no field larger than a year.
+     */
+    private final void computeWeekFields() {
+        int eyear = fields[EXTENDED_YEAR];
+        int year = fields[YEAR];
+        int dayOfWeek = fields[DAY_OF_WEEK];
+        int dayOfYear = fields[DAY_OF_YEAR];
+
+        // WEEK_OF_YEAR start
+        // Compute the week of the year.  For the Gregorian calendar, valid week
+        // numbers run from 1 to 52 or 53, depending on the year, the first day
+        // of the week, and the minimal days in the first week.  For other
+        // calendars, the valid range may be different -- it depends on the year
+        // length.  Days at the start of the year may fall into the last week of
+        // the previous year; days at the end of the year may fall into the
+        // first week of the next year.  ASSUME that the year length is less than
+        // 7000 days.
+        int yearOfWeekOfYear = year;
+        int relDow = (dayOfWeek + 7 - getFirstDayOfWeek()) % 7; // 0..6
+        int relDowJan1 = (dayOfWeek - dayOfYear + 7001 - getFirstDayOfWeek()) % 7; // 0..6
+        int woy = (dayOfYear - 1 + relDowJan1) / 7; // 0..53
+        if ((7 - relDowJan1) >= getMinimalDaysInFirstWeek()) {
+            ++woy;
+        }
+
+        // Adjust for weeks at the year end that overlap into the previous or
+        // next calendar year.
+        if (woy == 0) {
+            // We are the last week of the previous year.
+            // Check to see if we are in the last week; if so, we need
+            // to handle the case in which we are the first week of the
+            // next year.
+
+            int prevDoy = dayOfYear + handleGetYearLength(eyear - 1);
+            woy = weekNumber(prevDoy, dayOfWeek);
+            yearOfWeekOfYear--;
+        } else {
+            int lastDoy = handleGetYearLength(eyear);
+            // Fast check: For it to be week 1 of the next year, the DOY
+            // must be on or after L-5, where L is yearLength(), then it
+            // cannot possibly be week 1 of the next year:
+            //          L-5                  L
+            // doy: 359 360 361 362 363 364 365 001
+            // dow:      1   2   3   4   5   6   7
+            if (dayOfYear >= (lastDoy - 5)) {
+                int lastRelDow = (relDow + lastDoy - dayOfYear) % 7;
+                if (lastRelDow < 0) {
+                    lastRelDow += 7;
+                }
+                if (((6 - lastRelDow) >= getMinimalDaysInFirstWeek()) &&
+                    ((dayOfYear + 7 - relDow) > lastDoy)) {
+                    woy = 1;
+                    yearOfWeekOfYear++;
+                }
+            }
+        }
+        fields[WEEK_OF_YEAR] = woy;
+        fields[YEAR_WOY] = yearOfWeekOfYear;
+        // WEEK_OF_YEAR end
+
+        int dayOfMonth = fields[DAY_OF_MONTH];
+        fields[WEEK_OF_MONTH] = weekNumber(dayOfMonth, dayOfWeek);
+        fields[DAY_OF_WEEK_IN_MONTH] = (dayOfMonth-1) / 7 + 1;
+    }
+
+    //----------------------------------------------------------------------
+    // Fields -> Time
+    //----------------------------------------------------------------------
+
+    /**
+     * Value to OR against resolve table field values for remapping.
+     * @see #resolveFields
+     */
+    protected static final int RESOLVE_REMAP = 32;
+    // A power of 2 greater than or equal to MAX_FIELD_COUNT
+
+    // Default table for day in year
+    static final int[][][] DATE_PRECEDENCE = {
+        {
+            { DAY_OF_MONTH },
+            { WEEK_OF_YEAR, DAY_OF_WEEK },
+            { WEEK_OF_MONTH, DAY_OF_WEEK },
+            { DAY_OF_WEEK_IN_MONTH, DAY_OF_WEEK },
+            { WEEK_OF_YEAR, DOW_LOCAL },
+            { WEEK_OF_MONTH, DOW_LOCAL },
+            { DAY_OF_WEEK_IN_MONTH, DOW_LOCAL },
+            { DAY_OF_YEAR },
+        },
+        {
+            { WEEK_OF_YEAR },
+            { WEEK_OF_MONTH },
+            { DAY_OF_WEEK_IN_MONTH },
+            { RESOLVE_REMAP | DAY_OF_WEEK_IN_MONTH, DAY_OF_WEEK },
+            { RESOLVE_REMAP | DAY_OF_WEEK_IN_MONTH, DOW_LOCAL },
+        },
+    };
+
+    static final int[][][] DOW_PRECEDENCE = {
+        {
+            { DAY_OF_WEEK },
+            { DOW_LOCAL },
+        },
+    };
+
+    /**
+     * Given a precedence table, return the newest field combination in
+     * the table, or -1 if none is found.
+     *
+     * <p>The precedence table is a 3-dimensional array of integers.  It
+     * may be thought of as an array of groups.  Each group is an array of
+     * lines.  Each line is an array of field numbers.  Within a line, if
+     * all fields are set, then the time stamp of the line is taken to be
+     * the stamp of the most recently set field.  If any field of a line is
+     * unset, then the line fails to match.  Within a group, the line with
+     * the newest time stamp is selected.  The first field of the line is
+     * returned to indicate which line matched.
+     *
+     * <p>In some cases, it may be desirable to map a line to field that
+     * whose stamp is NOT examined.  For example, if the best field is
+     * DAY_OF_WEEK then the DAY_OF_WEEK_IN_MONTH algorithm may be used.  In
+     * order to do this, insert the value <code>REMAP_RESOLVE | F</code> at
+     * the start of the line, where <code>F</code> is the desired return
+     * field value.  This field will NOT be examined; it only determines
+     * the return value if the other fields in the line are the newest.
+     *
+     * <p>If all lines of a group contain at least one unset field, then no
+     * line will match, and the group as a whole will fail to match.  In
+     * that case, the next group will be processed.  If all groups fail to
+     * match, then -1 is returned.
+     */
+    protected int resolveFields(int[][][] precedenceTable) {
+        int bestField = -1;
+        for (int g=0; g<precedenceTable.length && bestField < 0; ++g) {
+            int[][] group = precedenceTable[g];
+            int bestStamp = UNSET;
+        linesInGroup:
+            for (int l=0; l<group.length; ++l) {
+                int[] line= group[l];
+                int lineStamp = UNSET;
+                // Skip over first entry if it is negative
+                for (int i=(line[0]>=RESOLVE_REMAP)?1:0; i<line.length; ++i) {
+                    int s = stamp[line[i]];
+                    // If any field is unset then don't use this line
+                    if (s == UNSET) {
+                        continue linesInGroup;
+                    } else {
+                        lineStamp = Math.max(lineStamp, s);
+                    }
+                }
+                // Record new maximum stamp & field no.
+                if (lineStamp > bestStamp) {
+                    bestStamp = lineStamp;
+                    bestField = line[0]; // First field refers to entire line
+                }
+            }
+        }
+        return (bestField>=RESOLVE_REMAP)?(bestField&(RESOLVE_REMAP-1)):bestField;
+    }
+
+    /**
+     * Return the newest stamp of a given range of fields.
+     */
+    protected int newestStamp(int first, int last, int bestStampSoFar) {
+        int bestStamp = bestStampSoFar;
+        for (int i=first; i<=last; ++i) {
+            if (stamp[i] > bestStamp) {
+                bestStamp = stamp[i];
+            }
+        }
+        return bestStamp;
+    }
+
+    /**
+     * Return the timestamp of a field.
+     */
+    protected final int getStamp(int field) {
+        return stamp[field];
+    }
+    
+    /**
+     * Return the field that is newer, either defaultField, or
+     * alternateField.  If neither is newer or neither is set, return defaultField.
+     */
+    protected int newerField(int defaultField, int alternateField) {
+        if (stamp[alternateField] > stamp[defaultField]) {
+            return alternateField;
+        }
+        return defaultField;
+    }
+
+    /**
+     * Ensure that each field is within its valid range by calling {@link
+     * #validateField(int)} on each field that has been set.  This method
+     * should only be called if this calendar is not lenient.
+     * @see #isLenient
+     * @see #validateField(int)
+     */
+    protected void validateFields() {
+        for (int field = 0; field < fields.length; field++) {
+            if (isSet(field)) {
+                validateField(field);
+            }
+        }
+    }
+
+    /**
+     * Validate a single field of this calendar.  Subclasses should
+     * override this method to validate any calendar-specific fields.
+     * Generic fields can be handled by
+     * <code>Calendar.validateField()</code>.
+     * @see #validateField(int, int, int)
+     */
+    protected void validateField(int field) {
+        int y;
+        switch (field) {
+        case DAY_OF_MONTH:
+            y = handleGetExtendedYear();
+            validateField(field, 1, handleGetMonthLength(y, internalGet(MONTH)));
+            break;
+        case DAY_OF_YEAR:
+            y = handleGetExtendedYear();
+            validateField(field, 1, handleGetYearLength(y));
+            break;
+        case DAY_OF_WEEK_IN_MONTH:
+            if (internalGet(field) == 0) {
+                throw new IllegalArgumentException("DAY_OF_WEEK_IN_MONTH cannot be zero");
+            }
+            validateField(field, getMinimum(field), getMaximum(field));
+            break;
+        default:
+            validateField(field, getMinimum(field), getMaximum(field));
+            break;
+        }
+    }
+
+    /**
+     * Validate a single field of this calendar given its minimum and
+     * maximum allowed value.  If the field is out of range, throw a
+     * descriptive <code>IllegalArgumentException</code>.  Subclasses may
+     * use this method in their implementation of {@link
+     * #validateField(int)}.
+     */
+    protected final void validateField(int field, int min, int max) {
+        int value = fields[field];
+        if (value < min || value > max) {
+            throw new IllegalArgumentException(fieldName(field) +
+                                               '=' + value + ", valid range=" +
+                                               min + ".." + max);
+        }
+    }
+
+    /**
+     * Converts the current field values in <code>fields[]</code> to the
+     * millisecond time value <code>time</code>.
+     */
+   protected void computeTime() {
+        if (!isLenient()) {
+            validateFields();
+        }
+
+        // Compute the Julian day 
+        int julianDay = computeJulianDay();
+
+        long millis = julianDayToMillis(julianDay);
+
+        int millisInDay;
+
+        // We only use MILLISECONDS_IN_DAY if it has been set by the user.
+        // This makes it possible for the caller to set the calendar to a
+        // time and call clear(MONTH) to reset the MONTH to January.  This
+        // is legacy behavior.  Without this, clear(MONTH) has no effect,
+        // since the internally set JULIAN_DAY is used.
+        if (stamp[MILLISECONDS_IN_DAY] >= MINIMUM_USER_STAMP &&
+            newestStamp(AM_PM, MILLISECOND, UNSET) <= stamp[MILLISECONDS_IN_DAY]) {
+            millisInDay = internalGet(MILLISECONDS_IN_DAY);
+        } else {
+            millisInDay = computeMillisInDay();
+        }
+
+        // Compute the time zone offset and DST offset.  There are two potential
+        // ambiguities here.  We'll assume a 2:00 am (wall time) switchover time
+        // for discussion purposes here.
+        // 1. The transition into DST.  Here, a designated time of 2:00 am - 2:59 am
+        //    can be in standard or in DST depending.  However, 2:00 am is an invalid
+        //    representation (the representation jumps from 1:59:59 am Std to 3:00:00 am DST).
+        //    We assume standard time.
+        // 2. The transition out of DST.  Here, a designated time of 1:00 am - 1:59 am
+        //    can be in standard or DST.  Both are valid representations (the rep
+        //    jumps from 1:59:59 DST to 1:00:00 Std).
+        //    Again, we assume standard time.
+        // We use the TimeZone object, unless the user has explicitly set the ZONE_OFFSET
+        // or DST_OFFSET fields; then we use those fields.
+        if (stamp[ZONE_OFFSET] >= MINIMUM_USER_STAMP ||
+            stamp[DST_OFFSET] >= MINIMUM_USER_STAMP) {
+            millisInDay -= internalGet(ZONE_OFFSET) + internalGet(DST_OFFSET);
+        } else {
+            millisInDay -= computeZoneOffset(millis, millisInDay);
+        }
+
+        time = millis + millisInDay;
+    }
+
+    /**
+     * Compute the milliseconds in the day from the fields.  This is a
+     * value from 0 to 23:59:59.999 inclusive, unless fields are out of
+     * range, in which case it can be an arbitrary value.  This value
+     * reflects local zone wall time.
+     */
+    protected int computeMillisInDay() {
+        // Do the time portion of the conversion.
+
+        int millisInDay = 0;
+
+        // Find the best set of fields specifying the time of day.  There
+        // are only two possibilities here; the HOUR_OF_DAY or the
+        // AM_PM and the HOUR.
+        int hourOfDayStamp = stamp[HOUR_OF_DAY];
+        int hourStamp = Math.max(stamp[HOUR], stamp[AM_PM]);
+        int bestStamp = (hourStamp > hourOfDayStamp) ? hourStamp : hourOfDayStamp;
+
+        // Hours
+        if (bestStamp != UNSET) {
+            if (bestStamp == hourOfDayStamp) {
+                // Don't normalize here; let overflow bump into the next period.
+                // This is consistent with how we handle other fields.
+                millisInDay += internalGet(HOUR_OF_DAY);
+            } else {
+                // Don't normalize here; let overflow bump into the next period.
+                // This is consistent with how we handle other fields.
+                millisInDay += internalGet(HOUR);
+                millisInDay += 12 * internalGet(AM_PM); // Default works for unset AM_PM
+            }
+        }
+
+        // We use the fact that unset == 0; we start with millisInDay
+        // == HOUR_OF_DAY.
+        millisInDay *= 60;
+        millisInDay += internalGet(MINUTE); // now have minutes
+        millisInDay *= 60;
+        millisInDay += internalGet(SECOND); // now have seconds
+        millisInDay *= 1000;
+        millisInDay += internalGet(MILLISECOND); // now have millis
+
+        return millisInDay;
+    }
+
+    /**
+     * This method can assume EXTENDED_YEAR has been set.
+     * @param millis milliseconds of the date fields
+     * @param millisInDay milliseconds of the time fields; may be out
+     * or range.
+     */
+    protected int computeZoneOffset(long millis, int millisInDay) {
+
+        /* Normalize the millisInDay to 0..ONE_DAY-1.  If the millis is out
+         * of range, then we must call computeGregorianAndDOWFields() to
+         * recompute our fields. */
+        int[] normalizedMillisInDay = new int[1];
+        int days = floorDivide(millis + millisInDay, (int) ONE_DAY,
+                               normalizedMillisInDay);
+
+        int julianDay = millisToJulianDay(days * ONE_DAY);
+
+        computeGregorianAndDOWFields(julianDay);
+
+        return zone.getOffset(
+                      gregorianYear, gregorianMonth, gregorianDayOfMonth,
+                      fields[DAY_OF_WEEK], normalizedMillisInDay[0],
+                      gregorianMonthLength(gregorianYear, gregorianMonth),
+                      gregorianPreviousMonthLength(gregorianYear,
+                                                   gregorianMonth));
+
+        // Note: Because we pass in wall millisInDay, rather than
+        // standard millisInDay, we interpret "1:00 am" on the day
+        // of cessation of DST as "1:00 am Std" (assuming the time
+        // of cessation is 2:00 am).
+    }
+
+    /**
+     * Compute the Julian day number as specified by this calendar's fields.
+     */
+    protected int computeJulianDay() {
+
+        // We want to see if any of the date fields is newer than the
+        // JULIAN_DAY.  If not, then we use JULIAN_DAY.  If so, then we do
+        // the normal resolution.  We only use JULIAN_DAY if it has been
+        // set by the user.  This makes it possible for the caller to set
+        // the calendar to a time and call clear(MONTH) to reset the MONTH
+        // to January.  This is legacy behavior.  Without this,
+        // clear(MONTH) has no effect, since the internally set JULIAN_DAY
+        // is used.
+        if (stamp[JULIAN_DAY] >= MINIMUM_USER_STAMP) {
+            int bestStamp = newestStamp(ERA, DAY_OF_WEEK_IN_MONTH, UNSET);
+            bestStamp = newestStamp(YEAR_WOY, EXTENDED_YEAR, bestStamp);
+            if (bestStamp <= stamp[JULIAN_DAY]) {
+                return internalGet(JULIAN_DAY);
+            }
+        }
+
+        int bestField = resolveFields(getFieldResolutionTable());
+        if (bestField < 0) {
+            bestField = DAY_OF_MONTH;
+        }
+
+        return handleComputeJulianDay(bestField);
+    }
+
+    /**
+     * Return the field resolution array for this calendar.  Calendars that
+     * define additional fields or change the semantics of existing fields
+     * should override this method to adjust the field resolution semantics
+     * accordingly.  Other subclasses should not override this method.
+     * @see #resolveFields
+     */
+    protected int[][][] getFieldResolutionTable() {
+        return DATE_PRECEDENCE;
+    }
+
+    /**
+     * Return the Julian day number of day before the first day of the
+     * given month in the given extended year.  Subclasses should override
+     * this method to implement their calendar system.
+     * @param eyear the extended year
+     * @param month the zero-based month, or 0 if useMonth is false
+     * @param useMonth if false, compute the day before the first day of
+     * the given year, otherwise, compute the day before the first day of
+     * the given month
+     * @param return the Julian day number of the day before the first
+     * day of the given month and year
+     */
+    abstract protected int handleComputeMonthStart(int eyear, int month,
+                                                   boolean useMonth);
+
+    /**
+     * Return the extended year defined by the current fields.  This will
+     * use the EXTENDED_YEAR field or the YEAR and supra-year fields (such
+     * as ERA) specific to the calendar system, depending on which set of
+     * fields is newer.
+     * @return the extended year
+     */
+    abstract protected int handleGetExtendedYear();
+
+    /**
+     * Return the number of days in the given month of the given extended
+     * year of this calendar system.  Subclasses should override this
+     * method if they can provide a more correct or more efficient
+     * implementation than the default implementation in Calendar.
+     */
+    protected int handleGetMonthLength(int extendedYear, int month) {
+        return handleComputeMonthStart(extendedYear, month+1, true) -
+               handleComputeMonthStart(extendedYear, month, true);
+    }
+
+    /**
+     * Return the number of days in the given extended year of this
+     * calendar system.  Subclasses should override this method if they can
+     * provide a more correct or more efficient implementation than the
+     * default implementation in Calendar.
+     */
+    protected int handleGetYearLength(int eyear) {
+        return handleComputeMonthStart(eyear+1, 0, false) -
+               handleComputeMonthStart(eyear, 0, false);
+    }
+
+    /**
+     * Subclasses that use additional fields beyond those defined in
+     * <code>Calendar</code> should override this method to return an
+     * <code>int[]</code> array of the appropriate length.  The length
+     * must be at least <code>BASE_FIELD_COUNT</code> and no more than
+     * <code>MAX_FIELD_COUNT</code>.
+     */
+    protected int[] handleCreateFields() {
+        return new int[BASE_FIELD_COUNT];
+    }
+
+    /**
+     * Subclasses may override this.  This method calls
+     * handleGetMonthLength() to obtain the calendar-specific month
+     * length.
+     */
+    protected int handleComputeJulianDay(int bestField) {
+
+        boolean useMonth = (bestField == DAY_OF_MONTH ||
+                            bestField == WEEK_OF_MONTH ||
+                            bestField == DAY_OF_WEEK_IN_MONTH);
+
+        int year = handleGetExtendedYear();
+        internalSet(EXTENDED_YEAR, year);
+
+        // Get the Julian day of the day BEFORE the start of this year.
+        // If useMonth is true, get the day before the start of the month.
+        int julianDay = handleComputeMonthStart(year, useMonth ? internalGet(MONTH) : 0, useMonth);
+
+        if (bestField == DAY_OF_MONTH) {
+            return julianDay + internalGet(DAY_OF_MONTH, 1);
+        }
+
+        if (bestField == DAY_OF_YEAR) {
+            return julianDay + internalGet(DAY_OF_YEAR);
+        }
+
+        int firstDayOfWeek = getFirstDayOfWeek(); // Localized fdw
+
+        // At this point julianDay is the 0-based day BEFORE the first day of
+        // January 1, year 1 of the given calendar.  If julianDay == 0, it
+        // specifies (Jan. 1, 1) - 1, in whatever calendar we are using (Julian
+        // or Gregorian).
+
+        // At this point we need to process the WEEK_OF_MONTH or
+        // WEEK_OF_YEAR, which are similar, or the DAY_OF_WEEK_IN_MONTH.
+        // First, perform initial shared computations.  These locate the
+        // first week of the period.
+
+        // Get the 0-based localized DOW of day one of the month or year.
+        // Valid range 0..6.
+        int first = julianDayToDayOfWeek(julianDay + 1) - firstDayOfWeek;
+        if (first < 0) {
+            first += 7;
+        }
+        
+        // Get zero-based localized DOW, valid range 0..6.  This is the DOW
+        // we are looking for.
+        int dowLocal = 0;
+        switch (resolveFields(DOW_PRECEDENCE)) {
+        case DAY_OF_WEEK:
+            dowLocal = internalGet(DAY_OF_WEEK) - firstDayOfWeek;
+            break;
+        case DOW_LOCAL:
+            dowLocal = internalGet(DOW_LOCAL) - 1;
+            break;
+        }
+        dowLocal = dowLocal % 7;
+        if (dowLocal < 0) {
+            dowLocal += 7;
+        }
+
+        // Find the first target DOW (dowLocal) in the month or year.
+        // Actually, it may be just before the first of the month or year.
+        // It will be an integer from -5..7.
+        int date = 1 - first + dowLocal;
+
+        if (bestField == DAY_OF_WEEK_IN_MONTH) {
+
+            // Adjust the target DOW to be in the month or year.
+            if (date < 1) {
+                date += 7;
+            }
+
+            // The only trickiness occurs if the day-of-week-in-month is
+            // negative.
+            int dim = internalGet(DAY_OF_WEEK_IN_MONTH, 1);
+            if (dim >= 0) {
+                date += 7*(dim - 1);
+                
+            } else {
+                // Move date to the last of this day-of-week in this month,
+                // then back up as needed.  If dim==-1, we don't back up at
+                // all.  If dim==-2, we back up once, etc.  Don't back up
+                // past the first of the given day-of-week in this month.
+                // Note that we handle -2, -3, etc. correctly, even though
+                // values < -1 are technically disallowed.
+                int m = internalGet(MONTH, JANUARY);
+                int monthLength = handleGetMonthLength(year, m);
+                date += ((monthLength - date) / 7 + dim + 1) * 7;
+            }
+        } else {
+            // assert(bestField == WEEK_OF_MONTH || bestField == WEEK_OF_YEAR)
+
+            // Adjust for minimal days in first week
+            if ((7 - first) < getMinimalDaysInFirstWeek()) {
+                date += 7;
+            }
+
+            // Now adjust for the week number.
+            date += 7 * (internalGet(bestField) - 1);
+        }
+
+        return julianDay + date;
+    }
+
+    /**
+     * Compute the Julian day of a month of the Gregorian calendar.
+     * Subclasses may call this method to perform a Gregorian calendar
+     * fields->millis computation.  To perform a Gregorian calendar
+     * millis->fields computation, call computeGregorianFields().
+     * @param year extended Gregorian year
+     * @param month zero-based Gregorian month
+     * @return the Julian day number of the day before the first
+     * day of the given month in the given extended year
+     * @see #computeGregorianFields
+     */
+    protected int computeGregorianMonthStart(int year, int month) {
+
+        // If the month is out of range, adjust it into range, and
+        // modify the extended year value accordingly.
+        if (month < 0 || month > 11) {
+            int[] rem = new int[1];
+            year += floorDivide(month, 12, rem);
+            month = rem[0];
+        }
+
+        boolean isLeap = (year%4 == 0) && ((year%100 != 0) || (year%400 == 0));
+        int y = year - 1;
+        // This computation is actually ... + (JAN_1_1_JULIAN_DAY - 3) + 2.
+        // Add 2 because Gregorian calendar starts 2 days after Julian
+        // calendar.
+        int julianDay = 365*y + floorDivide(y, 4) - floorDivide(y, 100) +
+            floorDivide(y, 400) + JAN_1_1_JULIAN_DAY - 1;
+
+        // At this point julianDay indicates the day BEFORE the first day
+        // of January 1, <eyear> of the Gregorian calendar.
+        if (month != 0) {
+            julianDay += GREGORIAN_MONTH_COUNT[month][isLeap?3:2];
+        }
+
+        return julianDay;
+    }
+
+    //----------------------------------------------------------------------
+    // Subclass API
+    // For subclasses to override
+    //----------------------------------------------------------------------
+
+    /**
+     * Subclasses may override this method to compute several fields
+     * specific to each calendar system.  These are:
+     *
+     * <ul><li>ERA
+     * <li>YEAR
+     * <li>MONTH
+     * <li>DAY_OF_MONTH
+     * <li>DAY_OF_YEAR
+     * <li>EXTENDED_YEAR</ul>
+     * 
+     * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which
+     * will be set when this method is called.  Subclasses can also call
+     * the getGregorianXxx() methods to obtain Gregorian calendar
+     * equivalents for the given Julian day.
+     *
+     * <p>In addition, subclasses should compute any subclass-specific
+     * fields, that is, fields from BASE_FIELD_COUNT to
+     * getFieldCount() - 1.
+     *
+     * <p>The default implementation in <code>Calendar</code> implements
+     * a pure proleptic Gregorian calendar.
+     */
+    protected void handleComputeFields(int julianDay) {
+        internalSet(MONTH, getGregorianMonth());
+        internalSet(DAY_OF_MONTH, getGregorianDayOfMonth());
+        internalSet(DAY_OF_YEAR, getGregorianDayOfYear());
+        int eyear = getGregorianYear();
+        internalSet(EXTENDED_YEAR, eyear);
+        int era = GregorianCalendar.AD;
+        if (eyear < 1) {
+            era = GregorianCalendar.BC;
+            eyear = 1 - eyear;
+        }
+        internalSet(ERA, era);
+        internalSet(YEAR, eyear);
+    }
+
+    //----------------------------------------------------------------------
+    // Subclass API
+    // For subclasses to call
+    //----------------------------------------------------------------------
+
+    /**
+     * Return the extended year on the Gregorian calendar as computed by
+     * <code>computeGregorianFields()</code>.
+     * @see #computeGregorianFields
+     */
+    protected final int getGregorianYear() {
+        return gregorianYear;
+    }
+
+    /**
+     * Return the month (0-based) on the Gregorian calendar as computed by
+     * <code>computeGregorianFields()</code>.
+     * @see #computeGregorianFields
+     */
+    protected final int getGregorianMonth() {
+        return gregorianMonth;
+    }
+
+    /**
+     * Return the day of year (1-based) on the Gregorian calendar as
+     * computed by <code>computeGregorianFields()</code>.
+     * @see #computeGregorianFields
+     */
+    protected final int getGregorianDayOfYear() {
+        return gregorianDayOfYear;
+    }
+
+    /**
+     * Return the day of month (1-based) on the Gregorian calendar as
+     * computed by <code>computeGregorianFields()</code>.
+     * @see #computeGregorianFields
+     */
+    protected final int getGregorianDayOfMonth() {
+        return gregorianDayOfMonth;
+    }
+
+    /**
+     * Return the number of fields defined by this calendar.  Valid field
+     * arguments to <code>set()</code> and <code>get()</code> are
+     * <code>0..getFieldCount()-1</code>.
+     */
+    public final int getFieldCount() {
+        return fields.length;
+    }
+
+    /**
+     * Set a field to a value.  Subclasses should use this method when
+     * computing fields.  It sets the time stamp in the
+     * <code>stamp[]</code> array to <code>INTERNALLY_SET</code>.  If a
+     * field that may not be set by subclasses is passed in, an
+     * <code>IllegalArgumentException</code> is thrown.  This prevents
+     * subclasses from modifying fields that are intended to be
+     * calendar-system invariant.
+     */
+    protected final void internalSet(int field, int value) {
+        if (((1 << field) & internalSetMask) == 0) {
+            throw new IllegalArgumentException("Subclass cannot set " +
+                                               fieldName(field));
+        }
+        fields[field] = value;
+        stamp[field] = INTERNALLY_SET;
+    }
+
+    private static final int[][] GREGORIAN_MONTH_COUNT = {
+        //len len2   st  st2
+        {  31,  31,   0,   0 }, // Jan
+        {  28,  29,  31,  31 }, // Feb
+        {  31,  31,  59,  60 }, // Mar
+        {  30,  30,  90,  91 }, // Apr
+        {  31,  31, 120, 121 }, // May
+        {  30,  30, 151, 152 }, // Jun
+        {  31,  31, 181, 182 }, // Jul
+        {  31,  31, 212, 213 }, // Aug
+        {  30,  30, 243, 244 }, // Sep
+        {  31,  31, 273, 274 }, // Oct
+        {  30,  30, 304, 305 }, // Nov
+        {  31,  31, 334, 335 }  // Dec
+        // len  length of month
+        // len2 length of month in a leap year
+        // st   days in year before start of month
+        // st2  days in year before month in leap year
+    };
+
+    /**
+     * Determines if the given year is a leap year. Returns true if the
+     * given year is a leap year.
+     * @param year the given year.
+     * @return true if the given year is a leap year; false otherwise.
+     */
+    protected static final boolean isGregorianLeapYear(int year) {
+        return (year%4 == 0) && ((year%100 != 0) || (year%400 == 0));
+    }
+
+    /**
+     * Return the length of a month of the Gregorian calendar.
+     * @param y the extended year
+     * @param m the 0-based month number
+     * @return the number of days in the given month
+     */
+    protected static final int gregorianMonthLength(int y, int m) {
+        return GREGORIAN_MONTH_COUNT[m][isGregorianLeapYear(y)?1:0];
+    }
+
+    /**
+     * Return the length of a previous month of the Gregorian calendar.
+     * @param y the extended year
+     * @param m the 0-based month number
+     * @return the number of days in the month previous to the given month
+     */
+    protected static final int gregorianPreviousMonthLength(int y, int m) {
+        return (m > 0) ? gregorianMonthLength(y, m-1) : 31;
+    }
+
+    /**
+     * Divide two long integers, returning the floor of the quotient.
+     * <p>
+     * Unlike the built-in division, this is mathematically well-behaved.
+     * E.g., <code>-1/4</code> => 0
+     * but <code>floorDivide(-1,4)</code> => -1.
+     * @param numerator the numerator
+     * @param denominator a divisor which must be > 0
+     * @return the floor of the quotient.
+     */
+    protected static final long floorDivide(long numerator, long denominator) {
+        // We do this computation in order to handle
+        // a numerator of Long.MIN_VALUE correctly
+        return (numerator >= 0) ?
+            numerator / denominator :
+            ((numerator + 1) / denominator) - 1;
+    }
+
+    /**
+     * Divide two integers, returning the floor of the quotient.
+     * <p>
+     * Unlike the built-in division, this is mathematically well-behaved.
+     * E.g., <code>-1/4</code> => 0
+     * but <code>floorDivide(-1,4)</code> => -1.
+     * @param numerator the numerator
+     * @param denominator a divisor which must be > 0
+     * @return the floor of the quotient.
+     */
+    protected static final int floorDivide(int numerator, int denominator) {
+        // We do this computation in order to handle
+        // a numerator of Integer.MIN_VALUE correctly
+        return (numerator >= 0) ?
+            numerator / denominator :
+            ((numerator + 1) / denominator) - 1;
+    }
+
+    /**
+     * Divide two integers, returning the floor of the quotient, and
+     * the modulus remainder.
+     * <p>
+     * Unlike the built-in division, this is mathematically well-behaved.
+     * E.g., <code>-1/4</code> => 0 and <code>-1%4</code> => -1,
+     * but <code>floorDivide(-1,4)</code> => -1 with <code>remainder[0]</code> => 3.
+     * @param numerator the numerator
+     * @param denominator a divisor which must be > 0
+     * @param remainder an array of at least one element in which the value
+     * <code>numerator mod denominator</code> is returned. Unlike <code>numerator
+     * % denominator</code>, this will always be non-negative.
+     * @return the floor of the quotient.
+     */
+    protected static final int floorDivide(int numerator, int denominator, int[] remainder) {
+        if (numerator >= 0) {
+            remainder[0] = numerator % denominator;
+            return numerator / denominator;
+        }
+        remainder[0] = denominator + (numerator % denominator);
+        return ((numerator + 1) / denominator) - 1;
+    }
+
+    /**
+     * Divide two integers, returning the floor of the quotient, and
+     * the modulus remainder.
+     * <p>
+     * Unlike the built-in division, this is mathematically well-behaved.
+     * E.g., <code>-1/4</code> => 0 and <code>-1%4</code> => -1,
+     * but <code>floorDivide(-1,4)</code> => -1 with <code>remainder[0]</code> => 3.
+     * @param numerator the numerator
+     * @param denominator a divisor which must be > 0
+     * @param remainder an array of at least one element in which the value
+     * <code>numerator mod denominator</code> is returned. Unlike <code>numerator
+     * % denominator</code>, this will always be non-negative.
+     * @return the floor of the quotient.
+     */
+    protected static final int floorDivide(long numerator, int denominator, int[] remainder) {
+        if (numerator >= 0) {
+            remainder[0] = (int)(numerator % denominator);
+            return (int)(numerator / denominator);
+        }
+        int quotient = (int)(((numerator + 1) / denominator) - 1);
+        remainder[0] = (int)(numerator - (quotient * denominator));
+        return quotient;
+    }
+
+    private static final String[] FIELD_NAME = {
+        "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH",
+        "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK",
+        "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", "HOUR_OF_DAY",
+        "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET",
+        "DST_OFFSET", "YEAR_WOY", "DOW_LOCAL", "EXTENDED_YEAR",
+        "JULIAN_DAY", "MILLISECONDS_IN_DAY",
+    };
+
+    /**
+     * Return a string name for a field, for debugging and exceptions.
+     */
+    protected String fieldName(int field) {
+        try {
+            return FIELD_NAME[field];
+        } catch (ArrayIndexOutOfBoundsException e) {
+            return "Field " + field;
+        }
+    }
+
+    /**
+     * Converts time as milliseconds to Julian day.
+     * @param millis the given milliseconds.
+     * @return the Julian day number.
+     */
+    protected static final int millisToJulianDay(long millis) {
+        return (int) (EPOCH_JULIAN_DAY + floorDivide(millis, ONE_DAY));
+    }
+
+    /**
+     * Converts Julian day to time as milliseconds.
+     * @param julian the given Julian day number.
+     * @return time as milliseconds.
+     */
+    protected static final long julianDayToMillis(int julian) {
+        return (julian - EPOCH_JULIAN_DAY) * ONE_DAY;
+    }
+
+    /**
+     * Return the day of week, from SUNDAY to SATURDAY, given a Julian day.
+     */
+    protected static final int julianDayToDayOfWeek(int julian) {
+        // If julian is negative, then julian%7 will be negative, so we adjust
+        // accordingly.  Julian day 0 is Monday.
+        int dayOfWeek = (julian + MONDAY) % 7;
+        if (dayOfWeek < SUNDAY) {
+            dayOfWeek += 7;
+        }
+        return dayOfWeek;
+    }
+
+    /**
+     * Return the current milliseconds without recomputing.
+     */
+    protected final long internalGetTimeInMillis() {
+        return time;
+    }
+}
diff --git a/src/com/ibm/util/CalendarAstronomer.java b/src/com/ibm/util/CalendarAstronomer.java
new file mode 100755
index 0000000..136432d
--- /dev/null
+++ b/src/com/ibm/util/CalendarAstronomer.java
@@ -0,0 +1,1218 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/CalendarAstronomer.java,v $ 
+ * $Date: 2000/11/28 22:17:06 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import java.util.*;
+import java.text.*;
+
+/**
+ * <code>CalendarAstronomer</code> is a class that can perform the calculations to
+ * determine the positions of the sun and moon, the time of sunrise and
+ * sunset, and other astronomy-related data.  The calculations it performs
+ * are in some cases quite complicated, and this utility class saves you
+ * the trouble of worrying about them.
+ * <p>
+ * The measurement of time is a very important part of astronomy.  Because
+ * astronomical bodies are constantly in motion, observations are only valid
+ * at a given moment in time.  Accordingly, each <code>CalendarAstronomer</code>
+ * object has a <code>time</code> property that determines the date
+ * and time for which its calculations are performed.  You can set and
+ * retrieve this property with {@link #setDate setDate}, {@link #getDate getDate}
+ * and related methods.
+ * <p>
+ * Almost all of the calculations performed by this class, or by any
+ * astronomer, are approximations to various degrees of accuracy.  The
+ * calculations in this class are mostly modelled after those described
+ * in the book
+ * <a href="http://www.amazon.com/exec/obidos/ISBN=0521356997" target="_top">
+ * Practical Astronomy With Your Calculator</a>, by Peter J.
+ * Duffett-Smith, Cambridge University Press, 1990.  This is an excellent
+ * book, and if you want a greater understanding of how these calculations
+ * are performed it a very good, readable starting point.
+ * <p>
+ * <strong>WARNING:</strong> This class is very early in its development, and
+ * it is highly likely that its API will change to some degree in the future.
+ * At the moment, it basically does just enough to support {@link IslamicCalendar}
+ * and {@link ChineseCalendar}.
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+public class CalendarAstronomer {
+    
+    //-------------------------------------------------------------------------
+    // Astronomical constants
+    //-------------------------------------------------------------------------
+
+    /**
+     * The number of standard hours in one sidereal day.
+     * Approximately 24.93.
+     */
+    public static final double SIDEREAL_DAY = 23.93446960027;
+    
+    /**
+     * The number of sidereal hours in one mean solar day.
+     * Approximately 24.07.
+     */
+    public static final double SOLAR_DAY =  24.065709816;
+    
+    /**
+     * The average number of solar days from one new moon to the next.  This is the time
+     * it takes for the moon to return the same ecliptic longitude as the sun.
+     * It is longer than the sidereal month because the sun's longitude increases
+     * during the year due to the revolution of the earth around the sun.
+     * Approximately 29.53.
+     *
+     * @see #SIDEREAL_MONTH
+     */
+    public static final double SYNODIC_MONTH = 29.530588853;
+    
+    /**
+     * The average number of days it takes
+     * for the moon to return to the same ecliptic longitude relative to the
+     * stellar background.  This is referred to as the sidereal month.
+     * It is shorter than the synodic month due to
+     * the revolution of the earth around the sun.
+     * Approximately 27.32.
+     *
+     * @see #SYNODIC_MONTH
+     */
+    public static final double SIDEREAL_MONTH = 27.32166;
+    
+    /**
+     * The average number number of days between successive vernal equinoxes.
+     * Due to the precession of the earth's
+     * axis, this is not precisely the same as the sidereal year.
+     * Approximately 365.24
+     *
+     * @see #SIDEREAL_YEAR
+     */
+    public static final double TROPICAL_YEAR = 365.242191;
+    
+    /**
+     * The average number of days it takes
+     * for the sun to return to the same position against the fixed stellar
+     * background.  This is the duration of one orbit of the earth about the sun
+     * as it would appear to an outside observer.
+     * Due to the precession of the earth's
+     * axis, this is not precisely the same as the tropical year.
+     * Approximately 365.25.
+     *
+     * @see #TROPICAL_YEAR
+     */
+    public static final double SIDEREAL_YEAR = 365.25636;
+
+    //-------------------------------------------------------------------------
+    // Time-related constants
+    //-------------------------------------------------------------------------
+
+    /** The number of milliseconds in one second. */
+    public static final int  SECOND_MS = 1000;
+
+    /** The number of milliseconds in one minute. */
+    public static final int  MINUTE_MS = 60*SECOND_MS;
+
+    /** The number of milliseconds in one hour. */
+    public static final int  HOUR_MS   = 60*MINUTE_MS;
+
+    /** The number of milliseconds in one day. */
+    public static final long DAY_MS    = 24*HOUR_MS;
+
+    /**
+     * The start of the julian day numbering scheme used by astronomers, which
+     * is 1/1/4713 BC (Julian), 12:00 GMT.  This is given as the number of milliseconds
+     * since 1/1/1970 AD (Gregorian), a negative number.
+     * Note that julian day numbers and
+     * the Julian calendar are <em>not</em> the same thing.  Also note that
+     * julian days start at <em>noon</em>, not midnight.
+     */
+    public static final long JULIAN_EPOCH_MS = -210866760000000L;
+    
+
+    //-------------------------------------------------------------------------
+    // Assorted private data used for conversions
+    //-------------------------------------------------------------------------
+
+    // My own copies of these so compilers are more likely to optimize them away
+    static private final double PI = 3.14159265358979323846;
+    static private final double PI2 = PI * 2.0;
+
+    static private final double HOUR_RAD = PI / 12;        // hours -> radians
+    static private final double RAD_HOUR = 12 / PI;        // radians -> hours
+    static private final double DEG_RAD  = PI / 180;        // degrees -> radians
+    static private final double RAD_DEG  = 180 / PI;        // radians -> degrees
+    
+    //-------------------------------------------------------------------------
+    // Constructors
+    //-------------------------------------------------------------------------
+
+    /**
+     * Construct a new <code>CalendarAstronomer</code> object that is initialized to
+     * the current date and time.
+     */
+    public CalendarAstronomer() {
+        this(System.currentTimeMillis());
+    }
+    
+    /**
+     * Construct a new <code>CalendarAstronomer</code> object that is initialized to
+     * the specified date and time.
+     */
+    public CalendarAstronomer(Date d) {
+        this(d.getTime());
+    }
+    
+    /**
+     * Construct a new <code>CalendarAstronomer</code> object that is initialized to
+     * the specified time.  The time is expressed as a number of milliseconds since
+     * January 1, 1970 AD (Gregorian).
+     *
+     * @see java.util.Date#getTime
+     */
+    public CalendarAstronomer(long aTime) {
+        time = aTime;
+    }
+    
+    /**
+     * Construct a new <code>CalendarAstronomer</code> object with the given
+     * latitude and longitude.  The object's time is set to the current
+     * date and time.
+     * <p>
+     * @param longitude The desired longitude, in <em>degrees</em> east of
+     *                  the Greenwich meridian.
+     *
+     * @param latitude  The desired latitude, in <em>degrees</em>.  Positive
+     *                  values signify North, negative South.
+     *
+     * @see java.util.Date#getTime
+     */
+    public CalendarAstronomer(double longitude, double latitude) {
+        this();
+        fLongitude = normPI(longitude * DEG_RAD);
+        fLatitude  = normPI(latitude  * DEG_RAD);
+        fGmtOffset = (long)(fLongitude * 24 * HOUR_MS / PI2);
+    }
+    
+    
+    //-------------------------------------------------------------------------
+    // Time and date getters and setters
+    //-------------------------------------------------------------------------
+    
+    /**
+     * Set the current date and time of this <code>CalendarAstronomer</code> object.  All
+     * astronomical calculations are performed based on this time setting.
+     *
+     * @param aTime the date and time, expressed as the number of milliseconds since
+     *              1/1/1970 0:00 GMT (Gregorian).
+     *
+     * @see #setDate
+     * @see #getTime
+     */
+    public void setTime(long aTime) {
+        time = aTime;
+        clearCache();
+    }
+    
+    /**
+     * Set the current date and time of this <code>CalendarAstronomer</code> object.  All
+     * astronomical calculations are performed based on this time setting.
+     *
+     * @param aTime the time and date, expressed as a <code>Date</code> object.
+     *
+     * @see #setTime
+     * @see #getDate
+     */
+    public void setDate(Date date) {
+        setTime(date.getTime());
+    }
+    
+    /**
+     * Set the current date and time of this <code>CalendarAstronomer</code> object.  All
+     * astronomical calculations are performed based on this time setting.
+     *
+     * @param jdn   the desired time, expressed as a "julian day number",
+     *              which is the number of elapsed days since 
+     *              1/1/4713 BC (Julian), 12:00 GMT.  Note that julian day
+     *              numbers start at <em>noon</em>.  To get the jdn for
+     *              the corresponding midnight, subtract 0.5.
+     *
+     * @see #getJulianDay
+     * @see #JULIAN_EPOCH_MS
+     */
+    public void setJulianDay(double jdn) {
+        time = (long)(jdn * DAY_MS) + JULIAN_EPOCH_MS;
+        clearCache();
+        julianDay = jdn;
+    }
+    
+    /**
+     * Get the current time of this <code>CalendarAstronomer</code> object,
+     * represented as the number of milliseconds since
+     * 1/1/1970 AD 0:00 GMT (Gregorian).
+     *
+     * @see #setTime
+     * @see #getDate
+     */
+    public long getTime() {
+        return time;
+    }
+    
+    /**
+     * Get the current time of this <code>CalendarAstronomer</code> object,
+     * represented as a <code>Date</code> object.
+     *
+     * @see #setDate
+     * @see #getTime
+     */
+    public Date getDate() {
+        return new Date(time);
+    }
+    
+    /**
+     * Get the current time of this <code>CalendarAstronomer</code> object,
+     * expressed as a "julian day number", which is the number of elapsed
+     * days since 1/1/4713 BC (Julian), 12:00 GMT.
+     *
+     * @see #setJulianDay
+     * @see #JULIAN_EPOCH_MS
+     */
+    public double getJulianDay() {
+        if (julianDay == INVALID) {
+            julianDay = (double)(time - JULIAN_EPOCH_MS) / (double)DAY_MS;
+        }
+        return julianDay;
+    }
+    
+    /**
+     * Return this object's time expressed in julian centuries:
+     * the number of centuries after 1/1/1900 AD, 12:00 GMT
+     *
+     * @see #getJulianDay
+     */
+    public double getJulianCentury() {
+        if (julianCentury == INVALID) {
+            julianCentury = (getJulianDay() - 2415020.0) / 36525;
+        }
+        return julianCentury;
+    }
+
+    /**
+     * Returns the current Greenwich sidereal time, measured in hours
+     */
+    public double getGreenwichSidereal() {
+        if (siderealTime == INVALID) {
+            // See page 86 of "Practial Astronomy with your Calculator",
+            // by Peter Duffet-Smith, for details on the algorithm.
+                
+            double UT = normalize((double)time/HOUR_MS, 24);
+        
+            siderealTime = normalize(getSiderealOffset() + UT*1.002737909, 24);
+        }
+        return siderealTime;
+    }
+    
+    private double getSiderealOffset() {
+        if (siderealT0 == INVALID) {
+            double JD  = Math.floor(getJulianDay() - 0.5) + 0.5;
+            double S   = JD - 2451545.0;
+            double T   = S / 36525.0;
+            siderealT0 = normalize(6.697374558 + 2400.051336*T + 0.000025862*T*T, 24);
+        }
+        return siderealT0;
+    }
+    
+    /**
+     * Returns the current local sidereal time, measured in hours
+     */
+    public double getLocalSidereal() {
+        return normalize(getGreenwichSidereal() + (double)fGmtOffset/HOUR_MS, 24);
+    }
+    
+    /**
+     * Converts local sidereal time to Universal Time.
+     *
+     * @param lst   The Local Sidereal Time, in hours since sidereal midnight
+     *              on this object's current date.
+     *
+     * @return      The corresponding Universal Time, in milliseconds since
+     *              1 Jan 1970, GMT.  
+     */
+    private long lstToUT(double lst) {
+        // Convert to local mean time
+        double lt = normalize((lst - getSiderealOffset()) * 0.9972695663, 24);
+        
+        // Then find local midnight on this day
+        long base = DAY_MS * ((time + fGmtOffset)/DAY_MS) - fGmtOffset;
+        
+        //out("    lt  =" + lt + " hours");
+        //out("    base=" + new Date(base));
+        
+        return base + (long)(lt * HOUR_MS);
+    }
+    
+    
+    //-------------------------------------------------------------------------
+    // Coordinate transformations, all based on the current time of this object
+    //-------------------------------------------------------------------------
+
+    /**
+     * Convert from ecliptic to equatorial coordinates.
+     *
+     * @param ecliptic  A point in the sky in ecliptic coordinates.
+     * @return          The corresponding point in equatorial coordinates.
+     */
+    public final Equatorial eclipticToEquatorial(Ecliptic ecliptic)
+    {
+        return eclipticToEquatorial(ecliptic.longitude, ecliptic.latitude);
+    }
+
+    /**
+     * Convert from ecliptic to equatorial coordinates.
+     *
+     * @param eclipLong     The ecliptic longitude
+     * @param eclipLat      The ecliptic latitude
+     *
+     * @return              The corresponding point in equatorial coordinates.
+     */
+    public final Equatorial eclipticToEquatorial(double eclipLong, double eclipLat)
+    {
+        // See page 42 of "Practial Astronomy with your Calculator",
+        // by Peter Duffet-Smith, for details on the algorithm.
+
+        double obliq = eclipticObliquity();
+        double sinE = Math.sin(obliq);
+        double cosE = Math.cos(obliq);
+        
+        double sinL = Math.sin(eclipLong);
+        double cosL = Math.cos(eclipLong);
+        
+        double sinB = Math.sin(eclipLat);
+        double cosB = Math.cos(eclipLat);
+        double tanB = Math.tan(eclipLat);
+        
+        return new Equatorial(Math.atan2(sinL*cosE - tanB*sinE, cosL),
+                               Math.asin(sinB*cosE + cosB*sinE*sinL) );
+    }
+
+    /**
+     * Convert from ecliptic longitude to equatorial coordinates.
+     *
+     * @param eclipLong     The ecliptic longitude
+     *
+     * @return              The corresponding point in equatorial coordinates.
+     */
+    public final Equatorial eclipticToEquatorial(double eclipLong)
+    {
+        return eclipticToEquatorial(eclipLong, 0);  // TODO: optimize
+    }
+
+
+    public Horizon eclipticToHorizon(double eclipLong)
+    {
+        Equatorial equatorial = eclipticToEquatorial(eclipLong);
+        
+        double H = getLocalSidereal()*PI/12 - equatorial.ascension;     // Hour-angle
+        
+        double sinH = Math.sin(H);
+        double cosH = Math.cos(H);
+        double sinD = Math.sin(equatorial.declination);
+        double cosD = Math.cos(equatorial.declination);
+        double sinL = Math.sin(fLatitude);
+        double cosL = Math.cos(fLatitude);
+        
+        double altitude = Math.asin(sinD*sinL + cosD*cosL*cosH);
+        double azimuth  = Math.atan2(-cosD*cosL*sinH, sinD - sinL * Math.sin(altitude));
+
+        return new Horizon(azimuth, altitude);
+    }
+
+    
+    //-------------------------------------------------------------------------
+    // The Sun
+    //-------------------------------------------------------------------------
+    
+    //
+    // Parameters of the Sun's orbit as of 1/1/1990
+    // Angles are in radians (after multiplying by PI/180)
+    //
+    double jdnEpoch  = 2447891.5;           // JDN of epoch (Jan 0.0 1990)
+
+    double sunEtaG   = 279.403303 * PI/180; // Ecliptic longitude at epoch
+    double sunOmegaG = 282.768422 * PI/180; // Ecliptic longitude of perigee
+    double sunE      =   0.016713;          // Eccentricity of orbit
+    double sunR0     =   1.495585e8;        // Semi-major axis in KM
+    double sunTheta0 =   0.533128 * PI/180; // Angular diameter at R0
+
+    /**
+     * The longitude of the sun at the time specified by this object.
+     * The longitude is measured in radians along the ecliptic
+     * from the "first point of Aries," the point at which the ecliptic
+     * crosses the earth's equatorial plane at the vernal equinox.
+     * <p>
+     * Currently, this method uses an approximation of the two-body Kepler's
+     * equation for the earth and the sun.  It does not take into account the
+     * perturbations caused by the other planets, the moon, etc.
+     */
+    public double getSunLongitude()
+    {
+        // See page 86 of "Practial Astronomy with your Calculator",
+        // by Peter Duffet-Smith, for details on the algorithm.
+        
+        if (sunLongitude == INVALID) {
+            double day = getJulianDay() - jdnEpoch;       // Days since epoch
+            
+            // Find the angular distance the sun in a fictitious
+            // circular orbit has travelled since the epoch.
+            double epochAngle = norm2PI(PI2/TROPICAL_YEAR*day);
+            
+            // The epoch wasn't at the sun's perigee; find the angular distance
+            // since perigee, which is called the "mean anomaly"
+            meanAnomalySun = norm2PI(epochAngle + sunEtaG - sunOmegaG);
+            
+            // Now find the "true anomaly", e.g. the real solar longitude
+            // by solving Kepler's equation for an elliptical orbit
+            sunLongitude = norm2PI(trueAnomaly(meanAnomalySun, sunE) + sunOmegaG);
+        }
+        return sunLongitude;
+    }
+  
+    /**
+     * The position of the sun at this object's current date and time,
+     * in equatorial coordinates.
+     */
+    public Equatorial getSunPosition() {
+        return eclipticToEquatorial(getSunLongitude(), 0);
+    }
+    
+    private static class SolarLongitude {
+        double value;
+        SolarLongitude(double val) { value = val; }
+    }
+    
+    /**
+     * Constant representing the vernal equinox.
+     * For use with {@link #getSunTime getSunTime}. 
+     * Note: In this case, "vernal" refers to the northern hemisphere's seasons.
+     */
+    public static final SolarLongitude VERNAL_EQUINOX  = new SolarLongitude(0);
+    
+    /**
+     * Constant representing the summer solstice.
+     * For use with {@link #getSunTime getSunTime}.
+     * Note: In this case, "summer" refers to the northern hemisphere's seasons.
+     */
+    public static final SolarLongitude SUMMER_SOLSTICE = new SolarLongitude(PI/2);
+    
+    /**
+     * Constant representing the autumnal equinox.
+     * For use with {@link #getSunTime getSunTime}.
+     * Note: In this case, "autumn" refers to the northern hemisphere's seasons.
+     */
+    public static final SolarLongitude AUTUMN_EQUINOX  = new SolarLongitude(PI);
+    
+    /**
+     * Constant representing the winter solstice.
+     * For use with {@link #getSunTime getSunTime}.
+     * Note: In this case, "winter" refers to the northern hemisphere's seasons.
+     */
+    public static final SolarLongitude WINTER_SOLSTICE = new SolarLongitude((PI*3)/2);
+    
+    /**
+     * Find the next time at which the sun's ecliptic longitude will have
+     * the desired value.  
+     */
+    public long getSunTime(double desired, boolean next)
+    {
+        return timeOfAngle( new AngleFunc() { public double eval() { return getSunLongitude(); } },
+                            desired,
+                            TROPICAL_YEAR,
+                            MINUTE_MS,
+                            next);
+    }
+    
+    /**
+     * Find the next time at which the sun's ecliptic longitude will have
+     * the desired value.  
+     */
+    public long getSunTime(SolarLongitude desired, boolean next) {
+        return getSunTime(desired.value, next);
+    }
+    
+    /**
+     * Returns the time (GMT) of sunrise or sunset on the local date to which
+     * this calendar is currently set.
+     */
+    public long getSunRiseSet(boolean rise)
+    {
+        // Make a rough guess: 6am or 6pm local time on the current day
+        long noon = ((time + fGmtOffset)/DAY_MS)*DAY_MS - fGmtOffset + 12*HOUR_MS;
+        
+        setTime(noon + (long)((rise ? -6 : 6) * HOUR_MS));
+        
+        return riseOrSet(new CoordFunc() {
+                            public Equatorial eval() { return getSunPosition(); }
+                         },
+                         rise,
+                         .533 * DEG_RAD,        // Angular Diameter
+                         34 /60.0 * DEG_RAD,    // Refraction correction
+                         MINUTE_MS);            // Desired accuracy
+    }
+
+    //-------------------------------------------------------------------------
+    // The Moon
+    //-------------------------------------------------------------------------
+    
+    static final double moonL0 = 318.351648 * PI/180;   // Mean long. at epoch
+    static final double moonP0 =  36.340410 * PI/180;   // Mean long. of perigee
+    static final double moonN0 = 318.510107 * PI/180;   // Mean long. of node
+    static final double moonI  =   5.145366 * PI/180;   // Inclination of orbit
+    static final double moonE  =   0.054900;            // Eccentricity of orbit
+    
+    // These aren't used right now
+    static final double moonA  =   3.84401e5;           // semi-major axis (km)
+    static final double moonT0 =   0.5181 * PI/180;     // Angular size at distance A
+    static final double moonPi =   0.9507 * PI/180;     // Parallax at distance A
+    
+    /**
+     * The position of the moon at the time set on this
+     * object, in equatorial coordinates.
+     */
+    public Equatorial getMoonPosition()
+    {
+        //
+        // See page 142 of "Practial Astronomy with your Calculator",
+        // by Peter Duffet-Smith, for details on the algorithm.
+        //
+        if (moonPosition == null) {
+            // Calculate the solar longitude.  Has the side effect of
+            // filling in "meanAnomalySun" as well.
+            double sunLongitude = getSunLongitude();
+            
+            //
+            // Find the # of days since the epoch of our orbital parameters.
+            // TODO: Convert the time of day portion into ephemeris time
+            //
+            double day = getJulianDay() - jdnEpoch;       // Days since epoch
+            
+            // Calculate the mean longitude and anomaly of the moon, based on
+            // a circular orbit.  Similar to the corresponding solar calculation.
+            double meanLongitude = norm2PI(13.1763966*PI/180*day + moonL0);
+            double meanAnomalyMoon = norm2PI(meanLongitude - 0.1114041*PI/180 * day - moonP0);
+            
+            //
+            // Calculate the following corrections:
+            //  Evection:   the sun's gravity affects the moon's eccentricity
+            //  Annual Eqn: variation in the effect due to earth-sun distance
+            //  A3:         correction factor (for ???)
+            //
+            double evection = 1.2739*PI/180 * Math.sin(2 * (meanLongitude - sunLongitude)
+                                                - meanAnomalyMoon);
+            double annual   = 0.1858*PI/180 * Math.sin(meanAnomalySun);
+            double a3       = 0.3700*PI/180 * Math.sin(meanAnomalySun);
+
+            meanAnomalyMoon += evection - annual - a3;
+            
+            //
+            // More correction factors:
+            //  center  equation of the center correction
+            //  a4      yet another error correction (???)
+            //
+            // TODO: Skip the equation of the center correction and solve Kepler's eqn?
+            //
+            double center = 6.2886*PI/180 * Math.sin(meanAnomalyMoon);
+            double a4 =     0.2140*PI/180 * Math.sin(2 * meanAnomalyMoon);
+            
+            // Now find the moon's corrected longitude
+            moonLongitude = meanLongitude + evection + center - annual + a4;
+
+            //
+            // And finally, find the variation, caused by the fact that the sun's
+            // gravitational pull on the moon varies depending on which side of
+            // the earth the moon is on
+            //
+            double variation = 0.6583*PI/180 * Math.sin(2*(moonLongitude - sunLongitude));
+            
+            moonLongitude += variation;
+            
+            //
+            // What we've calculated so far is the moon's longitude in the plane
+            // of its own orbit.  Now map to the ecliptic to get the latitude
+            // and longitude.  First we need to find the longitude of the ascending
+            // node, the position on the ecliptic where it is crossed by the moon's
+            // orbit as it crosses from the southern to the northern hemisphere.
+            //
+            double nodeLongitude = norm2PI(moonN0 - 0.0529539*PI/180 * day);
+
+            nodeLongitude -= 0.16*PI/180 * Math.sin(meanAnomalySun);
+
+            double y = Math.sin(moonLongitude - nodeLongitude);
+            double x = Math.cos(moonLongitude - nodeLongitude);
+            
+            moonEclipLong = Math.atan2(y*Math.cos(moonI), x) + nodeLongitude;
+            double moonEclipLat = Math.asin(y * Math.sin(moonI));
+
+            moonPosition = eclipticToEquatorial(moonEclipLong, moonEclipLat);
+        }
+        return moonPosition;
+    }
+    
+    /**
+     * The "age" of the moon at the time specified in this object.
+     * This is really the angle between the
+     * current ecliptic longitudes of the sun and the moon,
+     * measured in radians.
+     *
+     * @see #getMoonPhase
+     */
+    public double getMoonAge() {
+        // See page 147 of "Practial Astronomy with your Calculator",
+        // by Peter Duffet-Smith, for details on the algorithm.
+        //
+        // Force the moon's position to be calculated.  We're going to use
+        // some the intermediate results cached during that calculation.
+        //
+        getMoonPosition();
+        
+        return norm2PI(moonEclipLong - sunLongitude);
+    }
+    
+    /**
+     * Calculate the phase of the moon at the time set in this object.
+     * The returned phase is a <code>double</code> in the range
+     * <code>0 <= phase < 1</code>, interpreted as follows:
+     * <ul>
+     * <li>0.00: New moon
+     * <li>0.25: First quarter
+     * <li>0.50: Full moon
+     * <li>0.75: Last quarter
+     * </ul>
+     *
+     * @see #getMoonAge
+     */
+    public double getMoonPhase() {
+        // See page 147 of "Practial Astronomy with your Calculator",
+        // by Peter Duffet-Smith, for details on the algorithm.
+        return 0.5 * (1 - Math.cos(getMoonAge()));
+    }
+    
+    private static class MoonAge {
+        double value;
+        MoonAge(double val) { value = val; }
+    }
+    
+    /**
+     * Constant representing a new moon.
+     * For use with {@link #getMoonTime getMoonTime}
+     */
+    public static final MoonAge NEW_MOON      = new MoonAge(0);
+
+    /**
+     * Constant representing the moon's first quarter.
+     * For use with {@link #getMoonTime getMoonTime}
+     */
+    public static final MoonAge FIRST_QUARTER = new MoonAge(PI/2);
+    
+    /**
+     * Constant representing a full moon.
+     * For use with {@link #getMoonTime getMoonTime}
+     */
+    public static final MoonAge FULL_MOON     = new MoonAge(PI);
+    
+    /**
+     * Constant representing the moon's last quarter.
+     * For use with {@link #getMoonTime getMoonTime}
+     */
+    public static final MoonAge LAST_QUARTER  = new MoonAge((PI*3)/2);
+    
+    /**
+     * Find the next or previous time at which the Moon's ecliptic
+     * longitude will have the desired value.  
+     * <p>
+     * @param desired   The desired longitude.
+     * @param next      <tt>true</tt> if the next occurrance of the phase
+     *                  is desired, <tt>false</tt> for the previous occurrance. 
+     */
+    public long getMoonTime(double desired, boolean next)
+    {
+        return timeOfAngle( new AngleFunc() {
+                            public double eval() { return getMoonAge(); } },
+                            desired,
+                            SYNODIC_MONTH,
+                            MINUTE_MS,
+                            next);
+    }
+    
+    /**
+     * Find the next or previous time at which the moon will be in the
+     * desired phase.
+     * <p>
+     * @param desired   The desired phase of the moon.
+     * @param next      <tt>true</tt> if the next occurrance of the phase
+     *                  is desired, <tt>false</tt> for the previous occurrance. 
+     */
+    public long getMoonTime(MoonAge desired, boolean next) {
+        return getMoonTime(desired.value, next);
+    }
+    
+    /**
+     * Returns the time (GMT) of sunrise or sunset on the local date to which
+     * this calendar is currently set.
+     */
+    public long getMoonRiseSet(boolean rise)
+    {
+        return riseOrSet(new CoordFunc() {
+                            public Equatorial eval() { return getMoonPosition(); }
+                         },
+                         rise,
+                         .533 * DEG_RAD,        // Angular Diameter
+                         34 /60.0 * DEG_RAD,    // Refraction correction
+                         MINUTE_MS);            // Desired accuracy
+    }
+
+    //-------------------------------------------------------------------------
+    // Interpolation methods for finding the time at which a given event occurs
+    //-------------------------------------------------------------------------
+    
+    private interface AngleFunc {
+        public double eval();
+    };
+    
+    private long timeOfAngle(AngleFunc func, double desired,
+                             double periodDays, long epsilon, boolean next)
+    {
+        // Find the value of the function at the current time
+        double lastAngle = func.eval();
+        
+        // Find out how far we are from the desired angle
+        double deltaAngle = norm2PI(desired - lastAngle) ;
+        
+        // Using the average period, estimate the next (or previous) time at
+        // which the desired angle occurs.
+        double deltaT =  (deltaAngle + (next ? 0 : -PI2)) * (periodDays*DAY_MS) / PI2;
+        
+        double lastDeltaT = deltaT; // Liu
+        long startTime = time; // Liu
+        
+        setTime(time + (long)deltaT);
+
+        // Now iterate until we get the error below epsilon.  Throughout
+        // this loop we use normPI to get values in the range -Pi to Pi,
+        // since we're using them as correction factors rather than absolute angles.
+        do {
+            // Evaluate the function at the time we've estimated
+            double angle = func.eval();
+
+            // Find the # of milliseconds per radian at this point on the curve
+            double factor = Math.abs(deltaT / normPI(angle-lastAngle));
+
+            // Correct the time estimate based on how far off the angle is
+            deltaT = normPI(desired - angle) * factor;
+            
+            // HACK:
+            // 
+            // If abs(deltaT) begins to diverge we need to quit this loop.
+            // This only appears to happen when attempting to locate, for
+            // example, a new moon on the day of the new moon.  E.g.:
+            // 
+            // This result is correct:
+            // newMoon(7508(Mon Jul 23 00:00:00 CST 1990,false))=
+            //   Sun Jul 22 10:57:41 CST 1990
+            // 
+            // But attempting to make the same call a day earlier causes deltaT
+            // to diverge:
+            // CalendarAstronomer.timeOfAngle() diverging: 1.348508727575625E9 ->
+            //   1.3649828540224032E9
+            // newMoon(7507(Sun Jul 22 00:00:00 CST 1990,false))=
+            //   Sun Jul 08 13:56:15 CST 1990
+            //
+            // As a temporary solution, we catch this specific condition and
+            // adjust our start time by one eighth period days (either forward
+            // or backward) and try again.
+            // Liu 11/9/00
+            if (Math.abs(deltaT) > Math.abs(lastDeltaT)) {
+                long delta = (long) (periodDays * DAY_MS / 8);
+                setTime(startTime + (next ? delta : -delta));
+                return timeOfAngle(func, desired, periodDays, epsilon, next);
+            }
+
+            lastDeltaT = deltaT;
+            lastAngle = angle;
+
+            setTime(time + (long)deltaT);
+        }
+        while (Math.abs(deltaT) > epsilon);
+        
+        return time;
+    }
+    
+    private interface CoordFunc {
+        public Equatorial eval();
+    };
+    
+    private long riseOrSet(CoordFunc func, boolean rise,
+                           double diameter, double refraction, 
+                           long epsilon)
+    {        
+        Equatorial  pos = null;
+        double      tanL   = Math.tan(fLatitude);
+        long        deltaT = Long.MAX_VALUE;
+        int         count = 0;
+        
+        //
+        // Calculate the object's position at the current time, then use that
+        // position to calculate the time of rising or setting.  The position
+        // will be different at that time, so iterate until the error is allowable.
+        //
+        do {
+            // See "Practical Astronomy With Your Calculator, section 33.
+            pos = func.eval();
+            double angle = Math.acos(-tanL * Math.tan(pos.declination));
+            double lst = ((rise ? PI2-angle : angle) + pos.ascension ) * 24 / PI2;
+                         
+            // Convert from LST to Universal Time.
+            long newTime = lstToUT( lst );
+            
+            deltaT = newTime - time;
+            setTime(newTime);
+        }
+        while (++ count < 5 && Math.abs(deltaT) > epsilon);
+        
+        // Calculate the correction due to refraction and the object's angular diameter
+        double cosD  = Math.cos(pos.declination);
+        double psi   = Math.acos(Math.sin(fLatitude) / cosD);
+        double x     = diameter / 2 + refraction;
+        double y     = Math.asin(Math.sin(x) / Math.sin(psi));
+        long  delta  = (long)((240 * y * RAD_DEG / cosD)*SECOND_MS);
+        
+        return time + (rise ? -delta : delta);
+    }
+    
+    //-------------------------------------------------------------------------
+    // Other utility methods
+    //-------------------------------------------------------------------------
+
+    private static final double normalize(double value, double range) {
+        return value - range * Math.floor(value / range);
+    }
+    
+    /**
+     * Normalize an angle so that it's in the range 0 - 2pi.
+     * For positive angles this is just (angle % 2pi), but the Java
+     * mod operator doesn't work that way for negative numbers....
+     */
+    private static final double norm2PI(double angle) {
+        return normalize(angle, PI2);
+    }
+    
+    /**
+     * Normalize an angle into the range -PI - PI
+     */
+    private static final double normPI(double angle) {
+        return normalize(angle + PI, PI2) - PI;
+    }
+    
+    /**
+     * Find the "true anomaly" (longitude) of an object from
+     * its mean anomaly and the eccentricity of its orbit.  This uses
+     * an iterative solution to Kepler's equation.
+     *
+     * @param meanAnomaly   The object's longitude calculated as if it were in
+     *                      a regular, circular orbit, measured in radians
+     *                      from the point of perigee.  
+     *
+     * @param eccentricity  The eccentricity of the orbit
+     *
+     * @return The true anomaly (longitude) measured in radians
+     */
+    private double trueAnomaly(double meanAnomaly, double eccentricity)
+    {
+        // First, solve Kepler's equation iteratively
+        double delta;
+        double E = meanAnomaly;
+        do {
+            delta = E - eccentricity * Math.sin(E) - meanAnomaly;
+            E = E - delta / (1 - eccentricity * Math.cos(E));
+        } 
+        while (Math.abs(delta) > accuracy);
+
+        return 2.0 * Math.atan( Math.tan(E/2) * Math.sqrt( (1+eccentricity)
+                                                          /(1-eccentricity) ) );
+    }
+    
+    static private final double accuracy = 0.01 * PI/180;  // 0.01 degrees
+    
+    /**
+     * Return the obliquity of the ecliptic (the angle between the ecliptic
+     * and the earth's equator) at the current time.  This varies due to
+     * the precession of the earth's axis.
+     *
+     * @return  the obliquity of the ecliptic relative to the equator,
+     *          measured in radians.
+     */
+    private double eclipticObliquity() {
+        if (eclipObliquity == INVALID) {
+            final double epoch = 2451545.0;     // 2000 AD, January 1.5
+
+            double T = (getJulianDay() - epoch) / 36525;
+            
+            eclipObliquity = 23.439292
+                           - 46.815/3600 * T
+                           - 0.0006 * T*T
+                           + 0.00181 * T*T*T;
+                           
+            eclipObliquity *= DEG_RAD;
+        }
+        return eclipObliquity;
+    }
+    
+     
+    //-------------------------------------------------------------------------
+    // Private data
+    //-------------------------------------------------------------------------
+    
+    /**
+     * Current time in milliseconds since 1/1/1970 AD
+     * @see java.util.Date#getTime
+     */
+    private long time;
+    
+    /* These aren't used yet, but they'll be needed for sunset calculations
+     * and equatorial to horizon coordinate conversions
+     */
+    private double fLongitude = 0.0;
+    private double fLatitude  = 0.0;
+    private long   fGmtOffset = 0;
+    
+    //
+    // The following fields are used to cache calculated results for improved
+    // performance.  These values all depend on the current time setting
+    // of this object, so the clearCache method is provided.
+    //
+    static final private double INVALID = Double.MIN_VALUE;
+    
+    private transient double    julianDay       = INVALID;
+    private transient double    julianCentury   = INVALID;
+    private transient double    sunLongitude    = INVALID;
+    private transient double    meanAnomalySun  = INVALID;
+    private transient double    moonLongitude   = INVALID;
+    private transient double    moonEclipLong   = INVALID;
+    private transient double    meanAnomalyMoon = INVALID;
+    private transient double    eclipObliquity  = INVALID;
+    private transient double    siderealT0      = INVALID;
+    private transient double    siderealTime    = INVALID;
+    
+    private transient Equatorial  moonPosition = null;
+
+    private void clearCache() {
+        julianDay       = INVALID;
+        julianCentury   = INVALID;
+        sunLongitude    = INVALID;
+        meanAnomalySun  = INVALID;
+        moonLongitude   = INVALID;
+        moonEclipLong   = INVALID;
+        meanAnomalyMoon = INVALID;
+        eclipObliquity  = INVALID;
+        siderealTime    = INVALID;
+        siderealT0      = INVALID;
+        moonPosition    = null;
+    }
+    
+    private static void out(String s) {
+        System.out.println(s);
+    }
+    
+    private static String deg(double rad) {
+        return Double.toString(rad * RAD_DEG);
+    }
+    
+    private static String hours(long ms) {
+        return Double.toString((double)ms / HOUR_MS) + " hours";
+    }
+    public String local(long localMillis) {
+        return new Date(localMillis - TimeZone.getDefault().getRawOffset()).toString();
+    }
+    
+    
+    /**
+     * Represents the position of an object in the sky relative to the ecliptic,
+     * the plane of the earth's orbit around the Sun. 
+     * This is a spherical coordinate system in which the latitude
+     * specifies the position north or south of the plane of the ecliptic.
+     * The longitude specifies the position along the ecliptic plane
+     * relative to the "First Point of Aries", which is the Sun's position in the sky
+     * at the Vernal Equinox.
+     * <p>
+     * Note that Ecliptic objects are immutable and cannot be modified
+     * once they are constructed.  This allows them to be passed and returned by
+     * value without worrying about whether other code will modify them.
+     *
+     * @see CalendarAstronomer.Equatorial
+     * @see CalendarAstronomer.Horizon
+     */
+    public static final class Ecliptic {
+        /**
+         * Constructs an Ecliptic coordinate object.
+         * <p>
+         * @param lat The ecliptic latitude, measured in radians.
+         * @param lon The ecliptic longitude, measured in radians.
+         */
+        public Ecliptic(double lat, double lon) {
+            latitude = lat;
+            longitude = lon;
+        }
+
+        /**
+         * Return a string representation of this object
+         */
+        public String toString() {
+            return Double.toString(longitude*RAD_DEG) + "," + (latitude*RAD_DEG);
+        }
+        
+        /**
+         * The ecliptic latitude, in radians.  This specifies an object's
+         * position north or south of the plane of the ecliptic,
+         * with positive angles representing north.
+         */
+        public final double latitude;
+        
+        /**
+         * The ecliptic longitude, in radians.
+         * This specifies an object's position along the ecliptic plane
+         * relative to the "First Point of Aries", which is the Sun's position
+         * in the sky at the Vernal Equinox,
+         * with positive angles representing east.
+         * <p>
+         * A bit of trivia: the first point of Aries is currently in the
+         * constellation Pisces, due to the precession of the earth's axis.
+         */
+        public final double longitude;
+    };
+
+    /**
+     * Represents the position of an 
+     * object in the sky relative to the plane of the earth's equator. 
+     * The <i>Right Ascension</i> specifies the position east or west
+     * along the equator, relative to the sun's position at the vernal
+     * equinox.  The <i>Declination</i> is the position north or south
+     * of the equatorial plane.
+     * <p>
+     * Note that Equatorial objects are immutable and cannot be modified
+     * once they are constructed.  This allows them to be passed and returned by
+     * value without worrying about whether other code will modify them.
+     *
+     * @see CalendarAstronomer.Ecliptic
+     * @see CalendarAstronomer.Horizon
+     */
+    public static final class Equatorial {
+        /**
+         * Constructs an Equatorial coordinate object.
+         * <p>
+         * @param asc The right ascension, measured in radians.
+         * @param dec The declination, measured in radians.
+         */
+        public Equatorial(double asc, double dec) {
+            ascension = asc;
+            declination = dec;
+        }
+
+        /**
+         * Return a string representation of this object, with the
+         * angles measured in degrees.
+         */
+        public String toString() {
+            return Double.toString(ascension*RAD_DEG) + "," + (declination*RAD_DEG);
+        }
+        
+        /**
+         * Return a string representation of this object with the right ascension
+         * measured in hours, minutes, and seconds.
+         */
+        public String toHmsString() {
+            return radToHms(ascension) + "," + radToDms(declination);
+        }
+        
+        /**
+         * The right ascension, in radians. 
+         * This is the position east or west along the equator
+         * relative to the sun's position at the vernal equinox,
+         * with positive angles representing East.
+         */
+        public final double ascension;
+        
+        /**
+         * The declination, in radians.
+         * This is the position north or south of the equatorial plane,
+         * with positive angles representing north.
+         */
+        public final double declination;
+    };
+
+    /**
+     * Represents the position of an  object in the sky relative to 
+     * the local horizon.
+     * The <i>Altitude</i> represents the object's elevation above the horizon,
+     * with objects below the horizon having a negative altitude.
+     * The <i>Azimuth</i> is the geographic direction of the object from the
+     * observer's position, with 0 representing north.  The azimuth increases
+     * clockwise from north.
+     * <p>
+     * Note that Horizon objects are immutable and cannot be modified
+     * once they are constructed.  This allows them to be passed and returned by
+     * value without worrying about whether other code will modify them.
+     *
+     * @see CalendarAstronomer.Ecliptic
+     * @see CalendarAstronomer.Equatorial
+     */
+    public static final class Horizon {
+        /**
+         * Constructs a Horizon coordinate object.
+         * <p>
+         * @param alt  The altitude, measured in radians above the horizon.
+         * @param azim The azimuth, measured in radians clockwise from north.
+         */
+        public Horizon(double alt, double azim) {
+            altitude = alt;
+            azimuth = azim;
+        }
+
+        /**
+         * Return a string representation of this object, with the
+         * angles measured in degrees.
+         */
+        public String toString() {
+            return Double.toString(altitude*RAD_DEG) + "," + (azimuth*RAD_DEG);
+        }
+        
+        /** The object's altitude above the horizon, in radians. */
+        public final double altitude;
+        
+        /** The object's direction, in radians clockwise from north. */
+        public final double azimuth;
+    };
+
+    static private String radToHms(double angle) {
+        int hrs = (int) (angle*RAD_HOUR);
+        int min = (int)((angle*RAD_HOUR - hrs) * 60);
+        int sec = (int)((angle*RAD_HOUR - hrs - min/60.0) * 3600);
+        
+        return Integer.toString(hrs) + "h" + min + "m" + sec + "s";
+    }
+    
+    static private String radToDms(double angle) {
+        int deg = (int) (angle*RAD_DEG);
+        int min = (int)((angle*RAD_DEG - deg) * 60);
+        int sec = (int)((angle*RAD_DEG - deg - min/60.0) * 3600);
+        
+        return Integer.toString(deg) + "\u00b0" + min + "'" + sec + "\"";
+    }
+}
diff --git a/src/com/ibm/util/CalendarCache.java b/src/com/ibm/util/CalendarCache.java
new file mode 100755
index 0000000..4e8c1d7
--- /dev/null
+++ b/src/com/ibm/util/CalendarCache.java
@@ -0,0 +1,118 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/CalendarCache.java,v $ 
+ * $Date: 2000/11/18 00:31:43 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+public class CalendarCache
+{
+    public CalendarCache() {
+        makeArrays(arraySize);
+    }
+    
+    private void makeArrays(int newSize) {
+        keys    = new long[newSize];
+        values  = new long[newSize];
+        
+        for (int i = 0; i < newSize; i++) {
+            values[i] = EMPTY;
+        }
+        arraySize = newSize;
+        threshold = (int)(arraySize * 0.75);
+        size = 0;
+    }
+    
+    public synchronized long get(long key) {
+        return values[findIndex(key)];
+    }
+    
+    public synchronized void put(long key, long value)
+    {
+        if (size >= threshold) {
+            rehash();
+        }
+        int index = findIndex(key);
+        
+        keys[index] = key;
+        values[index] = value;
+        size++;
+    }
+    
+    private final int findIndex(long key) {
+        int index = hash(key);
+        int delta = 0;
+        
+        while (values[index] != EMPTY && keys[index] != key)
+        {
+            if (delta == 0) {
+                delta = hash2(key);
+            }
+            index = (index + delta) % arraySize;
+        }
+        return index;
+    }
+    
+    private void rehash()
+    {
+        int oldSize = arraySize;
+        long[] oldKeys = keys;
+        long[] oldValues = values;
+        
+        if (pIndex < primes.length - 1) {
+            arraySize = primes[++pIndex];
+        } else {
+            arraySize = arraySize * 2 + 1;
+        }
+        size = 0;
+        
+        makeArrays(arraySize);
+        for (int i = 0; i < oldSize; i++) {
+            if (oldValues[i] != EMPTY) {
+                put(oldKeys[i], oldValues[i]);
+            }
+        }
+        oldKeys = oldValues = null; // Help out the garbage collector
+    }
+    
+    
+    /**
+     * Produce a uniformly-distributed hash value from an integer key.
+     * This is essentially a linear congruential random number generator
+     * that uses the key as its seed value.
+     */
+    private final int hash(long key)
+    {
+        int h = (int)((key * 15821 + 1) % arraySize);
+        if (h < 0) {
+            h += arraySize;
+        }
+        return h;
+    }
+    
+    private final int hash2(long key) {
+        return arraySize - 2 - (int)(key % (arraySize-2) );
+    }
+    
+    static private final int primes[] = {  // 5, 17, 31, 47, // for testing
+        61, 127, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521,
+        131071, 262139, 
+    };
+
+    private int     pIndex      = 0;
+    private int     size        = 0;
+    private int     arraySize   = primes[pIndex];
+    private int     threshold   = (arraySize * 3) / 4;
+    
+    private long[]  keys        = new long[arraySize];
+    private long[]  values      = new long[arraySize];
+    
+    static public  long EMPTY   = Long.MIN_VALUE;
+}
diff --git a/src/com/ibm/util/CharTrie.java b/src/com/ibm/util/CharTrie.java
new file mode 100755
index 0000000..35a23ae
--- /dev/null
+++ b/src/com/ibm/util/CharTrie.java
@@ -0,0 +1,232 @@
+/*
+******************************************************************************
+* Copyright (C) 1996-2001, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/CharTrie.java,v $ 
+* $Date: 2001/03/28 00:01:52 $ 
+* $Revision: 1.1 $
+*
+******************************************************************************
+*/
+
+package com.ibm.util;
+
+import com.ibm.text.UCharacter;
+
+/**
+* Class to manipulate and generate a trie.
+* This is useful for ICU data in primitive types.
+* Provides a compact way to store information that is indexed by Unicode 
+* values, such as character properties, types, keyboard values, etc. This is 
+* very useful when you have a block of Unicode data that contains significant 
+* values while the rest of the Unicode data is unused in the application or 
+* when you have a lot of redundance, such as where all 21,000 Han ideographs 
+* have the same value.  However, lookup is much faster than a hash table.
+* A trie of any primitive data type serves two purposes:
+* <UL type = round>
+*     <LI>Fast access of the indexed values.
+*     <LI>Smaller memory footprint.
+* </UL>
+* A trie is composed of 2 index array and value array. Combining the 2 index
+* array, we could get the indicies of Unicode characters to the value array.
+* The first index array will contain indexes corresponding to the first 11 
+* bits of a 21 bit codepoint, the second index array will contain indexes 
+* corresponding to the next 6 bits of the code point. The last array will 
+* contain the values. Hence to access the value of a codepoint, we can use the
+* following program
+* <p>
+*   int firstindex = ch >> FIRST_11_BITS_SHIFT;<br>
+*   int secondindex = index1[firstindex] + 
+*                       (ch >> NEXT_6_BITS_SHIFT) & NEXT_6_BITS_MASK;<br>
+*   int thirdindex = index2[secondindex] + ch & LAST_FOUR_BITS_MASK;<br>    
+*   f(ch) = value[thirdindex];<br>
+* </p>
+* @version            $Revision: 1.1 $
+* @author             Syn Wee Quek
+*/
+public final class CharTrie
+{
+  // constructors -----------------------------------------------------
+  
+  /**
+  * constructor 
+  * @param array of data to be populated into trie
+  */
+  public CharTrie(char array[])
+  {
+    build(array);
+  }
+  
+  /**
+  * constructor that assigns trie the argument values. Arrays are not 
+  * duplicated.
+  * @param stage1 array of the first set of indexes
+  * @param stage2 array of the second set of indexes
+  * @param stage3 array of data
+  */
+  public CharTrie(int stage1[], int stage2[], char stage3[])
+  {
+    m_stage1_ = stage1;
+    m_stage2_ = stage2;
+    m_stage3_ = stage3;
+  }
+  
+  // public methods ----------------------------------------------------
+  
+  /**
+  * Getting the trie data corresponding to the argument index.
+  * @param index to be manipulated into corresponding trie index
+  * @return trie value at index
+  */
+  public char getValue(int index)
+  {
+    // index of the first access to the database 
+    int index1 = index >> STAGE_1_SHIFT_;
+    // index of the second access to the database
+    int index2 = m_stage1_[index1] + 
+                 ((index >> STAGE_2_SHIFT_) & STAGE_2_MASK_AFTER_SHIFT_);
+    // index of the third access to the database
+    int index3 = m_stage2_[index2] + (index & STAGE_3_MASK_);  
+    // retrieves value
+    return m_stage3_[index3];
+  }
+  
+  // private data members ------------------------------------------------
+  
+  /**
+  * Stage 1 index array
+  */
+  private int m_stage1_[];
+  
+  /**
+  * Stage 2 index array
+  */
+  private int m_stage2_[];
+  
+  /**
+  * Stage 3 value array
+  */
+  private char m_stage3_[];
+  
+  /**
+  * Stage 1 shift
+  */
+  private static final int STAGE_1_SHIFT_ = 10;
+  
+  /**
+  * Stage 2 shift
+  */
+  private static final int STAGE_2_SHIFT_ = 4;
+  
+  /**
+  * Stage 2 mask
+  */
+  private static final int STAGE_2_MASK_AFTER_SHIFT_ = 0x3F;
+  
+  /**
+  * Stage 3 mask
+  */
+  private static final int STAGE_3_MASK_ = 0xF;
+  
+  /**
+  * Number of numbers possible from a 4 bit type
+  */
+  private static final int COUNT_4_BIT_ = 0x10;
+  
+  /**
+  * Number of numbers possible from a 6 bit type
+  */
+  private static final int COUNT_6_BIT_ = 0x40;
+  
+  /**
+  * Number of numbers possible from the first 17 bits of a codepoint
+  */
+  private static final int COUNT_CODEPOINT_FIRST_17_BIT_ = 0x110000 >> 4;
+  
+  /**
+  * Number of numbers possible from the first 11 bits of a codepoint
+  */
+  private static final int COUNT_CODEPOINT_FIRST_11_BIT_ = 0x110000 >> 10;
+  
+  // private methods -----------------------------------------------------
+  
+  /**
+  * Building the trie from a argument array.
+  * Each unicode character will be used to generate data.
+  * @param output file path
+  */
+  private void build(char array[])
+  {
+    int ch = 0;
+    
+    int stage2[] = new int[COUNT_CODEPOINT_FIRST_17_BIT_];
+    char stage3[] = new char[UCharacter.MAX_VALUE >> 1];
+    int size = TrieBuilder.build(array, 0, array.length, COUNT_4_BIT_, stage2, 
+                                 stage3);
+    
+    m_stage3_ = new char[size];
+    System.arraycopy(stage3, 0, m_stage3_, 0, size);
+    
+    m_stage1_ = new int[COUNT_CODEPOINT_FIRST_11_BIT_];
+    size = TrieBuilder.build(stage2, 0, stage2.length, COUNT_6_BIT_, m_stage1_, 
+                             stage2);
+    m_stage2_ = new int[size];
+    System.arraycopy(stage2, 0, m_stage2_, 0, size);
+  }
+  
+  /**
+  * Converts trie to a readable format
+  * @return string version of the trie
+  */
+  public String toString()
+  {
+    int size = m_stage1_.length;
+    int count = 0;
+    StringBuffer result = new StringBuffer("int m_stage1_[] = {\n");
+    for (int i = 0; i < size; i ++) {
+      result.append("0x" + Integer.toHexString(m_stage1_[i]));
+      if (i != size - 1) {
+        result.append(", ");
+      }
+      count ++;
+      if (count == 10) {
+        count = 0;
+        result.append("\n");
+      }
+    }
+    result.append("\n}\n\n");
+    size = m_stage2_.length;
+    result.append("int m_stage2_[] = {\n");
+    count = 0;
+    for (int i = 0; i < size; i ++) {
+      result.append("0x" + Integer.toHexString(m_stage2_[i]));
+      if (i != size - 1) {
+        result.append(", ");
+      }
+      count ++;
+      if (count == 10) {
+        count = 0;
+        result.append("\n");
+      }
+    }
+    result.append("\n}\n\n");
+    size = m_stage3_.length;
+    result.append("char m_stage3_[] = {\n");
+    count = 0;
+    for (int i = 0; i < size; i ++) {
+      result.append("0x" + Integer.toHexString(m_stage3_[i]));
+      if (i != size - 1) {
+        result.append(", ");
+      }
+      count ++;
+      if (count == 10) {
+        count = 0;
+        result.append("\n");
+      }
+    }
+    result.append("\n}");
+    return result.toString();
+  }
+}
\ No newline at end of file
diff --git a/src/com/ibm/util/ChineseCalendar.java b/src/com/ibm/util/ChineseCalendar.java
new file mode 100755
index 0000000..45638e7
--- /dev/null
+++ b/src/com/ibm/util/ChineseCalendar.java
@@ -0,0 +1,781 @@
+/*********************************************************************
+ * Copyright (C) 2000, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *********************************************************************
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/ChineseCalendar.java,v $
+ * $Date: 2000/11/29 21:57:48 $
+ * $Revision: 1.9 $
+ */
+package com.ibm.util;
+import com.ibm.text.*;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * <code>ChineseCalendar</code> is a concrete subclass of {@link Calendar}
+ * that implements a traditional Chinese calendar.  The traditional Chinese
+ * calendar is a lunisolar calendar: Each month starts on a new moon, and
+ * the months are numbered according to solar events, specifically, to
+ * guarantee that month 11 always contains the winter solstice.  In order
+ * to accomplish this, leap months are inserted in certain years.  Leap
+ * months are numbered the same as the month they follow.  The decision of
+ * which month is a leap month depends on the relative movements of the sun
+ * and moon.
+ *
+ * <p>This class defines one addition field beyond those defined by
+ * <code>Calendar</code>: The <code>IS_LEAP_MONTH</code> field takes the
+ * value of 0 for normal months, or 1 for leap months.
+ *
+ * <p>All astronomical computations are performed with respect to a time
+ * zone of GMT+8:00 and a longitude of 120 degrees east.  Although some
+ * calendars implement a historically more accurate convention of using
+ * Beijing's local longitude (116 degrees 25 minutes east) and time zone
+ * (GMT+7:45:40) for dates before 1929, we do not implement this here.
+ *
+ * <p>Years are counted in two different ways in the Chinese calendar.  The
+ * first method is by sequential numbering from the 61st year of the reign
+ * of Huang Di, 2637 BCE, which is designated year 1 on the Chinese
+ * calendar.  The second method uses 60-year cycles from the same starting
+ * point, which is designated year 1 of cycle 1.  In this class, the
+ * <code>EXTENDED_YEAR</code> field contains the sequential year count.
+ * The <code>ERA</code> field contains the cycle number, and the
+ * <code>YEAR</code> field contains the year of the cycle, a value between
+ * 1 and 60.
+ *
+ * <p>There is some variation in what is considered the starting point of
+ * the calendar, with some sources starting in the first year of the reign
+ * of Huang Di, rather than the 61st.  This gives continuous year numbers
+ * 60 years greater and cycle numbers one greater than what this class
+ * implements.
+ *
+ * <p>Because <code>ChineseCalendar</code> defines an additional field and
+ * redefines the way the <code>ERA</code> field is used, it requires a new
+ * format class, <code>ChineseDateFormat</code>.  As always, use the
+ * methods <code>DateFormat.getXxxInstance(Calendar cal,...)</code> to
+ * obtain a formatter for this calendar.
+ *
+ * <p>References:<ul>
+ * 
+ * <li>Dershowitz and Reingold, <i>Calendrical Calculations</i>,
+ * Cambridge University Press, 1997</li>
+ * 
+ * <li>Helmer Aslaksen's
+ * <a href="http://www.math.nus.edu.sg/aslaksen/calendar/chinese.shtml">
+ * Chinese Calendar page</a></li>
+ *
+ * <li>The <a href="http://www.tondering.dk/claus/calendar.html">
+ * Calendar FAQ</a></li>
+ *
+ * </ul>
+ * @see com.ibm.text.ChineseDateFormat
+ * @author Alan Liu
+ */
+public class ChineseCalendar extends Calendar {
+
+    //------------------------------------------------------------------
+    // Developer Notes
+    // 
+    // Time is represented as a scalar in two ways in this class.  One is
+    // the usual UTC epoch millis, that is, milliseconds after January 1,
+    // 1970 Gregorian, 0:00:00.000 UTC.  The other is in terms of 'local
+    // days.'  This is the number of days after January 1, 1970 Gregorian,
+    // local to Beijing, China (since all computations of the Chinese
+    // calendar are done in Beijing).  That is, 0 represents January 1,
+    // 1970 0:00 Asia/Shanghai.  Conversion of local days to and from
+    // standard epoch milliseconds is accomplished by the daysToMillis()
+    // and millisToDays() methods.
+    // 
+    // Several methods use caches to improve performance.  Caches are at
+    // the object, not class level, under the assumption that typical
+    // usage will be to have one instance of ChineseCalendar at a time.
+ 
+    /**
+     * We have one instance per object, and we don't synchronize it because
+     * Calendar doesn't support multithreaded execution in the first place.
+     */
+    private transient CalendarAstronomer astro = new CalendarAstronomer();
+
+    /**
+     * Cache that maps Gregorian year to local days of winter solstice.
+     * @see #winterSolstice
+     */
+    private transient CalendarCache winterSolsticeCache = new CalendarCache();
+
+    /**
+     * Cache that maps Gregorian year to local days of Chinese new year.
+     * @see #newYear
+     */
+    private transient CalendarCache newYearCache = new CalendarCache();
+
+    /**
+     * True if the current year is a leap year.  Updated with each time to
+     * fields resolution.
+     * @see #computeChineseFields
+     */
+    private transient boolean isLeapYear;
+
+    //------------------------------------------------------------------
+    // Constructors
+    //------------------------------------------------------------------
+
+    /**
+     * Construct a Chinese calendar with the default time zone and locale.
+     */
+    public ChineseCalendar() {
+        super();
+    }
+
+    /**
+     * Construct a Chinese calendar with the given time zone and locale.
+     * @param zone time zone for this calendar
+     * @param locale locale for this calendar
+     */
+    public ChineseCalendar(TimeZone zone, Locale locale) {
+        super(zone, locale);
+    }
+
+    //------------------------------------------------------------------
+    // Public constants
+    //------------------------------------------------------------------
+
+    /**
+     * Field indicating whether or not the current month is a leap month.
+     * Should have a value of 0 for non-leap months, and 1 for leap months.
+     */
+    public static int IS_LEAP_MONTH = BASE_FIELD_COUNT;
+
+    /**
+     * Count of fields in this class.
+     */
+    private static final int FIELD_COUNT = IS_LEAP_MONTH + 1;
+
+    //------------------------------------------------------------------
+    // Calendar framework
+    //------------------------------------------------------------------
+
+    /**
+     * Override Calendar to allocate our additional field.
+     */
+    protected int[] handleCreateFields() {
+        return new int[FIELD_COUNT];
+    }
+
+    /**
+     * Array defining the limits of field values for this class.  Field
+     * limits which are invariant with respect to calendar system and
+     * defined by Calendar are left blank.
+     *
+     * Notes:
+     *
+     * ERA 5000000 / 60 = 83333.
+     *
+     * MONTH There are 12 or 13 lunar months in a year.  However, we always
+     * number them 0..11, with an intercalated, identically numbered leap
+     * month, when necessary.
+     *
+     * DAY_OF_YEAR In a non-leap year there are 353, 354, or 355 days.  In
+     * a leap year there are 383, 384, or 385 days.
+     *
+     * WEEK_OF_YEAR The least maximum occurs if there are 353 days in the
+     * year, and the first 6 are the last week of the previous year.  Then
+     * we have 49 full weeks and 4 days in the last week: 6 + 49*7 + 4 =
+     * 353.  So the least maximum is 50.  The maximum occurs if there are
+     * 385 days in the year, and WOY 1 extends 6 days into the prior year.
+     * Then there are 54 full weeks, and 6 days in the last week: 1 + 54*7
+     * + 6 = 385.  The 6 days of the last week will fall into WOY 1 of the
+     * next year.  Maximum is 55.
+     *
+     * WEEK_OF_MONTH In a 29 day month, if the first 7 days make up week 1
+     * that leaves 3 full weeks and 1 day at the end.  The least maximum is
+     * thus 5.  In a 30 days month, if the previous 6 days belong WOM 1 of
+     * this month, we have 4 full weeks and 1 days at the end (which
+     * technically will be WOM 1 of the next month, but will be reported by
+     * time->fields and hence by getActualMaximum as WOM 6 of this month).
+     * Maximum is 6.
+     *
+     * DAY_OF_WEEK_IN_MONTH In a 29 or 30 day month, there are 4 full weeks
+     * plus 1 or 2 days at the end, so the maximum is always 5.
+     */
+    private static final int LIMITS[][] = {
+        // Minimum  Greatest    Least  Maximum
+        //           Minimum  Maximum
+        {        1,        1,   83333,   83333 }, // ERA
+        {        1,        1,      70,      70 }, // YEAR
+        {        0,        0,      11,      11 }, // MONTH
+        {        1,        1,      50,      55 }, // WEEK_OF_YEAR
+        {        1,        1,       5,       6 }, // WEEK_OF_MONTH
+        {        1,        1,      29,      30 }, // DAY_OF_MONTH
+        {        1,        1,     353,     385 }, // DAY_OF_YEAR
+        {/*                                  */}, // DAY_OF_WEEK
+        {       -1,       -1,       5,       5 }, // DAY_OF_WEEK_IN_MONTH
+        {/*                                  */}, // AM_PM
+        {/*                                  */}, // HOUR
+        {/*                                  */}, // HOUR_OF_DAY
+        {/*                                  */}, // MINUTE
+        {/*                                  */}, // SECOND
+        {/*                                  */}, // MILLISECOND
+        {/*                                  */}, // ZONE_OFFSET
+        {/*                                  */}, // DST_OFFSET
+        { -5000001, -5000001, 5000001, 5000001 }, // YEAR_WOY
+        {/*                                  */}, // DOW_LOCAL
+        { -5000000, -5000000, 5000000, 5000000 }, // EXTENDED_YEAR
+        {/*                                  */}, // JULIAN_DAY
+        {/*                                  */}, // MILLISECONDS_IN_DAY
+        {        0,        0,       1,       1 }, // IS_LEAP_MONTH
+    };
+
+    /**
+     * Override Calendar to return the limit value for the given field.
+     */
+    protected int handleGetLimit(int field, int limitType) {
+        return LIMITS[field][limitType];
+    }
+
+    /**
+     * Implement abstract Calendar method to return the extended year
+     * defined by the current fields.  This will use either the ERA and
+     * YEAR field as the cycle and year-of-cycle, or the EXTENDED_YEAR
+     * field as the continuous year count, depending on which is newer.
+     */
+    protected int handleGetExtendedYear() {
+        int year;
+        if (newestStamp(ERA, YEAR, UNSET) <= getStamp(EXTENDED_YEAR)) {
+            year = internalGet(EXTENDED_YEAR, 1); // Default to year 1
+        } else {
+            int cycle = internalGet(ERA, 1) - 1; // 0-based cycle
+            year = cycle * 60 + internalGet(YEAR, 1);
+        }
+        return year;
+    }
+
+    /**
+     * Override Calendar method to return the number of days in the given
+     * extended year and month.
+     *
+     * <p>Note: This method also reads the IS_LEAP_MONTH field to determine
+     * whether or not the given month is a leap month.
+     */
+    protected int handleGetMonthLength(int extendedYear, int month) {
+        int thisStart = handleComputeMonthStart(extendedYear, month, true) -
+            EPOCH_JULIAN_DAY + 1; // Julian day -> local days
+        int nextStart = newMoonNear(thisStart + SYNODIC_GAP, true);
+        return nextStart - thisStart;
+    }
+
+    /**
+     * Framework method to create a calendar-specific DateFormat object
+     * using the the given pattern.  This method is responsible for
+     * creating the calendar- specific DateFormat and DateFormatSymbols
+     * objects as needed.
+     */
+    protected DateFormat handleGetDateFormat(String pattern, Locale locale) {
+        return new ChineseDateFormat(pattern, locale);
+    }
+
+    /**
+     * Field resolution table that incorporates IS_LEAP_MONTH.
+     */
+    static final int[][][] CHINESE_DATE_PRECEDENCE = {
+        {
+            { DAY_OF_MONTH },
+            { WEEK_OF_YEAR, DAY_OF_WEEK },
+            { WEEK_OF_MONTH, DAY_OF_WEEK },
+            { DAY_OF_WEEK_IN_MONTH, DAY_OF_WEEK },
+            { WEEK_OF_YEAR, DOW_LOCAL },
+            { WEEK_OF_MONTH, DOW_LOCAL },
+            { DAY_OF_WEEK_IN_MONTH, DOW_LOCAL },
+            { DAY_OF_YEAR },
+            { RESOLVE_REMAP | DAY_OF_MONTH, IS_LEAP_MONTH },
+        },
+        {
+            { WEEK_OF_YEAR },
+            { WEEK_OF_MONTH },
+            { DAY_OF_WEEK_IN_MONTH },
+            { RESOLVE_REMAP | DAY_OF_WEEK_IN_MONTH, DAY_OF_WEEK },
+            { RESOLVE_REMAP | DAY_OF_WEEK_IN_MONTH, DOW_LOCAL },
+        },
+    };
+
+    /**
+     * Override Calendar to add IS_LEAP_MONTH to the field resolution
+     * table.
+     */
+    protected int[][][] getFieldResolutionTable() {
+        return CHINESE_DATE_PRECEDENCE;
+    }
+
+    /**
+     * Adjust this calendar to be delta months before or after a given
+     * start position, pinning the day of month if necessary.  The start
+     * position is given as a local days number for the start of the month
+     * and a day-of-month.  Used by add() and roll().
+     * @param newMoon the local days of the first day of the month of the
+     * start position (days after January 1, 1970 0:00 Asia/Shanghai)
+     * @param dom the 1-based day-of-month of the start position
+     * @param delta the number of months to move forward or backward from
+     * the start position
+     */
+    private void offsetMonth(int newMoon, int dom, int delta) {
+        // Move to the middle of the month before our target month.
+        newMoon += (int) (CalendarAstronomer.SYNODIC_MONTH * (delta - 0.5));
+
+        // Search forward to the target month's new moon
+        newMoon = newMoonNear(newMoon, true);
+
+        // Find the target dom
+        int jd = newMoon + EPOCH_JULIAN_DAY - 1 + dom;
+
+        // Pin the dom.  In this calendar all months are 29 or 30 days
+        // so pinning just means handling dom 30.
+        if (dom > 29) {
+            set(JULIAN_DAY, jd-1);
+            // TODO Fix this.  We really shouldn't ever have to
+            // explicitly call complete().  This is either a bug in
+            // this method, in ChineseCalendar, or in
+            // Calendar.getActualMaximum().  I suspect the last.
+            complete();
+            if (getActualMaximum(DAY_OF_MONTH) >= dom) {
+                set(JULIAN_DAY, jd);
+            }
+        } else {
+            set(JULIAN_DAY, jd);
+        }
+    }
+
+    /**
+     * Override Calendar to handle leap months properly.
+     */
+    public void add(int field, int amount) {
+        switch (field) {
+        case MONTH:
+            if (amount != 0) {
+                int dom = get(DAY_OF_MONTH);
+                int day = get(JULIAN_DAY) - EPOCH_JULIAN_DAY; // Get local day
+                int moon = day - dom + 1; // New moon 
+                offsetMonth(moon, dom, amount);
+            }
+            break;
+        default:
+            super.add(field, amount);
+            break;
+        }
+    }
+
+    /**
+     * Override Calendar to handle leap months properly.
+     */
+    public void roll(int field, int amount) {
+        switch (field) {
+        case MONTH:
+            if (amount != 0) {
+                int dom = get(DAY_OF_MONTH);
+                int day = get(JULIAN_DAY) - EPOCH_JULIAN_DAY; // Get local day
+                int moon = day - dom + 1; // New moon (start of this month)
+
+                // Note throughout the following:  Months 12 and 1 are never
+                // followed by a leap month (D&R p. 185).
+
+                // Compute the adjusted month number m.  This is zero-based
+                // value from 0..11 in a non-leap year, and from 0..12 in a
+                // leap year.
+                int m = get(MONTH); // 0-based month
+                if (isLeapYear) { // (member variable)
+                    if (get(IS_LEAP_MONTH) == 1) {
+                        ++m;
+                    } else {
+                        // Check for a prior leap month.  (In the
+                        // following, month 0 is the first month of the
+                        // year.)  Month 0 is never followed by a leap
+                        // month, and we know month m is not a leap month.
+                        // moon1 will be the start of month 0 if there is
+                        // no leap month between month 0 and month m;
+                        // otherwise it will be the start of month 1.
+                        int moon1 = moon -
+                            (int) (CalendarAstronomer.SYNODIC_MONTH * (m - 0.5));
+                        moon1 = newMoonNear(moon1, true);
+                        if (isLeapMonthBetween(moon1, moon)) {
+                            ++m;
+                        }
+                    }
+                }
+
+                // Now do the standard roll computation on m, with the
+                // allowed range of 0..n-1, where n is 12 or 13.
+                int n = isLeapYear ? 13 : 12; // Months in this year
+                int newM = (m + amount) % n;
+                if (newM < 0) {
+                    newM += n;
+                }
+
+                if (newM != m) {
+                    offsetMonth(moon, dom, newM - m);
+                }
+            }
+            break;
+        default:
+            super.roll(field, amount);
+            break;
+        }
+    }
+
+    //------------------------------------------------------------------
+    // Support methods and constants
+    //------------------------------------------------------------------
+   
+    /**
+     * The start year of the Chinese calendar, the 61st year of the reign
+     * of Huang Di.  Some sources use the first year of his reign,
+     * resulting in EXTENDED_YEAR values 60 years greater and ERA (cycle)
+     * values one greater.
+     */
+    private static final int CHINESE_EPOCH_YEAR = -2636; // Gregorian year
+
+    /**
+     * The offset from GMT in milliseconds at which we perform astronomical
+     * computations.  Some sources use a different historically accurate
+     * offset of GMT+7:45:40 for years before 1929; we do not do this.
+     */
+    private static final long CHINA_OFFSET = 8*ONE_HOUR;
+
+    /**
+     * Value to be added or subtracted from the local days of a new moon to
+     * get close to the next or prior new moon, but not cross it.  Must be
+     * >= 1 and < CalendarAstronomer.SYNODIC_MONTH.
+     */
+    private static final int SYNODIC_GAP = 25;
+
+    /**
+     * Convert local days to UTC epoch milliseconds.
+     * @param days days after January 1, 1970 0:00 Asia/Shanghai
+     * @return milliseconds after January 1, 1970 0:00 GMT
+     */
+    private static final long daysToMillis(int days) {
+        return (days * ONE_DAY) - CHINA_OFFSET;
+    }
+
+    /**
+     * Convert UTC epoch milliseconds to local days.
+     * @param millis milliseconds after January 1, 1970 0:00 GMT
+     * @return days after January 1, 1970 0:00 Asia/Shanghai
+     */
+    private static final int millisToDays(long millis) {
+        return (int) floorDivide(millis + CHINA_OFFSET, ONE_DAY);
+    }
+
+    //------------------------------------------------------------------
+    // Astronomical computations
+    //------------------------------------------------------------------
+    
+    /**
+     * Return the major solar term on or after December 15 of the given
+     * Gregorian year, that is, the winter solstice of the given year.
+     * Computations are relative to Asia/Shanghai time zone.
+     * @param gyear a Gregorian year
+     * @return days after January 1, 1970 0:00 Asia/Shanghai of the
+     * winter solstice of the given year
+     */
+    private int winterSolstice(int gyear) {
+
+        long cacheValue = winterSolsticeCache.get(gyear);
+
+        if (cacheValue == CalendarCache.EMPTY) {
+            // In books December 15 is used, but it fails for some years
+            // using our algorithms, e.g.: 1298 1391 1492 1553 1560.  That
+            // is, winterSolstice(1298) starts search at Dec 14 08:00:00
+            // PST 1298 with a final result of Dec 14 10:31:59 PST 1299.
+            long ms = daysToMillis(computeGregorianMonthStart(gyear, DECEMBER) +
+                                   1 - EPOCH_JULIAN_DAY);
+            astro.setTime(ms);
+            
+            // Winter solstice is 270 degrees solar longitude aka Dongzhi
+            long solarLong = astro.getSunTime(CalendarAstronomer.WINTER_SOLSTICE,
+                                              true);
+            cacheValue = millisToDays(solarLong);
+            winterSolsticeCache.put(gyear, cacheValue);
+        }
+        return (int) cacheValue;
+    }
+
+    /**
+     * Return the closest new moon to the given date, searching either
+     * forward or backward in time.
+     * @param days days after January 1, 1970 0:00 Asia/Shanghai
+     * @param after if true, search for a new moon on or after the given
+     * date; otherwise, search for a new moon before it
+     * @return days after January 1, 1970 0:00 Asia/Shanghai of the nearest
+     * new moon after or before <code>days</code>
+     */
+    private int newMoonNear(int days, boolean after) {
+        
+        astro.setTime(daysToMillis(days));
+        long newMoon = astro.getMoonTime(CalendarAstronomer.NEW_MOON, after);
+        
+        return millisToDays(newMoon);
+    }
+
+    /**
+     * Return the nearest integer number of synodic months between
+     * two dates.
+     * @param day1 days after January 1, 1970 0:00 Asia/Shanghai
+     * @param day2 days after January 1, 1970 0:00 Asia/Shanghai
+     * @return the nearest integer number of months between day1 and day2
+     */
+    private int synodicMonthsBetween(int day1, int day2) {
+        return (int) Math.round((day2 - day1) / CalendarAstronomer.SYNODIC_MONTH);
+    }
+
+    /**
+     * Return the major solar term on or before a given date.  This
+     * will be an integer from 1..12, with 1 corresponding to 330 degrees,
+     * 2 to 0 degrees, 3 to 30 degrees,..., and 12 to 300 degrees.
+     * @param days days after January 1, 1970 0:00 Asia/Shanghai
+     */
+    private int majorSolarTerm(int days) {
+        
+        astro.setTime(daysToMillis(days));
+
+        // Compute (floor(solarLongitude / (pi/6)) + 2) % 12
+        int term = ((int) Math.floor(6 * astro.getSunLongitude() / Math.PI) + 2) % 12;
+        if (term < 1) {
+            term += 12;
+        }
+        return term;
+    }
+
+    /**
+     * Return true if the given month lacks a major solar term.
+     * @param newMoon days after January 1, 1970 0:00 Asia/Shanghai of a new
+     * moon
+     */
+    private boolean hasNoMajorSolarTerm(int newMoon) {
+        
+        return majorSolarTerm(newMoon) ==
+            majorSolarTerm(newMoonNear(newMoon + SYNODIC_GAP, true));
+    }
+
+    //------------------------------------------------------------------
+    // Time to fields
+    //------------------------------------------------------------------
+    
+    /**
+     * Return true if there is a leap month on or after month newMoon1 and
+     * at or before month newMoon2.
+     * @param newMoon1 days after January 1, 1970 0:00 Asia/Shanghai of a
+     * new moon
+     * @param newMoon2 days after January 1, 1970 0:00 Asia/Shanghai of a
+     * new moon
+     */
+    private boolean isLeapMonthBetween(int newMoon1, int newMoon2) {
+
+        // This is only needed to debug the timeOfAngle divergence bug.
+        // Remove this later. Liu 11/9/00
+        // DEBUG
+        if (synodicMonthsBetween(newMoon1, newMoon2) >= 50) {
+            throw new IllegalArgumentException("isLeapMonthBetween(" + newMoon1 +
+                                               ", " + newMoon2 +
+                                               "): Invalid parameters");
+        }
+
+        return (newMoon2 >= newMoon1) &&
+            (isLeapMonthBetween(newMoon1, newMoonNear(newMoon2 - SYNODIC_GAP, false)) ||
+             hasNoMajorSolarTerm(newMoon2));
+    }
+
+    /**
+     * Override Calendar to compute several fields specific to the Chinese
+     * calendar system.  These are:
+     *
+     * <ul><li>ERA
+     * <li>YEAR
+     * <li>MONTH
+     * <li>DAY_OF_MONTH
+     * <li>DAY_OF_YEAR
+     * <li>EXTENDED_YEAR</ul>
+     * 
+     * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
+     * method is called.  The getGregorianXxx() methods return Gregorian
+     * calendar equivalents for the given Julian day.
+     *
+     * <p>Compute the ChineseCalendar-specific field IS_LEAP_MONTH.
+     */
+    protected void handleComputeFields(int julianDay) {
+
+        computeChineseFields(julianDay - EPOCH_JULIAN_DAY, // local days
+                             getGregorianYear(), getGregorianMonth(),
+                             true); // set all fields
+    }
+
+    /**
+     * Compute fields for the Chinese calendar system.  This method can
+     * either set all relevant fields, as required by
+     * <code>handleComputeFields()</code>, or it can just set the MONTH and
+     * IS_LEAP_MONTH fields, as required by
+     * <code>handleComputeMonthStart()</code>.
+     *
+     * <p>As a side effect, this method sets {@link #isLeapYear}.
+     * @param days days after January 1, 1970 0:00 Asia/Shanghai of the
+     * date to compute fields for
+     * @param gyear the Gregorian year of the given date
+     * @param gmonth the Gregorian month of the given date
+     * @param setAllFields if true, set the EXTENDED_YEAR, ERA, YEAR,
+     * DAY_OF_MONTH, and DAY_OF_YEAR fields.  In either case set the MONTH
+     * and IS_LEAP_MONTH fields.
+     */
+    private void computeChineseFields(int days, int gyear, int gmonth,
+                                      boolean setAllFields) {
+
+        // Find the winter solstices before and after the target date.
+        // These define the boundaries of this Chinese year, specifically,
+        // the position of month 11, which always contains the solstice.
+        // We want solsticeBefore <= date < solsticeAfter.
+        int solsticeBefore;
+        int solsticeAfter = winterSolstice(gyear);
+        if (days < solsticeAfter) {
+            solsticeBefore = winterSolstice(gyear - 1);
+        } else {
+            solsticeBefore = solsticeAfter;
+            solsticeAfter = winterSolstice(gyear + 1);
+        }
+
+        // Find the start of the month after month 11.  This will be either
+        // the prior month 12 or leap month 11 (very rare).  Also find the
+        // start of the following month 11.
+        int firstMoon = newMoonNear(solsticeBefore + 1, true);
+        int lastMoon = newMoonNear(solsticeAfter + 1, false);
+        int thisMoon = newMoonNear(days + 1, false); // Start of this month
+        // Note: isLeapYear is a member variable
+        isLeapYear = synodicMonthsBetween(firstMoon, lastMoon) == 12;
+
+        int month = synodicMonthsBetween(firstMoon, thisMoon);
+        if (isLeapYear && isLeapMonthBetween(firstMoon, thisMoon)) {
+            month--;
+        }
+        if (month < 1) {
+            month += 12;
+        }
+
+        boolean isLeapMonth = isLeapYear &&
+            hasNoMajorSolarTerm(thisMoon) &&
+            !isLeapMonthBetween(firstMoon, newMoonNear(thisMoon - SYNODIC_GAP, false));
+
+        internalSet(MONTH, month-1); // Convert from 1-based to 0-based
+        internalSet(IS_LEAP_MONTH, isLeapMonth?1:0);
+
+        if (setAllFields) {
+
+            int year = gyear - CHINESE_EPOCH_YEAR;
+            if (month < 11 ||
+                gmonth >= JULY) {
+                year++;
+            }
+            int dayOfMonth = days - thisMoon + 1;
+
+            internalSet(EXTENDED_YEAR, year);
+
+            // 0->0,60  1->1,1  60->1,60  61->2,1  etc.
+            int[] yearOfCycle = new int[1];
+            int cycle = floorDivide(year-1, 60, yearOfCycle);
+            internalSet(ERA, cycle+1);
+            internalSet(YEAR, yearOfCycle[0]+1);
+
+            internalSet(DAY_OF_MONTH, dayOfMonth);
+
+            // Days will be before the first new year we compute if this
+            // date is in month 11, leap 11, 12.  There is never a leap 12.
+            // New year computations are cached so this should be cheap in
+            // the long run.
+            int newYear = newYear(gyear);
+            if (days < newYear) {
+                newYear = newYear(gyear-1);
+            }
+            internalSet(DAY_OF_YEAR, days - newYear + 1);
+        }
+    }
+
+    //------------------------------------------------------------------
+    // Fields to time
+    //------------------------------------------------------------------
+    
+    /**
+     * Return the Chinese new year of the given Gregorian year.
+     * @param gyear a Gregorian year
+     * @return days after January 1, 1970 0:00 Asia/Shanghai of the
+     * Chinese new year of the given year (this will be a new moon)
+     */
+    private int newYear(int gyear) {
+
+        long cacheValue = newYearCache.get(gyear);
+
+        if (cacheValue == CalendarCache.EMPTY) {
+
+            int solsticeBefore= winterSolstice(gyear - 1);
+            int solsticeAfter = winterSolstice(gyear);
+            int newMoon1 = newMoonNear(solsticeBefore + 1, true);
+            int newMoon2 = newMoonNear(newMoon1 + SYNODIC_GAP, true);
+            int newMoon11 = newMoonNear(solsticeAfter + 1, false);
+            
+            if (synodicMonthsBetween(newMoon1, newMoon11) == 12 &&
+                (hasNoMajorSolarTerm(newMoon1) || hasNoMajorSolarTerm(newMoon2))) {
+                cacheValue = newMoonNear(newMoon2 + SYNODIC_GAP, true);
+            } else {
+                cacheValue = newMoon2;
+            }
+
+            newYearCache.put(gyear, cacheValue);
+        }
+        return (int) cacheValue;
+    }
+
+    /**
+     * Return the Julian day number of day before the first day of the
+     * given month in the given extended year.
+     * 
+     * <p>Note: This method reads the IS_LEAP_MONTH field to determine
+     * whether the given month is a leap month.
+     * @param eyear the extended year
+     * @param month the zero-based month.  The month is also determined
+     * by reading the IS_LEAP_MONTH field.
+     * @param return the Julian day number of the day before the first
+     * day of the given month and year
+     */
+    protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) {
+
+        // If the month is out of range, adjust it into range, and
+        // modify the extended year value accordingly.
+        if (month < 0 || month > 11) {
+            int[] rem = new int[1];
+            eyear += floorDivide(month, 12, rem);
+            month = rem[0];
+        }
+
+        int gyear = eyear + CHINESE_EPOCH_YEAR - 1; // Gregorian year
+        int newYear = newYear(gyear);
+        int newMoon = newMoonNear(newYear + month * 29, true);
+        
+        int julianDay = newMoon + EPOCH_JULIAN_DAY;
+
+        // Save fields for later restoration
+        int saveMonth = internalGet(MONTH);
+        int saveIsLeapMonth = internalGet(IS_LEAP_MONTH);
+
+        // Ignore IS_LEAP_MONTH field if useMonth is false
+        int isLeapMonth = useMonth ? saveIsLeapMonth : 0;
+
+        computeGregorianFields(julianDay);
+        
+        // This will modify the MONTH and IS_LEAP_MONTH fields (only)
+        computeChineseFields(newMoon, getGregorianYear(),
+                             getGregorianMonth(), false);        
+
+        if (month != internalGet(MONTH) ||
+            isLeapMonth != internalGet(IS_LEAP_MONTH)) {
+            newMoon = newMoonNear(newMoon + SYNODIC_GAP, true);
+            julianDay = newMoon + EPOCH_JULIAN_DAY;
+        }
+
+        internalSet(MONTH, saveMonth);
+        internalSet(IS_LEAP_MONTH, saveIsLeapMonth);
+
+        return julianDay - 1;
+    }
+}
diff --git a/src/com/ibm/util/CompactByteArray.java b/src/com/ibm/util/CompactByteArray.java
new file mode 100755
index 0000000..3819623
--- /dev/null
+++ b/src/com/ibm/util/CompactByteArray.java
@@ -0,0 +1,355 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/CompactByteArray.java,v $ 
+ * $Date: 2000/03/10 04:17:57 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+
+/**
+ * class CompactATypeArray : use only on primitive data types
+ * Provides a compact way to store information that is indexed by Unicode
+ * values, such as character properties, types, keyboard values, etc.This
+ * is very useful when you have a block of Unicode data that contains
+ * significant values while the rest of the Unicode data is unused in the
+ * application or when you have a lot of redundance, such as where all 21,000
+ * Han ideographs have the same value.  However, lookup is much faster than a
+ * hash table.
+ * A compact array of any primitive data type serves two purposes:
+ * <UL type = round>
+ *     <LI>Fast access of the indexed values.
+ *     <LI>Smaller memory footprint.
+ * </UL>
+ * A compact array is composed of a index array and value array.  The index
+ * array contains the indicies of Unicode characters to the value array.
+ *
+ * @see                CompactCharArray
+ * @version            $Revision: 1.5 $
+ * @author             Helena Shih
+ */
+public final class CompactByteArray implements Cloneable {
+
+    /**
+     * The total number of Unicode characters.
+     */
+    public static  final int UNICODECOUNT =65536;
+
+    /**
+     * Default constructor for CompactByteArray, the default value of the
+     * compact array is 0.
+     */
+    public CompactByteArray()
+    {
+        this((byte)0);
+    }
+
+    /**
+     * Constructor for CompactByteArray.
+     * @param defaultValue the default value of the compact array.
+     */
+    public CompactByteArray(byte defaultValue)
+    {
+        int i;
+        values = new byte[UNICODECOUNT];
+        indices = new char[INDEXCOUNT];
+        hashes = new int[INDEXCOUNT];
+        for (i = 0; i < UNICODECOUNT; ++i) {
+            values[i] = defaultValue;
+        }
+        for (i = 0; i < INDEXCOUNT; ++i) {
+            indices[i] = (char)(i<<BLOCKSHIFT);
+            hashes[i] = 0;
+        }
+        isCompact = false;
+    }
+
+    /**
+     * Constructor for CompactByteArray.
+     * @param indexArray the indicies of the compact array.
+     * @param newValues the values of the compact array.
+     * @exception IllegalArgumentException If index is out of range.
+     */
+    public CompactByteArray(char indexArray[],
+                            byte newValues[])
+    {
+        int i;
+        if (indexArray.length != INDEXCOUNT)
+            throw new IllegalArgumentException("Index out of bounds!");
+        for (i = 0; i < INDEXCOUNT; ++i) {
+            char index = indexArray[i];
+            if ((index < 0) || (index >= newValues.length+BLOCKCOUNT))
+                throw new IllegalArgumentException("Index out of bounds!");
+        }
+        indices = indexArray;
+        values = newValues;
+        isCompact = true;
+    }
+
+    /**
+     * Constructor for CompactByteArray.
+     * @param indexArray the RLE-encoded indicies of the compact array.
+     * @param valueArray the RLE-encoded values of the compact array.
+     * @exception IllegalArgumentException If index is out of range.
+     */
+    public CompactByteArray(String indexArray,
+                            String valueArray)
+    {
+        this( Utility.RLEStringToCharArray(indexArray),
+              Utility.RLEStringToByteArray(valueArray) );
+    }
+
+    /**
+     * Get the mapped value of a Unicode character.
+     * @param index the character to get the mapped value with
+     * @return the mapped value of the given character
+     */
+    public byte elementAt(char index)
+    {
+        return (values[(indices[index >> BLOCKSHIFT] & 0xFFFF)
+                       + (index & BLOCKMASK)]);
+    }
+
+    /**
+     * Set a new value for a Unicode character.
+     * Set automatically expands the array if it is compacted.
+     * @param index the character to set the mapped value with
+     * @param value the new mapped value
+     */
+    public void setElementAt(char index, byte value)
+    {
+        if (isCompact)
+            expand();
+        values[(int)index] = value;
+        touchBlock(index >> BLOCKSHIFT, value);
+    }
+
+    /**
+     * Set new values for a range of Unicode character.
+     * @param start the starting offset o of the range
+     * @param end the ending offset of the range
+     * @param value the new mapped value
+     */
+    public void setElementAt(char start, char end, byte value)
+    {
+        int i;
+        if (isCompact) {
+            expand();
+        }
+        for (i = start; i <= end; ++i) {
+            values[i] = value;
+            touchBlock(i >> BLOCKSHIFT, value);
+        }
+    }
+
+    public void compact() {
+        compact(false);
+    }
+
+    /**
+     * Compact the array.
+     */
+    public void compact(boolean exhaustive)
+    {
+        if (!isCompact) {
+            int limitCompacted = 0;
+            int iBlockStart = 0;
+            char iUntouched = 0xFFFF;
+
+            for (int i = 0; i < indices.length; ++i, iBlockStart += BLOCKCOUNT) {
+                indices[i] = 0xFFFF;
+                boolean touched = blockTouched(i);
+                if (!touched && iUntouched != 0xFFFF) {
+                    // If no values in this block were set, we can just set its
+                    // index to be the same as some other block with no values
+                    // set, assuming we've seen one yet.
+                    indices[i] = iUntouched;
+                } else {
+                    int jBlockStart = 0;
+                    int j = 0;
+                    for (j = 0; j < limitCompacted;
+                            ++j, jBlockStart += BLOCKCOUNT) {
+                        if (hashes[i] == hashes[j] &&
+                                arrayRegionMatches(values, iBlockStart,
+                                values, jBlockStart, BLOCKCOUNT)) {
+                            indices[i] = (char)jBlockStart;
+                            break;
+                        }
+                    }
+                    if (indices[i] == 0xFFFF) {
+                        // we didn't match, so copy & update
+                        System.arraycopy(values, iBlockStart,
+                            values, jBlockStart, BLOCKCOUNT);
+                        indices[i] = (char)jBlockStart;
+                        hashes[j] = hashes[i];
+                        ++limitCompacted;
+
+                        if (!touched) {
+                            // If this is the first untouched block we've seen,
+                            // remember its index.
+                            iUntouched = (char)jBlockStart;
+                        }
+                    }
+                }
+            }
+            // we are done compacting, so now make the array charer
+            int newSize = limitCompacted*BLOCKCOUNT;
+            byte[] result = new byte[newSize];
+            System.arraycopy(values, 0, result, 0, newSize);
+            values = result;
+            isCompact = true;
+            hashes = null;
+        }
+    }
+
+    /**
+     * Convenience utility to compare two arrays of doubles.
+     * @param len the length to compare.
+     * The start indices and start+len must be valid.
+     */
+    final static boolean arrayRegionMatches(byte[] source, int sourceStart,
+                                            byte[] target, int targetStart,
+                                            int len)
+    {
+        int sourceEnd = sourceStart + len;
+        int delta = targetStart - sourceStart;
+        for (int i = sourceStart; i < sourceEnd; i++) {
+            if (source[i] != target[i + delta])
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Remember that a specified block was "touched", i.e. had a value set.
+     * Untouched blocks can be skipped when compacting the array
+     */
+    private final void touchBlock(int i, int value) {
+        hashes[i] = (hashes[i] + (value<<1)) | 1;
+    }
+
+    /**
+     * Query whether a specified block was "touched", i.e. had a value set.
+     * Untouched blocks can be skipped when compacting the array
+     */
+    private final boolean blockTouched(int i) {
+        return hashes[i] != 0;
+    }
+
+    /**
+     * For internal use only.  Do not modify the result, the behavior of
+     * modified results are undefined.
+     */
+    public char[] getIndexArray()
+    {
+        return indices;
+    }
+
+    /**
+     * For internal use only.  Do not modify the result, the behavior of
+     * modified results are undefined.
+     */
+    public byte[] getValueArray()
+    {
+        return values;
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        try {
+            CompactByteArray other = (CompactByteArray) super.clone();
+            other.values = (byte[])values.clone();
+            other.indices = (char[])indices.clone();
+            if (hashes != null) other.hashes = (int[])hashes.clone();
+            return other;
+        } catch (CloneNotSupportedException e) {
+            throw new InternalError();
+        }
+    }
+
+    /**
+     * Compares the equality of two compact array objects.
+     * @param obj the compact array object to be compared with this.
+     * @return true if the current compact array object is the same
+     * as the compact array object obj; false otherwise.
+     */
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (this == obj)                      // quick check
+            return true;
+        if (getClass() != obj.getClass())         // same class?
+            return false;
+        CompactByteArray other = (CompactByteArray) obj;
+        for (int i = 0; i < UNICODECOUNT; i++) {
+            // could be sped up later
+            if (elementAt((char)i) != other.elementAt((char)i))
+                return false;
+        }
+        return true; // we made it through the guantlet.
+    }
+
+    /**
+     * Generates the hash code for the compact array object
+     */
+    public int hashCode() {
+        int result = 0;
+        int increment = Math.min(3, values.length/16);
+        for (int i = 0; i < values.length; i+= increment) {
+            result = result * 37 + values[i];
+        }
+        return result;
+    }
+
+    // --------------------------------------------------------------
+    // package private
+    // --------------------------------------------------------------
+
+    /**
+     * Expanding takes the array back to a 65536 element array.
+     */
+    private void expand()
+    {
+        int i;
+        if (isCompact) {
+            byte[]  tempArray;
+            hashes = new int[INDEXCOUNT];
+            tempArray = new byte[UNICODECOUNT];
+            for (i = 0; i < UNICODECOUNT; ++i) {
+                byte value = elementAt((char)i);
+                tempArray[i] = value;
+                touchBlock(i >> BLOCKSHIFT, value);
+            }
+            for (i = 0; i < INDEXCOUNT; ++i) {
+                indices[i] = (char)(i<<BLOCKSHIFT);
+            }
+            values = null;
+            values = tempArray;
+            isCompact = false;
+        }
+    }
+
+    private byte[] getArray()
+    {
+        return values;
+    }
+
+    private static  final int BLOCKSHIFT =7;
+    private static  final int BLOCKCOUNT =(1<<BLOCKSHIFT);
+    private static  final int INDEXSHIFT =(16-BLOCKSHIFT);
+    private static  final int INDEXCOUNT =(1<<INDEXSHIFT);
+    private static  final int BLOCKMASK = BLOCKCOUNT - 1;
+
+    private byte[] values;
+    private char indices[];
+    private boolean isCompact;
+    private int[] hashes;
+};
diff --git a/src/com/ibm/util/CompactCharArray.java b/src/com/ibm/util/CompactCharArray.java
new file mode 100755
index 0000000..daa4a00
--- /dev/null
+++ b/src/com/ibm/util/CompactCharArray.java
@@ -0,0 +1,376 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/CompactCharArray.java,v $ 
+ * $Date: 2000/07/12 16:42:44 $ 
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import com.ibm.util.Utility;
+
+/**
+ * class CompactATypeArray : use only on primitive data types
+ * Provides a compact way to store information that is indexed by Unicode
+ * values, such as character properties, types, keyboard values, etc.This
+ * is very useful when you have a block of Unicode data that contains
+ * significant values while the rest of the Unicode data is unused in the
+ * application or when you have a lot of redundance, such as where all 21,000
+ * Han ideographs have the same value.  However, lookup is much faster than a
+ * hash table.
+ * A compact array of any primitive data type serves two purposes:
+ * <UL type = round>
+ *     <LI>Fast access of the indexed values.
+ *     <LI>Smaller memory footprint.
+ * </UL>
+ * A compact array is composed of a index array and value array.  The index
+ * array contains the indicies of Unicode characters to the value array.
+ * @see                CompactByteArray
+ * @version            $Revision: 1.6 $
+ * @author             Helena Shih
+ */
+public final class CompactCharArray implements Cloneable {
+
+    /**
+     * The total number of Unicode characters.
+     */
+    public static  final int UNICODECOUNT = 65536;
+
+    /**
+     * Default constructor for CompactCharArray, the default value of the
+     * compact array is 0.
+     */
+    public CompactCharArray()
+    {
+        this((char)0);
+    }
+
+    /**
+     * Constructor for CompactCharArray.
+     * @param defaultValue the default value of the compact array.
+     */
+    public CompactCharArray(char defaultValue)
+    {
+        int i;
+        values = new char[UNICODECOUNT];
+        indices = new char[INDEXCOUNT];
+        hashes = new int[INDEXCOUNT];
+        for (i = 0; i < UNICODECOUNT; ++i) {
+            values[i] = defaultValue;
+        }
+        for (i = 0; i < INDEXCOUNT; ++i) {
+            indices[i] = (char)(i<<BLOCKSHIFT);
+            hashes[i] = 0;
+        }
+        isCompact = false;
+
+        this.defaultValue = defaultValue;
+    }
+
+    /**
+     * Constructor for CompactCharArray.
+     * @param indexArray the indicies of the compact array.
+     * @param newValues the values of the compact array.
+     * @exception IllegalArgumentException If the index is out of range.
+     */
+    public CompactCharArray(char indexArray[],
+                             char newValues[])
+    {
+        int i;
+        if (indexArray.length != INDEXCOUNT)
+            throw new IllegalArgumentException("Index out of bounds.");
+        for (i = 0; i < INDEXCOUNT; ++i) {
+            char index = indexArray[i];
+            if ((index < 0) || (index >= newValues.length+BLOCKCOUNT))
+                throw new IllegalArgumentException("Index out of bounds.");
+        }
+        indices = indexArray;
+        values = newValues;
+        isCompact = true;
+    }
+
+    /**
+     * Constructor for CompactCharArray.
+     *
+     * @param indexArray the RLE-encoded indicies of the compact array.
+     * @param valueArray the RLE-encoded values of the compact array.
+     *
+     * @throws IllegalArgumentException if the index or value array is
+     *          the wrong size.
+     */
+    public CompactCharArray(String indexArray,
+                             String valueArray)
+    {
+        this( Utility.RLEStringToCharArray(indexArray),
+              Utility.RLEStringToCharArray(valueArray));
+    }
+
+    /**
+     * Get the mapped value of a Unicode character.
+     * @param index the character to get the mapped value with
+     * @return the mapped value of the given character
+     */
+    public char elementAt(char index) // parameterized on char
+    {
+        return (values[(indices[index >> BLOCKSHIFT] & 0xFFFF)
+                       + (index & BLOCKMASK)]);
+    }
+
+    /**
+     * Set a new value for a Unicode character.
+     * Set automatically expands the array if it is compacted.
+     * @param index the character to set the mapped value with
+     * @param value the new mapped value
+     */
+    public void setElementAt(char index, char value)
+    {
+        if (isCompact)
+            expand();
+         values[(int)index] = value;
+        touchBlock(index >> BLOCKSHIFT, value);
+    }
+
+    /**
+     * Set new values for a range of Unicode character.
+     *
+     * @param start the starting offset of the range
+     * @param end the ending offset of the range
+     * @param value the new mapped value
+     */
+    public void setElementAt(char start, char end, char value)
+    {
+        int i;
+        if (isCompact) {
+            expand();
+        }
+        for (i = start; i <= end; ++i) {
+            values[i] = value;
+            touchBlock(i >> BLOCKSHIFT, value);
+        }
+    }
+
+    public void compact() {
+        compact(true);
+    }
+
+    /**
+     * Compact the array.
+     */
+    public void compact(boolean exhaustive)
+    {
+        if (!isCompact) {
+            int iBlockStart = 0;
+            char iUntouched = 0xFFFF;
+            int newSize = 0;
+
+            char[] target = exhaustive ? new char[UNICODECOUNT] : values;
+
+            for (int i = 0; i < indices.length; ++i, iBlockStart += BLOCKCOUNT) {
+                indices[i] = 0xFFFF;
+                boolean touched = blockTouched(i);
+                if (!touched && iUntouched != 0xFFFF) {
+                    // If no values in this block were set, we can just set its
+                    // index to be the same as some other block with no values
+                    // set, assuming we've seen one yet.
+                    indices[i] = iUntouched;
+                } else {
+                    int jBlockStart = 0;
+                    // See if we can find a previously compacted block that's identical
+                    for (int j = 0; j < i; ++j, jBlockStart += BLOCKCOUNT) {
+                        if (hashes[i] == hashes[j] &&
+                                arrayRegionMatches(values, iBlockStart,
+                                                   values, jBlockStart, BLOCKCOUNT)) {
+                            indices[i] = indices[j];
+                        }
+                    }
+                    if (indices[i] == 0xFFFF) {
+                        int dest;   // Where to copy
+                        if (exhaustive) {
+                            // See if we can find some overlap with another block
+                            dest = FindOverlappingPosition(iBlockStart, target,
+                                                            newSize);
+                        } else {
+                            // Just copy to the end; it's quicker
+                            dest = newSize;
+                        }
+                        int limit = dest + BLOCKCOUNT;
+                        if (limit > newSize) {
+                            for (int j = newSize; j < limit; ++j) {
+                                target[j] = values[iBlockStart + j - dest];
+                            }
+                            newSize = limit;
+                        }
+                        indices[i] = (char)dest;
+                        if (!touched) {
+                            // If this is the first untouched block we've seen,
+                            // remember its index.
+                            iUntouched = (char)jBlockStart;
+                        }
+                    }
+                }
+            }
+            // we are done compacting, so now make the array shorter
+            char[] result = new char[newSize];
+            System.arraycopy(target, 0, result, 0, newSize);
+            values = result;
+            isCompact = true;
+            hashes = null;
+        }
+    }
+
+    private int FindOverlappingPosition(int start, char[] tempValues, int tempCount)
+    {
+        for (int i = 0; i < tempCount; i += 1) {
+            int currentCount = BLOCKCOUNT;
+            if (i + BLOCKCOUNT > tempCount) {
+                currentCount = tempCount - i;
+            }
+            if (arrayRegionMatches(values, start, tempValues, i, currentCount))
+                return i;
+        }
+        return tempCount;
+    }
+
+    /**
+     * Convenience utility to compare two arrays of doubles.
+     * @param len the length to compare.
+     * The start indices and start+len must be valid.
+     */
+    final static boolean arrayRegionMatches(char[] source, int sourceStart,
+                                            char[] target, int targetStart,
+                                            int len)
+    {
+        int sourceEnd = sourceStart + len;
+        int delta = targetStart - sourceStart;
+        for (int i = sourceStart; i < sourceEnd; i++) {
+            if (source[i] != target[i + delta])
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Remember that a specified block was "touched", i.e. had a value set.
+     * Untouched blocks can be skipped when compacting the array
+     */
+    private final void touchBlock(int i, int value) {
+        hashes[i] = (hashes[i] + (value<<1)) | 1;
+    }
+
+    /**
+     * Query whether a specified block was "touched", i.e. had a value set.
+     * Untouched blocks can be skipped when compacting the array
+     */
+    private final boolean blockTouched(int i) {
+        return hashes[i] != 0;
+    }
+
+    /** For internal use only.  Do not modify the result, the behavior of
+      * modified results are undefined.
+      */
+    public char[] getIndexArray()
+    {
+        return indices;
+    }
+
+    /**
+     * For internal use only.  Do not modify the result, the behavior of
+     * modified results are undefined.
+     */
+    public char[] getValueArray()
+    {
+        return values;
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        try {
+            CompactCharArray other = (CompactCharArray) super.clone();
+            other.values = (char[])values.clone();
+            other.indices = (char[])indices.clone();
+            return other;
+        } catch (CloneNotSupportedException e) {
+            throw new InternalError();
+        }
+    }
+
+    /**
+     * Compares the equality of two compact array objects.
+     * @param obj the compact array object to be compared with this.
+     * @return true if the current compact array object is the same
+     * as the compact array object obj; false otherwise.
+     */
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (this == obj)                      // quick check
+            return true;
+        if (getClass() != obj.getClass())         // same class?
+            return false;
+        CompactCharArray other = (CompactCharArray) obj;
+        for (int i = 0; i < UNICODECOUNT; i++) {
+            // could be sped up later
+            if (elementAt((char)i) != other.elementAt((char)i))
+                return false;
+        }
+        return true; // we made it through the guantlet.
+    }
+
+    /**
+     * Generates the hash code for the compact array object
+     */
+    public int hashCode() {
+        int result = 0;
+        int increment = Math.min(3, values.length/16);
+        for (int i = 0; i < values.length; i+= increment) {
+            result = result * 37 + values[i];
+        }
+        return result;
+    }
+
+
+    // --------------------------------------------------------------
+    // private
+    // --------------------------------------------------------------
+
+    /**
+     * Expanding takes the array back to a 65536 element array.
+     */
+    private void expand()
+    {
+        int i;
+        if (isCompact) {
+            char[] tempArray;
+            tempArray = new char[UNICODECOUNT];
+            for (i = 0; i < UNICODECOUNT; ++i) {
+                tempArray[i] = elementAt((char)i);
+            }
+            for (i = 0; i < INDEXCOUNT; ++i) {
+                indices[i] = (char)(i<<BLOCKSHIFT);
+            }
+            values = null;
+            values = tempArray;
+            isCompact = false;
+        }
+    }
+
+    public static  final int BLOCKSHIFT = 5; // NormalizerBuilder needs - liu
+    static  final int BLOCKCOUNT =(1<<BLOCKSHIFT);
+    static  final int INDEXSHIFT =(16-BLOCKSHIFT);
+    static  final int INDEXCOUNT =(1<<INDEXSHIFT);
+    static  final int BLOCKMASK = BLOCKCOUNT - 1;
+
+    private char values[];
+    private char indices[];
+    private int[] hashes;
+    private boolean isCompact;
+    char defaultValue;
+};
diff --git a/src/com/ibm/util/DateRule.java b/src/com/ibm/util/DateRule.java
new file mode 100755
index 0000000..6fdfdba
--- /dev/null
+++ b/src/com/ibm/util/DateRule.java
@@ -0,0 +1,74 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/DateRule.java,v $ 
+ * $Date: 2000/03/10 04:17:58 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+
+/**
+ * DateRule is an interface for calculating the date of an event.
+ * It supports both recurring events and those which occur only once.
+ * DateRule is useful for storing information about holidays,
+ * Daylight Savings Time rules, and other events such as meetings.
+ *
+ * @see SimpleDateRule
+ */
+public interface DateRule
+{
+    /**
+     * Return the first occurrance of the event represented by this rule
+     * that is on or after the given start date.
+     *
+     * @param start Only occurrances on or after this date are returned.
+     *
+     * @return      The date on which this event occurs, or null if it
+     *              does not occur on or after the start date.
+     *
+     * @see #firstBetween
+     */
+    abstract public Date    firstAfter(Date start);
+
+    /**
+     * Return the first occurrance of the event represented by this rule
+     * that is on or after the given start date and before the given
+     * end date.
+     *
+     * @param start Only occurrances on or after this date are returned.
+     * @param end   Only occurrances before this date are returned.
+     *
+     * @return      The date on which this event occurs, or null if it
+     *              does not occur between the start and end dates.
+     *
+     * @see #firstAfter
+     */
+    abstract public Date    firstBetween(Date start, Date end);
+
+    /**
+     * Checks whether this event occurs on the given date.  This does
+     * <em>not</em> take time of day into account; instead it checks
+     * whether this event and the given date are on the same day.
+     * This is useful for applications such as determining whether a given
+     * day is a holiday.
+     *
+     * @param date  The date to check.
+     * @return      true if this event occurs on the given date.
+     *
+     */
+    abstract public boolean isOn(Date date);
+
+    /**
+     * Check whether this event occurs at least once between the two
+     * dates given.
+     */
+    abstract public boolean isBetween(Date start, Date end);
+};
\ No newline at end of file
diff --git a/src/com/ibm/util/EasterHoliday.java b/src/com/ibm/util/EasterHoliday.java
new file mode 100755
index 0000000..06fc639
--- /dev/null
+++ b/src/com/ibm/util/EasterHoliday.java
@@ -0,0 +1,279 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/EasterHoliday.java,v $ 
+ * $Date: 2000/05/12 23:20:10 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import com.ibm.util.GregorianCalendar;
+import com.ibm.util.Calendar;
+import com.ibm.util.SimpleTimeZone;
+
+/**
+ * A Holiday subclass which represents holidays that occur
+ * a fixed number of days before or after Easter.  Supports both the
+ * Western and Orthodox methods for calculating Easter.
+ *
+ */
+public class EasterHoliday extends Holiday
+{
+    /**
+     * Construct a holiday that falls on Easter Sunday every year
+     *
+     * @param name The name of the holiday
+     */
+    public EasterHoliday(String name)
+    {
+        super(name, new EasterRule(0, false));
+    }
+
+    /**
+     * Construct a holiday that falls a specified number of days before
+     * or after Easter Sunday each year.
+     *
+     * @param daysAfter The number of days before (-) or after (+) Easter
+     * @param name      The name of the holiday
+     */
+    public EasterHoliday(int daysAfter, String name)
+    {
+        super(name, new EasterRule(daysAfter, false));
+    }
+
+    /**
+     * Construct a holiday that falls a specified number of days before
+     * or after Easter Sunday each year, using either the Western
+     * or Orthodox calendar.
+     *
+     * @param daysAfter The number of days before (-) or after (+) Easter
+     * @param orthodox  Use the Orthodox calendar?
+     * @param name      The name of the holiday
+     */
+    public EasterHoliday(int daysAfter, boolean orthodox, String name)
+    {
+        super(name, new EasterRule(daysAfter, orthodox));
+    }
+
+    /**
+     * Shrove Tuesday, aka Mardi Gras, 48 days before Easter
+     */
+    static public final EasterHoliday SHROVE_TUESDAY  = new EasterHoliday(-48,    "Shrove Tuesday");
+
+    /**
+     * Ash Wednesday, start of Lent, 47 days before Easter
+     */
+    static public final EasterHoliday ASH_WEDNESDAY   = new EasterHoliday(-47,    "Ash Wednesday");
+
+    /**
+     * Palm Sunday, 7 days before Easter
+     */
+    static public final EasterHoliday PALM_SUNDAY     = new EasterHoliday( -7,    "Palm Sunday");
+
+    /**
+     * Maundy Thursday, 3 days before Easter
+     */
+    static public final EasterHoliday MAUNDY_THURSDAY = new EasterHoliday( -3,    "Maundy Thursday");
+
+    /**
+     * Good Friday, 2 days before Easter
+     */
+    static public final EasterHoliday GOOD_FRIDAY     = new EasterHoliday( -2,    "Good Friday");
+
+    /**
+     * Easter Sunday
+     */
+    static public final EasterHoliday EASTER_SUNDAY   = new EasterHoliday(  0,    "Easter Sunday");
+
+    /**
+     * Easter Monday, 1 day after Easter
+     */
+    static public final EasterHoliday EASTER_MONDAY   = new EasterHoliday(  1,    "Easter Monday");
+
+    /**
+     * Ascension, 39 days after Easter
+     */
+    static public final EasterHoliday ASCENSION       = new EasterHoliday( 39,    "Ascension");
+
+    /**
+     * Pentecost (aka Whit Sunday), 49 days after Easter
+     */
+    static public final EasterHoliday PENTECOST       = new EasterHoliday( 49,    "Pentecost");
+
+    /**
+     * Whit Sunday (aka Pentecost), 49 days after Easter
+     */
+    static public final EasterHoliday WHIT_SUNDAY     = new EasterHoliday( 49,    "Whit Sunday");
+
+    /**
+     * Whit Monday, 50 days after Easter
+     */
+    static public final EasterHoliday WHIT_MONDAY     = new EasterHoliday( 50,    "Whit Monday");
+
+    /**
+     * Corpus Christi, 60 days after Easter
+     */
+    static public final EasterHoliday CORPUS_CHRISTI  = new EasterHoliday( 60,    "Corpus Christi");
+}
+
+class EasterRule implements DateRule {
+    public EasterRule(int daysAfterEaster, boolean isOrthodox) {
+        this.daysAfterEaster = daysAfterEaster;
+        if (isOrthodox) {
+            orthodox.setGregorianChange(new Date(Long.MAX_VALUE));
+            calendar = orthodox;
+        }
+    }
+
+    /**
+     * Return the first occurrance of this rule on or after the given date
+     */
+    public Date firstAfter(Date start)
+    {
+        if (startDate != null && start.before(startDate)) {
+            start = startDate;
+        }
+        return doFirstBetween(start, null);
+    }
+
+    /**
+     * Return the first occurrance of this rule on or after
+     * the given start date and before the given end date.
+     */
+    public Date firstBetween(Date start, Date end)
+    {
+        // Pin to the min/max dates for this rule
+        if (startDate != null && start.before(startDate)) {
+            start = startDate;
+        }
+        return doFirstBetween(start, end);
+    }
+
+    /**
+     * Return true if the given Date is on the same day as Easter
+     */
+    public boolean isOn(Date date)
+    {
+        if (startDate != null && date.before(startDate)) {
+            return false;
+        }
+
+        synchronized(calendar) {
+            calendar.setTime(date);
+            int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
+
+            calendar.setTime(computeInYear(calendar.getTime(), calendar));
+
+            return calendar.get(Calendar.DAY_OF_YEAR) == dayOfYear;
+        }
+    }
+
+    /**
+     * Return true if Easter occurs between the two dates given
+     */
+    public boolean isBetween(Date start, Date end)
+    {
+        return firstBetween(start, end) != null; // TODO: optimize?
+    }
+
+    private Date doFirstBetween(Date start, Date end)
+    {
+        //System.out.println("doFirstBetween: start   = " + start.toString());
+        //System.out.println("doFirstBetween: end     = " + end.toString());
+
+        synchronized(calendar) {
+            // Figure out when this holiday lands in the given year
+            Date result = computeInYear(start, calendar);
+
+         //System.out.println("                result  = " + result.toString());
+
+            // We might have gotten a date that's in the same year as "start", but
+            // earlier in the year.  If so, go to next year
+            if (result.before(start))
+            {
+                calendar.setTime(start);
+                calendar.get(Calendar.YEAR);    // JDK 1.1.2 bug workaround
+                calendar.add(Calendar.YEAR, 1);
+
+                //System.out.println("                Result before start, going to next year: "
+                //                        + calendar.getTime().toString());
+
+                result = computeInYear(calendar.getTime(), calendar);
+                //System.out.println("                result  = " + result.toString());
+            }
+
+            if (end != null && result.after(end)) {
+                //System.out.println("Result after end, returning null");
+                return null;
+            }
+            return result;
+        }
+    }
+
+    /**
+     * Compute the month and date on which this holiday falls in the year
+     * containing the date "date".  First figure out which date Easter
+     * lands on in this year, and then add the offset for this holiday to get
+     * the right date.
+     * <p>
+     * The algorithm here is taken from the
+     * <a href=http://www.pip.dknet.dk/~pip10160/calendar.html>Calendar FAQ,
+     * version 1.7</a>
+     */
+    private Date computeInYear(Date date, GregorianCalendar cal)
+    {
+        if (cal == null) cal = calendar;
+
+        synchronized(cal) {
+            cal.setTime(date);
+
+            int year = cal.get(Calendar.YEAR);
+            int g = year % 19;  // "Golden Number" of year - 1
+            int i = 0;          // # of days from 3/21 to the Paschal full moon
+            int j = 0;          // Weekday (0-based) of Paschal full moon
+
+            if (cal.getTime().after( cal.getGregorianChange()))
+            {
+                // We're past the Gregorian switchover, so use the Gregorian rules.
+                int c = year / 100;
+                int h = (c - c/4 - (8*c+13)/25 + 19*g + 15) % 30;
+                i = h - (h/28)*(1 - (h/28)*(29/(h+1))*((21-g)/11));
+                j = (year + year/4 + i + 2 - c + c/4) % 7;
+            }
+            else
+            {
+                // Use the old Julian rules.
+                i = (19*g + 15) % 30;
+                j = (year + year/4 + i) % 7;
+            }
+            int l = i - j;
+            int m = 3 + (l+40)/44;              // 1-based month in which Easter falls
+            int d = l + 28 - 31*(m/4);          // Date of Easter within that month
+
+            cal.clear();
+            cal.set(Calendar.ERA, GregorianCalendar.AD);
+            cal.set(Calendar.YEAR, year);
+            cal.set(Calendar.MONTH, m-1);       // 0-based
+            cal.set(Calendar.DATE, d);
+            cal.getTime();                      // JDK 1.1.2 bug workaround
+            cal.add(Calendar.DATE, daysAfterEaster);
+
+            return cal.getTime();
+        }
+    }
+
+    static GregorianCalendar gregorian = new GregorianCalendar(new SimpleTimeZone(0, "UTC"));
+    static GregorianCalendar orthodox = new GregorianCalendar(new SimpleTimeZone(0, "UTC"));
+
+    int               daysAfterEaster;
+    Date              startDate = null;
+    GregorianCalendar calendar = gregorian;
+
+}
diff --git a/src/com/ibm/util/GregorianCalendar.java b/src/com/ibm/util/GregorianCalendar.java
new file mode 100755
index 0000000..7f6913b
--- /dev/null
+++ b/src/com/ibm/util/GregorianCalendar.java
@@ -0,0 +1,928 @@
+/*
+ * @(#)GregorianCalendar.java	1.52 99/11/23
+ *
+ * (C) Copyright Taligent, Inc. 1996-1998 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1996-1998 - All Rights Reserved
+ *
+ * Portions copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ *   The original version of this source code and documentation is copyrighted
+ * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
+ * materials are provided under terms of a License Agreement between Taligent
+ * and Sun. This technology is protected by multiple US and International
+ * patents. This notice and attribution to Taligent may not be removed.
+ *   Taligent is a registered trademark of Taligent, Inc.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * and its documentation for NON-COMMERCIAL purposes and without
+ * fee is hereby granted provided that this copyright notice
+ * appears in all copies. Please refer to the file "copyright.html"
+ * for further important copyright and licensing information.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ *
+ */
+
+package com.ibm.util;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * <code>GregorianCalendar</code> is a concrete subclass of
+ * {@link Calendar}
+ * and provides the standard calendar used by most of the world.
+ *
+ * <p>
+ * The standard (Gregorian) calendar has 2 eras, BC and AD.
+ *
+ * <p>
+ * This implementation handles a single discontinuity, which corresponds by
+ * default to the date the Gregorian calendar was instituted (October 15, 1582
+ * in some countries, later in others).  The cutover date may be changed by the
+ * caller by calling <code>setGregorianChange()</code>.
+ *
+ * <p>
+ * Historically, in those countries which adopted the Gregorian calendar first,
+ * October 4, 1582 was thus followed by October 15, 1582. This calendar models
+ * this correctly.  Before the Gregorian cutover, <code>GregorianCalendar</code>
+ * implements the Julian calendar.  The only difference between the Gregorian
+ * and the Julian calendar is the leap year rule. The Julian calendar specifies
+ * leap years every four years, whereas the Gregorian calendar omits century
+ * years which are not divisible by 400.
+ *
+ * <p>
+ * <code>GregorianCalendar</code> implements <em>proleptic</em> Gregorian and
+ * Julian calendars. That is, dates are computed by extrapolating the current
+ * rules indefinitely far backward and forward in time. As a result,
+ * <code>GregorianCalendar</code> may be used for all years to generate
+ * meaningful and consistent results. However, dates obtained using
+ * <code>GregorianCalendar</code> are historically accurate only from March 1, 4
+ * AD onward, when modern Julian calendar rules were adopted.  Before this date,
+ * leap year rules were applied irregularly, and before 45 BC the Julian
+ * calendar did not even exist.
+ *
+ * <p>
+ * Prior to the institution of the Gregorian calendar, New Year's Day was
+ * March 25. To avoid confusion, this calendar always uses January 1. A manual
+ * adjustment may be made if desired for dates that are prior to the Gregorian
+ * changeover and which fall between January 1 and March 24.
+ *
+ * <p>Values calculated for the <code>WEEK_OF_YEAR</code> field range from 1 to
+ * 53.  Week 1 for a year is the earliest seven day period starting on
+ * <code>getFirstDayOfWeek()</code> that contains at least
+ * <code>getMinimalDaysInFirstWeek()</code> days from that year.  It thus
+ * depends on the values of <code>getMinimalDaysInFirstWeek()</code>,
+ * <code>getFirstDayOfWeek()</code>, and the day of the week of January 1.
+ * Weeks between week 1 of one year and week 1 of the following year are
+ * numbered sequentially from 2 to 52 or 53 (as needed).
+
+ * <p>For example, January 1, 1998 was a Thursday.  If
+ * <code>getFirstDayOfWeek()</code> is <code>MONDAY</code> and
+ * <code>getMinimalDaysInFirstWeek()</code> is 4 (these are the values
+ * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts
+ * on December 29, 1997, and ends on January 4, 1998.  If, however,
+ * <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>, then week 1 of 1998
+ * starts on January 4, 1998, and ends on January 10, 1998; the first three days
+ * of 1998 then are part of week 53 of 1997.
+ *
+ * <p>Values calculated for the <code>WEEK_OF_MONTH</code> field range from 0 or
+ * 1 to 4 or 5.  Week 1 of a month (the days with <code>WEEK_OF_MONTH =
+ * 1</code>) is the earliest set of at least
+ * <code>getMinimalDaysInFirstWeek()</code> contiguous days in that month,
+ * ending on the day before <code>getFirstDayOfWeek()</code>.  Unlike
+ * week 1 of a year, week 1 of a month may be shorter than 7 days, need
+ * not start on <code>getFirstDayOfWeek()</code>, and will not include days of
+ * the previous month.  Days of a month before week 1 have a
+ * <code>WEEK_OF_MONTH</code> of 0.
+ *
+ * <p>For example, if <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>
+ * and <code>getMinimalDaysInFirstWeek()</code> is 4, then the first week of
+ * January 1998 is Sunday, January 4 through Saturday, January 10.  These days
+ * have a <code>WEEK_OF_MONTH</code> of 1.  Thursday, January 1 through
+ * Saturday, January 3 have a <code>WEEK_OF_MONTH</code> of 0.  If
+ * <code>getMinimalDaysInFirstWeek()</code> is changed to 3, then January 1
+ * through January 3 have a <code>WEEK_OF_MONTH</code> of 1.
+ *
+ * <p>
+ * <strong>Example:</strong>
+ * <blockquote>
+ * <pre>
+ * // get the supported ids for GMT-08:00 (Pacific Standard Time)
+ * String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
+ * // if no ids were returned, something is wrong. get out.
+ * if (ids.length == 0)
+ *     System.exit(0);
+ *
+ *  // begin output
+ * System.out.println("Current Time");
+ *
+ * // create a Pacific Standard Time time zone
+ * SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
+ *
+ * // set up rules for daylight savings time
+ * pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+ * pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+ *
+ * // create a GregorianCalendar with the Pacific Daylight time zone
+ * // and the current date and time
+ * Calendar calendar = new GregorianCalendar(pdt);
+ * Date trialTime = new Date();
+ * calendar.setTime(trialTime);
+ *
+ * // print out a bunch of interesting things
+ * System.out.println("ERA: " + calendar.get(Calendar.ERA));
+ * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
+ * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
+ * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
+ * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
+ * System.out.println("DATE: " + calendar.get(Calendar.DATE));
+ * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
+ * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
+ * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
+ * System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
+ * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
+ * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
+ * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
+ * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
+ * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
+ * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
+ * System.out.println("ZONE_OFFSET: "
+ *                    + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
+ * System.out.println("DST_OFFSET: "
+ *                    + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));
+
+ * System.out.println("Current Time, with hour reset to 3");
+ * calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
+ * calendar.set(Calendar.HOUR, 3);
+ * System.out.println("ERA: " + calendar.get(Calendar.ERA));
+ * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
+ * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
+ * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
+ * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
+ * System.out.println("DATE: " + calendar.get(Calendar.DATE));
+ * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
+ * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
+ * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
+ * System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
+ * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
+ * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
+ * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
+ * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
+ * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
+ * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
+ * System.out.println("ZONE_OFFSET: "
+ *        + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
+ * System.out.println("DST_OFFSET: "
+ *        + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours
+ * </pre>
+ * </blockquote>
+ *
+ * @see          Calendar
+ * @see          TimeZone
+ * @version      1.52
+ * @author David Goldsmith, Mark Davis, Chen-Lieh Huang, Alan Liu
+ * @since JDK1.1
+ */
+public class GregorianCalendar extends Calendar {
+    /*
+     * Implementation Notes
+     *
+     * The Julian day number, as used here, is a modified number which has its
+     * onset at midnight, rather than noon.
+     *
+     * The epoch is the number of days or milliseconds from some defined
+     * starting point. The epoch for java.util.Date is used here; that is,
+     * milliseconds from January 1, 1970 (Gregorian), midnight UTC.  Other
+     * epochs which are used are January 1, year 1 (Gregorian), which is day 1
+     * of the Gregorian calendar, and December 30, year 0 (Gregorian), which is
+     * day 1 of the Julian calendar.
+     *
+     * We implement the proleptic Julian and Gregorian calendars.  This means we
+     * implement the modern definition of the calendar even though the
+     * historical usage differs.  For example, if the Gregorian change is set
+     * to new Date(Long.MIN_VALUE), we have a pure Gregorian calendar which
+     * labels dates preceding the invention of the Gregorian calendar in 1582 as
+     * if the calendar existed then.
+     *
+     * Likewise, with the Julian calendar, we assume a consistent 4-year leap
+     * rule, even though the historical pattern of leap years is irregular,
+     * being every 3 years from 45 BC through 9 BC, then every 4 years from 8 AD
+     * onwards, with no leap years in-between.  Thus date computations and
+     * functions such as isLeapYear() are not intended to be historically
+     * accurate.
+     *
+     * Given that milliseconds are a long, day numbers such as Julian day
+     * numbers, Gregorian or Julian calendar days, or epoch days, are also
+     * longs. Years can fit into an int.
+     */
+
+//////////////////
+// Class Variables
+//////////////////
+
+    /**
+     * Value of the <code>ERA</code> field indicating
+     * the period before the common era (before Christ), also known as BCE.
+     * The sequence of years at the transition from <code>BC</code> to <code>AD</code> is
+     * ..., 2 BC, 1 BC, 1 AD, 2 AD,...
+     * @see Calendar#ERA
+     */
+    public static final int BC = 0;
+
+    /**
+     * Value of the <code>ERA</code> field indicating
+     * the common era (Anno Domini), also known as CE.
+     * The sequence of years at the transition from <code>BC</code> to <code>AD</code> is
+     * ..., 2 BC, 1 BC, 1 AD, 2 AD,...
+     * @see Calendar#ERA
+     */
+    public static final int AD = 1;
+
+    private static final int EPOCH_YEAR = 1970;
+
+    private static final int[][] MONTH_COUNT = {
+        //len len2   st  st2
+        {  31,  31,   0,   0 }, // Jan
+        {  28,  29,  31,  31 }, // Feb
+        {  31,  31,  59,  60 }, // Mar
+        {  30,  30,  90,  91 }, // Apr
+        {  31,  31, 120, 121 }, // May
+        {  30,  30, 151, 152 }, // Jun
+        {  31,  31, 181, 182 }, // Jul
+        {  31,  31, 212, 213 }, // Aug
+        {  30,  30, 243, 244 }, // Sep
+        {  31,  31, 273, 274 }, // Oct
+        {  30,  30, 304, 305 }, // Nov
+        {  31,  31, 334, 335 }  // Dec
+        // len  length of month
+        // len2 length of month in a leap year
+        // st   days in year before start of month
+        // st2  days in year before month in leap year
+    };
+    
+    /**
+     * Old year limits were least max 292269054, max 292278994.
+     */
+    private static final int LIMITS[][] = {
+        // Minimum  Greatest    Least  Maximum
+        //           Minimum  Maximum
+        {        0,        0,       1,       1 }, // ERA
+        {        1,        1, 5828963, 5838270 }, // YEAR
+        {        0,        0,      11,      11 }, // MONTH
+        {        1,        1,      52,      53 }, // WEEK_OF_YEAR
+        {        0,        0,       4,       6 }, // WEEK_OF_MONTH
+        {        1,        1,      28,      31 }, // DAY_OF_MONTH
+        {        1,        1,     365,     366 }, // DAY_OF_YEAR
+        {/*                                  */}, // DAY_OF_WEEK
+        {       -1,       -1,       4,       6 }, // DAY_OF_WEEK_IN_MONTH
+        {/*                                  */}, // AM_PM
+        {/*                                  */}, // HOUR
+        {/*                                  */}, // HOUR_OF_DAY
+        {/*                                  */}, // MINUTE
+        {/*                                  */}, // SECOND
+        {/*                                  */}, // MILLISECOND
+        {/*                                  */}, // ZONE_OFFSET
+        {/*                                  */}, // DST_OFFSET
+        { -5838270, -5838270, 5828964, 5838271 }, // YEAR_WOY
+        {/*                                  */}, // DOW_LOCAL
+        { -5838269, -5838269, 5828963, 5838270 }, // EXTENDED_YEAR
+        {/*                                  */}, // JULIAN_DAY
+        {/*                                  */}, // MILLISECONDS_IN_DAY
+    };
+
+    protected int handleGetLimit(int field, int limitType) {
+        return LIMITS[field][limitType];
+    }
+
+/////////////////////
+// Instance Variables
+/////////////////////
+
+    /**
+     * The point at which the Gregorian calendar rules are used, measured in
+     * milliseconds from the standard epoch.  Default is October 15, 1582
+     * (Gregorian) 00:00:00 UTC or -12219292800000L.  For this value, October 4,
+     * 1582 (Julian) is followed by October 15, 1582 (Gregorian).  This
+     * corresponds to Julian day number 2299161.
+     * @serial
+     */
+    private long gregorianCutover = -12219292800000L;
+
+    /**
+     * Julian day number of the Gregorian cutover.
+     */
+    private transient int cutoverJulianDay = 2299161;
+    
+    /**
+     * The year of the gregorianCutover, with 0 representing
+     * 1 BC, -1 representing 2 BC, etc.
+     */
+    private transient int gregorianCutoverYear = 1582;
+
+    /**
+     * Used by handleComputeJulianDay() and handleComputeMonthStart().
+     */
+    transient protected boolean isGregorian;
+
+    /**
+     * Used by handleComputeJulianDay() and handleComputeMonthStart().
+     */
+    transient protected boolean invertGregorian;
+
+///////////////
+// Constructors
+///////////////
+
+    /**
+     * Constructs a default GregorianCalendar using the current time
+     * in the default time zone with the default locale.
+     */
+    public GregorianCalendar() {
+        this(TimeZone.getDefault(), Locale.getDefault());
+    }
+
+    /**
+     * Constructs a GregorianCalendar based on the current time
+     * in the given time zone with the default locale.
+     * @param zone the given time zone.
+     */
+    public GregorianCalendar(TimeZone zone) {
+        this(zone, Locale.getDefault());
+    }
+
+    /**
+     * Constructs a GregorianCalendar based on the current time
+     * in the default time zone with the given locale.
+     * @param aLocale the given locale.
+     */
+    public GregorianCalendar(Locale aLocale) {
+        this(TimeZone.getDefault(), aLocale);
+    }
+
+    /**
+     * Constructs a GregorianCalendar based on the current time
+     * in the given time zone with the given locale.
+     * @param zone the given time zone.
+     * @param aLocale the given locale.
+     */
+    public GregorianCalendar(TimeZone zone, Locale aLocale) {
+        super(zone, aLocale);
+        setTimeInMillis(System.currentTimeMillis());
+    }
+
+    /**
+     * Constructs a GregorianCalendar with the given date set
+     * in the default time zone with the default locale.
+     * @param year the value used to set the YEAR time field in the calendar.
+     * @param month the value used to set the MONTH time field in the calendar.
+     * Month value is 0-based. e.g., 0 for January.
+     * @param date the value used to set the DATE time field in the calendar.
+     */
+    public GregorianCalendar(int year, int month, int date) {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        set(ERA, AD);
+        set(YEAR, year);
+        set(MONTH, month);
+        set(DATE, date);
+    }
+
+    /**
+     * Constructs a GregorianCalendar with the given date
+     * and time set for the default time zone with the default locale.
+     * @param year the value used to set the YEAR time field in the calendar.
+     * @param month the value used to set the MONTH time field in the calendar.
+     * Month value is 0-based. e.g., 0 for January.
+     * @param date the value used to set the DATE time field in the calendar.
+     * @param hour the value used to set the HOUR_OF_DAY time field
+     * in the calendar.
+     * @param minute the value used to set the MINUTE time field
+     * in the calendar.
+     */
+    public GregorianCalendar(int year, int month, int date, int hour,
+                             int minute) {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        set(ERA, AD);
+        set(YEAR, year);
+        set(MONTH, month);
+        set(DATE, date);
+        set(HOUR_OF_DAY, hour);
+        set(MINUTE, minute);
+    }
+
+    /**
+     * Constructs a GregorianCalendar with the given date
+     * and time set for the default time zone with the default locale.
+     * @param year the value used to set the YEAR time field in the calendar.
+     * @param month the value used to set the MONTH time field in the calendar.
+     * Month value is 0-based. e.g., 0 for January.
+     * @param date the value used to set the DATE time field in the calendar.
+     * @param hour the value used to set the HOUR_OF_DAY time field
+     * in the calendar.
+     * @param minute the value used to set the MINUTE time field
+     * in the calendar.
+     * @param second the value used to set the SECOND time field
+     * in the calendar.
+     */
+    public GregorianCalendar(int year, int month, int date, int hour,
+                             int minute, int second) {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        set(ERA, AD);
+        set(YEAR, year);
+        set(MONTH, month);
+        set(DATE, date);
+        set(HOUR_OF_DAY, hour);
+        set(MINUTE, minute);
+        set(SECOND, second);
+    }
+
+/////////////////
+// Public methods
+/////////////////
+
+    /**
+     * Sets the GregorianCalendar change date. This is the point when the switch
+     * from Julian dates to Gregorian dates occurred. Default is October 15,
+     * 1582. Previous to this, dates will be in the Julian calendar.
+     * <p>
+     * To obtain a pure Julian calendar, set the change date to
+     * <code>Date(Long.MAX_VALUE)</code>.  To obtain a pure Gregorian calendar,
+     * set the change date to <code>Date(Long.MIN_VALUE)</code>.
+     *
+     * @param date the given Gregorian cutover date.
+     */
+    public void setGregorianChange(Date date) {
+        gregorianCutover = date.getTime();
+
+        // If the cutover has an extreme value, then create a pure
+        // Gregorian or pure Julian calendar by giving the cutover year and
+        // JD extreme values.
+        if (gregorianCutover <= MIN_MILLIS) {
+            gregorianCutoverYear = cutoverJulianDay = Integer.MIN_VALUE;
+        } else if (gregorianCutover >= MAX_MILLIS) {
+            gregorianCutoverYear = cutoverJulianDay = Integer.MAX_VALUE;
+        } else {
+            // Precompute two internal variables which we use to do the actual
+            // cutover computations.  These are the Julian day of the cutover
+            // and the cutover year.
+            cutoverJulianDay = (int) floorDivide(gregorianCutover, ONE_DAY);
+            
+            // Convert cutover millis to extended year
+            GregorianCalendar cal = new GregorianCalendar(getTimeZone());
+            cal.setTime(date);
+            gregorianCutoverYear = cal.get(EXTENDED_YEAR);
+        }
+    }
+
+    /**
+     * Gets the Gregorian Calendar change date.  This is the point when the
+     * switch from Julian dates to Gregorian dates occurred. Default is
+     * October 15, 1582. Previous to this, dates will be in the Julian
+     * calendar.
+     * @return the Gregorian cutover date for this calendar.
+     */
+    public final Date getGregorianChange() {
+        return new Date(gregorianCutover);
+    }
+
+    /**
+     * Determines if the given year is a leap year. Returns true if the
+     * given year is a leap year.
+     * @param year the given year.
+     * @return true if the given year is a leap year; false otherwise.
+     */
+    public boolean isLeapYear(int year) {
+        return year >= gregorianCutoverYear ?
+            ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0))) : // Gregorian
+            (year%4 == 0); // Julian
+    }
+
+    /**
+     * Compares this GregorianCalendar to an object reference.
+     * @param obj the object reference with which to compare
+     * @return true if this object is equal to <code>obj</code>; false otherwise
+     */
+    public boolean equals(Object obj) {
+        return super.equals(obj) &&
+            // Calendar.equals() ensures obj instanceof GregorianCalendar
+            gregorianCutover == ((GregorianCalendar)obj).gregorianCutover;
+    }
+    
+    /**
+     * Override hashCode.
+     * Generates the hash code for the GregorianCalendar object
+     */
+    public int hashCode() {
+        return super.hashCode() ^ (int)gregorianCutover;
+    }
+
+    /**
+     * Overrides Calendar
+     * Date Arithmetic function.
+     * Adds the specified (signed) amount of time to the given time field,
+     * based on the calendar's rules.
+     * @param field the time field.
+     * @param amount the amount of date or time to be added to the field.
+     * @exception IllegalArgumentException if an unknown field is given.
+     */
+    public void add(int field, int amount) {
+        switch (field) {
+        case ERA:
+            {
+                int era = get(ERA) + amount;
+                if (era < 0) {
+                    era = 0;
+                } else if (era > 1) {
+                    era = 1;
+                }
+                set(ERA, era);
+            }
+            return;
+
+        default:
+            super.add(field, amount);
+            break;
+        }
+    }
+
+    /**
+     * Roll a field by a signed amount.
+     * @since 1.2
+     */
+    public void roll(int field, int amount) {
+
+        switch (field) {
+        case ERA:
+            {
+                int era = (get(ERA) + amount ) % 2;
+                if (era < 0) {
+                    era += 2;
+                }
+                set(ERA, era);
+                return;
+            }
+
+        case WEEK_OF_YEAR:
+            {
+                // Unlike WEEK_OF_MONTH, WEEK_OF_YEAR never shifts the day of the
+                // week.  Also, rolling the week of the year can have seemingly
+                // strange effects simply because the year of the week of year
+                // may be different from the calendar year.  For example, the
+                // date Dec 28, 1997 is the first day of week 1 of 1998 (if
+                // weeks start on Sunday and the minimal days in first week is
+                // <= 3).
+                int woy = get(WEEK_OF_YEAR);
+                // Get the ISO year, which matches the week of year.  This
+                // may be one year before or after the calendar year.
+                int isoYear = get(YEAR_WOY);
+                int isoDoy = internalGet(DAY_OF_YEAR);
+                if (internalGet(MONTH) == Calendar.JANUARY) {
+                    if (woy >= 52) {
+                        isoDoy += handleGetYearLength(isoYear);
+                    }
+                } else {
+                    if (woy == 1) {
+                        isoDoy -= handleGetYearLength(isoYear - 1);
+                    }
+                }
+                woy += amount;
+                // Do fast checks to avoid unnecessary computation:
+                if (woy < 1 || woy > 52) {
+                    // Determine the last week of the ISO year.
+                    // We do this using the standard formula we use
+                    // everywhere in this file.  If we can see that the
+                    // days at the end of the year are going to fall into
+                    // week 1 of the next year, we drop the last week by
+                    // subtracting 7 from the last day of the year.
+                    int lastDoy = handleGetYearLength(isoYear);
+                    int lastRelDow = (lastDoy - isoDoy + internalGet(DAY_OF_WEEK) -
+                                      getFirstDayOfWeek()) % 7;
+                    if (lastRelDow < 0) lastRelDow += 7;
+                    if ((6 - lastRelDow) >= getMinimalDaysInFirstWeek()) lastDoy -= 7;
+                    int lastWoy = weekNumber(lastDoy, lastRelDow + 1);
+                    woy = ((woy + lastWoy - 1) % lastWoy) + 1;
+                }
+                set(WEEK_OF_YEAR, woy);
+                set(YEAR, isoYear); // Why not YEAR_WOY? - Alan 11/6/00
+                return;
+            }
+
+        default:
+            super.roll(field, amount);
+            return;
+        }
+    }
+
+    /**
+     * Return the minimum value that this field could have, given the current date.
+     * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
+     * @since 1.2
+     */
+    public int getActualMinimum(int field) {
+        return getMinimum(field);
+    }
+
+    /**
+     * Return the maximum value that this field could have, given the current date.
+     * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual
+     * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,
+     * for some years the actual maximum for MONTH is 12, and for others 13.
+     * @since 1.2
+     */
+    public int getActualMaximum(int field) {
+        /* It is a known limitation that the code here (and in getActualMinimum)
+         * won't behave properly at the extreme limits of GregorianCalendar's
+         * representable range (except for the code that handles the YEAR
+         * field).  That's because the ends of the representable range are at
+         * odd spots in the year.  For calendars with the default Gregorian
+         * cutover, these limits are Sun Dec 02 16:47:04 GMT 292269055 BC to Sun
+         * Aug 17 07:12:55 GMT 292278994 AD, somewhat different for non-GMT
+         * zones.  As a result, if the calendar is set to Aug 1 292278994 AD,
+         * the actual maximum of DAY_OF_MONTH is 17, not 30.  If the date is Mar
+         * 31 in that year, the actual maximum month might be Jul, whereas is
+         * the date is Mar 15, the actual maximum might be Aug -- depending on
+         * the precise semantics that are desired.  Similar considerations
+         * affect all fields.  Nonetheless, this effect is sufficiently arcane
+         * that we permit it, rather than complicating the code to handle such
+         * intricacies. - liu 8/20/98
+
+         * UPDATE: No longer true, since we have pulled in the limit values on
+         * the year. - Liu 11/6/00 */
+
+        switch (field) {
+
+        case YEAR:
+            /* The year computation is no different, in principle, from the
+             * others, however, the range of possible maxima is large.  In
+             * addition, the way we know we've exceeded the range is different.
+             * For these reasons, we use the special case code below to handle
+             * this field.
+             *
+             * The actual maxima for YEAR depend on the type of calendar:
+             *
+             *     Gregorian = May 17, 292275056 BC - Aug 17, 292278994 AD
+             *     Julian    = Dec  2, 292269055 BC - Jan  3, 292272993 AD
+             *     Hybrid    = Dec  2, 292269055 BC - Aug 17, 292278994 AD
+             *
+             * We know we've exceeded the maximum when either the month, date,
+             * time, or era changes in response to setting the year.  We don't
+             * check for month, date, and time here because the year and era are
+             * sufficient to detect an invalid year setting.  NOTE: If code is
+             * added to check the month and date in the future for some reason,
+             * Feb 29 must be allowed to shift to Mar 1 when setting the year.
+             */
+            {
+                Calendar cal = (Calendar) clone();
+                cal.setLenient(true);
+                
+                int era = cal.get(ERA);
+                Date d = cal.getTime();
+
+                /* Perform a binary search, with the invariant that lowGood is a
+                 * valid year, and highBad is an out of range year.
+                 */
+                int lowGood = LIMITS[YEAR][1];
+                int highBad = LIMITS[YEAR][2]+1;
+                while ((lowGood + 1) < highBad) {
+                    int y = (lowGood + highBad) / 2;
+                    cal.set(YEAR, y);
+                    if (cal.get(YEAR) == y && cal.get(ERA) == era) {
+                        lowGood = y;
+                    } else {
+                        highBad = y;
+                        cal.setTime(d); // Restore original fields
+                    }
+                }
+                
+                return lowGood;
+            }
+
+        default:
+            return super.getActualMaximum(field);
+        }
+    }
+
+//////////////////////
+// Proposed public API
+//////////////////////
+
+    /**
+     * Return true if the current time for this Calendar is in Daylignt
+     * Savings Time.
+     *
+     * Note -- MAKE THIS PUBLIC AT THE NEXT API CHANGE.  POSSIBLY DEPRECATE
+     * AND REMOVE TimeZone.inDaylightTime().
+     */
+    boolean inDaylightTime() {
+        if (!getTimeZone().useDaylightTime()) return false;
+        complete(); // Force update of DST_OFFSET field
+        return internalGet(DST_OFFSET) != 0;
+    }
+
+
+/////////////////////
+// Calendar framework
+/////////////////////
+
+    protected int handleGetMonthLength(int extendedYear, int month) {
+        return MONTH_COUNT[month][isLeapYear(extendedYear)?1:0];
+    }
+
+    protected int handleGetYearLength(int eyear) {
+        return isLeapYear(eyear) ? 366 : 365;
+    }
+
+/////////////////////////////
+// Time => Fields computation
+/////////////////////////////
+
+    /**
+     * Override Calendar to compute several fields specific to the hybrid
+     * Gregorian-Julian calendar system.  These are:
+     *
+     * <ul><li>ERA
+     * <li>YEAR
+     * <li>MONTH
+     * <li>DAY_OF_MONTH
+     * <li>DAY_OF_YEAR
+     * <li>EXTENDED_YEAR</ul>
+     */
+    protected void handleComputeFields(int julianDay) {
+        int eyear, month, dayOfMonth, dayOfYear;
+
+        if (julianDay >= cutoverJulianDay) {
+            month = getGregorianMonth();
+            dayOfMonth = getGregorianDayOfMonth();
+            dayOfYear = getGregorianDayOfYear();
+            eyear = getGregorianYear();
+        } else {
+            // The Julian epoch day (not the same as Julian Day)
+            // is zero on Saturday December 30, 0 (Gregorian).
+            long julianEpochDay = julianDay - (JAN_1_1_JULIAN_DAY - 2);
+            eyear = (int) floorDivide(4*julianEpochDay + 1464, 1461);
+            
+            // Compute the Julian calendar day number for January 1, eyear
+            long january1 = 365*(eyear-1) + floorDivide(eyear-1, 4);
+            dayOfYear = (int)(julianEpochDay - january1); // 0-based
+            
+            // Julian leap years occurred historically every 4 years starting
+            // with 8 AD.  Before 8 AD the spacing is irregular; every 3 years
+            // from 45 BC to 9 BC, and then none until 8 AD.  However, we don't
+            // implement this historical detail; instead, we implement the
+            // computatinally cleaner proleptic calendar, which assumes
+            // consistent 4-year cycles throughout time.
+            boolean isLeap = ((eyear&0x3) == 0); // equiv. to (eyear%4 == 0)
+            
+            // Common Julian/Gregorian calculation
+            int correction = 0;
+            int march1 = isLeap ? 60 : 59; // zero-based DOY for March 1
+            if (dayOfYear >= march1) {
+                correction = isLeap ? 1 : 2;
+            }
+            month = (12 * (dayOfYear + correction) + 6) / 367; // zero-based month
+            dayOfMonth = dayOfYear - MONTH_COUNT[month][isLeap?3:2] + 1; // one-based DOM
+            ++dayOfYear;
+        }
+        internalSet(MONTH, month);
+        internalSet(DAY_OF_MONTH, dayOfMonth);
+        internalSet(DAY_OF_YEAR, dayOfYear);
+        internalSet(EXTENDED_YEAR, eyear);
+        int era = AD;
+        if (eyear < 1) {
+            era = BC;
+            eyear = 1 - eyear;
+        }
+        internalSet(ERA, era);
+        internalSet(YEAR, eyear);
+    }
+
+/////////////////////////////
+// Fields => Time computation
+/////////////////////////////
+
+    protected int handleGetExtendedYear() {
+        int year;
+        if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR) {
+            year = internalGet(EXTENDED_YEAR, EPOCH_YEAR);
+        } else {
+            // The year defaults to the epoch start, the era to AD
+            int era = internalGet(ERA, AD);
+            if (era == BC) {
+                year = 1 - internalGet(YEAR, 1); // Convert to extended year
+            } else {
+                year = internalGet(YEAR, EPOCH_YEAR);
+            }
+        }
+        return year;
+    }
+
+    /**
+     * Override Calendar to improve performance.  This method tries to use
+     * the EXTENDED_YEAR, MONTH, DATE, fields if they are set, instead of
+     * computing them.  If they are not set, this method defers to the
+     * default implemenation.
+     * @param millis milliseconds of the date fields
+     * @param millisInDay milliseconds of the time fields; may be out
+     * or range.
+     */
+    protected int computeZoneOffset(long millis, int millisInDay) {
+
+        // Normalize the millisInDay to 0..ONE_DAY-1.  If the millis is out
+        // of range, then we defer to the base class implementation which
+        // will recompute the correct values.
+        int[] normalizedMillisInDay = new int[1];
+        int days = floorDivide(millis + millisInDay, (int) ONE_DAY, normalizedMillisInDay);
+
+        // We need to have the month, the day, and the day of the week.  If
+        // the fields are not set or if we're lenient (so fields may be out
+        // of range) then we defer to the base class which will normalize
+        // the year, month, and day of month.
+        if (isLenient() || !isSet(MONTH) || !isSet(DAY_OF_MONTH)
+            || millisInDay != normalizedMillisInDay[0]) {
+            return super.computeZoneOffset(millis, millisInDay);
+        }
+
+        int julianDay = millisToJulianDay(days * ONE_DAY);
+
+        // It's tempting to try to use DAY_OF_WEEK here, if it
+        // is set, but we CAN'T.  Even if it's set, it might have
+        // been set wrong by the user.  We should rely only on
+        // the Julian day number, which has been computed correctly
+        // using the disambiguation algorithm above. [LIU]
+        int year = internalGet(EXTENDED_YEAR);
+        int month = internalGet(MONTH);
+        int previousMonthLength = (month == 0) ?
+            31 : handleGetMonthLength(year, month-1);
+
+        return getTimeZone().getOffset(year, month,
+                              internalGet(DATE),
+                              julianDayToDayOfWeek(julianDay),
+                              normalizedMillisInDay[0],
+                              handleGetMonthLength(year, month),
+                              previousMonthLength);
+
+        // Note: Because we pass in wall millisInDay, rather than
+        // standard millisInDay, we interpret "1:00 am" on the day
+        // of cessation of DST as "1:00 am Std" (assuming the time
+        // of cessation is 2:00 am).
+    }
+
+    protected int handleComputeJulianDay(int bestField) {
+
+        invertGregorian = false;
+
+        int jd = super.handleComputeJulianDay(bestField);
+
+        // The following check handles portions of the cutover year BEFORE the
+        // cutover itself happens.
+        if (isGregorian != (jd >= cutoverJulianDay)) {
+            invertGregorian = true;
+            jd = super.handleComputeJulianDay(bestField);
+        }
+        
+        return jd;
+    }
+
+    // Return JD of start of given month/year
+    protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) {
+
+        // If the month is out of range, adjust it into range, and
+        // modify the extended year value accordingly.
+        if (month < 0 || month > 11) {
+            int[] rem = new int[1];
+            eyear += floorDivide(month, 12, rem);
+            month = rem[0];
+        }
+
+        boolean isLeap = eyear%4 == 0;
+        int y = eyear - 1;
+        int julianDay = 365*y + floorDivide(y, 4) + (JAN_1_1_JULIAN_DAY - 3);
+
+        isGregorian = (eyear >= gregorianCutoverYear);
+        if (invertGregorian) {
+            isGregorian = !isGregorian;
+        }
+        if (isGregorian) {
+            isLeap = isLeap && ((eyear%100 != 0) || (eyear%400 == 0));
+            // Add 2 because Gregorian calendar starts 2 days after
+            // Julian calendar
+            julianDay += floorDivide(y, 400) - floorDivide(y, 100) + 2;
+        }
+
+        // At this point julianDay indicates the day BEFORE the first
+        // day of January 1, <eyear> of either the Julian or Gregorian
+        // calendar.
+
+        if (month != 0) {
+            julianDay += MONTH_COUNT[month][isLeap?3:2];
+        }
+
+        return julianDay;
+    }
+}
diff --git a/src/com/ibm/util/HebrewCalendar.java b/src/com/ibm/util/HebrewCalendar.java
new file mode 100755
index 0000000..fab68e3
--- /dev/null
+++ b/src/com/ibm/util/HebrewCalendar.java
@@ -0,0 +1,766 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/HebrewCalendar.java,v $ 
+ * $Date: 2000/11/28 00:50:13 $ 
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * <code>HebrewCalendar</code> is a subclass of <code>Calendar</code>
+ * that that implements the traditional Hebrew calendar.
+ * This is the civil calendar in Israel and the liturgical calendar
+ * of the Jewish faith worldwide.
+ * <p>
+ * The Hebrew calendar is lunisolar and thus has a number of interesting
+ * properties that distinguish it from the Gregorian.  Months start
+ * on the day of (an arithmetic approximation of) each new moon.  Since the
+ * solar year (approximately 365.24 days) is not an even multiple of
+ * the lunar month (approximately 29.53 days) an extra "leap month" is
+ * inserted in 7 out of every 19 years.  To make matters even more
+ * interesting, the start of a year can be delayed by up to three days
+ * in order to prevent certain holidays from falling on the Sabbath and
+ * to prevent certain illegal year lengths.  Finally, the lengths of certain
+ * months can vary depending on the number of days in the year.
+ * <p>
+ * The leap month is known as "Adar 1" and is inserted between the
+ * months of Shevat and Adar in leap years.  Since the leap month does
+ * not come at the end of the year, calculations involving
+ * month numbers are particularly complex.  Users of this class should
+ * make sure to use the {@link #roll roll} and {@link #add add} methods
+ * rather than attempting to perform date arithmetic by manipulating
+ * the fields directly.
+ * <p>
+ * <b>Note:</b> In the traditional Hebrew calendar, days start at sunset.
+ * However, in order to keep the time fields in this class
+ * synchronized with those of the other calendars and with local clock time,
+ * we treat days and months as beginning at midnight,
+ * roughly 6 hours after the corresponding sunset.
+ * <p>
+ * If you are interested in more information on the rules behind the Hebrew
+ * calendar, see one of the following references:
+ * <ul>
+ * <li>"<a href="http://www.amazon.com/exec/obidos/ASIN/0521564743">Calendrical Calculations</a>",
+ *      by Nachum Dershowitz & Edward Reingold, Cambridge University Press, 1997, pages 85-91.
+ *
+ * <li>Hebrew Calendar Science and Myths,
+ *      <a href="http://www.geocities.com/Athens/1584/">
+ *      http://www.geocities.com/Athens/1584/</a>
+ *
+ * <li>The Calendar FAQ,
+ *      <a href="http://www.pip.dknet.dk/~pip10160/calendar.html">
+ *      http://www.pip.dknet.dk/~pip10160/calendar.html</a>
+ * </ul>
+ * <p>
+ * @see com.ibm.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+public class HebrewCalendar extends Calendar {
+
+    private static String copyright = "Copyright \u00a9 1997-1998 IBM Corp. All Rights Reserved.";
+
+    //-------------------------------------------------------------------------
+    // Tons o' Constants...
+    //-------------------------------------------------------------------------
+
+    /** Constant for Tishri, the 1st month of the Hebrew year. */
+    public static final int TISHRI = 0;
+
+    /** Constant for Heshvan, the 2nd month of the Hebrew year. */
+    public static final int HESHVAN = 1;
+
+    /** Constant for Kislev, the 3rd month of the Hebrew year. */
+    public static final int KISLEV = 2;
+
+    /** Constant for Tevet, the 4th month of the Hebrew year. */
+    public static final int TEVET = 3;
+
+    /** Constant for Shevat, the 5th month of the Hebrew year. */
+    public static final int SHEVAT = 4;
+
+    /**
+     * Constant for Adar I, the 6th month of the Hebrew year
+     * (present in leap years only). In non-leap years, the calendar
+     * jumps from Shevat (5th month) to Adar (7th month).
+     */
+    public static final int ADAR_1 = 5;
+
+    /** Constant for the Adar, the 7th month of the Hebrew year. */
+    public static final int ADAR = 6;
+
+    /** Constant for Nisan, the 8th month of the Hebrew year. */
+    public static final int NISAN = 7;
+
+    /** Constant for Iyar, the 9th month of the Hebrew year. */
+    public static final int IYAR = 8;
+
+    /** Constant for Sivan, the 10th month of the Hebrew year. */
+    public static final int SIVAN = 9;
+
+    /** Constant for Tammuz, the 11th month of the Hebrew year. */
+    public static final int TAMUZ = 10;
+
+    /** Constant for Av, the 12th month of the Hebrew year. */
+    public static final int AV = 11;
+
+    /** Constant for Elul, the 13th month of the Hebrew year. */
+    public static final int ELUL = 12;
+
+    /**
+     * The absolute date, in milliseconds since 1/1/1970 AD, Gregorian,
+     * of the start of the Hebrew calendar.  In order to keep this calendar's
+     * time of day in sync with that of the Gregorian calendar, we use
+     * midnight, rather than sunset the day before.
+     */
+    private static final long EPOCH_MILLIS = -180799862400000L; // 1/1/1 HY
+
+    private static final int LIMITS[][] = {
+        // Minimum  Greatest    Least  Maximum
+        //           Minimum  Maximum
+        {        0,        0,       0,       0 }, // ERA
+        {        1,        1, 5000000, 5000000 }, // YEAR
+        {        0,        0,      12,      12 }, // MONTH
+        {        1,        1,      51,      56 }, // WEEK_OF_YEAR
+        {        0,        0,       5,       6 }, // WEEK_OF_MONTH
+        {        1,        1,      29,      30 }, // DAY_OF_MONTH
+        {        1,        1,     353,     385 }, // DAY_OF_YEAR
+        {/*                                  */}, // DAY_OF_WEEK
+        {       -1,       -1,       4,       6 }, // DAY_OF_WEEK_IN_MONTH
+        {/*                                  */}, // AM_PM
+        {/*                                  */}, // HOUR
+        {/*                                  */}, // HOUR_OF_DAY
+        {/*                                  */}, // MINUTE
+        {/*                                  */}, // SECOND
+        {/*                                  */}, // MILLISECOND
+        {/*                                  */}, // ZONE_OFFSET
+        {/*                                  */}, // DST_OFFSET
+        { -5000001, -5000001, 5000001, 5000001 }, // YEAR_WOY
+        {/*                                  */}, // DOW_LOCAL
+        { -5000000, -5000000, 5000000, 5000000 }, // EXTENDED_YEAR
+        {/*                                  */}, // JULIAN_DAY
+        {/*                                  */}, // MILLISECONDS_IN_DAY
+    };
+
+    /**
+     * The lengths of the Hebrew months.  This is complicated, because there
+     * are three different types of years, or six if you count leap years.
+     * Due to the rules for postponing the start of the year to avoid having
+     * certain holidays fall on the sabbath, the year can end up being three
+     * different lengths, called "deficient", "normal", and "complete".
+     */
+    private static final int MONTH_LENGTH[][] = {
+        // Deficient  Normal     Complete
+        {   30,         30,         30     },           //Tishri
+        {   29,         29,         30     },           //Heshvan
+        {   29,         30,         30     },           //Kislev
+        {   29,         29,         29     },           //Tevet
+        {   30,         30,         30     },           //Shevat
+        {   30,         30,         30     },           //Adar I (leap years only)
+        {   29,         29,         29     },           //Adar
+        {   30,         30,         30     },           //Nisan
+        {   29,         29,         29     },           //Iyar
+        {   30,         30,         30     },           //Sivan
+        {   29,         29,         29     },           //Tammuz
+        {   30,         30,         30     },           //Av
+        {   29,         29,         29     },           //Elul
+    };
+
+    /**
+     * The cumulative # of days to the end of each month in a non-leap year
+     * Although this can be calculated from the MONTH_LENGTH table,
+     * keeping it around separately makes some calculations a lot faster
+     */
+    private static final int MONTH_START[][] = {
+        // Deficient  Normal     Complete
+        {    0,          0,          0  },          // (placeholder)
+        {   30,         30,         30  },          // Tishri
+        {   59,         59,         60  },          // Heshvan
+        {   88,         89,         90  },          // Kislev
+        {  117,        118,        119  },          // Tevet
+        {  147,        148,        149  },          // Shevat
+        {  147,        148,        149  },          // (Adar I)
+        {  176,        177,        178  },          // Adar
+        {  206,        207,        208  },          // Nisan
+        {  235,        236,        237  },          // Iyar
+        {  265,        266,        267  },          // Sivan
+        {  294,        295,        296  },          // Tammuz
+        {  324,        325,        326  },          // Av
+        {  353,        354,        355  },          // Elul
+    };
+
+    /**
+     * The cumulative # of days to the end of each month in a leap year
+     */
+    private static final int LEAP_MONTH_START[][] = {
+        // Deficient  Normal     Complete
+        {    0,          0,          0  },          // (placeholder)
+        {   30,         30,         30  },          // Tishri
+        {   59,         59,         60  },          // Heshvan
+        {   88,         89,         90  },          // Kislev
+        {  117,        118,        119  },          // Tevet
+        {  147,        148,        149  },          // Shevat
+        {  177,        178,        179  },          // Adar I
+        {  206,        207,        208  },          // Adar II
+        {  236,        237,        238  },          // Nisan
+        {  265,        266,        267  },          // Iyar
+        {  295,        296,        297  },          // Sivan
+        {  324,        325,        326  },          // Tammuz
+        {  354,        355,        356  },          // Av
+        {  383,        384,        385  },          // Elul
+    };
+
+    //-------------------------------------------------------------------------
+    // Data Members...
+    //-------------------------------------------------------------------------
+
+    private static CalendarCache cache = new CalendarCache();
+    
+    //-------------------------------------------------------------------------
+    // Constructors...
+    //-------------------------------------------------------------------------
+
+    /**
+     * Constructs a default <code>HebrewCalendar</code> using the current time
+     * in the default time zone with the default locale.
+     */
+    public HebrewCalendar() {
+        this(TimeZone.getDefault(), Locale.getDefault());
+    }
+
+    /**
+     * Constructs a <code>HebrewCalendar</code> based on the current time
+     * in the given time zone with the default locale.
+     *
+     * @param zone The time zone for the new calendar.
+     */
+    public HebrewCalendar(TimeZone zone) {
+        this(zone, Locale.getDefault());
+    }
+
+    /**
+     * Constructs a <code>HebrewCalendar</code> based on the current time
+     * in the default time zone with the given locale.
+     *
+     * @param aLocale The locale for the new calendar.
+     */
+    public HebrewCalendar(Locale aLocale) {
+        this(TimeZone.getDefault(), aLocale);
+    }
+
+    /**
+     * Constructs a <code>HebrewCalendar</code> based on the current time
+     * in the given time zone with the given locale.
+     *
+     * @param zone The time zone for the new calendar.
+     *
+     * @param aLocale The locale for the new calendar.
+     */
+    public HebrewCalendar(TimeZone zone, Locale aLocale) {
+        super(zone, aLocale);
+        setTimeInMillis(System.currentTimeMillis());
+    }
+
+    /**
+     * Constructs a <code>HebrewCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+     *
+     * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+     *                  The value is 0-based. e.g., 0 for Tishri.
+     *
+     * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+     */
+    public HebrewCalendar(int year, int month, int date) {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        this.set(YEAR, year);
+        this.set(MONTH, month);
+        this.set(DATE, date);
+    }
+
+    /**
+     * Constructs a <code>HebrewCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param date      The date to which the new calendar is set.
+     */
+    public HebrewCalendar(Date date) {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        this.setTime(date);
+    }
+
+    /**
+     * Constructs a <code>HebrewCalendar</code> with the given date
+     * and time set for the default time zone with the default locale.
+     *
+     * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+     *
+     * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+     *                  The value is 0-based. e.g., 0 for Tishri.
+     *
+     * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+     *
+     * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+     *
+     * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+     *
+     * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+     */
+    public HebrewCalendar(int year, int month, int date, int hour,
+                             int minute, int second)
+    {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        this.set(YEAR, year);
+        this.set(MONTH, month);
+        this.set(DATE, date);
+        this.set(HOUR_OF_DAY, hour);
+        this.set(MINUTE, minute);
+        this.set(SECOND, second);
+    }
+
+    //-------------------------------------------------------------------------
+    // Rolling and adding functions overridden from Calendar
+    //
+    // These methods call through to the default implementation in IBMCalendar
+    // for most of the fields and only handle the unusual ones themselves.
+    //-------------------------------------------------------------------------
+
+    /**
+     * Add a signed amount to a specified field, using this calendar's rules.
+     * For example, to add three days to the current date, you can call
+     * <code>add(Calendar.DATE, 3)</code>. 
+     * <p>
+     * When adding to certain fields, the values of other fields may conflict and
+     * need to be changed.  For example, when adding one to the {@link #MONTH MONTH} field
+     * for the date "30 Av 5758", the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+     * must be adjusted so that the result is "29 Elul 5758" rather than the invalid
+     * "30 Elul 5758".
+     * <p>
+     * This method is able to add to
+     * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+     * and {@link #ZONE_OFFSET ZONE_OFFSET}.
+     * <p>
+     * <b>Note:</b> You should always use {@link #roll roll} and add rather
+     * than attempting to perform arithmetic operations directly on the fields
+     * of a <tt>HebrewCalendar</tt>.  Since the {@link #MONTH MONTH} field behaves
+     * discontinuously in non-leap years, simple arithmetic can give invalid results.
+     * <p>
+     * @param field     the time field.
+     * @param amount    the amount to add to the field.
+     *
+     * @exception   IllegalArgumentException if the field is invalid or refers
+     *              to a field that cannot be handled by this method.
+     */
+    public void add(int field, int amount)
+    {
+        switch (field) {
+        case MONTH: 
+            {
+//~             // This seems like a good idea but it isn't working :( - Alan
+
+//~             // MONTH is tricky, because the number of months per year varies
+//~             // It's easiest to just convert to an absolute # of months
+//~             // since the epoch, do the addition, and convert back.
+//~             int month = (235 * get(YEAR) - 234) / 19 + get(MONTH);
+//~             month += amount;
+
+//~             // Now convert back to year and month values
+//~             int year = (19 * month + 234) / 235;
+//~             month -= (235 * year - 234) / 19;
+//~             
+//~             // In a non-leap year, months after the (missing) leap month
+//~             // must be bumped up by one.
+//~             // TODO: but only if we started before the leap month
+//~             if (month >= ADAR_1 && !isLeapYear(year)) {
+//~                 month++;
+//~             }
+//~             set(YEAR, year);
+//~             set(MONTH, month);
+//~             pinField(DAY_OF_MONTH);
+
+                // We can't just do a set(MONTH, get(MONTH) + amount).  The
+                // reason is ADAR_1.  Suppose amount is +2 and we land in
+                // ADAR_1 -- then we have to bump to ADAR_2 aka ADAR.  But
+                // if amount is -2 and we land in ADAR_1, then we have to
+                // bump the other way -- down to SHEVAT.  - Alan 11/00
+                int month = get(MONTH);
+                int year = get(YEAR);
+                //public static final int SHEVAT = 4;
+                //public static final int ADAR_1 = 5;
+                //public static final int ADAR = 6;
+                if (amount > 0) {
+                    while (amount-- > 0) {
+                        ++month;
+                        if (month == ADAR_1 && !isLeapYear(year)) {
+                            ++month;
+                        }
+                        if (month > ELUL) { // Last month of year
+                            month = 0;
+                            ++year;
+                        }
+                    }
+                } else {
+                    while (amount++ < 0) {
+                        --month;
+                        if (month == ADAR_1 && !isLeapYear(year)) {
+                            --month;
+                        }
+                        if (month < 0) {
+                            month = ELUL; // Last month of year
+                            --year;
+                        }
+                    }
+                }
+                set(MONTH, month);
+                set(YEAR, year);
+                pinField(DAY_OF_MONTH);
+                break;
+            }
+            
+        default:
+            super.add(field, amount);
+            break;
+        }
+    }
+
+    /**
+     * Rolls (up/down) a specified amount time on the given field.  For
+     * example, to roll the current date up by three days, you can call
+     * <code>roll(Calendar.DATE, 3)</code>.  If the
+     * field is rolled past its maximum allowable value, it will "wrap" back
+     * to its minimum and continue rolling.  
+     * For example, calling <code>roll(Calendar.DATE, 10)</code>
+     * on a Hebrew calendar set to "25 Av 5758" will result in the date "5 Av 5758".
+     * <p>
+     * When rolling certain fields, the values of other fields may conflict and
+     * need to be changed.  For example, when rolling the {@link #MONTH MONTH} field
+     * upward by one for the date "30 Av 5758", the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+     * must be adjusted so that the result is "29 Elul 5758" rather than the invalid
+     * "30 Elul".
+     * <p>
+     * This method is able to roll
+     * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+     * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+     * additional fields in their overrides of <code>roll</code>.
+     * <p>
+     * <b>Note:</b> You should always use roll and {@link #add add} rather
+     * than attempting to perform arithmetic operations directly on the fields
+     * of a <tt>HebrewCalendar</tt>.  Since the {@link #MONTH MONTH} field behaves
+     * discontinuously in non-leap years, simple arithmetic can give invalid results.
+     * <p>
+     * @param field     the time field.
+     * @param amount    the amount by which the field should be rolled.
+     *
+     * @exception   IllegalArgumentException if the field is invalid or refers
+     *              to a field that cannot be handled by this method.
+     */
+    public void roll(int field, int amount)
+    {
+        switch (field) {
+        case MONTH:
+            {
+                int month = get(MONTH);
+                int year = get(YEAR);
+                
+                boolean leapYear = isLeapYear(year);
+                int yearLength = monthsInYear(year);
+                int newMonth = month + (amount % yearLength);
+                //
+                // If it's not a leap year and we're rolling past the missing month
+                // of ADAR_1, we need to roll an extra month to make up for it.
+                //
+                if (!leapYear) {
+                    if (amount > 0 && month < ADAR_1 && newMonth >= ADAR_1) {
+                        newMonth++;
+                    } else if (amount < 0 && month > ADAR_1 && newMonth <= ADAR_1) {
+                        newMonth--;
+                    }
+                }
+                set(MONTH, (newMonth + 13) % 13);
+                pinField(DAY_OF_MONTH);
+                return;
+            }
+        default:
+            super.roll(field, amount);
+        }
+    }
+
+    //-------------------------------------------------------------------------
+    // Support methods
+    //-------------------------------------------------------------------------
+
+    // Hebrew date calculations are performed in terms of days, hours, and
+    // "parts" (or halakim), which are 1/1080 of an hour, or 3 1/3 seconds.
+    private static final long HOUR_PARTS = 1080;
+    private static final long DAY_PARTS  = 24*HOUR_PARTS;
+    
+    // An approximate value for the length of a lunar month.
+    // It is used to calculate the approximate year and month of a given
+    // absolute date.
+    static private final int  MONTH_DAYS = 29;
+    static private final long MONTH_FRACT = 12*HOUR_PARTS + 793;
+    static private final long MONTH_PARTS = MONTH_DAYS*DAY_PARTS + MONTH_FRACT;
+    
+    // The time of the new moon (in parts) on 1 Tishri, year 1 (the epoch)
+    // counting from noon on the day before.  BAHARAD is an abbreviation of
+    // Bet (Monday), Hey (5 hours from sunset), Resh-Daled (204).
+    static private final long BAHARAD = 11*HOUR_PARTS + 204;
+
+    /**
+     * Finds the day # of the first day in the given Hebrew year.
+     * To do this, we want to calculate the time of the Tishri 1 new moon
+     * in that year.
+     * <p>
+     * The algorithm here is similar to ones described in a number of
+     * references, including:
+     * <ul>
+     * <li>"Calendrical Calculations", by Nachum Dershowitz & Edward Reingold,
+     *     Cambridge University Press, 1997, pages 85-91.
+     *
+     * <li>Hebrew Calendar Science and Myths,
+     *     <a href="http://www.geocities.com/Athens/1584/">
+     *     http://www.geocities.com/Athens/1584/</a>
+     *
+     * <li>The Calendar FAQ,
+     *      <a href="http://www.pip.dknet.dk/~pip10160/calendar.faq2.txt">
+     *      http://www.pip.dknet.dk/~pip10160/calendar.html</a>
+     * </ul>
+     */
+    private static long startOfYear(int year)
+    {
+        long day = cache.get(year);
+        
+        if (day == CalendarCache.EMPTY) {
+            int months = (235 * year - 234) / 19;           // # of months before year
+
+            long frac = months * MONTH_FRACT + BAHARAD;     // Fractional part of day #
+            day  = months * 29 + (frac / DAY_PARTS);   // Whole # part of calculation
+            frac = frac % DAY_PARTS;                        // Time of day
+
+            int wd = (int)(day % 7);                        // Day of week (0 == Monday)
+
+            if (wd == 2 || wd == 4 || wd == 6) {
+                // If the 1st is on Sun, Wed, or Fri, postpone to the next day
+                day += 1;
+                wd = (int)(day % 7);
+            }
+            if (wd == 1 && frac > 15*HOUR_PARTS+204 && !isLeapYear(year) ) {
+                // If the new moon falls after 3:11:20am (15h204p from the previous noon)
+                // on a Tuesday and it is not a leap year, postpone by 2 days.
+                // This prevents 356-day years.
+                day += 2;
+            }
+            else if (wd == 0 && frac > 21*HOUR_PARTS+589 && isLeapYear(year-1) ) {
+                // If the new moon falls after 9:32:43 1/3am (21h589p from yesterday noon)
+                // on a Monday and *last* year was a leap year, postpone by 1 day.
+                // Prevents 382-day years.
+                day += 1;
+            }
+            cache.put(year, day);
+        }
+        return day;
+    }
+
+    /**
+     * Find the day of the week for a given day
+     *
+     * @param day   The # of days since the start of the Hebrew calendar,
+     *              1-based (i.e. 1/1/1 AM is day 1).
+     */
+    private static int absoluteDayToDayOfWeek(long day)
+    {
+        // We know that 1/1/1 AM is a Monday, which makes the math easy...
+        return (int)(day % 7) + 1;
+    }
+
+    /**
+     * Returns the the type of a given year.
+     *  0   "Deficient" year with 353 or 383 days
+     *  1   "Normal"    year with 354 or 384 days
+     *  2   "Complete"  year with 355 or 385 days
+     */
+    private final int yearType(int year)
+    {
+        int yearLength = handleGetYearLength(year);
+
+        if (yearLength > 380) {
+           yearLength -= 30;        // Subtract length of leap month.
+        }
+
+        int type = 0;
+
+        switch (yearLength) {
+            case 353:
+                type = 0; break;
+            case 354:
+                type = 1; break;
+            case 355:
+                type = 2; break;
+            default:
+                System.out.println("Illegal year length " + yearLength + " in yearType");
+
+        }
+        return type;
+    }
+
+    /**
+     * Determine whether a given Hebrew year is a leap year
+     *
+     * The rule here is that if (year % 19) == 0, 3, 6, 8, 11, 14, or 17.
+     * The formula below performs the same test, believe it or not.
+     */
+    private static final boolean isLeapYear(int year) {
+        return (year * 12 + 17) % 19 >= 12;
+    }
+
+    private static int monthsInYear(int year) {
+        return isLeapYear(year) ? 13 : 12;
+    }
+
+    //-------------------------------------------------------------------------
+    // Calendar framework
+    //-------------------------------------------------------------------------
+
+    protected int handleGetLimit(int field, int limitType) {
+        return LIMITS[field][limitType];
+    }
+
+    /**
+     * Returns the length of the given month in the given year
+     */
+    protected int handleGetMonthLength(int extendedYear, int month) {
+
+        switch (month) {
+            case HESHVAN:
+            case KISLEV:
+                // These two month lengths can vary
+                return MONTH_LENGTH[month][yearType(extendedYear)];
+                
+            default:
+                // The rest are a fixed length
+                return MONTH_LENGTH[month][0];
+        }
+    }
+
+    /**
+     * Returns the number of days in the given Hebrew year
+     */
+    protected int handleGetYearLength(int eyear) {
+        return (int)(startOfYear(eyear+1) - startOfYear(eyear));
+    }
+
+    //-------------------------------------------------------------------------
+    // Functions for converting from milliseconds to field values
+    //-------------------------------------------------------------------------
+
+    /**
+     * Subclasses may override this method to compute several fields
+     * specific to each calendar system.  These are:
+     *
+     * <ul><li>ERA
+     * <li>YEAR
+     * <li>MONTH
+     * <li>DAY_OF_MONTH
+     * <li>DAY_OF_YEAR
+     * <li>EXTENDED_YEAR</ul>
+     * 
+     * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields,
+     * which will be set when this method is called.  Subclasses can
+     * also call the getGregorianXxx() methods to obtain Gregorian
+     * calendar equivalents for the given Julian day.
+     *
+     * <p>In addition, subclasses should compute any subclass-specific
+     * fields, that is, fields from BASE_FIELD_COUNT to
+     * getFieldCount() - 1.
+     */
+    protected void handleComputeFields(int julianDay) {
+        long d = julianDay - 347997;
+        long m = (d * DAY_PARTS) / MONTH_PARTS;         // Months (approx)
+        int year = (int)((19 * m + 234) / 235) + 1;     // Years (approx)
+        long ys  = startOfYear(year);                   // 1st day of year
+        int dayOfYear = (int)(d - ys);
+
+        // Because of the postponement rules, it's possible to guess wrong.  Fix it.
+        while (dayOfYear < 1) {
+            year--;
+            ys  = startOfYear(year);
+            dayOfYear = (int)(d - ys);
+        }
+
+        // Now figure out which month we're in, and the date within that month
+        int yearType = yearType(year);
+        int monthStart[][] = isLeapYear(year) ? LEAP_MONTH_START : MONTH_START;
+
+        int month = 0;
+        while (dayOfYear > monthStart[month][yearType]) {
+            month++;
+        }
+        month--;
+        int dayOfMonth = dayOfYear - monthStart[month][yearType];
+
+        internalSet(ERA, 0);
+        internalSet(YEAR, year);
+        internalSet(EXTENDED_YEAR, year);
+        internalSet(MONTH, month);
+        internalSet(DAY_OF_MONTH, dayOfMonth);
+        internalSet(DAY_OF_YEAR, dayOfYear);       
+    }
+
+    //-------------------------------------------------------------------------
+    // Functions for converting from field values to milliseconds
+    //-------------------------------------------------------------------------
+
+    protected int handleGetExtendedYear() {
+        int year;
+        if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR) {
+            year = internalGet(EXTENDED_YEAR, 1); // Default to year 1
+        } else {
+            year = internalGet(YEAR, 1); // Default to year 1
+        }
+        return year;
+    }
+
+    // Return JD of start of given month/year
+    protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) {
+
+        // Resolve out-of-range months.  This is necessary in order to
+        // obtain the correct year.
+        if (month < 0) {
+            while (month < 0) {
+                month += monthsInYear(--eyear);
+            }
+        } else if (month > 0) {
+            for (;;) {
+                int monthsInYear = monthsInYear(eyear);
+                if (month < monthsInYear) {
+                    break;
+                }
+                ++eyear;
+                month -= monthsInYear;
+            }
+        }
+
+        long day = startOfYear(eyear);
+
+        if (month != 0) {
+            if (isLeapYear(eyear)) {
+                day += LEAP_MONTH_START[month][yearType(eyear)];
+            } else {
+                day += MONTH_START[month][yearType(eyear)];
+            }
+        }
+
+        return (int) (day + 347997);
+    }
+}
diff --git a/src/com/ibm/util/HebrewHoliday.java b/src/com/ibm/util/HebrewHoliday.java
new file mode 100755
index 0000000..3d36241
--- /dev/null
+++ b/src/com/ibm/util/HebrewHoliday.java
@@ -0,0 +1,66 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/HebrewHoliday.java,v $ 
+ * $Date: 2001/02/26 22:21:15 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+public class HebrewHoliday extends Holiday
+{
+    private static final HebrewCalendar gCalendar = new HebrewCalendar();
+
+    /**
+     * Construct a holiday defined in reference to the Hebrew calendar.
+     *
+     * @param name The name of the holiday
+     */
+    public HebrewHoliday(int month, int date, String name)
+    {
+        this(month, date, 1, name);
+    }
+
+    public HebrewHoliday(int month, int date, int length, String name)
+    {
+        super(name, null);
+
+        SimpleDateRule rule = new SimpleDateRule(month, date);
+        rule.setCalendar(gCalendar);
+
+        setRule(rule);
+    }
+
+    public static HebrewHoliday
+        ROSH_HASHANAH   = new HebrewHoliday(HebrewCalendar.TISHRI,  1,  2,  "Rosh Hashanah"),
+        GEDALIAH        = new HebrewHoliday(HebrewCalendar.TISHRI,  3,      "Fast of Gedaliah"),
+        YOM_KIPPUR      = new HebrewHoliday(HebrewCalendar.TISHRI, 10,      "Yom Kippur"),
+        SUKKOT          = new HebrewHoliday(HebrewCalendar.TISHRI, 15,  6,  "Sukkot"),
+        HOSHANAH_RABBAH = new HebrewHoliday(HebrewCalendar.TISHRI, 21,      "Hoshanah Rabbah"),
+        SHEMINI_ATZERET = new HebrewHoliday(HebrewCalendar.TISHRI, 22,      "Shemini Atzeret"),
+        SIMCHAT_TORAH   = new HebrewHoliday(HebrewCalendar.TISHRI, 23,      "Simchat Torah"),
+        HANUKKAH        = new HebrewHoliday(HebrewCalendar.KISLEV, 25,      "Hanukkah"),
+        TEVET_10        = new HebrewHoliday(HebrewCalendar.TEVET,  10,      "Fast of Tevet 10"),
+        TU_BSHEVAT      = new HebrewHoliday(HebrewCalendar.SHEVAT, 15,      "Tu B'Shevat"),
+        ESTHER          = new HebrewHoliday(HebrewCalendar.ADAR,   13,      "Fast of Esther"),
+        PURIM           = new HebrewHoliday(HebrewCalendar.ADAR,   14,      "Purim"),
+        SHUSHAN_PURIM   = new HebrewHoliday(HebrewCalendar.ADAR,   15,      "Shushan Purim"),
+        PASSOVER        = new HebrewHoliday(HebrewCalendar.NISAN,  15,  8,  "Passover"),
+        YOM_HASHOAH     = new HebrewHoliday(HebrewCalendar.NISAN,  27,      "Yom Hashoah"),
+        YOM_HAZIKARON   = new HebrewHoliday(HebrewCalendar.IYAR,    4,      "Yom Hazikaron"),
+        YOM_HAATZMAUT   = new HebrewHoliday(HebrewCalendar.IYAR,    5,      "Yom Ha'Atzmaut"),
+        PESACH_SHEINI   = new HebrewHoliday(HebrewCalendar.IYAR,   14,      "Pesach Sheini"),
+        LAG_BOMER       = new HebrewHoliday(HebrewCalendar.IYAR,   18,      "Lab B'Omer"),
+        YOM_YERUSHALAYIM= new HebrewHoliday(HebrewCalendar.IYAR,   28,      "Yom Yerushalayim"),
+        SHAVUOT         = new HebrewHoliday(HebrewCalendar.SIVAN,   6,  2,  "Shavuot"),
+        TAMMUZ_17       = new HebrewHoliday(HebrewCalendar.TAMUZ,  17,      "Fast of Tammuz 17"),
+        TISHA_BAV       = new HebrewHoliday(HebrewCalendar.AV,      9,      "Fast of Tisha B'Av"),
+        SELIHOT         = new HebrewHoliday(HebrewCalendar.ELUL,   21,      "Selihot");
+
+}
diff --git a/src/com/ibm/util/Holiday.java b/src/com/ibm/util/Holiday.java
new file mode 100755
index 0000000..96795f8
--- /dev/null
+++ b/src/com/ibm/util/Holiday.java
@@ -0,0 +1,166 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/Holiday.java,v $ 
+ * $Date: 2000/03/10 04:17:58 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.Date;
+import java.util.MissingResourceException;
+
+/**
+ * An abstract class representing a holiday.  This class simply adds
+ * a holiday name to the DateRule interface for calculating the date
+ * of an event.
+ *
+ */
+public abstract class Holiday implements DateRule
+{
+    public static Holiday[] getHolidays()
+    {
+        return getHolidays(Locale.getDefault());
+    }
+
+    public static Holiday[] getHolidays(Locale locale)
+    {
+        Holiday[] result = noHolidays;
+
+        try {
+            ResourceBundle bundle = ResourceBundle.getBundle(
+                                    "com.ibm.util.resources.HolidayBundle",
+                                    locale);
+
+            result = (Holiday[]) bundle.getObject("holidays");
+        }
+        catch (MissingResourceException e) {
+        }
+        return result;
+    }
+
+    /**
+     * Return the first occurrance of this holiday on or after the given date
+     *
+     * @param start Only holidays on or after this date are returned.
+     *
+     * @return      The date on which this holiday occurs, or null if it
+     *              does not occur on or after the start date.
+     *
+     * @see #firstBetween
+     */
+    public Date firstAfter(Date start) {
+        return rule.firstAfter(start);
+    }
+
+    /**
+     * Return the first occurrance of this holiday that is on or after
+     * the given start date and before the given end date.
+     *
+     * @param start Only occurrances on or after this date are returned.
+     * @param end   Only occurrances before this date are returned.
+     *
+     * @return      The date on which this event occurs, or null if it
+     *              does not occur between the start and end dates.
+     *
+     * @see #firstAfter
+     */
+    public Date firstBetween(Date start, Date end) {
+        return rule.firstBetween(start, end);
+    }
+
+    /**
+     * Checks whether this holiday falls on the given date.  This does
+     * <em>not</em> take time of day into account; instead it checks
+     * whether the holiday and the given date are on the same day.
+     *
+     * @param date  The date to check.
+     * @return      true if this holiday occurs on the given date.
+     *
+     */
+    public boolean isOn(Date date) {
+        //System.out.println(name + ".isOn(" + date.toString() + "):");
+        return rule.isOn(date);
+    }
+
+    /**
+     * Check whether this holiday occurs at least once between the two
+     * dates given.
+     */
+    public boolean isBetween(Date start, Date end) {
+        return rule.isBetween(start, end);
+    }
+
+    /**
+     * Construct a new Holiday object.  This is for use by subclasses only.
+     * This constructs a new holiday with the given name and date rules.
+     *
+     * @param name  The name of this holiday.  The getDisplayName method
+     *              uses this string as a key to look up the holiday's name a
+     *              resource bundle object named HolidayBundle.
+     *
+     * @param rule  The date rules used for determining when this holiday
+     *              falls.  Holiday's implementation of the DateRule inteface
+     *              simply delegates to this DateRule object.
+     */
+    protected Holiday(String name, DateRule rule)
+    {
+        this.name = name;
+        this.rule = rule;
+    }
+
+    /**
+     * Return the name of this holiday in the language of the default locale
+     */
+    public String getDisplayName() {
+        return getDisplayName(Locale.getDefault());
+    }
+
+    /**
+     * Return the name of this holiday in the language of the specified locale
+     * The <code>name</code> parameter passed to this object's constructor is used
+     * as a key to look up the holiday's localized name in a ResourceBundle object
+     * named HolidayBundle.
+     *
+     * @param loc   A locale specifying the language in which the name is desired.
+     *
+     * @see ResourceBundle
+     */
+    public String getDisplayName(Locale locale)
+    {
+        String name = this.name;
+
+        try {
+            ResourceBundle bundle = ResourceBundle.getBundle(
+                                    "com.ibm.util.resources.HolidayBundle",
+                                    locale);
+            name = bundle.getString(name);
+        }
+        catch (MissingResourceException e) {
+            //System.out.println("Using default display name for " + name);
+        }
+        return name;
+    }
+
+    public DateRule getRule() {
+        return rule;
+    }
+
+    public void setRule(DateRule rule) {
+        this.rule = rule;
+    }
+
+    private String      name;
+    private DateRule    rule;
+
+    private static Holiday[] noHolidays = {};
+
+}
diff --git a/src/com/ibm/util/IslamicCalendar.java b/src/com/ibm/util/IslamicCalendar.java
new file mode 100755
index 0000000..e5de3b0
--- /dev/null
+++ b/src/com/ibm/util/IslamicCalendar.java
@@ -0,0 +1,560 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/IslamicCalendar.java,v $ 
+ * $Date: 2000/11/28 00:50:13 $ 
+ * $Revision: 1.9 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import com.ibm.util.Calendar;
+import java.util.Date;
+import com.ibm.util.GregorianCalendar;
+import java.util.Locale;
+import com.ibm.util.CalendarAstronomer;
+
+/**
+ * <code>IslamicCalendar</code> is a subclass of <code>Calendar</code>
+ * that that implements the Islamic civil and religious calendars.  It
+ * is used as the civil calendar in most of the Arab world and the
+ * liturgical calendar of the Islamic faith worldwide.  This calendar
+ * is also known as the "Hijri" calendar, since it starts at the time
+ * of Mohammed's emigration (or "hijra") to Medinah on Thursday, 
+ * July 15, 622 AD (Julian).
+ * <p>
+ * The Islamic calendar is strictly lunar, and thus an Islamic year of twelve
+ * lunar months does not correspond to the solar year used by most other
+ * calendar systems, including the Gregorian.  An Islamic year is, on average,
+ * about 354 days long, so each successive Islamic year starts about 11 days
+ * earlier in the corresponding Gregorian year.
+ * <p>
+ * Each month of the calendar starts when the new moon's crescent is visible
+ * at sunset.  However, in order to keep the time fields in this class
+ * synchronized with those of the other calendars and with local clock time,
+ * we treat days and months as beginning at midnight,
+ * roughly 6 hours after the corresponding sunset.
+ * <p>
+ * There are two main variants of the Islamic calendar in existence.  The first
+ * is the <em>civil</em> calendar, which uses a fixed cycle of alternating 29-
+ * and 30-day months, with a leap day added to the last month of 11 out of
+ * every 30 years.  This calendar is easily calculated and thus predictable in
+ * advance, so it is used as the civil calendar in a number of Arab countries.
+ * This is the default behavior of a newly-created <code>IslamicCalendar</code>
+ * object.
+ * <p>
+ * The Islamic <em>religious</em> calendar, however, is based on the <em>observation</em>
+ * of the crescent moon.  It is thus affected by the position at which the
+ * observations are made, seasonal variations in the time of sunset, the
+ * eccentricities of the moon's orbit, and even the weather at the observation
+ * site.  This makes it impossible to calculate in advance, and it causes the
+ * start of a month in the religious calendar to differ from the civil calendar
+ * by up to three days.
+ * <p>
+ * Using astronomical calculations for the position of the sun and moon, the
+ * moon's illumination, and other factors, it is possible to determine the start
+ * of a lunar month with a fairly high degree of certainty.  However, these
+ * calculations are extremely complicated and thus slow, so most algorithms,
+ * including the one used here, are only approximations of the true astronical
+ * calculations.  At present, the approximations used in this class are fairly
+ * simplistic; they will be improved in later versions of the code.
+ * <p>
+ * The {@link #setCivil setCivil} method determines
+ * which approach is used to determine the start of a month.  By default, the
+ * fixed-cycle civil calendar is used.  However, if <code>setCivil(false)</code>
+ * is called, an approximation of the true lunar calendar will be used.
+ *
+ * @see com.ibm.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+public class IslamicCalendar extends Calendar {
+
+    private static String copyright = "Copyright \u00a9 1997-1998 IBM Corp. All Rights Reserved.";
+
+    //-------------------------------------------------------------------------
+    // Constants...
+    //-------------------------------------------------------------------------
+    
+    /** Constant for Muharram, the 1st month of the Islamic year. */
+    public static final int MUHARRAM = 0;
+
+    /** Constant for Safar, the 2nd month of the Islamic year. */
+    public static final int SAFAR = 1;
+
+    /** Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year. */
+    public static final int RABI_1 = 2;
+
+    /** Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year. */
+    public static final int RABI_2 = 3;
+
+    /** Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year. */
+    public static final int JUMADA_1 = 4;
+
+    /** Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year. */
+    public static final int JUMADA_2 = 5;
+
+    /** Constant for Rajab, the 7th month of the Islamic year. */
+    public static final int RAJAB = 6;
+
+    /** Constant for Sha'ban, the 8th month of the Islamic year. */
+    public static final int SHABAN = 7;
+
+    /** Constant for Ramadan, the 9th month of the Islamic year. */
+    public static final int RAMADAN = 8;
+
+    /** Constant for Shawwal, the 10th month of the Islamic year. */
+    public static final int SHAWWAL = 9;
+
+    /** Constant for Dhu al-Qi'dah, the 11th month of the Islamic year. */
+    public static final int DHU_AL_QIDAH = 10;
+
+    /** Constant for Dhu al-Hijjah, the 12th month of the Islamic year. */
+    public static final int DHU_AL_HIJJAH = 11;
+
+
+    private static final long HIJRA_MILLIS = -42521587200000L;    // 7/16/622 AD 00:00
+
+    //-------------------------------------------------------------------------
+    // Constructors...
+    //-------------------------------------------------------------------------
+
+    /**
+     * Constructs a default <code>IslamicCalendar</code> using the current time
+     * in the default time zone with the default locale.
+     */
+    public IslamicCalendar()
+    {
+        this(TimeZone.getDefault(), Locale.getDefault());
+    }
+
+    /**
+     * Constructs an <code>IslamicCalendar</code> based on the current time
+     * in the given time zone with the default locale.
+     * @param zone the given time zone.
+     */
+    public IslamicCalendar(TimeZone zone)
+    {
+        this(zone, Locale.getDefault());
+    }
+
+    /**
+     * Constructs an <code>IslamicCalendar</code> based on the current time
+     * in the default time zone with the given locale.
+     *
+     * @param aLocale the given locale.
+     */
+    public IslamicCalendar(Locale aLocale)
+    {
+        this(TimeZone.getDefault(), aLocale);
+    }
+
+    /**
+     * Constructs an <code>IslamicCalendar</code> based on the current time
+     * in the given time zone with the given locale.
+     *
+     * @param zone the given time zone.
+     *
+     * @param aLocale the given locale.
+     */
+    public IslamicCalendar(TimeZone zone, Locale aLocale)
+    {
+        super(zone, aLocale);
+        setTimeInMillis(System.currentTimeMillis());
+    }
+
+    /**
+     * Constructs an <code>IslamicCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param date      The date to which the new calendar is set.
+     */
+    public IslamicCalendar(Date date) {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        this.setTime(date);
+    }
+
+    /**
+     * Constructs an <code>IslamicCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param year the value used to set the {@link #YEAR YEAR} time field in the calendar.
+     *
+     * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+     *              Note that the month value is 0-based. e.g., 0 for Muharram.
+     *
+     * @param date the value used to set the {@link #DATE DATE} time field in the calendar.
+     */
+    public IslamicCalendar(int year, int month, int date)
+    {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        this.set(Calendar.YEAR, year);
+        this.set(Calendar.MONTH, month);
+        this.set(Calendar.DATE, date);
+    }
+
+    /**
+     * Constructs an <code>IslamicCalendar</code> with the given date
+     * and time set for the default time zone with the default locale.
+     *
+     * @param year  the value used to set the {@link #YEAR YEAR} time field in the calendar.
+     *
+     * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+     *              Note that the month value is 0-based. e.g., 0 for Muharram.
+     *
+     * @param date  the value used to set the {@link #DATE DATE} time field in the calendar.
+     *
+     * @param hour  the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
+     *              in the calendar.
+     *
+     * @param minute the value used to set the {@link #MINUTE MINUTE} time field
+     *              in the calendar.
+     *
+     * @param second the value used to set the {@link #SECOND SECOND} time field
+     *              in the calendar.
+     */
+    public IslamicCalendar(int year, int month, int date, int hour,
+                             int minute, int second)
+    {
+        super(TimeZone.getDefault(), Locale.getDefault());
+        this.set(Calendar.YEAR, year);
+        this.set(Calendar.MONTH, month);
+        this.set(Calendar.DATE, date);
+        this.set(Calendar.HOUR_OF_DAY, hour);
+        this.set(Calendar.MINUTE, minute);
+        this.set(Calendar.SECOND, second);
+    }
+
+    /**
+     * Determines whether this object uses the fixed-cycle Islamic civil calendar
+     * or an approximation of the religious, astronomical calendar.
+     *
+     * @param beCivil   <code>true</code> to use the civil calendar,
+     *                  <code>false</code> to use the astronomical calendar.
+     */
+    public void setCivil(boolean beCivil)
+    {
+        if (civil != beCivil) {
+            // The fields of the calendar will become invalid, because the calendar
+            // rules are different
+            long m = getTimeInMillis();
+            civil = beCivil;
+            clear();
+            setTimeInMillis(m);
+        }
+    }
+    
+    /**
+     * Returns <code>true</code> if this object is using the fixed-cycle civil
+     * calendar, or <code>false</code> if using the religious, astronomical
+     * calendar.
+     */
+    public boolean isCivil() {
+        return civil;
+    }
+    
+    //-------------------------------------------------------------------------
+    // Minimum / Maximum access functions
+    //-------------------------------------------------------------------------
+
+    private static final int LIMITS[][] = {
+        // Minimum  Greatest    Least  Maximum
+        //           Minimum  Maximum
+        {        0,        0,       0,       0 }, // ERA
+        {        1,        1, 5000000, 5000000 }, // YEAR
+        {        0,        0,      11,      11 }, // MONTH
+        {        1,        1,      51,      52 }, // WEEK_OF_YEAR
+        {        0,        0,       5,       6 }, // WEEK_OF_MONTH
+        {        1,        1,      29,      30 }, // DAY_OF_MONTH
+        {        1,        1,     354,     355 }, // DAY_OF_YEAR
+        {/*                                  */}, // DAY_OF_WEEK
+        {       -1,       -1,       4,       5 }, // DAY_OF_WEEK_IN_MONTH
+        {/*                                  */}, // AM_PM
+        {/*                                  */}, // HOUR
+        {/*                                  */}, // HOUR_OF_DAY
+        {/*                                  */}, // MINUTE
+        {/*                                  */}, // SECOND
+        {/*                                  */}, // MILLISECOND
+        {/*                                  */}, // ZONE_OFFSET
+        {/*                                  */}, // DST_OFFSET
+        { -5000001, -5000001, 5000001, 5000001 }, // YEAR_WOY
+        {/*                                  */}, // DOW_LOCAL
+        { -5000000, -5000000, 5000000, 5000000 }, // EXTENDED_YEAR
+        {/*                                  */}, // JULIAN_DAY
+        {/*                                  */}, // MILLISECONDS_IN_DAY
+    };
+
+    protected int handleGetLimit(int field, int limitType) {
+        return LIMITS[field][limitType];
+    }
+
+    //-------------------------------------------------------------------------
+    // Assorted calculation utilities
+    //
+
+    /**
+     * Find the day of the week for a given day
+     *
+     * @param day   The # of days since the start of the Islamic calendar.
+     */
+    private static final int absoluteDayToDayOfWeek(long day)
+    {
+        // Calculate the day of the week.
+        // This relies on the fact that the epoch was a Thursday.
+        int dayOfWeek = (int)(day + THURSDAY) % 7 + SUNDAY;
+        if (dayOfWeek < 0) {
+            dayOfWeek += 7;
+        }
+        return dayOfWeek;
+    }
+
+    /**
+     * Determine whether a year is a leap year in the Islamic civil calendar
+     */
+    private final static boolean civilLeapYear(int year)
+    {
+        return (14 + 11 * year) % 30 < 11;
+        
+    }
+    
+    /**
+     * Return the day # on which the given year starts.  Days are counted
+     * from the Hijri epoch, origin 0.
+     */
+    private long yearStart(int year) {
+        if (civil) {
+            return (year-1)*354 + (long)Math.floor((3+11*year)/30.0);
+        } else {
+            return trueMonthStart(12*(year-1));
+        }
+    }
+    
+    /**
+     * Return the day # on which the given month starts.  Days are counted
+     * from the Hijri epoch, origin 0.
+     *
+     * @param year  The hijri year
+     * @param year  The hijri month, 0-based
+     */
+    private long monthStart(int year, int month) {
+        if (civil) {
+            return (long)Math.ceil(29.5*month)
+                    + (year-1)*354 + (long)Math.floor((3+11*year)/30.0);
+        } else {
+            return trueMonthStart(12*(year-1) + month);
+        }
+    }
+    
+    /**
+     * Find the day number on which a particular month of the true/lunar
+     * Islamic calendar starts.
+     *
+     * @param month The month in question, origin 0 from the Hijri epoch
+     *
+     * @return The day number on which the given month starts.
+     */
+    private static final long trueMonthStart(long month)
+    {
+        long start = cache.get(month);
+
+        if (start == CalendarCache.EMPTY)
+        {
+            // Make a guess at when the month started, using the average length
+            long origin = HIJRA_MILLIS 
+                        + (long)Math.floor(month * CalendarAstronomer.SYNODIC_MONTH - 1) * ONE_DAY;
+
+            double age = moonAge(origin);
+
+            if (moonAge(origin) >= 0) {
+                // The month has already started
+                do {
+                    origin -= ONE_DAY;
+                    age = moonAge(origin);
+                } while (age >= 0);
+            }
+            else {
+                // Preceding month has not ended yet.
+                do {
+                    origin += ONE_DAY;
+                    age = moonAge(origin);
+                } while (age < 0);
+            }
+
+            start = (origin - HIJRA_MILLIS) / ONE_DAY + 1;
+            
+            cache.put(month, start);
+        }
+        return start;
+    }
+
+    /**
+     * Return the "age" of the moon at the given time; this is the difference
+     * in ecliptic latitude between the moon and the sun.  This method simply
+     * calls CalendarAstronomer.moonAge, converts to degrees, 
+     * and adjusts the resultto be in the range [-180, 180].
+     *
+     * @param time  The time at which the moon's age is desired,
+     *              in millis since 1/1/1970.
+     */
+    static final double moonAge(long time)
+    {
+        double age = 0;
+        
+        synchronized(astro) {
+            astro.setTime(time);
+            age = astro.getMoonAge();
+        }
+        // Convert to degrees and normalize...
+        age = age * 180 / Math.PI;
+        if (age > 180) {
+            age = age - 360;
+        }
+
+        return age;
+    }
+
+    //-------------------------------------------------------------------------
+    // Internal data....
+    //
+    
+    // And an Astronomer object for the moon age calculations
+    private static CalendarAstronomer astro = new CalendarAstronomer();
+    
+    private static CalendarCache cache = new CalendarCache();
+    
+    /**
+     * <code>true</code> if this object uses the fixed-cycle Islamic civil calendar,
+     * and <code>false</code> if it approximates the true religious calendar using
+     * astronomical calculations for the time of the new moon.
+     *
+     * @serial
+     */
+    private boolean civil = true;
+
+    //----------------------------------------------------------------------
+    // Calendar framework
+    //----------------------------------------------------------------------
+
+    /**
+     * Return the length (in days) of the given month.
+     *
+     * @param year  The hijri year
+     * @param year  The hijri month, 0-based
+     */
+    protected int handleGetMonthLength(int extendedYear, int month) {
+
+        int length = 0;
+        
+        if (civil) {
+            length = 29 + (month+1) % 2;
+            if (month == DHU_AL_HIJJAH && civilLeapYear(extendedYear)) {
+                length++;
+            }
+        } else {
+            month = 12*(extendedYear-1) + month;
+            length = (int)( trueMonthStart(month+1) - trueMonthStart(month) );
+        }
+        return length;
+    }
+
+    /**
+     * Return the number of days in the given Islamic year
+     */
+    protected int handleGetYearLength(int extendedYear) {
+        if (civil) {
+            return 354 + (civilLeapYear(extendedYear) ? 1 : 0);
+        } else {
+            int month = 12*(extendedYear-1);
+            return (int)(trueMonthStart(month + 12) - trueMonthStart(month));
+        }
+    }
+    
+    //-------------------------------------------------------------------------
+    // Functions for converting from field values to milliseconds....
+    //-------------------------------------------------------------------------
+
+    // Return JD of start of given month/year
+    protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) {
+        return (int) monthStart(eyear, month) + 1948439;
+    }    
+
+    //-------------------------------------------------------------------------
+    // Functions for converting from milliseconds to field values
+    //-------------------------------------------------------------------------
+
+    protected int handleGetExtendedYear() {
+        int year;
+        if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR) {
+            year = internalGet(EXTENDED_YEAR, 1); // Default to year 1
+        } else {
+            year = internalGet(YEAR, 1); // Default to year 1
+        }
+        return year;
+    }
+
+    /**
+     * Override Calendar to compute several fields specific to the Islamic
+     * calendar system.  These are:
+     *
+     * <ul><li>ERA
+     * <li>YEAR
+     * <li>MONTH
+     * <li>DAY_OF_MONTH
+     * <li>DAY_OF_YEAR
+     * <li>EXTENDED_YEAR</ul>
+     * 
+     * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
+     * method is called. The getGregorianXxx() methods return Gregorian
+     * calendar equivalents for the given Julian day.
+     */
+    protected void handleComputeFields(int julianDay) {
+        int year, month, dayOfMonth, dayOfYear;
+        long monthStart;
+        long days = julianDay - 1948440;
+
+        if (civil) {
+            // Use the civil calendar approximation, which is just arithmetic
+            year  = (int)Math.floor( (30 * days + 10646) / 10631.0 );
+            month = (int)Math.ceil((days - 29 - yearStart(year)) / 29.5 );
+            month = Math.min(month, 11);
+            monthStart = monthStart(year, month);
+        } else {
+            // Guess at the number of elapsed full months since the epoch
+            int months = (int)Math.floor(days / CalendarAstronomer.SYNODIC_MONTH);
+
+            monthStart = (long)Math.floor(months * CalendarAstronomer.SYNODIC_MONTH - 1);
+
+            if ( days - monthStart >= 28 && moonAge(internalGetTimeInMillis()) > 0) {
+                // If we're near the end of the month, assume next month and search backwards
+                months++;
+            }
+
+            // Find out the last time that the new moon was actually visible at this longitude
+            // This returns midnight the night that the moon was visible at sunset.
+            while ((monthStart = trueMonthStart(months)) > days) {
+                // If it was after the date in question, back up a month and try again
+                months--;
+            }
+
+            year = months / 12 + 1;
+            month = months % 12;
+        }
+
+        dayOfMonth = (int)(days - monthStart(year, month)) + 1;
+
+        // Now figure out the day of the year.
+        dayOfYear = (int)(days - monthStart(year, 0) + 1);
+
+        internalSet(ERA, 0);
+        internalSet(YEAR, year);
+        internalSet(EXTENDED_YEAR, year);
+        internalSet(MONTH, month);
+        internalSet(DAY_OF_MONTH, dayOfMonth);
+        internalSet(DAY_OF_YEAR, dayOfYear);       
+    }    
+}
diff --git a/src/com/ibm/util/JapaneseCalendar.java b/src/com/ibm/util/JapaneseCalendar.java
new file mode 100755
index 0000000..a4efc98
--- /dev/null
+++ b/src/com/ibm/util/JapaneseCalendar.java
@@ -0,0 +1,538 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/JapaneseCalendar.java,v $ 
+ * $Date: 2000/11/30 21:29:49 $ 
+ * $Revision: 1.7 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * <code>JapaneseCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years and eras based on the reigns of the Japanese emperors.
+ * The Japanese calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  The ascension of each  emperor to the throne
+ * begins a new era, and the years of that era are numbered starting with the
+ * year of ascension as year 1.
+ * <p>
+ * Note that in the year of an imperial ascension, there are two possible sets
+ * of year and era values: that for the old era and for the new.  For example, a
+ * new era began on January 7, 1989 AD.  Strictly speaking, the first six days
+ * of that year were in the Showa era, e.g. "January 6, 64 Showa", while the rest
+ * of the year was in the Heisei era, e.g. "January 7, 1 Heisei".  This class
+ * handles this distinction correctly when computing dates.  However, in lenient
+ * mode either form of date is acceptable as input. 
+ * <p>
+ * In modern times, eras have started on January 8, 1868 AD, Gregorian (Meiji),
+ * July 30, 1912 (Taisho), December 25, 1926 (Showa), and January 7, 1989 (Heisei).  Constants
+ * for these eras, suitable for use in the <code>ERA</code> field, are provided
+ * in this class.  Note that the <em>number</em> used for each era is more or
+ * less arbitrary.  Currently, the era starting in 1053 AD is era #0; however this
+ * may change in the future as we add more historical data.  Use the predefined
+ * constants rather than using actual, absolute numbers.
+ * <p>
+ *
+ * @see com.ibm.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+public class JapaneseCalendar extends GregorianCalendar {
+    
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    //-------------------------------------------------------------------------
+    // Constructors...
+    //-------------------------------------------------------------------------
+
+    /**
+     * Constructs a default <code>JapaneseCalendar</code> using the current time
+     * in the default time zone with the default locale.
+     */
+    public JapaneseCalendar() {
+        super();
+    }
+
+    /**
+     * Constructs a <code>JapaneseCalendar</code> based on the current time
+     * in the given time zone with the default locale.
+     * @param zone the given time zone.
+     */
+    public JapaneseCalendar(TimeZone zone) {
+        super(zone);
+    }
+
+    /**
+     * Constructs a <code>JapaneseCalendar</code> based on the current time
+     * in the default time zone with the given locale.
+     * @param aLocale the given locale.
+     */
+    public JapaneseCalendar(Locale aLocale) {
+        super(aLocale);
+    }
+
+    /**
+     * Constructs a <code>JapaneseCalendar</code> based on the current time
+     * in the given time zone with the given locale.
+     *
+     * @param zone the given time zone.
+     *
+     * @param aLocale the given locale.
+     */
+    public JapaneseCalendar(TimeZone zone, Locale aLocale) {
+        super(zone, aLocale);
+    }
+
+    /**
+     * Constructs a <code>JapaneseCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param date      The date to which the new calendar is set.
+     */
+    public JapaneseCalendar(Date date) {
+        this();
+        setTime(date);
+    }
+
+    /**
+     * Constructs a <code>JapaneseCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param era       The imperial era used to set the calendar's {@link #ERA ERA} field.
+     *                  Eras are numbered starting with the Tenki era, which
+     *                  began in 1053 AD Gregorian, as era zero.  Recent
+     *                  eras can be specified using the constants
+     *                  {@link #MEIJI} (which started in 1868 AD),
+     *                  {@link #TAISHO} (1912 AD),
+     *                  {@link #SHOWA} (1926 AD), and
+     *                  {@link #HEISEI} (1989 AD).
+     *
+     * @param year      The value used to set the calendar's {@link #YEAR YEAR} field,
+     *                  in terms of the era.
+     *
+     * @param month     The value used to set the calendar's {@link #MONTH MONTH} field.
+     *                  The value is 0-based. e.g., 0 for January.
+     *
+     * @param date      The value used to set the calendar's DATE field.
+     */
+    public JapaneseCalendar(int era, int year, int month, int date) {
+        super(year, month, date);
+        set(ERA, era);
+    }
+
+    /**
+     * Constructs a <code>JapaneseCalendar</code> with the given date set
+     * in the default time zone with the default locale.
+     *
+     * @param year      The value used to set the calendar's {@link #YEAR YEAR} field,
+     *                  in the era Heisei, the most current at the time this
+     *                  class was last updated.
+     *
+     * @param month     The value used to set the calendar's {@link #MONTH MONTH} field.
+     *                  The value is 0-based. e.g., 0 for January.
+     *
+     * @param date      The value used to set the calendar's {@link #DATE DATE} field.
+     */
+    public JapaneseCalendar(int year, int month, int date) {
+        super(year, month, date);
+        set(ERA, CURRENT_ERA);
+    }
+
+    /**
+     * Constructs a <code>JapaneseCalendar</code> with the given date
+     * and time set for the default time zone with the default locale.
+     *
+     * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field,
+     *                  in the era Heisei, the most current at the time of this
+     *                  writing.
+     *
+     * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+     *                  The value is 0-based. e.g., 0 for January.
+     *
+     * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+     *
+     * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+     *
+     * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+     *
+     * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+     */
+    public JapaneseCalendar(int year, int month, int date, int hour,
+                             int minute, int second)
+    {
+        super(year, month, date, hour, minute, second);
+        set(ERA, CURRENT_ERA);
+    }
+
+    //-------------------------------------------------------------------------
+
+    protected int handleGetExtendedYear() {
+        int year;
+        // TODO reimplement this to be faster?
+        if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR &&
+            newerField(EXTENDED_YEAR, ERA) == EXTENDED_YEAR) {
+            year = internalGet(EXTENDED_YEAR, 1);
+        } else {
+            // Subtract one because year starts at 1
+            year = internalGet(YEAR) + ERAS[internalGet(ERA) * 3] - 1;
+        }
+        return year;
+    }
+
+    protected void handleComputeFields(int julianDay) {
+        super.handleComputeFields(julianDay);
+        int year = internalGet(EXTENDED_YEAR);
+
+        int low = 0;
+
+        // Short circuit for recent years.  Most modern computations will
+        // occur in the current era and won't require the binary search.
+        // Note that if the year is == the current era year, then we use
+        // the binary search to handle the month/dom comparison.
+        if (year > ERAS[ERAS.length - 3]) {
+            low = CURRENT_ERA;
+        } else {
+            // Binary search
+            int high = ERAS.length / 3;
+        
+            while (low < high - 1) {
+                int i = (low + high) / 2;
+                int diff = year - ERAS[i*3];
+
+                // If years are the same, then compare the months, and if those
+                // are the same, compare days of month.  In the ERAS array
+                // months are 1-based for easier maintenance.
+                if (diff == 0) {
+                    diff = internalGet(MONTH) - (ERAS[i*3 + 1] - 1);
+                    if (diff == 0) {
+                        diff = internalGet(DAY_OF_MONTH) - ERAS[i*3 + 2];
+                    }
+                }
+                if (diff >= 0) {
+                    low = i;
+                } else {
+                    high = i;
+                }
+            }
+        }
+
+        // Now we've found the last era that starts before this date, so
+        // adjust the year to count from the start of that era.  Note that
+        // all dates before the first era will fall into the first era by
+        // the algorithm.
+        internalSet(ERA, low);
+        internalSet(YEAR, year - ERAS[low*3] + 1);
+    }
+
+    private static final int[] ERAS = {
+    //  Gregorian date of each emperor's ascension
+    //  Years are AD, months are 1-based.
+    //  Year  Month Day
+         645,    6, 19,     // Taika
+         650,    2, 15,     // Hakuchi
+         672,    1,  1,     // Hakuho
+         686,    7, 20,     // Shucho
+         701,    3, 21,     // Taiho
+         704,    5, 10,     // Keiun
+         708,    1, 11,     // Wado
+         715,    9,  2,     // Reiki
+         717,   11, 17,     // Yoro
+         724,    2,  4,     // Jinki
+         729,    8,  5,     // Tempyo
+         749,    4, 14,     // Tempyo-kampo
+         749,    7,  2,     // Tempyo-shoho
+         757,    8, 18,     // Tempyo-hoji
+         765,    1,  7,     // Tempho-jingo
+         767,    8, 16,     // Jingo-keiun
+         770,   10,  1,     // Hoki
+         781,    1,  1,     // Ten-o
+         782,    8, 19,     // Enryaku
+         806,    5, 18,     // Daido
+         810,    9, 19,     // Konin
+         824,    1,  5,     // Tencho
+         834,    1,  3,     // Showa
+         848,    6, 13,     // Kajo
+         851,    4, 28,     // Ninju
+         854,   11, 30,     // Saiko
+         857,    2, 21,     // Tennan
+         859,    4, 15,     // Jogan
+         877,    4, 16,     // Genkei
+         885,    2, 21,     // Ninna
+         889,    4, 27,     // Kampyo
+         898,    4, 26,     // Shotai
+         901,    7, 15,     // Engi
+         923,    4, 11,     // Encho
+         931,    4, 26,     // Shohei
+         938,    5, 22,     // Tengyo
+         947,    4, 22,     // Tenryaku
+         957,   10, 27,     // Tentoku
+         961,    2, 16,     // Owa
+         964,    7, 10,     // Koho
+         968,    8, 13,     // Anna
+         970,    3, 25,     // Tenroku
+         973,   12, 20,     // Ten-en
+         976,    7, 13,     // Jogen
+         978,   11, 29,     // Tengen
+         983,    4, 15,     // Eikan
+         985,    4, 27,     // Kanna
+         987,    4,  5,     // Ei-en
+         989,    8,  8,     // Eiso
+         990,   11,  7,     // Shoryaku
+         995,    2, 22,     // Chotoku
+         999,    1, 13,     // Choho
+        1004,    7, 20,     // Kanko
+        1012,   12, 25,     // Chowa
+        1017,    4, 23,     // Kannin
+        1021,    2,  2,     // Jian
+        1024,    7, 13,     // Manju
+        1028,    7, 25,     // Chogen
+        1037,    4, 21,     // Choryaku
+        1040,   11, 10,     // Chokyu
+        1044,   11, 24,     // Kantoku
+        1046,    4, 14,     // Eisho
+        1053,    1, 11,     // Tengi
+        1058,    8, 29,     // Kohei
+        1065,    8,  2,     // Jiryaku
+        1069,    4, 13,     // Enkyu
+        1074,    8, 23,     // Shoho
+        1077,   11, 17,     // Shoryaku
+        1081,    2, 10,     // Eiho
+        1084,    2,  7,     // Otoku
+        1087,    4,  7,     // Kanji
+        1094,   12, 15,     // Kaho
+        1096,   12, 17,     // Eicho
+        1097,   11, 21,     // Shotoku
+        1099,    8, 28,     // Kowa
+        1104,    2, 10,     // Choji
+        1106,    4,  9,     // Kasho
+        1108,    8,  3,     // Tennin
+        1110,    7, 13,     // Ten-ei
+        1113,    7, 13,     // Eikyu
+        1118,    4,  3,     // Gen-ei
+        1120,    4, 10,     // Hoan
+        1124,    4,  3,     // Tenji
+        1126,    1, 22,     // Daiji
+        1131,    1, 29,     // Tensho
+        1132,    8, 11,     // Chosho
+        1135,    4, 27,     // Hoen
+        1141,    7, 10,     // Eiji
+        1142,    4, 28,     // Koji
+        1144,    2, 23,     // Tenyo
+        1145,    7, 22,     // Kyuan
+        1151,    1, 26,     // Ninpei
+        1154,   10, 28,     // Kyuju
+        1156,    4, 27,     // Hogen
+        1159,    4, 20,     // Heiji
+        1160,    1, 10,     // Eiryaku
+        1161,    9,  4,     // Oho
+        1163,    3, 29,     // Chokan
+        1165,    6,  5,     // Eiman
+        1166,    8, 27,     // Nin-an
+        1169,    4,  8,     // Kao
+        1171,    4, 21,     // Shoan
+        1175,    7, 28,     // Angen
+        1177,    8,  4,     // Jisho
+        1181,    7, 14,     // Yowa
+        1182,    5, 27,     // Juei
+        1184,    4, 16,     // Genryuku
+        1185,    8, 14,     // Bunji
+        1190,    4, 11,     // Kenkyu
+        1199,    4, 27,     // Shoji
+        1201,    2, 13,     // Kennin
+        1204,    2, 20,     // Genkyu
+        1206,    4, 27,     // Ken-ei
+        1207,   10, 25,     // Shogen
+        1211,    3,  9,     // Kenryaku
+        1213,   12,  6,     // Kenpo
+        1219,    4, 12,     // Shokyu
+        1222,    4, 13,     // Joo
+        1224,   11, 20,     // Gennin
+        1225,    4, 20,     // Karoku
+        1227,   12, 10,     // Antei
+        1229,    3,  5,     // Kanki
+        1232,    4,  2,     // Joei
+        1233,    4, 15,     // Tempuku
+        1234,   11,  5,     // Bunryaku
+        1235,    9, 19,     // Katei
+        1238,   11, 23,     // Ryakunin
+        1239,    2,  7,     // En-o
+        1240,    7, 16,     // Ninji
+        1243,    2, 26,     // Kangen
+        1247,    2, 28,     // Hoji
+        1249,    3, 18,     // Kencho
+        1256,   10,  5,     // Kogen
+        1257,    3, 14,     // Shoka
+        1259,    3, 26,     // Shogen
+        1260,    4, 13,     // Bun-o
+        1261,    2, 20,     // Kocho
+        1264,    2, 28,     // Bun-ei
+        1275,    4, 25,     // Kenji
+        1278,    2, 29,     // Koan
+        1288,    4, 28,     // Shoo
+        1293,    8, 55,     // Einin
+        1299,    4, 25,     // Shoan
+        1302,   11, 21,     // Kengen
+        1303,    8,  5,     // Kagen
+        1306,   12, 14,     // Tokuji
+        1308,   10,  9,     // Enkei
+        1311,    4, 28,     // Ocho
+        1312,    3, 20,     // Showa
+        1317,    2,  3,     // Bunpo
+        1319,    4, 28,     // Geno
+        1321,    2, 23,     // Genkyo
+        1324,   12,  9,     // Shochu
+        1326,    4, 26,     // Kareki
+        1329,    8, 29,     // Gentoku
+        1331,    8,  9,     // Genko
+        1334,    1, 29,     // Kemmu
+        1336,    2, 29,     // Engen
+        1340,    4, 28,     // Kokoku
+        1346,   12,  8,     // Shohei
+        1370,    7, 24,     // Kentoku
+        1372,    4,  1,     // Bunch\u0169
+        1375,    5, 27,     // Tenju
+        1381,    2, 10,     // Kowa
+        1384,    4, 28,     // Gench\u0169
+        1384,    2, 27,     // Meitoku
+        1379,    3, 22,     // Koryaku
+        1387,    8, 23,     // Kakei
+        1389,    2,  9,     // Koo
+        1390,    3, 26,     // Meitoku
+        1394,    7,  5,     // Oei
+        1428,    4, 27,     // Shocho
+        1429,    9,  5,     // Eikyo
+        1441,    2, 17,     // Kakitsu
+        1444,    2,  5,     // Bun-an
+        1449,    7, 28,     // Hotoku
+        1452,    7, 25,     // Kyotoku
+        1455,    7, 25,     // Kosho
+        1457,    9, 28,     // Choroku
+        1460,   12, 21,     // Kansho
+        1466,    2, 28,     // Bunsho
+        1467,    3,  3,     // Onin
+        1469,    4, 28,     // Bunmei
+        1487,    7, 29,     // Chokyo
+        1489,    8, 21,     // Entoku
+        1492,    7, 19,     // Meio
+        1501,    2, 29,     // Bunki
+        1504,    2, 30,     // Eisho
+        1521,    8, 23,     // Taiei
+        1528,    8, 20,     // Kyoroku
+        1532,    7, 29,     // Tenmon
+        1555,   10, 23,     // Koji
+        1558,    2, 28,     // Eiroku
+        1570,    4, 23,     // Genki
+        1573,    7, 28,     // Tensho
+        1592,   12,  8,     // Bunroku
+        1596,   10, 27,     // Keicho
+        1615,    7, 13,     // Genwa
+        1624,    2, 30,     // Kan-ei
+        1644,   12, 16,     // Shoho
+        1648,    2, 15,     // Keian
+        1652,    9, 18,     // Shoo
+        1655,    4, 13,     // Meiryaku
+        1658,    7, 23,     // Manji
+        1661,    4, 25,     // Kanbun
+        1673,    9, 21,     // Enpo
+        1681,    9, 29,     // Tenwa
+        1684,    2, 21,     // Jokyo
+        1688,    9, 30,     // Genroku
+        1704,    3, 13,     // Hoei
+        1711,    4, 25,     // Shotoku
+        1716,    6, 22,     // Kyoho
+        1736,    4, 28,     // Genbun
+        1741,    2, 27,     // Kanpo
+        1744,    2, 21,     // Enkyo
+        1748,    7, 12,     // Kan-en
+        1751,   10, 27,     // Horyaku
+        1764,    6,  2,     // Meiwa
+        1772,   11, 16,     // An-ei
+        1781,    4,  2,     // Tenmei
+        1789,    1, 25,     // Kansei
+        1801,    2,  5,     // Kyowa
+        1804,    2, 11,     // Bunka
+        1818,    4, 22,     // Bunsei
+        1830,   12, 10,     // Tenpo
+        1844,   12,  2,     // Koka
+        1848,    2, 28,     // Kaei
+        1854,   11, 27,     // Ansei
+        1860,    3, 18,     // Man-en
+        1861,    2, 19,     // Bunkyu
+        1864,    2, 20,     // Genji
+        1865,    4,  7,     // Keio
+        1868,    9,  8,     // Meiji
+        1912,    7, 30,     // Taisho
+        1926,   12, 25,     // Showa
+        1989,    1,  8,     // Heisei
+    };
+
+    //-------------------------------------------------------------------------
+    // Public constants for some of the recent eras that folks might use...
+    //-------------------------------------------------------------------------
+
+    // Constant for the current era.  This must be regularly updated.
+    static public final int CURRENT_ERA = (ERAS.length / 3) - 1;
+    
+    /** Constant for the era starting on Sept. 8, 1868 AD */
+    static public final int MEIJI = CURRENT_ERA - 3;
+
+    /** Constant for the era starting on July 30, 1912 AD */
+    static public final int TAISHO = CURRENT_ERA - 2;
+    
+    /** Constant for the era starting on Dec. 25, 1926 AD */
+    static public final int SHOWA = CURRENT_ERA - 1;
+
+    /** Constant for the era starting on Jan. 7, 1989 AD */
+    static public final int HEISEI = CURRENT_ERA;
+
+    /**
+     * Partial limits table for limits that differ from GregorianCalendar's.
+     * The YEAR max limits are filled in the first time they are needed.
+     */
+    private static int LIMITS[][] = {
+        // Minimum  Greatest        Least      Maximum
+        //           Minimum      Maximum
+        {        0,        0, CURRENT_ERA, CURRENT_ERA }, // ERA
+        {        1,        1,           0,           0 }, // YEAR
+    };
+
+    private static boolean YEAR_LIMIT_KNOWN = false;
+
+    /**
+     * Override GregorianCalendar.  We should really handle YEAR_WOY and
+     * EXTENDED_YEAR here too to implement the 1..5000000 range, but it's
+     * not critical.
+     */
+    protected int handleGetLimit(int field, int limitType) {
+        switch (field) {
+        case ERA:
+            return LIMITS[field][limitType];
+        case YEAR:
+            if (!YEAR_LIMIT_KNOWN) {
+                int min = ERAS[3] - ERAS[0];
+                int max = min;
+                for (int i=6; i<ERAS.length; i+=3) {
+                    int d = ERAS[i] - ERAS[i-3];
+                    if (d < min) {
+                        min = d;
+                    } else if (d > max) {
+                        max = d;
+                    }
+                }
+                LIMITS[field][LEAST_MAXIMUM] = min;
+                LIMITS[field][MAXIMUM] = max;
+            }
+            return LIMITS[field][limitType];
+        default:
+            return super.handleGetLimit(field, limitType);
+        }
+    }
+}
diff --git a/src/com/ibm/util/RangeDateRule.java b/src/com/ibm/util/RangeDateRule.java
new file mode 100755
index 0000000..c226d9d
--- /dev/null
+++ b/src/com/ibm/util/RangeDateRule.java
@@ -0,0 +1,141 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/RangeDateRule.java,v $ 
+ * $Date: 2000/03/10 04:17:59 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.Vector;
+
+public class RangeDateRule implements DateRule
+{
+    public RangeDateRule()
+    {
+    }
+
+    public RangeDateRule(Range[] ranges)
+    {
+        for (int i = 0; i < ranges.length; i++) {
+            this.ranges.addElement(ranges[i]);
+        }
+    }
+
+    public void add(DateRule rule)
+    {
+        add(new Date(Long.MIN_VALUE), rule);
+    }
+
+    public void add(Date start, DateRule rule)
+    {
+        // TODO: Insert in the right place
+        // System.out.println("Add: " + start.toString());
+        ranges.addElement(new Range(start, rule));
+    }
+
+    //-----------------------------------------------------------------------
+
+    public Date firstAfter(Date start)
+    {
+        // Find the range that I should look at
+        int index = startIndex(start);
+        Date result = null;
+
+        Range r = rangeAt(index);
+        Range e = rangeAt(index+1);
+
+        if (r != null && r.rule != null)
+        {
+            if (e != null) {
+                result = r.rule.firstBetween(start, e.start);
+            } else {
+                result = r.rule.firstAfter(start);
+            }
+        }
+        return result;
+    }
+
+    public Date firstBetween(Date start, Date end)
+    {
+        // Find the range that I should look at
+        int index = startIndex(start);
+        Date result = null;
+
+        Range next = rangeAt(index);
+
+        while (result == null && next != null && ! next.start.after(end))
+        {
+            Range r = next;
+            next = rangeAt(index+1);
+
+            if (r.rule != null) {
+                Date e = (next != null && next.start.before(end)) ? next.start
+                                                                  : end;
+                result = r.rule.firstBetween(start, e);
+            }
+        }
+        return result;
+    }
+
+    public boolean isOn(Date date)
+    {
+        return false;
+    }
+
+    /**
+     * Check whether this event occurs at least once between the two
+     * dates given.
+     */
+    public boolean isBetween(Date start, Date end)
+    {
+        return firstBetween(start,end) == null;
+    }
+
+    /*
+     * find the index of the last range whose start date is before "start"
+     * returns an index >= ranges.size() if there is none
+     */
+    private int startIndex(Date start)
+    {
+        int lastIndex = ranges.size();
+
+        for (int i = 0; i < ranges.size(); i++) {
+            Range r = (Range) ranges.elementAt(i);
+            if (start.before(r.start)) {
+                break;
+            }
+            lastIndex = i;
+        }
+        return lastIndex;
+    }
+
+    private Range rangeAt(int index)
+    {
+       return (index < ranges.size()) ? (Range) ranges.elementAt(index)
+                                      : null;
+    }
+
+    Vector ranges = new Vector(2,2);
+};
+
+//-----------------------------------------------------------------------
+// Privates
+//
+
+class Range {
+    public Range(Date start, DateRule rule) {
+        this.start = start;
+        this.rule = rule;
+    }
+    public Date     start;
+    public DateRule rule;
+}
+
diff --git a/src/com/ibm/util/SimpleDateRule.java b/src/com/ibm/util/SimpleDateRule.java
new file mode 100755
index 0000000..c1c47dc
--- /dev/null
+++ b/src/com/ibm/util/SimpleDateRule.java
@@ -0,0 +1,228 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/SimpleDateRule.java,v $ 
+ * $Date: 2000/05/12 23:20:11 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import com.ibm.util.Calendar;
+import com.ibm.util.GregorianCalendar;
+import com.ibm.util.SimpleTimeZone;
+
+public class SimpleDateRule implements DateRule
+{
+    /**
+     * Construct a rule for a fixed date within a month
+     *
+     * @param month         The month in which this rule occurs (0-based).
+     * @param dayOfMonth    The date in that month (1-based).
+     * </ul>
+     */
+    public SimpleDateRule(int month, int dayOfMonth)
+    {
+        this.month      = month;
+        this.dayOfMonth = dayOfMonth;
+        this.dayOfWeek  = 0;
+    }
+
+    /**
+     * Construct a rule for a weekday within a month, e.g. the first Monday
+     *
+     * @param month         The month in which this rule occurs (0-based).
+     * @param dayOfMonth    A date within that month (1-based).
+     * @param dayOfWeek     The day of the week on which this rule occurs.
+     * @param after         If true, this rule selects the first dayOfWeek
+     *                      on or after dayOfMonth.  If false, the rule selects
+     *                      the first dayOfWeek on or before dayOfMonth.
+     * </ul>
+     */
+    public SimpleDateRule(int month, int dayOfMonth, int dayOfWeek, boolean after)
+    {
+        this.month      = month;
+        this.dayOfMonth = dayOfMonth;
+        this.dayOfWeek  = after ? dayOfWeek : -dayOfWeek;
+    }
+
+    /**
+     * Return the first occurrance of the event represented by this rule
+     * that is on or after the given start date.
+     *
+     * @param start Only occurrances on or after this date are returned.
+     *
+     * @return      The date on which this event occurs, or null if it
+     *              does not occur on or after the start date.
+     *
+     * @see #firstBetween
+     */
+    public Date firstAfter(Date start)
+    {
+        if (startDate != null && start.before(startDate)) {
+            start = startDate;
+        }
+        return doFirstBetween(start, endDate);
+    }
+
+    /**
+     * Return the first occurrance of the event represented by this rule
+     * that is on or after the given start date and before the given
+     * end date.
+     *
+     * @param start Only occurrances on or after this date are returned.
+     * @param end   Only occurrances before this date are returned.
+     *
+     * @return      The date on which this event occurs, or null if it
+     *              does not occur between the start and end dates.
+     *
+     * @see #firstAfter
+     */
+    public Date firstBetween(Date start, Date end)
+    {
+        // Pin to the min/max dates for this rule
+        if (startDate != null && start.before(startDate)) {
+            start = startDate;
+        }
+        if (endDate != null && end.after(endDate)) {
+            end = endDate;
+        }
+        return doFirstBetween(start, end);
+    }
+
+    /**
+     * Checks whether this event occurs on the given date.  This does
+     * <em>not</em> take time of day into account; instead it checks
+     * whether this event and the given date are on the same day.
+     * This is useful for applications such as determining whether a given
+     * day is a holiday.
+     *
+     * @param date  The date to check.
+     * @return      true if this event occurs on the given date.
+     *
+     */
+    public boolean isOn(Date date)
+    {
+        if (startDate != null && date.before(startDate)) {
+            return false;
+        }
+        if (endDate != null && date.after(endDate)) {
+            return false;
+        }
+
+        Calendar c = calendar;
+
+        synchronized(c) {
+            c.setTime(date);
+
+            int dayOfYear = c.get(Calendar.DAY_OF_YEAR);
+
+            c.setTime(computeInYear(c.get(Calendar.YEAR), c));
+
+            //System.out.println("  isOn: dayOfYear = " + dayOfYear);
+            //System.out.println("        holiday   = " + c.get(Calendar.DAY_OF_YEAR));
+
+            return c.get(Calendar.DAY_OF_YEAR) == dayOfYear;
+        }
+    }
+
+    /**
+     * Check whether this event occurs at least once between the two
+     * dates given.
+     */
+    public boolean isBetween(Date start, Date end)
+    {
+        return firstBetween(start, end) != null; // TODO: optimize?
+    }
+
+    private Date doFirstBetween(Date start, Date end)
+    {
+        Calendar c = calendar;
+
+        synchronized(c) {
+            c.setTime(start);
+
+            int year = c.get(Calendar.YEAR);
+            int month = c.get(Calendar.MONTH);
+
+            // If the rule is earlier in the year than the start date
+            // we have to go to the next year.
+            if (month > this.month) {
+                year++;
+            }
+
+            // Figure out when the rule lands in the given year
+            Date result = computeInYear(year, c);
+
+            // If the rule is in the same month as the start date, it's possible
+            // to get a result that's before the start.  If so, go to next year.
+            if (month == this.month && result.before(start)) {
+                result = computeInYear(year+1, c);
+            }
+
+            if (end != null && result.after(end)) {
+                return null;
+            }
+            return result;
+        }
+    }
+    private Date computeInYear(int year, Calendar c)
+    {
+        if (c == null) c = calendar;
+
+        synchronized(c) {
+            c.clear();
+            c.set(Calendar.ERA, c.getMaximum(Calendar.ERA));
+            c.set(Calendar.YEAR, year);
+            c.set(Calendar.MONTH, month);
+            c.set(Calendar.DATE, dayOfMonth);
+
+            //System.out.println("     computeInYear: start at " + c.getTime().toString());
+
+            if (dayOfWeek != 0) {
+                c.setTime(c.getTime());        // JDK 1.1.2 workaround
+                int weekday = c.get(Calendar.DAY_OF_WEEK);
+
+                //System.out.println("                    weekday = " + weekday);
+                //System.out.println("                    dayOfYear = " + c.get(Calendar.DAY_OF_YEAR));
+
+                int delta = 0;
+                if (dayOfWeek > 0) {
+                    // We want the first occurrance of the given day of the week
+                    // on or after the specified date in the month.
+                    delta = (dayOfWeek - weekday + 7) % 7;
+                }
+                else if (dayOfWeek < 0) {
+                    // We want the first occurrance of the (-dayOfWeek)
+                    // on or before the specified date in the month.
+                    delta = -((dayOfWeek + weekday + 7) % 7);
+                }
+                //System.out.println("                    adding " + delta + " days");
+                c.add(Calendar.DATE, delta);
+            }
+
+            return c.getTime();
+        }
+    }
+
+    public void setCalendar(Calendar c) {
+        calendar = c;
+    }
+
+    static GregorianCalendar gCalendar = new GregorianCalendar(new SimpleTimeZone(0, "UTC"));
+
+    Calendar calendar = gCalendar;
+
+    private int     month;
+    private int     dayOfMonth;
+    private int     dayOfWeek;
+
+    private Date    startDate = null;
+    private Date    endDate = null;
+};
diff --git a/src/com/ibm/util/SimpleHoliday.java b/src/com/ibm/util/SimpleHoliday.java
new file mode 100755
index 0000000..bfc0f22
--- /dev/null
+++ b/src/com/ibm/util/SimpleHoliday.java
@@ -0,0 +1,239 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/SimpleHoliday.java,v $ 
+ * $Date: 2000/03/21 02:19:33 $ 
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import com.ibm.util.Calendar;
+import com.ibm.util.GregorianCalendar;
+
+/**
+ * A holiday whose date can be represented by a SimpleDateRule object
+ *
+ * @see SimpleDateRule
+ */
+public class SimpleHoliday extends Holiday {
+    /**
+     * Construct an object representing a holiday
+     *
+     * @param month         The month in which this holiday occurs (0-based)
+     * @param dayOfMonth    The date within the month (1-based).
+     *
+     * @param name  The name of this holiday.  This string is used as a key
+     *              to look up the holiday's name a resource bundle.
+     *              If the name is not found in the resource bundle,
+     *              getDisplayName will return this string instead.
+     *
+     * @see SimpleDateRule
+     * @see Holiday#getDisplayName(java.util.Locale)
+     *
+     */
+    public SimpleHoliday(int month, int dayOfMonth, String name)
+    {
+        super(name, new SimpleDateRule(month, dayOfMonth));
+    }
+
+    /**
+     * Construct an object representing a holiday
+     *
+     * @param month         The month in which this holiday occurs (0-based)
+     * @param dayOfMonth    The date within the month (1-based).
+     *
+     * @param name  The name of this holiday.  This string is used as a key
+     *              to look up the holiday's name a resource bundle.
+     *              If the name is not found in the resource bundle,
+     *              getDisplayName will return this string instead.
+     *
+     * @see SimpleDateRule
+     * @see Holiday#getDisplayName(java.util.Locale)
+     *
+     */
+    public SimpleHoliday(int month, int dayOfMonth, String name,
+                            int startYear)
+    {
+        super(name, null);
+
+        setRange(startYear, 0, new SimpleDateRule(month, dayOfMonth) );
+    }
+
+    /**
+     * Construct an object representing a holiday
+     *
+     * @param month         The month in which this holiday occurs (0-based)
+     * @param dayOfMonth    The date within the month (1-based).
+     *
+     * @param name  The name of this holiday.  This string is used as a key
+     *              to look up the holiday's name a resource bundle.
+     *              If the name is not found in the resource bundle,
+     *              getDisplayName will return this string instead.
+     *
+     * @see SimpleDateRule
+     * @see Holiday#getDisplayName(java.util.Locale)
+     *
+     */
+    public SimpleHoliday(int month, int dayOfMonth, String name,
+                            int startYear, int endYear)
+    {
+        super(name, null);
+
+        setRange(startYear, endYear, new SimpleDateRule(month, dayOfMonth) );
+    }
+
+    /** // TODO: remove
+     * Construct an object representing a holiday
+     *
+     * @param month The month in which this holiday occurs (0-based)
+     *
+     * @param dayOfMonth A date within the month (1-based).  The
+     *      interpretation of this parameter depends on the value of
+     *      <code>dayOfWeek</code>.
+     *
+     * @param dayOfWeek The day of the week on which this holiday occurs.
+     *      The following values are legal: <ul>
+     *      <li>dayOfWeek == 0 - use dayOfMonth only
+     *      <li>dayOfWeek < 0  - use last -dayOfWeek before or on dayOfMonth
+     *      <li>dayOfWeek > 0  - use first dayOfWeek after or on dayOfMonth
+     *      </ul>
+     *
+     * @param name  The name of this holiday.  This string is used as a key
+     *              to look up the holiday's name a resource bundle.
+     *              If the name is not found in the resource bundle,
+     *              getDisplayName will return this string instead.
+     *
+     * @see SimpleDateRule
+     * @see Holiday#getDisplayName(java.util.Locale)
+     *
+     */
+    public SimpleHoliday(int month, int dayOfMonth, int dayOfWeek, String name)
+    {
+        super(name, new SimpleDateRule(month, dayOfMonth,
+                                        dayOfWeek > 0 ? dayOfWeek : - dayOfWeek,
+                                        dayOfWeek > 0) );
+    }
+
+
+    public SimpleHoliday(int month, int dayOfMonth, int dayOfWeek, String name,
+                        int startYear)
+    {
+        super(name, null);
+
+        setRange(startYear, 0, new SimpleDateRule(month, dayOfMonth,
+                                            dayOfWeek > 0 ? dayOfWeek : - dayOfWeek,
+                                            dayOfWeek > 0) );
+    }
+
+
+    public SimpleHoliday(int month, int dayOfMonth, int dayOfWeek, String name,
+                        int startYear, int endYear)
+    {
+        super(name, null);
+
+        setRange(startYear, endYear, new SimpleDateRule(month, dayOfMonth,
+                                            dayOfWeek > 0 ? dayOfWeek : - dayOfWeek,
+                                            dayOfWeek > 0) );
+    }
+
+    private void setRange(int startYear, int endYear, DateRule rule)
+    {
+        RangeDateRule rangeRule = new RangeDateRule();
+
+        if (startYear != 0) {
+            Calendar start = new GregorianCalendar(startYear, Calendar.JANUARY, 1);
+            rangeRule.add(start.getTime(), rule);
+        } else {
+            rangeRule.add(rule);
+        }
+        if (endYear != 0) {
+            Date end = new GregorianCalendar(endYear, Calendar.DECEMBER, 31).getTime();
+            rangeRule.add(end, null);
+        }
+
+        setRule(rangeRule);
+    }
+
+    /* Constants for holidays that are common throughout the Western
+     * and Christian worlds.... */
+
+    /**
+     * New Year's Day - January 1st
+     */
+    public static final SimpleHoliday NEW_YEARS_DAY =
+        new SimpleHoliday(Calendar.JANUARY,    1,  "New Year's Day");
+
+    /**
+     * Epiphany, January 6th
+     */
+    public static final SimpleHoliday EPIPHANY =
+        new SimpleHoliday(Calendar.JANUARY,    6,  "Epiphany");
+
+    /**
+     * May Day, May 1st
+     */
+    public static final SimpleHoliday MAY_DAY =
+        new SimpleHoliday(Calendar.MAY,        1,  "May Day");
+
+    /**
+     * Assumption, August 15th
+     */
+    public static final SimpleHoliday ASSUMPTION =
+        new SimpleHoliday(Calendar.AUGUST,    15,  "Assumption");
+
+    /**
+     * All Saints' Day, November 1st
+     */
+    public static final SimpleHoliday ALL_SAINTS_DAY =
+        new SimpleHoliday(Calendar.NOVEMBER,   1,  "All Saints' Day");
+
+    /**
+     * All Souls' Day, November 1st
+     */
+    public static final SimpleHoliday ALL_SOULS_DAY =
+        new SimpleHoliday(Calendar.NOVEMBER,   2,  "All Souls' Day");
+
+    /**
+     * Immaculate Conception, December 8th
+     */
+    public static final SimpleHoliday IMMACULATE_CONCEPTION =
+        new SimpleHoliday(Calendar.DECEMBER,   8,  "Immaculate Conception");
+
+    /**
+     * Christmas Eve, December 24th
+     */
+    public static final SimpleHoliday CHRISTMAS_EVE =
+        new SimpleHoliday(Calendar.DECEMBER,  24,  "Christmas Eve");
+
+    /**
+     * Christmas, December 25th
+     */
+    public static final SimpleHoliday CHRISTMAS =
+        new SimpleHoliday(Calendar.DECEMBER,  25,  "Christmas");
+
+    /**
+     * Boxing Day, December 26th
+     */
+    public static final SimpleHoliday BOXING_DAY =
+        new SimpleHoliday(Calendar.DECEMBER,  26,  "Boxing Day");
+
+    /**
+     * Saint Stephen's Day, December 26th
+     */
+    public static final SimpleHoliday ST_STEPHENS_DAY =
+        new SimpleHoliday(Calendar.DECEMBER,  26,  "St. Stephen's Day");
+
+    /**
+     * New Year's Eve, December 31st
+     */
+    public static final SimpleHoliday NEW_YEARS_EVE =
+        new SimpleHoliday(Calendar.DECEMBER,  31,  "New Year's Eve");
+
+}
diff --git a/src/com/ibm/util/SimpleTimeZone.java b/src/com/ibm/util/SimpleTimeZone.java
new file mode 100755
index 0000000..29c5c73
--- /dev/null
+++ b/src/com/ibm/util/SimpleTimeZone.java
@@ -0,0 +1,1489 @@
+/*
+ * @(#)SimpleTimeZone.java	1.38 00/01/19
+ *
+ * Copyright 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
+ * 
+ * This software is the proprietary information of Sun Microsystems, Inc.  
+ * Use is subject to license terms.
+ * 
+ */
+
+/*
+ * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1996 - All Rights Reserved
+ *
+ *   The original version of this source code and documentation is copyrighted
+ * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
+ * materials are provided under terms of a License Agreement between Taligent
+ * and Sun. This technology is protected by multiple US and International
+ * patents. This notice and attribution to Taligent may not be removed.
+ *   Taligent is a registered trademark of Taligent, Inc.
+ *
+ */
+
+package com.ibm.util;
+
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * <code>SimpleTimeZone</code> is a concrete subclass of <code>TimeZone</code>
+ * that represents a time zone for use with a Gregorian calendar. This
+ * class does not handle historical changes.
+ *
+ * <P>
+ * Use a negative value for <code>dayOfWeekInMonth</code> to indicate that
+ * <code>SimpleTimeZone</code> should count from the end of the month backwards.
+ * For example, Daylight Savings Time ends at the last
+ * (dayOfWeekInMonth = -1) Sunday in October, at 2 AM in standard time.
+ *
+ * @see      Calendar
+ * @see      GregorianCalendar
+ * @see      TimeZone
+ * @version  1.38 01/19/00
+ * @author   David Goldsmith, Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+public class SimpleTimeZone extends TimeZone {
+    /**
+     * Constructs a SimpleTimeZone with the given base time zone offset from GMT
+     * and time zone ID. Timezone IDs can be obtained from
+     * TimeZone.getAvailableIDs. Normally you should use TimeZone.getDefault to
+     * construct a TimeZone.
+     *
+     * @param rawOffset  The given base time zone offset to GMT.
+     * @param ID         The time zone ID which is obtained from
+     *                   TimeZone.getAvailableIDs.
+     */
+    public SimpleTimeZone(int rawOffset, String ID)
+    {
+        this.rawOffset = rawOffset;
+        setID (ID);
+        dstSavings = millisPerHour; // In case user sets rules later
+    }
+
+    /**
+     * Construct a SimpleTimeZone with the given base time zone offset from
+     * GMT, time zone ID, time to start and end the daylight time. Timezone IDs
+     * can be obtained from TimeZone.getAvailableIDs. Normally you should use
+     * TimeZone.getDefault to create a TimeZone. For a time zone that does not
+     * use daylight saving time, do not use this constructor; instead you should
+     * use SimpleTimeZone(rawOffset, ID).
+     *
+     * By default, this constructor specifies day-of-week-in-month rules. That
+     * is, if the startDay is 1, and the startDayOfWeek is SUNDAY, then this
+     * indicates the first Sunday in the startMonth. A startDay of -1 likewise
+     * indicates the last Sunday. However, by using negative or zero values for
+     * certain parameters, other types of rules can be specified.
+     *
+     * Day of month. To specify an exact day of the month, such as March 1, set
+     * startDayOfWeek to zero.
+     *
+     * Day of week after day of month. To specify the first day of the week
+     * occurring on or after an exact day of the month, make the day of the week
+     * negative. For example, if startDay is 5 and startDayOfWeek is -MONDAY,
+     * this indicates the first Monday on or after the 5th day of the
+     * startMonth.
+     *
+     * Day of week before day of month. To specify the last day of the week
+     * occurring on or before an exact day of the month, make the day of the
+     * week and the day of the month negative. For example, if startDay is -21
+     * and startDayOfWeek is -WEDNESDAY, this indicates the last Wednesday on or
+     * before the 21st of the startMonth.
+     *
+     * The above examples refer to the startMonth, startDay, and startDayOfWeek;
+     * the same applies for the endMonth, endDay, and endDayOfWeek.
+     *
+     * @param rawOffset       The given base time zone offset to GMT.
+     * @param ID              The time zone ID which is obtained from
+     *                        TimeZone.getAvailableIDs.
+     * @param startMonth      The daylight savings starting month. Month is
+     *                        0-based. eg, 0 for January.
+     * @param startDay        The daylight savings starting
+     *                        day-of-week-in-month. Please see the member
+     *                        description for an example.
+     * @param startDayOfWeek  The daylight savings starting day-of-week. Please
+     *                        see the member description for an example.
+     * @param startTime       The daylight savings starting time in local wall
+     *                        time, which is standard time in this case. Please see the
+     *                        member description for an example.
+     * @param endMonth        The daylight savings ending month. Month is
+     *                        0-based. eg, 0 for January.
+     * @param endDay          The daylight savings ending day-of-week-in-month.
+     *                        Please see the member description for an example.
+     * @param endDayOfWeek    The daylight savings ending day-of-week. Please
+     *                        see the member description for an example.
+     * @param endTime         The daylight savings ending time in local wall time,
+     *                        which is daylight time in this case. Please see the
+     *                        member description for an example.
+     * @exception IllegalArgumentException the month, day, dayOfWeek, or time
+     * parameters are out of range for the start or end rule
+     * @since JDK1.1
+     */
+    public SimpleTimeZone(int rawOffset, String ID,
+                          int startMonth, int startDay, int startDayOfWeek, int startTime,
+                          int endMonth, int endDay, int endDayOfWeek, int endTime)
+    {
+        this(rawOffset, ID,
+             startMonth, startDay, startDayOfWeek, startTime, WALL_TIME,
+             endMonth, endDay, endDayOfWeek, endTime, WALL_TIME,
+             millisPerHour);
+    }
+
+    /**
+     * Constructor.  This constructor is identical to the 10-argument
+     * constructor, but also takes a dstSavings parameter.
+     * @param dstSavings   The amount of time in ms saved during DST.
+     * @exception IllegalArgumentException the month, day, dayOfWeek, or time
+     * parameters are out of range for the start or end rule
+     * @since 1.2
+     */
+    public SimpleTimeZone(int rawOffset, String ID,
+                          int startMonth, int startDay, int startDayOfWeek, int startTime,
+                          int endMonth, int endDay, int endDayOfWeek, int endTime,
+                          int dstSavings)
+    {
+        this(rawOffset, ID,
+             startMonth, startDay, startDayOfWeek, startTime, WALL_TIME,
+             endMonth, endDay, endDayOfWeek, endTime, WALL_TIME,
+             dstSavings);
+    }
+
+    /**
+     * Constructor.
+     */
+    SimpleTimeZone(int rawOffset, String ID,
+                   int startMonth, int startDay, int startDayOfWeek,
+                   int startTime, int startTimeMode,
+                   int endMonth, int endDay, int endDayOfWeek,
+                   int endTime, int endTimeMode,
+                   int dstSavings) {
+        setID(ID);
+        this.rawOffset      = rawOffset;
+        this.startMonth     = startMonth;
+        this.startDay       = startDay;
+        this.startDayOfWeek = startDayOfWeek;
+        this.startTime      = startTime;
+        this.startTimeMode  = startTimeMode;
+        this.endMonth       = endMonth;
+        this.endDay         = endDay;
+        this.endDayOfWeek   = endDayOfWeek;
+        this.endTime        = endTime;
+        this.endTimeMode    = endTimeMode;
+        this.dstSavings     = dstSavings;
+        // this.useDaylight    = true; // Set by decodeRules
+        decodeRules();
+        if (dstSavings <= 0) {
+            throw new IllegalArgumentException("Illegal DST savings");
+        }
+    }
+
+    /**
+     * Constructor for TimeZoneData.  Takes as input an array and an index
+     * into the array.  The array format is that of TimeZoneData.DATA.
+     */
+    SimpleTimeZone(String ID, int[] data, int i) {
+        setID(ID);
+        rawOffset = data[i+1]*1000;
+        if (data[i] == 0) {
+            dstSavings = millisPerHour; // In case user sets rules later
+        } else {
+            startMonth     = data[i+2];
+            startDay       = data[i+3];
+            startDayOfWeek = data[i+4];
+            startTime      = data[i+5]*60000;
+            startTimeMode  = data[i+6];
+            endMonth       = data[i+7];
+            endDay         = data[i+8];
+            endDayOfWeek   = data[i+9];
+            endTime        = data[i+10]*60000;
+            endTimeMode    = data[i+11];
+            dstSavings     = data[i+12]*60000;
+            decodeRules();
+            if (dstSavings <= 0) {
+                throw new IllegalArgumentException("Illegal DST savings");
+            }
+        }
+    }
+
+    /**
+     * Sets the daylight savings starting year.
+     *
+     * @param year  The daylight savings starting year.
+     */
+    public void setStartYear(int year)
+    {
+        startYear = year;
+    }
+
+    /**
+     * Sets the daylight savings starting rule. For example, Daylight Savings
+     * Time starts at the first Sunday in April, at 2 AM in standard time.
+     * Therefore, you can set the start rule by calling:
+     * setStartRule(TimeFields.APRIL, 1, TimeFields.SUNDAY, 2*60*60*1000);
+     *
+     * @param month             The daylight savings starting month. Month is
+     *                          0-based. eg, 0 for January.
+     * @param dayOfWeekInMonth  The daylight savings starting
+     *                          day-of-week-in-month. Please see the member
+     *                          description for an example.
+     * @param dayOfWeek         The daylight savings starting day-of-week.
+     *                          Please see the member description for an
+     *                          example.
+     * @param time              The daylight savings starting time in local wall
+     *                          time, which is standard time in this case. Please see
+     *                          the member description for an example.
+     * @exception IllegalArgumentException the month, dayOfWeekInMonth,
+     * dayOfWeek, or time parameters are out of range
+     */
+    public void setStartRule(int month, int dayOfWeekInMonth, int dayOfWeek,
+                             int time)
+    {
+        startMonth = month;
+        startDay = dayOfWeekInMonth;
+        startDayOfWeek = dayOfWeek;
+        startTime = time;
+        startTimeMode = WALL_TIME;
+        // useDaylight = true; // Set by decodeRules
+        decodeStartRule();
+    }
+
+    /**
+     * Sets the DST start rule to a fixed date within a month.
+     *
+     * @param month         The month in which this rule occurs (0-based).
+     * @param dayOfMonth    The date in that month (1-based).
+     * @param time          The time of that day (number of millis after midnight)
+     *                      when DST takes effect in local wall time, which is
+     *                      standard time in this case.
+     * @exception IllegalArgumentException the month,
+     * dayOfMonth, or time parameters are out of range
+     * @since 1.2
+     */
+    public void setStartRule(int month, int dayOfMonth, int time) {
+        setStartRule(month, dayOfMonth, 0, time);
+    }
+
+    /**
+     * Sets the DST start rule to a weekday before or after a give date within
+     * a month, e.g., the first Monday on or after the 8th.
+     *
+     * @param month         The month in which this rule occurs (0-based).
+     * @param dayOfMonth    A date within that month (1-based).
+     * @param dayOfWeek     The day of the week on which this rule occurs.
+     * @param time          The time of that day (number of millis after midnight)
+     *                      when DST takes effect in local wall time, which is
+     *                      standard time in this case.
+     * @param after         If true, this rule selects the first dayOfWeek on
+     *                      or after dayOfMonth.  If false, this rule selects
+     *                      the last dayOfWeek on or before dayOfMonth.
+     * @exception IllegalArgumentException the month, dayOfMonth,
+     * dayOfWeek, or time parameters are out of range
+     * @since 1.2
+     */
+    public void setStartRule(int month, int dayOfMonth, int dayOfWeek, int time, boolean after)
+    {
+        if (after)
+            setStartRule(month, dayOfMonth, -dayOfWeek, time);
+        else
+            setStartRule(month, -dayOfMonth, -dayOfWeek, time);
+    }
+
+    /**
+     * Sets the daylight savings ending rule. For example, Daylight Savings Time
+     * ends at the last (-1) Sunday in October, at 2 AM in standard time.
+     * Therefore, you can set the end rule by calling:
+     * setEndRule(TimeFields.OCTOBER, -1, TimeFields.SUNDAY, 2*60*60*1000);
+     *
+     * @param month             The daylight savings ending month. Month is
+     *                          0-based. eg, 0 for January.
+     * @param dayOfWeekInMonth  The daylight savings ending
+     *                          day-of-week-in-month. Please see the member
+     *                          description for an example.
+     * @param dayOfWeek         The daylight savings ending day-of-week. Please
+     *                          see the member description for an example.
+     * @param time              The daylight savings ending time in local wall time,
+     *                          which is daylight time in this case. Please see the
+     *                          member description for an example.
+     * @exception IllegalArgumentException the month, dayOfWeekInMonth,
+     * dayOfWeek, or time parameters are out of range
+     */
+    public void setEndRule(int month, int dayOfWeekInMonth, int dayOfWeek,
+                           int time)
+    {
+        endMonth = month;
+        endDay = dayOfWeekInMonth;
+        endDayOfWeek = dayOfWeek;
+        endTime = time;
+        endTimeMode = WALL_TIME;
+        // useDaylight = true; // Set by decodeRules
+        decodeEndRule();
+    }
+
+    /**
+     * Sets the DST end rule to a fixed date within a month.
+     *
+     * @param month         The month in which this rule occurs (0-based).
+     * @param dayOfMonth    The date in that month (1-based).
+     * @param time          The time of that day (number of millis after midnight)
+     *                      when DST ends in local wall time, which is daylight
+     *                      time in this case.
+     * @exception IllegalArgumentException the month,
+     * dayOfMonth, or time parameters are out of range
+     * @since 1.2
+     */
+    public void setEndRule(int month, int dayOfMonth, int time)
+    {
+        setEndRule(month, dayOfMonth, 0, time);
+    }
+
+    /**
+     * Sets the DST end rule to a weekday before or after a give date within
+     * a month, e.g., the first Monday on or after the 8th.
+     *
+     * @param month         The month in which this rule occurs (0-based).
+     * @param dayOfMonth    A date within that month (1-based).
+     * @param dayOfWeek     The day of the week on which this rule occurs.
+     * @param time          The time of that day (number of millis after midnight)
+     *                      when DST ends in local wall time, which is daylight
+     *                      time in this case.
+     * @param after         If true, this rule selects the first dayOfWeek on
+     *                      or after dayOfMonth.  If false, this rule selects
+     *                      the last dayOfWeek on or before dayOfMonth.
+     * @exception IllegalArgumentException the month, dayOfMonth,
+     * dayOfWeek, or time parameters are out of range
+     * @since 1.2
+     */
+    public void setEndRule(int month, int dayOfMonth, int dayOfWeek, int time, boolean after)
+    {
+        if (after)
+            setEndRule(month, dayOfMonth, -dayOfWeek, time);
+        else
+            setEndRule(month, -dayOfMonth, -dayOfWeek, time);
+    }
+
+   /**
+     * Returns the difference in milliseconds between local time and
+     * UTC, taking into account both the raw offset and the effect of
+     * daylight savings, for the specified date and time.  This method
+     * assumes that the start and end month are distinct.  It also
+     * uses a default {@link GregorianCalendar} object as its
+     * underlying calendar, such as for determining leap years.  Do
+     * not use the result of this method with a calendar other than a
+     * default <code>GregorianCalendar</code>.
+     *
+     * <p><em>Note:  In general, clients should use
+     * <code>Calendar.get(ZONE_OFFSET) + Calendar.get(DST_OFFSET)</code>
+     * instead of calling this method.</em>
+     *
+     * @param era       The era of the given date.
+     * @param year      The year in the given date.
+     * @param month     The month in the given date. Month is 0-based. e.g.,
+     *                  0 for January.
+     * @param day       The day-in-month of the given date.
+     * @param dayOfWeek The day-of-week of the given date.
+     * @param millis    The milliseconds in day in <em>standard</em> local time.
+     * @return          The milliseconds to add to UTC to get local time.
+     * @exception       IllegalArgumentException the era, month, day,
+     *                  dayOfWeek, or millis parameters are out of range
+     */
+    public int getOffset(int era, int year, int month, int day, int dayOfWeek,
+                         int millis)
+    {
+        // Check the month before indexing into staticMonthLength. This
+	// duplicates the test that occurs in the 7-argument getOffset(),
+	// however, this is unavoidable. We don't mind because this method, in
+	// fact, should not be called; internal code should always call the
+	// 7-argument getOffset(), and outside code should use Calendar.get(int
+	// field) with fields ZONE_OFFSET and DST_OFFSET. We can't get rid of
+	// this method because it's public API. - liu 8/10/98
+        if (month < Calendar.JANUARY
+            || month > Calendar.DECEMBER) {
+            throw new IllegalArgumentException("Illegal month " + month);
+        }
+	int monthLength, prevMonthLength;
+	if ((era == GregorianCalendar.AD) && internalCal.isLeapYear(year)) {
+	    monthLength = staticLeapMonthLength[month];
+	    prevMonthLength = (month > 1) ? staticLeapMonthLength[month - 1] : 31;
+	} else {
+	    monthLength = staticMonthLength[month];
+	    prevMonthLength = (month > 1) ? staticMonthLength[month - 1] : 31;
+	}
+
+        return getOffset(era, year, month, day, dayOfWeek, millis,
+			 monthLength, prevMonthLength);
+    }
+
+    /**
+     * Gets offset, for current date, modified in case of
+     * daylight savings. This is the offset to add <em>to</em> UTC to get local time.
+     * Gets the time zone offset, for current date, modified in case of daylight
+     * savings. This is the offset to add *to* UTC to get local time. Assume
+     * that the start and end month are distinct.
+     * @param era           The era of the given date.
+     * @param year          The year in the given date.
+     * @param month         The month in the given date. Month is 0-based. e.g.,
+     *                      0 for January.
+     * @param day           The day-in-month of the given date.
+     * @param dayOfWeek     The day-of-week of the given date.
+     * @param millis        The milliseconds in day in <em>standard</em> local time.
+     * @param monthLength   The length of the given month in days.
+     * @param prevMonthLength The length of the previous month in days.
+     * @return              The offset to add *to* GMT to get local time.
+     * @exception IllegalArgumentException the era, month, day,
+     * dayOfWeek, millis, or monthLength parameters are out of range
+     */
+    int getOffset(int era, int year, int month, int day, int dayOfWeek,
+                  int millis, int monthLength, int prevMonthLength) {
+        if (false) {
+            /* Use this parameter checking code for normal operation.  Only one
+             * of these two blocks should actually get compiled into the class
+             * file.  */
+            if ((era != GregorianCalendar.AD && era != GregorianCalendar.BC)
+                || month < Calendar.JANUARY
+                || month > Calendar.DECEMBER
+                || day < 1
+                || day > monthLength
+                || dayOfWeek < Calendar.SUNDAY
+                || dayOfWeek > Calendar.SATURDAY
+                || millis < 0
+                || millis >= millisPerDay
+                || monthLength < 28
+                || monthLength > 31
+                || prevMonthLength < 28
+                || prevMonthLength > 31) {
+                throw new IllegalArgumentException();
+            }
+        } else {
+            /* This parameter checking code is better for debugging, but
+             * overkill for normal operation.  Only one of these two blocks
+             * should actually get compiled into the class file.  */
+            if (era != GregorianCalendar.AD && era != GregorianCalendar.BC) {
+                throw new IllegalArgumentException("Illegal era " + era);
+            }
+            if (month < Calendar.JANUARY
+                || month > Calendar.DECEMBER) {
+                throw new IllegalArgumentException("Illegal month " + month);
+            }
+            if (day < 1
+                || day > monthLength) {
+                throw new IllegalArgumentException("Illegal day " + day);
+            }
+            if (dayOfWeek < Calendar.SUNDAY
+                || dayOfWeek > Calendar.SATURDAY) {
+                throw new IllegalArgumentException("Illegal day of week " + dayOfWeek);
+            }
+            if (millis < 0
+                || millis >= millisPerDay) {
+                throw new IllegalArgumentException("Illegal millis " + millis);
+            }
+            if (monthLength < 28
+                || monthLength > 31) {
+                throw new IllegalArgumentException("Illegal month length " + monthLength);
+            }
+            if (prevMonthLength < 28
+                || prevMonthLength > 31) {
+                throw new IllegalArgumentException("Illegal previous month length " + prevMonthLength);
+            }
+        }
+
+        int result = rawOffset;
+
+        // Bail out if we are before the onset of daylight savings time
+        if (!useDaylight || year < startYear || era != GregorianCalendar.AD) return result;
+
+        // Check for southern hemisphere.  We assume that the start and end
+        // month are different.
+        boolean southern = (startMonth > endMonth);
+
+        // Compare the date to the starting and ending rules.+1 = date>rule, -1
+        // = date<rule, 0 = date==rule.
+        int startCompare = compareToRule(month, monthLength, prevMonthLength,
+                                         day, dayOfWeek, millis,
+                                         startTimeMode == UTC_TIME ? -rawOffset : 0,
+                                         startMode, startMonth, startDayOfWeek,
+                                         startDay, startTime);
+        int endCompare = 0;
+
+        /* We don't always have to compute endCompare.  For many instances,
+         * startCompare is enough to determine if we are in DST or not.  In the
+         * northern hemisphere, if we are before the start rule, we can't have
+         * DST.  In the southern hemisphere, if we are after the start rule, we
+         * must have DST.  This is reflected in the way the next if statement
+         * (not the one immediately following) short circuits. */
+        if (southern != (startCompare >= 0)) {
+            /* For the ending rule comparison, we add the dstSavings to the millis
+             * passed in to convert them from standard to wall time.  We then must
+             * normalize the millis to the range 0..millisPerDay-1. */
+            endCompare = compareToRule(month, monthLength, prevMonthLength,
+                                       day, dayOfWeek, millis,
+                                       endTimeMode == WALL_TIME ? dstSavings :
+                                        (endTimeMode == UTC_TIME ? -rawOffset : 0),
+                                       endMode, endMonth, endDayOfWeek,
+                                       endDay, endTime);
+        }
+
+        // Check for both the northern and southern hemisphere cases.  We
+        // assume that in the northern hemisphere, the start rule is before the
+        // end rule within the calendar year, and vice versa for the southern
+        // hemisphere.
+        if ((!southern && (startCompare >= 0 && endCompare < 0)) ||
+            (southern && (startCompare >= 0 || endCompare < 0)))
+            result += dstSavings;
+
+        return result;
+    }
+
+    /**
+     * Compare a given date in the year to a rule. Return 1, 0, or -1, depending
+     * on whether the date is after, equal to, or before the rule date. The
+     * millis are compared directly against the ruleMillis, so any
+     * standard-daylight adjustments must be handled by the caller.
+     *
+     * @return  1 if the date is after the rule date, -1 if the date is before
+     *          the rule date, or 0 if the date is equal to the rule date.
+     */
+    private static int compareToRule(int month, int monthLen, int prevMonthLen,
+                                     int dayOfMonth,
+                                     int dayOfWeek, int millis, int millisDelta,
+                                     int ruleMode, int ruleMonth, int ruleDayOfWeek,
+                                     int ruleDay, int ruleMillis)
+    {
+        // Make adjustments for startTimeMode and endTimeMode
+        millis += millisDelta;
+        while (millis >= millisPerDay) {
+            millis -= millisPerDay;
+            ++dayOfMonth;
+            dayOfWeek = 1 + (dayOfWeek % 7); // dayOfWeek is one-based
+            if (dayOfMonth > monthLen) {
+                dayOfMonth = 1;
+                /* When incrementing the month, it is desirible to overflow
+                 * from DECEMBER to DECEMBER+1, since we use the result to
+                 * compare against a real month. Wraparound of the value
+                 * leads to bug 4173604. */
+                ++month;
+            }
+        }
+        while (millis < 0) {
+            millis += millisPerDay;
+            --dayOfMonth;
+            dayOfWeek = 1 + ((dayOfWeek+5) % 7); // dayOfWeek is one-based
+            if (dayOfMonth < 1) {
+                dayOfMonth = prevMonthLen;
+                --month;
+            }
+        }
+        
+        if (month < ruleMonth) return -1;
+        else if (month > ruleMonth) return 1;
+
+        int ruleDayOfMonth = 0;
+        switch (ruleMode)
+        {
+        case DOM_MODE:
+            ruleDayOfMonth = ruleDay;
+            break;
+        case DOW_IN_MONTH_MODE:
+            // In this case ruleDay is the day-of-week-in-month
+            if (ruleDay > 0)
+                ruleDayOfMonth = 1 + (ruleDay - 1) * 7 +
+                    (7 + ruleDayOfWeek - (dayOfWeek - dayOfMonth + 1)) % 7;
+            else // Assume ruleDay < 0 here
+            {
+                ruleDayOfMonth = monthLen + (ruleDay + 1) * 7 -
+                    (7 + (dayOfWeek + monthLen - dayOfMonth) - ruleDayOfWeek) % 7;
+            }
+            break;
+        case DOW_GE_DOM_MODE:
+            ruleDayOfMonth = ruleDay +
+                (49 + ruleDayOfWeek - ruleDay - dayOfWeek + dayOfMonth) % 7;
+            break;
+        case DOW_LE_DOM_MODE:
+            ruleDayOfMonth = ruleDay -
+                (49 - ruleDayOfWeek + ruleDay + dayOfWeek - dayOfMonth) % 7;
+            // Note at this point ruleDayOfMonth may be <1, although it will
+            // be >=1 for well-formed rules.
+            break;
+        }
+
+        if (dayOfMonth < ruleDayOfMonth) return -1;
+        else if (dayOfMonth > ruleDayOfMonth) return 1;
+
+        if (millis < ruleMillis) return -1;
+        else if (millis > ruleMillis) return 1;
+        else return 0;
+    }
+
+    /**
+     * Overrides TimeZone
+     * Gets the GMT offset for this time zone.
+     */
+    public int getRawOffset()
+    {
+        // The given date will be taken into account while
+        // we have the historical time zone data in place.
+        return rawOffset;
+    }
+
+    /**
+     * Overrides TimeZone
+     * Sets the base time zone offset to GMT.
+     * This is the offset to add *to* UTC to get local time.
+     * Please see TimeZone.setRawOffset for descriptions on the parameter.
+     */
+    public void setRawOffset(int offsetMillis)
+    {
+        this.rawOffset = offsetMillis;
+    }
+
+    /**
+     * Sets the amount of time in ms that the clock is advanced during DST.
+     * @param millisSavedDuringDST the number of milliseconds the time is
+     * advanced with respect to standard time when the daylight savings rules
+     * are in effect. A positive number, typically one hour (3600000).
+     * @since 1.2
+     */
+    public void setDSTSavings(int millisSavedDuringDST) {
+        if (millisSavedDuringDST <= 0) {
+            throw new IllegalArgumentException("Illegal DST savings");
+        }
+        dstSavings = millisSavedDuringDST;
+    }
+
+    /**
+     * Returns the amount of time in ms that the clock is advanced during DST.
+     * @return the number of milliseconds the time is
+     * advanced with respect to standard time when the daylight savings rules
+     * are in effect. A positive number, typically one hour (3600000).
+     * @since 1.2
+     */
+    public int getDSTSavings() {
+        return dstSavings;
+    }
+
+    /**
+     * Overrides TimeZone
+     * Queries if this time zone uses Daylight Savings Time.
+     */
+    public boolean useDaylightTime()
+    {
+        return useDaylight;
+    }
+
+    /**
+     * Overrides TimeZone
+     * Queries if the given date is in Daylight Savings Time.
+     */
+    public boolean inDaylightTime(Date date)
+    {
+        GregorianCalendar gc = new GregorianCalendar(this);
+        gc.setTime(date);
+        return gc.inDaylightTime();
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        return super.clone();
+        // other fields are bit-copied
+    }
+
+    /**
+     * Override hashCode.
+     * Generates the hash code for the SimpleDateFormat object
+     */
+    public synchronized int hashCode()
+    {
+        return startMonth ^ startDay ^ startDayOfWeek ^ startTime ^
+            endMonth ^ endDay ^ endDayOfWeek ^ endTime ^ rawOffset;
+    }
+
+    /**
+     * Compares the equality of two SimpleTimeZone objects.
+     *
+     * @param obj  The SimpleTimeZone object to be compared with.
+     * @return     True if the given obj is the same as this SimpleTimeZone
+     *             object; false otherwise.
+     */
+    public boolean equals(Object obj)
+    {
+        if (this == obj)
+            return true;
+        if (!(obj instanceof SimpleTimeZone))
+            return false;
+
+        SimpleTimeZone that = (SimpleTimeZone) obj;
+
+        return getID().equals(that.getID()) &&
+            hasSameRules(that);
+    }
+
+    /**
+     * Return true if this zone has the same rules and offset as another zone.
+     * @param other the TimeZone object to be compared with
+     * @return true if the given zone has the same rules and offset as this one
+     * @since 1.2
+     */
+    public boolean hasSameRules(TimeZone other) {
+        if (this == other) return true;
+        if (!(other instanceof SimpleTimeZone)) return false;
+        SimpleTimeZone that = (SimpleTimeZone) other;
+        return rawOffset == that.rawOffset &&
+            useDaylight == that.useDaylight &&
+            (!useDaylight
+             // Only check rules if using DST
+             || (dstSavings == that.dstSavings &&
+                 startMode == that.startMode &&
+                 startMonth == that.startMonth &&
+                 startDay == that.startDay &&
+                 startDayOfWeek == that.startDayOfWeek &&
+                 startTime == that.startTime &&
+                 startTimeMode == that.startTimeMode &&
+                 endMode == that.endMode &&
+                 endMonth == that.endMonth &&
+                 endDay == that.endDay &&
+                 endDayOfWeek == that.endDayOfWeek &&
+                 endTime == that.endTime &&
+                 endTimeMode == that.endTimeMode &&
+                 startYear == that.startYear));
+    }
+
+    /**
+     * Return a string representation of this time zone.
+     * @return  a string representation of this time zone.
+     */
+    public String toString() {
+        return getClass().getName() +
+            "[id=" + getID() +
+            ",offset=" + rawOffset +
+            ",dstSavings=" + dstSavings +
+            ",useDaylight=" + useDaylight +
+            ",startYear=" + startYear +
+            ",startMode=" + startMode +
+            ",startMonth=" + startMonth +
+            ",startDay=" + startDay +
+            ",startDayOfWeek=" + startDayOfWeek +
+            ",startTime=" + startTime +
+            ",startTimeMode=" + startTimeMode +
+            ",endMode=" + endMode +
+            ",endMonth=" + endMonth +
+            ",endDay=" + endDay +
+            ",endDayOfWeek=" + endDayOfWeek +
+            ",endTime=" + endTime +
+            ",endTimeMode=" + endTimeMode + ']';
+    }
+
+    // =======================privates===============================
+
+    /**
+     * The month in which daylight savings time starts.  This value must be
+     * between <code>Calendar.JANUARY</code> and
+     * <code>Calendar.DECEMBER</code> inclusive.  This value must not equal
+     * <code>endMonth</code>.
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     */
+    private int startMonth;
+
+    /**
+     * This field has two possible interpretations:
+     * <dl>
+     * <dt><code>startMode == DOW_IN_MONTH</code></dt>
+     * <dd>
+     * <code>startDay</code> indicates the day of the month of
+     * <code>startMonth</code> on which daylight
+     * savings time starts, from 1 to 28, 30, or 31, depending on the
+     * <code>startMonth</code>.
+     * </dd>
+     * <dt><code>startMode != DOW_IN_MONTH</code></dt>
+     * <dd>
+     * <code>startDay</code> indicates which <code>startDayOfWeek</code> in th
+     * month <code>startMonth</code> daylight
+     * savings time starts on.  For example, a value of +1 and a
+     * <code>startDayOfWeek</code> of <code>Calendar.SUNDAY</code> indicates the
+     * first Sunday of <code>startMonth</code>.  Likewise, +2 would indicate the
+     * second Sunday, and -1 the last Sunday.  A value of 0 is illegal.
+     * </dd>
+     * </ul>
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     */
+    private int startDay;
+
+    /**
+     * The day of the week on which daylight savings time starts.  This value
+     * must be between <code>Calendar.SUNDAY</code> and
+     * <code>Calendar.SATURDAY</code> inclusive.
+     * <p>If <code>useDaylight</code> is false or
+     * <code>startMode == DAY_OF_MONTH</code>, this value is ignored.
+     * @serial
+     */
+    private int startDayOfWeek;
+
+    /**
+     * The time in milliseconds after midnight at which daylight savings
+     * time starts.  This value is expressed as wall time, standard time,
+     * or UTC time, depending on the setting of <code>startTimeMode</code>.
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     */
+    private int startTime;
+
+    /**
+     * The format of startTime, either WALL_TIME, STANDARD_TIME, or UTC_TIME.
+     * @serial
+     * @since JDK 1.3
+     */
+    private int startTimeMode;
+
+    /**
+     * The month in which daylight savings time ends.  This value must be
+     * between <code>Calendar.JANUARY</code> and
+     * <code>Calendar.UNDECIMBER</code>.  This value must not equal
+     * <code>startMonth</code>.
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     */
+    private int endMonth;
+
+    /**
+     * This field has two possible interpretations:
+     * <dl>
+     * <dt><code>endMode == DOW_IN_MONTH</code></dt>
+     * <dd>
+     * <code>endDay</code> indicates the day of the month of
+     * <code>endMonth</code> on which daylight
+     * savings time ends, from 1 to 28, 30, or 31, depending on the
+     * <code>endMonth</code>.
+     * </dd>
+     * <dt><code>endMode != DOW_IN_MONTH</code></dt>
+     * <dd>
+     * <code>endDay</code> indicates which <code>endDayOfWeek</code> in th
+     * month <code>endMonth</code> daylight
+     * savings time ends on.  For example, a value of +1 and a
+     * <code>endDayOfWeek</code> of <code>Calendar.SUNDAY</code> indicates the
+     * first Sunday of <code>endMonth</code>.  Likewise, +2 would indicate the
+     * second Sunday, and -1 the last Sunday.  A value of 0 is illegal.
+     * </dd>
+     * </ul>
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     */
+    private int endDay;
+
+    /**
+     * The day of the week on which daylight savings time ends.  This value
+     * must be between <code>Calendar.SUNDAY</code> and
+     * <code>Calendar.SATURDAY</code> inclusive.
+     * <p>If <code>useDaylight</code> is false or
+     * <code>endMode == DAY_OF_MONTH</code>, this value is ignored.
+     * @serial
+     */
+    private int endDayOfWeek;
+
+    /**
+     * The time in milliseconds after midnight at which daylight savings
+     * time ends.  This value is expressed as wall time, standard time,
+     * or UTC time, depending on the setting of <code>endTimeMode</code>.
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     */
+    private int endTime;
+
+    /**
+     * The format of endTime, either WALL_TIME, STANDARD_TIME, or UTC_TIME.
+     * @serial
+     * @since JDK 1.3
+     */
+    private int endTimeMode;
+
+    /**
+     * The year in which daylight savings time is first observed.  This is an AD
+     * value.  If this value is less than 1 then daylight savings is observed
+     * for all AD years.
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     */
+    private int startYear;
+
+    /**
+     * The offset in milliseconds between this zone and GMT.  Negative offsets
+     * are to the west of Greenwich.  To obtain local <em>standard</em> time,
+     * add the offset to GMT time.  To obtain local wall time it may also be
+     * necessary to add <code>dstSavings</code>.
+     * @serial
+     */
+    private int rawOffset;
+
+    /**
+     * A boolean value which is true if and only if this zone uses daylight
+     * savings time.  If this value is false, several other fields are ignored.
+     * @serial
+     */
+    private boolean useDaylight=false; // indicate if this time zone uses DST
+
+    private static final int millisPerHour = 60*60*1000;
+    private static final int millisPerDay  = 24*millisPerHour;
+
+    /**
+     * This field was serialized in JDK 1.1, so we have to keep it that way
+     * to maintain serialization compatibility. However, there's no need to
+     * recreate the array each time we create a new time zone.
+     * @serial An array of bytes containing the values {31, 28, 31, 30, 31, 30,
+     * 31, 31, 30, 31, 30, 31}.  This is ignored as of the Java 2 platform v1.2, however, it must
+     * be streamed out for compatibility with JDK 1.1.
+     */
+    private final byte monthLength[] = staticMonthLength;
+    private final static byte staticMonthLength[] = {31,28,31,30,31,30,31,31,30,31,30,31};
+    private final static byte staticLeapMonthLength[] = {31,29,31,30,31,30,31,31,30,31,30,31};
+    // Hack: Use the y/m/d constructor in the following line.
+    // This prevents the infinite recursion that results when
+    // the GC wants to call STZ.getOffset. - liu
+    private static GregorianCalendar internalCal = new GregorianCalendar(0, 0, 0);
+
+    /**
+     * Variables specifying the mode of the start rule.  Takes the following
+     * values:
+     * <dl>
+     * <dt><code>DOM_MODE</code></dt>
+     * <dd>
+     * Exact day of week; e.g., March 1.
+     * </dd>
+     * <dt><code>DOW_IN_MONTH_MODE</code></dt>    
+     * <dd>
+     * Day of week in month; e.g., last Sunday in March.
+     * </dd>
+     * <dt><code>DOW_GE_DOM_MODE</code></dt>
+     * <dd>
+     * Day of week after day of month; e.g., Sunday on or after March 15.
+     * </dd>
+     * <dt><code>DOW_LE_DOM_MODE</code></dt>
+     * <dd>
+     * Day of week before day of month; e.g., Sunday on or before March 15.
+     * </dd>
+     * </dl>
+     * The setting of this field affects the interpretation of the
+     * <code>startDay</code> field.
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     * @since JDK1.1.4
+     */
+    private int startMode;
+
+    /**
+     * Variables specifying the mode of the end rule.  Takes the following
+     * values:
+     * <dl>
+     * <dt><code>DOM_MODE</code></dt>
+     * <dd>
+     * Exact day of week; e.g., March 1.
+     * </dd>
+     * <dt><code>DOW_IN_MONTH_MODE</code></dt>    
+     * <dd>
+     * Day of week in month; e.g., last Sunday in March.
+     * </dd>
+     * <dt><code>DOW_GE_DOM_MODE</code></dt>
+     * <dd>
+     * Day of week after day of month; e.g., Sunday on or after March 15.
+     * </dd>
+     * <dt><code>DOW_LE_DOM_MODE</code></dt>
+     * <dd>
+     * Day of week before day of month; e.g., Sunday on or before March 15.
+     * </dd>
+     * </dl>
+     * The setting of this field affects the interpretation of the
+     * <code>endDay</code> field.
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     * @since JDK1.1.4
+     */
+    private int endMode;
+
+    /**
+     * A positive value indicating the amount of time saved during DST in
+     * milliseconds.
+     * Typically one hour (3600000); sometimes 30 minutes (1800000).
+     * <p>If <code>useDaylight</code> is false, this value is ignored.
+     * @serial
+     * @since JDK1.1.4
+     */
+    private int dstSavings;
+
+    /**
+     * Constants specifying values of startMode and endMode.
+     */
+    private static final int DOM_MODE          = 1; // Exact day of month, "Mar 1"
+    private static final int DOW_IN_MONTH_MODE = 2; // Day of week in month, "lastSun"
+    private static final int DOW_GE_DOM_MODE   = 3; // Day of week after day of month, "Sun>=15"
+    private static final int DOW_LE_DOM_MODE   = 4; // Day of week before day of month, "Sun<=21"
+
+    /**
+     * Constant for a rule specified as wall time.  Wall time is standard time
+     * for the onset rule, and daylight time for the end rule.  Most rules
+     * are specified as wall time.
+     */
+    static final int WALL_TIME = 0; // Zero for backward compatibility
+
+    /**
+     * Constant for a rule specified as standard time.
+     */
+    static final int STANDARD_TIME = 1;
+
+    /**
+     * Constant for a rule specified as UTC.  EU rules are specified as UTC
+     * time.
+     */
+    static final int UTC_TIME = 2;
+
+    // Proclaim compatibility with 1.1
+    static final long serialVersionUID = -403250971215465050L;
+
+    // the internal serial version which says which version was written
+    // - 0 (default) for version up to JDK 1.1.3
+    // - 1 for version from JDK 1.1.4, which includes 3 new fields
+    // - 2 for JDK 1.3, which includes 2 new files
+    static final int currentSerialVersion = 2;
+
+    /**
+     * The version of the serialized data on the stream.  Possible values:
+     * <dl>
+     * <dt><b>0</b> or not present on stream</dt>
+     * <dd>
+     * JDK 1.1.3 or earlier.
+     * </dd>
+     * <dt><b>1</b></dt>
+     * <dd>
+     * JDK 1.1.4 or later.  Includes three new fields: <code>startMode</code>,
+     * <code>endMode</code>, and <code>dstSavings</code>.
+     * </dd>
+     * <dt><b>2</b></dt>
+     * <dd>
+     * JDK 1.3 or later.  Includes two new fields: <code>startTimeMode</code>
+     * and <code>endTimeMode</code>.
+     * </dd>
+     * </dl>
+     * When streaming out this class, the most recent format
+     * and the highest allowable <code>serialVersionOnStream</code>
+     * is written.
+     * @serial
+     * @since JDK1.1.4
+     */
+    private int serialVersionOnStream = currentSerialVersion;
+
+    //----------------------------------------------------------------------
+    // Rule representation
+    //
+    // We represent the following flavors of rules:
+    //       5        the fifth of the month
+    //       lastSun  the last Sunday in the month
+    //       lastMon  the last Monday in the month
+    //       Sun>=8   first Sunday on or after the eighth
+    //       Sun<=25  last Sunday on or before the 25th
+    // This is further complicated by the fact that we need to remain
+    // backward compatible with the 1.1 FCS.  Finally, we need to minimize
+    // API changes.  In order to satisfy these requirements, we support
+    // three representation systems, and we translate between them.
+    //
+    // INTERNAL REPRESENTATION
+    // This is the format SimpleTimeZone objects take after construction or
+    // streaming in is complete.  Rules are represented directly, using an
+    // unencoded format.  We will discuss the start rule only below; the end
+    // rule is analogous.
+    //   startMode      Takes on enumerated values DAY_OF_MONTH,
+    //                  DOW_IN_MONTH, DOW_AFTER_DOM, or DOW_BEFORE_DOM.
+    //   startDay       The day of the month, or for DOW_IN_MONTH mode, a
+    //                  value indicating which DOW, such as +1 for first,
+    //                  +2 for second, -1 for last, etc.
+    //   startDayOfWeek The day of the week.  Ignored for DAY_OF_MONTH.
+    //
+    // ENCODED REPRESENTATION
+    // This is the format accepted by the constructor and by setStartRule()
+    // and setEndRule().  It uses various combinations of positive, negative,
+    // and zero values to encode the different rules.  This representation
+    // allows us to specify all the different rule flavors without altering
+    // the API.
+    //   MODE              startMonth    startDay    startDayOfWeek
+    //   DOW_IN_MONTH_MODE >=0           !=0         >0
+    //   DOM_MODE          >=0           >0          ==0
+    //   DOW_GE_DOM_MODE   >=0           >0          <0
+    //   DOW_LE_DOM_MODE   >=0           <0          <0
+    //   (no DST)          don't care    ==0         don't care
+    //
+    // STREAMED REPRESENTATION
+    // We must retain binary compatibility with the 1.1 FCS.  The 1.1 code only
+    // handles DOW_IN_MONTH_MODE and non-DST mode, the latter indicated by the
+    // flag useDaylight.  When we stream an object out, we translate into an
+    // approximate DOW_IN_MONTH_MODE representation so the object can be parsed
+    // and used by 1.1 code.  Following that, we write out the full
+    // representation separately so that contemporary code can recognize and
+    // parse it.  The full representation is written in a "packed" format,
+    // consisting of a version number, a length, and an array of bytes.  Future
+    // versions of this class may specify different versions.  If they wish to
+    // include additional data, they should do so by storing them after the
+    // packed representation below.
+    //----------------------------------------------------------------------
+
+    /**
+     * Given a set of encoded rules in startDay and startDayOfMonth, decode
+     * them and set the startMode appropriately.  Do the same for endDay and
+     * endDayOfMonth.  Upon entry, the day of week variables may be zero or
+     * negative, in order to indicate special modes.  The day of month
+     * variables may also be negative.  Upon exit, the mode variables will be
+     * set, and the day of week and day of month variables will be positive.
+     * This method also recognizes a startDay or endDay of zero as indicating
+     * no DST.
+     */
+    private void decodeRules()
+    {
+        decodeStartRule();
+        decodeEndRule();
+    }
+
+    /**
+     * Decode the start rule and validate the parameters.  The parameters are
+     * expected to be in encoded form, which represents the various rule modes
+     * by negating or zeroing certain values.  Representation formats are:
+     * <p>
+     * <pre>
+     *            DOW_IN_MONTH  DOM    DOW>=DOM  DOW<=DOM  no DST
+     *            ------------  -----  --------  --------  ----------
+     * month       0..11        same    same      same     don't care
+     * day        -5..5         1..31   1..31    -1..-31   0
+     * dayOfWeek   1..7         0      -1..-7    -1..-7    don't care
+     * time        0..ONEDAY    same    same      same     don't care
+     * </pre>
+     * The range for month does not include UNDECIMBER since this class is
+     * really specific to GregorianCalendar, which does not use that month.
+     * The range for time includes ONEDAY (vs. ending at ONEDAY-1) because the
+     * end rule is an exclusive limit point.  That is, the range of times that
+     * are in DST include those >= the start and < the end.  For this reason,
+     * it should be possible to specify an end of ONEDAY in order to include the
+     * entire day.  Although this is equivalent to time 0 of the following day,
+     * it's not always possible to specify that, for example, on December 31.
+     * While arguably the start range should still be 0..ONEDAY-1, we keep
+     * the start and end ranges the same for consistency.
+     */
+    private void decodeStartRule() {
+        useDaylight = (startDay != 0) && (endDay != 0);
+        if (startDay != 0) {
+            if (startMonth < Calendar.JANUARY || startMonth > Calendar.DECEMBER) {
+                throw new IllegalArgumentException(
+                        "Illegal start month " + startMonth);
+            }
+            if (startTime < 0 || startTime >= millisPerDay) {
+                throw new IllegalArgumentException(
+                        "Illegal start time " + startTime);
+            }
+            if (startDayOfWeek == 0) {
+                startMode = DOM_MODE;
+            } else {
+                if (startDayOfWeek > 0) {
+                    startMode = DOW_IN_MONTH_MODE;
+                } else {
+                    startDayOfWeek = -startDayOfWeek;
+                    if (startDay > 0) {
+                        startMode = DOW_GE_DOM_MODE;
+                    } else {
+                        startDay = -startDay;
+                        startMode = DOW_LE_DOM_MODE;
+                    }
+                }
+                if (startDayOfWeek > Calendar.SATURDAY) {
+                    throw new IllegalArgumentException(
+                           "Illegal start day of week " + startDayOfWeek);
+                }
+            }
+            if (startMode == DOW_IN_MONTH_MODE) {
+                if (startDay < -5 || startDay > 5) {
+                    throw new IllegalArgumentException(
+                            "Illegal start day of week in month " + startDay);
+                }
+            } else if (startDay < 1 || startDay > staticMonthLength[startMonth]) {
+                throw new IllegalArgumentException(
+                        "Illegal start day " + startDay);
+            }
+        }
+    }
+
+    /**
+     * Decode the end rule and validate the parameters.  This method is exactly
+     * analogous to decodeStartRule().
+     * @see decodeStartRule
+     */
+    private void decodeEndRule() {
+        useDaylight = (startDay != 0) && (endDay != 0);
+        if (endDay != 0) {
+            if (endMonth < Calendar.JANUARY || endMonth > Calendar.DECEMBER) {
+                throw new IllegalArgumentException(
+                        "Illegal end month " + endMonth);
+            }
+            if (endTime < 0 || endTime >= millisPerDay) {
+                throw new IllegalArgumentException(
+                        "Illegal end time " + endTime);
+            }
+            if (endDayOfWeek == 0) {
+                endMode = DOM_MODE;
+            } else {
+                if (endDayOfWeek > 0) {
+                    endMode = DOW_IN_MONTH_MODE;
+                } else {
+                    endDayOfWeek = -endDayOfWeek;
+                    if (endDay > 0) {
+                        endMode = DOW_GE_DOM_MODE;
+                    } else {
+                        endDay = -endDay;
+                        endMode = DOW_LE_DOM_MODE;
+                    }
+                }
+                if (endDayOfWeek > Calendar.SATURDAY) {
+                    throw new IllegalArgumentException(
+                           "Illegal end day of week " + endDayOfWeek);
+                }
+            }
+            if (endMode == DOW_IN_MONTH_MODE) {
+                if (endDay < -5 || endDay > 5) {
+                    throw new IllegalArgumentException(
+                            "Illegal end day of week in month " + endDay);
+                }
+            } else if (endDay < 1 || endDay > staticMonthLength[endMonth]) {
+                throw new IllegalArgumentException(
+                        "Illegal end day " + endDay);
+            }
+        }
+    }
+
+    /**
+     * Make rules compatible to 1.1 FCS code.  Since 1.1 FCS code only understands
+     * day-of-week-in-month rules, we must modify other modes of rules to their
+     * approximate equivalent in 1.1 FCS terms.  This method is used when streaming
+     * out objects of this class.  After it is called, the rules will be modified,
+     * with a possible loss of information.  startMode and endMode will NOT be
+     * altered, even though semantically they should be set to DOW_IN_MONTH_MODE,
+     * since the rule modification is only intended to be temporary.
+     */
+    private void makeRulesCompatible()
+    {
+        switch (startMode)
+        {
+        case DOM_MODE:
+            startDay = 1 + (startDay / 7);
+            startDayOfWeek = Calendar.SUNDAY;
+            break;
+        case DOW_GE_DOM_MODE:
+            // A day-of-month of 1 is equivalent to DOW_IN_MONTH_MODE
+            // that is, Sun>=1 == firstSun.
+            if (startDay != 1)
+                startDay = 1 + (startDay / 7);
+            break;
+        case DOW_LE_DOM_MODE:
+            if (startDay >= 30)
+                startDay = -1;
+            else
+                startDay = 1 + (startDay / 7);
+            break;
+        }
+
+        switch (endMode)
+        {
+        case DOM_MODE:
+            endDay = 1 + (endDay / 7);
+            endDayOfWeek = Calendar.SUNDAY;
+            break;
+        case DOW_GE_DOM_MODE:
+            // A day-of-month of 1 is equivalent to DOW_IN_MONTH_MODE
+            // that is, Sun>=1 == firstSun.
+            if (endDay != 1)
+                endDay = 1 + (endDay / 7);
+            break;
+        case DOW_LE_DOM_MODE:
+            if (endDay >= 30)
+                endDay = -1;
+            else
+                endDay = 1 + (endDay / 7);
+            break;
+        }
+
+        /* Adjust the start and end times to wall time.  This works perfectly
+         * well unless it pushes into the next or previous day.  If that
+         * happens, we attempt to adjust the day rule somewhat crudely.  The day
+         * rules have been forced into DOW_IN_MONTH mode already, so we change
+         * the day of week to move forward or back by a day.  It's possible to
+         * make a more refined adjustment of the original rules first, but in
+         * most cases this extra effort will go to waste once we adjust the day
+         * rules anyway. */
+        switch (startTimeMode) {
+        case UTC_TIME:
+            startTime += rawOffset;
+            break;
+        }
+        while (startTime < 0) {
+            startTime += millisPerDay;
+            startDayOfWeek = 1 + ((startDayOfWeek+5) % 7); // Back 1 day
+        }
+        while (startTime >= millisPerDay) {
+            startTime -= millisPerDay;
+            startDayOfWeek = 1 + (startDayOfWeek % 7); // Forward 1 day
+        }
+
+        switch (endTimeMode) {
+        case UTC_TIME:
+            endTime += rawOffset + dstSavings;
+            break;
+        case STANDARD_TIME:
+            endTime += dstSavings;
+        }
+        while (endTime < 0) {
+            endTime += millisPerDay;
+            endDayOfWeek = 1 + ((endDayOfWeek+5) % 7); // Back 1 day
+        }
+        while (endTime >= millisPerDay) {
+            endTime -= millisPerDay;
+            endDayOfWeek = 1 + (endDayOfWeek % 7); // Forward 1 day
+        }
+    }
+
+    /**
+     * Pack the start and end rules into an array of bytes.  Only pack
+     * data which is not preserved by makeRulesCompatible.
+     */
+    private byte[] packRules()
+    {
+        byte[] rules = new byte[6];
+        rules[0] = (byte)startDay;
+        rules[1] = (byte)startDayOfWeek;
+        rules[2] = (byte)endDay;
+        rules[3] = (byte)endDayOfWeek;
+
+        // As of serial version 2, include time modes
+        rules[4] = (byte)startTimeMode;
+        rules[5] = (byte)endTimeMode;
+
+        return rules;
+    }
+
+    /**
+     * Given an array of bytes produced by packRules, interpret them
+     * as the start and end rules.
+     */
+    private void unpackRules(byte[] rules)
+    {
+        startDay       = rules[0];
+        startDayOfWeek = rules[1];
+        endDay         = rules[2];
+        endDayOfWeek   = rules[3];
+
+        // As of serial version 2, include time modes
+        if (rules.length >= 6) {
+            startTimeMode = rules[4];
+            endTimeMode   = rules[5];
+        }
+    }
+
+    /**
+     * Pack the start and end times into an array of bytes.  This is required
+     * as of serial version 2.
+     */
+    private int[] packTimes() {
+        int[] times = new int[2];
+        times[0] = startTime;
+        times[1] = endTime;
+        return times;
+    }
+
+    /**
+     * Unpack the start and end times from an array of bytes.  This is required
+     * as of serial version 2.
+     */
+    private void unpackTimes(int[] times) {
+        startTime = times[0];
+        endTime = times[1];
+    }
+
+    /**
+     * Save the state of this object to a stream (i.e., serialize it).
+     *
+     * @serialData We write out two formats, a JDK 1.1 compatible format, using
+     * <code>DOW_IN_MONTH_MODE</code> rules, in the required section, followed
+     * by the full rules, in packed format, in the optional section.  The
+     * optional section will be ignored by JDK 1.1 code upon stream in.
+     * <p> Contents of the optional section: The length of a byte array is
+     * emitted (int); this is 4 as of this release. The byte array of the given
+     * length is emitted. The contents of the byte array are the true values of
+     * the fields <code>startDay</code>, <code>startDayOfWeek</code>,
+     * <code>endDay</code>, and <code>endDayOfWeek</code>.  The values of these
+     * fields in the required section are approximate values suited to the rule
+     * mode <code>DOW_IN_MONTH_MODE</code>, which is the only mode recognized by
+     * JDK 1.1.
+     */
+    private void writeObject(ObjectOutputStream stream)
+         throws IOException
+    {
+        // Construct a binary rule
+        byte[] rules = packRules();
+        int[] times = packTimes();
+
+        // Convert to 1.1 FCS rules.  This step may cause us to lose information.
+        makeRulesCompatible();
+
+        // Write out the 1.1 FCS rules
+        stream.defaultWriteObject();
+
+        // Write out the binary rules in the optional data area of the stream.
+        stream.writeInt(rules.length);
+        stream.write(rules);
+        stream.writeObject(times);
+
+        // Recover the original rules.  This recovers the information lost
+        // by makeRulesCompatible.
+        unpackRules(rules);
+        unpackTimes(times);
+    }
+
+    /**
+     * Reconstitute this object from a stream (i.e., deserialize it).
+     *
+     * We handle both JDK 1.1
+     * binary formats and full formats with a packed byte array.
+     */
+    private void readObject(ObjectInputStream stream)
+         throws IOException, ClassNotFoundException
+    {
+        stream.defaultReadObject();
+
+        if (serialVersionOnStream < 1)
+        {
+            // Fix a bug in the 1.1 SimpleTimeZone code -- namely,
+            // startDayOfWeek and endDayOfWeek were usually uninitialized.  We can't do
+            // too much, so we assume SUNDAY, which actually works most of the time.
+            if (startDayOfWeek == 0) startDayOfWeek = Calendar.SUNDAY;
+            if (endDayOfWeek == 0) endDayOfWeek = Calendar.SUNDAY;
+
+            // The variables dstSavings, startMode, and endMode are post-1.1, so they
+            // won't be present if we're reading from a 1.1 stream.  Fix them up.
+            startMode = endMode = DOW_IN_MONTH_MODE;
+            dstSavings = millisPerHour;
+        }
+        else
+        {
+            // For 1.1.4, in addition to the 3 new instance variables, we also
+            // store the actual rules (which have not be made compatible with 1.1)
+            // in the optional area.  Read them in here and parse them.
+            int length = stream.readInt();
+            byte[] rules = new byte[length];
+            stream.readFully(rules);
+            unpackRules(rules);
+        }
+
+        if (serialVersionOnStream >= 2) {
+            int[] times = (int[]) stream.readObject();
+            unpackTimes(times);
+        }
+
+        serialVersionOnStream = currentSerialVersion;
+    }
+}
+
+//eof
diff --git a/src/com/ibm/util/SimpleTimeZoneAdapter.java b/src/com/ibm/util/SimpleTimeZoneAdapter.java
new file mode 100755
index 0000000..7fc8f16
--- /dev/null
+++ b/src/com/ibm/util/SimpleTimeZoneAdapter.java
@@ -0,0 +1,157 @@
+/* Copyright (c) 2000 International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/SimpleTimeZoneAdapter.java,v $ 
+ * $Date: 2000/05/12 23:20:11 $ 
+ * $Revision: 1.1 $
+ */
+package com.ibm.util;
+import java.util.Date;
+
+/**
+ * <code>SimpleTimeZoneAdapter</code> wraps a
+ * com.ibm.util.SimpleTimeZone and inherits from java.util.TimeZone.
+ * Without this class, we would need to 'port' java.util.Date to
+ * com.ibm.util as well, so that Date could interoperate properly with
+ * the com.ibm.util TimeZone and Calendar classes.  With this class,
+ * we can (mostly) use java.util.Date together with com.ibm.util
+ * classes.
+ *
+ * <p>This solution is imperfect because of the faulty design of
+ * java.util.TimeZone.  Specifically, TZ contains a package private
+ * method, getOffset(), that should really be public.  Because it is
+ * package private, it cannot be overridden from where we are, and we
+ * cannot properly delegate its operation to our contained
+ * com.ibm.util.STZ object.
+ *
+ * <p>For the moment we live with this problem.  It appear not to
+ * cause too much trouble since most real computations happen using
+ * the com.ibm.util classes.  However, if this becomes a problem in
+ * the future, we will have to stop using this adapter, and 'port'
+ * java.util.Date into com.ibm.util.
+ *
+ * @see com.ibm.util.TimeZone#setDefault
+ * @author Alan Liu
+ */
+public class SimpleTimeZoneAdapter extends java.util.TimeZone {
+
+    /**
+     * The contained com.ibm.util.SimpleTimeZone object.
+     * We delegate all methods to this object.
+     */
+    private SimpleTimeZone zone;
+
+    public SimpleTimeZoneAdapter(SimpleTimeZone zone) {
+        this.zone = zone;
+    }
+
+    /**
+     * Override TimeZone
+     */
+    public String getID() {
+        return zone.getID();
+    }
+
+    /**
+     * Override TimeZone
+     */
+    public void setID(String ID) {
+        zone.setID(ID);
+    }    
+
+    /**
+     * Override TimeZone
+     */
+    public boolean hasSameRules(java.util.TimeZone other) {
+        return other instanceof SimpleTimeZoneAdapter &&
+            zone.hasSameRules(((SimpleTimeZoneAdapter)other).zone);
+    }
+
+    /**
+     * Override TimeZone
+     */
+    public int getOffset(int era, int year, int month, int day, int dayOfWeek,
+                         int millis) {
+        return zone.getOffset(era, year, month, day, dayOfWeek, millis);
+    }
+
+    // This doesn't work! Because this is a package-private method,
+    // it cannot override the corresponding method in java.util.TZ.
+    // This reflects a fundamental bug in the architecture of
+    // java.util.TZ.  If not for this, this adapter class would
+    // work flawlessly. - liu
+//!    /**
+//!     * Override TimeZone
+//!     */
+//!    int getOffset(int era, int year, int month, int day, int dayOfWeek,
+//!                  int millis, int monthLength, int prevMonthLength) {
+//!        return zone.getOffset(era, year, month, day, dayOfWeek,
+//!                              millis, monthLength, prevMonthLength);
+//!    }
+
+    /**
+     * Overrides TimeZone
+     * Gets the GMT offset for this time zone.
+     */
+    public int getRawOffset() {
+        return zone.getRawOffset();
+    }
+
+    /**
+     * Overrides TimeZone
+     */
+    public void setRawOffset(int offsetMillis) {
+        zone.setRawOffset(offsetMillis);
+    }
+
+    /**
+     * Overrides TimeZone
+     */
+    public boolean useDaylightTime() {
+        return zone.useDaylightTime();
+    }
+
+    /**
+     * Overrides TimeZone
+     */
+    public boolean inDaylightTime(Date date) {
+        return zone.inDaylightTime(date);
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone() {
+        return new SimpleTimeZoneAdapter((SimpleTimeZone)zone.clone());
+    }
+
+    /**
+     * Override hashCode.
+     */
+    public synchronized int hashCode() {
+        return zone.hashCode();
+    }
+
+    /**
+     * Compares the equality of two SimpleTimeZone objects.
+     *
+     * @param obj  The SimpleTimeZone object to be compared with.
+     * @return     True if the given obj is the same as this SimpleTimeZone
+     *             object; false otherwise.
+     */
+    public boolean equals(Object obj) {
+        if (obj instanceof SimpleTimeZoneAdapter) {
+            obj = ((SimpleTimeZoneAdapter)obj).zone;
+        }
+        return zone.equals(obj);
+    }
+
+    /**
+     * Return a string representation of this time zone.
+     * @return  a string representation of this time zone.
+     */
+    public String toString() {
+        // Should probably show our class name here...fix later.
+        return zone.toString();
+    }
+}
diff --git a/src/com/ibm/util/TimeZone.java b/src/com/ibm/util/TimeZone.java
new file mode 100755
index 0000000..60c4098
--- /dev/null
+++ b/src/com/ibm/util/TimeZone.java
@@ -0,0 +1,705 @@
+/*
+ * @(#)TimeZone.java	1.51 00/01/19
+ *
+ * Copyright 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
+ * 
+ * This software is the proprietary information of Sun Microsystems, Inc.  
+ * Use is subject to license terms.
+ * 
+ */
+
+/*
+ * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1996 - All Rights Reserved
+ *
+ *   The original version of this source code and documentation is copyrighted
+ * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
+ * materials are provided under terms of a License Agreement between Taligent
+ * and Sun. This technology is protected by multiple US and International
+ * patents. This notice and attribution to Taligent may not be removed.
+ *   Taligent is a registered trademark of Taligent, Inc.
+ *
+ */
+
+package com.ibm.util;
+import java.io.Serializable;
+import java.lang.ref.SoftReference;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import com.ibm.text.SimpleDateFormat;
+import com.ibm.text.NumberFormat;
+import java.text.ParsePosition;
+import sun.security.action.GetPropertyAction;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Locale;
+import java.util.Vector;
+
+/**
+ * <code>TimeZone</code> represents a time zone offset, and also figures out daylight
+ * savings.
+ *
+ * <p>
+ * Typically, you get a <code>TimeZone</code> using <code>getDefault</code>
+ * which creates a <code>TimeZone</code> based on the time zone where the program
+ * is running. For example, for a program running in Japan, <code>getDefault</code>
+ * creates a <code>TimeZone</code> object based on Japanese Standard Time.
+ *
+ * <p>
+ * You can also get a <code>TimeZone</code> using <code>getTimeZone</code>
+ * along with a time zone ID. For instance, the time zone ID for the
+ * U.S. Pacific Time zone is "America/Los_Angeles". So, you can get a
+ * U.S. Pacific Time <code>TimeZone</code> object with:
+ * <blockquote>
+ * <pre>
+ * TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
+ * </pre>
+ * </blockquote>
+ * You can use <code>getAvailableIDs</code> method to iterate through
+ * all the supported time zone IDs. You can then choose a
+ * supported ID to get a <code>TimeZone</code>.
+ * If the time zone you want is not represented by one of the
+ * supported IDs, then you can create a custom time zone ID with
+ * the following syntax:
+ *
+ * <blockquote>
+ * <pre>
+ * GMT[+|-]hh[[:]mm]
+ * </pre>
+ * </blockquote>
+ *
+ * For example, you might specify GMT+14:00 as a custom
+ * time zone ID.  The <code>TimeZone</code> that is returned
+ * when you specify a custom time zone ID does not include
+ * daylight savings time.
+ * <p>
+ * For compatibility with JDK 1.1.x, some other three-letter time zone IDs
+ * (such as "PST", "CTT", "AST") are also supported. However, <strong>their
+ * use is deprecated</strong> because the same abbreviation is often used
+ * for multiple time zones (for example, "CST" could be U.S. "Central Standard
+ * Time" and "China Standard Time"), and the Java platform can then only
+ * recognize one of them.
+ *
+ *
+ * @see          Calendar
+ * @see          GregorianCalendar
+ * @see          SimpleTimeZone
+ * @version      1.51 01/19/00
+ * @author       Mark Davis, David Goldsmith, Chen-Lieh Huang, Alan Liu
+ * @since        JDK1.1
+ */
+abstract public class TimeZone implements Serializable, Cloneable {
+    /**
+     * Sole constructor.  (For invocation by subclass constructors, typically
+     * implicit.)
+     */
+    public TimeZone() {
+    }
+
+    /**
+     * A style specifier for <code>getDisplayName()</code> indicating
+     * a short name, such as "PST."
+     * @see #LONG
+     * @since 1.2
+     */
+    public static final int SHORT = 0;
+
+    /**
+     * A style specifier for <code>getDisplayName()</code> indicating
+     * a long name, such as "Pacific Standard Time."
+     * @see #SHORT
+     * @since 1.2
+     */
+    public static final int LONG  = 1;
+
+    // Constants used internally; unit is milliseconds
+    private static final int ONE_MINUTE = 60*1000;
+    private static final int ONE_HOUR   = 60*ONE_MINUTE;
+    private static final int ONE_DAY    = 24*ONE_HOUR;
+
+    /**
+     * Cache to hold the SimpleDateFormat objects for a Locale.
+     */
+    private static Hashtable cachedLocaleData = new Hashtable(3);
+
+    // Proclaim serialization compatibility with JDK 1.1
+    static final long serialVersionUID = 3581463369166924961L;
+
+    /**
+     * Gets the time zone offset, for current date, modified in case of
+     * daylight savings. This is the offset to add *to* UTC to get local time.
+     * @param era the era of the given date.
+     * @param year the year in the given date.
+     * @param month the month in the given date.
+     * Month is 0-based. e.g., 0 for January.
+     * @param day the day-in-month of the given date.
+     * @param dayOfWeek the day-of-week of the given date.
+     * @param milliseconds the millis in day in <em>standard</em> local time.
+     * @return the offset to add *to* GMT to get local time.
+     */
+    abstract public int getOffset(int era, int year, int month, int day,
+                                  int dayOfWeek, int milliseconds);
+
+    /**
+     * Gets the time zone offset, for current date, modified in case of
+     * daylight savings. This is the offset to add *to* UTC to get local time.
+     * @param era the era of the given date.
+     * @param year the year in the given date.
+     * @param month the month in the given date.
+     * Month is 0-based. e.g., 0 for January.
+     * @param day the day-in-month of the given date.
+     * @param dayOfWeek the day-of-week of the given date.
+     * @param milliseconds the millis in day in <em>standard</em> local time.
+     * @param monthLength the length of the given month in days.
+     * @param prevMonthLength the length of the previous month in days.
+     * @return the offset to add *to* GMT to get local time.
+     */
+    int getOffset(int era, int year, int month, int day,
+		  int dayOfWeek, int milliseconds, int monthLength, int prevMonthLength) {
+	// Default implementation which ignores the monthLength.
+	// SimpleTimeZone overrides this and actually uses monthLength.
+	return getOffset(era, year, month, day, dayOfWeek, milliseconds);
+    }
+    
+    /**
+     * NEWCAL
+     * Gets the local time zone offset for this zone, for the given date.
+     * @param eyear the extended Gregorian year, with 0 = 1 BC, -1 = 2 BC,
+     * etc.
+     */
+    int getOffset(int eyear, int month, int dayOfMonth, int dayOfWeek,
+                  int milliseconds, int monthLength, int prevMonthLength) {
+        // TEMPORARY: Convert the eyear to an era/year and call old API
+        int era = GregorianCalendar.AD;
+        if (eyear < 1) {
+            era = GregorianCalendar.BC;
+            eyear = 1 - eyear;
+        }
+        return getOffset(era, eyear, month, dayOfMonth, dayOfWeek,
+                         milliseconds, monthLength, prevMonthLength);
+    }
+
+    /**
+     * Sets the base time zone offset to GMT.
+     * This is the offset to add *to* UTC to get local time.
+     * @param offsetMillis the given base time zone offset to GMT.
+     */
+    abstract public void setRawOffset(int offsetMillis);
+
+    /**
+     * Gets unmodified offset, NOT modified in case of daylight savings.
+     * This is the offset to add *to* UTC to get local time.
+     * @return the unmodified offset to add *to* UTC to get local time.
+     */
+    abstract public int getRawOffset();
+
+    /**
+     * Gets the ID of this time zone.
+     * @return the ID of this time zone.
+     */
+    public String getID()
+    {
+        return ID;
+    }
+
+    /**
+     * Sets the time zone ID. This does not change any other data in
+     * the time zone object.
+     * @param ID the new time zone ID.
+     */
+    public void setID(String ID)
+    {
+        if (ID == null) {
+            throw new NullPointerException();
+        }
+        this.ID = ID;
+    }
+
+    /**
+     * Returns a name of this time zone suitable for presentation to the user
+     * in the default locale.
+     * This method returns the long name, not including daylight savings.
+     * If the display name is not available for the locale,
+     * then this method returns a string in the format
+     * <code>GMT[+-]hh:mm</code>.
+     * @return the human-readable name of this time zone in the default locale.
+     * @since 1.2
+     */
+    public final String getDisplayName() {
+        return getDisplayName(false, LONG, Locale.getDefault());
+    }
+
+    /**
+     * Returns a name of this time zone suitable for presentation to the user
+     * in the specified locale.
+     * This method returns the long name, not including daylight savings.
+     * If the display name is not available for the locale,
+     * then this method returns a string in the format
+     * <code>GMT[+-]hh:mm</code>.
+     * @param locale the locale in which to supply the display name.
+     * @return the human-readable name of this time zone in the given locale
+     * or in the default locale if the given locale is not recognized.
+     * @since 1.2
+     */
+    public final String getDisplayName(Locale locale) {
+        return getDisplayName(false, LONG, locale);
+    }
+
+    /**
+     * Returns a name of this time zone suitable for presentation to the user
+     * in the default locale.
+     * If the display name is not available for the locale,
+     * then this method returns a string in the format
+     * <code>GMT[+-]hh:mm</code>.
+     * @param daylight if true, return the daylight savings name.
+     * @param style either <code>LONG</code> or <code>SHORT</code>
+     * @return the human-readable name of this time zone in the default locale.
+     * @since 1.2
+     */
+    public final String getDisplayName(boolean daylight, int style) {
+        return getDisplayName(daylight, style, Locale.getDefault());
+    }
+
+    /**
+     * Returns a name of this time zone suitable for presentation to the user
+     * in the specified locale.
+     * If the display name is not available for the locale,
+     * then this method returns a string in the format
+     * <code>GMT[+-]hh:mm</code>.
+     * @param daylight if true, return the daylight savings name.
+     * @param style either <code>LONG</code> or <code>SHORT</code>
+     * @param locale the locale in which to supply the display name.
+     * @return the human-readable name of this time zone in the given locale
+     * or in the default locale if the given locale is not recognized.
+     * @exception IllegalArgumentException style is invalid.
+     * @since 1.2
+     */
+    public String getDisplayName(boolean daylight, int style, Locale locale) {
+        /* NOTES:
+         * (1) We use SimpleDateFormat for simplicity; we could do this
+         * more efficiently but it would duplicate the SimpleDateFormat code
+         * here, which is undesirable.
+         * (2) Attempts to move the code from SimpleDateFormat to here also run
+         * aground because this requires SimpleDateFormat to keep a Locale
+         * object around, which it currently doesn't; to synthesize such a
+         * locale upon resurrection; and to somehow handle the special case of
+         * construction from a DateFormatSymbols object.
+         */
+        if (style != SHORT && style != LONG) {
+            throw new IllegalArgumentException("Illegal style: " + style);
+        }
+        // We keep a cache, indexed by locale.  The cache contains a
+        // SimpleDateFormat object, which we create on demand.
+        SoftReference data = (SoftReference)cachedLocaleData.get(locale);
+        SimpleDateFormat format;
+        if (data == null ||
+            (format = (SimpleDateFormat)data.get()) == null) {
+            format = new SimpleDateFormat(null, locale);
+            cachedLocaleData.put(locale, new SoftReference(format));
+        }
+        // Create a new SimpleTimeZone as a stand-in for this zone; the stand-in
+        // will have no DST, or DST during January, but the same ID and offset,
+        // and hence the same display name.  We don't cache these because
+        // they're small and cheap to create.
+        SimpleTimeZone tz;
+        if (daylight && useDaylightTime()) {
+            int savings = ONE_HOUR;
+            try {
+                savings = ((SimpleTimeZone) this).getDSTSavings();
+            } catch (ClassCastException e) {}
+            tz = new SimpleTimeZone(getRawOffset(), getID(),
+                                    Calendar.JANUARY, 1, 0, 0,
+                                    Calendar.FEBRUARY, 1, 0, 0,
+                                    savings);
+        } else {
+            tz = new SimpleTimeZone(getRawOffset(), getID());
+        }
+        format.applyPattern(style == LONG ? "zzzz" : "z");      
+        format.setTimeZone(tz);
+        // Format a date in January.  We use the value 10*ONE_DAY == Jan 11 1970
+        // 0:00 GMT.
+        return format.format(new Date(864000000L));
+    }
+
+    /**
+     * Queries if this time zone uses daylight savings time.
+     * @return true if this time zone uses daylight savings time,
+     * false, otherwise.
+     */
+    abstract public boolean useDaylightTime();
+
+    /**
+     * Queries if the given date is in daylight savings time in
+     * this time zone.
+     * @param date the given Date.
+     * @return true if the given date is in daylight savings time,
+     * false, otherwise.
+     */
+    abstract public boolean inDaylightTime(Date date);
+
+    /**
+     * Gets the <code>TimeZone</code> for the given ID.
+     *
+     * @param ID the ID for a <code>TimeZone</code>, either an abbreviation
+     * such as "PST", a full name such as "America/Los_Angeles", or a custom
+     * ID such as "GMT-8:00". Note that the support of abbreviations is
+     * for JDK 1.1.x compatibility only and full names should be used.
+     *
+     * @return the specified <code>TimeZone</code>, or the GMT zone if the given ID
+     * cannot be understood.
+     */
+    public static synchronized TimeZone getTimeZone(String ID) {
+        /* We first try to lookup the zone ID in our hashtable.  If this fails,
+         * we try to parse it as a custom string GMT[+-]hh:mm.  This allows us
+         * to recognize zones in user.timezone that otherwise cannot be
+         * identified.  We do the recognition here, rather than in getDefault(),
+         * so that the default zone is always the result of calling
+         * getTimeZone() with the property user.timezone.
+         *
+         * If all else fails, we return GMT, which is probably not what the user
+         * wants, but at least is a functioning TimeZone object. */
+        TimeZone zone = TimeZoneData.get(ID);
+        if (zone == null) zone = parseCustomTimeZone(ID);
+        if (zone == null) zone = (TimeZone)GMT.clone();
+        return zone;
+    }
+
+    /**
+     * Return a new String array containing all system TimeZone IDs
+     * with the given raw offset from GMT.  These IDs may be passed to
+     * <code>get()</code> to construct the corresponding TimeZone
+     * object.
+     * @param rawOffset the offset in milliseconds from GMT
+     * @return an array of IDs for system TimeZones with the given
+     * raw offset.  If there are none, return a zero-length array.
+     */
+    public static String[] getAvailableIDs(int rawOffset) {
+        return TimeZoneData.getAvailableIDs(rawOffset);
+    }
+
+    /**
+     * Return a new String array containing all system TimeZone IDs
+     * associated with the given country.  These IDs may be passed to
+     * <code>get()</code> to construct the corresponding TimeZone
+     * object.
+     * @param a two-letter ISO 3166 country code, or <code>null</code>
+     * to return zones not associated with any country
+     * @return an array of IDs for system TimeZones in the given
+     * country.  If there are none, return a zero-length array.
+     */
+    public static String[] getAvailableIDs(String country) {
+        return TimeZoneData.getAvailableIDs(country);
+    }
+
+    /**
+     * Return a new String array containing all system TimeZone IDs.
+     * These IDs (and only these IDs) may be passed to
+     * <code>get()</code> to construct the corresponding TimeZone
+     * object.
+     * @return an array of all system TimeZone IDs
+     */
+    public static String[] getAvailableIDs() {
+        return TimeZoneData.getAvailableIDs();
+    }
+    
+    /**
+     * Returns the number of IDs in the equivalency group that
+     * includes the given ID.  An equivalency group contains zones
+     * that have the same GMT offset and rules.
+     *
+     * <p>The returned count includes the given ID; it is always >= 1
+     * for valid IDs.  The given ID must be a system time zone.  If it
+     * is not, returns zero.
+     * @param id a system time zone ID
+     * @return the number of zones in the equivalency group containing
+     * 'id', or zero if 'id' is not a valid system ID
+     * @see #getEquivalentID
+     */
+    public static int countEquivalentIDs(String id) {
+        return TimeZoneData.countEquivalentIDs(id);
+    }
+
+    /**
+     * Returns an ID in the equivalency group that
+     * includes the given ID.  An equivalency group contains zones
+     * that have the same GMT offset and rules.
+     *
+     * <p>The given index must be in the range 0..n-1, where n is the
+     * value returned by <code>countEquivalentIDs(id)</code>.  For
+     * some value of 'index', the returned value will be equal to the
+     * given id.  If the given id is not a valid system time zone, or
+     * if 'index' is out of range, then returns an empty string.
+     * @param id a system time zone ID
+     * @param index a value from 0 to n-1, where n is the value
+     * returned by <code>countEquivalentIDs(id)</code>
+     * @return the ID of the index-th zone in the equivalency group
+     * containing 'id', or an empty string if 'id' is not a valid
+     * system ID or 'index' is out of range
+     * @see #countEquivalentIDs
+     */
+    public static String getEquivalentID(String id, int index) {
+        return TimeZoneData.getEquivalentID(id, index);
+    }
+
+    /**
+     * Gets the platform defined TimeZone ID.
+     **/
+//    private static native String getSystemTimeZoneID(String javaHome, 
+//						     String region);
+
+    /**
+     * Gets the default <code>TimeZone</code> for this host.
+     * The source of the default <code>TimeZone</code> 
+     * may vary with implementation.
+     * @return a default <code>TimeZone</code>.
+     */
+    public static synchronized TimeZone getDefault() {
+        if (defaultZone == null) {
+            // The following causes an AccessControlException when run in an
+            // applet.  To get around this, we don't read the user.timezone
+            // property; instead we defer to TimeZone.getDefault(). - Liu
+            //!// get the time zone ID from the system properties
+            //!String zoneID = (String) AccessController.doPrivileged(
+            //!    new GetPropertyAction("user.timezone"));
+            //!
+	    //!// if the time zone ID is not set (yet), perform the
+	    //!// platform to Java time zone ID mapping.
+	    //!if (zoneID == null || zoneID.equals("")) { 
+		//String region = (String) AccessController.doPrivileged(
+		//    new GetPropertyAction("user.region"));
+		//String javaHome = (String) AccessController.doPrivileged(
+		//    new GetPropertyAction("java.home"));
+		//zoneID = getSystemTimeZoneID(javaHome, region);
+
+                // [icu4j We get the default zone by querying java.util.TimeZone,
+                //        and then attempting to map the ID. - liu ]
+                java.util.TimeZone _default = java.util.TimeZone.getDefault();
+                if (false) System.out.println("java.util.TZ.default " + _default);
+                String zoneID = _default.getID();
+                defaultZone = TimeZoneData.get(zoneID);
+                if (defaultZone == null) {
+                    // [icu4j This means that the zone returned by the JDK does
+                    // not exist in our table.  We will, for the moment, map to
+                    // a std zone that has the same raw offset.  In the future
+                    // we might find it worthwhile to extract the rules from the
+                    // system default zone, but this is too much trouble for
+                    // now.  It will be easier to extend our mapping table to
+                    // match the JDKs we want to support. - liu ]
+                    try {
+                        java.util.SimpleTimeZone s = (java.util.SimpleTimeZone) _default;
+                        defaultZone = new SimpleTimeZone(s.getRawOffset(), s.getID());
+                    } catch (ClassCastException e) {}
+                } else {
+                    if (zoneID == null) {
+                        zoneID = GMT_ID;
+                    }
+                    // Again, we can't do this from outside the JDK in an applet.
+                    //!final String id = zoneID;
+                    //!AccessController.doPrivileged(new PrivilegedAction() {
+                    //!    public Object run() {
+                    //!        System.setProperty("user.timezone", id);
+                    //!        return null;
+                    //!    }
+                    //!});
+                }
+            //!}
+            if (defaultZone == null) {
+                defaultZone = getTimeZone(zoneID);
+            }
+            if (false) System.out.println("com.ibm.util.TZ.default " + defaultZone);
+        }
+        return (TimeZone)defaultZone.clone();
+    }
+
+    /**
+     * Sets the <code>TimeZone</code> that is
+     * returned by the <code>getDefault</code> method.  If <code>zone</code>
+     * is null, reset the default to the value it had originally when the
+     * VM first started.
+     * @param zone the new default time zone
+     */
+    public static synchronized void setDefault(TimeZone zone)
+    {
+        defaultZone = zone;
+        // [icu4j Keep java.util.TimeZone default in sync so java.util.Date
+        //        can interoperate with com.ibm.util classes.  This solution
+        //        is _imperfect_; see SimpleTimeZoneAdapter. - liu]
+        try {
+            java.util.TimeZone.setDefault(
+                new SimpleTimeZoneAdapter((SimpleTimeZone) zone));
+        } catch (ClassCastException e) {}
+    }
+
+    /**
+     * Returns true if this zone has the same rule and offset as another zone.
+     * That is, if this zone differs only in ID, if at all.  Returns false
+     * if the other zone is null.
+     * @param other the <code>TimeZone</code> object to be compared with
+     * @return true if the other zone is not null and is the same as this one,
+     * with the possible exception of the ID
+     * @since 1.2
+     */
+    public boolean hasSameRules(TimeZone other) {
+        return other != null && getRawOffset() == other.getRawOffset() &&
+            useDaylightTime() == other.useDaylightTime();
+    }
+
+    /**
+     * Overrides Cloneable
+     */
+    public Object clone()
+    {
+        try {
+            TimeZone other = (TimeZone) super.clone();
+            other.ID = ID;
+            return other;
+        } catch (CloneNotSupportedException e) {
+            throw new InternalError();
+        }
+    }
+
+    // =======================privates===============================
+
+    /**
+     * The string identifier of this <code>TimeZone</code>.  This is a
+     * programmatic identifier used internally to look up <code>TimeZone</code>
+     * objects from the system table and also to map them to their localized
+     * display names.  <code>ID</code> values are unique in the system
+     * table but may not be for dynamically created zones.
+     * @serial
+     */
+    private String           ID;
+    private static TimeZone  defaultZone = null;
+
+    static final String         GMT_ID        = "GMT";
+    private static final int    GMT_ID_LENGTH = 3;
+    private static final String CUSTOM_ID     = "Custom";
+
+    private static NumberFormat numberFormat = null;
+
+    private static final TimeZone GMT = new SimpleTimeZone(0, GMT_ID);
+
+    /**
+     * Parse a custom time zone identifier and return a corresponding zone.
+     * @param id a string of the form GMT[+-]hh:mm, GMT[+-]hhmm, or
+     * GMT[+-]hh.
+     * @return a newly created SimpleTimeZone with the given offset and
+     * no daylight savings time, or null if the id cannot be parsed.
+     */
+    private static final SimpleTimeZone parseCustomTimeZone(String id) {
+        if (id.length() > GMT_ID_LENGTH &&
+            id.regionMatches(true, 0, GMT_ID, 0, GMT_ID_LENGTH)) {
+            ParsePosition pos = new ParsePosition(GMT_ID_LENGTH);
+            boolean negative = false;
+            int offset;
+
+            if (id.charAt(pos.getIndex()) == '-')
+                negative = true;
+            else if (id.charAt(pos.getIndex()) != '+')
+                return null;
+            pos.setIndex(pos.getIndex() + 1);
+
+            // Create NumberFormat if necessary
+            synchronized (TimeZone.class) {
+                if (numberFormat == null) {
+                    numberFormat = NumberFormat.getInstance();
+                    numberFormat.setParseIntegerOnly(true);
+                }
+            }
+
+            synchronized (numberFormat) {
+                // Look for either hh:mm, hhmm, or hh
+                int start = pos.getIndex();
+                Number n = numberFormat.parse(id, pos);
+                if (n == null) return null;
+                offset = n.intValue();
+
+                if (pos.getIndex() < id.length() &&
+                    id.charAt(pos.getIndex()) == ':') {
+                    // hh:mm
+                    offset *= 60;
+                    pos.setIndex(pos.getIndex() + 1);
+                    n = numberFormat.parse(id, pos);
+                    if (n == null) return null;
+                    offset += n.intValue();
+                }
+                else {
+                    // hhmm or hh
+
+                    // Be strict about interpreting something as hh; it must be
+                    // an offset < 30, and it must be one or two digits. Thus
+                    // 0010 is interpreted as 00:10, but 10 is interpreted as
+                    // 10:00.
+                    if (offset < 30 && (pos.getIndex() - start) <= 2)
+                        offset *= 60; // hh, from 00 to 29; 30 is 00:30
+                    else
+                        offset = offset % 100 + offset / 100 * 60; // hhmm
+                }
+
+                if (negative) offset = -offset;
+                return new SimpleTimeZone(offset * 60000, CUSTOM_ID);
+            }
+        }
+
+        return null;
+    }
+
+    // Internal Implementation Notes [LIU]
+    //
+    // TimeZone data is stored in two parts.  The first is an encoding of the
+    // rules for each TimeZone.  A TimeZone rule includes the offset of a zone
+    // in milliseconds from GMT, the starting month and day for daylight savings
+    // time, if there is any, and the ending month and day for daylight savings
+    // time.  The starting and ending days are specified in terms of the n-th
+    // day of the week, for instance, the first Sunday or the last ("-1"-th)
+    // Sunday of the month.  The rules are stored as statically-constructed
+    // SimpleTimeZone objects in the TimeZone class.
+    //
+    // Each rule has a unique internal identifier string which is used to
+    // specify it.  This identifier string is arbitrary, and is not to be shown
+    // to the user -- it is for programmatic use only.  In order to instantiate
+    // a TimeZone object, you pass its identifier string to
+    // TimeZone.getTimeZone().  (This identifier is also used to index the
+    // localized string data.)
+    //
+    // The second part of the data consists of localized string names used by
+    // DateFormat to describe various TimeZones.  A TimeZone may have up to four
+    // names: The abbreviated and long name for standard time in that zone, and
+    // the abbreviated and long name for daylight savings time in that zone.
+    // The data also includes a representative city.  For example, [ "PST",
+    // "Pacific Standard Time", "PDT", "Pacific Daylight Time", "Los Angeles" ]
+    // might be one such set of string names in the en_US locale.  These strings
+    // are intended to be shown to the user.  The string data is indexed in the
+    // system by a pair (String id, Locale locale).  The id is the unique string
+    // identifier for the rule for the given TimeZone (as passed to
+    // TimeZone.getTimeZone()).  String names are stored as localized resource
+    // data of the class java.text.resources.DateFormatZoneData???  where ??? is
+    // the Locale specifier (e.g., DateFormatZoneData_en_US).  This data is a
+    // two-dimensional array of strings with N rows and 6 columns.  The columns
+    // are id, short standard name, long standard name, short daylight name,
+    // long daylight name, representative city name.
+    //
+    // The mapping between rules (SimpleTimeZone objects) and localized string
+    // names (DateFormatZoneData objects) is one-to-many.  That is, there will
+    // sometimes be more than one localized string name sets associated with
+    // each rule.
+    //
+    // Each locale can potentially have localized name data for all time zones.
+    // Since we support approximately 90 time zones and approximately 50
+    // locales, there can be over 4500 sets of localized names.  In practice,
+    // only a fraction of these names are provided.  If a time zone needs to be
+    // displayed to the user in a given locale, and there is no string data in
+    // that locale for that time zone, then the default representation will be
+    // shown.  This is a string of the form GMT+HHMM or GMT-HHMM, where HHMM
+    // represents the offset in hours and minutes with respect to GMT.  This
+    // format is used because it is recognized in all locales.  In order to make
+    // this mechanism to work, the root resource data (in the class
+    // DateFormatZoneData) is left empty.
+    //
+    // The current default TimeZone is determined via the system property
+    // user.timezone.  This is set by the platform-dependent native code to
+    // a three-letter abbreviation.  We interpret these into our own internal
+    // IDs using a lookup table.
+}
+
+//eof
diff --git a/src/com/ibm/util/TimeZoneData.java b/src/com/ibm/util/TimeZoneData.java
new file mode 100755
index 0000000..a68145f
--- /dev/null
+++ b/src/com/ibm/util/TimeZoneData.java
@@ -0,0 +1,1211 @@
+/*********************************************************************
+ * Copyright (C) 2001, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *********************************************************************
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/TimeZoneData.java,v $
+ * $Date: 2001/02/02 19:30:02 $
+ * $Revision: 1.3 $
+ */
+package com.ibm.util;
+import java.util.Hashtable;
+
+/**
+ * Internal class that encapsulates data about the system time zones.
+ * This includes the names of all zones, their raw offsets, their
+ * rules (for zones observing DST), and index tables that group
+ * together zones with the same raw offset, as well as zones that are
+ * equivalent (same raw offset and rules).
+ * 
+ * <p>This class contains two parts: A narrow API for instantiating
+ * the system zone objects and for obtaining metainformation
+ * (available zone lists and equivalency group lists), and blocks of
+ * compressed data that take the form of static strings or string
+ * arrays.  The compressed data is generated source code that cannot
+ * be hand edited.  It is derived from the standard UNIX zone data at
+ * ftp://elsie.nci.nih.gov/pub and is processed by the tool gentz
+ * located at icu/source/tools/gentz.  When the UNIX zone data
+ * changes, the gentz tool must be run to generate the new data and
+ * the compressed data blocks in this file and the new blocks must be
+ * pasted in.  For step-by-step instructions, see
+ * icu/source/tools/gentz/readme.txt.
+ *
+ * @author Alan Liu
+ */
+class TimeZoneData {
+
+    /**
+     * Construct and return the given system TimeZone, or return null if
+     * the given ID does not refer to a system TimeZone.
+     */
+    public static TimeZone get(String ID) {
+        int i = lookup(ID);
+        return (i<0) ? null : new SimpleTimeZone(ID, DATA, i);
+    }
+
+    /**
+     * Return a new String array containing all system TimeZone IDs.
+     * These IDs (and only these IDs) may be passed to
+     * <code>get()</code> to construct the corresponding TimeZone
+     * object.
+     * @return an array of all system TimeZone IDs
+     */
+    public static String[] getAvailableIDs() {
+        String[] result = new String[IDS.length];
+        System.arraycopy(IDS, 0, result, 0, IDS.length);
+        return result;
+    }
+
+    /**
+     * Return a new String array containing all system TimeZone IDs
+     * with the given raw offset from GMT.  These IDs may be passed to
+     * <code>get()</code> to construct the corresponding TimeZone
+     * object.
+     * @param rawOffset the offset in milliseconds from GMT
+     * @return an array of IDs for system TimeZones with the given
+     * raw offset.  If there are none, return a zero-length array.
+     */
+    public static String[] getAvailableIDs(int rawOffset) {
+        // Do a linear search; there are < 200 entries
+        for (int i=0; i<INDEX_BY_OFFSET.length;) {
+            int offset = INDEX_BY_OFFSET[i] * 1000;
+            if (offset > rawOffset) {
+                break;
+            }
+            if (offset == rawOffset) {
+                // Found our desired offset
+                int n = INDEX_BY_OFFSET[i+2];
+                String[] result = new String[n];
+                for (int j=0; j<n; ++j) {
+                    result[j] = IDS[INDEX_BY_OFFSET[i+3+j]];
+                }
+                return result;
+            }
+            // Advance to the next entry
+            i += INDEX_BY_OFFSET[i+2] + 3;
+        }
+        // Failed to find any; return empty array
+        return new String[0];
+    }
+ 
+    /**
+     * Return a new String array containing all system TimeZone IDs
+     * associated with the given country.  These IDs may be passed to
+     * <code>get()</code> to construct the corresponding TimeZone
+     * object.
+     * @param a two-letter ISO 3166 country code, or <code>null</code>
+     * to return zones not associated with any country
+     * @return an array of IDs for system TimeZones with the given
+     * raw offset.  If there are none, return a zero-length array.
+     */
+    public static String[] getAvailableIDs(String countryCode) {
+        // Construct our key; this is an integer of the form
+        // 32*n1 + n0, where 0<=n<=25.
+        int countryHash = 0;
+        if (countryCode != null) {
+            countryHash =
+                ((Character.toUpperCase(countryCode.charAt(0)) - 'A') << 5) |
+                (Character.toUpperCase(countryCode.charAt(1)) - 'A');
+        }
+
+        // Do a linear search; there are ~ 250 entries
+        for (int i=0; i<INDEX_BY_COUNTRY.length; ) {
+            if (countryHash == INDEX_BY_COUNTRY[i]) {
+                // Found the desired country
+                int n = INDEX_BY_COUNTRY[i+1];
+                String[] result = new String[n];
+                for (int j=0; j<n; ++j) {
+                    result[j] = IDS[INDEX_BY_COUNTRY[i+2+j]];
+                }
+                return result;
+            } else {
+                i += INDEX_BY_COUNTRY[i+1] + 2;
+            }
+        }
+        // Failed to find any; return empty array
+        return new String[0];
+    }
+
+    /**
+     * Returns the number of IDs in the equivalency group that
+     * includes the given ID.  An equivalency group contains zones
+     * that have the same GMT offset and rules.
+     *
+     * <p>The returned count includes the given ID; it is always >= 1
+     * for valid IDs.  The given ID must be a system time zone.  If it
+     * is not, returns zero.
+     * @param ID a system time zone ID
+     * @return the number of zones in the equivalency group containing
+     * 'ID', or zero if 'ID' is not a valid system ID
+     * @see #getEquivalentID
+     */
+    public static int countEquivalentIDs(String ID) {
+        int i = lookup(ID);
+        return (i<0) ? 0 : DATA[i + ((DATA[i+1]==0)?2:13)];
+    }
+
+    /**
+     * Returns an ID in the equivalency group that
+     * includes the given ID.  An equivalency group contains zones
+     * that have the same GMT offset and rules.
+     *
+     * <p>The given index must be in the range 0..n-1, where n is the
+     * value returned by <code>countEquivalentIDs(id)</code>.  For
+     * some value of 'index', the returned value will be equal to the
+     * given id.  If the given id is not a valid system time zone, or
+     * if 'index' is out of range, then returns an empty string.
+     * @param ID a system time zone ID
+     * @param index a value from 0 to n-1, where n is the value
+     * returned by <code>countEquivalentIDs(id)</code>
+     * @return the ID of the index-th zone in the equivalency group
+     * containing 'ID', or an empty string if 'ID' is not a valid
+     * system ID or 'index' is out of range
+     * @see #countEquivalentIDs
+     */
+    public static String getEquivalentID(String ID, int index) {
+        int i = lookup(ID);
+        if (i<0) {
+            return "";
+        }
+        int j = i + ((DATA[i+1]==0)?2:13);
+        return (index<DATA[j]) ? IDS[DATA[j+index+1]] : "";
+    }
+
+    /**
+     * Given an ID, return the equivalency group index (index of
+     * DATA[] for the start of the group's data) or -1 if not found.
+     */
+    static int lookup(String ID) {
+        Integer i = (Integer) INDEX_BY_NAME.get(ID);
+        return (i == null) ? -1 : i.intValue();
+    }
+
+    /**
+     * Equivalency group data in int[] form.  This is represented as a
+     * single flat array of ints for compactness.  Each equivalency
+     * group is represented by a sequence of ints of variable length.
+     * Groups are identified by a single integer, the offset to the
+     * start of the group.  If i is the offset to the start of the
+     * group, then the layout of data is:
+     *
+     * Offset  Data       Notes
+     * i+0     isDST      0 for standard zones, 1 for DST
+     * i+1     rawOffset  in seconds from GMT
+     * <DST zones contain additional entries here; see below>
+     * j+0     count      number of IDs to follow, >= 1
+     * j+1..k  IDs        indices into IDS[] array
+     * j+k+1   (next entry start)
+     *
+     * For standard zones, j = i+2.  For DST zones, j = i+13
+     * and the following entries apply:
+     *
+     * Offset  Data       Notes
+     * i+2     startMonth 0-based
+     * i+3     startDowim
+     * i+4     startDow  
+     * i+5     startTime  in minutes
+     * i+6     startMode  w/s/u encoded as 0/1/2
+     * i+7     endMonth   0-based
+     * i+8     endDowim
+     * i+9     endDow  
+     * i+10    endTime    in minutes
+     * i+11    endMode    w/s/u encoded as 0/1/2
+     * i+12     dstSavings in minutes
+     *
+     * A standard zone entry is 3+n ints long, and a DST zone entry is
+     * 14+n ints long, where n is count of IDs to follow (the value at
+     * j+0).
+     */
+    static int[] DATA;
+
+    /**
+     * Map from TimeZone ID to equivalency group offset.  This is an
+     * index into DATA.  The equivalency group data starts at DATA[i]
+     * and occupies the m ints that follow, where the value of m depends
+     * on whether the zone is standard or DST and how many IDs are in
+     * the group.
+     */
+    static final Hashtable INDEX_BY_NAME = new Hashtable();
+
+    /**
+     * Index of rawOffset to list of zones.  Entries are in order of 
+     * ascending rawOffset.  Format:
+     *
+     * Offset  Data       Notes
+     * i+0     rawOffset  in milliseconds from GMT
+     * i+1     default    default zone for this offset
+     * i+2     count      number of IDs to follow
+     * i+3..j  IDs        indices into IDS
+     * i+j+1   (next entry start)
+     *
+     * If the number of equivalency groups is n, then j=n+2.
+     *
+     * Equivalency group IDs are indices in DATA to the start of each
+     * equivalency group.
+     */
+    static int[] INDEX_BY_OFFSET;
+
+    /**
+     * Index by country to list of zones.  Entries are in order of 
+     * ascending country code.  Format:
+     *
+     * Offset  Data       Notes
+     * i+0     country    as an integer 32n1 + n0; see below
+     * i+1     count      number of IDs to follow
+     * i+2..j  IDs        indices into IDS[]
+     *
+     * If the number of zones is n, then j=n+1.
+     *
+     * The first integer in each entry is the country code as an integer
+     * from 0..(26-1)*32+(26-1).  This is computed as follows:  A two
+     * letter country code XY is converted to ((X-'A')<<5) | (Y-'A').
+     * The special value 0 indicates no assigned country.  This also
+     * maps to the country code 'AA' but currently this is not a valid
+     * country code.
+     *
+     * Zone ID values are indices into IDS[].
+     */
+    static int[] INDEX_BY_COUNTRY;
+
+    //----------------------------------------------------------------
+    // BEGIN GENERATED SOURCE CODE
+    // Date: Fri Feb 02 10:36:32 PST 2001
+    // Version: tzdata2000h from ftp://elsie.nci.nih.gov/pub
+    // Tool: icu/source/tools/gentz
+    // See: icu/source/tools/gentz/readme.txt
+    // DO NOT EDIT THIS SECTION
+
+    /**
+     * Array of IDs in lexicographic order.  The INDEX_BY_OFFSET and DATA
+     * arrays refer to zones using indices into this array.  To map from ID
+     * to equivalency group, use the INDEX_BY_NAME Hashtable.
+     * >> GENERATED DATA: DO NOT EDIT <<
+     */
+    static final String[] IDS = {
+        "ACT",
+        "AET",
+        "AGT",
+        "ART",
+        "AST",
+        "Africa/Abidjan",
+        "Africa/Accra",
+        "Africa/Addis_Ababa",
+        "Africa/Algiers",
+        "Africa/Asmera",
+        "Africa/Bamako",
+        "Africa/Bangui",
+        "Africa/Banjul",
+        "Africa/Bissau",
+        "Africa/Blantyre",
+        "Africa/Brazzaville",
+        "Africa/Bujumbura",
+        "Africa/Cairo",
+        "Africa/Casablanca",
+        "Africa/Ceuta",
+        "Africa/Conakry",
+        "Africa/Dakar",
+        "Africa/Dar_es_Salaam",
+        "Africa/Djibouti",
+        "Africa/Douala",
+        "Africa/El_Aaiun",
+        "Africa/Freetown",
+        "Africa/Gaborone",
+        "Africa/Harare",
+        "Africa/Johannesburg",
+        "Africa/Kampala",
+        "Africa/Khartoum",
+        "Africa/Kigali",
+        "Africa/Kinshasa",
+        "Africa/Lagos",
+        "Africa/Libreville",
+        "Africa/Lome",
+        "Africa/Luanda",
+        "Africa/Lubumbashi",
+        "Africa/Lusaka",
+        "Africa/Malabo",
+        "Africa/Maputo",
+        "Africa/Maseru",
+        "Africa/Mbabane",
+        "Africa/Mogadishu",
+        "Africa/Monrovia",
+        "Africa/Nairobi",
+        "Africa/Ndjamena",
+        "Africa/Niamey",
+        "Africa/Nouakchott",
+        "Africa/Ouagadougou",
+        "Africa/Porto-Novo",
+        "Africa/Sao_Tome",
+        "Africa/Timbuktu",
+        "Africa/Tripoli",
+        "Africa/Tunis",
+        "Africa/Windhoek",
+        "America/Adak",
+        "America/Anchorage",
+        "America/Anguilla",
+        "America/Antigua",
+        "America/Araguaina",
+        "America/Aruba",
+        "America/Asuncion",
+        "America/Barbados",
+        "America/Belem",
+        "America/Belize",
+        "America/Boa_Vista",
+        "America/Bogota",
+        "America/Boise",
+        "America/Buenos_Aires",
+        "America/Cambridge_Bay",
+        "America/Cancun",
+        "America/Caracas",
+        "America/Catamarca",
+        "America/Cayenne",
+        "America/Cayman",
+        "America/Chicago",
+        "America/Chihuahua",
+        "America/Cordoba",
+        "America/Costa_Rica",
+        "America/Cuiaba",
+        "America/Curacao",
+        "America/Dawson",
+        "America/Dawson_Creek",
+        "America/Denver",
+        "America/Detroit",
+        "America/Dominica",
+        "America/Edmonton",
+        "America/Eirunepe",
+        "America/El_Salvador",
+        "America/Fortaleza",
+        "America/Glace_Bay",
+        "America/Godthab",
+        "America/Goose_Bay",
+        "America/Grand_Turk",
+        "America/Grenada",
+        "America/Guadeloupe",
+        "America/Guatemala",
+        "America/Guayaquil",
+        "America/Guyana",
+        "America/Halifax",
+        "America/Havana",
+        "America/Hermosillo",
+        "America/Indiana/Knox",
+        "America/Indiana/Marengo",
+        "America/Indiana/Vevay",
+        "America/Indianapolis",
+        "America/Inuvik",
+        "America/Iqaluit",
+        "America/Jamaica",
+        "America/Jujuy",
+        "America/Juneau",
+        "America/Kentucky/Monticello",
+        "America/La_Paz",
+        "America/Lima",
+        "America/Los_Angeles",
+        "America/Louisville",
+        "America/Maceio",
+        "America/Managua",
+        "America/Manaus",
+        "America/Martinique",
+        "America/Mazatlan",
+        "America/Mendoza",
+        "America/Menominee",
+        "America/Merida",
+        "America/Mexico_City",
+        "America/Miquelon",
+        "America/Monterrey",
+        "America/Montevideo",
+        "America/Montreal",
+        "America/Montserrat",
+        "America/Nassau",
+        "America/New_York",
+        "America/Nipigon",
+        "America/Nome",
+        "America/Noronha",
+        "America/Panama",
+        "America/Pangnirtung",
+        "America/Paramaribo",
+        "America/Phoenix",
+        "America/Port-au-Prince",
+        "America/Port_of_Spain",
+        "America/Porto_Acre",
+        "America/Porto_Velho",
+        "America/Puerto_Rico",
+        "America/Rainy_River",
+        "America/Rankin_Inlet",
+        "America/Recife",
+        "America/Regina",
+        "America/Rosario",
+        "America/Santiago",
+        "America/Santo_Domingo",
+        "America/Sao_Paulo",
+        "America/Scoresbysund",
+        "America/St_Johns",
+        "America/St_Kitts",
+        "America/St_Lucia",
+        "America/St_Thomas",
+        "America/St_Vincent",
+        "America/Swift_Current",
+        "America/Tegucigalpa",
+        "America/Thule",
+        "America/Thunder_Bay",
+        "America/Tijuana",
+        "America/Tortola",
+        "America/Vancouver",
+        "America/Whitehorse",
+        "America/Winnipeg",
+        "America/Yakutat",
+        "America/Yellowknife",
+        "Antarctica/Casey",
+        "Antarctica/Davis",
+        "Antarctica/DumontDUrville",
+        "Antarctica/Mawson",
+        "Antarctica/McMurdo",
+        "Antarctica/Palmer",
+        "Antarctica/Syowa",
+        "Arctic/Longyearbyen",
+        "Asia/Aden",
+        "Asia/Almaty",
+        "Asia/Amman",
+        "Asia/Anadyr",
+        "Asia/Aqtau",
+        "Asia/Aqtobe",
+        "Asia/Ashgabat",
+        "Asia/Baghdad",
+        "Asia/Bahrain",
+        "Asia/Baku",
+        "Asia/Bangkok",
+        "Asia/Beirut",
+        "Asia/Bishkek",
+        "Asia/Brunei",
+        "Asia/Calcutta",
+        "Asia/Chungking",
+        "Asia/Colombo",
+        "Asia/Damascus",
+        "Asia/Dhaka",
+        "Asia/Dili",
+        "Asia/Dubai",
+        "Asia/Dushanbe",
+        "Asia/Gaza",
+        "Asia/Harbin",
+        "Asia/Hong_Kong",
+        "Asia/Hovd",
+        "Asia/Irkutsk",
+        "Asia/Jakarta",
+        "Asia/Jayapura",
+        "Asia/Jerusalem",
+        "Asia/Kabul",
+        "Asia/Kamchatka",
+        "Asia/Karachi",
+        "Asia/Kashgar",
+        "Asia/Katmandu",
+        "Asia/Krasnoyarsk",
+        "Asia/Kuala_Lumpur",
+        "Asia/Kuching",
+        "Asia/Kuwait",
+        "Asia/Macao",
+        "Asia/Magadan",
+        "Asia/Manila",
+        "Asia/Muscat",
+        "Asia/Nicosia",
+        "Asia/Novosibirsk",
+        "Asia/Omsk",
+        "Asia/Phnom_Penh",
+        "Asia/Pyongyang",
+        "Asia/Qatar",
+        "Asia/Rangoon",
+        "Asia/Riyadh",
+        "Asia/Riyadh87",
+        "Asia/Riyadh88",
+        "Asia/Riyadh89",
+        "Asia/Saigon",
+        "Asia/Samarkand",
+        "Asia/Seoul",
+        "Asia/Shanghai",
+        "Asia/Singapore",
+        "Asia/Taipei",
+        "Asia/Tashkent",
+        "Asia/Tbilisi",
+        "Asia/Tehran",
+        "Asia/Thimphu",
+        "Asia/Tokyo",
+        "Asia/Ujung_Pandang",
+        "Asia/Ulaanbaatar",
+        "Asia/Urumqi",
+        "Asia/Vientiane",
+        "Asia/Vladivostok",
+        "Asia/Yakutsk",
+        "Asia/Yekaterinburg",
+        "Asia/Yerevan",
+        "Atlantic/Azores",
+        "Atlantic/Bermuda",
+        "Atlantic/Canary",
+        "Atlantic/Cape_Verde",
+        "Atlantic/Faeroe",
+        "Atlantic/Jan_Mayen",
+        "Atlantic/Madeira",
+        "Atlantic/Reykjavik",
+        "Atlantic/South_Georgia",
+        "Atlantic/St_Helena",
+        "Atlantic/Stanley",
+        "Australia/Adelaide",
+        "Australia/Brisbane",
+        "Australia/Broken_Hill",
+        "Australia/Darwin",
+        "Australia/Hobart",
+        "Australia/Lindeman",
+        "Australia/Lord_Howe",
+        "Australia/Melbourne",
+        "Australia/Perth",
+        "Australia/Sydney",
+        "BET",
+        "BST",
+        "CAT",
+        "CET",
+        "CNT",
+        "CST",
+        "CTT",
+        "EAT",
+        "ECT",
+        "EET",
+        "EST",
+        "Etc/GMT",
+        "Etc/GMT+1",
+        "Etc/GMT+10",
+        "Etc/GMT+11",
+        "Etc/GMT+12",
+        "Etc/GMT+2",
+        "Etc/GMT+3",
+        "Etc/GMT+4",
+        "Etc/GMT+5",
+        "Etc/GMT+6",
+        "Etc/GMT+7",
+        "Etc/GMT+8",
+        "Etc/GMT+9",
+        "Etc/GMT-1",
+        "Etc/GMT-10",
+        "Etc/GMT-11",
+        "Etc/GMT-12",
+        "Etc/GMT-13",
+        "Etc/GMT-14",
+        "Etc/GMT-2",
+        "Etc/GMT-3",
+        "Etc/GMT-4",
+        "Etc/GMT-5",
+        "Etc/GMT-6",
+        "Etc/GMT-7",
+        "Etc/GMT-8",
+        "Etc/GMT-9",
+        "Etc/UCT",
+        "Etc/UTC",
+        "Europe/Amsterdam",
+        "Europe/Andorra",
+        "Europe/Athens",
+        "Europe/Belfast",
+        "Europe/Belgrade",
+        "Europe/Berlin",
+        "Europe/Bratislava",
+        "Europe/Brussels",
+        "Europe/Bucharest",
+        "Europe/Budapest",
+        "Europe/Chisinau",
+        "Europe/Copenhagen",
+        "Europe/Dublin",
+        "Europe/Gibraltar",
+        "Europe/Helsinki",
+        "Europe/Istanbul",
+        "Europe/Kaliningrad",
+        "Europe/Kiev",
+        "Europe/Lisbon",
+        "Europe/Ljubljana",
+        "Europe/London",
+        "Europe/Luxembourg",
+        "Europe/Madrid",
+        "Europe/Malta",
+        "Europe/Minsk",
+        "Europe/Monaco",
+        "Europe/Moscow",
+        "Europe/Oslo",
+        "Europe/Paris",
+        "Europe/Prague",
+        "Europe/Riga",
+        "Europe/Rome",
+        "Europe/Samara",
+        "Europe/San_Marino",
+        "Europe/Sarajevo",
+        "Europe/Simferopol",
+        "Europe/Skopje",
+        "Europe/Sofia",
+        "Europe/Stockholm",
+        "Europe/Tallinn",
+        "Europe/Tirane",
+        "Europe/Tiraspol",
+        "Europe/Uzhgorod",
+        "Europe/Vaduz",
+        "Europe/Vatican",
+        "Europe/Vienna",
+        "Europe/Vilnius",
+        "Europe/Warsaw",
+        "Europe/Zagreb",
+        "Europe/Zaporozhye",
+        "Europe/Zurich",
+        "GMT",
+        "HST",
+        "IET",
+        "IST",
+        "Indian/Antananarivo",
+        "Indian/Chagos",
+        "Indian/Christmas",
+        "Indian/Cocos",
+        "Indian/Comoro",
+        "Indian/Kerguelen",
+        "Indian/Mahe",
+        "Indian/Maldives",
+        "Indian/Mauritius",
+        "Indian/Mayotte",
+        "Indian/Reunion",
+        "JST",
+        "MET",
+        "MIT",
+        "MST",
+        "NET",
+        "NST",
+        "PLT",
+        "PNT",
+        "PRT",
+        "PST",
+        "Pacific/Apia",
+        "Pacific/Auckland",
+        "Pacific/Chatham",
+        "Pacific/Easter",
+        "Pacific/Efate",
+        "Pacific/Enderbury",
+        "Pacific/Fakaofo",
+        "Pacific/Fiji",
+        "Pacific/Funafuti",
+        "Pacific/Galapagos",
+        "Pacific/Gambier",
+        "Pacific/Guadalcanal",
+        "Pacific/Guam",
+        "Pacific/Honolulu",
+        "Pacific/Johnston",
+        "Pacific/Kiritimati",
+        "Pacific/Kosrae",
+        "Pacific/Kwajalein",
+        "Pacific/Majuro",
+        "Pacific/Marquesas",
+        "Pacific/Midway",
+        "Pacific/Nauru",
+        "Pacific/Niue",
+        "Pacific/Norfolk",
+        "Pacific/Noumea",
+        "Pacific/Pago_Pago",
+        "Pacific/Palau",
+        "Pacific/Pitcairn",
+        "Pacific/Ponape",
+        "Pacific/Port_Moresby",
+        "Pacific/Rarotonga",
+        "Pacific/Saipan",
+        "Pacific/Tahiti",
+        "Pacific/Tarawa",
+        "Pacific/Tongatapu",
+        "Pacific/Truk",
+        "Pacific/Wake",
+        "Pacific/Wallis",
+        "Pacific/Yap",
+        "SST",
+        "UTC",
+        "VST",
+        "WET",
+    };
+
+    /**
+     * RLE encoded form of DATA.
+     * @see com.ibm.util.Utility.RLEStringToIntArray
+     * >> GENERATED DATA: DO NOT EDIT <<
+     */
+    static final String DATA_RLE =
+        "\000\u06A0\000\000\uFFFF\u5740\000\001\000\u0120\000\000\uFFFF\u6550\000"+
+        "\006\000\u011F\000\u017D\000\u0185\000\u0199\000\u019B\000\u019E\000\000"+
+        "\uFFFF\u7360\000\006\000\u011E\000\u016D\000\u018B\000\u0192\000\u0193"+
+        "\000\u01A5\000\001\uFFFF\u7360\000\003\000\001\uFFFF\uFFFF\000x\000\000"+
+        "\000\011\uFFFF\uFFFF\000\001\000x\000\000\000<\000\001\0009\000\001\uFFFF"+
+        "\u7360\000\011\uFFFF\uFFFF\000\001\000\000\000\000\000\002\000\001\uFFFF"+
+        "\uFFFF\000\000\000\000\000\036\000\001\000\u01A3\000\000\uFFFF\u7A68\000"+
+        "\001\000\u0198\000\000\uFFFF\u8170\000\002\000\u0128\000\u018F\000\001"+
+        "\uFFFF\u8170\000\003\000\001\uFFFF\uFFFF\000x\000\000\000\011\uFFFF\uFFFF"+
+        "\000\001\000x\000\000\000<\000\005\000\004\000:\000p\000\u0087\000\u00A9"+
+        "\000\000\uFFFF\u8F80\000\002\000\u0127\000\u01A0\000\001\uFFFF\u8F80\000"+
+        "\003\000\001\uFFFF\uFFFF\000x\000\000\000\011\uFFFF\uFFFF\000\001\000"+
+        "x\000\000\000<\000\006\000S\000t\000\u00A4\000\u00A6\000\u00A7\000\u0184"+
+        "\000\000\uFFFF\u9D90\000\005\000T\000g\000\u008C\000\u0126\000\u0182\000"+
+        "\001\uFFFF\u9D90\000\003\000\001\uFFFF\uFFFF\000x\000\000\000\011\uFFFF"+
+        "\uFFFF\000\001\000x\000\000\000<\000\010\000E\000N\000U\000X\000l\000"+
+        "z\000\u00AA\000\u017E\000\000\uFFFF\uABA0\000\005\000w\000\u0095\000\u00A0"+
+        "\000\u0125\000\u018E\000\001\uFFFF\uABA0\000\003\000\001\uFFFF\uFFFF\000"+
+        "x\000\000\000\011\uFFFF\uFFFF\000\001\000x\000\000\000<\000\011\000G\000"+
+        "H\000M\000|\000}\000~\000\u0080\000\u0092\000\u0116\000\001\uFFFF\uABA0"+
+        "\000\003\000\001\uFFFF\uFFFF\000x\000\000\000\011\uFFFF\uFFFF\000\001"+
+        "\000x\000\001\000<\000\001\000\u00A8\000\001\uFFFF\uABA0\000\013\000\022"+
+        "\000\000\000\000\000\000\000\001\000\014\000\000\000\000\000\000\000<"+
+        "\000\001\000B\000\001\uFFFF\uABA0\000\000\000\017\uFFFF\uFFF9\000\000"+
+        "\000\000\000\002\000\017\000\000\000\000\000\000\000<\000\001\000P\000"+
+        "\001\uFFFF\uABA0\000\002\000\027\000\000\000\000\000\000\000\010\000\007"+
+        "\000\000\000\000\000\000\000<\000\001\000b\000\001\uFFFF\uABA0\000\004"+
+        "\000\001\uFFFF\uFFFF\000\000\000\000\000\010\uFFFF\uFFFF\000\001\000\000"+
+        "\000\000\000<\000\002\000Z\000\u00A1\000\001\uFFFF\uABA0\000\011\000\011"+
+        "\uFFFF\uFFFF\000\000\000\000\000\002\000\011\uFFFF\uFFFF\000\000\000\000"+
+        "\000<\000\001\000\u0188\000\000\uFFFF\uB9B0\000\017\000L\000Y\000c\000"+
+        "h\000i\000j\000k\000m\000n\000\u0089\000\u008A\000\u008F\000\u0093\000"+
+        "\u0124\000\u016E\000\001\uFFFF\uB9B0\000\003\000\001\uFFFF\uFFFF\000\000"+
+        "\000\000\000\011\uFFFF\uFFFF\000\001\000\000\000\000\000<\000\001\000"+
+        "_\000\001\uFFFF\uB9B0\000\003\000\001\uFFFF\uFFFF\000\000\000\001\000"+
+        "\011\uFFFF\uFFFF\000\001\000\000\000\001\000<\000\001\000f\000\001\uFFFF"+
+        "\uB9B0\000\003\000\001\uFFFF\uFFFF\000<\000\001\000\011\uFFFF\uFFFF\000"+
+        "\001\000<\000\001\000<\000\001\000\u008D\000\001\uFFFF\uB9B0\000\003\000"+
+        "\001\uFFFF\uFFFF\000x\000\000\000\011\uFFFF\uFFFF\000\001\000x\000\000"+
+        "\000<\000\011\000V\000q\000u\000\u0082\000\u0084\000\u0085\000\u0086\000"+
+        "\u00A3\000\u011B\000\001\uFFFF\uB9B0\000\000\000\001\000\000\000\000\000"+
+        "\000\000\003\000\001\000\000\000\000\000\000\000<\000\001\000s\000\001"+
+        "\uFFFF\uB9B0\000\004\000\002\000\000\000\000\000\000\000\013\000\037\000"+
+        "\000\000\000\000\000\000<\000\001\000D\000\000\uFFFF\uC7C0\000\031\000"+
+        ";\000<\000>\000C\000I\000R\000W\000`\000a\000d\000r\000x\000y\000\u0083"+
+        "\000\u008E\000\u0090\000\u0091\000\u0098\000\u009C\000\u009D\000\u009E"+
+        "\000\u009F\000\u00A5\000\u0123\000\u0183\000\001\uFFFF\uC7C0\000\003\000"+
+        "\001\uFFFF\uFFFF\000\001\000\000\000\011\uFFFF\uFFFF\000\001\000\001\000"+
+        "\000\000<\000\001\000^\000\001\uFFFF\uC7C0\000\003\000\001\uFFFF\uFFFF"+
+        "\000x\000\000\000\011\uFFFF\uFFFF\000\001\000x\000\000\000<\000\004\000"+
+        "\134\000e\000\u00A2\000\u00FD\000\001\uFFFF\uC7C0\000\003\000\017\uFFFF"+
+        "\uFFFF\000x\000\000\000\010\000\031\000\000\000x\000\000\000<\000\001"+
+        "\000@\000\001\uFFFF\uC7C0\000\011\000\001\uFFFF\uFFFF\000\000\000\000"+
+        "\000\001\uFFFF\uFFFF\000\001\000\000\000\000\000<\000\001\000?\000\001"+
+        "\uFFFF\uC7C0\000\011\000\010\uFFFF\uFFFF\000\000\000\000\000\001\000\017"+
+        "\uFFFF\uFFFF\000\000\000\000\000<\000\001\000Q\000\001\uFFFF\uC7C0\000"+
+        "\011\000\011\uFFFF\uFFFF\000\000\000\000\000\002\000\011\uFFFF\uFFFF\000"+
+        "\000\000\000\000<\000\002\000\u0097\000\u00B0\000\001\uFFFF\uC7C0\000"+
+        "\010\000\010\uFFFF\uFFFF\000\000\000\000\000\003\000\020\uFFFF\uFFFF\000"+
+        "\000\000\000\000<\000\001\000\u0106\000\001\uFFFF\uCEC8\000\003\000\001"+
+        "\uFFFF\uFFFF\000\001\000\000\000\011\uFFFF\uFFFF\000\001\000\001\000\000"+
+        "\000<\000\002\000\u009B\000\u0115\000\000\uFFFF\uD5D0\000\016\000\002"+
+        "\000A\000F\000J\000K\000O\000[\000o\000v\000{\000\u008B\000\u0094\000"+
+        "\u0096\000\u0122\000\001\uFFFF\uD5D0\000\003\000\001\uFFFF\uFFFF\000x"+
+        "\000\000\000\011\uFFFF\uFFFF\000\001\000x\000\000\000<\000\001\000\u007F"+
+        "\000\001\uFFFF\uD5D0\000\002\uFFFF\uFFFF\000\001\000<\000\002\000\011"+
+        "\uFFFF\uFFFF\000\001\000<\000\002\000<\000\001\000]\000\001\uFFFF\uD5D0"+
+        "\000\011\000\022\000\000\000\000\000\000\000\001\000\034\000\000\000\000"+
+        "\000\000\000<\000\001\000\u0081\000\001\uFFFF\uD5D0\000\011\000\010\uFFFF"+
+        "\uFFFF\000\000\000\000\000\001\000\017\uFFFF\uFFFF\000\000\000\000\000"+
+        "<\000\003\000=\000\u0099\000\u0111\000\000\uFFFF\uE3E0\000\003\000\u0088"+
+        "\000\u0104\000\u0121\000\000\uFFFF\uF1F0\000\003\000\u00FF\000\u0101\000"+
+        "\u011D\000\001\uFFFF\uF1F0\000\002\uFFFF\uFFFF\000\001\000<\000\002\000"+
+        "\011\uFFFF\uFFFF\000\001\000<\000\002\000<\000\002\000\u009A\000\u00FC"+
+        "\000\000\000\000\000\025\000\005\000\012\000\014\000\015\000\022\000\024"+
+        "\000\025\000\031\000$\000-\0001\0002\0004\0005\000\u0103\000\u0105\000"+
+        "\u011C\000\u0137\000\u0138\000\u016C\000\u01AD\000\001\000\000\000\005"+
+        "\000\001\000\000\000\000\000\000\000\010\000\001\000\000\000\000\000\000"+
+        "\000<\000\001\000\032\000\001\000\000\000\002\uFFFF\uFFFF\000\001\000"+
+        "<\000\002\000\011\uFFFF\uFFFF\000\001\000<\000\002\000<\000\010\000\u00FE"+
+        "\000\u0100\000\u0102\000\u013C\000\u0145\000\u014B\000\u014D\000\u01AF"+
+        "\000\001\000\000\000\010\000\001\000\000\000\000\000\000\000\013\000\037"+
+        "\000\000\000\000\000\000\000\024\000\001\000\006\000\000\000\u0E10\000"+
+        "\015\000\010\000\013\000\017\000\030\000!\000\042\000#\000%\000(\000/"+
+        "\0000\0003\000\u0129\000\001\000\u0E10\000\002\uFFFF\uFFFF\000\001\000"+
+        "<\000\002\000\011\uFFFF\uFFFF\000\001\000<\000\002\000<\000 \000\023\000"+
+        "\u00B2\000\u0119\000\u0139\000\u013A\000\u013D\000\u013E\000\u013F\000"+
+        "\u0140\000\u0142\000\u0144\000\u0146\000\u014C\000\u014E\000\u014F\000"+
+        "\u0150\000\u0152\000\u0154\000\u0155\000\u0156\000\u0158\000\u015A\000"+
+        "\u015B\000\u015D\000\u015F\000\u0161\000\u0164\000\u0165\000\u0166\000"+
+        "\u0168\000\u0169\000\u016B\000\001\000\u0E10\000\002\uFFFF\uFFFF\000\001"+
+        "\000x\000\001\000\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\002\000"+
+        "\u0114\000\u017C\000\001\000\u0E10\000\004\000\001\000\000\000\000\000"+
+        "\001\000\010\uFFFF\uFFFF\000\001\000\000\000\001\000<\000\001\0007\000"+
+        "\001\000\u0E10\000\010\000\001\uFFFF\uFFFF\000x\000\000\000\003\000\001"+
+        "\uFFFF\uFFFF\000x\000\000\000<\000\001\0008\000\000\000\u1C20\000\020"+
+        "\000\016\000\020\000\033\000\034\000 \000&\000'\000)\000*\000+\0006\000"+
+        "\u0113\000\u012F\000\u0157\000\u0160\000\u0167\000\001\000\u1C20\000\003"+
+        "\000\001\000\000\000\000\000\000\000\011\000\001\000\000\000\000\000\000"+
+        "\000<\000\001\000\u00C4\000\001\000\u1C20\000\003\000\001\000\000\000"+
+        "<\000\000\000\010\000\030\000\000\000<\000\000\000<\000\001\000\u00D0"+
+        "\000\001\000\u1C20\000\003\000\017\uFFFF\uFFFA\000\000\000\000\000\011"+
+        "\000\017\uFFFF\uFFFA\000\000\000\000\000<\000\001\000\u00C9\000\001\000"+
+        "\u1C20\000\003\uFFFF\uFFFF\000\006\000\000\000\001\000\010\uFFFF\uFFFF"+
+        "\000\005\000\u0564\000\001\000<\000\002\000\003\000\021\000\001\000\u1C20"+
+        "\000\002\uFFFF\uFFFF\000\001\000\000\000\000\000\011\uFFFF\uFFFF\000\001"+
+        "\000\000\000\000\000<\000\001\000\u00BE\000\001\000\u1C20\000\002\uFFFF"+
+        "\uFFFF\000\001\000<\000\002\000\011\uFFFF\uFFFF\000\001\000<\000\002\000"+
+        "<\000\014\000\u00DE\000\u011A\000\u013B\000\u0141\000\u0143\000\u0147"+
+        "\000\u0148\000\u014A\000\u015C\000\u015E\000\u0163\000\u016A\000\001\000"+
+        "\u1C20\000\002\uFFFF\uFFFF\000\001\000x\000\001\000\011\uFFFF\uFFFF\000"+
+        "\001\000x\000\001\000<\000\002\000\u0149\000\u0151\000\001\000\u1C20\000"+
+        "\002\uFFFF\uFFFF\000\005\000\000\000\001\000\010\uFFFF\uFFFF\000\005\000"+
+        "\000\000\001\000<\000\001\000\u00B5\000\001\000\u1C20\000\010\000\017"+
+        "\uFFFF\uFFFF\000x\000\000\000\002\000\017\uFFFF\uFFFF\000x\000\000\000"+
+        "<\000\001\000\035\000\000\000\u2A30\000\023\000\007\000\011\000\026\000"+
+        "\027\000\036\000\037\000,\000.\000\u00B1\000\u00B3\000\u00BB\000\u00D9"+
+        "\000\u00E3\000\u00E5\000\u0118\000\u0130\000\u0170\000\u0174\000\u0179"+
+        "\000\001\000\u2A30\000\003\000\001\000\000\000\u00B4\000\001\000\011\000"+
+        "\001\000\000\000\u00B4\000\001\000<\000\001\000\u00BA\000\001\000\u2A30"+
+        "\000\002\uFFFF\uFFFF\000\001\000x\000\001\000\011\uFFFF\uFFFF\000\001"+
+        "\000x\000\001\000<\000\002\000\u0153\000\u0162\000\000\000\u2BD8\000\003"+
+        "\000\u00E6\000\u00E7\000\u00E8\000\001\000\u3138\000\002\000\024\000\000"+
+        "\000\000\000\000\000\010\000\027\000\000\000\000\000\000\000<\000\001"+
+        "\000\u00F1\000\000\000\u3840\000\006\000\u00C7\000\u00DD\000\u0131\000"+
+        "\u0176\000\u0178\000\u017A\000\001\000\u3840\000\002\uFFFF\uFFFF\000\001"+
+        "\000\000\000\000\000\011\uFFFF\uFFFF\000\001\000\000\000\000\000<\000"+
+        "\002\000\u00B7\000\u00F0\000\001\000\u3840\000\002\uFFFF\uFFFF\000\001"+
+        "\000<\000\000\000\011\uFFFF\uFFFF\000\001\000<\000\000\000<\000\001\000"+
+        "\u00BC\000\001\000\u3840\000\002\uFFFF\uFFFF\000\001\000x\000\001\000"+
+        "\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\003\000\u00FB\000\u0159"+
+        "\000\u017F\000\000\000\u3F48\000\001\000\u00D1\000\000\000\u4650\000\012"+
+        "\000\u00B9\000\u00C8\000\u00D3\000\u00EA\000\u00EF\000\u0132\000\u0171"+
+        "\000\u0175\000\u0177\000\u0181\000\001\000\u4650\000\002\uFFFF\uFFFF\000"+
+        "\001\000\000\000\000\000\011\uFFFF\uFFFF\000\001\000\000\000\000\000<"+
+        "\000\001\000\u00B8\000\001\000\u4650\000\002\uFFFF\uFFFF\000\001\000x"+
+        "\000\001\000\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\001\000\u00FA"+
+        "\000\001\000\u4650\000\002\uFFFF\uFFFF\000\001\000\u0096\000\000\000\011"+
+        "\uFFFF\uFFFF\000\001\000\u0096\000\000\000<\000\001\000\u00BF\000\000"+
+        "\000\u4D58\000\002\000\u00C1\000\u016F\000\000\000\u50DC\000\001\000\u00D5"+
+        "\000\000\000\u5460\000\006\000\u00AE\000\u00C3\000\u00C5\000\u00F2\000"+
+        "\u0112\000\u0133\000\001\000\u5460\000\002\uFFFF\uFFFF\000\001\000\000"+
+        "\000\000\000\011\uFFFF\uFFFF\000\001\000\000\000\000\000<\000\001\000"+
+        "\u00B4\000\001\000\u5460\000\002\uFFFF\uFFFF\000\001\000x\000\001\000"+
+        "\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\002\000\u00DF\000\u00E0"+
+        "\000\000\000\u5B68\000\002\000\u00E4\000\u0173\000\000\000\u6270\000\011"+
+        "\000\u00AC\000\u00BD\000\u00CE\000\u00E1\000\u00E9\000\u00F7\000\u0134"+
+        "\000\u0172\000\u01AE\000\001\000\u6270\000\002\uFFFF\uFFFF\000\001\000"+
+        "\000\000\000\000\010\uFFFF\uFFFF\000\001\000\000\000\000\000<\000\001"+
+        "\000\u00CC\000\001\000\u6270\000\002\uFFFF\uFFFF\000\001\000x\000\001"+
+        "\000\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\001\000\u00D6\000\000"+
+        "\000\u7080\000\010\000\u00AB\000\u00C0\000\u00D7\000\u00D8\000\u00ED\000"+
+        "\u00F4\000\u010F\000\u0135\000\001\000\u7080\000\003\000\012\uFFFF\uFFFF"+
+        "\000\000\000\000\000\010\000\013\uFFFF\uFFFF\000\000\000\000\000<\000"+
+        "\007\000\u00C2\000\u00CA\000\u00D4\000\u00DA\000\u00EC\000\u00F6\000\u0117"+
+        "\000\001\000\u7080\000\005\000\036\000\000\000\000\000\000\000\010\000"+
+        "\036\000\000\000\000\000\000\000<\000\001\000\u00EE\000\001\000\u7080"+
+        "\000\002\000\026\000\000\000\000\000\000\000\010\000\025\000\000\000\000"+
+        "\000\000\000<\000\001\000\u00DC\000\001\000\u7080\000\002\uFFFF\uFFFF"+
+        "\000\001\000\000\000\000\000\010\uFFFF\uFFFF\000\001\000\000\000\000\000"+
+        "<\000\001\000\u00F5\000\001\000\u7080\000\002\uFFFF\uFFFF\000\001\000"+
+        "x\000\001\000\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\001\000\u00CD"+
+        "\000\001\000\u7080\000\004\000\010\uFFFF\uFFFF\000\u00D2\000\000\000\011"+
+        "\000\020\uFFFF\uFFFF\000\u00D2\000\000\000<\000\001\000\u00CB\000\000"+
+        "\000\u7E90\000\007\000\u00C6\000\u00CF\000\u00E2\000\u00F3\000\u0136\000"+
+        "\u017B\000\u019F\000\001\000\u7E90\000\002\uFFFF\uFFFF\000\001\000x\000"+
+        "\001\000\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\001\000\u00F9\000"+
+        "\001\000\u7E90\000\004\uFFFF\uFFF2\uFFFF\uFFFF\000\000\000\000\000\011"+
+        "\uFFFF\uFFF2\uFFFF\uFFFF\000\000\000\000\000<\000\001\000\u00EB\000\001"+
+        "\000\u8598\000\011\000\003\000\000\000x\000\000\000\002\uFFFF\uFFFF\000"+
+        "\001\000x\000\000\000<\000\002\000\000\000\u010A\000\001\000\u8598\000"+
+        "\011\uFFFF\uFFFF\000\001\000x\000\001\000\002\uFFFF\uFFFF\000\001\000"+
+        "x\000\001\000<\000\002\000\u0107\000\u0109\000\000\000\u8CA0\000\007\000"+
+        "\u00AD\000\u012A\000\u0191\000\u01A2\000\u01A4\000\u01A8\000\u01AB\000"+
+        "\001\000\u8CA0\000\002\uFFFF\uFFFF\000\001\000x\000\001\000\011\uFFFF"+
+        "\uFFFF\000\001\000x\000\001\000<\000\001\000\u00F8\000\001\000\u8CA0\000"+
+        "\011\uFFFF\uFFFF\000\001\000x\000\001\000\002\uFFFF\uFFFF\000\001\000"+
+        "x\000\001\000<\000\003\000\001\000\u010E\000\u0110\000\001\000\u8CA0\000"+
+        "\011\uFFFF\uFFFF\000\001\000x\000\001\000\002\000\001\uFFFF\uFFFF\000"+
+        "x\000\001\000<\000\002\000\u0108\000\u010C\000\001\000\u8CA0\000\011\000"+
+        "\001\uFFFF\uFFFF\000x\000\001\000\002\uFFFF\uFFFF\000\001\000x\000\001"+
+        "\000<\000\001\000\u010B\000\001\000\u93A8\000\011\uFFFF\uFFFF\000\001"+
+        "\000x\000\001\000\002\uFFFF\uFFFF\000\001\000x\000\001\000\036\000\001"+
+        "\000\u010D\000\000\000\u9AB0\000\005\000\u012B\000\u0190\000\u0195\000"+
+        "\u01A1\000\u01AC\000\001\000\u9AB0\000\013\000\001\000\000\000x\000\001"+
+        "\000\002\000\002\000\000\000x\000\001\000<\000\001\000\u019D\000\001\000"+
+        "\u9AB0\000\002\uFFFF\uFFFF\000\001\000x\000\001\000\011\uFFFF\uFFFF\000"+
+        "\001\000x\000\001\000<\000\001\000\u00DB\000\001\000\u9AB0\000\011\000"+
+        "\027\uFFFF\uFFFF\000\000\000\000\000\000\000\027\uFFFF\uFFFF\000\000\000"+
+        "\000\000<\000\001\000\u0189\000\000\000\uA1B8\000\001\000\u019C\000\000"+
+        "\000\uA8C0\000\010\000\u012C\000\u018D\000\u0196\000\u0197\000\u019A\000"+
+        "\u01A6\000\u01A9\000\u01AA\000\001\000\uA8C0\000\002\uFFFF\uFFFF\000\001"+
+        "\000x\000\001\000\011\uFFFF\uFFFF\000\001\000x\000\001\000<\000\002\000"+
+        "\u00B6\000\u00D2\000\001\000\uA8C0\000\012\000\001\uFFFF\uFFFF\000x\000"+
+        "\000\000\001\uFFFF\uFFFF\000\001\000\u00B4\000\000\000<\000\001\000\u018C"+
+        "\000\001\000\uA8C0\000\011\000\001\uFFFF\uFFFF\000x\000\001\000\002\000"+
+        "\017\uFFFF\uFFFF\000x\000\001\000<\000\003\000\u00AF\000\u0180\000\u0186"+
+        "\000\001\000\uB34C\000\011\000\001\uFFFF\uFFFF\000\u00A5\000\001\000\002"+
+        "\000\017\uFFFF\uFFFF\000\u00A5\000\001\000<\000\001\000\u0187\000\000"+
+        "\000\uB6D0\000\002\000\u012D\000\u018A\000\001\000\uB6D0\000\012\000\004"+
+        "\000\000\000x\000\001\000\000\000\033\000\000\000x\000\001\000<\000\001"+
+        "\000\u01A7\000\000\000\uC4E0\000\002\000\u012E\000\u0194"
+        ;
+
+    /**
+     * RLE encoded form of INDEX_BY_NAME_ARRAY.
+     * @see com.ibm.util.Utility.RLEStringToIntArray
+     * >> GENERATED DATA: DO NOT EDIT <<
+     */
+    static final String INDEX_BY_NAME_ARRAY_RLE =
+        "\000\u01B0\000\u058C\000\u05C5\000\u020E\000\u0371\000=\000\u0279\000"+
+        "\u02B6\000\u03D8\000\u02C5\000\u03D8\000\u0279\000\u02C5\000\u0279\000"+
+        "\u0279\000\u0331\000\u02C5\000\u0331\000\u0371\000\u0279\000\u02D5\000"+
+        "\u0279\000\u0279\000\u03D8\000\u03D8\000\u02C5\000\u0279\000\u0291\000"+
+        "\u0331\000\u0331\000\u03C9\000\u03D8\000\u03D8\000\u0331\000\u02C5\000"+
+        "\u02C5\000\u02C5\000\u0279\000\u02C5\000\u0331\000\u0331\000\u02C5\000"+
+        "\u0331\000\u0331\000\u0331\000\u03D8\000\u0279\000\u03D8\000\u02C5\000"+
+        "\u02C5\000\u0279\000\u0279\000\u02C5\000\u0279\000\u0279\000\u0331\000"+
+        "\u0313\000\u0322\000\026\000=\000\u0175\000\u0175\000\u024C\000\u0175"+
+        "\000\u01C1\000\u01B2\000\u020E\000\u00B5\000\u0175\000\u0166\000q\000"+
+        "\u020E\000\u008F\000\u008F\000\u0175\000\u020E\000\u020E\000\u0101\000"+
+        "\u008F\000q\000\u020E\000\u00C4\000\u01D0\000\u0175\000U\000i\000q\000"+
+        "\u0140\000\u0175\000q\000\u0101\000\u00E2\000\u020E\000\u01A0\000\u022E"+
+        "\000\u0191\000\u0113\000\u0175\000\u0175\000\u00D3\000\u0101\000\u0175"+
+        "\000\u01A0\000\u0122\000i\000\uA5A5\000\004\000\u0101\000q\000\u0101\000"+
+        "\u0101\000\u020E\000=\000\u0140\000\u0175\000\u0157\000U\000\u0140\000"+
+        "\u020E\000\u0087\000\u0175\000\u0175\000q\000\u020E\000\u008F\000\u008F"+
+        "\000\u008F\000\u021F\000\u008F\000\u023D\000\u0140\000\u0175\000\u0140"+
+        "\000\u0140\000\u0140\000=\000\u025D\000\u0101\000\u0101\000\u020E\000"+
+        "i\000\u0131\000\u0175\000\u0101\000\u0175\000\u0175\000\u008F\000\u0101"+
+        "\000\u020E\000\u0087\000\u020E\000\u01DF\000\u0175\000\u024C\000\u0269"+
+        "\000\u01FE\000\uA5A5\000\004\000\u0175\000\u0087\000\u00E2\000\u01A0\000"+
+        "\u0140\000U\000\u0175\000U\000U\000\u00A6\000=\000q\000\u04F9\000\u04CF"+
+        "\000\u05AC\000\u04A2\000\u0667\000\u01DF\000\u03D8\000\u02D5\000\u03D8"+
+        "\000\u04AB\000\u03BA\000\u0648\000\u042B\000\u046C\000\u045F\000\u03EE"+
+        "\000\u03D8\000\u043B\000\u04CF\000\u0381\000\u048A\000\u04F9\000\u0499"+
+        "\000\u0504\000\u04A2\000\u0344\000\u04A2\000\u0564\000\u0422\000\u045F"+
+        "\000\u0362\000\u0504\000\u0555\000\u04DB\000\u0546\000\u04CF\000\u0564"+
+        "\000\u0353\000\u045B\000\u0648\000\u045F\000\u0504\000\u049E\000\u04EA"+
+        "\000\u04F9\000\u04F9\000\u03D8\000\u0504\000\u061B\000\u0528\000\u0422"+
+        "\000\u0390\000\u04BA\000\u04BA\000\u04CF\000\u0564\000\u03D8\000\u04CA"+
+        "\000\u03D8\000\u040D\000\u040D\000\u040D\000\u04CF\000\u045F\000\u057D"+
+        "\000\u0504\000\u04F9\000\u0519\000\u045F\000\u042B\000\u0413\000\u04A2"+
+        "\000\u0564\000\u04F9\000\u0537\000\u0504\000\u04CF\000\u05B6\000\u056E"+
+        "\000\u047B\000\u044A\000\u0269\000\u01A0\000\u02A0\000\u0263\000\u02A0"+
+        "\000\u0263\000\u02A0\000\u0279\000\u025D\000\u0279\000\u01EF\000\u059C"+
+        "\000\u05D6\000\u059C\000\u058C\000\u05E6\000\u05D6\000\u05F5\000\u05C5"+
+        "\000\u04F9\000\u05C5\000\u024C\000\u04A2\000\u0331\000\u0303\000\u01FE"+
+        "\000\u008F\000\u0504\000\u03D8\000\u02D5\000\u0390\000\u0140\000\u0279"+
+        "\000\u0263\000\015\000\004\000\000\000\u025D\000\u020E\000\u0175\000\u0101"+
+        "\000\u0087\000i\000P\0008\000\u02C5\000\u05AC\000\u0604\000\u063D\000"+
+        "\u0687\000\u069B\000\u0331\000\u03D8\000\u0422\000\u045F\000\u04A2\000"+
+        "\u04CF\000\u04F9\000\u0564\000\u0279\000\u0279\000\u02D5\000\u02D5\000"+
+        "\u0390\000\u02A0\000\uA5A5\000\004\000\u02D5\000\u0390\000\u02D5\000\u0390"+
+        "\000\u02D5\000\u02A0\000\u02D5\000\u0390\000\u0390\000\u03AA\000\u0390"+
+        "\000\u02A0\000\u02D5\000\u02A0\000\u02D5\000\u02D5\000\u02D5\000\u03AA"+
+        "\000\u02D5\000\u03FD\000\u02D5\000\u02D5\000\u02D5\000\u0331\000\u02D5"+
+        "\000\u044A\000\u02D5\000\u02D5\000\u0390\000\u02D5\000\u0390\000\u02D5"+
+        "\000\u0331\000\u02D5\000\u03FD\000\u0390\000\u02D5\000\u02D5\000\u02D5"+
+        "\000\u0331\000\u02D5\000\u02D5\000\u0390\000\u02D5\000\u0279\000\015\000"+
+        "\u0101\000\u0499\000\u03D8\000\u045F\000\u04CF\000\u04CA\000\u03D8\000"+
+        "\u045F\000\u0422\000\u045F\000\u0422\000\u03D8\000\u0422\000\u0564\000"+
+        "\u0303\000\004\000q\000\u044A\000\u0667\000\u045F\000i\000\u0175\000U"+
+        "\000\004\000\u0667\000\u0678\000\u00F2\000\u062A\000\u0687\000\015\000"+
+        "\u0658\000\u063D\000\u0087\0008\000\u0604\000\u05AC\000\015\000\015\000"+
+        "\u069B\000\u0604\000\u063D\000\u063D\0004\000\004\000\u063D\000\004\000"+
+        "\u0639\000\u060C\000\004\000\u0564\000P\000\u0604\000\u05AC\000%\000\u05AC"+
+        "\000\015\000\u063D\000\u068C\000\u05AC\000\u063D\000\u063D\000\u05AC\000"+
+        "\u0604\000\u0279\000\u04CF\000\u02A0"
+        ;
+
+    /**
+     * RLE encoded form of INDEX_BY_OFFSET.
+     * @see com.ibm.util.Utility.RLEStringToIntArray
+     * >> GENERATED DATA: DO NOT EDIT <<
+     */
+    static final String INDEX_BY_OFFSET_RLE =
+        "\000\u0225\uFFFF\u5740\000\u0120\000\001\000\u0120\uFFFF\u6550\000\u0185"+
+        "\000\006\000\u011F\000\u017D\000\u0185\000\u0199\000\u019B\000\u019E\uFFFF"+
+        "\u7360\000\u0192\000\010\0009\000\u011E\000\u016D\000\u018B\000\u0192"+
+        "\000\u0193\000\u01A3\000\u01A5\uFFFF\u7A68\000\u0198\000\001\000\u0198"+
+        "\uFFFF\u8170\000:\000\007\000\004\000:\000p\000\u0087\000\u00A9\000\u0128"+
+        "\000\u018F\uFFFF\u8F80\000t\000\010\000S\000t\000\u00A4\000\u00A6\000"+
+        "\u00A7\000\u0127\000\u0184\000\u01A0\uFFFF\u9D90\000U\000\015\000E\000"+
+        "N\000T\000U\000X\000g\000l\000z\000\u008C\000\u00AA\000\u0126\000\u017E"+
+        "\000\u0182\uFFFF\uABA0\000M\000\025\000B\000G\000H\000M\000P\000Z\000"+
+        "b\000w\000|\000}\000~\000\u0080\000\u0092\000\u0095\000\u00A0\000\u00A1"+
+        "\000\u00A8\000\u0116\000\u0125\000\u0188\000\u018E\uFFFF\uB9B0\000k\000"+
+        "\035\000D\000L\000V\000Y\000_\000c\000f\000h\000i\000j\000k\000m\000n"+
+        "\000q\000s\000u\000\u0082\000\u0084\000\u0085\000\u0086\000\u0089\000"+
+        "\u008A\000\u008D\000\u008F\000\u0093\000\u00A3\000\u011B\000\u0124\000"+
+        "\u016E\uFFFF\uC7C0\000\u0091\000$\000;\000<\000>\000?\000@\000C\000I\000"+
+        "Q\000R\000W\000\134\000^\000`\000a\000d\000e\000r\000x\000y\000\u0083"+
+        "\000\u008E\000\u0090\000\u0091\000\u0097\000\u0098\000\u009C\000\u009D"+
+        "\000\u009E\000\u009F\000\u00A2\000\u00A5\000\u00B0\000\u00FD\000\u0106"+
+        "\000\u0123\000\u0183\uFFFF\uCEC8\000\u009B\000\002\000\u009B\000\u0115"+
+        "\uFFFF\uD5D0\000F\000\024\000\002\000=\000A\000F\000J\000K\000O\000[\000"+
+        "]\000o\000v\000{\000\u007F\000\u0081\000\u008B\000\u0094\000\u0096\000"+
+        "\u0099\000\u0111\000\u0122\uFFFF\uE3E0\000\u0088\000\003\000\u0088\000"+
+        "\u0104\000\u0121\uFFFF\uF1F0\000\u00FC\000\005\000\u009A\000\u00FC\000"+
+        "\u00FF\000\u0101\000\u011D\000\000\000\u016C\000\037\000\005\000\006\000"+
+        "\012\000\014\000\015\000\022\000\024\000\025\000\031\000\032\000$\000"+
+        "-\0001\0002\0004\0005\000\u00FE\000\u0100\000\u0102\000\u0103\000\u0105"+
+        "\000\u011C\000\u0137\000\u0138\000\u013C\000\u0145\000\u014B\000\u014D"+
+        "\000\u016C\000\u01AD\000\u01AF\000\u0E10\000\u0155\0001\000\010\000\013"+
+        "\000\017\000\023\000\030\000!\000\042\000#\000%\000(\000/\0000\0003\000"+
+        "7\0008\000\u00B2\000\u0114\000\u0119\000\u0129\000\u0139\000\u013A\000"+
+        "\u013D\000\u013E\000\u013F\000\u0140\000\u0142\000\u0144\000\u0146\000"+
+        "\u014C\000\u014E\000\u014F\000\u0150\000\u0152\000\u0154\000\u0155\000"+
+        "\u0156\000\u0158\000\u015A\000\u015B\000\u015D\000\u015F\000\u0161\000"+
+        "\u0164\000\u0165\000\u0166\000\u0168\000\u0169\000\u016B\000\u017C\000"+
+        "\u1C20\000\021\000&\000\003\000\016\000\020\000\021\000\033\000\034\000"+
+        "\035\000 \000&\000'\000)\000*\000+\0006\000\u00B5\000\u00BE\000\u00C4"+
+        "\000\u00C9\000\u00D0\000\u00DE\000\u0113\000\u011A\000\u012F\000\u013B"+
+        "\000\u0141\000\u0143\000\u0147\000\u0148\000\u0149\000\u014A\000\u0151"+
+        "\000\u0157\000\u015C\000\u015E\000\u0160\000\u0163\000\u0167\000\u016A"+
+        "\000\u2A30\000\007\000\026\000\007\000\011\000\026\000\027\000\036\000"+
+        "\037\000,\000.\000\u00B1\000\u00B3\000\u00BA\000\u00BB\000\u00D9\000\u00E3"+
+        "\000\u00E5\000\u0118\000\u0130\000\u0153\000\u0162\000\u0170\000\u0174"+
+        "\000\u0179\000\u2BD8\000\u00E8\000\003\000\u00E6\000\u00E7\000\u00E8\000"+
+        "\u3138\000\u00F1\000\001\000\u00F1\000\u3840\000\u00FB\000\014\000\u00B7"+
+        "\000\u00BC\000\u00C7\000\u00DD\000\u00F0\000\u00FB\000\u0131\000\u0159"+
+        "\000\u0176\000\u0178\000\u017A\000\u017F\000\u3F48\000\u00D1\000\001\000"+
+        "\u00D1\000\u4650\000\u00D3\000\015\000\u00B8\000\u00B9\000\u00BF\000\u00C8"+
+        "\000\u00D3\000\u00EA\000\u00EF\000\u00FA\000\u0132\000\u0171\000\u0175"+
+        "\000\u0177\000\u0181\000\u4D58\000\u00C1\000\002\000\u00C1\000\u016F\000"+
+        "\u50DC\000\u00D5\000\001\000\u00D5\000\u5460\000\u00C5\000\011\000\u00AE"+
+        "\000\u00B4\000\u00C3\000\u00C5\000\u00DF\000\u00E0\000\u00F2\000\u0112"+
+        "\000\u0133\000\u5B68\000\u00E4\000\002\000\u00E4\000\u0173\000\u6270\000"+
+        "\u00E9\000\013\000\u00AC\000\u00BD\000\u00CC\000\u00CE\000\u00D6\000\u00E1"+
+        "\000\u00E9\000\u00F7\000\u0134\000\u0172\000\u01AE\000\u7080\000\u00EC"+
+        "\000\024\000\u00AB\000\u00C0\000\u00C2\000\u00CA\000\u00CB\000\u00CD\000"+
+        "\u00D4\000\u00D7\000\u00D8\000\u00DA\000\u00DC\000\u00EC\000\u00ED\000"+
+        "\u00EE\000\u00F4\000\u00F5\000\u00F6\000\u010F\000\u0117\000\u0135\000"+
+        "\u7E90\000\u00F3\000\011\000\u00C6\000\u00CF\000\u00E2\000\u00EB\000\u00F3"+
+        "\000\u00F9\000\u0136\000\u017B\000\u019F\000\u8598\000\u010A\000\004\000"+
+        "\000\000\u0107\000\u0109\000\u010A\000\u8CA0\000\u0110\000\016\000\001"+
+        "\000\u00AD\000\u00F8\000\u0108\000\u010B\000\u010C\000\u010E\000\u0110"+
+        "\000\u012A\000\u0191\000\u01A2\000\u01A4\000\u01A8\000\u01AB\000\u93A8"+
+        "\000\u010D\000\001\000\u010D\000\u9AB0\000\u0190\000\010\000\u00DB\000"+
+        "\u012B\000\u0189\000\u0190\000\u0195\000\u019D\000\u01A1\000\u01AC\000"+
+        "\uA1B8\000\u019C\000\001\000\u019C\000\uA8C0\000\u0186\000\016\000\u00AF"+
+        "\000\u00B6\000\u00D2\000\u012C\000\u0180\000\u0186\000\u018C\000\u018D"+
+        "\000\u0196\000\u0197\000\u019A\000\u01A6\000\u01A9\000\u01AA\000\uB34C"+
+        "\000\u0187\000\001\000\u0187\000\uB6D0\000\u018A\000\003\000\u012D\000"+
+        "\u018A\000\u01A7\000\uC4E0\000\u0194\000\002\000\u012E\000\u0194"
+        ;
+
+    /**
+     * RLE encoded form of INDEX_BY_COUNTRY.
+     * @see com.ibm.util.Utility.RLEStringToIntArray
+     * >> GENERATED DATA: DO NOT EDIT <<
+     */
+    static final String INDEX_BY_COUNTRY_RLE =
+        "\000\u038C\000\000\000&\000\u00E6\000\u00E7\000\u00E8\000\u0114\000\u011A"+
+        "\000\u011C\000\u011D\000\u011E\000\u011F\000\u0120\000\u0121\000\u0122"+
+        "\000\u0123\000\u0124\000\u0125\000\u0126\000\u0127\000\u0128\000\u0129"+
+        "\000\u012A\000\u012B\000\u012C\000\u012D\000\u012E\000\u012F\000\u0130"+
+        "\000\u0131\000\u0132\000\u0133\000\u0134\000\u0135\000\u0136\000\u0137"+
+        "\000\u0138\000\u016C\000\u017C\000\u01AD\000\u01AF\000\003\000\001\000"+
+        "\u013A\000\004\000\001\000\u00C7\000\005\000\001\000\u00D1\000\006\000"+
+        "\001\000<\000\010\000\001\000;\000\013\000\001\000\u0161\000\014\000\002"+
+        "\000\u00FB\000\u017F\000\015\000\001\000R\000\016\000\001\000%\000\020"+
+        "\000\007\000\u00AB\000\u00AC\000\u00AD\000\u00AE\000\u00AF\000\u00B0\000"+
+        "\u00B1\000\021\000\007\000\002\000F\000J\000O\000o\000{\000\u0096\000"+
+        "\022\000\001\000\u019E\000\023\000\001\000\u0166\000\024\000\014\000\000"+
+        "\000\001\000\u0107\000\u0108\000\u0109\000\u010A\000\u010B\000\u010C\000"+
+        "\u010D\000\u010E\000\u010F\000\u0110\000\026\000\001\000>\000\031\000"+
+        "\001\000\u00BC\000 \000\001\000\u015B\000!\000\001\000@\000#\000\002\000"+
+        "\u00C5\000\u0112\000$\000\001\000\u0140\000%\000\001\0002\000&\000\001"+
+        "\000\u015E\000'\000\001\000\u00BB\000(\000\001\000\020\000)\000\001\000"+
+        "3\000,\000\001\000\u00FD\000-\000\001\000\u00C0\000.\000\001\000r\000"+
+        "1\000\016\000=\000A\000C\000Q\000Y\000[\000v\000x\000\u0088\000\u008F"+
+        "\000\u0090\000\u0094\000\u0099\000\u0111\0002\000\001\000\u0084\0003\000"+
+        "\001\000\u00F2\0006\000\001\000\033\0008\000\001\000\u0151\0009\000\001"+
+        "\000B\000@\000\027\000G\000S\000T\000X\000\134\000^\000e\000l\000m\000"+
+        "\u0082\000\u0086\000\u008A\000\u0092\000\u0093\000\u0095\000\u009B\000"+
+        "\u00A0\000\u00A3\000\u00A6\000\u00A7\000\u00A8\000\u00AA\000\u0115\000"+
+        "B\000\001\000\u0173\000C\000\002\000!\000&\000E\000\001\000\013\000F\000"+
+        "\001\000\017\000G\000\001\000\u016B\000H\000\001\000\005\000J\000\001"+
+        "\000\u01A3\000K\000\002\000\u0097\000\u0188\000L\000\001\000\030\000M"+
+        "\000\006\000\u00C2\000\u00CA\000\u00D4\000\u00EC\000\u00F6\000\u0117\000"+
+        "N\000\001\000D\000Q\000\001\000P\000T\000\001\000f\000U\000\001\000\u00FF"+
+        "\000W\000\001\000\u0172\000X\000\001\000\u00DE\000Y\000\001\000\u0156"+
+        "\000d\000\001\000\u013E\000i\000\001\000\027\000j\000\001\000\u0144\000"+
+        "l\000\001\000W\000n\000\001\000\u0098\000y\000\001\000\010\000\u0082\000"+
+        "\002\000c\000\u018E\000\u0084\000\001\000\u0160\000\u0086\000\002\000"+
+        "\003\000\021\000\u0087\000\001\000\031\000\u0091\000\001\000\011\000\u0092"+
+        "\000\003\000\023\000\u00FE\000\u014F\000\u0093\000\002\000\007\000\u0118"+
+        "\000\u00A8\000\001\000\u0147\000\u00A9\000\001\000\u018C\000\u00AA\000"+
+        "\001\000\u0106\000\u00AC\000\004\000\u0195\000\u01A1\000\u01A8\000\u01AB"+
+        "\000\u00AE\000\001\000\u0100\000\u00B1\000\002\000\u0119\000\u0155\000"+
+        "\u00C0\000\001\000#\000\u00C1\000\002\000\u013C\000\u014D\000\u00C3\000"+
+        "\001\000`\000\u00C4\000\001\000\u00F0\000\u00C5\000\001\000K\000\u00C7"+
+        "\000\001\000\006\000\u00C8\000\001\000\u0146\000\u00CB\000\003\000]\000"+
+        "\u009A\000\u00A2\000\u00CC\000\001\000\014\000\u00CD\000\001\000\024\000"+
+        "\u00CF\000\001\000a\000\u00D0\000\001\000(\000\u00D1\000\001\000\u013B"+
+        "\000\u00D2\000\001\000\u0104\000\u00D3\000\001\000b\000\u00D4\000\001"+
+        "\000\u0191\000\u00D6\000\001\000\015\000\u00D8\000\001\000d\000\u00EA"+
+        "\000\001\000\u00CB\000\u00ED\000\001\000\u00A1\000\u00F1\000\001\000\u0169"+
+        "\000\u00F3\000\001\000\u008D\000\u00F4\000\001\000\u0142\000\u0103\000"+
+        "\003\000\u00CE\000\u00CF\000\u00F4\000\u0104\000\001\000\u0145\000\u010B"+
+        "\000\001\000\u00D0\000\u010D\000\002\000\u00C1\000\u016F\000\u010E\000"+
+        "\001\000\u0171\000\u0110\000\001\000\u00BA\000\u0111\000\001\000\u00F1"+
+        "\000\u0112\000\001\000\u0103\000\u0113\000\001\000\u0158\000\u012C\000"+
+        "\001\000n\000\u012E\000\001\000\u00B5\000\u012F\000\002\000\u00F3\000"+
+        "\u017B\000\u0144\000\001\000.\000\u0146\000\001\000\u00BF\000\u0147\000"+
+        "\001\000\u00E1\000\u0148\000\003\000\u018A\000\u0194\000\u01A6\000\u014C"+
+        "\000\001\000\u0174\000\u014D\000\001\000\u009C\000\u014F\000\001\000\u00E2"+
+        "\000\u0151\000\001\000\u00EB\000\u0156\000\001\000\u00D9\000\u0158\000"+
+        "\001\000L\000\u0159\000\003\000\u00B4\000\u00B7\000\u00B8\000\u0160\000"+
+        "\001\000\u00F7\000\u0161\000\001\000\u00BE\000\u0162\000\001\000\u009D"+
+        "\000\u0168\000\001\000\u0164\000\u016A\000\001\000\u00C3\000\u0171\000"+
+        "\001\000-\000\u0172\000\001\000*\000\u0173\000\001\000\u0167\000\u0174"+
+        "\000\001\000\u014E\000\u0175\000\001\000\u0157\000\u0178\000\001\0006"+
+        "\000\u0180\000\001\000\022\000\u0182\000\001\000\u0152\000\u0183\000\002"+
+        "\000\u0143\000\u0162\000\u0186\000\001\000\u0170\000\u0187\000\002\000"+
+        "\u0196\000\u0197\000\u018A\000\001\000\u015D\000\u018B\000\002\000\012"+
+        "\0005\000\u018C\000\001\000\u00E4\000\u018D\000\002\000\u00CC\000\u00F5"+
+        "\000\u018E\000\001\000\u00DA\000\u018F\000\001\000\u01A4\000\u0190\000"+
+        "\001\000y\000\u0191\000\001\0001\000\u0192\000\001\000\u0083\000\u0193"+
+        "\000\001\000\u0150\000\u0194\000\001\000\u0178\000\u0195\000\001\000\u0177"+
+        "\000\u0196\000\001\000\016\000\u0197\000\010\000H\000N\000g\000z\000}"+
+        "\000~\000\u0080\000\u00A4\000\u0198\000\002\000\u00D7\000\u00D8\000\u0199"+
+        "\000\001\000)\000\u01A0\000\001\0008\000\u01A2\000\001\000\u019D\000\u01A4"+
+        "\000\001\0000\000\u01A5\000\001\000\u019C\000\u01A6\000\001\000\042\000"+
+        "\u01A8\000\001\000w\000\u01AB\000\001\000\u0139\000\u01AE\000\001\000"+
+        "\u0154\000\u01AF\000\001\000\u00D5\000\u01B1\000\001\000\u019A\000\u01B4"+
+        "\000\001\000\u019B\000\u01B9\000\003\000\u0180\000\u0186\000\u0187\000"+
+        "\u01CC\000\001\000\u00DD\000\u01E0\000\001\000\u0089\000\u01E4\000\001"+
+        "\000s\000\u01E5\000\003\000\u018F\000\u0198\000\u01A5\000\u01E6\000\001"+
+        "\000\u01A2\000\u01E7\000\001\000\u00DC\000\u01EA\000\002\000\u00D3\000"+
+        "\u0181\000\u01EB\000\001\000\u0168\000\u01EC\000\001\000\u007F\000\u01ED"+
+        "\000\001\000\u01A0\000\u01F1\000\002\000\u0091\000\u0183\000\u01F2\000"+
+        "\001\000\u00C9\000\u01F3\000\003\000\u00FC\000\u0102\000\u014B\000\u01F6"+
+        "\000\001\000\u019F\000\u01F8\000\001\000?\000\u0200\000\001\000\u00E3"+
+        "\000\u0224\000\001\000\u017A\000\u022E\000\001\000\u0141\000\u0234\000"+
+        "\015\000\u00B6\000\u00CD\000\u00D2\000\u00D6\000\u00DB\000\u00DF\000\u00E0"+
+        "\000\u00F8\000\u00F9\000\u00FA\000\u0149\000\u0153\000\u0159\000\u0236"+
+        "\000\001\000 \000\u0240\000\001\000\u00E5\000\u0241\000\002\000\u0190"+
+        "\000\u01AC\000\u0242\000\001\000\u0176\000\u0243\000\001\000\037\000\u0244"+
+        "\000\001\000\u015F\000\u0246\000\001\000\u00ED\000\u0247\000\001\000\u0105"+
+        "\000\u0248\000\001\000\u014C\000\u0249\000\002\000\u00B2\000\u0101\000"+
+        "\u024A\000\001\000\u013F\000\u024B\000\001\000\032\000\u024C\000\001\000"+
+        "\u015A\000\u024D\000\001\000\025\000\u024E\000\001\000,\000\u0251\000"+
+        "\001\000\u008B\000\u0253\000\001\0004\000\u0255\000\001\000Z\000\u0258"+
+        "\000\001\000\u00C4\000\u0259\000\001\000+\000\u0262\000\001\000_\000\u0263"+
+        "\000\001\000/\000\u0265\000\001\000\u0175\000\u0266\000\001\000$\000\u0267"+
+        "\000\001\000\u00BD\000\u0269\000\001\000\u00C8\000\u026A\000\001\000\u018B"+
+        "\000\u026C\000\001\000\u00B9\000\u026D\000\001\0007\000\u026E\000\001"+
+        "\000\u01A7\000\u026F\000\001\000\u00C6\000\u0271\000\001\000\u0148\000"+
+        "\u0273\000\001\000\u008E\000\u0275\000\001\000\u018D\000\u0276\000\001"+
+        "\000\u00EE\000\u0279\000\001\000\026\000\u0280\000\004\000\u014A\000\u015C"+
+        "\000\u0163\000\u016A\000\u0286\000\001\000\036\000\u028C\000\003\000\u0193"+
+        "\000\u0199\000\u01A9\000\u0292\000\034\000\004\0009\000:\000E\000M\000"+
+        "U\000V\000h\000i\000j\000k\000p\000q\000t\000u\000|\000\u0085\000\u0087"+
+        "\000\u008C\000\u00A9\000\u0116\000\u011B\000\u016D\000\u016E\000\u017E"+
+        "\000\u0182\000\u0184\000\u0192\000\u0298\000\001\000\u0081\000\u0299\000"+
+        "\002\000\u00EA\000\u00EF\000\u02A0\000\001\000\u0165\000\u02A2\000\001"+
+        "\000\u009F\000\u02A4\000\001\000I\000\u02A6\000\001\000\u00A5\000\u02A8"+
+        "\000\001\000\u009E\000\u02AD\000\002\000\u00E9\000\u01AE\000\u02B4\000"+
+        "\001\000\u0189\000\u02C5\000\001\000\u01AA\000\u02D2\000\002\000\u017D"+
+        "\000\u0185\000\u0304\000\001\000\u00B3\000\u0313\000\001\000\u0179\000"+
+        "\u0314\000\001\000\u013D\000\u0320\000\001\000\035\000\u032C\000\001\000"+
+        "'\000\u0336\000\002\000\034\000\u0113"
+        ;
+
+    // END GENERATED SOURCE CODE
+    //----------------------------------------------------------------
+
+    static {
+        // Unpack the int[] DATA array
+        DATA = Utility.RLEStringToIntArray(DATA_RLE);
+
+        // Unpack the int[] INDEX_BY_OFFSET array
+        INDEX_BY_OFFSET = Utility.RLEStringToIntArray(INDEX_BY_OFFSET_RLE);
+
+        // Unpack the int[] INDEX_BY_COUNTRY array
+        INDEX_BY_COUNTRY = Utility.RLEStringToIntArray(INDEX_BY_COUNTRY_RLE);
+
+        // Construct the index by name.  We unpack this array and then
+        // discard it after we're done with it.
+        int[] index_by_name_array = Utility.RLEStringToIntArray(INDEX_BY_NAME_ARRAY_RLE);
+        for (int i=0; i<IDS.length; ++i) {
+            INDEX_BY_NAME.put(IDS[i], new Integer(index_by_name_array[i]));
+        }
+    }
+}
diff --git a/src/com/ibm/util/TrieBuilder.java b/src/com/ibm/util/TrieBuilder.java
new file mode 100755
index 0000000..ba90222
--- /dev/null
+++ b/src/com/ibm/util/TrieBuilder.java
@@ -0,0 +1,224 @@
+/*
+******************************************************************************
+* Copyright (C) 1996-2000, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/TrieBuilder.java,v $ 
+* $Date: 2001/03/28 00:01:51 $ 
+* $Revision: 1.2 $
+*
+******************************************************************************
+*/
+
+package com.ibm.util;
+
+/**
+* Builder lass to manipulate and generate a trie.
+* This is useful for ICU data in primitive types.
+* Provides a compact way to store information that is indexed by Unicode 
+* values, such as character properties, types, keyboard values, etc. This is 
+* very useful when you have a block of Unicode data that contains significant 
+* values while the rest of the Unicode data is unused in the application or 
+* when you have a lot of redundance, such as where all 21,000 Han ideographs 
+* have the same value.  However, lookup is much faster than a hash table.
+* A trie of any primitive data type serves two purposes:
+* <UL type = round>
+*     <LI>Fast access of the indexed values.
+*     <LI>Smaller memory footprint.
+* </UL>
+* A trie is composed of 2 index array and value array. Combining the 2 index
+* array, we could get the indicies of Unicode characters to the value array.
+* The first index array will contain indexes corresponding to the first 11 
+* bits of a 21 bit codepoint, the second index array will contain indexes 
+* corresponding to the next 6 bits of the code point. The last array will 
+* contain the values. Hence to access the value of a codepoint, we can use the 
+* following program.
+* <p>
+*   int firstindex = ch >> FIRST_SET_OF_BITS_SHIFT;<br>
+*   int secondindex = index1[firstindex] + 
+*                  (ch >> NEXT_SET_OF_BITS_SHIFT) & NEXT_SET_OF_BITS_MASK;<br>
+*   int thirdindex = index2[secondindex] + ch & LAST_SET_OF_BITS_MASK;<br>    
+*   f(ch) = value[thirdindex];<br>
+* </p>
+* @version            $Revision: 1.2 $
+* @author             Syn Wee Quek
+*/
+final class TrieBuilder
+{
+  // public methods ----------------------------------------------------
+  
+  /**
+  * Takes argument array and forms a compact array into the result arrays.
+  * The result will be 
+  * <code>
+  *   array[index] == valuearray[indexarray[index]]
+  * </code>.
+  * Note : This method is generic, it only takes values from the array. 
+  * @param array value array to be manipulated
+  * @param start index of the array to process
+  * @param length of array to process.
+  * @param blocksize size of each blocks existing in valuearray
+  * @param indexarray result index array with length = array.length, with 
+  *        values which indexes to valuearray.
+  * @param valuearray result value array compact value array
+  * @return size of valuearray
+  */
+  static int build(byte array[], int start, int length, int blocksize, 
+                   int indexarray[], byte valuearray[])
+  {
+    int valuesize = 0;
+    int valueindex;
+    int blockcount = 0;  
+    int index = 0;
+    int min;
+    
+    while (start < length) {
+      // for a block of blocksize in the array
+      // we try to find a similar block in valuearray
+      for (valueindex = 0; valueindex < valuesize; valueindex ++) {
+        // testing each block of blocksize at index valueindex in valuearray
+        // if it is == to array blocks
+        min = Math.min(blocksize, valuesize - valueindex);
+        for (blockcount = 0; blockcount < min;blockcount ++) {
+          if (array[start + blockcount] != 
+                                        valuearray[valueindex + blockcount]) {
+            break;
+          }
+        }
+        
+        if (blockcount == blocksize || valueindex + blockcount == valuesize) {
+          break;
+        }
+      }
+
+      // if no similar block is found in value array
+      // we populate the result arrays with data
+      for (min = Math.min(blocksize, length - start); blockcount < min; 
+                                                              blockcount ++) {
+        valuearray[valuesize ++] = array[start + blockcount];
+      }
+        
+      indexarray[index ++] = valueindex;
+      start += blocksize;
+    }
+    
+    return valuesize;
+  }
+  
+  /**
+  * Takes argument array and forms a compact array into the result arrays.
+  * The result will be 
+  * <code>
+  *   array[index] == valuearray[indexarray[index]]
+  * </code>.
+  * Note : This method is generic, it only takes values from the array. 
+  * @param array value array to be manipulated
+  * @param start index of the array to process
+  * @param length of array to process.
+  * @param blocksize size of each blocks existing in valuearray
+  * @param indexarray result index array with length = array.length, with 
+  *        values which indexes to valuearray.
+  * @param valuearray result value array compact value array
+  * @return size of valuearray
+  */
+  static int build(char array[], int start, int length, int blocksize, 
+                   int indexarray[], char valuearray[])
+  {
+    int valuesize = 0;
+    int valueindex;
+    int blockcount = 0;  
+    int index = 0;
+    int min;
+    
+    while (start < length) {
+      // for a block of blocksize in the array
+      // we try to find a similar block in valuearray
+      for (valueindex = 0; valueindex < valuesize; valueindex ++) {
+        // testing each block of blocksize at index valueindex in valuearray
+        // if it is == to array blocks
+        min = Math.min(blocksize, valuesize - valueindex);
+        for (blockcount = 0; blockcount < min;blockcount ++) {
+          if (array[start + blockcount] != 
+                                        valuearray[valueindex + blockcount]) {
+            break;
+          }
+        }
+        
+        if (blockcount == blocksize || valueindex + blockcount == valuesize) {
+          break;
+        }
+      }
+
+      // if no similar block is found in value array
+      // we populate the result arrays with data
+      for (min = Math.min(blocksize, length - start); blockcount < min; 
+                                                              blockcount ++) {
+        valuearray[valuesize ++] = array[start + blockcount];
+      }
+        
+      indexarray[index ++] = valueindex;
+      start += blocksize;
+    }
+    
+    return valuesize;
+  }
+  
+  /**
+  * Takes argument array and forms a compact array into the result arrays.
+  * The result will be 
+  * <code>
+  *   array[index] == valuearray[indexarray[index]]
+  * </code>.
+  * Note : This method is generic, it only takes values from the array. 
+  * @param array value array to be manipulated
+  * @param start index of the array to process
+  * @param length of array to process.
+  * @param blocksize size of each blocks existing in valuearray
+  * @param indexarray result index array with length = array.length, with 
+  *        values which indexes to valuearray.
+  * @param valuearray result value array compact value array
+  * @return size of valuearray 
+  */
+  static int build(int array[], int start, int length, int blocksize, 
+                   int indexarray[], int valuearray[])
+  {
+    int valuesize = 0;
+    int valueindex;
+    int blockcount = 0;  
+    int index = 0;
+    int min;
+    
+    while (start < length) {
+      // for a block of blocksize in the array
+      // we try to find a similar block in valuearray
+      for (valueindex = 0; valueindex < valuesize; valueindex ++) {
+        // testing each block of blocksize at index valueindex in valuearray
+        // if it is == to array blocks
+        min = Math.min(blocksize, valuesize - valueindex);
+        for (blockcount = 0; blockcount < min; blockcount ++) {
+          if (array[start + blockcount] != 
+                                        valuearray[valueindex + blockcount]) {
+            break;
+          }
+        }
+        
+        if (blockcount == blocksize || valueindex + blockcount == valuesize) {
+          break;
+        }
+      }
+
+      // if no similar block is found in value array
+      // we populate the result arrays with data
+      min = Math.min(blocksize, length - start);
+      for (; blockcount < min; blockcount ++) {
+        valuearray[valuesize ++] = array[start + blockcount];
+      }
+        
+      indexarray[index ++] = valueindex;
+      start += blocksize;
+    }
+    
+    return valuesize;
+  }
+}
\ No newline at end of file
diff --git a/src/com/ibm/util/Utility.java b/src/com/ibm/util/Utility.java
new file mode 100755
index 0000000..1449c0f
--- /dev/null
+++ b/src/com/ibm/util/Utility.java
@@ -0,0 +1,733 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/Utility.java,v $ 
+ * $Date: 2001/01/09 20:07:16 $ 
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+public final class Utility {
+
+    /**
+     * Convenience utility to compare two Object[]s.
+     * Ought to be in System
+     */
+    public final static boolean arrayEquals(Object[] source, Object target) {
+        if (source == null) return (target == null);
+        if (!(target instanceof Object[])) return false;
+        Object[] targ = (Object[]) target;
+        return (source.length == targ.length
+                && arrayRegionMatches(source, 0, targ, 0, source.length));
+    }
+
+    /**
+     * Convenience utility to compare two int[]s
+     * Ought to be in System
+     */
+    public final static boolean arrayEquals(int[] source, Object target) {
+        if (source == null) return (target == null);
+        if (!(target instanceof int[])) return false;
+        int[] targ = (int[]) target;
+        return (source.length == targ.length
+                && arrayRegionMatches(source, 0, targ, 0, source.length));
+    }
+
+    /**
+     * Convenience utility to compare two double[]s
+     * Ought to be in System
+     */
+    public final static boolean arrayEquals(double[] source, Object target) {
+        if (source == null) return (target == null);
+        if (!(target instanceof double[])) return false;
+        double[] targ = (double[]) target;
+        return (source.length == targ.length
+                && arrayRegionMatches(source, 0, targ, 0, source.length));
+    }
+
+    /**
+     * Convenience utility to compare two Object[]s
+     * Ought to be in System
+     */
+    public final static boolean arrayEquals(Object source, Object target) {
+        if (source == null) return (target == null);
+        // for some reason, the correct arrayEquals is not being called
+        // so do it by hand for now.
+        if (source instanceof Object[])
+            return(arrayEquals((Object[]) source,target));
+        if (source instanceof int[])
+            return(arrayEquals((int[]) source,target));
+        if (source instanceof double[])
+            return(arrayEquals((int[]) source,target));
+        return source.equals(target);
+    }
+
+    /**
+     * Convenience utility to compare two Object[]s
+     * Ought to be in System.
+     * @param len the length to compare.
+     * The start indices and start+len must be valid.
+     */
+    public final static boolean arrayRegionMatches(Object[] source, int sourceStart,
+                                            Object[] target, int targetStart,
+                                            int len)
+    {
+        int sourceEnd = sourceStart + len;
+        int delta = targetStart - sourceStart;
+        for (int i = sourceStart; i < sourceEnd; i++) {
+            if (!arrayEquals(source[i],target[i + delta]))
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Convenience utility to compare two int[]s.
+     * @param len the length to compare.
+     * The start indices and start+len must be valid.
+     * Ought to be in System
+     */
+    public final static boolean arrayRegionMatches(int[] source, int sourceStart,
+                                            int[] target, int targetStart,
+                                            int len)
+    {
+        int sourceEnd = sourceStart + len;
+        int delta = targetStart - sourceStart;
+        for (int i = sourceStart; i < sourceEnd; i++) {
+            if (source[i] != target[i + delta])
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Convenience utility to compare two arrays of doubles.
+     * @param len the length to compare.
+     * The start indices and start+len must be valid.
+     * Ought to be in System
+     */
+    public final static boolean arrayRegionMatches(double[] source, int sourceStart,
+                                            double[] target, int targetStart,
+                                            int len)
+    {
+        int sourceEnd = sourceStart + len;
+        int delta = targetStart - sourceStart;
+        for (int i = sourceStart; i < sourceEnd; i++) {
+            if (source[i] != target[i + delta])
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Convenience utility. Does null checks on objects, then calls equals.
+     */
+    public final static boolean objectEquals(Object source, Object target) {
+    if (source == null)
+            return (target == null);
+    else
+            return source.equals(target);
+    }
+
+    /**
+     * The ESCAPE character is used during run-length encoding.  It signals
+     * a run of identical chars.
+     */
+    private static final char ESCAPE = '\uA5A5';
+
+    /**
+     * The ESCAPE_BYTE character is used during run-length encoding.  It signals
+     * a run of identical bytes.
+     */
+    static final byte ESCAPE_BYTE = (byte)0xA5;
+
+    /**
+     * Construct a string representing an int array.  Use run-length encoding.
+     * A character represents itself, unless it is the ESCAPE character.  Then
+     * the following notations are possible:
+     *   ESCAPE ESCAPE   ESCAPE literal
+     *   ESCAPE n c      n instances of character c
+     * Since an encoded run occupies 3 characters, we only encode runs of 4 or
+     * more characters.  Thus we have n > 0 and n != ESCAPE and n <= 0xFFFF.
+     * If we encounter a run where n == ESCAPE, we represent this as:
+     *   c ESCAPE n-1 c
+     * The ESCAPE value is chosen so as not to collide with commonly
+     * seen values.
+     */
+    static public final String arrayToRLEString(int[] a) {
+        StringBuffer buffer = new StringBuffer();
+
+        appendInt(buffer, a.length);
+        int runValue = a[0];
+        int runLength = 1;
+        for (int i=1; i<a.length; ++i) {
+            int s = a[i];
+            if (s == runValue && runLength < 0xFFFF) {
+                ++runLength;
+            } else {
+                encodeRun(buffer, runValue, runLength);
+                runValue = s;
+                runLength = 1;
+            }
+        }
+        encodeRun(buffer, runValue, runLength);
+        return buffer.toString();
+    }
+
+    /**
+     * Construct a string representing a short array.  Use run-length encoding.
+     * A character represents itself, unless it is the ESCAPE character.  Then
+     * the following notations are possible:
+     *   ESCAPE ESCAPE   ESCAPE literal
+     *   ESCAPE n c      n instances of character c
+     * Since an encoded run occupies 3 characters, we only encode runs of 4 or
+     * more characters.  Thus we have n > 0 and n != ESCAPE and n <= 0xFFFF.
+     * If we encounter a run where n == ESCAPE, we represent this as:
+     *   c ESCAPE n-1 c
+     * The ESCAPE value is chosen so as not to collide with commonly
+     * seen values.
+     */
+    static public final String arrayToRLEString(short[] a) {
+        StringBuffer buffer = new StringBuffer();
+        // for (int i=0; i<a.length; ++i) buffer.append((char) a[i]);
+        buffer.append((char) (a.length >> 16));
+        buffer.append((char) a.length);
+        short runValue = a[0];
+        int runLength = 1;
+        for (int i=1; i<a.length; ++i) {
+            short s = a[i];
+            if (s == runValue && runLength < 0xFFFF) ++runLength;
+            else {
+            encodeRun(buffer, runValue, runLength);
+            runValue = s;
+            runLength = 1;
+            }
+        }
+        encodeRun(buffer, runValue, runLength);
+        return buffer.toString();
+    }
+
+    /**
+     * Construct a string representing a char array.  Use run-length encoding.
+     * A character represents itself, unless it is the ESCAPE character.  Then
+     * the following notations are possible:
+     *   ESCAPE ESCAPE   ESCAPE literal
+     *   ESCAPE n c      n instances of character c
+     * Since an encoded run occupies 3 characters, we only encode runs of 4 or
+     * more characters.  Thus we have n > 0 and n != ESCAPE and n <= 0xFFFF.
+     * If we encounter a run where n == ESCAPE, we represent this as:
+     *   c ESCAPE n-1 c
+     * The ESCAPE value is chosen so as not to collide with commonly
+     * seen values.
+     */
+    static public final String arrayToRLEString(char[] a) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append((char) (a.length >> 16));
+        buffer.append((char) a.length);
+        char runValue = a[0];
+        int runLength = 1;
+        for (int i=1; i<a.length; ++i) {
+            char s = a[i];
+            if (s == runValue && runLength < 0xFFFF) ++runLength;
+            else {
+            encodeRun(buffer, (short)runValue, runLength);
+            runValue = s;
+            runLength = 1;
+            }
+        }
+        encodeRun(buffer, (short)runValue, runLength);
+        return buffer.toString();
+    }
+
+    /**
+     * Construct a string representing a byte array.  Use run-length encoding.
+     * Two bytes are packed into a single char, with a single extra zero byte at
+     * the end if needed.  A byte represents itself, unless it is the
+     * ESCAPE_BYTE.  Then the following notations are possible:
+     *   ESCAPE_BYTE ESCAPE_BYTE   ESCAPE_BYTE literal
+     *   ESCAPE_BYTE n b           n instances of byte b
+     * Since an encoded run occupies 3 bytes, we only encode runs of 4 or
+     * more bytes.  Thus we have n > 0 and n != ESCAPE_BYTE and n <= 0xFF.
+     * If we encounter a run where n == ESCAPE_BYTE, we represent this as:
+     *   b ESCAPE_BYTE n-1 b
+     * The ESCAPE_BYTE value is chosen so as not to collide with commonly
+     * seen values.
+     */
+    static public final String arrayToRLEString(byte[] a) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append((char) (a.length >> 16));
+        buffer.append((char) a.length);
+        byte runValue = a[0];
+        int runLength = 1;
+        byte[] state = new byte[2];
+        for (int i=1; i<a.length; ++i) {
+            byte b = a[i];
+            if (b == runValue && runLength < 0xFF) ++runLength;
+            else {
+                encodeRun(buffer, runValue, runLength, state);
+                runValue = b;
+                runLength = 1;
+            }
+        }
+        encodeRun(buffer, runValue, runLength, state);
+
+        // We must save the final byte, if there is one, by padding
+        // an extra zero.
+        if (state[0] != 0) appendEncodedByte(buffer, (byte)0, state);
+
+        return buffer.toString();
+    }
+
+    /**
+     * Encode a run, possibly a degenerate run (of < 4 values).
+     * @param length The length of the run; must be > 0 && <= 0xFFFF.
+     */
+    private static final void encodeRun(StringBuffer buffer, int value, int length) {
+        if (length < 4) {
+            for (int j=0; j<length; ++j) {
+                if (value == ESCAPE) {
+                    appendInt(buffer, value);
+                }
+                appendInt(buffer, value);
+            }
+        }
+        else {
+            if (length == (int) ESCAPE) {
+                if (value == (int) ESCAPE) {
+                    appendInt(buffer, ESCAPE);
+                }
+                appendInt(buffer, value);
+                --length;
+            }
+            appendInt(buffer, ESCAPE);
+            appendInt(buffer, length);
+            appendInt(buffer, value); // Don't need to escape this value
+        }
+    }
+    private static final void appendInt(StringBuffer buffer, int value) {
+        buffer.append((char)(value >>> 16));
+        buffer.append((char)(value & 0xFFFF));
+    }
+
+
+    /**
+     * Encode a run, possibly a degenerate run (of < 4 values).
+     * @param length The length of the run; must be > 0 && <= 0xFFFF.
+     */
+    private static final void encodeRun(StringBuffer buffer, short value, int length) {
+        if (length < 4) {
+            for (int j=0; j<length; ++j) {
+                if (value == (int) ESCAPE) buffer.append(ESCAPE);
+                buffer.append((char) value);
+            }
+        }
+        else {
+            if (length == (int) ESCAPE) {
+                if (value == (int) ESCAPE) buffer.append(ESCAPE);
+                buffer.append((char) value);
+                --length;
+            }
+            buffer.append(ESCAPE);
+            buffer.append((char) length);
+            buffer.append((char) value); // Don't need to escape this value
+        }
+    }
+
+    /**
+     * Encode a run, possibly a degenerate run (of < 4 values).
+     * @param length The length of the run; must be > 0 && <= 0xFF.
+     */
+    private static final void encodeRun(StringBuffer buffer, byte value, int length,
+                    byte[] state) {
+        if (length < 4) {
+            for (int j=0; j<length; ++j) {
+                if (value == ESCAPE_BYTE) appendEncodedByte(buffer, ESCAPE_BYTE, state);
+                appendEncodedByte(buffer, value, state);
+            }
+        }
+        else {
+            if (length == ESCAPE_BYTE) {
+            if (value == ESCAPE_BYTE) appendEncodedByte(buffer, ESCAPE_BYTE, state);
+            appendEncodedByte(buffer, value, state);
+            --length;
+            }
+            appendEncodedByte(buffer, ESCAPE_BYTE, state);
+            appendEncodedByte(buffer, (byte)length, state);
+            appendEncodedByte(buffer, value, state); // Don't need to escape this value
+        }
+    }
+
+    /**
+     * Append a byte to the given StringBuffer, packing two bytes into each
+     * character.  The state parameter maintains intermediary data between
+     * calls.
+     * @param state A two-element array, with state[0] == 0 if this is the
+     * first byte of a pair, or state[0] != 0 if this is the second byte
+     * of a pair, in which case state[1] is the first byte.
+     */
+    private static final void appendEncodedByte(StringBuffer buffer, byte value,
+                        byte[] state) {
+        if (state[0] != 0) {
+            char c = (char) ((state[1] << 8) | (((int) value) & 0xFF));
+            buffer.append(c);
+            state[0] = 0;
+        }
+        else {
+            state[0] = 1;
+            state[1] = value;
+        }
+    }
+
+    /**
+     * Construct an array of ints from a run-length encoded string.
+     */
+    static public final int[] RLEStringToIntArray(String s) {
+        int length = getInt(s, 0);
+        int[] array = new int[length];
+        int ai = 0, i = 1;
+
+        int maxI = s.length() / 2;
+        while (ai < length && i < maxI) {
+            int c = getInt(s, i++);
+
+            if (c == ESCAPE) {
+                c = getInt(s, i++);
+                if (c == ESCAPE) {
+                    array[ai++] = c;
+                } else {
+                    int runLength = c;
+                    int runValue = getInt(s, i++);
+                    for (int j=0; j<runLength; ++j) {
+                        array[ai++] = runValue;
+                    }
+                }
+            }
+            else {
+                array[ai++] = c;
+            }
+        }
+
+        if (ai != length || i != maxI) {
+            throw new InternalError("Bad run-length encoded int array");
+        }
+
+        return array;
+    }
+    static final int getInt(String s, int i) {
+        return (((int) s.charAt(2*i)) << 16) | (int) s.charAt(2*i+1);
+    }
+
+
+    /**
+     * Construct an array of shorts from a run-length encoded string.
+     */
+    static public final short[] RLEStringToShortArray(String s) {
+        int length = (((int) s.charAt(0)) << 16) | ((int) s.charAt(1));
+        short[] array = new short[length];
+        int ai = 0;
+        for (int i=2; i<s.length(); ++i) {
+            char c = s.charAt(i);
+            if (c == ESCAPE) {
+                c = s.charAt(++i);
+                if (c == ESCAPE) {
+                    array[ai++] = (short) c;
+                } else {
+                    int runLength = (int) c;
+                    short runValue = (short) s.charAt(++i);
+                    for (int j=0; j<runLength; ++j) array[ai++] = runValue;
+                }
+            }
+            else {
+                array[ai++] = (short) c;
+            }
+        }
+
+        if (ai != length)
+            throw new InternalError("Bad run-length encoded short array");
+
+        return array;
+    }
+
+    /**
+     * Construct an array of shorts from a run-length encoded string.
+     */
+    static public final char[] RLEStringToCharArray(String s) {
+        int length = (((int) s.charAt(0)) << 16) | ((int) s.charAt(1));
+        char[] array = new char[length];
+        int ai = 0;
+        for (int i=2; i<s.length(); ++i) {
+            char c = s.charAt(i);
+            if (c == ESCAPE) {
+                c = s.charAt(++i);
+                if (c == ESCAPE) {
+                    array[ai++] = c;
+                } else {
+                    int runLength = (int) c;
+                    char runValue = s.charAt(++i);
+                    for (int j=0; j<runLength; ++j) array[ai++] = runValue;
+                }
+            }
+            else {
+                array[ai++] = c;
+            }
+        }
+
+        if (ai != length)
+            throw new InternalError("Bad run-length encoded short array");
+
+        return array;
+    }
+
+    /**
+     * Construct an array of bytes from a run-length encoded string.
+     */
+    static public final byte[] RLEStringToByteArray(String s) {
+        int length = (((int) s.charAt(0)) << 16) | ((int) s.charAt(1));
+        byte[] array = new byte[length];
+        boolean nextChar = true;
+        char c = 0;
+        int node = 0;
+        int runLength = 0;
+        int i = 2;
+        for (int ai=0; ai<length; ) {
+            // This part of the loop places the next byte into the local
+            // variable 'b' each time through the loop.  It keeps the
+            // current character in 'c' and uses the boolean 'nextChar'
+            // to see if we've taken both bytes out of 'c' yet.
+            byte b;
+            if (nextChar) {
+                c = s.charAt(i++);
+                b = (byte) (c >> 8);
+                nextChar = false;
+            }
+            else {
+                b = (byte) (c & 0xFF);
+                nextChar = true;
+            }
+
+            // This part of the loop is a tiny state machine which handles
+            // the parsing of the run-length encoding.  This would be simpler
+            // if we could look ahead, but we can't, so we use 'node' to
+            // move between three nodes in the state machine.
+            switch (node) {
+            case 0:
+                // Normal idle node
+                if (b == ESCAPE_BYTE) {
+                    node = 1;
+                }
+                else {
+                    array[ai++] = b;
+                }
+                break;
+            case 1:
+                // We have seen one ESCAPE_BYTE; we expect either a second
+                // one, or a run length and value.
+                if (b == ESCAPE_BYTE) {
+                    array[ai++] = ESCAPE_BYTE;
+                    node = 0;
+                }
+                else {
+                    runLength = b;
+                    // Interpret signed byte as unsigned
+                    if (runLength < 0) runLength += 0x100;
+                    node = 2;
+                }
+                break;
+            case 2:
+                // We have seen an ESCAPE_BYTE and length byte.  We interpret
+                // the next byte as the value to be repeated.
+                for (int j=0; j<runLength; ++j) array[ai++] = b;
+                node = 0;
+                break;
+            }
+        }
+
+        if (node != 0)
+            throw new InternalError("Bad run-length encoded byte array");
+
+        if (i != s.length())
+            throw new InternalError("Excess data in RLE byte array string");
+
+        return array;
+    }
+
+    static public String LINE_SEPARATOR = System.getProperty("line.separator");
+
+    /**
+     * Format a String for representation in a source file.  This includes
+     * breaking it into lines and escaping characters using octal notation
+     * when necessary (control characters and double quotes).
+     */
+    static public final String formatForSource(String s) {
+        StringBuffer buffer = new StringBuffer();
+        for (int i=0; i<s.length();) {
+            if (i > 0) buffer.append('+').append(LINE_SEPARATOR);
+            buffer.append("        \"");
+            int count = 11;
+            while (i<s.length() && count<80) {
+            char c = s.charAt(i++);
+            if (c < '\u0020' || c == '"' || c == '\\') {
+                // Represent control characters, backslash and double quote
+                // using octal notation; otherwise the string we form
+                // won't compile, since Unicode escape sequences are
+                // processed before tokenization.
+                buffer.append('\\');
+                buffer.append(HEX_DIGIT[(c & 0700) >> 6]); // HEX_DIGIT works for octal
+                buffer.append(HEX_DIGIT[(c & 0070) >> 3]);
+                buffer.append(HEX_DIGIT[(c & 0007)]);
+                count += 4;
+            }
+            else if (c <= '\u007E') {
+                buffer.append(c);
+                count += 1;
+            }
+            else {
+                buffer.append("\\u");
+                buffer.append(HEX_DIGIT[(c & 0xF000) >> 12]);
+                buffer.append(HEX_DIGIT[(c & 0x0F00) >> 8]);
+                buffer.append(HEX_DIGIT[(c & 0x00F0) >> 4]);
+                buffer.append(HEX_DIGIT[(c & 0x000F)]);
+                count += 6;
+            }
+            }
+            buffer.append('"');
+        }
+        return buffer.toString();
+    }
+
+    static final char[] HEX_DIGIT = {'0','1','2','3','4','5','6','7',
+                     '8','9','A','B','C','D','E','F'};
+
+
+    /**
+     * Convert characters outside the range U+0020 to U+007F to
+     * Unicode escapes, and convert backslash to a double backslash.
+     */
+    public static final String escape(String s) {
+        StringBuffer buf = new StringBuffer();
+        for (int i=0; i<s.length(); ++i) {
+            char c = s.charAt(i);
+            if (c >= ' ' && c <= 0x007F) {
+                if (c == '\\') {
+                    buf.append("\\\\"); // That is, "\\"
+                } else {
+                    buf.append(c);
+                }
+            } else {
+                buf.append("\\u");
+                if (c < 0x1000) {
+                    buf.append('0');
+                    if (c < 0x100) {
+                        buf.append('0');
+                        if (c < 0x10) {
+                            buf.append('0');
+                        }
+                    }
+                }
+                buf.append(Integer.toHexString(c));
+            }
+        }
+        return buf.toString();
+    }
+
+    /**
+     * Convert a char to 4 hex uppercase digits.  E.g., hex('a') =>
+     * "0041".
+     */
+    public static String hex(char ch) {
+        StringBuffer temp = new StringBuffer();
+        return hex(ch, temp).toString();
+    }
+
+    /**
+     * Convert a string to comma-separated groups of 4 hex uppercase
+     * digits.  E.g., hex('ab') => "0041,0042".
+     */
+    public static String hex(String s) {
+        StringBuffer temp = new StringBuffer();
+        return hex(s, temp).toString();
+    }
+
+    /**
+     * Convert a string to comma-separated groups of 4 hex uppercase
+     * digits.  E.g., hex('ab') => "0041,0042".
+     */
+    public static String hex(StringBuffer s) {
+        return hex(s.toString());
+    }
+
+    /**
+     * Convert a char to 4 hex uppercase digits.  E.g., hex('a') =>
+     * "0041".  Append the output to the given StringBuffer.
+     */
+    public static StringBuffer hex(char ch, StringBuffer output) {
+        String foo = Integer.toString(ch,16).toUpperCase();
+        for (int i = foo.length(); i < 4; ++i) {
+            output.append('0');
+        }
+        output.append(foo);
+        return output;
+    }
+
+    /**
+     * Convert a string to comma-separated groups of 4 hex uppercase
+     * digits.  E.g., hex('ab') => "0041,0042".  Append the output
+     * to the given StringBuffer.
+     */
+    public static StringBuffer hex(String s, StringBuffer result) {
+        for (int i = 0; i < s.length(); ++i) {
+            if (i != 0) result.append(',');
+            hex(s.charAt(i), result);
+        }
+        return result;
+    }
+
+    /**
+     * Split a string into pieces based on the given divider character
+     * @param s the string to split
+     * @param divider the character on which to split.  Occurrences of
+     * this character are not included in the output
+     * @param output an array to receive the substrings between
+     * instances of divider.  It must be large enough on entry to
+     * accomodate all output.  Adjacent instances of the divider
+     * character will place empty strings into output.  Before
+     * returning, output is padded out with empty strings.
+     */
+    public static void split(String s, char divider, String[] output) {
+        int last = 0;
+        int current = 0;
+        int i;
+        for (i = 0; i < s.length(); ++i) {
+            if (s.charAt(i) == divider) {
+                output[current++] = s.substring(last,i);
+                last = i+1;
+            }
+        }
+        output[current++] = s.substring(last,i);
+        while (current < output.length) {
+            output[current++] = "";
+        }
+    }
+
+    /**
+     * Look up a given string in a string array.  Returns the index at
+     * which the first occurrence of the string was found in the
+     * array, or -1 if it was not found.
+     * @param source the string to search for
+     * @param target the array of zero or more strings in which to
+     * look for source
+     * @return the index of target at which source first occurs, or -1
+     * if not found
+     */
+    public static int lookup(String source, String[] target) {
+        for (int i = 0; i < target.length; ++i) {
+            if (source.equals(target[i])) return i;
+        }
+        return -1;
+    }
+}
diff --git a/src/com/ibm/util/package.html b/src/com/ibm/util/package.html
new file mode 100755
index 0000000..196900e
--- /dev/null
+++ b/src/com/ibm/util/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:53 $
+-->
+</head>
+<body bgcolor="white">
+International calendars and other utility classes.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/com/ibm/util/resources/BuddhistCalendarSymbols.java b/src/com/ibm/util/resources/BuddhistCalendarSymbols.java
new file mode 100755
index 0000000..1aa9b39
--- /dev/null
+++ b/src/com/ibm/util/resources/BuddhistCalendarSymbols.java
@@ -0,0 +1,33 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/BuddhistCalendarSymbols.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Buddhist Calendar
+ */
+public class BuddhistCalendarSymbols extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "Eras", new String[] {
+                "BE"
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/BuddhistCalendarSymbols_ar.java b/src/com/ibm/util/resources/BuddhistCalendarSymbols_ar.java
new file mode 100755
index 0000000..51286bb
--- /dev/null
+++ b/src/com/ibm/util/resources/BuddhistCalendarSymbols_ar.java
@@ -0,0 +1,33 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/BuddhistCalendarSymbols_ar.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Buddhist Calendar
+ */
+public class BuddhistCalendarSymbols_ar extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1999 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "Eras", new String[] {
+                "\u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0628\u0648\u0630\u064A"
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/BuddhistCalendarSymbols_hu.java b/src/com/ibm/util/resources/BuddhistCalendarSymbols_hu.java
new file mode 100755
index 0000000..0450785
--- /dev/null
+++ b/src/com/ibm/util/resources/BuddhistCalendarSymbols_hu.java
@@ -0,0 +1,33 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/BuddhistCalendarSymbols_hu.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Hungarian Date Format symbols for the Buddhist Calendar
+ */
+public class BuddhistCalendarSymbols_hu extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "Eras", new String[] {
+                "BK"
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/BuddhistCalendarSymbols_th.java b/src/com/ibm/util/resources/BuddhistCalendarSymbols_th.java
new file mode 100755
index 0000000..6055319
--- /dev/null
+++ b/src/com/ibm/util/resources/BuddhistCalendarSymbols_th.java
@@ -0,0 +1,33 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/BuddhistCalendarSymbols_th.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Thai version of the Date Format symbols for the Buddhist calendar
+ */
+public class BuddhistCalendarSymbols_th extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "Eras", new String[] {
+                "\u0e1e.\u0e28."
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/CalendarData.java b/src/com/ibm/util/resources/CalendarData.java
new file mode 100755
index 0000000..eff9abf
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Default
+public class CalendarData extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Saturday:Sunday
+                    "7", "0", // onset dow, millis in day
+                    "2", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_AE.java b/src/com/ibm/util/resources/CalendarData_ar_AE.java
new file mode 100755
index 0000000..adc0e13
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_AE.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, United Arab Emirates
+public class CalendarData_ar_AE extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_BH.java b/src/com/ibm/util/resources/CalendarData_ar_BH.java
new file mode 100755
index 0000000..207b1a1
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_BH.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Bahrain
+public class CalendarData_ar_BH extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_DZ.java b/src/com/ibm/util/resources/CalendarData_ar_DZ.java
new file mode 100755
index 0000000..80937b8
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_DZ.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Algeria
+public class CalendarData_ar_DZ extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_EG.java b/src/com/ibm/util/resources/CalendarData_ar_EG.java
new file mode 100755
index 0000000..843f1d4
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_EG.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Egypt
+public class CalendarData_ar_EG extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Friday:Saturday
+                    "6", "0", // onset dow, millis in day
+                    "1", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_JO.java b/src/com/ibm/util/resources/CalendarData_ar_JO.java
new file mode 100755
index 0000000..c244354
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_JO.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Jordan
+public class CalendarData_ar_JO extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_KW.java b/src/com/ibm/util/resources/CalendarData_ar_KW.java
new file mode 100755
index 0000000..2d99d83
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_KW.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Kuwait
+public class CalendarData_ar_KW extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_OM.java b/src/com/ibm/util/resources/CalendarData_ar_OM.java
new file mode 100755
index 0000000..e1d8a85
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_OM.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Oman
+public class CalendarData_ar_OM extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_QA.java b/src/com/ibm/util/resources/CalendarData_ar_QA.java
new file mode 100755
index 0000000..063615e
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_QA.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Qatar
+public class CalendarData_ar_QA extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_SA.java b/src/com/ibm/util/resources/CalendarData_ar_SA.java
new file mode 100755
index 0000000..5cb5283
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_SA.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Saudi Arabia
+public class CalendarData_ar_SA extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_SY.java b/src/com/ibm/util/resources/CalendarData_ar_SY.java
new file mode 100755
index 0000000..97242f3
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_SY.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Syria
+public class CalendarData_ar_SY extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Friday:Saturday
+                    "6", "0", // onset dow, millis in day
+                    "1", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ar_YE.java b/src/com/ibm/util/resources/CalendarData_ar_YE.java
new file mode 100755
index 0000000..c11e519
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ar_YE.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Arabic, Yemen
+public class CalendarData_ar_YE extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Thursday:Friday
+                    "5", "0", // onset dow, millis in day
+                    "7", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_iw_IL.java b/src/com/ibm/util/resources/CalendarData_iw_IL.java
new file mode 100755
index 0000000..df505ef
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_iw_IL.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Hebrew, Israel
+public class CalendarData_iw_IL extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Friday:Saturday
+                    "6", "0", // onset dow, millis in day
+                    "1", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_ms_MY.java b/src/com/ibm/util/resources/CalendarData_ms_MY.java
new file mode 100755
index 0000000..600f315
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_ms_MY.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Bahasa Malaysia, Malaysia
+public class CalendarData_ms_MY extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Saturday - half day in some offices:Sunday
+                    "", "0", // onset dow, millis in day
+                    "", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/CalendarData_te_IN.java b/src/com/ibm/util/resources/CalendarData_te_IN.java
new file mode 100755
index 0000000..b70635d
--- /dev/null
+++ b/src/com/ibm/util/resources/CalendarData_te_IN.java
@@ -0,0 +1,19 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+// Telugu, India
+public class CalendarData_te_IN extends ListResourceBundle {
+    /**
+     * Overrides ListResourceBundle
+     */
+    public Object[][] getContents() {
+        return new Object[][] {
+            { "Weekend",
+                new String[] { // Sunday
+                    "1", "0", // onset dow, millis in day
+                    "2", "0"  // cease dow, millis in day
+                }
+            },
+        };
+    }
+}
diff --git a/src/com/ibm/util/resources/ChineseCalendarSymbols.java b/src/com/ibm/util/resources/ChineseCalendarSymbols.java
new file mode 100755
index 0000000..d87d5d4
--- /dev/null
+++ b/src/com/ibm/util/resources/ChineseCalendarSymbols.java
@@ -0,0 +1,35 @@
+package com.ibm.util.resources;
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Chinese calendar.
+ */
+public class ChineseCalendarSymbols extends ListResourceBundle {
+
+    static final Object[][] fContents = {
+        { "IsLeapMonth",
+            new String[] {
+                "",
+                "*"
+            },
+        },
+        { "DateTimePatterns",
+            new String[] {
+                "h:mm:ss a z", // full time pattern
+                "h:mm:ss a z", // long time pattern
+                "h:mm:ss a", // medium time pattern
+                "h:mm a", // short time pattern
+                // TODO Fix the following
+                "EEEE y'x'G-Ml-d", // full date pattern
+                "y'x'G-Ml-d", // long date pattern
+                "y'x'G-Ml-d", // medium date pattern
+                "y'x'G-Ml-d", // short date pattern
+                "{1} {0}" // date-time pattern
+            }
+        },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+}
diff --git a/src/com/ibm/util/resources/HebrewCalendarSymbols.java b/src/com/ibm/util/resources/HebrewCalendarSymbols.java
new file mode 100755
index 0000000..93fe400
--- /dev/null
+++ b/src/com/ibm/util/resources/HebrewCalendarSymbols.java
@@ -0,0 +1,48 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HebrewCalendarSymbols.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Hebrew Calendar
+ */
+public class HebrewCalendarSymbols extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] { 
+                "Tishri",
+                "Heshvan",
+                "Kislev",
+                "Tevet",
+                "Shevat",
+                "Adar I",       // Leap years only
+                "Adar",
+                "Nisan",
+                "Iyar",
+                "Sivan",
+                "Tamuz",
+                "Av",
+                "Elul",
+            } },
+        { "Eras", new String[] { 
+                "AM"
+            } },
+    };
+        
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/HebrewCalendarSymbols_fi.java b/src/com/ibm/util/resources/HebrewCalendarSymbols_fi.java
new file mode 100755
index 0000000..f32da11
--- /dev/null
+++ b/src/com/ibm/util/resources/HebrewCalendarSymbols_fi.java
@@ -0,0 +1,51 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HebrewCalendarSymbols_fi.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Finnish date format symbols for the Hebrew Calendar
+ */
+public class HebrewCalendarSymbols_fi extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "Name",       "Juutalainen kalenteri" },
+        
+        { "MonthNames", new String[] {
+                "Ti\u0161r\u00ECkuu",       // Tishri
+                "He\u0161v\u00E1nkuu",      // Heshvan
+                "Kisl\u00E9vkuu",           // Kislev
+                "Tev\u00E9tkuu",            // Tevet
+                "\u0160evatkuu",            // Shevat
+                "Ad\u00E1rkuu",             // Adar I
+                "Ad\u00E1rkuu II",          // Adar
+                "Nis\u00E1nkuu",            // Nisan
+                "Ijj\u00E1rkuu",            // Iyar
+                "Siv\u00E1nkuu",            // Sivan
+                "Tamm\u00FAzkuu",           // Tamuz
+                "Abkuu",                    // Av
+                "El\u00FAlkuu",             // Elul
+            } },
+
+        { "Eras", new String[] { 
+                "AM"                        // Anno Mundi
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/HebrewCalendarSymbols_fr.java b/src/com/ibm/util/resources/HebrewCalendarSymbols_fr.java
new file mode 100755
index 0000000..e4fceb8
--- /dev/null
+++ b/src/com/ibm/util/resources/HebrewCalendarSymbols_fr.java
@@ -0,0 +1,48 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HebrewCalendarSymbols_fr.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * French date format symbols for the Hebrew Calendar.
+ * This data actually applies to French Canadian.  If we receive
+ * official French data from our France office, we should move the 
+ * French Canadian data (if it's different) down into _fr_CA
+ */
+public class HebrewCalendarSymbols_fr extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+                "Tisseri",      // Tishri
+                "Hesvan",       // Heshvan
+                "Kislev",       // Kislev
+                "T\u00e9beth",  // Tevet
+                "Sch\u00e9bat", // Shevat
+                "Adar",         // Adar I
+                "Adar II",      // Adar
+                "Nissan",       // Nisan
+                "Iyar",         // Iyar
+                "Sivan",        // Sivan
+                "Tamouz",       // Tamuz
+                "Ab",           // Av
+                "Elloul",       // Elul
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/HebrewCalendarSymbols_hu.java b/src/com/ibm/util/resources/HebrewCalendarSymbols_hu.java
new file mode 100755
index 0000000..ed087d8
--- /dev/null
+++ b/src/com/ibm/util/resources/HebrewCalendarSymbols_hu.java
@@ -0,0 +1,48 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HebrewCalendarSymbols_hu.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Hungarian date format symbols for the Hebrew Calendar
+ */
+public class HebrewCalendarSymbols_hu extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+                "Tisri",                        // Tishri
+                "Hesv\u00E1n",                  // Heshvan
+                "Kiszl\u00E9v",                 // Kislev
+                "T\u00E9v\u00E9sz",             // Tevet
+                "Sv\u00E1t",                    // Shevat
+                "\u00C1d\u00E1r ris\u00F3n",    // Adar I
+                "\u00C1d\u00E1r s\u00E9ni",     // Adar
+                "Nisz\u00E1n",                  // Nisan
+                "Ij\u00E1r",                    // Iyar
+                "Sziv\u00E1n",                  // Sivan
+                "Tamuz",                        // Tamuz
+                "\u00C1v",                      // Av
+                "Elul",                         // Elul
+            } },
+        { "Eras", new String[] {
+                "T\u00C9"
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/HebrewCalendarSymbols_iw.java b/src/com/ibm/util/resources/HebrewCalendarSymbols_iw.java
new file mode 100755
index 0000000..7168921
--- /dev/null
+++ b/src/com/ibm/util/resources/HebrewCalendarSymbols_iw.java
@@ -0,0 +1,48 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HebrewCalendarSymbols_iw.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Hebrew-language date format symbols for the Hebrew Calendar
+ */
+public class HebrewCalendarSymbols_iw extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] { 
+                "\u05EA\u05E9\u05E8\u05D9",                 // Tishri
+                "\u05D7\u05E9\u05D5\u05DF",                 // Heshvan
+                "\u05DB\u05E1\u05DC\u05D5",                 // Kislev
+                "\u05D8\u05D1\u05EA",                       // Tevet
+                "\u05E9\u05D1\u05D8",                       // Shevat
+                "\u05E9\u05D1\u05D8",                       // Adar I
+                "\u05D0\u05D3\u05E8 \u05E9\u05E0\u05D9",    // Adar
+                "\u05E0\u05D9\u05E1\u05DF",                 // Nisan
+                "\u05D0\u05D9\u05D9\u05E8",                 // Iyar
+                "\u05E1\u05D9\u05D5\u05DF",                 // Sivan
+                "\u05EA\u05DE\u05D5\u05D6",                 // Tamuz
+                "\u05D0\u05D1",                             // Av
+                "\u05D0\u05DC\u05D5\u05DC",                 // Elul
+            } },
+        { "Eras", new String[] { 
+                "\u05DC\u05D1\u05D4\042\u05E2"
+            } },
+    };
+        
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/HebrewCalendarSymbols_nl.java b/src/com/ibm/util/resources/HebrewCalendarSymbols_nl.java
new file mode 100755
index 0000000..20901e0
--- /dev/null
+++ b/src/com/ibm/util/resources/HebrewCalendarSymbols_nl.java
@@ -0,0 +1,45 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HebrewCalendarSymbols_nl.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Dutch date format symbols for the Hebrew Calendar
+ */
+public class HebrewCalendarSymbols_nl extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+                "Tisjrie",      // Tishri
+                "Chesjwan",     // Heshvan
+                "Kislev",       // Kislev
+                "Tevet",        // Tevet
+                "Sjevat",       // Shevat
+                "Adar",         // Adar I
+                "Adar B",       // Adar
+                "Nisan",        // Nisan
+                "Ijar",         // Iyar
+                "Sivan",        // Sivan
+                "Tammoez",      // Tamuz
+                "Av",           // Av
+                "Elloel",       // Elul
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle.java b/src/com/ibm/util/resources/HolidayBundle.java
new file mode 100755
index 0000000..7180302
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle.java
@@ -0,0 +1,35 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle.java,v $ 
+ * $Date: 2000/03/10 04:18:01 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle extends ListResourceBundle {
+
+    // Normally, each HolidayBundle uses the holiday's US English name
+    // as the string key for looking up the localized name.  This means
+    // that the key itself can be used if no name is found for the requested
+    // locale.
+    //
+    // For holidays where the key is _not_ the English name, e.g. in the
+    // case of conflicts, the English name must be given here.
+    //
+    static private final Object[][] fContents = {
+        {   "", ""  },      // Can't be empty!
+    };
+
+    public synchronized Object[][] getContents() { return fContents; };
+
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_da.java b/src/com/ibm/util/resources/HolidayBundle_da.java
new file mode 100755
index 0000000..ac81b53
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_da.java
@@ -0,0 +1,38 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_da.java,v $ 
+ * $Date: 2000/09/20 22:37:54 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_da extends ListResourceBundle
+{
+    static private final Object[][] fContents =
+    {
+        {   "Armistice Day",        "v\u00e5benhvile" },
+        {   "Ascension",            "himmelfart" },
+        {   "Boxing Day",           "anden juledag" },
+        {   "Christmas Eve",        "juleaften" },
+        {   "Easter",               "p\u00e5ske" },
+        {   "Epiphany",             "helligtrekongersdag" },
+        {   "Good Friday",          "langfredag" },
+        {   "Halloween",            "allehelgensaften" },
+        {   "Maundy Thursday",      "sk\u00e6rtorsdag" },
+        {   "Palm Sunday",          "palmes\u00f8ndag" },
+        {   "Pentecost",            "pinse" },
+        {   "Shrove Tuesday",       "hvidetirsdag" },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_da_DK.java b/src/com/ibm/util/resources/HolidayBundle_da_DK.java
new file mode 100755
index 0000000..7b4d890
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_da_DK.java
@@ -0,0 +1,44 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_da_DK.java,v $ 
+ * $Date: 2000/03/10 04:18:02 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_da_DK extends ListResourceBundle
+{
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        new SimpleHoliday(Calendar.APRIL,   30, -Calendar.FRIDAY, "General Prayer Day"),
+        new SimpleHoliday(Calendar.JUNE,    5,                    "Constitution Day"),
+        SimpleHoliday.CHRISTMAS_EVE,
+        SimpleHoliday.CHRISTMAS,
+        SimpleHoliday.BOXING_DAY,
+        SimpleHoliday.NEW_YEARS_EVE,
+
+        // Easter and related holidays
+        EasterHoliday.MAUNDY_THURSDAY,
+        EasterHoliday.GOOD_FRIDAY,
+        EasterHoliday.EASTER_SUNDAY,
+        EasterHoliday.EASTER_MONDAY,
+        EasterHoliday.ASCENSION,
+        EasterHoliday.WHIT_MONDAY,
+    };
+
+    static private final Object[][] fContents = {
+        {   "holidays",             fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_de.java b/src/com/ibm/util/resources/HolidayBundle_de.java
new file mode 100755
index 0000000..e9720b1
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_de.java
@@ -0,0 +1,73 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_de.java,v $ 
+ * $Date: 2000/09/20 22:39:12 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_de extends ListResourceBundle {
+    static private final Object[][] fContents = {
+        {   "All Saints' Day",              "Allerheiligen" },
+        {   "All Souls' Day",               "Allerseelen" },
+        {   "Armistice Day",                "Waffenstillstandstag" },
+        {   "Ascension",                    "Christi Himmelfahrt" },
+        {   "Ash Wednesday",                "Aschermittwoch" },
+        {   "Assumption",                   "Mari\u00e4 Himmelfahrt" },
+        {   "Boxing Day",                   "2. Weihnachtstag" },
+        {   "Carnival",                     "Karneval" },
+        {   "Christmas",                    "Weihnachtstag" },
+        {   "Civic Holiday",                "B\u00fcrgerfeiertag" },
+        {   "Constitution Day",             "Verfassungstag" },
+        {   "Corpus Christi",               "Fronleichnam" },
+        {   "Day of Prayer and Repentance", "Bu\u00df- und Bettag" },
+        {   "Easter Monday",                "Ostermonntag" },
+        {   "Easter Sunday",                "Ostersonntag" },
+        {   "Epiphany",                     "Heilige 3 K\u00f6nige" },
+        {   "Father's Day",                 "Vatertag" },
+        {   "Flag Day",                     "Jahrestag der Nationalflagge" },
+        {   "German Unity Day",             "Tag der deutschen Einheit" },
+        {   "Good Friday",                  "Karfreitag" },
+        {   "Halloween",                    "Abend vor Allerheiligen" },
+        {   "Immaculate Conception",        "Mari\u00e4 Empf\u00e4ngnis" },
+        {   "Independence Day",             "Unabh\u00e4ngigkeitstag" },
+        {   "Labor Day",                    "Tag der Arbeit" },
+        {   "Liberation Day",               "Befreiungstag" },
+        {   "Mardi Gras",                   "Faschingsdienstag" },
+        {   "Maundy Thursday",              "Gr\u00fcndonnerstag" },
+        {   "May Day",                      "Maifeiertag" },
+        {   "Memorial Day",                 "Tag des Gedenkens" },
+        {   "Mother's Day",                 "Muttertag" },
+        {   "National Holiday",             "Nationalfeiertag" },
+        {   "New Year's Day",               "Neujahr" },
+        {   "New Year's Eve",               "Silvesterabend" },
+        {   "Palm Sunday",                  "Palmsonntag" },
+        {   "Pentecost",                    "Pfingsten" },
+        {   "Presidents' Day",              "Pr\u00e4sidentstag" },
+        {   "Remembrance Day",              "Volkstrauertag" },
+        {   "Revolution Day",               "Jahrestag der Revolution" },
+        {   "Rose Monday",                  "Rosenmontag" },
+        {   "St. Stephen's Day",            "Stephanitag" },
+        {   "Shrove Tuesday",               "Faschingsdienstag" },
+        {   "Spring Holiday",               "Tag des Fr\u00fchlings" },
+        {   "Summer Bank Holiday",          "Bankfeiertag" },
+        {   "Thanksgiving",                 "Dankfest" },
+        {   "Unity Day",                    "Einheitstag" },
+        {   "Veterans' Day",                "Veteranstag" },
+        {   "Victory Day",                  "Tag der Befreiung" },
+        {   "Washington's Birthday",        "Washingtons Geburtstag" },
+        {   "Whit Monday",                  "Pfingstmontag" },
+        {   "Whit Sunday",                  "Pfingstsonntag" },
+    };
+
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_de_AT.java b/src/com/ibm/util/resources/HolidayBundle_de_AT.java
new file mode 100755
index 0000000..a492ed4
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_de_AT.java
@@ -0,0 +1,49 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_de_AT.java,v $ 
+ * $Date: 2000/09/19 19:26:47 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_de_AT extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        SimpleHoliday.EPIPHANY,
+        EasterHoliday.GOOD_FRIDAY,
+        EasterHoliday.EASTER_SUNDAY,
+        EasterHoliday.EASTER_MONDAY,
+        EasterHoliday.ASCENSION,
+        EasterHoliday.WHIT_SUNDAY,
+        EasterHoliday.WHIT_MONDAY,
+        EasterHoliday.CORPUS_CHRISTI,
+        SimpleHoliday.ASSUMPTION,
+        SimpleHoliday.ALL_SAINTS_DAY,
+        SimpleHoliday.IMMACULATE_CONCEPTION,
+        SimpleHoliday.CHRISTMAS,
+        SimpleHoliday.ST_STEPHENS_DAY,
+
+        new SimpleHoliday(Calendar.MAY,        1,  0,               "National Holiday"),
+        new SimpleHoliday(Calendar.OCTOBER,   31, -Calendar.MONDAY, "National Holiday"),
+    };
+
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+
+        // Only holidays names different from those used in Germany are listed here
+        {   "Christmas",        "Christtag" },
+        {   "New Year's Day",   "Neujahrstag" },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_de_DE.java b/src/com/ibm/util/resources/HolidayBundle_de_DE.java
new file mode 100755
index 0000000..f18c820
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_de_DE.java
@@ -0,0 +1,44 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_de_DE.java,v $ 
+ * $Date: 2000/03/10 04:18:02 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_de_DE extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        SimpleHoliday.MAY_DAY,
+        new SimpleHoliday(Calendar.JUNE,      15,  Calendar.WEDNESDAY,  "Memorial Day"),
+        new SimpleHoliday(Calendar.OCTOBER,    3,  0,                   "Unity Day"),
+        SimpleHoliday.ALL_SAINTS_DAY,
+        new SimpleHoliday(Calendar.NOVEMBER,  18,  0,                   "Day of Prayer and Repentance"),
+        SimpleHoliday.CHRISTMAS,
+        SimpleHoliday.BOXING_DAY,
+
+        // Easter and related holidays
+        EasterHoliday.GOOD_FRIDAY,
+        EasterHoliday.EASTER_SUNDAY,
+        EasterHoliday.EASTER_MONDAY,
+        EasterHoliday.ASCENSION,
+        EasterHoliday.WHIT_SUNDAY,
+        EasterHoliday.WHIT_MONDAY,
+    };
+
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_el.java b/src/com/ibm/util/resources/HolidayBundle_el.java
new file mode 100755
index 0000000..26fafa1
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_el.java
@@ -0,0 +1,37 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_el.java,v $ 
+ * $Date: 2000/03/10 04:18:02 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_el extends ListResourceBundle {
+    static private final Object[][] fContents =
+    {
+        {   "Assumption",           "15 \u0391\u03cd\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5" },
+        {   "Boxing Day",           "\u0394\u03b5\u03cd\u03c4\u03b5\u03c1\u03b7 \u03bc\u03ad\u03c1\u03b1 \u03c4\u03ce\u03bd \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03c5\u03b3\u03ad\u03bd\u03bd\u03c9\u03bd" },
+        {   "Christmas",            "\u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd\u03b3\u03b5\u03bd\u03bd\u03b1" },
+        {   "Clean Monday",         "\u039a\u03b1\u03b8\u03b1\u03c1\u03ae \u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1" },
+        {   "Easter Monday",        "\u0394\u03b5\u03cd\u03c4\u03b5\u03c1\u03b7 \u03bc\u03ad\u03c1\u03b1 \u03c4\u03bf\u03cd \u03a0\u03ac\u03c3\u03c7\u03b1" },
+        {   "Epiphany",             "\u0388\u03c0\u03b9\u03c6\u03ac\u03bd\u03b5\u03b9\u03b1" },
+        {   "Good Friday",          "\u039c\u03b5\u03b3\u03ac\u03bb\u03b7 \u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae" },
+        {   "May Day",              "\u03a0\u03c1\u03c9\u03c4\u03bf\u03bc\u03b1\u03b3\u03b9\u03ac" },
+        {   "New Year's Day",       "\u03a0\u03c1\u03c9\u03c4\u03bf\u03c7\u03c1\u03bf\u03bd\u03b9\u03ac" },
+        {   "Ochi Day",             "28 \u038c\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5" },
+        {   "Whit Monday",          "\u0394\u03b5\u03cd\u03c4\u03b5\u03c1\u03b7 \u03bc\u03ad\u03c1\u03b1 \u03c4\u03bf\u03cd \u03a0\u03b5\u03bd\u03c4\u03b7\u03ba\u03bf\u03c3\u03c4\u03ae" },
+
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_el_GR.java b/src/com/ibm/util/resources/HolidayBundle_el_GR.java
new file mode 100755
index 0000000..c236303
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_el_GR.java
@@ -0,0 +1,45 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_el_GR.java,v $ 
+ * $Date: 2000/03/10 04:18:02 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_el_GR extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        SimpleHoliday.EPIPHANY,
+
+        new SimpleHoliday(Calendar.MARCH,     25,  0,    "Independence Day"),
+
+        SimpleHoliday.MAY_DAY,
+        SimpleHoliday.ASSUMPTION,
+
+        new SimpleHoliday(Calendar.OCTOBER,   28,  0,    "Ochi Day"),
+
+        SimpleHoliday.CHRISTMAS,
+        SimpleHoliday.BOXING_DAY,
+
+        // Easter and related holidays in the Orthodox calendar
+        new EasterHoliday(-2,   true, "Good Friday"),
+        new EasterHoliday( 0,   true, "Easter Sunday"),
+        new EasterHoliday( 1,   true, "Easter Monday"),
+        new EasterHoliday(50,   true, "Whit Monday"),
+    };
+    static private final Object[][] fContents = {
+        {   "holidays",         fHolidays   },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_en.java b/src/com/ibm/util/resources/HolidayBundle_en.java
new file mode 100755
index 0000000..bf62361
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_en.java
@@ -0,0 +1,35 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_en.java,v $ 
+ * $Date: 2000/03/10 04:18:03 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_en extends ListResourceBundle {
+
+    // Normally, each HolidayBundle uses the holiday's US English name
+    // as the string key for looking up the localized name.  This means
+    // that the key itself can be used if no name is found for the requested
+    // locale.
+    //
+    // For holidays where the key is _not_ the English name, e.g. in the
+    // case of conflicts, the English name must be given here.
+    //
+    static private final Object[][] fContents = {
+        {   "", ""  },      // Can't be empty!
+    };
+
+    public synchronized Object[][] getContents() { return fContents; };
+
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_en_CA.java b/src/com/ibm/util/resources/HolidayBundle_en_CA.java
new file mode 100755
index 0000000..cbc34f9
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_en_CA.java
@@ -0,0 +1,46 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_en_CA.java,v $ 
+ * $Date: 2000/03/10 04:18:03 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_en_CA extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        new SimpleHoliday(Calendar.MAY,       19, 0,                  "Victoria Day"),
+        new SimpleHoliday(Calendar.JULY,       1, 0,                  "Canada Day"),
+        new SimpleHoliday(Calendar.AUGUST,     1, Calendar.MONDAY,    "Civic Holiday"),
+        new SimpleHoliday(Calendar.SEPTEMBER,  1, Calendar.MONDAY,    "Labor Day"),
+        new SimpleHoliday(Calendar.OCTOBER,    8, Calendar.MONDAY,    "Thanksgiving"),
+        new SimpleHoliday(Calendar.NOVEMBER,  11, 0,                  "Remembrance Day"),
+        SimpleHoliday.CHRISTMAS,
+        SimpleHoliday.BOXING_DAY,
+        SimpleHoliday.NEW_YEARS_EVE,
+
+        // Easter and related holidays
+        //hey {jf} - where are these from?
+//        EasterHoliday.GOOD_FRIDAY,
+//        EasterHoliday.EASTER_SUNDAY,
+//        EasterHoliday.EASTER_MONDAY,
+    };
+
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+
+        { "Labor Day",  "Labour Day" },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_en_GB.java b/src/com/ibm/util/resources/HolidayBundle_en_GB.java
new file mode 100755
index 0000000..055a097
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_en_GB.java
@@ -0,0 +1,42 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_en_GB.java,v $ 
+ * $Date: 2000/03/10 04:18:03 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_en_GB extends ListResourceBundle
+{
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        SimpleHoliday.MAY_DAY,
+        new SimpleHoliday(Calendar.MAY,        31, -Calendar.MONDAY,    "Spring Holiday"),
+        new SimpleHoliday(Calendar.AUGUST,     31, -Calendar.MONDAY,    "Summer Bank Holiday"),
+        SimpleHoliday.CHRISTMAS,
+        SimpleHoliday.BOXING_DAY,
+        new SimpleHoliday(Calendar.DECEMBER,   31, -Calendar.MONDAY,    "Christmas Holiday"),
+
+        // Easter and related holidays
+        EasterHoliday.GOOD_FRIDAY,
+        EasterHoliday.EASTER_SUNDAY,
+        EasterHoliday.EASTER_MONDAY,
+    };
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+
+        { "Labor Day",  "Labour Day" },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_en_US.java b/src/com/ibm/util/resources/HolidayBundle_en_US.java
new file mode 100755
index 0000000..a8912fb
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_en_US.java
@@ -0,0 +1,52 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_en_US.java,v $ 
+ * $Date: 2000/03/10 04:18:03 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_en_US extends ListResourceBundle
+{
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        new SimpleHoliday(Calendar.JANUARY,   15, Calendar.MONDAY,      "Martin Luther King Day",   1986),
+
+        new SimpleHoliday(Calendar.FEBRUARY,  15, Calendar.MONDAY,      "Presidents' Day",          1976),
+        new SimpleHoliday(Calendar.FEBRUARY,  22,                       "Washington's Birthday",    1776, 1975),
+
+        EasterHoliday.GOOD_FRIDAY,
+        EasterHoliday.EASTER_SUNDAY,
+
+        new SimpleHoliday(Calendar.MAY,        8, Calendar.SUNDAY,      "Mother's Day",             1914),
+
+        new SimpleHoliday(Calendar.MAY,       31, -Calendar.MONDAY,     "Memorial Day",             1971),
+        new SimpleHoliday(Calendar.MAY,       30,                       "Memorial Day",             1868, 1970),
+
+        new SimpleHoliday(Calendar.JUNE,      15, Calendar.SUNDAY,      "Father's Day",             1956),
+        new SimpleHoliday(Calendar.JULY,       4,                       "Independence Day",         1776),
+        new SimpleHoliday(Calendar.SEPTEMBER,  1, Calendar.MONDAY,      "Labor Day",                1894),
+        new SimpleHoliday(Calendar.NOVEMBER,   2, Calendar.TUESDAY,     "Election Day"),
+        new SimpleHoliday(Calendar.OCTOBER,    8, Calendar.MONDAY,      "Columbus Day",             1971),
+        new SimpleHoliday(Calendar.OCTOBER ,  31,                       "Halloween"),
+        new SimpleHoliday(Calendar.NOVEMBER,  11,                       "Veterans' Day",            1918),
+        new SimpleHoliday(Calendar.NOVEMBER,  22, Calendar.THURSDAY,    "Thanksgiving",             1863),
+
+        SimpleHoliday.CHRISTMAS,
+    };
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_es.java b/src/com/ibm/util/resources/HolidayBundle_es.java
new file mode 100755
index 0000000..618da94
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_es.java
@@ -0,0 +1,57 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_es.java,v $ 
+ * $Date: 2000/09/20 22:50:12 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_es extends ListResourceBundle {
+    static private final Object[][] fContents = {
+        {   "All Saints' Day",          "Todos los Santos" },
+        {   "Armistice Day",            "D\u00eda del Armisticio" },
+        {   "Ascension",                "Ascensi\u00f3n" },
+        {   "Benito Ju\u00e1rez Day",        "D\u00eda de la Benito Ju\u00e1rez" },
+        {   "Boxing Day",               "D\u00eda en que se dan Aguinaldos Navide\u00f1os" },
+        {   "Canada Day",               "D\u00eda del Canad\u00e1" },
+        {   "Christmas Eve",            "V\u00EDspera de Navidad" },
+        {   "Christmas",                "Navidad" },
+        {   "Constitution Day",         "D\u00eda de la Constituci\u00f3n" },
+        {   "Day of the Dead",          "D\u00eda de los Muertos" },
+        {   "Easter Sunday",            "Pascua" },
+        {   "Easter Monday",            "Pascua Lunes" },
+        {   "Epiphany",                 "Epifan\u00eda" },
+        {   "Father's Day",             "D\u00eda del Padre" },
+        {   "Flag Day",                 "D\u00eda de la Bandera" },
+        {   "Good Friday",              "Viernes Santo" },
+        {   "Halloween",                "v\u00edspera de Todos los Santos" },
+        {   "Independence Day",         "D\u00eda de la Independencia" },
+        {   "Labor Day",                "D\u00eda de Trabajadores" },
+        {   "Maundy Thursday",          "Jueves Santo" },
+        {   "May Day",                  "Primero de Mayo" },
+        {   "Memorial Day",             "D\u00eda de la Rememoraci\u00f3n" },
+        {   "Mother's Day",             "D\u00eda de la Madre" },
+        {   "New Year's Day",           "A\u00f1o Nuevo" },
+        {   "Palm Sunday",              "Domingo de Ramos" },
+        {   "Pentecost",                "Pentecost\u00e9s" },
+        {   "Presidents' Day",          "D\u00eda de Presidentes" },
+        {   "Revolution Day",           "D\u00eda de la Revoluci\u00f3n" },
+        {   "Shrove Tuesday",           "Martes de Carnaval" },
+        {   "Thanksgiving",             "D\u00eda de Acci\u00f3n de Gracias" },
+        {   "Veterans' Day",            "D\u00eda de Veteranos" },
+        {   "Victoria Day",             "D\u00eda de Victoria" },
+        {   "Whit Sunday",              "Pentecost\u00e9s" },
+    };
+
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_es_MX.java b/src/com/ibm/util/resources/HolidayBundle_es_MX.java
new file mode 100755
index 0000000..d62ab08
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_es_MX.java
@@ -0,0 +1,40 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_es_MX.java,v $ 
+ * $Date: 2000/09/20 22:51:23 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_es_MX extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        new SimpleHoliday(Calendar.FEBRUARY,   5,  0,    "Constitution Day"),
+        new SimpleHoliday(Calendar.MARCH,     21,  0,    "Benito Ju\u00E1rez Day"),
+        SimpleHoliday.MAY_DAY,
+        new SimpleHoliday(Calendar.MAY,        5,  0,    "Cinco de Mayo"),
+        new SimpleHoliday(Calendar.JUNE,       1,  0,    "Navy Day"),
+        new SimpleHoliday(Calendar.SEPTEMBER, 16,  0,    "Independence Day"),
+        new SimpleHoliday(Calendar.OCTOBER,   12,  0,    "D\u00EDa de la Raza"),
+        SimpleHoliday.ALL_SAINTS_DAY,
+        new SimpleHoliday(Calendar.NOVEMBER,   2,  0,    "Day of the Dead"),
+        new SimpleHoliday(Calendar.NOVEMBER,  20,  0,    "Revolution Day"),
+        new SimpleHoliday(Calendar.DECEMBER,  12,  0,    "Flag Day"),
+        SimpleHoliday.CHRISTMAS,
+    };
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_fr.java b/src/com/ibm/util/resources/HolidayBundle_fr.java
new file mode 100755
index 0000000..e2ae577
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_fr.java
@@ -0,0 +1,50 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_fr.java,v $ 
+ * $Date: 2000/09/19 19:24:47 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_fr extends ListResourceBundle {
+    static private final Object[][] fContents = {
+        {   "All Saints' Day",      "Toussaint" },
+        {   "Armistice Day",        "Jour de l'Armistice" },
+        {   "Ascension",            "Ascension" },
+        {   "Bastille Day",         "F\u00EAte de la Bastille" },
+        {   "Benito Ju\u00E1rez Day",    "F\u00EAte de Benito Ju\u00E1rez" },
+        {   "Boxing Day",           "Lendemain de No\u00EBl" },
+        {   "Christmas Eve",        "Veille de No\u00EBl" },
+        {   "Christmas",            "No\u00EBl" },
+        {   "Easter Monday",        "P\u00E2ques lundi" },
+        {   "Easter Sunday",        "P\u00E2ques" },
+        {   "Epiphany",             "l'\u00C9piphanie" },
+        {   "Flag Day",             "F\u00EAte du Drapeau" },
+        {   "Good Friday",          "Vendredi Saint" },
+        {   "Halloween",            "Veille de la Toussaint" },
+        {   "All Saints' Day",      "Toussaint" },
+        {   "Independence Day",     "F\u00EAte Ind\u00E9pendance" },
+        {   "Maundy Thursday",      "Jeudi Saint" },
+        {   "Mother's Day",         "F\u00EAte des m\u00E8res" },
+        {   "National Day",         "F\u00EAte Nationale" },
+        {   "New Year's Day",       "Jour de l'an" },
+        {   "Palm Sunday",          "les Rameaux" },
+        {   "Pentecost",            "Pentec\u00F4te" },
+        {   "Shrove Tuesday",       "Mardi Gras" },
+        {   "St. Stephen's Day",    "Saint-\u00C9tienne" },
+        {   "Victoria Day",         "F\u00EAte de la Victoria" },
+        {   "Victory Day",          "F\u00EAte de la Victoire" },
+    };
+
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_fr_CA.java b/src/com/ibm/util/resources/HolidayBundle_fr_CA.java
new file mode 100755
index 0000000..5b4a62c
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_fr_CA.java
@@ -0,0 +1,43 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_fr_CA.java,v $ 
+ * $Date: 2000/03/10 04:18:04 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_fr_CA extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        new SimpleHoliday(Calendar.JANUARY,    1,  0,                  "New Year's Day"),
+        new SimpleHoliday(Calendar.MAY,       19,  0,                  "Victoria Day"),
+        new SimpleHoliday(Calendar.JUNE,      24,  0,                  "National Day"),
+        new SimpleHoliday(Calendar.JULY,       1,  0,                  "Canada Day"),
+        new SimpleHoliday(Calendar.AUGUST,     1,  Calendar.MONDAY,    "Civic Holiday"),
+        new SimpleHoliday(Calendar.SEPTEMBER,  1,  Calendar.MONDAY,    "Labour Day"),
+        new SimpleHoliday(Calendar.OCTOBER,    8,  Calendar.MONDAY,    "Thanksgiving"),
+        new SimpleHoliday(Calendar.NOVEMBER,  11,  0,                  "Remembrance Day"),
+        SimpleHoliday.CHRISTMAS,
+        SimpleHoliday.BOXING_DAY,
+        SimpleHoliday.NEW_YEARS_EVE,
+
+        // Easter and related holidays
+        EasterHoliday.GOOD_FRIDAY,
+        EasterHoliday.EASTER_SUNDAY,
+        EasterHoliday.EASTER_MONDAY,
+    };
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_fr_FR.java b/src/com/ibm/util/resources/HolidayBundle_fr_FR.java
new file mode 100755
index 0000000..edbba71
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_fr_FR.java
@@ -0,0 +1,42 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_fr_FR.java,v $ 
+ * $Date: 2000/03/10 04:18:04 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_fr_FR extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        new SimpleHoliday(Calendar.MAY,        1,  0, "Labor Day"),
+        new SimpleHoliday(Calendar.MAY,        8,  0, "Victory Day"),
+        new SimpleHoliday(Calendar.JULY,      14,  0, "Bastille Day"),
+        SimpleHoliday.ASSUMPTION,
+        SimpleHoliday.ALL_SAINTS_DAY,
+        new SimpleHoliday(Calendar.NOVEMBER,  11,  0, "Armistice Day"),
+        SimpleHoliday.CHRISTMAS,
+
+        // Easter and related holidays
+        EasterHoliday.EASTER_SUNDAY,
+        EasterHoliday.EASTER_MONDAY,
+        EasterHoliday.ASCENSION,
+        EasterHoliday.WHIT_SUNDAY,
+        EasterHoliday.WHIT_MONDAY,
+    };
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_it.java b/src/com/ibm/util/resources/HolidayBundle_it.java
new file mode 100755
index 0000000..e5e27c4
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_it.java
@@ -0,0 +1,43 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_it.java,v $ 
+ * $Date: 2000/09/20 22:37:54 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_it extends ListResourceBundle {
+    static private final Object[][] fContents =
+    {
+        {   "All Saints' Day",      "Ognissanti" },
+        {   "Armistice Day",        "armistizio" },
+        {   "Ascension",            "ascensione" },
+        {   "Ash Wednesday",        "mercoled\u00ec delle ceneri" },
+        {   "Boxing Day",           "Santo Stefano" },
+        {   "Christmas",            "natale" },
+        {   "Easter Sunday",        "pasqua" },
+        {   "Epiphany",             "Epifania" },
+        {   "Good Friday",          "venerd\u00ec santo" },
+        {   "Halloween",            "vigilia di Ognissanti" },
+        {   "Maundy Thursday",      "gioved\u00ec santo" },
+        {   "New Year's Day",       "anno nuovo" },
+        {   "Palm Sunday",          "domenica delle palme" },
+        {   "Pentecost",            "di Pentecoste" },
+        {   "Shrove Tuesday",       "martedi grasso" },
+        {   "St. Stephen's Day",    "Santo Stefano" },
+        {   "Thanksgiving",         "Giorno del Ringraziamento" },
+
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_it_IT.java b/src/com/ibm/util/resources/HolidayBundle_it_IT.java
new file mode 100755
index 0000000..738e137
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_it_IT.java
@@ -0,0 +1,41 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_it_IT.java,v $ 
+ * $Date: 2000/03/10 04:18:04 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_it_IT extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        SimpleHoliday.NEW_YEARS_DAY,
+        SimpleHoliday.EPIPHANY,
+        new SimpleHoliday(Calendar.APRIL,      1,  0,    "Liberation Day"),
+        new SimpleHoliday(Calendar.MAY,        1,  0,    "Labor Day"),
+        SimpleHoliday.ASSUMPTION,
+        SimpleHoliday.ALL_SAINTS_DAY,
+        SimpleHoliday.IMMACULATE_CONCEPTION,
+        SimpleHoliday.CHRISTMAS,
+        new SimpleHoliday(Calendar.DECEMBER,  26,  0,    "St. Stephens Day"),
+        SimpleHoliday.NEW_YEARS_EVE,
+
+        // Easter and related holidays
+        EasterHoliday.EASTER_SUNDAY,
+        EasterHoliday.EASTER_MONDAY,
+    };
+    static private final Object[][] fContents = {
+        { "holidays",           fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_iw.java b/src/com/ibm/util/resources/HolidayBundle_iw.java
new file mode 100755
index 0000000..f5c403c
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_iw.java
@@ -0,0 +1,27 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_iw.java,v $ 
+ * $Date: 2000/03/10 04:18:04 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_iw extends ListResourceBundle {
+
+    static private final Object[][] fContents = {
+        {   "", ""  },      // Can't be empty!
+    };
+
+    public synchronized Object[][] getContents() { return fContents; };
+
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_iw_IL.java b/src/com/ibm/util/resources/HolidayBundle_iw_IL.java
new file mode 100755
index 0000000..5e9bd30
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_iw_IL.java
@@ -0,0 +1,35 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_iw_IL.java,v $ 
+ * $Date: 2000/03/10 04:18:05 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_iw_IL extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        HebrewHoliday.ROSH_HASHANAH,
+        HebrewHoliday.YOM_KIPPUR,
+        HebrewHoliday.HANUKKAH,
+        HebrewHoliday.PURIM,
+        HebrewHoliday.PASSOVER,
+        HebrewHoliday.SHAVUOT,
+        HebrewHoliday.SELIHOT,
+    };
+
+    static private final Object[][] fContents = {
+        { "holidays",   fHolidays },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/HolidayBundle_ja_JP.java b/src/com/ibm/util/resources/HolidayBundle_ja_JP.java
new file mode 100755
index 0000000..785c967
--- /dev/null
+++ b/src/com/ibm/util/resources/HolidayBundle_ja_JP.java
@@ -0,0 +1,28 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_ja_JP.java,v $ 
+ * $Date: 2000/03/10 04:18:05 $ 
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util.resources;
+
+import com.ibm.util.*;
+import java.util.Calendar;
+import java.util.ListResourceBundle;
+
+public class HolidayBundle_ja_JP extends ListResourceBundle {
+    static private final Holiday[] fHolidays = {
+        new SimpleHoliday(Calendar.FEBRUARY,  11,  0,    "National Foundation Day"),
+    };
+    static private final Object[][] fContents = {
+        {   "holidays",         fHolidays   },
+    };
+    public synchronized Object[][] getContents() { return fContents; }
+};
diff --git a/src/com/ibm/util/resources/IslamicCalendarSymbols.java b/src/com/ibm/util/resources/IslamicCalendarSymbols.java
new file mode 100755
index 0000000..8203bfc
--- /dev/null
+++ b/src/com/ibm/util/resources/IslamicCalendarSymbols.java
@@ -0,0 +1,47 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/IslamicCalendarSymbols.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Islamic Calendar
+ */
+public class IslamicCalendarSymbols extends ListResourceBundle {
+    
+    private static String copyright = "Copyright \u00a9 1998-1999 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] { 
+                "Muharram",
+                "Safar",
+                "Rabi' I",
+                "Rabi' II",
+                "Jumada I",
+                "Jumada I",
+                "Rajab",
+                "Sha'ban",
+                "Ramadan",
+                "Shawwal",
+                "Dhu'l-Qi'dah",
+                "Dhu'l-Hijjah",
+            } },
+        { "Eras", new String[] { 
+                "AH"
+            } },
+    };
+        
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/IslamicCalendarSymbols_ar.java b/src/com/ibm/util/resources/IslamicCalendarSymbols_ar.java
new file mode 100755
index 0000000..51df56b
--- /dev/null
+++ b/src/com/ibm/util/resources/IslamicCalendarSymbols_ar.java
@@ -0,0 +1,47 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/IslamicCalendarSymbols_ar.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Islamic Calendar
+ */
+public class IslamicCalendarSymbols_ar extends ListResourceBundle {
+    
+    private static String copyright = "Copyright \u00a9 1999 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] { 
+            "\u0645\u062D\u0631\u0645",                                             // Muharram
+            "\u0635\u0641\u0631",                                                   // Safar
+            "\u0631\u0628\u064A\u0639 \u0627\u0644\u0623\u0648\u0644",              // Rabi' I
+            "\u0631\u0628\u064A\u0639 \u0627\u0644\u0622\u062E\u0631",              // Rabi' II
+            "\u062C\u0645\u0627\u062F\u0649 \u0627\u0644\u0623\u0648\u0644\u0649",  // Jumada I
+            "\u062C\u0645\u0627\u062F\u0649 \u0627\u0644\u0622\u062E\u0631\u0629",  // Jumada I
+            "\u0631\u062C\u0628",                                                   // Rajab
+            "\u0634\u0639\u0628\u0627\u0646",                                       // Sha'ban
+            "\u0631\u0645\u0636\u0627\u0646",                                       // Ramadan
+            "\u0634\u0648\u0627\u0644",                                             // Shawwal
+            "\u0630\u0648 \u0627\u0644\u0642\u0639\u062F\u0629",                    // Dhu'l-Qi'dah
+            "\u0630\u0648 \u0627\u0644\u062D\u062C\u0629",                          // Dhu'l-Hijjah
+        } },
+        { "Eras", new String[] { 
+            "\u0647\u200D",  // AH
+        } },
+    };
+        
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/IslamicCalendarSymbols_fi.java b/src/com/ibm/util/resources/IslamicCalendarSymbols_fi.java
new file mode 100755
index 0000000..4c7d0e9
--- /dev/null
+++ b/src/com/ibm/util/resources/IslamicCalendarSymbols_fi.java
@@ -0,0 +1,47 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/IslamicCalendarSymbols_fi.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Finnish date format symbols for the Islamic Calendar
+ */
+public class IslamicCalendarSymbols_fi extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+            "Muh\u00E1rram",                // Muharram
+            "S\u00E1far",                   // Safar
+            "Rab\u00ED' al-\u00E1wwal",     // Rabi' al-awwal
+            "Rab\u00ED' al-\u00E1khir",     // Rabi' al-thani
+            "D\u017Eumada-l-\u00FAla",      // Jumada al-awwal
+            "D\u017Eumada-l-\u00E1khira",   // Jumada al-thani
+            "Rad\u017Eab",                  // Rajab
+            "\u0160a'b\u00E1n",             // Sha'ban
+            "Ramad\u00E1n",                 // Ramadan
+            "\u0160awwal",                  // Shawwal
+            "Dhu-l-qada",                   // Dhu al-Qi'dah
+            "Dhu-l-hidd\u017Ea",            // Dhu al-Hijjah
+            } },
+        { "Eras", new String[] {
+            "AH"                            // Anno Hid\u017Era
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/IslamicCalendarSymbols_fr.java b/src/com/ibm/util/resources/IslamicCalendarSymbols_fr.java
new file mode 100755
index 0000000..4038c7b
--- /dev/null
+++ b/src/com/ibm/util/resources/IslamicCalendarSymbols_fr.java
@@ -0,0 +1,50 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/IslamicCalendarSymbols_fr.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * French date format symbols for the Islamic Calendar
+ * This data actually applies to French Canadian.  If we receive
+ * official French data from our France office, we should move the 
+ * French Canadian data (if it's different) down into _fr_CA
+ */
+public class IslamicCalendarSymbols_fr extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+            "Mouharram",            // Muharram
+            "Safar",                // Safar
+            "Rabi'-oul-Aououal",    // Rabi' al-awwal
+            "Rabi'-out-Tani",       // Rabi' al-thani
+            "Djoumada-l-Oula",      // Jumada al-awwal
+            "Djoumada-t-Tania",     // Jumada al-thani
+            "Radjab",               // Rajab
+            "Cha'ban",              // Sha'ban
+            "Ramadan",              // Ramadan
+            "Chaououal",            // Shawwal
+            "Dou-l-Qa'da",          // Dhu al-Qi'dah
+            "Dou-l-Hidjja",         // Dhu al-Hijjah
+            } },
+        { "Eras", new String[] {
+            "AH"        // Anno Hijri
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/IslamicCalendarSymbols_hu.java b/src/com/ibm/util/resources/IslamicCalendarSymbols_hu.java
new file mode 100755
index 0000000..8f66469
--- /dev/null
+++ b/src/com/ibm/util/resources/IslamicCalendarSymbols_hu.java
@@ -0,0 +1,47 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/IslamicCalendarSymbols_hu.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Hungarian date format symbols for the Islamic Calendar
+ */
+public class IslamicCalendarSymbols_hu extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+            "Moharrem",                 // Muharram
+            "Safar",                    // Safar
+            "R\u00E9bi el avvel",       // Rabi' al-awwal
+            "R\u00E9bi el accher",      // Rabi' al-thani
+            "Dsem\u00E1di el avvel",    // Jumada al-awwal
+            "Dsem\u00E1di el accher",   // Jumada al-thani
+            "Redseb",                   // Rajab
+            "Sab\u00E1n",               // Sha'ban
+            "Ramad\u00E1n",             // Ramadan
+            "Sevv\u00E1l",              // Shawwal
+            "Ds\u00FCl kade",           // Dhu al-Qi'dah
+            "Ds\u00FCl hedse",          // Dhu al-Hijjah
+            } },
+        { "Eras", new String[] {
+            "MF"
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/IslamicCalendarSymbols_iw.java b/src/com/ibm/util/resources/IslamicCalendarSymbols_iw.java
new file mode 100755
index 0000000..ff5f202
--- /dev/null
+++ b/src/com/ibm/util/resources/IslamicCalendarSymbols_iw.java
@@ -0,0 +1,47 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/IslamicCalendarSymbols_iw.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Islamic Calendar
+ */
+public class IslamicCalendarSymbols_iw extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+            "\u05DE\u05D5\u05D7\u05E8\u05DD",                                               // Muharram
+            "\u05E1\u05E4\u05E8",                                                           // Safar
+            "\u05E8\u05D1\u05D9\u05E2 \u05D0\u05DC-\u05D0\u05D5\u05D5\u05D0\u05DC",         // Rabi' al-awwal
+            "\u05E8\u05D1\u05D9\u05E2 \u05D0\u05DC-\u05EA\u05E0\u05D9",                     // Rabi' al-thani
+            "\u05D2'\u05D5\u05DE\u05D3\u05D4 \u05D0\u05DC-\u05D0\u05D5\u05D5\u05D0\u05DC",  // Jumada al-awwal
+            "\u05D2'\u05D5\u05DE\u05D3\u05D4 \u05D0\u05DC-\u05EA\u05E0\u05D9",              // Jumada al-thani
+            "\u05E8\u05D2'\u05D0\u05D1",                                                    // Rajab
+            "\u05E9\u05E2\u05D1\u05D0\u05DF",                                               // Sha'ban
+            "\u05E8\u05D0\u05DE\u05D3\u05DF",                                               // Ramadan
+            "\u05E9\u05D5\u05D5\u05D0\u05DC",                                               // Shawwal
+            "\u05E9\u05D5\u05D5\u05D0\u05DC",                                               // Dhu al-Qi'dah
+            "\u05D6\u05D5 \u05D0\u05DC-\u05D7\u05D9\u05D2'\u05D4",                          // Dhu al-Hijjah
+            } },
+        { "Eras", new String[] {
+            "\u05E9\u05E0\u05EA \u05D4\u05D9\u05D2'\u05E8\u05D4"
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/IslamicCalendarSymbols_nl.java b/src/com/ibm/util/resources/IslamicCalendarSymbols_nl.java
new file mode 100755
index 0000000..17cd475
--- /dev/null
+++ b/src/com/ibm/util/resources/IslamicCalendarSymbols_nl.java
@@ -0,0 +1,47 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/IslamicCalendarSymbols_nl.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Dutch date format symbols for the Islamic Calendar
+ */
+public class IslamicCalendarSymbols_nl extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "MonthNames", new String[] {
+            "Moeharram",            // Muharram
+            "Safar",                // Safar
+            "Rabi'a al awal ",      // Rabi' al-awwal
+            "Rabi'a al thani",      // Rabi' al-thani
+            "Joemad'al awal",       // Jumada al-awwal
+            "Joemad'al thani",      // Jumada al-thani
+            "Rajab",                // Rajab
+            "Sja'aban",             // Sha'ban
+            "Ramadan",              // Ramadan
+            "Sjawal",               // Shawwal
+            "Doe al ka'aba",        // Dhu al-Qi'dah
+            "Doe al hizja",         // Dhu al-Hijjah
+            } },
+        { "Eras", new String[] {
+            "Sa'na Hizjria"
+            } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/JapaneseCalendarSymbols.java b/src/com/ibm/util/resources/JapaneseCalendarSymbols.java
new file mode 100755
index 0000000..954d58a
--- /dev/null
+++ b/src/com/ibm/util/resources/JapaneseCalendarSymbols.java
@@ -0,0 +1,282 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/JapaneseCalendarSymbols.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Default Date Format symbols for the Japanese Calendar
+ */
+public class JapaneseCalendarSymbols extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "DateTimePatterns",
+            new String[] {
+                "h:mm:ss a z", // full time pattern
+                "h:mm:ss a z", // long time pattern
+                "h:mm:ss a", // medium time pattern
+                "h:mm a", // short time pattern
+                "EEEE, MMMM d, yy G", // full date pattern
+                "MMMM d, yy G", // long date pattern
+                "MMM d, yy G", // medium date pattern
+                "M/d/yy", // short date pattern
+                "{1} {0}" // date-time pattern
+            }
+        },
+        { "Eras", new String[] {
+            // Name                         Gregorian Year
+            "Taika",                        //  645
+            "Hakuchi",                      //  650
+            "Hakuh\u014D",                  //  672
+            "Shuch\u014D",                  //  686
+            "Taih\u014D",                   //  701
+            "Keiun",                        //  704
+            "Wad\u014D",                    //  708
+            "Reiki",                        //  715
+            "Y\u014Dr\u014D",               //  717
+            "Jinki",                        //  724
+            "Tempy\u014D",                  //  729
+            "Tempy\u014D-kamp\u014D",       //  749
+            "Tempy\u014D-sh\u014Dh\u014D",  //  749
+            "Tempy\u014D-h\u014Dji",        //  757
+            "Temph\u014D-jingo",            //  765
+            "Jingo-keiun",                  //  767
+            "H\u014Dki",                    //  770
+            "Ten-\u014D",                   //  781
+            "Enryaku",                      //  782
+            "Daid\u014D",                   //  806
+            "K\u014Dnin",                   //  810
+            "Tench\u014D",                  //  824
+            "Sh\u014Dwa",                   //  834
+            "Kaj\u014D",                    //  848
+            "Ninju",                        //  851
+            "Saiko",                        //  854
+            "Tennan",                       //  857
+            "J\u014Dgan",                   //  859
+            "Genkei",                       //  877
+            "Ninna",                        //  885
+            "Kampy\u014D",                  //  889
+            "Sh\u014Dtai",                  //  898
+            "Engi",                         //  901
+            "Ench\u014D",                   //  923
+            "Sh\u014Dhei",                  //  931
+            "Tengy\u014D",                  //  938
+            "Tenryaku",                     //  947
+            "Tentoku",                      //  957
+            "\u014Cwa",                     //  961
+            "K\u014Dh\u014D",               //  964
+            "Anna",                         //  968
+            "Tenroku",                      //  970
+            "Ten-en",                       //  973
+            "J\u014Dgen",                   //  976
+            "Tengen",                       //  978
+            "Eikan",                        //  983
+            "Kanna",                        //  985
+            "Ei-en",                        //  987
+            "Eiso",                         //  989
+            "Sh\u014Dryaku",                //  990
+            "Ch\u014Dtoku",                 //  995
+            "Ch\u014Dh\u014D",              //  999
+            "Kank\u014D",                   // 1004
+            "Ch\u014Dwa",                   // 1012
+            "Kannin",                       // 1017
+            "Jian",                         // 1021
+            "Manju",                        // 1024
+            "Ch\u014Dgen",                  // 1028
+            "Ch\u014Dryaku",                // 1037
+            "Ch\u014Dky\u016B",             // 1040
+            "Kantoku",                      // 1044
+            "Eish\u014D",                   // 1046
+            "Tengi",                        // 1053
+            "K\u014Dhei",                   // 1058
+            "Jiryaku",                      // 1065
+            "Enky\u016B",                   // 1069
+            "Sh\u014Dho",                   // 1074
+            "Sh\u014Dryaku",                // 1077
+            "Eiho",                         // 1081
+            "\u014Ctoku",                   // 1084
+            "Kanji",                        // 1087
+            "Kaho",                         // 1094
+            "Eich\u014D",                   // 1096
+            "Sh\u014Dtoku",                 // 1097
+            "K\u014Dwa",                    // 1099
+            "Ch\u014Dji",                   // 1104
+            "Kash\u014D",                   // 1106
+            "Tennin",                       // 1108
+            "Ten-ei",                       // 1110
+            "Eiky\u016B",                   // 1113
+            "Gen-ei",                       // 1118
+            "Hoan",                         // 1120
+            "Tenji",                        // 1124
+            "Daiji",                        // 1126
+            "Tensh\u014D",                  // 1131
+            "Ch\u014Dsh\u014D",             // 1132
+            "Hoen",                         // 1135
+            "Eiji",                         // 1141
+            "K\u014Dji",                    // 1142
+            "Teny\u014D",                   // 1144
+            "Ky\u016Ban",                   // 1145
+            "Ninpei",                       // 1151
+            "Ky\u016Bju",                   // 1154
+            "Hogen",                        // 1156
+            "Heiji",                        // 1159
+            "Eiryaku",                      // 1160
+            "\u014Cho",                     // 1161
+            "Ch\u014Dkan",                  // 1163
+            "Eiman",                        // 1165
+            "Nin-an",                       // 1166
+            "Ka\u014D",                     // 1169
+            "Sh\u014Dan",                   // 1171
+            "Angen",                        // 1175
+            "Jish\u014D",                   // 1177
+            "Y\u014Dwa",                    // 1181
+            "Juei",                         // 1182
+            "Genryuku",                     // 1184
+            "Bunji",                        // 1185
+            "Kenky\u016B",                  // 1190
+            "Sh\u014Dji",                   // 1199
+            "Kennin",                       // 1201
+            "Genky\u016B",                  // 1204
+            "Ken-ei",                       // 1206
+            "Sh\u014Dgen",                  // 1207
+            "Kenryaku",                     // 1211
+            "Kenp\u014D",                   // 1213
+            "Sh\u014Dky\u016B",             // 1219
+            "J\u014D\u014D",                // 1222
+            "Gennin",                       // 1224
+            "Karoku",                       // 1225
+            "Antei",                        // 1227
+            "Kanki",                        // 1229
+            "J\u014Dei",                    // 1232
+            "Tempuku",                      // 1233
+            "Bunryaku",                     // 1234
+            "Katei",                        // 1235
+            "Ryakunin",                     // 1238
+            "En-\u014D",                    // 1239
+            "Ninji",                        // 1240
+            "Kangen",                       // 1243
+            "H\u014Dji",                    // 1247
+            "Kench\u014D",                  // 1249
+            "K\u014Dgen",                   // 1256
+            "Sh\u014Dka",                   // 1257
+            "Sh\u014Dgen",                  // 1259
+            "Bun-\u014D",                   // 1260
+            "K\u014Dch\u014D",              // 1261
+            "Bun-ei",                       // 1264
+            "Kenji",                        // 1275
+            "K\u014Dan",                    // 1278
+            "Sh\u014D\u014D",               // 1288
+            "Einin",                        // 1293
+            "Sh\u014Dan",                   // 1299
+            "Kengen",                       // 1302
+            "Kagen",                        // 1303
+            "Tokuji",                       // 1306
+            "Enkei",                        // 1308
+            "\u014Cch\u014D",               // 1311
+            "Sh\u014Dwa",                   // 1312
+            "Bunp\u014D",                   // 1317
+            "Gen\u014D",                    // 1319
+            "Genky\u014D",                  // 1321
+            "Sh\u014Dch\u016B",             // 1324
+            "Kareki",                       // 1326
+            "Gentoku",                      // 1329
+            "Genk\u014D",                   // 1331
+            "Kemmu",                        // 1334
+            "Engen",                        // 1336
+            "K\u014Dkoku",                  // 1340
+            "Sh\u014Dhei",                  // 1346
+            "Kentoku",                      // 1370
+            "Bunch\u0169",                  // 1372
+            "Tenju",                        // 1375
+            "K\u014Dwa",                    // 1381
+            "Gench\u0169",                  // 1384
+            "Meitoku",                      // 1384
+            "K\u014Dryaku",                 // 1379
+            "Kakei",                        // 1387
+            "K\u014D\u014D",                // 1389
+            "Meitoku",                      // 1390
+            "\u014Cei",                     // 1394
+            "Sh\u014Dch\u014D",             // 1428
+            "Eiky\u014D",                   // 1429
+            "Kakitsu",                      // 1441
+            "Bun-an",                       // 1444
+            "H\u014Dtoku",                  // 1449
+            "Ky\u014Dtoku",                 // 1452
+            "K\u014Dsh\u014D",              // 1455
+            "Ch\u014Droku",                 // 1457
+            "Kansh\u014D",                  // 1460
+            "Bunsh\u014D",                  // 1466
+            "\u014Cnin",                    // 1467
+            "Bunmei",                       // 1469
+            "Ch\u014Dky\u014D",             // 1487
+            "Entoku",                       // 1489
+            "Mei\u014D",                    // 1492
+            "Bunki",                        // 1501
+            "Eish\u014D",                   // 1504
+            "Taiei",                        // 1521
+            "Ky\u014Droku",                 // 1528
+            "Tenmon",                       // 1532
+            "K\u014Dji",                    // 1555
+            "Eiroku",                       // 1558
+            "Genki",                        // 1570
+            "Tensh\u014D",                  // 1573
+            "Bunroku",                      // 1592
+            "Keich\u014D",                  // 1596
+            "Genwa",                        // 1615
+            "Kan-ei",                       // 1624
+            "Sh\u014Dho",                   // 1644
+            "Keian",                        // 1648
+            "Sh\u014D\u014D",               // 1652
+            "Meiryaku",                     // 1655
+            "Manji",                        // 1658
+            "Kanbun",                       // 1661
+            "Enp\u014D",                    // 1673
+            "Tenwa",                        // 1681
+            "J\u014Dky\u014D",              // 1684
+            "Genroku",                      // 1688
+            "H\u014Dei",                    // 1704
+            "Sh\u014Dtoku",                 // 1711
+            "Ky\u014Dh\u014D",              // 1716
+            "Genbun",                       // 1736
+            "Kanp\u014D",                   // 1741
+            "Enky\u014D",                   // 1744
+            "Kan-en",                       // 1748
+            "H\u014Dryaku",                 // 1751
+            "Meiwa",                        // 1764
+            "An-ei",                        // 1772
+            "Tenmei",                       // 1781
+            "Kansei",                       // 1789
+            "Ky\u014Dwa",                   // 1801
+            "Bunka",                        // 1804
+            "Bunsei",                       // 1818
+            "Tenp\u014D",                   // 1830
+            "K\u014Dka",                    // 1844
+            "Kaei",                         // 1848
+            "Ansei",                        // 1854
+            "Man-en",                       // 1860
+            "Bunky\u016B",                  // 1861
+            "Genji",                        // 1864
+            "Kei\u014D",                    // 1865
+            "Meiji",                        // 1868
+            "Taish\u014D",                  // 1912
+            "Sh\u014Dwa",                   // 1926
+            "Heisei",                       // 1989
+        } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/JapaneseCalendarSymbols_ja.java b/src/com/ibm/util/resources/JapaneseCalendarSymbols_ja.java
new file mode 100755
index 0000000..1ccd5b1
--- /dev/null
+++ b/src/com/ibm/util/resources/JapaneseCalendarSymbols_ja.java
@@ -0,0 +1,281 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/JapaneseCalendarSymbols_ja.java,v $ 
+ * $Date: 2000/09/19 18:37:36 $ 
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * Japanese Kanji version of the Date Format symbols for the Japanese calendar
+ */
+public class JapaneseCalendarSymbols_ja extends ListResourceBundle {
+
+    private static String copyright = "Copyright \u00a9 1998 IBM Corp. All Rights Reserved.";
+
+    static final Object[][] fContents = {
+        { "DateTimePatterns",
+            new String[] {
+                "H'\u6642'mm'\u5206'ss'\u79d2'z", // full time pattern
+                "H:mm:ss:z", // long time pattern
+                "H:mm:ss", // medium time pattern
+                "H:mm", // short time pattern
+                "G yy'\u5e74'M'\u6708'd'\u65e5'", // full date pattern
+                "G yy/MM/dd", // long date pattern
+                "G yy/MM/dd", // medium date pattern
+                "G yy/MM/dd", // short date pattern
+                "{1} {0}" // date-time pattern
+            }
+        },
+        { "Eras", new String[] {
+            "\u5927\u5316",             //  645 Taika
+            "\u767D\u96C9",             //  650 Hakuchi
+            "\u767D\u9CEF",             //  672 Hakuho
+            "\u6731\u9CE5",             //  686 Shucho
+            "\u5927\u5B9D",             //  701 Taiho
+            "\u6176\u96F2",             //  704 Keiun
+            "\u548C\u9285",             //  708 Wado
+            "\u970A\u4E80",             //  715 Reiki
+            "\u990A\u8001",             //  717 Yoro
+            "\u795E\u4E80",             //  724 Jinki
+            "\u5929\u5E73",             //  729 Tempyo
+            "\u5929\u5E73\u611F\u5B9D", //  749 Tempyo-kampo
+            "\u5929\u5E73\u52DD\u5B9D", //  749 Tempyo-shoho
+            "\u5929\u5E73\u5B9D\u5B57", //  757 Tempyo-hoji
+            "\u5929\u5E73\u795E\u8B77", //  765 Tempho-jingo
+            "\u795E\u8B77\u666F\u96F2", //  767 Jingo-keiun
+            "\u5B9D\u4E80",             //  770 Hoki
+            "\u5929\u5FDC",             //  781 Ten-o
+            "\u5EF6\u66A6",             //  782 Enryaku
+            "\u5927\u540C",             //  806 Daido
+            "\u5F18\u4EC1",             //  810 Konin
+            "\u5929\u9577",             //  824 Tencho
+            "\u627F\u548C",             //  834 Showa
+            "\u5609\u7965",             //  848 Kajo
+            "\u4EC1\u5BFF",             //  851 Ninju
+            "\u6589\u8861",             //  854 Saiko
+            "\u5929\u5B89",             //  857 Tennan
+            "\u8C9E\u89B3",             //  859 Jogan
+            "\u5143\u6176",             //  877 Genkei
+            "\u4EC1\u548C",             //  885 Ninna
+            "\u5BDB\u5E73",             //  889 Kampyo
+            "\u660C\u6CF0",             //  898 Shotai
+            "\u5EF6\u559C",             //  901 Engi
+            "\u5EF6\u9577",             //  923 Encho
+            "\u627F\u5E73",             //  931 Shohei
+            "\u5929\u6176",             //  938 Tengyo
+            "\u5929\u66A6",             //  947 Tenryaku
+            "\u5929\u5FB3",             //  957 Tentoku
+            "\u5FDC\u548C",             //  961 Owa
+            "\u5EB7\u4FDD",             //  964 Koho
+            "\u5B89\u548C",             //  968 Anna
+            "\u5929\u7984",             //  970 Tenroku
+            "\u5929\u5EF6",             //  973 Ten-en
+            "\u8C9E\u5143",             //  976 Jogen
+            "\u5929\u5143",             //  978 Tengen
+            "\u6C38\u89B3",             //  983 Eikan
+            "\u5BDB\u548C",             //  985 Kanna
+            "\u6C38\u5EF6",             //  987 Ei-en
+            "\u6C38\u795A",             //  989 Eiso
+            "\u6B63\u66A6",             //  990 Shoryaku
+            "\u9577\u5FB3",             //  995 Chotoku
+            "\u9577\u4FDD",             //  999 Choho
+            "\u5BDB\u5F18",             // 1004 Kanko
+            "\u9577\u548C",             // 1012 Chowa
+            "\u5BDB\u4EC1",             // 1017 Kannin
+            "\u6CBB\u5B89",             // 1021 Jian
+            "\u4E07\u5BFF",             // 1024 Manju
+            "\u9577\u5143",             // 1028 Chogen
+            "\u9577\u66A6",             // 1037 Choryaku
+            "\u9577\u4E45",             // 1040 Chokyu
+            "\u5BDB\u5FB3",             // 1044 Kantoku
+            "\u6C38\u627F",             // 1046 Eisho
+            "\u5929\u559C",             // 1053 Tengi
+            "\u5EB7\u5E73",             // 1058 Kohei
+            "\u6CBB\u66A6",             // 1065 Jiryaku
+            "\u5EF6\u4E45",             // 1069 Enkyu
+            "\u627F\u4FDD",             // 1074 Shoho
+            "\u627F\u66A6",             // 1077 Shoryaku
+            "\u6C38\u4FDD",             // 1081 Eiho
+            "\u5FDC\u5FB3",             // 1084 Otoku
+            "\u5BDB\u6CBB",             // 1087 Kanji
+            "\u5609\u4FDD",             // 1094 Kaho
+            "\u6C38\u9577",             // 1096 Eicho
+            "\u627F\u5FB3",             // 1097 Shotoku
+            "\u5EB7\u548C",             // 1099 Kowa
+            "\u9577\u6CBB",             // 1104 Choji
+            "\u5609\u627F",             // 1106 Kasho
+            "\u5929\u4EC1",             // 1108 Tennin
+            "\u5929\u6C38",             // 1110 Ten-ei
+            "\u6C38\u4E45",             // 1113 Eikyu
+            "\u5143\u6C38",             // 1118 Gen-ei
+            "\u4FDD\u5B89",             // 1120 Hoan
+            "\u5929\u6CBB",             // 1124 Tenji
+            "\u5927\u6CBB",             // 1126 Daiji
+            "\u5929\u627F",             // 1131 Tensho
+            "\u9577\u627F",             // 1132 Chosho
+            "\u4FDD\u5EF6",             // 1135 Hoen
+            "\u6C38\u6CBB",             // 1141 Eiji
+            "\u5EB7\u6CBB",             // 1142 Koji
+            "\u5929\u990A",             // 1144 Tenyo
+            "\u4E45\u5B89",             // 1145 Kyuan
+            "\u4EC1\u5E73",             // 1151 Ninpei
+            "\u4E45\u5BFF",             // 1154 Kyuju
+            "\u4FDD\u5143",             // 1156 Hogen
+            "\u5E73\u6CBB",             // 1159 Heiji
+            "\u6C38\u66A6",             // 1160 Eiryaku
+            "\u5FDC\u4FDD",             // 1161 Oho
+            "\u9577\u5BDB",             // 1163 Chokan
+            "\u6C38\u4E07",             // 1165 Eiman
+            "\u4EC1\u5B89",             // 1166 Nin-an
+            "\u5609\u5FDC",             // 1169 Kao
+            "\u627F\u5B89",             // 1171 Shoan
+            "\u5B89\u5143",             // 1175 Angen
+            "\u6CBB\u627F",             // 1177 Jisho
+            "\u990A\u548C",             // 1181 Yowa
+            "\u5BFF\u6C38",             // 1182 Juei
+            "\u5143\u66A6",             // 1184 Genryuku
+            "\u6587\u6CBB",             // 1185 Bunji
+            "\u5EFA\u4E45",             // 1190 Kenkyu
+            "\u6B63\u6CBB",             // 1199 Shoji
+            "\u5EFA\u4EC1",             // 1201 Kennin
+            "\u5143\u4E45",             // 1204 Genkyu
+            "\u5EFA\u6C38",             // 1206 Ken-ei
+            "\u627F\u5143",             // 1207 Shogen
+            "\u5EFA\u66A6",             // 1211 Kenryaku
+            "\u5EFA\u4FDD",             // 1213 Kenpo
+            "\u627F\u4E45",             // 1219 Shokyu
+            "\u8C9E\u5FDC",             // 1222 Joo
+            "\u5143\u4EC1",             // 1224 Gennin
+            "\u5609\u7984",             // 1225 Karoku
+            "\u5B89\u8C9E",             // 1227 Antei
+            "\u5BDB\u559C",             // 1229 Kanki
+            "\u8C9E\u6C38",             // 1232 Joei
+            "\u5929\u798F",             // 1233 Tempuku
+            "\u6587\u66A6",             // 1234 Bunryaku
+            "\u5609\u798E",             // 1235 Katei
+            "\u66A6\u4EC1",             // 1238 Ryakunin
+            "\u5EF6\u5FDC",             // 1239 En-o
+            "\u4EC1\u6CBB",             // 1240 Ninji
+            "\u5BDB\u5143",             // 1243 Kangen
+            "\u5B9D\u6CBB",             // 1247 Hoji
+            "\u5EFA\u9577",             // 1249 Kencho
+            "\u5EB7\u5143",             // 1256 Kogen
+            "\u6B63\u5609",             // 1257 Shoka
+            "\u6B63\u5143",             // 1259 Shogen
+            "\u6587\u5FDC",             // 1260 Bun-o
+            "\u5F18\u9577",             // 1261 Kocho
+            "\u6587\u6C38",             // 1264 Bun-ei
+            "\u5EFA\u6CBB",             // 1275 Kenji
+            "\u5F18\u5B89",             // 1278 Koan
+            "\u6B63\u5FDC",             // 1288 Shoo
+            "\u6C38\u4EC1",             // 1293 Einin
+            "\u6B63\u5B89",             // 1299 Shoan
+            "\u4E7E\u5143",             // 1302 Kengen
+            "\u5609\u5143",             // 1303 Kagen
+            "\u5FB3\u6CBB",             // 1306 Tokuji
+            "\u5EF6\u6176",             // 1308 Enkei
+            "\u5FDC\u9577",             // 1311 Ocho
+            "\u6B63\u548C",             // 1312 Showa
+            "\u6587\u4FDD",             // 1317 Bunpo
+            "\u5143\u5FDC",             // 1319 Geno
+            "\u5143\u4EA8",             // 1321 Genkyo
+            "\u6B63\u4E2D",             // 1324 Shochu
+            "\u5609\u66A6",             // 1326 Kareki
+            "\u5143\u5FB3",             // 1329 Gentoku
+            "\u5143\u5F18",             // 1331 Genko
+            "\u5EFA\u6B66",             // 1334 Kemmu
+            "\u5EF6\u5143",             // 1336 Engen
+            "\u8208\u56FD",             // 1340 Kokoku
+            "\u6B63\u5E73",             // 1346 Shohei
+            "\u5EFA\u5FB3",             // 1370 Kentoku
+            "\u6587\u4E2D",             // 1372 Bunchu
+            "\u5929\u6388",             // 1375 Tenju
+            "\u5F18\u548C",             // 1381 Kowa
+            "\u5143\u4E2D",             // 1384 Genchu
+            "\u81F3\u5FB3",             // 1384 Meitoku
+            "\u5EB7\u66A6",             // 1379 Koryaku
+            "\u5609\u6176",             // 1387 Kakei
+            "\u5EB7\u5FDC",             // 1389 Koo
+            "\u660E\u5FB3",             // 1390 Meitoku
+            "\u5FDC\u6C38",             // 1394 Oei
+            "\u6B63\u9577",             // 1428 Shocho
+            "\u6C38\u4EAB",             // 1429 Eikyo
+            "\u5609\u5409",             // 1441 Kakitsu
+            "\u6587\u5B89",             // 1444 Bun-an
+            "\u5B9D\u5FB3",             // 1449 Hotoku
+            "\u4EAB\u5FB3",             // 1452 Kyotoku
+            "\u5EB7\u6B63",             // 1455 Kosho
+            "\u9577\u7984",             // 1457 Choroku
+            "\u5BDB\u6B63",             // 1460 Kansho
+            "\u6587\u6B63",             // 1466 Bunsho
+            "\u5FDC\u4EC1",             // 1467 Onin
+            "\u6587\u660E",             // 1469 Bunmei
+            "\u9577\u4EAB",             // 1487 Chokyo
+            "\u5EF6\u5FB3",             // 1489 Entoku
+            "\u660E\u5FDC",             // 1492 Meio
+            "\u6587\u4E80",             // 1501 Bunki
+            "\u6C38\u6B63",             // 1504 Eisho
+            "\u5927\u6C38",             // 1521 Taiei
+            "\u4EAB\u7984",             // 1528 Kyoroku
+            "\u5929\u6587",             // 1532 Tenmon
+            "\u5F18\u6CBB",             // 1555 Koji
+            "\u6C38\u7984",             // 1558 Eiroku
+            "\u5143\u4E80",             // 1570 Genki
+            "\u5929\u6B63",             // 1573 Tensho
+            "\u6587\u7984",             // 1592 Bunroku
+            "\u6176\u9577",             // 1596 Keicho
+            "\u5143\u548C",             // 1615 Genwa
+            "\u5BDB\u6C38",             // 1624 Kan-ei
+            "\u6B63\u4FDD",             // 1644 Shoho
+            "\u6176\u5B89",             // 1648 Keian
+            "\u627F\u5FDC",             // 1652 Shoo
+            "\u660E\u66A6",             // 1655 Meiryaku
+            "\u4E07\u6CBB",             // 1658 Manji
+            "\u5BDB\u6587",             // 1661 Kanbun
+            "\u5EF6\u5B9D",             // 1673 Enpo
+            "\u5929\u548C",             // 1681 Tenwa
+            "\u8C9E\u4EAB",             // 1684 Jokyo
+            "\u5143\u7984",             // 1688 Genroku
+            "\u5B9D\u6C38",             // 1704 Hoei
+            "\u6B63\u5FB3",             // 1711 Shotoku
+            "\u4EAB\u4FDD",             // 1716 Kyoho
+            "\u5143\u6587",             // 1736 Genbun
+            "\u5BDB\u4FDD",             // 1741 Kanpo
+            "\u5EF6\u4EAB",             // 1744 Enkyo
+            "\u5BDB\u5EF6",             // 1748 Kan-en
+            "\u5B9D\u66A6",             // 1751 Horyaku
+            "\u660E\u548C",             // 1764 Meiwa
+            "\u5B89\u6C38",             // 1772 An-ei
+            "\u5929\u660E",             // 1781 Tenmei
+            "\u5BDB\u653F",             // 1789 Kansei
+            "\u4EAB\u548C",             // 1801 Kyowa
+            "\u6587\u5316",             // 1804 Bunka
+            "\u6587\u653F",             // 1818 Bunsei
+            "\u5929\u4FDD",             // 1830 Tenpo
+            "\u5F18\u5316",             // 1844 Koka
+            "\u5609\u6C38",             // 1848 Kaei
+            "\u5B89\u653F",             // 1854 Ansei
+            "\u4E07\u5EF6",             // 1860 Man-en
+            "\u6587\u4E45",             // 1861 Bunkyu
+            "\u5143\u6CBB",             // 1864 Genji
+            "\u6176\u5FDC",             // 1865 Keio
+            "\u660E\u6CBB",             // 1868 Meiji
+            "\u5927\u6B63",             // 1912 Taisho
+            "\u662D\u548C",             // 1926 Showa
+            "\u5E73\u6210",             // 1989 Heisei
+        } },
+    };
+
+    public synchronized Object[][] getContents() {
+        return fContents;
+    }
+};
diff --git a/src/com/ibm/util/resources/package.html b/src/com/ibm/util/resources/package.html
new file mode 100755
index 0000000..19f64a7
--- /dev/null
+++ b/src/com/ibm/util/resources/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--  Copyright (C) 2000, International Business Machines Corporation and
+  others. All Rights Reserved.
+
+  $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/package.html,v $
+  $Revision: 1.1 $
+  $Date: 2000/03/15 21:35:53 $
+-->
+</head>
+<body bgcolor="white">
+Resources used by classes in the com.ibm.util package.
+</body>
+</html>
\ No newline at end of file
diff --git a/src/data/holidays_jp.ucs b/src/data/holidays_jp.ucs
new file mode 100755
index 0000000..2e6bc49
--- /dev/null
+++ b/src/data/holidays_jp.ucs
Binary files differ
diff --git a/src/data/thai6.ucs b/src/data/thai6.ucs
new file mode 100755
index 0000000..bab0543
--- /dev/null
+++ b/src/data/thai6.ucs
Binary files differ
diff --git a/src/data/unicode/CompositionExclusions-1.txt b/src/data/unicode/CompositionExclusions-1.txt
new file mode 100755
index 0000000..5ea46af
--- /dev/null
+++ b/src/data/unicode/CompositionExclusions-1.txt
@@ -0,0 +1,143 @@
+# Composition Exclusions
+# This file lists the characters from the UTR #15 Composition Exclusion Table.
+#
+# For more information, see
+# http://www.unicode.org/unicode/reports/tr15/#Primary Exclusion List Table
+
+# (1) Script Specifics
+# This list of characters cannot be derived from the UnicodeData file.
+
+0958 # DEVANAGARI LETTER QA
+0959 # DEVANAGARI LETTER KHHA
+095A # DEVANAGARI LETTER GHHA
+095B # DEVANAGARI LETTER ZA
+095C # DEVANAGARI LETTER DDDHA
+095D # DEVANAGARI LETTER RHA
+095E # DEVANAGARI LETTER FA
+095F # DEVANAGARI LETTER YYA
+09DC # BENGALI LETTER RRA
+09DD # BENGALI LETTER RHA
+09DF # BENGALI LETTER YYA
+0A33 # GURMUKHI LETTER LLA
+0A36 # GURMUKHI LETTER SHA
+0A59 # GURMUKHI LETTER KHHA
+0A5A # GURMUKHI LETTER GHHA
+0A5B # GURMUKHI LETTER ZA
+0A5E # GURMUKHI LETTER FA
+0B5C # ORIYA LETTER RRA
+0B5D # ORIYA LETTER RHA
+0F43 # TIBETAN LETTER GHA
+0F4D # TIBETAN LETTER DDHA
+0F52 # TIBETAN LETTER DHA
+0F57 # TIBETAN LETTER BHA
+0F5C # TIBETAN LETTER DZHA
+0F69 # TIBETAN LETTER KSSA
+0F76 # TIBETAN VOWEL SIGN VOCALIC R
+0F78 # TIBETAN VOWEL SIGN VOCALIC L
+0F93 # TIBETAN SUBJOINED LETTER GHA
+0F9D # TIBETAN SUBJOINED LETTER DDHA
+0FA2 # TIBETAN SUBJOINED LETTER DHA
+0FA7 # TIBETAN SUBJOINED LETTER BHA
+0FAC # TIBETAN SUBJOINED LETTER DZHA
+0FB9 # TIBETAN SUBJOINED LETTER KSSA
+FB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A # HEBREW LETTER SHIN WITH SHIN DOT
+FB2B # HEBREW LETTER SHIN WITH SIN DOT
+FB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E # HEBREW LETTER ALEF WITH PATAH
+FB2F # HEBREW LETTER ALEF WITH QAMATS
+FB30 # HEBREW LETTER ALEF WITH MAPIQ
+FB31 # HEBREW LETTER BET WITH DAGESH
+FB32 # HEBREW LETTER GIMEL WITH DAGESH
+FB33 # HEBREW LETTER DALET WITH DAGESH
+FB34 # HEBREW LETTER HE WITH MAPIQ
+FB35 # HEBREW LETTER VAV WITH DAGESH
+FB36 # HEBREW LETTER ZAYIN WITH DAGESH
+FB38 # HEBREW LETTER TET WITH DAGESH
+FB39 # HEBREW LETTER YOD WITH DAGESH
+FB3A # HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B # HEBREW LETTER KAF WITH DAGESH
+FB3C # HEBREW LETTER LAMED WITH DAGESH
+FB3E # HEBREW LETTER MEM WITH DAGESH
+FB40 # HEBREW LETTER NUN WITH DAGESH
+FB41 # HEBREW LETTER SAMEKH WITH DAGESH
+FB43 # HEBREW LETTER FINAL PE WITH DAGESH
+FB44 # HEBREW LETTER PE WITH DAGESH
+FB46 # HEBREW LETTER TSADI WITH DAGESH
+FB47 # HEBREW LETTER QOF WITH DAGESH
+FB48 # HEBREW LETTER RESH WITH DAGESH
+FB49 # HEBREW LETTER SHIN WITH DAGESH
+FB4A # HEBREW LETTER TAV WITH DAGESH
+FB4B # HEBREW LETTER VAV WITH HOLAM
+FB4C # HEBREW LETTER BET WITH RAFE
+FB4D # HEBREW LETTER KAF WITH RAFE
+FB4E # HEBREW LETTER PE WITH RAFE
+
+# (2) Post Composition Version characters
+# These characters cannot be derived from the UnicodeData file.
+# (There are no characters in this category in this version of Unicode.)
+
+# (3) Singleton Decompositions
+# These characters can be derived from the UnicodeData file
+# by including all characters whose canonical decomposition
+# consists of a single character.
+# These characters are simply quoted here for reference.
+
+# 0340 COMBINING GRAVE TONE MARK
+# 0341 COMBINING ACUTE TONE MARK
+# 0343 COMBINING GREEK KORONIS
+# 0374 GREEK NUMERAL SIGN
+# 037E GREEK QUESTION MARK
+# 0387 GREEK ANO TELEIA
+# 1F71 GREEK SMALL LETTER ALPHA WITH OXIA
+# 1F73 GREEK SMALL LETTER EPSILON WITH OXIA
+# 1F75 GREEK SMALL LETTER ETA WITH OXIA
+# 1F77 GREEK SMALL LETTER IOTA WITH OXIA
+# 1F79 GREEK SMALL LETTER OMICRON WITH OXIA
+# 1F7B GREEK SMALL LETTER UPSILON WITH OXIA
+# 1F7D GREEK SMALL LETTER OMEGA WITH OXIA
+# 1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
+# 1FBE GREEK PROSGEGRAMMENI
+# 1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
+# 1FCB GREEK CAPITAL LETTER ETA WITH OXIA
+# 1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+# 1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
+# 1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+# 1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
+# 1FEE GREEK DIALYTIKA AND OXIA
+# 1FEF GREEK VARIA
+# 1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
+# 1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
+# 1FFD GREEK OXIA
+# 2000 EN QUAD
+# 2001 EM QUAD
+# 2126 OHM SIGN
+# 212A KELVIN SIGN
+# 212B ANGSTROM SIGN
+# 2329 LEFT-POINTING ANGLE BRACKET
+# 232A RIGHT-POINTING ANGLE BRACKET
+# F900 CJK COMPATIBILITY IDEOGRAPH-F900
+#.. FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
+# FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
+# FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
+# FA15 CJK COMPATIBILITY IDEOGRAPH-FA15
+#.. FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E
+# FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
+# FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
+# FA25 CJK COMPATIBILITY IDEOGRAPH-FA25
+# FA26 CJK COMPATIBILITY IDEOGRAPH-FA26
+# FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A
+#.. FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
+
+# (4) Non-Starter Decompositions
+# These characters can be derived from the UnicodeData file
+# by including all characters whose canonical decomposition consists
+# of a sequence of characters, the first of which has a canonical
+# class of zero.
+# These characters are simply quoted here for reference.
+
+# 0344 COMBINING GREEK DIALYTIKA TONOS
+# 0F73 TIBETAN VOWEL SIGN II
+# 0F75 TIBETAN VOWEL SIGN UU
+# 0F81 TIBETAN VOWEL SIGN REVERSED II
diff --git a/src/data/unicode/CompositionExclusions.txt b/src/data/unicode/CompositionExclusions.txt
new file mode 100755
index 0000000..a95d39a
--- /dev/null
+++ b/src/data/unicode/CompositionExclusions.txt
@@ -0,0 +1,145 @@
+# Composition Exclusions
+# This file lists the characters from the UTR #15 Composition Exclusion Table.
+#
+# For more information, see
+# http://www.unicode.org/unicode/reports/tr15/#Primary Exclusion List Table
+
+# (1) Script Specifics
+# This list of characters cannot be derived from the UnicodeData file.
+
+0958 # DEVANAGARI LETTER QA
+0959 # DEVANAGARI LETTER KHHA
+095A # DEVANAGARI LETTER GHHA
+095B # DEVANAGARI LETTER ZA
+095C # DEVANAGARI LETTER DDDHA
+095D # DEVANAGARI LETTER RHA
+095E # DEVANAGARI LETTER FA
+095F # DEVANAGARI LETTER YYA
+09DC # BENGALI LETTER RRA
+09DD # BENGALI LETTER RHA
+09DF # BENGALI LETTER YYA
+0A33 # GURMUKHI LETTER LLA
+0A36 # GURMUKHI LETTER SHA
+0A59 # GURMUKHI LETTER KHHA
+0A5A # GURMUKHI LETTER GHHA
+0A5B # GURMUKHI LETTER ZA
+0A5E # GURMUKHI LETTER FA
+0B5C # ORIYA LETTER RRA
+0B5D # ORIYA LETTER RHA
+0F43 # TIBETAN LETTER GHA
+0F4D # TIBETAN LETTER DDHA
+0F52 # TIBETAN LETTER DHA
+0F57 # TIBETAN LETTER BHA
+0F5C # TIBETAN LETTER DZHA
+0F69 # TIBETAN LETTER KSSA
+0F76 # TIBETAN VOWEL SIGN VOCALIC R
+0F78 # TIBETAN VOWEL SIGN VOCALIC L
+0F93 # TIBETAN SUBJOINED LETTER GHA
+0F9D # TIBETAN SUBJOINED LETTER DDHA
+0FA2 # TIBETAN SUBJOINED LETTER DHA
+0FA7 # TIBETAN SUBJOINED LETTER BHA
+0FAC # TIBETAN SUBJOINED LETTER DZHA
+0FB9 # TIBETAN SUBJOINED LETTER KSSA
+FB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A # HEBREW LETTER SHIN WITH SHIN DOT
+FB2B # HEBREW LETTER SHIN WITH SIN DOT
+FB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E # HEBREW LETTER ALEF WITH PATAH
+FB2F # HEBREW LETTER ALEF WITH QAMATS
+FB30 # HEBREW LETTER ALEF WITH MAPIQ
+FB31 # HEBREW LETTER BET WITH DAGESH
+FB32 # HEBREW LETTER GIMEL WITH DAGESH
+FB33 # HEBREW LETTER DALET WITH DAGESH
+FB34 # HEBREW LETTER HE WITH MAPIQ
+FB35 # HEBREW LETTER VAV WITH DAGESH
+FB36 # HEBREW LETTER ZAYIN WITH DAGESH
+FB38 # HEBREW LETTER TET WITH DAGESH
+FB39 # HEBREW LETTER YOD WITH DAGESH
+FB3A # HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B # HEBREW LETTER KAF WITH DAGESH
+FB3C # HEBREW LETTER LAMED WITH DAGESH
+FB3E # HEBREW LETTER MEM WITH DAGESH
+FB40 # HEBREW LETTER NUN WITH DAGESH
+FB41 # HEBREW LETTER SAMEKH WITH DAGESH
+FB43 # HEBREW LETTER FINAL PE WITH DAGESH
+FB44 # HEBREW LETTER PE WITH DAGESH
+FB46 # HEBREW LETTER TSADI WITH DAGESH
+FB47 # HEBREW LETTER QOF WITH DAGESH
+FB48 # HEBREW LETTER RESH WITH DAGESH
+FB49 # HEBREW LETTER SHIN WITH DAGESH
+FB4A # HEBREW LETTER TAV WITH DAGESH
+FB4B # HEBREW LETTER VAV WITH HOLAM
+FB4C # HEBREW LETTER BET WITH RAFE
+FB4D # HEBREW LETTER KAF WITH RAFE
+FB4E # HEBREW LETTER PE WITH RAFE
+
+# (2) Post Composition Version characters
+# These characters cannot be derived from the UnicodeData file.
+# (There are no characters in this category in this version of Unicode.)
+
+# (3) Singleton Decompositions
+# These characters can be derived from the UnicodeData file
+# by including all characters whose canonical decomposition
+# consists of a single character.
+# These characters are simply quoted here for reference.
+
+# 0340 COMBINING GRAVE TONE MARK
+# 0341 COMBINING ACUTE TONE MARK
+# 0343 COMBINING GREEK KORONIS
+# 0374 GREEK NUMERAL SIGN
+# 037E GREEK QUESTION MARK
+# 0387 GREEK ANO TELEIA
+# 1F71 GREEK SMALL LETTER ALPHA WITH OXIA
+# 1F73 GREEK SMALL LETTER EPSILON WITH OXIA
+# 1F75 GREEK SMALL LETTER ETA WITH OXIA
+# 1F77 GREEK SMALL LETTER IOTA WITH OXIA
+# 1F79 GREEK SMALL LETTER OMICRON WITH OXIA
+# 1F7B GREEK SMALL LETTER UPSILON WITH OXIA
+# 1F7D GREEK SMALL LETTER OMEGA WITH OXIA
+# 1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
+# 1FBE GREEK PROSGEGRAMMENI
+# 1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
+# 1FCB GREEK CAPITAL LETTER ETA WITH OXIA
+# 1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+# 1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
+# 1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+# 1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
+# 1FEE GREEK DIALYTIKA AND OXIA
+# 1FEF GREEK VARIA
+# 1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
+# 1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
+# 1FFD GREEK OXIA
+# 2000 EN QUAD
+# 2001 EM QUAD
+# 2126 OHM SIGN
+# 212A KELVIN SIGN
+# 212B ANGSTROM SIGN
+# 2329 LEFT-POINTING ANGLE BRACKET
+# 232A RIGHT-POINTING ANGLE BRACKET
+# F900 CJK COMPATIBILITY IDEOGRAPH-F900
+#.. FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
+# FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
+# FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
+# FA15 CJK COMPATIBILITY IDEOGRAPH-FA15
+#.. FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E
+# FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
+# FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
+# FA25 CJK COMPATIBILITY IDEOGRAPH-FA25
+# FA26 CJK COMPATIBILITY IDEOGRAPH-FA26
+# FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A
+#.. FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
+
+# (4) Non-Starter Decompositions
+# These characters can be derived from the UnicodeData file
+# by including all characters whose canonical decomposition consists
+# of a sequence of characters, the first of which has a canonical
+# class of zero.
+# These characters are simply quoted here for reference.
+
+# 0344 COMBINING GREEK DIALYTIKA TONOS
+# 0F73 TIBETAN VOWEL SIGN II
+# 0F75 TIBETAN VOWEL SIGN UU
+# 0F81 TIBETAN VOWEL SIGN REVERSED II
+
+
diff --git a/src/data/unicode/Draft-TestSuite.txt b/src/data/unicode/Draft-TestSuite.txt
new file mode 100755
index 0000000..25f4c42
--- /dev/null
+++ b/src/data/unicode/Draft-TestSuite.txt
@@ -0,0 +1,15249 @@
+# Normalization Test Suite
+# Columns (c1, c2,...) are separated by semicolons
+#
+# Comments are indicated with hash marks
+# The following invariants must be true for all conformant implementations
+#  c2 == NFC(c1) == NFC(c2) == NFC(c3)
+#  c3 == NFD(c1) == NFD(c2) == NFD(c3)
+#  c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5)
+#  c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5)
+#
+# Part 3: Specific cases
+#
+1E0A;1E0A;0044 0307;1E0A;0044 0307; # (Ḋ; Ḋ; D◌̇; Ḋ; D◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C;1E0C;0044 0323;1E0C;0044 0323; # (Ḍ; Ḍ; D◌̣; Ḍ; D◌̣; ) LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0A 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (Ḋ◌̣; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE, COMBINING DOT BELOW
+1E0C 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (Ḍ◌̇; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT BELOW, COMBINING DOT ABOVE
+0044 0307 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (D◌̇◌̣; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING DOT ABOVE, COMBINING DOT BELOW
+0044 0323 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING DOT BELOW, COMBINING DOT ABOVE
+1E0A 031B;1E0A 031B;0044 031B 0307;1E0A 031B;0044 031B 0307; # (Ḋ◌̛; Ḋ◌̛; D◌̛◌̇; Ḋ◌̛; D◌̛◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE, COMBINING HORN
+1E0C 031B;1E0C 031B;0044 031B 0323;1E0C 031B;0044 031B 0323; # (Ḍ◌̛; Ḍ◌̛; D◌̛◌̣; Ḍ◌̛; D◌̛◌̣; ) LATIN CAPITAL LETTER D WITH DOT BELOW, COMBINING HORN
+1E0A 031B 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (Ḋ◌̛◌̣; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE, COMBINING HORN, COMBINING DOT BELOW
+1E0C 031B 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (Ḍ◌̛◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT BELOW, COMBINING HORN, COMBINING DOT ABOVE
+0044 031B 0307 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (D◌̛◌̇◌̣; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING HORN, COMBINING DOT ABOVE, COMBINING DOT BELOW
+0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING HORN, COMBINING DOT BELOW, COMBINING DOT ABOVE
+00C8;00C8;0045 0300;00C8;0045 0300; # (È; È; E◌̀; È; E◌̀; ) LATIN CAPITAL LETTER E WITH GRAVE
+0112;0112;0045 0304;0112;0045 0304; # (Ē; Ē; E◌̄; Ē; E◌̄; ) LATIN CAPITAL LETTER E WITH MACRON
+0045 0300;00C8;0045 0300;00C8;0045 0300; # (E◌̀; È; E◌̀; È; E◌̀; ) LATIN CAPITAL LETTER E, COMBINING GRAVE ACCENT
+0045 0304;0112;0045 0304;0112;0045 0304; # (E◌̄; Ē; E◌̄; Ē; E◌̄; ) LATIN CAPITAL LETTER E, COMBINING MACRON
+1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ḕ; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+0112 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ē◌̀; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON, COMBINING GRAVE ACCENT
+1E14 0304;1E14 0304;0045 0304 0300 0304;1E14 0304;0045 0304 0300 0304; # (Ḕ◌̄; Ḕ◌̄; E◌̄◌̀◌̄; Ḕ◌̄; E◌̄◌̀◌̄; ) LATIN CAPITAL LETTER E WITH MACRON AND GRAVE, COMBINING MACRON
+0045 0304 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; # (E◌̄◌̀; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E, COMBINING MACRON, COMBINING GRAVE ACCENT
+0045 0300 0304;00C8 0304;0045 0300 0304;00C8 0304;0045 0300 0304; # (E◌̀◌̄; È◌̄; E◌̀◌̄; È◌̄; E◌̀◌̄; ) LATIN CAPITAL LETTER E, COMBINING GRAVE ACCENT, COMBINING MACRON
+#
+# Part 1: Character by character test
+# All characters not explicitly occurring in c1 of Part 1 have identical NFC, D, KC, KD forms.
+#
+00A0;00A0;00A0;0020;0020; # ( ;  ;  ;  ;  ; ) NO-BREAK SPACE
+00A8;00A8;00A8;0020 0308;0020 0308; # (¨; ¨; ¨;  ◌̈;  ◌̈; ) DIAERESIS
+00AA;00AA;00AA;0061;0061; # (ª; ª; ª; a; a; ) FEMININE ORDINAL INDICATOR
+00AF;00AF;00AF;0020 0304;0020 0304; # (¯; ¯; ¯;  ◌̄;  ◌̄; ) MACRON
+00B2;00B2;00B2;0032;0032; # (²; ²; ²; 2; 2; ) SUPERSCRIPT TWO
+00B3;00B3;00B3;0033;0033; # (³; ³; ³; 3; 3; ) SUPERSCRIPT THREE
+00B4;00B4;00B4;0020 0301;0020 0301; # (´; ´; ´;  ◌́;  ◌́; ) ACUTE ACCENT
+00B5;00B5;00B5;03BC;03BC; # (µ; µ; µ; μ; μ; ) MICRO SIGN
+00B8;00B8;00B8;0020 0327;0020 0327; # (¸; ¸; ¸;  ◌̧;  ◌̧; ) CEDILLA
+00B9;00B9;00B9;0031;0031; # (¹; ¹; ¹; 1; 1; ) SUPERSCRIPT ONE
+00BA;00BA;00BA;006F;006F; # (º; º; º; o; o; ) MASCULINE ORDINAL INDICATOR
+00BC;00BC;00BC;0031 2044 0034;0031 2044 0034; # (¼; ¼; ¼; 1⁄4; 1⁄4; ) VULGAR FRACTION ONE QUARTER
+00BD;00BD;00BD;0031 2044 0032;0031 2044 0032; # (½; ½; ½; 1⁄2; 1⁄2; ) VULGAR FRACTION ONE HALF
+00BE;00BE;00BE;0033 2044 0034;0033 2044 0034; # (¾; ¾; ¾; 3⁄4; 3⁄4; ) VULGAR FRACTION THREE QUARTERS
+00C0;00C0;0041 0300;00C0;0041 0300; # (À; À; A◌̀; À; A◌̀; ) LATIN CAPITAL LETTER A WITH GRAVE
+00C1;00C1;0041 0301;00C1;0041 0301; # (Á; Á; A◌́; Á; A◌́; ) LATIN CAPITAL LETTER A WITH ACUTE
+00C2;00C2;0041 0302;00C2;0041 0302; # (Â; Â; A◌̂; Â; A◌̂; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3;00C3;0041 0303;00C3;0041 0303; # (Ã; Ã; A◌̃; Ã; A◌̃; ) LATIN CAPITAL LETTER A WITH TILDE
+00C4;00C4;0041 0308;00C4;0041 0308; # (Ä; Ä; A◌̈; Ä; A◌̈; ) LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5;00C5;0041 030A;00C5;0041 030A; # (Å; Å; A◌̊; Å; A◌̊; ) LATIN CAPITAL LETTER A WITH RING ABOVE
+00C7;00C7;0043 0327;00C7;0043 0327; # (Ç; Ç; C◌̧; Ç; C◌̧; ) LATIN CAPITAL LETTER C WITH CEDILLA
+00C8;00C8;0045 0300;00C8;0045 0300; # (È; È; E◌̀; È; E◌̀; ) LATIN CAPITAL LETTER E WITH GRAVE
+00C9;00C9;0045 0301;00C9;0045 0301; # (É; É; E◌́; É; E◌́; ) LATIN CAPITAL LETTER E WITH ACUTE
+00CA;00CA;0045 0302;00CA;0045 0302; # (Ê; Ê; E◌̂; Ê; E◌̂; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB;00CB;0045 0308;00CB;0045 0308; # (Ë; Ë; E◌̈; Ë; E◌̈; ) LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC;00CC;0049 0300;00CC;0049 0300; # (Ì; Ì; I◌̀; Ì; I◌̀; ) LATIN CAPITAL LETTER I WITH GRAVE
+00CD;00CD;0049 0301;00CD;0049 0301; # (Í; Í; I◌́; Í; I◌́; ) LATIN CAPITAL LETTER I WITH ACUTE
+00CE;00CE;0049 0302;00CE;0049 0302; # (Î; Î; I◌̂; Î; I◌̂; ) LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF;00CF;0049 0308;00CF;0049 0308; # (Ï; Ï; I◌̈; Ï; I◌̈; ) LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1;00D1;004E 0303;00D1;004E 0303; # (Ñ; Ñ; N◌̃; Ñ; N◌̃; ) LATIN CAPITAL LETTER N WITH TILDE
+00D2;00D2;004F 0300;00D2;004F 0300; # (Ò; Ò; O◌̀; Ò; O◌̀; ) LATIN CAPITAL LETTER O WITH GRAVE
+00D3;00D3;004F 0301;00D3;004F 0301; # (Ó; Ó; O◌́; Ó; O◌́; ) LATIN CAPITAL LETTER O WITH ACUTE
+00D4;00D4;004F 0302;00D4;004F 0302; # (Ô; Ô; O◌̂; Ô; O◌̂; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5;00D5;004F 0303;00D5;004F 0303; # (Õ; Õ; O◌̃; Õ; O◌̃; ) LATIN CAPITAL LETTER O WITH TILDE
+00D6;00D6;004F 0308;00D6;004F 0308; # (Ö; Ö; O◌̈; Ö; O◌̈; ) LATIN CAPITAL LETTER O WITH DIAERESIS
+00D9;00D9;0055 0300;00D9;0055 0300; # (Ù; Ù; U◌̀; Ù; U◌̀; ) LATIN CAPITAL LETTER U WITH GRAVE
+00DA;00DA;0055 0301;00DA;0055 0301; # (Ú; Ú; U◌́; Ú; U◌́; ) LATIN CAPITAL LETTER U WITH ACUTE
+00DB;00DB;0055 0302;00DB;0055 0302; # (Û; Û; U◌̂; Û; U◌̂; ) LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC;00DC;0055 0308;00DC;0055 0308; # (Ü; Ü; U◌̈; Ü; U◌̈; ) LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD;00DD;0059 0301;00DD;0059 0301; # (Ý; Ý; Y◌́; Ý; Y◌́; ) LATIN CAPITAL LETTER Y WITH ACUTE
+00E0;00E0;0061 0300;00E0;0061 0300; # (à; à; a◌̀; à; a◌̀; ) LATIN SMALL LETTER A WITH GRAVE
+00E1;00E1;0061 0301;00E1;0061 0301; # (á; á; a◌́; á; a◌́; ) LATIN SMALL LETTER A WITH ACUTE
+00E2;00E2;0061 0302;00E2;0061 0302; # (â; â; a◌̂; â; a◌̂; ) LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E3;00E3;0061 0303;00E3;0061 0303; # (ã; ã; a◌̃; ã; a◌̃; ) LATIN SMALL LETTER A WITH TILDE
+00E4;00E4;0061 0308;00E4;0061 0308; # (ä; ä; a◌̈; ä; a◌̈; ) LATIN SMALL LETTER A WITH DIAERESIS
+00E5;00E5;0061 030A;00E5;0061 030A; # (å; å; a◌̊; å; a◌̊; ) LATIN SMALL LETTER A WITH RING ABOVE
+00E7;00E7;0063 0327;00E7;0063 0327; # (ç; ç; c◌̧; ç; c◌̧; ) LATIN SMALL LETTER C WITH CEDILLA
+00E8;00E8;0065 0300;00E8;0065 0300; # (è; è; e◌̀; è; e◌̀; ) LATIN SMALL LETTER E WITH GRAVE
+00E9;00E9;0065 0301;00E9;0065 0301; # (é; é; e◌́; é; e◌́; ) LATIN SMALL LETTER E WITH ACUTE
+00EA;00EA;0065 0302;00EA;0065 0302; # (ê; ê; e◌̂; ê; e◌̂; ) LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB;00EB;0065 0308;00EB;0065 0308; # (ë; ë; e◌̈; ë; e◌̈; ) LATIN SMALL LETTER E WITH DIAERESIS
+00EC;00EC;0069 0300;00EC;0069 0300; # (ì; ì; i◌̀; ì; i◌̀; ) LATIN SMALL LETTER I WITH GRAVE
+00ED;00ED;0069 0301;00ED;0069 0301; # (í; í; i◌́; í; i◌́; ) LATIN SMALL LETTER I WITH ACUTE
+00EE;00EE;0069 0302;00EE;0069 0302; # (î; î; i◌̂; î; i◌̂; ) LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF;00EF;0069 0308;00EF;0069 0308; # (ï; ï; i◌̈; ï; i◌̈; ) LATIN SMALL LETTER I WITH DIAERESIS
+00F1;00F1;006E 0303;00F1;006E 0303; # (ñ; ñ; n◌̃; ñ; n◌̃; ) LATIN SMALL LETTER N WITH TILDE
+00F2;00F2;006F 0300;00F2;006F 0300; # (ò; ò; o◌̀; ò; o◌̀; ) LATIN SMALL LETTER O WITH GRAVE
+00F3;00F3;006F 0301;00F3;006F 0301; # (ó; ó; o◌́; ó; o◌́; ) LATIN SMALL LETTER O WITH ACUTE
+00F4;00F4;006F 0302;00F4;006F 0302; # (ô; ô; o◌̂; ô; o◌̂; ) LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F5;00F5;006F 0303;00F5;006F 0303; # (õ; õ; o◌̃; õ; o◌̃; ) LATIN SMALL LETTER O WITH TILDE
+00F6;00F6;006F 0308;00F6;006F 0308; # (ö; ö; o◌̈; ö; o◌̈; ) LATIN SMALL LETTER O WITH DIAERESIS
+00F9;00F9;0075 0300;00F9;0075 0300; # (ù; ù; u◌̀; ù; u◌̀; ) LATIN SMALL LETTER U WITH GRAVE
+00FA;00FA;0075 0301;00FA;0075 0301; # (ú; ú; u◌́; ú; u◌́; ) LATIN SMALL LETTER U WITH ACUTE
+00FB;00FB;0075 0302;00FB;0075 0302; # (û; û; u◌̂; û; u◌̂; ) LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC;00FC;0075 0308;00FC;0075 0308; # (ü; ü; u◌̈; ü; u◌̈; ) LATIN SMALL LETTER U WITH DIAERESIS
+00FD;00FD;0079 0301;00FD;0079 0301; # (ý; ý; y◌́; ý; y◌́; ) LATIN SMALL LETTER Y WITH ACUTE
+00FF;00FF;0079 0308;00FF;0079 0308; # (ÿ; ÿ; y◌̈; ÿ; y◌̈; ) LATIN SMALL LETTER Y WITH DIAERESIS
+0100;0100;0041 0304;0100;0041 0304; # (Ā; Ā; A◌̄; Ā; A◌̄; ) LATIN CAPITAL LETTER A WITH MACRON
+0101;0101;0061 0304;0101;0061 0304; # (ā; ā; a◌̄; ā; a◌̄; ) LATIN SMALL LETTER A WITH MACRON
+0102;0102;0041 0306;0102;0041 0306; # (Ă; Ă; A◌̆; Ă; A◌̆; ) LATIN CAPITAL LETTER A WITH BREVE
+0103;0103;0061 0306;0103;0061 0306; # (ă; ă; a◌̆; ă; a◌̆; ) LATIN SMALL LETTER A WITH BREVE
+0104;0104;0041 0328;0104;0041 0328; # (Ą; Ą; A◌̨; Ą; A◌̨; ) LATIN CAPITAL LETTER A WITH OGONEK
+0105;0105;0061 0328;0105;0061 0328; # (ą; ą; a◌̨; ą; a◌̨; ) LATIN SMALL LETTER A WITH OGONEK
+0106;0106;0043 0301;0106;0043 0301; # (Ć; Ć; C◌́; Ć; C◌́; ) LATIN CAPITAL LETTER C WITH ACUTE
+0107;0107;0063 0301;0107;0063 0301; # (ć; ć; c◌́; ć; c◌́; ) LATIN SMALL LETTER C WITH ACUTE
+0108;0108;0043 0302;0108;0043 0302; # (Ĉ; Ĉ; C◌̂; Ĉ; C◌̂; ) LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109;0109;0063 0302;0109;0063 0302; # (ĉ; ĉ; c◌̂; ĉ; c◌̂; ) LATIN SMALL LETTER C WITH CIRCUMFLEX
+010A;010A;0043 0307;010A;0043 0307; # (Ċ; Ċ; C◌̇; Ċ; C◌̇; ) LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B;010B;0063 0307;010B;0063 0307; # (ċ; ċ; c◌̇; ċ; c◌̇; ) LATIN SMALL LETTER C WITH DOT ABOVE
+010C;010C;0043 030C;010C;0043 030C; # (Č; Č; C◌̌; Č; C◌̌; ) LATIN CAPITAL LETTER C WITH CARON
+010D;010D;0063 030C;010D;0063 030C; # (č; č; c◌̌; č; c◌̌; ) LATIN SMALL LETTER C WITH CARON
+010E;010E;0044 030C;010E;0044 030C; # (Ď; Ď; D◌̌; Ď; D◌̌; ) LATIN CAPITAL LETTER D WITH CARON
+010F;010F;0064 030C;010F;0064 030C; # (ď; ď; d◌̌; ď; d◌̌; ) LATIN SMALL LETTER D WITH CARON
+0112;0112;0045 0304;0112;0045 0304; # (Ē; Ē; E◌̄; Ē; E◌̄; ) LATIN CAPITAL LETTER E WITH MACRON
+0113;0113;0065 0304;0113;0065 0304; # (ē; ē; e◌̄; ē; e◌̄; ) LATIN SMALL LETTER E WITH MACRON
+0114;0114;0045 0306;0114;0045 0306; # (Ĕ; Ĕ; E◌̆; Ĕ; E◌̆; ) LATIN CAPITAL LETTER E WITH BREVE
+0115;0115;0065 0306;0115;0065 0306; # (ĕ; ĕ; e◌̆; ĕ; e◌̆; ) LATIN SMALL LETTER E WITH BREVE
+0116;0116;0045 0307;0116;0045 0307; # (Ė; Ė; E◌̇; Ė; E◌̇; ) LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117;0117;0065 0307;0117;0065 0307; # (ė; ė; e◌̇; ė; e◌̇; ) LATIN SMALL LETTER E WITH DOT ABOVE
+0118;0118;0045 0328;0118;0045 0328; # (Ę; Ę; E◌̨; Ę; E◌̨; ) LATIN CAPITAL LETTER E WITH OGONEK
+0119;0119;0065 0328;0119;0065 0328; # (ę; ę; e◌̨; ę; e◌̨; ) LATIN SMALL LETTER E WITH OGONEK
+011A;011A;0045 030C;011A;0045 030C; # (Ě; Ě; E◌̌; Ě; E◌̌; ) LATIN CAPITAL LETTER E WITH CARON
+011B;011B;0065 030C;011B;0065 030C; # (ě; ě; e◌̌; ě; e◌̌; ) LATIN SMALL LETTER E WITH CARON
+011C;011C;0047 0302;011C;0047 0302; # (Ĝ; Ĝ; G◌̂; Ĝ; G◌̂; ) LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011D;011D;0067 0302;011D;0067 0302; # (ĝ; ĝ; g◌̂; ĝ; g◌̂; ) LATIN SMALL LETTER G WITH CIRCUMFLEX
+011E;011E;0047 0306;011E;0047 0306; # (Ğ; Ğ; G◌̆; Ğ; G◌̆; ) LATIN CAPITAL LETTER G WITH BREVE
+011F;011F;0067 0306;011F;0067 0306; # (ğ; ğ; g◌̆; ğ; g◌̆; ) LATIN SMALL LETTER G WITH BREVE
+0120;0120;0047 0307;0120;0047 0307; # (Ġ; Ġ; G◌̇; Ġ; G◌̇; ) LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121;0121;0067 0307;0121;0067 0307; # (ġ; ġ; g◌̇; ġ; g◌̇; ) LATIN SMALL LETTER G WITH DOT ABOVE
+0122;0122;0047 0327;0122;0047 0327; # (Ģ; Ģ; G◌̧; Ģ; G◌̧; ) LATIN CAPITAL LETTER G WITH CEDILLA
+0123;0123;0067 0327;0123;0067 0327; # (ģ; ģ; g◌̧; ģ; g◌̧; ) LATIN SMALL LETTER G WITH CEDILLA
+0124;0124;0048 0302;0124;0048 0302; # (Ĥ; Ĥ; H◌̂; Ĥ; H◌̂; ) LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125;0125;0068 0302;0125;0068 0302; # (ĥ; ĥ; h◌̂; ĥ; h◌̂; ) LATIN SMALL LETTER H WITH CIRCUMFLEX
+0128;0128;0049 0303;0128;0049 0303; # (Ĩ; Ĩ; I◌̃; Ĩ; I◌̃; ) LATIN CAPITAL LETTER I WITH TILDE
+0129;0129;0069 0303;0129;0069 0303; # (ĩ; ĩ; i◌̃; ĩ; i◌̃; ) LATIN SMALL LETTER I WITH TILDE
+012A;012A;0049 0304;012A;0049 0304; # (Ī; Ī; I◌̄; Ī; I◌̄; ) LATIN CAPITAL LETTER I WITH MACRON
+012B;012B;0069 0304;012B;0069 0304; # (ī; ī; i◌̄; ī; i◌̄; ) LATIN SMALL LETTER I WITH MACRON
+012C;012C;0049 0306;012C;0049 0306; # (Ĭ; Ĭ; I◌̆; Ĭ; I◌̆; ) LATIN CAPITAL LETTER I WITH BREVE
+012D;012D;0069 0306;012D;0069 0306; # (ĭ; ĭ; i◌̆; ĭ; i◌̆; ) LATIN SMALL LETTER I WITH BREVE
+012E;012E;0049 0328;012E;0049 0328; # (Į; Į; I◌̨; Į; I◌̨; ) LATIN CAPITAL LETTER I WITH OGONEK
+012F;012F;0069 0328;012F;0069 0328; # (į; į; i◌̨; į; i◌̨; ) LATIN SMALL LETTER I WITH OGONEK
+0130;0130;0049 0307;0130;0049 0307; # (İ; İ; I◌̇; İ; I◌̇; ) LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132;0132;0132;0049 004A;0049 004A; # (IJ; IJ; IJ; IJ; IJ; ) LATIN CAPITAL LIGATURE IJ
+0133;0133;0133;0069 006A;0069 006A; # (ij; ij; ij; ij; ij; ) LATIN SMALL LIGATURE IJ
+0134;0134;004A 0302;0134;004A 0302; # (Ĵ; Ĵ; J◌̂; Ĵ; J◌̂; ) LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135;0135;006A 0302;0135;006A 0302; # (ĵ; ĵ; j◌̂; ĵ; j◌̂; ) LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136;0136;004B 0327;0136;004B 0327; # (Ķ; Ķ; K◌̧; Ķ; K◌̧; ) LATIN CAPITAL LETTER K WITH CEDILLA
+0137;0137;006B 0327;0137;006B 0327; # (ķ; ķ; k◌̧; ķ; k◌̧; ) LATIN SMALL LETTER K WITH CEDILLA
+0139;0139;004C 0301;0139;004C 0301; # (Ĺ; Ĺ; L◌́; Ĺ; L◌́; ) LATIN CAPITAL LETTER L WITH ACUTE
+013A;013A;006C 0301;013A;006C 0301; # (ĺ; ĺ; l◌́; ĺ; l◌́; ) LATIN SMALL LETTER L WITH ACUTE
+013B;013B;004C 0327;013B;004C 0327; # (Ļ; Ļ; L◌̧; Ļ; L◌̧; ) LATIN CAPITAL LETTER L WITH CEDILLA
+013C;013C;006C 0327;013C;006C 0327; # (ļ; ļ; l◌̧; ļ; l◌̧; ) LATIN SMALL LETTER L WITH CEDILLA
+013D;013D;004C 030C;013D;004C 030C; # (Ľ; Ľ; L◌̌; Ľ; L◌̌; ) LATIN CAPITAL LETTER L WITH CARON
+013E;013E;006C 030C;013E;006C 030C; # (ľ; ľ; l◌̌; ľ; l◌̌; ) LATIN SMALL LETTER L WITH CARON
+013F;013F;013F;004C 00B7;004C 00B7; # (Ŀ; Ŀ; Ŀ; L·; L·; ) LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140;0140;0140;006C 00B7;006C 00B7; # (ŀ; ŀ; ŀ; l·; l·; ) LATIN SMALL LETTER L WITH MIDDLE DOT
+0143;0143;004E 0301;0143;004E 0301; # (Ń; Ń; N◌́; Ń; N◌́; ) LATIN CAPITAL LETTER N WITH ACUTE
+0144;0144;006E 0301;0144;006E 0301; # (ń; ń; n◌́; ń; n◌́; ) LATIN SMALL LETTER N WITH ACUTE
+0145;0145;004E 0327;0145;004E 0327; # (Ņ; Ņ; N◌̧; Ņ; N◌̧; ) LATIN CAPITAL LETTER N WITH CEDILLA
+0146;0146;006E 0327;0146;006E 0327; # (ņ; ņ; n◌̧; ņ; n◌̧; ) LATIN SMALL LETTER N WITH CEDILLA
+0147;0147;004E 030C;0147;004E 030C; # (Ň; Ň; N◌̌; Ň; N◌̌; ) LATIN CAPITAL LETTER N WITH CARON
+0148;0148;006E 030C;0148;006E 030C; # (ň; ň; n◌̌; ň; n◌̌; ) LATIN SMALL LETTER N WITH CARON
+0149;0149;0149;02BC 006E;02BC 006E; # (ʼn; ʼn; ʼn; ʼn; ʼn; ) LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014C;014C;004F 0304;014C;004F 0304; # (Ō; Ō; O◌̄; Ō; O◌̄; ) LATIN CAPITAL LETTER O WITH MACRON
+014D;014D;006F 0304;014D;006F 0304; # (ō; ō; o◌̄; ō; o◌̄; ) LATIN SMALL LETTER O WITH MACRON
+014E;014E;004F 0306;014E;004F 0306; # (Ŏ; Ŏ; O◌̆; Ŏ; O◌̆; ) LATIN CAPITAL LETTER O WITH BREVE
+014F;014F;006F 0306;014F;006F 0306; # (ŏ; ŏ; o◌̆; ŏ; o◌̆; ) LATIN SMALL LETTER O WITH BREVE
+0150;0150;004F 030B;0150;004F 030B; # (Ő; Ő; O◌̋; Ő; O◌̋; ) LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151;0151;006F 030B;0151;006F 030B; # (ő; ő; o◌̋; ő; o◌̋; ) LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0154;0154;0052 0301;0154;0052 0301; # (Ŕ; Ŕ; R◌́; Ŕ; R◌́; ) LATIN CAPITAL LETTER R WITH ACUTE
+0155;0155;0072 0301;0155;0072 0301; # (ŕ; ŕ; r◌́; ŕ; r◌́; ) LATIN SMALL LETTER R WITH ACUTE
+0156;0156;0052 0327;0156;0052 0327; # (Ŗ; Ŗ; R◌̧; Ŗ; R◌̧; ) LATIN CAPITAL LETTER R WITH CEDILLA
+0157;0157;0072 0327;0157;0072 0327; # (ŗ; ŗ; r◌̧; ŗ; r◌̧; ) LATIN SMALL LETTER R WITH CEDILLA
+0158;0158;0052 030C;0158;0052 030C; # (Ř; Ř; R◌̌; Ř; R◌̌; ) LATIN CAPITAL LETTER R WITH CARON
+0159;0159;0072 030C;0159;0072 030C; # (ř; ř; r◌̌; ř; r◌̌; ) LATIN SMALL LETTER R WITH CARON
+015A;015A;0053 0301;015A;0053 0301; # (Ś; Ś; S◌́; Ś; S◌́; ) LATIN CAPITAL LETTER S WITH ACUTE
+015B;015B;0073 0301;015B;0073 0301; # (ś; ś; s◌́; ś; s◌́; ) LATIN SMALL LETTER S WITH ACUTE
+015C;015C;0053 0302;015C;0053 0302; # (Ŝ; Ŝ; S◌̂; Ŝ; S◌̂; ) LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015D;015D;0073 0302;015D;0073 0302; # (ŝ; ŝ; s◌̂; ŝ; s◌̂; ) LATIN SMALL LETTER S WITH CIRCUMFLEX
+015E;015E;0053 0327;015E;0053 0327; # (Ş; Ş; S◌̧; Ş; S◌̧; ) LATIN CAPITAL LETTER S WITH CEDILLA
+015F;015F;0073 0327;015F;0073 0327; # (ş; ş; s◌̧; ş; s◌̧; ) LATIN SMALL LETTER S WITH CEDILLA
+0160;0160;0053 030C;0160;0053 030C; # (Š; Š; S◌̌; Š; S◌̌; ) LATIN CAPITAL LETTER S WITH CARON
+0161;0161;0073 030C;0161;0073 030C; # (š; š; s◌̌; š; s◌̌; ) LATIN SMALL LETTER S WITH CARON
+0162;0162;0054 0327;0162;0054 0327; # (Ţ; Ţ; T◌̧; Ţ; T◌̧; ) LATIN CAPITAL LETTER T WITH CEDILLA
+0163;0163;0074 0327;0163;0074 0327; # (ţ; ţ; t◌̧; ţ; t◌̧; ) LATIN SMALL LETTER T WITH CEDILLA
+0164;0164;0054 030C;0164;0054 030C; # (Ť; Ť; T◌̌; Ť; T◌̌; ) LATIN CAPITAL LETTER T WITH CARON
+0165;0165;0074 030C;0165;0074 030C; # (ť; ť; t◌̌; ť; t◌̌; ) LATIN SMALL LETTER T WITH CARON
+0168;0168;0055 0303;0168;0055 0303; # (Ũ; Ũ; U◌̃; Ũ; U◌̃; ) LATIN CAPITAL LETTER U WITH TILDE
+0169;0169;0075 0303;0169;0075 0303; # (ũ; ũ; u◌̃; ũ; u◌̃; ) LATIN SMALL LETTER U WITH TILDE
+016A;016A;0055 0304;016A;0055 0304; # (Ū; Ū; U◌̄; Ū; U◌̄; ) LATIN CAPITAL LETTER U WITH MACRON
+016B;016B;0075 0304;016B;0075 0304; # (ū; ū; u◌̄; ū; u◌̄; ) LATIN SMALL LETTER U WITH MACRON
+016C;016C;0055 0306;016C;0055 0306; # (Ŭ; Ŭ; U◌̆; Ŭ; U◌̆; ) LATIN CAPITAL LETTER U WITH BREVE
+016D;016D;0075 0306;016D;0075 0306; # (ŭ; ŭ; u◌̆; ŭ; u◌̆; ) LATIN SMALL LETTER U WITH BREVE
+016E;016E;0055 030A;016E;0055 030A; # (Ů; Ů; U◌̊; Ů; U◌̊; ) LATIN CAPITAL LETTER U WITH RING ABOVE
+016F;016F;0075 030A;016F;0075 030A; # (ů; ů; u◌̊; ů; u◌̊; ) LATIN SMALL LETTER U WITH RING ABOVE
+0170;0170;0055 030B;0170;0055 030B; # (Ű; Ű; U◌̋; Ű; U◌̋; ) LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171;0171;0075 030B;0171;0075 030B; # (ű; ű; u◌̋; ű; u◌̋; ) LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172;0172;0055 0328;0172;0055 0328; # (Ų; Ų; U◌̨; Ų; U◌̨; ) LATIN CAPITAL LETTER U WITH OGONEK
+0173;0173;0075 0328;0173;0075 0328; # (ų; ų; u◌̨; ų; u◌̨; ) LATIN SMALL LETTER U WITH OGONEK
+0174;0174;0057 0302;0174;0057 0302; # (Ŵ; Ŵ; W◌̂; Ŵ; W◌̂; ) LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175;0175;0077 0302;0175;0077 0302; # (ŵ; ŵ; w◌̂; ŵ; w◌̂; ) LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176;0176;0059 0302;0176;0059 0302; # (Ŷ; Ŷ; Y◌̂; Ŷ; Y◌̂; ) LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177;0177;0079 0302;0177;0079 0302; # (ŷ; ŷ; y◌̂; ŷ; y◌̂; ) LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178;0178;0059 0308;0178;0059 0308; # (Ÿ; Ÿ; Y◌̈; Ÿ; Y◌̈; ) LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179;0179;005A 0301;0179;005A 0301; # (Ź; Ź; Z◌́; Ź; Z◌́; ) LATIN CAPITAL LETTER Z WITH ACUTE
+017A;017A;007A 0301;017A;007A 0301; # (ź; ź; z◌́; ź; z◌́; ) LATIN SMALL LETTER Z WITH ACUTE
+017B;017B;005A 0307;017B;005A 0307; # (Ż; Ż; Z◌̇; Ż; Z◌̇; ) LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017C;017C;007A 0307;017C;007A 0307; # (ż; ż; z◌̇; ż; z◌̇; ) LATIN SMALL LETTER Z WITH DOT ABOVE
+017D;017D;005A 030C;017D;005A 030C; # (Ž; Ž; Z◌̌; Ž; Z◌̌; ) LATIN CAPITAL LETTER Z WITH CARON
+017E;017E;007A 030C;017E;007A 030C; # (ž; ž; z◌̌; ž; z◌̌; ) LATIN SMALL LETTER Z WITH CARON
+017F;017F;017F;0073;0073; # (ſ; ſ; ſ; s; s; ) LATIN SMALL LETTER LONG S
+01A0;01A0;004F 031B;01A0;004F 031B; # (Ơ; Ơ; O◌̛; Ơ; O◌̛; ) LATIN CAPITAL LETTER O WITH HORN
+01A1;01A1;006F 031B;01A1;006F 031B; # (ơ; ơ; o◌̛; ơ; o◌̛; ) LATIN SMALL LETTER O WITH HORN
+01AF;01AF;0055 031B;01AF;0055 031B; # (Ư; Ư; U◌̛; Ư; U◌̛; ) LATIN CAPITAL LETTER U WITH HORN
+01B0;01B0;0075 031B;01B0;0075 031B; # (ư; ư; u◌̛; ư; u◌̛; ) LATIN SMALL LETTER U WITH HORN
+01C4;01C4;01C4;0044 017D;0044 005A 030C; # (DŽ; DŽ; DŽ; DŽ; DZ◌̌; ) LATIN CAPITAL LETTER DZ WITH CARON
+01C5;01C5;01C5;0044 017E;0044 007A 030C; # (Dž; Dž; Dž; Dž; Dz◌̌; ) LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C6;01C6;01C6;0064 017E;0064 007A 030C; # (dž; dž; dž; dž; dz◌̌; ) LATIN SMALL LETTER DZ WITH CARON
+01C7;01C7;01C7;004C 004A;004C 004A; # (LJ; LJ; LJ; LJ; LJ; ) LATIN CAPITAL LETTER LJ
+01C8;01C8;01C8;004C 006A;004C 006A; # (Lj; Lj; Lj; Lj; Lj; ) LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01C9;01C9;01C9;006C 006A;006C 006A; # (lj; lj; lj; lj; lj; ) LATIN SMALL LETTER LJ
+01CA;01CA;01CA;004E 004A;004E 004A; # (NJ; NJ; NJ; NJ; NJ; ) LATIN CAPITAL LETTER NJ
+01CB;01CB;01CB;004E 006A;004E 006A; # (Nj; Nj; Nj; Nj; Nj; ) LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CC;01CC;01CC;006E 006A;006E 006A; # (nj; nj; nj; nj; nj; ) LATIN SMALL LETTER NJ
+01CD;01CD;0041 030C;01CD;0041 030C; # (Ǎ; Ǎ; A◌̌; Ǎ; A◌̌; ) LATIN CAPITAL LETTER A WITH CARON
+01CE;01CE;0061 030C;01CE;0061 030C; # (ǎ; ǎ; a◌̌; ǎ; a◌̌; ) LATIN SMALL LETTER A WITH CARON
+01CF;01CF;0049 030C;01CF;0049 030C; # (Ǐ; Ǐ; I◌̌; Ǐ; I◌̌; ) LATIN CAPITAL LETTER I WITH CARON
+01D0;01D0;0069 030C;01D0;0069 030C; # (ǐ; ǐ; i◌̌; ǐ; i◌̌; ) LATIN SMALL LETTER I WITH CARON
+01D1;01D1;004F 030C;01D1;004F 030C; # (Ǒ; Ǒ; O◌̌; Ǒ; O◌̌; ) LATIN CAPITAL LETTER O WITH CARON
+01D2;01D2;006F 030C;01D2;006F 030C; # (ǒ; ǒ; o◌̌; ǒ; o◌̌; ) LATIN SMALL LETTER O WITH CARON
+01D3;01D3;0055 030C;01D3;0055 030C; # (Ǔ; Ǔ; U◌̌; Ǔ; U◌̌; ) LATIN CAPITAL LETTER U WITH CARON
+01D4;01D4;0075 030C;01D4;0075 030C; # (ǔ; ǔ; u◌̌; ǔ; u◌̌; ) LATIN SMALL LETTER U WITH CARON
+01D5;01D5;0055 0308 0304;01D5;0055 0308 0304; # (Ǖ; Ǖ; U◌̈◌̄; Ǖ; U◌̈◌̄; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D6;01D6;0075 0308 0304;01D6;0075 0308 0304; # (ǖ; ǖ; u◌̈◌̄; ǖ; u◌̈◌̄; ) LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D7;01D7;0055 0308 0301;01D7;0055 0308 0301; # (Ǘ; Ǘ; U◌̈◌́; Ǘ; U◌̈◌́; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D8;01D8;0075 0308 0301;01D8;0075 0308 0301; # (ǘ; ǘ; u◌̈◌́; ǘ; u◌̈◌́; ) LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D9;01D9;0055 0308 030C;01D9;0055 0308 030C; # (Ǚ; Ǚ; U◌̈◌̌; Ǚ; U◌̈◌̌; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DA;01DA;0075 0308 030C;01DA;0075 0308 030C; # (ǚ; ǚ; u◌̈◌̌; ǚ; u◌̈◌̌; ) LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DB;01DB;0055 0308 0300;01DB;0055 0308 0300; # (Ǜ; Ǜ; U◌̈◌̀; Ǜ; U◌̈◌̀; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DC;01DC;0075 0308 0300;01DC;0075 0308 0300; # (ǜ; ǜ; u◌̈◌̀; ǜ; u◌̈◌̀; ) LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE;01DE;0041 0308 0304;01DE;0041 0308 0304; # (Ǟ; Ǟ; A◌̈◌̄; Ǟ; A◌̈◌̄; ) LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01DF;01DF;0061 0308 0304;01DF;0061 0308 0304; # (ǟ; ǟ; a◌̈◌̄; ǟ; a◌̈◌̄; ) LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E0;01E0;0041 0307 0304;01E0;0041 0307 0304; # (Ǡ; Ǡ; A◌̇◌̄; Ǡ; A◌̇◌̄; ) LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E1;01E1;0061 0307 0304;01E1;0061 0307 0304; # (ǡ; ǡ; a◌̇◌̄; ǡ; a◌̇◌̄; ) LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E2;01E2;00C6 0304;01E2;00C6 0304; # (Ǣ; Ǣ; Æ◌̄; Ǣ; Æ◌̄; ) LATIN CAPITAL LETTER AE WITH MACRON
+01E3;01E3;00E6 0304;01E3;00E6 0304; # (ǣ; ǣ; æ◌̄; ǣ; æ◌̄; ) LATIN SMALL LETTER AE WITH MACRON
+01E6;01E6;0047 030C;01E6;0047 030C; # (Ǧ; Ǧ; G◌̌; Ǧ; G◌̌; ) LATIN CAPITAL LETTER G WITH CARON
+01E7;01E7;0067 030C;01E7;0067 030C; # (ǧ; ǧ; g◌̌; ǧ; g◌̌; ) LATIN SMALL LETTER G WITH CARON
+01E8;01E8;004B 030C;01E8;004B 030C; # (Ǩ; Ǩ; K◌̌; Ǩ; K◌̌; ) LATIN CAPITAL LETTER K WITH CARON
+01E9;01E9;006B 030C;01E9;006B 030C; # (ǩ; ǩ; k◌̌; ǩ; k◌̌; ) LATIN SMALL LETTER K WITH CARON
+01EA;01EA;004F 0328;01EA;004F 0328; # (Ǫ; Ǫ; O◌̨; Ǫ; O◌̨; ) LATIN CAPITAL LETTER O WITH OGONEK
+01EB;01EB;006F 0328;01EB;006F 0328; # (ǫ; ǫ; o◌̨; ǫ; o◌̨; ) LATIN SMALL LETTER O WITH OGONEK
+01EC;01EC;004F 0328 0304;01EC;004F 0328 0304; # (Ǭ; Ǭ; O◌̨◌̄; Ǭ; O◌̨◌̄; ) LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ED;01ED;006F 0328 0304;01ED;006F 0328 0304; # (ǭ; ǭ; o◌̨◌̄; ǭ; o◌̨◌̄; ) LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EE;01EE;01B7 030C;01EE;01B7 030C; # (Ǯ; Ǯ; Ʒ◌̌; Ǯ; Ʒ◌̌; ) LATIN CAPITAL LETTER EZH WITH CARON
+01EF;01EF;0292 030C;01EF;0292 030C; # (ǯ; ǯ; ʒ◌̌; ǯ; ʒ◌̌; ) LATIN SMALL LETTER EZH WITH CARON
+01F0;01F0;006A 030C;01F0;006A 030C; # (ǰ; ǰ; j◌̌; ǰ; j◌̌; ) LATIN SMALL LETTER J WITH CARON
+01F1;01F1;01F1;0044 005A;0044 005A; # (DZ; DZ; DZ; DZ; DZ; ) LATIN CAPITAL LETTER DZ
+01F2;01F2;01F2;0044 007A;0044 007A; # (Dz; Dz; Dz; Dz; Dz; ) LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F3;01F3;01F3;0064 007A;0064 007A; # (dz; dz; dz; dz; dz; ) LATIN SMALL LETTER DZ
+01F4;01F4;0047 0301;01F4;0047 0301; # (Ǵ; Ǵ; G◌́; Ǵ; G◌́; ) LATIN CAPITAL LETTER G WITH ACUTE
+01F5;01F5;0067 0301;01F5;0067 0301; # (ǵ; ǵ; g◌́; ǵ; g◌́; ) LATIN SMALL LETTER G WITH ACUTE
+01F8;01F8;004E 0300;01F8;004E 0300; # (Ǹ; Ǹ; N◌̀; Ǹ; N◌̀; ) LATIN CAPITAL LETTER N WITH GRAVE
+01F9;01F9;006E 0300;01F9;006E 0300; # (ǹ; ǹ; n◌̀; ǹ; n◌̀; ) LATIN SMALL LETTER N WITH GRAVE
+01FA;01FA;0041 030A 0301;01FA;0041 030A 0301; # (Ǻ; Ǻ; A◌̊◌́; Ǻ; A◌̊◌́; ) LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FB;01FB;0061 030A 0301;01FB;0061 030A 0301; # (ǻ; ǻ; a◌̊◌́; ǻ; a◌̊◌́; ) LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FC;01FC;00C6 0301;01FC;00C6 0301; # (Ǽ; Ǽ; Æ◌́; Ǽ; Æ◌́; ) LATIN CAPITAL LETTER AE WITH ACUTE
+01FD;01FD;00E6 0301;01FD;00E6 0301; # (ǽ; ǽ; æ◌́; ǽ; æ◌́; ) LATIN SMALL LETTER AE WITH ACUTE
+01FE;01FE;00D8 0301;01FE;00D8 0301; # (Ǿ; Ǿ; Ø◌́; Ǿ; Ø◌́; ) LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01FF;01FF;00F8 0301;01FF;00F8 0301; # (ǿ; ǿ; ø◌́; ǿ; ø◌́; ) LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0200;0200;0041 030F;0200;0041 030F; # (Ȁ; Ȁ; A◌̏; Ȁ; A◌̏; ) LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0201;0201;0061 030F;0201;0061 030F; # (ȁ; ȁ; a◌̏; ȁ; a◌̏; ) LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0202;0202;0041 0311;0202;0041 0311; # (Ȃ; Ȃ; A◌̑; Ȃ; A◌̑; ) LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0203;0203;0061 0311;0203;0061 0311; # (ȃ; ȃ; a◌̑; ȃ; a◌̑; ) LATIN SMALL LETTER A WITH INVERTED BREVE
+0204;0204;0045 030F;0204;0045 030F; # (Ȅ; Ȅ; E◌̏; Ȅ; E◌̏; ) LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0205;0205;0065 030F;0205;0065 030F; # (ȅ; ȅ; e◌̏; ȅ; e◌̏; ) LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0206;0206;0045 0311;0206;0045 0311; # (Ȇ; Ȇ; E◌̑; Ȇ; E◌̑; ) LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0207;0207;0065 0311;0207;0065 0311; # (ȇ; ȇ; e◌̑; ȇ; e◌̑; ) LATIN SMALL LETTER E WITH INVERTED BREVE
+0208;0208;0049 030F;0208;0049 030F; # (Ȉ; Ȉ; I◌̏; Ȉ; I◌̏; ) LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+0209;0209;0069 030F;0209;0069 030F; # (ȉ; ȉ; i◌̏; ȉ; i◌̏; ) LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020A;020A;0049 0311;020A;0049 0311; # (Ȋ; Ȋ; I◌̑; Ȋ; I◌̑; ) LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020B;020B;0069 0311;020B;0069 0311; # (ȋ; ȋ; i◌̑; ȋ; i◌̑; ) LATIN SMALL LETTER I WITH INVERTED BREVE
+020C;020C;004F 030F;020C;004F 030F; # (Ȍ; Ȍ; O◌̏; Ȍ; O◌̏; ) LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020D;020D;006F 030F;020D;006F 030F; # (ȍ; ȍ; o◌̏; ȍ; o◌̏; ) LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020E;020E;004F 0311;020E;004F 0311; # (Ȏ; Ȏ; O◌̑; Ȏ; O◌̑; ) LATIN CAPITAL LETTER O WITH INVERTED BREVE
+020F;020F;006F 0311;020F;006F 0311; # (ȏ; ȏ; o◌̑; ȏ; o◌̑; ) LATIN SMALL LETTER O WITH INVERTED BREVE
+0210;0210;0052 030F;0210;0052 030F; # (Ȑ; Ȑ; R◌̏; Ȑ; R◌̏; ) LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0211;0211;0072 030F;0211;0072 030F; # (ȑ; ȑ; r◌̏; ȑ; r◌̏; ) LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0212;0212;0052 0311;0212;0052 0311; # (Ȓ; Ȓ; R◌̑; Ȓ; R◌̑; ) LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0213;0213;0072 0311;0213;0072 0311; # (ȓ; ȓ; r◌̑; ȓ; r◌̑; ) LATIN SMALL LETTER R WITH INVERTED BREVE
+0214;0214;0055 030F;0214;0055 030F; # (Ȕ; Ȕ; U◌̏; Ȕ; U◌̏; ) LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0215;0215;0075 030F;0215;0075 030F; # (ȕ; ȕ; u◌̏; ȕ; u◌̏; ) LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0216;0216;0055 0311;0216;0055 0311; # (Ȗ; Ȗ; U◌̑; Ȗ; U◌̑; ) LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0217;0217;0075 0311;0217;0075 0311; # (ȗ; ȗ; u◌̑; ȗ; u◌̑; ) LATIN SMALL LETTER U WITH INVERTED BREVE
+0218;0218;0053 0326;0218;0053 0326; # (Ș; Ș; S◌̦; Ș; S◌̦; ) LATIN CAPITAL LETTER S WITH COMMA BELOW
+0219;0219;0073 0326;0219;0073 0326; # (ș; ș; s◌̦; ș; s◌̦; ) LATIN SMALL LETTER S WITH COMMA BELOW
+021A;021A;0054 0326;021A;0054 0326; # (Ț; Ț; T◌̦; Ț; T◌̦; ) LATIN CAPITAL LETTER T WITH COMMA BELOW
+021B;021B;0074 0326;021B;0074 0326; # (ț; ț; t◌̦; ț; t◌̦; ) LATIN SMALL LETTER T WITH COMMA BELOW
+021E;021E;0048 030C;021E;0048 030C; # (Ȟ; Ȟ; H◌̌; Ȟ; H◌̌; ) LATIN CAPITAL LETTER H WITH CARON
+021F;021F;0068 030C;021F;0068 030C; # (ȟ; ȟ; h◌̌; ȟ; h◌̌; ) LATIN SMALL LETTER H WITH CARON
+0226;0226;0041 0307;0226;0041 0307; # (Ȧ; Ȧ; A◌̇; Ȧ; A◌̇; ) LATIN CAPITAL LETTER A WITH DOT ABOVE
+0227;0227;0061 0307;0227;0061 0307; # (ȧ; ȧ; a◌̇; ȧ; a◌̇; ) LATIN SMALL LETTER A WITH DOT ABOVE
+0228;0228;0045 0327;0228;0045 0327; # (Ȩ; Ȩ; E◌̧; Ȩ; E◌̧; ) LATIN CAPITAL LETTER E WITH CEDILLA
+0229;0229;0065 0327;0229;0065 0327; # (ȩ; ȩ; e◌̧; ȩ; e◌̧; ) LATIN SMALL LETTER E WITH CEDILLA
+022A;022A;004F 0308 0304;022A;004F 0308 0304; # (Ȫ; Ȫ; O◌̈◌̄; Ȫ; O◌̈◌̄; ) LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022B;022B;006F 0308 0304;022B;006F 0308 0304; # (ȫ; ȫ; o◌̈◌̄; ȫ; o◌̈◌̄; ) LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022C;022C;004F 0303 0304;022C;004F 0303 0304; # (Ȭ; Ȭ; O◌̃◌̄; Ȭ; O◌̃◌̄; ) LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022D;022D;006F 0303 0304;022D;006F 0303 0304; # (ȭ; ȭ; o◌̃◌̄; ȭ; o◌̃◌̄; ) LATIN SMALL LETTER O WITH TILDE AND MACRON
+022E;022E;004F 0307;022E;004F 0307; # (Ȯ; Ȯ; O◌̇; Ȯ; O◌̇; ) LATIN CAPITAL LETTER O WITH DOT ABOVE
+022F;022F;006F 0307;022F;006F 0307; # (ȯ; ȯ; o◌̇; ȯ; o◌̇; ) LATIN SMALL LETTER O WITH DOT ABOVE
+0230;0230;004F 0307 0304;0230;004F 0307 0304; # (Ȱ; Ȱ; O◌̇◌̄; Ȱ; O◌̇◌̄; ) LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0231;0231;006F 0307 0304;0231;006F 0307 0304; # (ȱ; ȱ; o◌̇◌̄; ȱ; o◌̇◌̄; ) LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0232;0232;0059 0304;0232;0059 0304; # (Ȳ; Ȳ; Y◌̄; Ȳ; Y◌̄; ) LATIN CAPITAL LETTER Y WITH MACRON
+0233;0233;0079 0304;0233;0079 0304; # (ȳ; ȳ; y◌̄; ȳ; y◌̄; ) LATIN SMALL LETTER Y WITH MACRON
+02B0;02B0;02B0;0068;0068; # (ʰ; ʰ; ʰ; h; h; ) MODIFIER LETTER SMALL H
+02B1;02B1;02B1;0266;0266; # (ʱ; ʱ; ʱ; ɦ; ɦ; ) MODIFIER LETTER SMALL H WITH HOOK
+02B2;02B2;02B2;006A;006A; # (ʲ; ʲ; ʲ; j; j; ) MODIFIER LETTER SMALL J
+02B3;02B3;02B3;0072;0072; # (ʳ; ʳ; ʳ; r; r; ) MODIFIER LETTER SMALL R
+02B4;02B4;02B4;0279;0279; # (ʴ; ʴ; ʴ; ɹ; ɹ; ) MODIFIER LETTER SMALL TURNED R
+02B5;02B5;02B5;027B;027B; # (ʵ; ʵ; ʵ; ɻ; ɻ; ) MODIFIER LETTER SMALL TURNED R WITH HOOK
+02B6;02B6;02B6;0281;0281; # (ʶ; ʶ; ʶ; ʁ; ʁ; ) MODIFIER LETTER SMALL CAPITAL INVERTED R
+02B7;02B7;02B7;0077;0077; # (ʷ; ʷ; ʷ; w; w; ) MODIFIER LETTER SMALL W
+02B8;02B8;02B8;0079;0079; # (ʸ; ʸ; ʸ; y; y; ) MODIFIER LETTER SMALL Y
+02D8;02D8;02D8;0020 0306;0020 0306; # (˘; ˘; ˘;  ◌̆;  ◌̆; ) BREVE
+02D9;02D9;02D9;0020 0307;0020 0307; # (˙; ˙; ˙;  ◌̇;  ◌̇; ) DOT ABOVE
+02DA;02DA;02DA;0020 030A;0020 030A; # (˚; ˚; ˚;  ◌̊;  ◌̊; ) RING ABOVE
+02DB;02DB;02DB;0020 0328;0020 0328; # (˛; ˛; ˛;  ◌̨;  ◌̨; ) OGONEK
+02DC;02DC;02DC;0020 0303;0020 0303; # (˜; ˜; ˜;  ◌̃;  ◌̃; ) SMALL TILDE
+02DD;02DD;02DD;0020 030B;0020 030B; # (˝; ˝; ˝;  ◌̋;  ◌̋; ) DOUBLE ACUTE ACCENT
+02E0;02E0;02E0;0263;0263; # (ˠ; ˠ; ˠ; ɣ; ɣ; ) MODIFIER LETTER SMALL GAMMA
+02E1;02E1;02E1;006C;006C; # (ˡ; ˡ; ˡ; l; l; ) MODIFIER LETTER SMALL L
+02E2;02E2;02E2;0073;0073; # (ˢ; ˢ; ˢ; s; s; ) MODIFIER LETTER SMALL S
+02E3;02E3;02E3;0078;0078; # (ˣ; ˣ; ˣ; x; x; ) MODIFIER LETTER SMALL X
+02E4;02E4;02E4;0295;0295; # (ˤ; ˤ; ˤ; ʕ; ʕ; ) MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0340;0300;0300;0300;0300; # (◌̀; ◌̀; ◌̀; ◌̀; ◌̀; ) COMBINING GRAVE TONE MARK
+0341;0301;0301;0301;0301; # (◌́; ◌́; ◌́; ◌́; ◌́; ) COMBINING ACUTE TONE MARK
+0343;0313;0313;0313;0313; # (◌̓; ◌̓; ◌̓; ◌̓; ◌̓; ) COMBINING GREEK KORONIS
+0344;0308 0301;0308 0301;0308 0301;0308 0301; # (◌̈́; ◌̈◌́; ◌̈◌́; ◌̈◌́; ◌̈◌́; ) COMBINING GREEK DIALYTIKA TONOS
+0374;02B9;02B9;02B9;02B9; # (ʹ; ʹ; ʹ; ʹ; ʹ; ) GREEK NUMERAL SIGN
+037A;037A;037A;0020 0345;0020 0345; # (ͺ; ͺ; ͺ;  ◌ͅ;  ◌ͅ; ) GREEK YPOGEGRAMMENI
+037E;003B;003B;003B;003B; # (;; ;; ;; ;; ;; ) GREEK QUESTION MARK
+0384;0384;0384;0020 0301;0020 0301; # (΄; ΄; ΄;  ◌́;  ◌́; ) GREEK TONOS
+0385;0385;00A8 0301;0020 0308 0301;0020 0308 0301; # (΅; ΅; ¨◌́;  ◌̈◌́;  ◌̈◌́; ) GREEK DIALYTIKA TONOS
+0386;0386;0391 0301;0386;0391 0301; # (Ά; Ά; Α◌́; Ά; Α◌́; ) GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387;00B7;00B7;00B7;00B7; # (·; ·; ·; ·; ·; ) GREEK ANO TELEIA
+0388;0388;0395 0301;0388;0395 0301; # (Έ; Έ; Ε◌́; Έ; Ε◌́; ) GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389;0389;0397 0301;0389;0397 0301; # (Ή; Ή; Η◌́; Ή; Η◌́; ) GREEK CAPITAL LETTER ETA WITH TONOS
+038A;038A;0399 0301;038A;0399 0301; # (Ί; Ί; Ι◌́; Ί; Ι◌́; ) GREEK CAPITAL LETTER IOTA WITH TONOS
+038C;038C;039F 0301;038C;039F 0301; # (Ό; Ό; Ο◌́; Ό; Ο◌́; ) GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E;038E;03A5 0301;038E;03A5 0301; # (Ύ; Ύ; Υ◌́; Ύ; Υ◌́; ) GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F;038F;03A9 0301;038F;03A9 0301; # (Ώ; Ώ; Ω◌́; Ώ; Ω◌́; ) GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ΐ; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AA;03AA;0399 0308;03AA;0399 0308; # (Ϊ; Ϊ; Ι◌̈; Ϊ; Ι◌̈; ) GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB;03AB;03A5 0308;03AB;03A5 0308; # (Ϋ; Ϋ; Υ◌̈; Ϋ; Υ◌̈; ) GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03AC;03AC;03B1 0301;03AC;03B1 0301; # (ά; ά; α◌́; ά; α◌́; ) GREEK SMALL LETTER ALPHA WITH TONOS
+03AD;03AD;03B5 0301;03AD;03B5 0301; # (έ; έ; ε◌́; έ; ε◌́; ) GREEK SMALL LETTER EPSILON WITH TONOS
+03AE;03AE;03B7 0301;03AE;03B7 0301; # (ή; ή; η◌́; ή; η◌́; ) GREEK SMALL LETTER ETA WITH TONOS
+03AF;03AF;03B9 0301;03AF;03B9 0301; # (ί; ί; ι◌́; ί; ι◌́; ) GREEK SMALL LETTER IOTA WITH TONOS
+03B0;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ΰ; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CA;03CA;03B9 0308;03CA;03B9 0308; # (ϊ; ϊ; ι◌̈; ϊ; ι◌̈; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA
+03CB;03CB;03C5 0308;03CB;03C5 0308; # (ϋ; ϋ; υ◌̈; ϋ; υ◌̈; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03CC;03CC;03BF 0301;03CC;03BF 0301; # (ό; ό; ο◌́; ό; ο◌́; ) GREEK SMALL LETTER OMICRON WITH TONOS
+03CD;03CD;03C5 0301;03CD;03C5 0301; # (ύ; ύ; υ◌́; ύ; υ◌́; ) GREEK SMALL LETTER UPSILON WITH TONOS
+03CE;03CE;03C9 0301;03CE;03C9 0301; # (ώ; ώ; ω◌́; ώ; ω◌́; ) GREEK SMALL LETTER OMEGA WITH TONOS
+03D0;03D0;03D0;03B2;03B2; # (ϐ; ϐ; ϐ; β; β; ) GREEK BETA SYMBOL
+03D1;03D1;03D1;03B8;03B8; # (ϑ; ϑ; ϑ; θ; θ; ) GREEK THETA SYMBOL
+03D2;03D2;03D2;03A5;03A5; # (ϒ; ϒ; ϒ; Υ; Υ; ) GREEK UPSILON WITH HOOK SYMBOL
+03D3;03D3;03D2 0301;038E;03A5 0301; # (ϓ; ϓ; ϒ◌́; Ύ; Υ◌́; ) GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4;03D4;03D2 0308;03AB;03A5 0308; # (ϔ; ϔ; ϒ◌̈; Ϋ; Υ◌̈; ) GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D5;03D5;03D5;03C6;03C6; # (ϕ; ϕ; ϕ; φ; φ; ) GREEK PHI SYMBOL
+03D6;03D6;03D6;03C0;03C0; # (ϖ; ϖ; ϖ; π; π; ) GREEK PI SYMBOL
+03F0;03F0;03F0;03BA;03BA; # (ϰ; ϰ; ϰ; κ; κ; ) GREEK KAPPA SYMBOL
+03F1;03F1;03F1;03C1;03C1; # (ϱ; ϱ; ϱ; ρ; ρ; ) GREEK RHO SYMBOL
+03F2;03F2;03F2;03C2;03C2; # (ϲ; ϲ; ϲ; ς; ς; ) GREEK LUNATE SIGMA SYMBOL
+0400;0400;0415 0300;0400;0415 0300; # (Ѐ; Ѐ; Е◌̀; Ѐ; Е◌̀; ) CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401;0401;0415 0308;0401;0415 0308; # (Ё; Ё; Е◌̈; Ё; Е◌̈; ) CYRILLIC CAPITAL LETTER IO
+0403;0403;0413 0301;0403;0413 0301; # (Ѓ; Ѓ; Г◌́; Ѓ; Г◌́; ) CYRILLIC CAPITAL LETTER GJE
+0407;0407;0406 0308;0407;0406 0308; # (Ї; Ї; І◌̈; Ї; І◌̈; ) CYRILLIC CAPITAL LETTER YI
+040C;040C;041A 0301;040C;041A 0301; # (Ќ; Ќ; К◌́; Ќ; К◌́; ) CYRILLIC CAPITAL LETTER KJE
+040D;040D;0418 0300;040D;0418 0300; # (Ѝ; Ѝ; И◌̀; Ѝ; И◌̀; ) CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E;040E;0423 0306;040E;0423 0306; # (Ў; Ў; У◌̆; Ў; У◌̆; ) CYRILLIC CAPITAL LETTER SHORT U
+0419;0419;0418 0306;0419;0418 0306; # (Й; Й; И◌̆; Й; И◌̆; ) CYRILLIC CAPITAL LETTER SHORT I
+0439;0439;0438 0306;0439;0438 0306; # (й; й; и◌̆; й; и◌̆; ) CYRILLIC SMALL LETTER SHORT I
+0450;0450;0435 0300;0450;0435 0300; # (ѐ; ѐ; е◌̀; ѐ; е◌̀; ) CYRILLIC SMALL LETTER IE WITH GRAVE
+0451;0451;0435 0308;0451;0435 0308; # (ё; ё; е◌̈; ё; е◌̈; ) CYRILLIC SMALL LETTER IO
+0453;0453;0433 0301;0453;0433 0301; # (ѓ; ѓ; г◌́; ѓ; г◌́; ) CYRILLIC SMALL LETTER GJE
+0457;0457;0456 0308;0457;0456 0308; # (ї; ї; і◌̈; ї; і◌̈; ) CYRILLIC SMALL LETTER YI
+045C;045C;043A 0301;045C;043A 0301; # (ќ; ќ; к◌́; ќ; к◌́; ) CYRILLIC SMALL LETTER KJE
+045D;045D;0438 0300;045D;0438 0300; # (ѝ; ѝ; и◌̀; ѝ; и◌̀; ) CYRILLIC SMALL LETTER I WITH GRAVE
+045E;045E;0443 0306;045E;0443 0306; # (ў; ў; у◌̆; ў; у◌̆; ) CYRILLIC SMALL LETTER SHORT U
+0476;0476;0474 030F;0476;0474 030F; # (Ѷ; Ѷ; Ѵ◌̏; Ѷ; Ѵ◌̏; ) CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0477;0477;0475 030F;0477;0475 030F; # (ѷ; ѷ; ѵ◌̏; ѷ; ѵ◌̏; ) CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+04C1;04C1;0416 0306;04C1;0416 0306; # (Ӂ; Ӂ; Ж◌̆; Ӂ; Ж◌̆; ) CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C2;04C2;0436 0306;04C2;0436 0306; # (ӂ; ӂ; ж◌̆; ӂ; ж◌̆; ) CYRILLIC SMALL LETTER ZHE WITH BREVE
+04D0;04D0;0410 0306;04D0;0410 0306; # (Ӑ; Ӑ; А◌̆; Ӑ; А◌̆; ) CYRILLIC CAPITAL LETTER A WITH BREVE
+04D1;04D1;0430 0306;04D1;0430 0306; # (ӑ; ӑ; а◌̆; ӑ; а◌̆; ) CYRILLIC SMALL LETTER A WITH BREVE
+04D2;04D2;0410 0308;04D2;0410 0308; # (Ӓ; Ӓ; А◌̈; Ӓ; А◌̈; ) CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D3;04D3;0430 0308;04D3;0430 0308; # (ӓ; ӓ; а◌̈; ӓ; а◌̈; ) CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D6;04D6;0415 0306;04D6;0415 0306; # (Ӗ; Ӗ; Е◌̆; Ӗ; Е◌̆; ) CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D7;04D7;0435 0306;04D7;0435 0306; # (ӗ; ӗ; е◌̆; ӗ; е◌̆; ) CYRILLIC SMALL LETTER IE WITH BREVE
+04DA;04DA;04D8 0308;04DA;04D8 0308; # (Ӛ; Ӛ; Ә◌̈; Ӛ; Ә◌̈; ) CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DB;04DB;04D9 0308;04DB;04D9 0308; # (ӛ; ӛ; ә◌̈; ӛ; ә◌̈; ) CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DC;04DC;0416 0308;04DC;0416 0308; # (Ӝ; Ӝ; Ж◌̈; Ӝ; Ж◌̈; ) CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DD;04DD;0436 0308;04DD;0436 0308; # (ӝ; ӝ; ж◌̈; ӝ; ж◌̈; ) CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DE;04DE;0417 0308;04DE;0417 0308; # (Ӟ; Ӟ; З◌̈; Ӟ; З◌̈; ) CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04DF;04DF;0437 0308;04DF;0437 0308; # (ӟ; ӟ; з◌̈; ӟ; з◌̈; ) CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E2;04E2;0418 0304;04E2;0418 0304; # (Ӣ; Ӣ; И◌̄; Ӣ; И◌̄; ) CYRILLIC CAPITAL LETTER I WITH MACRON
+04E3;04E3;0438 0304;04E3;0438 0304; # (ӣ; ӣ; и◌̄; ӣ; и◌̄; ) CYRILLIC SMALL LETTER I WITH MACRON
+04E4;04E4;0418 0308;04E4;0418 0308; # (Ӥ; Ӥ; И◌̈; Ӥ; И◌̈; ) CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E5;04E5;0438 0308;04E5;0438 0308; # (ӥ; ӥ; и◌̈; ӥ; и◌̈; ) CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E6;04E6;041E 0308;04E6;041E 0308; # (Ӧ; Ӧ; О◌̈; Ӧ; О◌̈; ) CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E7;04E7;043E 0308;04E7;043E 0308; # (ӧ; ӧ; о◌̈; ӧ; о◌̈; ) CYRILLIC SMALL LETTER O WITH DIAERESIS
+04EA;04EA;04E8 0308;04EA;04E8 0308; # (Ӫ; Ӫ; Ө◌̈; Ӫ; Ө◌̈; ) CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EB;04EB;04E9 0308;04EB;04E9 0308; # (ӫ; ӫ; ө◌̈; ӫ; ө◌̈; ) CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC;04EC;042D 0308;04EC;042D 0308; # (Ӭ; Ӭ; Э◌̈; Ӭ; Э◌̈; ) CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04ED;04ED;044D 0308;04ED;044D 0308; # (ӭ; ӭ; э◌̈; ӭ; э◌̈; ) CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE;04EE;0423 0304;04EE;0423 0304; # (Ӯ; Ӯ; У◌̄; Ӯ; У◌̄; ) CYRILLIC CAPITAL LETTER U WITH MACRON
+04EF;04EF;0443 0304;04EF;0443 0304; # (ӯ; ӯ; у◌̄; ӯ; у◌̄; ) CYRILLIC SMALL LETTER U WITH MACRON
+04F0;04F0;0423 0308;04F0;0423 0308; # (Ӱ; Ӱ; У◌̈; Ӱ; У◌̈; ) CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F1;04F1;0443 0308;04F1;0443 0308; # (ӱ; ӱ; у◌̈; ӱ; у◌̈; ) CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F2;04F2;0423 030B;04F2;0423 030B; # (Ӳ; Ӳ; У◌̋; Ӳ; У◌̋; ) CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F3;04F3;0443 030B;04F3;0443 030B; # (ӳ; ӳ; у◌̋; ӳ; у◌̋; ) CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F4;04F4;0427 0308;04F4;0427 0308; # (Ӵ; Ӵ; Ч◌̈; Ӵ; Ч◌̈; ) CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F5;04F5;0447 0308;04F5;0447 0308; # (ӵ; ӵ; ч◌̈; ӵ; ч◌̈; ) CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8;04F8;042B 0308;04F8;042B 0308; # (Ӹ; Ӹ; Ы◌̈; Ӹ; Ы◌̈; ) CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04F9;04F9;044B 0308;04F9;044B 0308; # (ӹ; ӹ; ы◌̈; ӹ; ы◌̈; ) CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0587;0587;0587;0565 0582;0565 0582; # (և; և; և; եւ; եւ; ) ARMENIAN SMALL LIGATURE ECH YIWN
+0622;0622;0627 0653;0622;0627 0653; # (آ; آ; ا◌ٓ; آ; ا◌ٓ; ) ARABIC LETTER ALEF WITH MADDA ABOVE
+0623;0623;0627 0654;0623;0627 0654; # (أ; أ; ا◌ٔ; أ; ا◌ٔ; ) ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624;0624;0648 0654;0624;0648 0654; # (ؤ; ؤ; و◌ٔ; ؤ; و◌ٔ; ) ARABIC LETTER WAW WITH HAMZA ABOVE
+0625;0625;0627 0655;0625;0627 0655; # (إ; إ; ا◌ٕ; إ; ا◌ٕ; ) ARABIC LETTER ALEF WITH HAMZA BELOW
+0626;0626;064A 0654;0626;064A 0654; # (ئ; ئ; ي◌ٔ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE
+0675;0675;0675;0627 0674;0627 0674; # (ٵ; ٵ; ٵ; اٴ; اٴ; ) ARABIC LETTER HIGH HAMZA ALEF
+0676;0676;0676;0648 0674;0648 0674; # (ٶ; ٶ; ٶ; وٴ; وٴ; ) ARABIC LETTER HIGH HAMZA WAW
+0677;0677;0677;06C7 0674;06C7 0674; # (ٷ; ٷ; ٷ; ۇٴ; ۇٴ; ) ARABIC LETTER U WITH HAMZA ABOVE
+0678;0678;0678;064A 0674;064A 0674; # (ٸ; ٸ; ٸ; يٴ; يٴ; ) ARABIC LETTER HIGH HAMZA YEH
+06C0;06C0;06D5 0654;06C0;06D5 0654; # (ۀ; ۀ; ە◌ٔ; ۀ; ە◌ٔ; ) ARABIC LETTER HEH WITH YEH ABOVE
+06C2;06C2;06C1 0654;06C2;06C1 0654; # (ۂ; ۂ; ہ◌ٔ; ۂ; ہ◌ٔ; ) ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06D3;06D3;06D2 0654;06D3;06D2 0654; # (ۓ; ۓ; ے◌ٔ; ۓ; ے◌ٔ; ) ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+0929;0929;0928 093C;0929;0928 093C; # (ऩ; ऩ; न◌़; ऩ; न◌़; ) DEVANAGARI LETTER NNNA
+0931;0931;0930 093C;0931;0930 093C; # (ऱ; ऱ; र◌़; ऱ; र◌़; ) DEVANAGARI LETTER RRA
+0934;0934;0933 093C;0934;0933 093C; # (ऴ; ऴ; ळ◌़; ऴ; ळ◌़; ) DEVANAGARI LETTER LLLA
+0958;0915 093C;0915 093C;0915 093C;0915 093C; # (क़; क◌़; क◌़; क◌़; क◌़; ) DEVANAGARI LETTER QA
+0959;0916 093C;0916 093C;0916 093C;0916 093C; # (ख़; ख◌़; ख◌़; ख◌़; ख◌़; ) DEVANAGARI LETTER KHHA
+095A;0917 093C;0917 093C;0917 093C;0917 093C; # (ग़; ग◌़; ग◌़; ग◌़; ग◌़; ) DEVANAGARI LETTER GHHA
+095B;091C 093C;091C 093C;091C 093C;091C 093C; # (ज़; ज◌़; ज◌़; ज◌़; ज◌़; ) DEVANAGARI LETTER ZA
+095C;0921 093C;0921 093C;0921 093C;0921 093C; # (ड़; ड◌़; ड◌़; ड◌़; ड◌़; ) DEVANAGARI LETTER DDDHA
+095D;0922 093C;0922 093C;0922 093C;0922 093C; # (ढ़; ढ◌़; ढ◌़; ढ◌़; ढ◌़; ) DEVANAGARI LETTER RHA
+095E;092B 093C;092B 093C;092B 093C;092B 093C; # (फ़; फ◌़; फ◌़; फ◌़; फ◌़; ) DEVANAGARI LETTER FA
+095F;092F 093C;092F 093C;092F 093C;092F 093C; # (य़; य◌़; य◌़; य◌़; य◌़; ) DEVANAGARI LETTER YYA
+09CB;09CB;09C7 09BE;09CB;09C7 09BE; # (ো; ো; ো; ো; ো; ) BENGALI VOWEL SIGN O
+09CC;09CC;09C7 09D7;09CC;09C7 09D7; # (ৌ; ৌ; ৌ; ৌ; ৌ; ) BENGALI VOWEL SIGN AU
+09DC;09A1 09BC;09A1 09BC;09A1 09BC;09A1 09BC; # (ড়; ড◌়; ড◌়; ড◌়; ড◌়; ) BENGALI LETTER RRA
+09DD;09A2 09BC;09A2 09BC;09A2 09BC;09A2 09BC; # (ঢ়; ঢ◌়; ঢ◌়; ঢ◌়; ঢ◌়; ) BENGALI LETTER RHA
+09DF;09AF 09BC;09AF 09BC;09AF 09BC;09AF 09BC; # (য়; য◌়; য◌়; য◌়; য◌়; ) BENGALI LETTER YYA
+0A33;0A32 0A3C;0A32 0A3C;0A32 0A3C;0A32 0A3C; # (ਲ਼; ਲ◌਼; ਲ◌਼; ਲ◌਼; ਲ◌਼; ) GURMUKHI LETTER LLA
+0A36;0A38 0A3C;0A38 0A3C;0A38 0A3C;0A38 0A3C; # (ਸ਼; ਸ◌਼; ਸ◌਼; ਸ◌਼; ਸ◌਼; ) GURMUKHI LETTER SHA
+0A59;0A16 0A3C;0A16 0A3C;0A16 0A3C;0A16 0A3C; # (ਖ਼; ਖ◌਼; ਖ◌਼; ਖ◌਼; ਖ◌਼; ) GURMUKHI LETTER KHHA
+0A5A;0A17 0A3C;0A17 0A3C;0A17 0A3C;0A17 0A3C; # (ਗ਼; ਗ◌਼; ਗ◌਼; ਗ◌਼; ਗ◌਼; ) GURMUKHI LETTER GHHA
+0A5B;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C; # (ਜ਼; ਜ◌਼; ਜ◌਼; ਜ◌਼; ਜ◌਼; ) GURMUKHI LETTER ZA
+0A5E;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C; # (ਫ਼; ਫ◌਼; ਫ◌਼; ਫ◌਼; ਫ◌਼; ) GURMUKHI LETTER FA
+0B48;0B48;0B47 0B56;0B48;0B47 0B56; # (ୈ; ୈ; େ◌ୖ; ୈ; େ◌ୖ; ) ORIYA VOWEL SIGN AI
+0B4B;0B4B;0B47 0B3E;0B4B;0B47 0B3E; # (ୋ; ୋ; ୋ; ୋ; ୋ; ) ORIYA VOWEL SIGN O
+0B4C;0B4C;0B47 0B57;0B4C;0B47 0B57; # (ୌ; ୌ; ୌ; ୌ; ୌ; ) ORIYA VOWEL SIGN AU
+0B5C;0B21 0B3C;0B21 0B3C;0B21 0B3C;0B21 0B3C; # (ଡ଼; ଡ◌଼; ଡ◌଼; ଡ◌଼; ଡ◌଼; ) ORIYA LETTER RRA
+0B5D;0B22 0B3C;0B22 0B3C;0B22 0B3C;0B22 0B3C; # (ଢ଼; ଢ◌଼; ଢ◌଼; ଢ◌଼; ଢ◌଼; ) ORIYA LETTER RHA
+0B94;0B94;0B92 0BD7;0B94;0B92 0BD7; # (ஔ; ஔ; ஔ; ஔ; ஔ; ) TAMIL LETTER AU
+0BCA;0BCA;0BC6 0BBE;0BCA;0BC6 0BBE; # (ொ; ொ; ொ; ொ; ொ; ) TAMIL VOWEL SIGN O
+0BCB;0BCB;0BC7 0BBE;0BCB;0BC7 0BBE; # (ோ; ோ; ோ; ோ; ோ; ) TAMIL VOWEL SIGN OO
+0BCC;0BCC;0BC6 0BD7;0BCC;0BC6 0BD7; # (ௌ; ௌ; ௌ; ௌ; ௌ; ) TAMIL VOWEL SIGN AU
+0C48;0C48;0C46 0C56;0C48;0C46 0C56; # (◌ై; ◌ై; ◌ె◌ౖ; ◌ై; ◌ె◌ౖ; ) TELUGU VOWEL SIGN AI
+0CC0;0CC0;0CBF 0CD5;0CC0;0CBF 0CD5; # (ೀ; ೀ; ◌ೀ; ೀ; ◌ೀ; ) KANNADA VOWEL SIGN II
+0CC7;0CC7;0CC6 0CD5;0CC7;0CC6 0CD5; # (ೇ; ೇ; ◌ೇ; ೇ; ◌ೇ; ) KANNADA VOWEL SIGN EE
+0CC8;0CC8;0CC6 0CD6;0CC8;0CC6 0CD6; # (ೈ; ೈ; ◌ೈ; ೈ; ◌ೈ; ) KANNADA VOWEL SIGN AI
+0CCA;0CCA;0CC6 0CC2;0CCA;0CC6 0CC2; # (ೊ; ೊ; ◌ೊ; ೊ; ◌ೊ; ) KANNADA VOWEL SIGN O
+0CCB;0CCB;0CC6 0CC2 0CD5;0CCB;0CC6 0CC2 0CD5; # (ೋ; ೋ; ◌ೋ; ೋ; ◌ೋ; ) KANNADA VOWEL SIGN OO
+0D4A;0D4A;0D46 0D3E;0D4A;0D46 0D3E; # (ൊ; ൊ; ൊ; ൊ; ൊ; ) MALAYALAM VOWEL SIGN O
+0D4B;0D4B;0D47 0D3E;0D4B;0D47 0D3E; # (ോ; ോ; ോ; ോ; ോ; ) MALAYALAM VOWEL SIGN OO
+0D4C;0D4C;0D46 0D57;0D4C;0D46 0D57; # (ൌ; ൌ; ൌ; ൌ; ൌ; ) MALAYALAM VOWEL SIGN AU
+0DDA;0DDA;0DD9 0DCA;0DDA;0DD9 0DCA; # (ේ; ේ; ෙ◌්; ේ; ෙ◌්; ) SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDC;0DDC;0DD9 0DCF;0DDC;0DD9 0DCF; # (ො; ො; ො; ො; ො; ) SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDD;0DDD;0DD9 0DCF 0DCA;0DDD;0DD9 0DCF 0DCA; # (ෝ; ෝ; ො◌්; ෝ; ො◌්; ) SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDE;0DDE;0DD9 0DDF;0DDE;0DD9 0DDF; # (ෞ; ෞ; ෞ; ෞ; ෞ; ) SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0E33;0E33;0E33;0E4D 0E32;0E4D 0E32; # (ำ; ำ; ำ; ◌ํา; ◌ํา; ) THAI CHARACTER SARA AM
+0EB3;0EB3;0EB3;0ECD 0EB2;0ECD 0EB2; # (ຳ; ຳ; ຳ; ◌ໍາ; ◌ໍາ; ) LAO VOWEL SIGN AM
+0EDC;0EDC;0EDC;0EAB 0E99;0EAB 0E99; # (ໜ; ໜ; ໜ; ຫນ; ຫນ; ) LAO HO NO
+0EDD;0EDD;0EDD;0EAB 0EA1;0EAB 0EA1; # (ໝ; ໝ; ໝ; ຫມ; ຫມ; ) LAO HO MO
+0F0C;0F0C;0F0C;0F0B;0F0B; # (༌; ༌; ༌; ་; ་; ) TIBETAN MARK DELIMITER TSHEG BSTAR
+0F43;0F42 0FB7;0F42 0FB7;0F42 0FB7;0F42 0FB7; # (གྷ; ག◌ྷ; ག◌ྷ; ག◌ྷ; ག◌ྷ; ) TIBETAN LETTER GHA
+0F4D;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7; # (ཌྷ; ཌ◌ྷ; ཌ◌ྷ; ཌ◌ྷ; ཌ◌ྷ; ) TIBETAN LETTER DDHA
+0F52;0F51 0FB7;0F51 0FB7;0F51 0FB7;0F51 0FB7; # (དྷ; ད◌ྷ; ད◌ྷ; ད◌ྷ; ད◌ྷ; ) TIBETAN LETTER DHA
+0F57;0F56 0FB7;0F56 0FB7;0F56 0FB7;0F56 0FB7; # (བྷ; བ◌ྷ; བ◌ྷ; བ◌ྷ; བ◌ྷ; ) TIBETAN LETTER BHA
+0F5C;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7; # (ཛྷ; ཛ◌ྷ; ཛ◌ྷ; ཛ◌ྷ; ཛ◌ྷ; ) TIBETAN LETTER DZHA
+0F69;0F40 0FB5;0F40 0FB5;0F40 0FB5;0F40 0FB5; # (ཀྵ; ཀ◌ྵ; ཀ◌ྵ; ཀ◌ྵ; ཀ◌ྵ; ) TIBETAN LETTER KSSA
+0F73;0F71 0F72;0F71 0F72;0F71 0F72;0F71 0F72; # (◌ཱི; ◌ཱ◌ི; ◌ཱ◌ི; ◌ཱ◌ི; ◌ཱ◌ི; ) TIBETAN VOWEL SIGN II
+0F75;0F71 0F74;0F71 0F74;0F71 0F74;0F71 0F74; # (◌ཱུ; ◌ཱ◌ུ; ◌ཱ◌ུ; ◌ཱ◌ུ; ◌ཱ◌ུ; ) TIBETAN VOWEL SIGN UU
+0F76;0FB2 0F80;0FB2 0F80;0FB2 0F80;0FB2 0F80; # (◌ྲྀ; ◌ྲ◌ྀ; ◌ྲ◌ྀ; ◌ྲ◌ྀ; ◌ྲ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC R
+0F77;0F77;0F77;0FB2 0F71 0F80;0FB2 0F71 0F80; # (◌ཷ; ◌ཷ; ◌ཷ; ◌ྲ◌ཱ◌ྀ; ◌ྲ◌ཱ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC RR
+0F78;0FB3 0F80;0FB3 0F80;0FB3 0F80;0FB3 0F80; # (◌ླྀ; ◌ླ◌ྀ; ◌ླ◌ྀ; ◌ླ◌ྀ; ◌ླ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC L
+0F79;0F79;0F79;0FB3 0F71 0F80;0FB3 0F71 0F80; # (◌ཹ; ◌ཹ; ◌ཹ; ◌ླ◌ཱ◌ྀ; ◌ླ◌ཱ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC LL
+0F81;0F71 0F80;0F71 0F80;0F71 0F80;0F71 0F80; # (◌ཱྀ; ◌ཱ◌ྀ; ◌ཱ◌ྀ; ◌ཱ◌ྀ; ◌ཱ◌ྀ; ) TIBETAN VOWEL SIGN REVERSED II
+0F93;0F92 0FB7;0F92 0FB7;0F92 0FB7;0F92 0FB7; # (◌ྒྷ; ◌ྒ◌ྷ; ◌ྒ◌ྷ; ◌ྒ◌ྷ; ◌ྒ◌ྷ; ) TIBETAN SUBJOINED LETTER GHA
+0F9D;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7; # (◌ྜྷ; ◌ྜ◌ྷ; ◌ྜ◌ྷ; ◌ྜ◌ྷ; ◌ྜ◌ྷ; ) TIBETAN SUBJOINED LETTER DDHA
+0FA2;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7; # (◌ྡྷ; ◌ྡ◌ྷ; ◌ྡ◌ྷ; ◌ྡ◌ྷ; ◌ྡ◌ྷ; ) TIBETAN SUBJOINED LETTER DHA
+0FA7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7; # (◌ྦྷ; ◌ྦ◌ྷ; ◌ྦ◌ྷ; ◌ྦ◌ྷ; ◌ྦ◌ྷ; ) TIBETAN SUBJOINED LETTER BHA
+0FAC;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7; # (◌ྫྷ; ◌ྫ◌ྷ; ◌ྫ◌ྷ; ◌ྫ◌ྷ; ◌ྫ◌ྷ; ) TIBETAN SUBJOINED LETTER DZHA
+0FB9;0F90 0FB5;0F90 0FB5;0F90 0FB5;0F90 0FB5; # (◌ྐྵ; ◌ྐ◌ྵ; ◌ྐ◌ྵ; ◌ྐ◌ྵ; ◌ྐ◌ྵ; ) TIBETAN SUBJOINED LETTER KSSA
+1026;1026;1025 102E;1026;1025 102E; # (ဦ; ဦ; ဥ◌ီ; ဦ; ဥ◌ီ; ) MYANMAR LETTER UU
+1E00;1E00;0041 0325;1E00;0041 0325; # (Ḁ; Ḁ; A◌̥; Ḁ; A◌̥; ) LATIN CAPITAL LETTER A WITH RING BELOW
+1E01;1E01;0061 0325;1E01;0061 0325; # (ḁ; ḁ; a◌̥; ḁ; a◌̥; ) LATIN SMALL LETTER A WITH RING BELOW
+1E02;1E02;0042 0307;1E02;0042 0307; # (Ḃ; Ḃ; B◌̇; Ḃ; B◌̇; ) LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03;1E03;0062 0307;1E03;0062 0307; # (ḃ; ḃ; b◌̇; ḃ; b◌̇; ) LATIN SMALL LETTER B WITH DOT ABOVE
+1E04;1E04;0042 0323;1E04;0042 0323; # (Ḅ; Ḅ; B◌̣; Ḅ; B◌̣; ) LATIN CAPITAL LETTER B WITH DOT BELOW
+1E05;1E05;0062 0323;1E05;0062 0323; # (ḅ; ḅ; b◌̣; ḅ; b◌̣; ) LATIN SMALL LETTER B WITH DOT BELOW
+1E06;1E06;0042 0331;1E06;0042 0331; # (Ḇ; Ḇ; B◌̱; Ḇ; B◌̱; ) LATIN CAPITAL LETTER B WITH LINE BELOW
+1E07;1E07;0062 0331;1E07;0062 0331; # (ḇ; ḇ; b◌̱; ḇ; b◌̱; ) LATIN SMALL LETTER B WITH LINE BELOW
+1E08;1E08;0043 0327 0301;1E08;0043 0327 0301; # (Ḉ; Ḉ; C◌̧◌́; Ḉ; C◌̧◌́; ) LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E09;1E09;0063 0327 0301;1E09;0063 0327 0301; # (ḉ; ḉ; c◌̧◌́; ḉ; c◌̧◌́; ) LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0A;1E0A;0044 0307;1E0A;0044 0307; # (Ḋ; Ḋ; D◌̇; Ḋ; D◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B;1E0B;0064 0307;1E0B;0064 0307; # (ḋ; ḋ; d◌̇; ḋ; d◌̇; ) LATIN SMALL LETTER D WITH DOT ABOVE
+1E0C;1E0C;0044 0323;1E0C;0044 0323; # (Ḍ; Ḍ; D◌̣; Ḍ; D◌̣; ) LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0D;1E0D;0064 0323;1E0D;0064 0323; # (ḍ; ḍ; d◌̣; ḍ; d◌̣; ) LATIN SMALL LETTER D WITH DOT BELOW
+1E0E;1E0E;0044 0331;1E0E;0044 0331; # (Ḏ; Ḏ; D◌̱; Ḏ; D◌̱; ) LATIN CAPITAL LETTER D WITH LINE BELOW
+1E0F;1E0F;0064 0331;1E0F;0064 0331; # (ḏ; ḏ; d◌̱; ḏ; d◌̱; ) LATIN SMALL LETTER D WITH LINE BELOW
+1E10;1E10;0044 0327;1E10;0044 0327; # (Ḑ; Ḑ; D◌̧; Ḑ; D◌̧; ) LATIN CAPITAL LETTER D WITH CEDILLA
+1E11;1E11;0064 0327;1E11;0064 0327; # (ḑ; ḑ; d◌̧; ḑ; d◌̧; ) LATIN SMALL LETTER D WITH CEDILLA
+1E12;1E12;0044 032D;1E12;0044 032D; # (Ḓ; Ḓ; D◌̭; Ḓ; D◌̭; ) LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E13;1E13;0064 032D;1E13;0064 032D; # (ḓ; ḓ; d◌̭; ḓ; d◌̭; ) LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ḕ; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E15;1E15;0065 0304 0300;1E15;0065 0304 0300; # (ḕ; ḕ; e◌̄◌̀; ḕ; e◌̄◌̀; ) LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E16;1E16;0045 0304 0301;1E16;0045 0304 0301; # (Ḗ; Ḗ; E◌̄◌́; Ḗ; E◌̄◌́; ) LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E17;1E17;0065 0304 0301;1E17;0065 0304 0301; # (ḗ; ḗ; e◌̄◌́; ḗ; e◌̄◌́; ) LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E18;1E18;0045 032D;1E18;0045 032D; # (Ḙ; Ḙ; E◌̭; Ḙ; E◌̭; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E19;1E19;0065 032D;1E19;0065 032D; # (ḙ; ḙ; e◌̭; ḙ; e◌̭; ) LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1A;1E1A;0045 0330;1E1A;0045 0330; # (Ḛ; Ḛ; E◌̰; Ḛ; E◌̰; ) LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1B;1E1B;0065 0330;1E1B;0065 0330; # (ḛ; ḛ; e◌̰; ḛ; e◌̰; ) LATIN SMALL LETTER E WITH TILDE BELOW
+1E1C;1E1C;0045 0327 0306;1E1C;0045 0327 0306; # (Ḝ; Ḝ; E◌̧◌̆; Ḝ; E◌̧◌̆; ) LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1D;1E1D;0065 0327 0306;1E1D;0065 0327 0306; # (ḝ; ḝ; e◌̧◌̆; ḝ; e◌̧◌̆; ) LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1E;1E1E;0046 0307;1E1E;0046 0307; # (Ḟ; Ḟ; F◌̇; Ḟ; F◌̇; ) LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F;1E1F;0066 0307;1E1F;0066 0307; # (ḟ; ḟ; f◌̇; ḟ; f◌̇; ) LATIN SMALL LETTER F WITH DOT ABOVE
+1E20;1E20;0047 0304;1E20;0047 0304; # (Ḡ; Ḡ; G◌̄; Ḡ; G◌̄; ) LATIN CAPITAL LETTER G WITH MACRON
+1E21;1E21;0067 0304;1E21;0067 0304; # (ḡ; ḡ; g◌̄; ḡ; g◌̄; ) LATIN SMALL LETTER G WITH MACRON
+1E22;1E22;0048 0307;1E22;0048 0307; # (Ḣ; Ḣ; H◌̇; Ḣ; H◌̇; ) LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E23;1E23;0068 0307;1E23;0068 0307; # (ḣ; ḣ; h◌̇; ḣ; h◌̇; ) LATIN SMALL LETTER H WITH DOT ABOVE
+1E24;1E24;0048 0323;1E24;0048 0323; # (Ḥ; Ḥ; H◌̣; Ḥ; H◌̣; ) LATIN CAPITAL LETTER H WITH DOT BELOW
+1E25;1E25;0068 0323;1E25;0068 0323; # (ḥ; ḥ; h◌̣; ḥ; h◌̣; ) LATIN SMALL LETTER H WITH DOT BELOW
+1E26;1E26;0048 0308;1E26;0048 0308; # (Ḧ; Ḧ; H◌̈; Ḧ; H◌̈; ) LATIN CAPITAL LETTER H WITH DIAERESIS
+1E27;1E27;0068 0308;1E27;0068 0308; # (ḧ; ḧ; h◌̈; ḧ; h◌̈; ) LATIN SMALL LETTER H WITH DIAERESIS
+1E28;1E28;0048 0327;1E28;0048 0327; # (Ḩ; Ḩ; H◌̧; Ḩ; H◌̧; ) LATIN CAPITAL LETTER H WITH CEDILLA
+1E29;1E29;0068 0327;1E29;0068 0327; # (ḩ; ḩ; h◌̧; ḩ; h◌̧; ) LATIN SMALL LETTER H WITH CEDILLA
+1E2A;1E2A;0048 032E;1E2A;0048 032E; # (Ḫ; Ḫ; H◌̮; Ḫ; H◌̮; ) LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2B;1E2B;0068 032E;1E2B;0068 032E; # (ḫ; ḫ; h◌̮; ḫ; h◌̮; ) LATIN SMALL LETTER H WITH BREVE BELOW
+1E2C;1E2C;0049 0330;1E2C;0049 0330; # (Ḭ; Ḭ; I◌̰; Ḭ; I◌̰; ) LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2D;1E2D;0069 0330;1E2D;0069 0330; # (ḭ; ḭ; i◌̰; ḭ; i◌̰; ) LATIN SMALL LETTER I WITH TILDE BELOW
+1E2E;1E2E;0049 0308 0301;1E2E;0049 0308 0301; # (Ḯ; Ḯ; I◌̈◌́; Ḯ; I◌̈◌́; ) LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E2F;1E2F;0069 0308 0301;1E2F;0069 0308 0301; # (ḯ; ḯ; i◌̈◌́; ḯ; i◌̈◌́; ) LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E30;1E30;004B 0301;1E30;004B 0301; # (Ḱ; Ḱ; K◌́; Ḱ; K◌́; ) LATIN CAPITAL LETTER K WITH ACUTE
+1E31;1E31;006B 0301;1E31;006B 0301; # (ḱ; ḱ; k◌́; ḱ; k◌́; ) LATIN SMALL LETTER K WITH ACUTE
+1E32;1E32;004B 0323;1E32;004B 0323; # (Ḳ; Ḳ; K◌̣; Ḳ; K◌̣; ) LATIN CAPITAL LETTER K WITH DOT BELOW
+1E33;1E33;006B 0323;1E33;006B 0323; # (ḳ; ḳ; k◌̣; ḳ; k◌̣; ) LATIN SMALL LETTER K WITH DOT BELOW
+1E34;1E34;004B 0331;1E34;004B 0331; # (Ḵ; Ḵ; K◌̱; Ḵ; K◌̱; ) LATIN CAPITAL LETTER K WITH LINE BELOW
+1E35;1E35;006B 0331;1E35;006B 0331; # (ḵ; ḵ; k◌̱; ḵ; k◌̱; ) LATIN SMALL LETTER K WITH LINE BELOW
+1E36;1E36;004C 0323;1E36;004C 0323; # (Ḷ; Ḷ; L◌̣; Ḷ; L◌̣; ) LATIN CAPITAL LETTER L WITH DOT BELOW
+1E37;1E37;006C 0323;1E37;006C 0323; # (ḷ; ḷ; l◌̣; ḷ; l◌̣; ) LATIN SMALL LETTER L WITH DOT BELOW
+1E38;1E38;004C 0323 0304;1E38;004C 0323 0304; # (Ḹ; Ḹ; L◌̣◌̄; Ḹ; L◌̣◌̄; ) LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E39;1E39;006C 0323 0304;1E39;006C 0323 0304; # (ḹ; ḹ; l◌̣◌̄; ḹ; l◌̣◌̄; ) LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3A;1E3A;004C 0331;1E3A;004C 0331; # (Ḻ; Ḻ; L◌̱; Ḻ; L◌̱; ) LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3B;1E3B;006C 0331;1E3B;006C 0331; # (ḻ; ḻ; l◌̱; ḻ; l◌̱; ) LATIN SMALL LETTER L WITH LINE BELOW
+1E3C;1E3C;004C 032D;1E3C;004C 032D; # (Ḽ; Ḽ; L◌̭; Ḽ; L◌̭; ) LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3D;1E3D;006C 032D;1E3D;006C 032D; # (ḽ; ḽ; l◌̭; ḽ; l◌̭; ) LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3E;1E3E;004D 0301;1E3E;004D 0301; # (Ḿ; Ḿ; M◌́; Ḿ; M◌́; ) LATIN CAPITAL LETTER M WITH ACUTE
+1E3F;1E3F;006D 0301;1E3F;006D 0301; # (ḿ; ḿ; m◌́; ḿ; m◌́; ) LATIN SMALL LETTER M WITH ACUTE
+1E40;1E40;004D 0307;1E40;004D 0307; # (Ṁ; Ṁ; M◌̇; Ṁ; M◌̇; ) LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41;1E41;006D 0307;1E41;006D 0307; # (ṁ; ṁ; m◌̇; ṁ; m◌̇; ) LATIN SMALL LETTER M WITH DOT ABOVE
+1E42;1E42;004D 0323;1E42;004D 0323; # (Ṃ; Ṃ; M◌̣; Ṃ; M◌̣; ) LATIN CAPITAL LETTER M WITH DOT BELOW
+1E43;1E43;006D 0323;1E43;006D 0323; # (ṃ; ṃ; m◌̣; ṃ; m◌̣; ) LATIN SMALL LETTER M WITH DOT BELOW
+1E44;1E44;004E 0307;1E44;004E 0307; # (Ṅ; Ṅ; N◌̇; Ṅ; N◌̇; ) LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E45;1E45;006E 0307;1E45;006E 0307; # (ṅ; ṅ; n◌̇; ṅ; n◌̇; ) LATIN SMALL LETTER N WITH DOT ABOVE
+1E46;1E46;004E 0323;1E46;004E 0323; # (Ṇ; Ṇ; N◌̣; Ṇ; N◌̣; ) LATIN CAPITAL LETTER N WITH DOT BELOW
+1E47;1E47;006E 0323;1E47;006E 0323; # (ṇ; ṇ; n◌̣; ṇ; n◌̣; ) LATIN SMALL LETTER N WITH DOT BELOW
+1E48;1E48;004E 0331;1E48;004E 0331; # (Ṉ; Ṉ; N◌̱; Ṉ; N◌̱; ) LATIN CAPITAL LETTER N WITH LINE BELOW
+1E49;1E49;006E 0331;1E49;006E 0331; # (ṉ; ṉ; n◌̱; ṉ; n◌̱; ) LATIN SMALL LETTER N WITH LINE BELOW
+1E4A;1E4A;004E 032D;1E4A;004E 032D; # (Ṋ; Ṋ; N◌̭; Ṋ; N◌̭; ) LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4B;1E4B;006E 032D;1E4B;006E 032D; # (ṋ; ṋ; n◌̭; ṋ; n◌̭; ) LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4C;1E4C;004F 0303 0301;1E4C;004F 0303 0301; # (Ṍ; Ṍ; O◌̃◌́; Ṍ; O◌̃◌́; ) LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4D;1E4D;006F 0303 0301;1E4D;006F 0303 0301; # (ṍ; ṍ; o◌̃◌́; ṍ; o◌̃◌́; ) LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4E;1E4E;004F 0303 0308;1E4E;004F 0303 0308; # (Ṏ; Ṏ; O◌̃◌̈; Ṏ; O◌̃◌̈; ) LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E4F;1E4F;006F 0303 0308;1E4F;006F 0303 0308; # (ṏ; ṏ; o◌̃◌̈; ṏ; o◌̃◌̈; ) LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E50;1E50;004F 0304 0300;1E50;004F 0304 0300; # (Ṑ; Ṑ; O◌̄◌̀; Ṑ; O◌̄◌̀; ) LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E51;1E51;006F 0304 0300;1E51;006F 0304 0300; # (ṑ; ṑ; o◌̄◌̀; ṑ; o◌̄◌̀; ) LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E52;1E52;004F 0304 0301;1E52;004F 0304 0301; # (Ṓ; Ṓ; O◌̄◌́; Ṓ; O◌̄◌́; ) LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E53;1E53;006F 0304 0301;1E53;006F 0304 0301; # (ṓ; ṓ; o◌̄◌́; ṓ; o◌̄◌́; ) LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E54;1E54;0050 0301;1E54;0050 0301; # (Ṕ; Ṕ; P◌́; Ṕ; P◌́; ) LATIN CAPITAL LETTER P WITH ACUTE
+1E55;1E55;0070 0301;1E55;0070 0301; # (ṕ; ṕ; p◌́; ṕ; p◌́; ) LATIN SMALL LETTER P WITH ACUTE
+1E56;1E56;0050 0307;1E56;0050 0307; # (Ṗ; Ṗ; P◌̇; Ṗ; P◌̇; ) LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57;1E57;0070 0307;1E57;0070 0307; # (ṗ; ṗ; p◌̇; ṗ; p◌̇; ) LATIN SMALL LETTER P WITH DOT ABOVE
+1E58;1E58;0052 0307;1E58;0052 0307; # (Ṙ; Ṙ; R◌̇; Ṙ; R◌̇; ) LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E59;1E59;0072 0307;1E59;0072 0307; # (ṙ; ṙ; r◌̇; ṙ; r◌̇; ) LATIN SMALL LETTER R WITH DOT ABOVE
+1E5A;1E5A;0052 0323;1E5A;0052 0323; # (Ṛ; Ṛ; R◌̣; Ṛ; R◌̣; ) LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5B;1E5B;0072 0323;1E5B;0072 0323; # (ṛ; ṛ; r◌̣; ṛ; r◌̣; ) LATIN SMALL LETTER R WITH DOT BELOW
+1E5C;1E5C;0052 0323 0304;1E5C;0052 0323 0304; # (Ṝ; Ṝ; R◌̣◌̄; Ṝ; R◌̣◌̄; ) LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5D;1E5D;0072 0323 0304;1E5D;0072 0323 0304; # (ṝ; ṝ; r◌̣◌̄; ṝ; r◌̣◌̄; ) LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5E;1E5E;0052 0331;1E5E;0052 0331; # (Ṟ; Ṟ; R◌̱; Ṟ; R◌̱; ) LATIN CAPITAL LETTER R WITH LINE BELOW
+1E5F;1E5F;0072 0331;1E5F;0072 0331; # (ṟ; ṟ; r◌̱; ṟ; r◌̱; ) LATIN SMALL LETTER R WITH LINE BELOW
+1E60;1E60;0053 0307;1E60;0053 0307; # (Ṡ; Ṡ; S◌̇; Ṡ; S◌̇; ) LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61;1E61;0073 0307;1E61;0073 0307; # (ṡ; ṡ; s◌̇; ṡ; s◌̇; ) LATIN SMALL LETTER S WITH DOT ABOVE
+1E62;1E62;0053 0323;1E62;0053 0323; # (Ṣ; Ṣ; S◌̣; Ṣ; S◌̣; ) LATIN CAPITAL LETTER S WITH DOT BELOW
+1E63;1E63;0073 0323;1E63;0073 0323; # (ṣ; ṣ; s◌̣; ṣ; s◌̣; ) LATIN SMALL LETTER S WITH DOT BELOW
+1E64;1E64;0053 0301 0307;1E64;0053 0301 0307; # (Ṥ; Ṥ; S◌́◌̇; Ṥ; S◌́◌̇; ) LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E65;1E65;0073 0301 0307;1E65;0073 0301 0307; # (ṥ; ṥ; s◌́◌̇; ṥ; s◌́◌̇; ) LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E66;1E66;0053 030C 0307;1E66;0053 030C 0307; # (Ṧ; Ṧ; S◌̌◌̇; Ṧ; S◌̌◌̇; ) LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E67;1E67;0073 030C 0307;1E67;0073 030C 0307; # (ṧ; ṧ; s◌̌◌̇; ṧ; s◌̌◌̇; ) LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E68;1E68;0053 0323 0307;1E68;0053 0323 0307; # (Ṩ; Ṩ; S◌̣◌̇; Ṩ; S◌̣◌̇; ) LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E69;1E69;0073 0323 0307;1E69;0073 0323 0307; # (ṩ; ṩ; s◌̣◌̇; ṩ; s◌̣◌̇; ) LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A;1E6A;0054 0307;1E6A;0054 0307; # (Ṫ; Ṫ; T◌̇; Ṫ; T◌̇; ) LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B;1E6B;0074 0307;1E6B;0074 0307; # (ṫ; ṫ; t◌̇; ṫ; t◌̇; ) LATIN SMALL LETTER T WITH DOT ABOVE
+1E6C;1E6C;0054 0323;1E6C;0054 0323; # (Ṭ; Ṭ; T◌̣; Ṭ; T◌̣; ) LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6D;1E6D;0074 0323;1E6D;0074 0323; # (ṭ; ṭ; t◌̣; ṭ; t◌̣; ) LATIN SMALL LETTER T WITH DOT BELOW
+1E6E;1E6E;0054 0331;1E6E;0054 0331; # (Ṯ; Ṯ; T◌̱; Ṯ; T◌̱; ) LATIN CAPITAL LETTER T WITH LINE BELOW
+1E6F;1E6F;0074 0331;1E6F;0074 0331; # (ṯ; ṯ; t◌̱; ṯ; t◌̱; ) LATIN SMALL LETTER T WITH LINE BELOW
+1E70;1E70;0054 032D;1E70;0054 032D; # (Ṱ; Ṱ; T◌̭; Ṱ; T◌̭; ) LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E71;1E71;0074 032D;1E71;0074 032D; # (ṱ; ṱ; t◌̭; ṱ; t◌̭; ) LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E72;1E72;0055 0324;1E72;0055 0324; # (Ṳ; Ṳ; U◌̤; Ṳ; U◌̤; ) LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E73;1E73;0075 0324;1E73;0075 0324; # (ṳ; ṳ; u◌̤; ṳ; u◌̤; ) LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E74;1E74;0055 0330;1E74;0055 0330; # (Ṵ; Ṵ; U◌̰; Ṵ; U◌̰; ) LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E75;1E75;0075 0330;1E75;0075 0330; # (ṵ; ṵ; u◌̰; ṵ; u◌̰; ) LATIN SMALL LETTER U WITH TILDE BELOW
+1E76;1E76;0055 032D;1E76;0055 032D; # (Ṷ; Ṷ; U◌̭; Ṷ; U◌̭; ) LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E77;1E77;0075 032D;1E77;0075 032D; # (ṷ; ṷ; u◌̭; ṷ; u◌̭; ) LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E78;1E78;0055 0303 0301;1E78;0055 0303 0301; # (Ṹ; Ṹ; U◌̃◌́; Ṹ; U◌̃◌́; ) LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E79;1E79;0075 0303 0301;1E79;0075 0303 0301; # (ṹ; ṹ; u◌̃◌́; ṹ; u◌̃◌́; ) LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7A;1E7A;0055 0304 0308;1E7A;0055 0304 0308; # (Ṻ; Ṻ; U◌̄◌̈; Ṻ; U◌̄◌̈; ) LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7B;1E7B;0075 0304 0308;1E7B;0075 0304 0308; # (ṻ; ṻ; u◌̄◌̈; ṻ; u◌̄◌̈; ) LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7C;1E7C;0056 0303;1E7C;0056 0303; # (Ṽ; Ṽ; V◌̃; Ṽ; V◌̃; ) LATIN CAPITAL LETTER V WITH TILDE
+1E7D;1E7D;0076 0303;1E7D;0076 0303; # (ṽ; ṽ; v◌̃; ṽ; v◌̃; ) LATIN SMALL LETTER V WITH TILDE
+1E7E;1E7E;0056 0323;1E7E;0056 0323; # (Ṿ; Ṿ; V◌̣; Ṿ; V◌̣; ) LATIN CAPITAL LETTER V WITH DOT BELOW
+1E7F;1E7F;0076 0323;1E7F;0076 0323; # (ṿ; ṿ; v◌̣; ṿ; v◌̣; ) LATIN SMALL LETTER V WITH DOT BELOW
+1E80;1E80;0057 0300;1E80;0057 0300; # (Ẁ; Ẁ; W◌̀; Ẁ; W◌̀; ) LATIN CAPITAL LETTER W WITH GRAVE
+1E81;1E81;0077 0300;1E81;0077 0300; # (ẁ; ẁ; w◌̀; ẁ; w◌̀; ) LATIN SMALL LETTER W WITH GRAVE
+1E82;1E82;0057 0301;1E82;0057 0301; # (Ẃ; Ẃ; W◌́; Ẃ; W◌́; ) LATIN CAPITAL LETTER W WITH ACUTE
+1E83;1E83;0077 0301;1E83;0077 0301; # (ẃ; ẃ; w◌́; ẃ; w◌́; ) LATIN SMALL LETTER W WITH ACUTE
+1E84;1E84;0057 0308;1E84;0057 0308; # (Ẅ; Ẅ; W◌̈; Ẅ; W◌̈; ) LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85;1E85;0077 0308;1E85;0077 0308; # (ẅ; ẅ; w◌̈; ẅ; w◌̈; ) LATIN SMALL LETTER W WITH DIAERESIS
+1E86;1E86;0057 0307;1E86;0057 0307; # (Ẇ; Ẇ; W◌̇; Ẇ; W◌̇; ) LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E87;1E87;0077 0307;1E87;0077 0307; # (ẇ; ẇ; w◌̇; ẇ; w◌̇; ) LATIN SMALL LETTER W WITH DOT ABOVE
+1E88;1E88;0057 0323;1E88;0057 0323; # (Ẉ; Ẉ; W◌̣; Ẉ; W◌̣; ) LATIN CAPITAL LETTER W WITH DOT BELOW
+1E89;1E89;0077 0323;1E89;0077 0323; # (ẉ; ẉ; w◌̣; ẉ; w◌̣; ) LATIN SMALL LETTER W WITH DOT BELOW
+1E8A;1E8A;0058 0307;1E8A;0058 0307; # (Ẋ; Ẋ; X◌̇; Ẋ; X◌̇; ) LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8B;1E8B;0078 0307;1E8B;0078 0307; # (ẋ; ẋ; x◌̇; ẋ; x◌̇; ) LATIN SMALL LETTER X WITH DOT ABOVE
+1E8C;1E8C;0058 0308;1E8C;0058 0308; # (Ẍ; Ẍ; X◌̈; Ẍ; X◌̈; ) LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8D;1E8D;0078 0308;1E8D;0078 0308; # (ẍ; ẍ; x◌̈; ẍ; x◌̈; ) LATIN SMALL LETTER X WITH DIAERESIS
+1E8E;1E8E;0059 0307;1E8E;0059 0307; # (Ẏ; Ẏ; Y◌̇; Ẏ; Y◌̇; ) LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E8F;1E8F;0079 0307;1E8F;0079 0307; # (ẏ; ẏ; y◌̇; ẏ; y◌̇; ) LATIN SMALL LETTER Y WITH DOT ABOVE
+1E90;1E90;005A 0302;1E90;005A 0302; # (Ẑ; Ẑ; Z◌̂; Ẑ; Z◌̂; ) LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E91;1E91;007A 0302;1E91;007A 0302; # (ẑ; ẑ; z◌̂; ẑ; z◌̂; ) LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E92;1E92;005A 0323;1E92;005A 0323; # (Ẓ; Ẓ; Z◌̣; Ẓ; Z◌̣; ) LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E93;1E93;007A 0323;1E93;007A 0323; # (ẓ; ẓ; z◌̣; ẓ; z◌̣; ) LATIN SMALL LETTER Z WITH DOT BELOW
+1E94;1E94;005A 0331;1E94;005A 0331; # (Ẕ; Ẕ; Z◌̱; Ẕ; Z◌̱; ) LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E95;1E95;007A 0331;1E95;007A 0331; # (ẕ; ẕ; z◌̱; ẕ; z◌̱; ) LATIN SMALL LETTER Z WITH LINE BELOW
+1E96;1E96;0068 0331;1E96;0068 0331; # (ẖ; ẖ; h◌̱; ẖ; h◌̱; ) LATIN SMALL LETTER H WITH LINE BELOW
+1E97;1E97;0074 0308;1E97;0074 0308; # (ẗ; ẗ; t◌̈; ẗ; t◌̈; ) LATIN SMALL LETTER T WITH DIAERESIS
+1E98;1E98;0077 030A;1E98;0077 030A; # (ẘ; ẘ; w◌̊; ẘ; w◌̊; ) LATIN SMALL LETTER W WITH RING ABOVE
+1E99;1E99;0079 030A;1E99;0079 030A; # (ẙ; ẙ; y◌̊; ẙ; y◌̊; ) LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A;1E9A;1E9A;0061 02BE;0061 02BE; # (ẚ; ẚ; ẚ; aʾ; aʾ; ) LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B;1E9B;017F 0307;1E61;0073 0307; # (ẛ; ẛ; ſ◌̇; ṡ; s◌̇; ) LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0;1EA0;0041 0323;1EA0;0041 0323; # (Ạ; Ạ; A◌̣; Ạ; A◌̣; ) LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA1;1EA1;0061 0323;1EA1;0061 0323; # (ạ; ạ; a◌̣; ạ; a◌̣; ) LATIN SMALL LETTER A WITH DOT BELOW
+1EA2;1EA2;0041 0309;1EA2;0041 0309; # (Ả; Ả; A◌̉; Ả; A◌̉; ) LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA3;1EA3;0061 0309;1EA3;0061 0309; # (ả; ả; a◌̉; ả; a◌̉; ) LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA4;1EA4;0041 0302 0301;1EA4;0041 0302 0301; # (Ấ; Ấ; A◌̂◌́; Ấ; A◌̂◌́; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA5;1EA5;0061 0302 0301;1EA5;0061 0302 0301; # (ấ; ấ; a◌̂◌́; ấ; a◌̂◌́; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6;1EA6;0041 0302 0300;1EA6;0041 0302 0300; # (Ầ; Ầ; A◌̂◌̀; Ầ; A◌̂◌̀; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA7;1EA7;0061 0302 0300;1EA7;0061 0302 0300; # (ầ; ầ; a◌̂◌̀; ầ; a◌̂◌̀; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8;1EA8;0041 0302 0309;1EA8;0041 0302 0309; # (Ẩ; Ẩ; A◌̂◌̉; Ẩ; A◌̂◌̉; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EA9;1EA9;0061 0302 0309;1EA9;0061 0302 0309; # (ẩ; ẩ; a◌̂◌̉; ẩ; a◌̂◌̉; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA;1EAA;0041 0302 0303;1EAA;0041 0302 0303; # (Ẫ; Ẫ; A◌̂◌̃; Ẫ; A◌̂◌̃; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAB;1EAB;0061 0302 0303;1EAB;0061 0302 0303; # (ẫ; ẫ; a◌̂◌̃; ẫ; a◌̂◌̃; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC;1EAC;0041 0323 0302;1EAC;0041 0323 0302; # (Ậ; Ậ; A◌̣◌̂; Ậ; A◌̣◌̂; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAD;1EAD;0061 0323 0302;1EAD;0061 0323 0302; # (ậ; ậ; a◌̣◌̂; ậ; a◌̣◌̂; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE;1EAE;0041 0306 0301;1EAE;0041 0306 0301; # (Ắ; Ắ; A◌̆◌́; Ắ; A◌̆◌́; ) LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EAF;1EAF;0061 0306 0301;1EAF;0061 0306 0301; # (ắ; ắ; a◌̆◌́; ắ; a◌̆◌́; ) LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB0;1EB0;0041 0306 0300;1EB0;0041 0306 0300; # (Ằ; Ằ; A◌̆◌̀; Ằ; A◌̆◌̀; ) LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB1;1EB1;0061 0306 0300;1EB1;0061 0306 0300; # (ằ; ằ; a◌̆◌̀; ằ; a◌̆◌̀; ) LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB2;1EB2;0041 0306 0309;1EB2;0041 0306 0309; # (Ẳ; Ẳ; A◌̆◌̉; Ẳ; A◌̆◌̉; ) LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB3;1EB3;0061 0306 0309;1EB3;0061 0306 0309; # (ẳ; ẳ; a◌̆◌̉; ẳ; a◌̆◌̉; ) LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4;1EB4;0041 0306 0303;1EB4;0041 0306 0303; # (Ẵ; Ẵ; A◌̆◌̃; Ẵ; A◌̆◌̃; ) LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB5;1EB5;0061 0306 0303;1EB5;0061 0306 0303; # (ẵ; ẵ; a◌̆◌̃; ẵ; a◌̆◌̃; ) LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB6;1EB6;0041 0323 0306;1EB6;0041 0323 0306; # (Ặ; Ặ; A◌̣◌̆; Ặ; A◌̣◌̆; ) LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB7;1EB7;0061 0323 0306;1EB7;0061 0323 0306; # (ặ; ặ; a◌̣◌̆; ặ; a◌̣◌̆; ) LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB8;1EB8;0045 0323;1EB8;0045 0323; # (Ẹ; Ẹ; E◌̣; Ẹ; E◌̣; ) LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9;1EB9;0065 0323;1EB9;0065 0323; # (ẹ; ẹ; e◌̣; ẹ; e◌̣; ) LATIN SMALL LETTER E WITH DOT BELOW
+1EBA;1EBA;0045 0309;1EBA;0045 0309; # (Ẻ; Ẻ; E◌̉; Ẻ; E◌̉; ) LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBB;1EBB;0065 0309;1EBB;0065 0309; # (ẻ; ẻ; e◌̉; ẻ; e◌̉; ) LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBC;1EBC;0045 0303;1EBC;0045 0303; # (Ẽ; Ẽ; E◌̃; Ẽ; E◌̃; ) LATIN CAPITAL LETTER E WITH TILDE
+1EBD;1EBD;0065 0303;1EBD;0065 0303; # (ẽ; ẽ; e◌̃; ẽ; e◌̃; ) LATIN SMALL LETTER E WITH TILDE
+1EBE;1EBE;0045 0302 0301;1EBE;0045 0302 0301; # (Ế; Ế; E◌̂◌́; Ế; E◌̂◌́; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBF;1EBF;0065 0302 0301;1EBF;0065 0302 0301; # (ế; ế; e◌̂◌́; ế; e◌̂◌́; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0;1EC0;0045 0302 0300;1EC0;0045 0302 0300; # (Ề; Ề; E◌̂◌̀; Ề; E◌̂◌̀; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC1;1EC1;0065 0302 0300;1EC1;0065 0302 0300; # (ề; ề; e◌̂◌̀; ề; e◌̂◌̀; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2;1EC2;0045 0302 0309;1EC2;0045 0302 0309; # (Ể; Ể; E◌̂◌̉; Ể; E◌̂◌̉; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC3;1EC3;0065 0302 0309;1EC3;0065 0302 0309; # (ể; ể; e◌̂◌̉; ể; e◌̂◌̉; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4;1EC4;0045 0302 0303;1EC4;0045 0302 0303; # (Ễ; Ễ; E◌̂◌̃; Ễ; E◌̂◌̃; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC5;1EC5;0065 0302 0303;1EC5;0065 0302 0303; # (ễ; ễ; e◌̂◌̃; ễ; e◌̂◌̃; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6;1EC6;0045 0323 0302;1EC6;0045 0323 0302; # (Ệ; Ệ; E◌̣◌̂; Ệ; E◌̣◌̂; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC7;1EC7;0065 0323 0302;1EC7;0065 0323 0302; # (ệ; ệ; e◌̣◌̂; ệ; e◌̣◌̂; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8;1EC8;0049 0309;1EC8;0049 0309; # (Ỉ; Ỉ; I◌̉; Ỉ; I◌̉; ) LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1EC9;1EC9;0069 0309;1EC9;0069 0309; # (ỉ; ỉ; i◌̉; ỉ; i◌̉; ) LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECA;1ECA;0049 0323;1ECA;0049 0323; # (Ị; Ị; I◌̣; Ị; I◌̣; ) LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECB;1ECB;0069 0323;1ECB;0069 0323; # (ị; ị; i◌̣; ị; i◌̣; ) LATIN SMALL LETTER I WITH DOT BELOW
+1ECC;1ECC;004F 0323;1ECC;004F 0323; # (Ọ; Ọ; O◌̣; Ọ; O◌̣; ) LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD;1ECD;006F 0323;1ECD;006F 0323; # (ọ; ọ; o◌̣; ọ; o◌̣; ) LATIN SMALL LETTER O WITH DOT BELOW
+1ECE;1ECE;004F 0309;1ECE;004F 0309; # (Ỏ; Ỏ; O◌̉; Ỏ; O◌̉; ) LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ECF;1ECF;006F 0309;1ECF;006F 0309; # (ỏ; ỏ; o◌̉; ỏ; o◌̉; ) LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED0;1ED0;004F 0302 0301;1ED0;004F 0302 0301; # (Ố; Ố; O◌̂◌́; Ố; O◌̂◌́; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED1;1ED1;006F 0302 0301;1ED1;006F 0302 0301; # (ố; ố; o◌̂◌́; ố; o◌̂◌́; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2;1ED2;004F 0302 0300;1ED2;004F 0302 0300; # (Ồ; Ồ; O◌̂◌̀; Ồ; O◌̂◌̀; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED3;1ED3;006F 0302 0300;1ED3;006F 0302 0300; # (ồ; ồ; o◌̂◌̀; ồ; o◌̂◌̀; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4;1ED4;004F 0302 0309;1ED4;004F 0302 0309; # (Ổ; Ổ; O◌̂◌̉; Ổ; O◌̂◌̉; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED5;1ED5;006F 0302 0309;1ED5;006F 0302 0309; # (ổ; ổ; o◌̂◌̉; ổ; o◌̂◌̉; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6;1ED6;004F 0302 0303;1ED6;004F 0302 0303; # (Ỗ; Ỗ; O◌̂◌̃; Ỗ; O◌̂◌̃; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED7;1ED7;006F 0302 0303;1ED7;006F 0302 0303; # (ỗ; ỗ; o◌̂◌̃; ỗ; o◌̂◌̃; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8;1ED8;004F 0323 0302;1ED8;004F 0323 0302; # (Ộ; Ộ; O◌̣◌̂; Ộ; O◌̣◌̂; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED9;1ED9;006F 0323 0302;1ED9;006F 0323 0302; # (ộ; ộ; o◌̣◌̂; ộ; o◌̣◌̂; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA;1EDA;004F 031B 0301;1EDA;004F 031B 0301; # (Ớ; Ớ; O◌̛◌́; Ớ; O◌̛◌́; ) LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDB;1EDB;006F 031B 0301;1EDB;006F 031B 0301; # (ớ; ớ; o◌̛◌́; ớ; o◌̛◌́; ) LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDC;1EDC;004F 031B 0300;1EDC;004F 031B 0300; # (Ờ; Ờ; O◌̛◌̀; Ờ; O◌̛◌̀; ) LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDD;1EDD;006F 031B 0300;1EDD;006F 031B 0300; # (ờ; ờ; o◌̛◌̀; ờ; o◌̛◌̀; ) LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDE;1EDE;004F 031B 0309;1EDE;004F 031B 0309; # (Ở; Ở; O◌̛◌̉; Ở; O◌̛◌̉; ) LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EDF;1EDF;006F 031B 0309;1EDF;006F 031B 0309; # (ở; ở; o◌̛◌̉; ở; o◌̛◌̉; ) LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE0;1EE0;004F 031B 0303;1EE0;004F 031B 0303; # (Ỡ; Ỡ; O◌̛◌̃; Ỡ; O◌̛◌̃; ) LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE1;1EE1;006F 031B 0303;1EE1;006F 031B 0303; # (ỡ; ỡ; o◌̛◌̃; ỡ; o◌̛◌̃; ) LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE2;1EE2;004F 031B 0323;1EE2;004F 031B 0323; # (Ợ; Ợ; O◌̛◌̣; Ợ; O◌̛◌̣; ) LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE3;1EE3;006F 031B 0323;1EE3;006F 031B 0323; # (ợ; ợ; o◌̛◌̣; ợ; o◌̛◌̣; ) LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE4;1EE4;0055 0323;1EE4;0055 0323; # (Ụ; Ụ; U◌̣; Ụ; U◌̣; ) LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE5;1EE5;0075 0323;1EE5;0075 0323; # (ụ; ụ; u◌̣; ụ; u◌̣; ) LATIN SMALL LETTER U WITH DOT BELOW
+1EE6;1EE6;0055 0309;1EE6;0055 0309; # (Ủ; Ủ; U◌̉; Ủ; U◌̉; ) LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE7;1EE7;0075 0309;1EE7;0075 0309; # (ủ; ủ; u◌̉; ủ; u◌̉; ) LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE8;1EE8;0055 031B 0301;1EE8;0055 031B 0301; # (Ứ; Ứ; U◌̛◌́; Ứ; U◌̛◌́; ) LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EE9;1EE9;0075 031B 0301;1EE9;0075 031B 0301; # (ứ; ứ; u◌̛◌́; ứ; u◌̛◌́; ) LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEA;1EEA;0055 031B 0300;1EEA;0055 031B 0300; # (Ừ; Ừ; U◌̛◌̀; Ừ; U◌̛◌̀; ) LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEB;1EEB;0075 031B 0300;1EEB;0075 031B 0300; # (ừ; ừ; u◌̛◌̀; ừ; u◌̛◌̀; ) LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EEC;1EEC;0055 031B 0309;1EEC;0055 031B 0309; # (Ử; Ử; U◌̛◌̉; Ử; U◌̛◌̉; ) LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EED;1EED;0075 031B 0309;1EED;0075 031B 0309; # (ử; ử; u◌̛◌̉; ử; u◌̛◌̉; ) LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEE;1EEE;0055 031B 0303;1EEE;0055 031B 0303; # (Ữ; Ữ; U◌̛◌̃; Ữ; U◌̛◌̃; ) LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EEF;1EEF;0075 031B 0303;1EEF;0075 031B 0303; # (ữ; ữ; u◌̛◌̃; ữ; u◌̛◌̃; ) LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF0;1EF0;0055 031B 0323;1EF0;0055 031B 0323; # (Ự; Ự; U◌̛◌̣; Ự; U◌̛◌̣; ) LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF1;1EF1;0075 031B 0323;1EF1;0075 031B 0323; # (ự; ự; u◌̛◌̣; ự; u◌̛◌̣; ) LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF2;1EF2;0059 0300;1EF2;0059 0300; # (Ỳ; Ỳ; Y◌̀; Ỳ; Y◌̀; ) LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3;1EF3;0079 0300;1EF3;0079 0300; # (ỳ; ỳ; y◌̀; ỳ; y◌̀; ) LATIN SMALL LETTER Y WITH GRAVE
+1EF4;1EF4;0059 0323;1EF4;0059 0323; # (Ỵ; Ỵ; Y◌̣; Ỵ; Y◌̣; ) LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF5;1EF5;0079 0323;1EF5;0079 0323; # (ỵ; ỵ; y◌̣; ỵ; y◌̣; ) LATIN SMALL LETTER Y WITH DOT BELOW
+1EF6;1EF6;0059 0309;1EF6;0059 0309; # (Ỷ; Ỷ; Y◌̉; Ỷ; Y◌̉; ) LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF7;1EF7;0079 0309;1EF7;0079 0309; # (ỷ; ỷ; y◌̉; ỷ; y◌̉; ) LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF8;1EF8;0059 0303;1EF8;0059 0303; # (Ỹ; Ỹ; Y◌̃; Ỹ; Y◌̃; ) LATIN CAPITAL LETTER Y WITH TILDE
+1EF9;1EF9;0079 0303;1EF9;0079 0303; # (ỹ; ỹ; y◌̃; ỹ; y◌̃; ) LATIN SMALL LETTER Y WITH TILDE
+1F00;1F00;03B1 0313;1F00;03B1 0313; # (ἀ; ἀ; α◌̓; ἀ; α◌̓; ) GREEK SMALL LETTER ALPHA WITH PSILI
+1F01;1F01;03B1 0314;1F01;03B1 0314; # (ἁ; ἁ; α◌̔; ἁ; α◌̔; ) GREEK SMALL LETTER ALPHA WITH DASIA
+1F02;1F02;03B1 0313 0300;1F02;03B1 0313 0300; # (ἂ; ἂ; α◌̓◌̀; ἂ; α◌̓◌̀; ) GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+1F03;1F03;03B1 0314 0300;1F03;03B1 0314 0300; # (ἃ; ἃ; α◌̔◌̀; ἃ; α◌̔◌̀; ) GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+1F04;1F04;03B1 0313 0301;1F04;03B1 0313 0301; # (ἄ; ἄ; α◌̓◌́; ἄ; α◌̓◌́; ) GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+1F05;1F05;03B1 0314 0301;1F05;03B1 0314 0301; # (ἅ; ἅ; α◌̔◌́; ἅ; α◌̔◌́; ) GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+1F06;1F06;03B1 0313 0342;1F06;03B1 0313 0342; # (ἆ; ἆ; α◌̓◌͂; ἆ; α◌̓◌͂; ) GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F07;1F07;03B1 0314 0342;1F07;03B1 0314 0342; # (ἇ; ἇ; α◌̔◌͂; ἇ; α◌̔◌͂; ) GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F08;1F08;0391 0313;1F08;0391 0313; # (Ἀ; Ἀ; Α◌̓; Ἀ; Α◌̓; ) GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09;1F09;0391 0314;1F09;0391 0314; # (Ἁ; Ἁ; Α◌̔; Ἁ; Α◌̔; ) GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A;1F0A;0391 0313 0300;1F0A;0391 0313 0300; # (Ἂ; Ἂ; Α◌̓◌̀; Ἂ; Α◌̓◌̀; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B;1F0B;0391 0314 0300;1F0B;0391 0314 0300; # (Ἃ; Ἃ; Α◌̔◌̀; Ἃ; Α◌̔◌̀; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C;1F0C;0391 0313 0301;1F0C;0391 0313 0301; # (Ἄ; Ἄ; Α◌̓◌́; Ἄ; Α◌̓◌́; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D;1F0D;0391 0314 0301;1F0D;0391 0314 0301; # (Ἅ; Ἅ; Α◌̔◌́; Ἅ; Α◌̔◌́; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E;1F0E;0391 0313 0342;1F0E;0391 0313 0342; # (Ἆ; Ἆ; Α◌̓◌͂; Ἆ; Α◌̓◌͂; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F;1F0F;0391 0314 0342;1F0F;0391 0314 0342; # (Ἇ; Ἇ; Α◌̔◌͂; Ἇ; Α◌̔◌͂; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10;1F10;03B5 0313;1F10;03B5 0313; # (ἐ; ἐ; ε◌̓; ἐ; ε◌̓; ) GREEK SMALL LETTER EPSILON WITH PSILI
+1F11;1F11;03B5 0314;1F11;03B5 0314; # (ἑ; ἑ; ε◌̔; ἑ; ε◌̔; ) GREEK SMALL LETTER EPSILON WITH DASIA
+1F12;1F12;03B5 0313 0300;1F12;03B5 0313 0300; # (ἒ; ἒ; ε◌̓◌̀; ἒ; ε◌̓◌̀; ) GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+1F13;1F13;03B5 0314 0300;1F13;03B5 0314 0300; # (ἓ; ἓ; ε◌̔◌̀; ἓ; ε◌̔◌̀; ) GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+1F14;1F14;03B5 0313 0301;1F14;03B5 0313 0301; # (ἔ; ἔ; ε◌̓◌́; ἔ; ε◌̓◌́; ) GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+1F15;1F15;03B5 0314 0301;1F15;03B5 0314 0301; # (ἕ; ἕ; ε◌̔◌́; ἕ; ε◌̔◌́; ) GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18;1F18;0395 0313;1F18;0395 0313; # (Ἐ; Ἐ; Ε◌̓; Ἐ; Ε◌̓; ) GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19;1F19;0395 0314;1F19;0395 0314; # (Ἑ; Ἑ; Ε◌̔; Ἑ; Ε◌̔; ) GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A;1F1A;0395 0313 0300;1F1A;0395 0313 0300; # (Ἒ; Ἒ; Ε◌̓◌̀; Ἒ; Ε◌̓◌̀; ) GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B;1F1B;0395 0314 0300;1F1B;0395 0314 0300; # (Ἓ; Ἓ; Ε◌̔◌̀; Ἓ; Ε◌̔◌̀; ) GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C;1F1C;0395 0313 0301;1F1C;0395 0313 0301; # (Ἔ; Ἔ; Ε◌̓◌́; Ἔ; Ε◌̓◌́; ) GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D;1F1D;0395 0314 0301;1F1D;0395 0314 0301; # (Ἕ; Ἕ; Ε◌̔◌́; Ἕ; Ε◌̔◌́; ) GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20;1F20;03B7 0313;1F20;03B7 0313; # (ἠ; ἠ; η◌̓; ἠ; η◌̓; ) GREEK SMALL LETTER ETA WITH PSILI
+1F21;1F21;03B7 0314;1F21;03B7 0314; # (ἡ; ἡ; η◌̔; ἡ; η◌̔; ) GREEK SMALL LETTER ETA WITH DASIA
+1F22;1F22;03B7 0313 0300;1F22;03B7 0313 0300; # (ἢ; ἢ; η◌̓◌̀; ἢ; η◌̓◌̀; ) GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+1F23;1F23;03B7 0314 0300;1F23;03B7 0314 0300; # (ἣ; ἣ; η◌̔◌̀; ἣ; η◌̔◌̀; ) GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+1F24;1F24;03B7 0313 0301;1F24;03B7 0313 0301; # (ἤ; ἤ; η◌̓◌́; ἤ; η◌̓◌́; ) GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+1F25;1F25;03B7 0314 0301;1F25;03B7 0314 0301; # (ἥ; ἥ; η◌̔◌́; ἥ; η◌̔◌́; ) GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+1F26;1F26;03B7 0313 0342;1F26;03B7 0313 0342; # (ἦ; ἦ; η◌̓◌͂; ἦ; η◌̓◌͂; ) GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+1F27;1F27;03B7 0314 0342;1F27;03B7 0314 0342; # (ἧ; ἧ; η◌̔◌͂; ἧ; η◌̔◌͂; ) GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F28;1F28;0397 0313;1F28;0397 0313; # (Ἠ; Ἠ; Η◌̓; Ἠ; Η◌̓; ) GREEK CAPITAL LETTER ETA WITH PSILI
+1F29;1F29;0397 0314;1F29;0397 0314; # (Ἡ; Ἡ; Η◌̔; Ἡ; Η◌̔; ) GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A;1F2A;0397 0313 0300;1F2A;0397 0313 0300; # (Ἢ; Ἢ; Η◌̓◌̀; Ἢ; Η◌̓◌̀; ) GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B;1F2B;0397 0314 0300;1F2B;0397 0314 0300; # (Ἣ; Ἣ; Η◌̔◌̀; Ἣ; Η◌̔◌̀; ) GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C;1F2C;0397 0313 0301;1F2C;0397 0313 0301; # (Ἤ; Ἤ; Η◌̓◌́; Ἤ; Η◌̓◌́; ) GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D;1F2D;0397 0314 0301;1F2D;0397 0314 0301; # (Ἥ; Ἥ; Η◌̔◌́; Ἥ; Η◌̔◌́; ) GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E;1F2E;0397 0313 0342;1F2E;0397 0313 0342; # (Ἦ; Ἦ; Η◌̓◌͂; Ἦ; Η◌̓◌͂; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F;1F2F;0397 0314 0342;1F2F;0397 0314 0342; # (Ἧ; Ἧ; Η◌̔◌͂; Ἧ; Η◌̔◌͂; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30;1F30;03B9 0313;1F30;03B9 0313; # (ἰ; ἰ; ι◌̓; ἰ; ι◌̓; ) GREEK SMALL LETTER IOTA WITH PSILI
+1F31;1F31;03B9 0314;1F31;03B9 0314; # (ἱ; ἱ; ι◌̔; ἱ; ι◌̔; ) GREEK SMALL LETTER IOTA WITH DASIA
+1F32;1F32;03B9 0313 0300;1F32;03B9 0313 0300; # (ἲ; ἲ; ι◌̓◌̀; ἲ; ι◌̓◌̀; ) GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+1F33;1F33;03B9 0314 0300;1F33;03B9 0314 0300; # (ἳ; ἳ; ι◌̔◌̀; ἳ; ι◌̔◌̀; ) GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+1F34;1F34;03B9 0313 0301;1F34;03B9 0313 0301; # (ἴ; ἴ; ι◌̓◌́; ἴ; ι◌̓◌́; ) GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+1F35;1F35;03B9 0314 0301;1F35;03B9 0314 0301; # (ἵ; ἵ; ι◌̔◌́; ἵ; ι◌̔◌́; ) GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+1F36;1F36;03B9 0313 0342;1F36;03B9 0313 0342; # (ἶ; ἶ; ι◌̓◌͂; ἶ; ι◌̓◌͂; ) GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F37;1F37;03B9 0314 0342;1F37;03B9 0314 0342; # (ἷ; ἷ; ι◌̔◌͂; ἷ; ι◌̔◌͂; ) GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F38;1F38;0399 0313;1F38;0399 0313; # (Ἰ; Ἰ; Ι◌̓; Ἰ; Ι◌̓; ) GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39;1F39;0399 0314;1F39;0399 0314; # (Ἱ; Ἱ; Ι◌̔; Ἱ; Ι◌̔; ) GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A;1F3A;0399 0313 0300;1F3A;0399 0313 0300; # (Ἲ; Ἲ; Ι◌̓◌̀; Ἲ; Ι◌̓◌̀; ) GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B;1F3B;0399 0314 0300;1F3B;0399 0314 0300; # (Ἳ; Ἳ; Ι◌̔◌̀; Ἳ; Ι◌̔◌̀; ) GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C;1F3C;0399 0313 0301;1F3C;0399 0313 0301; # (Ἴ; Ἴ; Ι◌̓◌́; Ἴ; Ι◌̓◌́; ) GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D;1F3D;0399 0314 0301;1F3D;0399 0314 0301; # (Ἵ; Ἵ; Ι◌̔◌́; Ἵ; Ι◌̔◌́; ) GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E;1F3E;0399 0313 0342;1F3E;0399 0313 0342; # (Ἶ; Ἶ; Ι◌̓◌͂; Ἶ; Ι◌̓◌͂; ) GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F;1F3F;0399 0314 0342;1F3F;0399 0314 0342; # (Ἷ; Ἷ; Ι◌̔◌͂; Ἷ; Ι◌̔◌͂; ) GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40;1F40;03BF 0313;1F40;03BF 0313; # (ὀ; ὀ; ο◌̓; ὀ; ο◌̓; ) GREEK SMALL LETTER OMICRON WITH PSILI
+1F41;1F41;03BF 0314;1F41;03BF 0314; # (ὁ; ὁ; ο◌̔; ὁ; ο◌̔; ) GREEK SMALL LETTER OMICRON WITH DASIA
+1F42;1F42;03BF 0313 0300;1F42;03BF 0313 0300; # (ὂ; ὂ; ο◌̓◌̀; ὂ; ο◌̓◌̀; ) GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+1F43;1F43;03BF 0314 0300;1F43;03BF 0314 0300; # (ὃ; ὃ; ο◌̔◌̀; ὃ; ο◌̔◌̀; ) GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+1F44;1F44;03BF 0313 0301;1F44;03BF 0313 0301; # (ὄ; ὄ; ο◌̓◌́; ὄ; ο◌̓◌́; ) GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+1F45;1F45;03BF 0314 0301;1F45;03BF 0314 0301; # (ὅ; ὅ; ο◌̔◌́; ὅ; ο◌̔◌́; ) GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48;1F48;039F 0313;1F48;039F 0313; # (Ὀ; Ὀ; Ο◌̓; Ὀ; Ο◌̓; ) GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49;1F49;039F 0314;1F49;039F 0314; # (Ὁ; Ὁ; Ο◌̔; Ὁ; Ο◌̔; ) GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A;1F4A;039F 0313 0300;1F4A;039F 0313 0300; # (Ὂ; Ὂ; Ο◌̓◌̀; Ὂ; Ο◌̓◌̀; ) GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B;1F4B;039F 0314 0300;1F4B;039F 0314 0300; # (Ὃ; Ὃ; Ο◌̔◌̀; Ὃ; Ο◌̔◌̀; ) GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C;1F4C;039F 0313 0301;1F4C;039F 0313 0301; # (Ὄ; Ὄ; Ο◌̓◌́; Ὄ; Ο◌̓◌́; ) GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D;1F4D;039F 0314 0301;1F4D;039F 0314 0301; # (Ὅ; Ὅ; Ο◌̔◌́; Ὅ; Ο◌̔◌́; ) GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50;1F50;03C5 0313;1F50;03C5 0313; # (ὐ; ὐ; υ◌̓; ὐ; υ◌̓; ) GREEK SMALL LETTER UPSILON WITH PSILI
+1F51;1F51;03C5 0314;1F51;03C5 0314; # (ὑ; ὑ; υ◌̔; ὑ; υ◌̔; ) GREEK SMALL LETTER UPSILON WITH DASIA
+1F52;1F52;03C5 0313 0300;1F52;03C5 0313 0300; # (ὒ; ὒ; υ◌̓◌̀; ὒ; υ◌̓◌̀; ) GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F53;1F53;03C5 0314 0300;1F53;03C5 0314 0300; # (ὓ; ὓ; υ◌̔◌̀; ὓ; υ◌̔◌̀; ) GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+1F54;1F54;03C5 0313 0301;1F54;03C5 0313 0301; # (ὔ; ὔ; υ◌̓◌́; ὔ; υ◌̓◌́; ) GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F55;1F55;03C5 0314 0301;1F55;03C5 0314 0301; # (ὕ; ὕ; υ◌̔◌́; ὕ; υ◌̔◌́; ) GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+1F56;1F56;03C5 0313 0342;1F56;03C5 0313 0342; # (ὖ; ὖ; υ◌̓◌͂; ὖ; υ◌̓◌͂; ) GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F57;1F57;03C5 0314 0342;1F57;03C5 0314 0342; # (ὗ; ὗ; υ◌̔◌͂; ὗ; υ◌̔◌͂; ) GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59;1F59;03A5 0314;1F59;03A5 0314; # (Ὑ; Ὑ; Υ◌̔; Ὑ; Υ◌̔; ) GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B;1F5B;03A5 0314 0300;1F5B;03A5 0314 0300; # (Ὓ; Ὓ; Υ◌̔◌̀; Ὓ; Υ◌̔◌̀; ) GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D;1F5D;03A5 0314 0301;1F5D;03A5 0314 0301; # (Ὕ; Ὕ; Υ◌̔◌́; Ὕ; Υ◌̔◌́; ) GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F;1F5F;03A5 0314 0342;1F5F;03A5 0314 0342; # (Ὗ; Ὗ; Υ◌̔◌͂; Ὗ; Υ◌̔◌͂; ) GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60;1F60;03C9 0313;1F60;03C9 0313; # (ὠ; ὠ; ω◌̓; ὠ; ω◌̓; ) GREEK SMALL LETTER OMEGA WITH PSILI
+1F61;1F61;03C9 0314;1F61;03C9 0314; # (ὡ; ὡ; ω◌̔; ὡ; ω◌̔; ) GREEK SMALL LETTER OMEGA WITH DASIA
+1F62;1F62;03C9 0313 0300;1F62;03C9 0313 0300; # (ὢ; ὢ; ω◌̓◌̀; ὢ; ω◌̓◌̀; ) GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+1F63;1F63;03C9 0314 0300;1F63;03C9 0314 0300; # (ὣ; ὣ; ω◌̔◌̀; ὣ; ω◌̔◌̀; ) GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+1F64;1F64;03C9 0313 0301;1F64;03C9 0313 0301; # (ὤ; ὤ; ω◌̓◌́; ὤ; ω◌̓◌́; ) GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+1F65;1F65;03C9 0314 0301;1F65;03C9 0314 0301; # (ὥ; ὥ; ω◌̔◌́; ὥ; ω◌̔◌́; ) GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+1F66;1F66;03C9 0313 0342;1F66;03C9 0313 0342; # (ὦ; ὦ; ω◌̓◌͂; ὦ; ω◌̓◌͂; ) GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F67;1F67;03C9 0314 0342;1F67;03C9 0314 0342; # (ὧ; ὧ; ω◌̔◌͂; ὧ; ω◌̔◌͂; ) GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F68;1F68;03A9 0313;1F68;03A9 0313; # (Ὠ; Ὠ; Ω◌̓; Ὠ; Ω◌̓; ) GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69;1F69;03A9 0314;1F69;03A9 0314; # (Ὡ; Ὡ; Ω◌̔; Ὡ; Ω◌̔; ) GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A;1F6A;03A9 0313 0300;1F6A;03A9 0313 0300; # (Ὢ; Ὢ; Ω◌̓◌̀; Ὢ; Ω◌̓◌̀; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B;1F6B;03A9 0314 0300;1F6B;03A9 0314 0300; # (Ὣ; Ὣ; Ω◌̔◌̀; Ὣ; Ω◌̔◌̀; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C;1F6C;03A9 0313 0301;1F6C;03A9 0313 0301; # (Ὤ; Ὤ; Ω◌̓◌́; Ὤ; Ω◌̓◌́; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D;1F6D;03A9 0314 0301;1F6D;03A9 0314 0301; # (Ὥ; Ὥ; Ω◌̔◌́; Ὥ; Ω◌̔◌́; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E;1F6E;03A9 0313 0342;1F6E;03A9 0313 0342; # (Ὦ; Ὦ; Ω◌̓◌͂; Ὦ; Ω◌̓◌͂; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F;1F6F;03A9 0314 0342;1F6F;03A9 0314 0342; # (Ὧ; Ὧ; Ω◌̔◌͂; Ὧ; Ω◌̔◌͂; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70;1F70;03B1 0300;1F70;03B1 0300; # (ὰ; ὰ; α◌̀; ὰ; α◌̀; ) GREEK SMALL LETTER ALPHA WITH VARIA
+1F71;03AC;03B1 0301;03AC;03B1 0301; # (ά; ά; α◌́; ά; α◌́; ) GREEK SMALL LETTER ALPHA WITH OXIA
+1F72;1F72;03B5 0300;1F72;03B5 0300; # (ὲ; ὲ; ε◌̀; ὲ; ε◌̀; ) GREEK SMALL LETTER EPSILON WITH VARIA
+1F73;03AD;03B5 0301;03AD;03B5 0301; # (έ; έ; ε◌́; έ; ε◌́; ) GREEK SMALL LETTER EPSILON WITH OXIA
+1F74;1F74;03B7 0300;1F74;03B7 0300; # (ὴ; ὴ; η◌̀; ὴ; η◌̀; ) GREEK SMALL LETTER ETA WITH VARIA
+1F75;03AE;03B7 0301;03AE;03B7 0301; # (ή; ή; η◌́; ή; η◌́; ) GREEK SMALL LETTER ETA WITH OXIA
+1F76;1F76;03B9 0300;1F76;03B9 0300; # (ὶ; ὶ; ι◌̀; ὶ; ι◌̀; ) GREEK SMALL LETTER IOTA WITH VARIA
+1F77;03AF;03B9 0301;03AF;03B9 0301; # (ί; ί; ι◌́; ί; ι◌́; ) GREEK SMALL LETTER IOTA WITH OXIA
+1F78;1F78;03BF 0300;1F78;03BF 0300; # (ὸ; ὸ; ο◌̀; ὸ; ο◌̀; ) GREEK SMALL LETTER OMICRON WITH VARIA
+1F79;03CC;03BF 0301;03CC;03BF 0301; # (ό; ό; ο◌́; ό; ο◌́; ) GREEK SMALL LETTER OMICRON WITH OXIA
+1F7A;1F7A;03C5 0300;1F7A;03C5 0300; # (ὺ; ὺ; υ◌̀; ὺ; υ◌̀; ) GREEK SMALL LETTER UPSILON WITH VARIA
+1F7B;03CD;03C5 0301;03CD;03C5 0301; # (ύ; ύ; υ◌́; ύ; υ◌́; ) GREEK SMALL LETTER UPSILON WITH OXIA
+1F7C;1F7C;03C9 0300;1F7C;03C9 0300; # (ὼ; ὼ; ω◌̀; ὼ; ω◌̀; ) GREEK SMALL LETTER OMEGA WITH VARIA
+1F7D;03CE;03C9 0301;03CE;03C9 0301; # (ώ; ώ; ω◌́; ώ; ω◌́; ) GREEK SMALL LETTER OMEGA WITH OXIA
+1F80;1F80;03B1 0313 0345;1F80;03B1 0313 0345; # (ᾀ; ᾀ; α◌̓◌ͅ; ᾀ; α◌̓◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81;1F81;03B1 0314 0345;1F81;03B1 0314 0345; # (ᾁ; ᾁ; α◌̔◌ͅ; ᾁ; α◌̔◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾂ; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ᾃ; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾄ; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ᾅ; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ᾆ; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; # (ᾇ; ᾇ; α◌̔◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88;1F88;0391 0313 0345;1F88;0391 0313 0345; # (ᾈ; ᾈ; Α◌̓◌ͅ; ᾈ; Α◌̓◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89;1F89;0391 0314 0345;1F89;0391 0314 0345; # (ᾉ; ᾉ; Α◌̔◌ͅ; ᾉ; Α◌̔◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾊ; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (ᾋ; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾌ; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (ᾍ; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (ᾎ; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; # (ᾏ; ᾏ; Α◌̔◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90;1F90;03B7 0313 0345;1F90;03B7 0313 0345; # (ᾐ; ᾐ; η◌̓◌ͅ; ᾐ; η◌̓◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91;1F91;03B7 0314 0345;1F91;03B7 0314 0345; # (ᾑ; ᾑ; η◌̔◌ͅ; ᾑ; η◌̔◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ᾒ; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ᾓ; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ᾔ; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ᾕ; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ᾖ; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; # (ᾗ; ᾗ; η◌̔◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98;1F98;0397 0313 0345;1F98;0397 0313 0345; # (ᾘ; ᾘ; Η◌̓◌ͅ; ᾘ; Η◌̓◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99;1F99;0397 0314 0345;1F99;0397 0314 0345; # (ᾙ; ᾙ; Η◌̔◌ͅ; ᾙ; Η◌̔◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ᾚ; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (ᾛ; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ᾜ; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (ᾝ; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (ᾞ; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; # (ᾟ; ᾟ; Η◌̔◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0;1FA0;03C9 0313 0345;1FA0;03C9 0313 0345; # (ᾠ; ᾠ; ω◌̓◌ͅ; ᾠ; ω◌̓◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1;1FA1;03C9 0314 0345;1FA1;03C9 0314 0345; # (ᾡ; ᾡ; ω◌̔◌ͅ; ᾡ; ω◌̔◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ᾢ; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ᾣ; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ᾤ; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ᾥ; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ᾦ; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; # (ᾧ; ᾧ; ω◌̔◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8;1FA8;03A9 0313 0345;1FA8;03A9 0313 0345; # (ᾨ; ᾨ; Ω◌̓◌ͅ; ᾨ; Ω◌̓◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9;1FA9;03A9 0314 0345;1FA9;03A9 0314 0345; # (ᾩ; ᾩ; Ω◌̔◌ͅ; ᾩ; Ω◌̔◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ᾪ; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (ᾫ; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ᾬ; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (ᾭ; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (ᾮ; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; # (ᾯ; ᾯ; Ω◌̔◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB0;1FB0;03B1 0306;1FB0;03B1 0306; # (ᾰ; ᾰ; α◌̆; ᾰ; α◌̆; ) GREEK SMALL LETTER ALPHA WITH VRACHY
+1FB1;1FB1;03B1 0304;1FB1;03B1 0304; # (ᾱ; ᾱ; α◌̄; ᾱ; α◌̄; ) GREEK SMALL LETTER ALPHA WITH MACRON
+1FB2;1FB2;03B1 0300 0345;1FB2;03B1 0300 0345; # (ᾲ; ᾲ; α◌̀◌ͅ; ᾲ; α◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3;1FB3;03B1 0345;1FB3;03B1 0345; # (ᾳ; ᾳ; α◌ͅ; ᾳ; α◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; # (ᾴ; ᾴ; α◌́◌ͅ; ᾴ; α◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6;1FB6;03B1 0342;1FB6;03B1 0342; # (ᾶ; ᾶ; α◌͂; ᾶ; α◌͂; ) GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7;1FB7;03B1 0342 0345;1FB7;03B1 0342 0345; # (ᾷ; ᾷ; α◌͂◌ͅ; ᾷ; α◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8;1FB8;0391 0306;1FB8;0391 0306; # (Ᾰ; Ᾰ; Α◌̆; Ᾰ; Α◌̆; ) GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9;1FB9;0391 0304;1FB9;0391 0304; # (Ᾱ; Ᾱ; Α◌̄; Ᾱ; Α◌̄; ) GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA;1FBA;0391 0300;1FBA;0391 0300; # (Ὰ; Ὰ; Α◌̀; Ὰ; Α◌̀; ) GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB;0386;0391 0301;0386;0391 0301; # (Ά; Ά; Α◌́; Ά; Α◌́; ) GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC;1FBC;0391 0345;1FBC;0391 0345; # (ᾼ; ᾼ; Α◌ͅ; ᾼ; Α◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD;1FBD;1FBD;0020 0313;0020 0313; # (᾽; ᾽; ᾽;  ◌̓;  ◌̓; ) GREEK KORONIS
+1FBE;03B9;03B9;03B9;03B9; # (ι; ι; ι; ι; ι; ) GREEK PROSGEGRAMMENI
+1FBF;1FBF;1FBF;0020 0313;0020 0313; # (᾿; ᾿; ᾿;  ◌̓;  ◌̓; ) GREEK PSILI
+1FC0;1FC0;1FC0;0020 0342;0020 0342; # (῀; ῀; ῀;  ◌͂;  ◌͂; ) GREEK PERISPOMENI
+1FC1;1FC1;00A8 0342;0020 0308 0342;0020 0308 0342; # (῁; ῁; ¨◌͂;  ◌̈◌͂;  ◌̈◌͂; ) GREEK DIALYTIKA AND PERISPOMENI
+1FC2;1FC2;03B7 0300 0345;1FC2;03B7 0300 0345; # (ῂ; ῂ; η◌̀◌ͅ; ῂ; η◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3;1FC3;03B7 0345;1FC3;03B7 0345; # (ῃ; ῃ; η◌ͅ; ῃ; η◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; # (ῄ; ῄ; η◌́◌ͅ; ῄ; η◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6;1FC6;03B7 0342;1FC6;03B7 0342; # (ῆ; ῆ; η◌͂; ῆ; η◌͂; ) GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7;1FC7;03B7 0342 0345;1FC7;03B7 0342 0345; # (ῇ; ῇ; η◌͂◌ͅ; ῇ; η◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8;1FC8;0395 0300;1FC8;0395 0300; # (Ὲ; Ὲ; Ε◌̀; Ὲ; Ε◌̀; ) GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9;0388;0395 0301;0388;0395 0301; # (Έ; Έ; Ε◌́; Έ; Ε◌́; ) GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA;1FCA;0397 0300;1FCA;0397 0300; # (Ὴ; Ὴ; Η◌̀; Ὴ; Η◌̀; ) GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB;0389;0397 0301;0389;0397 0301; # (Ή; Ή; Η◌́; Ή; Η◌́; ) GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC;1FCC;0397 0345;1FCC;0397 0345; # (ῌ; ῌ; Η◌ͅ; ῌ; Η◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD;1FCD;1FBF 0300;0020 0313 0300;0020 0313 0300; # (῍; ῍; ᾿◌̀;  ◌̓◌̀;  ◌̓◌̀; ) GREEK PSILI AND VARIA
+1FCE;1FCE;1FBF 0301;0020 0313 0301;0020 0313 0301; # (῎; ῎; ᾿◌́;  ◌̓◌́;  ◌̓◌́; ) GREEK PSILI AND OXIA
+1FCF;1FCF;1FBF 0342;0020 0313 0342;0020 0313 0342; # (῏; ῏; ᾿◌͂;  ◌̓◌͂;  ◌̓◌͂; ) GREEK PSILI AND PERISPOMENI
+1FD0;1FD0;03B9 0306;1FD0;03B9 0306; # (ῐ; ῐ; ι◌̆; ῐ; ι◌̆; ) GREEK SMALL LETTER IOTA WITH VRACHY
+1FD1;1FD1;03B9 0304;1FD1;03B9 0304; # (ῑ; ῑ; ι◌̄; ῑ; ι◌̄; ) GREEK SMALL LETTER IOTA WITH MACRON
+1FD2;1FD2;03B9 0308 0300;1FD2;03B9 0308 0300; # (ῒ; ῒ; ι◌̈◌̀; ῒ; ι◌̈◌̀; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ΐ; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6;1FD6;03B9 0342;1FD6;03B9 0342; # (ῖ; ῖ; ι◌͂; ῖ; ι◌͂; ) GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7;1FD7;03B9 0308 0342;1FD7;03B9 0308 0342; # (ῗ; ῗ; ι◌̈◌͂; ῗ; ι◌̈◌͂; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8;1FD8;0399 0306;1FD8;0399 0306; # (Ῐ; Ῐ; Ι◌̆; Ῐ; Ι◌̆; ) GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9;1FD9;0399 0304;1FD9;0399 0304; # (Ῑ; Ῑ; Ι◌̄; Ῑ; Ι◌̄; ) GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA;1FDA;0399 0300;1FDA;0399 0300; # (Ὶ; Ὶ; Ι◌̀; Ὶ; Ι◌̀; ) GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB;038A;0399 0301;038A;0399 0301; # (Ί; Ί; Ι◌́; Ί; Ι◌́; ) GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD;1FDD;1FFE 0300;0020 0314 0300;0020 0314 0300; # (῝; ῝; ῾◌̀;  ◌̔◌̀;  ◌̔◌̀; ) GREEK DASIA AND VARIA
+1FDE;1FDE;1FFE 0301;0020 0314 0301;0020 0314 0301; # (῞; ῞; ῾◌́;  ◌̔◌́;  ◌̔◌́; ) GREEK DASIA AND OXIA
+1FDF;1FDF;1FFE 0342;0020 0314 0342;0020 0314 0342; # (῟; ῟; ῾◌͂;  ◌̔◌͂;  ◌̔◌͂; ) GREEK DASIA AND PERISPOMENI
+1FE0;1FE0;03C5 0306;1FE0;03C5 0306; # (ῠ; ῠ; υ◌̆; ῠ; υ◌̆; ) GREEK SMALL LETTER UPSILON WITH VRACHY
+1FE1;1FE1;03C5 0304;1FE1;03C5 0304; # (ῡ; ῡ; υ◌̄; ῡ; υ◌̄; ) GREEK SMALL LETTER UPSILON WITH MACRON
+1FE2;1FE2;03C5 0308 0300;1FE2;03C5 0308 0300; # (ῢ; ῢ; υ◌̈◌̀; ῢ; υ◌̈◌̀; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ΰ; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4;1FE4;03C1 0313;1FE4;03C1 0313; # (ῤ; ῤ; ρ◌̓; ῤ; ρ◌̓; ) GREEK SMALL LETTER RHO WITH PSILI
+1FE5;1FE5;03C1 0314;1FE5;03C1 0314; # (ῥ; ῥ; ρ◌̔; ῥ; ρ◌̔; ) GREEK SMALL LETTER RHO WITH DASIA
+1FE6;1FE6;03C5 0342;1FE6;03C5 0342; # (ῦ; ῦ; υ◌͂; ῦ; υ◌͂; ) GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7;1FE7;03C5 0308 0342;1FE7;03C5 0308 0342; # (ῧ; ῧ; υ◌̈◌͂; ῧ; υ◌̈◌͂; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8;1FE8;03A5 0306;1FE8;03A5 0306; # (Ῠ; Ῠ; Υ◌̆; Ῠ; Υ◌̆; ) GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9;1FE9;03A5 0304;1FE9;03A5 0304; # (Ῡ; Ῡ; Υ◌̄; Ῡ; Υ◌̄; ) GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA;1FEA;03A5 0300;1FEA;03A5 0300; # (Ὺ; Ὺ; Υ◌̀; Ὺ; Υ◌̀; ) GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB;038E;03A5 0301;038E;03A5 0301; # (Ύ; Ύ; Υ◌́; Ύ; Υ◌́; ) GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC;1FEC;03A1 0314;1FEC;03A1 0314; # (Ῥ; Ῥ; Ρ◌̔; Ῥ; Ρ◌̔; ) GREEK CAPITAL LETTER RHO WITH DASIA
+1FED;1FED;00A8 0300;0020 0308 0300;0020 0308 0300; # (῭; ῭; ¨◌̀;  ◌̈◌̀;  ◌̈◌̀; ) GREEK DIALYTIKA AND VARIA
+1FEE;0385;00A8 0301;0020 0308 0301;0020 0308 0301; # (΅; ΅; ¨◌́;  ◌̈◌́;  ◌̈◌́; ) GREEK DIALYTIKA AND OXIA
+1FEF;0060;0060;0060;0060; # (`; `; `; `; `; ) GREEK VARIA
+1FF2;1FF2;03C9 0300 0345;1FF2;03C9 0300 0345; # (ῲ; ῲ; ω◌̀◌ͅ; ῲ; ω◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3;1FF3;03C9 0345;1FF3;03C9 0345; # (ῳ; ῳ; ω◌ͅ; ῳ; ω◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; # (ῴ; ῴ; ω◌́◌ͅ; ῴ; ω◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6;1FF6;03C9 0342;1FF6;03C9 0342; # (ῶ; ῶ; ω◌͂; ῶ; ω◌͂; ) GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7;1FF7;03C9 0342 0345;1FF7;03C9 0342 0345; # (ῷ; ῷ; ω◌͂◌ͅ; ῷ; ω◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8;1FF8;039F 0300;1FF8;039F 0300; # (Ὸ; Ὸ; Ο◌̀; Ὸ; Ο◌̀; ) GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9;038C;039F 0301;038C;039F 0301; # (Ό; Ό; Ο◌́; Ό; Ο◌́; ) GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA;1FFA;03A9 0300;1FFA;03A9 0300; # (Ὼ; Ὼ; Ω◌̀; Ὼ; Ω◌̀; ) GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB;038F;03A9 0301;038F;03A9 0301; # (Ώ; Ώ; Ω◌́; Ώ; Ω◌́; ) GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC;1FFC;03A9 0345;1FFC;03A9 0345; # (ῼ; ῼ; Ω◌ͅ; ῼ; Ω◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD;00B4;00B4;0020 0301;0020 0301; # (´; ´; ´;  ◌́;  ◌́; ) GREEK OXIA
+1FFE;1FFE;1FFE;0020 0314;0020 0314; # (῾; ῾; ῾;  ◌̔;  ◌̔; ) GREEK DASIA
+2000;2002;2002;0020;0020; # ( ;  ;  ;  ;  ; ) EN QUAD
+2001;2003;2003;0020;0020; # ( ;  ;  ;  ;  ; ) EM QUAD
+2002;2002;2002;0020;0020; # ( ;  ;  ;  ;  ; ) EN SPACE
+2003;2003;2003;0020;0020; # ( ;  ;  ;  ;  ; ) EM SPACE
+2004;2004;2004;0020;0020; # ( ;  ;  ;  ;  ; ) THREE-PER-EM SPACE
+2005;2005;2005;0020;0020; # ( ;  ;  ;  ;  ; ) FOUR-PER-EM SPACE
+2006;2006;2006;0020;0020; # ( ;  ;  ;  ;  ; ) SIX-PER-EM SPACE
+2007;2007;2007;0020;0020; # ( ;  ;  ;  ;  ; ) FIGURE SPACE
+2008;2008;2008;0020;0020; # ( ;  ;  ;  ;  ; ) PUNCTUATION SPACE
+2009;2009;2009;0020;0020; # ( ;  ;  ;  ;  ; ) THIN SPACE
+200A;200A;200A;0020;0020; # ( ;  ;  ;  ;  ; ) HAIR SPACE
+2011;2011;2011;2010;2010; # (‑; ‑; ‑; ‐; ‐; ) NON-BREAKING HYPHEN
+2017;2017;2017;0020 0333;0020 0333; # (‗; ‗; ‗;  ◌̳;  ◌̳; ) DOUBLE LOW LINE
+2024;2024;2024;002E;002E; # (․; ․; ․; .; .; ) ONE DOT LEADER
+2025;2025;2025;002E 002E;002E 002E; # (‥; ‥; ‥; ..; ..; ) TWO DOT LEADER
+2026;2026;2026;002E 002E 002E;002E 002E 002E; # (…; …; …; ...; ...; ) HORIZONTAL ELLIPSIS
+202F;202F;202F;0020;0020; # ( ;  ;  ;  ;  ; ) NARROW NO-BREAK SPACE
+2033;2033;2033;2032 2032;2032 2032; # (″; ″; ″; ′′; ′′; ) DOUBLE PRIME
+2034;2034;2034;2032 2032 2032;2032 2032 2032; # (‴; ‴; ‴; ′′′; ′′′; ) TRIPLE PRIME
+2036;2036;2036;2035 2035;2035 2035; # (‶; ‶; ‶; ‵‵; ‵‵; ) REVERSED DOUBLE PRIME
+2037;2037;2037;2035 2035 2035;2035 2035 2035; # (‷; ‷; ‷; ‵‵‵; ‵‵‵; ) REVERSED TRIPLE PRIME
+203C;203C;203C;0021 0021;0021 0021; # (‼; ‼; ‼; !!; !!; ) DOUBLE EXCLAMATION MARK
+203E;203E;203E;0020 0305;0020 0305; # (‾; ‾; ‾;  ◌̅;  ◌̅; ) OVERLINE
+2048;2048;2048;003F 0021;003F 0021; # (⁈; ⁈; ⁈; ?!; ?!; ) QUESTION EXCLAMATION MARK
+2049;2049;2049;0021 003F;0021 003F; # (⁉; ⁉; ⁉; !?; !?; ) EXCLAMATION QUESTION MARK
+2070;2070;2070;0030;0030; # (⁰; ⁰; ⁰; 0; 0; ) SUPERSCRIPT ZERO
+2074;2074;2074;0034;0034; # (⁴; ⁴; ⁴; 4; 4; ) SUPERSCRIPT FOUR
+2075;2075;2075;0035;0035; # (⁵; ⁵; ⁵; 5; 5; ) SUPERSCRIPT FIVE
+2076;2076;2076;0036;0036; # (⁶; ⁶; ⁶; 6; 6; ) SUPERSCRIPT SIX
+2077;2077;2077;0037;0037; # (⁷; ⁷; ⁷; 7; 7; ) SUPERSCRIPT SEVEN
+2078;2078;2078;0038;0038; # (⁸; ⁸; ⁸; 8; 8; ) SUPERSCRIPT EIGHT
+2079;2079;2079;0039;0039; # (⁹; ⁹; ⁹; 9; 9; ) SUPERSCRIPT NINE
+207A;207A;207A;002B;002B; # (⁺; ⁺; ⁺; +; +; ) SUPERSCRIPT PLUS SIGN
+207B;207B;207B;2212;2212; # (⁻; ⁻; ⁻; −; −; ) SUPERSCRIPT MINUS
+207C;207C;207C;003D;003D; # (⁼; ⁼; ⁼; =; =; ) SUPERSCRIPT EQUALS SIGN
+207D;207D;207D;0028;0028; # (⁽; ⁽; ⁽; (; (; ) SUPERSCRIPT LEFT PARENTHESIS
+207E;207E;207E;0029;0029; # (⁾; ⁾; ⁾; ); ); ) SUPERSCRIPT RIGHT PARENTHESIS
+207F;207F;207F;006E;006E; # (ⁿ; ⁿ; ⁿ; n; n; ) SUPERSCRIPT LATIN SMALL LETTER N
+2080;2080;2080;0030;0030; # (₀; ₀; ₀; 0; 0; ) SUBSCRIPT ZERO
+2081;2081;2081;0031;0031; # (₁; ₁; ₁; 1; 1; ) SUBSCRIPT ONE
+2082;2082;2082;0032;0032; # (₂; ₂; ₂; 2; 2; ) SUBSCRIPT TWO
+2083;2083;2083;0033;0033; # (₃; ₃; ₃; 3; 3; ) SUBSCRIPT THREE
+2084;2084;2084;0034;0034; # (₄; ₄; ₄; 4; 4; ) SUBSCRIPT FOUR
+2085;2085;2085;0035;0035; # (₅; ₅; ₅; 5; 5; ) SUBSCRIPT FIVE
+2086;2086;2086;0036;0036; # (₆; ₆; ₆; 6; 6; ) SUBSCRIPT SIX
+2087;2087;2087;0037;0037; # (₇; ₇; ₇; 7; 7; ) SUBSCRIPT SEVEN
+2088;2088;2088;0038;0038; # (₈; ₈; ₈; 8; 8; ) SUBSCRIPT EIGHT
+2089;2089;2089;0039;0039; # (₉; ₉; ₉; 9; 9; ) SUBSCRIPT NINE
+208A;208A;208A;002B;002B; # (₊; ₊; ₊; +; +; ) SUBSCRIPT PLUS SIGN
+208B;208B;208B;2212;2212; # (₋; ₋; ₋; −; −; ) SUBSCRIPT MINUS
+208C;208C;208C;003D;003D; # (₌; ₌; ₌; =; =; ) SUBSCRIPT EQUALS SIGN
+208D;208D;208D;0028;0028; # (₍; ₍; ₍; (; (; ) SUBSCRIPT LEFT PARENTHESIS
+208E;208E;208E;0029;0029; # (₎; ₎; ₎; ); ); ) SUBSCRIPT RIGHT PARENTHESIS
+20A8;20A8;20A8;0052 0073;0052 0073; # (₨; ₨; ₨; Rs; Rs; ) RUPEE SIGN
+2100;2100;2100;0061 002F 0063;0061 002F 0063; # (℀; ℀; ℀; a/c; a/c; ) ACCOUNT OF
+2101;2101;2101;0061 002F 0073;0061 002F 0073; # (℁; ℁; ℁; a/s; a/s; ) ADDRESSED TO THE SUBJECT
+2102;2102;2102;0043;0043; # (ℂ; ℂ; ℂ; C; C; ) DOUBLE-STRUCK CAPITAL C
+2103;2103;2103;00B0 0043;00B0 0043; # (℃; ℃; ℃; °C; °C; ) DEGREE CELSIUS
+2105;2105;2105;0063 002F 006F;0063 002F 006F; # (℅; ℅; ℅; c/o; c/o; ) CARE OF
+2106;2106;2106;0063 002F 0075;0063 002F 0075; # (℆; ℆; ℆; c/u; c/u; ) CADA UNA
+2107;2107;2107;0190;0190; # (ℇ; ℇ; ℇ; Ɛ; Ɛ; ) EULER CONSTANT
+2109;2109;2109;00B0 0046;00B0 0046; # (℉; ℉; ℉; °F; °F; ) DEGREE FAHRENHEIT
+210A;210A;210A;0067;0067; # (ℊ; ℊ; ℊ; g; g; ) SCRIPT SMALL G
+210B;210B;210B;0048;0048; # (ℋ; ℋ; ℋ; H; H; ) SCRIPT CAPITAL H
+210C;210C;210C;0048;0048; # (ℌ; ℌ; ℌ; H; H; ) BLACK-LETTER CAPITAL H
+210D;210D;210D;0048;0048; # (ℍ; ℍ; ℍ; H; H; ) DOUBLE-STRUCK CAPITAL H
+210E;210E;210E;0068;0068; # (ℎ; ℎ; ℎ; h; h; ) PLANCK CONSTANT
+210F;210F;210F;0127;0127; # (ℏ; ℏ; ℏ; ħ; ħ; ) PLANCK CONSTANT OVER TWO PI
+2110;2110;2110;0049;0049; # (ℐ; ℐ; ℐ; I; I; ) SCRIPT CAPITAL I
+2111;2111;2111;0049;0049; # (ℑ; ℑ; ℑ; I; I; ) BLACK-LETTER CAPITAL I
+2112;2112;2112;004C;004C; # (ℒ; ℒ; ℒ; L; L; ) SCRIPT CAPITAL L
+2113;2113;2113;006C;006C; # (ℓ; ℓ; ℓ; l; l; ) SCRIPT SMALL L
+2115;2115;2115;004E;004E; # (ℕ; ℕ; ℕ; N; N; ) DOUBLE-STRUCK CAPITAL N
+2116;2116;2116;004E 006F;004E 006F; # (№; №; №; No; No; ) NUMERO SIGN
+2119;2119;2119;0050;0050; # (ℙ; ℙ; ℙ; P; P; ) DOUBLE-STRUCK CAPITAL P
+211A;211A;211A;0051;0051; # (ℚ; ℚ; ℚ; Q; Q; ) DOUBLE-STRUCK CAPITAL Q
+211B;211B;211B;0052;0052; # (ℛ; ℛ; ℛ; R; R; ) SCRIPT CAPITAL R
+211C;211C;211C;0052;0052; # (ℜ; ℜ; ℜ; R; R; ) BLACK-LETTER CAPITAL R
+211D;211D;211D;0052;0052; # (ℝ; ℝ; ℝ; R; R; ) DOUBLE-STRUCK CAPITAL R
+2120;2120;2120;0053 004D;0053 004D; # (℠; ℠; ℠; SM; SM; ) SERVICE MARK
+2121;2121;2121;0054 0045 004C;0054 0045 004C; # (℡; ℡; ℡; TEL; TEL; ) TELEPHONE SIGN
+2122;2122;2122;0054 004D;0054 004D; # (™; ™; ™; TM; TM; ) TRADE MARK SIGN
+2124;2124;2124;005A;005A; # (ℤ; ℤ; ℤ; Z; Z; ) DOUBLE-STRUCK CAPITAL Z
+2126;03A9;03A9;03A9;03A9; # (Ω; Ω; Ω; Ω; Ω; ) OHM SIGN
+2128;2128;2128;005A;005A; # (ℨ; ℨ; ℨ; Z; Z; ) BLACK-LETTER CAPITAL Z
+212A;004B;004B;004B;004B; # (K; K; K; K; K; ) KELVIN SIGN
+212B;00C5;0041 030A;00C5;0041 030A; # (Å; Å; A◌̊; Å; A◌̊; ) ANGSTROM SIGN
+212C;212C;212C;0042;0042; # (ℬ; ℬ; ℬ; B; B; ) SCRIPT CAPITAL B
+212D;212D;212D;0043;0043; # (ℭ; ℭ; ℭ; C; C; ) BLACK-LETTER CAPITAL C
+212F;212F;212F;0065;0065; # (ℯ; ℯ; ℯ; e; e; ) SCRIPT SMALL E
+2130;2130;2130;0045;0045; # (ℰ; ℰ; ℰ; E; E; ) SCRIPT CAPITAL E
+2131;2131;2131;0046;0046; # (ℱ; ℱ; ℱ; F; F; ) SCRIPT CAPITAL F
+2133;2133;2133;004D;004D; # (ℳ; ℳ; ℳ; M; M; ) SCRIPT CAPITAL M
+2134;2134;2134;006F;006F; # (ℴ; ℴ; ℴ; o; o; ) SCRIPT SMALL O
+2135;2135;2135;05D0;05D0; # (ℵ; ℵ; ℵ; א; א; ) ALEF SYMBOL
+2136;2136;2136;05D1;05D1; # (ℶ; ℶ; ℶ; ב; ב; ) BET SYMBOL
+2137;2137;2137;05D2;05D2; # (ℷ; ℷ; ℷ; ג; ג; ) GIMEL SYMBOL
+2138;2138;2138;05D3;05D3; # (ℸ; ℸ; ℸ; ד; ד; ) DALET SYMBOL
+2139;2139;2139;0069;0069; # (ℹ; ℹ; ℹ; i; i; ) INFORMATION SOURCE
+2153;2153;2153;0031 2044 0033;0031 2044 0033; # (⅓; ⅓; ⅓; 1⁄3; 1⁄3; ) VULGAR FRACTION ONE THIRD
+2154;2154;2154;0032 2044 0033;0032 2044 0033; # (⅔; ⅔; ⅔; 2⁄3; 2⁄3; ) VULGAR FRACTION TWO THIRDS
+2155;2155;2155;0031 2044 0035;0031 2044 0035; # (⅕; ⅕; ⅕; 1⁄5; 1⁄5; ) VULGAR FRACTION ONE FIFTH
+2156;2156;2156;0032 2044 0035;0032 2044 0035; # (⅖; ⅖; ⅖; 2⁄5; 2⁄5; ) VULGAR FRACTION TWO FIFTHS
+2157;2157;2157;0033 2044 0035;0033 2044 0035; # (⅗; ⅗; ⅗; 3⁄5; 3⁄5; ) VULGAR FRACTION THREE FIFTHS
+2158;2158;2158;0034 2044 0035;0034 2044 0035; # (⅘; ⅘; ⅘; 4⁄5; 4⁄5; ) VULGAR FRACTION FOUR FIFTHS
+2159;2159;2159;0031 2044 0036;0031 2044 0036; # (⅙; ⅙; ⅙; 1⁄6; 1⁄6; ) VULGAR FRACTION ONE SIXTH
+215A;215A;215A;0035 2044 0036;0035 2044 0036; # (⅚; ⅚; ⅚; 5⁄6; 5⁄6; ) VULGAR FRACTION FIVE SIXTHS
+215B;215B;215B;0031 2044 0038;0031 2044 0038; # (⅛; ⅛; ⅛; 1⁄8; 1⁄8; ) VULGAR FRACTION ONE EIGHTH
+215C;215C;215C;0033 2044 0038;0033 2044 0038; # (⅜; ⅜; ⅜; 3⁄8; 3⁄8; ) VULGAR FRACTION THREE EIGHTHS
+215D;215D;215D;0035 2044 0038;0035 2044 0038; # (⅝; ⅝; ⅝; 5⁄8; 5⁄8; ) VULGAR FRACTION FIVE EIGHTHS
+215E;215E;215E;0037 2044 0038;0037 2044 0038; # (⅞; ⅞; ⅞; 7⁄8; 7⁄8; ) VULGAR FRACTION SEVEN EIGHTHS
+215F;215F;215F;0031 2044;0031 2044; # (⅟; ⅟; ⅟; 1⁄; 1⁄; ) FRACTION NUMERATOR ONE
+2160;2160;2160;0049;0049; # (Ⅰ; Ⅰ; Ⅰ; I; I; ) ROMAN NUMERAL ONE
+2161;2161;2161;0049 0049;0049 0049; # (Ⅱ; Ⅱ; Ⅱ; II; II; ) ROMAN NUMERAL TWO
+2162;2162;2162;0049 0049 0049;0049 0049 0049; # (Ⅲ; Ⅲ; Ⅲ; III; III; ) ROMAN NUMERAL THREE
+2163;2163;2163;0049 0056;0049 0056; # (Ⅳ; Ⅳ; Ⅳ; IV; IV; ) ROMAN NUMERAL FOUR
+2164;2164;2164;0056;0056; # (Ⅴ; Ⅴ; Ⅴ; V; V; ) ROMAN NUMERAL FIVE
+2165;2165;2165;0056 0049;0056 0049; # (Ⅵ; Ⅵ; Ⅵ; VI; VI; ) ROMAN NUMERAL SIX
+2166;2166;2166;0056 0049 0049;0056 0049 0049; # (Ⅶ; Ⅶ; Ⅶ; VII; VII; ) ROMAN NUMERAL SEVEN
+2167;2167;2167;0056 0049 0049 0049;0056 0049 0049 0049; # (Ⅷ; Ⅷ; Ⅷ; VIII; VIII; ) ROMAN NUMERAL EIGHT
+2168;2168;2168;0049 0058;0049 0058; # (Ⅸ; Ⅸ; Ⅸ; IX; IX; ) ROMAN NUMERAL NINE
+2169;2169;2169;0058;0058; # (Ⅹ; Ⅹ; Ⅹ; X; X; ) ROMAN NUMERAL TEN
+216A;216A;216A;0058 0049;0058 0049; # (Ⅺ; Ⅺ; Ⅺ; XI; XI; ) ROMAN NUMERAL ELEVEN
+216B;216B;216B;0058 0049 0049;0058 0049 0049; # (Ⅻ; Ⅻ; Ⅻ; XII; XII; ) ROMAN NUMERAL TWELVE
+216C;216C;216C;004C;004C; # (Ⅼ; Ⅼ; Ⅼ; L; L; ) ROMAN NUMERAL FIFTY
+216D;216D;216D;0043;0043; # (Ⅽ; Ⅽ; Ⅽ; C; C; ) ROMAN NUMERAL ONE HUNDRED
+216E;216E;216E;0044;0044; # (Ⅾ; Ⅾ; Ⅾ; D; D; ) ROMAN NUMERAL FIVE HUNDRED
+216F;216F;216F;004D;004D; # (Ⅿ; Ⅿ; Ⅿ; M; M; ) ROMAN NUMERAL ONE THOUSAND
+2170;2170;2170;0069;0069; # (ⅰ; ⅰ; ⅰ; i; i; ) SMALL ROMAN NUMERAL ONE
+2171;2171;2171;0069 0069;0069 0069; # (ⅱ; ⅱ; ⅱ; ii; ii; ) SMALL ROMAN NUMERAL TWO
+2172;2172;2172;0069 0069 0069;0069 0069 0069; # (ⅲ; ⅲ; ⅲ; iii; iii; ) SMALL ROMAN NUMERAL THREE
+2173;2173;2173;0069 0076;0069 0076; # (ⅳ; ⅳ; ⅳ; iv; iv; ) SMALL ROMAN NUMERAL FOUR
+2174;2174;2174;0076;0076; # (ⅴ; ⅴ; ⅴ; v; v; ) SMALL ROMAN NUMERAL FIVE
+2175;2175;2175;0076 0069;0076 0069; # (ⅵ; ⅵ; ⅵ; vi; vi; ) SMALL ROMAN NUMERAL SIX
+2176;2176;2176;0076 0069 0069;0076 0069 0069; # (ⅶ; ⅶ; ⅶ; vii; vii; ) SMALL ROMAN NUMERAL SEVEN
+2177;2177;2177;0076 0069 0069 0069;0076 0069 0069 0069; # (ⅷ; ⅷ; ⅷ; viii; viii; ) SMALL ROMAN NUMERAL EIGHT
+2178;2178;2178;0069 0078;0069 0078; # (ⅸ; ⅸ; ⅸ; ix; ix; ) SMALL ROMAN NUMERAL NINE
+2179;2179;2179;0078;0078; # (ⅹ; ⅹ; ⅹ; x; x; ) SMALL ROMAN NUMERAL TEN
+217A;217A;217A;0078 0069;0078 0069; # (ⅺ; ⅺ; ⅺ; xi; xi; ) SMALL ROMAN NUMERAL ELEVEN
+217B;217B;217B;0078 0069 0069;0078 0069 0069; # (ⅻ; ⅻ; ⅻ; xii; xii; ) SMALL ROMAN NUMERAL TWELVE
+217C;217C;217C;006C;006C; # (ⅼ; ⅼ; ⅼ; l; l; ) SMALL ROMAN NUMERAL FIFTY
+217D;217D;217D;0063;0063; # (ⅽ; ⅽ; ⅽ; c; c; ) SMALL ROMAN NUMERAL ONE HUNDRED
+217E;217E;217E;0064;0064; # (ⅾ; ⅾ; ⅾ; d; d; ) SMALL ROMAN NUMERAL FIVE HUNDRED
+217F;217F;217F;006D;006D; # (ⅿ; ⅿ; ⅿ; m; m; ) SMALL ROMAN NUMERAL ONE THOUSAND
+219A;219A;2190 0338;219A;2190 0338; # (↚; ↚; ←◌̸; ↚; ←◌̸; ) LEFTWARDS ARROW WITH STROKE
+219B;219B;2192 0338;219B;2192 0338; # (↛; ↛; →◌̸; ↛; →◌̸; ) RIGHTWARDS ARROW WITH STROKE
+21AE;21AE;2194 0338;21AE;2194 0338; # (↮; ↮; ↔◌̸; ↮; ↔◌̸; ) LEFT RIGHT ARROW WITH STROKE
+21CD;21CD;21D0 0338;21CD;21D0 0338; # (⇍; ⇍; ⇐◌̸; ⇍; ⇐◌̸; ) LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE;21CE;21D4 0338;21CE;21D4 0338; # (⇎; ⇎; ⇔◌̸; ⇎; ⇔◌̸; ) LEFT RIGHT DOUBLE ARROW WITH STROKE
+21CF;21CF;21D2 0338;21CF;21D2 0338; # (⇏; ⇏; ⇒◌̸; ⇏; ⇒◌̸; ) RIGHTWARDS DOUBLE ARROW WITH STROKE
+2204;2204;2203 0338;2204;2203 0338; # (∄; ∄; ∃◌̸; ∄; ∃◌̸; ) THERE DOES NOT EXIST
+2209;2209;2208 0338;2209;2208 0338; # (∉; ∉; ∈◌̸; ∉; ∈◌̸; ) NOT AN ELEMENT OF
+220C;220C;220B 0338;220C;220B 0338; # (∌; ∌; ∋◌̸; ∌; ∋◌̸; ) DOES NOT CONTAIN AS MEMBER
+2224;2224;2223 0338;2224;2223 0338; # (∤; ∤; ∣◌̸; ∤; ∣◌̸; ) DOES NOT DIVIDE
+2226;2226;2225 0338;2226;2225 0338; # (∦; ∦; ∥◌̸; ∦; ∥◌̸; ) NOT PARALLEL TO
+222C;222C;222C;222B 222B;222B 222B; # (∬; ∬; ∬; ∫∫; ∫∫; ) DOUBLE INTEGRAL
+222D;222D;222D;222B 222B 222B;222B 222B 222B; # (∭; ∭; ∭; ∫∫∫; ∫∫∫; ) TRIPLE INTEGRAL
+222F;222F;222F;222E 222E;222E 222E; # (∯; ∯; ∯; ∮∮; ∮∮; ) SURFACE INTEGRAL
+2230;2230;2230;222E 222E 222E;222E 222E 222E; # (∰; ∰; ∰; ∮∮∮; ∮∮∮; ) VOLUME INTEGRAL
+2241;2241;223C 0338;2241;223C 0338; # (≁; ≁; ∼◌̸; ≁; ∼◌̸; ) NOT TILDE
+2244;2244;2243 0338;2244;2243 0338; # (≄; ≄; ≃◌̸; ≄; ≃◌̸; ) NOT ASYMPTOTICALLY EQUAL TO
+2247;2247;2245 0338;2247;2245 0338; # (≇; ≇; ≅◌̸; ≇; ≅◌̸; ) NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2249;2249;2248 0338;2249;2248 0338; # (≉; ≉; ≈◌̸; ≉; ≈◌̸; ) NOT ALMOST EQUAL TO
+2260;2260;003D 0338;2260;003D 0338; # (≠; ≠; =◌̸; ≠; =◌̸; ) NOT EQUAL TO
+2262;2262;2261 0338;2262;2261 0338; # (≢; ≢; ≡◌̸; ≢; ≡◌̸; ) NOT IDENTICAL TO
+226D;226D;224D 0338;226D;224D 0338; # (≭; ≭; ≍◌̸; ≭; ≍◌̸; ) NOT EQUIVALENT TO
+226E;226E;003C 0338;226E;003C 0338; # (≮; ≮; <◌̸; ≮; <◌̸; ) NOT LESS-THAN
+226F;226F;003E 0338;226F;003E 0338; # (≯; ≯; >◌̸; ≯; >◌̸; ) NOT GREATER-THAN
+2270;2270;2264 0338;2270;2264 0338; # (≰; ≰; ≤◌̸; ≰; ≤◌̸; ) NEITHER LESS-THAN NOR EQUAL TO
+2271;2271;2265 0338;2271;2265 0338; # (≱; ≱; ≥◌̸; ≱; ≥◌̸; ) NEITHER GREATER-THAN NOR EQUAL TO
+2274;2274;2272 0338;2274;2272 0338; # (≴; ≴; ≲◌̸; ≴; ≲◌̸; ) NEITHER LESS-THAN NOR EQUIVALENT TO
+2275;2275;2273 0338;2275;2273 0338; # (≵; ≵; ≳◌̸; ≵; ≳◌̸; ) NEITHER GREATER-THAN NOR EQUIVALENT TO
+2278;2278;2276 0338;2278;2276 0338; # (≸; ≸; ≶◌̸; ≸; ≶◌̸; ) NEITHER LESS-THAN NOR GREATER-THAN
+2279;2279;2277 0338;2279;2277 0338; # (≹; ≹; ≷◌̸; ≹; ≷◌̸; ) NEITHER GREATER-THAN NOR LESS-THAN
+2280;2280;227A 0338;2280;227A 0338; # (⊀; ⊀; ≺◌̸; ⊀; ≺◌̸; ) DOES NOT PRECEDE
+2281;2281;227B 0338;2281;227B 0338; # (⊁; ⊁; ≻◌̸; ⊁; ≻◌̸; ) DOES NOT SUCCEED
+2284;2284;2282 0338;2284;2282 0338; # (⊄; ⊄; ⊂◌̸; ⊄; ⊂◌̸; ) NOT A SUBSET OF
+2285;2285;2283 0338;2285;2283 0338; # (⊅; ⊅; ⊃◌̸; ⊅; ⊃◌̸; ) NOT A SUPERSET OF
+2288;2288;2286 0338;2288;2286 0338; # (⊈; ⊈; ⊆◌̸; ⊈; ⊆◌̸; ) NEITHER A SUBSET OF NOR EQUAL TO
+2289;2289;2287 0338;2289;2287 0338; # (⊉; ⊉; ⊇◌̸; ⊉; ⊇◌̸; ) NEITHER A SUPERSET OF NOR EQUAL TO
+22AC;22AC;22A2 0338;22AC;22A2 0338; # (⊬; ⊬; ⊢◌̸; ⊬; ⊢◌̸; ) DOES NOT PROVE
+22AD;22AD;22A8 0338;22AD;22A8 0338; # (⊭; ⊭; ⊨◌̸; ⊭; ⊨◌̸; ) NOT TRUE
+22AE;22AE;22A9 0338;22AE;22A9 0338; # (⊮; ⊮; ⊩◌̸; ⊮; ⊩◌̸; ) DOES NOT FORCE
+22AF;22AF;22AB 0338;22AF;22AB 0338; # (⊯; ⊯; ⊫◌̸; ⊯; ⊫◌̸; ) NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22E0;22E0;227C 0338;22E0;227C 0338; # (⋠; ⋠; ≼◌̸; ⋠; ≼◌̸; ) DOES NOT PRECEDE OR EQUAL
+22E1;22E1;227D 0338;22E1;227D 0338; # (⋡; ⋡; ≽◌̸; ⋡; ≽◌̸; ) DOES NOT SUCCEED OR EQUAL
+22E2;22E2;2291 0338;22E2;2291 0338; # (⋢; ⋢; ⊑◌̸; ⋢; ⊑◌̸; ) NOT SQUARE IMAGE OF OR EQUAL TO
+22E3;22E3;2292 0338;22E3;2292 0338; # (⋣; ⋣; ⊒◌̸; ⋣; ⊒◌̸; ) NOT SQUARE ORIGINAL OF OR EQUAL TO
+22EA;22EA;22B2 0338;22EA;22B2 0338; # (⋪; ⋪; ⊲◌̸; ⋪; ⊲◌̸; ) NOT NORMAL SUBGROUP OF
+22EB;22EB;22B3 0338;22EB;22B3 0338; # (⋫; ⋫; ⊳◌̸; ⋫; ⊳◌̸; ) DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC;22EC;22B4 0338;22EC;22B4 0338; # (⋬; ⋬; ⊴◌̸; ⋬; ⊴◌̸; ) NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED;22ED;22B5 0338;22ED;22B5 0338; # (⋭; ⋭; ⊵◌̸; ⋭; ⊵◌̸; ) DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+2329;3008;3008;3008;3008; # (⟨; 〈; 〈; 〈; 〈; ) LEFT-POINTING ANGLE BRACKET
+232A;3009;3009;3009;3009; # (⟩; 〉; 〉; 〉; 〉; ) RIGHT-POINTING ANGLE BRACKET
+2460;2460;2460;0031;0031; # (①; ①; ①; 1; 1; ) CIRCLED DIGIT ONE
+2461;2461;2461;0032;0032; # (②; ②; ②; 2; 2; ) CIRCLED DIGIT TWO
+2462;2462;2462;0033;0033; # (③; ③; ③; 3; 3; ) CIRCLED DIGIT THREE
+2463;2463;2463;0034;0034; # (④; ④; ④; 4; 4; ) CIRCLED DIGIT FOUR
+2464;2464;2464;0035;0035; # (⑤; ⑤; ⑤; 5; 5; ) CIRCLED DIGIT FIVE
+2465;2465;2465;0036;0036; # (⑥; ⑥; ⑥; 6; 6; ) CIRCLED DIGIT SIX
+2466;2466;2466;0037;0037; # (⑦; ⑦; ⑦; 7; 7; ) CIRCLED DIGIT SEVEN
+2467;2467;2467;0038;0038; # (⑧; ⑧; ⑧; 8; 8; ) CIRCLED DIGIT EIGHT
+2468;2468;2468;0039;0039; # (⑨; ⑨; ⑨; 9; 9; ) CIRCLED DIGIT NINE
+2469;2469;2469;0031 0030;0031 0030; # (⑩; ⑩; ⑩; 10; 10; ) CIRCLED NUMBER TEN
+246A;246A;246A;0031 0031;0031 0031; # (⑪; ⑪; ⑪; 11; 11; ) CIRCLED NUMBER ELEVEN
+246B;246B;246B;0031 0032;0031 0032; # (⑫; ⑫; ⑫; 12; 12; ) CIRCLED NUMBER TWELVE
+246C;246C;246C;0031 0033;0031 0033; # (⑬; ⑬; ⑬; 13; 13; ) CIRCLED NUMBER THIRTEEN
+246D;246D;246D;0031 0034;0031 0034; # (⑭; ⑭; ⑭; 14; 14; ) CIRCLED NUMBER FOURTEEN
+246E;246E;246E;0031 0035;0031 0035; # (⑮; ⑮; ⑮; 15; 15; ) CIRCLED NUMBER FIFTEEN
+246F;246F;246F;0031 0036;0031 0036; # (⑯; ⑯; ⑯; 16; 16; ) CIRCLED NUMBER SIXTEEN
+2470;2470;2470;0031 0037;0031 0037; # (⑰; ⑰; ⑰; 17; 17; ) CIRCLED NUMBER SEVENTEEN
+2471;2471;2471;0031 0038;0031 0038; # (⑱; ⑱; ⑱; 18; 18; ) CIRCLED NUMBER EIGHTEEN
+2472;2472;2472;0031 0039;0031 0039; # (⑲; ⑲; ⑲; 19; 19; ) CIRCLED NUMBER NINETEEN
+2473;2473;2473;0032 0030;0032 0030; # (⑳; ⑳; ⑳; 20; 20; ) CIRCLED NUMBER TWENTY
+2474;2474;2474;0028 0031 0029;0028 0031 0029; # (⑴; ⑴; ⑴; (1); (1); ) PARENTHESIZED DIGIT ONE
+2475;2475;2475;0028 0032 0029;0028 0032 0029; # (⑵; ⑵; ⑵; (2); (2); ) PARENTHESIZED DIGIT TWO
+2476;2476;2476;0028 0033 0029;0028 0033 0029; # (⑶; ⑶; ⑶; (3); (3); ) PARENTHESIZED DIGIT THREE
+2477;2477;2477;0028 0034 0029;0028 0034 0029; # (⑷; ⑷; ⑷; (4); (4); ) PARENTHESIZED DIGIT FOUR
+2478;2478;2478;0028 0035 0029;0028 0035 0029; # (⑸; ⑸; ⑸; (5); (5); ) PARENTHESIZED DIGIT FIVE
+2479;2479;2479;0028 0036 0029;0028 0036 0029; # (⑹; ⑹; ⑹; (6); (6); ) PARENTHESIZED DIGIT SIX
+247A;247A;247A;0028 0037 0029;0028 0037 0029; # (⑺; ⑺; ⑺; (7); (7); ) PARENTHESIZED DIGIT SEVEN
+247B;247B;247B;0028 0038 0029;0028 0038 0029; # (⑻; ⑻; ⑻; (8); (8); ) PARENTHESIZED DIGIT EIGHT
+247C;247C;247C;0028 0039 0029;0028 0039 0029; # (⑼; ⑼; ⑼; (9); (9); ) PARENTHESIZED DIGIT NINE
+247D;247D;247D;0028 0031 0030 0029;0028 0031 0030 0029; # (⑽; ⑽; ⑽; (10); (10); ) PARENTHESIZED NUMBER TEN
+247E;247E;247E;0028 0031 0031 0029;0028 0031 0031 0029; # (⑾; ⑾; ⑾; (11); (11); ) PARENTHESIZED NUMBER ELEVEN
+247F;247F;247F;0028 0031 0032 0029;0028 0031 0032 0029; # (⑿; ⑿; ⑿; (12); (12); ) PARENTHESIZED NUMBER TWELVE
+2480;2480;2480;0028 0031 0033 0029;0028 0031 0033 0029; # (⒀; ⒀; ⒀; (13); (13); ) PARENTHESIZED NUMBER THIRTEEN
+2481;2481;2481;0028 0031 0034 0029;0028 0031 0034 0029; # (⒁; ⒁; ⒁; (14); (14); ) PARENTHESIZED NUMBER FOURTEEN
+2482;2482;2482;0028 0031 0035 0029;0028 0031 0035 0029; # (⒂; ⒂; ⒂; (15); (15); ) PARENTHESIZED NUMBER FIFTEEN
+2483;2483;2483;0028 0031 0036 0029;0028 0031 0036 0029; # (⒃; ⒃; ⒃; (16); (16); ) PARENTHESIZED NUMBER SIXTEEN
+2484;2484;2484;0028 0031 0037 0029;0028 0031 0037 0029; # (⒄; ⒄; ⒄; (17); (17); ) PARENTHESIZED NUMBER SEVENTEEN
+2485;2485;2485;0028 0031 0038 0029;0028 0031 0038 0029; # (⒅; ⒅; ⒅; (18); (18); ) PARENTHESIZED NUMBER EIGHTEEN
+2486;2486;2486;0028 0031 0039 0029;0028 0031 0039 0029; # (⒆; ⒆; ⒆; (19); (19); ) PARENTHESIZED NUMBER NINETEEN
+2487;2487;2487;0028 0032 0030 0029;0028 0032 0030 0029; # (⒇; ⒇; ⒇; (20); (20); ) PARENTHESIZED NUMBER TWENTY
+2488;2488;2488;0031 002E;0031 002E; # (⒈; ⒈; ⒈; 1.; 1.; ) DIGIT ONE FULL STOP
+2489;2489;2489;0032 002E;0032 002E; # (⒉; ⒉; ⒉; 2.; 2.; ) DIGIT TWO FULL STOP
+248A;248A;248A;0033 002E;0033 002E; # (⒊; ⒊; ⒊; 3.; 3.; ) DIGIT THREE FULL STOP
+248B;248B;248B;0034 002E;0034 002E; # (⒋; ⒋; ⒋; 4.; 4.; ) DIGIT FOUR FULL STOP
+248C;248C;248C;0035 002E;0035 002E; # (⒌; ⒌; ⒌; 5.; 5.; ) DIGIT FIVE FULL STOP
+248D;248D;248D;0036 002E;0036 002E; # (⒍; ⒍; ⒍; 6.; 6.; ) DIGIT SIX FULL STOP
+248E;248E;248E;0037 002E;0037 002E; # (⒎; ⒎; ⒎; 7.; 7.; ) DIGIT SEVEN FULL STOP
+248F;248F;248F;0038 002E;0038 002E; # (⒏; ⒏; ⒏; 8.; 8.; ) DIGIT EIGHT FULL STOP
+2490;2490;2490;0039 002E;0039 002E; # (⒐; ⒐; ⒐; 9.; 9.; ) DIGIT NINE FULL STOP
+2491;2491;2491;0031 0030 002E;0031 0030 002E; # (⒑; ⒑; ⒑; 10.; 10.; ) NUMBER TEN FULL STOP
+2492;2492;2492;0031 0031 002E;0031 0031 002E; # (⒒; ⒒; ⒒; 11.; 11.; ) NUMBER ELEVEN FULL STOP
+2493;2493;2493;0031 0032 002E;0031 0032 002E; # (⒓; ⒓; ⒓; 12.; 12.; ) NUMBER TWELVE FULL STOP
+2494;2494;2494;0031 0033 002E;0031 0033 002E; # (⒔; ⒔; ⒔; 13.; 13.; ) NUMBER THIRTEEN FULL STOP
+2495;2495;2495;0031 0034 002E;0031 0034 002E; # (⒕; ⒕; ⒕; 14.; 14.; ) NUMBER FOURTEEN FULL STOP
+2496;2496;2496;0031 0035 002E;0031 0035 002E; # (⒖; ⒖; ⒖; 15.; 15.; ) NUMBER FIFTEEN FULL STOP
+2497;2497;2497;0031 0036 002E;0031 0036 002E; # (⒗; ⒗; ⒗; 16.; 16.; ) NUMBER SIXTEEN FULL STOP
+2498;2498;2498;0031 0037 002E;0031 0037 002E; # (⒘; ⒘; ⒘; 17.; 17.; ) NUMBER SEVENTEEN FULL STOP
+2499;2499;2499;0031 0038 002E;0031 0038 002E; # (⒙; ⒙; ⒙; 18.; 18.; ) NUMBER EIGHTEEN FULL STOP
+249A;249A;249A;0031 0039 002E;0031 0039 002E; # (⒚; ⒚; ⒚; 19.; 19.; ) NUMBER NINETEEN FULL STOP
+249B;249B;249B;0032 0030 002E;0032 0030 002E; # (⒛; ⒛; ⒛; 20.; 20.; ) NUMBER TWENTY FULL STOP
+249C;249C;249C;0028 0061 0029;0028 0061 0029; # (⒜; ⒜; ⒜; (a); (a); ) PARENTHESIZED LATIN SMALL LETTER A
+249D;249D;249D;0028 0062 0029;0028 0062 0029; # (⒝; ⒝; ⒝; (b); (b); ) PARENTHESIZED LATIN SMALL LETTER B
+249E;249E;249E;0028 0063 0029;0028 0063 0029; # (⒞; ⒞; ⒞; (c); (c); ) PARENTHESIZED LATIN SMALL LETTER C
+249F;249F;249F;0028 0064 0029;0028 0064 0029; # (⒟; ⒟; ⒟; (d); (d); ) PARENTHESIZED LATIN SMALL LETTER D
+24A0;24A0;24A0;0028 0065 0029;0028 0065 0029; # (⒠; ⒠; ⒠; (e); (e); ) PARENTHESIZED LATIN SMALL LETTER E
+24A1;24A1;24A1;0028 0066 0029;0028 0066 0029; # (⒡; ⒡; ⒡; (f); (f); ) PARENTHESIZED LATIN SMALL LETTER F
+24A2;24A2;24A2;0028 0067 0029;0028 0067 0029; # (⒢; ⒢; ⒢; (g); (g); ) PARENTHESIZED LATIN SMALL LETTER G
+24A3;24A3;24A3;0028 0068 0029;0028 0068 0029; # (⒣; ⒣; ⒣; (h); (h); ) PARENTHESIZED LATIN SMALL LETTER H
+24A4;24A4;24A4;0028 0069 0029;0028 0069 0029; # (⒤; ⒤; ⒤; (i); (i); ) PARENTHESIZED LATIN SMALL LETTER I
+24A5;24A5;24A5;0028 006A 0029;0028 006A 0029; # (⒥; ⒥; ⒥; (j); (j); ) PARENTHESIZED LATIN SMALL LETTER J
+24A6;24A6;24A6;0028 006B 0029;0028 006B 0029; # (⒦; ⒦; ⒦; (k); (k); ) PARENTHESIZED LATIN SMALL LETTER K
+24A7;24A7;24A7;0028 006C 0029;0028 006C 0029; # (⒧; ⒧; ⒧; (l); (l); ) PARENTHESIZED LATIN SMALL LETTER L
+24A8;24A8;24A8;0028 006D 0029;0028 006D 0029; # (⒨; ⒨; ⒨; (m); (m); ) PARENTHESIZED LATIN SMALL LETTER M
+24A9;24A9;24A9;0028 006E 0029;0028 006E 0029; # (⒩; ⒩; ⒩; (n); (n); ) PARENTHESIZED LATIN SMALL LETTER N
+24AA;24AA;24AA;0028 006F 0029;0028 006F 0029; # (⒪; ⒪; ⒪; (o); (o); ) PARENTHESIZED LATIN SMALL LETTER O
+24AB;24AB;24AB;0028 0070 0029;0028 0070 0029; # (⒫; ⒫; ⒫; (p); (p); ) PARENTHESIZED LATIN SMALL LETTER P
+24AC;24AC;24AC;0028 0071 0029;0028 0071 0029; # (⒬; ⒬; ⒬; (q); (q); ) PARENTHESIZED LATIN SMALL LETTER Q
+24AD;24AD;24AD;0028 0072 0029;0028 0072 0029; # (⒭; ⒭; ⒭; (r); (r); ) PARENTHESIZED LATIN SMALL LETTER R
+24AE;24AE;24AE;0028 0073 0029;0028 0073 0029; # (⒮; ⒮; ⒮; (s); (s); ) PARENTHESIZED LATIN SMALL LETTER S
+24AF;24AF;24AF;0028 0074 0029;0028 0074 0029; # (⒯; ⒯; ⒯; (t); (t); ) PARENTHESIZED LATIN SMALL LETTER T
+24B0;24B0;24B0;0028 0075 0029;0028 0075 0029; # (⒰; ⒰; ⒰; (u); (u); ) PARENTHESIZED LATIN SMALL LETTER U
+24B1;24B1;24B1;0028 0076 0029;0028 0076 0029; # (⒱; ⒱; ⒱; (v); (v); ) PARENTHESIZED LATIN SMALL LETTER V
+24B2;24B2;24B2;0028 0077 0029;0028 0077 0029; # (⒲; ⒲; ⒲; (w); (w); ) PARENTHESIZED LATIN SMALL LETTER W
+24B3;24B3;24B3;0028 0078 0029;0028 0078 0029; # (⒳; ⒳; ⒳; (x); (x); ) PARENTHESIZED LATIN SMALL LETTER X
+24B4;24B4;24B4;0028 0079 0029;0028 0079 0029; # (⒴; ⒴; ⒴; (y); (y); ) PARENTHESIZED LATIN SMALL LETTER Y
+24B5;24B5;24B5;0028 007A 0029;0028 007A 0029; # (⒵; ⒵; ⒵; (z); (z); ) PARENTHESIZED LATIN SMALL LETTER Z
+24B6;24B6;24B6;0041;0041; # (Ⓐ; Ⓐ; Ⓐ; A; A; ) CIRCLED LATIN CAPITAL LETTER A
+24B7;24B7;24B7;0042;0042; # (Ⓑ; Ⓑ; Ⓑ; B; B; ) CIRCLED LATIN CAPITAL LETTER B
+24B8;24B8;24B8;0043;0043; # (Ⓒ; Ⓒ; Ⓒ; C; C; ) CIRCLED LATIN CAPITAL LETTER C
+24B9;24B9;24B9;0044;0044; # (Ⓓ; Ⓓ; Ⓓ; D; D; ) CIRCLED LATIN CAPITAL LETTER D
+24BA;24BA;24BA;0045;0045; # (Ⓔ; Ⓔ; Ⓔ; E; E; ) CIRCLED LATIN CAPITAL LETTER E
+24BB;24BB;24BB;0046;0046; # (Ⓕ; Ⓕ; Ⓕ; F; F; ) CIRCLED LATIN CAPITAL LETTER F
+24BC;24BC;24BC;0047;0047; # (Ⓖ; Ⓖ; Ⓖ; G; G; ) CIRCLED LATIN CAPITAL LETTER G
+24BD;24BD;24BD;0048;0048; # (Ⓗ; Ⓗ; Ⓗ; H; H; ) CIRCLED LATIN CAPITAL LETTER H
+24BE;24BE;24BE;0049;0049; # (Ⓘ; Ⓘ; Ⓘ; I; I; ) CIRCLED LATIN CAPITAL LETTER I
+24BF;24BF;24BF;004A;004A; # (Ⓙ; Ⓙ; Ⓙ; J; J; ) CIRCLED LATIN CAPITAL LETTER J
+24C0;24C0;24C0;004B;004B; # (Ⓚ; Ⓚ; Ⓚ; K; K; ) CIRCLED LATIN CAPITAL LETTER K
+24C1;24C1;24C1;004C;004C; # (Ⓛ; Ⓛ; Ⓛ; L; L; ) CIRCLED LATIN CAPITAL LETTER L
+24C2;24C2;24C2;004D;004D; # (Ⓜ; Ⓜ; Ⓜ; M; M; ) CIRCLED LATIN CAPITAL LETTER M
+24C3;24C3;24C3;004E;004E; # (Ⓝ; Ⓝ; Ⓝ; N; N; ) CIRCLED LATIN CAPITAL LETTER N
+24C4;24C4;24C4;004F;004F; # (Ⓞ; Ⓞ; Ⓞ; O; O; ) CIRCLED LATIN CAPITAL LETTER O
+24C5;24C5;24C5;0050;0050; # (Ⓟ; Ⓟ; Ⓟ; P; P; ) CIRCLED LATIN CAPITAL LETTER P
+24C6;24C6;24C6;0051;0051; # (Ⓠ; Ⓠ; Ⓠ; Q; Q; ) CIRCLED LATIN CAPITAL LETTER Q
+24C7;24C7;24C7;0052;0052; # (Ⓡ; Ⓡ; Ⓡ; R; R; ) CIRCLED LATIN CAPITAL LETTER R
+24C8;24C8;24C8;0053;0053; # (Ⓢ; Ⓢ; Ⓢ; S; S; ) CIRCLED LATIN CAPITAL LETTER S
+24C9;24C9;24C9;0054;0054; # (Ⓣ; Ⓣ; Ⓣ; T; T; ) CIRCLED LATIN CAPITAL LETTER T
+24CA;24CA;24CA;0055;0055; # (Ⓤ; Ⓤ; Ⓤ; U; U; ) CIRCLED LATIN CAPITAL LETTER U
+24CB;24CB;24CB;0056;0056; # (Ⓥ; Ⓥ; Ⓥ; V; V; ) CIRCLED LATIN CAPITAL LETTER V
+24CC;24CC;24CC;0057;0057; # (Ⓦ; Ⓦ; Ⓦ; W; W; ) CIRCLED LATIN CAPITAL LETTER W
+24CD;24CD;24CD;0058;0058; # (Ⓧ; Ⓧ; Ⓧ; X; X; ) CIRCLED LATIN CAPITAL LETTER X
+24CE;24CE;24CE;0059;0059; # (Ⓨ; Ⓨ; Ⓨ; Y; Y; ) CIRCLED LATIN CAPITAL LETTER Y
+24CF;24CF;24CF;005A;005A; # (Ⓩ; Ⓩ; Ⓩ; Z; Z; ) CIRCLED LATIN CAPITAL LETTER Z
+24D0;24D0;24D0;0061;0061; # (ⓐ; ⓐ; ⓐ; a; a; ) CIRCLED LATIN SMALL LETTER A
+24D1;24D1;24D1;0062;0062; # (ⓑ; ⓑ; ⓑ; b; b; ) CIRCLED LATIN SMALL LETTER B
+24D2;24D2;24D2;0063;0063; # (ⓒ; ⓒ; ⓒ; c; c; ) CIRCLED LATIN SMALL LETTER C
+24D3;24D3;24D3;0064;0064; # (ⓓ; ⓓ; ⓓ; d; d; ) CIRCLED LATIN SMALL LETTER D
+24D4;24D4;24D4;0065;0065; # (ⓔ; ⓔ; ⓔ; e; e; ) CIRCLED LATIN SMALL LETTER E
+24D5;24D5;24D5;0066;0066; # (ⓕ; ⓕ; ⓕ; f; f; ) CIRCLED LATIN SMALL LETTER F
+24D6;24D6;24D6;0067;0067; # (ⓖ; ⓖ; ⓖ; g; g; ) CIRCLED LATIN SMALL LETTER G
+24D7;24D7;24D7;0068;0068; # (ⓗ; ⓗ; ⓗ; h; h; ) CIRCLED LATIN SMALL LETTER H
+24D8;24D8;24D8;0069;0069; # (ⓘ; ⓘ; ⓘ; i; i; ) CIRCLED LATIN SMALL LETTER I
+24D9;24D9;24D9;006A;006A; # (ⓙ; ⓙ; ⓙ; j; j; ) CIRCLED LATIN SMALL LETTER J
+24DA;24DA;24DA;006B;006B; # (ⓚ; ⓚ; ⓚ; k; k; ) CIRCLED LATIN SMALL LETTER K
+24DB;24DB;24DB;006C;006C; # (ⓛ; ⓛ; ⓛ; l; l; ) CIRCLED LATIN SMALL LETTER L
+24DC;24DC;24DC;006D;006D; # (ⓜ; ⓜ; ⓜ; m; m; ) CIRCLED LATIN SMALL LETTER M
+24DD;24DD;24DD;006E;006E; # (ⓝ; ⓝ; ⓝ; n; n; ) CIRCLED LATIN SMALL LETTER N
+24DE;24DE;24DE;006F;006F; # (ⓞ; ⓞ; ⓞ; o; o; ) CIRCLED LATIN SMALL LETTER O
+24DF;24DF;24DF;0070;0070; # (ⓟ; ⓟ; ⓟ; p; p; ) CIRCLED LATIN SMALL LETTER P
+24E0;24E0;24E0;0071;0071; # (ⓠ; ⓠ; ⓠ; q; q; ) CIRCLED LATIN SMALL LETTER Q
+24E1;24E1;24E1;0072;0072; # (ⓡ; ⓡ; ⓡ; r; r; ) CIRCLED LATIN SMALL LETTER R
+24E2;24E2;24E2;0073;0073; # (ⓢ; ⓢ; ⓢ; s; s; ) CIRCLED LATIN SMALL LETTER S
+24E3;24E3;24E3;0074;0074; # (ⓣ; ⓣ; ⓣ; t; t; ) CIRCLED LATIN SMALL LETTER T
+24E4;24E4;24E4;0075;0075; # (ⓤ; ⓤ; ⓤ; u; u; ) CIRCLED LATIN SMALL LETTER U
+24E5;24E5;24E5;0076;0076; # (ⓥ; ⓥ; ⓥ; v; v; ) CIRCLED LATIN SMALL LETTER V
+24E6;24E6;24E6;0077;0077; # (ⓦ; ⓦ; ⓦ; w; w; ) CIRCLED LATIN SMALL LETTER W
+24E7;24E7;24E7;0078;0078; # (ⓧ; ⓧ; ⓧ; x; x; ) CIRCLED LATIN SMALL LETTER X
+24E8;24E8;24E8;0079;0079; # (ⓨ; ⓨ; ⓨ; y; y; ) CIRCLED LATIN SMALL LETTER Y
+24E9;24E9;24E9;007A;007A; # (ⓩ; ⓩ; ⓩ; z; z; ) CIRCLED LATIN SMALL LETTER Z
+24EA;24EA;24EA;0030;0030; # (⓪; ⓪; ⓪; 0; 0; ) CIRCLED DIGIT ZERO
+2E9F;2E9F;2E9F;6BCD;6BCD; # (⺟; ⺟; ⺟; 母; 母; ) CJK RADICAL MOTHER
+2EF3;2EF3;2EF3;9F9F;9F9F; # (⻳; ⻳; ⻳; 龟; 龟; ) CJK RADICAL C-SIMPLIFIED TURTLE
+2F00;2F00;2F00;4E00;4E00; # (⼀; ⼀; ⼀; 一; 一; ) KANGXI RADICAL ONE
+2F01;2F01;2F01;4E28;4E28; # (⼁; ⼁; ⼁; 丨; 丨; ) KANGXI RADICAL LINE
+2F02;2F02;2F02;4E36;4E36; # (⼂; ⼂; ⼂; 丶; 丶; ) KANGXI RADICAL DOT
+2F03;2F03;2F03;4E3F;4E3F; # (⼃; ⼃; ⼃; 丿; 丿; ) KANGXI RADICAL SLASH
+2F04;2F04;2F04;4E59;4E59; # (⼄; ⼄; ⼄; 乙; 乙; ) KANGXI RADICAL SECOND
+2F05;2F05;2F05;4E85;4E85; # (⼅; ⼅; ⼅; 亅; 亅; ) KANGXI RADICAL HOOK
+2F06;2F06;2F06;4E8C;4E8C; # (⼆; ⼆; ⼆; 二; 二; ) KANGXI RADICAL TWO
+2F07;2F07;2F07;4EA0;4EA0; # (⼇; ⼇; ⼇; 亠; 亠; ) KANGXI RADICAL LID
+2F08;2F08;2F08;4EBA;4EBA; # (⼈; ⼈; ⼈; 人; 人; ) KANGXI RADICAL MAN
+2F09;2F09;2F09;513F;513F; # (⼉; ⼉; ⼉; 儿; 儿; ) KANGXI RADICAL LEGS
+2F0A;2F0A;2F0A;5165;5165; # (⼊; ⼊; ⼊; 入; 入; ) KANGXI RADICAL ENTER
+2F0B;2F0B;2F0B;516B;516B; # (⼋; ⼋; ⼋; 八; 八; ) KANGXI RADICAL EIGHT
+2F0C;2F0C;2F0C;5182;5182; # (⼌; ⼌; ⼌; 冂; 冂; ) KANGXI RADICAL DOWN BOX
+2F0D;2F0D;2F0D;5196;5196; # (⼍; ⼍; ⼍; 冖; 冖; ) KANGXI RADICAL COVER
+2F0E;2F0E;2F0E;51AB;51AB; # (⼎; ⼎; ⼎; 冫; 冫; ) KANGXI RADICAL ICE
+2F0F;2F0F;2F0F;51E0;51E0; # (⼏; ⼏; ⼏; 几; 几; ) KANGXI RADICAL TABLE
+2F10;2F10;2F10;51F5;51F5; # (⼐; ⼐; ⼐; 凵; 凵; ) KANGXI RADICAL OPEN BOX
+2F11;2F11;2F11;5200;5200; # (⼑; ⼑; ⼑; 刀; 刀; ) KANGXI RADICAL KNIFE
+2F12;2F12;2F12;529B;529B; # (⼒; ⼒; ⼒; 力; 力; ) KANGXI RADICAL POWER
+2F13;2F13;2F13;52F9;52F9; # (⼓; ⼓; ⼓; 勹; 勹; ) KANGXI RADICAL WRAP
+2F14;2F14;2F14;5315;5315; # (⼔; ⼔; ⼔; 匕; 匕; ) KANGXI RADICAL SPOON
+2F15;2F15;2F15;531A;531A; # (⼕; ⼕; ⼕; 匚; 匚; ) KANGXI RADICAL RIGHT OPEN BOX
+2F16;2F16;2F16;5338;5338; # (⼖; ⼖; ⼖; 匸; 匸; ) KANGXI RADICAL HIDING ENCLOSURE
+2F17;2F17;2F17;5341;5341; # (⼗; ⼗; ⼗; 十; 十; ) KANGXI RADICAL TEN
+2F18;2F18;2F18;535C;535C; # (⼘; ⼘; ⼘; 卜; 卜; ) KANGXI RADICAL DIVINATION
+2F19;2F19;2F19;5369;5369; # (⼙; ⼙; ⼙; 卩; 卩; ) KANGXI RADICAL SEAL
+2F1A;2F1A;2F1A;5382;5382; # (⼚; ⼚; ⼚; 厂; 厂; ) KANGXI RADICAL CLIFF
+2F1B;2F1B;2F1B;53B6;53B6; # (⼛; ⼛; ⼛; 厶; 厶; ) KANGXI RADICAL PRIVATE
+2F1C;2F1C;2F1C;53C8;53C8; # (⼜; ⼜; ⼜; 又; 又; ) KANGXI RADICAL AGAIN
+2F1D;2F1D;2F1D;53E3;53E3; # (⼝; ⼝; ⼝; 口; 口; ) KANGXI RADICAL MOUTH
+2F1E;2F1E;2F1E;56D7;56D7; # (⼞; ⼞; ⼞; 囗; 囗; ) KANGXI RADICAL ENCLOSURE
+2F1F;2F1F;2F1F;571F;571F; # (⼟; ⼟; ⼟; 土; 土; ) KANGXI RADICAL EARTH
+2F20;2F20;2F20;58EB;58EB; # (⼠; ⼠; ⼠; 士; 士; ) KANGXI RADICAL SCHOLAR
+2F21;2F21;2F21;5902;5902; # (⼡; ⼡; ⼡; 夂; 夂; ) KANGXI RADICAL GO
+2F22;2F22;2F22;590A;590A; # (⼢; ⼢; ⼢; 夊; 夊; ) KANGXI RADICAL GO SLOWLY
+2F23;2F23;2F23;5915;5915; # (⼣; ⼣; ⼣; 夕; 夕; ) KANGXI RADICAL EVENING
+2F24;2F24;2F24;5927;5927; # (⼤; ⼤; ⼤; 大; 大; ) KANGXI RADICAL BIG
+2F25;2F25;2F25;5973;5973; # (⼥; ⼥; ⼥; 女; 女; ) KANGXI RADICAL WOMAN
+2F26;2F26;2F26;5B50;5B50; # (⼦; ⼦; ⼦; 子; 子; ) KANGXI RADICAL CHILD
+2F27;2F27;2F27;5B80;5B80; # (⼧; ⼧; ⼧; 宀; 宀; ) KANGXI RADICAL ROOF
+2F28;2F28;2F28;5BF8;5BF8; # (⼨; ⼨; ⼨; 寸; 寸; ) KANGXI RADICAL INCH
+2F29;2F29;2F29;5C0F;5C0F; # (⼩; ⼩; ⼩; 小; 小; ) KANGXI RADICAL SMALL
+2F2A;2F2A;2F2A;5C22;5C22; # (⼪; ⼪; ⼪; 尢; 尢; ) KANGXI RADICAL LAME
+2F2B;2F2B;2F2B;5C38;5C38; # (⼫; ⼫; ⼫; 尸; 尸; ) KANGXI RADICAL CORPSE
+2F2C;2F2C;2F2C;5C6E;5C6E; # (⼬; ⼬; ⼬; 屮; 屮; ) KANGXI RADICAL SPROUT
+2F2D;2F2D;2F2D;5C71;5C71; # (⼭; ⼭; ⼭; 山; 山; ) KANGXI RADICAL MOUNTAIN
+2F2E;2F2E;2F2E;5DDB;5DDB; # (⼮; ⼮; ⼮; 巛; 巛; ) KANGXI RADICAL RIVER
+2F2F;2F2F;2F2F;5DE5;5DE5; # (⼯; ⼯; ⼯; 工; 工; ) KANGXI RADICAL WORK
+2F30;2F30;2F30;5DF1;5DF1; # (⼰; ⼰; ⼰; 己; 己; ) KANGXI RADICAL ONESELF
+2F31;2F31;2F31;5DFE;5DFE; # (⼱; ⼱; ⼱; 巾; 巾; ) KANGXI RADICAL TURBAN
+2F32;2F32;2F32;5E72;5E72; # (⼲; ⼲; ⼲; 干; 干; ) KANGXI RADICAL DRY
+2F33;2F33;2F33;5E7A;5E7A; # (⼳; ⼳; ⼳; 幺; 幺; ) KANGXI RADICAL SHORT THREAD
+2F34;2F34;2F34;5E7F;5E7F; # (⼴; ⼴; ⼴; 广; 广; ) KANGXI RADICAL DOTTED CLIFF
+2F35;2F35;2F35;5EF4;5EF4; # (⼵; ⼵; ⼵; 廴; 廴; ) KANGXI RADICAL LONG STRIDE
+2F36;2F36;2F36;5EFE;5EFE; # (⼶; ⼶; ⼶; 廾; 廾; ) KANGXI RADICAL TWO HANDS
+2F37;2F37;2F37;5F0B;5F0B; # (⼷; ⼷; ⼷; 弋; 弋; ) KANGXI RADICAL SHOOT
+2F38;2F38;2F38;5F13;5F13; # (⼸; ⼸; ⼸; 弓; 弓; ) KANGXI RADICAL BOW
+2F39;2F39;2F39;5F50;5F50; # (⼹; ⼹; ⼹; 彐; 彐; ) KANGXI RADICAL SNOUT
+2F3A;2F3A;2F3A;5F61;5F61; # (⼺; ⼺; ⼺; 彡; 彡; ) KANGXI RADICAL BRISTLE
+2F3B;2F3B;2F3B;5F73;5F73; # (⼻; ⼻; ⼻; 彳; 彳; ) KANGXI RADICAL STEP
+2F3C;2F3C;2F3C;5FC3;5FC3; # (⼼; ⼼; ⼼; 心; 心; ) KANGXI RADICAL HEART
+2F3D;2F3D;2F3D;6208;6208; # (⼽; ⼽; ⼽; 戈; 戈; ) KANGXI RADICAL HALBERD
+2F3E;2F3E;2F3E;6236;6236; # (⼾; ⼾; ⼾; 戶; 戶; ) KANGXI RADICAL DOOR
+2F3F;2F3F;2F3F;624B;624B; # (⼿; ⼿; ⼿; 手; 手; ) KANGXI RADICAL HAND
+2F40;2F40;2F40;652F;652F; # (⽀; ⽀; ⽀; 支; 支; ) KANGXI RADICAL BRANCH
+2F41;2F41;2F41;6534;6534; # (⽁; ⽁; ⽁; 攴; 攴; ) KANGXI RADICAL RAP
+2F42;2F42;2F42;6587;6587; # (⽂; ⽂; ⽂; 文; 文; ) KANGXI RADICAL SCRIPT
+2F43;2F43;2F43;6597;6597; # (⽃; ⽃; ⽃; 斗; 斗; ) KANGXI RADICAL DIPPER
+2F44;2F44;2F44;65A4;65A4; # (⽄; ⽄; ⽄; 斤; 斤; ) KANGXI RADICAL AXE
+2F45;2F45;2F45;65B9;65B9; # (⽅; ⽅; ⽅; 方; 方; ) KANGXI RADICAL SQUARE
+2F46;2F46;2F46;65E0;65E0; # (⽆; ⽆; ⽆; 无; 无; ) KANGXI RADICAL NOT
+2F47;2F47;2F47;65E5;65E5; # (⽇; ⽇; ⽇; 日; 日; ) KANGXI RADICAL SUN
+2F48;2F48;2F48;66F0;66F0; # (⽈; ⽈; ⽈; 曰; 曰; ) KANGXI RADICAL SAY
+2F49;2F49;2F49;6708;6708; # (⽉; ⽉; ⽉; 月; 月; ) KANGXI RADICAL MOON
+2F4A;2F4A;2F4A;6728;6728; # (⽊; ⽊; ⽊; 木; 木; ) KANGXI RADICAL TREE
+2F4B;2F4B;2F4B;6B20;6B20; # (⽋; ⽋; ⽋; 欠; 欠; ) KANGXI RADICAL LACK
+2F4C;2F4C;2F4C;6B62;6B62; # (⽌; ⽌; ⽌; 止; 止; ) KANGXI RADICAL STOP
+2F4D;2F4D;2F4D;6B79;6B79; # (⽍; ⽍; ⽍; 歹; 歹; ) KANGXI RADICAL DEATH
+2F4E;2F4E;2F4E;6BB3;6BB3; # (⽎; ⽎; ⽎; 殳; 殳; ) KANGXI RADICAL WEAPON
+2F4F;2F4F;2F4F;6BCB;6BCB; # (⽏; ⽏; ⽏; 毋; 毋; ) KANGXI RADICAL DO NOT
+2F50;2F50;2F50;6BD4;6BD4; # (⽐; ⽐; ⽐; 比; 比; ) KANGXI RADICAL COMPARE
+2F51;2F51;2F51;6BDB;6BDB; # (⽑; ⽑; ⽑; 毛; 毛; ) KANGXI RADICAL FUR
+2F52;2F52;2F52;6C0F;6C0F; # (⽒; ⽒; ⽒; 氏; 氏; ) KANGXI RADICAL CLAN
+2F53;2F53;2F53;6C14;6C14; # (⽓; ⽓; ⽓; 气; 气; ) KANGXI RADICAL STEAM
+2F54;2F54;2F54;6C34;6C34; # (⽔; ⽔; ⽔; 水; 水; ) KANGXI RADICAL WATER
+2F55;2F55;2F55;706B;706B; # (⽕; ⽕; ⽕; 火; 火; ) KANGXI RADICAL FIRE
+2F56;2F56;2F56;722A;722A; # (⽖; ⽖; ⽖; 爪; 爪; ) KANGXI RADICAL CLAW
+2F57;2F57;2F57;7236;7236; # (⽗; ⽗; ⽗; 父; 父; ) KANGXI RADICAL FATHER
+2F58;2F58;2F58;723B;723B; # (⽘; ⽘; ⽘; 爻; 爻; ) KANGXI RADICAL DOUBLE X
+2F59;2F59;2F59;723F;723F; # (⽙; ⽙; ⽙; 爿; 爿; ) KANGXI RADICAL HALF TREE TRUNK
+2F5A;2F5A;2F5A;7247;7247; # (⽚; ⽚; ⽚; 片; 片; ) KANGXI RADICAL SLICE
+2F5B;2F5B;2F5B;7259;7259; # (⽛; ⽛; ⽛; 牙; 牙; ) KANGXI RADICAL FANG
+2F5C;2F5C;2F5C;725B;725B; # (⽜; ⽜; ⽜; 牛; 牛; ) KANGXI RADICAL COW
+2F5D;2F5D;2F5D;72AC;72AC; # (⽝; ⽝; ⽝; 犬; 犬; ) KANGXI RADICAL DOG
+2F5E;2F5E;2F5E;7384;7384; # (⽞; ⽞; ⽞; 玄; 玄; ) KANGXI RADICAL PROFOUND
+2F5F;2F5F;2F5F;7389;7389; # (⽟; ⽟; ⽟; 玉; 玉; ) KANGXI RADICAL JADE
+2F60;2F60;2F60;74DC;74DC; # (⽠; ⽠; ⽠; 瓜; 瓜; ) KANGXI RADICAL MELON
+2F61;2F61;2F61;74E6;74E6; # (⽡; ⽡; ⽡; 瓦; 瓦; ) KANGXI RADICAL TILE
+2F62;2F62;2F62;7518;7518; # (⽢; ⽢; ⽢; 甘; 甘; ) KANGXI RADICAL SWEET
+2F63;2F63;2F63;751F;751F; # (⽣; ⽣; ⽣; 生; 生; ) KANGXI RADICAL LIFE
+2F64;2F64;2F64;7528;7528; # (⽤; ⽤; ⽤; 用; 用; ) KANGXI RADICAL USE
+2F65;2F65;2F65;7530;7530; # (⽥; ⽥; ⽥; 田; 田; ) KANGXI RADICAL FIELD
+2F66;2F66;2F66;758B;758B; # (⽦; ⽦; ⽦; 疋; 疋; ) KANGXI RADICAL BOLT OF CLOTH
+2F67;2F67;2F67;7592;7592; # (⽧; ⽧; ⽧; 疒; 疒; ) KANGXI RADICAL SICKNESS
+2F68;2F68;2F68;7676;7676; # (⽨; ⽨; ⽨; 癶; 癶; ) KANGXI RADICAL DOTTED TENT
+2F69;2F69;2F69;767D;767D; # (⽩; ⽩; ⽩; 白; 白; ) KANGXI RADICAL WHITE
+2F6A;2F6A;2F6A;76AE;76AE; # (⽪; ⽪; ⽪; 皮; 皮; ) KANGXI RADICAL SKIN
+2F6B;2F6B;2F6B;76BF;76BF; # (⽫; ⽫; ⽫; 皿; 皿; ) KANGXI RADICAL DISH
+2F6C;2F6C;2F6C;76EE;76EE; # (⽬; ⽬; ⽬; 目; 目; ) KANGXI RADICAL EYE
+2F6D;2F6D;2F6D;77DB;77DB; # (⽭; ⽭; ⽭; 矛; 矛; ) KANGXI RADICAL SPEAR
+2F6E;2F6E;2F6E;77E2;77E2; # (⽮; ⽮; ⽮; 矢; 矢; ) KANGXI RADICAL ARROW
+2F6F;2F6F;2F6F;77F3;77F3; # (⽯; ⽯; ⽯; 石; 石; ) KANGXI RADICAL STONE
+2F70;2F70;2F70;793A;793A; # (⽰; ⽰; ⽰; 示; 示; ) KANGXI RADICAL SPIRIT
+2F71;2F71;2F71;79B8;79B8; # (⽱; ⽱; ⽱; 禸; 禸; ) KANGXI RADICAL TRACK
+2F72;2F72;2F72;79BE;79BE; # (⽲; ⽲; ⽲; 禾; 禾; ) KANGXI RADICAL GRAIN
+2F73;2F73;2F73;7A74;7A74; # (⽳; ⽳; ⽳; 穴; 穴; ) KANGXI RADICAL CAVE
+2F74;2F74;2F74;7ACB;7ACB; # (⽴; ⽴; ⽴; 立; 立; ) KANGXI RADICAL STAND
+2F75;2F75;2F75;7AF9;7AF9; # (⽵; ⽵; ⽵; 竹; 竹; ) KANGXI RADICAL BAMBOO
+2F76;2F76;2F76;7C73;7C73; # (⽶; ⽶; ⽶; 米; 米; ) KANGXI RADICAL RICE
+2F77;2F77;2F77;7CF8;7CF8; # (⽷; ⽷; ⽷; 糸; 糸; ) KANGXI RADICAL SILK
+2F78;2F78;2F78;7F36;7F36; # (⽸; ⽸; ⽸; 缶; 缶; ) KANGXI RADICAL JAR
+2F79;2F79;2F79;7F51;7F51; # (⽹; ⽹; ⽹; 网; 网; ) KANGXI RADICAL NET
+2F7A;2F7A;2F7A;7F8A;7F8A; # (⽺; ⽺; ⽺; 羊; 羊; ) KANGXI RADICAL SHEEP
+2F7B;2F7B;2F7B;7FBD;7FBD; # (⽻; ⽻; ⽻; 羽; 羽; ) KANGXI RADICAL FEATHER
+2F7C;2F7C;2F7C;8001;8001; # (⽼; ⽼; ⽼; 老; 老; ) KANGXI RADICAL OLD
+2F7D;2F7D;2F7D;800C;800C; # (⽽; ⽽; ⽽; 而; 而; ) KANGXI RADICAL AND
+2F7E;2F7E;2F7E;8012;8012; # (⽾; ⽾; ⽾; 耒; 耒; ) KANGXI RADICAL PLOW
+2F7F;2F7F;2F7F;8033;8033; # (⽿; ⽿; ⽿; 耳; 耳; ) KANGXI RADICAL EAR
+2F80;2F80;2F80;807F;807F; # (⾀; ⾀; ⾀; 聿; 聿; ) KANGXI RADICAL BRUSH
+2F81;2F81;2F81;8089;8089; # (⾁; ⾁; ⾁; 肉; 肉; ) KANGXI RADICAL MEAT
+2F82;2F82;2F82;81E3;81E3; # (⾂; ⾂; ⾂; 臣; 臣; ) KANGXI RADICAL MINISTER
+2F83;2F83;2F83;81EA;81EA; # (⾃; ⾃; ⾃; 自; 自; ) KANGXI RADICAL SELF
+2F84;2F84;2F84;81F3;81F3; # (⾄; ⾄; ⾄; 至; 至; ) KANGXI RADICAL ARRIVE
+2F85;2F85;2F85;81FC;81FC; # (⾅; ⾅; ⾅; 臼; 臼; ) KANGXI RADICAL MORTAR
+2F86;2F86;2F86;820C;820C; # (⾆; ⾆; ⾆; 舌; 舌; ) KANGXI RADICAL TONGUE
+2F87;2F87;2F87;821B;821B; # (⾇; ⾇; ⾇; 舛; 舛; ) KANGXI RADICAL OPPOSE
+2F88;2F88;2F88;821F;821F; # (⾈; ⾈; ⾈; 舟; 舟; ) KANGXI RADICAL BOAT
+2F89;2F89;2F89;826E;826E; # (⾉; ⾉; ⾉; 艮; 艮; ) KANGXI RADICAL STOPPING
+2F8A;2F8A;2F8A;8272;8272; # (⾊; ⾊; ⾊; 色; 色; ) KANGXI RADICAL COLOR
+2F8B;2F8B;2F8B;8278;8278; # (⾋; ⾋; ⾋; 艸; 艸; ) KANGXI RADICAL GRASS
+2F8C;2F8C;2F8C;864D;864D; # (⾌; ⾌; ⾌; 虍; 虍; ) KANGXI RADICAL TIGER
+2F8D;2F8D;2F8D;866B;866B; # (⾍; ⾍; ⾍; 虫; 虫; ) KANGXI RADICAL INSECT
+2F8E;2F8E;2F8E;8840;8840; # (⾎; ⾎; ⾎; 血; 血; ) KANGXI RADICAL BLOOD
+2F8F;2F8F;2F8F;884C;884C; # (⾏; ⾏; ⾏; 行; 行; ) KANGXI RADICAL WALK ENCLOSURE
+2F90;2F90;2F90;8863;8863; # (⾐; ⾐; ⾐; 衣; 衣; ) KANGXI RADICAL CLOTHES
+2F91;2F91;2F91;897E;897E; # (⾑; ⾑; ⾑; 襾; 襾; ) KANGXI RADICAL WEST
+2F92;2F92;2F92;898B;898B; # (⾒; ⾒; ⾒; 見; 見; ) KANGXI RADICAL SEE
+2F93;2F93;2F93;89D2;89D2; # (⾓; ⾓; ⾓; 角; 角; ) KANGXI RADICAL HORN
+2F94;2F94;2F94;8A00;8A00; # (⾔; ⾔; ⾔; 言; 言; ) KANGXI RADICAL SPEECH
+2F95;2F95;2F95;8C37;8C37; # (⾕; ⾕; ⾕; 谷; 谷; ) KANGXI RADICAL VALLEY
+2F96;2F96;2F96;8C46;8C46; # (⾖; ⾖; ⾖; 豆; 豆; ) KANGXI RADICAL BEAN
+2F97;2F97;2F97;8C55;8C55; # (⾗; ⾗; ⾗; 豕; 豕; ) KANGXI RADICAL PIG
+2F98;2F98;2F98;8C78;8C78; # (⾘; ⾘; ⾘; 豸; 豸; ) KANGXI RADICAL BADGER
+2F99;2F99;2F99;8C9D;8C9D; # (⾙; ⾙; ⾙; 貝; 貝; ) KANGXI RADICAL SHELL
+2F9A;2F9A;2F9A;8D64;8D64; # (⾚; ⾚; ⾚; 赤; 赤; ) KANGXI RADICAL RED
+2F9B;2F9B;2F9B;8D70;8D70; # (⾛; ⾛; ⾛; 走; 走; ) KANGXI RADICAL RUN
+2F9C;2F9C;2F9C;8DB3;8DB3; # (⾜; ⾜; ⾜; 足; 足; ) KANGXI RADICAL FOOT
+2F9D;2F9D;2F9D;8EAB;8EAB; # (⾝; ⾝; ⾝; 身; 身; ) KANGXI RADICAL BODY
+2F9E;2F9E;2F9E;8ECA;8ECA; # (⾞; ⾞; ⾞; 車; 車; ) KANGXI RADICAL CART
+2F9F;2F9F;2F9F;8F9B;8F9B; # (⾟; ⾟; ⾟; 辛; 辛; ) KANGXI RADICAL BITTER
+2FA0;2FA0;2FA0;8FB0;8FB0; # (⾠; ⾠; ⾠; 辰; 辰; ) KANGXI RADICAL MORNING
+2FA1;2FA1;2FA1;8FB5;8FB5; # (⾡; ⾡; ⾡; 辵; 辵; ) KANGXI RADICAL WALK
+2FA2;2FA2;2FA2;9091;9091; # (⾢; ⾢; ⾢; 邑; 邑; ) KANGXI RADICAL CITY
+2FA3;2FA3;2FA3;9149;9149; # (⾣; ⾣; ⾣; 酉; 酉; ) KANGXI RADICAL WINE
+2FA4;2FA4;2FA4;91C6;91C6; # (⾤; ⾤; ⾤; 釆; 釆; ) KANGXI RADICAL DISTINGUISH
+2FA5;2FA5;2FA5;91CC;91CC; # (⾥; ⾥; ⾥; 里; 里; ) KANGXI RADICAL VILLAGE
+2FA6;2FA6;2FA6;91D1;91D1; # (⾦; ⾦; ⾦; 金; 金; ) KANGXI RADICAL GOLD
+2FA7;2FA7;2FA7;9577;9577; # (⾧; ⾧; ⾧; 長; 長; ) KANGXI RADICAL LONG
+2FA8;2FA8;2FA8;9580;9580; # (⾨; ⾨; ⾨; 門; 門; ) KANGXI RADICAL GATE
+2FA9;2FA9;2FA9;961C;961C; # (⾩; ⾩; ⾩; 阜; 阜; ) KANGXI RADICAL MOUND
+2FAA;2FAA;2FAA;96B6;96B6; # (⾪; ⾪; ⾪; 隶; 隶; ) KANGXI RADICAL SLAVE
+2FAB;2FAB;2FAB;96B9;96B9; # (⾫; ⾫; ⾫; 隹; 隹; ) KANGXI RADICAL SHORT TAILED BIRD
+2FAC;2FAC;2FAC;96E8;96E8; # (⾬; ⾬; ⾬; 雨; 雨; ) KANGXI RADICAL RAIN
+2FAD;2FAD;2FAD;9751;9751; # (⾭; ⾭; ⾭; 靑; 靑; ) KANGXI RADICAL BLUE
+2FAE;2FAE;2FAE;975E;975E; # (⾮; ⾮; ⾮; 非; 非; ) KANGXI RADICAL WRONG
+2FAF;2FAF;2FAF;9762;9762; # (⾯; ⾯; ⾯; 面; 面; ) KANGXI RADICAL FACE
+2FB0;2FB0;2FB0;9769;9769; # (⾰; ⾰; ⾰; 革; 革; ) KANGXI RADICAL LEATHER
+2FB1;2FB1;2FB1;97CB;97CB; # (⾱; ⾱; ⾱; 韋; 韋; ) KANGXI RADICAL TANNED LEATHER
+2FB2;2FB2;2FB2;97ED;97ED; # (⾲; ⾲; ⾲; 韭; 韭; ) KANGXI RADICAL LEEK
+2FB3;2FB3;2FB3;97F3;97F3; # (⾳; ⾳; ⾳; 音; 音; ) KANGXI RADICAL SOUND
+2FB4;2FB4;2FB4;9801;9801; # (⾴; ⾴; ⾴; 頁; 頁; ) KANGXI RADICAL LEAF
+2FB5;2FB5;2FB5;98A8;98A8; # (⾵; ⾵; ⾵; 風; 風; ) KANGXI RADICAL WIND
+2FB6;2FB6;2FB6;98DB;98DB; # (⾶; ⾶; ⾶; 飛; 飛; ) KANGXI RADICAL FLY
+2FB7;2FB7;2FB7;98DF;98DF; # (⾷; ⾷; ⾷; 食; 食; ) KANGXI RADICAL EAT
+2FB8;2FB8;2FB8;9996;9996; # (⾸; ⾸; ⾸; 首; 首; ) KANGXI RADICAL HEAD
+2FB9;2FB9;2FB9;9999;9999; # (⾹; ⾹; ⾹; 香; 香; ) KANGXI RADICAL FRAGRANT
+2FBA;2FBA;2FBA;99AC;99AC; # (⾺; ⾺; ⾺; 馬; 馬; ) KANGXI RADICAL HORSE
+2FBB;2FBB;2FBB;9AA8;9AA8; # (⾻; ⾻; ⾻; 骨; 骨; ) KANGXI RADICAL BONE
+2FBC;2FBC;2FBC;9AD8;9AD8; # (⾼; ⾼; ⾼; 高; 高; ) KANGXI RADICAL TALL
+2FBD;2FBD;2FBD;9ADF;9ADF; # (⾽; ⾽; ⾽; 髟; 髟; ) KANGXI RADICAL HAIR
+2FBE;2FBE;2FBE;9B25;9B25; # (⾾; ⾾; ⾾; 鬥; 鬥; ) KANGXI RADICAL FIGHT
+2FBF;2FBF;2FBF;9B2F;9B2F; # (⾿; ⾿; ⾿; 鬯; 鬯; ) KANGXI RADICAL SACRIFICIAL WINE
+2FC0;2FC0;2FC0;9B32;9B32; # (⿀; ⿀; ⿀; 鬲; 鬲; ) KANGXI RADICAL CAULDRON
+2FC1;2FC1;2FC1;9B3C;9B3C; # (⿁; ⿁; ⿁; 鬼; 鬼; ) KANGXI RADICAL GHOST
+2FC2;2FC2;2FC2;9B5A;9B5A; # (⿂; ⿂; ⿂; 魚; 魚; ) KANGXI RADICAL FISH
+2FC3;2FC3;2FC3;9CE5;9CE5; # (⿃; ⿃; ⿃; 鳥; 鳥; ) KANGXI RADICAL BIRD
+2FC4;2FC4;2FC4;9E75;9E75; # (⿄; ⿄; ⿄; 鹵; 鹵; ) KANGXI RADICAL SALT
+2FC5;2FC5;2FC5;9E7F;9E7F; # (⿅; ⿅; ⿅; 鹿; 鹿; ) KANGXI RADICAL DEER
+2FC6;2FC6;2FC6;9EA5;9EA5; # (⿆; ⿆; ⿆; 麥; 麥; ) KANGXI RADICAL WHEAT
+2FC7;2FC7;2FC7;9EBB;9EBB; # (⿇; ⿇; ⿇; 麻; 麻; ) KANGXI RADICAL HEMP
+2FC8;2FC8;2FC8;9EC3;9EC3; # (⿈; ⿈; ⿈; 黃; 黃; ) KANGXI RADICAL YELLOW
+2FC9;2FC9;2FC9;9ECD;9ECD; # (⿉; ⿉; ⿉; 黍; 黍; ) KANGXI RADICAL MILLET
+2FCA;2FCA;2FCA;9ED1;9ED1; # (⿊; ⿊; ⿊; 黑; 黑; ) KANGXI RADICAL BLACK
+2FCB;2FCB;2FCB;9EF9;9EF9; # (⿋; ⿋; ⿋; 黹; 黹; ) KANGXI RADICAL EMBROIDERY
+2FCC;2FCC;2FCC;9EFD;9EFD; # (⿌; ⿌; ⿌; 黽; 黽; ) KANGXI RADICAL FROG
+2FCD;2FCD;2FCD;9F0E;9F0E; # (⿍; ⿍; ⿍; 鼎; 鼎; ) KANGXI RADICAL TRIPOD
+2FCE;2FCE;2FCE;9F13;9F13; # (⿎; ⿎; ⿎; 鼓; 鼓; ) KANGXI RADICAL DRUM
+2FCF;2FCF;2FCF;9F20;9F20; # (⿏; ⿏; ⿏; 鼠; 鼠; ) KANGXI RADICAL RAT
+2FD0;2FD0;2FD0;9F3B;9F3B; # (⿐; ⿐; ⿐; 鼻; 鼻; ) KANGXI RADICAL NOSE
+2FD1;2FD1;2FD1;9F4A;9F4A; # (⿑; ⿑; ⿑; 齊; 齊; ) KANGXI RADICAL EVEN
+2FD2;2FD2;2FD2;9F52;9F52; # (⿒; ⿒; ⿒; 齒; 齒; ) KANGXI RADICAL TOOTH
+2FD3;2FD3;2FD3;9F8D;9F8D; # (⿓; ⿓; ⿓; 龍; 龍; ) KANGXI RADICAL DRAGON
+2FD4;2FD4;2FD4;9F9C;9F9C; # (⿔; ⿔; ⿔; 龜; 龜; ) KANGXI RADICAL TURTLE
+2FD5;2FD5;2FD5;9FA0;9FA0; # (⿕; ⿕; ⿕; 龠; 龠; ) KANGXI RADICAL FLUTE
+3000;3000;3000;0020;0020; # ( ;  ;  ;  ;  ; ) IDEOGRAPHIC SPACE
+3036;3036;3036;3012;3012; # (〶; 〶; 〶; 〒; 〒; ) CIRCLED POSTAL MARK
+3038;3038;3038;5341;5341; # (〸; 〸; 〸; 十; 十; ) HANGZHOU NUMERAL TEN
+3039;3039;3039;5344;5344; # (〹; 〹; 〹; 卄; 卄; ) HANGZHOU NUMERAL TWENTY
+303A;303A;303A;5345;5345; # (〺; 〺; 〺; 卅; 卅; ) HANGZHOU NUMERAL THIRTY
+304C;304C;304B 3099;304C;304B 3099; # (が; が; か◌゙; が; か◌゙; ) HIRAGANA LETTER GA
+304E;304E;304D 3099;304E;304D 3099; # (ぎ; ぎ; き◌゙; ぎ; き◌゙; ) HIRAGANA LETTER GI
+3050;3050;304F 3099;3050;304F 3099; # (ぐ; ぐ; く◌゙; ぐ; く◌゙; ) HIRAGANA LETTER GU
+3052;3052;3051 3099;3052;3051 3099; # (げ; げ; け◌゙; げ; け◌゙; ) HIRAGANA LETTER GE
+3054;3054;3053 3099;3054;3053 3099; # (ご; ご; こ◌゙; ご; こ◌゙; ) HIRAGANA LETTER GO
+3056;3056;3055 3099;3056;3055 3099; # (ざ; ざ; さ◌゙; ざ; さ◌゙; ) HIRAGANA LETTER ZA
+3058;3058;3057 3099;3058;3057 3099; # (じ; じ; し◌゙; じ; し◌゙; ) HIRAGANA LETTER ZI
+305A;305A;3059 3099;305A;3059 3099; # (ず; ず; す◌゙; ず; す◌゙; ) HIRAGANA LETTER ZU
+305C;305C;305B 3099;305C;305B 3099; # (ぜ; ぜ; せ◌゙; ぜ; せ◌゙; ) HIRAGANA LETTER ZE
+305E;305E;305D 3099;305E;305D 3099; # (ぞ; ぞ; そ◌゙; ぞ; そ◌゙; ) HIRAGANA LETTER ZO
+3060;3060;305F 3099;3060;305F 3099; # (だ; だ; た◌゙; だ; た◌゙; ) HIRAGANA LETTER DA
+3062;3062;3061 3099;3062;3061 3099; # (ぢ; ぢ; ち◌゙; ぢ; ち◌゙; ) HIRAGANA LETTER DI
+3065;3065;3064 3099;3065;3064 3099; # (づ; づ; つ◌゙; づ; つ◌゙; ) HIRAGANA LETTER DU
+3067;3067;3066 3099;3067;3066 3099; # (で; で; て◌゙; で; て◌゙; ) HIRAGANA LETTER DE
+3069;3069;3068 3099;3069;3068 3099; # (ど; ど; と◌゙; ど; と◌゙; ) HIRAGANA LETTER DO
+3070;3070;306F 3099;3070;306F 3099; # (ば; ば; は◌゙; ば; は◌゙; ) HIRAGANA LETTER BA
+3071;3071;306F 309A;3071;306F 309A; # (ぱ; ぱ; は◌゚; ぱ; は◌゚; ) HIRAGANA LETTER PA
+3073;3073;3072 3099;3073;3072 3099; # (び; び; ひ◌゙; び; ひ◌゙; ) HIRAGANA LETTER BI
+3074;3074;3072 309A;3074;3072 309A; # (ぴ; ぴ; ひ◌゚; ぴ; ひ◌゚; ) HIRAGANA LETTER PI
+3076;3076;3075 3099;3076;3075 3099; # (ぶ; ぶ; ふ◌゙; ぶ; ふ◌゙; ) HIRAGANA LETTER BU
+3077;3077;3075 309A;3077;3075 309A; # (ぷ; ぷ; ふ◌゚; ぷ; ふ◌゚; ) HIRAGANA LETTER PU
+3079;3079;3078 3099;3079;3078 3099; # (べ; べ; へ◌゙; べ; へ◌゙; ) HIRAGANA LETTER BE
+307A;307A;3078 309A;307A;3078 309A; # (ぺ; ぺ; へ◌゚; ぺ; へ◌゚; ) HIRAGANA LETTER PE
+307C;307C;307B 3099;307C;307B 3099; # (ぼ; ぼ; ほ◌゙; ぼ; ほ◌゙; ) HIRAGANA LETTER BO
+307D;307D;307B 309A;307D;307B 309A; # (ぽ; ぽ; ほ◌゚; ぽ; ほ◌゚; ) HIRAGANA LETTER PO
+3094;3094;3046 3099;3094;3046 3099; # (ゔ; ゔ; う◌゙; ゔ; う◌゙; ) HIRAGANA LETTER VU
+309B;309B;309B;0020 3099;0020 3099; # (゛; ゛; ゛;  ◌゙;  ◌゙; ) KATAKANA-HIRAGANA VOICED SOUND MARK
+309C;309C;309C;0020 309A;0020 309A; # (゜; ゜; ゜;  ◌゚;  ◌゚; ) KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309E;309E;309D 3099;309E;309D 3099; # (ゞ; ゞ; ゝ◌゙; ゞ; ゝ◌゙; ) HIRAGANA VOICED ITERATION MARK
+30AC;30AC;30AB 3099;30AC;30AB 3099; # (ガ; ガ; カ◌゙; ガ; カ◌゙; ) KATAKANA LETTER GA
+30AE;30AE;30AD 3099;30AE;30AD 3099; # (ギ; ギ; キ◌゙; ギ; キ◌゙; ) KATAKANA LETTER GI
+30B0;30B0;30AF 3099;30B0;30AF 3099; # (グ; グ; ク◌゙; グ; ク◌゙; ) KATAKANA LETTER GU
+30B2;30B2;30B1 3099;30B2;30B1 3099; # (ゲ; ゲ; ケ◌゙; ゲ; ケ◌゙; ) KATAKANA LETTER GE
+30B4;30B4;30B3 3099;30B4;30B3 3099; # (ゴ; ゴ; コ◌゙; ゴ; コ◌゙; ) KATAKANA LETTER GO
+30B6;30B6;30B5 3099;30B6;30B5 3099; # (ザ; ザ; サ◌゙; ザ; サ◌゙; ) KATAKANA LETTER ZA
+30B8;30B8;30B7 3099;30B8;30B7 3099; # (ジ; ジ; シ◌゙; ジ; シ◌゙; ) KATAKANA LETTER ZI
+30BA;30BA;30B9 3099;30BA;30B9 3099; # (ズ; ズ; ス◌゙; ズ; ス◌゙; ) KATAKANA LETTER ZU
+30BC;30BC;30BB 3099;30BC;30BB 3099; # (ゼ; ゼ; セ◌゙; ゼ; セ◌゙; ) KATAKANA LETTER ZE
+30BE;30BE;30BD 3099;30BE;30BD 3099; # (ゾ; ゾ; ソ◌゙; ゾ; ソ◌゙; ) KATAKANA LETTER ZO
+30C0;30C0;30BF 3099;30C0;30BF 3099; # (ダ; ダ; タ◌゙; ダ; タ◌゙; ) KATAKANA LETTER DA
+30C2;30C2;30C1 3099;30C2;30C1 3099; # (ヂ; ヂ; チ◌゙; ヂ; チ◌゙; ) KATAKANA LETTER DI
+30C5;30C5;30C4 3099;30C5;30C4 3099; # (ヅ; ヅ; ツ◌゙; ヅ; ツ◌゙; ) KATAKANA LETTER DU
+30C7;30C7;30C6 3099;30C7;30C6 3099; # (デ; デ; テ◌゙; デ; テ◌゙; ) KATAKANA LETTER DE
+30C9;30C9;30C8 3099;30C9;30C8 3099; # (ド; ド; ト◌゙; ド; ト◌゙; ) KATAKANA LETTER DO
+30D0;30D0;30CF 3099;30D0;30CF 3099; # (バ; バ; ハ◌゙; バ; ハ◌゙; ) KATAKANA LETTER BA
+30D1;30D1;30CF 309A;30D1;30CF 309A; # (パ; パ; ハ◌゚; パ; ハ◌゚; ) KATAKANA LETTER PA
+30D3;30D3;30D2 3099;30D3;30D2 3099; # (ビ; ビ; ヒ◌゙; ビ; ヒ◌゙; ) KATAKANA LETTER BI
+30D4;30D4;30D2 309A;30D4;30D2 309A; # (ピ; ピ; ヒ◌゚; ピ; ヒ◌゚; ) KATAKANA LETTER PI
+30D6;30D6;30D5 3099;30D6;30D5 3099; # (ブ; ブ; フ◌゙; ブ; フ◌゙; ) KATAKANA LETTER BU
+30D7;30D7;30D5 309A;30D7;30D5 309A; # (プ; プ; フ◌゚; プ; フ◌゚; ) KATAKANA LETTER PU
+30D9;30D9;30D8 3099;30D9;30D8 3099; # (ベ; ベ; ヘ◌゙; ベ; ヘ◌゙; ) KATAKANA LETTER BE
+30DA;30DA;30D8 309A;30DA;30D8 309A; # (ペ; ペ; ヘ◌゚; ペ; ヘ◌゚; ) KATAKANA LETTER PE
+30DC;30DC;30DB 3099;30DC;30DB 3099; # (ボ; ボ; ホ◌゙; ボ; ホ◌゙; ) KATAKANA LETTER BO
+30DD;30DD;30DB 309A;30DD;30DB 309A; # (ポ; ポ; ホ◌゚; ポ; ホ◌゚; ) KATAKANA LETTER PO
+30F4;30F4;30A6 3099;30F4;30A6 3099; # (ヴ; ヴ; ウ◌゙; ヴ; ウ◌゙; ) KATAKANA LETTER VU
+30F7;30F7;30EF 3099;30F7;30EF 3099; # (ヷ; ヷ; ワ◌゙; ヷ; ワ◌゙; ) KATAKANA LETTER VA
+30F8;30F8;30F0 3099;30F8;30F0 3099; # (ヸ; ヸ; ヰ◌゙; ヸ; ヰ◌゙; ) KATAKANA LETTER VI
+30F9;30F9;30F1 3099;30F9;30F1 3099; # (ヹ; ヹ; ヱ◌゙; ヹ; ヱ◌゙; ) KATAKANA LETTER VE
+30FA;30FA;30F2 3099;30FA;30F2 3099; # (ヺ; ヺ; ヲ◌゙; ヺ; ヲ◌゙; ) KATAKANA LETTER VO
+30FE;30FE;30FD 3099;30FE;30FD 3099; # (ヾ; ヾ; ヽ◌゙; ヾ; ヽ◌゙; ) KATAKANA VOICED ITERATION MARK
+3131;3131;3131;1100;1100; # (ㄱ; ㄱ; ㄱ; ᄀ; ᄀ; ) HANGUL LETTER KIYEOK
+3132;3132;3132;1101;1101; # (ㄲ; ㄲ; ㄲ; ᄁ; ᄁ; ) HANGUL LETTER SSANGKIYEOK
+3133;3133;3133;11AA;11AA; # (ㄳ; ㄳ; ㄳ; ᆪ; ᆪ; ) HANGUL LETTER KIYEOK-SIOS
+3134;3134;3134;1102;1102; # (ㄴ; ㄴ; ㄴ; ᄂ; ᄂ; ) HANGUL LETTER NIEUN
+3135;3135;3135;11AC;11AC; # (ㄵ; ㄵ; ㄵ; ᆬ; ᆬ; ) HANGUL LETTER NIEUN-CIEUC
+3136;3136;3136;11AD;11AD; # (ㄶ; ㄶ; ㄶ; ᆭ; ᆭ; ) HANGUL LETTER NIEUN-HIEUH
+3137;3137;3137;1103;1103; # (ㄷ; ㄷ; ㄷ; ᄃ; ᄃ; ) HANGUL LETTER TIKEUT
+3138;3138;3138;1104;1104; # (ㄸ; ㄸ; ㄸ; ᄄ; ᄄ; ) HANGUL LETTER SSANGTIKEUT
+3139;3139;3139;1105;1105; # (ㄹ; ㄹ; ㄹ; ᄅ; ᄅ; ) HANGUL LETTER RIEUL
+313A;313A;313A;11B0;11B0; # (ㄺ; ㄺ; ㄺ; ᆰ; ᆰ; ) HANGUL LETTER RIEUL-KIYEOK
+313B;313B;313B;11B1;11B1; # (ㄻ; ㄻ; ㄻ; ᆱ; ᆱ; ) HANGUL LETTER RIEUL-MIEUM
+313C;313C;313C;11B2;11B2; # (ㄼ; ㄼ; ㄼ; ᆲ; ᆲ; ) HANGUL LETTER RIEUL-PIEUP
+313D;313D;313D;11B3;11B3; # (ㄽ; ㄽ; ㄽ; ᆳ; ᆳ; ) HANGUL LETTER RIEUL-SIOS
+313E;313E;313E;11B4;11B4; # (ㄾ; ㄾ; ㄾ; ᆴ; ᆴ; ) HANGUL LETTER RIEUL-THIEUTH
+313F;313F;313F;11B5;11B5; # (ㄿ; ㄿ; ㄿ; ᆵ; ᆵ; ) HANGUL LETTER RIEUL-PHIEUPH
+3140;3140;3140;111A;111A; # (ㅀ; ㅀ; ㅀ; ᄚ; ᄚ; ) HANGUL LETTER RIEUL-HIEUH
+3141;3141;3141;1106;1106; # (ㅁ; ㅁ; ㅁ; ᄆ; ᄆ; ) HANGUL LETTER MIEUM
+3142;3142;3142;1107;1107; # (ㅂ; ㅂ; ㅂ; ᄇ; ᄇ; ) HANGUL LETTER PIEUP
+3143;3143;3143;1108;1108; # (ㅃ; ㅃ; ㅃ; ᄈ; ᄈ; ) HANGUL LETTER SSANGPIEUP
+3144;3144;3144;1121;1121; # (ㅄ; ㅄ; ㅄ; ᄡ; ᄡ; ) HANGUL LETTER PIEUP-SIOS
+3145;3145;3145;1109;1109; # (ㅅ; ㅅ; ㅅ; ᄉ; ᄉ; ) HANGUL LETTER SIOS
+3146;3146;3146;110A;110A; # (ㅆ; ㅆ; ㅆ; ᄊ; ᄊ; ) HANGUL LETTER SSANGSIOS
+3147;3147;3147;110B;110B; # (ㅇ; ㅇ; ㅇ; ᄋ; ᄋ; ) HANGUL LETTER IEUNG
+3148;3148;3148;110C;110C; # (ㅈ; ㅈ; ㅈ; ᄌ; ᄌ; ) HANGUL LETTER CIEUC
+3149;3149;3149;110D;110D; # (ㅉ; ㅉ; ㅉ; ᄍ; ᄍ; ) HANGUL LETTER SSANGCIEUC
+314A;314A;314A;110E;110E; # (ㅊ; ㅊ; ㅊ; ᄎ; ᄎ; ) HANGUL LETTER CHIEUCH
+314B;314B;314B;110F;110F; # (ㅋ; ㅋ; ㅋ; ᄏ; ᄏ; ) HANGUL LETTER KHIEUKH
+314C;314C;314C;1110;1110; # (ㅌ; ㅌ; ㅌ; ᄐ; ᄐ; ) HANGUL LETTER THIEUTH
+314D;314D;314D;1111;1111; # (ㅍ; ㅍ; ㅍ; ᄑ; ᄑ; ) HANGUL LETTER PHIEUPH
+314E;314E;314E;1112;1112; # (ㅎ; ㅎ; ㅎ; ᄒ; ᄒ; ) HANGUL LETTER HIEUH
+314F;314F;314F;1161;1161; # (ㅏ; ㅏ; ㅏ; ᅡ; ᅡ; ) HANGUL LETTER A
+3150;3150;3150;1162;1162; # (ㅐ; ㅐ; ㅐ; ᅢ; ᅢ; ) HANGUL LETTER AE
+3151;3151;3151;1163;1163; # (ㅑ; ㅑ; ㅑ; ᅣ; ᅣ; ) HANGUL LETTER YA
+3152;3152;3152;1164;1164; # (ㅒ; ㅒ; ㅒ; ᅤ; ᅤ; ) HANGUL LETTER YAE
+3153;3153;3153;1165;1165; # (ㅓ; ㅓ; ㅓ; ᅥ; ᅥ; ) HANGUL LETTER EO
+3154;3154;3154;1166;1166; # (ㅔ; ㅔ; ㅔ; ᅦ; ᅦ; ) HANGUL LETTER E
+3155;3155;3155;1167;1167; # (ㅕ; ㅕ; ㅕ; ᅧ; ᅧ; ) HANGUL LETTER YEO
+3156;3156;3156;1168;1168; # (ㅖ; ㅖ; ㅖ; ᅨ; ᅨ; ) HANGUL LETTER YE
+3157;3157;3157;1169;1169; # (ㅗ; ㅗ; ㅗ; ᅩ; ᅩ; ) HANGUL LETTER O
+3158;3158;3158;116A;116A; # (ㅘ; ㅘ; ㅘ; ᅪ; ᅪ; ) HANGUL LETTER WA
+3159;3159;3159;116B;116B; # (ㅙ; ㅙ; ㅙ; ᅫ; ᅫ; ) HANGUL LETTER WAE
+315A;315A;315A;116C;116C; # (ㅚ; ㅚ; ㅚ; ᅬ; ᅬ; ) HANGUL LETTER OE
+315B;315B;315B;116D;116D; # (ㅛ; ㅛ; ㅛ; ᅭ; ᅭ; ) HANGUL LETTER YO
+315C;315C;315C;116E;116E; # (ㅜ; ㅜ; ㅜ; ᅮ; ᅮ; ) HANGUL LETTER U
+315D;315D;315D;116F;116F; # (ㅝ; ㅝ; ㅝ; ᅯ; ᅯ; ) HANGUL LETTER WEO
+315E;315E;315E;1170;1170; # (ㅞ; ㅞ; ㅞ; ᅰ; ᅰ; ) HANGUL LETTER WE
+315F;315F;315F;1171;1171; # (ㅟ; ㅟ; ㅟ; ᅱ; ᅱ; ) HANGUL LETTER WI
+3160;3160;3160;1172;1172; # (ㅠ; ㅠ; ㅠ; ᅲ; ᅲ; ) HANGUL LETTER YU
+3161;3161;3161;1173;1173; # (ㅡ; ㅡ; ㅡ; ᅳ; ᅳ; ) HANGUL LETTER EU
+3162;3162;3162;1174;1174; # (ㅢ; ㅢ; ㅢ; ᅴ; ᅴ; ) HANGUL LETTER YI
+3163;3163;3163;1175;1175; # (ㅣ; ㅣ; ㅣ; ᅵ; ᅵ; ) HANGUL LETTER I
+3164;3164;3164;1160;1160; # (ㅤ; ㅤ; ㅤ; ᅠ; ᅠ; ) HANGUL FILLER
+3165;3165;3165;1114;1114; # (ㅥ; ㅥ; ㅥ; ᄔ; ᄔ; ) HANGUL LETTER SSANGNIEUN
+3166;3166;3166;1115;1115; # (ㅦ; ㅦ; ㅦ; ᄕ; ᄕ; ) HANGUL LETTER NIEUN-TIKEUT
+3167;3167;3167;11C7;11C7; # (ㅧ; ㅧ; ㅧ; ᇇ; ᇇ; ) HANGUL LETTER NIEUN-SIOS
+3168;3168;3168;11C8;11C8; # (ㅨ; ㅨ; ㅨ; ᇈ; ᇈ; ) HANGUL LETTER NIEUN-PANSIOS
+3169;3169;3169;11CC;11CC; # (ㅩ; ㅩ; ㅩ; ᇌ; ᇌ; ) HANGUL LETTER RIEUL-KIYEOK-SIOS
+316A;316A;316A;11CE;11CE; # (ㅪ; ㅪ; ㅪ; ᇎ; ᇎ; ) HANGUL LETTER RIEUL-TIKEUT
+316B;316B;316B;11D3;11D3; # (ㅫ; ㅫ; ㅫ; ᇓ; ᇓ; ) HANGUL LETTER RIEUL-PIEUP-SIOS
+316C;316C;316C;11D7;11D7; # (ㅬ; ㅬ; ㅬ; ᇗ; ᇗ; ) HANGUL LETTER RIEUL-PANSIOS
+316D;316D;316D;11D9;11D9; # (ㅭ; ㅭ; ㅭ; ᇙ; ᇙ; ) HANGUL LETTER RIEUL-YEORINHIEUH
+316E;316E;316E;111C;111C; # (ㅮ; ㅮ; ㅮ; ᄜ; ᄜ; ) HANGUL LETTER MIEUM-PIEUP
+316F;316F;316F;11DD;11DD; # (ㅯ; ㅯ; ㅯ; ᇝ; ᇝ; ) HANGUL LETTER MIEUM-SIOS
+3170;3170;3170;11DF;11DF; # (ㅰ; ㅰ; ㅰ; ᇟ; ᇟ; ) HANGUL LETTER MIEUM-PANSIOS
+3171;3171;3171;111D;111D; # (ㅱ; ㅱ; ㅱ; ᄝ; ᄝ; ) HANGUL LETTER KAPYEOUNMIEUM
+3172;3172;3172;111E;111E; # (ㅲ; ㅲ; ㅲ; ᄞ; ᄞ; ) HANGUL LETTER PIEUP-KIYEOK
+3173;3173;3173;1120;1120; # (ㅳ; ㅳ; ㅳ; ᄠ; ᄠ; ) HANGUL LETTER PIEUP-TIKEUT
+3174;3174;3174;1122;1122; # (ㅴ; ㅴ; ㅴ; ᄢ; ᄢ; ) HANGUL LETTER PIEUP-SIOS-KIYEOK
+3175;3175;3175;1123;1123; # (ㅵ; ㅵ; ㅵ; ᄣ; ᄣ; ) HANGUL LETTER PIEUP-SIOS-TIKEUT
+3176;3176;3176;1127;1127; # (ㅶ; ㅶ; ㅶ; ᄧ; ᄧ; ) HANGUL LETTER PIEUP-CIEUC
+3177;3177;3177;1129;1129; # (ㅷ; ㅷ; ㅷ; ᄩ; ᄩ; ) HANGUL LETTER PIEUP-THIEUTH
+3178;3178;3178;112B;112B; # (ㅸ; ㅸ; ㅸ; ᄫ; ᄫ; ) HANGUL LETTER KAPYEOUNPIEUP
+3179;3179;3179;112C;112C; # (ㅹ; ㅹ; ㅹ; ᄬ; ᄬ; ) HANGUL LETTER KAPYEOUNSSANGPIEUP
+317A;317A;317A;112D;112D; # (ㅺ; ㅺ; ㅺ; ᄭ; ᄭ; ) HANGUL LETTER SIOS-KIYEOK
+317B;317B;317B;112E;112E; # (ㅻ; ㅻ; ㅻ; ᄮ; ᄮ; ) HANGUL LETTER SIOS-NIEUN
+317C;317C;317C;112F;112F; # (ㅼ; ㅼ; ㅼ; ᄯ; ᄯ; ) HANGUL LETTER SIOS-TIKEUT
+317D;317D;317D;1132;1132; # (ㅽ; ㅽ; ㅽ; ᄲ; ᄲ; ) HANGUL LETTER SIOS-PIEUP
+317E;317E;317E;1136;1136; # (ㅾ; ㅾ; ㅾ; ᄶ; ᄶ; ) HANGUL LETTER SIOS-CIEUC
+317F;317F;317F;1140;1140; # (ㅿ; ㅿ; ㅿ; ᅀ; ᅀ; ) HANGUL LETTER PANSIOS
+3180;3180;3180;1147;1147; # (ㆀ; ㆀ; ㆀ; ᅇ; ᅇ; ) HANGUL LETTER SSANGIEUNG
+3181;3181;3181;114C;114C; # (ㆁ; ㆁ; ㆁ; ᅌ; ᅌ; ) HANGUL LETTER YESIEUNG
+3182;3182;3182;11F1;11F1; # (ㆂ; ㆂ; ㆂ; ᇱ; ᇱ; ) HANGUL LETTER YESIEUNG-SIOS
+3183;3183;3183;11F2;11F2; # (ㆃ; ㆃ; ㆃ; ᇲ; ᇲ; ) HANGUL LETTER YESIEUNG-PANSIOS
+3184;3184;3184;1157;1157; # (ㆄ; ㆄ; ㆄ; ᅗ; ᅗ; ) HANGUL LETTER KAPYEOUNPHIEUPH
+3185;3185;3185;1158;1158; # (ㆅ; ㆅ; ㆅ; ᅘ; ᅘ; ) HANGUL LETTER SSANGHIEUH
+3186;3186;3186;1159;1159; # (ㆆ; ㆆ; ㆆ; ᅙ; ᅙ; ) HANGUL LETTER YEORINHIEUH
+3187;3187;3187;1184;1184; # (ㆇ; ㆇ; ㆇ; ᆄ; ᆄ; ) HANGUL LETTER YO-YA
+3188;3188;3188;1185;1185; # (ㆈ; ㆈ; ㆈ; ᆅ; ᆅ; ) HANGUL LETTER YO-YAE
+3189;3189;3189;1188;1188; # (ㆉ; ㆉ; ㆉ; ᆈ; ᆈ; ) HANGUL LETTER YO-I
+318A;318A;318A;1191;1191; # (ㆊ; ㆊ; ㆊ; ᆑ; ᆑ; ) HANGUL LETTER YU-YEO
+318B;318B;318B;1192;1192; # (ㆋ; ㆋ; ㆋ; ᆒ; ᆒ; ) HANGUL LETTER YU-YE
+318C;318C;318C;1194;1194; # (ㆌ; ㆌ; ㆌ; ᆔ; ᆔ; ) HANGUL LETTER YU-I
+318D;318D;318D;119E;119E; # (ㆍ; ㆍ; ㆍ; ᆞ; ᆞ; ) HANGUL LETTER ARAEA
+318E;318E;318E;11A1;11A1; # (ㆎ; ㆎ; ㆎ; ᆡ; ᆡ; ) HANGUL LETTER ARAEAE
+3192;3192;3192;4E00;4E00; # (㆒; ㆒; ㆒; 一; 一; ) IDEOGRAPHIC ANNOTATION ONE MARK
+3193;3193;3193;4E8C;4E8C; # (㆓; ㆓; ㆓; 二; 二; ) IDEOGRAPHIC ANNOTATION TWO MARK
+3194;3194;3194;4E09;4E09; # (㆔; ㆔; ㆔; 三; 三; ) IDEOGRAPHIC ANNOTATION THREE MARK
+3195;3195;3195;56DB;56DB; # (㆕; ㆕; ㆕; 四; 四; ) IDEOGRAPHIC ANNOTATION FOUR MARK
+3196;3196;3196;4E0A;4E0A; # (㆖; ㆖; ㆖; 上; 上; ) IDEOGRAPHIC ANNOTATION TOP MARK
+3197;3197;3197;4E2D;4E2D; # (㆗; ㆗; ㆗; 中; 中; ) IDEOGRAPHIC ANNOTATION MIDDLE MARK
+3198;3198;3198;4E0B;4E0B; # (㆘; ㆘; ㆘; 下; 下; ) IDEOGRAPHIC ANNOTATION BOTTOM MARK
+3199;3199;3199;7532;7532; # (㆙; ㆙; ㆙; 甲; 甲; ) IDEOGRAPHIC ANNOTATION FIRST MARK
+319A;319A;319A;4E59;4E59; # (㆚; ㆚; ㆚; 乙; 乙; ) IDEOGRAPHIC ANNOTATION SECOND MARK
+319B;319B;319B;4E19;4E19; # (㆛; ㆛; ㆛; 丙; 丙; ) IDEOGRAPHIC ANNOTATION THIRD MARK
+319C;319C;319C;4E01;4E01; # (㆜; ㆜; ㆜; 丁; 丁; ) IDEOGRAPHIC ANNOTATION FOURTH MARK
+319D;319D;319D;5929;5929; # (㆝; ㆝; ㆝; 天; 天; ) IDEOGRAPHIC ANNOTATION HEAVEN MARK
+319E;319E;319E;5730;5730; # (㆞; ㆞; ㆞; 地; 地; ) IDEOGRAPHIC ANNOTATION EARTH MARK
+319F;319F;319F;4EBA;4EBA; # (㆟; ㆟; ㆟; 人; 人; ) IDEOGRAPHIC ANNOTATION MAN MARK
+3200;3200;3200;0028 1100 0029;0028 1100 0029; # (㈀; ㈀; ㈀; (ᄀ); (ᄀ); ) PARENTHESIZED HANGUL KIYEOK
+3201;3201;3201;0028 1102 0029;0028 1102 0029; # (㈁; ㈁; ㈁; (ᄂ); (ᄂ); ) PARENTHESIZED HANGUL NIEUN
+3202;3202;3202;0028 1103 0029;0028 1103 0029; # (㈂; ㈂; ㈂; (ᄃ); (ᄃ); ) PARENTHESIZED HANGUL TIKEUT
+3203;3203;3203;0028 1105 0029;0028 1105 0029; # (㈃; ㈃; ㈃; (ᄅ); (ᄅ); ) PARENTHESIZED HANGUL RIEUL
+3204;3204;3204;0028 1106 0029;0028 1106 0029; # (㈄; ㈄; ㈄; (ᄆ); (ᄆ); ) PARENTHESIZED HANGUL MIEUM
+3205;3205;3205;0028 1107 0029;0028 1107 0029; # (㈅; ㈅; ㈅; (ᄇ); (ᄇ); ) PARENTHESIZED HANGUL PIEUP
+3206;3206;3206;0028 1109 0029;0028 1109 0029; # (㈆; ㈆; ㈆; (ᄉ); (ᄉ); ) PARENTHESIZED HANGUL SIOS
+3207;3207;3207;0028 110B 0029;0028 110B 0029; # (㈇; ㈇; ㈇; (ᄋ); (ᄋ); ) PARENTHESIZED HANGUL IEUNG
+3208;3208;3208;0028 110C 0029;0028 110C 0029; # (㈈; ㈈; ㈈; (ᄌ); (ᄌ); ) PARENTHESIZED HANGUL CIEUC
+3209;3209;3209;0028 110E 0029;0028 110E 0029; # (㈉; ㈉; ㈉; (ᄎ); (ᄎ); ) PARENTHESIZED HANGUL CHIEUCH
+320A;320A;320A;0028 110F 0029;0028 110F 0029; # (㈊; ㈊; ㈊; (ᄏ); (ᄏ); ) PARENTHESIZED HANGUL KHIEUKH
+320B;320B;320B;0028 1110 0029;0028 1110 0029; # (㈋; ㈋; ㈋; (ᄐ); (ᄐ); ) PARENTHESIZED HANGUL THIEUTH
+320C;320C;320C;0028 1111 0029;0028 1111 0029; # (㈌; ㈌; ㈌; (ᄑ); (ᄑ); ) PARENTHESIZED HANGUL PHIEUPH
+320D;320D;320D;0028 1112 0029;0028 1112 0029; # (㈍; ㈍; ㈍; (ᄒ); (ᄒ); ) PARENTHESIZED HANGUL HIEUH
+320E;320E;320E;0028 AC00 0029;0028 1100 1161 0029; # (㈎; ㈎; ㈎; (가); (가); ) PARENTHESIZED HANGUL KIYEOK A
+320F;320F;320F;0028 B098 0029;0028 1102 1161 0029; # (㈏; ㈏; ㈏; (나); (나); ) PARENTHESIZED HANGUL NIEUN A
+3210;3210;3210;0028 B2E4 0029;0028 1103 1161 0029; # (㈐; ㈐; ㈐; (다); (다); ) PARENTHESIZED HANGUL TIKEUT A
+3211;3211;3211;0028 B77C 0029;0028 1105 1161 0029; # (㈑; ㈑; ㈑; (라); (라); ) PARENTHESIZED HANGUL RIEUL A
+3212;3212;3212;0028 B9C8 0029;0028 1106 1161 0029; # (㈒; ㈒; ㈒; (마); (마); ) PARENTHESIZED HANGUL MIEUM A
+3213;3213;3213;0028 BC14 0029;0028 1107 1161 0029; # (㈓; ㈓; ㈓; (바); (바); ) PARENTHESIZED HANGUL PIEUP A
+3214;3214;3214;0028 C0AC 0029;0028 1109 1161 0029; # (㈔; ㈔; ㈔; (사); (사); ) PARENTHESIZED HANGUL SIOS A
+3215;3215;3215;0028 C544 0029;0028 110B 1161 0029; # (㈕; ㈕; ㈕; (아); (아); ) PARENTHESIZED HANGUL IEUNG A
+3216;3216;3216;0028 C790 0029;0028 110C 1161 0029; # (㈖; ㈖; ㈖; (자); (자); ) PARENTHESIZED HANGUL CIEUC A
+3217;3217;3217;0028 CC28 0029;0028 110E 1161 0029; # (㈗; ㈗; ㈗; (차); (차); ) PARENTHESIZED HANGUL CHIEUCH A
+3218;3218;3218;0028 CE74 0029;0028 110F 1161 0029; # (㈘; ㈘; ㈘; (카); (카); ) PARENTHESIZED HANGUL KHIEUKH A
+3219;3219;3219;0028 D0C0 0029;0028 1110 1161 0029; # (㈙; ㈙; ㈙; (타); (타); ) PARENTHESIZED HANGUL THIEUTH A
+321A;321A;321A;0028 D30C 0029;0028 1111 1161 0029; # (㈚; ㈚; ㈚; (파); (파); ) PARENTHESIZED HANGUL PHIEUPH A
+321B;321B;321B;0028 D558 0029;0028 1112 1161 0029; # (㈛; ㈛; ㈛; (하); (하); ) PARENTHESIZED HANGUL HIEUH A
+321C;321C;321C;0028 C8FC 0029;0028 110C 116E 0029; # (㈜; ㈜; ㈜; (주); (주); ) PARENTHESIZED HANGUL CIEUC U
+3220;3220;3220;0028 4E00 0029;0028 4E00 0029; # (㈠; ㈠; ㈠; (一); (一); ) PARENTHESIZED IDEOGRAPH ONE
+3221;3221;3221;0028 4E8C 0029;0028 4E8C 0029; # (㈡; ㈡; ㈡; (二); (二); ) PARENTHESIZED IDEOGRAPH TWO
+3222;3222;3222;0028 4E09 0029;0028 4E09 0029; # (㈢; ㈢; ㈢; (三); (三); ) PARENTHESIZED IDEOGRAPH THREE
+3223;3223;3223;0028 56DB 0029;0028 56DB 0029; # (㈣; ㈣; ㈣; (四); (四); ) PARENTHESIZED IDEOGRAPH FOUR
+3224;3224;3224;0028 4E94 0029;0028 4E94 0029; # (㈤; ㈤; ㈤; (五); (五); ) PARENTHESIZED IDEOGRAPH FIVE
+3225;3225;3225;0028 516D 0029;0028 516D 0029; # (㈥; ㈥; ㈥; (六); (六); ) PARENTHESIZED IDEOGRAPH SIX
+3226;3226;3226;0028 4E03 0029;0028 4E03 0029; # (㈦; ㈦; ㈦; (七); (七); ) PARENTHESIZED IDEOGRAPH SEVEN
+3227;3227;3227;0028 516B 0029;0028 516B 0029; # (㈧; ㈧; ㈧; (八); (八); ) PARENTHESIZED IDEOGRAPH EIGHT
+3228;3228;3228;0028 4E5D 0029;0028 4E5D 0029; # (㈨; ㈨; ㈨; (九); (九); ) PARENTHESIZED IDEOGRAPH NINE
+3229;3229;3229;0028 5341 0029;0028 5341 0029; # (㈩; ㈩; ㈩; (十); (十); ) PARENTHESIZED IDEOGRAPH TEN
+322A;322A;322A;0028 6708 0029;0028 6708 0029; # (㈪; ㈪; ㈪; (月); (月); ) PARENTHESIZED IDEOGRAPH MOON
+322B;322B;322B;0028 706B 0029;0028 706B 0029; # (㈫; ㈫; ㈫; (火); (火); ) PARENTHESIZED IDEOGRAPH FIRE
+322C;322C;322C;0028 6C34 0029;0028 6C34 0029; # (㈬; ㈬; ㈬; (水); (水); ) PARENTHESIZED IDEOGRAPH WATER
+322D;322D;322D;0028 6728 0029;0028 6728 0029; # (㈭; ㈭; ㈭; (木); (木); ) PARENTHESIZED IDEOGRAPH WOOD
+322E;322E;322E;0028 91D1 0029;0028 91D1 0029; # (㈮; ㈮; ㈮; (金); (金); ) PARENTHESIZED IDEOGRAPH METAL
+322F;322F;322F;0028 571F 0029;0028 571F 0029; # (㈯; ㈯; ㈯; (土); (土); ) PARENTHESIZED IDEOGRAPH EARTH
+3230;3230;3230;0028 65E5 0029;0028 65E5 0029; # (㈰; ㈰; ㈰; (日); (日); ) PARENTHESIZED IDEOGRAPH SUN
+3231;3231;3231;0028 682A 0029;0028 682A 0029; # (㈱; ㈱; ㈱; (株); (株); ) PARENTHESIZED IDEOGRAPH STOCK
+3232;3232;3232;0028 6709 0029;0028 6709 0029; # (㈲; ㈲; ㈲; (有); (有); ) PARENTHESIZED IDEOGRAPH HAVE
+3233;3233;3233;0028 793E 0029;0028 793E 0029; # (㈳; ㈳; ㈳; (社); (社); ) PARENTHESIZED IDEOGRAPH SOCIETY
+3234;3234;3234;0028 540D 0029;0028 540D 0029; # (㈴; ㈴; ㈴; (名); (名); ) PARENTHESIZED IDEOGRAPH NAME
+3235;3235;3235;0028 7279 0029;0028 7279 0029; # (㈵; ㈵; ㈵; (特); (特); ) PARENTHESIZED IDEOGRAPH SPECIAL
+3236;3236;3236;0028 8CA1 0029;0028 8CA1 0029; # (㈶; ㈶; ㈶; (財); (財); ) PARENTHESIZED IDEOGRAPH FINANCIAL
+3237;3237;3237;0028 795D 0029;0028 795D 0029; # (㈷; ㈷; ㈷; (祝); (祝); ) PARENTHESIZED IDEOGRAPH CONGRATULATION
+3238;3238;3238;0028 52B4 0029;0028 52B4 0029; # (㈸; ㈸; ㈸; (労); (労); ) PARENTHESIZED IDEOGRAPH LABOR
+3239;3239;3239;0028 4EE3 0029;0028 4EE3 0029; # (㈹; ㈹; ㈹; (代); (代); ) PARENTHESIZED IDEOGRAPH REPRESENT
+323A;323A;323A;0028 547C 0029;0028 547C 0029; # (㈺; ㈺; ㈺; (呼); (呼); ) PARENTHESIZED IDEOGRAPH CALL
+323B;323B;323B;0028 5B66 0029;0028 5B66 0029; # (㈻; ㈻; ㈻; (学); (学); ) PARENTHESIZED IDEOGRAPH STUDY
+323C;323C;323C;0028 76E3 0029;0028 76E3 0029; # (㈼; ㈼; ㈼; (監); (監); ) PARENTHESIZED IDEOGRAPH SUPERVISE
+323D;323D;323D;0028 4F01 0029;0028 4F01 0029; # (㈽; ㈽; ㈽; (企); (企); ) PARENTHESIZED IDEOGRAPH ENTERPRISE
+323E;323E;323E;0028 8CC7 0029;0028 8CC7 0029; # (㈾; ㈾; ㈾; (資); (資); ) PARENTHESIZED IDEOGRAPH RESOURCE
+323F;323F;323F;0028 5354 0029;0028 5354 0029; # (㈿; ㈿; ㈿; (協); (協); ) PARENTHESIZED IDEOGRAPH ALLIANCE
+3240;3240;3240;0028 796D 0029;0028 796D 0029; # (㉀; ㉀; ㉀; (祭); (祭); ) PARENTHESIZED IDEOGRAPH FESTIVAL
+3241;3241;3241;0028 4F11 0029;0028 4F11 0029; # (㉁; ㉁; ㉁; (休); (休); ) PARENTHESIZED IDEOGRAPH REST
+3242;3242;3242;0028 81EA 0029;0028 81EA 0029; # (㉂; ㉂; ㉂; (自); (自); ) PARENTHESIZED IDEOGRAPH SELF
+3243;3243;3243;0028 81F3 0029;0028 81F3 0029; # (㉃; ㉃; ㉃; (至); (至); ) PARENTHESIZED IDEOGRAPH REACH
+3260;3260;3260;1100;1100; # (㉠; ㉠; ㉠; ᄀ; ᄀ; ) CIRCLED HANGUL KIYEOK
+3261;3261;3261;1102;1102; # (㉡; ㉡; ㉡; ᄂ; ᄂ; ) CIRCLED HANGUL NIEUN
+3262;3262;3262;1103;1103; # (㉢; ㉢; ㉢; ᄃ; ᄃ; ) CIRCLED HANGUL TIKEUT
+3263;3263;3263;1105;1105; # (㉣; ㉣; ㉣; ᄅ; ᄅ; ) CIRCLED HANGUL RIEUL
+3264;3264;3264;1106;1106; # (㉤; ㉤; ㉤; ᄆ; ᄆ; ) CIRCLED HANGUL MIEUM
+3265;3265;3265;1107;1107; # (㉥; ㉥; ㉥; ᄇ; ᄇ; ) CIRCLED HANGUL PIEUP
+3266;3266;3266;1109;1109; # (㉦; ㉦; ㉦; ᄉ; ᄉ; ) CIRCLED HANGUL SIOS
+3267;3267;3267;110B;110B; # (㉧; ㉧; ㉧; ᄋ; ᄋ; ) CIRCLED HANGUL IEUNG
+3268;3268;3268;110C;110C; # (㉨; ㉨; ㉨; ᄌ; ᄌ; ) CIRCLED HANGUL CIEUC
+3269;3269;3269;110E;110E; # (㉩; ㉩; ㉩; ᄎ; ᄎ; ) CIRCLED HANGUL CHIEUCH
+326A;326A;326A;110F;110F; # (㉪; ㉪; ㉪; ᄏ; ᄏ; ) CIRCLED HANGUL KHIEUKH
+326B;326B;326B;1110;1110; # (㉫; ㉫; ㉫; ᄐ; ᄐ; ) CIRCLED HANGUL THIEUTH
+326C;326C;326C;1111;1111; # (㉬; ㉬; ㉬; ᄑ; ᄑ; ) CIRCLED HANGUL PHIEUPH
+326D;326D;326D;1112;1112; # (㉭; ㉭; ㉭; ᄒ; ᄒ; ) CIRCLED HANGUL HIEUH
+326E;326E;326E;AC00;1100 1161; # (㉮; ㉮; ㉮; 가; 가; ) CIRCLED HANGUL KIYEOK A
+326F;326F;326F;B098;1102 1161; # (㉯; ㉯; ㉯; 나; 나; ) CIRCLED HANGUL NIEUN A
+3270;3270;3270;B2E4;1103 1161; # (㉰; ㉰; ㉰; 다; 다; ) CIRCLED HANGUL TIKEUT A
+3271;3271;3271;B77C;1105 1161; # (㉱; ㉱; ㉱; 라; 라; ) CIRCLED HANGUL RIEUL A
+3272;3272;3272;B9C8;1106 1161; # (㉲; ㉲; ㉲; 마; 마; ) CIRCLED HANGUL MIEUM A
+3273;3273;3273;BC14;1107 1161; # (㉳; ㉳; ㉳; 바; 바; ) CIRCLED HANGUL PIEUP A
+3274;3274;3274;C0AC;1109 1161; # (㉴; ㉴; ㉴; 사; 사; ) CIRCLED HANGUL SIOS A
+3275;3275;3275;C544;110B 1161; # (㉵; ㉵; ㉵; 아; 아; ) CIRCLED HANGUL IEUNG A
+3276;3276;3276;C790;110C 1161; # (㉶; ㉶; ㉶; 자; 자; ) CIRCLED HANGUL CIEUC A
+3277;3277;3277;CC28;110E 1161; # (㉷; ㉷; ㉷; 차; 차; ) CIRCLED HANGUL CHIEUCH A
+3278;3278;3278;CE74;110F 1161; # (㉸; ㉸; ㉸; 카; 카; ) CIRCLED HANGUL KHIEUKH A
+3279;3279;3279;D0C0;1110 1161; # (㉹; ㉹; ㉹; 타; 타; ) CIRCLED HANGUL THIEUTH A
+327A;327A;327A;D30C;1111 1161; # (㉺; ㉺; ㉺; 파; 파; ) CIRCLED HANGUL PHIEUPH A
+327B;327B;327B;D558;1112 1161; # (㉻; ㉻; ㉻; 하; 하; ) CIRCLED HANGUL HIEUH A
+3280;3280;3280;4E00;4E00; # (㊀; ㊀; ㊀; 一; 一; ) CIRCLED IDEOGRAPH ONE
+3281;3281;3281;4E8C;4E8C; # (㊁; ㊁; ㊁; 二; 二; ) CIRCLED IDEOGRAPH TWO
+3282;3282;3282;4E09;4E09; # (㊂; ㊂; ㊂; 三; 三; ) CIRCLED IDEOGRAPH THREE
+3283;3283;3283;56DB;56DB; # (㊃; ㊃; ㊃; 四; 四; ) CIRCLED IDEOGRAPH FOUR
+3284;3284;3284;4E94;4E94; # (㊄; ㊄; ㊄; 五; 五; ) CIRCLED IDEOGRAPH FIVE
+3285;3285;3285;516D;516D; # (㊅; ㊅; ㊅; 六; 六; ) CIRCLED IDEOGRAPH SIX
+3286;3286;3286;4E03;4E03; # (㊆; ㊆; ㊆; 七; 七; ) CIRCLED IDEOGRAPH SEVEN
+3287;3287;3287;516B;516B; # (㊇; ㊇; ㊇; 八; 八; ) CIRCLED IDEOGRAPH EIGHT
+3288;3288;3288;4E5D;4E5D; # (㊈; ㊈; ㊈; 九; 九; ) CIRCLED IDEOGRAPH NINE
+3289;3289;3289;5341;5341; # (㊉; ㊉; ㊉; 十; 十; ) CIRCLED IDEOGRAPH TEN
+328A;328A;328A;6708;6708; # (㊊; ㊊; ㊊; 月; 月; ) CIRCLED IDEOGRAPH MOON
+328B;328B;328B;706B;706B; # (㊋; ㊋; ㊋; 火; 火; ) CIRCLED IDEOGRAPH FIRE
+328C;328C;328C;6C34;6C34; # (㊌; ㊌; ㊌; 水; 水; ) CIRCLED IDEOGRAPH WATER
+328D;328D;328D;6728;6728; # (㊍; ㊍; ㊍; 木; 木; ) CIRCLED IDEOGRAPH WOOD
+328E;328E;328E;91D1;91D1; # (㊎; ㊎; ㊎; 金; 金; ) CIRCLED IDEOGRAPH METAL
+328F;328F;328F;571F;571F; # (㊏; ㊏; ㊏; 土; 土; ) CIRCLED IDEOGRAPH EARTH
+3290;3290;3290;65E5;65E5; # (㊐; ㊐; ㊐; 日; 日; ) CIRCLED IDEOGRAPH SUN
+3291;3291;3291;682A;682A; # (㊑; ㊑; ㊑; 株; 株; ) CIRCLED IDEOGRAPH STOCK
+3292;3292;3292;6709;6709; # (㊒; ㊒; ㊒; 有; 有; ) CIRCLED IDEOGRAPH HAVE
+3293;3293;3293;793E;793E; # (㊓; ㊓; ㊓; 社; 社; ) CIRCLED IDEOGRAPH SOCIETY
+3294;3294;3294;540D;540D; # (㊔; ㊔; ㊔; 名; 名; ) CIRCLED IDEOGRAPH NAME
+3295;3295;3295;7279;7279; # (㊕; ㊕; ㊕; 特; 特; ) CIRCLED IDEOGRAPH SPECIAL
+3296;3296;3296;8CA1;8CA1; # (㊖; ㊖; ㊖; 財; 財; ) CIRCLED IDEOGRAPH FINANCIAL
+3297;3297;3297;795D;795D; # (㊗; ㊗; ㊗; 祝; 祝; ) CIRCLED IDEOGRAPH CONGRATULATION
+3298;3298;3298;52B4;52B4; # (㊘; ㊘; ㊘; 労; 労; ) CIRCLED IDEOGRAPH LABOR
+3299;3299;3299;79D8;79D8; # (㊙; ㊙; ㊙; 秘; 秘; ) CIRCLED IDEOGRAPH SECRET
+329A;329A;329A;7537;7537; # (㊚; ㊚; ㊚; 男; 男; ) CIRCLED IDEOGRAPH MALE
+329B;329B;329B;5973;5973; # (㊛; ㊛; ㊛; 女; 女; ) CIRCLED IDEOGRAPH FEMALE
+329C;329C;329C;9069;9069; # (㊜; ㊜; ㊜; 適; 適; ) CIRCLED IDEOGRAPH SUITABLE
+329D;329D;329D;512A;512A; # (㊝; ㊝; ㊝; 優; 優; ) CIRCLED IDEOGRAPH EXCELLENT
+329E;329E;329E;5370;5370; # (㊞; ㊞; ㊞; 印; 印; ) CIRCLED IDEOGRAPH PRINT
+329F;329F;329F;6CE8;6CE8; # (㊟; ㊟; ㊟; 注; 注; ) CIRCLED IDEOGRAPH ATTENTION
+32A0;32A0;32A0;9805;9805; # (㊠; ㊠; ㊠; 項; 項; ) CIRCLED IDEOGRAPH ITEM
+32A1;32A1;32A1;4F11;4F11; # (㊡; ㊡; ㊡; 休; 休; ) CIRCLED IDEOGRAPH REST
+32A2;32A2;32A2;5199;5199; # (㊢; ㊢; ㊢; 写; 写; ) CIRCLED IDEOGRAPH COPY
+32A3;32A3;32A3;6B63;6B63; # (㊣; ㊣; ㊣; 正; 正; ) CIRCLED IDEOGRAPH CORRECT
+32A4;32A4;32A4;4E0A;4E0A; # (㊤; ㊤; ㊤; 上; 上; ) CIRCLED IDEOGRAPH HIGH
+32A5;32A5;32A5;4E2D;4E2D; # (㊥; ㊥; ㊥; 中; 中; ) CIRCLED IDEOGRAPH CENTRE
+32A6;32A6;32A6;4E0B;4E0B; # (㊦; ㊦; ㊦; 下; 下; ) CIRCLED IDEOGRAPH LOW
+32A7;32A7;32A7;5DE6;5DE6; # (㊧; ㊧; ㊧; 左; 左; ) CIRCLED IDEOGRAPH LEFT
+32A8;32A8;32A8;53F3;53F3; # (㊨; ㊨; ㊨; 右; 右; ) CIRCLED IDEOGRAPH RIGHT
+32A9;32A9;32A9;533B;533B; # (㊩; ㊩; ㊩; 医; 医; ) CIRCLED IDEOGRAPH MEDICINE
+32AA;32AA;32AA;5B97;5B97; # (㊪; ㊪; ㊪; 宗; 宗; ) CIRCLED IDEOGRAPH RELIGION
+32AB;32AB;32AB;5B66;5B66; # (㊫; ㊫; ㊫; 学; 学; ) CIRCLED IDEOGRAPH STUDY
+32AC;32AC;32AC;76E3;76E3; # (㊬; ㊬; ㊬; 監; 監; ) CIRCLED IDEOGRAPH SUPERVISE
+32AD;32AD;32AD;4F01;4F01; # (㊭; ㊭; ㊭; 企; 企; ) CIRCLED IDEOGRAPH ENTERPRISE
+32AE;32AE;32AE;8CC7;8CC7; # (㊮; ㊮; ㊮; 資; 資; ) CIRCLED IDEOGRAPH RESOURCE
+32AF;32AF;32AF;5354;5354; # (㊯; ㊯; ㊯; 協; 協; ) CIRCLED IDEOGRAPH ALLIANCE
+32B0;32B0;32B0;591C;591C; # (㊰; ㊰; ㊰; 夜; 夜; ) CIRCLED IDEOGRAPH NIGHT
+32C0;32C0;32C0;0031 6708;0031 6708; # (㋀; ㋀; ㋀; 1月; 1月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+32C1;32C1;32C1;0032 6708;0032 6708; # (㋁; ㋁; ㋁; 2月; 2月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+32C2;32C2;32C2;0033 6708;0033 6708; # (㋂; ㋂; ㋂; 3月; 3月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+32C3;32C3;32C3;0034 6708;0034 6708; # (㋃; ㋃; ㋃; 4月; 4月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+32C4;32C4;32C4;0035 6708;0035 6708; # (㋄; ㋄; ㋄; 5月; 5月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+32C5;32C5;32C5;0036 6708;0036 6708; # (㋅; ㋅; ㋅; 6月; 6月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+32C6;32C6;32C6;0037 6708;0037 6708; # (㋆; ㋆; ㋆; 7月; 7月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+32C7;32C7;32C7;0038 6708;0038 6708; # (㋇; ㋇; ㋇; 8月; 8月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+32C8;32C8;32C8;0039 6708;0039 6708; # (㋈; ㋈; ㋈; 9月; 9月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+32C9;32C9;32C9;0031 0030 6708;0031 0030 6708; # (㋉; ㋉; ㋉; 10月; 10月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+32CA;32CA;32CA;0031 0031 6708;0031 0031 6708; # (㋊; ㋊; ㋊; 11月; 11月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+32CB;32CB;32CB;0031 0032 6708;0031 0032 6708; # (㋋; ㋋; ㋋; 12月; 12月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32D0;32D0;32D0;30A2;30A2; # (㋐; ㋐; ㋐; ア; ア; ) CIRCLED KATAKANA A
+32D1;32D1;32D1;30A4;30A4; # (㋑; ㋑; ㋑; イ; イ; ) CIRCLED KATAKANA I
+32D2;32D2;32D2;30A6;30A6; # (㋒; ㋒; ㋒; ウ; ウ; ) CIRCLED KATAKANA U
+32D3;32D3;32D3;30A8;30A8; # (㋓; ㋓; ㋓; エ; エ; ) CIRCLED KATAKANA E
+32D4;32D4;32D4;30AA;30AA; # (㋔; ㋔; ㋔; オ; オ; ) CIRCLED KATAKANA O
+32D5;32D5;32D5;30AB;30AB; # (㋕; ㋕; ㋕; カ; カ; ) CIRCLED KATAKANA KA
+32D6;32D6;32D6;30AD;30AD; # (㋖; ㋖; ㋖; キ; キ; ) CIRCLED KATAKANA KI
+32D7;32D7;32D7;30AF;30AF; # (㋗; ㋗; ㋗; ク; ク; ) CIRCLED KATAKANA KU
+32D8;32D8;32D8;30B1;30B1; # (㋘; ㋘; ㋘; ケ; ケ; ) CIRCLED KATAKANA KE
+32D9;32D9;32D9;30B3;30B3; # (㋙; ㋙; ㋙; コ; コ; ) CIRCLED KATAKANA KO
+32DA;32DA;32DA;30B5;30B5; # (㋚; ㋚; ㋚; サ; サ; ) CIRCLED KATAKANA SA
+32DB;32DB;32DB;30B7;30B7; # (㋛; ㋛; ㋛; シ; シ; ) CIRCLED KATAKANA SI
+32DC;32DC;32DC;30B9;30B9; # (㋜; ㋜; ㋜; ス; ス; ) CIRCLED KATAKANA SU
+32DD;32DD;32DD;30BB;30BB; # (㋝; ㋝; ㋝; セ; セ; ) CIRCLED KATAKANA SE
+32DE;32DE;32DE;30BD;30BD; # (㋞; ㋞; ㋞; ソ; ソ; ) CIRCLED KATAKANA SO
+32DF;32DF;32DF;30BF;30BF; # (㋟; ㋟; ㋟; タ; タ; ) CIRCLED KATAKANA TA
+32E0;32E0;32E0;30C1;30C1; # (㋠; ㋠; ㋠; チ; チ; ) CIRCLED KATAKANA TI
+32E1;32E1;32E1;30C4;30C4; # (㋡; ㋡; ㋡; ツ; ツ; ) CIRCLED KATAKANA TU
+32E2;32E2;32E2;30C6;30C6; # (㋢; ㋢; ㋢; テ; テ; ) CIRCLED KATAKANA TE
+32E3;32E3;32E3;30C8;30C8; # (㋣; ㋣; ㋣; ト; ト; ) CIRCLED KATAKANA TO
+32E4;32E4;32E4;30CA;30CA; # (㋤; ㋤; ㋤; ナ; ナ; ) CIRCLED KATAKANA NA
+32E5;32E5;32E5;30CB;30CB; # (㋥; ㋥; ㋥; ニ; ニ; ) CIRCLED KATAKANA NI
+32E6;32E6;32E6;30CC;30CC; # (㋦; ㋦; ㋦; ヌ; ヌ; ) CIRCLED KATAKANA NU
+32E7;32E7;32E7;30CD;30CD; # (㋧; ㋧; ㋧; ネ; ネ; ) CIRCLED KATAKANA NE
+32E8;32E8;32E8;30CE;30CE; # (㋨; ㋨; ㋨; ノ; ノ; ) CIRCLED KATAKANA NO
+32E9;32E9;32E9;30CF;30CF; # (㋩; ㋩; ㋩; ハ; ハ; ) CIRCLED KATAKANA HA
+32EA;32EA;32EA;30D2;30D2; # (㋪; ㋪; ㋪; ヒ; ヒ; ) CIRCLED KATAKANA HI
+32EB;32EB;32EB;30D5;30D5; # (㋫; ㋫; ㋫; フ; フ; ) CIRCLED KATAKANA HU
+32EC;32EC;32EC;30D8;30D8; # (㋬; ㋬; ㋬; ヘ; ヘ; ) CIRCLED KATAKANA HE
+32ED;32ED;32ED;30DB;30DB; # (㋭; ㋭; ㋭; ホ; ホ; ) CIRCLED KATAKANA HO
+32EE;32EE;32EE;30DE;30DE; # (㋮; ㋮; ㋮; マ; マ; ) CIRCLED KATAKANA MA
+32EF;32EF;32EF;30DF;30DF; # (㋯; ㋯; ㋯; ミ; ミ; ) CIRCLED KATAKANA MI
+32F0;32F0;32F0;30E0;30E0; # (㋰; ㋰; ㋰; ム; ム; ) CIRCLED KATAKANA MU
+32F1;32F1;32F1;30E1;30E1; # (㋱; ㋱; ㋱; メ; メ; ) CIRCLED KATAKANA ME
+32F2;32F2;32F2;30E2;30E2; # (㋲; ㋲; ㋲; モ; モ; ) CIRCLED KATAKANA MO
+32F3;32F3;32F3;30E4;30E4; # (㋳; ㋳; ㋳; ヤ; ヤ; ) CIRCLED KATAKANA YA
+32F4;32F4;32F4;30E6;30E6; # (㋴; ㋴; ㋴; ユ; ユ; ) CIRCLED KATAKANA YU
+32F5;32F5;32F5;30E8;30E8; # (㋵; ㋵; ㋵; ヨ; ヨ; ) CIRCLED KATAKANA YO
+32F6;32F6;32F6;30E9;30E9; # (㋶; ㋶; ㋶; ラ; ラ; ) CIRCLED KATAKANA RA
+32F7;32F7;32F7;30EA;30EA; # (㋷; ㋷; ㋷; リ; リ; ) CIRCLED KATAKANA RI
+32F8;32F8;32F8;30EB;30EB; # (㋸; ㋸; ㋸; ル; ル; ) CIRCLED KATAKANA RU
+32F9;32F9;32F9;30EC;30EC; # (㋹; ㋹; ㋹; レ; レ; ) CIRCLED KATAKANA RE
+32FA;32FA;32FA;30ED;30ED; # (㋺; ㋺; ㋺; ロ; ロ; ) CIRCLED KATAKANA RO
+32FB;32FB;32FB;30EF;30EF; # (㋻; ㋻; ㋻; ワ; ワ; ) CIRCLED KATAKANA WA
+32FC;32FC;32FC;30F0;30F0; # (㋼; ㋼; ㋼; ヰ; ヰ; ) CIRCLED KATAKANA WI
+32FD;32FD;32FD;30F1;30F1; # (㋽; ㋽; ㋽; ヱ; ヱ; ) CIRCLED KATAKANA WE
+32FE;32FE;32FE;30F2;30F2; # (㋾; ㋾; ㋾; ヲ; ヲ; ) CIRCLED KATAKANA WO
+3300;3300;3300;30A2 30D1 30FC 30C8;30A2 30CF 309A 30FC 30C8; # (㌀; ㌀; ㌀; アパート; アハ◌゚ート; ) SQUARE APAATO
+3301;3301;3301;30A2 30EB 30D5 30A1;30A2 30EB 30D5 30A1; # (㌁; ㌁; ㌁; アルファ; アルファ; ) SQUARE ARUHUA
+3302;3302;3302;30A2 30F3 30DA 30A2;30A2 30F3 30D8 309A 30A2; # (㌂; ㌂; ㌂; アンペア; アンヘ◌゚ア; ) SQUARE ANPEA
+3303;3303;3303;30A2 30FC 30EB;30A2 30FC 30EB; # (㌃; ㌃; ㌃; アール; アール; ) SQUARE AARU
+3304;3304;3304;30A4 30CB 30F3 30B0;30A4 30CB 30F3 30AF 3099; # (㌄; ㌄; ㌄; イニング; イニンク◌゙; ) SQUARE ININGU
+3305;3305;3305;30A4 30F3 30C1;30A4 30F3 30C1; # (㌅; ㌅; ㌅; インチ; インチ; ) SQUARE INTI
+3306;3306;3306;30A6 30A9 30F3;30A6 30A9 30F3; # (㌆; ㌆; ㌆; ウォン; ウォン; ) SQUARE UON
+3307;3307;3307;30A8 30B9 30AF 30FC 30C9;30A8 30B9 30AF 30FC 30C8 3099; # (㌇; ㌇; ㌇; エスクード; エスクート◌゙; ) SQUARE ESUKUUDO
+3308;3308;3308;30A8 30FC 30AB 30FC;30A8 30FC 30AB 30FC; # (㌈; ㌈; ㌈; エーカー; エーカー; ) SQUARE EEKAA
+3309;3309;3309;30AA 30F3 30B9;30AA 30F3 30B9; # (㌉; ㌉; ㌉; オンス; オンス; ) SQUARE ONSU
+330A;330A;330A;30AA 30FC 30E0;30AA 30FC 30E0; # (㌊; ㌊; ㌊; オーム; オーム; ) SQUARE OOMU
+330B;330B;330B;30AB 30A4 30EA;30AB 30A4 30EA; # (㌋; ㌋; ㌋; カイリ; カイリ; ) SQUARE KAIRI
+330C;330C;330C;30AB 30E9 30C3 30C8;30AB 30E9 30C3 30C8; # (㌌; ㌌; ㌌; カラット; カラット; ) SQUARE KARATTO
+330D;330D;330D;30AB 30ED 30EA 30FC;30AB 30ED 30EA 30FC; # (㌍; ㌍; ㌍; カロリー; カロリー; ) SQUARE KARORII
+330E;330E;330E;30AC 30ED 30F3;30AB 3099 30ED 30F3; # (㌎; ㌎; ㌎; ガロン; カ◌゙ロン; ) SQUARE GARON
+330F;330F;330F;30AC 30F3 30DE;30AB 3099 30F3 30DE; # (㌏; ㌏; ㌏; ガンマ; カ◌゙ンマ; ) SQUARE GANMA
+3310;3310;3310;30AE 30AC;30AD 3099 30AB 3099; # (㌐; ㌐; ㌐; ギガ; キ◌゙カ◌゙; ) SQUARE GIGA
+3311;3311;3311;30AE 30CB 30FC;30AD 3099 30CB 30FC; # (㌑; ㌑; ㌑; ギニー; キ◌゙ニー; ) SQUARE GINII
+3312;3312;3312;30AD 30E5 30EA 30FC;30AD 30E5 30EA 30FC; # (㌒; ㌒; ㌒; キュリー; キュリー; ) SQUARE KYURII
+3313;3313;3313;30AE 30EB 30C0 30FC;30AD 3099 30EB 30BF 3099 30FC; # (㌓; ㌓; ㌓; ギルダー; キ◌゙ルタ◌゙ー; ) SQUARE GIRUDAA
+3314;3314;3314;30AD 30ED;30AD 30ED; # (㌔; ㌔; ㌔; キロ; キロ; ) SQUARE KIRO
+3315;3315;3315;30AD 30ED 30B0 30E9 30E0;30AD 30ED 30AF 3099 30E9 30E0; # (㌕; ㌕; ㌕; キログラム; キロク◌゙ラム; ) SQUARE KIROGURAMU
+3316;3316;3316;30AD 30ED 30E1 30FC 30C8 30EB;30AD 30ED 30E1 30FC 30C8 30EB; # (㌖; ㌖; ㌖; キロメートル; キロメートル; ) SQUARE KIROMEETORU
+3317;3317;3317;30AD 30ED 30EF 30C3 30C8;30AD 30ED 30EF 30C3 30C8; # (㌗; ㌗; ㌗; キロワット; キロワット; ) SQUARE KIROWATTO
+3318;3318;3318;30B0 30E9 30E0;30AF 3099 30E9 30E0; # (㌘; ㌘; ㌘; グラム; ク◌゙ラム; ) SQUARE GURAMU
+3319;3319;3319;30B0 30E9 30E0 30C8 30F3;30AF 3099 30E9 30E0 30C8 30F3; # (㌙; ㌙; ㌙; グラムトン; ク◌゙ラムトン; ) SQUARE GURAMUTON
+331A;331A;331A;30AF 30EB 30BC 30A4 30ED;30AF 30EB 30BB 3099 30A4 30ED; # (㌚; ㌚; ㌚; クルゼイロ; クルセ◌゙イロ; ) SQUARE KURUZEIRO
+331B;331B;331B;30AF 30ED 30FC 30CD;30AF 30ED 30FC 30CD; # (㌛; ㌛; ㌛; クローネ; クローネ; ) SQUARE KUROONE
+331C;331C;331C;30B1 30FC 30B9;30B1 30FC 30B9; # (㌜; ㌜; ㌜; ケース; ケース; ) SQUARE KEESU
+331D;331D;331D;30B3 30EB 30CA;30B3 30EB 30CA; # (㌝; ㌝; ㌝; コルナ; コルナ; ) SQUARE KORUNA
+331E;331E;331E;30B3 30FC 30DD;30B3 30FC 30DB 309A; # (㌞; ㌞; ㌞; コーポ; コーホ◌゚; ) SQUARE KOOPO
+331F;331F;331F;30B5 30A4 30AF 30EB;30B5 30A4 30AF 30EB; # (㌟; ㌟; ㌟; サイクル; サイクル; ) SQUARE SAIKURU
+3320;3320;3320;30B5 30F3 30C1 30FC 30E0;30B5 30F3 30C1 30FC 30E0; # (㌠; ㌠; ㌠; サンチーム; サンチーム; ) SQUARE SANTIIMU
+3321;3321;3321;30B7 30EA 30F3 30B0;30B7 30EA 30F3 30AF 3099; # (㌡; ㌡; ㌡; シリング; シリンク◌゙; ) SQUARE SIRINGU
+3322;3322;3322;30BB 30F3 30C1;30BB 30F3 30C1; # (㌢; ㌢; ㌢; センチ; センチ; ) SQUARE SENTI
+3323;3323;3323;30BB 30F3 30C8;30BB 30F3 30C8; # (㌣; ㌣; ㌣; セント; セント; ) SQUARE SENTO
+3324;3324;3324;30C0 30FC 30B9;30BF 3099 30FC 30B9; # (㌤; ㌤; ㌤; ダース; タ◌゙ース; ) SQUARE DAASU
+3325;3325;3325;30C7 30B7;30C6 3099 30B7; # (㌥; ㌥; ㌥; デシ; テ◌゙シ; ) SQUARE DESI
+3326;3326;3326;30C9 30EB;30C8 3099 30EB; # (㌦; ㌦; ㌦; ドル; ト◌゙ル; ) SQUARE DORU
+3327;3327;3327;30C8 30F3;30C8 30F3; # (㌧; ㌧; ㌧; トン; トン; ) SQUARE TON
+3328;3328;3328;30CA 30CE;30CA 30CE; # (㌨; ㌨; ㌨; ナノ; ナノ; ) SQUARE NANO
+3329;3329;3329;30CE 30C3 30C8;30CE 30C3 30C8; # (㌩; ㌩; ㌩; ノット; ノット; ) SQUARE NOTTO
+332A;332A;332A;30CF 30A4 30C4;30CF 30A4 30C4; # (㌪; ㌪; ㌪; ハイツ; ハイツ; ) SQUARE HAITU
+332B;332B;332B;30D1 30FC 30BB 30F3 30C8;30CF 309A 30FC 30BB 30F3 30C8; # (㌫; ㌫; ㌫; パーセント; ハ◌゚ーセント; ) SQUARE PAASENTO
+332C;332C;332C;30D1 30FC 30C4;30CF 309A 30FC 30C4; # (㌬; ㌬; ㌬; パーツ; ハ◌゚ーツ; ) SQUARE PAATU
+332D;332D;332D;30D0 30FC 30EC 30EB;30CF 3099 30FC 30EC 30EB; # (㌭; ㌭; ㌭; バーレル; ハ◌゙ーレル; ) SQUARE BAARERU
+332E;332E;332E;30D4 30A2 30B9 30C8 30EB;30D2 309A 30A2 30B9 30C8 30EB; # (㌮; ㌮; ㌮; ピアストル; ヒ◌゚アストル; ) SQUARE PIASUTORU
+332F;332F;332F;30D4 30AF 30EB;30D2 309A 30AF 30EB; # (㌯; ㌯; ㌯; ピクル; ヒ◌゚クル; ) SQUARE PIKURU
+3330;3330;3330;30D4 30B3;30D2 309A 30B3; # (㌰; ㌰; ㌰; ピコ; ヒ◌゚コ; ) SQUARE PIKO
+3331;3331;3331;30D3 30EB;30D2 3099 30EB; # (㌱; ㌱; ㌱; ビル; ヒ◌゙ル; ) SQUARE BIRU
+3332;3332;3332;30D5 30A1 30E9 30C3 30C9;30D5 30A1 30E9 30C3 30C8 3099; # (㌲; ㌲; ㌲; ファラッド; ファラット◌゙; ) SQUARE HUARADDO
+3333;3333;3333;30D5 30A3 30FC 30C8;30D5 30A3 30FC 30C8; # (㌳; ㌳; ㌳; フィート; フィート; ) SQUARE HUIITO
+3334;3334;3334;30D6 30C3 30B7 30A7 30EB;30D5 3099 30C3 30B7 30A7 30EB; # (㌴; ㌴; ㌴; ブッシェル; フ◌゙ッシェル; ) SQUARE BUSSYERU
+3335;3335;3335;30D5 30E9 30F3;30D5 30E9 30F3; # (㌵; ㌵; ㌵; フラン; フラン; ) SQUARE HURAN
+3336;3336;3336;30D8 30AF 30BF 30FC 30EB;30D8 30AF 30BF 30FC 30EB; # (㌶; ㌶; ㌶; ヘクタール; ヘクタール; ) SQUARE HEKUTAARU
+3337;3337;3337;30DA 30BD;30D8 309A 30BD; # (㌷; ㌷; ㌷; ペソ; ヘ◌゚ソ; ) SQUARE PESO
+3338;3338;3338;30DA 30CB 30D2;30D8 309A 30CB 30D2; # (㌸; ㌸; ㌸; ペニヒ; ヘ◌゚ニヒ; ) SQUARE PENIHI
+3339;3339;3339;30D8 30EB 30C4;30D8 30EB 30C4; # (㌹; ㌹; ㌹; ヘルツ; ヘルツ; ) SQUARE HERUTU
+333A;333A;333A;30DA 30F3 30B9;30D8 309A 30F3 30B9; # (㌺; ㌺; ㌺; ペンス; ヘ◌゚ンス; ) SQUARE PENSU
+333B;333B;333B;30DA 30FC 30B8;30D8 309A 30FC 30B7 3099; # (㌻; ㌻; ㌻; ページ; ヘ◌゚ーシ◌゙; ) SQUARE PEEZI
+333C;333C;333C;30D9 30FC 30BF;30D8 3099 30FC 30BF; # (㌼; ㌼; ㌼; ベータ; ヘ◌゙ータ; ) SQUARE BEETA
+333D;333D;333D;30DD 30A4 30F3 30C8;30DB 309A 30A4 30F3 30C8; # (㌽; ㌽; ㌽; ポイント; ホ◌゚イント; ) SQUARE POINTO
+333E;333E;333E;30DC 30EB 30C8;30DB 3099 30EB 30C8; # (㌾; ㌾; ㌾; ボルト; ホ◌゙ルト; ) SQUARE BORUTO
+333F;333F;333F;30DB 30F3;30DB 30F3; # (㌿; ㌿; ㌿; ホン; ホン; ) SQUARE HON
+3340;3340;3340;30DD 30F3 30C9;30DB 309A 30F3 30C8 3099; # (㍀; ㍀; ㍀; ポンド; ホ◌゚ント◌゙; ) SQUARE PONDO
+3341;3341;3341;30DB 30FC 30EB;30DB 30FC 30EB; # (㍁; ㍁; ㍁; ホール; ホール; ) SQUARE HOORU
+3342;3342;3342;30DB 30FC 30F3;30DB 30FC 30F3; # (㍂; ㍂; ㍂; ホーン; ホーン; ) SQUARE HOON
+3343;3343;3343;30DE 30A4 30AF 30ED;30DE 30A4 30AF 30ED; # (㍃; ㍃; ㍃; マイクロ; マイクロ; ) SQUARE MAIKURO
+3344;3344;3344;30DE 30A4 30EB;30DE 30A4 30EB; # (㍄; ㍄; ㍄; マイル; マイル; ) SQUARE MAIRU
+3345;3345;3345;30DE 30C3 30CF;30DE 30C3 30CF; # (㍅; ㍅; ㍅; マッハ; マッハ; ) SQUARE MAHHA
+3346;3346;3346;30DE 30EB 30AF;30DE 30EB 30AF; # (㍆; ㍆; ㍆; マルク; マルク; ) SQUARE MARUKU
+3347;3347;3347;30DE 30F3 30B7 30E7 30F3;30DE 30F3 30B7 30E7 30F3; # (㍇; ㍇; ㍇; マンション; マンション; ) SQUARE MANSYON
+3348;3348;3348;30DF 30AF 30ED 30F3;30DF 30AF 30ED 30F3; # (㍈; ㍈; ㍈; ミクロン; ミクロン; ) SQUARE MIKURON
+3349;3349;3349;30DF 30EA;30DF 30EA; # (㍉; ㍉; ㍉; ミリ; ミリ; ) SQUARE MIRI
+334A;334A;334A;30DF 30EA 30D0 30FC 30EB;30DF 30EA 30CF 3099 30FC 30EB; # (㍊; ㍊; ㍊; ミリバール; ミリハ◌゙ール; ) SQUARE MIRIBAARU
+334B;334B;334B;30E1 30AC;30E1 30AB 3099; # (㍋; ㍋; ㍋; メガ; メカ◌゙; ) SQUARE MEGA
+334C;334C;334C;30E1 30AC 30C8 30F3;30E1 30AB 3099 30C8 30F3; # (㍌; ㍌; ㍌; メガトン; メカ◌゙トン; ) SQUARE MEGATON
+334D;334D;334D;30E1 30FC 30C8 30EB;30E1 30FC 30C8 30EB; # (㍍; ㍍; ㍍; メートル; メートル; ) SQUARE MEETORU
+334E;334E;334E;30E4 30FC 30C9;30E4 30FC 30C8 3099; # (㍎; ㍎; ㍎; ヤード; ヤート◌゙; ) SQUARE YAADO
+334F;334F;334F;30E4 30FC 30EB;30E4 30FC 30EB; # (㍏; ㍏; ㍏; ヤール; ヤール; ) SQUARE YAARU
+3350;3350;3350;30E6 30A2 30F3;30E6 30A2 30F3; # (㍐; ㍐; ㍐; ユアン; ユアン; ) SQUARE YUAN
+3351;3351;3351;30EA 30C3 30C8 30EB;30EA 30C3 30C8 30EB; # (㍑; ㍑; ㍑; リットル; リットル; ) SQUARE RITTORU
+3352;3352;3352;30EA 30E9;30EA 30E9; # (㍒; ㍒; ㍒; リラ; リラ; ) SQUARE RIRA
+3353;3353;3353;30EB 30D4 30FC;30EB 30D2 309A 30FC; # (㍓; ㍓; ㍓; ルピー; ルヒ◌゚ー; ) SQUARE RUPII
+3354;3354;3354;30EB 30FC 30D6 30EB;30EB 30FC 30D5 3099 30EB; # (㍔; ㍔; ㍔; ルーブル; ルーフ◌゙ル; ) SQUARE RUUBURU
+3355;3355;3355;30EC 30E0;30EC 30E0; # (㍕; ㍕; ㍕; レム; レム; ) SQUARE REMU
+3356;3356;3356;30EC 30F3 30C8 30B2 30F3;30EC 30F3 30C8 30B1 3099 30F3; # (㍖; ㍖; ㍖; レントゲン; レントケ◌゙ン; ) SQUARE RENTOGEN
+3357;3357;3357;30EF 30C3 30C8;30EF 30C3 30C8; # (㍗; ㍗; ㍗; ワット; ワット; ) SQUARE WATTO
+3358;3358;3358;0030 70B9;0030 70B9; # (㍘; ㍘; ㍘; 0点; 0点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+3359;3359;3359;0031 70B9;0031 70B9; # (㍙; ㍙; ㍙; 1点; 1点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+335A;335A;335A;0032 70B9;0032 70B9; # (㍚; ㍚; ㍚; 2点; 2点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+335B;335B;335B;0033 70B9;0033 70B9; # (㍛; ㍛; ㍛; 3点; 3点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+335C;335C;335C;0034 70B9;0034 70B9; # (㍜; ㍜; ㍜; 4点; 4点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+335D;335D;335D;0035 70B9;0035 70B9; # (㍝; ㍝; ㍝; 5点; 5点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+335E;335E;335E;0036 70B9;0036 70B9; # (㍞; ㍞; ㍞; 6点; 6点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+335F;335F;335F;0037 70B9;0037 70B9; # (㍟; ㍟; ㍟; 7点; 7点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+3360;3360;3360;0038 70B9;0038 70B9; # (㍠; ㍠; ㍠; 8点; 8点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+3361;3361;3361;0039 70B9;0039 70B9; # (㍡; ㍡; ㍡; 9点; 9点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+3362;3362;3362;0031 0030 70B9;0031 0030 70B9; # (㍢; ㍢; ㍢; 10点; 10点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+3363;3363;3363;0031 0031 70B9;0031 0031 70B9; # (㍣; ㍣; ㍣; 11点; 11点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+3364;3364;3364;0031 0032 70B9;0031 0032 70B9; # (㍤; ㍤; ㍤; 12点; 12点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+3365;3365;3365;0031 0033 70B9;0031 0033 70B9; # (㍥; ㍥; ㍥; 13点; 13点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+3366;3366;3366;0031 0034 70B9;0031 0034 70B9; # (㍦; ㍦; ㍦; 14点; 14点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+3367;3367;3367;0031 0035 70B9;0031 0035 70B9; # (㍧; ㍧; ㍧; 15点; 15点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+3368;3368;3368;0031 0036 70B9;0031 0036 70B9; # (㍨; ㍨; ㍨; 16点; 16点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+3369;3369;3369;0031 0037 70B9;0031 0037 70B9; # (㍩; ㍩; ㍩; 17点; 17点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+336A;336A;336A;0031 0038 70B9;0031 0038 70B9; # (㍪; ㍪; ㍪; 18点; 18点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+336B;336B;336B;0031 0039 70B9;0031 0039 70B9; # (㍫; ㍫; ㍫; 19点; 19点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+336C;336C;336C;0032 0030 70B9;0032 0030 70B9; # (㍬; ㍬; ㍬; 20点; 20点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+336D;336D;336D;0032 0031 70B9;0032 0031 70B9; # (㍭; ㍭; ㍭; 21点; 21点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+336E;336E;336E;0032 0032 70B9;0032 0032 70B9; # (㍮; ㍮; ㍮; 22点; 22点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+336F;336F;336F;0032 0033 70B9;0032 0033 70B9; # (㍯; ㍯; ㍯; 23点; 23点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3370;3370;3370;0032 0034 70B9;0032 0034 70B9; # (㍰; ㍰; ㍰; 24点; 24点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3371;3371;3371;0068 0050 0061;0068 0050 0061; # (㍱; ㍱; ㍱; hPa; hPa; ) SQUARE HPA
+3372;3372;3372;0064 0061;0064 0061; # (㍲; ㍲; ㍲; da; da; ) SQUARE DA
+3373;3373;3373;0041 0055;0041 0055; # (㍳; ㍳; ㍳; AU; AU; ) SQUARE AU
+3374;3374;3374;0062 0061 0072;0062 0061 0072; # (㍴; ㍴; ㍴; bar; bar; ) SQUARE BAR
+3375;3375;3375;006F 0056;006F 0056; # (㍵; ㍵; ㍵; oV; oV; ) SQUARE OV
+3376;3376;3376;0070 0063;0070 0063; # (㍶; ㍶; ㍶; pc; pc; ) SQUARE PC
+337B;337B;337B;5E73 6210;5E73 6210; # (㍻; ㍻; ㍻; 平成; 平成; ) SQUARE ERA NAME HEISEI
+337C;337C;337C;662D 548C;662D 548C; # (㍼; ㍼; ㍼; 昭和; 昭和; ) SQUARE ERA NAME SYOUWA
+337D;337D;337D;5927 6B63;5927 6B63; # (㍽; ㍽; ㍽; 大正; 大正; ) SQUARE ERA NAME TAISYOU
+337E;337E;337E;660E 6CBB;660E 6CBB; # (㍾; ㍾; ㍾; 明治; 明治; ) SQUARE ERA NAME MEIZI
+337F;337F;337F;682A 5F0F 4F1A 793E;682A 5F0F 4F1A 793E; # (㍿; ㍿; ㍿; 株式会社; 株式会社; ) SQUARE CORPORATION
+3380;3380;3380;0070 0041;0070 0041; # (㎀; ㎀; ㎀; pA; pA; ) SQUARE PA AMPS
+3381;3381;3381;006E 0041;006E 0041; # (㎁; ㎁; ㎁; nA; nA; ) SQUARE NA
+3382;3382;3382;03BC 0041;03BC 0041; # (㎂; ㎂; ㎂; μA; μA; ) SQUARE MU A
+3383;3383;3383;006D 0041;006D 0041; # (㎃; ㎃; ㎃; mA; mA; ) SQUARE MA
+3384;3384;3384;006B 0041;006B 0041; # (㎄; ㎄; ㎄; kA; kA; ) SQUARE KA
+3385;3385;3385;004B 0042;004B 0042; # (㎅; ㎅; ㎅; KB; KB; ) SQUARE KB
+3386;3386;3386;004D 0042;004D 0042; # (㎆; ㎆; ㎆; MB; MB; ) SQUARE MB
+3387;3387;3387;0047 0042;0047 0042; # (㎇; ㎇; ㎇; GB; GB; ) SQUARE GB
+3388;3388;3388;0063 0061 006C;0063 0061 006C; # (㎈; ㎈; ㎈; cal; cal; ) SQUARE CAL
+3389;3389;3389;006B 0063 0061 006C;006B 0063 0061 006C; # (㎉; ㎉; ㎉; kcal; kcal; ) SQUARE KCAL
+338A;338A;338A;0070 0046;0070 0046; # (㎊; ㎊; ㎊; pF; pF; ) SQUARE PF
+338B;338B;338B;006E 0046;006E 0046; # (㎋; ㎋; ㎋; nF; nF; ) SQUARE NF
+338C;338C;338C;03BC 0046;03BC 0046; # (㎌; ㎌; ㎌; μF; μF; ) SQUARE MU F
+338D;338D;338D;03BC 0067;03BC 0067; # (㎍; ㎍; ㎍; μg; μg; ) SQUARE MU G
+338E;338E;338E;006D 0067;006D 0067; # (㎎; ㎎; ㎎; mg; mg; ) SQUARE MG
+338F;338F;338F;006B 0067;006B 0067; # (㎏; ㎏; ㎏; kg; kg; ) SQUARE KG
+3390;3390;3390;0048 007A;0048 007A; # (㎐; ㎐; ㎐; Hz; Hz; ) SQUARE HZ
+3391;3391;3391;006B 0048 007A;006B 0048 007A; # (㎑; ㎑; ㎑; kHz; kHz; ) SQUARE KHZ
+3392;3392;3392;004D 0048 007A;004D 0048 007A; # (㎒; ㎒; ㎒; MHz; MHz; ) SQUARE MHZ
+3393;3393;3393;0047 0048 007A;0047 0048 007A; # (㎓; ㎓; ㎓; GHz; GHz; ) SQUARE GHZ
+3394;3394;3394;0054 0048 007A;0054 0048 007A; # (㎔; ㎔; ㎔; THz; THz; ) SQUARE THZ
+3395;3395;3395;03BC 006C;03BC 006C; # (㎕; ㎕; ㎕; μl; μl; ) SQUARE MU L
+3396;3396;3396;006D 006C;006D 006C; # (㎖; ㎖; ㎖; ml; ml; ) SQUARE ML
+3397;3397;3397;0064 006C;0064 006C; # (㎗; ㎗; ㎗; dl; dl; ) SQUARE DL
+3398;3398;3398;006B 006C;006B 006C; # (㎘; ㎘; ㎘; kl; kl; ) SQUARE KL
+3399;3399;3399;0066 006D;0066 006D; # (㎙; ㎙; ㎙; fm; fm; ) SQUARE FM
+339A;339A;339A;006E 006D;006E 006D; # (㎚; ㎚; ㎚; nm; nm; ) SQUARE NM
+339B;339B;339B;03BC 006D;03BC 006D; # (㎛; ㎛; ㎛; μm; μm; ) SQUARE MU M
+339C;339C;339C;006D 006D;006D 006D; # (㎜; ㎜; ㎜; mm; mm; ) SQUARE MM
+339D;339D;339D;0063 006D;0063 006D; # (㎝; ㎝; ㎝; cm; cm; ) SQUARE CM
+339E;339E;339E;006B 006D;006B 006D; # (㎞; ㎞; ㎞; km; km; ) SQUARE KM
+339F;339F;339F;006D 006D 0032;006D 006D 0032; # (㎟; ㎟; ㎟; mm2; mm2; ) SQUARE MM SQUARED
+33A0;33A0;33A0;0063 006D 0032;0063 006D 0032; # (㎠; ㎠; ㎠; cm2; cm2; ) SQUARE CM SQUARED
+33A1;33A1;33A1;006D 0032;006D 0032; # (㎡; ㎡; ㎡; m2; m2; ) SQUARE M SQUARED
+33A2;33A2;33A2;006B 006D 0032;006B 006D 0032; # (㎢; ㎢; ㎢; km2; km2; ) SQUARE KM SQUARED
+33A3;33A3;33A3;006D 006D 0033;006D 006D 0033; # (㎣; ㎣; ㎣; mm3; mm3; ) SQUARE MM CUBED
+33A4;33A4;33A4;0063 006D 0033;0063 006D 0033; # (㎤; ㎤; ㎤; cm3; cm3; ) SQUARE CM CUBED
+33A5;33A5;33A5;006D 0033;006D 0033; # (㎥; ㎥; ㎥; m3; m3; ) SQUARE M CUBED
+33A6;33A6;33A6;006B 006D 0033;006B 006D 0033; # (㎦; ㎦; ㎦; km3; km3; ) SQUARE KM CUBED
+33A7;33A7;33A7;006D 2215 0073;006D 2215 0073; # (㎧; ㎧; ㎧; m∕s; m∕s; ) SQUARE M OVER S
+33A8;33A8;33A8;006D 2215 0073 0032;006D 2215 0073 0032; # (㎨; ㎨; ㎨; m∕s2; m∕s2; ) SQUARE M OVER S SQUARED
+33A9;33A9;33A9;0050 0061;0050 0061; # (㎩; ㎩; ㎩; Pa; Pa; ) SQUARE PA
+33AA;33AA;33AA;006B 0050 0061;006B 0050 0061; # (㎪; ㎪; ㎪; kPa; kPa; ) SQUARE KPA
+33AB;33AB;33AB;004D 0050 0061;004D 0050 0061; # (㎫; ㎫; ㎫; MPa; MPa; ) SQUARE MPA
+33AC;33AC;33AC;0047 0050 0061;0047 0050 0061; # (㎬; ㎬; ㎬; GPa; GPa; ) SQUARE GPA
+33AD;33AD;33AD;0072 0061 0064;0072 0061 0064; # (㎭; ㎭; ㎭; rad; rad; ) SQUARE RAD
+33AE;33AE;33AE;0072 0061 0064 2215 0073;0072 0061 0064 2215 0073; # (㎮; ㎮; ㎮; rad∕s; rad∕s; ) SQUARE RAD OVER S
+33AF;33AF;33AF;0072 0061 0064 2215 0073 0032;0072 0061 0064 2215 0073 0032; # (㎯; ㎯; ㎯; rad∕s2; rad∕s2; ) SQUARE RAD OVER S SQUARED
+33B0;33B0;33B0;0070 0073;0070 0073; # (㎰; ㎰; ㎰; ps; ps; ) SQUARE PS
+33B1;33B1;33B1;006E 0073;006E 0073; # (㎱; ㎱; ㎱; ns; ns; ) SQUARE NS
+33B2;33B2;33B2;03BC 0073;03BC 0073; # (㎲; ㎲; ㎲; μs; μs; ) SQUARE MU S
+33B3;33B3;33B3;006D 0073;006D 0073; # (㎳; ㎳; ㎳; ms; ms; ) SQUARE MS
+33B4;33B4;33B4;0070 0056;0070 0056; # (㎴; ㎴; ㎴; pV; pV; ) SQUARE PV
+33B5;33B5;33B5;006E 0056;006E 0056; # (㎵; ㎵; ㎵; nV; nV; ) SQUARE NV
+33B6;33B6;33B6;03BC 0056;03BC 0056; # (㎶; ㎶; ㎶; μV; μV; ) SQUARE MU V
+33B7;33B7;33B7;006D 0056;006D 0056; # (㎷; ㎷; ㎷; mV; mV; ) SQUARE MV
+33B8;33B8;33B8;006B 0056;006B 0056; # (㎸; ㎸; ㎸; kV; kV; ) SQUARE KV
+33B9;33B9;33B9;004D 0056;004D 0056; # (㎹; ㎹; ㎹; MV; MV; ) SQUARE MV MEGA
+33BA;33BA;33BA;0070 0057;0070 0057; # (㎺; ㎺; ㎺; pW; pW; ) SQUARE PW
+33BB;33BB;33BB;006E 0057;006E 0057; # (㎻; ㎻; ㎻; nW; nW; ) SQUARE NW
+33BC;33BC;33BC;03BC 0057;03BC 0057; # (㎼; ㎼; ㎼; μW; μW; ) SQUARE MU W
+33BD;33BD;33BD;006D 0057;006D 0057; # (㎽; ㎽; ㎽; mW; mW; ) SQUARE MW
+33BE;33BE;33BE;006B 0057;006B 0057; # (㎾; ㎾; ㎾; kW; kW; ) SQUARE KW
+33BF;33BF;33BF;004D 0057;004D 0057; # (㎿; ㎿; ㎿; MW; MW; ) SQUARE MW MEGA
+33C0;33C0;33C0;006B 03A9;006B 03A9; # (㏀; ㏀; ㏀; kΩ; kΩ; ) SQUARE K OHM
+33C1;33C1;33C1;004D 03A9;004D 03A9; # (㏁; ㏁; ㏁; MΩ; MΩ; ) SQUARE M OHM
+33C2;33C2;33C2;0061 002E 006D 002E;0061 002E 006D 002E; # (㏂; ㏂; ㏂; a.m.; a.m.; ) SQUARE AM
+33C3;33C3;33C3;0042 0071;0042 0071; # (㏃; ㏃; ㏃; Bq; Bq; ) SQUARE BQ
+33C4;33C4;33C4;0063 0063;0063 0063; # (㏄; ㏄; ㏄; cc; cc; ) SQUARE CC
+33C5;33C5;33C5;0063 0064;0063 0064; # (㏅; ㏅; ㏅; cd; cd; ) SQUARE CD
+33C6;33C6;33C6;0043 2215 006B 0067;0043 2215 006B 0067; # (㏆; ㏆; ㏆; C∕kg; C∕kg; ) SQUARE C OVER KG
+33C7;33C7;33C7;0043 006F 002E;0043 006F 002E; # (㏇; ㏇; ㏇; Co.; Co.; ) SQUARE CO
+33C8;33C8;33C8;0064 0042;0064 0042; # (㏈; ㏈; ㏈; dB; dB; ) SQUARE DB
+33C9;33C9;33C9;0047 0079;0047 0079; # (㏉; ㏉; ㏉; Gy; Gy; ) SQUARE GY
+33CA;33CA;33CA;0068 0061;0068 0061; # (㏊; ㏊; ㏊; ha; ha; ) SQUARE HA
+33CB;33CB;33CB;0048 0050;0048 0050; # (㏋; ㏋; ㏋; HP; HP; ) SQUARE HP
+33CC;33CC;33CC;0069 006E;0069 006E; # (㏌; ㏌; ㏌; in; in; ) SQUARE IN
+33CD;33CD;33CD;004B 004B;004B 004B; # (㏍; ㏍; ㏍; KK; KK; ) SQUARE KK
+33CE;33CE;33CE;004B 004D;004B 004D; # (㏎; ㏎; ㏎; KM; KM; ) SQUARE KM CAPITAL
+33CF;33CF;33CF;006B 0074;006B 0074; # (㏏; ㏏; ㏏; kt; kt; ) SQUARE KT
+33D0;33D0;33D0;006C 006D;006C 006D; # (㏐; ㏐; ㏐; lm; lm; ) SQUARE LM
+33D1;33D1;33D1;006C 006E;006C 006E; # (㏑; ㏑; ㏑; ln; ln; ) SQUARE LN
+33D2;33D2;33D2;006C 006F 0067;006C 006F 0067; # (㏒; ㏒; ㏒; log; log; ) SQUARE LOG
+33D3;33D3;33D3;006C 0078;006C 0078; # (㏓; ㏓; ㏓; lx; lx; ) SQUARE LX
+33D4;33D4;33D4;006D 0062;006D 0062; # (㏔; ㏔; ㏔; mb; mb; ) SQUARE MB SMALL
+33D5;33D5;33D5;006D 0069 006C;006D 0069 006C; # (㏕; ㏕; ㏕; mil; mil; ) SQUARE MIL
+33D6;33D6;33D6;006D 006F 006C;006D 006F 006C; # (㏖; ㏖; ㏖; mol; mol; ) SQUARE MOL
+33D7;33D7;33D7;0050 0048;0050 0048; # (㏗; ㏗; ㏗; PH; PH; ) SQUARE PH
+33D8;33D8;33D8;0070 002E 006D 002E;0070 002E 006D 002E; # (㏘; ㏘; ㏘; p.m.; p.m.; ) SQUARE PM
+33D9;33D9;33D9;0050 0050 004D;0050 0050 004D; # (㏙; ㏙; ㏙; PPM; PPM; ) SQUARE PPM
+33DA;33DA;33DA;0050 0052;0050 0052; # (㏚; ㏚; ㏚; PR; PR; ) SQUARE PR
+33DB;33DB;33DB;0073 0072;0073 0072; # (㏛; ㏛; ㏛; sr; sr; ) SQUARE SR
+33DC;33DC;33DC;0053 0076;0053 0076; # (㏜; ㏜; ㏜; Sv; Sv; ) SQUARE SV
+33DD;33DD;33DD;0057 0062;0057 0062; # (㏝; ㏝; ㏝; Wb; Wb; ) SQUARE WB
+33E0;33E0;33E0;0031 65E5;0031 65E5; # (㏠; ㏠; ㏠; 1日; 1日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+33E1;33E1;33E1;0032 65E5;0032 65E5; # (㏡; ㏡; ㏡; 2日; 2日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+33E2;33E2;33E2;0033 65E5;0033 65E5; # (㏢; ㏢; ㏢; 3日; 3日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+33E3;33E3;33E3;0034 65E5;0034 65E5; # (㏣; ㏣; ㏣; 4日; 4日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+33E4;33E4;33E4;0035 65E5;0035 65E5; # (㏤; ㏤; ㏤; 5日; 5日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+33E5;33E5;33E5;0036 65E5;0036 65E5; # (㏥; ㏥; ㏥; 6日; 6日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+33E6;33E6;33E6;0037 65E5;0037 65E5; # (㏦; ㏦; ㏦; 7日; 7日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+33E7;33E7;33E7;0038 65E5;0038 65E5; # (㏧; ㏧; ㏧; 8日; 8日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+33E8;33E8;33E8;0039 65E5;0039 65E5; # (㏨; ㏨; ㏨; 9日; 9日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+33E9;33E9;33E9;0031 0030 65E5;0031 0030 65E5; # (㏩; ㏩; ㏩; 10日; 10日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+33EA;33EA;33EA;0031 0031 65E5;0031 0031 65E5; # (㏪; ㏪; ㏪; 11日; 11日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+33EB;33EB;33EB;0031 0032 65E5;0031 0032 65E5; # (㏫; ㏫; ㏫; 12日; 12日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+33EC;33EC;33EC;0031 0033 65E5;0031 0033 65E5; # (㏬; ㏬; ㏬; 13日; 13日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+33ED;33ED;33ED;0031 0034 65E5;0031 0034 65E5; # (㏭; ㏭; ㏭; 14日; 14日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+33EE;33EE;33EE;0031 0035 65E5;0031 0035 65E5; # (㏮; ㏮; ㏮; 15日; 15日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+33EF;33EF;33EF;0031 0036 65E5;0031 0036 65E5; # (㏯; ㏯; ㏯; 16日; 16日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+33F0;33F0;33F0;0031 0037 65E5;0031 0037 65E5; # (㏰; ㏰; ㏰; 17日; 17日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+33F1;33F1;33F1;0031 0038 65E5;0031 0038 65E5; # (㏱; ㏱; ㏱; 18日; 18日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+33F2;33F2;33F2;0031 0039 65E5;0031 0039 65E5; # (㏲; ㏲; ㏲; 19日; 19日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+33F3;33F3;33F3;0032 0030 65E5;0032 0030 65E5; # (㏳; ㏳; ㏳; 20日; 20日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+33F4;33F4;33F4;0032 0031 65E5;0032 0031 65E5; # (㏴; ㏴; ㏴; 21日; 21日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+33F5;33F5;33F5;0032 0032 65E5;0032 0032 65E5; # (㏵; ㏵; ㏵; 22日; 22日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+33F6;33F6;33F6;0032 0033 65E5;0032 0033 65E5; # (㏶; ㏶; ㏶; 23日; 23日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+33F7;33F7;33F7;0032 0034 65E5;0032 0034 65E5; # (㏷; ㏷; ㏷; 24日; 24日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+33F8;33F8;33F8;0032 0035 65E5;0032 0035 65E5; # (㏸; ㏸; ㏸; 25日; 25日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9;33F9;33F9;0032 0036 65E5;0032 0036 65E5; # (㏹; ㏹; ㏹; 26日; 26日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA;33FA;33FA;0032 0037 65E5;0032 0037 65E5; # (㏺; ㏺; ㏺; 27日; 27日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB;33FB;33FB;0032 0038 65E5;0032 0038 65E5; # (㏻; ㏻; ㏻; 28日; 28日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC;33FC;33FC;0032 0039 65E5;0032 0039 65E5; # (㏼; ㏼; ㏼; 29日; 29日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33FD;33FD;33FD;0033 0030 65E5;0033 0030 65E5; # (㏽; ㏽; ㏽; 30日; 30日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE;33FE;33FE;0033 0031 65E5;0033 0031 65E5; # (㏾; ㏾; ㏾; 31日; 31日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+AC00;AC00;1100 1161;AC00;1100 1161; # (가; 가; 가; 가; 가; ) HANGUL SYLLABLE GA
+AC01;AC01;1100 1161 11A8;AC01;1100 1161 11A8; # (각; 각; 각; 각; 각; ) HANGUL SYLLABLE GAG
+AC02;AC02;1100 1161 11A9;AC02;1100 1161 11A9; # (갂; 갂; 갂; 갂; 갂; ) HANGUL SYLLABLE GAGG
+AC03;AC03;1100 1161 11AA;AC03;1100 1161 11AA; # (갃; 갃; 갃; 갃; 갃; ) HANGUL SYLLABLE GAGS
+AC04;AC04;1100 1161 11AB;AC04;1100 1161 11AB; # (간; 간; 간; 간; 간; ) HANGUL SYLLABLE GAN
+AC05;AC05;1100 1161 11AC;AC05;1100 1161 11AC; # (갅; 갅; 갅; 갅; 갅; ) HANGUL SYLLABLE GANJ
+AC06;AC06;1100 1161 11AD;AC06;1100 1161 11AD; # (갆; 갆; 갆; 갆; 갆; ) HANGUL SYLLABLE GANH
+AC07;AC07;1100 1161 11AE;AC07;1100 1161 11AE; # (갇; 갇; 갇; 갇; 갇; ) HANGUL SYLLABLE GAD
+AC08;AC08;1100 1161 11AF;AC08;1100 1161 11AF; # (갈; 갈; 갈; 갈; 갈; ) HANGUL SYLLABLE GAL
+AC09;AC09;1100 1161 11B0;AC09;1100 1161 11B0; # (갉; 갉; 갉; 갉; 갉; ) HANGUL SYLLABLE GALG
+AC0A;AC0A;1100 1161 11B1;AC0A;1100 1161 11B1; # (갊; 갊; 갊; 갊; 갊; ) HANGUL SYLLABLE GALM
+AC0B;AC0B;1100 1161 11B2;AC0B;1100 1161 11B2; # (갋; 갋; 갋; 갋; 갋; ) HANGUL SYLLABLE GALB
+AC0C;AC0C;1100 1161 11B3;AC0C;1100 1161 11B3; # (갌; 갌; 갌; 갌; 갌; ) HANGUL SYLLABLE GALS
+AC0D;AC0D;1100 1161 11B4;AC0D;1100 1161 11B4; # (갍; 갍; 갍; 갍; 갍; ) HANGUL SYLLABLE GALT
+AC0E;AC0E;1100 1161 11B5;AC0E;1100 1161 11B5; # (갎; 갎; 갎; 갎; 갎; ) HANGUL SYLLABLE GALP
+AC0F;AC0F;1100 1161 11B6;AC0F;1100 1161 11B6; # (갏; 갏; 갏; 갏; 갏; ) HANGUL SYLLABLE GALH
+AC10;AC10;1100 1161 11B7;AC10;1100 1161 11B7; # (감; 감; 감; 감; 감; ) HANGUL SYLLABLE GAM
+AC11;AC11;1100 1161 11B8;AC11;1100 1161 11B8; # (갑; 갑; 갑; 갑; 갑; ) HANGUL SYLLABLE GAB
+AC12;AC12;1100 1161 11B9;AC12;1100 1161 11B9; # (값; 값; 값; 값; 값; ) HANGUL SYLLABLE GABS
+AC13;AC13;1100 1161 11BA;AC13;1100 1161 11BA; # (갓; 갓; 갓; 갓; 갓; ) HANGUL SYLLABLE GAS
+AC14;AC14;1100 1161 11BB;AC14;1100 1161 11BB; # (갔; 갔; 갔; 갔; 갔; ) HANGUL SYLLABLE GASS
+AC15;AC15;1100 1161 11BC;AC15;1100 1161 11BC; # (강; 강; 강; 강; 강; ) HANGUL SYLLABLE GANG
+AC16;AC16;1100 1161 11BD;AC16;1100 1161 11BD; # (갖; 갖; 갖; 갖; 갖; ) HANGUL SYLLABLE GAJ
+AC17;AC17;1100 1161 11BE;AC17;1100 1161 11BE; # (갗; 갗; 갗; 갗; 갗; ) HANGUL SYLLABLE GAC
+AC18;AC18;1100 1161 11BF;AC18;1100 1161 11BF; # (갘; 갘; 갘; 갘; 갘; ) HANGUL SYLLABLE GAK
+AC19;AC19;1100 1161 11C0;AC19;1100 1161 11C0; # (같; 같; 같; 같; 같; ) HANGUL SYLLABLE GAT
+AC1A;AC1A;1100 1161 11C1;AC1A;1100 1161 11C1; # (갚; 갚; 갚; 갚; 갚; ) HANGUL SYLLABLE GAP
+AC1B;AC1B;1100 1161 11C2;AC1B;1100 1161 11C2; # (갛; 갛; 갛; 갛; 갛; ) HANGUL SYLLABLE GAH
+AC1C;AC1C;1100 1162;AC1C;1100 1162; # (개; 개; 개; 개; 개; ) HANGUL SYLLABLE GAE
+AC1D;AC1D;1100 1162 11A8;AC1D;1100 1162 11A8; # (객; 객; 객; 객; 객; ) HANGUL SYLLABLE GAEG
+AC1E;AC1E;1100 1162 11A9;AC1E;1100 1162 11A9; # (갞; 갞; 갞; 갞; 갞; ) HANGUL SYLLABLE GAEGG
+AC1F;AC1F;1100 1162 11AA;AC1F;1100 1162 11AA; # (갟; 갟; 갟; 갟; 갟; ) HANGUL SYLLABLE GAEGS
+AC20;AC20;1100 1162 11AB;AC20;1100 1162 11AB; # (갠; 갠; 갠; 갠; 갠; ) HANGUL SYLLABLE GAEN
+AC21;AC21;1100 1162 11AC;AC21;1100 1162 11AC; # (갡; 갡; 갡; 갡; 갡; ) HANGUL SYLLABLE GAENJ
+AC22;AC22;1100 1162 11AD;AC22;1100 1162 11AD; # (갢; 갢; 갢; 갢; 갢; ) HANGUL SYLLABLE GAENH
+AC23;AC23;1100 1162 11AE;AC23;1100 1162 11AE; # (갣; 갣; 갣; 갣; 갣; ) HANGUL SYLLABLE GAED
+AC24;AC24;1100 1162 11AF;AC24;1100 1162 11AF; # (갤; 갤; 갤; 갤; 갤; ) HANGUL SYLLABLE GAEL
+AC25;AC25;1100 1162 11B0;AC25;1100 1162 11B0; # (갥; 갥; 갥; 갥; 갥; ) HANGUL SYLLABLE GAELG
+AC26;AC26;1100 1162 11B1;AC26;1100 1162 11B1; # (갦; 갦; 갦; 갦; 갦; ) HANGUL SYLLABLE GAELM
+AC27;AC27;1100 1162 11B2;AC27;1100 1162 11B2; # (갧; 갧; 갧; 갧; 갧; ) HANGUL SYLLABLE GAELB
+AC28;AC28;1100 1162 11B3;AC28;1100 1162 11B3; # (갨; 갨; 갨; 갨; 갨; ) HANGUL SYLLABLE GAELS
+AC29;AC29;1100 1162 11B4;AC29;1100 1162 11B4; # (갩; 갩; 갩; 갩; 갩; ) HANGUL SYLLABLE GAELT
+AC2A;AC2A;1100 1162 11B5;AC2A;1100 1162 11B5; # (갪; 갪; 갪; 갪; 갪; ) HANGUL SYLLABLE GAELP
+AC2B;AC2B;1100 1162 11B6;AC2B;1100 1162 11B6; # (갫; 갫; 갫; 갫; 갫; ) HANGUL SYLLABLE GAELH
+AC2C;AC2C;1100 1162 11B7;AC2C;1100 1162 11B7; # (갬; 갬; 갬; 갬; 갬; ) HANGUL SYLLABLE GAEM
+AC2D;AC2D;1100 1162 11B8;AC2D;1100 1162 11B8; # (갭; 갭; 갭; 갭; 갭; ) HANGUL SYLLABLE GAEB
+AC2E;AC2E;1100 1162 11B9;AC2E;1100 1162 11B9; # (갮; 갮; 갮; 갮; 갮; ) HANGUL SYLLABLE GAEBS
+AC2F;AC2F;1100 1162 11BA;AC2F;1100 1162 11BA; # (갯; 갯; 갯; 갯; 갯; ) HANGUL SYLLABLE GAES
+AC30;AC30;1100 1162 11BB;AC30;1100 1162 11BB; # (갰; 갰; 갰; 갰; 갰; ) HANGUL SYLLABLE GAESS
+AC31;AC31;1100 1162 11BC;AC31;1100 1162 11BC; # (갱; 갱; 갱; 갱; 갱; ) HANGUL SYLLABLE GAENG
+AC32;AC32;1100 1162 11BD;AC32;1100 1162 11BD; # (갲; 갲; 갲; 갲; 갲; ) HANGUL SYLLABLE GAEJ
+AC33;AC33;1100 1162 11BE;AC33;1100 1162 11BE; # (갳; 갳; 갳; 갳; 갳; ) HANGUL SYLLABLE GAEC
+AC34;AC34;1100 1162 11BF;AC34;1100 1162 11BF; # (갴; 갴; 갴; 갴; 갴; ) HANGUL SYLLABLE GAEK
+AC35;AC35;1100 1162 11C0;AC35;1100 1162 11C0; # (갵; 갵; 갵; 갵; 갵; ) HANGUL SYLLABLE GAET
+AC36;AC36;1100 1162 11C1;AC36;1100 1162 11C1; # (갶; 갶; 갶; 갶; 갶; ) HANGUL SYLLABLE GAEP
+AC37;AC37;1100 1162 11C2;AC37;1100 1162 11C2; # (갷; 갷; 갷; 갷; 갷; ) HANGUL SYLLABLE GAEH
+AC38;AC38;1100 1163;AC38;1100 1163; # (갸; 갸; 갸; 갸; 갸; ) HANGUL SYLLABLE GYA
+AC39;AC39;1100 1163 11A8;AC39;1100 1163 11A8; # (갹; 갹; 갹; 갹; 갹; ) HANGUL SYLLABLE GYAG
+AC3A;AC3A;1100 1163 11A9;AC3A;1100 1163 11A9; # (갺; 갺; 갺; 갺; 갺; ) HANGUL SYLLABLE GYAGG
+AC3B;AC3B;1100 1163 11AA;AC3B;1100 1163 11AA; # (갻; 갻; 갻; 갻; 갻; ) HANGUL SYLLABLE GYAGS
+AC3C;AC3C;1100 1163 11AB;AC3C;1100 1163 11AB; # (갼; 갼; 갼; 갼; 갼; ) HANGUL SYLLABLE GYAN
+AC3D;AC3D;1100 1163 11AC;AC3D;1100 1163 11AC; # (갽; 갽; 갽; 갽; 갽; ) HANGUL SYLLABLE GYANJ
+AC3E;AC3E;1100 1163 11AD;AC3E;1100 1163 11AD; # (갾; 갾; 갾; 갾; 갾; ) HANGUL SYLLABLE GYANH
+AC3F;AC3F;1100 1163 11AE;AC3F;1100 1163 11AE; # (갿; 갿; 갿; 갿; 갿; ) HANGUL SYLLABLE GYAD
+AC40;AC40;1100 1163 11AF;AC40;1100 1163 11AF; # (걀; 걀; 걀; 걀; 걀; ) HANGUL SYLLABLE GYAL
+AC41;AC41;1100 1163 11B0;AC41;1100 1163 11B0; # (걁; 걁; 걁; 걁; 걁; ) HANGUL SYLLABLE GYALG
+AC42;AC42;1100 1163 11B1;AC42;1100 1163 11B1; # (걂; 걂; 걂; 걂; 걂; ) HANGUL SYLLABLE GYALM
+AC43;AC43;1100 1163 11B2;AC43;1100 1163 11B2; # (걃; 걃; 걃; 걃; 걃; ) HANGUL SYLLABLE GYALB
+AC44;AC44;1100 1163 11B3;AC44;1100 1163 11B3; # (걄; 걄; 걄; 걄; 걄; ) HANGUL SYLLABLE GYALS
+AC45;AC45;1100 1163 11B4;AC45;1100 1163 11B4; # (걅; 걅; 걅; 걅; 걅; ) HANGUL SYLLABLE GYALT
+AC46;AC46;1100 1163 11B5;AC46;1100 1163 11B5; # (걆; 걆; 걆; 걆; 걆; ) HANGUL SYLLABLE GYALP
+AC47;AC47;1100 1163 11B6;AC47;1100 1163 11B6; # (걇; 걇; 걇; 걇; 걇; ) HANGUL SYLLABLE GYALH
+AC48;AC48;1100 1163 11B7;AC48;1100 1163 11B7; # (걈; 걈; 걈; 걈; 걈; ) HANGUL SYLLABLE GYAM
+AC49;AC49;1100 1163 11B8;AC49;1100 1163 11B8; # (걉; 걉; 걉; 걉; 걉; ) HANGUL SYLLABLE GYAB
+AC4A;AC4A;1100 1163 11B9;AC4A;1100 1163 11B9; # (걊; 걊; 걊; 걊; 걊; ) HANGUL SYLLABLE GYABS
+AC4B;AC4B;1100 1163 11BA;AC4B;1100 1163 11BA; # (걋; 걋; 걋; 걋; 걋; ) HANGUL SYLLABLE GYAS
+AC4C;AC4C;1100 1163 11BB;AC4C;1100 1163 11BB; # (걌; 걌; 걌; 걌; 걌; ) HANGUL SYLLABLE GYASS
+AC4D;AC4D;1100 1163 11BC;AC4D;1100 1163 11BC; # (걍; 걍; 걍; 걍; 걍; ) HANGUL SYLLABLE GYANG
+AC4E;AC4E;1100 1163 11BD;AC4E;1100 1163 11BD; # (걎; 걎; 걎; 걎; 걎; ) HANGUL SYLLABLE GYAJ
+AC4F;AC4F;1100 1163 11BE;AC4F;1100 1163 11BE; # (걏; 걏; 걏; 걏; 걏; ) HANGUL SYLLABLE GYAC
+AC50;AC50;1100 1163 11BF;AC50;1100 1163 11BF; # (걐; 걐; 걐; 걐; 걐; ) HANGUL SYLLABLE GYAK
+AC51;AC51;1100 1163 11C0;AC51;1100 1163 11C0; # (걑; 걑; 걑; 걑; 걑; ) HANGUL SYLLABLE GYAT
+AC52;AC52;1100 1163 11C1;AC52;1100 1163 11C1; # (걒; 걒; 걒; 걒; 걒; ) HANGUL SYLLABLE GYAP
+AC53;AC53;1100 1163 11C2;AC53;1100 1163 11C2; # (걓; 걓; 걓; 걓; 걓; ) HANGUL SYLLABLE GYAH
+AC54;AC54;1100 1164;AC54;1100 1164; # (걔; 걔; 걔; 걔; 걔; ) HANGUL SYLLABLE GYAE
+AC55;AC55;1100 1164 11A8;AC55;1100 1164 11A8; # (걕; 걕; 걕; 걕; 걕; ) HANGUL SYLLABLE GYAEG
+AC56;AC56;1100 1164 11A9;AC56;1100 1164 11A9; # (걖; 걖; 걖; 걖; 걖; ) HANGUL SYLLABLE GYAEGG
+AC57;AC57;1100 1164 11AA;AC57;1100 1164 11AA; # (걗; 걗; 걗; 걗; 걗; ) HANGUL SYLLABLE GYAEGS
+AC58;AC58;1100 1164 11AB;AC58;1100 1164 11AB; # (걘; 걘; 걘; 걘; 걘; ) HANGUL SYLLABLE GYAEN
+AC59;AC59;1100 1164 11AC;AC59;1100 1164 11AC; # (걙; 걙; 걙; 걙; 걙; ) HANGUL SYLLABLE GYAENJ
+AC5A;AC5A;1100 1164 11AD;AC5A;1100 1164 11AD; # (걚; 걚; 걚; 걚; 걚; ) HANGUL SYLLABLE GYAENH
+AC5B;AC5B;1100 1164 11AE;AC5B;1100 1164 11AE; # (걛; 걛; 걛; 걛; 걛; ) HANGUL SYLLABLE GYAED
+AC5C;AC5C;1100 1164 11AF;AC5C;1100 1164 11AF; # (걜; 걜; 걜; 걜; 걜; ) HANGUL SYLLABLE GYAEL
+AC5D;AC5D;1100 1164 11B0;AC5D;1100 1164 11B0; # (걝; 걝; 걝; 걝; 걝; ) HANGUL SYLLABLE GYAELG
+AC5E;AC5E;1100 1164 11B1;AC5E;1100 1164 11B1; # (걞; 걞; 걞; 걞; 걞; ) HANGUL SYLLABLE GYAELM
+AC5F;AC5F;1100 1164 11B2;AC5F;1100 1164 11B2; # (걟; 걟; 걟; 걟; 걟; ) HANGUL SYLLABLE GYAELB
+AC60;AC60;1100 1164 11B3;AC60;1100 1164 11B3; # (걠; 걠; 걠; 걠; 걠; ) HANGUL SYLLABLE GYAELS
+AC61;AC61;1100 1164 11B4;AC61;1100 1164 11B4; # (걡; 걡; 걡; 걡; 걡; ) HANGUL SYLLABLE GYAELT
+AC62;AC62;1100 1164 11B5;AC62;1100 1164 11B5; # (걢; 걢; 걢; 걢; 걢; ) HANGUL SYLLABLE GYAELP
+AC63;AC63;1100 1164 11B6;AC63;1100 1164 11B6; # (걣; 걣; 걣; 걣; 걣; ) HANGUL SYLLABLE GYAELH
+AC64;AC64;1100 1164 11B7;AC64;1100 1164 11B7; # (걤; 걤; 걤; 걤; 걤; ) HANGUL SYLLABLE GYAEM
+AC65;AC65;1100 1164 11B8;AC65;1100 1164 11B8; # (걥; 걥; 걥; 걥; 걥; ) HANGUL SYLLABLE GYAEB
+AC66;AC66;1100 1164 11B9;AC66;1100 1164 11B9; # (걦; 걦; 걦; 걦; 걦; ) HANGUL SYLLABLE GYAEBS
+AC67;AC67;1100 1164 11BA;AC67;1100 1164 11BA; # (걧; 걧; 걧; 걧; 걧; ) HANGUL SYLLABLE GYAES
+AC68;AC68;1100 1164 11BB;AC68;1100 1164 11BB; # (걨; 걨; 걨; 걨; 걨; ) HANGUL SYLLABLE GYAESS
+AC69;AC69;1100 1164 11BC;AC69;1100 1164 11BC; # (걩; 걩; 걩; 걩; 걩; ) HANGUL SYLLABLE GYAENG
+AC6A;AC6A;1100 1164 11BD;AC6A;1100 1164 11BD; # (걪; 걪; 걪; 걪; 걪; ) HANGUL SYLLABLE GYAEJ
+AC6B;AC6B;1100 1164 11BE;AC6B;1100 1164 11BE; # (걫; 걫; 걫; 걫; 걫; ) HANGUL SYLLABLE GYAEC
+AC6C;AC6C;1100 1164 11BF;AC6C;1100 1164 11BF; # (걬; 걬; 걬; 걬; 걬; ) HANGUL SYLLABLE GYAEK
+AC6D;AC6D;1100 1164 11C0;AC6D;1100 1164 11C0; # (걭; 걭; 걭; 걭; 걭; ) HANGUL SYLLABLE GYAET
+AC6E;AC6E;1100 1164 11C1;AC6E;1100 1164 11C1; # (걮; 걮; 걮; 걮; 걮; ) HANGUL SYLLABLE GYAEP
+AC6F;AC6F;1100 1164 11C2;AC6F;1100 1164 11C2; # (걯; 걯; 걯; 걯; 걯; ) HANGUL SYLLABLE GYAEH
+AC70;AC70;1100 1165;AC70;1100 1165; # (거; 거; 거; 거; 거; ) HANGUL SYLLABLE GEO
+AC71;AC71;1100 1165 11A8;AC71;1100 1165 11A8; # (걱; 걱; 걱; 걱; 걱; ) HANGUL SYLLABLE GEOG
+AC72;AC72;1100 1165 11A9;AC72;1100 1165 11A9; # (걲; 걲; 걲; 걲; 걲; ) HANGUL SYLLABLE GEOGG
+AC73;AC73;1100 1165 11AA;AC73;1100 1165 11AA; # (걳; 걳; 걳; 걳; 걳; ) HANGUL SYLLABLE GEOGS
+AC74;AC74;1100 1165 11AB;AC74;1100 1165 11AB; # (건; 건; 건; 건; 건; ) HANGUL SYLLABLE GEON
+AC75;AC75;1100 1165 11AC;AC75;1100 1165 11AC; # (걵; 걵; 걵; 걵; 걵; ) HANGUL SYLLABLE GEONJ
+AC76;AC76;1100 1165 11AD;AC76;1100 1165 11AD; # (걶; 걶; 걶; 걶; 걶; ) HANGUL SYLLABLE GEONH
+AC77;AC77;1100 1165 11AE;AC77;1100 1165 11AE; # (걷; 걷; 걷; 걷; 걷; ) HANGUL SYLLABLE GEOD
+AC78;AC78;1100 1165 11AF;AC78;1100 1165 11AF; # (걸; 걸; 걸; 걸; 걸; ) HANGUL SYLLABLE GEOL
+AC79;AC79;1100 1165 11B0;AC79;1100 1165 11B0; # (걹; 걹; 걹; 걹; 걹; ) HANGUL SYLLABLE GEOLG
+AC7A;AC7A;1100 1165 11B1;AC7A;1100 1165 11B1; # (걺; 걺; 걺; 걺; 걺; ) HANGUL SYLLABLE GEOLM
+AC7B;AC7B;1100 1165 11B2;AC7B;1100 1165 11B2; # (걻; 걻; 걻; 걻; 걻; ) HANGUL SYLLABLE GEOLB
+AC7C;AC7C;1100 1165 11B3;AC7C;1100 1165 11B3; # (걼; 걼; 걼; 걼; 걼; ) HANGUL SYLLABLE GEOLS
+AC7D;AC7D;1100 1165 11B4;AC7D;1100 1165 11B4; # (걽; 걽; 걽; 걽; 걽; ) HANGUL SYLLABLE GEOLT
+AC7E;AC7E;1100 1165 11B5;AC7E;1100 1165 11B5; # (걾; 걾; 걾; 걾; 걾; ) HANGUL SYLLABLE GEOLP
+AC7F;AC7F;1100 1165 11B6;AC7F;1100 1165 11B6; # (걿; 걿; 걿; 걿; 걿; ) HANGUL SYLLABLE GEOLH
+AC80;AC80;1100 1165 11B7;AC80;1100 1165 11B7; # (검; 검; 검; 검; 검; ) HANGUL SYLLABLE GEOM
+AC81;AC81;1100 1165 11B8;AC81;1100 1165 11B8; # (겁; 겁; 겁; 겁; 겁; ) HANGUL SYLLABLE GEOB
+AC82;AC82;1100 1165 11B9;AC82;1100 1165 11B9; # (겂; 겂; 겂; 겂; 겂; ) HANGUL SYLLABLE GEOBS
+AC83;AC83;1100 1165 11BA;AC83;1100 1165 11BA; # (것; 것; 것; 것; 것; ) HANGUL SYLLABLE GEOS
+AC84;AC84;1100 1165 11BB;AC84;1100 1165 11BB; # (겄; 겄; 겄; 겄; 겄; ) HANGUL SYLLABLE GEOSS
+AC85;AC85;1100 1165 11BC;AC85;1100 1165 11BC; # (겅; 겅; 겅; 겅; 겅; ) HANGUL SYLLABLE GEONG
+AC86;AC86;1100 1165 11BD;AC86;1100 1165 11BD; # (겆; 겆; 겆; 겆; 겆; ) HANGUL SYLLABLE GEOJ
+AC87;AC87;1100 1165 11BE;AC87;1100 1165 11BE; # (겇; 겇; 겇; 겇; 겇; ) HANGUL SYLLABLE GEOC
+AC88;AC88;1100 1165 11BF;AC88;1100 1165 11BF; # (겈; 겈; 겈; 겈; 겈; ) HANGUL SYLLABLE GEOK
+AC89;AC89;1100 1165 11C0;AC89;1100 1165 11C0; # (겉; 겉; 겉; 겉; 겉; ) HANGUL SYLLABLE GEOT
+AC8A;AC8A;1100 1165 11C1;AC8A;1100 1165 11C1; # (겊; 겊; 겊; 겊; 겊; ) HANGUL SYLLABLE GEOP
+AC8B;AC8B;1100 1165 11C2;AC8B;1100 1165 11C2; # (겋; 겋; 겋; 겋; 겋; ) HANGUL SYLLABLE GEOH
+AC8C;AC8C;1100 1166;AC8C;1100 1166; # (게; 게; 게; 게; 게; ) HANGUL SYLLABLE GE
+AC8D;AC8D;1100 1166 11A8;AC8D;1100 1166 11A8; # (겍; 겍; 겍; 겍; 겍; ) HANGUL SYLLABLE GEG
+AC8E;AC8E;1100 1166 11A9;AC8E;1100 1166 11A9; # (겎; 겎; 겎; 겎; 겎; ) HANGUL SYLLABLE GEGG
+AC8F;AC8F;1100 1166 11AA;AC8F;1100 1166 11AA; # (겏; 겏; 겏; 겏; 겏; ) HANGUL SYLLABLE GEGS
+AC90;AC90;1100 1166 11AB;AC90;1100 1166 11AB; # (겐; 겐; 겐; 겐; 겐; ) HANGUL SYLLABLE GEN
+AC91;AC91;1100 1166 11AC;AC91;1100 1166 11AC; # (겑; 겑; 겑; 겑; 겑; ) HANGUL SYLLABLE GENJ
+AC92;AC92;1100 1166 11AD;AC92;1100 1166 11AD; # (겒; 겒; 겒; 겒; 겒; ) HANGUL SYLLABLE GENH
+AC93;AC93;1100 1166 11AE;AC93;1100 1166 11AE; # (겓; 겓; 겓; 겓; 겓; ) HANGUL SYLLABLE GED
+AC94;AC94;1100 1166 11AF;AC94;1100 1166 11AF; # (겔; 겔; 겔; 겔; 겔; ) HANGUL SYLLABLE GEL
+AC95;AC95;1100 1166 11B0;AC95;1100 1166 11B0; # (겕; 겕; 겕; 겕; 겕; ) HANGUL SYLLABLE GELG
+AC96;AC96;1100 1166 11B1;AC96;1100 1166 11B1; # (겖; 겖; 겖; 겖; 겖; ) HANGUL SYLLABLE GELM
+AC97;AC97;1100 1166 11B2;AC97;1100 1166 11B2; # (겗; 겗; 겗; 겗; 겗; ) HANGUL SYLLABLE GELB
+AC98;AC98;1100 1166 11B3;AC98;1100 1166 11B3; # (겘; 겘; 겘; 겘; 겘; ) HANGUL SYLLABLE GELS
+AC99;AC99;1100 1166 11B4;AC99;1100 1166 11B4; # (겙; 겙; 겙; 겙; 겙; ) HANGUL SYLLABLE GELT
+AC9A;AC9A;1100 1166 11B5;AC9A;1100 1166 11B5; # (겚; 겚; 겚; 겚; 겚; ) HANGUL SYLLABLE GELP
+AC9B;AC9B;1100 1166 11B6;AC9B;1100 1166 11B6; # (겛; 겛; 겛; 겛; 겛; ) HANGUL SYLLABLE GELH
+AC9C;AC9C;1100 1166 11B7;AC9C;1100 1166 11B7; # (겜; 겜; 겜; 겜; 겜; ) HANGUL SYLLABLE GEM
+AC9D;AC9D;1100 1166 11B8;AC9D;1100 1166 11B8; # (겝; 겝; 겝; 겝; 겝; ) HANGUL SYLLABLE GEB
+AC9E;AC9E;1100 1166 11B9;AC9E;1100 1166 11B9; # (겞; 겞; 겞; 겞; 겞; ) HANGUL SYLLABLE GEBS
+AC9F;AC9F;1100 1166 11BA;AC9F;1100 1166 11BA; # (겟; 겟; 겟; 겟; 겟; ) HANGUL SYLLABLE GES
+ACA0;ACA0;1100 1166 11BB;ACA0;1100 1166 11BB; # (겠; 겠; 겠; 겠; 겠; ) HANGUL SYLLABLE GESS
+ACA1;ACA1;1100 1166 11BC;ACA1;1100 1166 11BC; # (겡; 겡; 겡; 겡; 겡; ) HANGUL SYLLABLE GENG
+ACA2;ACA2;1100 1166 11BD;ACA2;1100 1166 11BD; # (겢; 겢; 겢; 겢; 겢; ) HANGUL SYLLABLE GEJ
+ACA3;ACA3;1100 1166 11BE;ACA3;1100 1166 11BE; # (겣; 겣; 겣; 겣; 겣; ) HANGUL SYLLABLE GEC
+ACA4;ACA4;1100 1166 11BF;ACA4;1100 1166 11BF; # (겤; 겤; 겤; 겤; 겤; ) HANGUL SYLLABLE GEK
+ACA5;ACA5;1100 1166 11C0;ACA5;1100 1166 11C0; # (겥; 겥; 겥; 겥; 겥; ) HANGUL SYLLABLE GET
+ACA6;ACA6;1100 1166 11C1;ACA6;1100 1166 11C1; # (겦; 겦; 겦; 겦; 겦; ) HANGUL SYLLABLE GEP
+ACA7;ACA7;1100 1166 11C2;ACA7;1100 1166 11C2; # (겧; 겧; 겧; 겧; 겧; ) HANGUL SYLLABLE GEH
+ACA8;ACA8;1100 1167;ACA8;1100 1167; # (겨; 겨; 겨; 겨; 겨; ) HANGUL SYLLABLE GYEO
+ACA9;ACA9;1100 1167 11A8;ACA9;1100 1167 11A8; # (격; 격; 격; 격; 격; ) HANGUL SYLLABLE GYEOG
+ACAA;ACAA;1100 1167 11A9;ACAA;1100 1167 11A9; # (겪; 겪; 겪; 겪; 겪; ) HANGUL SYLLABLE GYEOGG
+ACAB;ACAB;1100 1167 11AA;ACAB;1100 1167 11AA; # (겫; 겫; 겫; 겫; 겫; ) HANGUL SYLLABLE GYEOGS
+ACAC;ACAC;1100 1167 11AB;ACAC;1100 1167 11AB; # (견; 견; 견; 견; 견; ) HANGUL SYLLABLE GYEON
+ACAD;ACAD;1100 1167 11AC;ACAD;1100 1167 11AC; # (겭; 겭; 겭; 겭; 겭; ) HANGUL SYLLABLE GYEONJ
+ACAE;ACAE;1100 1167 11AD;ACAE;1100 1167 11AD; # (겮; 겮; 겮; 겮; 겮; ) HANGUL SYLLABLE GYEONH
+ACAF;ACAF;1100 1167 11AE;ACAF;1100 1167 11AE; # (겯; 겯; 겯; 겯; 겯; ) HANGUL SYLLABLE GYEOD
+ACB0;ACB0;1100 1167 11AF;ACB0;1100 1167 11AF; # (결; 결; 결; 결; 결; ) HANGUL SYLLABLE GYEOL
+ACB1;ACB1;1100 1167 11B0;ACB1;1100 1167 11B0; # (겱; 겱; 겱; 겱; 겱; ) HANGUL SYLLABLE GYEOLG
+ACB2;ACB2;1100 1167 11B1;ACB2;1100 1167 11B1; # (겲; 겲; 겲; 겲; 겲; ) HANGUL SYLLABLE GYEOLM
+ACB3;ACB3;1100 1167 11B2;ACB3;1100 1167 11B2; # (겳; 겳; 겳; 겳; 겳; ) HANGUL SYLLABLE GYEOLB
+ACB4;ACB4;1100 1167 11B3;ACB4;1100 1167 11B3; # (겴; 겴; 겴; 겴; 겴; ) HANGUL SYLLABLE GYEOLS
+ACB5;ACB5;1100 1167 11B4;ACB5;1100 1167 11B4; # (겵; 겵; 겵; 겵; 겵; ) HANGUL SYLLABLE GYEOLT
+ACB6;ACB6;1100 1167 11B5;ACB6;1100 1167 11B5; # (겶; 겶; 겶; 겶; 겶; ) HANGUL SYLLABLE GYEOLP
+ACB7;ACB7;1100 1167 11B6;ACB7;1100 1167 11B6; # (겷; 겷; 겷; 겷; 겷; ) HANGUL SYLLABLE GYEOLH
+ACB8;ACB8;1100 1167 11B7;ACB8;1100 1167 11B7; # (겸; 겸; 겸; 겸; 겸; ) HANGUL SYLLABLE GYEOM
+ACB9;ACB9;1100 1167 11B8;ACB9;1100 1167 11B8; # (겹; 겹; 겹; 겹; 겹; ) HANGUL SYLLABLE GYEOB
+ACBA;ACBA;1100 1167 11B9;ACBA;1100 1167 11B9; # (겺; 겺; 겺; 겺; 겺; ) HANGUL SYLLABLE GYEOBS
+ACBB;ACBB;1100 1167 11BA;ACBB;1100 1167 11BA; # (겻; 겻; 겻; 겻; 겻; ) HANGUL SYLLABLE GYEOS
+ACBC;ACBC;1100 1167 11BB;ACBC;1100 1167 11BB; # (겼; 겼; 겼; 겼; 겼; ) HANGUL SYLLABLE GYEOSS
+ACBD;ACBD;1100 1167 11BC;ACBD;1100 1167 11BC; # (경; 경; 경; 경; 경; ) HANGUL SYLLABLE GYEONG
+ACBE;ACBE;1100 1167 11BD;ACBE;1100 1167 11BD; # (겾; 겾; 겾; 겾; 겾; ) HANGUL SYLLABLE GYEOJ
+ACBF;ACBF;1100 1167 11BE;ACBF;1100 1167 11BE; # (겿; 겿; 겿; 겿; 겿; ) HANGUL SYLLABLE GYEOC
+ACC0;ACC0;1100 1167 11BF;ACC0;1100 1167 11BF; # (곀; 곀; 곀; 곀; 곀; ) HANGUL SYLLABLE GYEOK
+ACC1;ACC1;1100 1167 11C0;ACC1;1100 1167 11C0; # (곁; 곁; 곁; 곁; 곁; ) HANGUL SYLLABLE GYEOT
+ACC2;ACC2;1100 1167 11C1;ACC2;1100 1167 11C1; # (곂; 곂; 곂; 곂; 곂; ) HANGUL SYLLABLE GYEOP
+ACC3;ACC3;1100 1167 11C2;ACC3;1100 1167 11C2; # (곃; 곃; 곃; 곃; 곃; ) HANGUL SYLLABLE GYEOH
+ACC4;ACC4;1100 1168;ACC4;1100 1168; # (계; 계; 계; 계; 계; ) HANGUL SYLLABLE GYE
+ACC5;ACC5;1100 1168 11A8;ACC5;1100 1168 11A8; # (곅; 곅; 곅; 곅; 곅; ) HANGUL SYLLABLE GYEG
+ACC6;ACC6;1100 1168 11A9;ACC6;1100 1168 11A9; # (곆; 곆; 곆; 곆; 곆; ) HANGUL SYLLABLE GYEGG
+ACC7;ACC7;1100 1168 11AA;ACC7;1100 1168 11AA; # (곇; 곇; 곇; 곇; 곇; ) HANGUL SYLLABLE GYEGS
+ACC8;ACC8;1100 1168 11AB;ACC8;1100 1168 11AB; # (곈; 곈; 곈; 곈; 곈; ) HANGUL SYLLABLE GYEN
+ACC9;ACC9;1100 1168 11AC;ACC9;1100 1168 11AC; # (곉; 곉; 곉; 곉; 곉; ) HANGUL SYLLABLE GYENJ
+ACCA;ACCA;1100 1168 11AD;ACCA;1100 1168 11AD; # (곊; 곊; 곊; 곊; 곊; ) HANGUL SYLLABLE GYENH
+ACCB;ACCB;1100 1168 11AE;ACCB;1100 1168 11AE; # (곋; 곋; 곋; 곋; 곋; ) HANGUL SYLLABLE GYED
+ACCC;ACCC;1100 1168 11AF;ACCC;1100 1168 11AF; # (곌; 곌; 곌; 곌; 곌; ) HANGUL SYLLABLE GYEL
+ACCD;ACCD;1100 1168 11B0;ACCD;1100 1168 11B0; # (곍; 곍; 곍; 곍; 곍; ) HANGUL SYLLABLE GYELG
+ACCE;ACCE;1100 1168 11B1;ACCE;1100 1168 11B1; # (곎; 곎; 곎; 곎; 곎; ) HANGUL SYLLABLE GYELM
+ACCF;ACCF;1100 1168 11B2;ACCF;1100 1168 11B2; # (곏; 곏; 곏; 곏; 곏; ) HANGUL SYLLABLE GYELB
+ACD0;ACD0;1100 1168 11B3;ACD0;1100 1168 11B3; # (곐; 곐; 곐; 곐; 곐; ) HANGUL SYLLABLE GYELS
+ACD1;ACD1;1100 1168 11B4;ACD1;1100 1168 11B4; # (곑; 곑; 곑; 곑; 곑; ) HANGUL SYLLABLE GYELT
+ACD2;ACD2;1100 1168 11B5;ACD2;1100 1168 11B5; # (곒; 곒; 곒; 곒; 곒; ) HANGUL SYLLABLE GYELP
+ACD3;ACD3;1100 1168 11B6;ACD3;1100 1168 11B6; # (곓; 곓; 곓; 곓; 곓; ) HANGUL SYLLABLE GYELH
+ACD4;ACD4;1100 1168 11B7;ACD4;1100 1168 11B7; # (곔; 곔; 곔; 곔; 곔; ) HANGUL SYLLABLE GYEM
+ACD5;ACD5;1100 1168 11B8;ACD5;1100 1168 11B8; # (곕; 곕; 곕; 곕; 곕; ) HANGUL SYLLABLE GYEB
+ACD6;ACD6;1100 1168 11B9;ACD6;1100 1168 11B9; # (곖; 곖; 곖; 곖; 곖; ) HANGUL SYLLABLE GYEBS
+ACD7;ACD7;1100 1168 11BA;ACD7;1100 1168 11BA; # (곗; 곗; 곗; 곗; 곗; ) HANGUL SYLLABLE GYES
+ACD8;ACD8;1100 1168 11BB;ACD8;1100 1168 11BB; # (곘; 곘; 곘; 곘; 곘; ) HANGUL SYLLABLE GYESS
+ACD9;ACD9;1100 1168 11BC;ACD9;1100 1168 11BC; # (곙; 곙; 곙; 곙; 곙; ) HANGUL SYLLABLE GYENG
+ACDA;ACDA;1100 1168 11BD;ACDA;1100 1168 11BD; # (곚; 곚; 곚; 곚; 곚; ) HANGUL SYLLABLE GYEJ
+ACDB;ACDB;1100 1168 11BE;ACDB;1100 1168 11BE; # (곛; 곛; 곛; 곛; 곛; ) HANGUL SYLLABLE GYEC
+ACDC;ACDC;1100 1168 11BF;ACDC;1100 1168 11BF; # (곜; 곜; 곜; 곜; 곜; ) HANGUL SYLLABLE GYEK
+ACDD;ACDD;1100 1168 11C0;ACDD;1100 1168 11C0; # (곝; 곝; 곝; 곝; 곝; ) HANGUL SYLLABLE GYET
+ACDE;ACDE;1100 1168 11C1;ACDE;1100 1168 11C1; # (곞; 곞; 곞; 곞; 곞; ) HANGUL SYLLABLE GYEP
+ACDF;ACDF;1100 1168 11C2;ACDF;1100 1168 11C2; # (곟; 곟; 곟; 곟; 곟; ) HANGUL SYLLABLE GYEH
+ACE0;ACE0;1100 1169;ACE0;1100 1169; # (고; 고; 고; 고; 고; ) HANGUL SYLLABLE GO
+ACE1;ACE1;1100 1169 11A8;ACE1;1100 1169 11A8; # (곡; 곡; 곡; 곡; 곡; ) HANGUL SYLLABLE GOG
+ACE2;ACE2;1100 1169 11A9;ACE2;1100 1169 11A9; # (곢; 곢; 곢; 곢; 곢; ) HANGUL SYLLABLE GOGG
+ACE3;ACE3;1100 1169 11AA;ACE3;1100 1169 11AA; # (곣; 곣; 곣; 곣; 곣; ) HANGUL SYLLABLE GOGS
+ACE4;ACE4;1100 1169 11AB;ACE4;1100 1169 11AB; # (곤; 곤; 곤; 곤; 곤; ) HANGUL SYLLABLE GON
+ACE5;ACE5;1100 1169 11AC;ACE5;1100 1169 11AC; # (곥; 곥; 곥; 곥; 곥; ) HANGUL SYLLABLE GONJ
+ACE6;ACE6;1100 1169 11AD;ACE6;1100 1169 11AD; # (곦; 곦; 곦; 곦; 곦; ) HANGUL SYLLABLE GONH
+ACE7;ACE7;1100 1169 11AE;ACE7;1100 1169 11AE; # (곧; 곧; 곧; 곧; 곧; ) HANGUL SYLLABLE GOD
+ACE8;ACE8;1100 1169 11AF;ACE8;1100 1169 11AF; # (골; 골; 골; 골; 골; ) HANGUL SYLLABLE GOL
+ACE9;ACE9;1100 1169 11B0;ACE9;1100 1169 11B0; # (곩; 곩; 곩; 곩; 곩; ) HANGUL SYLLABLE GOLG
+ACEA;ACEA;1100 1169 11B1;ACEA;1100 1169 11B1; # (곪; 곪; 곪; 곪; 곪; ) HANGUL SYLLABLE GOLM
+ACEB;ACEB;1100 1169 11B2;ACEB;1100 1169 11B2; # (곫; 곫; 곫; 곫; 곫; ) HANGUL SYLLABLE GOLB
+ACEC;ACEC;1100 1169 11B3;ACEC;1100 1169 11B3; # (곬; 곬; 곬; 곬; 곬; ) HANGUL SYLLABLE GOLS
+ACED;ACED;1100 1169 11B4;ACED;1100 1169 11B4; # (곭; 곭; 곭; 곭; 곭; ) HANGUL SYLLABLE GOLT
+ACEE;ACEE;1100 1169 11B5;ACEE;1100 1169 11B5; # (곮; 곮; 곮; 곮; 곮; ) HANGUL SYLLABLE GOLP
+ACEF;ACEF;1100 1169 11B6;ACEF;1100 1169 11B6; # (곯; 곯; 곯; 곯; 곯; ) HANGUL SYLLABLE GOLH
+ACF0;ACF0;1100 1169 11B7;ACF0;1100 1169 11B7; # (곰; 곰; 곰; 곰; 곰; ) HANGUL SYLLABLE GOM
+ACF1;ACF1;1100 1169 11B8;ACF1;1100 1169 11B8; # (곱; 곱; 곱; 곱; 곱; ) HANGUL SYLLABLE GOB
+ACF2;ACF2;1100 1169 11B9;ACF2;1100 1169 11B9; # (곲; 곲; 곲; 곲; 곲; ) HANGUL SYLLABLE GOBS
+ACF3;ACF3;1100 1169 11BA;ACF3;1100 1169 11BA; # (곳; 곳; 곳; 곳; 곳; ) HANGUL SYLLABLE GOS
+ACF4;ACF4;1100 1169 11BB;ACF4;1100 1169 11BB; # (곴; 곴; 곴; 곴; 곴; ) HANGUL SYLLABLE GOSS
+ACF5;ACF5;1100 1169 11BC;ACF5;1100 1169 11BC; # (공; 공; 공; 공; 공; ) HANGUL SYLLABLE GONG
+ACF6;ACF6;1100 1169 11BD;ACF6;1100 1169 11BD; # (곶; 곶; 곶; 곶; 곶; ) HANGUL SYLLABLE GOJ
+ACF7;ACF7;1100 1169 11BE;ACF7;1100 1169 11BE; # (곷; 곷; 곷; 곷; 곷; ) HANGUL SYLLABLE GOC
+ACF8;ACF8;1100 1169 11BF;ACF8;1100 1169 11BF; # (곸; 곸; 곸; 곸; 곸; ) HANGUL SYLLABLE GOK
+ACF9;ACF9;1100 1169 11C0;ACF9;1100 1169 11C0; # (곹; 곹; 곹; 곹; 곹; ) HANGUL SYLLABLE GOT
+ACFA;ACFA;1100 1169 11C1;ACFA;1100 1169 11C1; # (곺; 곺; 곺; 곺; 곺; ) HANGUL SYLLABLE GOP
+ACFB;ACFB;1100 1169 11C2;ACFB;1100 1169 11C2; # (곻; 곻; 곻; 곻; 곻; ) HANGUL SYLLABLE GOH
+ACFC;ACFC;1100 116A;ACFC;1100 116A; # (과; 과; 과; 과; 과; ) HANGUL SYLLABLE GWA
+ACFD;ACFD;1100 116A 11A8;ACFD;1100 116A 11A8; # (곽; 곽; 곽; 곽; 곽; ) HANGUL SYLLABLE GWAG
+ACFE;ACFE;1100 116A 11A9;ACFE;1100 116A 11A9; # (곾; 곾; 곾; 곾; 곾; ) HANGUL SYLLABLE GWAGG
+ACFF;ACFF;1100 116A 11AA;ACFF;1100 116A 11AA; # (곿; 곿; 곿; 곿; 곿; ) HANGUL SYLLABLE GWAGS
+AD00;AD00;1100 116A 11AB;AD00;1100 116A 11AB; # (관; 관; 관; 관; 관; ) HANGUL SYLLABLE GWAN
+AD01;AD01;1100 116A 11AC;AD01;1100 116A 11AC; # (괁; 괁; 괁; 괁; 괁; ) HANGUL SYLLABLE GWANJ
+AD02;AD02;1100 116A 11AD;AD02;1100 116A 11AD; # (괂; 괂; 괂; 괂; 괂; ) HANGUL SYLLABLE GWANH
+AD03;AD03;1100 116A 11AE;AD03;1100 116A 11AE; # (괃; 괃; 괃; 괃; 괃; ) HANGUL SYLLABLE GWAD
+AD04;AD04;1100 116A 11AF;AD04;1100 116A 11AF; # (괄; 괄; 괄; 괄; 괄; ) HANGUL SYLLABLE GWAL
+AD05;AD05;1100 116A 11B0;AD05;1100 116A 11B0; # (괅; 괅; 괅; 괅; 괅; ) HANGUL SYLLABLE GWALG
+AD06;AD06;1100 116A 11B1;AD06;1100 116A 11B1; # (괆; 괆; 괆; 괆; 괆; ) HANGUL SYLLABLE GWALM
+AD07;AD07;1100 116A 11B2;AD07;1100 116A 11B2; # (괇; 괇; 괇; 괇; 괇; ) HANGUL SYLLABLE GWALB
+AD08;AD08;1100 116A 11B3;AD08;1100 116A 11B3; # (괈; 괈; 괈; 괈; 괈; ) HANGUL SYLLABLE GWALS
+AD09;AD09;1100 116A 11B4;AD09;1100 116A 11B4; # (괉; 괉; 괉; 괉; 괉; ) HANGUL SYLLABLE GWALT
+AD0A;AD0A;1100 116A 11B5;AD0A;1100 116A 11B5; # (괊; 괊; 괊; 괊; 괊; ) HANGUL SYLLABLE GWALP
+AD0B;AD0B;1100 116A 11B6;AD0B;1100 116A 11B6; # (괋; 괋; 괋; 괋; 괋; ) HANGUL SYLLABLE GWALH
+AD0C;AD0C;1100 116A 11B7;AD0C;1100 116A 11B7; # (괌; 괌; 괌; 괌; 괌; ) HANGUL SYLLABLE GWAM
+AD0D;AD0D;1100 116A 11B8;AD0D;1100 116A 11B8; # (괍; 괍; 괍; 괍; 괍; ) HANGUL SYLLABLE GWAB
+AD0E;AD0E;1100 116A 11B9;AD0E;1100 116A 11B9; # (괎; 괎; 괎; 괎; 괎; ) HANGUL SYLLABLE GWABS
+AD0F;AD0F;1100 116A 11BA;AD0F;1100 116A 11BA; # (괏; 괏; 괏; 괏; 괏; ) HANGUL SYLLABLE GWAS
+AD10;AD10;1100 116A 11BB;AD10;1100 116A 11BB; # (괐; 괐; 괐; 괐; 괐; ) HANGUL SYLLABLE GWASS
+AD11;AD11;1100 116A 11BC;AD11;1100 116A 11BC; # (광; 광; 광; 광; 광; ) HANGUL SYLLABLE GWANG
+AD12;AD12;1100 116A 11BD;AD12;1100 116A 11BD; # (괒; 괒; 괒; 괒; 괒; ) HANGUL SYLLABLE GWAJ
+AD13;AD13;1100 116A 11BE;AD13;1100 116A 11BE; # (괓; 괓; 괓; 괓; 괓; ) HANGUL SYLLABLE GWAC
+AD14;AD14;1100 116A 11BF;AD14;1100 116A 11BF; # (괔; 괔; 괔; 괔; 괔; ) HANGUL SYLLABLE GWAK
+AD15;AD15;1100 116A 11C0;AD15;1100 116A 11C0; # (괕; 괕; 괕; 괕; 괕; ) HANGUL SYLLABLE GWAT
+AD16;AD16;1100 116A 11C1;AD16;1100 116A 11C1; # (괖; 괖; 괖; 괖; 괖; ) HANGUL SYLLABLE GWAP
+AD17;AD17;1100 116A 11C2;AD17;1100 116A 11C2; # (괗; 괗; 괗; 괗; 괗; ) HANGUL SYLLABLE GWAH
+AD18;AD18;1100 116B;AD18;1100 116B; # (괘; 괘; 괘; 괘; 괘; ) HANGUL SYLLABLE GWAE
+AD19;AD19;1100 116B 11A8;AD19;1100 116B 11A8; # (괙; 괙; 괙; 괙; 괙; ) HANGUL SYLLABLE GWAEG
+AD1A;AD1A;1100 116B 11A9;AD1A;1100 116B 11A9; # (괚; 괚; 괚; 괚; 괚; ) HANGUL SYLLABLE GWAEGG
+AD1B;AD1B;1100 116B 11AA;AD1B;1100 116B 11AA; # (괛; 괛; 괛; 괛; 괛; ) HANGUL SYLLABLE GWAEGS
+AD1C;AD1C;1100 116B 11AB;AD1C;1100 116B 11AB; # (괜; 괜; 괜; 괜; 괜; ) HANGUL SYLLABLE GWAEN
+AD1D;AD1D;1100 116B 11AC;AD1D;1100 116B 11AC; # (괝; 괝; 괝; 괝; 괝; ) HANGUL SYLLABLE GWAENJ
+AD1E;AD1E;1100 116B 11AD;AD1E;1100 116B 11AD; # (괞; 괞; 괞; 괞; 괞; ) HANGUL SYLLABLE GWAENH
+AD1F;AD1F;1100 116B 11AE;AD1F;1100 116B 11AE; # (괟; 괟; 괟; 괟; 괟; ) HANGUL SYLLABLE GWAED
+AD20;AD20;1100 116B 11AF;AD20;1100 116B 11AF; # (괠; 괠; 괠; 괠; 괠; ) HANGUL SYLLABLE GWAEL
+AD21;AD21;1100 116B 11B0;AD21;1100 116B 11B0; # (괡; 괡; 괡; 괡; 괡; ) HANGUL SYLLABLE GWAELG
+AD22;AD22;1100 116B 11B1;AD22;1100 116B 11B1; # (괢; 괢; 괢; 괢; 괢; ) HANGUL SYLLABLE GWAELM
+AD23;AD23;1100 116B 11B2;AD23;1100 116B 11B2; # (괣; 괣; 괣; 괣; 괣; ) HANGUL SYLLABLE GWAELB
+AD24;AD24;1100 116B 11B3;AD24;1100 116B 11B3; # (괤; 괤; 괤; 괤; 괤; ) HANGUL SYLLABLE GWAELS
+AD25;AD25;1100 116B 11B4;AD25;1100 116B 11B4; # (괥; 괥; 괥; 괥; 괥; ) HANGUL SYLLABLE GWAELT
+AD26;AD26;1100 116B 11B5;AD26;1100 116B 11B5; # (괦; 괦; 괦; 괦; 괦; ) HANGUL SYLLABLE GWAELP
+AD27;AD27;1100 116B 11B6;AD27;1100 116B 11B6; # (괧; 괧; 괧; 괧; 괧; ) HANGUL SYLLABLE GWAELH
+AD28;AD28;1100 116B 11B7;AD28;1100 116B 11B7; # (괨; 괨; 괨; 괨; 괨; ) HANGUL SYLLABLE GWAEM
+AD29;AD29;1100 116B 11B8;AD29;1100 116B 11B8; # (괩; 괩; 괩; 괩; 괩; ) HANGUL SYLLABLE GWAEB
+AD2A;AD2A;1100 116B 11B9;AD2A;1100 116B 11B9; # (괪; 괪; 괪; 괪; 괪; ) HANGUL SYLLABLE GWAEBS
+AD2B;AD2B;1100 116B 11BA;AD2B;1100 116B 11BA; # (괫; 괫; 괫; 괫; 괫; ) HANGUL SYLLABLE GWAES
+AD2C;AD2C;1100 116B 11BB;AD2C;1100 116B 11BB; # (괬; 괬; 괬; 괬; 괬; ) HANGUL SYLLABLE GWAESS
+AD2D;AD2D;1100 116B 11BC;AD2D;1100 116B 11BC; # (괭; 괭; 괭; 괭; 괭; ) HANGUL SYLLABLE GWAENG
+AD2E;AD2E;1100 116B 11BD;AD2E;1100 116B 11BD; # (괮; 괮; 괮; 괮; 괮; ) HANGUL SYLLABLE GWAEJ
+AD2F;AD2F;1100 116B 11BE;AD2F;1100 116B 11BE; # (괯; 괯; 괯; 괯; 괯; ) HANGUL SYLLABLE GWAEC
+AD30;AD30;1100 116B 11BF;AD30;1100 116B 11BF; # (괰; 괰; 괰; 괰; 괰; ) HANGUL SYLLABLE GWAEK
+AD31;AD31;1100 116B 11C0;AD31;1100 116B 11C0; # (괱; 괱; 괱; 괱; 괱; ) HANGUL SYLLABLE GWAET
+AD32;AD32;1100 116B 11C1;AD32;1100 116B 11C1; # (괲; 괲; 괲; 괲; 괲; ) HANGUL SYLLABLE GWAEP
+AD33;AD33;1100 116B 11C2;AD33;1100 116B 11C2; # (괳; 괳; 괳; 괳; 괳; ) HANGUL SYLLABLE GWAEH
+AD34;AD34;1100 116C;AD34;1100 116C; # (괴; 괴; 괴; 괴; 괴; ) HANGUL SYLLABLE GOE
+AD35;AD35;1100 116C 11A8;AD35;1100 116C 11A8; # (괵; 괵; 괵; 괵; 괵; ) HANGUL SYLLABLE GOEG
+AD36;AD36;1100 116C 11A9;AD36;1100 116C 11A9; # (괶; 괶; 괶; 괶; 괶; ) HANGUL SYLLABLE GOEGG
+AD37;AD37;1100 116C 11AA;AD37;1100 116C 11AA; # (괷; 괷; 괷; 괷; 괷; ) HANGUL SYLLABLE GOEGS
+AD38;AD38;1100 116C 11AB;AD38;1100 116C 11AB; # (괸; 괸; 괸; 괸; 괸; ) HANGUL SYLLABLE GOEN
+AD39;AD39;1100 116C 11AC;AD39;1100 116C 11AC; # (괹; 괹; 괹; 괹; 괹; ) HANGUL SYLLABLE GOENJ
+AD3A;AD3A;1100 116C 11AD;AD3A;1100 116C 11AD; # (괺; 괺; 괺; 괺; 괺; ) HANGUL SYLLABLE GOENH
+AD3B;AD3B;1100 116C 11AE;AD3B;1100 116C 11AE; # (괻; 괻; 괻; 괻; 괻; ) HANGUL SYLLABLE GOED
+AD3C;AD3C;1100 116C 11AF;AD3C;1100 116C 11AF; # (괼; 괼; 괼; 괼; 괼; ) HANGUL SYLLABLE GOEL
+AD3D;AD3D;1100 116C 11B0;AD3D;1100 116C 11B0; # (괽; 괽; 괽; 괽; 괽; ) HANGUL SYLLABLE GOELG
+AD3E;AD3E;1100 116C 11B1;AD3E;1100 116C 11B1; # (괾; 괾; 괾; 괾; 괾; ) HANGUL SYLLABLE GOELM
+AD3F;AD3F;1100 116C 11B2;AD3F;1100 116C 11B2; # (괿; 괿; 괿; 괿; 괿; ) HANGUL SYLLABLE GOELB
+AD40;AD40;1100 116C 11B3;AD40;1100 116C 11B3; # (굀; 굀; 굀; 굀; 굀; ) HANGUL SYLLABLE GOELS
+AD41;AD41;1100 116C 11B4;AD41;1100 116C 11B4; # (굁; 굁; 굁; 굁; 굁; ) HANGUL SYLLABLE GOELT
+AD42;AD42;1100 116C 11B5;AD42;1100 116C 11B5; # (굂; 굂; 굂; 굂; 굂; ) HANGUL SYLLABLE GOELP
+AD43;AD43;1100 116C 11B6;AD43;1100 116C 11B6; # (굃; 굃; 굃; 굃; 굃; ) HANGUL SYLLABLE GOELH
+AD44;AD44;1100 116C 11B7;AD44;1100 116C 11B7; # (굄; 굄; 굄; 굄; 굄; ) HANGUL SYLLABLE GOEM
+AD45;AD45;1100 116C 11B8;AD45;1100 116C 11B8; # (굅; 굅; 굅; 굅; 굅; ) HANGUL SYLLABLE GOEB
+AD46;AD46;1100 116C 11B9;AD46;1100 116C 11B9; # (굆; 굆; 굆; 굆; 굆; ) HANGUL SYLLABLE GOEBS
+AD47;AD47;1100 116C 11BA;AD47;1100 116C 11BA; # (굇; 굇; 굇; 굇; 굇; ) HANGUL SYLLABLE GOES
+AD48;AD48;1100 116C 11BB;AD48;1100 116C 11BB; # (굈; 굈; 굈; 굈; 굈; ) HANGUL SYLLABLE GOESS
+AD49;AD49;1100 116C 11BC;AD49;1100 116C 11BC; # (굉; 굉; 굉; 굉; 굉; ) HANGUL SYLLABLE GOENG
+AD4A;AD4A;1100 116C 11BD;AD4A;1100 116C 11BD; # (굊; 굊; 굊; 굊; 굊; ) HANGUL SYLLABLE GOEJ
+AD4B;AD4B;1100 116C 11BE;AD4B;1100 116C 11BE; # (굋; 굋; 굋; 굋; 굋; ) HANGUL SYLLABLE GOEC
+AD4C;AD4C;1100 116C 11BF;AD4C;1100 116C 11BF; # (굌; 굌; 굌; 굌; 굌; ) HANGUL SYLLABLE GOEK
+AD4D;AD4D;1100 116C 11C0;AD4D;1100 116C 11C0; # (굍; 굍; 굍; 굍; 굍; ) HANGUL SYLLABLE GOET
+AD4E;AD4E;1100 116C 11C1;AD4E;1100 116C 11C1; # (굎; 굎; 굎; 굎; 굎; ) HANGUL SYLLABLE GOEP
+AD4F;AD4F;1100 116C 11C2;AD4F;1100 116C 11C2; # (굏; 굏; 굏; 굏; 굏; ) HANGUL SYLLABLE GOEH
+AD50;AD50;1100 116D;AD50;1100 116D; # (교; 교; 교; 교; 교; ) HANGUL SYLLABLE GYO
+AD51;AD51;1100 116D 11A8;AD51;1100 116D 11A8; # (굑; 굑; 굑; 굑; 굑; ) HANGUL SYLLABLE GYOG
+AD52;AD52;1100 116D 11A9;AD52;1100 116D 11A9; # (굒; 굒; 굒; 굒; 굒; ) HANGUL SYLLABLE GYOGG
+AD53;AD53;1100 116D 11AA;AD53;1100 116D 11AA; # (굓; 굓; 굓; 굓; 굓; ) HANGUL SYLLABLE GYOGS
+AD54;AD54;1100 116D 11AB;AD54;1100 116D 11AB; # (굔; 굔; 굔; 굔; 굔; ) HANGUL SYLLABLE GYON
+AD55;AD55;1100 116D 11AC;AD55;1100 116D 11AC; # (굕; 굕; 굕; 굕; 굕; ) HANGUL SYLLABLE GYONJ
+AD56;AD56;1100 116D 11AD;AD56;1100 116D 11AD; # (굖; 굖; 굖; 굖; 굖; ) HANGUL SYLLABLE GYONH
+AD57;AD57;1100 116D 11AE;AD57;1100 116D 11AE; # (굗; 굗; 굗; 굗; 굗; ) HANGUL SYLLABLE GYOD
+AD58;AD58;1100 116D 11AF;AD58;1100 116D 11AF; # (굘; 굘; 굘; 굘; 굘; ) HANGUL SYLLABLE GYOL
+AD59;AD59;1100 116D 11B0;AD59;1100 116D 11B0; # (굙; 굙; 굙; 굙; 굙; ) HANGUL SYLLABLE GYOLG
+AD5A;AD5A;1100 116D 11B1;AD5A;1100 116D 11B1; # (굚; 굚; 굚; 굚; 굚; ) HANGUL SYLLABLE GYOLM
+AD5B;AD5B;1100 116D 11B2;AD5B;1100 116D 11B2; # (굛; 굛; 굛; 굛; 굛; ) HANGUL SYLLABLE GYOLB
+AD5C;AD5C;1100 116D 11B3;AD5C;1100 116D 11B3; # (굜; 굜; 굜; 굜; 굜; ) HANGUL SYLLABLE GYOLS
+AD5D;AD5D;1100 116D 11B4;AD5D;1100 116D 11B4; # (굝; 굝; 굝; 굝; 굝; ) HANGUL SYLLABLE GYOLT
+AD5E;AD5E;1100 116D 11B5;AD5E;1100 116D 11B5; # (굞; 굞; 굞; 굞; 굞; ) HANGUL SYLLABLE GYOLP
+AD5F;AD5F;1100 116D 11B6;AD5F;1100 116D 11B6; # (굟; 굟; 굟; 굟; 굟; ) HANGUL SYLLABLE GYOLH
+AD60;AD60;1100 116D 11B7;AD60;1100 116D 11B7; # (굠; 굠; 굠; 굠; 굠; ) HANGUL SYLLABLE GYOM
+AD61;AD61;1100 116D 11B8;AD61;1100 116D 11B8; # (굡; 굡; 굡; 굡; 굡; ) HANGUL SYLLABLE GYOB
+AD62;AD62;1100 116D 11B9;AD62;1100 116D 11B9; # (굢; 굢; 굢; 굢; 굢; ) HANGUL SYLLABLE GYOBS
+AD63;AD63;1100 116D 11BA;AD63;1100 116D 11BA; # (굣; 굣; 굣; 굣; 굣; ) HANGUL SYLLABLE GYOS
+AD64;AD64;1100 116D 11BB;AD64;1100 116D 11BB; # (굤; 굤; 굤; 굤; 굤; ) HANGUL SYLLABLE GYOSS
+AD65;AD65;1100 116D 11BC;AD65;1100 116D 11BC; # (굥; 굥; 굥; 굥; 굥; ) HANGUL SYLLABLE GYONG
+AD66;AD66;1100 116D 11BD;AD66;1100 116D 11BD; # (굦; 굦; 굦; 굦; 굦; ) HANGUL SYLLABLE GYOJ
+AD67;AD67;1100 116D 11BE;AD67;1100 116D 11BE; # (굧; 굧; 굧; 굧; 굧; ) HANGUL SYLLABLE GYOC
+AD68;AD68;1100 116D 11BF;AD68;1100 116D 11BF; # (굨; 굨; 굨; 굨; 굨; ) HANGUL SYLLABLE GYOK
+AD69;AD69;1100 116D 11C0;AD69;1100 116D 11C0; # (굩; 굩; 굩; 굩; 굩; ) HANGUL SYLLABLE GYOT
+AD6A;AD6A;1100 116D 11C1;AD6A;1100 116D 11C1; # (굪; 굪; 굪; 굪; 굪; ) HANGUL SYLLABLE GYOP
+AD6B;AD6B;1100 116D 11C2;AD6B;1100 116D 11C2; # (굫; 굫; 굫; 굫; 굫; ) HANGUL SYLLABLE GYOH
+AD6C;AD6C;1100 116E;AD6C;1100 116E; # (구; 구; 구; 구; 구; ) HANGUL SYLLABLE GU
+AD6D;AD6D;1100 116E 11A8;AD6D;1100 116E 11A8; # (국; 국; 국; 국; 국; ) HANGUL SYLLABLE GUG
+AD6E;AD6E;1100 116E 11A9;AD6E;1100 116E 11A9; # (굮; 굮; 굮; 굮; 굮; ) HANGUL SYLLABLE GUGG
+AD6F;AD6F;1100 116E 11AA;AD6F;1100 116E 11AA; # (굯; 굯; 굯; 굯; 굯; ) HANGUL SYLLABLE GUGS
+AD70;AD70;1100 116E 11AB;AD70;1100 116E 11AB; # (군; 군; 군; 군; 군; ) HANGUL SYLLABLE GUN
+AD71;AD71;1100 116E 11AC;AD71;1100 116E 11AC; # (굱; 굱; 굱; 굱; 굱; ) HANGUL SYLLABLE GUNJ
+AD72;AD72;1100 116E 11AD;AD72;1100 116E 11AD; # (굲; 굲; 굲; 굲; 굲; ) HANGUL SYLLABLE GUNH
+AD73;AD73;1100 116E 11AE;AD73;1100 116E 11AE; # (굳; 굳; 굳; 굳; 굳; ) HANGUL SYLLABLE GUD
+AD74;AD74;1100 116E 11AF;AD74;1100 116E 11AF; # (굴; 굴; 굴; 굴; 굴; ) HANGUL SYLLABLE GUL
+AD75;AD75;1100 116E 11B0;AD75;1100 116E 11B0; # (굵; 굵; 굵; 굵; 굵; ) HANGUL SYLLABLE GULG
+AD76;AD76;1100 116E 11B1;AD76;1100 116E 11B1; # (굶; 굶; 굶; 굶; 굶; ) HANGUL SYLLABLE GULM
+AD77;AD77;1100 116E 11B2;AD77;1100 116E 11B2; # (굷; 굷; 굷; 굷; 굷; ) HANGUL SYLLABLE GULB
+AD78;AD78;1100 116E 11B3;AD78;1100 116E 11B3; # (굸; 굸; 굸; 굸; 굸; ) HANGUL SYLLABLE GULS
+AD79;AD79;1100 116E 11B4;AD79;1100 116E 11B4; # (굹; 굹; 굹; 굹; 굹; ) HANGUL SYLLABLE GULT
+AD7A;AD7A;1100 116E 11B5;AD7A;1100 116E 11B5; # (굺; 굺; 굺; 굺; 굺; ) HANGUL SYLLABLE GULP
+AD7B;AD7B;1100 116E 11B6;AD7B;1100 116E 11B6; # (굻; 굻; 굻; 굻; 굻; ) HANGUL SYLLABLE GULH
+AD7C;AD7C;1100 116E 11B7;AD7C;1100 116E 11B7; # (굼; 굼; 굼; 굼; 굼; ) HANGUL SYLLABLE GUM
+AD7D;AD7D;1100 116E 11B8;AD7D;1100 116E 11B8; # (굽; 굽; 굽; 굽; 굽; ) HANGUL SYLLABLE GUB
+AD7E;AD7E;1100 116E 11B9;AD7E;1100 116E 11B9; # (굾; 굾; 굾; 굾; 굾; ) HANGUL SYLLABLE GUBS
+AD7F;AD7F;1100 116E 11BA;AD7F;1100 116E 11BA; # (굿; 굿; 굿; 굿; 굿; ) HANGUL SYLLABLE GUS
+AD80;AD80;1100 116E 11BB;AD80;1100 116E 11BB; # (궀; 궀; 궀; 궀; 궀; ) HANGUL SYLLABLE GUSS
+AD81;AD81;1100 116E 11BC;AD81;1100 116E 11BC; # (궁; 궁; 궁; 궁; 궁; ) HANGUL SYLLABLE GUNG
+AD82;AD82;1100 116E 11BD;AD82;1100 116E 11BD; # (궂; 궂; 궂; 궂; 궂; ) HANGUL SYLLABLE GUJ
+AD83;AD83;1100 116E 11BE;AD83;1100 116E 11BE; # (궃; 궃; 궃; 궃; 궃; ) HANGUL SYLLABLE GUC
+AD84;AD84;1100 116E 11BF;AD84;1100 116E 11BF; # (궄; 궄; 궄; 궄; 궄; ) HANGUL SYLLABLE GUK
+AD85;AD85;1100 116E 11C0;AD85;1100 116E 11C0; # (궅; 궅; 궅; 궅; 궅; ) HANGUL SYLLABLE GUT
+AD86;AD86;1100 116E 11C1;AD86;1100 116E 11C1; # (궆; 궆; 궆; 궆; 궆; ) HANGUL SYLLABLE GUP
+AD87;AD87;1100 116E 11C2;AD87;1100 116E 11C2; # (궇; 궇; 궇; 궇; 궇; ) HANGUL SYLLABLE GUH
+AD88;AD88;1100 116F;AD88;1100 116F; # (궈; 궈; 궈; 궈; 궈; ) HANGUL SYLLABLE GWEO
+AD89;AD89;1100 116F 11A8;AD89;1100 116F 11A8; # (궉; 궉; 궉; 궉; 궉; ) HANGUL SYLLABLE GWEOG
+AD8A;AD8A;1100 116F 11A9;AD8A;1100 116F 11A9; # (궊; 궊; 궊; 궊; 궊; ) HANGUL SYLLABLE GWEOGG
+AD8B;AD8B;1100 116F 11AA;AD8B;1100 116F 11AA; # (궋; 궋; 궋; 궋; 궋; ) HANGUL SYLLABLE GWEOGS
+AD8C;AD8C;1100 116F 11AB;AD8C;1100 116F 11AB; # (권; 권; 권; 권; 권; ) HANGUL SYLLABLE GWEON
+AD8D;AD8D;1100 116F 11AC;AD8D;1100 116F 11AC; # (궍; 궍; 궍; 궍; 궍; ) HANGUL SYLLABLE GWEONJ
+AD8E;AD8E;1100 116F 11AD;AD8E;1100 116F 11AD; # (궎; 궎; 궎; 궎; 궎; ) HANGUL SYLLABLE GWEONH
+AD8F;AD8F;1100 116F 11AE;AD8F;1100 116F 11AE; # (궏; 궏; 궏; 궏; 궏; ) HANGUL SYLLABLE GWEOD
+AD90;AD90;1100 116F 11AF;AD90;1100 116F 11AF; # (궐; 궐; 궐; 궐; 궐; ) HANGUL SYLLABLE GWEOL
+AD91;AD91;1100 116F 11B0;AD91;1100 116F 11B0; # (궑; 궑; 궑; 궑; 궑; ) HANGUL SYLLABLE GWEOLG
+AD92;AD92;1100 116F 11B1;AD92;1100 116F 11B1; # (궒; 궒; 궒; 궒; 궒; ) HANGUL SYLLABLE GWEOLM
+AD93;AD93;1100 116F 11B2;AD93;1100 116F 11B2; # (궓; 궓; 궓; 궓; 궓; ) HANGUL SYLLABLE GWEOLB
+AD94;AD94;1100 116F 11B3;AD94;1100 116F 11B3; # (궔; 궔; 궔; 궔; 궔; ) HANGUL SYLLABLE GWEOLS
+AD95;AD95;1100 116F 11B4;AD95;1100 116F 11B4; # (궕; 궕; 궕; 궕; 궕; ) HANGUL SYLLABLE GWEOLT
+AD96;AD96;1100 116F 11B5;AD96;1100 116F 11B5; # (궖; 궖; 궖; 궖; 궖; ) HANGUL SYLLABLE GWEOLP
+AD97;AD97;1100 116F 11B6;AD97;1100 116F 11B6; # (궗; 궗; 궗; 궗; 궗; ) HANGUL SYLLABLE GWEOLH
+AD98;AD98;1100 116F 11B7;AD98;1100 116F 11B7; # (궘; 궘; 궘; 궘; 궘; ) HANGUL SYLLABLE GWEOM
+AD99;AD99;1100 116F 11B8;AD99;1100 116F 11B8; # (궙; 궙; 궙; 궙; 궙; ) HANGUL SYLLABLE GWEOB
+AD9A;AD9A;1100 116F 11B9;AD9A;1100 116F 11B9; # (궚; 궚; 궚; 궚; 궚; ) HANGUL SYLLABLE GWEOBS
+AD9B;AD9B;1100 116F 11BA;AD9B;1100 116F 11BA; # (궛; 궛; 궛; 궛; 궛; ) HANGUL SYLLABLE GWEOS
+AD9C;AD9C;1100 116F 11BB;AD9C;1100 116F 11BB; # (궜; 궜; 궜; 궜; 궜; ) HANGUL SYLLABLE GWEOSS
+AD9D;AD9D;1100 116F 11BC;AD9D;1100 116F 11BC; # (궝; 궝; 궝; 궝; 궝; ) HANGUL SYLLABLE GWEONG
+AD9E;AD9E;1100 116F 11BD;AD9E;1100 116F 11BD; # (궞; 궞; 궞; 궞; 궞; ) HANGUL SYLLABLE GWEOJ
+AD9F;AD9F;1100 116F 11BE;AD9F;1100 116F 11BE; # (궟; 궟; 궟; 궟; 궟; ) HANGUL SYLLABLE GWEOC
+ADA0;ADA0;1100 116F 11BF;ADA0;1100 116F 11BF; # (궠; 궠; 궠; 궠; 궠; ) HANGUL SYLLABLE GWEOK
+ADA1;ADA1;1100 116F 11C0;ADA1;1100 116F 11C0; # (궡; 궡; 궡; 궡; 궡; ) HANGUL SYLLABLE GWEOT
+ADA2;ADA2;1100 116F 11C1;ADA2;1100 116F 11C1; # (궢; 궢; 궢; 궢; 궢; ) HANGUL SYLLABLE GWEOP
+ADA3;ADA3;1100 116F 11C2;ADA3;1100 116F 11C2; # (궣; 궣; 궣; 궣; 궣; ) HANGUL SYLLABLE GWEOH
+ADA4;ADA4;1100 1170;ADA4;1100 1170; # (궤; 궤; 궤; 궤; 궤; ) HANGUL SYLLABLE GWE
+ADA5;ADA5;1100 1170 11A8;ADA5;1100 1170 11A8; # (궥; 궥; 궥; 궥; 궥; ) HANGUL SYLLABLE GWEG
+ADA6;ADA6;1100 1170 11A9;ADA6;1100 1170 11A9; # (궦; 궦; 궦; 궦; 궦; ) HANGUL SYLLABLE GWEGG
+ADA7;ADA7;1100 1170 11AA;ADA7;1100 1170 11AA; # (궧; 궧; 궧; 궧; 궧; ) HANGUL SYLLABLE GWEGS
+ADA8;ADA8;1100 1170 11AB;ADA8;1100 1170 11AB; # (궨; 궨; 궨; 궨; 궨; ) HANGUL SYLLABLE GWEN
+ADA9;ADA9;1100 1170 11AC;ADA9;1100 1170 11AC; # (궩; 궩; 궩; 궩; 궩; ) HANGUL SYLLABLE GWENJ
+ADAA;ADAA;1100 1170 11AD;ADAA;1100 1170 11AD; # (궪; 궪; 궪; 궪; 궪; ) HANGUL SYLLABLE GWENH
+ADAB;ADAB;1100 1170 11AE;ADAB;1100 1170 11AE; # (궫; 궫; 궫; 궫; 궫; ) HANGUL SYLLABLE GWED
+ADAC;ADAC;1100 1170 11AF;ADAC;1100 1170 11AF; # (궬; 궬; 궬; 궬; 궬; ) HANGUL SYLLABLE GWEL
+ADAD;ADAD;1100 1170 11B0;ADAD;1100 1170 11B0; # (궭; 궭; 궭; 궭; 궭; ) HANGUL SYLLABLE GWELG
+ADAE;ADAE;1100 1170 11B1;ADAE;1100 1170 11B1; # (궮; 궮; 궮; 궮; 궮; ) HANGUL SYLLABLE GWELM
+ADAF;ADAF;1100 1170 11B2;ADAF;1100 1170 11B2; # (궯; 궯; 궯; 궯; 궯; ) HANGUL SYLLABLE GWELB
+ADB0;ADB0;1100 1170 11B3;ADB0;1100 1170 11B3; # (궰; 궰; 궰; 궰; 궰; ) HANGUL SYLLABLE GWELS
+ADB1;ADB1;1100 1170 11B4;ADB1;1100 1170 11B4; # (궱; 궱; 궱; 궱; 궱; ) HANGUL SYLLABLE GWELT
+ADB2;ADB2;1100 1170 11B5;ADB2;1100 1170 11B5; # (궲; 궲; 궲; 궲; 궲; ) HANGUL SYLLABLE GWELP
+ADB3;ADB3;1100 1170 11B6;ADB3;1100 1170 11B6; # (궳; 궳; 궳; 궳; 궳; ) HANGUL SYLLABLE GWELH
+ADB4;ADB4;1100 1170 11B7;ADB4;1100 1170 11B7; # (궴; 궴; 궴; 궴; 궴; ) HANGUL SYLLABLE GWEM
+ADB5;ADB5;1100 1170 11B8;ADB5;1100 1170 11B8; # (궵; 궵; 궵; 궵; 궵; ) HANGUL SYLLABLE GWEB
+ADB6;ADB6;1100 1170 11B9;ADB6;1100 1170 11B9; # (궶; 궶; 궶; 궶; 궶; ) HANGUL SYLLABLE GWEBS
+ADB7;ADB7;1100 1170 11BA;ADB7;1100 1170 11BA; # (궷; 궷; 궷; 궷; 궷; ) HANGUL SYLLABLE GWES
+ADB8;ADB8;1100 1170 11BB;ADB8;1100 1170 11BB; # (궸; 궸; 궸; 궸; 궸; ) HANGUL SYLLABLE GWESS
+ADB9;ADB9;1100 1170 11BC;ADB9;1100 1170 11BC; # (궹; 궹; 궹; 궹; 궹; ) HANGUL SYLLABLE GWENG
+ADBA;ADBA;1100 1170 11BD;ADBA;1100 1170 11BD; # (궺; 궺; 궺; 궺; 궺; ) HANGUL SYLLABLE GWEJ
+ADBB;ADBB;1100 1170 11BE;ADBB;1100 1170 11BE; # (궻; 궻; 궻; 궻; 궻; ) HANGUL SYLLABLE GWEC
+ADBC;ADBC;1100 1170 11BF;ADBC;1100 1170 11BF; # (궼; 궼; 궼; 궼; 궼; ) HANGUL SYLLABLE GWEK
+ADBD;ADBD;1100 1170 11C0;ADBD;1100 1170 11C0; # (궽; 궽; 궽; 궽; 궽; ) HANGUL SYLLABLE GWET
+ADBE;ADBE;1100 1170 11C1;ADBE;1100 1170 11C1; # (궾; 궾; 궾; 궾; 궾; ) HANGUL SYLLABLE GWEP
+ADBF;ADBF;1100 1170 11C2;ADBF;1100 1170 11C2; # (궿; 궿; 궿; 궿; 궿; ) HANGUL SYLLABLE GWEH
+ADC0;ADC0;1100 1171;ADC0;1100 1171; # (귀; 귀; 귀; 귀; 귀; ) HANGUL SYLLABLE GWI
+ADC1;ADC1;1100 1171 11A8;ADC1;1100 1171 11A8; # (귁; 귁; 귁; 귁; 귁; ) HANGUL SYLLABLE GWIG
+ADC2;ADC2;1100 1171 11A9;ADC2;1100 1171 11A9; # (귂; 귂; 귂; 귂; 귂; ) HANGUL SYLLABLE GWIGG
+ADC3;ADC3;1100 1171 11AA;ADC3;1100 1171 11AA; # (귃; 귃; 귃; 귃; 귃; ) HANGUL SYLLABLE GWIGS
+ADC4;ADC4;1100 1171 11AB;ADC4;1100 1171 11AB; # (귄; 귄; 귄; 귄; 귄; ) HANGUL SYLLABLE GWIN
+ADC5;ADC5;1100 1171 11AC;ADC5;1100 1171 11AC; # (귅; 귅; 귅; 귅; 귅; ) HANGUL SYLLABLE GWINJ
+ADC6;ADC6;1100 1171 11AD;ADC6;1100 1171 11AD; # (귆; 귆; 귆; 귆; 귆; ) HANGUL SYLLABLE GWINH
+ADC7;ADC7;1100 1171 11AE;ADC7;1100 1171 11AE; # (귇; 귇; 귇; 귇; 귇; ) HANGUL SYLLABLE GWID
+ADC8;ADC8;1100 1171 11AF;ADC8;1100 1171 11AF; # (귈; 귈; 귈; 귈; 귈; ) HANGUL SYLLABLE GWIL
+ADC9;ADC9;1100 1171 11B0;ADC9;1100 1171 11B0; # (귉; 귉; 귉; 귉; 귉; ) HANGUL SYLLABLE GWILG
+ADCA;ADCA;1100 1171 11B1;ADCA;1100 1171 11B1; # (귊; 귊; 귊; 귊; 귊; ) HANGUL SYLLABLE GWILM
+ADCB;ADCB;1100 1171 11B2;ADCB;1100 1171 11B2; # (귋; 귋; 귋; 귋; 귋; ) HANGUL SYLLABLE GWILB
+ADCC;ADCC;1100 1171 11B3;ADCC;1100 1171 11B3; # (귌; 귌; 귌; 귌; 귌; ) HANGUL SYLLABLE GWILS
+ADCD;ADCD;1100 1171 11B4;ADCD;1100 1171 11B4; # (귍; 귍; 귍; 귍; 귍; ) HANGUL SYLLABLE GWILT
+ADCE;ADCE;1100 1171 11B5;ADCE;1100 1171 11B5; # (귎; 귎; 귎; 귎; 귎; ) HANGUL SYLLABLE GWILP
+ADCF;ADCF;1100 1171 11B6;ADCF;1100 1171 11B6; # (귏; 귏; 귏; 귏; 귏; ) HANGUL SYLLABLE GWILH
+ADD0;ADD0;1100 1171 11B7;ADD0;1100 1171 11B7; # (귐; 귐; 귐; 귐; 귐; ) HANGUL SYLLABLE GWIM
+ADD1;ADD1;1100 1171 11B8;ADD1;1100 1171 11B8; # (귑; 귑; 귑; 귑; 귑; ) HANGUL SYLLABLE GWIB
+ADD2;ADD2;1100 1171 11B9;ADD2;1100 1171 11B9; # (귒; 귒; 귒; 귒; 귒; ) HANGUL SYLLABLE GWIBS
+ADD3;ADD3;1100 1171 11BA;ADD3;1100 1171 11BA; # (귓; 귓; 귓; 귓; 귓; ) HANGUL SYLLABLE GWIS
+ADD4;ADD4;1100 1171 11BB;ADD4;1100 1171 11BB; # (귔; 귔; 귔; 귔; 귔; ) HANGUL SYLLABLE GWISS
+ADD5;ADD5;1100 1171 11BC;ADD5;1100 1171 11BC; # (귕; 귕; 귕; 귕; 귕; ) HANGUL SYLLABLE GWING
+ADD6;ADD6;1100 1171 11BD;ADD6;1100 1171 11BD; # (귖; 귖; 귖; 귖; 귖; ) HANGUL SYLLABLE GWIJ
+ADD7;ADD7;1100 1171 11BE;ADD7;1100 1171 11BE; # (귗; 귗; 귗; 귗; 귗; ) HANGUL SYLLABLE GWIC
+ADD8;ADD8;1100 1171 11BF;ADD8;1100 1171 11BF; # (귘; 귘; 귘; 귘; 귘; ) HANGUL SYLLABLE GWIK
+ADD9;ADD9;1100 1171 11C0;ADD9;1100 1171 11C0; # (귙; 귙; 귙; 귙; 귙; ) HANGUL SYLLABLE GWIT
+ADDA;ADDA;1100 1171 11C1;ADDA;1100 1171 11C1; # (귚; 귚; 귚; 귚; 귚; ) HANGUL SYLLABLE GWIP
+ADDB;ADDB;1100 1171 11C2;ADDB;1100 1171 11C2; # (귛; 귛; 귛; 귛; 귛; ) HANGUL SYLLABLE GWIH
+ADDC;ADDC;1100 1172;ADDC;1100 1172; # (규; 규; 규; 규; 규; ) HANGUL SYLLABLE GYU
+ADDD;ADDD;1100 1172 11A8;ADDD;1100 1172 11A8; # (귝; 귝; 귝; 귝; 귝; ) HANGUL SYLLABLE GYUG
+ADDE;ADDE;1100 1172 11A9;ADDE;1100 1172 11A9; # (귞; 귞; 귞; 귞; 귞; ) HANGUL SYLLABLE GYUGG
+ADDF;ADDF;1100 1172 11AA;ADDF;1100 1172 11AA; # (귟; 귟; 귟; 귟; 귟; ) HANGUL SYLLABLE GYUGS
+ADE0;ADE0;1100 1172 11AB;ADE0;1100 1172 11AB; # (균; 균; 균; 균; 균; ) HANGUL SYLLABLE GYUN
+ADE1;ADE1;1100 1172 11AC;ADE1;1100 1172 11AC; # (귡; 귡; 귡; 귡; 귡; ) HANGUL SYLLABLE GYUNJ
+ADE2;ADE2;1100 1172 11AD;ADE2;1100 1172 11AD; # (귢; 귢; 귢; 귢; 귢; ) HANGUL SYLLABLE GYUNH
+ADE3;ADE3;1100 1172 11AE;ADE3;1100 1172 11AE; # (귣; 귣; 귣; 귣; 귣; ) HANGUL SYLLABLE GYUD
+ADE4;ADE4;1100 1172 11AF;ADE4;1100 1172 11AF; # (귤; 귤; 귤; 귤; 귤; ) HANGUL SYLLABLE GYUL
+ADE5;ADE5;1100 1172 11B0;ADE5;1100 1172 11B0; # (귥; 귥; 귥; 귥; 귥; ) HANGUL SYLLABLE GYULG
+ADE6;ADE6;1100 1172 11B1;ADE6;1100 1172 11B1; # (귦; 귦; 귦; 귦; 귦; ) HANGUL SYLLABLE GYULM
+ADE7;ADE7;1100 1172 11B2;ADE7;1100 1172 11B2; # (귧; 귧; 귧; 귧; 귧; ) HANGUL SYLLABLE GYULB
+ADE8;ADE8;1100 1172 11B3;ADE8;1100 1172 11B3; # (귨; 귨; 귨; 귨; 귨; ) HANGUL SYLLABLE GYULS
+ADE9;ADE9;1100 1172 11B4;ADE9;1100 1172 11B4; # (귩; 귩; 귩; 귩; 귩; ) HANGUL SYLLABLE GYULT
+ADEA;ADEA;1100 1172 11B5;ADEA;1100 1172 11B5; # (귪; 귪; 귪; 귪; 귪; ) HANGUL SYLLABLE GYULP
+ADEB;ADEB;1100 1172 11B6;ADEB;1100 1172 11B6; # (귫; 귫; 귫; 귫; 귫; ) HANGUL SYLLABLE GYULH
+ADEC;ADEC;1100 1172 11B7;ADEC;1100 1172 11B7; # (귬; 귬; 귬; 귬; 귬; ) HANGUL SYLLABLE GYUM
+ADED;ADED;1100 1172 11B8;ADED;1100 1172 11B8; # (귭; 귭; 귭; 귭; 귭; ) HANGUL SYLLABLE GYUB
+ADEE;ADEE;1100 1172 11B9;ADEE;1100 1172 11B9; # (귮; 귮; 귮; 귮; 귮; ) HANGUL SYLLABLE GYUBS
+ADEF;ADEF;1100 1172 11BA;ADEF;1100 1172 11BA; # (귯; 귯; 귯; 귯; 귯; ) HANGUL SYLLABLE GYUS
+ADF0;ADF0;1100 1172 11BB;ADF0;1100 1172 11BB; # (귰; 귰; 귰; 귰; 귰; ) HANGUL SYLLABLE GYUSS
+ADF1;ADF1;1100 1172 11BC;ADF1;1100 1172 11BC; # (귱; 귱; 귱; 귱; 귱; ) HANGUL SYLLABLE GYUNG
+ADF2;ADF2;1100 1172 11BD;ADF2;1100 1172 11BD; # (귲; 귲; 귲; 귲; 귲; ) HANGUL SYLLABLE GYUJ
+ADF3;ADF3;1100 1172 11BE;ADF3;1100 1172 11BE; # (귳; 귳; 귳; 귳; 귳; ) HANGUL SYLLABLE GYUC
+ADF4;ADF4;1100 1172 11BF;ADF4;1100 1172 11BF; # (귴; 귴; 귴; 귴; 귴; ) HANGUL SYLLABLE GYUK
+ADF5;ADF5;1100 1172 11C0;ADF5;1100 1172 11C0; # (귵; 귵; 귵; 귵; 귵; ) HANGUL SYLLABLE GYUT
+ADF6;ADF6;1100 1172 11C1;ADF6;1100 1172 11C1; # (귶; 귶; 귶; 귶; 귶; ) HANGUL SYLLABLE GYUP
+ADF7;ADF7;1100 1172 11C2;ADF7;1100 1172 11C2; # (귷; 귷; 귷; 귷; 귷; ) HANGUL SYLLABLE GYUH
+ADF8;ADF8;1100 1173;ADF8;1100 1173; # (그; 그; 그; 그; 그; ) HANGUL SYLLABLE GEU
+ADF9;ADF9;1100 1173 11A8;ADF9;1100 1173 11A8; # (극; 극; 극; 극; 극; ) HANGUL SYLLABLE GEUG
+ADFA;ADFA;1100 1173 11A9;ADFA;1100 1173 11A9; # (귺; 귺; 귺; 귺; 귺; ) HANGUL SYLLABLE GEUGG
+ADFB;ADFB;1100 1173 11AA;ADFB;1100 1173 11AA; # (귻; 귻; 귻; 귻; 귻; ) HANGUL SYLLABLE GEUGS
+ADFC;ADFC;1100 1173 11AB;ADFC;1100 1173 11AB; # (근; 근; 근; 근; 근; ) HANGUL SYLLABLE GEUN
+ADFD;ADFD;1100 1173 11AC;ADFD;1100 1173 11AC; # (귽; 귽; 귽; 귽; 귽; ) HANGUL SYLLABLE GEUNJ
+ADFE;ADFE;1100 1173 11AD;ADFE;1100 1173 11AD; # (귾; 귾; 귾; 귾; 귾; ) HANGUL SYLLABLE GEUNH
+ADFF;ADFF;1100 1173 11AE;ADFF;1100 1173 11AE; # (귿; 귿; 귿; 귿; 귿; ) HANGUL SYLLABLE GEUD
+AE00;AE00;1100 1173 11AF;AE00;1100 1173 11AF; # (글; 글; 글; 글; 글; ) HANGUL SYLLABLE GEUL
+AE01;AE01;1100 1173 11B0;AE01;1100 1173 11B0; # (긁; 긁; 긁; 긁; 긁; ) HANGUL SYLLABLE GEULG
+AE02;AE02;1100 1173 11B1;AE02;1100 1173 11B1; # (긂; 긂; 긂; 긂; 긂; ) HANGUL SYLLABLE GEULM
+AE03;AE03;1100 1173 11B2;AE03;1100 1173 11B2; # (긃; 긃; 긃; 긃; 긃; ) HANGUL SYLLABLE GEULB
+AE04;AE04;1100 1173 11B3;AE04;1100 1173 11B3; # (긄; 긄; 긄; 긄; 긄; ) HANGUL SYLLABLE GEULS
+AE05;AE05;1100 1173 11B4;AE05;1100 1173 11B4; # (긅; 긅; 긅; 긅; 긅; ) HANGUL SYLLABLE GEULT
+AE06;AE06;1100 1173 11B5;AE06;1100 1173 11B5; # (긆; 긆; 긆; 긆; 긆; ) HANGUL SYLLABLE GEULP
+AE07;AE07;1100 1173 11B6;AE07;1100 1173 11B6; # (긇; 긇; 긇; 긇; 긇; ) HANGUL SYLLABLE GEULH
+AE08;AE08;1100 1173 11B7;AE08;1100 1173 11B7; # (금; 금; 금; 금; 금; ) HANGUL SYLLABLE GEUM
+AE09;AE09;1100 1173 11B8;AE09;1100 1173 11B8; # (급; 급; 급; 급; 급; ) HANGUL SYLLABLE GEUB
+AE0A;AE0A;1100 1173 11B9;AE0A;1100 1173 11B9; # (긊; 긊; 긊; 긊; 긊; ) HANGUL SYLLABLE GEUBS
+AE0B;AE0B;1100 1173 11BA;AE0B;1100 1173 11BA; # (긋; 긋; 긋; 긋; 긋; ) HANGUL SYLLABLE GEUS
+AE0C;AE0C;1100 1173 11BB;AE0C;1100 1173 11BB; # (긌; 긌; 긌; 긌; 긌; ) HANGUL SYLLABLE GEUSS
+AE0D;AE0D;1100 1173 11BC;AE0D;1100 1173 11BC; # (긍; 긍; 긍; 긍; 긍; ) HANGUL SYLLABLE GEUNG
+AE0E;AE0E;1100 1173 11BD;AE0E;1100 1173 11BD; # (긎; 긎; 긎; 긎; 긎; ) HANGUL SYLLABLE GEUJ
+AE0F;AE0F;1100 1173 11BE;AE0F;1100 1173 11BE; # (긏; 긏; 긏; 긏; 긏; ) HANGUL SYLLABLE GEUC
+AE10;AE10;1100 1173 11BF;AE10;1100 1173 11BF; # (긐; 긐; 긐; 긐; 긐; ) HANGUL SYLLABLE GEUK
+AE11;AE11;1100 1173 11C0;AE11;1100 1173 11C0; # (긑; 긑; 긑; 긑; 긑; ) HANGUL SYLLABLE GEUT
+AE12;AE12;1100 1173 11C1;AE12;1100 1173 11C1; # (긒; 긒; 긒; 긒; 긒; ) HANGUL SYLLABLE GEUP
+AE13;AE13;1100 1173 11C2;AE13;1100 1173 11C2; # (긓; 긓; 긓; 긓; 긓; ) HANGUL SYLLABLE GEUH
+AE14;AE14;1100 1174;AE14;1100 1174; # (긔; 긔; 긔; 긔; 긔; ) HANGUL SYLLABLE GYI
+AE15;AE15;1100 1174 11A8;AE15;1100 1174 11A8; # (긕; 긕; 긕; 긕; 긕; ) HANGUL SYLLABLE GYIG
+AE16;AE16;1100 1174 11A9;AE16;1100 1174 11A9; # (긖; 긖; 긖; 긖; 긖; ) HANGUL SYLLABLE GYIGG
+AE17;AE17;1100 1174 11AA;AE17;1100 1174 11AA; # (긗; 긗; 긗; 긗; 긗; ) HANGUL SYLLABLE GYIGS
+AE18;AE18;1100 1174 11AB;AE18;1100 1174 11AB; # (긘; 긘; 긘; 긘; 긘; ) HANGUL SYLLABLE GYIN
+AE19;AE19;1100 1174 11AC;AE19;1100 1174 11AC; # (긙; 긙; 긙; 긙; 긙; ) HANGUL SYLLABLE GYINJ
+AE1A;AE1A;1100 1174 11AD;AE1A;1100 1174 11AD; # (긚; 긚; 긚; 긚; 긚; ) HANGUL SYLLABLE GYINH
+AE1B;AE1B;1100 1174 11AE;AE1B;1100 1174 11AE; # (긛; 긛; 긛; 긛; 긛; ) HANGUL SYLLABLE GYID
+AE1C;AE1C;1100 1174 11AF;AE1C;1100 1174 11AF; # (긜; 긜; 긜; 긜; 긜; ) HANGUL SYLLABLE GYIL
+AE1D;AE1D;1100 1174 11B0;AE1D;1100 1174 11B0; # (긝; 긝; 긝; 긝; 긝; ) HANGUL SYLLABLE GYILG
+AE1E;AE1E;1100 1174 11B1;AE1E;1100 1174 11B1; # (긞; 긞; 긞; 긞; 긞; ) HANGUL SYLLABLE GYILM
+AE1F;AE1F;1100 1174 11B2;AE1F;1100 1174 11B2; # (긟; 긟; 긟; 긟; 긟; ) HANGUL SYLLABLE GYILB
+AE20;AE20;1100 1174 11B3;AE20;1100 1174 11B3; # (긠; 긠; 긠; 긠; 긠; ) HANGUL SYLLABLE GYILS
+AE21;AE21;1100 1174 11B4;AE21;1100 1174 11B4; # (긡; 긡; 긡; 긡; 긡; ) HANGUL SYLLABLE GYILT
+AE22;AE22;1100 1174 11B5;AE22;1100 1174 11B5; # (긢; 긢; 긢; 긢; 긢; ) HANGUL SYLLABLE GYILP
+AE23;AE23;1100 1174 11B6;AE23;1100 1174 11B6; # (긣; 긣; 긣; 긣; 긣; ) HANGUL SYLLABLE GYILH
+AE24;AE24;1100 1174 11B7;AE24;1100 1174 11B7; # (긤; 긤; 긤; 긤; 긤; ) HANGUL SYLLABLE GYIM
+AE25;AE25;1100 1174 11B8;AE25;1100 1174 11B8; # (긥; 긥; 긥; 긥; 긥; ) HANGUL SYLLABLE GYIB
+AE26;AE26;1100 1174 11B9;AE26;1100 1174 11B9; # (긦; 긦; 긦; 긦; 긦; ) HANGUL SYLLABLE GYIBS
+AE27;AE27;1100 1174 11BA;AE27;1100 1174 11BA; # (긧; 긧; 긧; 긧; 긧; ) HANGUL SYLLABLE GYIS
+AE28;AE28;1100 1174 11BB;AE28;1100 1174 11BB; # (긨; 긨; 긨; 긨; 긨; ) HANGUL SYLLABLE GYISS
+AE29;AE29;1100 1174 11BC;AE29;1100 1174 11BC; # (긩; 긩; 긩; 긩; 긩; ) HANGUL SYLLABLE GYING
+AE2A;AE2A;1100 1174 11BD;AE2A;1100 1174 11BD; # (긪; 긪; 긪; 긪; 긪; ) HANGUL SYLLABLE GYIJ
+AE2B;AE2B;1100 1174 11BE;AE2B;1100 1174 11BE; # (긫; 긫; 긫; 긫; 긫; ) HANGUL SYLLABLE GYIC
+AE2C;AE2C;1100 1174 11BF;AE2C;1100 1174 11BF; # (긬; 긬; 긬; 긬; 긬; ) HANGUL SYLLABLE GYIK
+AE2D;AE2D;1100 1174 11C0;AE2D;1100 1174 11C0; # (긭; 긭; 긭; 긭; 긭; ) HANGUL SYLLABLE GYIT
+AE2E;AE2E;1100 1174 11C1;AE2E;1100 1174 11C1; # (긮; 긮; 긮; 긮; 긮; ) HANGUL SYLLABLE GYIP
+AE2F;AE2F;1100 1174 11C2;AE2F;1100 1174 11C2; # (긯; 긯; 긯; 긯; 긯; ) HANGUL SYLLABLE GYIH
+AE30;AE30;1100 1175;AE30;1100 1175; # (기; 기; 기; 기; 기; ) HANGUL SYLLABLE GI
+AE31;AE31;1100 1175 11A8;AE31;1100 1175 11A8; # (긱; 긱; 긱; 긱; 긱; ) HANGUL SYLLABLE GIG
+AE32;AE32;1100 1175 11A9;AE32;1100 1175 11A9; # (긲; 긲; 긲; 긲; 긲; ) HANGUL SYLLABLE GIGG
+AE33;AE33;1100 1175 11AA;AE33;1100 1175 11AA; # (긳; 긳; 긳; 긳; 긳; ) HANGUL SYLLABLE GIGS
+AE34;AE34;1100 1175 11AB;AE34;1100 1175 11AB; # (긴; 긴; 긴; 긴; 긴; ) HANGUL SYLLABLE GIN
+AE35;AE35;1100 1175 11AC;AE35;1100 1175 11AC; # (긵; 긵; 긵; 긵; 긵; ) HANGUL SYLLABLE GINJ
+AE36;AE36;1100 1175 11AD;AE36;1100 1175 11AD; # (긶; 긶; 긶; 긶; 긶; ) HANGUL SYLLABLE GINH
+AE37;AE37;1100 1175 11AE;AE37;1100 1175 11AE; # (긷; 긷; 긷; 긷; 긷; ) HANGUL SYLLABLE GID
+AE38;AE38;1100 1175 11AF;AE38;1100 1175 11AF; # (길; 길; 길; 길; 길; ) HANGUL SYLLABLE GIL
+AE39;AE39;1100 1175 11B0;AE39;1100 1175 11B0; # (긹; 긹; 긹; 긹; 긹; ) HANGUL SYLLABLE GILG
+AE3A;AE3A;1100 1175 11B1;AE3A;1100 1175 11B1; # (긺; 긺; 긺; 긺; 긺; ) HANGUL SYLLABLE GILM
+AE3B;AE3B;1100 1175 11B2;AE3B;1100 1175 11B2; # (긻; 긻; 긻; 긻; 긻; ) HANGUL SYLLABLE GILB
+AE3C;AE3C;1100 1175 11B3;AE3C;1100 1175 11B3; # (긼; 긼; 긼; 긼; 긼; ) HANGUL SYLLABLE GILS
+AE3D;AE3D;1100 1175 11B4;AE3D;1100 1175 11B4; # (긽; 긽; 긽; 긽; 긽; ) HANGUL SYLLABLE GILT
+AE3E;AE3E;1100 1175 11B5;AE3E;1100 1175 11B5; # (긾; 긾; 긾; 긾; 긾; ) HANGUL SYLLABLE GILP
+AE3F;AE3F;1100 1175 11B6;AE3F;1100 1175 11B6; # (긿; 긿; 긿; 긿; 긿; ) HANGUL SYLLABLE GILH
+AE40;AE40;1100 1175 11B7;AE40;1100 1175 11B7; # (김; 김; 김; 김; 김; ) HANGUL SYLLABLE GIM
+AE41;AE41;1100 1175 11B8;AE41;1100 1175 11B8; # (깁; 깁; 깁; 깁; 깁; ) HANGUL SYLLABLE GIB
+AE42;AE42;1100 1175 11B9;AE42;1100 1175 11B9; # (깂; 깂; 깂; 깂; 깂; ) HANGUL SYLLABLE GIBS
+AE43;AE43;1100 1175 11BA;AE43;1100 1175 11BA; # (깃; 깃; 깃; 깃; 깃; ) HANGUL SYLLABLE GIS
+AE44;AE44;1100 1175 11BB;AE44;1100 1175 11BB; # (깄; 깄; 깄; 깄; 깄; ) HANGUL SYLLABLE GISS
+AE45;AE45;1100 1175 11BC;AE45;1100 1175 11BC; # (깅; 깅; 깅; 깅; 깅; ) HANGUL SYLLABLE GING
+AE46;AE46;1100 1175 11BD;AE46;1100 1175 11BD; # (깆; 깆; 깆; 깆; 깆; ) HANGUL SYLLABLE GIJ
+AE47;AE47;1100 1175 11BE;AE47;1100 1175 11BE; # (깇; 깇; 깇; 깇; 깇; ) HANGUL SYLLABLE GIC
+AE48;AE48;1100 1175 11BF;AE48;1100 1175 11BF; # (깈; 깈; 깈; 깈; 깈; ) HANGUL SYLLABLE GIK
+AE49;AE49;1100 1175 11C0;AE49;1100 1175 11C0; # (깉; 깉; 깉; 깉; 깉; ) HANGUL SYLLABLE GIT
+AE4A;AE4A;1100 1175 11C1;AE4A;1100 1175 11C1; # (깊; 깊; 깊; 깊; 깊; ) HANGUL SYLLABLE GIP
+AE4B;AE4B;1100 1175 11C2;AE4B;1100 1175 11C2; # (깋; 깋; 깋; 깋; 깋; ) HANGUL SYLLABLE GIH
+AE4C;AE4C;1101 1161;AE4C;1101 1161; # (까; 까; 까; 까; 까; ) HANGUL SYLLABLE GGA
+AE4D;AE4D;1101 1161 11A8;AE4D;1101 1161 11A8; # (깍; 깍; 깍; 깍; 깍; ) HANGUL SYLLABLE GGAG
+AE4E;AE4E;1101 1161 11A9;AE4E;1101 1161 11A9; # (깎; 깎; 깎; 깎; 깎; ) HANGUL SYLLABLE GGAGG
+AE4F;AE4F;1101 1161 11AA;AE4F;1101 1161 11AA; # (깏; 깏; 깏; 깏; 깏; ) HANGUL SYLLABLE GGAGS
+AE50;AE50;1101 1161 11AB;AE50;1101 1161 11AB; # (깐; 깐; 깐; 깐; 깐; ) HANGUL SYLLABLE GGAN
+AE51;AE51;1101 1161 11AC;AE51;1101 1161 11AC; # (깑; 깑; 깑; 깑; 깑; ) HANGUL SYLLABLE GGANJ
+AE52;AE52;1101 1161 11AD;AE52;1101 1161 11AD; # (깒; 깒; 깒; 깒; 깒; ) HANGUL SYLLABLE GGANH
+AE53;AE53;1101 1161 11AE;AE53;1101 1161 11AE; # (깓; 깓; 깓; 깓; 깓; ) HANGUL SYLLABLE GGAD
+AE54;AE54;1101 1161 11AF;AE54;1101 1161 11AF; # (깔; 깔; 깔; 깔; 깔; ) HANGUL SYLLABLE GGAL
+AE55;AE55;1101 1161 11B0;AE55;1101 1161 11B0; # (깕; 깕; 깕; 깕; 깕; ) HANGUL SYLLABLE GGALG
+AE56;AE56;1101 1161 11B1;AE56;1101 1161 11B1; # (깖; 깖; 깖; 깖; 깖; ) HANGUL SYLLABLE GGALM
+AE57;AE57;1101 1161 11B2;AE57;1101 1161 11B2; # (깗; 깗; 깗; 깗; 깗; ) HANGUL SYLLABLE GGALB
+AE58;AE58;1101 1161 11B3;AE58;1101 1161 11B3; # (깘; 깘; 깘; 깘; 깘; ) HANGUL SYLLABLE GGALS
+AE59;AE59;1101 1161 11B4;AE59;1101 1161 11B4; # (깙; 깙; 깙; 깙; 깙; ) HANGUL SYLLABLE GGALT
+AE5A;AE5A;1101 1161 11B5;AE5A;1101 1161 11B5; # (깚; 깚; 깚; 깚; 깚; ) HANGUL SYLLABLE GGALP
+AE5B;AE5B;1101 1161 11B6;AE5B;1101 1161 11B6; # (깛; 깛; 깛; 깛; 깛; ) HANGUL SYLLABLE GGALH
+AE5C;AE5C;1101 1161 11B7;AE5C;1101 1161 11B7; # (깜; 깜; 깜; 깜; 깜; ) HANGUL SYLLABLE GGAM
+AE5D;AE5D;1101 1161 11B8;AE5D;1101 1161 11B8; # (깝; 깝; 깝; 깝; 깝; ) HANGUL SYLLABLE GGAB
+AE5E;AE5E;1101 1161 11B9;AE5E;1101 1161 11B9; # (깞; 깞; 깞; 깞; 깞; ) HANGUL SYLLABLE GGABS
+AE5F;AE5F;1101 1161 11BA;AE5F;1101 1161 11BA; # (깟; 깟; 깟; 깟; 깟; ) HANGUL SYLLABLE GGAS
+AE60;AE60;1101 1161 11BB;AE60;1101 1161 11BB; # (깠; 깠; 깠; 깠; 깠; ) HANGUL SYLLABLE GGASS
+AE61;AE61;1101 1161 11BC;AE61;1101 1161 11BC; # (깡; 깡; 깡; 깡; 깡; ) HANGUL SYLLABLE GGANG
+AE62;AE62;1101 1161 11BD;AE62;1101 1161 11BD; # (깢; 깢; 깢; 깢; 깢; ) HANGUL SYLLABLE GGAJ
+AE63;AE63;1101 1161 11BE;AE63;1101 1161 11BE; # (깣; 깣; 깣; 깣; 깣; ) HANGUL SYLLABLE GGAC
+AE64;AE64;1101 1161 11BF;AE64;1101 1161 11BF; # (깤; 깤; 깤; 깤; 깤; ) HANGUL SYLLABLE GGAK
+AE65;AE65;1101 1161 11C0;AE65;1101 1161 11C0; # (깥; 깥; 깥; 깥; 깥; ) HANGUL SYLLABLE GGAT
+AE66;AE66;1101 1161 11C1;AE66;1101 1161 11C1; # (깦; 깦; 깦; 깦; 깦; ) HANGUL SYLLABLE GGAP
+AE67;AE67;1101 1161 11C2;AE67;1101 1161 11C2; # (깧; 깧; 깧; 깧; 깧; ) HANGUL SYLLABLE GGAH
+AE68;AE68;1101 1162;AE68;1101 1162; # (깨; 깨; 깨; 깨; 깨; ) HANGUL SYLLABLE GGAE
+AE69;AE69;1101 1162 11A8;AE69;1101 1162 11A8; # (깩; 깩; 깩; 깩; 깩; ) HANGUL SYLLABLE GGAEG
+AE6A;AE6A;1101 1162 11A9;AE6A;1101 1162 11A9; # (깪; 깪; 깪; 깪; 깪; ) HANGUL SYLLABLE GGAEGG
+AE6B;AE6B;1101 1162 11AA;AE6B;1101 1162 11AA; # (깫; 깫; 깫; 깫; 깫; ) HANGUL SYLLABLE GGAEGS
+AE6C;AE6C;1101 1162 11AB;AE6C;1101 1162 11AB; # (깬; 깬; 깬; 깬; 깬; ) HANGUL SYLLABLE GGAEN
+AE6D;AE6D;1101 1162 11AC;AE6D;1101 1162 11AC; # (깭; 깭; 깭; 깭; 깭; ) HANGUL SYLLABLE GGAENJ
+AE6E;AE6E;1101 1162 11AD;AE6E;1101 1162 11AD; # (깮; 깮; 깮; 깮; 깮; ) HANGUL SYLLABLE GGAENH
+AE6F;AE6F;1101 1162 11AE;AE6F;1101 1162 11AE; # (깯; 깯; 깯; 깯; 깯; ) HANGUL SYLLABLE GGAED
+AE70;AE70;1101 1162 11AF;AE70;1101 1162 11AF; # (깰; 깰; 깰; 깰; 깰; ) HANGUL SYLLABLE GGAEL
+AE71;AE71;1101 1162 11B0;AE71;1101 1162 11B0; # (깱; 깱; 깱; 깱; 깱; ) HANGUL SYLLABLE GGAELG
+AE72;AE72;1101 1162 11B1;AE72;1101 1162 11B1; # (깲; 깲; 깲; 깲; 깲; ) HANGUL SYLLABLE GGAELM
+AE73;AE73;1101 1162 11B2;AE73;1101 1162 11B2; # (깳; 깳; 깳; 깳; 깳; ) HANGUL SYLLABLE GGAELB
+AE74;AE74;1101 1162 11B3;AE74;1101 1162 11B3; # (깴; 깴; 깴; 깴; 깴; ) HANGUL SYLLABLE GGAELS
+AE75;AE75;1101 1162 11B4;AE75;1101 1162 11B4; # (깵; 깵; 깵; 깵; 깵; ) HANGUL SYLLABLE GGAELT
+AE76;AE76;1101 1162 11B5;AE76;1101 1162 11B5; # (깶; 깶; 깶; 깶; 깶; ) HANGUL SYLLABLE GGAELP
+AE77;AE77;1101 1162 11B6;AE77;1101 1162 11B6; # (깷; 깷; 깷; 깷; 깷; ) HANGUL SYLLABLE GGAELH
+AE78;AE78;1101 1162 11B7;AE78;1101 1162 11B7; # (깸; 깸; 깸; 깸; 깸; ) HANGUL SYLLABLE GGAEM
+AE79;AE79;1101 1162 11B8;AE79;1101 1162 11B8; # (깹; 깹; 깹; 깹; 깹; ) HANGUL SYLLABLE GGAEB
+AE7A;AE7A;1101 1162 11B9;AE7A;1101 1162 11B9; # (깺; 깺; 깺; 깺; 깺; ) HANGUL SYLLABLE GGAEBS
+AE7B;AE7B;1101 1162 11BA;AE7B;1101 1162 11BA; # (깻; 깻; 깻; 깻; 깻; ) HANGUL SYLLABLE GGAES
+AE7C;AE7C;1101 1162 11BB;AE7C;1101 1162 11BB; # (깼; 깼; 깼; 깼; 깼; ) HANGUL SYLLABLE GGAESS
+AE7D;AE7D;1101 1162 11BC;AE7D;1101 1162 11BC; # (깽; 깽; 깽; 깽; 깽; ) HANGUL SYLLABLE GGAENG
+AE7E;AE7E;1101 1162 11BD;AE7E;1101 1162 11BD; # (깾; 깾; 깾; 깾; 깾; ) HANGUL SYLLABLE GGAEJ
+AE7F;AE7F;1101 1162 11BE;AE7F;1101 1162 11BE; # (깿; 깿; 깿; 깿; 깿; ) HANGUL SYLLABLE GGAEC
+AE80;AE80;1101 1162 11BF;AE80;1101 1162 11BF; # (꺀; 꺀; 꺀; 꺀; 꺀; ) HANGUL SYLLABLE GGAEK
+AE81;AE81;1101 1162 11C0;AE81;1101 1162 11C0; # (꺁; 꺁; 꺁; 꺁; 꺁; ) HANGUL SYLLABLE GGAET
+AE82;AE82;1101 1162 11C1;AE82;1101 1162 11C1; # (꺂; 꺂; 꺂; 꺂; 꺂; ) HANGUL SYLLABLE GGAEP
+AE83;AE83;1101 1162 11C2;AE83;1101 1162 11C2; # (꺃; 꺃; 꺃; 꺃; 꺃; ) HANGUL SYLLABLE GGAEH
+AE84;AE84;1101 1163;AE84;1101 1163; # (꺄; 꺄; 꺄; 꺄; 꺄; ) HANGUL SYLLABLE GGYA
+AE85;AE85;1101 1163 11A8;AE85;1101 1163 11A8; # (꺅; 꺅; 꺅; 꺅; 꺅; ) HANGUL SYLLABLE GGYAG
+AE86;AE86;1101 1163 11A9;AE86;1101 1163 11A9; # (꺆; 꺆; 꺆; 꺆; 꺆; ) HANGUL SYLLABLE GGYAGG
+AE87;AE87;1101 1163 11AA;AE87;1101 1163 11AA; # (꺇; 꺇; 꺇; 꺇; 꺇; ) HANGUL SYLLABLE GGYAGS
+AE88;AE88;1101 1163 11AB;AE88;1101 1163 11AB; # (꺈; 꺈; 꺈; 꺈; 꺈; ) HANGUL SYLLABLE GGYAN
+AE89;AE89;1101 1163 11AC;AE89;1101 1163 11AC; # (꺉; 꺉; 꺉; 꺉; 꺉; ) HANGUL SYLLABLE GGYANJ
+AE8A;AE8A;1101 1163 11AD;AE8A;1101 1163 11AD; # (꺊; 꺊; 꺊; 꺊; 꺊; ) HANGUL SYLLABLE GGYANH
+AE8B;AE8B;1101 1163 11AE;AE8B;1101 1163 11AE; # (꺋; 꺋; 꺋; 꺋; 꺋; ) HANGUL SYLLABLE GGYAD
+AE8C;AE8C;1101 1163 11AF;AE8C;1101 1163 11AF; # (꺌; 꺌; 꺌; 꺌; 꺌; ) HANGUL SYLLABLE GGYAL
+AE8D;AE8D;1101 1163 11B0;AE8D;1101 1163 11B0; # (꺍; 꺍; 꺍; 꺍; 꺍; ) HANGUL SYLLABLE GGYALG
+AE8E;AE8E;1101 1163 11B1;AE8E;1101 1163 11B1; # (꺎; 꺎; 꺎; 꺎; 꺎; ) HANGUL SYLLABLE GGYALM
+AE8F;AE8F;1101 1163 11B2;AE8F;1101 1163 11B2; # (꺏; 꺏; 꺏; 꺏; 꺏; ) HANGUL SYLLABLE GGYALB
+AE90;AE90;1101 1163 11B3;AE90;1101 1163 11B3; # (꺐; 꺐; 꺐; 꺐; 꺐; ) HANGUL SYLLABLE GGYALS
+AE91;AE91;1101 1163 11B4;AE91;1101 1163 11B4; # (꺑; 꺑; 꺑; 꺑; 꺑; ) HANGUL SYLLABLE GGYALT
+AE92;AE92;1101 1163 11B5;AE92;1101 1163 11B5; # (꺒; 꺒; 꺒; 꺒; 꺒; ) HANGUL SYLLABLE GGYALP
+AE93;AE93;1101 1163 11B6;AE93;1101 1163 11B6; # (꺓; 꺓; 꺓; 꺓; 꺓; ) HANGUL SYLLABLE GGYALH
+AE94;AE94;1101 1163 11B7;AE94;1101 1163 11B7; # (꺔; 꺔; 꺔; 꺔; 꺔; ) HANGUL SYLLABLE GGYAM
+AE95;AE95;1101 1163 11B8;AE95;1101 1163 11B8; # (꺕; 꺕; 꺕; 꺕; 꺕; ) HANGUL SYLLABLE GGYAB
+AE96;AE96;1101 1163 11B9;AE96;1101 1163 11B9; # (꺖; 꺖; 꺖; 꺖; 꺖; ) HANGUL SYLLABLE GGYABS
+AE97;AE97;1101 1163 11BA;AE97;1101 1163 11BA; # (꺗; 꺗; 꺗; 꺗; 꺗; ) HANGUL SYLLABLE GGYAS
+AE98;AE98;1101 1163 11BB;AE98;1101 1163 11BB; # (꺘; 꺘; 꺘; 꺘; 꺘; ) HANGUL SYLLABLE GGYASS
+AE99;AE99;1101 1163 11BC;AE99;1101 1163 11BC; # (꺙; 꺙; 꺙; 꺙; 꺙; ) HANGUL SYLLABLE GGYANG
+AE9A;AE9A;1101 1163 11BD;AE9A;1101 1163 11BD; # (꺚; 꺚; 꺚; 꺚; 꺚; ) HANGUL SYLLABLE GGYAJ
+AE9B;AE9B;1101 1163 11BE;AE9B;1101 1163 11BE; # (꺛; 꺛; 꺛; 꺛; 꺛; ) HANGUL SYLLABLE GGYAC
+AE9C;AE9C;1101 1163 11BF;AE9C;1101 1163 11BF; # (꺜; 꺜; 꺜; 꺜; 꺜; ) HANGUL SYLLABLE GGYAK
+AE9D;AE9D;1101 1163 11C0;AE9D;1101 1163 11C0; # (꺝; 꺝; 꺝; 꺝; 꺝; ) HANGUL SYLLABLE GGYAT
+AE9E;AE9E;1101 1163 11C1;AE9E;1101 1163 11C1; # (꺞; 꺞; 꺞; 꺞; 꺞; ) HANGUL SYLLABLE GGYAP
+AE9F;AE9F;1101 1163 11C2;AE9F;1101 1163 11C2; # (꺟; 꺟; 꺟; 꺟; 꺟; ) HANGUL SYLLABLE GGYAH
+AEA0;AEA0;1101 1164;AEA0;1101 1164; # (꺠; 꺠; 꺠; 꺠; 꺠; ) HANGUL SYLLABLE GGYAE
+AEA1;AEA1;1101 1164 11A8;AEA1;1101 1164 11A8; # (꺡; 꺡; 꺡; 꺡; 꺡; ) HANGUL SYLLABLE GGYAEG
+AEA2;AEA2;1101 1164 11A9;AEA2;1101 1164 11A9; # (꺢; 꺢; 꺢; 꺢; 꺢; ) HANGUL SYLLABLE GGYAEGG
+AEA3;AEA3;1101 1164 11AA;AEA3;1101 1164 11AA; # (꺣; 꺣; 꺣; 꺣; 꺣; ) HANGUL SYLLABLE GGYAEGS
+AEA4;AEA4;1101 1164 11AB;AEA4;1101 1164 11AB; # (꺤; 꺤; 꺤; 꺤; 꺤; ) HANGUL SYLLABLE GGYAEN
+AEA5;AEA5;1101 1164 11AC;AEA5;1101 1164 11AC; # (꺥; 꺥; 꺥; 꺥; 꺥; ) HANGUL SYLLABLE GGYAENJ
+AEA6;AEA6;1101 1164 11AD;AEA6;1101 1164 11AD; # (꺦; 꺦; 꺦; 꺦; 꺦; ) HANGUL SYLLABLE GGYAENH
+AEA7;AEA7;1101 1164 11AE;AEA7;1101 1164 11AE; # (꺧; 꺧; 꺧; 꺧; 꺧; ) HANGUL SYLLABLE GGYAED
+AEA8;AEA8;1101 1164 11AF;AEA8;1101 1164 11AF; # (꺨; 꺨; 꺨; 꺨; 꺨; ) HANGUL SYLLABLE GGYAEL
+AEA9;AEA9;1101 1164 11B0;AEA9;1101 1164 11B0; # (꺩; 꺩; 꺩; 꺩; 꺩; ) HANGUL SYLLABLE GGYAELG
+AEAA;AEAA;1101 1164 11B1;AEAA;1101 1164 11B1; # (꺪; 꺪; 꺪; 꺪; 꺪; ) HANGUL SYLLABLE GGYAELM
+AEAB;AEAB;1101 1164 11B2;AEAB;1101 1164 11B2; # (꺫; 꺫; 꺫; 꺫; 꺫; ) HANGUL SYLLABLE GGYAELB
+AEAC;AEAC;1101 1164 11B3;AEAC;1101 1164 11B3; # (꺬; 꺬; 꺬; 꺬; 꺬; ) HANGUL SYLLABLE GGYAELS
+AEAD;AEAD;1101 1164 11B4;AEAD;1101 1164 11B4; # (꺭; 꺭; 꺭; 꺭; 꺭; ) HANGUL SYLLABLE GGYAELT
+AEAE;AEAE;1101 1164 11B5;AEAE;1101 1164 11B5; # (꺮; 꺮; 꺮; 꺮; 꺮; ) HANGUL SYLLABLE GGYAELP
+AEAF;AEAF;1101 1164 11B6;AEAF;1101 1164 11B6; # (꺯; 꺯; 꺯; 꺯; 꺯; ) HANGUL SYLLABLE GGYAELH
+AEB0;AEB0;1101 1164 11B7;AEB0;1101 1164 11B7; # (꺰; 꺰; 꺰; 꺰; 꺰; ) HANGUL SYLLABLE GGYAEM
+AEB1;AEB1;1101 1164 11B8;AEB1;1101 1164 11B8; # (꺱; 꺱; 꺱; 꺱; 꺱; ) HANGUL SYLLABLE GGYAEB
+AEB2;AEB2;1101 1164 11B9;AEB2;1101 1164 11B9; # (꺲; 꺲; 꺲; 꺲; 꺲; ) HANGUL SYLLABLE GGYAEBS
+AEB3;AEB3;1101 1164 11BA;AEB3;1101 1164 11BA; # (꺳; 꺳; 꺳; 꺳; 꺳; ) HANGUL SYLLABLE GGYAES
+AEB4;AEB4;1101 1164 11BB;AEB4;1101 1164 11BB; # (꺴; 꺴; 꺴; 꺴; 꺴; ) HANGUL SYLLABLE GGYAESS
+AEB5;AEB5;1101 1164 11BC;AEB5;1101 1164 11BC; # (꺵; 꺵; 꺵; 꺵; 꺵; ) HANGUL SYLLABLE GGYAENG
+AEB6;AEB6;1101 1164 11BD;AEB6;1101 1164 11BD; # (꺶; 꺶; 꺶; 꺶; 꺶; ) HANGUL SYLLABLE GGYAEJ
+AEB7;AEB7;1101 1164 11BE;AEB7;1101 1164 11BE; # (꺷; 꺷; 꺷; 꺷; 꺷; ) HANGUL SYLLABLE GGYAEC
+AEB8;AEB8;1101 1164 11BF;AEB8;1101 1164 11BF; # (꺸; 꺸; 꺸; 꺸; 꺸; ) HANGUL SYLLABLE GGYAEK
+AEB9;AEB9;1101 1164 11C0;AEB9;1101 1164 11C0; # (꺹; 꺹; 꺹; 꺹; 꺹; ) HANGUL SYLLABLE GGYAET
+AEBA;AEBA;1101 1164 11C1;AEBA;1101 1164 11C1; # (꺺; 꺺; 꺺; 꺺; 꺺; ) HANGUL SYLLABLE GGYAEP
+AEBB;AEBB;1101 1164 11C2;AEBB;1101 1164 11C2; # (꺻; 꺻; 꺻; 꺻; 꺻; ) HANGUL SYLLABLE GGYAEH
+AEBC;AEBC;1101 1165;AEBC;1101 1165; # (꺼; 꺼; 꺼; 꺼; 꺼; ) HANGUL SYLLABLE GGEO
+AEBD;AEBD;1101 1165 11A8;AEBD;1101 1165 11A8; # (꺽; 꺽; 꺽; 꺽; 꺽; ) HANGUL SYLLABLE GGEOG
+AEBE;AEBE;1101 1165 11A9;AEBE;1101 1165 11A9; # (꺾; 꺾; 꺾; 꺾; 꺾; ) HANGUL SYLLABLE GGEOGG
+AEBF;AEBF;1101 1165 11AA;AEBF;1101 1165 11AA; # (꺿; 꺿; 꺿; 꺿; 꺿; ) HANGUL SYLLABLE GGEOGS
+AEC0;AEC0;1101 1165 11AB;AEC0;1101 1165 11AB; # (껀; 껀; 껀; 껀; 껀; ) HANGUL SYLLABLE GGEON
+AEC1;AEC1;1101 1165 11AC;AEC1;1101 1165 11AC; # (껁; 껁; 껁; 껁; 껁; ) HANGUL SYLLABLE GGEONJ
+AEC2;AEC2;1101 1165 11AD;AEC2;1101 1165 11AD; # (껂; 껂; 껂; 껂; 껂; ) HANGUL SYLLABLE GGEONH
+AEC3;AEC3;1101 1165 11AE;AEC3;1101 1165 11AE; # (껃; 껃; 껃; 껃; 껃; ) HANGUL SYLLABLE GGEOD
+AEC4;AEC4;1101 1165 11AF;AEC4;1101 1165 11AF; # (껄; 껄; 껄; 껄; 껄; ) HANGUL SYLLABLE GGEOL
+AEC5;AEC5;1101 1165 11B0;AEC5;1101 1165 11B0; # (껅; 껅; 껅; 껅; 껅; ) HANGUL SYLLABLE GGEOLG
+AEC6;AEC6;1101 1165 11B1;AEC6;1101 1165 11B1; # (껆; 껆; 껆; 껆; 껆; ) HANGUL SYLLABLE GGEOLM
+AEC7;AEC7;1101 1165 11B2;AEC7;1101 1165 11B2; # (껇; 껇; 껇; 껇; 껇; ) HANGUL SYLLABLE GGEOLB
+AEC8;AEC8;1101 1165 11B3;AEC8;1101 1165 11B3; # (껈; 껈; 껈; 껈; 껈; ) HANGUL SYLLABLE GGEOLS
+AEC9;AEC9;1101 1165 11B4;AEC9;1101 1165 11B4; # (껉; 껉; 껉; 껉; 껉; ) HANGUL SYLLABLE GGEOLT
+AECA;AECA;1101 1165 11B5;AECA;1101 1165 11B5; # (껊; 껊; 껊; 껊; 껊; ) HANGUL SYLLABLE GGEOLP
+AECB;AECB;1101 1165 11B6;AECB;1101 1165 11B6; # (껋; 껋; 껋; 껋; 껋; ) HANGUL SYLLABLE GGEOLH
+AECC;AECC;1101 1165 11B7;AECC;1101 1165 11B7; # (껌; 껌; 껌; 껌; 껌; ) HANGUL SYLLABLE GGEOM
+AECD;AECD;1101 1165 11B8;AECD;1101 1165 11B8; # (껍; 껍; 껍; 껍; 껍; ) HANGUL SYLLABLE GGEOB
+AECE;AECE;1101 1165 11B9;AECE;1101 1165 11B9; # (껎; 껎; 껎; 껎; 껎; ) HANGUL SYLLABLE GGEOBS
+AECF;AECF;1101 1165 11BA;AECF;1101 1165 11BA; # (껏; 껏; 껏; 껏; 껏; ) HANGUL SYLLABLE GGEOS
+AED0;AED0;1101 1165 11BB;AED0;1101 1165 11BB; # (껐; 껐; 껐; 껐; 껐; ) HANGUL SYLLABLE GGEOSS
+AED1;AED1;1101 1165 11BC;AED1;1101 1165 11BC; # (껑; 껑; 껑; 껑; 껑; ) HANGUL SYLLABLE GGEONG
+AED2;AED2;1101 1165 11BD;AED2;1101 1165 11BD; # (껒; 껒; 껒; 껒; 껒; ) HANGUL SYLLABLE GGEOJ
+AED3;AED3;1101 1165 11BE;AED3;1101 1165 11BE; # (껓; 껓; 껓; 껓; 껓; ) HANGUL SYLLABLE GGEOC
+AED4;AED4;1101 1165 11BF;AED4;1101 1165 11BF; # (껔; 껔; 껔; 껔; 껔; ) HANGUL SYLLABLE GGEOK
+AED5;AED5;1101 1165 11C0;AED5;1101 1165 11C0; # (껕; 껕; 껕; 껕; 껕; ) HANGUL SYLLABLE GGEOT
+AED6;AED6;1101 1165 11C1;AED6;1101 1165 11C1; # (껖; 껖; 껖; 껖; 껖; ) HANGUL SYLLABLE GGEOP
+AED7;AED7;1101 1165 11C2;AED7;1101 1165 11C2; # (껗; 껗; 껗; 껗; 껗; ) HANGUL SYLLABLE GGEOH
+AED8;AED8;1101 1166;AED8;1101 1166; # (께; 께; 께; 께; 께; ) HANGUL SYLLABLE GGE
+AED9;AED9;1101 1166 11A8;AED9;1101 1166 11A8; # (껙; 껙; 껙; 껙; 껙; ) HANGUL SYLLABLE GGEG
+AEDA;AEDA;1101 1166 11A9;AEDA;1101 1166 11A9; # (껚; 껚; 껚; 껚; 껚; ) HANGUL SYLLABLE GGEGG
+AEDB;AEDB;1101 1166 11AA;AEDB;1101 1166 11AA; # (껛; 껛; 껛; 껛; 껛; ) HANGUL SYLLABLE GGEGS
+AEDC;AEDC;1101 1166 11AB;AEDC;1101 1166 11AB; # (껜; 껜; 껜; 껜; 껜; ) HANGUL SYLLABLE GGEN
+AEDD;AEDD;1101 1166 11AC;AEDD;1101 1166 11AC; # (껝; 껝; 껝; 껝; 껝; ) HANGUL SYLLABLE GGENJ
+AEDE;AEDE;1101 1166 11AD;AEDE;1101 1166 11AD; # (껞; 껞; 껞; 껞; 껞; ) HANGUL SYLLABLE GGENH
+AEDF;AEDF;1101 1166 11AE;AEDF;1101 1166 11AE; # (껟; 껟; 껟; 껟; 껟; ) HANGUL SYLLABLE GGED
+AEE0;AEE0;1101 1166 11AF;AEE0;1101 1166 11AF; # (껠; 껠; 껠; 껠; 껠; ) HANGUL SYLLABLE GGEL
+AEE1;AEE1;1101 1166 11B0;AEE1;1101 1166 11B0; # (껡; 껡; 껡; 껡; 껡; ) HANGUL SYLLABLE GGELG
+AEE2;AEE2;1101 1166 11B1;AEE2;1101 1166 11B1; # (껢; 껢; 껢; 껢; 껢; ) HANGUL SYLLABLE GGELM
+AEE3;AEE3;1101 1166 11B2;AEE3;1101 1166 11B2; # (껣; 껣; 껣; 껣; 껣; ) HANGUL SYLLABLE GGELB
+AEE4;AEE4;1101 1166 11B3;AEE4;1101 1166 11B3; # (껤; 껤; 껤; 껤; 껤; ) HANGUL SYLLABLE GGELS
+AEE5;AEE5;1101 1166 11B4;AEE5;1101 1166 11B4; # (껥; 껥; 껥; 껥; 껥; ) HANGUL SYLLABLE GGELT
+AEE6;AEE6;1101 1166 11B5;AEE6;1101 1166 11B5; # (껦; 껦; 껦; 껦; 껦; ) HANGUL SYLLABLE GGELP
+AEE7;AEE7;1101 1166 11B6;AEE7;1101 1166 11B6; # (껧; 껧; 껧; 껧; 껧; ) HANGUL SYLLABLE GGELH
+AEE8;AEE8;1101 1166 11B7;AEE8;1101 1166 11B7; # (껨; 껨; 껨; 껨; 껨; ) HANGUL SYLLABLE GGEM
+AEE9;AEE9;1101 1166 11B8;AEE9;1101 1166 11B8; # (껩; 껩; 껩; 껩; 껩; ) HANGUL SYLLABLE GGEB
+AEEA;AEEA;1101 1166 11B9;AEEA;1101 1166 11B9; # (껪; 껪; 껪; 껪; 껪; ) HANGUL SYLLABLE GGEBS
+AEEB;AEEB;1101 1166 11BA;AEEB;1101 1166 11BA; # (껫; 껫; 껫; 껫; 껫; ) HANGUL SYLLABLE GGES
+AEEC;AEEC;1101 1166 11BB;AEEC;1101 1166 11BB; # (껬; 껬; 껬; 껬; 껬; ) HANGUL SYLLABLE GGESS
+AEED;AEED;1101 1166 11BC;AEED;1101 1166 11BC; # (껭; 껭; 껭; 껭; 껭; ) HANGUL SYLLABLE GGENG
+AEEE;AEEE;1101 1166 11BD;AEEE;1101 1166 11BD; # (껮; 껮; 껮; 껮; 껮; ) HANGUL SYLLABLE GGEJ
+AEEF;AEEF;1101 1166 11BE;AEEF;1101 1166 11BE; # (껯; 껯; 껯; 껯; 껯; ) HANGUL SYLLABLE GGEC
+AEF0;AEF0;1101 1166 11BF;AEF0;1101 1166 11BF; # (껰; 껰; 껰; 껰; 껰; ) HANGUL SYLLABLE GGEK
+AEF1;AEF1;1101 1166 11C0;AEF1;1101 1166 11C0; # (껱; 껱; 껱; 껱; 껱; ) HANGUL SYLLABLE GGET
+AEF2;AEF2;1101 1166 11C1;AEF2;1101 1166 11C1; # (껲; 껲; 껲; 껲; 껲; ) HANGUL SYLLABLE GGEP
+AEF3;AEF3;1101 1166 11C2;AEF3;1101 1166 11C2; # (껳; 껳; 껳; 껳; 껳; ) HANGUL SYLLABLE GGEH
+AEF4;AEF4;1101 1167;AEF4;1101 1167; # (껴; 껴; 껴; 껴; 껴; ) HANGUL SYLLABLE GGYEO
+AEF5;AEF5;1101 1167 11A8;AEF5;1101 1167 11A8; # (껵; 껵; 껵; 껵; 껵; ) HANGUL SYLLABLE GGYEOG
+AEF6;AEF6;1101 1167 11A9;AEF6;1101 1167 11A9; # (껶; 껶; 껶; 껶; 껶; ) HANGUL SYLLABLE GGYEOGG
+AEF7;AEF7;1101 1167 11AA;AEF7;1101 1167 11AA; # (껷; 껷; 껷; 껷; 껷; ) HANGUL SYLLABLE GGYEOGS
+AEF8;AEF8;1101 1167 11AB;AEF8;1101 1167 11AB; # (껸; 껸; 껸; 껸; 껸; ) HANGUL SYLLABLE GGYEON
+AEF9;AEF9;1101 1167 11AC;AEF9;1101 1167 11AC; # (껹; 껹; 껹; 껹; 껹; ) HANGUL SYLLABLE GGYEONJ
+AEFA;AEFA;1101 1167 11AD;AEFA;1101 1167 11AD; # (껺; 껺; 껺; 껺; 껺; ) HANGUL SYLLABLE GGYEONH
+AEFB;AEFB;1101 1167 11AE;AEFB;1101 1167 11AE; # (껻; 껻; 껻; 껻; 껻; ) HANGUL SYLLABLE GGYEOD
+AEFC;AEFC;1101 1167 11AF;AEFC;1101 1167 11AF; # (껼; 껼; 껼; 껼; 껼; ) HANGUL SYLLABLE GGYEOL
+AEFD;AEFD;1101 1167 11B0;AEFD;1101 1167 11B0; # (껽; 껽; 껽; 껽; 껽; ) HANGUL SYLLABLE GGYEOLG
+AEFE;AEFE;1101 1167 11B1;AEFE;1101 1167 11B1; # (껾; 껾; 껾; 껾; 껾; ) HANGUL SYLLABLE GGYEOLM
+AEFF;AEFF;1101 1167 11B2;AEFF;1101 1167 11B2; # (껿; 껿; 껿; 껿; 껿; ) HANGUL SYLLABLE GGYEOLB
+AF00;AF00;1101 1167 11B3;AF00;1101 1167 11B3; # (꼀; 꼀; 꼀; 꼀; 꼀; ) HANGUL SYLLABLE GGYEOLS
+AF01;AF01;1101 1167 11B4;AF01;1101 1167 11B4; # (꼁; 꼁; 꼁; 꼁; 꼁; ) HANGUL SYLLABLE GGYEOLT
+AF02;AF02;1101 1167 11B5;AF02;1101 1167 11B5; # (꼂; 꼂; 꼂; 꼂; 꼂; ) HANGUL SYLLABLE GGYEOLP
+AF03;AF03;1101 1167 11B6;AF03;1101 1167 11B6; # (꼃; 꼃; 꼃; 꼃; 꼃; ) HANGUL SYLLABLE GGYEOLH
+AF04;AF04;1101 1167 11B7;AF04;1101 1167 11B7; # (꼄; 꼄; 꼄; 꼄; 꼄; ) HANGUL SYLLABLE GGYEOM
+AF05;AF05;1101 1167 11B8;AF05;1101 1167 11B8; # (꼅; 꼅; 꼅; 꼅; 꼅; ) HANGUL SYLLABLE GGYEOB
+AF06;AF06;1101 1167 11B9;AF06;1101 1167 11B9; # (꼆; 꼆; 꼆; 꼆; 꼆; ) HANGUL SYLLABLE GGYEOBS
+AF07;AF07;1101 1167 11BA;AF07;1101 1167 11BA; # (꼇; 꼇; 꼇; 꼇; 꼇; ) HANGUL SYLLABLE GGYEOS
+AF08;AF08;1101 1167 11BB;AF08;1101 1167 11BB; # (꼈; 꼈; 꼈; 꼈; 꼈; ) HANGUL SYLLABLE GGYEOSS
+AF09;AF09;1101 1167 11BC;AF09;1101 1167 11BC; # (꼉; 꼉; 꼉; 꼉; 꼉; ) HANGUL SYLLABLE GGYEONG
+AF0A;AF0A;1101 1167 11BD;AF0A;1101 1167 11BD; # (꼊; 꼊; 꼊; 꼊; 꼊; ) HANGUL SYLLABLE GGYEOJ
+AF0B;AF0B;1101 1167 11BE;AF0B;1101 1167 11BE; # (꼋; 꼋; 꼋; 꼋; 꼋; ) HANGUL SYLLABLE GGYEOC
+AF0C;AF0C;1101 1167 11BF;AF0C;1101 1167 11BF; # (꼌; 꼌; 꼌; 꼌; 꼌; ) HANGUL SYLLABLE GGYEOK
+AF0D;AF0D;1101 1167 11C0;AF0D;1101 1167 11C0; # (꼍; 꼍; 꼍; 꼍; 꼍; ) HANGUL SYLLABLE GGYEOT
+AF0E;AF0E;1101 1167 11C1;AF0E;1101 1167 11C1; # (꼎; 꼎; 꼎; 꼎; 꼎; ) HANGUL SYLLABLE GGYEOP
+AF0F;AF0F;1101 1167 11C2;AF0F;1101 1167 11C2; # (꼏; 꼏; 꼏; 꼏; 꼏; ) HANGUL SYLLABLE GGYEOH
+AF10;AF10;1101 1168;AF10;1101 1168; # (꼐; 꼐; 꼐; 꼐; 꼐; ) HANGUL SYLLABLE GGYE
+AF11;AF11;1101 1168 11A8;AF11;1101 1168 11A8; # (꼑; 꼑; 꼑; 꼑; 꼑; ) HANGUL SYLLABLE GGYEG
+AF12;AF12;1101 1168 11A9;AF12;1101 1168 11A9; # (꼒; 꼒; 꼒; 꼒; 꼒; ) HANGUL SYLLABLE GGYEGG
+AF13;AF13;1101 1168 11AA;AF13;1101 1168 11AA; # (꼓; 꼓; 꼓; 꼓; 꼓; ) HANGUL SYLLABLE GGYEGS
+AF14;AF14;1101 1168 11AB;AF14;1101 1168 11AB; # (꼔; 꼔; 꼔; 꼔; 꼔; ) HANGUL SYLLABLE GGYEN
+AF15;AF15;1101 1168 11AC;AF15;1101 1168 11AC; # (꼕; 꼕; 꼕; 꼕; 꼕; ) HANGUL SYLLABLE GGYENJ
+AF16;AF16;1101 1168 11AD;AF16;1101 1168 11AD; # (꼖; 꼖; 꼖; 꼖; 꼖; ) HANGUL SYLLABLE GGYENH
+AF17;AF17;1101 1168 11AE;AF17;1101 1168 11AE; # (꼗; 꼗; 꼗; 꼗; 꼗; ) HANGUL SYLLABLE GGYED
+AF18;AF18;1101 1168 11AF;AF18;1101 1168 11AF; # (꼘; 꼘; 꼘; 꼘; 꼘; ) HANGUL SYLLABLE GGYEL
+AF19;AF19;1101 1168 11B0;AF19;1101 1168 11B0; # (꼙; 꼙; 꼙; 꼙; 꼙; ) HANGUL SYLLABLE GGYELG
+AF1A;AF1A;1101 1168 11B1;AF1A;1101 1168 11B1; # (꼚; 꼚; 꼚; 꼚; 꼚; ) HANGUL SYLLABLE GGYELM
+AF1B;AF1B;1101 1168 11B2;AF1B;1101 1168 11B2; # (꼛; 꼛; 꼛; 꼛; 꼛; ) HANGUL SYLLABLE GGYELB
+AF1C;AF1C;1101 1168 11B3;AF1C;1101 1168 11B3; # (꼜; 꼜; 꼜; 꼜; 꼜; ) HANGUL SYLLABLE GGYELS
+AF1D;AF1D;1101 1168 11B4;AF1D;1101 1168 11B4; # (꼝; 꼝; 꼝; 꼝; 꼝; ) HANGUL SYLLABLE GGYELT
+AF1E;AF1E;1101 1168 11B5;AF1E;1101 1168 11B5; # (꼞; 꼞; 꼞; 꼞; 꼞; ) HANGUL SYLLABLE GGYELP
+AF1F;AF1F;1101 1168 11B6;AF1F;1101 1168 11B6; # (꼟; 꼟; 꼟; 꼟; 꼟; ) HANGUL SYLLABLE GGYELH
+AF20;AF20;1101 1168 11B7;AF20;1101 1168 11B7; # (꼠; 꼠; 꼠; 꼠; 꼠; ) HANGUL SYLLABLE GGYEM
+AF21;AF21;1101 1168 11B8;AF21;1101 1168 11B8; # (꼡; 꼡; 꼡; 꼡; 꼡; ) HANGUL SYLLABLE GGYEB
+AF22;AF22;1101 1168 11B9;AF22;1101 1168 11B9; # (꼢; 꼢; 꼢; 꼢; 꼢; ) HANGUL SYLLABLE GGYEBS
+AF23;AF23;1101 1168 11BA;AF23;1101 1168 11BA; # (꼣; 꼣; 꼣; 꼣; 꼣; ) HANGUL SYLLABLE GGYES
+AF24;AF24;1101 1168 11BB;AF24;1101 1168 11BB; # (꼤; 꼤; 꼤; 꼤; 꼤; ) HANGUL SYLLABLE GGYESS
+AF25;AF25;1101 1168 11BC;AF25;1101 1168 11BC; # (꼥; 꼥; 꼥; 꼥; 꼥; ) HANGUL SYLLABLE GGYENG
+AF26;AF26;1101 1168 11BD;AF26;1101 1168 11BD; # (꼦; 꼦; 꼦; 꼦; 꼦; ) HANGUL SYLLABLE GGYEJ
+AF27;AF27;1101 1168 11BE;AF27;1101 1168 11BE; # (꼧; 꼧; 꼧; 꼧; 꼧; ) HANGUL SYLLABLE GGYEC
+AF28;AF28;1101 1168 11BF;AF28;1101 1168 11BF; # (꼨; 꼨; 꼨; 꼨; 꼨; ) HANGUL SYLLABLE GGYEK
+AF29;AF29;1101 1168 11C0;AF29;1101 1168 11C0; # (꼩; 꼩; 꼩; 꼩; 꼩; ) HANGUL SYLLABLE GGYET
+AF2A;AF2A;1101 1168 11C1;AF2A;1101 1168 11C1; # (꼪; 꼪; 꼪; 꼪; 꼪; ) HANGUL SYLLABLE GGYEP
+AF2B;AF2B;1101 1168 11C2;AF2B;1101 1168 11C2; # (꼫; 꼫; 꼫; 꼫; 꼫; ) HANGUL SYLLABLE GGYEH
+AF2C;AF2C;1101 1169;AF2C;1101 1169; # (꼬; 꼬; 꼬; 꼬; 꼬; ) HANGUL SYLLABLE GGO
+AF2D;AF2D;1101 1169 11A8;AF2D;1101 1169 11A8; # (꼭; 꼭; 꼭; 꼭; 꼭; ) HANGUL SYLLABLE GGOG
+AF2E;AF2E;1101 1169 11A9;AF2E;1101 1169 11A9; # (꼮; 꼮; 꼮; 꼮; 꼮; ) HANGUL SYLLABLE GGOGG
+AF2F;AF2F;1101 1169 11AA;AF2F;1101 1169 11AA; # (꼯; 꼯; 꼯; 꼯; 꼯; ) HANGUL SYLLABLE GGOGS
+AF30;AF30;1101 1169 11AB;AF30;1101 1169 11AB; # (꼰; 꼰; 꼰; 꼰; 꼰; ) HANGUL SYLLABLE GGON
+AF31;AF31;1101 1169 11AC;AF31;1101 1169 11AC; # (꼱; 꼱; 꼱; 꼱; 꼱; ) HANGUL SYLLABLE GGONJ
+AF32;AF32;1101 1169 11AD;AF32;1101 1169 11AD; # (꼲; 꼲; 꼲; 꼲; 꼲; ) HANGUL SYLLABLE GGONH
+AF33;AF33;1101 1169 11AE;AF33;1101 1169 11AE; # (꼳; 꼳; 꼳; 꼳; 꼳; ) HANGUL SYLLABLE GGOD
+AF34;AF34;1101 1169 11AF;AF34;1101 1169 11AF; # (꼴; 꼴; 꼴; 꼴; 꼴; ) HANGUL SYLLABLE GGOL
+AF35;AF35;1101 1169 11B0;AF35;1101 1169 11B0; # (꼵; 꼵; 꼵; 꼵; 꼵; ) HANGUL SYLLABLE GGOLG
+AF36;AF36;1101 1169 11B1;AF36;1101 1169 11B1; # (꼶; 꼶; 꼶; 꼶; 꼶; ) HANGUL SYLLABLE GGOLM
+AF37;AF37;1101 1169 11B2;AF37;1101 1169 11B2; # (꼷; 꼷; 꼷; 꼷; 꼷; ) HANGUL SYLLABLE GGOLB
+AF38;AF38;1101 1169 11B3;AF38;1101 1169 11B3; # (꼸; 꼸; 꼸; 꼸; 꼸; ) HANGUL SYLLABLE GGOLS
+AF39;AF39;1101 1169 11B4;AF39;1101 1169 11B4; # (꼹; 꼹; 꼹; 꼹; 꼹; ) HANGUL SYLLABLE GGOLT
+AF3A;AF3A;1101 1169 11B5;AF3A;1101 1169 11B5; # (꼺; 꼺; 꼺; 꼺; 꼺; ) HANGUL SYLLABLE GGOLP
+AF3B;AF3B;1101 1169 11B6;AF3B;1101 1169 11B6; # (꼻; 꼻; 꼻; 꼻; 꼻; ) HANGUL SYLLABLE GGOLH
+AF3C;AF3C;1101 1169 11B7;AF3C;1101 1169 11B7; # (꼼; 꼼; 꼼; 꼼; 꼼; ) HANGUL SYLLABLE GGOM
+AF3D;AF3D;1101 1169 11B8;AF3D;1101 1169 11B8; # (꼽; 꼽; 꼽; 꼽; 꼽; ) HANGUL SYLLABLE GGOB
+AF3E;AF3E;1101 1169 11B9;AF3E;1101 1169 11B9; # (꼾; 꼾; 꼾; 꼾; 꼾; ) HANGUL SYLLABLE GGOBS
+AF3F;AF3F;1101 1169 11BA;AF3F;1101 1169 11BA; # (꼿; 꼿; 꼿; 꼿; 꼿; ) HANGUL SYLLABLE GGOS
+AF40;AF40;1101 1169 11BB;AF40;1101 1169 11BB; # (꽀; 꽀; 꽀; 꽀; 꽀; ) HANGUL SYLLABLE GGOSS
+AF41;AF41;1101 1169 11BC;AF41;1101 1169 11BC; # (꽁; 꽁; 꽁; 꽁; 꽁; ) HANGUL SYLLABLE GGONG
+AF42;AF42;1101 1169 11BD;AF42;1101 1169 11BD; # (꽂; 꽂; 꽂; 꽂; 꽂; ) HANGUL SYLLABLE GGOJ
+AF43;AF43;1101 1169 11BE;AF43;1101 1169 11BE; # (꽃; 꽃; 꽃; 꽃; 꽃; ) HANGUL SYLLABLE GGOC
+AF44;AF44;1101 1169 11BF;AF44;1101 1169 11BF; # (꽄; 꽄; 꽄; 꽄; 꽄; ) HANGUL SYLLABLE GGOK
+AF45;AF45;1101 1169 11C0;AF45;1101 1169 11C0; # (꽅; 꽅; 꽅; 꽅; 꽅; ) HANGUL SYLLABLE GGOT
+AF46;AF46;1101 1169 11C1;AF46;1101 1169 11C1; # (꽆; 꽆; 꽆; 꽆; 꽆; ) HANGUL SYLLABLE GGOP
+AF47;AF47;1101 1169 11C2;AF47;1101 1169 11C2; # (꽇; 꽇; 꽇; 꽇; 꽇; ) HANGUL SYLLABLE GGOH
+AF48;AF48;1101 116A;AF48;1101 116A; # (꽈; 꽈; 꽈; 꽈; 꽈; ) HANGUL SYLLABLE GGWA
+AF49;AF49;1101 116A 11A8;AF49;1101 116A 11A8; # (꽉; 꽉; 꽉; 꽉; 꽉; ) HANGUL SYLLABLE GGWAG
+AF4A;AF4A;1101 116A 11A9;AF4A;1101 116A 11A9; # (꽊; 꽊; 꽊; 꽊; 꽊; ) HANGUL SYLLABLE GGWAGG
+AF4B;AF4B;1101 116A 11AA;AF4B;1101 116A 11AA; # (꽋; 꽋; 꽋; 꽋; 꽋; ) HANGUL SYLLABLE GGWAGS
+AF4C;AF4C;1101 116A 11AB;AF4C;1101 116A 11AB; # (꽌; 꽌; 꽌; 꽌; 꽌; ) HANGUL SYLLABLE GGWAN
+AF4D;AF4D;1101 116A 11AC;AF4D;1101 116A 11AC; # (꽍; 꽍; 꽍; 꽍; 꽍; ) HANGUL SYLLABLE GGWANJ
+AF4E;AF4E;1101 116A 11AD;AF4E;1101 116A 11AD; # (꽎; 꽎; 꽎; 꽎; 꽎; ) HANGUL SYLLABLE GGWANH
+AF4F;AF4F;1101 116A 11AE;AF4F;1101 116A 11AE; # (꽏; 꽏; 꽏; 꽏; 꽏; ) HANGUL SYLLABLE GGWAD
+AF50;AF50;1101 116A 11AF;AF50;1101 116A 11AF; # (꽐; 꽐; 꽐; 꽐; 꽐; ) HANGUL SYLLABLE GGWAL
+AF51;AF51;1101 116A 11B0;AF51;1101 116A 11B0; # (꽑; 꽑; 꽑; 꽑; 꽑; ) HANGUL SYLLABLE GGWALG
+AF52;AF52;1101 116A 11B1;AF52;1101 116A 11B1; # (꽒; 꽒; 꽒; 꽒; 꽒; ) HANGUL SYLLABLE GGWALM
+AF53;AF53;1101 116A 11B2;AF53;1101 116A 11B2; # (꽓; 꽓; 꽓; 꽓; 꽓; ) HANGUL SYLLABLE GGWALB
+AF54;AF54;1101 116A 11B3;AF54;1101 116A 11B3; # (꽔; 꽔; 꽔; 꽔; 꽔; ) HANGUL SYLLABLE GGWALS
+AF55;AF55;1101 116A 11B4;AF55;1101 116A 11B4; # (꽕; 꽕; 꽕; 꽕; 꽕; ) HANGUL SYLLABLE GGWALT
+AF56;AF56;1101 116A 11B5;AF56;1101 116A 11B5; # (꽖; 꽖; 꽖; 꽖; 꽖; ) HANGUL SYLLABLE GGWALP
+AF57;AF57;1101 116A 11B6;AF57;1101 116A 11B6; # (꽗; 꽗; 꽗; 꽗; 꽗; ) HANGUL SYLLABLE GGWALH
+AF58;AF58;1101 116A 11B7;AF58;1101 116A 11B7; # (꽘; 꽘; 꽘; 꽘; 꽘; ) HANGUL SYLLABLE GGWAM
+AF59;AF59;1101 116A 11B8;AF59;1101 116A 11B8; # (꽙; 꽙; 꽙; 꽙; 꽙; ) HANGUL SYLLABLE GGWAB
+AF5A;AF5A;1101 116A 11B9;AF5A;1101 116A 11B9; # (꽚; 꽚; 꽚; 꽚; 꽚; ) HANGUL SYLLABLE GGWABS
+AF5B;AF5B;1101 116A 11BA;AF5B;1101 116A 11BA; # (꽛; 꽛; 꽛; 꽛; 꽛; ) HANGUL SYLLABLE GGWAS
+AF5C;AF5C;1101 116A 11BB;AF5C;1101 116A 11BB; # (꽜; 꽜; 꽜; 꽜; 꽜; ) HANGUL SYLLABLE GGWASS
+AF5D;AF5D;1101 116A 11BC;AF5D;1101 116A 11BC; # (꽝; 꽝; 꽝; 꽝; 꽝; ) HANGUL SYLLABLE GGWANG
+AF5E;AF5E;1101 116A 11BD;AF5E;1101 116A 11BD; # (꽞; 꽞; 꽞; 꽞; 꽞; ) HANGUL SYLLABLE GGWAJ
+AF5F;AF5F;1101 116A 11BE;AF5F;1101 116A 11BE; # (꽟; 꽟; 꽟; 꽟; 꽟; ) HANGUL SYLLABLE GGWAC
+AF60;AF60;1101 116A 11BF;AF60;1101 116A 11BF; # (꽠; 꽠; 꽠; 꽠; 꽠; ) HANGUL SYLLABLE GGWAK
+AF61;AF61;1101 116A 11C0;AF61;1101 116A 11C0; # (꽡; 꽡; 꽡; 꽡; 꽡; ) HANGUL SYLLABLE GGWAT
+AF62;AF62;1101 116A 11C1;AF62;1101 116A 11C1; # (꽢; 꽢; 꽢; 꽢; 꽢; ) HANGUL SYLLABLE GGWAP
+AF63;AF63;1101 116A 11C2;AF63;1101 116A 11C2; # (꽣; 꽣; 꽣; 꽣; 꽣; ) HANGUL SYLLABLE GGWAH
+AF64;AF64;1101 116B;AF64;1101 116B; # (꽤; 꽤; 꽤; 꽤; 꽤; ) HANGUL SYLLABLE GGWAE
+AF65;AF65;1101 116B 11A8;AF65;1101 116B 11A8; # (꽥; 꽥; 꽥; 꽥; 꽥; ) HANGUL SYLLABLE GGWAEG
+AF66;AF66;1101 116B 11A9;AF66;1101 116B 11A9; # (꽦; 꽦; 꽦; 꽦; 꽦; ) HANGUL SYLLABLE GGWAEGG
+AF67;AF67;1101 116B 11AA;AF67;1101 116B 11AA; # (꽧; 꽧; 꽧; 꽧; 꽧; ) HANGUL SYLLABLE GGWAEGS
+AF68;AF68;1101 116B 11AB;AF68;1101 116B 11AB; # (꽨; 꽨; 꽨; 꽨; 꽨; ) HANGUL SYLLABLE GGWAEN
+AF69;AF69;1101 116B 11AC;AF69;1101 116B 11AC; # (꽩; 꽩; 꽩; 꽩; 꽩; ) HANGUL SYLLABLE GGWAENJ
+AF6A;AF6A;1101 116B 11AD;AF6A;1101 116B 11AD; # (꽪; 꽪; 꽪; 꽪; 꽪; ) HANGUL SYLLABLE GGWAENH
+AF6B;AF6B;1101 116B 11AE;AF6B;1101 116B 11AE; # (꽫; 꽫; 꽫; 꽫; 꽫; ) HANGUL SYLLABLE GGWAED
+AF6C;AF6C;1101 116B 11AF;AF6C;1101 116B 11AF; # (꽬; 꽬; 꽬; 꽬; 꽬; ) HANGUL SYLLABLE GGWAEL
+AF6D;AF6D;1101 116B 11B0;AF6D;1101 116B 11B0; # (꽭; 꽭; 꽭; 꽭; 꽭; ) HANGUL SYLLABLE GGWAELG
+AF6E;AF6E;1101 116B 11B1;AF6E;1101 116B 11B1; # (꽮; 꽮; 꽮; 꽮; 꽮; ) HANGUL SYLLABLE GGWAELM
+AF6F;AF6F;1101 116B 11B2;AF6F;1101 116B 11B2; # (꽯; 꽯; 꽯; 꽯; 꽯; ) HANGUL SYLLABLE GGWAELB
+AF70;AF70;1101 116B 11B3;AF70;1101 116B 11B3; # (꽰; 꽰; 꽰; 꽰; 꽰; ) HANGUL SYLLABLE GGWAELS
+AF71;AF71;1101 116B 11B4;AF71;1101 116B 11B4; # (꽱; 꽱; 꽱; 꽱; 꽱; ) HANGUL SYLLABLE GGWAELT
+AF72;AF72;1101 116B 11B5;AF72;1101 116B 11B5; # (꽲; 꽲; 꽲; 꽲; 꽲; ) HANGUL SYLLABLE GGWAELP
+AF73;AF73;1101 116B 11B6;AF73;1101 116B 11B6; # (꽳; 꽳; 꽳; 꽳; 꽳; ) HANGUL SYLLABLE GGWAELH
+AF74;AF74;1101 116B 11B7;AF74;1101 116B 11B7; # (꽴; 꽴; 꽴; 꽴; 꽴; ) HANGUL SYLLABLE GGWAEM
+AF75;AF75;1101 116B 11B8;AF75;1101 116B 11B8; # (꽵; 꽵; 꽵; 꽵; 꽵; ) HANGUL SYLLABLE GGWAEB
+AF76;AF76;1101 116B 11B9;AF76;1101 116B 11B9; # (꽶; 꽶; 꽶; 꽶; 꽶; ) HANGUL SYLLABLE GGWAEBS
+AF77;AF77;1101 116B 11BA;AF77;1101 116B 11BA; # (꽷; 꽷; 꽷; 꽷; 꽷; ) HANGUL SYLLABLE GGWAES
+AF78;AF78;1101 116B 11BB;AF78;1101 116B 11BB; # (꽸; 꽸; 꽸; 꽸; 꽸; ) HANGUL SYLLABLE GGWAESS
+AF79;AF79;1101 116B 11BC;AF79;1101 116B 11BC; # (꽹; 꽹; 꽹; 꽹; 꽹; ) HANGUL SYLLABLE GGWAENG
+AF7A;AF7A;1101 116B 11BD;AF7A;1101 116B 11BD; # (꽺; 꽺; 꽺; 꽺; 꽺; ) HANGUL SYLLABLE GGWAEJ
+AF7B;AF7B;1101 116B 11BE;AF7B;1101 116B 11BE; # (꽻; 꽻; 꽻; 꽻; 꽻; ) HANGUL SYLLABLE GGWAEC
+AF7C;AF7C;1101 116B 11BF;AF7C;1101 116B 11BF; # (꽼; 꽼; 꽼; 꽼; 꽼; ) HANGUL SYLLABLE GGWAEK
+AF7D;AF7D;1101 116B 11C0;AF7D;1101 116B 11C0; # (꽽; 꽽; 꽽; 꽽; 꽽; ) HANGUL SYLLABLE GGWAET
+AF7E;AF7E;1101 116B 11C1;AF7E;1101 116B 11C1; # (꽾; 꽾; 꽾; 꽾; 꽾; ) HANGUL SYLLABLE GGWAEP
+AF7F;AF7F;1101 116B 11C2;AF7F;1101 116B 11C2; # (꽿; 꽿; 꽿; 꽿; 꽿; ) HANGUL SYLLABLE GGWAEH
+AF80;AF80;1101 116C;AF80;1101 116C; # (꾀; 꾀; 꾀; 꾀; 꾀; ) HANGUL SYLLABLE GGOE
+AF81;AF81;1101 116C 11A8;AF81;1101 116C 11A8; # (꾁; 꾁; 꾁; 꾁; 꾁; ) HANGUL SYLLABLE GGOEG
+AF82;AF82;1101 116C 11A9;AF82;1101 116C 11A9; # (꾂; 꾂; 꾂; 꾂; 꾂; ) HANGUL SYLLABLE GGOEGG
+AF83;AF83;1101 116C 11AA;AF83;1101 116C 11AA; # (꾃; 꾃; 꾃; 꾃; 꾃; ) HANGUL SYLLABLE GGOEGS
+AF84;AF84;1101 116C 11AB;AF84;1101 116C 11AB; # (꾄; 꾄; 꾄; 꾄; 꾄; ) HANGUL SYLLABLE GGOEN
+AF85;AF85;1101 116C 11AC;AF85;1101 116C 11AC; # (꾅; 꾅; 꾅; 꾅; 꾅; ) HANGUL SYLLABLE GGOENJ
+AF86;AF86;1101 116C 11AD;AF86;1101 116C 11AD; # (꾆; 꾆; 꾆; 꾆; 꾆; ) HANGUL SYLLABLE GGOENH
+AF87;AF87;1101 116C 11AE;AF87;1101 116C 11AE; # (꾇; 꾇; 꾇; 꾇; 꾇; ) HANGUL SYLLABLE GGOED
+AF88;AF88;1101 116C 11AF;AF88;1101 116C 11AF; # (꾈; 꾈; 꾈; 꾈; 꾈; ) HANGUL SYLLABLE GGOEL
+AF89;AF89;1101 116C 11B0;AF89;1101 116C 11B0; # (꾉; 꾉; 꾉; 꾉; 꾉; ) HANGUL SYLLABLE GGOELG
+AF8A;AF8A;1101 116C 11B1;AF8A;1101 116C 11B1; # (꾊; 꾊; 꾊; 꾊; 꾊; ) HANGUL SYLLABLE GGOELM
+AF8B;AF8B;1101 116C 11B2;AF8B;1101 116C 11B2; # (꾋; 꾋; 꾋; 꾋; 꾋; ) HANGUL SYLLABLE GGOELB
+AF8C;AF8C;1101 116C 11B3;AF8C;1101 116C 11B3; # (꾌; 꾌; 꾌; 꾌; 꾌; ) HANGUL SYLLABLE GGOELS
+AF8D;AF8D;1101 116C 11B4;AF8D;1101 116C 11B4; # (꾍; 꾍; 꾍; 꾍; 꾍; ) HANGUL SYLLABLE GGOELT
+AF8E;AF8E;1101 116C 11B5;AF8E;1101 116C 11B5; # (꾎; 꾎; 꾎; 꾎; 꾎; ) HANGUL SYLLABLE GGOELP
+AF8F;AF8F;1101 116C 11B6;AF8F;1101 116C 11B6; # (꾏; 꾏; 꾏; 꾏; 꾏; ) HANGUL SYLLABLE GGOELH
+AF90;AF90;1101 116C 11B7;AF90;1101 116C 11B7; # (꾐; 꾐; 꾐; 꾐; 꾐; ) HANGUL SYLLABLE GGOEM
+AF91;AF91;1101 116C 11B8;AF91;1101 116C 11B8; # (꾑; 꾑; 꾑; 꾑; 꾑; ) HANGUL SYLLABLE GGOEB
+AF92;AF92;1101 116C 11B9;AF92;1101 116C 11B9; # (꾒; 꾒; 꾒; 꾒; 꾒; ) HANGUL SYLLABLE GGOEBS
+AF93;AF93;1101 116C 11BA;AF93;1101 116C 11BA; # (꾓; 꾓; 꾓; 꾓; 꾓; ) HANGUL SYLLABLE GGOES
+AF94;AF94;1101 116C 11BB;AF94;1101 116C 11BB; # (꾔; 꾔; 꾔; 꾔; 꾔; ) HANGUL SYLLABLE GGOESS
+AF95;AF95;1101 116C 11BC;AF95;1101 116C 11BC; # (꾕; 꾕; 꾕; 꾕; 꾕; ) HANGUL SYLLABLE GGOENG
+AF96;AF96;1101 116C 11BD;AF96;1101 116C 11BD; # (꾖; 꾖; 꾖; 꾖; 꾖; ) HANGUL SYLLABLE GGOEJ
+AF97;AF97;1101 116C 11BE;AF97;1101 116C 11BE; # (꾗; 꾗; 꾗; 꾗; 꾗; ) HANGUL SYLLABLE GGOEC
+AF98;AF98;1101 116C 11BF;AF98;1101 116C 11BF; # (꾘; 꾘; 꾘; 꾘; 꾘; ) HANGUL SYLLABLE GGOEK
+AF99;AF99;1101 116C 11C0;AF99;1101 116C 11C0; # (꾙; 꾙; 꾙; 꾙; 꾙; ) HANGUL SYLLABLE GGOET
+AF9A;AF9A;1101 116C 11C1;AF9A;1101 116C 11C1; # (꾚; 꾚; 꾚; 꾚; 꾚; ) HANGUL SYLLABLE GGOEP
+AF9B;AF9B;1101 116C 11C2;AF9B;1101 116C 11C2; # (꾛; 꾛; 꾛; 꾛; 꾛; ) HANGUL SYLLABLE GGOEH
+AF9C;AF9C;1101 116D;AF9C;1101 116D; # (꾜; 꾜; 꾜; 꾜; 꾜; ) HANGUL SYLLABLE GGYO
+AF9D;AF9D;1101 116D 11A8;AF9D;1101 116D 11A8; # (꾝; 꾝; 꾝; 꾝; 꾝; ) HANGUL SYLLABLE GGYOG
+AF9E;AF9E;1101 116D 11A9;AF9E;1101 116D 11A9; # (꾞; 꾞; 꾞; 꾞; 꾞; ) HANGUL SYLLABLE GGYOGG
+AF9F;AF9F;1101 116D 11AA;AF9F;1101 116D 11AA; # (꾟; 꾟; 꾟; 꾟; 꾟; ) HANGUL SYLLABLE GGYOGS
+AFA0;AFA0;1101 116D 11AB;AFA0;1101 116D 11AB; # (꾠; 꾠; 꾠; 꾠; 꾠; ) HANGUL SYLLABLE GGYON
+AFA1;AFA1;1101 116D 11AC;AFA1;1101 116D 11AC; # (꾡; 꾡; 꾡; 꾡; 꾡; ) HANGUL SYLLABLE GGYONJ
+AFA2;AFA2;1101 116D 11AD;AFA2;1101 116D 11AD; # (꾢; 꾢; 꾢; 꾢; 꾢; ) HANGUL SYLLABLE GGYONH
+AFA3;AFA3;1101 116D 11AE;AFA3;1101 116D 11AE; # (꾣; 꾣; 꾣; 꾣; 꾣; ) HANGUL SYLLABLE GGYOD
+AFA4;AFA4;1101 116D 11AF;AFA4;1101 116D 11AF; # (꾤; 꾤; 꾤; 꾤; 꾤; ) HANGUL SYLLABLE GGYOL
+AFA5;AFA5;1101 116D 11B0;AFA5;1101 116D 11B0; # (꾥; 꾥; 꾥; 꾥; 꾥; ) HANGUL SYLLABLE GGYOLG
+AFA6;AFA6;1101 116D 11B1;AFA6;1101 116D 11B1; # (꾦; 꾦; 꾦; 꾦; 꾦; ) HANGUL SYLLABLE GGYOLM
+AFA7;AFA7;1101 116D 11B2;AFA7;1101 116D 11B2; # (꾧; 꾧; 꾧; 꾧; 꾧; ) HANGUL SYLLABLE GGYOLB
+AFA8;AFA8;1101 116D 11B3;AFA8;1101 116D 11B3; # (꾨; 꾨; 꾨; 꾨; 꾨; ) HANGUL SYLLABLE GGYOLS
+AFA9;AFA9;1101 116D 11B4;AFA9;1101 116D 11B4; # (꾩; 꾩; 꾩; 꾩; 꾩; ) HANGUL SYLLABLE GGYOLT
+AFAA;AFAA;1101 116D 11B5;AFAA;1101 116D 11B5; # (꾪; 꾪; 꾪; 꾪; 꾪; ) HANGUL SYLLABLE GGYOLP
+AFAB;AFAB;1101 116D 11B6;AFAB;1101 116D 11B6; # (꾫; 꾫; 꾫; 꾫; 꾫; ) HANGUL SYLLABLE GGYOLH
+AFAC;AFAC;1101 116D 11B7;AFAC;1101 116D 11B7; # (꾬; 꾬; 꾬; 꾬; 꾬; ) HANGUL SYLLABLE GGYOM
+AFAD;AFAD;1101 116D 11B8;AFAD;1101 116D 11B8; # (꾭; 꾭; 꾭; 꾭; 꾭; ) HANGUL SYLLABLE GGYOB
+AFAE;AFAE;1101 116D 11B9;AFAE;1101 116D 11B9; # (꾮; 꾮; 꾮; 꾮; 꾮; ) HANGUL SYLLABLE GGYOBS
+AFAF;AFAF;1101 116D 11BA;AFAF;1101 116D 11BA; # (꾯; 꾯; 꾯; 꾯; 꾯; ) HANGUL SYLLABLE GGYOS
+AFB0;AFB0;1101 116D 11BB;AFB0;1101 116D 11BB; # (꾰; 꾰; 꾰; 꾰; 꾰; ) HANGUL SYLLABLE GGYOSS
+AFB1;AFB1;1101 116D 11BC;AFB1;1101 116D 11BC; # (꾱; 꾱; 꾱; 꾱; 꾱; ) HANGUL SYLLABLE GGYONG
+AFB2;AFB2;1101 116D 11BD;AFB2;1101 116D 11BD; # (꾲; 꾲; 꾲; 꾲; 꾲; ) HANGUL SYLLABLE GGYOJ
+AFB3;AFB3;1101 116D 11BE;AFB3;1101 116D 11BE; # (꾳; 꾳; 꾳; 꾳; 꾳; ) HANGUL SYLLABLE GGYOC
+AFB4;AFB4;1101 116D 11BF;AFB4;1101 116D 11BF; # (꾴; 꾴; 꾴; 꾴; 꾴; ) HANGUL SYLLABLE GGYOK
+AFB5;AFB5;1101 116D 11C0;AFB5;1101 116D 11C0; # (꾵; 꾵; 꾵; 꾵; 꾵; ) HANGUL SYLLABLE GGYOT
+AFB6;AFB6;1101 116D 11C1;AFB6;1101 116D 11C1; # (꾶; 꾶; 꾶; 꾶; 꾶; ) HANGUL SYLLABLE GGYOP
+AFB7;AFB7;1101 116D 11C2;AFB7;1101 116D 11C2; # (꾷; 꾷; 꾷; 꾷; 꾷; ) HANGUL SYLLABLE GGYOH
+AFB8;AFB8;1101 116E;AFB8;1101 116E; # (꾸; 꾸; 꾸; 꾸; 꾸; ) HANGUL SYLLABLE GGU
+AFB9;AFB9;1101 116E 11A8;AFB9;1101 116E 11A8; # (꾹; 꾹; 꾹; 꾹; 꾹; ) HANGUL SYLLABLE GGUG
+AFBA;AFBA;1101 116E 11A9;AFBA;1101 116E 11A9; # (꾺; 꾺; 꾺; 꾺; 꾺; ) HANGUL SYLLABLE GGUGG
+AFBB;AFBB;1101 116E 11AA;AFBB;1101 116E 11AA; # (꾻; 꾻; 꾻; 꾻; 꾻; ) HANGUL SYLLABLE GGUGS
+AFBC;AFBC;1101 116E 11AB;AFBC;1101 116E 11AB; # (꾼; 꾼; 꾼; 꾼; 꾼; ) HANGUL SYLLABLE GGUN
+AFBD;AFBD;1101 116E 11AC;AFBD;1101 116E 11AC; # (꾽; 꾽; 꾽; 꾽; 꾽; ) HANGUL SYLLABLE GGUNJ
+AFBE;AFBE;1101 116E 11AD;AFBE;1101 116E 11AD; # (꾾; 꾾; 꾾; 꾾; 꾾; ) HANGUL SYLLABLE GGUNH
+AFBF;AFBF;1101 116E 11AE;AFBF;1101 116E 11AE; # (꾿; 꾿; 꾿; 꾿; 꾿; ) HANGUL SYLLABLE GGUD
+AFC0;AFC0;1101 116E 11AF;AFC0;1101 116E 11AF; # (꿀; 꿀; 꿀; 꿀; 꿀; ) HANGUL SYLLABLE GGUL
+AFC1;AFC1;1101 116E 11B0;AFC1;1101 116E 11B0; # (꿁; 꿁; 꿁; 꿁; 꿁; ) HANGUL SYLLABLE GGULG
+AFC2;AFC2;1101 116E 11B1;AFC2;1101 116E 11B1; # (꿂; 꿂; 꿂; 꿂; 꿂; ) HANGUL SYLLABLE GGULM
+AFC3;AFC3;1101 116E 11B2;AFC3;1101 116E 11B2; # (꿃; 꿃; 꿃; 꿃; 꿃; ) HANGUL SYLLABLE GGULB
+AFC4;AFC4;1101 116E 11B3;AFC4;1101 116E 11B3; # (꿄; 꿄; 꿄; 꿄; 꿄; ) HANGUL SYLLABLE GGULS
+AFC5;AFC5;1101 116E 11B4;AFC5;1101 116E 11B4; # (꿅; 꿅; 꿅; 꿅; 꿅; ) HANGUL SYLLABLE GGULT
+AFC6;AFC6;1101 116E 11B5;AFC6;1101 116E 11B5; # (꿆; 꿆; 꿆; 꿆; 꿆; ) HANGUL SYLLABLE GGULP
+AFC7;AFC7;1101 116E 11B6;AFC7;1101 116E 11B6; # (꿇; 꿇; 꿇; 꿇; 꿇; ) HANGUL SYLLABLE GGULH
+AFC8;AFC8;1101 116E 11B7;AFC8;1101 116E 11B7; # (꿈; 꿈; 꿈; 꿈; 꿈; ) HANGUL SYLLABLE GGUM
+AFC9;AFC9;1101 116E 11B8;AFC9;1101 116E 11B8; # (꿉; 꿉; 꿉; 꿉; 꿉; ) HANGUL SYLLABLE GGUB
+AFCA;AFCA;1101 116E 11B9;AFCA;1101 116E 11B9; # (꿊; 꿊; 꿊; 꿊; 꿊; ) HANGUL SYLLABLE GGUBS
+AFCB;AFCB;1101 116E 11BA;AFCB;1101 116E 11BA; # (꿋; 꿋; 꿋; 꿋; 꿋; ) HANGUL SYLLABLE GGUS
+AFCC;AFCC;1101 116E 11BB;AFCC;1101 116E 11BB; # (꿌; 꿌; 꿌; 꿌; 꿌; ) HANGUL SYLLABLE GGUSS
+AFCD;AFCD;1101 116E 11BC;AFCD;1101 116E 11BC; # (꿍; 꿍; 꿍; 꿍; 꿍; ) HANGUL SYLLABLE GGUNG
+AFCE;AFCE;1101 116E 11BD;AFCE;1101 116E 11BD; # (꿎; 꿎; 꿎; 꿎; 꿎; ) HANGUL SYLLABLE GGUJ
+AFCF;AFCF;1101 116E 11BE;AFCF;1101 116E 11BE; # (꿏; 꿏; 꿏; 꿏; 꿏; ) HANGUL SYLLABLE GGUC
+AFD0;AFD0;1101 116E 11BF;AFD0;1101 116E 11BF; # (꿐; 꿐; 꿐; 꿐; 꿐; ) HANGUL SYLLABLE GGUK
+AFD1;AFD1;1101 116E 11C0;AFD1;1101 116E 11C0; # (꿑; 꿑; 꿑; 꿑; 꿑; ) HANGUL SYLLABLE GGUT
+AFD2;AFD2;1101 116E 11C1;AFD2;1101 116E 11C1; # (꿒; 꿒; 꿒; 꿒; 꿒; ) HANGUL SYLLABLE GGUP
+AFD3;AFD3;1101 116E 11C2;AFD3;1101 116E 11C2; # (꿓; 꿓; 꿓; 꿓; 꿓; ) HANGUL SYLLABLE GGUH
+AFD4;AFD4;1101 116F;AFD4;1101 116F; # (꿔; 꿔; 꿔; 꿔; 꿔; ) HANGUL SYLLABLE GGWEO
+AFD5;AFD5;1101 116F 11A8;AFD5;1101 116F 11A8; # (꿕; 꿕; 꿕; 꿕; 꿕; ) HANGUL SYLLABLE GGWEOG
+AFD6;AFD6;1101 116F 11A9;AFD6;1101 116F 11A9; # (꿖; 꿖; 꿖; 꿖; 꿖; ) HANGUL SYLLABLE GGWEOGG
+AFD7;AFD7;1101 116F 11AA;AFD7;1101 116F 11AA; # (꿗; 꿗; 꿗; 꿗; 꿗; ) HANGUL SYLLABLE GGWEOGS
+AFD8;AFD8;1101 116F 11AB;AFD8;1101 116F 11AB; # (꿘; 꿘; 꿘; 꿘; 꿘; ) HANGUL SYLLABLE GGWEON
+AFD9;AFD9;1101 116F 11AC;AFD9;1101 116F 11AC; # (꿙; 꿙; 꿙; 꿙; 꿙; ) HANGUL SYLLABLE GGWEONJ
+AFDA;AFDA;1101 116F 11AD;AFDA;1101 116F 11AD; # (꿚; 꿚; 꿚; 꿚; 꿚; ) HANGUL SYLLABLE GGWEONH
+AFDB;AFDB;1101 116F 11AE;AFDB;1101 116F 11AE; # (꿛; 꿛; 꿛; 꿛; 꿛; ) HANGUL SYLLABLE GGWEOD
+AFDC;AFDC;1101 116F 11AF;AFDC;1101 116F 11AF; # (꿜; 꿜; 꿜; 꿜; 꿜; ) HANGUL SYLLABLE GGWEOL
+AFDD;AFDD;1101 116F 11B0;AFDD;1101 116F 11B0; # (꿝; 꿝; 꿝; 꿝; 꿝; ) HANGUL SYLLABLE GGWEOLG
+AFDE;AFDE;1101 116F 11B1;AFDE;1101 116F 11B1; # (꿞; 꿞; 꿞; 꿞; 꿞; ) HANGUL SYLLABLE GGWEOLM
+AFDF;AFDF;1101 116F 11B2;AFDF;1101 116F 11B2; # (꿟; 꿟; 꿟; 꿟; 꿟; ) HANGUL SYLLABLE GGWEOLB
+AFE0;AFE0;1101 116F 11B3;AFE0;1101 116F 11B3; # (꿠; 꿠; 꿠; 꿠; 꿠; ) HANGUL SYLLABLE GGWEOLS
+AFE1;AFE1;1101 116F 11B4;AFE1;1101 116F 11B4; # (꿡; 꿡; 꿡; 꿡; 꿡; ) HANGUL SYLLABLE GGWEOLT
+AFE2;AFE2;1101 116F 11B5;AFE2;1101 116F 11B5; # (꿢; 꿢; 꿢; 꿢; 꿢; ) HANGUL SYLLABLE GGWEOLP
+AFE3;AFE3;1101 116F 11B6;AFE3;1101 116F 11B6; # (꿣; 꿣; 꿣; 꿣; 꿣; ) HANGUL SYLLABLE GGWEOLH
+AFE4;AFE4;1101 116F 11B7;AFE4;1101 116F 11B7; # (꿤; 꿤; 꿤; 꿤; 꿤; ) HANGUL SYLLABLE GGWEOM
+AFE5;AFE5;1101 116F 11B8;AFE5;1101 116F 11B8; # (꿥; 꿥; 꿥; 꿥; 꿥; ) HANGUL SYLLABLE GGWEOB
+AFE6;AFE6;1101 116F 11B9;AFE6;1101 116F 11B9; # (꿦; 꿦; 꿦; 꿦; 꿦; ) HANGUL SYLLABLE GGWEOBS
+AFE7;AFE7;1101 116F 11BA;AFE7;1101 116F 11BA; # (꿧; 꿧; 꿧; 꿧; 꿧; ) HANGUL SYLLABLE GGWEOS
+AFE8;AFE8;1101 116F 11BB;AFE8;1101 116F 11BB; # (꿨; 꿨; 꿨; 꿨; 꿨; ) HANGUL SYLLABLE GGWEOSS
+AFE9;AFE9;1101 116F 11BC;AFE9;1101 116F 11BC; # (꿩; 꿩; 꿩; 꿩; 꿩; ) HANGUL SYLLABLE GGWEONG
+AFEA;AFEA;1101 116F 11BD;AFEA;1101 116F 11BD; # (꿪; 꿪; 꿪; 꿪; 꿪; ) HANGUL SYLLABLE GGWEOJ
+AFEB;AFEB;1101 116F 11BE;AFEB;1101 116F 11BE; # (꿫; 꿫; 꿫; 꿫; 꿫; ) HANGUL SYLLABLE GGWEOC
+AFEC;AFEC;1101 116F 11BF;AFEC;1101 116F 11BF; # (꿬; 꿬; 꿬; 꿬; 꿬; ) HANGUL SYLLABLE GGWEOK
+AFED;AFED;1101 116F 11C0;AFED;1101 116F 11C0; # (꿭; 꿭; 꿭; 꿭; 꿭; ) HANGUL SYLLABLE GGWEOT
+AFEE;AFEE;1101 116F 11C1;AFEE;1101 116F 11C1; # (꿮; 꿮; 꿮; 꿮; 꿮; ) HANGUL SYLLABLE GGWEOP
+AFEF;AFEF;1101 116F 11C2;AFEF;1101 116F 11C2; # (꿯; 꿯; 꿯; 꿯; 꿯; ) HANGUL SYLLABLE GGWEOH
+AFF0;AFF0;1101 1170;AFF0;1101 1170; # (꿰; 꿰; 꿰; 꿰; 꿰; ) HANGUL SYLLABLE GGWE
+AFF1;AFF1;1101 1170 11A8;AFF1;1101 1170 11A8; # (꿱; 꿱; 꿱; 꿱; 꿱; ) HANGUL SYLLABLE GGWEG
+AFF2;AFF2;1101 1170 11A9;AFF2;1101 1170 11A9; # (꿲; 꿲; 꿲; 꿲; 꿲; ) HANGUL SYLLABLE GGWEGG
+AFF3;AFF3;1101 1170 11AA;AFF3;1101 1170 11AA; # (꿳; 꿳; 꿳; 꿳; 꿳; ) HANGUL SYLLABLE GGWEGS
+AFF4;AFF4;1101 1170 11AB;AFF4;1101 1170 11AB; # (꿴; 꿴; 꿴; 꿴; 꿴; ) HANGUL SYLLABLE GGWEN
+AFF5;AFF5;1101 1170 11AC;AFF5;1101 1170 11AC; # (꿵; 꿵; 꿵; 꿵; 꿵; ) HANGUL SYLLABLE GGWENJ
+AFF6;AFF6;1101 1170 11AD;AFF6;1101 1170 11AD; # (꿶; 꿶; 꿶; 꿶; 꿶; ) HANGUL SYLLABLE GGWENH
+AFF7;AFF7;1101 1170 11AE;AFF7;1101 1170 11AE; # (꿷; 꿷; 꿷; 꿷; 꿷; ) HANGUL SYLLABLE GGWED
+AFF8;AFF8;1101 1170 11AF;AFF8;1101 1170 11AF; # (꿸; 꿸; 꿸; 꿸; 꿸; ) HANGUL SYLLABLE GGWEL
+AFF9;AFF9;1101 1170 11B0;AFF9;1101 1170 11B0; # (꿹; 꿹; 꿹; 꿹; 꿹; ) HANGUL SYLLABLE GGWELG
+AFFA;AFFA;1101 1170 11B1;AFFA;1101 1170 11B1; # (꿺; 꿺; 꿺; 꿺; 꿺; ) HANGUL SYLLABLE GGWELM
+AFFB;AFFB;1101 1170 11B2;AFFB;1101 1170 11B2; # (꿻; 꿻; 꿻; 꿻; 꿻; ) HANGUL SYLLABLE GGWELB
+AFFC;AFFC;1101 1170 11B3;AFFC;1101 1170 11B3; # (꿼; 꿼; 꿼; 꿼; 꿼; ) HANGUL SYLLABLE GGWELS
+AFFD;AFFD;1101 1170 11B4;AFFD;1101 1170 11B4; # (꿽; 꿽; 꿽; 꿽; 꿽; ) HANGUL SYLLABLE GGWELT
+AFFE;AFFE;1101 1170 11B5;AFFE;1101 1170 11B5; # (꿾; 꿾; 꿾; 꿾; 꿾; ) HANGUL SYLLABLE GGWELP
+AFFF;AFFF;1101 1170 11B6;AFFF;1101 1170 11B6; # (꿿; 꿿; 꿿; 꿿; 꿿; ) HANGUL SYLLABLE GGWELH
+B000;B000;1101 1170 11B7;B000;1101 1170 11B7; # (뀀; 뀀; 뀀; 뀀; 뀀; ) HANGUL SYLLABLE GGWEM
+B001;B001;1101 1170 11B8;B001;1101 1170 11B8; # (뀁; 뀁; 뀁; 뀁; 뀁; ) HANGUL SYLLABLE GGWEB
+B002;B002;1101 1170 11B9;B002;1101 1170 11B9; # (뀂; 뀂; 뀂; 뀂; 뀂; ) HANGUL SYLLABLE GGWEBS
+B003;B003;1101 1170 11BA;B003;1101 1170 11BA; # (뀃; 뀃; 뀃; 뀃; 뀃; ) HANGUL SYLLABLE GGWES
+B004;B004;1101 1170 11BB;B004;1101 1170 11BB; # (뀄; 뀄; 뀄; 뀄; 뀄; ) HANGUL SYLLABLE GGWESS
+B005;B005;1101 1170 11BC;B005;1101 1170 11BC; # (뀅; 뀅; 뀅; 뀅; 뀅; ) HANGUL SYLLABLE GGWENG
+B006;B006;1101 1170 11BD;B006;1101 1170 11BD; # (뀆; 뀆; 뀆; 뀆; 뀆; ) HANGUL SYLLABLE GGWEJ
+B007;B007;1101 1170 11BE;B007;1101 1170 11BE; # (뀇; 뀇; 뀇; 뀇; 뀇; ) HANGUL SYLLABLE GGWEC
+B008;B008;1101 1170 11BF;B008;1101 1170 11BF; # (뀈; 뀈; 뀈; 뀈; 뀈; ) HANGUL SYLLABLE GGWEK
+B009;B009;1101 1170 11C0;B009;1101 1170 11C0; # (뀉; 뀉; 뀉; 뀉; 뀉; ) HANGUL SYLLABLE GGWET
+B00A;B00A;1101 1170 11C1;B00A;1101 1170 11C1; # (뀊; 뀊; 뀊; 뀊; 뀊; ) HANGUL SYLLABLE GGWEP
+B00B;B00B;1101 1170 11C2;B00B;1101 1170 11C2; # (뀋; 뀋; 뀋; 뀋; 뀋; ) HANGUL SYLLABLE GGWEH
+B00C;B00C;1101 1171;B00C;1101 1171; # (뀌; 뀌; 뀌; 뀌; 뀌; ) HANGUL SYLLABLE GGWI
+B00D;B00D;1101 1171 11A8;B00D;1101 1171 11A8; # (뀍; 뀍; 뀍; 뀍; 뀍; ) HANGUL SYLLABLE GGWIG
+B00E;B00E;1101 1171 11A9;B00E;1101 1171 11A9; # (뀎; 뀎; 뀎; 뀎; 뀎; ) HANGUL SYLLABLE GGWIGG
+B00F;B00F;1101 1171 11AA;B00F;1101 1171 11AA; # (뀏; 뀏; 뀏; 뀏; 뀏; ) HANGUL SYLLABLE GGWIGS
+B010;B010;1101 1171 11AB;B010;1101 1171 11AB; # (뀐; 뀐; 뀐; 뀐; 뀐; ) HANGUL SYLLABLE GGWIN
+B011;B011;1101 1171 11AC;B011;1101 1171 11AC; # (뀑; 뀑; 뀑; 뀑; 뀑; ) HANGUL SYLLABLE GGWINJ
+B012;B012;1101 1171 11AD;B012;1101 1171 11AD; # (뀒; 뀒; 뀒; 뀒; 뀒; ) HANGUL SYLLABLE GGWINH
+B013;B013;1101 1171 11AE;B013;1101 1171 11AE; # (뀓; 뀓; 뀓; 뀓; 뀓; ) HANGUL SYLLABLE GGWID
+B014;B014;1101 1171 11AF;B014;1101 1171 11AF; # (뀔; 뀔; 뀔; 뀔; 뀔; ) HANGUL SYLLABLE GGWIL
+B015;B015;1101 1171 11B0;B015;1101 1171 11B0; # (뀕; 뀕; 뀕; 뀕; 뀕; ) HANGUL SYLLABLE GGWILG
+B016;B016;1101 1171 11B1;B016;1101 1171 11B1; # (뀖; 뀖; 뀖; 뀖; 뀖; ) HANGUL SYLLABLE GGWILM
+B017;B017;1101 1171 11B2;B017;1101 1171 11B2; # (뀗; 뀗; 뀗; 뀗; 뀗; ) HANGUL SYLLABLE GGWILB
+B018;B018;1101 1171 11B3;B018;1101 1171 11B3; # (뀘; 뀘; 뀘; 뀘; 뀘; ) HANGUL SYLLABLE GGWILS
+B019;B019;1101 1171 11B4;B019;1101 1171 11B4; # (뀙; 뀙; 뀙; 뀙; 뀙; ) HANGUL SYLLABLE GGWILT
+B01A;B01A;1101 1171 11B5;B01A;1101 1171 11B5; # (뀚; 뀚; 뀚; 뀚; 뀚; ) HANGUL SYLLABLE GGWILP
+B01B;B01B;1101 1171 11B6;B01B;1101 1171 11B6; # (뀛; 뀛; 뀛; 뀛; 뀛; ) HANGUL SYLLABLE GGWILH
+B01C;B01C;1101 1171 11B7;B01C;1101 1171 11B7; # (뀜; 뀜; 뀜; 뀜; 뀜; ) HANGUL SYLLABLE GGWIM
+B01D;B01D;1101 1171 11B8;B01D;1101 1171 11B8; # (뀝; 뀝; 뀝; 뀝; 뀝; ) HANGUL SYLLABLE GGWIB
+B01E;B01E;1101 1171 11B9;B01E;1101 1171 11B9; # (뀞; 뀞; 뀞; 뀞; 뀞; ) HANGUL SYLLABLE GGWIBS
+B01F;B01F;1101 1171 11BA;B01F;1101 1171 11BA; # (뀟; 뀟; 뀟; 뀟; 뀟; ) HANGUL SYLLABLE GGWIS
+B020;B020;1101 1171 11BB;B020;1101 1171 11BB; # (뀠; 뀠; 뀠; 뀠; 뀠; ) HANGUL SYLLABLE GGWISS
+B021;B021;1101 1171 11BC;B021;1101 1171 11BC; # (뀡; 뀡; 뀡; 뀡; 뀡; ) HANGUL SYLLABLE GGWING
+B022;B022;1101 1171 11BD;B022;1101 1171 11BD; # (뀢; 뀢; 뀢; 뀢; 뀢; ) HANGUL SYLLABLE GGWIJ
+B023;B023;1101 1171 11BE;B023;1101 1171 11BE; # (뀣; 뀣; 뀣; 뀣; 뀣; ) HANGUL SYLLABLE GGWIC
+B024;B024;1101 1171 11BF;B024;1101 1171 11BF; # (뀤; 뀤; 뀤; 뀤; 뀤; ) HANGUL SYLLABLE GGWIK
+B025;B025;1101 1171 11C0;B025;1101 1171 11C0; # (뀥; 뀥; 뀥; 뀥; 뀥; ) HANGUL SYLLABLE GGWIT
+B026;B026;1101 1171 11C1;B026;1101 1171 11C1; # (뀦; 뀦; 뀦; 뀦; 뀦; ) HANGUL SYLLABLE GGWIP
+B027;B027;1101 1171 11C2;B027;1101 1171 11C2; # (뀧; 뀧; 뀧; 뀧; 뀧; ) HANGUL SYLLABLE GGWIH
+B028;B028;1101 1172;B028;1101 1172; # (뀨; 뀨; 뀨; 뀨; 뀨; ) HANGUL SYLLABLE GGYU
+B029;B029;1101 1172 11A8;B029;1101 1172 11A8; # (뀩; 뀩; 뀩; 뀩; 뀩; ) HANGUL SYLLABLE GGYUG
+B02A;B02A;1101 1172 11A9;B02A;1101 1172 11A9; # (뀪; 뀪; 뀪; 뀪; 뀪; ) HANGUL SYLLABLE GGYUGG
+B02B;B02B;1101 1172 11AA;B02B;1101 1172 11AA; # (뀫; 뀫; 뀫; 뀫; 뀫; ) HANGUL SYLLABLE GGYUGS
+B02C;B02C;1101 1172 11AB;B02C;1101 1172 11AB; # (뀬; 뀬; 뀬; 뀬; 뀬; ) HANGUL SYLLABLE GGYUN
+B02D;B02D;1101 1172 11AC;B02D;1101 1172 11AC; # (뀭; 뀭; 뀭; 뀭; 뀭; ) HANGUL SYLLABLE GGYUNJ
+B02E;B02E;1101 1172 11AD;B02E;1101 1172 11AD; # (뀮; 뀮; 뀮; 뀮; 뀮; ) HANGUL SYLLABLE GGYUNH
+B02F;B02F;1101 1172 11AE;B02F;1101 1172 11AE; # (뀯; 뀯; 뀯; 뀯; 뀯; ) HANGUL SYLLABLE GGYUD
+B030;B030;1101 1172 11AF;B030;1101 1172 11AF; # (뀰; 뀰; 뀰; 뀰; 뀰; ) HANGUL SYLLABLE GGYUL
+B031;B031;1101 1172 11B0;B031;1101 1172 11B0; # (뀱; 뀱; 뀱; 뀱; 뀱; ) HANGUL SYLLABLE GGYULG
+B032;B032;1101 1172 11B1;B032;1101 1172 11B1; # (뀲; 뀲; 뀲; 뀲; 뀲; ) HANGUL SYLLABLE GGYULM
+B033;B033;1101 1172 11B2;B033;1101 1172 11B2; # (뀳; 뀳; 뀳; 뀳; 뀳; ) HANGUL SYLLABLE GGYULB
+B034;B034;1101 1172 11B3;B034;1101 1172 11B3; # (뀴; 뀴; 뀴; 뀴; 뀴; ) HANGUL SYLLABLE GGYULS
+B035;B035;1101 1172 11B4;B035;1101 1172 11B4; # (뀵; 뀵; 뀵; 뀵; 뀵; ) HANGUL SYLLABLE GGYULT
+B036;B036;1101 1172 11B5;B036;1101 1172 11B5; # (뀶; 뀶; 뀶; 뀶; 뀶; ) HANGUL SYLLABLE GGYULP
+B037;B037;1101 1172 11B6;B037;1101 1172 11B6; # (뀷; 뀷; 뀷; 뀷; 뀷; ) HANGUL SYLLABLE GGYULH
+B038;B038;1101 1172 11B7;B038;1101 1172 11B7; # (뀸; 뀸; 뀸; 뀸; 뀸; ) HANGUL SYLLABLE GGYUM
+B039;B039;1101 1172 11B8;B039;1101 1172 11B8; # (뀹; 뀹; 뀹; 뀹; 뀹; ) HANGUL SYLLABLE GGYUB
+B03A;B03A;1101 1172 11B9;B03A;1101 1172 11B9; # (뀺; 뀺; 뀺; 뀺; 뀺; ) HANGUL SYLLABLE GGYUBS
+B03B;B03B;1101 1172 11BA;B03B;1101 1172 11BA; # (뀻; 뀻; 뀻; 뀻; 뀻; ) HANGUL SYLLABLE GGYUS
+B03C;B03C;1101 1172 11BB;B03C;1101 1172 11BB; # (뀼; 뀼; 뀼; 뀼; 뀼; ) HANGUL SYLLABLE GGYUSS
+B03D;B03D;1101 1172 11BC;B03D;1101 1172 11BC; # (뀽; 뀽; 뀽; 뀽; 뀽; ) HANGUL SYLLABLE GGYUNG
+B03E;B03E;1101 1172 11BD;B03E;1101 1172 11BD; # (뀾; 뀾; 뀾; 뀾; 뀾; ) HANGUL SYLLABLE GGYUJ
+B03F;B03F;1101 1172 11BE;B03F;1101 1172 11BE; # (뀿; 뀿; 뀿; 뀿; 뀿; ) HANGUL SYLLABLE GGYUC
+B040;B040;1101 1172 11BF;B040;1101 1172 11BF; # (끀; 끀; 끀; 끀; 끀; ) HANGUL SYLLABLE GGYUK
+B041;B041;1101 1172 11C0;B041;1101 1172 11C0; # (끁; 끁; 끁; 끁; 끁; ) HANGUL SYLLABLE GGYUT
+B042;B042;1101 1172 11C1;B042;1101 1172 11C1; # (끂; 끂; 끂; 끂; 끂; ) HANGUL SYLLABLE GGYUP
+B043;B043;1101 1172 11C2;B043;1101 1172 11C2; # (끃; 끃; 끃; 끃; 끃; ) HANGUL SYLLABLE GGYUH
+B044;B044;1101 1173;B044;1101 1173; # (끄; 끄; 끄; 끄; 끄; ) HANGUL SYLLABLE GGEU
+B045;B045;1101 1173 11A8;B045;1101 1173 11A8; # (끅; 끅; 끅; 끅; 끅; ) HANGUL SYLLABLE GGEUG
+B046;B046;1101 1173 11A9;B046;1101 1173 11A9; # (끆; 끆; 끆; 끆; 끆; ) HANGUL SYLLABLE GGEUGG
+B047;B047;1101 1173 11AA;B047;1101 1173 11AA; # (끇; 끇; 끇; 끇; 끇; ) HANGUL SYLLABLE GGEUGS
+B048;B048;1101 1173 11AB;B048;1101 1173 11AB; # (끈; 끈; 끈; 끈; 끈; ) HANGUL SYLLABLE GGEUN
+B049;B049;1101 1173 11AC;B049;1101 1173 11AC; # (끉; 끉; 끉; 끉; 끉; ) HANGUL SYLLABLE GGEUNJ
+B04A;B04A;1101 1173 11AD;B04A;1101 1173 11AD; # (끊; 끊; 끊; 끊; 끊; ) HANGUL SYLLABLE GGEUNH
+B04B;B04B;1101 1173 11AE;B04B;1101 1173 11AE; # (끋; 끋; 끋; 끋; 끋; ) HANGUL SYLLABLE GGEUD
+B04C;B04C;1101 1173 11AF;B04C;1101 1173 11AF; # (끌; 끌; 끌; 끌; 끌; ) HANGUL SYLLABLE GGEUL
+B04D;B04D;1101 1173 11B0;B04D;1101 1173 11B0; # (끍; 끍; 끍; 끍; 끍; ) HANGUL SYLLABLE GGEULG
+B04E;B04E;1101 1173 11B1;B04E;1101 1173 11B1; # (끎; 끎; 끎; 끎; 끎; ) HANGUL SYLLABLE GGEULM
+B04F;B04F;1101 1173 11B2;B04F;1101 1173 11B2; # (끏; 끏; 끏; 끏; 끏; ) HANGUL SYLLABLE GGEULB
+B050;B050;1101 1173 11B3;B050;1101 1173 11B3; # (끐; 끐; 끐; 끐; 끐; ) HANGUL SYLLABLE GGEULS
+B051;B051;1101 1173 11B4;B051;1101 1173 11B4; # (끑; 끑; 끑; 끑; 끑; ) HANGUL SYLLABLE GGEULT
+B052;B052;1101 1173 11B5;B052;1101 1173 11B5; # (끒; 끒; 끒; 끒; 끒; ) HANGUL SYLLABLE GGEULP
+B053;B053;1101 1173 11B6;B053;1101 1173 11B6; # (끓; 끓; 끓; 끓; 끓; ) HANGUL SYLLABLE GGEULH
+B054;B054;1101 1173 11B7;B054;1101 1173 11B7; # (끔; 끔; 끔; 끔; 끔; ) HANGUL SYLLABLE GGEUM
+B055;B055;1101 1173 11B8;B055;1101 1173 11B8; # (끕; 끕; 끕; 끕; 끕; ) HANGUL SYLLABLE GGEUB
+B056;B056;1101 1173 11B9;B056;1101 1173 11B9; # (끖; 끖; 끖; 끖; 끖; ) HANGUL SYLLABLE GGEUBS
+B057;B057;1101 1173 11BA;B057;1101 1173 11BA; # (끗; 끗; 끗; 끗; 끗; ) HANGUL SYLLABLE GGEUS
+B058;B058;1101 1173 11BB;B058;1101 1173 11BB; # (끘; 끘; 끘; 끘; 끘; ) HANGUL SYLLABLE GGEUSS
+B059;B059;1101 1173 11BC;B059;1101 1173 11BC; # (끙; 끙; 끙; 끙; 끙; ) HANGUL SYLLABLE GGEUNG
+B05A;B05A;1101 1173 11BD;B05A;1101 1173 11BD; # (끚; 끚; 끚; 끚; 끚; ) HANGUL SYLLABLE GGEUJ
+B05B;B05B;1101 1173 11BE;B05B;1101 1173 11BE; # (끛; 끛; 끛; 끛; 끛; ) HANGUL SYLLABLE GGEUC
+B05C;B05C;1101 1173 11BF;B05C;1101 1173 11BF; # (끜; 끜; 끜; 끜; 끜; ) HANGUL SYLLABLE GGEUK
+B05D;B05D;1101 1173 11C0;B05D;1101 1173 11C0; # (끝; 끝; 끝; 끝; 끝; ) HANGUL SYLLABLE GGEUT
+B05E;B05E;1101 1173 11C1;B05E;1101 1173 11C1; # (끞; 끞; 끞; 끞; 끞; ) HANGUL SYLLABLE GGEUP
+B05F;B05F;1101 1173 11C2;B05F;1101 1173 11C2; # (끟; 끟; 끟; 끟; 끟; ) HANGUL SYLLABLE GGEUH
+B060;B060;1101 1174;B060;1101 1174; # (끠; 끠; 끠; 끠; 끠; ) HANGUL SYLLABLE GGYI
+B061;B061;1101 1174 11A8;B061;1101 1174 11A8; # (끡; 끡; 끡; 끡; 끡; ) HANGUL SYLLABLE GGYIG
+B062;B062;1101 1174 11A9;B062;1101 1174 11A9; # (끢; 끢; 끢; 끢; 끢; ) HANGUL SYLLABLE GGYIGG
+B063;B063;1101 1174 11AA;B063;1101 1174 11AA; # (끣; 끣; 끣; 끣; 끣; ) HANGUL SYLLABLE GGYIGS
+B064;B064;1101 1174 11AB;B064;1101 1174 11AB; # (끤; 끤; 끤; 끤; 끤; ) HANGUL SYLLABLE GGYIN
+B065;B065;1101 1174 11AC;B065;1101 1174 11AC; # (끥; 끥; 끥; 끥; 끥; ) HANGUL SYLLABLE GGYINJ
+B066;B066;1101 1174 11AD;B066;1101 1174 11AD; # (끦; 끦; 끦; 끦; 끦; ) HANGUL SYLLABLE GGYINH
+B067;B067;1101 1174 11AE;B067;1101 1174 11AE; # (끧; 끧; 끧; 끧; 끧; ) HANGUL SYLLABLE GGYID
+B068;B068;1101 1174 11AF;B068;1101 1174 11AF; # (끨; 끨; 끨; 끨; 끨; ) HANGUL SYLLABLE GGYIL
+B069;B069;1101 1174 11B0;B069;1101 1174 11B0; # (끩; 끩; 끩; 끩; 끩; ) HANGUL SYLLABLE GGYILG
+B06A;B06A;1101 1174 11B1;B06A;1101 1174 11B1; # (끪; 끪; 끪; 끪; 끪; ) HANGUL SYLLABLE GGYILM
+B06B;B06B;1101 1174 11B2;B06B;1101 1174 11B2; # (끫; 끫; 끫; 끫; 끫; ) HANGUL SYLLABLE GGYILB
+B06C;B06C;1101 1174 11B3;B06C;1101 1174 11B3; # (끬; 끬; 끬; 끬; 끬; ) HANGUL SYLLABLE GGYILS
+B06D;B06D;1101 1174 11B4;B06D;1101 1174 11B4; # (끭; 끭; 끭; 끭; 끭; ) HANGUL SYLLABLE GGYILT
+B06E;B06E;1101 1174 11B5;B06E;1101 1174 11B5; # (끮; 끮; 끮; 끮; 끮; ) HANGUL SYLLABLE GGYILP
+B06F;B06F;1101 1174 11B6;B06F;1101 1174 11B6; # (끯; 끯; 끯; 끯; 끯; ) HANGUL SYLLABLE GGYILH
+B070;B070;1101 1174 11B7;B070;1101 1174 11B7; # (끰; 끰; 끰; 끰; 끰; ) HANGUL SYLLABLE GGYIM
+B071;B071;1101 1174 11B8;B071;1101 1174 11B8; # (끱; 끱; 끱; 끱; 끱; ) HANGUL SYLLABLE GGYIB
+B072;B072;1101 1174 11B9;B072;1101 1174 11B9; # (끲; 끲; 끲; 끲; 끲; ) HANGUL SYLLABLE GGYIBS
+B073;B073;1101 1174 11BA;B073;1101 1174 11BA; # (끳; 끳; 끳; 끳; 끳; ) HANGUL SYLLABLE GGYIS
+B074;B074;1101 1174 11BB;B074;1101 1174 11BB; # (끴; 끴; 끴; 끴; 끴; ) HANGUL SYLLABLE GGYISS
+B075;B075;1101 1174 11BC;B075;1101 1174 11BC; # (끵; 끵; 끵; 끵; 끵; ) HANGUL SYLLABLE GGYING
+B076;B076;1101 1174 11BD;B076;1101 1174 11BD; # (끶; 끶; 끶; 끶; 끶; ) HANGUL SYLLABLE GGYIJ
+B077;B077;1101 1174 11BE;B077;1101 1174 11BE; # (끷; 끷; 끷; 끷; 끷; ) HANGUL SYLLABLE GGYIC
+B078;B078;1101 1174 11BF;B078;1101 1174 11BF; # (끸; 끸; 끸; 끸; 끸; ) HANGUL SYLLABLE GGYIK
+B079;B079;1101 1174 11C0;B079;1101 1174 11C0; # (끹; 끹; 끹; 끹; 끹; ) HANGUL SYLLABLE GGYIT
+B07A;B07A;1101 1174 11C1;B07A;1101 1174 11C1; # (끺; 끺; 끺; 끺; 끺; ) HANGUL SYLLABLE GGYIP
+B07B;B07B;1101 1174 11C2;B07B;1101 1174 11C2; # (끻; 끻; 끻; 끻; 끻; ) HANGUL SYLLABLE GGYIH
+B07C;B07C;1101 1175;B07C;1101 1175; # (끼; 끼; 끼; 끼; 끼; ) HANGUL SYLLABLE GGI
+B07D;B07D;1101 1175 11A8;B07D;1101 1175 11A8; # (끽; 끽; 끽; 끽; 끽; ) HANGUL SYLLABLE GGIG
+B07E;B07E;1101 1175 11A9;B07E;1101 1175 11A9; # (끾; 끾; 끾; 끾; 끾; ) HANGUL SYLLABLE GGIGG
+B07F;B07F;1101 1175 11AA;B07F;1101 1175 11AA; # (끿; 끿; 끿; 끿; 끿; ) HANGUL SYLLABLE GGIGS
+B080;B080;1101 1175 11AB;B080;1101 1175 11AB; # (낀; 낀; 낀; 낀; 낀; ) HANGUL SYLLABLE GGIN
+B081;B081;1101 1175 11AC;B081;1101 1175 11AC; # (낁; 낁; 낁; 낁; 낁; ) HANGUL SYLLABLE GGINJ
+B082;B082;1101 1175 11AD;B082;1101 1175 11AD; # (낂; 낂; 낂; 낂; 낂; ) HANGUL SYLLABLE GGINH
+B083;B083;1101 1175 11AE;B083;1101 1175 11AE; # (낃; 낃; 낃; 낃; 낃; ) HANGUL SYLLABLE GGID
+B084;B084;1101 1175 11AF;B084;1101 1175 11AF; # (낄; 낄; 낄; 낄; 낄; ) HANGUL SYLLABLE GGIL
+B085;B085;1101 1175 11B0;B085;1101 1175 11B0; # (낅; 낅; 낅; 낅; 낅; ) HANGUL SYLLABLE GGILG
+B086;B086;1101 1175 11B1;B086;1101 1175 11B1; # (낆; 낆; 낆; 낆; 낆; ) HANGUL SYLLABLE GGILM
+B087;B087;1101 1175 11B2;B087;1101 1175 11B2; # (낇; 낇; 낇; 낇; 낇; ) HANGUL SYLLABLE GGILB
+B088;B088;1101 1175 11B3;B088;1101 1175 11B3; # (낈; 낈; 낈; 낈; 낈; ) HANGUL SYLLABLE GGILS
+B089;B089;1101 1175 11B4;B089;1101 1175 11B4; # (낉; 낉; 낉; 낉; 낉; ) HANGUL SYLLABLE GGILT
+B08A;B08A;1101 1175 11B5;B08A;1101 1175 11B5; # (낊; 낊; 낊; 낊; 낊; ) HANGUL SYLLABLE GGILP
+B08B;B08B;1101 1175 11B6;B08B;1101 1175 11B6; # (낋; 낋; 낋; 낋; 낋; ) HANGUL SYLLABLE GGILH
+B08C;B08C;1101 1175 11B7;B08C;1101 1175 11B7; # (낌; 낌; 낌; 낌; 낌; ) HANGUL SYLLABLE GGIM
+B08D;B08D;1101 1175 11B8;B08D;1101 1175 11B8; # (낍; 낍; 낍; 낍; 낍; ) HANGUL SYLLABLE GGIB
+B08E;B08E;1101 1175 11B9;B08E;1101 1175 11B9; # (낎; 낎; 낎; 낎; 낎; ) HANGUL SYLLABLE GGIBS
+B08F;B08F;1101 1175 11BA;B08F;1101 1175 11BA; # (낏; 낏; 낏; 낏; 낏; ) HANGUL SYLLABLE GGIS
+B090;B090;1101 1175 11BB;B090;1101 1175 11BB; # (낐; 낐; 낐; 낐; 낐; ) HANGUL SYLLABLE GGISS
+B091;B091;1101 1175 11BC;B091;1101 1175 11BC; # (낑; 낑; 낑; 낑; 낑; ) HANGUL SYLLABLE GGING
+B092;B092;1101 1175 11BD;B092;1101 1175 11BD; # (낒; 낒; 낒; 낒; 낒; ) HANGUL SYLLABLE GGIJ
+B093;B093;1101 1175 11BE;B093;1101 1175 11BE; # (낓; 낓; 낓; 낓; 낓; ) HANGUL SYLLABLE GGIC
+B094;B094;1101 1175 11BF;B094;1101 1175 11BF; # (낔; 낔; 낔; 낔; 낔; ) HANGUL SYLLABLE GGIK
+B095;B095;1101 1175 11C0;B095;1101 1175 11C0; # (낕; 낕; 낕; 낕; 낕; ) HANGUL SYLLABLE GGIT
+B096;B096;1101 1175 11C1;B096;1101 1175 11C1; # (낖; 낖; 낖; 낖; 낖; ) HANGUL SYLLABLE GGIP
+B097;B097;1101 1175 11C2;B097;1101 1175 11C2; # (낗; 낗; 낗; 낗; 낗; ) HANGUL SYLLABLE GGIH
+B098;B098;1102 1161;B098;1102 1161; # (나; 나; 나; 나; 나; ) HANGUL SYLLABLE NA
+B099;B099;1102 1161 11A8;B099;1102 1161 11A8; # (낙; 낙; 낙; 낙; 낙; ) HANGUL SYLLABLE NAG
+B09A;B09A;1102 1161 11A9;B09A;1102 1161 11A9; # (낚; 낚; 낚; 낚; 낚; ) HANGUL SYLLABLE NAGG
+B09B;B09B;1102 1161 11AA;B09B;1102 1161 11AA; # (낛; 낛; 낛; 낛; 낛; ) HANGUL SYLLABLE NAGS
+B09C;B09C;1102 1161 11AB;B09C;1102 1161 11AB; # (난; 난; 난; 난; 난; ) HANGUL SYLLABLE NAN
+B09D;B09D;1102 1161 11AC;B09D;1102 1161 11AC; # (낝; 낝; 낝; 낝; 낝; ) HANGUL SYLLABLE NANJ
+B09E;B09E;1102 1161 11AD;B09E;1102 1161 11AD; # (낞; 낞; 낞; 낞; 낞; ) HANGUL SYLLABLE NANH
+B09F;B09F;1102 1161 11AE;B09F;1102 1161 11AE; # (낟; 낟; 낟; 낟; 낟; ) HANGUL SYLLABLE NAD
+B0A0;B0A0;1102 1161 11AF;B0A0;1102 1161 11AF; # (날; 날; 날; 날; 날; ) HANGUL SYLLABLE NAL
+B0A1;B0A1;1102 1161 11B0;B0A1;1102 1161 11B0; # (낡; 낡; 낡; 낡; 낡; ) HANGUL SYLLABLE NALG
+B0A2;B0A2;1102 1161 11B1;B0A2;1102 1161 11B1; # (낢; 낢; 낢; 낢; 낢; ) HANGUL SYLLABLE NALM
+B0A3;B0A3;1102 1161 11B2;B0A3;1102 1161 11B2; # (낣; 낣; 낣; 낣; 낣; ) HANGUL SYLLABLE NALB
+B0A4;B0A4;1102 1161 11B3;B0A4;1102 1161 11B3; # (낤; 낤; 낤; 낤; 낤; ) HANGUL SYLLABLE NALS
+B0A5;B0A5;1102 1161 11B4;B0A5;1102 1161 11B4; # (낥; 낥; 낥; 낥; 낥; ) HANGUL SYLLABLE NALT
+B0A6;B0A6;1102 1161 11B5;B0A6;1102 1161 11B5; # (낦; 낦; 낦; 낦; 낦; ) HANGUL SYLLABLE NALP
+B0A7;B0A7;1102 1161 11B6;B0A7;1102 1161 11B6; # (낧; 낧; 낧; 낧; 낧; ) HANGUL SYLLABLE NALH
+B0A8;B0A8;1102 1161 11B7;B0A8;1102 1161 11B7; # (남; 남; 남; 남; 남; ) HANGUL SYLLABLE NAM
+B0A9;B0A9;1102 1161 11B8;B0A9;1102 1161 11B8; # (납; 납; 납; 납; 납; ) HANGUL SYLLABLE NAB
+B0AA;B0AA;1102 1161 11B9;B0AA;1102 1161 11B9; # (낪; 낪; 낪; 낪; 낪; ) HANGUL SYLLABLE NABS
+B0AB;B0AB;1102 1161 11BA;B0AB;1102 1161 11BA; # (낫; 낫; 낫; 낫; 낫; ) HANGUL SYLLABLE NAS
+B0AC;B0AC;1102 1161 11BB;B0AC;1102 1161 11BB; # (났; 났; 났; 났; 났; ) HANGUL SYLLABLE NASS
+B0AD;B0AD;1102 1161 11BC;B0AD;1102 1161 11BC; # (낭; 낭; 낭; 낭; 낭; ) HANGUL SYLLABLE NANG
+B0AE;B0AE;1102 1161 11BD;B0AE;1102 1161 11BD; # (낮; 낮; 낮; 낮; 낮; ) HANGUL SYLLABLE NAJ
+B0AF;B0AF;1102 1161 11BE;B0AF;1102 1161 11BE; # (낯; 낯; 낯; 낯; 낯; ) HANGUL SYLLABLE NAC
+B0B0;B0B0;1102 1161 11BF;B0B0;1102 1161 11BF; # (낰; 낰; 낰; 낰; 낰; ) HANGUL SYLLABLE NAK
+B0B1;B0B1;1102 1161 11C0;B0B1;1102 1161 11C0; # (낱; 낱; 낱; 낱; 낱; ) HANGUL SYLLABLE NAT
+B0B2;B0B2;1102 1161 11C1;B0B2;1102 1161 11C1; # (낲; 낲; 낲; 낲; 낲; ) HANGUL SYLLABLE NAP
+B0B3;B0B3;1102 1161 11C2;B0B3;1102 1161 11C2; # (낳; 낳; 낳; 낳; 낳; ) HANGUL SYLLABLE NAH
+B0B4;B0B4;1102 1162;B0B4;1102 1162; # (내; 내; 내; 내; 내; ) HANGUL SYLLABLE NAE
+B0B5;B0B5;1102 1162 11A8;B0B5;1102 1162 11A8; # (낵; 낵; 낵; 낵; 낵; ) HANGUL SYLLABLE NAEG
+B0B6;B0B6;1102 1162 11A9;B0B6;1102 1162 11A9; # (낶; 낶; 낶; 낶; 낶; ) HANGUL SYLLABLE NAEGG
+B0B7;B0B7;1102 1162 11AA;B0B7;1102 1162 11AA; # (낷; 낷; 낷; 낷; 낷; ) HANGUL SYLLABLE NAEGS
+B0B8;B0B8;1102 1162 11AB;B0B8;1102 1162 11AB; # (낸; 낸; 낸; 낸; 낸; ) HANGUL SYLLABLE NAEN
+B0B9;B0B9;1102 1162 11AC;B0B9;1102 1162 11AC; # (낹; 낹; 낹; 낹; 낹; ) HANGUL SYLLABLE NAENJ
+B0BA;B0BA;1102 1162 11AD;B0BA;1102 1162 11AD; # (낺; 낺; 낺; 낺; 낺; ) HANGUL SYLLABLE NAENH
+B0BB;B0BB;1102 1162 11AE;B0BB;1102 1162 11AE; # (낻; 낻; 낻; 낻; 낻; ) HANGUL SYLLABLE NAED
+B0BC;B0BC;1102 1162 11AF;B0BC;1102 1162 11AF; # (낼; 낼; 낼; 낼; 낼; ) HANGUL SYLLABLE NAEL
+B0BD;B0BD;1102 1162 11B0;B0BD;1102 1162 11B0; # (낽; 낽; 낽; 낽; 낽; ) HANGUL SYLLABLE NAELG
+B0BE;B0BE;1102 1162 11B1;B0BE;1102 1162 11B1; # (낾; 낾; 낾; 낾; 낾; ) HANGUL SYLLABLE NAELM
+B0BF;B0BF;1102 1162 11B2;B0BF;1102 1162 11B2; # (낿; 낿; 낿; 낿; 낿; ) HANGUL SYLLABLE NAELB
+B0C0;B0C0;1102 1162 11B3;B0C0;1102 1162 11B3; # (냀; 냀; 냀; 냀; 냀; ) HANGUL SYLLABLE NAELS
+B0C1;B0C1;1102 1162 11B4;B0C1;1102 1162 11B4; # (냁; 냁; 냁; 냁; 냁; ) HANGUL SYLLABLE NAELT
+B0C2;B0C2;1102 1162 11B5;B0C2;1102 1162 11B5; # (냂; 냂; 냂; 냂; 냂; ) HANGUL SYLLABLE NAELP
+B0C3;B0C3;1102 1162 11B6;B0C3;1102 1162 11B6; # (냃; 냃; 냃; 냃; 냃; ) HANGUL SYLLABLE NAELH
+B0C4;B0C4;1102 1162 11B7;B0C4;1102 1162 11B7; # (냄; 냄; 냄; 냄; 냄; ) HANGUL SYLLABLE NAEM
+B0C5;B0C5;1102 1162 11B8;B0C5;1102 1162 11B8; # (냅; 냅; 냅; 냅; 냅; ) HANGUL SYLLABLE NAEB
+B0C6;B0C6;1102 1162 11B9;B0C6;1102 1162 11B9; # (냆; 냆; 냆; 냆; 냆; ) HANGUL SYLLABLE NAEBS
+B0C7;B0C7;1102 1162 11BA;B0C7;1102 1162 11BA; # (냇; 냇; 냇; 냇; 냇; ) HANGUL SYLLABLE NAES
+B0C8;B0C8;1102 1162 11BB;B0C8;1102 1162 11BB; # (냈; 냈; 냈; 냈; 냈; ) HANGUL SYLLABLE NAESS
+B0C9;B0C9;1102 1162 11BC;B0C9;1102 1162 11BC; # (냉; 냉; 냉; 냉; 냉; ) HANGUL SYLLABLE NAENG
+B0CA;B0CA;1102 1162 11BD;B0CA;1102 1162 11BD; # (냊; 냊; 냊; 냊; 냊; ) HANGUL SYLLABLE NAEJ
+B0CB;B0CB;1102 1162 11BE;B0CB;1102 1162 11BE; # (냋; 냋; 냋; 냋; 냋; ) HANGUL SYLLABLE NAEC
+B0CC;B0CC;1102 1162 11BF;B0CC;1102 1162 11BF; # (냌; 냌; 냌; 냌; 냌; ) HANGUL SYLLABLE NAEK
+B0CD;B0CD;1102 1162 11C0;B0CD;1102 1162 11C0; # (냍; 냍; 냍; 냍; 냍; ) HANGUL SYLLABLE NAET
+B0CE;B0CE;1102 1162 11C1;B0CE;1102 1162 11C1; # (냎; 냎; 냎; 냎; 냎; ) HANGUL SYLLABLE NAEP
+B0CF;B0CF;1102 1162 11C2;B0CF;1102 1162 11C2; # (냏; 냏; 냏; 냏; 냏; ) HANGUL SYLLABLE NAEH
+B0D0;B0D0;1102 1163;B0D0;1102 1163; # (냐; 냐; 냐; 냐; 냐; ) HANGUL SYLLABLE NYA
+B0D1;B0D1;1102 1163 11A8;B0D1;1102 1163 11A8; # (냑; 냑; 냑; 냑; 냑; ) HANGUL SYLLABLE NYAG
+B0D2;B0D2;1102 1163 11A9;B0D2;1102 1163 11A9; # (냒; 냒; 냒; 냒; 냒; ) HANGUL SYLLABLE NYAGG
+B0D3;B0D3;1102 1163 11AA;B0D3;1102 1163 11AA; # (냓; 냓; 냓; 냓; 냓; ) HANGUL SYLLABLE NYAGS
+B0D4;B0D4;1102 1163 11AB;B0D4;1102 1163 11AB; # (냔; 냔; 냔; 냔; 냔; ) HANGUL SYLLABLE NYAN
+B0D5;B0D5;1102 1163 11AC;B0D5;1102 1163 11AC; # (냕; 냕; 냕; 냕; 냕; ) HANGUL SYLLABLE NYANJ
+B0D6;B0D6;1102 1163 11AD;B0D6;1102 1163 11AD; # (냖; 냖; 냖; 냖; 냖; ) HANGUL SYLLABLE NYANH
+B0D7;B0D7;1102 1163 11AE;B0D7;1102 1163 11AE; # (냗; 냗; 냗; 냗; 냗; ) HANGUL SYLLABLE NYAD
+B0D8;B0D8;1102 1163 11AF;B0D8;1102 1163 11AF; # (냘; 냘; 냘; 냘; 냘; ) HANGUL SYLLABLE NYAL
+B0D9;B0D9;1102 1163 11B0;B0D9;1102 1163 11B0; # (냙; 냙; 냙; 냙; 냙; ) HANGUL SYLLABLE NYALG
+B0DA;B0DA;1102 1163 11B1;B0DA;1102 1163 11B1; # (냚; 냚; 냚; 냚; 냚; ) HANGUL SYLLABLE NYALM
+B0DB;B0DB;1102 1163 11B2;B0DB;1102 1163 11B2; # (냛; 냛; 냛; 냛; 냛; ) HANGUL SYLLABLE NYALB
+B0DC;B0DC;1102 1163 11B3;B0DC;1102 1163 11B3; # (냜; 냜; 냜; 냜; 냜; ) HANGUL SYLLABLE NYALS
+B0DD;B0DD;1102 1163 11B4;B0DD;1102 1163 11B4; # (냝; 냝; 냝; 냝; 냝; ) HANGUL SYLLABLE NYALT
+B0DE;B0DE;1102 1163 11B5;B0DE;1102 1163 11B5; # (냞; 냞; 냞; 냞; 냞; ) HANGUL SYLLABLE NYALP
+B0DF;B0DF;1102 1163 11B6;B0DF;1102 1163 11B6; # (냟; 냟; 냟; 냟; 냟; ) HANGUL SYLLABLE NYALH
+B0E0;B0E0;1102 1163 11B7;B0E0;1102 1163 11B7; # (냠; 냠; 냠; 냠; 냠; ) HANGUL SYLLABLE NYAM
+B0E1;B0E1;1102 1163 11B8;B0E1;1102 1163 11B8; # (냡; 냡; 냡; 냡; 냡; ) HANGUL SYLLABLE NYAB
+B0E2;B0E2;1102 1163 11B9;B0E2;1102 1163 11B9; # (냢; 냢; 냢; 냢; 냢; ) HANGUL SYLLABLE NYABS
+B0E3;B0E3;1102 1163 11BA;B0E3;1102 1163 11BA; # (냣; 냣; 냣; 냣; 냣; ) HANGUL SYLLABLE NYAS
+B0E4;B0E4;1102 1163 11BB;B0E4;1102 1163 11BB; # (냤; 냤; 냤; 냤; 냤; ) HANGUL SYLLABLE NYASS
+B0E5;B0E5;1102 1163 11BC;B0E5;1102 1163 11BC; # (냥; 냥; 냥; 냥; 냥; ) HANGUL SYLLABLE NYANG
+B0E6;B0E6;1102 1163 11BD;B0E6;1102 1163 11BD; # (냦; 냦; 냦; 냦; 냦; ) HANGUL SYLLABLE NYAJ
+B0E7;B0E7;1102 1163 11BE;B0E7;1102 1163 11BE; # (냧; 냧; 냧; 냧; 냧; ) HANGUL SYLLABLE NYAC
+B0E8;B0E8;1102 1163 11BF;B0E8;1102 1163 11BF; # (냨; 냨; 냨; 냨; 냨; ) HANGUL SYLLABLE NYAK
+B0E9;B0E9;1102 1163 11C0;B0E9;1102 1163 11C0; # (냩; 냩; 냩; 냩; 냩; ) HANGUL SYLLABLE NYAT
+B0EA;B0EA;1102 1163 11C1;B0EA;1102 1163 11C1; # (냪; 냪; 냪; 냪; 냪; ) HANGUL SYLLABLE NYAP
+B0EB;B0EB;1102 1163 11C2;B0EB;1102 1163 11C2; # (냫; 냫; 냫; 냫; 냫; ) HANGUL SYLLABLE NYAH
+B0EC;B0EC;1102 1164;B0EC;1102 1164; # (냬; 냬; 냬; 냬; 냬; ) HANGUL SYLLABLE NYAE
+B0ED;B0ED;1102 1164 11A8;B0ED;1102 1164 11A8; # (냭; 냭; 냭; 냭; 냭; ) HANGUL SYLLABLE NYAEG
+B0EE;B0EE;1102 1164 11A9;B0EE;1102 1164 11A9; # (냮; 냮; 냮; 냮; 냮; ) HANGUL SYLLABLE NYAEGG
+B0EF;B0EF;1102 1164 11AA;B0EF;1102 1164 11AA; # (냯; 냯; 냯; 냯; 냯; ) HANGUL SYLLABLE NYAEGS
+B0F0;B0F0;1102 1164 11AB;B0F0;1102 1164 11AB; # (냰; 냰; 냰; 냰; 냰; ) HANGUL SYLLABLE NYAEN
+B0F1;B0F1;1102 1164 11AC;B0F1;1102 1164 11AC; # (냱; 냱; 냱; 냱; 냱; ) HANGUL SYLLABLE NYAENJ
+B0F2;B0F2;1102 1164 11AD;B0F2;1102 1164 11AD; # (냲; 냲; 냲; 냲; 냲; ) HANGUL SYLLABLE NYAENH
+B0F3;B0F3;1102 1164 11AE;B0F3;1102 1164 11AE; # (냳; 냳; 냳; 냳; 냳; ) HANGUL SYLLABLE NYAED
+B0F4;B0F4;1102 1164 11AF;B0F4;1102 1164 11AF; # (냴; 냴; 냴; 냴; 냴; ) HANGUL SYLLABLE NYAEL
+B0F5;B0F5;1102 1164 11B0;B0F5;1102 1164 11B0; # (냵; 냵; 냵; 냵; 냵; ) HANGUL SYLLABLE NYAELG
+B0F6;B0F6;1102 1164 11B1;B0F6;1102 1164 11B1; # (냶; 냶; 냶; 냶; 냶; ) HANGUL SYLLABLE NYAELM
+B0F7;B0F7;1102 1164 11B2;B0F7;1102 1164 11B2; # (냷; 냷; 냷; 냷; 냷; ) HANGUL SYLLABLE NYAELB
+B0F8;B0F8;1102 1164 11B3;B0F8;1102 1164 11B3; # (냸; 냸; 냸; 냸; 냸; ) HANGUL SYLLABLE NYAELS
+B0F9;B0F9;1102 1164 11B4;B0F9;1102 1164 11B4; # (냹; 냹; 냹; 냹; 냹; ) HANGUL SYLLABLE NYAELT
+B0FA;B0FA;1102 1164 11B5;B0FA;1102 1164 11B5; # (냺; 냺; 냺; 냺; 냺; ) HANGUL SYLLABLE NYAELP
+B0FB;B0FB;1102 1164 11B6;B0FB;1102 1164 11B6; # (냻; 냻; 냻; 냻; 냻; ) HANGUL SYLLABLE NYAELH
+B0FC;B0FC;1102 1164 11B7;B0FC;1102 1164 11B7; # (냼; 냼; 냼; 냼; 냼; ) HANGUL SYLLABLE NYAEM
+B0FD;B0FD;1102 1164 11B8;B0FD;1102 1164 11B8; # (냽; 냽; 냽; 냽; 냽; ) HANGUL SYLLABLE NYAEB
+B0FE;B0FE;1102 1164 11B9;B0FE;1102 1164 11B9; # (냾; 냾; 냾; 냾; 냾; ) HANGUL SYLLABLE NYAEBS
+B0FF;B0FF;1102 1164 11BA;B0FF;1102 1164 11BA; # (냿; 냿; 냿; 냿; 냿; ) HANGUL SYLLABLE NYAES
+B100;B100;1102 1164 11BB;B100;1102 1164 11BB; # (넀; 넀; 넀; 넀; 넀; ) HANGUL SYLLABLE NYAESS
+B101;B101;1102 1164 11BC;B101;1102 1164 11BC; # (넁; 넁; 넁; 넁; 넁; ) HANGUL SYLLABLE NYAENG
+B102;B102;1102 1164 11BD;B102;1102 1164 11BD; # (넂; 넂; 넂; 넂; 넂; ) HANGUL SYLLABLE NYAEJ
+B103;B103;1102 1164 11BE;B103;1102 1164 11BE; # (넃; 넃; 넃; 넃; 넃; ) HANGUL SYLLABLE NYAEC
+B104;B104;1102 1164 11BF;B104;1102 1164 11BF; # (넄; 넄; 넄; 넄; 넄; ) HANGUL SYLLABLE NYAEK
+B105;B105;1102 1164 11C0;B105;1102 1164 11C0; # (넅; 넅; 넅; 넅; 넅; ) HANGUL SYLLABLE NYAET
+B106;B106;1102 1164 11C1;B106;1102 1164 11C1; # (넆; 넆; 넆; 넆; 넆; ) HANGUL SYLLABLE NYAEP
+B107;B107;1102 1164 11C2;B107;1102 1164 11C2; # (넇; 넇; 넇; 넇; 넇; ) HANGUL SYLLABLE NYAEH
+B108;B108;1102 1165;B108;1102 1165; # (너; 너; 너; 너; 너; ) HANGUL SYLLABLE NEO
+B109;B109;1102 1165 11A8;B109;1102 1165 11A8; # (넉; 넉; 넉; 넉; 넉; ) HANGUL SYLLABLE NEOG
+B10A;B10A;1102 1165 11A9;B10A;1102 1165 11A9; # (넊; 넊; 넊; 넊; 넊; ) HANGUL SYLLABLE NEOGG
+B10B;B10B;1102 1165 11AA;B10B;1102 1165 11AA; # (넋; 넋; 넋; 넋; 넋; ) HANGUL SYLLABLE NEOGS
+B10C;B10C;1102 1165 11AB;B10C;1102 1165 11AB; # (넌; 넌; 넌; 넌; 넌; ) HANGUL SYLLABLE NEON
+B10D;B10D;1102 1165 11AC;B10D;1102 1165 11AC; # (넍; 넍; 넍; 넍; 넍; ) HANGUL SYLLABLE NEONJ
+B10E;B10E;1102 1165 11AD;B10E;1102 1165 11AD; # (넎; 넎; 넎; 넎; 넎; ) HANGUL SYLLABLE NEONH
+B10F;B10F;1102 1165 11AE;B10F;1102 1165 11AE; # (넏; 넏; 넏; 넏; 넏; ) HANGUL SYLLABLE NEOD
+B110;B110;1102 1165 11AF;B110;1102 1165 11AF; # (널; 널; 널; 널; 널; ) HANGUL SYLLABLE NEOL
+B111;B111;1102 1165 11B0;B111;1102 1165 11B0; # (넑; 넑; 넑; 넑; 넑; ) HANGUL SYLLABLE NEOLG
+B112;B112;1102 1165 11B1;B112;1102 1165 11B1; # (넒; 넒; 넒; 넒; 넒; ) HANGUL SYLLABLE NEOLM
+B113;B113;1102 1165 11B2;B113;1102 1165 11B2; # (넓; 넓; 넓; 넓; 넓; ) HANGUL SYLLABLE NEOLB
+B114;B114;1102 1165 11B3;B114;1102 1165 11B3; # (넔; 넔; 넔; 넔; 넔; ) HANGUL SYLLABLE NEOLS
+B115;B115;1102 1165 11B4;B115;1102 1165 11B4; # (넕; 넕; 넕; 넕; 넕; ) HANGUL SYLLABLE NEOLT
+B116;B116;1102 1165 11B5;B116;1102 1165 11B5; # (넖; 넖; 넖; 넖; 넖; ) HANGUL SYLLABLE NEOLP
+B117;B117;1102 1165 11B6;B117;1102 1165 11B6; # (넗; 넗; 넗; 넗; 넗; ) HANGUL SYLLABLE NEOLH
+B118;B118;1102 1165 11B7;B118;1102 1165 11B7; # (넘; 넘; 넘; 넘; 넘; ) HANGUL SYLLABLE NEOM
+B119;B119;1102 1165 11B8;B119;1102 1165 11B8; # (넙; 넙; 넙; 넙; 넙; ) HANGUL SYLLABLE NEOB
+B11A;B11A;1102 1165 11B9;B11A;1102 1165 11B9; # (넚; 넚; 넚; 넚; 넚; ) HANGUL SYLLABLE NEOBS
+B11B;B11B;1102 1165 11BA;B11B;1102 1165 11BA; # (넛; 넛; 넛; 넛; 넛; ) HANGUL SYLLABLE NEOS
+B11C;B11C;1102 1165 11BB;B11C;1102 1165 11BB; # (넜; 넜; 넜; 넜; 넜; ) HANGUL SYLLABLE NEOSS
+B11D;B11D;1102 1165 11BC;B11D;1102 1165 11BC; # (넝; 넝; 넝; 넝; 넝; ) HANGUL SYLLABLE NEONG
+B11E;B11E;1102 1165 11BD;B11E;1102 1165 11BD; # (넞; 넞; 넞; 넞; 넞; ) HANGUL SYLLABLE NEOJ
+B11F;B11F;1102 1165 11BE;B11F;1102 1165 11BE; # (넟; 넟; 넟; 넟; 넟; ) HANGUL SYLLABLE NEOC
+B120;B120;1102 1165 11BF;B120;1102 1165 11BF; # (넠; 넠; 넠; 넠; 넠; ) HANGUL SYLLABLE NEOK
+B121;B121;1102 1165 11C0;B121;1102 1165 11C0; # (넡; 넡; 넡; 넡; 넡; ) HANGUL SYLLABLE NEOT
+B122;B122;1102 1165 11C1;B122;1102 1165 11C1; # (넢; 넢; 넢; 넢; 넢; ) HANGUL SYLLABLE NEOP
+B123;B123;1102 1165 11C2;B123;1102 1165 11C2; # (넣; 넣; 넣; 넣; 넣; ) HANGUL SYLLABLE NEOH
+B124;B124;1102 1166;B124;1102 1166; # (네; 네; 네; 네; 네; ) HANGUL SYLLABLE NE
+B125;B125;1102 1166 11A8;B125;1102 1166 11A8; # (넥; 넥; 넥; 넥; 넥; ) HANGUL SYLLABLE NEG
+B126;B126;1102 1166 11A9;B126;1102 1166 11A9; # (넦; 넦; 넦; 넦; 넦; ) HANGUL SYLLABLE NEGG
+B127;B127;1102 1166 11AA;B127;1102 1166 11AA; # (넧; 넧; 넧; 넧; 넧; ) HANGUL SYLLABLE NEGS
+B128;B128;1102 1166 11AB;B128;1102 1166 11AB; # (넨; 넨; 넨; 넨; 넨; ) HANGUL SYLLABLE NEN
+B129;B129;1102 1166 11AC;B129;1102 1166 11AC; # (넩; 넩; 넩; 넩; 넩; ) HANGUL SYLLABLE NENJ
+B12A;B12A;1102 1166 11AD;B12A;1102 1166 11AD; # (넪; 넪; 넪; 넪; 넪; ) HANGUL SYLLABLE NENH
+B12B;B12B;1102 1166 11AE;B12B;1102 1166 11AE; # (넫; 넫; 넫; 넫; 넫; ) HANGUL SYLLABLE NED
+B12C;B12C;1102 1166 11AF;B12C;1102 1166 11AF; # (넬; 넬; 넬; 넬; 넬; ) HANGUL SYLLABLE NEL
+B12D;B12D;1102 1166 11B0;B12D;1102 1166 11B0; # (넭; 넭; 넭; 넭; 넭; ) HANGUL SYLLABLE NELG
+B12E;B12E;1102 1166 11B1;B12E;1102 1166 11B1; # (넮; 넮; 넮; 넮; 넮; ) HANGUL SYLLABLE NELM
+B12F;B12F;1102 1166 11B2;B12F;1102 1166 11B2; # (넯; 넯; 넯; 넯; 넯; ) HANGUL SYLLABLE NELB
+B130;B130;1102 1166 11B3;B130;1102 1166 11B3; # (넰; 넰; 넰; 넰; 넰; ) HANGUL SYLLABLE NELS
+B131;B131;1102 1166 11B4;B131;1102 1166 11B4; # (넱; 넱; 넱; 넱; 넱; ) HANGUL SYLLABLE NELT
+B132;B132;1102 1166 11B5;B132;1102 1166 11B5; # (넲; 넲; 넲; 넲; 넲; ) HANGUL SYLLABLE NELP
+B133;B133;1102 1166 11B6;B133;1102 1166 11B6; # (넳; 넳; 넳; 넳; 넳; ) HANGUL SYLLABLE NELH
+B134;B134;1102 1166 11B7;B134;1102 1166 11B7; # (넴; 넴; 넴; 넴; 넴; ) HANGUL SYLLABLE NEM
+B135;B135;1102 1166 11B8;B135;1102 1166 11B8; # (넵; 넵; 넵; 넵; 넵; ) HANGUL SYLLABLE NEB
+B136;B136;1102 1166 11B9;B136;1102 1166 11B9; # (넶; 넶; 넶; 넶; 넶; ) HANGUL SYLLABLE NEBS
+B137;B137;1102 1166 11BA;B137;1102 1166 11BA; # (넷; 넷; 넷; 넷; 넷; ) HANGUL SYLLABLE NES
+B138;B138;1102 1166 11BB;B138;1102 1166 11BB; # (넸; 넸; 넸; 넸; 넸; ) HANGUL SYLLABLE NESS
+B139;B139;1102 1166 11BC;B139;1102 1166 11BC; # (넹; 넹; 넹; 넹; 넹; ) HANGUL SYLLABLE NENG
+B13A;B13A;1102 1166 11BD;B13A;1102 1166 11BD; # (넺; 넺; 넺; 넺; 넺; ) HANGUL SYLLABLE NEJ
+B13B;B13B;1102 1166 11BE;B13B;1102 1166 11BE; # (넻; 넻; 넻; 넻; 넻; ) HANGUL SYLLABLE NEC
+B13C;B13C;1102 1166 11BF;B13C;1102 1166 11BF; # (넼; 넼; 넼; 넼; 넼; ) HANGUL SYLLABLE NEK
+B13D;B13D;1102 1166 11C0;B13D;1102 1166 11C0; # (넽; 넽; 넽; 넽; 넽; ) HANGUL SYLLABLE NET
+B13E;B13E;1102 1166 11C1;B13E;1102 1166 11C1; # (넾; 넾; 넾; 넾; 넾; ) HANGUL SYLLABLE NEP
+B13F;B13F;1102 1166 11C2;B13F;1102 1166 11C2; # (넿; 넿; 넿; 넿; 넿; ) HANGUL SYLLABLE NEH
+B140;B140;1102 1167;B140;1102 1167; # (녀; 녀; 녀; 녀; 녀; ) HANGUL SYLLABLE NYEO
+B141;B141;1102 1167 11A8;B141;1102 1167 11A8; # (녁; 녁; 녁; 녁; 녁; ) HANGUL SYLLABLE NYEOG
+B142;B142;1102 1167 11A9;B142;1102 1167 11A9; # (녂; 녂; 녂; 녂; 녂; ) HANGUL SYLLABLE NYEOGG
+B143;B143;1102 1167 11AA;B143;1102 1167 11AA; # (녃; 녃; 녃; 녃; 녃; ) HANGUL SYLLABLE NYEOGS
+B144;B144;1102 1167 11AB;B144;1102 1167 11AB; # (년; 년; 년; 년; 년; ) HANGUL SYLLABLE NYEON
+B145;B145;1102 1167 11AC;B145;1102 1167 11AC; # (녅; 녅; 녅; 녅; 녅; ) HANGUL SYLLABLE NYEONJ
+B146;B146;1102 1167 11AD;B146;1102 1167 11AD; # (녆; 녆; 녆; 녆; 녆; ) HANGUL SYLLABLE NYEONH
+B147;B147;1102 1167 11AE;B147;1102 1167 11AE; # (녇; 녇; 녇; 녇; 녇; ) HANGUL SYLLABLE NYEOD
+B148;B148;1102 1167 11AF;B148;1102 1167 11AF; # (녈; 녈; 녈; 녈; 녈; ) HANGUL SYLLABLE NYEOL
+B149;B149;1102 1167 11B0;B149;1102 1167 11B0; # (녉; 녉; 녉; 녉; 녉; ) HANGUL SYLLABLE NYEOLG
+B14A;B14A;1102 1167 11B1;B14A;1102 1167 11B1; # (녊; 녊; 녊; 녊; 녊; ) HANGUL SYLLABLE NYEOLM
+B14B;B14B;1102 1167 11B2;B14B;1102 1167 11B2; # (녋; 녋; 녋; 녋; 녋; ) HANGUL SYLLABLE NYEOLB
+B14C;B14C;1102 1167 11B3;B14C;1102 1167 11B3; # (녌; 녌; 녌; 녌; 녌; ) HANGUL SYLLABLE NYEOLS
+B14D;B14D;1102 1167 11B4;B14D;1102 1167 11B4; # (녍; 녍; 녍; 녍; 녍; ) HANGUL SYLLABLE NYEOLT
+B14E;B14E;1102 1167 11B5;B14E;1102 1167 11B5; # (녎; 녎; 녎; 녎; 녎; ) HANGUL SYLLABLE NYEOLP
+B14F;B14F;1102 1167 11B6;B14F;1102 1167 11B6; # (녏; 녏; 녏; 녏; 녏; ) HANGUL SYLLABLE NYEOLH
+B150;B150;1102 1167 11B7;B150;1102 1167 11B7; # (념; 념; 념; 념; 념; ) HANGUL SYLLABLE NYEOM
+B151;B151;1102 1167 11B8;B151;1102 1167 11B8; # (녑; 녑; 녑; 녑; 녑; ) HANGUL SYLLABLE NYEOB
+B152;B152;1102 1167 11B9;B152;1102 1167 11B9; # (녒; 녒; 녒; 녒; 녒; ) HANGUL SYLLABLE NYEOBS
+B153;B153;1102 1167 11BA;B153;1102 1167 11BA; # (녓; 녓; 녓; 녓; 녓; ) HANGUL SYLLABLE NYEOS
+B154;B154;1102 1167 11BB;B154;1102 1167 11BB; # (녔; 녔; 녔; 녔; 녔; ) HANGUL SYLLABLE NYEOSS
+B155;B155;1102 1167 11BC;B155;1102 1167 11BC; # (녕; 녕; 녕; 녕; 녕; ) HANGUL SYLLABLE NYEONG
+B156;B156;1102 1167 11BD;B156;1102 1167 11BD; # (녖; 녖; 녖; 녖; 녖; ) HANGUL SYLLABLE NYEOJ
+B157;B157;1102 1167 11BE;B157;1102 1167 11BE; # (녗; 녗; 녗; 녗; 녗; ) HANGUL SYLLABLE NYEOC
+B158;B158;1102 1167 11BF;B158;1102 1167 11BF; # (녘; 녘; 녘; 녘; 녘; ) HANGUL SYLLABLE NYEOK
+B159;B159;1102 1167 11C0;B159;1102 1167 11C0; # (녙; 녙; 녙; 녙; 녙; ) HANGUL SYLLABLE NYEOT
+B15A;B15A;1102 1167 11C1;B15A;1102 1167 11C1; # (녚; 녚; 녚; 녚; 녚; ) HANGUL SYLLABLE NYEOP
+B15B;B15B;1102 1167 11C2;B15B;1102 1167 11C2; # (녛; 녛; 녛; 녛; 녛; ) HANGUL SYLLABLE NYEOH
+B15C;B15C;1102 1168;B15C;1102 1168; # (녜; 녜; 녜; 녜; 녜; ) HANGUL SYLLABLE NYE
+B15D;B15D;1102 1168 11A8;B15D;1102 1168 11A8; # (녝; 녝; 녝; 녝; 녝; ) HANGUL SYLLABLE NYEG
+B15E;B15E;1102 1168 11A9;B15E;1102 1168 11A9; # (녞; 녞; 녞; 녞; 녞; ) HANGUL SYLLABLE NYEGG
+B15F;B15F;1102 1168 11AA;B15F;1102 1168 11AA; # (녟; 녟; 녟; 녟; 녟; ) HANGUL SYLLABLE NYEGS
+B160;B160;1102 1168 11AB;B160;1102 1168 11AB; # (녠; 녠; 녠; 녠; 녠; ) HANGUL SYLLABLE NYEN
+B161;B161;1102 1168 11AC;B161;1102 1168 11AC; # (녡; 녡; 녡; 녡; 녡; ) HANGUL SYLLABLE NYENJ
+B162;B162;1102 1168 11AD;B162;1102 1168 11AD; # (녢; 녢; 녢; 녢; 녢; ) HANGUL SYLLABLE NYENH
+B163;B163;1102 1168 11AE;B163;1102 1168 11AE; # (녣; 녣; 녣; 녣; 녣; ) HANGUL SYLLABLE NYED
+B164;B164;1102 1168 11AF;B164;1102 1168 11AF; # (녤; 녤; 녤; 녤; 녤; ) HANGUL SYLLABLE NYEL
+B165;B165;1102 1168 11B0;B165;1102 1168 11B0; # (녥; 녥; 녥; 녥; 녥; ) HANGUL SYLLABLE NYELG
+B166;B166;1102 1168 11B1;B166;1102 1168 11B1; # (녦; 녦; 녦; 녦; 녦; ) HANGUL SYLLABLE NYELM
+B167;B167;1102 1168 11B2;B167;1102 1168 11B2; # (녧; 녧; 녧; 녧; 녧; ) HANGUL SYLLABLE NYELB
+B168;B168;1102 1168 11B3;B168;1102 1168 11B3; # (녨; 녨; 녨; 녨; 녨; ) HANGUL SYLLABLE NYELS
+B169;B169;1102 1168 11B4;B169;1102 1168 11B4; # (녩; 녩; 녩; 녩; 녩; ) HANGUL SYLLABLE NYELT
+B16A;B16A;1102 1168 11B5;B16A;1102 1168 11B5; # (녪; 녪; 녪; 녪; 녪; ) HANGUL SYLLABLE NYELP
+B16B;B16B;1102 1168 11B6;B16B;1102 1168 11B6; # (녫; 녫; 녫; 녫; 녫; ) HANGUL SYLLABLE NYELH
+B16C;B16C;1102 1168 11B7;B16C;1102 1168 11B7; # (녬; 녬; 녬; 녬; 녬; ) HANGUL SYLLABLE NYEM
+B16D;B16D;1102 1168 11B8;B16D;1102 1168 11B8; # (녭; 녭; 녭; 녭; 녭; ) HANGUL SYLLABLE NYEB
+B16E;B16E;1102 1168 11B9;B16E;1102 1168 11B9; # (녮; 녮; 녮; 녮; 녮; ) HANGUL SYLLABLE NYEBS
+B16F;B16F;1102 1168 11BA;B16F;1102 1168 11BA; # (녯; 녯; 녯; 녯; 녯; ) HANGUL SYLLABLE NYES
+B170;B170;1102 1168 11BB;B170;1102 1168 11BB; # (녰; 녰; 녰; 녰; 녰; ) HANGUL SYLLABLE NYESS
+B171;B171;1102 1168 11BC;B171;1102 1168 11BC; # (녱; 녱; 녱; 녱; 녱; ) HANGUL SYLLABLE NYENG
+B172;B172;1102 1168 11BD;B172;1102 1168 11BD; # (녲; 녲; 녲; 녲; 녲; ) HANGUL SYLLABLE NYEJ
+B173;B173;1102 1168 11BE;B173;1102 1168 11BE; # (녳; 녳; 녳; 녳; 녳; ) HANGUL SYLLABLE NYEC
+B174;B174;1102 1168 11BF;B174;1102 1168 11BF; # (녴; 녴; 녴; 녴; 녴; ) HANGUL SYLLABLE NYEK
+B175;B175;1102 1168 11C0;B175;1102 1168 11C0; # (녵; 녵; 녵; 녵; 녵; ) HANGUL SYLLABLE NYET
+B176;B176;1102 1168 11C1;B176;1102 1168 11C1; # (녶; 녶; 녶; 녶; 녶; ) HANGUL SYLLABLE NYEP
+B177;B177;1102 1168 11C2;B177;1102 1168 11C2; # (녷; 녷; 녷; 녷; 녷; ) HANGUL SYLLABLE NYEH
+B178;B178;1102 1169;B178;1102 1169; # (노; 노; 노; 노; 노; ) HANGUL SYLLABLE NO
+B179;B179;1102 1169 11A8;B179;1102 1169 11A8; # (녹; 녹; 녹; 녹; 녹; ) HANGUL SYLLABLE NOG
+B17A;B17A;1102 1169 11A9;B17A;1102 1169 11A9; # (녺; 녺; 녺; 녺; 녺; ) HANGUL SYLLABLE NOGG
+B17B;B17B;1102 1169 11AA;B17B;1102 1169 11AA; # (녻; 녻; 녻; 녻; 녻; ) HANGUL SYLLABLE NOGS
+B17C;B17C;1102 1169 11AB;B17C;1102 1169 11AB; # (논; 논; 논; 논; 논; ) HANGUL SYLLABLE NON
+B17D;B17D;1102 1169 11AC;B17D;1102 1169 11AC; # (녽; 녽; 녽; 녽; 녽; ) HANGUL SYLLABLE NONJ
+B17E;B17E;1102 1169 11AD;B17E;1102 1169 11AD; # (녾; 녾; 녾; 녾; 녾; ) HANGUL SYLLABLE NONH
+B17F;B17F;1102 1169 11AE;B17F;1102 1169 11AE; # (녿; 녿; 녿; 녿; 녿; ) HANGUL SYLLABLE NOD
+B180;B180;1102 1169 11AF;B180;1102 1169 11AF; # (놀; 놀; 놀; 놀; 놀; ) HANGUL SYLLABLE NOL
+B181;B181;1102 1169 11B0;B181;1102 1169 11B0; # (놁; 놁; 놁; 놁; 놁; ) HANGUL SYLLABLE NOLG
+B182;B182;1102 1169 11B1;B182;1102 1169 11B1; # (놂; 놂; 놂; 놂; 놂; ) HANGUL SYLLABLE NOLM
+B183;B183;1102 1169 11B2;B183;1102 1169 11B2; # (놃; 놃; 놃; 놃; 놃; ) HANGUL SYLLABLE NOLB
+B184;B184;1102 1169 11B3;B184;1102 1169 11B3; # (놄; 놄; 놄; 놄; 놄; ) HANGUL SYLLABLE NOLS
+B185;B185;1102 1169 11B4;B185;1102 1169 11B4; # (놅; 놅; 놅; 놅; 놅; ) HANGUL SYLLABLE NOLT
+B186;B186;1102 1169 11B5;B186;1102 1169 11B5; # (놆; 놆; 놆; 놆; 놆; ) HANGUL SYLLABLE NOLP
+B187;B187;1102 1169 11B6;B187;1102 1169 11B6; # (놇; 놇; 놇; 놇; 놇; ) HANGUL SYLLABLE NOLH
+B188;B188;1102 1169 11B7;B188;1102 1169 11B7; # (놈; 놈; 놈; 놈; 놈; ) HANGUL SYLLABLE NOM
+B189;B189;1102 1169 11B8;B189;1102 1169 11B8; # (놉; 놉; 놉; 놉; 놉; ) HANGUL SYLLABLE NOB
+B18A;B18A;1102 1169 11B9;B18A;1102 1169 11B9; # (놊; 놊; 놊; 놊; 놊; ) HANGUL SYLLABLE NOBS
+B18B;B18B;1102 1169 11BA;B18B;1102 1169 11BA; # (놋; 놋; 놋; 놋; 놋; ) HANGUL SYLLABLE NOS
+B18C;B18C;1102 1169 11BB;B18C;1102 1169 11BB; # (놌; 놌; 놌; 놌; 놌; ) HANGUL SYLLABLE NOSS
+B18D;B18D;1102 1169 11BC;B18D;1102 1169 11BC; # (농; 농; 농; 농; 농; ) HANGUL SYLLABLE NONG
+B18E;B18E;1102 1169 11BD;B18E;1102 1169 11BD; # (놎; 놎; 놎; 놎; 놎; ) HANGUL SYLLABLE NOJ
+B18F;B18F;1102 1169 11BE;B18F;1102 1169 11BE; # (놏; 놏; 놏; 놏; 놏; ) HANGUL SYLLABLE NOC
+B190;B190;1102 1169 11BF;B190;1102 1169 11BF; # (놐; 놐; 놐; 놐; 놐; ) HANGUL SYLLABLE NOK
+B191;B191;1102 1169 11C0;B191;1102 1169 11C0; # (놑; 놑; 놑; 놑; 놑; ) HANGUL SYLLABLE NOT
+B192;B192;1102 1169 11C1;B192;1102 1169 11C1; # (높; 높; 높; 높; 높; ) HANGUL SYLLABLE NOP
+B193;B193;1102 1169 11C2;B193;1102 1169 11C2; # (놓; 놓; 놓; 놓; 놓; ) HANGUL SYLLABLE NOH
+B194;B194;1102 116A;B194;1102 116A; # (놔; 놔; 놔; 놔; 놔; ) HANGUL SYLLABLE NWA
+B195;B195;1102 116A 11A8;B195;1102 116A 11A8; # (놕; 놕; 놕; 놕; 놕; ) HANGUL SYLLABLE NWAG
+B196;B196;1102 116A 11A9;B196;1102 116A 11A9; # (놖; 놖; 놖; 놖; 놖; ) HANGUL SYLLABLE NWAGG
+B197;B197;1102 116A 11AA;B197;1102 116A 11AA; # (놗; 놗; 놗; 놗; 놗; ) HANGUL SYLLABLE NWAGS
+B198;B198;1102 116A 11AB;B198;1102 116A 11AB; # (놘; 놘; 놘; 놘; 놘; ) HANGUL SYLLABLE NWAN
+B199;B199;1102 116A 11AC;B199;1102 116A 11AC; # (놙; 놙; 놙; 놙; 놙; ) HANGUL SYLLABLE NWANJ
+B19A;B19A;1102 116A 11AD;B19A;1102 116A 11AD; # (놚; 놚; 놚; 놚; 놚; ) HANGUL SYLLABLE NWANH
+B19B;B19B;1102 116A 11AE;B19B;1102 116A 11AE; # (놛; 놛; 놛; 놛; 놛; ) HANGUL SYLLABLE NWAD
+B19C;B19C;1102 116A 11AF;B19C;1102 116A 11AF; # (놜; 놜; 놜; 놜; 놜; ) HANGUL SYLLABLE NWAL
+B19D;B19D;1102 116A 11B0;B19D;1102 116A 11B0; # (놝; 놝; 놝; 놝; 놝; ) HANGUL SYLLABLE NWALG
+B19E;B19E;1102 116A 11B1;B19E;1102 116A 11B1; # (놞; 놞; 놞; 놞; 놞; ) HANGUL SYLLABLE NWALM
+B19F;B19F;1102 116A 11B2;B19F;1102 116A 11B2; # (놟; 놟; 놟; 놟; 놟; ) HANGUL SYLLABLE NWALB
+B1A0;B1A0;1102 116A 11B3;B1A0;1102 116A 11B3; # (놠; 놠; 놠; 놠; 놠; ) HANGUL SYLLABLE NWALS
+B1A1;B1A1;1102 116A 11B4;B1A1;1102 116A 11B4; # (놡; 놡; 놡; 놡; 놡; ) HANGUL SYLLABLE NWALT
+B1A2;B1A2;1102 116A 11B5;B1A2;1102 116A 11B5; # (놢; 놢; 놢; 놢; 놢; ) HANGUL SYLLABLE NWALP
+B1A3;B1A3;1102 116A 11B6;B1A3;1102 116A 11B6; # (놣; 놣; 놣; 놣; 놣; ) HANGUL SYLLABLE NWALH
+B1A4;B1A4;1102 116A 11B7;B1A4;1102 116A 11B7; # (놤; 놤; 놤; 놤; 놤; ) HANGUL SYLLABLE NWAM
+B1A5;B1A5;1102 116A 11B8;B1A5;1102 116A 11B8; # (놥; 놥; 놥; 놥; 놥; ) HANGUL SYLLABLE NWAB
+B1A6;B1A6;1102 116A 11B9;B1A6;1102 116A 11B9; # (놦; 놦; 놦; 놦; 놦; ) HANGUL SYLLABLE NWABS
+B1A7;B1A7;1102 116A 11BA;B1A7;1102 116A 11BA; # (놧; 놧; 놧; 놧; 놧; ) HANGUL SYLLABLE NWAS
+B1A8;B1A8;1102 116A 11BB;B1A8;1102 116A 11BB; # (놨; 놨; 놨; 놨; 놨; ) HANGUL SYLLABLE NWASS
+B1A9;B1A9;1102 116A 11BC;B1A9;1102 116A 11BC; # (놩; 놩; 놩; 놩; 놩; ) HANGUL SYLLABLE NWANG
+B1AA;B1AA;1102 116A 11BD;B1AA;1102 116A 11BD; # (놪; 놪; 놪; 놪; 놪; ) HANGUL SYLLABLE NWAJ
+B1AB;B1AB;1102 116A 11BE;B1AB;1102 116A 11BE; # (놫; 놫; 놫; 놫; 놫; ) HANGUL SYLLABLE NWAC
+B1AC;B1AC;1102 116A 11BF;B1AC;1102 116A 11BF; # (놬; 놬; 놬; 놬; 놬; ) HANGUL SYLLABLE NWAK
+B1AD;B1AD;1102 116A 11C0;B1AD;1102 116A 11C0; # (놭; 놭; 놭; 놭; 놭; ) HANGUL SYLLABLE NWAT
+B1AE;B1AE;1102 116A 11C1;B1AE;1102 116A 11C1; # (놮; 놮; 놮; 놮; 놮; ) HANGUL SYLLABLE NWAP
+B1AF;B1AF;1102 116A 11C2;B1AF;1102 116A 11C2; # (놯; 놯; 놯; 놯; 놯; ) HANGUL SYLLABLE NWAH
+B1B0;B1B0;1102 116B;B1B0;1102 116B; # (놰; 놰; 놰; 놰; 놰; ) HANGUL SYLLABLE NWAE
+B1B1;B1B1;1102 116B 11A8;B1B1;1102 116B 11A8; # (놱; 놱; 놱; 놱; 놱; ) HANGUL SYLLABLE NWAEG
+B1B2;B1B2;1102 116B 11A9;B1B2;1102 116B 11A9; # (놲; 놲; 놲; 놲; 놲; ) HANGUL SYLLABLE NWAEGG
+B1B3;B1B3;1102 116B 11AA;B1B3;1102 116B 11AA; # (놳; 놳; 놳; 놳; 놳; ) HANGUL SYLLABLE NWAEGS
+B1B4;B1B4;1102 116B 11AB;B1B4;1102 116B 11AB; # (놴; 놴; 놴; 놴; 놴; ) HANGUL SYLLABLE NWAEN
+B1B5;B1B5;1102 116B 11AC;B1B5;1102 116B 11AC; # (놵; 놵; 놵; 놵; 놵; ) HANGUL SYLLABLE NWAENJ
+B1B6;B1B6;1102 116B 11AD;B1B6;1102 116B 11AD; # (놶; 놶; 놶; 놶; 놶; ) HANGUL SYLLABLE NWAENH
+B1B7;B1B7;1102 116B 11AE;B1B7;1102 116B 11AE; # (놷; 놷; 놷; 놷; 놷; ) HANGUL SYLLABLE NWAED
+B1B8;B1B8;1102 116B 11AF;B1B8;1102 116B 11AF; # (놸; 놸; 놸; 놸; 놸; ) HANGUL SYLLABLE NWAEL
+B1B9;B1B9;1102 116B 11B0;B1B9;1102 116B 11B0; # (놹; 놹; 놹; 놹; 놹; ) HANGUL SYLLABLE NWAELG
+B1BA;B1BA;1102 116B 11B1;B1BA;1102 116B 11B1; # (놺; 놺; 놺; 놺; 놺; ) HANGUL SYLLABLE NWAELM
+B1BB;B1BB;1102 116B 11B2;B1BB;1102 116B 11B2; # (놻; 놻; 놻; 놻; 놻; ) HANGUL SYLLABLE NWAELB
+B1BC;B1BC;1102 116B 11B3;B1BC;1102 116B 11B3; # (놼; 놼; 놼; 놼; 놼; ) HANGUL SYLLABLE NWAELS
+B1BD;B1BD;1102 116B 11B4;B1BD;1102 116B 11B4; # (놽; 놽; 놽; 놽; 놽; ) HANGUL SYLLABLE NWAELT
+B1BE;B1BE;1102 116B 11B5;B1BE;1102 116B 11B5; # (놾; 놾; 놾; 놾; 놾; ) HANGUL SYLLABLE NWAELP
+B1BF;B1BF;1102 116B 11B6;B1BF;1102 116B 11B6; # (놿; 놿; 놿; 놿; 놿; ) HANGUL SYLLABLE NWAELH
+B1C0;B1C0;1102 116B 11B7;B1C0;1102 116B 11B7; # (뇀; 뇀; 뇀; 뇀; 뇀; ) HANGUL SYLLABLE NWAEM
+B1C1;B1C1;1102 116B 11B8;B1C1;1102 116B 11B8; # (뇁; 뇁; 뇁; 뇁; 뇁; ) HANGUL SYLLABLE NWAEB
+B1C2;B1C2;1102 116B 11B9;B1C2;1102 116B 11B9; # (뇂; 뇂; 뇂; 뇂; 뇂; ) HANGUL SYLLABLE NWAEBS
+B1C3;B1C3;1102 116B 11BA;B1C3;1102 116B 11BA; # (뇃; 뇃; 뇃; 뇃; 뇃; ) HANGUL SYLLABLE NWAES
+B1C4;B1C4;1102 116B 11BB;B1C4;1102 116B 11BB; # (뇄; 뇄; 뇄; 뇄; 뇄; ) HANGUL SYLLABLE NWAESS
+B1C5;B1C5;1102 116B 11BC;B1C5;1102 116B 11BC; # (뇅; 뇅; 뇅; 뇅; 뇅; ) HANGUL SYLLABLE NWAENG
+B1C6;B1C6;1102 116B 11BD;B1C6;1102 116B 11BD; # (뇆; 뇆; 뇆; 뇆; 뇆; ) HANGUL SYLLABLE NWAEJ
+B1C7;B1C7;1102 116B 11BE;B1C7;1102 116B 11BE; # (뇇; 뇇; 뇇; 뇇; 뇇; ) HANGUL SYLLABLE NWAEC
+B1C8;B1C8;1102 116B 11BF;B1C8;1102 116B 11BF; # (뇈; 뇈; 뇈; 뇈; 뇈; ) HANGUL SYLLABLE NWAEK
+B1C9;B1C9;1102 116B 11C0;B1C9;1102 116B 11C0; # (뇉; 뇉; 뇉; 뇉; 뇉; ) HANGUL SYLLABLE NWAET
+B1CA;B1CA;1102 116B 11C1;B1CA;1102 116B 11C1; # (뇊; 뇊; 뇊; 뇊; 뇊; ) HANGUL SYLLABLE NWAEP
+B1CB;B1CB;1102 116B 11C2;B1CB;1102 116B 11C2; # (뇋; 뇋; 뇋; 뇋; 뇋; ) HANGUL SYLLABLE NWAEH
+B1CC;B1CC;1102 116C;B1CC;1102 116C; # (뇌; 뇌; 뇌; 뇌; 뇌; ) HANGUL SYLLABLE NOE
+B1CD;B1CD;1102 116C 11A8;B1CD;1102 116C 11A8; # (뇍; 뇍; 뇍; 뇍; 뇍; ) HANGUL SYLLABLE NOEG
+B1CE;B1CE;1102 116C 11A9;B1CE;1102 116C 11A9; # (뇎; 뇎; 뇎; 뇎; 뇎; ) HANGUL SYLLABLE NOEGG
+B1CF;B1CF;1102 116C 11AA;B1CF;1102 116C 11AA; # (뇏; 뇏; 뇏; 뇏; 뇏; ) HANGUL SYLLABLE NOEGS
+B1D0;B1D0;1102 116C 11AB;B1D0;1102 116C 11AB; # (뇐; 뇐; 뇐; 뇐; 뇐; ) HANGUL SYLLABLE NOEN
+B1D1;B1D1;1102 116C 11AC;B1D1;1102 116C 11AC; # (뇑; 뇑; 뇑; 뇑; 뇑; ) HANGUL SYLLABLE NOENJ
+B1D2;B1D2;1102 116C 11AD;B1D2;1102 116C 11AD; # (뇒; 뇒; 뇒; 뇒; 뇒; ) HANGUL SYLLABLE NOENH
+B1D3;B1D3;1102 116C 11AE;B1D3;1102 116C 11AE; # (뇓; 뇓; 뇓; 뇓; 뇓; ) HANGUL SYLLABLE NOED
+B1D4;B1D4;1102 116C 11AF;B1D4;1102 116C 11AF; # (뇔; 뇔; 뇔; 뇔; 뇔; ) HANGUL SYLLABLE NOEL
+B1D5;B1D5;1102 116C 11B0;B1D5;1102 116C 11B0; # (뇕; 뇕; 뇕; 뇕; 뇕; ) HANGUL SYLLABLE NOELG
+B1D6;B1D6;1102 116C 11B1;B1D6;1102 116C 11B1; # (뇖; 뇖; 뇖; 뇖; 뇖; ) HANGUL SYLLABLE NOELM
+B1D7;B1D7;1102 116C 11B2;B1D7;1102 116C 11B2; # (뇗; 뇗; 뇗; 뇗; 뇗; ) HANGUL SYLLABLE NOELB
+B1D8;B1D8;1102 116C 11B3;B1D8;1102 116C 11B3; # (뇘; 뇘; 뇘; 뇘; 뇘; ) HANGUL SYLLABLE NOELS
+B1D9;B1D9;1102 116C 11B4;B1D9;1102 116C 11B4; # (뇙; 뇙; 뇙; 뇙; 뇙; ) HANGUL SYLLABLE NOELT
+B1DA;B1DA;1102 116C 11B5;B1DA;1102 116C 11B5; # (뇚; 뇚; 뇚; 뇚; 뇚; ) HANGUL SYLLABLE NOELP
+B1DB;B1DB;1102 116C 11B6;B1DB;1102 116C 11B6; # (뇛; 뇛; 뇛; 뇛; 뇛; ) HANGUL SYLLABLE NOELH
+B1DC;B1DC;1102 116C 11B7;B1DC;1102 116C 11B7; # (뇜; 뇜; 뇜; 뇜; 뇜; ) HANGUL SYLLABLE NOEM
+B1DD;B1DD;1102 116C 11B8;B1DD;1102 116C 11B8; # (뇝; 뇝; 뇝; 뇝; 뇝; ) HANGUL SYLLABLE NOEB
+B1DE;B1DE;1102 116C 11B9;B1DE;1102 116C 11B9; # (뇞; 뇞; 뇞; 뇞; 뇞; ) HANGUL SYLLABLE NOEBS
+B1DF;B1DF;1102 116C 11BA;B1DF;1102 116C 11BA; # (뇟; 뇟; 뇟; 뇟; 뇟; ) HANGUL SYLLABLE NOES
+B1E0;B1E0;1102 116C 11BB;B1E0;1102 116C 11BB; # (뇠; 뇠; 뇠; 뇠; 뇠; ) HANGUL SYLLABLE NOESS
+B1E1;B1E1;1102 116C 11BC;B1E1;1102 116C 11BC; # (뇡; 뇡; 뇡; 뇡; 뇡; ) HANGUL SYLLABLE NOENG
+B1E2;B1E2;1102 116C 11BD;B1E2;1102 116C 11BD; # (뇢; 뇢; 뇢; 뇢; 뇢; ) HANGUL SYLLABLE NOEJ
+B1E3;B1E3;1102 116C 11BE;B1E3;1102 116C 11BE; # (뇣; 뇣; 뇣; 뇣; 뇣; ) HANGUL SYLLABLE NOEC
+B1E4;B1E4;1102 116C 11BF;B1E4;1102 116C 11BF; # (뇤; 뇤; 뇤; 뇤; 뇤; ) HANGUL SYLLABLE NOEK
+B1E5;B1E5;1102 116C 11C0;B1E5;1102 116C 11C0; # (뇥; 뇥; 뇥; 뇥; 뇥; ) HANGUL SYLLABLE NOET
+B1E6;B1E6;1102 116C 11C1;B1E6;1102 116C 11C1; # (뇦; 뇦; 뇦; 뇦; 뇦; ) HANGUL SYLLABLE NOEP
+B1E7;B1E7;1102 116C 11C2;B1E7;1102 116C 11C2; # (뇧; 뇧; 뇧; 뇧; 뇧; ) HANGUL SYLLABLE NOEH
+B1E8;B1E8;1102 116D;B1E8;1102 116D; # (뇨; 뇨; 뇨; 뇨; 뇨; ) HANGUL SYLLABLE NYO
+B1E9;B1E9;1102 116D 11A8;B1E9;1102 116D 11A8; # (뇩; 뇩; 뇩; 뇩; 뇩; ) HANGUL SYLLABLE NYOG
+B1EA;B1EA;1102 116D 11A9;B1EA;1102 116D 11A9; # (뇪; 뇪; 뇪; 뇪; 뇪; ) HANGUL SYLLABLE NYOGG
+B1EB;B1EB;1102 116D 11AA;B1EB;1102 116D 11AA; # (뇫; 뇫; 뇫; 뇫; 뇫; ) HANGUL SYLLABLE NYOGS
+B1EC;B1EC;1102 116D 11AB;B1EC;1102 116D 11AB; # (뇬; 뇬; 뇬; 뇬; 뇬; ) HANGUL SYLLABLE NYON
+B1ED;B1ED;1102 116D 11AC;B1ED;1102 116D 11AC; # (뇭; 뇭; 뇭; 뇭; 뇭; ) HANGUL SYLLABLE NYONJ
+B1EE;B1EE;1102 116D 11AD;B1EE;1102 116D 11AD; # (뇮; 뇮; 뇮; 뇮; 뇮; ) HANGUL SYLLABLE NYONH
+B1EF;B1EF;1102 116D 11AE;B1EF;1102 116D 11AE; # (뇯; 뇯; 뇯; 뇯; 뇯; ) HANGUL SYLLABLE NYOD
+B1F0;B1F0;1102 116D 11AF;B1F0;1102 116D 11AF; # (뇰; 뇰; 뇰; 뇰; 뇰; ) HANGUL SYLLABLE NYOL
+B1F1;B1F1;1102 116D 11B0;B1F1;1102 116D 11B0; # (뇱; 뇱; 뇱; 뇱; 뇱; ) HANGUL SYLLABLE NYOLG
+B1F2;B1F2;1102 116D 11B1;B1F2;1102 116D 11B1; # (뇲; 뇲; 뇲; 뇲; 뇲; ) HANGUL SYLLABLE NYOLM
+B1F3;B1F3;1102 116D 11B2;B1F3;1102 116D 11B2; # (뇳; 뇳; 뇳; 뇳; 뇳; ) HANGUL SYLLABLE NYOLB
+B1F4;B1F4;1102 116D 11B3;B1F4;1102 116D 11B3; # (뇴; 뇴; 뇴; 뇴; 뇴; ) HANGUL SYLLABLE NYOLS
+B1F5;B1F5;1102 116D 11B4;B1F5;1102 116D 11B4; # (뇵; 뇵; 뇵; 뇵; 뇵; ) HANGUL SYLLABLE NYOLT
+B1F6;B1F6;1102 116D 11B5;B1F6;1102 116D 11B5; # (뇶; 뇶; 뇶; 뇶; 뇶; ) HANGUL SYLLABLE NYOLP
+B1F7;B1F7;1102 116D 11B6;B1F7;1102 116D 11B6; # (뇷; 뇷; 뇷; 뇷; 뇷; ) HANGUL SYLLABLE NYOLH
+B1F8;B1F8;1102 116D 11B7;B1F8;1102 116D 11B7; # (뇸; 뇸; 뇸; 뇸; 뇸; ) HANGUL SYLLABLE NYOM
+B1F9;B1F9;1102 116D 11B8;B1F9;1102 116D 11B8; # (뇹; 뇹; 뇹; 뇹; 뇹; ) HANGUL SYLLABLE NYOB
+B1FA;B1FA;1102 116D 11B9;B1FA;1102 116D 11B9; # (뇺; 뇺; 뇺; 뇺; 뇺; ) HANGUL SYLLABLE NYOBS
+B1FB;B1FB;1102 116D 11BA;B1FB;1102 116D 11BA; # (뇻; 뇻; 뇻; 뇻; 뇻; ) HANGUL SYLLABLE NYOS
+B1FC;B1FC;1102 116D 11BB;B1FC;1102 116D 11BB; # (뇼; 뇼; 뇼; 뇼; 뇼; ) HANGUL SYLLABLE NYOSS
+B1FD;B1FD;1102 116D 11BC;B1FD;1102 116D 11BC; # (뇽; 뇽; 뇽; 뇽; 뇽; ) HANGUL SYLLABLE NYONG
+B1FE;B1FE;1102 116D 11BD;B1FE;1102 116D 11BD; # (뇾; 뇾; 뇾; 뇾; 뇾; ) HANGUL SYLLABLE NYOJ
+B1FF;B1FF;1102 116D 11BE;B1FF;1102 116D 11BE; # (뇿; 뇿; 뇿; 뇿; 뇿; ) HANGUL SYLLABLE NYOC
+B200;B200;1102 116D 11BF;B200;1102 116D 11BF; # (눀; 눀; 눀; 눀; 눀; ) HANGUL SYLLABLE NYOK
+B201;B201;1102 116D 11C0;B201;1102 116D 11C0; # (눁; 눁; 눁; 눁; 눁; ) HANGUL SYLLABLE NYOT
+B202;B202;1102 116D 11C1;B202;1102 116D 11C1; # (눂; 눂; 눂; 눂; 눂; ) HANGUL SYLLABLE NYOP
+B203;B203;1102 116D 11C2;B203;1102 116D 11C2; # (눃; 눃; 눃; 눃; 눃; ) HANGUL SYLLABLE NYOH
+B204;B204;1102 116E;B204;1102 116E; # (누; 누; 누; 누; 누; ) HANGUL SYLLABLE NU
+B205;B205;1102 116E 11A8;B205;1102 116E 11A8; # (눅; 눅; 눅; 눅; 눅; ) HANGUL SYLLABLE NUG
+B206;B206;1102 116E 11A9;B206;1102 116E 11A9; # (눆; 눆; 눆; 눆; 눆; ) HANGUL SYLLABLE NUGG
+B207;B207;1102 116E 11AA;B207;1102 116E 11AA; # (눇; 눇; 눇; 눇; 눇; ) HANGUL SYLLABLE NUGS
+B208;B208;1102 116E 11AB;B208;1102 116E 11AB; # (눈; 눈; 눈; 눈; 눈; ) HANGUL SYLLABLE NUN
+B209;B209;1102 116E 11AC;B209;1102 116E 11AC; # (눉; 눉; 눉; 눉; 눉; ) HANGUL SYLLABLE NUNJ
+B20A;B20A;1102 116E 11AD;B20A;1102 116E 11AD; # (눊; 눊; 눊; 눊; 눊; ) HANGUL SYLLABLE NUNH
+B20B;B20B;1102 116E 11AE;B20B;1102 116E 11AE; # (눋; 눋; 눋; 눋; 눋; ) HANGUL SYLLABLE NUD
+B20C;B20C;1102 116E 11AF;B20C;1102 116E 11AF; # (눌; 눌; 눌; 눌; 눌; ) HANGUL SYLLABLE NUL
+B20D;B20D;1102 116E 11B0;B20D;1102 116E 11B0; # (눍; 눍; 눍; 눍; 눍; ) HANGUL SYLLABLE NULG
+B20E;B20E;1102 116E 11B1;B20E;1102 116E 11B1; # (눎; 눎; 눎; 눎; 눎; ) HANGUL SYLLABLE NULM
+B20F;B20F;1102 116E 11B2;B20F;1102 116E 11B2; # (눏; 눏; 눏; 눏; 눏; ) HANGUL SYLLABLE NULB
+B210;B210;1102 116E 11B3;B210;1102 116E 11B3; # (눐; 눐; 눐; 눐; 눐; ) HANGUL SYLLABLE NULS
+B211;B211;1102 116E 11B4;B211;1102 116E 11B4; # (눑; 눑; 눑; 눑; 눑; ) HANGUL SYLLABLE NULT
+B212;B212;1102 116E 11B5;B212;1102 116E 11B5; # (눒; 눒; 눒; 눒; 눒; ) HANGUL SYLLABLE NULP
+B213;B213;1102 116E 11B6;B213;1102 116E 11B6; # (눓; 눓; 눓; 눓; 눓; ) HANGUL SYLLABLE NULH
+B214;B214;1102 116E 11B7;B214;1102 116E 11B7; # (눔; 눔; 눔; 눔; 눔; ) HANGUL SYLLABLE NUM
+B215;B215;1102 116E 11B8;B215;1102 116E 11B8; # (눕; 눕; 눕; 눕; 눕; ) HANGUL SYLLABLE NUB
+B216;B216;1102 116E 11B9;B216;1102 116E 11B9; # (눖; 눖; 눖; 눖; 눖; ) HANGUL SYLLABLE NUBS
+B217;B217;1102 116E 11BA;B217;1102 116E 11BA; # (눗; 눗; 눗; 눗; 눗; ) HANGUL SYLLABLE NUS
+B218;B218;1102 116E 11BB;B218;1102 116E 11BB; # (눘; 눘; 눘; 눘; 눘; ) HANGUL SYLLABLE NUSS
+B219;B219;1102 116E 11BC;B219;1102 116E 11BC; # (눙; 눙; 눙; 눙; 눙; ) HANGUL SYLLABLE NUNG
+B21A;B21A;1102 116E 11BD;B21A;1102 116E 11BD; # (눚; 눚; 눚; 눚; 눚; ) HANGUL SYLLABLE NUJ
+B21B;B21B;1102 116E 11BE;B21B;1102 116E 11BE; # (눛; 눛; 눛; 눛; 눛; ) HANGUL SYLLABLE NUC
+B21C;B21C;1102 116E 11BF;B21C;1102 116E 11BF; # (눜; 눜; 눜; 눜; 눜; ) HANGUL SYLLABLE NUK
+B21D;B21D;1102 116E 11C0;B21D;1102 116E 11C0; # (눝; 눝; 눝; 눝; 눝; ) HANGUL SYLLABLE NUT
+B21E;B21E;1102 116E 11C1;B21E;1102 116E 11C1; # (눞; 눞; 눞; 눞; 눞; ) HANGUL SYLLABLE NUP
+B21F;B21F;1102 116E 11C2;B21F;1102 116E 11C2; # (눟; 눟; 눟; 눟; 눟; ) HANGUL SYLLABLE NUH
+B220;B220;1102 116F;B220;1102 116F; # (눠; 눠; 눠; 눠; 눠; ) HANGUL SYLLABLE NWEO
+B221;B221;1102 116F 11A8;B221;1102 116F 11A8; # (눡; 눡; 눡; 눡; 눡; ) HANGUL SYLLABLE NWEOG
+B222;B222;1102 116F 11A9;B222;1102 116F 11A9; # (눢; 눢; 눢; 눢; 눢; ) HANGUL SYLLABLE NWEOGG
+B223;B223;1102 116F 11AA;B223;1102 116F 11AA; # (눣; 눣; 눣; 눣; 눣; ) HANGUL SYLLABLE NWEOGS
+B224;B224;1102 116F 11AB;B224;1102 116F 11AB; # (눤; 눤; 눤; 눤; 눤; ) HANGUL SYLLABLE NWEON
+B225;B225;1102 116F 11AC;B225;1102 116F 11AC; # (눥; 눥; 눥; 눥; 눥; ) HANGUL SYLLABLE NWEONJ
+B226;B226;1102 116F 11AD;B226;1102 116F 11AD; # (눦; 눦; 눦; 눦; 눦; ) HANGUL SYLLABLE NWEONH
+B227;B227;1102 116F 11AE;B227;1102 116F 11AE; # (눧; 눧; 눧; 눧; 눧; ) HANGUL SYLLABLE NWEOD
+B228;B228;1102 116F 11AF;B228;1102 116F 11AF; # (눨; 눨; 눨; 눨; 눨; ) HANGUL SYLLABLE NWEOL
+B229;B229;1102 116F 11B0;B229;1102 116F 11B0; # (눩; 눩; 눩; 눩; 눩; ) HANGUL SYLLABLE NWEOLG
+B22A;B22A;1102 116F 11B1;B22A;1102 116F 11B1; # (눪; 눪; 눪; 눪; 눪; ) HANGUL SYLLABLE NWEOLM
+B22B;B22B;1102 116F 11B2;B22B;1102 116F 11B2; # (눫; 눫; 눫; 눫; 눫; ) HANGUL SYLLABLE NWEOLB
+B22C;B22C;1102 116F 11B3;B22C;1102 116F 11B3; # (눬; 눬; 눬; 눬; 눬; ) HANGUL SYLLABLE NWEOLS
+B22D;B22D;1102 116F 11B4;B22D;1102 116F 11B4; # (눭; 눭; 눭; 눭; 눭; ) HANGUL SYLLABLE NWEOLT
+B22E;B22E;1102 116F 11B5;B22E;1102 116F 11B5; # (눮; 눮; 눮; 눮; 눮; ) HANGUL SYLLABLE NWEOLP
+B22F;B22F;1102 116F 11B6;B22F;1102 116F 11B6; # (눯; 눯; 눯; 눯; 눯; ) HANGUL SYLLABLE NWEOLH
+B230;B230;1102 116F 11B7;B230;1102 116F 11B7; # (눰; 눰; 눰; 눰; 눰; ) HANGUL SYLLABLE NWEOM
+B231;B231;1102 116F 11B8;B231;1102 116F 11B8; # (눱; 눱; 눱; 눱; 눱; ) HANGUL SYLLABLE NWEOB
+B232;B232;1102 116F 11B9;B232;1102 116F 11B9; # (눲; 눲; 눲; 눲; 눲; ) HANGUL SYLLABLE NWEOBS
+B233;B233;1102 116F 11BA;B233;1102 116F 11BA; # (눳; 눳; 눳; 눳; 눳; ) HANGUL SYLLABLE NWEOS
+B234;B234;1102 116F 11BB;B234;1102 116F 11BB; # (눴; 눴; 눴; 눴; 눴; ) HANGUL SYLLABLE NWEOSS
+B235;B235;1102 116F 11BC;B235;1102 116F 11BC; # (눵; 눵; 눵; 눵; 눵; ) HANGUL SYLLABLE NWEONG
+B236;B236;1102 116F 11BD;B236;1102 116F 11BD; # (눶; 눶; 눶; 눶; 눶; ) HANGUL SYLLABLE NWEOJ
+B237;B237;1102 116F 11BE;B237;1102 116F 11BE; # (눷; 눷; 눷; 눷; 눷; ) HANGUL SYLLABLE NWEOC
+B238;B238;1102 116F 11BF;B238;1102 116F 11BF; # (눸; 눸; 눸; 눸; 눸; ) HANGUL SYLLABLE NWEOK
+B239;B239;1102 116F 11C0;B239;1102 116F 11C0; # (눹; 눹; 눹; 눹; 눹; ) HANGUL SYLLABLE NWEOT
+B23A;B23A;1102 116F 11C1;B23A;1102 116F 11C1; # (눺; 눺; 눺; 눺; 눺; ) HANGUL SYLLABLE NWEOP
+B23B;B23B;1102 116F 11C2;B23B;1102 116F 11C2; # (눻; 눻; 눻; 눻; 눻; ) HANGUL SYLLABLE NWEOH
+B23C;B23C;1102 1170;B23C;1102 1170; # (눼; 눼; 눼; 눼; 눼; ) HANGUL SYLLABLE NWE
+B23D;B23D;1102 1170 11A8;B23D;1102 1170 11A8; # (눽; 눽; 눽; 눽; 눽; ) HANGUL SYLLABLE NWEG
+B23E;B23E;1102 1170 11A9;B23E;1102 1170 11A9; # (눾; 눾; 눾; 눾; 눾; ) HANGUL SYLLABLE NWEGG
+B23F;B23F;1102 1170 11AA;B23F;1102 1170 11AA; # (눿; 눿; 눿; 눿; 눿; ) HANGUL SYLLABLE NWEGS
+B240;B240;1102 1170 11AB;B240;1102 1170 11AB; # (뉀; 뉀; 뉀; 뉀; 뉀; ) HANGUL SYLLABLE NWEN
+B241;B241;1102 1170 11AC;B241;1102 1170 11AC; # (뉁; 뉁; 뉁; 뉁; 뉁; ) HANGUL SYLLABLE NWENJ
+B242;B242;1102 1170 11AD;B242;1102 1170 11AD; # (뉂; 뉂; 뉂; 뉂; 뉂; ) HANGUL SYLLABLE NWENH
+B243;B243;1102 1170 11AE;B243;1102 1170 11AE; # (뉃; 뉃; 뉃; 뉃; 뉃; ) HANGUL SYLLABLE NWED
+B244;B244;1102 1170 11AF;B244;1102 1170 11AF; # (뉄; 뉄; 뉄; 뉄; 뉄; ) HANGUL SYLLABLE NWEL
+B245;B245;1102 1170 11B0;B245;1102 1170 11B0; # (뉅; 뉅; 뉅; 뉅; 뉅; ) HANGUL SYLLABLE NWELG
+B246;B246;1102 1170 11B1;B246;1102 1170 11B1; # (뉆; 뉆; 뉆; 뉆; 뉆; ) HANGUL SYLLABLE NWELM
+B247;B247;1102 1170 11B2;B247;1102 1170 11B2; # (뉇; 뉇; 뉇; 뉇; 뉇; ) HANGUL SYLLABLE NWELB
+B248;B248;1102 1170 11B3;B248;1102 1170 11B3; # (뉈; 뉈; 뉈; 뉈; 뉈; ) HANGUL SYLLABLE NWELS
+B249;B249;1102 1170 11B4;B249;1102 1170 11B4; # (뉉; 뉉; 뉉; 뉉; 뉉; ) HANGUL SYLLABLE NWELT
+B24A;B24A;1102 1170 11B5;B24A;1102 1170 11B5; # (뉊; 뉊; 뉊; 뉊; 뉊; ) HANGUL SYLLABLE NWELP
+B24B;B24B;1102 1170 11B6;B24B;1102 1170 11B6; # (뉋; 뉋; 뉋; 뉋; 뉋; ) HANGUL SYLLABLE NWELH
+B24C;B24C;1102 1170 11B7;B24C;1102 1170 11B7; # (뉌; 뉌; 뉌; 뉌; 뉌; ) HANGUL SYLLABLE NWEM
+B24D;B24D;1102 1170 11B8;B24D;1102 1170 11B8; # (뉍; 뉍; 뉍; 뉍; 뉍; ) HANGUL SYLLABLE NWEB
+B24E;B24E;1102 1170 11B9;B24E;1102 1170 11B9; # (뉎; 뉎; 뉎; 뉎; 뉎; ) HANGUL SYLLABLE NWEBS
+B24F;B24F;1102 1170 11BA;B24F;1102 1170 11BA; # (뉏; 뉏; 뉏; 뉏; 뉏; ) HANGUL SYLLABLE NWES
+B250;B250;1102 1170 11BB;B250;1102 1170 11BB; # (뉐; 뉐; 뉐; 뉐; 뉐; ) HANGUL SYLLABLE NWESS
+B251;B251;1102 1170 11BC;B251;1102 1170 11BC; # (뉑; 뉑; 뉑; 뉑; 뉑; ) HANGUL SYLLABLE NWENG
+B252;B252;1102 1170 11BD;B252;1102 1170 11BD; # (뉒; 뉒; 뉒; 뉒; 뉒; ) HANGUL SYLLABLE NWEJ
+B253;B253;1102 1170 11BE;B253;1102 1170 11BE; # (뉓; 뉓; 뉓; 뉓; 뉓; ) HANGUL SYLLABLE NWEC
+B254;B254;1102 1170 11BF;B254;1102 1170 11BF; # (뉔; 뉔; 뉔; 뉔; 뉔; ) HANGUL SYLLABLE NWEK
+B255;B255;1102 1170 11C0;B255;1102 1170 11C0; # (뉕; 뉕; 뉕; 뉕; 뉕; ) HANGUL SYLLABLE NWET
+B256;B256;1102 1170 11C1;B256;1102 1170 11C1; # (뉖; 뉖; 뉖; 뉖; 뉖; ) HANGUL SYLLABLE NWEP
+B257;B257;1102 1170 11C2;B257;1102 1170 11C2; # (뉗; 뉗; 뉗; 뉗; 뉗; ) HANGUL SYLLABLE NWEH
+B258;B258;1102 1171;B258;1102 1171; # (뉘; 뉘; 뉘; 뉘; 뉘; ) HANGUL SYLLABLE NWI
+B259;B259;1102 1171 11A8;B259;1102 1171 11A8; # (뉙; 뉙; 뉙; 뉙; 뉙; ) HANGUL SYLLABLE NWIG
+B25A;B25A;1102 1171 11A9;B25A;1102 1171 11A9; # (뉚; 뉚; 뉚; 뉚; 뉚; ) HANGUL SYLLABLE NWIGG
+B25B;B25B;1102 1171 11AA;B25B;1102 1171 11AA; # (뉛; 뉛; 뉛; 뉛; 뉛; ) HANGUL SYLLABLE NWIGS
+B25C;B25C;1102 1171 11AB;B25C;1102 1171 11AB; # (뉜; 뉜; 뉜; 뉜; 뉜; ) HANGUL SYLLABLE NWIN
+B25D;B25D;1102 1171 11AC;B25D;1102 1171 11AC; # (뉝; 뉝; 뉝; 뉝; 뉝; ) HANGUL SYLLABLE NWINJ
+B25E;B25E;1102 1171 11AD;B25E;1102 1171 11AD; # (뉞; 뉞; 뉞; 뉞; 뉞; ) HANGUL SYLLABLE NWINH
+B25F;B25F;1102 1171 11AE;B25F;1102 1171 11AE; # (뉟; 뉟; 뉟; 뉟; 뉟; ) HANGUL SYLLABLE NWID
+B260;B260;1102 1171 11AF;B260;1102 1171 11AF; # (뉠; 뉠; 뉠; 뉠; 뉠; ) HANGUL SYLLABLE NWIL
+B261;B261;1102 1171 11B0;B261;1102 1171 11B0; # (뉡; 뉡; 뉡; 뉡; 뉡; ) HANGUL SYLLABLE NWILG
+B262;B262;1102 1171 11B1;B262;1102 1171 11B1; # (뉢; 뉢; 뉢; 뉢; 뉢; ) HANGUL SYLLABLE NWILM
+B263;B263;1102 1171 11B2;B263;1102 1171 11B2; # (뉣; 뉣; 뉣; 뉣; 뉣; ) HANGUL SYLLABLE NWILB
+B264;B264;1102 1171 11B3;B264;1102 1171 11B3; # (뉤; 뉤; 뉤; 뉤; 뉤; ) HANGUL SYLLABLE NWILS
+B265;B265;1102 1171 11B4;B265;1102 1171 11B4; # (뉥; 뉥; 뉥; 뉥; 뉥; ) HANGUL SYLLABLE NWILT
+B266;B266;1102 1171 11B5;B266;1102 1171 11B5; # (뉦; 뉦; 뉦; 뉦; 뉦; ) HANGUL SYLLABLE NWILP
+B267;B267;1102 1171 11B6;B267;1102 1171 11B6; # (뉧; 뉧; 뉧; 뉧; 뉧; ) HANGUL SYLLABLE NWILH
+B268;B268;1102 1171 11B7;B268;1102 1171 11B7; # (뉨; 뉨; 뉨; 뉨; 뉨; ) HANGUL SYLLABLE NWIM
+B269;B269;1102 1171 11B8;B269;1102 1171 11B8; # (뉩; 뉩; 뉩; 뉩; 뉩; ) HANGUL SYLLABLE NWIB
+B26A;B26A;1102 1171 11B9;B26A;1102 1171 11B9; # (뉪; 뉪; 뉪; 뉪; 뉪; ) HANGUL SYLLABLE NWIBS
+B26B;B26B;1102 1171 11BA;B26B;1102 1171 11BA; # (뉫; 뉫; 뉫; 뉫; 뉫; ) HANGUL SYLLABLE NWIS
+B26C;B26C;1102 1171 11BB;B26C;1102 1171 11BB; # (뉬; 뉬; 뉬; 뉬; 뉬; ) HANGUL SYLLABLE NWISS
+B26D;B26D;1102 1171 11BC;B26D;1102 1171 11BC; # (뉭; 뉭; 뉭; 뉭; 뉭; ) HANGUL SYLLABLE NWING
+B26E;B26E;1102 1171 11BD;B26E;1102 1171 11BD; # (뉮; 뉮; 뉮; 뉮; 뉮; ) HANGUL SYLLABLE NWIJ
+B26F;B26F;1102 1171 11BE;B26F;1102 1171 11BE; # (뉯; 뉯; 뉯; 뉯; 뉯; ) HANGUL SYLLABLE NWIC
+B270;B270;1102 1171 11BF;B270;1102 1171 11BF; # (뉰; 뉰; 뉰; 뉰; 뉰; ) HANGUL SYLLABLE NWIK
+B271;B271;1102 1171 11C0;B271;1102 1171 11C0; # (뉱; 뉱; 뉱; 뉱; 뉱; ) HANGUL SYLLABLE NWIT
+B272;B272;1102 1171 11C1;B272;1102 1171 11C1; # (뉲; 뉲; 뉲; 뉲; 뉲; ) HANGUL SYLLABLE NWIP
+B273;B273;1102 1171 11C2;B273;1102 1171 11C2; # (뉳; 뉳; 뉳; 뉳; 뉳; ) HANGUL SYLLABLE NWIH
+B274;B274;1102 1172;B274;1102 1172; # (뉴; 뉴; 뉴; 뉴; 뉴; ) HANGUL SYLLABLE NYU
+B275;B275;1102 1172 11A8;B275;1102 1172 11A8; # (뉵; 뉵; 뉵; 뉵; 뉵; ) HANGUL SYLLABLE NYUG
+B276;B276;1102 1172 11A9;B276;1102 1172 11A9; # (뉶; 뉶; 뉶; 뉶; 뉶; ) HANGUL SYLLABLE NYUGG
+B277;B277;1102 1172 11AA;B277;1102 1172 11AA; # (뉷; 뉷; 뉷; 뉷; 뉷; ) HANGUL SYLLABLE NYUGS
+B278;B278;1102 1172 11AB;B278;1102 1172 11AB; # (뉸; 뉸; 뉸; 뉸; 뉸; ) HANGUL SYLLABLE NYUN
+B279;B279;1102 1172 11AC;B279;1102 1172 11AC; # (뉹; 뉹; 뉹; 뉹; 뉹; ) HANGUL SYLLABLE NYUNJ
+B27A;B27A;1102 1172 11AD;B27A;1102 1172 11AD; # (뉺; 뉺; 뉺; 뉺; 뉺; ) HANGUL SYLLABLE NYUNH
+B27B;B27B;1102 1172 11AE;B27B;1102 1172 11AE; # (뉻; 뉻; 뉻; 뉻; 뉻; ) HANGUL SYLLABLE NYUD
+B27C;B27C;1102 1172 11AF;B27C;1102 1172 11AF; # (뉼; 뉼; 뉼; 뉼; 뉼; ) HANGUL SYLLABLE NYUL
+B27D;B27D;1102 1172 11B0;B27D;1102 1172 11B0; # (뉽; 뉽; 뉽; 뉽; 뉽; ) HANGUL SYLLABLE NYULG
+B27E;B27E;1102 1172 11B1;B27E;1102 1172 11B1; # (뉾; 뉾; 뉾; 뉾; 뉾; ) HANGUL SYLLABLE NYULM
+B27F;B27F;1102 1172 11B2;B27F;1102 1172 11B2; # (뉿; 뉿; 뉿; 뉿; 뉿; ) HANGUL SYLLABLE NYULB
+B280;B280;1102 1172 11B3;B280;1102 1172 11B3; # (늀; 늀; 늀; 늀; 늀; ) HANGUL SYLLABLE NYULS
+B281;B281;1102 1172 11B4;B281;1102 1172 11B4; # (늁; 늁; 늁; 늁; 늁; ) HANGUL SYLLABLE NYULT
+B282;B282;1102 1172 11B5;B282;1102 1172 11B5; # (늂; 늂; 늂; 늂; 늂; ) HANGUL SYLLABLE NYULP
+B283;B283;1102 1172 11B6;B283;1102 1172 11B6; # (늃; 늃; 늃; 늃; 늃; ) HANGUL SYLLABLE NYULH
+B284;B284;1102 1172 11B7;B284;1102 1172 11B7; # (늄; 늄; 늄; 늄; 늄; ) HANGUL SYLLABLE NYUM
+B285;B285;1102 1172 11B8;B285;1102 1172 11B8; # (늅; 늅; 늅; 늅; 늅; ) HANGUL SYLLABLE NYUB
+B286;B286;1102 1172 11B9;B286;1102 1172 11B9; # (늆; 늆; 늆; 늆; 늆; ) HANGUL SYLLABLE NYUBS
+B287;B287;1102 1172 11BA;B287;1102 1172 11BA; # (늇; 늇; 늇; 늇; 늇; ) HANGUL SYLLABLE NYUS
+B288;B288;1102 1172 11BB;B288;1102 1172 11BB; # (늈; 늈; 늈; 늈; 늈; ) HANGUL SYLLABLE NYUSS
+B289;B289;1102 1172 11BC;B289;1102 1172 11BC; # (늉; 늉; 늉; 늉; 늉; ) HANGUL SYLLABLE NYUNG
+B28A;B28A;1102 1172 11BD;B28A;1102 1172 11BD; # (늊; 늊; 늊; 늊; 늊; ) HANGUL SYLLABLE NYUJ
+B28B;B28B;1102 1172 11BE;B28B;1102 1172 11BE; # (늋; 늋; 늋; 늋; 늋; ) HANGUL SYLLABLE NYUC
+B28C;B28C;1102 1172 11BF;B28C;1102 1172 11BF; # (늌; 늌; 늌; 늌; 늌; ) HANGUL SYLLABLE NYUK
+B28D;B28D;1102 1172 11C0;B28D;1102 1172 11C0; # (늍; 늍; 늍; 늍; 늍; ) HANGUL SYLLABLE NYUT
+B28E;B28E;1102 1172 11C1;B28E;1102 1172 11C1; # (늎; 늎; 늎; 늎; 늎; ) HANGUL SYLLABLE NYUP
+B28F;B28F;1102 1172 11C2;B28F;1102 1172 11C2; # (늏; 늏; 늏; 늏; 늏; ) HANGUL SYLLABLE NYUH
+B290;B290;1102 1173;B290;1102 1173; # (느; 느; 느; 느; 느; ) HANGUL SYLLABLE NEU
+B291;B291;1102 1173 11A8;B291;1102 1173 11A8; # (늑; 늑; 늑; 늑; 늑; ) HANGUL SYLLABLE NEUG
+B292;B292;1102 1173 11A9;B292;1102 1173 11A9; # (늒; 늒; 늒; 늒; 늒; ) HANGUL SYLLABLE NEUGG
+B293;B293;1102 1173 11AA;B293;1102 1173 11AA; # (늓; 늓; 늓; 늓; 늓; ) HANGUL SYLLABLE NEUGS
+B294;B294;1102 1173 11AB;B294;1102 1173 11AB; # (는; 는; 는; 는; 는; ) HANGUL SYLLABLE NEUN
+B295;B295;1102 1173 11AC;B295;1102 1173 11AC; # (늕; 늕; 늕; 늕; 늕; ) HANGUL SYLLABLE NEUNJ
+B296;B296;1102 1173 11AD;B296;1102 1173 11AD; # (늖; 늖; 늖; 늖; 늖; ) HANGUL SYLLABLE NEUNH
+B297;B297;1102 1173 11AE;B297;1102 1173 11AE; # (늗; 늗; 늗; 늗; 늗; ) HANGUL SYLLABLE NEUD
+B298;B298;1102 1173 11AF;B298;1102 1173 11AF; # (늘; 늘; 늘; 늘; 늘; ) HANGUL SYLLABLE NEUL
+B299;B299;1102 1173 11B0;B299;1102 1173 11B0; # (늙; 늙; 늙; 늙; 늙; ) HANGUL SYLLABLE NEULG
+B29A;B29A;1102 1173 11B1;B29A;1102 1173 11B1; # (늚; 늚; 늚; 늚; 늚; ) HANGUL SYLLABLE NEULM
+B29B;B29B;1102 1173 11B2;B29B;1102 1173 11B2; # (늛; 늛; 늛; 늛; 늛; ) HANGUL SYLLABLE NEULB
+B29C;B29C;1102 1173 11B3;B29C;1102 1173 11B3; # (늜; 늜; 늜; 늜; 늜; ) HANGUL SYLLABLE NEULS
+B29D;B29D;1102 1173 11B4;B29D;1102 1173 11B4; # (늝; 늝; 늝; 늝; 늝; ) HANGUL SYLLABLE NEULT
+B29E;B29E;1102 1173 11B5;B29E;1102 1173 11B5; # (늞; 늞; 늞; 늞; 늞; ) HANGUL SYLLABLE NEULP
+B29F;B29F;1102 1173 11B6;B29F;1102 1173 11B6; # (늟; 늟; 늟; 늟; 늟; ) HANGUL SYLLABLE NEULH
+B2A0;B2A0;1102 1173 11B7;B2A0;1102 1173 11B7; # (늠; 늠; 늠; 늠; 늠; ) HANGUL SYLLABLE NEUM
+B2A1;B2A1;1102 1173 11B8;B2A1;1102 1173 11B8; # (늡; 늡; 늡; 늡; 늡; ) HANGUL SYLLABLE NEUB
+B2A2;B2A2;1102 1173 11B9;B2A2;1102 1173 11B9; # (늢; 늢; 늢; 늢; 늢; ) HANGUL SYLLABLE NEUBS
+B2A3;B2A3;1102 1173 11BA;B2A3;1102 1173 11BA; # (늣; 늣; 늣; 늣; 늣; ) HANGUL SYLLABLE NEUS
+B2A4;B2A4;1102 1173 11BB;B2A4;1102 1173 11BB; # (늤; 늤; 늤; 늤; 늤; ) HANGUL SYLLABLE NEUSS
+B2A5;B2A5;1102 1173 11BC;B2A5;1102 1173 11BC; # (능; 능; 능; 능; 능; ) HANGUL SYLLABLE NEUNG
+B2A6;B2A6;1102 1173 11BD;B2A6;1102 1173 11BD; # (늦; 늦; 늦; 늦; 늦; ) HANGUL SYLLABLE NEUJ
+B2A7;B2A7;1102 1173 11BE;B2A7;1102 1173 11BE; # (늧; 늧; 늧; 늧; 늧; ) HANGUL SYLLABLE NEUC
+B2A8;B2A8;1102 1173 11BF;B2A8;1102 1173 11BF; # (늨; 늨; 늨; 늨; 늨; ) HANGUL SYLLABLE NEUK
+B2A9;B2A9;1102 1173 11C0;B2A9;1102 1173 11C0; # (늩; 늩; 늩; 늩; 늩; ) HANGUL SYLLABLE NEUT
+B2AA;B2AA;1102 1173 11C1;B2AA;1102 1173 11C1; # (늪; 늪; 늪; 늪; 늪; ) HANGUL SYLLABLE NEUP
+B2AB;B2AB;1102 1173 11C2;B2AB;1102 1173 11C2; # (늫; 늫; 늫; 늫; 늫; ) HANGUL SYLLABLE NEUH
+B2AC;B2AC;1102 1174;B2AC;1102 1174; # (늬; 늬; 늬; 늬; 늬; ) HANGUL SYLLABLE NYI
+B2AD;B2AD;1102 1174 11A8;B2AD;1102 1174 11A8; # (늭; 늭; 늭; 늭; 늭; ) HANGUL SYLLABLE NYIG
+B2AE;B2AE;1102 1174 11A9;B2AE;1102 1174 11A9; # (늮; 늮; 늮; 늮; 늮; ) HANGUL SYLLABLE NYIGG
+B2AF;B2AF;1102 1174 11AA;B2AF;1102 1174 11AA; # (늯; 늯; 늯; 늯; 늯; ) HANGUL SYLLABLE NYIGS
+B2B0;B2B0;1102 1174 11AB;B2B0;1102 1174 11AB; # (늰; 늰; 늰; 늰; 늰; ) HANGUL SYLLABLE NYIN
+B2B1;B2B1;1102 1174 11AC;B2B1;1102 1174 11AC; # (늱; 늱; 늱; 늱; 늱; ) HANGUL SYLLABLE NYINJ
+B2B2;B2B2;1102 1174 11AD;B2B2;1102 1174 11AD; # (늲; 늲; 늲; 늲; 늲; ) HANGUL SYLLABLE NYINH
+B2B3;B2B3;1102 1174 11AE;B2B3;1102 1174 11AE; # (늳; 늳; 늳; 늳; 늳; ) HANGUL SYLLABLE NYID
+B2B4;B2B4;1102 1174 11AF;B2B4;1102 1174 11AF; # (늴; 늴; 늴; 늴; 늴; ) HANGUL SYLLABLE NYIL
+B2B5;B2B5;1102 1174 11B0;B2B5;1102 1174 11B0; # (늵; 늵; 늵; 늵; 늵; ) HANGUL SYLLABLE NYILG
+B2B6;B2B6;1102 1174 11B1;B2B6;1102 1174 11B1; # (늶; 늶; 늶; 늶; 늶; ) HANGUL SYLLABLE NYILM
+B2B7;B2B7;1102 1174 11B2;B2B7;1102 1174 11B2; # (늷; 늷; 늷; 늷; 늷; ) HANGUL SYLLABLE NYILB
+B2B8;B2B8;1102 1174 11B3;B2B8;1102 1174 11B3; # (늸; 늸; 늸; 늸; 늸; ) HANGUL SYLLABLE NYILS
+B2B9;B2B9;1102 1174 11B4;B2B9;1102 1174 11B4; # (늹; 늹; 늹; 늹; 늹; ) HANGUL SYLLABLE NYILT
+B2BA;B2BA;1102 1174 11B5;B2BA;1102 1174 11B5; # (늺; 늺; 늺; 늺; 늺; ) HANGUL SYLLABLE NYILP
+B2BB;B2BB;1102 1174 11B6;B2BB;1102 1174 11B6; # (늻; 늻; 늻; 늻; 늻; ) HANGUL SYLLABLE NYILH
+B2BC;B2BC;1102 1174 11B7;B2BC;1102 1174 11B7; # (늼; 늼; 늼; 늼; 늼; ) HANGUL SYLLABLE NYIM
+B2BD;B2BD;1102 1174 11B8;B2BD;1102 1174 11B8; # (늽; 늽; 늽; 늽; 늽; ) HANGUL SYLLABLE NYIB
+B2BE;B2BE;1102 1174 11B9;B2BE;1102 1174 11B9; # (늾; 늾; 늾; 늾; 늾; ) HANGUL SYLLABLE NYIBS
+B2BF;B2BF;1102 1174 11BA;B2BF;1102 1174 11BA; # (늿; 늿; 늿; 늿; 늿; ) HANGUL SYLLABLE NYIS
+B2C0;B2C0;1102 1174 11BB;B2C0;1102 1174 11BB; # (닀; 닀; 닀; 닀; 닀; ) HANGUL SYLLABLE NYISS
+B2C1;B2C1;1102 1174 11BC;B2C1;1102 1174 11BC; # (닁; 닁; 닁; 닁; 닁; ) HANGUL SYLLABLE NYING
+B2C2;B2C2;1102 1174 11BD;B2C2;1102 1174 11BD; # (닂; 닂; 닂; 닂; 닂; ) HANGUL SYLLABLE NYIJ
+B2C3;B2C3;1102 1174 11BE;B2C3;1102 1174 11BE; # (닃; 닃; 닃; 닃; 닃; ) HANGUL SYLLABLE NYIC
+B2C4;B2C4;1102 1174 11BF;B2C4;1102 1174 11BF; # (닄; 닄; 닄; 닄; 닄; ) HANGUL SYLLABLE NYIK
+B2C5;B2C5;1102 1174 11C0;B2C5;1102 1174 11C0; # (닅; 닅; 닅; 닅; 닅; ) HANGUL SYLLABLE NYIT
+B2C6;B2C6;1102 1174 11C1;B2C6;1102 1174 11C1; # (닆; 닆; 닆; 닆; 닆; ) HANGUL SYLLABLE NYIP
+B2C7;B2C7;1102 1174 11C2;B2C7;1102 1174 11C2; # (닇; 닇; 닇; 닇; 닇; ) HANGUL SYLLABLE NYIH
+B2C8;B2C8;1102 1175;B2C8;1102 1175; # (니; 니; 니; 니; 니; ) HANGUL SYLLABLE NI
+B2C9;B2C9;1102 1175 11A8;B2C9;1102 1175 11A8; # (닉; 닉; 닉; 닉; 닉; ) HANGUL SYLLABLE NIG
+B2CA;B2CA;1102 1175 11A9;B2CA;1102 1175 11A9; # (닊; 닊; 닊; 닊; 닊; ) HANGUL SYLLABLE NIGG
+B2CB;B2CB;1102 1175 11AA;B2CB;1102 1175 11AA; # (닋; 닋; 닋; 닋; 닋; ) HANGUL SYLLABLE NIGS
+B2CC;B2CC;1102 1175 11AB;B2CC;1102 1175 11AB; # (닌; 닌; 닌; 닌; 닌; ) HANGUL SYLLABLE NIN
+B2CD;B2CD;1102 1175 11AC;B2CD;1102 1175 11AC; # (닍; 닍; 닍; 닍; 닍; ) HANGUL SYLLABLE NINJ
+B2CE;B2CE;1102 1175 11AD;B2CE;1102 1175 11AD; # (닎; 닎; 닎; 닎; 닎; ) HANGUL SYLLABLE NINH
+B2CF;B2CF;1102 1175 11AE;B2CF;1102 1175 11AE; # (닏; 닏; 닏; 닏; 닏; ) HANGUL SYLLABLE NID
+B2D0;B2D0;1102 1175 11AF;B2D0;1102 1175 11AF; # (닐; 닐; 닐; 닐; 닐; ) HANGUL SYLLABLE NIL
+B2D1;B2D1;1102 1175 11B0;B2D1;1102 1175 11B0; # (닑; 닑; 닑; 닑; 닑; ) HANGUL SYLLABLE NILG
+B2D2;B2D2;1102 1175 11B1;B2D2;1102 1175 11B1; # (닒; 닒; 닒; 닒; 닒; ) HANGUL SYLLABLE NILM
+B2D3;B2D3;1102 1175 11B2;B2D3;1102 1175 11B2; # (닓; 닓; 닓; 닓; 닓; ) HANGUL SYLLABLE NILB
+B2D4;B2D4;1102 1175 11B3;B2D4;1102 1175 11B3; # (닔; 닔; 닔; 닔; 닔; ) HANGUL SYLLABLE NILS
+B2D5;B2D5;1102 1175 11B4;B2D5;1102 1175 11B4; # (닕; 닕; 닕; 닕; 닕; ) HANGUL SYLLABLE NILT
+B2D6;B2D6;1102 1175 11B5;B2D6;1102 1175 11B5; # (닖; 닖; 닖; 닖; 닖; ) HANGUL SYLLABLE NILP
+B2D7;B2D7;1102 1175 11B6;B2D7;1102 1175 11B6; # (닗; 닗; 닗; 닗; 닗; ) HANGUL SYLLABLE NILH
+B2D8;B2D8;1102 1175 11B7;B2D8;1102 1175 11B7; # (님; 님; 님; 님; 님; ) HANGUL SYLLABLE NIM
+B2D9;B2D9;1102 1175 11B8;B2D9;1102 1175 11B8; # (닙; 닙; 닙; 닙; 닙; ) HANGUL SYLLABLE NIB
+B2DA;B2DA;1102 1175 11B9;B2DA;1102 1175 11B9; # (닚; 닚; 닚; 닚; 닚; ) HANGUL SYLLABLE NIBS
+B2DB;B2DB;1102 1175 11BA;B2DB;1102 1175 11BA; # (닛; 닛; 닛; 닛; 닛; ) HANGUL SYLLABLE NIS
+B2DC;B2DC;1102 1175 11BB;B2DC;1102 1175 11BB; # (닜; 닜; 닜; 닜; 닜; ) HANGUL SYLLABLE NISS
+B2DD;B2DD;1102 1175 11BC;B2DD;1102 1175 11BC; # (닝; 닝; 닝; 닝; 닝; ) HANGUL SYLLABLE NING
+B2DE;B2DE;1102 1175 11BD;B2DE;1102 1175 11BD; # (닞; 닞; 닞; 닞; 닞; ) HANGUL SYLLABLE NIJ
+B2DF;B2DF;1102 1175 11BE;B2DF;1102 1175 11BE; # (닟; 닟; 닟; 닟; 닟; ) HANGUL SYLLABLE NIC
+B2E0;B2E0;1102 1175 11BF;B2E0;1102 1175 11BF; # (닠; 닠; 닠; 닠; 닠; ) HANGUL SYLLABLE NIK
+B2E1;B2E1;1102 1175 11C0;B2E1;1102 1175 11C0; # (닡; 닡; 닡; 닡; 닡; ) HANGUL SYLLABLE NIT
+B2E2;B2E2;1102 1175 11C1;B2E2;1102 1175 11C1; # (닢; 닢; 닢; 닢; 닢; ) HANGUL SYLLABLE NIP
+B2E3;B2E3;1102 1175 11C2;B2E3;1102 1175 11C2; # (닣; 닣; 닣; 닣; 닣; ) HANGUL SYLLABLE NIH
+B2E4;B2E4;1103 1161;B2E4;1103 1161; # (다; 다; 다; 다; 다; ) HANGUL SYLLABLE DA
+B2E5;B2E5;1103 1161 11A8;B2E5;1103 1161 11A8; # (닥; 닥; 닥; 닥; 닥; ) HANGUL SYLLABLE DAG
+B2E6;B2E6;1103 1161 11A9;B2E6;1103 1161 11A9; # (닦; 닦; 닦; 닦; 닦; ) HANGUL SYLLABLE DAGG
+B2E7;B2E7;1103 1161 11AA;B2E7;1103 1161 11AA; # (닧; 닧; 닧; 닧; 닧; ) HANGUL SYLLABLE DAGS
+B2E8;B2E8;1103 1161 11AB;B2E8;1103 1161 11AB; # (단; 단; 단; 단; 단; ) HANGUL SYLLABLE DAN
+B2E9;B2E9;1103 1161 11AC;B2E9;1103 1161 11AC; # (닩; 닩; 닩; 닩; 닩; ) HANGUL SYLLABLE DANJ
+B2EA;B2EA;1103 1161 11AD;B2EA;1103 1161 11AD; # (닪; 닪; 닪; 닪; 닪; ) HANGUL SYLLABLE DANH
+B2EB;B2EB;1103 1161 11AE;B2EB;1103 1161 11AE; # (닫; 닫; 닫; 닫; 닫; ) HANGUL SYLLABLE DAD
+B2EC;B2EC;1103 1161 11AF;B2EC;1103 1161 11AF; # (달; 달; 달; 달; 달; ) HANGUL SYLLABLE DAL
+B2ED;B2ED;1103 1161 11B0;B2ED;1103 1161 11B0; # (닭; 닭; 닭; 닭; 닭; ) HANGUL SYLLABLE DALG
+B2EE;B2EE;1103 1161 11B1;B2EE;1103 1161 11B1; # (닮; 닮; 닮; 닮; 닮; ) HANGUL SYLLABLE DALM
+B2EF;B2EF;1103 1161 11B2;B2EF;1103 1161 11B2; # (닯; 닯; 닯; 닯; 닯; ) HANGUL SYLLABLE DALB
+B2F0;B2F0;1103 1161 11B3;B2F0;1103 1161 11B3; # (닰; 닰; 닰; 닰; 닰; ) HANGUL SYLLABLE DALS
+B2F1;B2F1;1103 1161 11B4;B2F1;1103 1161 11B4; # (닱; 닱; 닱; 닱; 닱; ) HANGUL SYLLABLE DALT
+B2F2;B2F2;1103 1161 11B5;B2F2;1103 1161 11B5; # (닲; 닲; 닲; 닲; 닲; ) HANGUL SYLLABLE DALP
+B2F3;B2F3;1103 1161 11B6;B2F3;1103 1161 11B6; # (닳; 닳; 닳; 닳; 닳; ) HANGUL SYLLABLE DALH
+B2F4;B2F4;1103 1161 11B7;B2F4;1103 1161 11B7; # (담; 담; 담; 담; 담; ) HANGUL SYLLABLE DAM
+B2F5;B2F5;1103 1161 11B8;B2F5;1103 1161 11B8; # (답; 답; 답; 답; 답; ) HANGUL SYLLABLE DAB
+B2F6;B2F6;1103 1161 11B9;B2F6;1103 1161 11B9; # (닶; 닶; 닶; 닶; 닶; ) HANGUL SYLLABLE DABS
+B2F7;B2F7;1103 1161 11BA;B2F7;1103 1161 11BA; # (닷; 닷; 닷; 닷; 닷; ) HANGUL SYLLABLE DAS
+B2F8;B2F8;1103 1161 11BB;B2F8;1103 1161 11BB; # (닸; 닸; 닸; 닸; 닸; ) HANGUL SYLLABLE DASS
+B2F9;B2F9;1103 1161 11BC;B2F9;1103 1161 11BC; # (당; 당; 당; 당; 당; ) HANGUL SYLLABLE DANG
+B2FA;B2FA;1103 1161 11BD;B2FA;1103 1161 11BD; # (닺; 닺; 닺; 닺; 닺; ) HANGUL SYLLABLE DAJ
+B2FB;B2FB;1103 1161 11BE;B2FB;1103 1161 11BE; # (닻; 닻; 닻; 닻; 닻; ) HANGUL SYLLABLE DAC
+B2FC;B2FC;1103 1161 11BF;B2FC;1103 1161 11BF; # (닼; 닼; 닼; 닼; 닼; ) HANGUL SYLLABLE DAK
+B2FD;B2FD;1103 1161 11C0;B2FD;1103 1161 11C0; # (닽; 닽; 닽; 닽; 닽; ) HANGUL SYLLABLE DAT
+B2FE;B2FE;1103 1161 11C1;B2FE;1103 1161 11C1; # (닾; 닾; 닾; 닾; 닾; ) HANGUL SYLLABLE DAP
+B2FF;B2FF;1103 1161 11C2;B2FF;1103 1161 11C2; # (닿; 닿; 닿; 닿; 닿; ) HANGUL SYLLABLE DAH
+B300;B300;1103 1162;B300;1103 1162; # (대; 대; 대; 대; 대; ) HANGUL SYLLABLE DAE
+B301;B301;1103 1162 11A8;B301;1103 1162 11A8; # (댁; 댁; 댁; 댁; 댁; ) HANGUL SYLLABLE DAEG
+B302;B302;1103 1162 11A9;B302;1103 1162 11A9; # (댂; 댂; 댂; 댂; 댂; ) HANGUL SYLLABLE DAEGG
+B303;B303;1103 1162 11AA;B303;1103 1162 11AA; # (댃; 댃; 댃; 댃; 댃; ) HANGUL SYLLABLE DAEGS
+B304;B304;1103 1162 11AB;B304;1103 1162 11AB; # (댄; 댄; 댄; 댄; 댄; ) HANGUL SYLLABLE DAEN
+B305;B305;1103 1162 11AC;B305;1103 1162 11AC; # (댅; 댅; 댅; 댅; 댅; ) HANGUL SYLLABLE DAENJ
+B306;B306;1103 1162 11AD;B306;1103 1162 11AD; # (댆; 댆; 댆; 댆; 댆; ) HANGUL SYLLABLE DAENH
+B307;B307;1103 1162 11AE;B307;1103 1162 11AE; # (댇; 댇; 댇; 댇; 댇; ) HANGUL SYLLABLE DAED
+B308;B308;1103 1162 11AF;B308;1103 1162 11AF; # (댈; 댈; 댈; 댈; 댈; ) HANGUL SYLLABLE DAEL
+B309;B309;1103 1162 11B0;B309;1103 1162 11B0; # (댉; 댉; 댉; 댉; 댉; ) HANGUL SYLLABLE DAELG
+B30A;B30A;1103 1162 11B1;B30A;1103 1162 11B1; # (댊; 댊; 댊; 댊; 댊; ) HANGUL SYLLABLE DAELM
+B30B;B30B;1103 1162 11B2;B30B;1103 1162 11B2; # (댋; 댋; 댋; 댋; 댋; ) HANGUL SYLLABLE DAELB
+B30C;B30C;1103 1162 11B3;B30C;1103 1162 11B3; # (댌; 댌; 댌; 댌; 댌; ) HANGUL SYLLABLE DAELS
+B30D;B30D;1103 1162 11B4;B30D;1103 1162 11B4; # (댍; 댍; 댍; 댍; 댍; ) HANGUL SYLLABLE DAELT
+B30E;B30E;1103 1162 11B5;B30E;1103 1162 11B5; # (댎; 댎; 댎; 댎; 댎; ) HANGUL SYLLABLE DAELP
+B30F;B30F;1103 1162 11B6;B30F;1103 1162 11B6; # (댏; 댏; 댏; 댏; 댏; ) HANGUL SYLLABLE DAELH
+B310;B310;1103 1162 11B7;B310;1103 1162 11B7; # (댐; 댐; 댐; 댐; 댐; ) HANGUL SYLLABLE DAEM
+B311;B311;1103 1162 11B8;B311;1103 1162 11B8; # (댑; 댑; 댑; 댑; 댑; ) HANGUL SYLLABLE DAEB
+B312;B312;1103 1162 11B9;B312;1103 1162 11B9; # (댒; 댒; 댒; 댒; 댒; ) HANGUL SYLLABLE DAEBS
+B313;B313;1103 1162 11BA;B313;1103 1162 11BA; # (댓; 댓; 댓; 댓; 댓; ) HANGUL SYLLABLE DAES
+B314;B314;1103 1162 11BB;B314;1103 1162 11BB; # (댔; 댔; 댔; 댔; 댔; ) HANGUL SYLLABLE DAESS
+B315;B315;1103 1162 11BC;B315;1103 1162 11BC; # (댕; 댕; 댕; 댕; 댕; ) HANGUL SYLLABLE DAENG
+B316;B316;1103 1162 11BD;B316;1103 1162 11BD; # (댖; 댖; 댖; 댖; 댖; ) HANGUL SYLLABLE DAEJ
+B317;B317;1103 1162 11BE;B317;1103 1162 11BE; # (댗; 댗; 댗; 댗; 댗; ) HANGUL SYLLABLE DAEC
+B318;B318;1103 1162 11BF;B318;1103 1162 11BF; # (댘; 댘; 댘; 댘; 댘; ) HANGUL SYLLABLE DAEK
+B319;B319;1103 1162 11C0;B319;1103 1162 11C0; # (댙; 댙; 댙; 댙; 댙; ) HANGUL SYLLABLE DAET
+B31A;B31A;1103 1162 11C1;B31A;1103 1162 11C1; # (댚; 댚; 댚; 댚; 댚; ) HANGUL SYLLABLE DAEP
+B31B;B31B;1103 1162 11C2;B31B;1103 1162 11C2; # (댛; 댛; 댛; 댛; 댛; ) HANGUL SYLLABLE DAEH
+B31C;B31C;1103 1163;B31C;1103 1163; # (댜; 댜; 댜; 댜; 댜; ) HANGUL SYLLABLE DYA
+B31D;B31D;1103 1163 11A8;B31D;1103 1163 11A8; # (댝; 댝; 댝; 댝; 댝; ) HANGUL SYLLABLE DYAG
+B31E;B31E;1103 1163 11A9;B31E;1103 1163 11A9; # (댞; 댞; 댞; 댞; 댞; ) HANGUL SYLLABLE DYAGG
+B31F;B31F;1103 1163 11AA;B31F;1103 1163 11AA; # (댟; 댟; 댟; 댟; 댟; ) HANGUL SYLLABLE DYAGS
+B320;B320;1103 1163 11AB;B320;1103 1163 11AB; # (댠; 댠; 댠; 댠; 댠; ) HANGUL SYLLABLE DYAN
+B321;B321;1103 1163 11AC;B321;1103 1163 11AC; # (댡; 댡; 댡; 댡; 댡; ) HANGUL SYLLABLE DYANJ
+B322;B322;1103 1163 11AD;B322;1103 1163 11AD; # (댢; 댢; 댢; 댢; 댢; ) HANGUL SYLLABLE DYANH
+B323;B323;1103 1163 11AE;B323;1103 1163 11AE; # (댣; 댣; 댣; 댣; 댣; ) HANGUL SYLLABLE DYAD
+B324;B324;1103 1163 11AF;B324;1103 1163 11AF; # (댤; 댤; 댤; 댤; 댤; ) HANGUL SYLLABLE DYAL
+B325;B325;1103 1163 11B0;B325;1103 1163 11B0; # (댥; 댥; 댥; 댥; 댥; ) HANGUL SYLLABLE DYALG
+B326;B326;1103 1163 11B1;B326;1103 1163 11B1; # (댦; 댦; 댦; 댦; 댦; ) HANGUL SYLLABLE DYALM
+B327;B327;1103 1163 11B2;B327;1103 1163 11B2; # (댧; 댧; 댧; 댧; 댧; ) HANGUL SYLLABLE DYALB
+B328;B328;1103 1163 11B3;B328;1103 1163 11B3; # (댨; 댨; 댨; 댨; 댨; ) HANGUL SYLLABLE DYALS
+B329;B329;1103 1163 11B4;B329;1103 1163 11B4; # (댩; 댩; 댩; 댩; 댩; ) HANGUL SYLLABLE DYALT
+B32A;B32A;1103 1163 11B5;B32A;1103 1163 11B5; # (댪; 댪; 댪; 댪; 댪; ) HANGUL SYLLABLE DYALP
+B32B;B32B;1103 1163 11B6;B32B;1103 1163 11B6; # (댫; 댫; 댫; 댫; 댫; ) HANGUL SYLLABLE DYALH
+B32C;B32C;1103 1163 11B7;B32C;1103 1163 11B7; # (댬; 댬; 댬; 댬; 댬; ) HANGUL SYLLABLE DYAM
+B32D;B32D;1103 1163 11B8;B32D;1103 1163 11B8; # (댭; 댭; 댭; 댭; 댭; ) HANGUL SYLLABLE DYAB
+B32E;B32E;1103 1163 11B9;B32E;1103 1163 11B9; # (댮; 댮; 댮; 댮; 댮; ) HANGUL SYLLABLE DYABS
+B32F;B32F;1103 1163 11BA;B32F;1103 1163 11BA; # (댯; 댯; 댯; 댯; 댯; ) HANGUL SYLLABLE DYAS
+B330;B330;1103 1163 11BB;B330;1103 1163 11BB; # (댰; 댰; 댰; 댰; 댰; ) HANGUL SYLLABLE DYASS
+B331;B331;1103 1163 11BC;B331;1103 1163 11BC; # (댱; 댱; 댱; 댱; 댱; ) HANGUL SYLLABLE DYANG
+B332;B332;1103 1163 11BD;B332;1103 1163 11BD; # (댲; 댲; 댲; 댲; 댲; ) HANGUL SYLLABLE DYAJ
+B333;B333;1103 1163 11BE;B333;1103 1163 11BE; # (댳; 댳; 댳; 댳; 댳; ) HANGUL SYLLABLE DYAC
+B334;B334;1103 1163 11BF;B334;1103 1163 11BF; # (댴; 댴; 댴; 댴; 댴; ) HANGUL SYLLABLE DYAK
+B335;B335;1103 1163 11C0;B335;1103 1163 11C0; # (댵; 댵; 댵; 댵; 댵; ) HANGUL SYLLABLE DYAT
+B336;B336;1103 1163 11C1;B336;1103 1163 11C1; # (댶; 댶; 댶; 댶; 댶; ) HANGUL SYLLABLE DYAP
+B337;B337;1103 1163 11C2;B337;1103 1163 11C2; # (댷; 댷; 댷; 댷; 댷; ) HANGUL SYLLABLE DYAH
+B338;B338;1103 1164;B338;1103 1164; # (댸; 댸; 댸; 댸; 댸; ) HANGUL SYLLABLE DYAE
+B339;B339;1103 1164 11A8;B339;1103 1164 11A8; # (댹; 댹; 댹; 댹; 댹; ) HANGUL SYLLABLE DYAEG
+B33A;B33A;1103 1164 11A9;B33A;1103 1164 11A9; # (댺; 댺; 댺; 댺; 댺; ) HANGUL SYLLABLE DYAEGG
+B33B;B33B;1103 1164 11AA;B33B;1103 1164 11AA; # (댻; 댻; 댻; 댻; 댻; ) HANGUL SYLLABLE DYAEGS
+B33C;B33C;1103 1164 11AB;B33C;1103 1164 11AB; # (댼; 댼; 댼; 댼; 댼; ) HANGUL SYLLABLE DYAEN
+B33D;B33D;1103 1164 11AC;B33D;1103 1164 11AC; # (댽; 댽; 댽; 댽; 댽; ) HANGUL SYLLABLE DYAENJ
+B33E;B33E;1103 1164 11AD;B33E;1103 1164 11AD; # (댾; 댾; 댾; 댾; 댾; ) HANGUL SYLLABLE DYAENH
+B33F;B33F;1103 1164 11AE;B33F;1103 1164 11AE; # (댿; 댿; 댿; 댿; 댿; ) HANGUL SYLLABLE DYAED
+B340;B340;1103 1164 11AF;B340;1103 1164 11AF; # (덀; 덀; 덀; 덀; 덀; ) HANGUL SYLLABLE DYAEL
+B341;B341;1103 1164 11B0;B341;1103 1164 11B0; # (덁; 덁; 덁; 덁; 덁; ) HANGUL SYLLABLE DYAELG
+B342;B342;1103 1164 11B1;B342;1103 1164 11B1; # (덂; 덂; 덂; 덂; 덂; ) HANGUL SYLLABLE DYAELM
+B343;B343;1103 1164 11B2;B343;1103 1164 11B2; # (덃; 덃; 덃; 덃; 덃; ) HANGUL SYLLABLE DYAELB
+B344;B344;1103 1164 11B3;B344;1103 1164 11B3; # (덄; 덄; 덄; 덄; 덄; ) HANGUL SYLLABLE DYAELS
+B345;B345;1103 1164 11B4;B345;1103 1164 11B4; # (덅; 덅; 덅; 덅; 덅; ) HANGUL SYLLABLE DYAELT
+B346;B346;1103 1164 11B5;B346;1103 1164 11B5; # (덆; 덆; 덆; 덆; 덆; ) HANGUL SYLLABLE DYAELP
+B347;B347;1103 1164 11B6;B347;1103 1164 11B6; # (덇; 덇; 덇; 덇; 덇; ) HANGUL SYLLABLE DYAELH
+B348;B348;1103 1164 11B7;B348;1103 1164 11B7; # (덈; 덈; 덈; 덈; 덈; ) HANGUL SYLLABLE DYAEM
+B349;B349;1103 1164 11B8;B349;1103 1164 11B8; # (덉; 덉; 덉; 덉; 덉; ) HANGUL SYLLABLE DYAEB
+B34A;B34A;1103 1164 11B9;B34A;1103 1164 11B9; # (덊; 덊; 덊; 덊; 덊; ) HANGUL SYLLABLE DYAEBS
+B34B;B34B;1103 1164 11BA;B34B;1103 1164 11BA; # (덋; 덋; 덋; 덋; 덋; ) HANGUL SYLLABLE DYAES
+B34C;B34C;1103 1164 11BB;B34C;1103 1164 11BB; # (덌; 덌; 덌; 덌; 덌; ) HANGUL SYLLABLE DYAESS
+B34D;B34D;1103 1164 11BC;B34D;1103 1164 11BC; # (덍; 덍; 덍; 덍; 덍; ) HANGUL SYLLABLE DYAENG
+B34E;B34E;1103 1164 11BD;B34E;1103 1164 11BD; # (덎; 덎; 덎; 덎; 덎; ) HANGUL SYLLABLE DYAEJ
+B34F;B34F;1103 1164 11BE;B34F;1103 1164 11BE; # (덏; 덏; 덏; 덏; 덏; ) HANGUL SYLLABLE DYAEC
+B350;B350;1103 1164 11BF;B350;1103 1164 11BF; # (덐; 덐; 덐; 덐; 덐; ) HANGUL SYLLABLE DYAEK
+B351;B351;1103 1164 11C0;B351;1103 1164 11C0; # (덑; 덑; 덑; 덑; 덑; ) HANGUL SYLLABLE DYAET
+B352;B352;1103 1164 11C1;B352;1103 1164 11C1; # (덒; 덒; 덒; 덒; 덒; ) HANGUL SYLLABLE DYAEP
+B353;B353;1103 1164 11C2;B353;1103 1164 11C2; # (덓; 덓; 덓; 덓; 덓; ) HANGUL SYLLABLE DYAEH
+B354;B354;1103 1165;B354;1103 1165; # (더; 더; 더; 더; 더; ) HANGUL SYLLABLE DEO
+B355;B355;1103 1165 11A8;B355;1103 1165 11A8; # (덕; 덕; 덕; 덕; 덕; ) HANGUL SYLLABLE DEOG
+B356;B356;1103 1165 11A9;B356;1103 1165 11A9; # (덖; 덖; 덖; 덖; 덖; ) HANGUL SYLLABLE DEOGG
+B357;B357;1103 1165 11AA;B357;1103 1165 11AA; # (덗; 덗; 덗; 덗; 덗; ) HANGUL SYLLABLE DEOGS
+B358;B358;1103 1165 11AB;B358;1103 1165 11AB; # (던; 던; 던; 던; 던; ) HANGUL SYLLABLE DEON
+B359;B359;1103 1165 11AC;B359;1103 1165 11AC; # (덙; 덙; 덙; 덙; 덙; ) HANGUL SYLLABLE DEONJ
+B35A;B35A;1103 1165 11AD;B35A;1103 1165 11AD; # (덚; 덚; 덚; 덚; 덚; ) HANGUL SYLLABLE DEONH
+B35B;B35B;1103 1165 11AE;B35B;1103 1165 11AE; # (덛; 덛; 덛; 덛; 덛; ) HANGUL SYLLABLE DEOD
+B35C;B35C;1103 1165 11AF;B35C;1103 1165 11AF; # (덜; 덜; 덜; 덜; 덜; ) HANGUL SYLLABLE DEOL
+B35D;B35D;1103 1165 11B0;B35D;1103 1165 11B0; # (덝; 덝; 덝; 덝; 덝; ) HANGUL SYLLABLE DEOLG
+B35E;B35E;1103 1165 11B1;B35E;1103 1165 11B1; # (덞; 덞; 덞; 덞; 덞; ) HANGUL SYLLABLE DEOLM
+B35F;B35F;1103 1165 11B2;B35F;1103 1165 11B2; # (덟; 덟; 덟; 덟; 덟; ) HANGUL SYLLABLE DEOLB
+B360;B360;1103 1165 11B3;B360;1103 1165 11B3; # (덠; 덠; 덠; 덠; 덠; ) HANGUL SYLLABLE DEOLS
+B361;B361;1103 1165 11B4;B361;1103 1165 11B4; # (덡; 덡; 덡; 덡; 덡; ) HANGUL SYLLABLE DEOLT
+B362;B362;1103 1165 11B5;B362;1103 1165 11B5; # (덢; 덢; 덢; 덢; 덢; ) HANGUL SYLLABLE DEOLP
+B363;B363;1103 1165 11B6;B363;1103 1165 11B6; # (덣; 덣; 덣; 덣; 덣; ) HANGUL SYLLABLE DEOLH
+B364;B364;1103 1165 11B7;B364;1103 1165 11B7; # (덤; 덤; 덤; 덤; 덤; ) HANGUL SYLLABLE DEOM
+B365;B365;1103 1165 11B8;B365;1103 1165 11B8; # (덥; 덥; 덥; 덥; 덥; ) HANGUL SYLLABLE DEOB
+B366;B366;1103 1165 11B9;B366;1103 1165 11B9; # (덦; 덦; 덦; 덦; 덦; ) HANGUL SYLLABLE DEOBS
+B367;B367;1103 1165 11BA;B367;1103 1165 11BA; # (덧; 덧; 덧; 덧; 덧; ) HANGUL SYLLABLE DEOS
+B368;B368;1103 1165 11BB;B368;1103 1165 11BB; # (덨; 덨; 덨; 덨; 덨; ) HANGUL SYLLABLE DEOSS
+B369;B369;1103 1165 11BC;B369;1103 1165 11BC; # (덩; 덩; 덩; 덩; 덩; ) HANGUL SYLLABLE DEONG
+B36A;B36A;1103 1165 11BD;B36A;1103 1165 11BD; # (덪; 덪; 덪; 덪; 덪; ) HANGUL SYLLABLE DEOJ
+B36B;B36B;1103 1165 11BE;B36B;1103 1165 11BE; # (덫; 덫; 덫; 덫; 덫; ) HANGUL SYLLABLE DEOC
+B36C;B36C;1103 1165 11BF;B36C;1103 1165 11BF; # (덬; 덬; 덬; 덬; 덬; ) HANGUL SYLLABLE DEOK
+B36D;B36D;1103 1165 11C0;B36D;1103 1165 11C0; # (덭; 덭; 덭; 덭; 덭; ) HANGUL SYLLABLE DEOT
+B36E;B36E;1103 1165 11C1;B36E;1103 1165 11C1; # (덮; 덮; 덮; 덮; 덮; ) HANGUL SYLLABLE DEOP
+B36F;B36F;1103 1165 11C2;B36F;1103 1165 11C2; # (덯; 덯; 덯; 덯; 덯; ) HANGUL SYLLABLE DEOH
+B370;B370;1103 1166;B370;1103 1166; # (데; 데; 데; 데; 데; ) HANGUL SYLLABLE DE
+B371;B371;1103 1166 11A8;B371;1103 1166 11A8; # (덱; 덱; 덱; 덱; 덱; ) HANGUL SYLLABLE DEG
+B372;B372;1103 1166 11A9;B372;1103 1166 11A9; # (덲; 덲; 덲; 덲; 덲; ) HANGUL SYLLABLE DEGG
+B373;B373;1103 1166 11AA;B373;1103 1166 11AA; # (덳; 덳; 덳; 덳; 덳; ) HANGUL SYLLABLE DEGS
+B374;B374;1103 1166 11AB;B374;1103 1166 11AB; # (덴; 덴; 덴; 덴; 덴; ) HANGUL SYLLABLE DEN
+B375;B375;1103 1166 11AC;B375;1103 1166 11AC; # (덵; 덵; 덵; 덵; 덵; ) HANGUL SYLLABLE DENJ
+B376;B376;1103 1166 11AD;B376;1103 1166 11AD; # (덶; 덶; 덶; 덶; 덶; ) HANGUL SYLLABLE DENH
+B377;B377;1103 1166 11AE;B377;1103 1166 11AE; # (덷; 덷; 덷; 덷; 덷; ) HANGUL SYLLABLE DED
+B378;B378;1103 1166 11AF;B378;1103 1166 11AF; # (델; 델; 델; 델; 델; ) HANGUL SYLLABLE DEL
+B379;B379;1103 1166 11B0;B379;1103 1166 11B0; # (덹; 덹; 덹; 덹; 덹; ) HANGUL SYLLABLE DELG
+B37A;B37A;1103 1166 11B1;B37A;1103 1166 11B1; # (덺; 덺; 덺; 덺; 덺; ) HANGUL SYLLABLE DELM
+B37B;B37B;1103 1166 11B2;B37B;1103 1166 11B2; # (덻; 덻; 덻; 덻; 덻; ) HANGUL SYLLABLE DELB
+B37C;B37C;1103 1166 11B3;B37C;1103 1166 11B3; # (덼; 덼; 덼; 덼; 덼; ) HANGUL SYLLABLE DELS
+B37D;B37D;1103 1166 11B4;B37D;1103 1166 11B4; # (덽; 덽; 덽; 덽; 덽; ) HANGUL SYLLABLE DELT
+B37E;B37E;1103 1166 11B5;B37E;1103 1166 11B5; # (덾; 덾; 덾; 덾; 덾; ) HANGUL SYLLABLE DELP
+B37F;B37F;1103 1166 11B6;B37F;1103 1166 11B6; # (덿; 덿; 덿; 덿; 덿; ) HANGUL SYLLABLE DELH
+B380;B380;1103 1166 11B7;B380;1103 1166 11B7; # (뎀; 뎀; 뎀; 뎀; 뎀; ) HANGUL SYLLABLE DEM
+B381;B381;1103 1166 11B8;B381;1103 1166 11B8; # (뎁; 뎁; 뎁; 뎁; 뎁; ) HANGUL SYLLABLE DEB
+B382;B382;1103 1166 11B9;B382;1103 1166 11B9; # (뎂; 뎂; 뎂; 뎂; 뎂; ) HANGUL SYLLABLE DEBS
+B383;B383;1103 1166 11BA;B383;1103 1166 11BA; # (뎃; 뎃; 뎃; 뎃; 뎃; ) HANGUL SYLLABLE DES
+B384;B384;1103 1166 11BB;B384;1103 1166 11BB; # (뎄; 뎄; 뎄; 뎄; 뎄; ) HANGUL SYLLABLE DESS
+B385;B385;1103 1166 11BC;B385;1103 1166 11BC; # (뎅; 뎅; 뎅; 뎅; 뎅; ) HANGUL SYLLABLE DENG
+B386;B386;1103 1166 11BD;B386;1103 1166 11BD; # (뎆; 뎆; 뎆; 뎆; 뎆; ) HANGUL SYLLABLE DEJ
+B387;B387;1103 1166 11BE;B387;1103 1166 11BE; # (뎇; 뎇; 뎇; 뎇; 뎇; ) HANGUL SYLLABLE DEC
+B388;B388;1103 1166 11BF;B388;1103 1166 11BF; # (뎈; 뎈; 뎈; 뎈; 뎈; ) HANGUL SYLLABLE DEK
+B389;B389;1103 1166 11C0;B389;1103 1166 11C0; # (뎉; 뎉; 뎉; 뎉; 뎉; ) HANGUL SYLLABLE DET
+B38A;B38A;1103 1166 11C1;B38A;1103 1166 11C1; # (뎊; 뎊; 뎊; 뎊; 뎊; ) HANGUL SYLLABLE DEP
+B38B;B38B;1103 1166 11C2;B38B;1103 1166 11C2; # (뎋; 뎋; 뎋; 뎋; 뎋; ) HANGUL SYLLABLE DEH
+B38C;B38C;1103 1167;B38C;1103 1167; # (뎌; 뎌; 뎌; 뎌; 뎌; ) HANGUL SYLLABLE DYEO
+B38D;B38D;1103 1167 11A8;B38D;1103 1167 11A8; # (뎍; 뎍; 뎍; 뎍; 뎍; ) HANGUL SYLLABLE DYEOG
+B38E;B38E;1103 1167 11A9;B38E;1103 1167 11A9; # (뎎; 뎎; 뎎; 뎎; 뎎; ) HANGUL SYLLABLE DYEOGG
+B38F;B38F;1103 1167 11AA;B38F;1103 1167 11AA; # (뎏; 뎏; 뎏; 뎏; 뎏; ) HANGUL SYLLABLE DYEOGS
+B390;B390;1103 1167 11AB;B390;1103 1167 11AB; # (뎐; 뎐; 뎐; 뎐; 뎐; ) HANGUL SYLLABLE DYEON
+B391;B391;1103 1167 11AC;B391;1103 1167 11AC; # (뎑; 뎑; 뎑; 뎑; 뎑; ) HANGUL SYLLABLE DYEONJ
+B392;B392;1103 1167 11AD;B392;1103 1167 11AD; # (뎒; 뎒; 뎒; 뎒; 뎒; ) HANGUL SYLLABLE DYEONH
+B393;B393;1103 1167 11AE;B393;1103 1167 11AE; # (뎓; 뎓; 뎓; 뎓; 뎓; ) HANGUL SYLLABLE DYEOD
+B394;B394;1103 1167 11AF;B394;1103 1167 11AF; # (뎔; 뎔; 뎔; 뎔; 뎔; ) HANGUL SYLLABLE DYEOL
+B395;B395;1103 1167 11B0;B395;1103 1167 11B0; # (뎕; 뎕; 뎕; 뎕; 뎕; ) HANGUL SYLLABLE DYEOLG
+B396;B396;1103 1167 11B1;B396;1103 1167 11B1; # (뎖; 뎖; 뎖; 뎖; 뎖; ) HANGUL SYLLABLE DYEOLM
+B397;B397;1103 1167 11B2;B397;1103 1167 11B2; # (뎗; 뎗; 뎗; 뎗; 뎗; ) HANGUL SYLLABLE DYEOLB
+B398;B398;1103 1167 11B3;B398;1103 1167 11B3; # (뎘; 뎘; 뎘; 뎘; 뎘; ) HANGUL SYLLABLE DYEOLS
+B399;B399;1103 1167 11B4;B399;1103 1167 11B4; # (뎙; 뎙; 뎙; 뎙; 뎙; ) HANGUL SYLLABLE DYEOLT
+B39A;B39A;1103 1167 11B5;B39A;1103 1167 11B5; # (뎚; 뎚; 뎚; 뎚; 뎚; ) HANGUL SYLLABLE DYEOLP
+B39B;B39B;1103 1167 11B6;B39B;1103 1167 11B6; # (뎛; 뎛; 뎛; 뎛; 뎛; ) HANGUL SYLLABLE DYEOLH
+B39C;B39C;1103 1167 11B7;B39C;1103 1167 11B7; # (뎜; 뎜; 뎜; 뎜; 뎜; ) HANGUL SYLLABLE DYEOM
+B39D;B39D;1103 1167 11B8;B39D;1103 1167 11B8; # (뎝; 뎝; 뎝; 뎝; 뎝; ) HANGUL SYLLABLE DYEOB
+B39E;B39E;1103 1167 11B9;B39E;1103 1167 11B9; # (뎞; 뎞; 뎞; 뎞; 뎞; ) HANGUL SYLLABLE DYEOBS
+B39F;B39F;1103 1167 11BA;B39F;1103 1167 11BA; # (뎟; 뎟; 뎟; 뎟; 뎟; ) HANGUL SYLLABLE DYEOS
+B3A0;B3A0;1103 1167 11BB;B3A0;1103 1167 11BB; # (뎠; 뎠; 뎠; 뎠; 뎠; ) HANGUL SYLLABLE DYEOSS
+B3A1;B3A1;1103 1167 11BC;B3A1;1103 1167 11BC; # (뎡; 뎡; 뎡; 뎡; 뎡; ) HANGUL SYLLABLE DYEONG
+B3A2;B3A2;1103 1167 11BD;B3A2;1103 1167 11BD; # (뎢; 뎢; 뎢; 뎢; 뎢; ) HANGUL SYLLABLE DYEOJ
+B3A3;B3A3;1103 1167 11BE;B3A3;1103 1167 11BE; # (뎣; 뎣; 뎣; 뎣; 뎣; ) HANGUL SYLLABLE DYEOC
+B3A4;B3A4;1103 1167 11BF;B3A4;1103 1167 11BF; # (뎤; 뎤; 뎤; 뎤; 뎤; ) HANGUL SYLLABLE DYEOK
+B3A5;B3A5;1103 1167 11C0;B3A5;1103 1167 11C0; # (뎥; 뎥; 뎥; 뎥; 뎥; ) HANGUL SYLLABLE DYEOT
+B3A6;B3A6;1103 1167 11C1;B3A6;1103 1167 11C1; # (뎦; 뎦; 뎦; 뎦; 뎦; ) HANGUL SYLLABLE DYEOP
+B3A7;B3A7;1103 1167 11C2;B3A7;1103 1167 11C2; # (뎧; 뎧; 뎧; 뎧; 뎧; ) HANGUL SYLLABLE DYEOH
+B3A8;B3A8;1103 1168;B3A8;1103 1168; # (뎨; 뎨; 뎨; 뎨; 뎨; ) HANGUL SYLLABLE DYE
+B3A9;B3A9;1103 1168 11A8;B3A9;1103 1168 11A8; # (뎩; 뎩; 뎩; 뎩; 뎩; ) HANGUL SYLLABLE DYEG
+B3AA;B3AA;1103 1168 11A9;B3AA;1103 1168 11A9; # (뎪; 뎪; 뎪; 뎪; 뎪; ) HANGUL SYLLABLE DYEGG
+B3AB;B3AB;1103 1168 11AA;B3AB;1103 1168 11AA; # (뎫; 뎫; 뎫; 뎫; 뎫; ) HANGUL SYLLABLE DYEGS
+B3AC;B3AC;1103 1168 11AB;B3AC;1103 1168 11AB; # (뎬; 뎬; 뎬; 뎬; 뎬; ) HANGUL SYLLABLE DYEN
+B3AD;B3AD;1103 1168 11AC;B3AD;1103 1168 11AC; # (뎭; 뎭; 뎭; 뎭; 뎭; ) HANGUL SYLLABLE DYENJ
+B3AE;B3AE;1103 1168 11AD;B3AE;1103 1168 11AD; # (뎮; 뎮; 뎮; 뎮; 뎮; ) HANGUL SYLLABLE DYENH
+B3AF;B3AF;1103 1168 11AE;B3AF;1103 1168 11AE; # (뎯; 뎯; 뎯; 뎯; 뎯; ) HANGUL SYLLABLE DYED
+B3B0;B3B0;1103 1168 11AF;B3B0;1103 1168 11AF; # (뎰; 뎰; 뎰; 뎰; 뎰; ) HANGUL SYLLABLE DYEL
+B3B1;B3B1;1103 1168 11B0;B3B1;1103 1168 11B0; # (뎱; 뎱; 뎱; 뎱; 뎱; ) HANGUL SYLLABLE DYELG
+B3B2;B3B2;1103 1168 11B1;B3B2;1103 1168 11B1; # (뎲; 뎲; 뎲; 뎲; 뎲; ) HANGUL SYLLABLE DYELM
+B3B3;B3B3;1103 1168 11B2;B3B3;1103 1168 11B2; # (뎳; 뎳; 뎳; 뎳; 뎳; ) HANGUL SYLLABLE DYELB
+B3B4;B3B4;1103 1168 11B3;B3B4;1103 1168 11B3; # (뎴; 뎴; 뎴; 뎴; 뎴; ) HANGUL SYLLABLE DYELS
+B3B5;B3B5;1103 1168 11B4;B3B5;1103 1168 11B4; # (뎵; 뎵; 뎵; 뎵; 뎵; ) HANGUL SYLLABLE DYELT
+B3B6;B3B6;1103 1168 11B5;B3B6;1103 1168 11B5; # (뎶; 뎶; 뎶; 뎶; 뎶; ) HANGUL SYLLABLE DYELP
+B3B7;B3B7;1103 1168 11B6;B3B7;1103 1168 11B6; # (뎷; 뎷; 뎷; 뎷; 뎷; ) HANGUL SYLLABLE DYELH
+B3B8;B3B8;1103 1168 11B7;B3B8;1103 1168 11B7; # (뎸; 뎸; 뎸; 뎸; 뎸; ) HANGUL SYLLABLE DYEM
+B3B9;B3B9;1103 1168 11B8;B3B9;1103 1168 11B8; # (뎹; 뎹; 뎹; 뎹; 뎹; ) HANGUL SYLLABLE DYEB
+B3BA;B3BA;1103 1168 11B9;B3BA;1103 1168 11B9; # (뎺; 뎺; 뎺; 뎺; 뎺; ) HANGUL SYLLABLE DYEBS
+B3BB;B3BB;1103 1168 11BA;B3BB;1103 1168 11BA; # (뎻; 뎻; 뎻; 뎻; 뎻; ) HANGUL SYLLABLE DYES
+B3BC;B3BC;1103 1168 11BB;B3BC;1103 1168 11BB; # (뎼; 뎼; 뎼; 뎼; 뎼; ) HANGUL SYLLABLE DYESS
+B3BD;B3BD;1103 1168 11BC;B3BD;1103 1168 11BC; # (뎽; 뎽; 뎽; 뎽; 뎽; ) HANGUL SYLLABLE DYENG
+B3BE;B3BE;1103 1168 11BD;B3BE;1103 1168 11BD; # (뎾; 뎾; 뎾; 뎾; 뎾; ) HANGUL SYLLABLE DYEJ
+B3BF;B3BF;1103 1168 11BE;B3BF;1103 1168 11BE; # (뎿; 뎿; 뎿; 뎿; 뎿; ) HANGUL SYLLABLE DYEC
+B3C0;B3C0;1103 1168 11BF;B3C0;1103 1168 11BF; # (돀; 돀; 돀; 돀; 돀; ) HANGUL SYLLABLE DYEK
+B3C1;B3C1;1103 1168 11C0;B3C1;1103 1168 11C0; # (돁; 돁; 돁; 돁; 돁; ) HANGUL SYLLABLE DYET
+B3C2;B3C2;1103 1168 11C1;B3C2;1103 1168 11C1; # (돂; 돂; 돂; 돂; 돂; ) HANGUL SYLLABLE DYEP
+B3C3;B3C3;1103 1168 11C2;B3C3;1103 1168 11C2; # (돃; 돃; 돃; 돃; 돃; ) HANGUL SYLLABLE DYEH
+B3C4;B3C4;1103 1169;B3C4;1103 1169; # (도; 도; 도; 도; 도; ) HANGUL SYLLABLE DO
+B3C5;B3C5;1103 1169 11A8;B3C5;1103 1169 11A8; # (독; 독; 독; 독; 독; ) HANGUL SYLLABLE DOG
+B3C6;B3C6;1103 1169 11A9;B3C6;1103 1169 11A9; # (돆; 돆; 돆; 돆; 돆; ) HANGUL SYLLABLE DOGG
+B3C7;B3C7;1103 1169 11AA;B3C7;1103 1169 11AA; # (돇; 돇; 돇; 돇; 돇; ) HANGUL SYLLABLE DOGS
+B3C8;B3C8;1103 1169 11AB;B3C8;1103 1169 11AB; # (돈; 돈; 돈; 돈; 돈; ) HANGUL SYLLABLE DON
+B3C9;B3C9;1103 1169 11AC;B3C9;1103 1169 11AC; # (돉; 돉; 돉; 돉; 돉; ) HANGUL SYLLABLE DONJ
+B3CA;B3CA;1103 1169 11AD;B3CA;1103 1169 11AD; # (돊; 돊; 돊; 돊; 돊; ) HANGUL SYLLABLE DONH
+B3CB;B3CB;1103 1169 11AE;B3CB;1103 1169 11AE; # (돋; 돋; 돋; 돋; 돋; ) HANGUL SYLLABLE DOD
+B3CC;B3CC;1103 1169 11AF;B3CC;1103 1169 11AF; # (돌; 돌; 돌; 돌; 돌; ) HANGUL SYLLABLE DOL
+B3CD;B3CD;1103 1169 11B0;B3CD;1103 1169 11B0; # (돍; 돍; 돍; 돍; 돍; ) HANGUL SYLLABLE DOLG
+B3CE;B3CE;1103 1169 11B1;B3CE;1103 1169 11B1; # (돎; 돎; 돎; 돎; 돎; ) HANGUL SYLLABLE DOLM
+B3CF;B3CF;1103 1169 11B2;B3CF;1103 1169 11B2; # (돏; 돏; 돏; 돏; 돏; ) HANGUL SYLLABLE DOLB
+B3D0;B3D0;1103 1169 11B3;B3D0;1103 1169 11B3; # (돐; 돐; 돐; 돐; 돐; ) HANGUL SYLLABLE DOLS
+B3D1;B3D1;1103 1169 11B4;B3D1;1103 1169 11B4; # (돑; 돑; 돑; 돑; 돑; ) HANGUL SYLLABLE DOLT
+B3D2;B3D2;1103 1169 11B5;B3D2;1103 1169 11B5; # (돒; 돒; 돒; 돒; 돒; ) HANGUL SYLLABLE DOLP
+B3D3;B3D3;1103 1169 11B6;B3D3;1103 1169 11B6; # (돓; 돓; 돓; 돓; 돓; ) HANGUL SYLLABLE DOLH
+B3D4;B3D4;1103 1169 11B7;B3D4;1103 1169 11B7; # (돔; 돔; 돔; 돔; 돔; ) HANGUL SYLLABLE DOM
+B3D5;B3D5;1103 1169 11B8;B3D5;1103 1169 11B8; # (돕; 돕; 돕; 돕; 돕; ) HANGUL SYLLABLE DOB
+B3D6;B3D6;1103 1169 11B9;B3D6;1103 1169 11B9; # (돖; 돖; 돖; 돖; 돖; ) HANGUL SYLLABLE DOBS
+B3D7;B3D7;1103 1169 11BA;B3D7;1103 1169 11BA; # (돗; 돗; 돗; 돗; 돗; ) HANGUL SYLLABLE DOS
+B3D8;B3D8;1103 1169 11BB;B3D8;1103 1169 11BB; # (돘; 돘; 돘; 돘; 돘; ) HANGUL SYLLABLE DOSS
+B3D9;B3D9;1103 1169 11BC;B3D9;1103 1169 11BC; # (동; 동; 동; 동; 동; ) HANGUL SYLLABLE DONG
+B3DA;B3DA;1103 1169 11BD;B3DA;1103 1169 11BD; # (돚; 돚; 돚; 돚; 돚; ) HANGUL SYLLABLE DOJ
+B3DB;B3DB;1103 1169 11BE;B3DB;1103 1169 11BE; # (돛; 돛; 돛; 돛; 돛; ) HANGUL SYLLABLE DOC
+B3DC;B3DC;1103 1169 11BF;B3DC;1103 1169 11BF; # (돜; 돜; 돜; 돜; 돜; ) HANGUL SYLLABLE DOK
+B3DD;B3DD;1103 1169 11C0;B3DD;1103 1169 11C0; # (돝; 돝; 돝; 돝; 돝; ) HANGUL SYLLABLE DOT
+B3DE;B3DE;1103 1169 11C1;B3DE;1103 1169 11C1; # (돞; 돞; 돞; 돞; 돞; ) HANGUL SYLLABLE DOP
+B3DF;B3DF;1103 1169 11C2;B3DF;1103 1169 11C2; # (돟; 돟; 돟; 돟; 돟; ) HANGUL SYLLABLE DOH
+B3E0;B3E0;1103 116A;B3E0;1103 116A; # (돠; 돠; 돠; 돠; 돠; ) HANGUL SYLLABLE DWA
+B3E1;B3E1;1103 116A 11A8;B3E1;1103 116A 11A8; # (돡; 돡; 돡; 돡; 돡; ) HANGUL SYLLABLE DWAG
+B3E2;B3E2;1103 116A 11A9;B3E2;1103 116A 11A9; # (돢; 돢; 돢; 돢; 돢; ) HANGUL SYLLABLE DWAGG
+B3E3;B3E3;1103 116A 11AA;B3E3;1103 116A 11AA; # (돣; 돣; 돣; 돣; 돣; ) HANGUL SYLLABLE DWAGS
+B3E4;B3E4;1103 116A 11AB;B3E4;1103 116A 11AB; # (돤; 돤; 돤; 돤; 돤; ) HANGUL SYLLABLE DWAN
+B3E5;B3E5;1103 116A 11AC;B3E5;1103 116A 11AC; # (돥; 돥; 돥; 돥; 돥; ) HANGUL SYLLABLE DWANJ
+B3E6;B3E6;1103 116A 11AD;B3E6;1103 116A 11AD; # (돦; 돦; 돦; 돦; 돦; ) HANGUL SYLLABLE DWANH
+B3E7;B3E7;1103 116A 11AE;B3E7;1103 116A 11AE; # (돧; 돧; 돧; 돧; 돧; ) HANGUL SYLLABLE DWAD
+B3E8;B3E8;1103 116A 11AF;B3E8;1103 116A 11AF; # (돨; 돨; 돨; 돨; 돨; ) HANGUL SYLLABLE DWAL
+B3E9;B3E9;1103 116A 11B0;B3E9;1103 116A 11B0; # (돩; 돩; 돩; 돩; 돩; ) HANGUL SYLLABLE DWALG
+B3EA;B3EA;1103 116A 11B1;B3EA;1103 116A 11B1; # (돪; 돪; 돪; 돪; 돪; ) HANGUL SYLLABLE DWALM
+B3EB;B3EB;1103 116A 11B2;B3EB;1103 116A 11B2; # (돫; 돫; 돫; 돫; 돫; ) HANGUL SYLLABLE DWALB
+B3EC;B3EC;1103 116A 11B3;B3EC;1103 116A 11B3; # (돬; 돬; 돬; 돬; 돬; ) HANGUL SYLLABLE DWALS
+B3ED;B3ED;1103 116A 11B4;B3ED;1103 116A 11B4; # (돭; 돭; 돭; 돭; 돭; ) HANGUL SYLLABLE DWALT
+B3EE;B3EE;1103 116A 11B5;B3EE;1103 116A 11B5; # (돮; 돮; 돮; 돮; 돮; ) HANGUL SYLLABLE DWALP
+B3EF;B3EF;1103 116A 11B6;B3EF;1103 116A 11B6; # (돯; 돯; 돯; 돯; 돯; ) HANGUL SYLLABLE DWALH
+B3F0;B3F0;1103 116A 11B7;B3F0;1103 116A 11B7; # (돰; 돰; 돰; 돰; 돰; ) HANGUL SYLLABLE DWAM
+B3F1;B3F1;1103 116A 11B8;B3F1;1103 116A 11B8; # (돱; 돱; 돱; 돱; 돱; ) HANGUL SYLLABLE DWAB
+B3F2;B3F2;1103 116A 11B9;B3F2;1103 116A 11B9; # (돲; 돲; 돲; 돲; 돲; ) HANGUL SYLLABLE DWABS
+B3F3;B3F3;1103 116A 11BA;B3F3;1103 116A 11BA; # (돳; 돳; 돳; 돳; 돳; ) HANGUL SYLLABLE DWAS
+B3F4;B3F4;1103 116A 11BB;B3F4;1103 116A 11BB; # (돴; 돴; 돴; 돴; 돴; ) HANGUL SYLLABLE DWASS
+B3F5;B3F5;1103 116A 11BC;B3F5;1103 116A 11BC; # (돵; 돵; 돵; 돵; 돵; ) HANGUL SYLLABLE DWANG
+B3F6;B3F6;1103 116A 11BD;B3F6;1103 116A 11BD; # (돶; 돶; 돶; 돶; 돶; ) HANGUL SYLLABLE DWAJ
+B3F7;B3F7;1103 116A 11BE;B3F7;1103 116A 11BE; # (돷; 돷; 돷; 돷; 돷; ) HANGUL SYLLABLE DWAC
+B3F8;B3F8;1103 116A 11BF;B3F8;1103 116A 11BF; # (돸; 돸; 돸; 돸; 돸; ) HANGUL SYLLABLE DWAK
+B3F9;B3F9;1103 116A 11C0;B3F9;1103 116A 11C0; # (돹; 돹; 돹; 돹; 돹; ) HANGUL SYLLABLE DWAT
+B3FA;B3FA;1103 116A 11C1;B3FA;1103 116A 11C1; # (돺; 돺; 돺; 돺; 돺; ) HANGUL SYLLABLE DWAP
+B3FB;B3FB;1103 116A 11C2;B3FB;1103 116A 11C2; # (돻; 돻; 돻; 돻; 돻; ) HANGUL SYLLABLE DWAH
+B3FC;B3FC;1103 116B;B3FC;1103 116B; # (돼; 돼; 돼; 돼; 돼; ) HANGUL SYLLABLE DWAE
+B3FD;B3FD;1103 116B 11A8;B3FD;1103 116B 11A8; # (돽; 돽; 돽; 돽; 돽; ) HANGUL SYLLABLE DWAEG
+B3FE;B3FE;1103 116B 11A9;B3FE;1103 116B 11A9; # (돾; 돾; 돾; 돾; 돾; ) HANGUL SYLLABLE DWAEGG
+B3FF;B3FF;1103 116B 11AA;B3FF;1103 116B 11AA; # (돿; 돿; 돿; 돿; 돿; ) HANGUL SYLLABLE DWAEGS
+B400;B400;1103 116B 11AB;B400;1103 116B 11AB; # (됀; 됀; 됀; 됀; 됀; ) HANGUL SYLLABLE DWAEN
+B401;B401;1103 116B 11AC;B401;1103 116B 11AC; # (됁; 됁; 됁; 됁; 됁; ) HANGUL SYLLABLE DWAENJ
+B402;B402;1103 116B 11AD;B402;1103 116B 11AD; # (됂; 됂; 됂; 됂; 됂; ) HANGUL SYLLABLE DWAENH
+B403;B403;1103 116B 11AE;B403;1103 116B 11AE; # (됃; 됃; 됃; 됃; 됃; ) HANGUL SYLLABLE DWAED
+B404;B404;1103 116B 11AF;B404;1103 116B 11AF; # (됄; 됄; 됄; 됄; 됄; ) HANGUL SYLLABLE DWAEL
+B405;B405;1103 116B 11B0;B405;1103 116B 11B0; # (됅; 됅; 됅; 됅; 됅; ) HANGUL SYLLABLE DWAELG
+B406;B406;1103 116B 11B1;B406;1103 116B 11B1; # (됆; 됆; 됆; 됆; 됆; ) HANGUL SYLLABLE DWAELM
+B407;B407;1103 116B 11B2;B407;1103 116B 11B2; # (됇; 됇; 됇; 됇; 됇; ) HANGUL SYLLABLE DWAELB
+B408;B408;1103 116B 11B3;B408;1103 116B 11B3; # (됈; 됈; 됈; 됈; 됈; ) HANGUL SYLLABLE DWAELS
+B409;B409;1103 116B 11B4;B409;1103 116B 11B4; # (됉; 됉; 됉; 됉; 됉; ) HANGUL SYLLABLE DWAELT
+B40A;B40A;1103 116B 11B5;B40A;1103 116B 11B5; # (됊; 됊; 됊; 됊; 됊; ) HANGUL SYLLABLE DWAELP
+B40B;B40B;1103 116B 11B6;B40B;1103 116B 11B6; # (됋; 됋; 됋; 됋; 됋; ) HANGUL SYLLABLE DWAELH
+B40C;B40C;1103 116B 11B7;B40C;1103 116B 11B7; # (됌; 됌; 됌; 됌; 됌; ) HANGUL SYLLABLE DWAEM
+B40D;B40D;1103 116B 11B8;B40D;1103 116B 11B8; # (됍; 됍; 됍; 됍; 됍; ) HANGUL SYLLABLE DWAEB
+B40E;B40E;1103 116B 11B9;B40E;1103 116B 11B9; # (됎; 됎; 됎; 됎; 됎; ) HANGUL SYLLABLE DWAEBS
+B40F;B40F;1103 116B 11BA;B40F;1103 116B 11BA; # (됏; 됏; 됏; 됏; 됏; ) HANGUL SYLLABLE DWAES
+B410;B410;1103 116B 11BB;B410;1103 116B 11BB; # (됐; 됐; 됐; 됐; 됐; ) HANGUL SYLLABLE DWAESS
+B411;B411;1103 116B 11BC;B411;1103 116B 11BC; # (됑; 됑; 됑; 됑; 됑; ) HANGUL SYLLABLE DWAENG
+B412;B412;1103 116B 11BD;B412;1103 116B 11BD; # (됒; 됒; 됒; 됒; 됒; ) HANGUL SYLLABLE DWAEJ
+B413;B413;1103 116B 11BE;B413;1103 116B 11BE; # (됓; 됓; 됓; 됓; 됓; ) HANGUL SYLLABLE DWAEC
+B414;B414;1103 116B 11BF;B414;1103 116B 11BF; # (됔; 됔; 됔; 됔; 됔; ) HANGUL SYLLABLE DWAEK
+B415;B415;1103 116B 11C0;B415;1103 116B 11C0; # (됕; 됕; 됕; 됕; 됕; ) HANGUL SYLLABLE DWAET
+B416;B416;1103 116B 11C1;B416;1103 116B 11C1; # (됖; 됖; 됖; 됖; 됖; ) HANGUL SYLLABLE DWAEP
+B417;B417;1103 116B 11C2;B417;1103 116B 11C2; # (됗; 됗; 됗; 됗; 됗; ) HANGUL SYLLABLE DWAEH
+B418;B418;1103 116C;B418;1103 116C; # (되; 되; 되; 되; 되; ) HANGUL SYLLABLE DOE
+B419;B419;1103 116C 11A8;B419;1103 116C 11A8; # (됙; 됙; 됙; 됙; 됙; ) HANGUL SYLLABLE DOEG
+B41A;B41A;1103 116C 11A9;B41A;1103 116C 11A9; # (됚; 됚; 됚; 됚; 됚; ) HANGUL SYLLABLE DOEGG
+B41B;B41B;1103 116C 11AA;B41B;1103 116C 11AA; # (됛; 됛; 됛; 됛; 됛; ) HANGUL SYLLABLE DOEGS
+B41C;B41C;1103 116C 11AB;B41C;1103 116C 11AB; # (된; 된; 된; 된; 된; ) HANGUL SYLLABLE DOEN
+B41D;B41D;1103 116C 11AC;B41D;1103 116C 11AC; # (됝; 됝; 됝; 됝; 됝; ) HANGUL SYLLABLE DOENJ
+B41E;B41E;1103 116C 11AD;B41E;1103 116C 11AD; # (됞; 됞; 됞; 됞; 됞; ) HANGUL SYLLABLE DOENH
+B41F;B41F;1103 116C 11AE;B41F;1103 116C 11AE; # (됟; 됟; 됟; 됟; 됟; ) HANGUL SYLLABLE DOED
+B420;B420;1103 116C 11AF;B420;1103 116C 11AF; # (될; 될; 될; 될; 될; ) HANGUL SYLLABLE DOEL
+B421;B421;1103 116C 11B0;B421;1103 116C 11B0; # (됡; 됡; 됡; 됡; 됡; ) HANGUL SYLLABLE DOELG
+B422;B422;1103 116C 11B1;B422;1103 116C 11B1; # (됢; 됢; 됢; 됢; 됢; ) HANGUL SYLLABLE DOELM
+B423;B423;1103 116C 11B2;B423;1103 116C 11B2; # (됣; 됣; 됣; 됣; 됣; ) HANGUL SYLLABLE DOELB
+B424;B424;1103 116C 11B3;B424;1103 116C 11B3; # (됤; 됤; 됤; 됤; 됤; ) HANGUL SYLLABLE DOELS
+B425;B425;1103 116C 11B4;B425;1103 116C 11B4; # (됥; 됥; 됥; 됥; 됥; ) HANGUL SYLLABLE DOELT
+B426;B426;1103 116C 11B5;B426;1103 116C 11B5; # (됦; 됦; 됦; 됦; 됦; ) HANGUL SYLLABLE DOELP
+B427;B427;1103 116C 11B6;B427;1103 116C 11B6; # (됧; 됧; 됧; 됧; 됧; ) HANGUL SYLLABLE DOELH
+B428;B428;1103 116C 11B7;B428;1103 116C 11B7; # (됨; 됨; 됨; 됨; 됨; ) HANGUL SYLLABLE DOEM
+B429;B429;1103 116C 11B8;B429;1103 116C 11B8; # (됩; 됩; 됩; 됩; 됩; ) HANGUL SYLLABLE DOEB
+B42A;B42A;1103 116C 11B9;B42A;1103 116C 11B9; # (됪; 됪; 됪; 됪; 됪; ) HANGUL SYLLABLE DOEBS
+B42B;B42B;1103 116C 11BA;B42B;1103 116C 11BA; # (됫; 됫; 됫; 됫; 됫; ) HANGUL SYLLABLE DOES
+B42C;B42C;1103 116C 11BB;B42C;1103 116C 11BB; # (됬; 됬; 됬; 됬; 됬; ) HANGUL SYLLABLE DOESS
+B42D;B42D;1103 116C 11BC;B42D;1103 116C 11BC; # (됭; 됭; 됭; 됭; 됭; ) HANGUL SYLLABLE DOENG
+B42E;B42E;1103 116C 11BD;B42E;1103 116C 11BD; # (됮; 됮; 됮; 됮; 됮; ) HANGUL SYLLABLE DOEJ
+B42F;B42F;1103 116C 11BE;B42F;1103 116C 11BE; # (됯; 됯; 됯; 됯; 됯; ) HANGUL SYLLABLE DOEC
+B430;B430;1103 116C 11BF;B430;1103 116C 11BF; # (됰; 됰; 됰; 됰; 됰; ) HANGUL SYLLABLE DOEK
+B431;B431;1103 116C 11C0;B431;1103 116C 11C0; # (됱; 됱; 됱; 됱; 됱; ) HANGUL SYLLABLE DOET
+B432;B432;1103 116C 11C1;B432;1103 116C 11C1; # (됲; 됲; 됲; 됲; 됲; ) HANGUL SYLLABLE DOEP
+B433;B433;1103 116C 11C2;B433;1103 116C 11C2; # (됳; 됳; 됳; 됳; 됳; ) HANGUL SYLLABLE DOEH
+B434;B434;1103 116D;B434;1103 116D; # (됴; 됴; 됴; 됴; 됴; ) HANGUL SYLLABLE DYO
+B435;B435;1103 116D 11A8;B435;1103 116D 11A8; # (됵; 됵; 됵; 됵; 됵; ) HANGUL SYLLABLE DYOG
+B436;B436;1103 116D 11A9;B436;1103 116D 11A9; # (됶; 됶; 됶; 됶; 됶; ) HANGUL SYLLABLE DYOGG
+B437;B437;1103 116D 11AA;B437;1103 116D 11AA; # (됷; 됷; 됷; 됷; 됷; ) HANGUL SYLLABLE DYOGS
+B438;B438;1103 116D 11AB;B438;1103 116D 11AB; # (됸; 됸; 됸; 됸; 됸; ) HANGUL SYLLABLE DYON
+B439;B439;1103 116D 11AC;B439;1103 116D 11AC; # (됹; 됹; 됹; 됹; 됹; ) HANGUL SYLLABLE DYONJ
+B43A;B43A;1103 116D 11AD;B43A;1103 116D 11AD; # (됺; 됺; 됺; 됺; 됺; ) HANGUL SYLLABLE DYONH
+B43B;B43B;1103 116D 11AE;B43B;1103 116D 11AE; # (됻; 됻; 됻; 됻; 됻; ) HANGUL SYLLABLE DYOD
+B43C;B43C;1103 116D 11AF;B43C;1103 116D 11AF; # (됼; 됼; 됼; 됼; 됼; ) HANGUL SYLLABLE DYOL
+B43D;B43D;1103 116D 11B0;B43D;1103 116D 11B0; # (됽; 됽; 됽; 됽; 됽; ) HANGUL SYLLABLE DYOLG
+B43E;B43E;1103 116D 11B1;B43E;1103 116D 11B1; # (됾; 됾; 됾; 됾; 됾; ) HANGUL SYLLABLE DYOLM
+B43F;B43F;1103 116D 11B2;B43F;1103 116D 11B2; # (됿; 됿; 됿; 됿; 됿; ) HANGUL SYLLABLE DYOLB
+B440;B440;1103 116D 11B3;B440;1103 116D 11B3; # (둀; 둀; 둀; 둀; 둀; ) HANGUL SYLLABLE DYOLS
+B441;B441;1103 116D 11B4;B441;1103 116D 11B4; # (둁; 둁; 둁; 둁; 둁; ) HANGUL SYLLABLE DYOLT
+B442;B442;1103 116D 11B5;B442;1103 116D 11B5; # (둂; 둂; 둂; 둂; 둂; ) HANGUL SYLLABLE DYOLP
+B443;B443;1103 116D 11B6;B443;1103 116D 11B6; # (둃; 둃; 둃; 둃; 둃; ) HANGUL SYLLABLE DYOLH
+B444;B444;1103 116D 11B7;B444;1103 116D 11B7; # (둄; 둄; 둄; 둄; 둄; ) HANGUL SYLLABLE DYOM
+B445;B445;1103 116D 11B8;B445;1103 116D 11B8; # (둅; 둅; 둅; 둅; 둅; ) HANGUL SYLLABLE DYOB
+B446;B446;1103 116D 11B9;B446;1103 116D 11B9; # (둆; 둆; 둆; 둆; 둆; ) HANGUL SYLLABLE DYOBS
+B447;B447;1103 116D 11BA;B447;1103 116D 11BA; # (둇; 둇; 둇; 둇; 둇; ) HANGUL SYLLABLE DYOS
+B448;B448;1103 116D 11BB;B448;1103 116D 11BB; # (둈; 둈; 둈; 둈; 둈; ) HANGUL SYLLABLE DYOSS
+B449;B449;1103 116D 11BC;B449;1103 116D 11BC; # (둉; 둉; 둉; 둉; 둉; ) HANGUL SYLLABLE DYONG
+B44A;B44A;1103 116D 11BD;B44A;1103 116D 11BD; # (둊; 둊; 둊; 둊; 둊; ) HANGUL SYLLABLE DYOJ
+B44B;B44B;1103 116D 11BE;B44B;1103 116D 11BE; # (둋; 둋; 둋; 둋; 둋; ) HANGUL SYLLABLE DYOC
+B44C;B44C;1103 116D 11BF;B44C;1103 116D 11BF; # (둌; 둌; 둌; 둌; 둌; ) HANGUL SYLLABLE DYOK
+B44D;B44D;1103 116D 11C0;B44D;1103 116D 11C0; # (둍; 둍; 둍; 둍; 둍; ) HANGUL SYLLABLE DYOT
+B44E;B44E;1103 116D 11C1;B44E;1103 116D 11C1; # (둎; 둎; 둎; 둎; 둎; ) HANGUL SYLLABLE DYOP
+B44F;B44F;1103 116D 11C2;B44F;1103 116D 11C2; # (둏; 둏; 둏; 둏; 둏; ) HANGUL SYLLABLE DYOH
+B450;B450;1103 116E;B450;1103 116E; # (두; 두; 두; 두; 두; ) HANGUL SYLLABLE DU
+B451;B451;1103 116E 11A8;B451;1103 116E 11A8; # (둑; 둑; 둑; 둑; 둑; ) HANGUL SYLLABLE DUG
+B452;B452;1103 116E 11A9;B452;1103 116E 11A9; # (둒; 둒; 둒; 둒; 둒; ) HANGUL SYLLABLE DUGG
+B453;B453;1103 116E 11AA;B453;1103 116E 11AA; # (둓; 둓; 둓; 둓; 둓; ) HANGUL SYLLABLE DUGS
+B454;B454;1103 116E 11AB;B454;1103 116E 11AB; # (둔; 둔; 둔; 둔; 둔; ) HANGUL SYLLABLE DUN
+B455;B455;1103 116E 11AC;B455;1103 116E 11AC; # (둕; 둕; 둕; 둕; 둕; ) HANGUL SYLLABLE DUNJ
+B456;B456;1103 116E 11AD;B456;1103 116E 11AD; # (둖; 둖; 둖; 둖; 둖; ) HANGUL SYLLABLE DUNH
+B457;B457;1103 116E 11AE;B457;1103 116E 11AE; # (둗; 둗; 둗; 둗; 둗; ) HANGUL SYLLABLE DUD
+B458;B458;1103 116E 11AF;B458;1103 116E 11AF; # (둘; 둘; 둘; 둘; 둘; ) HANGUL SYLLABLE DUL
+B459;B459;1103 116E 11B0;B459;1103 116E 11B0; # (둙; 둙; 둙; 둙; 둙; ) HANGUL SYLLABLE DULG
+B45A;B45A;1103 116E 11B1;B45A;1103 116E 11B1; # (둚; 둚; 둚; 둚; 둚; ) HANGUL SYLLABLE DULM
+B45B;B45B;1103 116E 11B2;B45B;1103 116E 11B2; # (둛; 둛; 둛; 둛; 둛; ) HANGUL SYLLABLE DULB
+B45C;B45C;1103 116E 11B3;B45C;1103 116E 11B3; # (둜; 둜; 둜; 둜; 둜; ) HANGUL SYLLABLE DULS
+B45D;B45D;1103 116E 11B4;B45D;1103 116E 11B4; # (둝; 둝; 둝; 둝; 둝; ) HANGUL SYLLABLE DULT
+B45E;B45E;1103 116E 11B5;B45E;1103 116E 11B5; # (둞; 둞; 둞; 둞; 둞; ) HANGUL SYLLABLE DULP
+B45F;B45F;1103 116E 11B6;B45F;1103 116E 11B6; # (둟; 둟; 둟; 둟; 둟; ) HANGUL SYLLABLE DULH
+B460;B460;1103 116E 11B7;B460;1103 116E 11B7; # (둠; 둠; 둠; 둠; 둠; ) HANGUL SYLLABLE DUM
+B461;B461;1103 116E 11B8;B461;1103 116E 11B8; # (둡; 둡; 둡; 둡; 둡; ) HANGUL SYLLABLE DUB
+B462;B462;1103 116E 11B9;B462;1103 116E 11B9; # (둢; 둢; 둢; 둢; 둢; ) HANGUL SYLLABLE DUBS
+B463;B463;1103 116E 11BA;B463;1103 116E 11BA; # (둣; 둣; 둣; 둣; 둣; ) HANGUL SYLLABLE DUS
+B464;B464;1103 116E 11BB;B464;1103 116E 11BB; # (둤; 둤; 둤; 둤; 둤; ) HANGUL SYLLABLE DUSS
+B465;B465;1103 116E 11BC;B465;1103 116E 11BC; # (둥; 둥; 둥; 둥; 둥; ) HANGUL SYLLABLE DUNG
+B466;B466;1103 116E 11BD;B466;1103 116E 11BD; # (둦; 둦; 둦; 둦; 둦; ) HANGUL SYLLABLE DUJ
+B467;B467;1103 116E 11BE;B467;1103 116E 11BE; # (둧; 둧; 둧; 둧; 둧; ) HANGUL SYLLABLE DUC
+B468;B468;1103 116E 11BF;B468;1103 116E 11BF; # (둨; 둨; 둨; 둨; 둨; ) HANGUL SYLLABLE DUK
+B469;B469;1103 116E 11C0;B469;1103 116E 11C0; # (둩; 둩; 둩; 둩; 둩; ) HANGUL SYLLABLE DUT
+B46A;B46A;1103 116E 11C1;B46A;1103 116E 11C1; # (둪; 둪; 둪; 둪; 둪; ) HANGUL SYLLABLE DUP
+B46B;B46B;1103 116E 11C2;B46B;1103 116E 11C2; # (둫; 둫; 둫; 둫; 둫; ) HANGUL SYLLABLE DUH
+B46C;B46C;1103 116F;B46C;1103 116F; # (둬; 둬; 둬; 둬; 둬; ) HANGUL SYLLABLE DWEO
+B46D;B46D;1103 116F 11A8;B46D;1103 116F 11A8; # (둭; 둭; 둭; 둭; 둭; ) HANGUL SYLLABLE DWEOG
+B46E;B46E;1103 116F 11A9;B46E;1103 116F 11A9; # (둮; 둮; 둮; 둮; 둮; ) HANGUL SYLLABLE DWEOGG
+B46F;B46F;1103 116F 11AA;B46F;1103 116F 11AA; # (둯; 둯; 둯; 둯; 둯; ) HANGUL SYLLABLE DWEOGS
+B470;B470;1103 116F 11AB;B470;1103 116F 11AB; # (둰; 둰; 둰; 둰; 둰; ) HANGUL SYLLABLE DWEON
+B471;B471;1103 116F 11AC;B471;1103 116F 11AC; # (둱; 둱; 둱; 둱; 둱; ) HANGUL SYLLABLE DWEONJ
+B472;B472;1103 116F 11AD;B472;1103 116F 11AD; # (둲; 둲; 둲; 둲; 둲; ) HANGUL SYLLABLE DWEONH
+B473;B473;1103 116F 11AE;B473;1103 116F 11AE; # (둳; 둳; 둳; 둳; 둳; ) HANGUL SYLLABLE DWEOD
+B474;B474;1103 116F 11AF;B474;1103 116F 11AF; # (둴; 둴; 둴; 둴; 둴; ) HANGUL SYLLABLE DWEOL
+B475;B475;1103 116F 11B0;B475;1103 116F 11B0; # (둵; 둵; 둵; 둵; 둵; ) HANGUL SYLLABLE DWEOLG
+B476;B476;1103 116F 11B1;B476;1103 116F 11B1; # (둶; 둶; 둶; 둶; 둶; ) HANGUL SYLLABLE DWEOLM
+B477;B477;1103 116F 11B2;B477;1103 116F 11B2; # (둷; 둷; 둷; 둷; 둷; ) HANGUL SYLLABLE DWEOLB
+B478;B478;1103 116F 11B3;B478;1103 116F 11B3; # (둸; 둸; 둸; 둸; 둸; ) HANGUL SYLLABLE DWEOLS
+B479;B479;1103 116F 11B4;B479;1103 116F 11B4; # (둹; 둹; 둹; 둹; 둹; ) HANGUL SYLLABLE DWEOLT
+B47A;B47A;1103 116F 11B5;B47A;1103 116F 11B5; # (둺; 둺; 둺; 둺; 둺; ) HANGUL SYLLABLE DWEOLP
+B47B;B47B;1103 116F 11B6;B47B;1103 116F 11B6; # (둻; 둻; 둻; 둻; 둻; ) HANGUL SYLLABLE DWEOLH
+B47C;B47C;1103 116F 11B7;B47C;1103 116F 11B7; # (둼; 둼; 둼; 둼; 둼; ) HANGUL SYLLABLE DWEOM
+B47D;B47D;1103 116F 11B8;B47D;1103 116F 11B8; # (둽; 둽; 둽; 둽; 둽; ) HANGUL SYLLABLE DWEOB
+B47E;B47E;1103 116F 11B9;B47E;1103 116F 11B9; # (둾; 둾; 둾; 둾; 둾; ) HANGUL SYLLABLE DWEOBS
+B47F;B47F;1103 116F 11BA;B47F;1103 116F 11BA; # (둿; 둿; 둿; 둿; 둿; ) HANGUL SYLLABLE DWEOS
+B480;B480;1103 116F 11BB;B480;1103 116F 11BB; # (뒀; 뒀; 뒀; 뒀; 뒀; ) HANGUL SYLLABLE DWEOSS
+B481;B481;1103 116F 11BC;B481;1103 116F 11BC; # (뒁; 뒁; 뒁; 뒁; 뒁; ) HANGUL SYLLABLE DWEONG
+B482;B482;1103 116F 11BD;B482;1103 116F 11BD; # (뒂; 뒂; 뒂; 뒂; 뒂; ) HANGUL SYLLABLE DWEOJ
+B483;B483;1103 116F 11BE;B483;1103 116F 11BE; # (뒃; 뒃; 뒃; 뒃; 뒃; ) HANGUL SYLLABLE DWEOC
+B484;B484;1103 116F 11BF;B484;1103 116F 11BF; # (뒄; 뒄; 뒄; 뒄; 뒄; ) HANGUL SYLLABLE DWEOK
+B485;B485;1103 116F 11C0;B485;1103 116F 11C0; # (뒅; 뒅; 뒅; 뒅; 뒅; ) HANGUL SYLLABLE DWEOT
+B486;B486;1103 116F 11C1;B486;1103 116F 11C1; # (뒆; 뒆; 뒆; 뒆; 뒆; ) HANGUL SYLLABLE DWEOP
+B487;B487;1103 116F 11C2;B487;1103 116F 11C2; # (뒇; 뒇; 뒇; 뒇; 뒇; ) HANGUL SYLLABLE DWEOH
+B488;B488;1103 1170;B488;1103 1170; # (뒈; 뒈; 뒈; 뒈; 뒈; ) HANGUL SYLLABLE DWE
+B489;B489;1103 1170 11A8;B489;1103 1170 11A8; # (뒉; 뒉; 뒉; 뒉; 뒉; ) HANGUL SYLLABLE DWEG
+B48A;B48A;1103 1170 11A9;B48A;1103 1170 11A9; # (뒊; 뒊; 뒊; 뒊; 뒊; ) HANGUL SYLLABLE DWEGG
+B48B;B48B;1103 1170 11AA;B48B;1103 1170 11AA; # (뒋; 뒋; 뒋; 뒋; 뒋; ) HANGUL SYLLABLE DWEGS
+B48C;B48C;1103 1170 11AB;B48C;1103 1170 11AB; # (뒌; 뒌; 뒌; 뒌; 뒌; ) HANGUL SYLLABLE DWEN
+B48D;B48D;1103 1170 11AC;B48D;1103 1170 11AC; # (뒍; 뒍; 뒍; 뒍; 뒍; ) HANGUL SYLLABLE DWENJ
+B48E;B48E;1103 1170 11AD;B48E;1103 1170 11AD; # (뒎; 뒎; 뒎; 뒎; 뒎; ) HANGUL SYLLABLE DWENH
+B48F;B48F;1103 1170 11AE;B48F;1103 1170 11AE; # (뒏; 뒏; 뒏; 뒏; 뒏; ) HANGUL SYLLABLE DWED
+B490;B490;1103 1170 11AF;B490;1103 1170 11AF; # (뒐; 뒐; 뒐; 뒐; 뒐; ) HANGUL SYLLABLE DWEL
+B491;B491;1103 1170 11B0;B491;1103 1170 11B0; # (뒑; 뒑; 뒑; 뒑; 뒑; ) HANGUL SYLLABLE DWELG
+B492;B492;1103 1170 11B1;B492;1103 1170 11B1; # (뒒; 뒒; 뒒; 뒒; 뒒; ) HANGUL SYLLABLE DWELM
+B493;B493;1103 1170 11B2;B493;1103 1170 11B2; # (뒓; 뒓; 뒓; 뒓; 뒓; ) HANGUL SYLLABLE DWELB
+B494;B494;1103 1170 11B3;B494;1103 1170 11B3; # (뒔; 뒔; 뒔; 뒔; 뒔; ) HANGUL SYLLABLE DWELS
+B495;B495;1103 1170 11B4;B495;1103 1170 11B4; # (뒕; 뒕; 뒕; 뒕; 뒕; ) HANGUL SYLLABLE DWELT
+B496;B496;1103 1170 11B5;B496;1103 1170 11B5; # (뒖; 뒖; 뒖; 뒖; 뒖; ) HANGUL SYLLABLE DWELP
+B497;B497;1103 1170 11B6;B497;1103 1170 11B6; # (뒗; 뒗; 뒗; 뒗; 뒗; ) HANGUL SYLLABLE DWELH
+B498;B498;1103 1170 11B7;B498;1103 1170 11B7; # (뒘; 뒘; 뒘; 뒘; 뒘; ) HANGUL SYLLABLE DWEM
+B499;B499;1103 1170 11B8;B499;1103 1170 11B8; # (뒙; 뒙; 뒙; 뒙; 뒙; ) HANGUL SYLLABLE DWEB
+B49A;B49A;1103 1170 11B9;B49A;1103 1170 11B9; # (뒚; 뒚; 뒚; 뒚; 뒚; ) HANGUL SYLLABLE DWEBS
+B49B;B49B;1103 1170 11BA;B49B;1103 1170 11BA; # (뒛; 뒛; 뒛; 뒛; 뒛; ) HANGUL SYLLABLE DWES
+B49C;B49C;1103 1170 11BB;B49C;1103 1170 11BB; # (뒜; 뒜; 뒜; 뒜; 뒜; ) HANGUL SYLLABLE DWESS
+B49D;B49D;1103 1170 11BC;B49D;1103 1170 11BC; # (뒝; 뒝; 뒝; 뒝; 뒝; ) HANGUL SYLLABLE DWENG
+B49E;B49E;1103 1170 11BD;B49E;1103 1170 11BD; # (뒞; 뒞; 뒞; 뒞; 뒞; ) HANGUL SYLLABLE DWEJ
+B49F;B49F;1103 1170 11BE;B49F;1103 1170 11BE; # (뒟; 뒟; 뒟; 뒟; 뒟; ) HANGUL SYLLABLE DWEC
+B4A0;B4A0;1103 1170 11BF;B4A0;1103 1170 11BF; # (뒠; 뒠; 뒠; 뒠; 뒠; ) HANGUL SYLLABLE DWEK
+B4A1;B4A1;1103 1170 11C0;B4A1;1103 1170 11C0; # (뒡; 뒡; 뒡; 뒡; 뒡; ) HANGUL SYLLABLE DWET
+B4A2;B4A2;1103 1170 11C1;B4A2;1103 1170 11C1; # (뒢; 뒢; 뒢; 뒢; 뒢; ) HANGUL SYLLABLE DWEP
+B4A3;B4A3;1103 1170 11C2;B4A3;1103 1170 11C2; # (뒣; 뒣; 뒣; 뒣; 뒣; ) HANGUL SYLLABLE DWEH
+B4A4;B4A4;1103 1171;B4A4;1103 1171; # (뒤; 뒤; 뒤; 뒤; 뒤; ) HANGUL SYLLABLE DWI
+B4A5;B4A5;1103 1171 11A8;B4A5;1103 1171 11A8; # (뒥; 뒥; 뒥; 뒥; 뒥; ) HANGUL SYLLABLE DWIG
+B4A6;B4A6;1103 1171 11A9;B4A6;1103 1171 11A9; # (뒦; 뒦; 뒦; 뒦; 뒦; ) HANGUL SYLLABLE DWIGG
+B4A7;B4A7;1103 1171 11AA;B4A7;1103 1171 11AA; # (뒧; 뒧; 뒧; 뒧; 뒧; ) HANGUL SYLLABLE DWIGS
+B4A8;B4A8;1103 1171 11AB;B4A8;1103 1171 11AB; # (뒨; 뒨; 뒨; 뒨; 뒨; ) HANGUL SYLLABLE DWIN
+B4A9;B4A9;1103 1171 11AC;B4A9;1103 1171 11AC; # (뒩; 뒩; 뒩; 뒩; 뒩; ) HANGUL SYLLABLE DWINJ
+B4AA;B4AA;1103 1171 11AD;B4AA;1103 1171 11AD; # (뒪; 뒪; 뒪; 뒪; 뒪; ) HANGUL SYLLABLE DWINH
+B4AB;B4AB;1103 1171 11AE;B4AB;1103 1171 11AE; # (뒫; 뒫; 뒫; 뒫; 뒫; ) HANGUL SYLLABLE DWID
+B4AC;B4AC;1103 1171 11AF;B4AC;1103 1171 11AF; # (뒬; 뒬; 뒬; 뒬; 뒬; ) HANGUL SYLLABLE DWIL
+B4AD;B4AD;1103 1171 11B0;B4AD;1103 1171 11B0; # (뒭; 뒭; 뒭; 뒭; 뒭; ) HANGUL SYLLABLE DWILG
+B4AE;B4AE;1103 1171 11B1;B4AE;1103 1171 11B1; # (뒮; 뒮; 뒮; 뒮; 뒮; ) HANGUL SYLLABLE DWILM
+B4AF;B4AF;1103 1171 11B2;B4AF;1103 1171 11B2; # (뒯; 뒯; 뒯; 뒯; 뒯; ) HANGUL SYLLABLE DWILB
+B4B0;B4B0;1103 1171 11B3;B4B0;1103 1171 11B3; # (뒰; 뒰; 뒰; 뒰; 뒰; ) HANGUL SYLLABLE DWILS
+B4B1;B4B1;1103 1171 11B4;B4B1;1103 1171 11B4; # (뒱; 뒱; 뒱; 뒱; 뒱; ) HANGUL SYLLABLE DWILT
+B4B2;B4B2;1103 1171 11B5;B4B2;1103 1171 11B5; # (뒲; 뒲; 뒲; 뒲; 뒲; ) HANGUL SYLLABLE DWILP
+B4B3;B4B3;1103 1171 11B6;B4B3;1103 1171 11B6; # (뒳; 뒳; 뒳; 뒳; 뒳; ) HANGUL SYLLABLE DWILH
+B4B4;B4B4;1103 1171 11B7;B4B4;1103 1171 11B7; # (뒴; 뒴; 뒴; 뒴; 뒴; ) HANGUL SYLLABLE DWIM
+B4B5;B4B5;1103 1171 11B8;B4B5;1103 1171 11B8; # (뒵; 뒵; 뒵; 뒵; 뒵; ) HANGUL SYLLABLE DWIB
+B4B6;B4B6;1103 1171 11B9;B4B6;1103 1171 11B9; # (뒶; 뒶; 뒶; 뒶; 뒶; ) HANGUL SYLLABLE DWIBS
+B4B7;B4B7;1103 1171 11BA;B4B7;1103 1171 11BA; # (뒷; 뒷; 뒷; 뒷; 뒷; ) HANGUL SYLLABLE DWIS
+B4B8;B4B8;1103 1171 11BB;B4B8;1103 1171 11BB; # (뒸; 뒸; 뒸; 뒸; 뒸; ) HANGUL SYLLABLE DWISS
+B4B9;B4B9;1103 1171 11BC;B4B9;1103 1171 11BC; # (뒹; 뒹; 뒹; 뒹; 뒹; ) HANGUL SYLLABLE DWING
+B4BA;B4BA;1103 1171 11BD;B4BA;1103 1171 11BD; # (뒺; 뒺; 뒺; 뒺; 뒺; ) HANGUL SYLLABLE DWIJ
+B4BB;B4BB;1103 1171 11BE;B4BB;1103 1171 11BE; # (뒻; 뒻; 뒻; 뒻; 뒻; ) HANGUL SYLLABLE DWIC
+B4BC;B4BC;1103 1171 11BF;B4BC;1103 1171 11BF; # (뒼; 뒼; 뒼; 뒼; 뒼; ) HANGUL SYLLABLE DWIK
+B4BD;B4BD;1103 1171 11C0;B4BD;1103 1171 11C0; # (뒽; 뒽; 뒽; 뒽; 뒽; ) HANGUL SYLLABLE DWIT
+B4BE;B4BE;1103 1171 11C1;B4BE;1103 1171 11C1; # (뒾; 뒾; 뒾; 뒾; 뒾; ) HANGUL SYLLABLE DWIP
+B4BF;B4BF;1103 1171 11C2;B4BF;1103 1171 11C2; # (뒿; 뒿; 뒿; 뒿; 뒿; ) HANGUL SYLLABLE DWIH
+B4C0;B4C0;1103 1172;B4C0;1103 1172; # (듀; 듀; 듀; 듀; 듀; ) HANGUL SYLLABLE DYU
+B4C1;B4C1;1103 1172 11A8;B4C1;1103 1172 11A8; # (듁; 듁; 듁; 듁; 듁; ) HANGUL SYLLABLE DYUG
+B4C2;B4C2;1103 1172 11A9;B4C2;1103 1172 11A9; # (듂; 듂; 듂; 듂; 듂; ) HANGUL SYLLABLE DYUGG
+B4C3;B4C3;1103 1172 11AA;B4C3;1103 1172 11AA; # (듃; 듃; 듃; 듃; 듃; ) HANGUL SYLLABLE DYUGS
+B4C4;B4C4;1103 1172 11AB;B4C4;1103 1172 11AB; # (듄; 듄; 듄; 듄; 듄; ) HANGUL SYLLABLE DYUN
+B4C5;B4C5;1103 1172 11AC;B4C5;1103 1172 11AC; # (듅; 듅; 듅; 듅; 듅; ) HANGUL SYLLABLE DYUNJ
+B4C6;B4C6;1103 1172 11AD;B4C6;1103 1172 11AD; # (듆; 듆; 듆; 듆; 듆; ) HANGUL SYLLABLE DYUNH
+B4C7;B4C7;1103 1172 11AE;B4C7;1103 1172 11AE; # (듇; 듇; 듇; 듇; 듇; ) HANGUL SYLLABLE DYUD
+B4C8;B4C8;1103 1172 11AF;B4C8;1103 1172 11AF; # (듈; 듈; 듈; 듈; 듈; ) HANGUL SYLLABLE DYUL
+B4C9;B4C9;1103 1172 11B0;B4C9;1103 1172 11B0; # (듉; 듉; 듉; 듉; 듉; ) HANGUL SYLLABLE DYULG
+B4CA;B4CA;1103 1172 11B1;B4CA;1103 1172 11B1; # (듊; 듊; 듊; 듊; 듊; ) HANGUL SYLLABLE DYULM
+B4CB;B4CB;1103 1172 11B2;B4CB;1103 1172 11B2; # (듋; 듋; 듋; 듋; 듋; ) HANGUL SYLLABLE DYULB
+B4CC;B4CC;1103 1172 11B3;B4CC;1103 1172 11B3; # (듌; 듌; 듌; 듌; 듌; ) HANGUL SYLLABLE DYULS
+B4CD;B4CD;1103 1172 11B4;B4CD;1103 1172 11B4; # (듍; 듍; 듍; 듍; 듍; ) HANGUL SYLLABLE DYULT
+B4CE;B4CE;1103 1172 11B5;B4CE;1103 1172 11B5; # (듎; 듎; 듎; 듎; 듎; ) HANGUL SYLLABLE DYULP
+B4CF;B4CF;1103 1172 11B6;B4CF;1103 1172 11B6; # (듏; 듏; 듏; 듏; 듏; ) HANGUL SYLLABLE DYULH
+B4D0;B4D0;1103 1172 11B7;B4D0;1103 1172 11B7; # (듐; 듐; 듐; 듐; 듐; ) HANGUL SYLLABLE DYUM
+B4D1;B4D1;1103 1172 11B8;B4D1;1103 1172 11B8; # (듑; 듑; 듑; 듑; 듑; ) HANGUL SYLLABLE DYUB
+B4D2;B4D2;1103 1172 11B9;B4D2;1103 1172 11B9; # (듒; 듒; 듒; 듒; 듒; ) HANGUL SYLLABLE DYUBS
+B4D3;B4D3;1103 1172 11BA;B4D3;1103 1172 11BA; # (듓; 듓; 듓; 듓; 듓; ) HANGUL SYLLABLE DYUS
+B4D4;B4D4;1103 1172 11BB;B4D4;1103 1172 11BB; # (듔; 듔; 듔; 듔; 듔; ) HANGUL SYLLABLE DYUSS
+B4D5;B4D5;1103 1172 11BC;B4D5;1103 1172 11BC; # (듕; 듕; 듕; 듕; 듕; ) HANGUL SYLLABLE DYUNG
+B4D6;B4D6;1103 1172 11BD;B4D6;1103 1172 11BD; # (듖; 듖; 듖; 듖; 듖; ) HANGUL SYLLABLE DYUJ
+B4D7;B4D7;1103 1172 11BE;B4D7;1103 1172 11BE; # (듗; 듗; 듗; 듗; 듗; ) HANGUL SYLLABLE DYUC
+B4D8;B4D8;1103 1172 11BF;B4D8;1103 1172 11BF; # (듘; 듘; 듘; 듘; 듘; ) HANGUL SYLLABLE DYUK
+B4D9;B4D9;1103 1172 11C0;B4D9;1103 1172 11C0; # (듙; 듙; 듙; 듙; 듙; ) HANGUL SYLLABLE DYUT
+B4DA;B4DA;1103 1172 11C1;B4DA;1103 1172 11C1; # (듚; 듚; 듚; 듚; 듚; ) HANGUL SYLLABLE DYUP
+B4DB;B4DB;1103 1172 11C2;B4DB;1103 1172 11C2; # (듛; 듛; 듛; 듛; 듛; ) HANGUL SYLLABLE DYUH
+B4DC;B4DC;1103 1173;B4DC;1103 1173; # (드; 드; 드; 드; 드; ) HANGUL SYLLABLE DEU
+B4DD;B4DD;1103 1173 11A8;B4DD;1103 1173 11A8; # (득; 득; 득; 득; 득; ) HANGUL SYLLABLE DEUG
+B4DE;B4DE;1103 1173 11A9;B4DE;1103 1173 11A9; # (듞; 듞; 듞; 듞; 듞; ) HANGUL SYLLABLE DEUGG
+B4DF;B4DF;1103 1173 11AA;B4DF;1103 1173 11AA; # (듟; 듟; 듟; 듟; 듟; ) HANGUL SYLLABLE DEUGS
+B4E0;B4E0;1103 1173 11AB;B4E0;1103 1173 11AB; # (든; 든; 든; 든; 든; ) HANGUL SYLLABLE DEUN
+B4E1;B4E1;1103 1173 11AC;B4E1;1103 1173 11AC; # (듡; 듡; 듡; 듡; 듡; ) HANGUL SYLLABLE DEUNJ
+B4E2;B4E2;1103 1173 11AD;B4E2;1103 1173 11AD; # (듢; 듢; 듢; 듢; 듢; ) HANGUL SYLLABLE DEUNH
+B4E3;B4E3;1103 1173 11AE;B4E3;1103 1173 11AE; # (듣; 듣; 듣; 듣; 듣; ) HANGUL SYLLABLE DEUD
+B4E4;B4E4;1103 1173 11AF;B4E4;1103 1173 11AF; # (들; 들; 들; 들; 들; ) HANGUL SYLLABLE DEUL
+B4E5;B4E5;1103 1173 11B0;B4E5;1103 1173 11B0; # (듥; 듥; 듥; 듥; 듥; ) HANGUL SYLLABLE DEULG
+B4E6;B4E6;1103 1173 11B1;B4E6;1103 1173 11B1; # (듦; 듦; 듦; 듦; 듦; ) HANGUL SYLLABLE DEULM
+B4E7;B4E7;1103 1173 11B2;B4E7;1103 1173 11B2; # (듧; 듧; 듧; 듧; 듧; ) HANGUL SYLLABLE DEULB
+B4E8;B4E8;1103 1173 11B3;B4E8;1103 1173 11B3; # (듨; 듨; 듨; 듨; 듨; ) HANGUL SYLLABLE DEULS
+B4E9;B4E9;1103 1173 11B4;B4E9;1103 1173 11B4; # (듩; 듩; 듩; 듩; 듩; ) HANGUL SYLLABLE DEULT
+B4EA;B4EA;1103 1173 11B5;B4EA;1103 1173 11B5; # (듪; 듪; 듪; 듪; 듪; ) HANGUL SYLLABLE DEULP
+B4EB;B4EB;1103 1173 11B6;B4EB;1103 1173 11B6; # (듫; 듫; 듫; 듫; 듫; ) HANGUL SYLLABLE DEULH
+B4EC;B4EC;1103 1173 11B7;B4EC;1103 1173 11B7; # (듬; 듬; 듬; 듬; 듬; ) HANGUL SYLLABLE DEUM
+B4ED;B4ED;1103 1173 11B8;B4ED;1103 1173 11B8; # (듭; 듭; 듭; 듭; 듭; ) HANGUL SYLLABLE DEUB
+B4EE;B4EE;1103 1173 11B9;B4EE;1103 1173 11B9; # (듮; 듮; 듮; 듮; 듮; ) HANGUL SYLLABLE DEUBS
+B4EF;B4EF;1103 1173 11BA;B4EF;1103 1173 11BA; # (듯; 듯; 듯; 듯; 듯; ) HANGUL SYLLABLE DEUS
+B4F0;B4F0;1103 1173 11BB;B4F0;1103 1173 11BB; # (듰; 듰; 듰; 듰; 듰; ) HANGUL SYLLABLE DEUSS
+B4F1;B4F1;1103 1173 11BC;B4F1;1103 1173 11BC; # (등; 등; 등; 등; 등; ) HANGUL SYLLABLE DEUNG
+B4F2;B4F2;1103 1173 11BD;B4F2;1103 1173 11BD; # (듲; 듲; 듲; 듲; 듲; ) HANGUL SYLLABLE DEUJ
+B4F3;B4F3;1103 1173 11BE;B4F3;1103 1173 11BE; # (듳; 듳; 듳; 듳; 듳; ) HANGUL SYLLABLE DEUC
+B4F4;B4F4;1103 1173 11BF;B4F4;1103 1173 11BF; # (듴; 듴; 듴; 듴; 듴; ) HANGUL SYLLABLE DEUK
+B4F5;B4F5;1103 1173 11C0;B4F5;1103 1173 11C0; # (듵; 듵; 듵; 듵; 듵; ) HANGUL SYLLABLE DEUT
+B4F6;B4F6;1103 1173 11C1;B4F6;1103 1173 11C1; # (듶; 듶; 듶; 듶; 듶; ) HANGUL SYLLABLE DEUP
+B4F7;B4F7;1103 1173 11C2;B4F7;1103 1173 11C2; # (듷; 듷; 듷; 듷; 듷; ) HANGUL SYLLABLE DEUH
+B4F8;B4F8;1103 1174;B4F8;1103 1174; # (듸; 듸; 듸; 듸; 듸; ) HANGUL SYLLABLE DYI
+B4F9;B4F9;1103 1174 11A8;B4F9;1103 1174 11A8; # (듹; 듹; 듹; 듹; 듹; ) HANGUL SYLLABLE DYIG
+B4FA;B4FA;1103 1174 11A9;B4FA;1103 1174 11A9; # (듺; 듺; 듺; 듺; 듺; ) HANGUL SYLLABLE DYIGG
+B4FB;B4FB;1103 1174 11AA;B4FB;1103 1174 11AA; # (듻; 듻; 듻; 듻; 듻; ) HANGUL SYLLABLE DYIGS
+B4FC;B4FC;1103 1174 11AB;B4FC;1103 1174 11AB; # (듼; 듼; 듼; 듼; 듼; ) HANGUL SYLLABLE DYIN
+B4FD;B4FD;1103 1174 11AC;B4FD;1103 1174 11AC; # (듽; 듽; 듽; 듽; 듽; ) HANGUL SYLLABLE DYINJ
+B4FE;B4FE;1103 1174 11AD;B4FE;1103 1174 11AD; # (듾; 듾; 듾; 듾; 듾; ) HANGUL SYLLABLE DYINH
+B4FF;B4FF;1103 1174 11AE;B4FF;1103 1174 11AE; # (듿; 듿; 듿; 듿; 듿; ) HANGUL SYLLABLE DYID
+B500;B500;1103 1174 11AF;B500;1103 1174 11AF; # (딀; 딀; 딀; 딀; 딀; ) HANGUL SYLLABLE DYIL
+B501;B501;1103 1174 11B0;B501;1103 1174 11B0; # (딁; 딁; 딁; 딁; 딁; ) HANGUL SYLLABLE DYILG
+B502;B502;1103 1174 11B1;B502;1103 1174 11B1; # (딂; 딂; 딂; 딂; 딂; ) HANGUL SYLLABLE DYILM
+B503;B503;1103 1174 11B2;B503;1103 1174 11B2; # (딃; 딃; 딃; 딃; 딃; ) HANGUL SYLLABLE DYILB
+B504;B504;1103 1174 11B3;B504;1103 1174 11B3; # (딄; 딄; 딄; 딄; 딄; ) HANGUL SYLLABLE DYILS
+B505;B505;1103 1174 11B4;B505;1103 1174 11B4; # (딅; 딅; 딅; 딅; 딅; ) HANGUL SYLLABLE DYILT
+B506;B506;1103 1174 11B5;B506;1103 1174 11B5; # (딆; 딆; 딆; 딆; 딆; ) HANGUL SYLLABLE DYILP
+B507;B507;1103 1174 11B6;B507;1103 1174 11B6; # (딇; 딇; 딇; 딇; 딇; ) HANGUL SYLLABLE DYILH
+B508;B508;1103 1174 11B7;B508;1103 1174 11B7; # (딈; 딈; 딈; 딈; 딈; ) HANGUL SYLLABLE DYIM
+B509;B509;1103 1174 11B8;B509;1103 1174 11B8; # (딉; 딉; 딉; 딉; 딉; ) HANGUL SYLLABLE DYIB
+B50A;B50A;1103 1174 11B9;B50A;1103 1174 11B9; # (딊; 딊; 딊; 딊; 딊; ) HANGUL SYLLABLE DYIBS
+B50B;B50B;1103 1174 11BA;B50B;1103 1174 11BA; # (딋; 딋; 딋; 딋; 딋; ) HANGUL SYLLABLE DYIS
+B50C;B50C;1103 1174 11BB;B50C;1103 1174 11BB; # (딌; 딌; 딌; 딌; 딌; ) HANGUL SYLLABLE DYISS
+B50D;B50D;1103 1174 11BC;B50D;1103 1174 11BC; # (딍; 딍; 딍; 딍; 딍; ) HANGUL SYLLABLE DYING
+B50E;B50E;1103 1174 11BD;B50E;1103 1174 11BD; # (딎; 딎; 딎; 딎; 딎; ) HANGUL SYLLABLE DYIJ
+B50F;B50F;1103 1174 11BE;B50F;1103 1174 11BE; # (딏; 딏; 딏; 딏; 딏; ) HANGUL SYLLABLE DYIC
+B510;B510;1103 1174 11BF;B510;1103 1174 11BF; # (딐; 딐; 딐; 딐; 딐; ) HANGUL SYLLABLE DYIK
+B511;B511;1103 1174 11C0;B511;1103 1174 11C0; # (딑; 딑; 딑; 딑; 딑; ) HANGUL SYLLABLE DYIT
+B512;B512;1103 1174 11C1;B512;1103 1174 11C1; # (딒; 딒; 딒; 딒; 딒; ) HANGUL SYLLABLE DYIP
+B513;B513;1103 1174 11C2;B513;1103 1174 11C2; # (딓; 딓; 딓; 딓; 딓; ) HANGUL SYLLABLE DYIH
+B514;B514;1103 1175;B514;1103 1175; # (디; 디; 디; 디; 디; ) HANGUL SYLLABLE DI
+B515;B515;1103 1175 11A8;B515;1103 1175 11A8; # (딕; 딕; 딕; 딕; 딕; ) HANGUL SYLLABLE DIG
+B516;B516;1103 1175 11A9;B516;1103 1175 11A9; # (딖; 딖; 딖; 딖; 딖; ) HANGUL SYLLABLE DIGG
+B517;B517;1103 1175 11AA;B517;1103 1175 11AA; # (딗; 딗; 딗; 딗; 딗; ) HANGUL SYLLABLE DIGS
+B518;B518;1103 1175 11AB;B518;1103 1175 11AB; # (딘; 딘; 딘; 딘; 딘; ) HANGUL SYLLABLE DIN
+B519;B519;1103 1175 11AC;B519;1103 1175 11AC; # (딙; 딙; 딙; 딙; 딙; ) HANGUL SYLLABLE DINJ
+B51A;B51A;1103 1175 11AD;B51A;1103 1175 11AD; # (딚; 딚; 딚; 딚; 딚; ) HANGUL SYLLABLE DINH
+B51B;B51B;1103 1175 11AE;B51B;1103 1175 11AE; # (딛; 딛; 딛; 딛; 딛; ) HANGUL SYLLABLE DID
+B51C;B51C;1103 1175 11AF;B51C;1103 1175 11AF; # (딜; 딜; 딜; 딜; 딜; ) HANGUL SYLLABLE DIL
+B51D;B51D;1103 1175 11B0;B51D;1103 1175 11B0; # (딝; 딝; 딝; 딝; 딝; ) HANGUL SYLLABLE DILG
+B51E;B51E;1103 1175 11B1;B51E;1103 1175 11B1; # (딞; 딞; 딞; 딞; 딞; ) HANGUL SYLLABLE DILM
+B51F;B51F;1103 1175 11B2;B51F;1103 1175 11B2; # (딟; 딟; 딟; 딟; 딟; ) HANGUL SYLLABLE DILB
+B520;B520;1103 1175 11B3;B520;1103 1175 11B3; # (딠; 딠; 딠; 딠; 딠; ) HANGUL SYLLABLE DILS
+B521;B521;1103 1175 11B4;B521;1103 1175 11B4; # (딡; 딡; 딡; 딡; 딡; ) HANGUL SYLLABLE DILT
+B522;B522;1103 1175 11B5;B522;1103 1175 11B5; # (딢; 딢; 딢; 딢; 딢; ) HANGUL SYLLABLE DILP
+B523;B523;1103 1175 11B6;B523;1103 1175 11B6; # (딣; 딣; 딣; 딣; 딣; ) HANGUL SYLLABLE DILH
+B524;B524;1103 1175 11B7;B524;1103 1175 11B7; # (딤; 딤; 딤; 딤; 딤; ) HANGUL SYLLABLE DIM
+B525;B525;1103 1175 11B8;B525;1103 1175 11B8; # (딥; 딥; 딥; 딥; 딥; ) HANGUL SYLLABLE DIB
+B526;B526;1103 1175 11B9;B526;1103 1175 11B9; # (딦; 딦; 딦; 딦; 딦; ) HANGUL SYLLABLE DIBS
+B527;B527;1103 1175 11BA;B527;1103 1175 11BA; # (딧; 딧; 딧; 딧; 딧; ) HANGUL SYLLABLE DIS
+B528;B528;1103 1175 11BB;B528;1103 1175 11BB; # (딨; 딨; 딨; 딨; 딨; ) HANGUL SYLLABLE DISS
+B529;B529;1103 1175 11BC;B529;1103 1175 11BC; # (딩; 딩; 딩; 딩; 딩; ) HANGUL SYLLABLE DING
+B52A;B52A;1103 1175 11BD;B52A;1103 1175 11BD; # (딪; 딪; 딪; 딪; 딪; ) HANGUL SYLLABLE DIJ
+B52B;B52B;1103 1175 11BE;B52B;1103 1175 11BE; # (딫; 딫; 딫; 딫; 딫; ) HANGUL SYLLABLE DIC
+B52C;B52C;1103 1175 11BF;B52C;1103 1175 11BF; # (딬; 딬; 딬; 딬; 딬; ) HANGUL SYLLABLE DIK
+B52D;B52D;1103 1175 11C0;B52D;1103 1175 11C0; # (딭; 딭; 딭; 딭; 딭; ) HANGUL SYLLABLE DIT
+B52E;B52E;1103 1175 11C1;B52E;1103 1175 11C1; # (딮; 딮; 딮; 딮; 딮; ) HANGUL SYLLABLE DIP
+B52F;B52F;1103 1175 11C2;B52F;1103 1175 11C2; # (딯; 딯; 딯; 딯; 딯; ) HANGUL SYLLABLE DIH
+B530;B530;1104 1161;B530;1104 1161; # (따; 따; 따; 따; 따; ) HANGUL SYLLABLE DDA
+B531;B531;1104 1161 11A8;B531;1104 1161 11A8; # (딱; 딱; 딱; 딱; 딱; ) HANGUL SYLLABLE DDAG
+B532;B532;1104 1161 11A9;B532;1104 1161 11A9; # (딲; 딲; 딲; 딲; 딲; ) HANGUL SYLLABLE DDAGG
+B533;B533;1104 1161 11AA;B533;1104 1161 11AA; # (딳; 딳; 딳; 딳; 딳; ) HANGUL SYLLABLE DDAGS
+B534;B534;1104 1161 11AB;B534;1104 1161 11AB; # (딴; 딴; 딴; 딴; 딴; ) HANGUL SYLLABLE DDAN
+B535;B535;1104 1161 11AC;B535;1104 1161 11AC; # (딵; 딵; 딵; 딵; 딵; ) HANGUL SYLLABLE DDANJ
+B536;B536;1104 1161 11AD;B536;1104 1161 11AD; # (딶; 딶; 딶; 딶; 딶; ) HANGUL SYLLABLE DDANH
+B537;B537;1104 1161 11AE;B537;1104 1161 11AE; # (딷; 딷; 딷; 딷; 딷; ) HANGUL SYLLABLE DDAD
+B538;B538;1104 1161 11AF;B538;1104 1161 11AF; # (딸; 딸; 딸; 딸; 딸; ) HANGUL SYLLABLE DDAL
+B539;B539;1104 1161 11B0;B539;1104 1161 11B0; # (딹; 딹; 딹; 딹; 딹; ) HANGUL SYLLABLE DDALG
+B53A;B53A;1104 1161 11B1;B53A;1104 1161 11B1; # (딺; 딺; 딺; 딺; 딺; ) HANGUL SYLLABLE DDALM
+B53B;B53B;1104 1161 11B2;B53B;1104 1161 11B2; # (딻; 딻; 딻; 딻; 딻; ) HANGUL SYLLABLE DDALB
+B53C;B53C;1104 1161 11B3;B53C;1104 1161 11B3; # (딼; 딼; 딼; 딼; 딼; ) HANGUL SYLLABLE DDALS
+B53D;B53D;1104 1161 11B4;B53D;1104 1161 11B4; # (딽; 딽; 딽; 딽; 딽; ) HANGUL SYLLABLE DDALT
+B53E;B53E;1104 1161 11B5;B53E;1104 1161 11B5; # (딾; 딾; 딾; 딾; 딾; ) HANGUL SYLLABLE DDALP
+B53F;B53F;1104 1161 11B6;B53F;1104 1161 11B6; # (딿; 딿; 딿; 딿; 딿; ) HANGUL SYLLABLE DDALH
+B540;B540;1104 1161 11B7;B540;1104 1161 11B7; # (땀; 땀; 땀; 땀; 땀; ) HANGUL SYLLABLE DDAM
+B541;B541;1104 1161 11B8;B541;1104 1161 11B8; # (땁; 땁; 땁; 땁; 땁; ) HANGUL SYLLABLE DDAB
+B542;B542;1104 1161 11B9;B542;1104 1161 11B9; # (땂; 땂; 땂; 땂; 땂; ) HANGUL SYLLABLE DDABS
+B543;B543;1104 1161 11BA;B543;1104 1161 11BA; # (땃; 땃; 땃; 땃; 땃; ) HANGUL SYLLABLE DDAS
+B544;B544;1104 1161 11BB;B544;1104 1161 11BB; # (땄; 땄; 땄; 땄; 땄; ) HANGUL SYLLABLE DDASS
+B545;B545;1104 1161 11BC;B545;1104 1161 11BC; # (땅; 땅; 땅; 땅; 땅; ) HANGUL SYLLABLE DDANG
+B546;B546;1104 1161 11BD;B546;1104 1161 11BD; # (땆; 땆; 땆; 땆; 땆; ) HANGUL SYLLABLE DDAJ
+B547;B547;1104 1161 11BE;B547;1104 1161 11BE; # (땇; 땇; 땇; 땇; 땇; ) HANGUL SYLLABLE DDAC
+B548;B548;1104 1161 11BF;B548;1104 1161 11BF; # (땈; 땈; 땈; 땈; 땈; ) HANGUL SYLLABLE DDAK
+B549;B549;1104 1161 11C0;B549;1104 1161 11C0; # (땉; 땉; 땉; 땉; 땉; ) HANGUL SYLLABLE DDAT
+B54A;B54A;1104 1161 11C1;B54A;1104 1161 11C1; # (땊; 땊; 땊; 땊; 땊; ) HANGUL SYLLABLE DDAP
+B54B;B54B;1104 1161 11C2;B54B;1104 1161 11C2; # (땋; 땋; 땋; 땋; 땋; ) HANGUL SYLLABLE DDAH
+B54C;B54C;1104 1162;B54C;1104 1162; # (때; 때; 때; 때; 때; ) HANGUL SYLLABLE DDAE
+B54D;B54D;1104 1162 11A8;B54D;1104 1162 11A8; # (땍; 땍; 땍; 땍; 땍; ) HANGUL SYLLABLE DDAEG
+B54E;B54E;1104 1162 11A9;B54E;1104 1162 11A9; # (땎; 땎; 땎; 땎; 땎; ) HANGUL SYLLABLE DDAEGG
+B54F;B54F;1104 1162 11AA;B54F;1104 1162 11AA; # (땏; 땏; 땏; 땏; 땏; ) HANGUL SYLLABLE DDAEGS
+B550;B550;1104 1162 11AB;B550;1104 1162 11AB; # (땐; 땐; 땐; 땐; 땐; ) HANGUL SYLLABLE DDAEN
+B551;B551;1104 1162 11AC;B551;1104 1162 11AC; # (땑; 땑; 땑; 땑; 땑; ) HANGUL SYLLABLE DDAENJ
+B552;B552;1104 1162 11AD;B552;1104 1162 11AD; # (땒; 땒; 땒; 땒; 땒; ) HANGUL SYLLABLE DDAENH
+B553;B553;1104 1162 11AE;B553;1104 1162 11AE; # (땓; 땓; 땓; 땓; 땓; ) HANGUL SYLLABLE DDAED
+B554;B554;1104 1162 11AF;B554;1104 1162 11AF; # (땔; 땔; 땔; 땔; 땔; ) HANGUL SYLLABLE DDAEL
+B555;B555;1104 1162 11B0;B555;1104 1162 11B0; # (땕; 땕; 땕; 땕; 땕; ) HANGUL SYLLABLE DDAELG
+B556;B556;1104 1162 11B1;B556;1104 1162 11B1; # (땖; 땖; 땖; 땖; 땖; ) HANGUL SYLLABLE DDAELM
+B557;B557;1104 1162 11B2;B557;1104 1162 11B2; # (땗; 땗; 땗; 땗; 땗; ) HANGUL SYLLABLE DDAELB
+B558;B558;1104 1162 11B3;B558;1104 1162 11B3; # (땘; 땘; 땘; 땘; 땘; ) HANGUL SYLLABLE DDAELS
+B559;B559;1104 1162 11B4;B559;1104 1162 11B4; # (땙; 땙; 땙; 땙; 땙; ) HANGUL SYLLABLE DDAELT
+B55A;B55A;1104 1162 11B5;B55A;1104 1162 11B5; # (땚; 땚; 땚; 땚; 땚; ) HANGUL SYLLABLE DDAELP
+B55B;B55B;1104 1162 11B6;B55B;1104 1162 11B6; # (땛; 땛; 땛; 땛; 땛; ) HANGUL SYLLABLE DDAELH
+B55C;B55C;1104 1162 11B7;B55C;1104 1162 11B7; # (땜; 땜; 땜; 땜; 땜; ) HANGUL SYLLABLE DDAEM
+B55D;B55D;1104 1162 11B8;B55D;1104 1162 11B8; # (땝; 땝; 땝; 땝; 땝; ) HANGUL SYLLABLE DDAEB
+B55E;B55E;1104 1162 11B9;B55E;1104 1162 11B9; # (땞; 땞; 땞; 땞; 땞; ) HANGUL SYLLABLE DDAEBS
+B55F;B55F;1104 1162 11BA;B55F;1104 1162 11BA; # (땟; 땟; 땟; 땟; 땟; ) HANGUL SYLLABLE DDAES
+B560;B560;1104 1162 11BB;B560;1104 1162 11BB; # (땠; 땠; 땠; 땠; 땠; ) HANGUL SYLLABLE DDAESS
+B561;B561;1104 1162 11BC;B561;1104 1162 11BC; # (땡; 땡; 땡; 땡; 땡; ) HANGUL SYLLABLE DDAENG
+B562;B562;1104 1162 11BD;B562;1104 1162 11BD; # (땢; 땢; 땢; 땢; 땢; ) HANGUL SYLLABLE DDAEJ
+B563;B563;1104 1162 11BE;B563;1104 1162 11BE; # (땣; 땣; 땣; 땣; 땣; ) HANGUL SYLLABLE DDAEC
+B564;B564;1104 1162 11BF;B564;1104 1162 11BF; # (땤; 땤; 땤; 땤; 땤; ) HANGUL SYLLABLE DDAEK
+B565;B565;1104 1162 11C0;B565;1104 1162 11C0; # (땥; 땥; 땥; 땥; 땥; ) HANGUL SYLLABLE DDAET
+B566;B566;1104 1162 11C1;B566;1104 1162 11C1; # (땦; 땦; 땦; 땦; 땦; ) HANGUL SYLLABLE DDAEP
+B567;B567;1104 1162 11C2;B567;1104 1162 11C2; # (땧; 땧; 땧; 땧; 땧; ) HANGUL SYLLABLE DDAEH
+B568;B568;1104 1163;B568;1104 1163; # (땨; 땨; 땨; 땨; 땨; ) HANGUL SYLLABLE DDYA
+B569;B569;1104 1163 11A8;B569;1104 1163 11A8; # (땩; 땩; 땩; 땩; 땩; ) HANGUL SYLLABLE DDYAG
+B56A;B56A;1104 1163 11A9;B56A;1104 1163 11A9; # (땪; 땪; 땪; 땪; 땪; ) HANGUL SYLLABLE DDYAGG
+B56B;B56B;1104 1163 11AA;B56B;1104 1163 11AA; # (땫; 땫; 땫; 땫; 땫; ) HANGUL SYLLABLE DDYAGS
+B56C;B56C;1104 1163 11AB;B56C;1104 1163 11AB; # (땬; 땬; 땬; 땬; 땬; ) HANGUL SYLLABLE DDYAN
+B56D;B56D;1104 1163 11AC;B56D;1104 1163 11AC; # (땭; 땭; 땭; 땭; 땭; ) HANGUL SYLLABLE DDYANJ
+B56E;B56E;1104 1163 11AD;B56E;1104 1163 11AD; # (땮; 땮; 땮; 땮; 땮; ) HANGUL SYLLABLE DDYANH
+B56F;B56F;1104 1163 11AE;B56F;1104 1163 11AE; # (땯; 땯; 땯; 땯; 땯; ) HANGUL SYLLABLE DDYAD
+B570;B570;1104 1163 11AF;B570;1104 1163 11AF; # (땰; 땰; 땰; 땰; 땰; ) HANGUL SYLLABLE DDYAL
+B571;B571;1104 1163 11B0;B571;1104 1163 11B0; # (땱; 땱; 땱; 땱; 땱; ) HANGUL SYLLABLE DDYALG
+B572;B572;1104 1163 11B1;B572;1104 1163 11B1; # (땲; 땲; 땲; 땲; 땲; ) HANGUL SYLLABLE DDYALM
+B573;B573;1104 1163 11B2;B573;1104 1163 11B2; # (땳; 땳; 땳; 땳; 땳; ) HANGUL SYLLABLE DDYALB
+B574;B574;1104 1163 11B3;B574;1104 1163 11B3; # (땴; 땴; 땴; 땴; 땴; ) HANGUL SYLLABLE DDYALS
+B575;B575;1104 1163 11B4;B575;1104 1163 11B4; # (땵; 땵; 땵; 땵; 땵; ) HANGUL SYLLABLE DDYALT
+B576;B576;1104 1163 11B5;B576;1104 1163 11B5; # (땶; 땶; 땶; 땶; 땶; ) HANGUL SYLLABLE DDYALP
+B577;B577;1104 1163 11B6;B577;1104 1163 11B6; # (땷; 땷; 땷; 땷; 땷; ) HANGUL SYLLABLE DDYALH
+B578;B578;1104 1163 11B7;B578;1104 1163 11B7; # (땸; 땸; 땸; 땸; 땸; ) HANGUL SYLLABLE DDYAM
+B579;B579;1104 1163 11B8;B579;1104 1163 11B8; # (땹; 땹; 땹; 땹; 땹; ) HANGUL SYLLABLE DDYAB
+B57A;B57A;1104 1163 11B9;B57A;1104 1163 11B9; # (땺; 땺; 땺; 땺; 땺; ) HANGUL SYLLABLE DDYABS
+B57B;B57B;1104 1163 11BA;B57B;1104 1163 11BA; # (땻; 땻; 땻; 땻; 땻; ) HANGUL SYLLABLE DDYAS
+B57C;B57C;1104 1163 11BB;B57C;1104 1163 11BB; # (땼; 땼; 땼; 땼; 땼; ) HANGUL SYLLABLE DDYASS
+B57D;B57D;1104 1163 11BC;B57D;1104 1163 11BC; # (땽; 땽; 땽; 땽; 땽; ) HANGUL SYLLABLE DDYANG
+B57E;B57E;1104 1163 11BD;B57E;1104 1163 11BD; # (땾; 땾; 땾; 땾; 땾; ) HANGUL SYLLABLE DDYAJ
+B57F;B57F;1104 1163 11BE;B57F;1104 1163 11BE; # (땿; 땿; 땿; 땿; 땿; ) HANGUL SYLLABLE DDYAC
+B580;B580;1104 1163 11BF;B580;1104 1163 11BF; # (떀; 떀; 떀; 떀; 떀; ) HANGUL SYLLABLE DDYAK
+B581;B581;1104 1163 11C0;B581;1104 1163 11C0; # (떁; 떁; 떁; 떁; 떁; ) HANGUL SYLLABLE DDYAT
+B582;B582;1104 1163 11C1;B582;1104 1163 11C1; # (떂; 떂; 떂; 떂; 떂; ) HANGUL SYLLABLE DDYAP
+B583;B583;1104 1163 11C2;B583;1104 1163 11C2; # (떃; 떃; 떃; 떃; 떃; ) HANGUL SYLLABLE DDYAH
+B584;B584;1104 1164;B584;1104 1164; # (떄; 떄; 떄; 떄; 떄; ) HANGUL SYLLABLE DDYAE
+B585;B585;1104 1164 11A8;B585;1104 1164 11A8; # (떅; 떅; 떅; 떅; 떅; ) HANGUL SYLLABLE DDYAEG
+B586;B586;1104 1164 11A9;B586;1104 1164 11A9; # (떆; 떆; 떆; 떆; 떆; ) HANGUL SYLLABLE DDYAEGG
+B587;B587;1104 1164 11AA;B587;1104 1164 11AA; # (떇; 떇; 떇; 떇; 떇; ) HANGUL SYLLABLE DDYAEGS
+B588;B588;1104 1164 11AB;B588;1104 1164 11AB; # (떈; 떈; 떈; 떈; 떈; ) HANGUL SYLLABLE DDYAEN
+B589;B589;1104 1164 11AC;B589;1104 1164 11AC; # (떉; 떉; 떉; 떉; 떉; ) HANGUL SYLLABLE DDYAENJ
+B58A;B58A;1104 1164 11AD;B58A;1104 1164 11AD; # (떊; 떊; 떊; 떊; 떊; ) HANGUL SYLLABLE DDYAENH
+B58B;B58B;1104 1164 11AE;B58B;1104 1164 11AE; # (떋; 떋; 떋; 떋; 떋; ) HANGUL SYLLABLE DDYAED
+B58C;B58C;1104 1164 11AF;B58C;1104 1164 11AF; # (떌; 떌; 떌; 떌; 떌; ) HANGUL SYLLABLE DDYAEL
+B58D;B58D;1104 1164 11B0;B58D;1104 1164 11B0; # (떍; 떍; 떍; 떍; 떍; ) HANGUL SYLLABLE DDYAELG
+B58E;B58E;1104 1164 11B1;B58E;1104 1164 11B1; # (떎; 떎; 떎; 떎; 떎; ) HANGUL SYLLABLE DDYAELM
+B58F;B58F;1104 1164 11B2;B58F;1104 1164 11B2; # (떏; 떏; 떏; 떏; 떏; ) HANGUL SYLLABLE DDYAELB
+B590;B590;1104 1164 11B3;B590;1104 1164 11B3; # (떐; 떐; 떐; 떐; 떐; ) HANGUL SYLLABLE DDYAELS
+B591;B591;1104 1164 11B4;B591;1104 1164 11B4; # (떑; 떑; 떑; 떑; 떑; ) HANGUL SYLLABLE DDYAELT
+B592;B592;1104 1164 11B5;B592;1104 1164 11B5; # (떒; 떒; 떒; 떒; 떒; ) HANGUL SYLLABLE DDYAELP
+B593;B593;1104 1164 11B6;B593;1104 1164 11B6; # (떓; 떓; 떓; 떓; 떓; ) HANGUL SYLLABLE DDYAELH
+B594;B594;1104 1164 11B7;B594;1104 1164 11B7; # (떔; 떔; 떔; 떔; 떔; ) HANGUL SYLLABLE DDYAEM
+B595;B595;1104 1164 11B8;B595;1104 1164 11B8; # (떕; 떕; 떕; 떕; 떕; ) HANGUL SYLLABLE DDYAEB
+B596;B596;1104 1164 11B9;B596;1104 1164 11B9; # (떖; 떖; 떖; 떖; 떖; ) HANGUL SYLLABLE DDYAEBS
+B597;B597;1104 1164 11BA;B597;1104 1164 11BA; # (떗; 떗; 떗; 떗; 떗; ) HANGUL SYLLABLE DDYAES
+B598;B598;1104 1164 11BB;B598;1104 1164 11BB; # (떘; 떘; 떘; 떘; 떘; ) HANGUL SYLLABLE DDYAESS
+B599;B599;1104 1164 11BC;B599;1104 1164 11BC; # (떙; 떙; 떙; 떙; 떙; ) HANGUL SYLLABLE DDYAENG
+B59A;B59A;1104 1164 11BD;B59A;1104 1164 11BD; # (떚; 떚; 떚; 떚; 떚; ) HANGUL SYLLABLE DDYAEJ
+B59B;B59B;1104 1164 11BE;B59B;1104 1164 11BE; # (떛; 떛; 떛; 떛; 떛; ) HANGUL SYLLABLE DDYAEC
+B59C;B59C;1104 1164 11BF;B59C;1104 1164 11BF; # (떜; 떜; 떜; 떜; 떜; ) HANGUL SYLLABLE DDYAEK
+B59D;B59D;1104 1164 11C0;B59D;1104 1164 11C0; # (떝; 떝; 떝; 떝; 떝; ) HANGUL SYLLABLE DDYAET
+B59E;B59E;1104 1164 11C1;B59E;1104 1164 11C1; # (떞; 떞; 떞; 떞; 떞; ) HANGUL SYLLABLE DDYAEP
+B59F;B59F;1104 1164 11C2;B59F;1104 1164 11C2; # (떟; 떟; 떟; 떟; 떟; ) HANGUL SYLLABLE DDYAEH
+B5A0;B5A0;1104 1165;B5A0;1104 1165; # (떠; 떠; 떠; 떠; 떠; ) HANGUL SYLLABLE DDEO
+B5A1;B5A1;1104 1165 11A8;B5A1;1104 1165 11A8; # (떡; 떡; 떡; 떡; 떡; ) HANGUL SYLLABLE DDEOG
+B5A2;B5A2;1104 1165 11A9;B5A2;1104 1165 11A9; # (떢; 떢; 떢; 떢; 떢; ) HANGUL SYLLABLE DDEOGG
+B5A3;B5A3;1104 1165 11AA;B5A3;1104 1165 11AA; # (떣; 떣; 떣; 떣; 떣; ) HANGUL SYLLABLE DDEOGS
+B5A4;B5A4;1104 1165 11AB;B5A4;1104 1165 11AB; # (떤; 떤; 떤; 떤; 떤; ) HANGUL SYLLABLE DDEON
+B5A5;B5A5;1104 1165 11AC;B5A5;1104 1165 11AC; # (떥; 떥; 떥; 떥; 떥; ) HANGUL SYLLABLE DDEONJ
+B5A6;B5A6;1104 1165 11AD;B5A6;1104 1165 11AD; # (떦; 떦; 떦; 떦; 떦; ) HANGUL SYLLABLE DDEONH
+B5A7;B5A7;1104 1165 11AE;B5A7;1104 1165 11AE; # (떧; 떧; 떧; 떧; 떧; ) HANGUL SYLLABLE DDEOD
+B5A8;B5A8;1104 1165 11AF;B5A8;1104 1165 11AF; # (떨; 떨; 떨; 떨; 떨; ) HANGUL SYLLABLE DDEOL
+B5A9;B5A9;1104 1165 11B0;B5A9;1104 1165 11B0; # (떩; 떩; 떩; 떩; 떩; ) HANGUL SYLLABLE DDEOLG
+B5AA;B5AA;1104 1165 11B1;B5AA;1104 1165 11B1; # (떪; 떪; 떪; 떪; 떪; ) HANGUL SYLLABLE DDEOLM
+B5AB;B5AB;1104 1165 11B2;B5AB;1104 1165 11B2; # (떫; 떫; 떫; 떫; 떫; ) HANGUL SYLLABLE DDEOLB
+B5AC;B5AC;1104 1165 11B3;B5AC;1104 1165 11B3; # (떬; 떬; 떬; 떬; 떬; ) HANGUL SYLLABLE DDEOLS
+B5AD;B5AD;1104 1165 11B4;B5AD;1104 1165 11B4; # (떭; 떭; 떭; 떭; 떭; ) HANGUL SYLLABLE DDEOLT
+B5AE;B5AE;1104 1165 11B5;B5AE;1104 1165 11B5; # (떮; 떮; 떮; 떮; 떮; ) HANGUL SYLLABLE DDEOLP
+B5AF;B5AF;1104 1165 11B6;B5AF;1104 1165 11B6; # (떯; 떯; 떯; 떯; 떯; ) HANGUL SYLLABLE DDEOLH
+B5B0;B5B0;1104 1165 11B7;B5B0;1104 1165 11B7; # (떰; 떰; 떰; 떰; 떰; ) HANGUL SYLLABLE DDEOM
+B5B1;B5B1;1104 1165 11B8;B5B1;1104 1165 11B8; # (떱; 떱; 떱; 떱; 떱; ) HANGUL SYLLABLE DDEOB
+B5B2;B5B2;1104 1165 11B9;B5B2;1104 1165 11B9; # (떲; 떲; 떲; 떲; 떲; ) HANGUL SYLLABLE DDEOBS
+B5B3;B5B3;1104 1165 11BA;B5B3;1104 1165 11BA; # (떳; 떳; 떳; 떳; 떳; ) HANGUL SYLLABLE DDEOS
+B5B4;B5B4;1104 1165 11BB;B5B4;1104 1165 11BB; # (떴; 떴; 떴; 떴; 떴; ) HANGUL SYLLABLE DDEOSS
+B5B5;B5B5;1104 1165 11BC;B5B5;1104 1165 11BC; # (떵; 떵; 떵; 떵; 떵; ) HANGUL SYLLABLE DDEONG
+B5B6;B5B6;1104 1165 11BD;B5B6;1104 1165 11BD; # (떶; 떶; 떶; 떶; 떶; ) HANGUL SYLLABLE DDEOJ
+B5B7;B5B7;1104 1165 11BE;B5B7;1104 1165 11BE; # (떷; 떷; 떷; 떷; 떷; ) HANGUL SYLLABLE DDEOC
+B5B8;B5B8;1104 1165 11BF;B5B8;1104 1165 11BF; # (떸; 떸; 떸; 떸; 떸; ) HANGUL SYLLABLE DDEOK
+B5B9;B5B9;1104 1165 11C0;B5B9;1104 1165 11C0; # (떹; 떹; 떹; 떹; 떹; ) HANGUL SYLLABLE DDEOT
+B5BA;B5BA;1104 1165 11C1;B5BA;1104 1165 11C1; # (떺; 떺; 떺; 떺; 떺; ) HANGUL SYLLABLE DDEOP
+B5BB;B5BB;1104 1165 11C2;B5BB;1104 1165 11C2; # (떻; 떻; 떻; 떻; 떻; ) HANGUL SYLLABLE DDEOH
+B5BC;B5BC;1104 1166;B5BC;1104 1166; # (떼; 떼; 떼; 떼; 떼; ) HANGUL SYLLABLE DDE
+B5BD;B5BD;1104 1166 11A8;B5BD;1104 1166 11A8; # (떽; 떽; 떽; 떽; 떽; ) HANGUL SYLLABLE DDEG
+B5BE;B5BE;1104 1166 11A9;B5BE;1104 1166 11A9; # (떾; 떾; 떾; 떾; 떾; ) HANGUL SYLLABLE DDEGG
+B5BF;B5BF;1104 1166 11AA;B5BF;1104 1166 11AA; # (떿; 떿; 떿; 떿; 떿; ) HANGUL SYLLABLE DDEGS
+B5C0;B5C0;1104 1166 11AB;B5C0;1104 1166 11AB; # (뗀; 뗀; 뗀; 뗀; 뗀; ) HANGUL SYLLABLE DDEN
+B5C1;B5C1;1104 1166 11AC;B5C1;1104 1166 11AC; # (뗁; 뗁; 뗁; 뗁; 뗁; ) HANGUL SYLLABLE DDENJ
+B5C2;B5C2;1104 1166 11AD;B5C2;1104 1166 11AD; # (뗂; 뗂; 뗂; 뗂; 뗂; ) HANGUL SYLLABLE DDENH
+B5C3;B5C3;1104 1166 11AE;B5C3;1104 1166 11AE; # (뗃; 뗃; 뗃; 뗃; 뗃; ) HANGUL SYLLABLE DDED
+B5C4;B5C4;1104 1166 11AF;B5C4;1104 1166 11AF; # (뗄; 뗄; 뗄; 뗄; 뗄; ) HANGUL SYLLABLE DDEL
+B5C5;B5C5;1104 1166 11B0;B5C5;1104 1166 11B0; # (뗅; 뗅; 뗅; 뗅; 뗅; ) HANGUL SYLLABLE DDELG
+B5C6;B5C6;1104 1166 11B1;B5C6;1104 1166 11B1; # (뗆; 뗆; 뗆; 뗆; 뗆; ) HANGUL SYLLABLE DDELM
+B5C7;B5C7;1104 1166 11B2;B5C7;1104 1166 11B2; # (뗇; 뗇; 뗇; 뗇; 뗇; ) HANGUL SYLLABLE DDELB
+B5C8;B5C8;1104 1166 11B3;B5C8;1104 1166 11B3; # (뗈; 뗈; 뗈; 뗈; 뗈; ) HANGUL SYLLABLE DDELS
+B5C9;B5C9;1104 1166 11B4;B5C9;1104 1166 11B4; # (뗉; 뗉; 뗉; 뗉; 뗉; ) HANGUL SYLLABLE DDELT
+B5CA;B5CA;1104 1166 11B5;B5CA;1104 1166 11B5; # (뗊; 뗊; 뗊; 뗊; 뗊; ) HANGUL SYLLABLE DDELP
+B5CB;B5CB;1104 1166 11B6;B5CB;1104 1166 11B6; # (뗋; 뗋; 뗋; 뗋; 뗋; ) HANGUL SYLLABLE DDELH
+B5CC;B5CC;1104 1166 11B7;B5CC;1104 1166 11B7; # (뗌; 뗌; 뗌; 뗌; 뗌; ) HANGUL SYLLABLE DDEM
+B5CD;B5CD;1104 1166 11B8;B5CD;1104 1166 11B8; # (뗍; 뗍; 뗍; 뗍; 뗍; ) HANGUL SYLLABLE DDEB
+B5CE;B5CE;1104 1166 11B9;B5CE;1104 1166 11B9; # (뗎; 뗎; 뗎; 뗎; 뗎; ) HANGUL SYLLABLE DDEBS
+B5CF;B5CF;1104 1166 11BA;B5CF;1104 1166 11BA; # (뗏; 뗏; 뗏; 뗏; 뗏; ) HANGUL SYLLABLE DDES
+B5D0;B5D0;1104 1166 11BB;B5D0;1104 1166 11BB; # (뗐; 뗐; 뗐; 뗐; 뗐; ) HANGUL SYLLABLE DDESS
+B5D1;B5D1;1104 1166 11BC;B5D1;1104 1166 11BC; # (뗑; 뗑; 뗑; 뗑; 뗑; ) HANGUL SYLLABLE DDENG
+B5D2;B5D2;1104 1166 11BD;B5D2;1104 1166 11BD; # (뗒; 뗒; 뗒; 뗒; 뗒; ) HANGUL SYLLABLE DDEJ
+B5D3;B5D3;1104 1166 11BE;B5D3;1104 1166 11BE; # (뗓; 뗓; 뗓; 뗓; 뗓; ) HANGUL SYLLABLE DDEC
+B5D4;B5D4;1104 1166 11BF;B5D4;1104 1166 11BF; # (뗔; 뗔; 뗔; 뗔; 뗔; ) HANGUL SYLLABLE DDEK
+B5D5;B5D5;1104 1166 11C0;B5D5;1104 1166 11C0; # (뗕; 뗕; 뗕; 뗕; 뗕; ) HANGUL SYLLABLE DDET
+B5D6;B5D6;1104 1166 11C1;B5D6;1104 1166 11C1; # (뗖; 뗖; 뗖; 뗖; 뗖; ) HANGUL SYLLABLE DDEP
+B5D7;B5D7;1104 1166 11C2;B5D7;1104 1166 11C2; # (뗗; 뗗; 뗗; 뗗; 뗗; ) HANGUL SYLLABLE DDEH
+B5D8;B5D8;1104 1167;B5D8;1104 1167; # (뗘; 뗘; 뗘; 뗘; 뗘; ) HANGUL SYLLABLE DDYEO
+B5D9;B5D9;1104 1167 11A8;B5D9;1104 1167 11A8; # (뗙; 뗙; 뗙; 뗙; 뗙; ) HANGUL SYLLABLE DDYEOG
+B5DA;B5DA;1104 1167 11A9;B5DA;1104 1167 11A9; # (뗚; 뗚; 뗚; 뗚; 뗚; ) HANGUL SYLLABLE DDYEOGG
+B5DB;B5DB;1104 1167 11AA;B5DB;1104 1167 11AA; # (뗛; 뗛; 뗛; 뗛; 뗛; ) HANGUL SYLLABLE DDYEOGS
+B5DC;B5DC;1104 1167 11AB;B5DC;1104 1167 11AB; # (뗜; 뗜; 뗜; 뗜; 뗜; ) HANGUL SYLLABLE DDYEON
+B5DD;B5DD;1104 1167 11AC;B5DD;1104 1167 11AC; # (뗝; 뗝; 뗝; 뗝; 뗝; ) HANGUL SYLLABLE DDYEONJ
+B5DE;B5DE;1104 1167 11AD;B5DE;1104 1167 11AD; # (뗞; 뗞; 뗞; 뗞; 뗞; ) HANGUL SYLLABLE DDYEONH
+B5DF;B5DF;1104 1167 11AE;B5DF;1104 1167 11AE; # (뗟; 뗟; 뗟; 뗟; 뗟; ) HANGUL SYLLABLE DDYEOD
+B5E0;B5E0;1104 1167 11AF;B5E0;1104 1167 11AF; # (뗠; 뗠; 뗠; 뗠; 뗠; ) HANGUL SYLLABLE DDYEOL
+B5E1;B5E1;1104 1167 11B0;B5E1;1104 1167 11B0; # (뗡; 뗡; 뗡; 뗡; 뗡; ) HANGUL SYLLABLE DDYEOLG
+B5E2;B5E2;1104 1167 11B1;B5E2;1104 1167 11B1; # (뗢; 뗢; 뗢; 뗢; 뗢; ) HANGUL SYLLABLE DDYEOLM
+B5E3;B5E3;1104 1167 11B2;B5E3;1104 1167 11B2; # (뗣; 뗣; 뗣; 뗣; 뗣; ) HANGUL SYLLABLE DDYEOLB
+B5E4;B5E4;1104 1167 11B3;B5E4;1104 1167 11B3; # (뗤; 뗤; 뗤; 뗤; 뗤; ) HANGUL SYLLABLE DDYEOLS
+B5E5;B5E5;1104 1167 11B4;B5E5;1104 1167 11B4; # (뗥; 뗥; 뗥; 뗥; 뗥; ) HANGUL SYLLABLE DDYEOLT
+B5E6;B5E6;1104 1167 11B5;B5E6;1104 1167 11B5; # (뗦; 뗦; 뗦; 뗦; 뗦; ) HANGUL SYLLABLE DDYEOLP
+B5E7;B5E7;1104 1167 11B6;B5E7;1104 1167 11B6; # (뗧; 뗧; 뗧; 뗧; 뗧; ) HANGUL SYLLABLE DDYEOLH
+B5E8;B5E8;1104 1167 11B7;B5E8;1104 1167 11B7; # (뗨; 뗨; 뗨; 뗨; 뗨; ) HANGUL SYLLABLE DDYEOM
+B5E9;B5E9;1104 1167 11B8;B5E9;1104 1167 11B8; # (뗩; 뗩; 뗩; 뗩; 뗩; ) HANGUL SYLLABLE DDYEOB
+B5EA;B5EA;1104 1167 11B9;B5EA;1104 1167 11B9; # (뗪; 뗪; 뗪; 뗪; 뗪; ) HANGUL SYLLABLE DDYEOBS
+B5EB;B5EB;1104 1167 11BA;B5EB;1104 1167 11BA; # (뗫; 뗫; 뗫; 뗫; 뗫; ) HANGUL SYLLABLE DDYEOS
+B5EC;B5EC;1104 1167 11BB;B5EC;1104 1167 11BB; # (뗬; 뗬; 뗬; 뗬; 뗬; ) HANGUL SYLLABLE DDYEOSS
+B5ED;B5ED;1104 1167 11BC;B5ED;1104 1167 11BC; # (뗭; 뗭; 뗭; 뗭; 뗭; ) HANGUL SYLLABLE DDYEONG
+B5EE;B5EE;1104 1167 11BD;B5EE;1104 1167 11BD; # (뗮; 뗮; 뗮; 뗮; 뗮; ) HANGUL SYLLABLE DDYEOJ
+B5EF;B5EF;1104 1167 11BE;B5EF;1104 1167 11BE; # (뗯; 뗯; 뗯; 뗯; 뗯; ) HANGUL SYLLABLE DDYEOC
+B5F0;B5F0;1104 1167 11BF;B5F0;1104 1167 11BF; # (뗰; 뗰; 뗰; 뗰; 뗰; ) HANGUL SYLLABLE DDYEOK
+B5F1;B5F1;1104 1167 11C0;B5F1;1104 1167 11C0; # (뗱; 뗱; 뗱; 뗱; 뗱; ) HANGUL SYLLABLE DDYEOT
+B5F2;B5F2;1104 1167 11C1;B5F2;1104 1167 11C1; # (뗲; 뗲; 뗲; 뗲; 뗲; ) HANGUL SYLLABLE DDYEOP
+B5F3;B5F3;1104 1167 11C2;B5F3;1104 1167 11C2; # (뗳; 뗳; 뗳; 뗳; 뗳; ) HANGUL SYLLABLE DDYEOH
+B5F4;B5F4;1104 1168;B5F4;1104 1168; # (뗴; 뗴; 뗴; 뗴; 뗴; ) HANGUL SYLLABLE DDYE
+B5F5;B5F5;1104 1168 11A8;B5F5;1104 1168 11A8; # (뗵; 뗵; 뗵; 뗵; 뗵; ) HANGUL SYLLABLE DDYEG
+B5F6;B5F6;1104 1168 11A9;B5F6;1104 1168 11A9; # (뗶; 뗶; 뗶; 뗶; 뗶; ) HANGUL SYLLABLE DDYEGG
+B5F7;B5F7;1104 1168 11AA;B5F7;1104 1168 11AA; # (뗷; 뗷; 뗷; 뗷; 뗷; ) HANGUL SYLLABLE DDYEGS
+B5F8;B5F8;1104 1168 11AB;B5F8;1104 1168 11AB; # (뗸; 뗸; 뗸; 뗸; 뗸; ) HANGUL SYLLABLE DDYEN
+B5F9;B5F9;1104 1168 11AC;B5F9;1104 1168 11AC; # (뗹; 뗹; 뗹; 뗹; 뗹; ) HANGUL SYLLABLE DDYENJ
+B5FA;B5FA;1104 1168 11AD;B5FA;1104 1168 11AD; # (뗺; 뗺; 뗺; 뗺; 뗺; ) HANGUL SYLLABLE DDYENH
+B5FB;B5FB;1104 1168 11AE;B5FB;1104 1168 11AE; # (뗻; 뗻; 뗻; 뗻; 뗻; ) HANGUL SYLLABLE DDYED
+B5FC;B5FC;1104 1168 11AF;B5FC;1104 1168 11AF; # (뗼; 뗼; 뗼; 뗼; 뗼; ) HANGUL SYLLABLE DDYEL
+B5FD;B5FD;1104 1168 11B0;B5FD;1104 1168 11B0; # (뗽; 뗽; 뗽; 뗽; 뗽; ) HANGUL SYLLABLE DDYELG
+B5FE;B5FE;1104 1168 11B1;B5FE;1104 1168 11B1; # (뗾; 뗾; 뗾; 뗾; 뗾; ) HANGUL SYLLABLE DDYELM
+B5FF;B5FF;1104 1168 11B2;B5FF;1104 1168 11B2; # (뗿; 뗿; 뗿; 뗿; 뗿; ) HANGUL SYLLABLE DDYELB
+B600;B600;1104 1168 11B3;B600;1104 1168 11B3; # (똀; 똀; 똀; 똀; 똀; ) HANGUL SYLLABLE DDYELS
+B601;B601;1104 1168 11B4;B601;1104 1168 11B4; # (똁; 똁; 똁; 똁; 똁; ) HANGUL SYLLABLE DDYELT
+B602;B602;1104 1168 11B5;B602;1104 1168 11B5; # (똂; 똂; 똂; 똂; 똂; ) HANGUL SYLLABLE DDYELP
+B603;B603;1104 1168 11B6;B603;1104 1168 11B6; # (똃; 똃; 똃; 똃; 똃; ) HANGUL SYLLABLE DDYELH
+B604;B604;1104 1168 11B7;B604;1104 1168 11B7; # (똄; 똄; 똄; 똄; 똄; ) HANGUL SYLLABLE DDYEM
+B605;B605;1104 1168 11B8;B605;1104 1168 11B8; # (똅; 똅; 똅; 똅; 똅; ) HANGUL SYLLABLE DDYEB
+B606;B606;1104 1168 11B9;B606;1104 1168 11B9; # (똆; 똆; 똆; 똆; 똆; ) HANGUL SYLLABLE DDYEBS
+B607;B607;1104 1168 11BA;B607;1104 1168 11BA; # (똇; 똇; 똇; 똇; 똇; ) HANGUL SYLLABLE DDYES
+B608;B608;1104 1168 11BB;B608;1104 1168 11BB; # (똈; 똈; 똈; 똈; 똈; ) HANGUL SYLLABLE DDYESS
+B609;B609;1104 1168 11BC;B609;1104 1168 11BC; # (똉; 똉; 똉; 똉; 똉; ) HANGUL SYLLABLE DDYENG
+B60A;B60A;1104 1168 11BD;B60A;1104 1168 11BD; # (똊; 똊; 똊; 똊; 똊; ) HANGUL SYLLABLE DDYEJ
+B60B;B60B;1104 1168 11BE;B60B;1104 1168 11BE; # (똋; 똋; 똋; 똋; 똋; ) HANGUL SYLLABLE DDYEC
+B60C;B60C;1104 1168 11BF;B60C;1104 1168 11BF; # (똌; 똌; 똌; 똌; 똌; ) HANGUL SYLLABLE DDYEK
+B60D;B60D;1104 1168 11C0;B60D;1104 1168 11C0; # (똍; 똍; 똍; 똍; 똍; ) HANGUL SYLLABLE DDYET
+B60E;B60E;1104 1168 11C1;B60E;1104 1168 11C1; # (똎; 똎; 똎; 똎; 똎; ) HANGUL SYLLABLE DDYEP
+B60F;B60F;1104 1168 11C2;B60F;1104 1168 11C2; # (똏; 똏; 똏; 똏; 똏; ) HANGUL SYLLABLE DDYEH
+B610;B610;1104 1169;B610;1104 1169; # (또; 또; 또; 또; 또; ) HANGUL SYLLABLE DDO
+B611;B611;1104 1169 11A8;B611;1104 1169 11A8; # (똑; 똑; 똑; 똑; 똑; ) HANGUL SYLLABLE DDOG
+B612;B612;1104 1169 11A9;B612;1104 1169 11A9; # (똒; 똒; 똒; 똒; 똒; ) HANGUL SYLLABLE DDOGG
+B613;B613;1104 1169 11AA;B613;1104 1169 11AA; # (똓; 똓; 똓; 똓; 똓; ) HANGUL SYLLABLE DDOGS
+B614;B614;1104 1169 11AB;B614;1104 1169 11AB; # (똔; 똔; 똔; 똔; 똔; ) HANGUL SYLLABLE DDON
+B615;B615;1104 1169 11AC;B615;1104 1169 11AC; # (똕; 똕; 똕; 똕; 똕; ) HANGUL SYLLABLE DDONJ
+B616;B616;1104 1169 11AD;B616;1104 1169 11AD; # (똖; 똖; 똖; 똖; 똖; ) HANGUL SYLLABLE DDONH
+B617;B617;1104 1169 11AE;B617;1104 1169 11AE; # (똗; 똗; 똗; 똗; 똗; ) HANGUL SYLLABLE DDOD
+B618;B618;1104 1169 11AF;B618;1104 1169 11AF; # (똘; 똘; 똘; 똘; 똘; ) HANGUL SYLLABLE DDOL
+B619;B619;1104 1169 11B0;B619;1104 1169 11B0; # (똙; 똙; 똙; 똙; 똙; ) HANGUL SYLLABLE DDOLG
+B61A;B61A;1104 1169 11B1;B61A;1104 1169 11B1; # (똚; 똚; 똚; 똚; 똚; ) HANGUL SYLLABLE DDOLM
+B61B;B61B;1104 1169 11B2;B61B;1104 1169 11B2; # (똛; 똛; 똛; 똛; 똛; ) HANGUL SYLLABLE DDOLB
+B61C;B61C;1104 1169 11B3;B61C;1104 1169 11B3; # (똜; 똜; 똜; 똜; 똜; ) HANGUL SYLLABLE DDOLS
+B61D;B61D;1104 1169 11B4;B61D;1104 1169 11B4; # (똝; 똝; 똝; 똝; 똝; ) HANGUL SYLLABLE DDOLT
+B61E;B61E;1104 1169 11B5;B61E;1104 1169 11B5; # (똞; 똞; 똞; 똞; 똞; ) HANGUL SYLLABLE DDOLP
+B61F;B61F;1104 1169 11B6;B61F;1104 1169 11B6; # (똟; 똟; 똟; 똟; 똟; ) HANGUL SYLLABLE DDOLH
+B620;B620;1104 1169 11B7;B620;1104 1169 11B7; # (똠; 똠; 똠; 똠; 똠; ) HANGUL SYLLABLE DDOM
+B621;B621;1104 1169 11B8;B621;1104 1169 11B8; # (똡; 똡; 똡; 똡; 똡; ) HANGUL SYLLABLE DDOB
+B622;B622;1104 1169 11B9;B622;1104 1169 11B9; # (똢; 똢; 똢; 똢; 똢; ) HANGUL SYLLABLE DDOBS
+B623;B623;1104 1169 11BA;B623;1104 1169 11BA; # (똣; 똣; 똣; 똣; 똣; ) HANGUL SYLLABLE DDOS
+B624;B624;1104 1169 11BB;B624;1104 1169 11BB; # (똤; 똤; 똤; 똤; 똤; ) HANGUL SYLLABLE DDOSS
+B625;B625;1104 1169 11BC;B625;1104 1169 11BC; # (똥; 똥; 똥; 똥; 똥; ) HANGUL SYLLABLE DDONG
+B626;B626;1104 1169 11BD;B626;1104 1169 11BD; # (똦; 똦; 똦; 똦; 똦; ) HANGUL SYLLABLE DDOJ
+B627;B627;1104 1169 11BE;B627;1104 1169 11BE; # (똧; 똧; 똧; 똧; 똧; ) HANGUL SYLLABLE DDOC
+B628;B628;1104 1169 11BF;B628;1104 1169 11BF; # (똨; 똨; 똨; 똨; 똨; ) HANGUL SYLLABLE DDOK
+B629;B629;1104 1169 11C0;B629;1104 1169 11C0; # (똩; 똩; 똩; 똩; 똩; ) HANGUL SYLLABLE DDOT
+B62A;B62A;1104 1169 11C1;B62A;1104 1169 11C1; # (똪; 똪; 똪; 똪; 똪; ) HANGUL SYLLABLE DDOP
+B62B;B62B;1104 1169 11C2;B62B;1104 1169 11C2; # (똫; 똫; 똫; 똫; 똫; ) HANGUL SYLLABLE DDOH
+B62C;B62C;1104 116A;B62C;1104 116A; # (똬; 똬; 똬; 똬; 똬; ) HANGUL SYLLABLE DDWA
+B62D;B62D;1104 116A 11A8;B62D;1104 116A 11A8; # (똭; 똭; 똭; 똭; 똭; ) HANGUL SYLLABLE DDWAG
+B62E;B62E;1104 116A 11A9;B62E;1104 116A 11A9; # (똮; 똮; 똮; 똮; 똮; ) HANGUL SYLLABLE DDWAGG
+B62F;B62F;1104 116A 11AA;B62F;1104 116A 11AA; # (똯; 똯; 똯; 똯; 똯; ) HANGUL SYLLABLE DDWAGS
+B630;B630;1104 116A 11AB;B630;1104 116A 11AB; # (똰; 똰; 똰; 똰; 똰; ) HANGUL SYLLABLE DDWAN
+B631;B631;1104 116A 11AC;B631;1104 116A 11AC; # (똱; 똱; 똱; 똱; 똱; ) HANGUL SYLLABLE DDWANJ
+B632;B632;1104 116A 11AD;B632;1104 116A 11AD; # (똲; 똲; 똲; 똲; 똲; ) HANGUL SYLLABLE DDWANH
+B633;B633;1104 116A 11AE;B633;1104 116A 11AE; # (똳; 똳; 똳; 똳; 똳; ) HANGUL SYLLABLE DDWAD
+B634;B634;1104 116A 11AF;B634;1104 116A 11AF; # (똴; 똴; 똴; 똴; 똴; ) HANGUL SYLLABLE DDWAL
+B635;B635;1104 116A 11B0;B635;1104 116A 11B0; # (똵; 똵; 똵; 똵; 똵; ) HANGUL SYLLABLE DDWALG
+B636;B636;1104 116A 11B1;B636;1104 116A 11B1; # (똶; 똶; 똶; 똶; 똶; ) HANGUL SYLLABLE DDWALM
+B637;B637;1104 116A 11B2;B637;1104 116A 11B2; # (똷; 똷; 똷; 똷; 똷; ) HANGUL SYLLABLE DDWALB
+B638;B638;1104 116A 11B3;B638;1104 116A 11B3; # (똸; 똸; 똸; 똸; 똸; ) HANGUL SYLLABLE DDWALS
+B639;B639;1104 116A 11B4;B639;1104 116A 11B4; # (똹; 똹; 똹; 똹; 똹; ) HANGUL SYLLABLE DDWALT
+B63A;B63A;1104 116A 11B5;B63A;1104 116A 11B5; # (똺; 똺; 똺; 똺; 똺; ) HANGUL SYLLABLE DDWALP
+B63B;B63B;1104 116A 11B6;B63B;1104 116A 11B6; # (똻; 똻; 똻; 똻; 똻; ) HANGUL SYLLABLE DDWALH
+B63C;B63C;1104 116A 11B7;B63C;1104 116A 11B7; # (똼; 똼; 똼; 똼; 똼; ) HANGUL SYLLABLE DDWAM
+B63D;B63D;1104 116A 11B8;B63D;1104 116A 11B8; # (똽; 똽; 똽; 똽; 똽; ) HANGUL SYLLABLE DDWAB
+B63E;B63E;1104 116A 11B9;B63E;1104 116A 11B9; # (똾; 똾; 똾; 똾; 똾; ) HANGUL SYLLABLE DDWABS
+B63F;B63F;1104 116A 11BA;B63F;1104 116A 11BA; # (똿; 똿; 똿; 똿; 똿; ) HANGUL SYLLABLE DDWAS
+B640;B640;1104 116A 11BB;B640;1104 116A 11BB; # (뙀; 뙀; 뙀; 뙀; 뙀; ) HANGUL SYLLABLE DDWASS
+B641;B641;1104 116A 11BC;B641;1104 116A 11BC; # (뙁; 뙁; 뙁; 뙁; 뙁; ) HANGUL SYLLABLE DDWANG
+B642;B642;1104 116A 11BD;B642;1104 116A 11BD; # (뙂; 뙂; 뙂; 뙂; 뙂; ) HANGUL SYLLABLE DDWAJ
+B643;B643;1104 116A 11BE;B643;1104 116A 11BE; # (뙃; 뙃; 뙃; 뙃; 뙃; ) HANGUL SYLLABLE DDWAC
+B644;B644;1104 116A 11BF;B644;1104 116A 11BF; # (뙄; 뙄; 뙄; 뙄; 뙄; ) HANGUL SYLLABLE DDWAK
+B645;B645;1104 116A 11C0;B645;1104 116A 11C0; # (뙅; 뙅; 뙅; 뙅; 뙅; ) HANGUL SYLLABLE DDWAT
+B646;B646;1104 116A 11C1;B646;1104 116A 11C1; # (뙆; 뙆; 뙆; 뙆; 뙆; ) HANGUL SYLLABLE DDWAP
+B647;B647;1104 116A 11C2;B647;1104 116A 11C2; # (뙇; 뙇; 뙇; 뙇; 뙇; ) HANGUL SYLLABLE DDWAH
+B648;B648;1104 116B;B648;1104 116B; # (뙈; 뙈; 뙈; 뙈; 뙈; ) HANGUL SYLLABLE DDWAE
+B649;B649;1104 116B 11A8;B649;1104 116B 11A8; # (뙉; 뙉; 뙉; 뙉; 뙉; ) HANGUL SYLLABLE DDWAEG
+B64A;B64A;1104 116B 11A9;B64A;1104 116B 11A9; # (뙊; 뙊; 뙊; 뙊; 뙊; ) HANGUL SYLLABLE DDWAEGG
+B64B;B64B;1104 116B 11AA;B64B;1104 116B 11AA; # (뙋; 뙋; 뙋; 뙋; 뙋; ) HANGUL SYLLABLE DDWAEGS
+B64C;B64C;1104 116B 11AB;B64C;1104 116B 11AB; # (뙌; 뙌; 뙌; 뙌; 뙌; ) HANGUL SYLLABLE DDWAEN
+B64D;B64D;1104 116B 11AC;B64D;1104 116B 11AC; # (뙍; 뙍; 뙍; 뙍; 뙍; ) HANGUL SYLLABLE DDWAENJ
+B64E;B64E;1104 116B 11AD;B64E;1104 116B 11AD; # (뙎; 뙎; 뙎; 뙎; 뙎; ) HANGUL SYLLABLE DDWAENH
+B64F;B64F;1104 116B 11AE;B64F;1104 116B 11AE; # (뙏; 뙏; 뙏; 뙏; 뙏; ) HANGUL SYLLABLE DDWAED
+B650;B650;1104 116B 11AF;B650;1104 116B 11AF; # (뙐; 뙐; 뙐; 뙐; 뙐; ) HANGUL SYLLABLE DDWAEL
+B651;B651;1104 116B 11B0;B651;1104 116B 11B0; # (뙑; 뙑; 뙑; 뙑; 뙑; ) HANGUL SYLLABLE DDWAELG
+B652;B652;1104 116B 11B1;B652;1104 116B 11B1; # (뙒; 뙒; 뙒; 뙒; 뙒; ) HANGUL SYLLABLE DDWAELM
+B653;B653;1104 116B 11B2;B653;1104 116B 11B2; # (뙓; 뙓; 뙓; 뙓; 뙓; ) HANGUL SYLLABLE DDWAELB
+B654;B654;1104 116B 11B3;B654;1104 116B 11B3; # (뙔; 뙔; 뙔; 뙔; 뙔; ) HANGUL SYLLABLE DDWAELS
+B655;B655;1104 116B 11B4;B655;1104 116B 11B4; # (뙕; 뙕; 뙕; 뙕; 뙕; ) HANGUL SYLLABLE DDWAELT
+B656;B656;1104 116B 11B5;B656;1104 116B 11B5; # (뙖; 뙖; 뙖; 뙖; 뙖; ) HANGUL SYLLABLE DDWAELP
+B657;B657;1104 116B 11B6;B657;1104 116B 11B6; # (뙗; 뙗; 뙗; 뙗; 뙗; ) HANGUL SYLLABLE DDWAELH
+B658;B658;1104 116B 11B7;B658;1104 116B 11B7; # (뙘; 뙘; 뙘; 뙘; 뙘; ) HANGUL SYLLABLE DDWAEM
+B659;B659;1104 116B 11B8;B659;1104 116B 11B8; # (뙙; 뙙; 뙙; 뙙; 뙙; ) HANGUL SYLLABLE DDWAEB
+B65A;B65A;1104 116B 11B9;B65A;1104 116B 11B9; # (뙚; 뙚; 뙚; 뙚; 뙚; ) HANGUL SYLLABLE DDWAEBS
+B65B;B65B;1104 116B 11BA;B65B;1104 116B 11BA; # (뙛; 뙛; 뙛; 뙛; 뙛; ) HANGUL SYLLABLE DDWAES
+B65C;B65C;1104 116B 11BB;B65C;1104 116B 11BB; # (뙜; 뙜; 뙜; 뙜; 뙜; ) HANGUL SYLLABLE DDWAESS
+B65D;B65D;1104 116B 11BC;B65D;1104 116B 11BC; # (뙝; 뙝; 뙝; 뙝; 뙝; ) HANGUL SYLLABLE DDWAENG
+B65E;B65E;1104 116B 11BD;B65E;1104 116B 11BD; # (뙞; 뙞; 뙞; 뙞; 뙞; ) HANGUL SYLLABLE DDWAEJ
+B65F;B65F;1104 116B 11BE;B65F;1104 116B 11BE; # (뙟; 뙟; 뙟; 뙟; 뙟; ) HANGUL SYLLABLE DDWAEC
+B660;B660;1104 116B 11BF;B660;1104 116B 11BF; # (뙠; 뙠; 뙠; 뙠; 뙠; ) HANGUL SYLLABLE DDWAEK
+B661;B661;1104 116B 11C0;B661;1104 116B 11C0; # (뙡; 뙡; 뙡; 뙡; 뙡; ) HANGUL SYLLABLE DDWAET
+B662;B662;1104 116B 11C1;B662;1104 116B 11C1; # (뙢; 뙢; 뙢; 뙢; 뙢; ) HANGUL SYLLABLE DDWAEP
+B663;B663;1104 116B 11C2;B663;1104 116B 11C2; # (뙣; 뙣; 뙣; 뙣; 뙣; ) HANGUL SYLLABLE DDWAEH
+B664;B664;1104 116C;B664;1104 116C; # (뙤; 뙤; 뙤; 뙤; 뙤; ) HANGUL SYLLABLE DDOE
+B665;B665;1104 116C 11A8;B665;1104 116C 11A8; # (뙥; 뙥; 뙥; 뙥; 뙥; ) HANGUL SYLLABLE DDOEG
+B666;B666;1104 116C 11A9;B666;1104 116C 11A9; # (뙦; 뙦; 뙦; 뙦; 뙦; ) HANGUL SYLLABLE DDOEGG
+B667;B667;1104 116C 11AA;B667;1104 116C 11AA; # (뙧; 뙧; 뙧; 뙧; 뙧; ) HANGUL SYLLABLE DDOEGS
+B668;B668;1104 116C 11AB;B668;1104 116C 11AB; # (뙨; 뙨; 뙨; 뙨; 뙨; ) HANGUL SYLLABLE DDOEN
+B669;B669;1104 116C 11AC;B669;1104 116C 11AC; # (뙩; 뙩; 뙩; 뙩; 뙩; ) HANGUL SYLLABLE DDOENJ
+B66A;B66A;1104 116C 11AD;B66A;1104 116C 11AD; # (뙪; 뙪; 뙪; 뙪; 뙪; ) HANGUL SYLLABLE DDOENH
+B66B;B66B;1104 116C 11AE;B66B;1104 116C 11AE; # (뙫; 뙫; 뙫; 뙫; 뙫; ) HANGUL SYLLABLE DDOED
+B66C;B66C;1104 116C 11AF;B66C;1104 116C 11AF; # (뙬; 뙬; 뙬; 뙬; 뙬; ) HANGUL SYLLABLE DDOEL
+B66D;B66D;1104 116C 11B0;B66D;1104 116C 11B0; # (뙭; 뙭; 뙭; 뙭; 뙭; ) HANGUL SYLLABLE DDOELG
+B66E;B66E;1104 116C 11B1;B66E;1104 116C 11B1; # (뙮; 뙮; 뙮; 뙮; 뙮; ) HANGUL SYLLABLE DDOELM
+B66F;B66F;1104 116C 11B2;B66F;1104 116C 11B2; # (뙯; 뙯; 뙯; 뙯; 뙯; ) HANGUL SYLLABLE DDOELB
+B670;B670;1104 116C 11B3;B670;1104 116C 11B3; # (뙰; 뙰; 뙰; 뙰; 뙰; ) HANGUL SYLLABLE DDOELS
+B671;B671;1104 116C 11B4;B671;1104 116C 11B4; # (뙱; 뙱; 뙱; 뙱; 뙱; ) HANGUL SYLLABLE DDOELT
+B672;B672;1104 116C 11B5;B672;1104 116C 11B5; # (뙲; 뙲; 뙲; 뙲; 뙲; ) HANGUL SYLLABLE DDOELP
+B673;B673;1104 116C 11B6;B673;1104 116C 11B6; # (뙳; 뙳; 뙳; 뙳; 뙳; ) HANGUL SYLLABLE DDOELH
+B674;B674;1104 116C 11B7;B674;1104 116C 11B7; # (뙴; 뙴; 뙴; 뙴; 뙴; ) HANGUL SYLLABLE DDOEM
+B675;B675;1104 116C 11B8;B675;1104 116C 11B8; # (뙵; 뙵; 뙵; 뙵; 뙵; ) HANGUL SYLLABLE DDOEB
+B676;B676;1104 116C 11B9;B676;1104 116C 11B9; # (뙶; 뙶; 뙶; 뙶; 뙶; ) HANGUL SYLLABLE DDOEBS
+B677;B677;1104 116C 11BA;B677;1104 116C 11BA; # (뙷; 뙷; 뙷; 뙷; 뙷; ) HANGUL SYLLABLE DDOES
+B678;B678;1104 116C 11BB;B678;1104 116C 11BB; # (뙸; 뙸; 뙸; 뙸; 뙸; ) HANGUL SYLLABLE DDOESS
+B679;B679;1104 116C 11BC;B679;1104 116C 11BC; # (뙹; 뙹; 뙹; 뙹; 뙹; ) HANGUL SYLLABLE DDOENG
+B67A;B67A;1104 116C 11BD;B67A;1104 116C 11BD; # (뙺; 뙺; 뙺; 뙺; 뙺; ) HANGUL SYLLABLE DDOEJ
+B67B;B67B;1104 116C 11BE;B67B;1104 116C 11BE; # (뙻; 뙻; 뙻; 뙻; 뙻; ) HANGUL SYLLABLE DDOEC
+B67C;B67C;1104 116C 11BF;B67C;1104 116C 11BF; # (뙼; 뙼; 뙼; 뙼; 뙼; ) HANGUL SYLLABLE DDOEK
+B67D;B67D;1104 116C 11C0;B67D;1104 116C 11C0; # (뙽; 뙽; 뙽; 뙽; 뙽; ) HANGUL SYLLABLE DDOET
+B67E;B67E;1104 116C 11C1;B67E;1104 116C 11C1; # (뙾; 뙾; 뙾; 뙾; 뙾; ) HANGUL SYLLABLE DDOEP
+B67F;B67F;1104 116C 11C2;B67F;1104 116C 11C2; # (뙿; 뙿; 뙿; 뙿; 뙿; ) HANGUL SYLLABLE DDOEH
+B680;B680;1104 116D;B680;1104 116D; # (뚀; 뚀; 뚀; 뚀; 뚀; ) HANGUL SYLLABLE DDYO
+B681;B681;1104 116D 11A8;B681;1104 116D 11A8; # (뚁; 뚁; 뚁; 뚁; 뚁; ) HANGUL SYLLABLE DDYOG
+B682;B682;1104 116D 11A9;B682;1104 116D 11A9; # (뚂; 뚂; 뚂; 뚂; 뚂; ) HANGUL SYLLABLE DDYOGG
+B683;B683;1104 116D 11AA;B683;1104 116D 11AA; # (뚃; 뚃; 뚃; 뚃; 뚃; ) HANGUL SYLLABLE DDYOGS
+B684;B684;1104 116D 11AB;B684;1104 116D 11AB; # (뚄; 뚄; 뚄; 뚄; 뚄; ) HANGUL SYLLABLE DDYON
+B685;B685;1104 116D 11AC;B685;1104 116D 11AC; # (뚅; 뚅; 뚅; 뚅; 뚅; ) HANGUL SYLLABLE DDYONJ
+B686;B686;1104 116D 11AD;B686;1104 116D 11AD; # (뚆; 뚆; 뚆; 뚆; 뚆; ) HANGUL SYLLABLE DDYONH
+B687;B687;1104 116D 11AE;B687;1104 116D 11AE; # (뚇; 뚇; 뚇; 뚇; 뚇; ) HANGUL SYLLABLE DDYOD
+B688;B688;1104 116D 11AF;B688;1104 116D 11AF; # (뚈; 뚈; 뚈; 뚈; 뚈; ) HANGUL SYLLABLE DDYOL
+B689;B689;1104 116D 11B0;B689;1104 116D 11B0; # (뚉; 뚉; 뚉; 뚉; 뚉; ) HANGUL SYLLABLE DDYOLG
+B68A;B68A;1104 116D 11B1;B68A;1104 116D 11B1; # (뚊; 뚊; 뚊; 뚊; 뚊; ) HANGUL SYLLABLE DDYOLM
+B68B;B68B;1104 116D 11B2;B68B;1104 116D 11B2; # (뚋; 뚋; 뚋; 뚋; 뚋; ) HANGUL SYLLABLE DDYOLB
+B68C;B68C;1104 116D 11B3;B68C;1104 116D 11B3; # (뚌; 뚌; 뚌; 뚌; 뚌; ) HANGUL SYLLABLE DDYOLS
+B68D;B68D;1104 116D 11B4;B68D;1104 116D 11B4; # (뚍; 뚍; 뚍; 뚍; 뚍; ) HANGUL SYLLABLE DDYOLT
+B68E;B68E;1104 116D 11B5;B68E;1104 116D 11B5; # (뚎; 뚎; 뚎; 뚎; 뚎; ) HANGUL SYLLABLE DDYOLP
+B68F;B68F;1104 116D 11B6;B68F;1104 116D 11B6; # (뚏; 뚏; 뚏; 뚏; 뚏; ) HANGUL SYLLABLE DDYOLH
+B690;B690;1104 116D 11B7;B690;1104 116D 11B7; # (뚐; 뚐; 뚐; 뚐; 뚐; ) HANGUL SYLLABLE DDYOM
+B691;B691;1104 116D 11B8;B691;1104 116D 11B8; # (뚑; 뚑; 뚑; 뚑; 뚑; ) HANGUL SYLLABLE DDYOB
+B692;B692;1104 116D 11B9;B692;1104 116D 11B9; # (뚒; 뚒; 뚒; 뚒; 뚒; ) HANGUL SYLLABLE DDYOBS
+B693;B693;1104 116D 11BA;B693;1104 116D 11BA; # (뚓; 뚓; 뚓; 뚓; 뚓; ) HANGUL SYLLABLE DDYOS
+B694;B694;1104 116D 11BB;B694;1104 116D 11BB; # (뚔; 뚔; 뚔; 뚔; 뚔; ) HANGUL SYLLABLE DDYOSS
+B695;B695;1104 116D 11BC;B695;1104 116D 11BC; # (뚕; 뚕; 뚕; 뚕; 뚕; ) HANGUL SYLLABLE DDYONG
+B696;B696;1104 116D 11BD;B696;1104 116D 11BD; # (뚖; 뚖; 뚖; 뚖; 뚖; ) HANGUL SYLLABLE DDYOJ
+B697;B697;1104 116D 11BE;B697;1104 116D 11BE; # (뚗; 뚗; 뚗; 뚗; 뚗; ) HANGUL SYLLABLE DDYOC
+B698;B698;1104 116D 11BF;B698;1104 116D 11BF; # (뚘; 뚘; 뚘; 뚘; 뚘; ) HANGUL SYLLABLE DDYOK
+B699;B699;1104 116D 11C0;B699;1104 116D 11C0; # (뚙; 뚙; 뚙; 뚙; 뚙; ) HANGUL SYLLABLE DDYOT
+B69A;B69A;1104 116D 11C1;B69A;1104 116D 11C1; # (뚚; 뚚; 뚚; 뚚; 뚚; ) HANGUL SYLLABLE DDYOP
+B69B;B69B;1104 116D 11C2;B69B;1104 116D 11C2; # (뚛; 뚛; 뚛; 뚛; 뚛; ) HANGUL SYLLABLE DDYOH
+B69C;B69C;1104 116E;B69C;1104 116E; # (뚜; 뚜; 뚜; 뚜; 뚜; ) HANGUL SYLLABLE DDU
+B69D;B69D;1104 116E 11A8;B69D;1104 116E 11A8; # (뚝; 뚝; 뚝; 뚝; 뚝; ) HANGUL SYLLABLE DDUG
+B69E;B69E;1104 116E 11A9;B69E;1104 116E 11A9; # (뚞; 뚞; 뚞; 뚞; 뚞; ) HANGUL SYLLABLE DDUGG
+B69F;B69F;1104 116E 11AA;B69F;1104 116E 11AA; # (뚟; 뚟; 뚟; 뚟; 뚟; ) HANGUL SYLLABLE DDUGS
+B6A0;B6A0;1104 116E 11AB;B6A0;1104 116E 11AB; # (뚠; 뚠; 뚠; 뚠; 뚠; ) HANGUL SYLLABLE DDUN
+B6A1;B6A1;1104 116E 11AC;B6A1;1104 116E 11AC; # (뚡; 뚡; 뚡; 뚡; 뚡; ) HANGUL SYLLABLE DDUNJ
+B6A2;B6A2;1104 116E 11AD;B6A2;1104 116E 11AD; # (뚢; 뚢; 뚢; 뚢; 뚢; ) HANGUL SYLLABLE DDUNH
+B6A3;B6A3;1104 116E 11AE;B6A3;1104 116E 11AE; # (뚣; 뚣; 뚣; 뚣; 뚣; ) HANGUL SYLLABLE DDUD
+B6A4;B6A4;1104 116E 11AF;B6A4;1104 116E 11AF; # (뚤; 뚤; 뚤; 뚤; 뚤; ) HANGUL SYLLABLE DDUL
+B6A5;B6A5;1104 116E 11B0;B6A5;1104 116E 11B0; # (뚥; 뚥; 뚥; 뚥; 뚥; ) HANGUL SYLLABLE DDULG
+B6A6;B6A6;1104 116E 11B1;B6A6;1104 116E 11B1; # (뚦; 뚦; 뚦; 뚦; 뚦; ) HANGUL SYLLABLE DDULM
+B6A7;B6A7;1104 116E 11B2;B6A7;1104 116E 11B2; # (뚧; 뚧; 뚧; 뚧; 뚧; ) HANGUL SYLLABLE DDULB
+B6A8;B6A8;1104 116E 11B3;B6A8;1104 116E 11B3; # (뚨; 뚨; 뚨; 뚨; 뚨; ) HANGUL SYLLABLE DDULS
+B6A9;B6A9;1104 116E 11B4;B6A9;1104 116E 11B4; # (뚩; 뚩; 뚩; 뚩; 뚩; ) HANGUL SYLLABLE DDULT
+B6AA;B6AA;1104 116E 11B5;B6AA;1104 116E 11B5; # (뚪; 뚪; 뚪; 뚪; 뚪; ) HANGUL SYLLABLE DDULP
+B6AB;B6AB;1104 116E 11B6;B6AB;1104 116E 11B6; # (뚫; 뚫; 뚫; 뚫; 뚫; ) HANGUL SYLLABLE DDULH
+B6AC;B6AC;1104 116E 11B7;B6AC;1104 116E 11B7; # (뚬; 뚬; 뚬; 뚬; 뚬; ) HANGUL SYLLABLE DDUM
+B6AD;B6AD;1104 116E 11B8;B6AD;1104 116E 11B8; # (뚭; 뚭; 뚭; 뚭; 뚭; ) HANGUL SYLLABLE DDUB
+B6AE;B6AE;1104 116E 11B9;B6AE;1104 116E 11B9; # (뚮; 뚮; 뚮; 뚮; 뚮; ) HANGUL SYLLABLE DDUBS
+B6AF;B6AF;1104 116E 11BA;B6AF;1104 116E 11BA; # (뚯; 뚯; 뚯; 뚯; 뚯; ) HANGUL SYLLABLE DDUS
+B6B0;B6B0;1104 116E 11BB;B6B0;1104 116E 11BB; # (뚰; 뚰; 뚰; 뚰; 뚰; ) HANGUL SYLLABLE DDUSS
+B6B1;B6B1;1104 116E 11BC;B6B1;1104 116E 11BC; # (뚱; 뚱; 뚱; 뚱; 뚱; ) HANGUL SYLLABLE DDUNG
+B6B2;B6B2;1104 116E 11BD;B6B2;1104 116E 11BD; # (뚲; 뚲; 뚲; 뚲; 뚲; ) HANGUL SYLLABLE DDUJ
+B6B3;B6B3;1104 116E 11BE;B6B3;1104 116E 11BE; # (뚳; 뚳; 뚳; 뚳; 뚳; ) HANGUL SYLLABLE DDUC
+B6B4;B6B4;1104 116E 11BF;B6B4;1104 116E 11BF; # (뚴; 뚴; 뚴; 뚴; 뚴; ) HANGUL SYLLABLE DDUK
+B6B5;B6B5;1104 116E 11C0;B6B5;1104 116E 11C0; # (뚵; 뚵; 뚵; 뚵; 뚵; ) HANGUL SYLLABLE DDUT
+B6B6;B6B6;1104 116E 11C1;B6B6;1104 116E 11C1; # (뚶; 뚶; 뚶; 뚶; 뚶; ) HANGUL SYLLABLE DDUP
+B6B7;B6B7;1104 116E 11C2;B6B7;1104 116E 11C2; # (뚷; 뚷; 뚷; 뚷; 뚷; ) HANGUL SYLLABLE DDUH
+B6B8;B6B8;1104 116F;B6B8;1104 116F; # (뚸; 뚸; 뚸; 뚸; 뚸; ) HANGUL SYLLABLE DDWEO
+B6B9;B6B9;1104 116F 11A8;B6B9;1104 116F 11A8; # (뚹; 뚹; 뚹; 뚹; 뚹; ) HANGUL SYLLABLE DDWEOG
+B6BA;B6BA;1104 116F 11A9;B6BA;1104 116F 11A9; # (뚺; 뚺; 뚺; 뚺; 뚺; ) HANGUL SYLLABLE DDWEOGG
+B6BB;B6BB;1104 116F 11AA;B6BB;1104 116F 11AA; # (뚻; 뚻; 뚻; 뚻; 뚻; ) HANGUL SYLLABLE DDWEOGS
+B6BC;B6BC;1104 116F 11AB;B6BC;1104 116F 11AB; # (뚼; 뚼; 뚼; 뚼; 뚼; ) HANGUL SYLLABLE DDWEON
+B6BD;B6BD;1104 116F 11AC;B6BD;1104 116F 11AC; # (뚽; 뚽; 뚽; 뚽; 뚽; ) HANGUL SYLLABLE DDWEONJ
+B6BE;B6BE;1104 116F 11AD;B6BE;1104 116F 11AD; # (뚾; 뚾; 뚾; 뚾; 뚾; ) HANGUL SYLLABLE DDWEONH
+B6BF;B6BF;1104 116F 11AE;B6BF;1104 116F 11AE; # (뚿; 뚿; 뚿; 뚿; 뚿; ) HANGUL SYLLABLE DDWEOD
+B6C0;B6C0;1104 116F 11AF;B6C0;1104 116F 11AF; # (뛀; 뛀; 뛀; 뛀; 뛀; ) HANGUL SYLLABLE DDWEOL
+B6C1;B6C1;1104 116F 11B0;B6C1;1104 116F 11B0; # (뛁; 뛁; 뛁; 뛁; 뛁; ) HANGUL SYLLABLE DDWEOLG
+B6C2;B6C2;1104 116F 11B1;B6C2;1104 116F 11B1; # (뛂; 뛂; 뛂; 뛂; 뛂; ) HANGUL SYLLABLE DDWEOLM
+B6C3;B6C3;1104 116F 11B2;B6C3;1104 116F 11B2; # (뛃; 뛃; 뛃; 뛃; 뛃; ) HANGUL SYLLABLE DDWEOLB
+B6C4;B6C4;1104 116F 11B3;B6C4;1104 116F 11B3; # (뛄; 뛄; 뛄; 뛄; 뛄; ) HANGUL SYLLABLE DDWEOLS
+B6C5;B6C5;1104 116F 11B4;B6C5;1104 116F 11B4; # (뛅; 뛅; 뛅; 뛅; 뛅; ) HANGUL SYLLABLE DDWEOLT
+B6C6;B6C6;1104 116F 11B5;B6C6;1104 116F 11B5; # (뛆; 뛆; 뛆; 뛆; 뛆; ) HANGUL SYLLABLE DDWEOLP
+B6C7;B6C7;1104 116F 11B6;B6C7;1104 116F 11B6; # (뛇; 뛇; 뛇; 뛇; 뛇; ) HANGUL SYLLABLE DDWEOLH
+B6C8;B6C8;1104 116F 11B7;B6C8;1104 116F 11B7; # (뛈; 뛈; 뛈; 뛈; 뛈; ) HANGUL SYLLABLE DDWEOM
+B6C9;B6C9;1104 116F 11B8;B6C9;1104 116F 11B8; # (뛉; 뛉; 뛉; 뛉; 뛉; ) HANGUL SYLLABLE DDWEOB
+B6CA;B6CA;1104 116F 11B9;B6CA;1104 116F 11B9; # (뛊; 뛊; 뛊; 뛊; 뛊; ) HANGUL SYLLABLE DDWEOBS
+B6CB;B6CB;1104 116F 11BA;B6CB;1104 116F 11BA; # (뛋; 뛋; 뛋; 뛋; 뛋; ) HANGUL SYLLABLE DDWEOS
+B6CC;B6CC;1104 116F 11BB;B6CC;1104 116F 11BB; # (뛌; 뛌; 뛌; 뛌; 뛌; ) HANGUL SYLLABLE DDWEOSS
+B6CD;B6CD;1104 116F 11BC;B6CD;1104 116F 11BC; # (뛍; 뛍; 뛍; 뛍; 뛍; ) HANGUL SYLLABLE DDWEONG
+B6CE;B6CE;1104 116F 11BD;B6CE;1104 116F 11BD; # (뛎; 뛎; 뛎; 뛎; 뛎; ) HANGUL SYLLABLE DDWEOJ
+B6CF;B6CF;1104 116F 11BE;B6CF;1104 116F 11BE; # (뛏; 뛏; 뛏; 뛏; 뛏; ) HANGUL SYLLABLE DDWEOC
+B6D0;B6D0;1104 116F 11BF;B6D0;1104 116F 11BF; # (뛐; 뛐; 뛐; 뛐; 뛐; ) HANGUL SYLLABLE DDWEOK
+B6D1;B6D1;1104 116F 11C0;B6D1;1104 116F 11C0; # (뛑; 뛑; 뛑; 뛑; 뛑; ) HANGUL SYLLABLE DDWEOT
+B6D2;B6D2;1104 116F 11C1;B6D2;1104 116F 11C1; # (뛒; 뛒; 뛒; 뛒; 뛒; ) HANGUL SYLLABLE DDWEOP
+B6D3;B6D3;1104 116F 11C2;B6D3;1104 116F 11C2; # (뛓; 뛓; 뛓; 뛓; 뛓; ) HANGUL SYLLABLE DDWEOH
+B6D4;B6D4;1104 1170;B6D4;1104 1170; # (뛔; 뛔; 뛔; 뛔; 뛔; ) HANGUL SYLLABLE DDWE
+B6D5;B6D5;1104 1170 11A8;B6D5;1104 1170 11A8; # (뛕; 뛕; 뛕; 뛕; 뛕; ) HANGUL SYLLABLE DDWEG
+B6D6;B6D6;1104 1170 11A9;B6D6;1104 1170 11A9; # (뛖; 뛖; 뛖; 뛖; 뛖; ) HANGUL SYLLABLE DDWEGG
+B6D7;B6D7;1104 1170 11AA;B6D7;1104 1170 11AA; # (뛗; 뛗; 뛗; 뛗; 뛗; ) HANGUL SYLLABLE DDWEGS
+B6D8;B6D8;1104 1170 11AB;B6D8;1104 1170 11AB; # (뛘; 뛘; 뛘; 뛘; 뛘; ) HANGUL SYLLABLE DDWEN
+B6D9;B6D9;1104 1170 11AC;B6D9;1104 1170 11AC; # (뛙; 뛙; 뛙; 뛙; 뛙; ) HANGUL SYLLABLE DDWENJ
+B6DA;B6DA;1104 1170 11AD;B6DA;1104 1170 11AD; # (뛚; 뛚; 뛚; 뛚; 뛚; ) HANGUL SYLLABLE DDWENH
+B6DB;B6DB;1104 1170 11AE;B6DB;1104 1170 11AE; # (뛛; 뛛; 뛛; 뛛; 뛛; ) HANGUL SYLLABLE DDWED
+B6DC;B6DC;1104 1170 11AF;B6DC;1104 1170 11AF; # (뛜; 뛜; 뛜; 뛜; 뛜; ) HANGUL SYLLABLE DDWEL
+B6DD;B6DD;1104 1170 11B0;B6DD;1104 1170 11B0; # (뛝; 뛝; 뛝; 뛝; 뛝; ) HANGUL SYLLABLE DDWELG
+B6DE;B6DE;1104 1170 11B1;B6DE;1104 1170 11B1; # (뛞; 뛞; 뛞; 뛞; 뛞; ) HANGUL SYLLABLE DDWELM
+B6DF;B6DF;1104 1170 11B2;B6DF;1104 1170 11B2; # (뛟; 뛟; 뛟; 뛟; 뛟; ) HANGUL SYLLABLE DDWELB
+B6E0;B6E0;1104 1170 11B3;B6E0;1104 1170 11B3; # (뛠; 뛠; 뛠; 뛠; 뛠; ) HANGUL SYLLABLE DDWELS
+B6E1;B6E1;1104 1170 11B4;B6E1;1104 1170 11B4; # (뛡; 뛡; 뛡; 뛡; 뛡; ) HANGUL SYLLABLE DDWELT
+B6E2;B6E2;1104 1170 11B5;B6E2;1104 1170 11B5; # (뛢; 뛢; 뛢; 뛢; 뛢; ) HANGUL SYLLABLE DDWELP
+B6E3;B6E3;1104 1170 11B6;B6E3;1104 1170 11B6; # (뛣; 뛣; 뛣; 뛣; 뛣; ) HANGUL SYLLABLE DDWELH
+B6E4;B6E4;1104 1170 11B7;B6E4;1104 1170 11B7; # (뛤; 뛤; 뛤; 뛤; 뛤; ) HANGUL SYLLABLE DDWEM
+B6E5;B6E5;1104 1170 11B8;B6E5;1104 1170 11B8; # (뛥; 뛥; 뛥; 뛥; 뛥; ) HANGUL SYLLABLE DDWEB
+B6E6;B6E6;1104 1170 11B9;B6E6;1104 1170 11B9; # (뛦; 뛦; 뛦; 뛦; 뛦; ) HANGUL SYLLABLE DDWEBS
+B6E7;B6E7;1104 1170 11BA;B6E7;1104 1170 11BA; # (뛧; 뛧; 뛧; 뛧; 뛧; ) HANGUL SYLLABLE DDWES
+B6E8;B6E8;1104 1170 11BB;B6E8;1104 1170 11BB; # (뛨; 뛨; 뛨; 뛨; 뛨; ) HANGUL SYLLABLE DDWESS
+B6E9;B6E9;1104 1170 11BC;B6E9;1104 1170 11BC; # (뛩; 뛩; 뛩; 뛩; 뛩; ) HANGUL SYLLABLE DDWENG
+B6EA;B6EA;1104 1170 11BD;B6EA;1104 1170 11BD; # (뛪; 뛪; 뛪; 뛪; 뛪; ) HANGUL SYLLABLE DDWEJ
+B6EB;B6EB;1104 1170 11BE;B6EB;1104 1170 11BE; # (뛫; 뛫; 뛫; 뛫; 뛫; ) HANGUL SYLLABLE DDWEC
+B6EC;B6EC;1104 1170 11BF;B6EC;1104 1170 11BF; # (뛬; 뛬; 뛬; 뛬; 뛬; ) HANGUL SYLLABLE DDWEK
+B6ED;B6ED;1104 1170 11C0;B6ED;1104 1170 11C0; # (뛭; 뛭; 뛭; 뛭; 뛭; ) HANGUL SYLLABLE DDWET
+B6EE;B6EE;1104 1170 11C1;B6EE;1104 1170 11C1; # (뛮; 뛮; 뛮; 뛮; 뛮; ) HANGUL SYLLABLE DDWEP
+B6EF;B6EF;1104 1170 11C2;B6EF;1104 1170 11C2; # (뛯; 뛯; 뛯; 뛯; 뛯; ) HANGUL SYLLABLE DDWEH
+B6F0;B6F0;1104 1171;B6F0;1104 1171; # (뛰; 뛰; 뛰; 뛰; 뛰; ) HANGUL SYLLABLE DDWI
+B6F1;B6F1;1104 1171 11A8;B6F1;1104 1171 11A8; # (뛱; 뛱; 뛱; 뛱; 뛱; ) HANGUL SYLLABLE DDWIG
+B6F2;B6F2;1104 1171 11A9;B6F2;1104 1171 11A9; # (뛲; 뛲; 뛲; 뛲; 뛲; ) HANGUL SYLLABLE DDWIGG
+B6F3;B6F3;1104 1171 11AA;B6F3;1104 1171 11AA; # (뛳; 뛳; 뛳; 뛳; 뛳; ) HANGUL SYLLABLE DDWIGS
+B6F4;B6F4;1104 1171 11AB;B6F4;1104 1171 11AB; # (뛴; 뛴; 뛴; 뛴; 뛴; ) HANGUL SYLLABLE DDWIN
+B6F5;B6F5;1104 1171 11AC;B6F5;1104 1171 11AC; # (뛵; 뛵; 뛵; 뛵; 뛵; ) HANGUL SYLLABLE DDWINJ
+B6F6;B6F6;1104 1171 11AD;B6F6;1104 1171 11AD; # (뛶; 뛶; 뛶; 뛶; 뛶; ) HANGUL SYLLABLE DDWINH
+B6F7;B6F7;1104 1171 11AE;B6F7;1104 1171 11AE; # (뛷; 뛷; 뛷; 뛷; 뛷; ) HANGUL SYLLABLE DDWID
+B6F8;B6F8;1104 1171 11AF;B6F8;1104 1171 11AF; # (뛸; 뛸; 뛸; 뛸; 뛸; ) HANGUL SYLLABLE DDWIL
+B6F9;B6F9;1104 1171 11B0;B6F9;1104 1171 11B0; # (뛹; 뛹; 뛹; 뛹; 뛹; ) HANGUL SYLLABLE DDWILG
+B6FA;B6FA;1104 1171 11B1;B6FA;1104 1171 11B1; # (뛺; 뛺; 뛺; 뛺; 뛺; ) HANGUL SYLLABLE DDWILM
+B6FB;B6FB;1104 1171 11B2;B6FB;1104 1171 11B2; # (뛻; 뛻; 뛻; 뛻; 뛻; ) HANGUL SYLLABLE DDWILB
+B6FC;B6FC;1104 1171 11B3;B6FC;1104 1171 11B3; # (뛼; 뛼; 뛼; 뛼; 뛼; ) HANGUL SYLLABLE DDWILS
+B6FD;B6FD;1104 1171 11B4;B6FD;1104 1171 11B4; # (뛽; 뛽; 뛽; 뛽; 뛽; ) HANGUL SYLLABLE DDWILT
+B6FE;B6FE;1104 1171 11B5;B6FE;1104 1171 11B5; # (뛾; 뛾; 뛾; 뛾; 뛾; ) HANGUL SYLLABLE DDWILP
+B6FF;B6FF;1104 1171 11B6;B6FF;1104 1171 11B6; # (뛿; 뛿; 뛿; 뛿; 뛿; ) HANGUL SYLLABLE DDWILH
+B700;B700;1104 1171 11B7;B700;1104 1171 11B7; # (뜀; 뜀; 뜀; 뜀; 뜀; ) HANGUL SYLLABLE DDWIM
+B701;B701;1104 1171 11B8;B701;1104 1171 11B8; # (뜁; 뜁; 뜁; 뜁; 뜁; ) HANGUL SYLLABLE DDWIB
+B702;B702;1104 1171 11B9;B702;1104 1171 11B9; # (뜂; 뜂; 뜂; 뜂; 뜂; ) HANGUL SYLLABLE DDWIBS
+B703;B703;1104 1171 11BA;B703;1104 1171 11BA; # (뜃; 뜃; 뜃; 뜃; 뜃; ) HANGUL SYLLABLE DDWIS
+B704;B704;1104 1171 11BB;B704;1104 1171 11BB; # (뜄; 뜄; 뜄; 뜄; 뜄; ) HANGUL SYLLABLE DDWISS
+B705;B705;1104 1171 11BC;B705;1104 1171 11BC; # (뜅; 뜅; 뜅; 뜅; 뜅; ) HANGUL SYLLABLE DDWING
+B706;B706;1104 1171 11BD;B706;1104 1171 11BD; # (뜆; 뜆; 뜆; 뜆; 뜆; ) HANGUL SYLLABLE DDWIJ
+B707;B707;1104 1171 11BE;B707;1104 1171 11BE; # (뜇; 뜇; 뜇; 뜇; 뜇; ) HANGUL SYLLABLE DDWIC
+B708;B708;1104 1171 11BF;B708;1104 1171 11BF; # (뜈; 뜈; 뜈; 뜈; 뜈; ) HANGUL SYLLABLE DDWIK
+B709;B709;1104 1171 11C0;B709;1104 1171 11C0; # (뜉; 뜉; 뜉; 뜉; 뜉; ) HANGUL SYLLABLE DDWIT
+B70A;B70A;1104 1171 11C1;B70A;1104 1171 11C1; # (뜊; 뜊; 뜊; 뜊; 뜊; ) HANGUL SYLLABLE DDWIP
+B70B;B70B;1104 1171 11C2;B70B;1104 1171 11C2; # (뜋; 뜋; 뜋; 뜋; 뜋; ) HANGUL SYLLABLE DDWIH
+B70C;B70C;1104 1172;B70C;1104 1172; # (뜌; 뜌; 뜌; 뜌; 뜌; ) HANGUL SYLLABLE DDYU
+B70D;B70D;1104 1172 11A8;B70D;1104 1172 11A8; # (뜍; 뜍; 뜍; 뜍; 뜍; ) HANGUL SYLLABLE DDYUG
+B70E;B70E;1104 1172 11A9;B70E;1104 1172 11A9; # (뜎; 뜎; 뜎; 뜎; 뜎; ) HANGUL SYLLABLE DDYUGG
+B70F;B70F;1104 1172 11AA;B70F;1104 1172 11AA; # (뜏; 뜏; 뜏; 뜏; 뜏; ) HANGUL SYLLABLE DDYUGS
+B710;B710;1104 1172 11AB;B710;1104 1172 11AB; # (뜐; 뜐; 뜐; 뜐; 뜐; ) HANGUL SYLLABLE DDYUN
+B711;B711;1104 1172 11AC;B711;1104 1172 11AC; # (뜑; 뜑; 뜑; 뜑; 뜑; ) HANGUL SYLLABLE DDYUNJ
+B712;B712;1104 1172 11AD;B712;1104 1172 11AD; # (뜒; 뜒; 뜒; 뜒; 뜒; ) HANGUL SYLLABLE DDYUNH
+B713;B713;1104 1172 11AE;B713;1104 1172 11AE; # (뜓; 뜓; 뜓; 뜓; 뜓; ) HANGUL SYLLABLE DDYUD
+B714;B714;1104 1172 11AF;B714;1104 1172 11AF; # (뜔; 뜔; 뜔; 뜔; 뜔; ) HANGUL SYLLABLE DDYUL
+B715;B715;1104 1172 11B0;B715;1104 1172 11B0; # (뜕; 뜕; 뜕; 뜕; 뜕; ) HANGUL SYLLABLE DDYULG
+B716;B716;1104 1172 11B1;B716;1104 1172 11B1; # (뜖; 뜖; 뜖; 뜖; 뜖; ) HANGUL SYLLABLE DDYULM
+B717;B717;1104 1172 11B2;B717;1104 1172 11B2; # (뜗; 뜗; 뜗; 뜗; 뜗; ) HANGUL SYLLABLE DDYULB
+B718;B718;1104 1172 11B3;B718;1104 1172 11B3; # (뜘; 뜘; 뜘; 뜘; 뜘; ) HANGUL SYLLABLE DDYULS
+B719;B719;1104 1172 11B4;B719;1104 1172 11B4; # (뜙; 뜙; 뜙; 뜙; 뜙; ) HANGUL SYLLABLE DDYULT
+B71A;B71A;1104 1172 11B5;B71A;1104 1172 11B5; # (뜚; 뜚; 뜚; 뜚; 뜚; ) HANGUL SYLLABLE DDYULP
+B71B;B71B;1104 1172 11B6;B71B;1104 1172 11B6; # (뜛; 뜛; 뜛; 뜛; 뜛; ) HANGUL SYLLABLE DDYULH
+B71C;B71C;1104 1172 11B7;B71C;1104 1172 11B7; # (뜜; 뜜; 뜜; 뜜; 뜜; ) HANGUL SYLLABLE DDYUM
+B71D;B71D;1104 1172 11B8;B71D;1104 1172 11B8; # (뜝; 뜝; 뜝; 뜝; 뜝; ) HANGUL SYLLABLE DDYUB
+B71E;B71E;1104 1172 11B9;B71E;1104 1172 11B9; # (뜞; 뜞; 뜞; 뜞; 뜞; ) HANGUL SYLLABLE DDYUBS
+B71F;B71F;1104 1172 11BA;B71F;1104 1172 11BA; # (뜟; 뜟; 뜟; 뜟; 뜟; ) HANGUL SYLLABLE DDYUS
+B720;B720;1104 1172 11BB;B720;1104 1172 11BB; # (뜠; 뜠; 뜠; 뜠; 뜠; ) HANGUL SYLLABLE DDYUSS
+B721;B721;1104 1172 11BC;B721;1104 1172 11BC; # (뜡; 뜡; 뜡; 뜡; 뜡; ) HANGUL SYLLABLE DDYUNG
+B722;B722;1104 1172 11BD;B722;1104 1172 11BD; # (뜢; 뜢; 뜢; 뜢; 뜢; ) HANGUL SYLLABLE DDYUJ
+B723;B723;1104 1172 11BE;B723;1104 1172 11BE; # (뜣; 뜣; 뜣; 뜣; 뜣; ) HANGUL SYLLABLE DDYUC
+B724;B724;1104 1172 11BF;B724;1104 1172 11BF; # (뜤; 뜤; 뜤; 뜤; 뜤; ) HANGUL SYLLABLE DDYUK
+B725;B725;1104 1172 11C0;B725;1104 1172 11C0; # (뜥; 뜥; 뜥; 뜥; 뜥; ) HANGUL SYLLABLE DDYUT
+B726;B726;1104 1172 11C1;B726;1104 1172 11C1; # (뜦; 뜦; 뜦; 뜦; 뜦; ) HANGUL SYLLABLE DDYUP
+B727;B727;1104 1172 11C2;B727;1104 1172 11C2; # (뜧; 뜧; 뜧; 뜧; 뜧; ) HANGUL SYLLABLE DDYUH
+B728;B728;1104 1173;B728;1104 1173; # (뜨; 뜨; 뜨; 뜨; 뜨; ) HANGUL SYLLABLE DDEU
+B729;B729;1104 1173 11A8;B729;1104 1173 11A8; # (뜩; 뜩; 뜩; 뜩; 뜩; ) HANGUL SYLLABLE DDEUG
+B72A;B72A;1104 1173 11A9;B72A;1104 1173 11A9; # (뜪; 뜪; 뜪; 뜪; 뜪; ) HANGUL SYLLABLE DDEUGG
+B72B;B72B;1104 1173 11AA;B72B;1104 1173 11AA; # (뜫; 뜫; 뜫; 뜫; 뜫; ) HANGUL SYLLABLE DDEUGS
+B72C;B72C;1104 1173 11AB;B72C;1104 1173 11AB; # (뜬; 뜬; 뜬; 뜬; 뜬; ) HANGUL SYLLABLE DDEUN
+B72D;B72D;1104 1173 11AC;B72D;1104 1173 11AC; # (뜭; 뜭; 뜭; 뜭; 뜭; ) HANGUL SYLLABLE DDEUNJ
+B72E;B72E;1104 1173 11AD;B72E;1104 1173 11AD; # (뜮; 뜮; 뜮; 뜮; 뜮; ) HANGUL SYLLABLE DDEUNH
+B72F;B72F;1104 1173 11AE;B72F;1104 1173 11AE; # (뜯; 뜯; 뜯; 뜯; 뜯; ) HANGUL SYLLABLE DDEUD
+B730;B730;1104 1173 11AF;B730;1104 1173 11AF; # (뜰; 뜰; 뜰; 뜰; 뜰; ) HANGUL SYLLABLE DDEUL
+B731;B731;1104 1173 11B0;B731;1104 1173 11B0; # (뜱; 뜱; 뜱; 뜱; 뜱; ) HANGUL SYLLABLE DDEULG
+B732;B732;1104 1173 11B1;B732;1104 1173 11B1; # (뜲; 뜲; 뜲; 뜲; 뜲; ) HANGUL SYLLABLE DDEULM
+B733;B733;1104 1173 11B2;B733;1104 1173 11B2; # (뜳; 뜳; 뜳; 뜳; 뜳; ) HANGUL SYLLABLE DDEULB
+B734;B734;1104 1173 11B3;B734;1104 1173 11B3; # (뜴; 뜴; 뜴; 뜴; 뜴; ) HANGUL SYLLABLE DDEULS
+B735;B735;1104 1173 11B4;B735;1104 1173 11B4; # (뜵; 뜵; 뜵; 뜵; 뜵; ) HANGUL SYLLABLE DDEULT
+B736;B736;1104 1173 11B5;B736;1104 1173 11B5; # (뜶; 뜶; 뜶; 뜶; 뜶; ) HANGUL SYLLABLE DDEULP
+B737;B737;1104 1173 11B6;B737;1104 1173 11B6; # (뜷; 뜷; 뜷; 뜷; 뜷; ) HANGUL SYLLABLE DDEULH
+B738;B738;1104 1173 11B7;B738;1104 1173 11B7; # (뜸; 뜸; 뜸; 뜸; 뜸; ) HANGUL SYLLABLE DDEUM
+B739;B739;1104 1173 11B8;B739;1104 1173 11B8; # (뜹; 뜹; 뜹; 뜹; 뜹; ) HANGUL SYLLABLE DDEUB
+B73A;B73A;1104 1173 11B9;B73A;1104 1173 11B9; # (뜺; 뜺; 뜺; 뜺; 뜺; ) HANGUL SYLLABLE DDEUBS
+B73B;B73B;1104 1173 11BA;B73B;1104 1173 11BA; # (뜻; 뜻; 뜻; 뜻; 뜻; ) HANGUL SYLLABLE DDEUS
+B73C;B73C;1104 1173 11BB;B73C;1104 1173 11BB; # (뜼; 뜼; 뜼; 뜼; 뜼; ) HANGUL SYLLABLE DDEUSS
+B73D;B73D;1104 1173 11BC;B73D;1104 1173 11BC; # (뜽; 뜽; 뜽; 뜽; 뜽; ) HANGUL SYLLABLE DDEUNG
+B73E;B73E;1104 1173 11BD;B73E;1104 1173 11BD; # (뜾; 뜾; 뜾; 뜾; 뜾; ) HANGUL SYLLABLE DDEUJ
+B73F;B73F;1104 1173 11BE;B73F;1104 1173 11BE; # (뜿; 뜿; 뜿; 뜿; 뜿; ) HANGUL SYLLABLE DDEUC
+B740;B740;1104 1173 11BF;B740;1104 1173 11BF; # (띀; 띀; 띀; 띀; 띀; ) HANGUL SYLLABLE DDEUK
+B741;B741;1104 1173 11C0;B741;1104 1173 11C0; # (띁; 띁; 띁; 띁; 띁; ) HANGUL SYLLABLE DDEUT
+B742;B742;1104 1173 11C1;B742;1104 1173 11C1; # (띂; 띂; 띂; 띂; 띂; ) HANGUL SYLLABLE DDEUP
+B743;B743;1104 1173 11C2;B743;1104 1173 11C2; # (띃; 띃; 띃; 띃; 띃; ) HANGUL SYLLABLE DDEUH
+B744;B744;1104 1174;B744;1104 1174; # (띄; 띄; 띄; 띄; 띄; ) HANGUL SYLLABLE DDYI
+B745;B745;1104 1174 11A8;B745;1104 1174 11A8; # (띅; 띅; 띅; 띅; 띅; ) HANGUL SYLLABLE DDYIG
+B746;B746;1104 1174 11A9;B746;1104 1174 11A9; # (띆; 띆; 띆; 띆; 띆; ) HANGUL SYLLABLE DDYIGG
+B747;B747;1104 1174 11AA;B747;1104 1174 11AA; # (띇; 띇; 띇; 띇; 띇; ) HANGUL SYLLABLE DDYIGS
+B748;B748;1104 1174 11AB;B748;1104 1174 11AB; # (띈; 띈; 띈; 띈; 띈; ) HANGUL SYLLABLE DDYIN
+B749;B749;1104 1174 11AC;B749;1104 1174 11AC; # (띉; 띉; 띉; 띉; 띉; ) HANGUL SYLLABLE DDYINJ
+B74A;B74A;1104 1174 11AD;B74A;1104 1174 11AD; # (띊; 띊; 띊; 띊; 띊; ) HANGUL SYLLABLE DDYINH
+B74B;B74B;1104 1174 11AE;B74B;1104 1174 11AE; # (띋; 띋; 띋; 띋; 띋; ) HANGUL SYLLABLE DDYID
+B74C;B74C;1104 1174 11AF;B74C;1104 1174 11AF; # (띌; 띌; 띌; 띌; 띌; ) HANGUL SYLLABLE DDYIL
+B74D;B74D;1104 1174 11B0;B74D;1104 1174 11B0; # (띍; 띍; 띍; 띍; 띍; ) HANGUL SYLLABLE DDYILG
+B74E;B74E;1104 1174 11B1;B74E;1104 1174 11B1; # (띎; 띎; 띎; 띎; 띎; ) HANGUL SYLLABLE DDYILM
+B74F;B74F;1104 1174 11B2;B74F;1104 1174 11B2; # (띏; 띏; 띏; 띏; 띏; ) HANGUL SYLLABLE DDYILB
+B750;B750;1104 1174 11B3;B750;1104 1174 11B3; # (띐; 띐; 띐; 띐; 띐; ) HANGUL SYLLABLE DDYILS
+B751;B751;1104 1174 11B4;B751;1104 1174 11B4; # (띑; 띑; 띑; 띑; 띑; ) HANGUL SYLLABLE DDYILT
+B752;B752;1104 1174 11B5;B752;1104 1174 11B5; # (띒; 띒; 띒; 띒; 띒; ) HANGUL SYLLABLE DDYILP
+B753;B753;1104 1174 11B6;B753;1104 1174 11B6; # (띓; 띓; 띓; 띓; 띓; ) HANGUL SYLLABLE DDYILH
+B754;B754;1104 1174 11B7;B754;1104 1174 11B7; # (띔; 띔; 띔; 띔; 띔; ) HANGUL SYLLABLE DDYIM
+B755;B755;1104 1174 11B8;B755;1104 1174 11B8; # (띕; 띕; 띕; 띕; 띕; ) HANGUL SYLLABLE DDYIB
+B756;B756;1104 1174 11B9;B756;1104 1174 11B9; # (띖; 띖; 띖; 띖; 띖; ) HANGUL SYLLABLE DDYIBS
+B757;B757;1104 1174 11BA;B757;1104 1174 11BA; # (띗; 띗; 띗; 띗; 띗; ) HANGUL SYLLABLE DDYIS
+B758;B758;1104 1174 11BB;B758;1104 1174 11BB; # (띘; 띘; 띘; 띘; 띘; ) HANGUL SYLLABLE DDYISS
+B759;B759;1104 1174 11BC;B759;1104 1174 11BC; # (띙; 띙; 띙; 띙; 띙; ) HANGUL SYLLABLE DDYING
+B75A;B75A;1104 1174 11BD;B75A;1104 1174 11BD; # (띚; 띚; 띚; 띚; 띚; ) HANGUL SYLLABLE DDYIJ
+B75B;B75B;1104 1174 11BE;B75B;1104 1174 11BE; # (띛; 띛; 띛; 띛; 띛; ) HANGUL SYLLABLE DDYIC
+B75C;B75C;1104 1174 11BF;B75C;1104 1174 11BF; # (띜; 띜; 띜; 띜; 띜; ) HANGUL SYLLABLE DDYIK
+B75D;B75D;1104 1174 11C0;B75D;1104 1174 11C0; # (띝; 띝; 띝; 띝; 띝; ) HANGUL SYLLABLE DDYIT
+B75E;B75E;1104 1174 11C1;B75E;1104 1174 11C1; # (띞; 띞; 띞; 띞; 띞; ) HANGUL SYLLABLE DDYIP
+B75F;B75F;1104 1174 11C2;B75F;1104 1174 11C2; # (띟; 띟; 띟; 띟; 띟; ) HANGUL SYLLABLE DDYIH
+B760;B760;1104 1175;B760;1104 1175; # (띠; 띠; 띠; 띠; 띠; ) HANGUL SYLLABLE DDI
+B761;B761;1104 1175 11A8;B761;1104 1175 11A8; # (띡; 띡; 띡; 띡; 띡; ) HANGUL SYLLABLE DDIG
+B762;B762;1104 1175 11A9;B762;1104 1175 11A9; # (띢; 띢; 띢; 띢; 띢; ) HANGUL SYLLABLE DDIGG
+B763;B763;1104 1175 11AA;B763;1104 1175 11AA; # (띣; 띣; 띣; 띣; 띣; ) HANGUL SYLLABLE DDIGS
+B764;B764;1104 1175 11AB;B764;1104 1175 11AB; # (띤; 띤; 띤; 띤; 띤; ) HANGUL SYLLABLE DDIN
+B765;B765;1104 1175 11AC;B765;1104 1175 11AC; # (띥; 띥; 띥; 띥; 띥; ) HANGUL SYLLABLE DDINJ
+B766;B766;1104 1175 11AD;B766;1104 1175 11AD; # (띦; 띦; 띦; 띦; 띦; ) HANGUL SYLLABLE DDINH
+B767;B767;1104 1175 11AE;B767;1104 1175 11AE; # (띧; 띧; 띧; 띧; 띧; ) HANGUL SYLLABLE DDID
+B768;B768;1104 1175 11AF;B768;1104 1175 11AF; # (띨; 띨; 띨; 띨; 띨; ) HANGUL SYLLABLE DDIL
+B769;B769;1104 1175 11B0;B769;1104 1175 11B0; # (띩; 띩; 띩; 띩; 띩; ) HANGUL SYLLABLE DDILG
+B76A;B76A;1104 1175 11B1;B76A;1104 1175 11B1; # (띪; 띪; 띪; 띪; 띪; ) HANGUL SYLLABLE DDILM
+B76B;B76B;1104 1175 11B2;B76B;1104 1175 11B2; # (띫; 띫; 띫; 띫; 띫; ) HANGUL SYLLABLE DDILB
+B76C;B76C;1104 1175 11B3;B76C;1104 1175 11B3; # (띬; 띬; 띬; 띬; 띬; ) HANGUL SYLLABLE DDILS
+B76D;B76D;1104 1175 11B4;B76D;1104 1175 11B4; # (띭; 띭; 띭; 띭; 띭; ) HANGUL SYLLABLE DDILT
+B76E;B76E;1104 1175 11B5;B76E;1104 1175 11B5; # (띮; 띮; 띮; 띮; 띮; ) HANGUL SYLLABLE DDILP
+B76F;B76F;1104 1175 11B6;B76F;1104 1175 11B6; # (띯; 띯; 띯; 띯; 띯; ) HANGUL SYLLABLE DDILH
+B770;B770;1104 1175 11B7;B770;1104 1175 11B7; # (띰; 띰; 띰; 띰; 띰; ) HANGUL SYLLABLE DDIM
+B771;B771;1104 1175 11B8;B771;1104 1175 11B8; # (띱; 띱; 띱; 띱; 띱; ) HANGUL SYLLABLE DDIB
+B772;B772;1104 1175 11B9;B772;1104 1175 11B9; # (띲; 띲; 띲; 띲; 띲; ) HANGUL SYLLABLE DDIBS
+B773;B773;1104 1175 11BA;B773;1104 1175 11BA; # (띳; 띳; 띳; 띳; 띳; ) HANGUL SYLLABLE DDIS
+B774;B774;1104 1175 11BB;B774;1104 1175 11BB; # (띴; 띴; 띴; 띴; 띴; ) HANGUL SYLLABLE DDISS
+B775;B775;1104 1175 11BC;B775;1104 1175 11BC; # (띵; 띵; 띵; 띵; 띵; ) HANGUL SYLLABLE DDING
+B776;B776;1104 1175 11BD;B776;1104 1175 11BD; # (띶; 띶; 띶; 띶; 띶; ) HANGUL SYLLABLE DDIJ
+B777;B777;1104 1175 11BE;B777;1104 1175 11BE; # (띷; 띷; 띷; 띷; 띷; ) HANGUL SYLLABLE DDIC
+B778;B778;1104 1175 11BF;B778;1104 1175 11BF; # (띸; 띸; 띸; 띸; 띸; ) HANGUL SYLLABLE DDIK
+B779;B779;1104 1175 11C0;B779;1104 1175 11C0; # (띹; 띹; 띹; 띹; 띹; ) HANGUL SYLLABLE DDIT
+B77A;B77A;1104 1175 11C1;B77A;1104 1175 11C1; # (띺; 띺; 띺; 띺; 띺; ) HANGUL SYLLABLE DDIP
+B77B;B77B;1104 1175 11C2;B77B;1104 1175 11C2; # (띻; 띻; 띻; 띻; 띻; ) HANGUL SYLLABLE DDIH
+B77C;B77C;1105 1161;B77C;1105 1161; # (라; 라; 라; 라; 라; ) HANGUL SYLLABLE RA
+B77D;B77D;1105 1161 11A8;B77D;1105 1161 11A8; # (락; 락; 락; 락; 락; ) HANGUL SYLLABLE RAG
+B77E;B77E;1105 1161 11A9;B77E;1105 1161 11A9; # (띾; 띾; 띾; 띾; 띾; ) HANGUL SYLLABLE RAGG
+B77F;B77F;1105 1161 11AA;B77F;1105 1161 11AA; # (띿; 띿; 띿; 띿; 띿; ) HANGUL SYLLABLE RAGS
+B780;B780;1105 1161 11AB;B780;1105 1161 11AB; # (란; 란; 란; 란; 란; ) HANGUL SYLLABLE RAN
+B781;B781;1105 1161 11AC;B781;1105 1161 11AC; # (랁; 랁; 랁; 랁; 랁; ) HANGUL SYLLABLE RANJ
+B782;B782;1105 1161 11AD;B782;1105 1161 11AD; # (랂; 랂; 랂; 랂; 랂; ) HANGUL SYLLABLE RANH
+B783;B783;1105 1161 11AE;B783;1105 1161 11AE; # (랃; 랃; 랃; 랃; 랃; ) HANGUL SYLLABLE RAD
+B784;B784;1105 1161 11AF;B784;1105 1161 11AF; # (랄; 랄; 랄; 랄; 랄; ) HANGUL SYLLABLE RAL
+B785;B785;1105 1161 11B0;B785;1105 1161 11B0; # (랅; 랅; 랅; 랅; 랅; ) HANGUL SYLLABLE RALG
+B786;B786;1105 1161 11B1;B786;1105 1161 11B1; # (랆; 랆; 랆; 랆; 랆; ) HANGUL SYLLABLE RALM
+B787;B787;1105 1161 11B2;B787;1105 1161 11B2; # (랇; 랇; 랇; 랇; 랇; ) HANGUL SYLLABLE RALB
+B788;B788;1105 1161 11B3;B788;1105 1161 11B3; # (랈; 랈; 랈; 랈; 랈; ) HANGUL SYLLABLE RALS
+B789;B789;1105 1161 11B4;B789;1105 1161 11B4; # (랉; 랉; 랉; 랉; 랉; ) HANGUL SYLLABLE RALT
+B78A;B78A;1105 1161 11B5;B78A;1105 1161 11B5; # (랊; 랊; 랊; 랊; 랊; ) HANGUL SYLLABLE RALP
+B78B;B78B;1105 1161 11B6;B78B;1105 1161 11B6; # (랋; 랋; 랋; 랋; 랋; ) HANGUL SYLLABLE RALH
+B78C;B78C;1105 1161 11B7;B78C;1105 1161 11B7; # (람; 람; 람; 람; 람; ) HANGUL SYLLABLE RAM
+B78D;B78D;1105 1161 11B8;B78D;1105 1161 11B8; # (랍; 랍; 랍; 랍; 랍; ) HANGUL SYLLABLE RAB
+B78E;B78E;1105 1161 11B9;B78E;1105 1161 11B9; # (랎; 랎; 랎; 랎; 랎; ) HANGUL SYLLABLE RABS
+B78F;B78F;1105 1161 11BA;B78F;1105 1161 11BA; # (랏; 랏; 랏; 랏; 랏; ) HANGUL SYLLABLE RAS
+B790;B790;1105 1161 11BB;B790;1105 1161 11BB; # (랐; 랐; 랐; 랐; 랐; ) HANGUL SYLLABLE RASS
+B791;B791;1105 1161 11BC;B791;1105 1161 11BC; # (랑; 랑; 랑; 랑; 랑; ) HANGUL SYLLABLE RANG
+B792;B792;1105 1161 11BD;B792;1105 1161 11BD; # (랒; 랒; 랒; 랒; 랒; ) HANGUL SYLLABLE RAJ
+B793;B793;1105 1161 11BE;B793;1105 1161 11BE; # (랓; 랓; 랓; 랓; 랓; ) HANGUL SYLLABLE RAC
+B794;B794;1105 1161 11BF;B794;1105 1161 11BF; # (랔; 랔; 랔; 랔; 랔; ) HANGUL SYLLABLE RAK
+B795;B795;1105 1161 11C0;B795;1105 1161 11C0; # (랕; 랕; 랕; 랕; 랕; ) HANGUL SYLLABLE RAT
+B796;B796;1105 1161 11C1;B796;1105 1161 11C1; # (랖; 랖; 랖; 랖; 랖; ) HANGUL SYLLABLE RAP
+B797;B797;1105 1161 11C2;B797;1105 1161 11C2; # (랗; 랗; 랗; 랗; 랗; ) HANGUL SYLLABLE RAH
+B798;B798;1105 1162;B798;1105 1162; # (래; 래; 래; 래; 래; ) HANGUL SYLLABLE RAE
+B799;B799;1105 1162 11A8;B799;1105 1162 11A8; # (랙; 랙; 랙; 랙; 랙; ) HANGUL SYLLABLE RAEG
+B79A;B79A;1105 1162 11A9;B79A;1105 1162 11A9; # (랚; 랚; 랚; 랚; 랚; ) HANGUL SYLLABLE RAEGG
+B79B;B79B;1105 1162 11AA;B79B;1105 1162 11AA; # (랛; 랛; 랛; 랛; 랛; ) HANGUL SYLLABLE RAEGS
+B79C;B79C;1105 1162 11AB;B79C;1105 1162 11AB; # (랜; 랜; 랜; 랜; 랜; ) HANGUL SYLLABLE RAEN
+B79D;B79D;1105 1162 11AC;B79D;1105 1162 11AC; # (랝; 랝; 랝; 랝; 랝; ) HANGUL SYLLABLE RAENJ
+B79E;B79E;1105 1162 11AD;B79E;1105 1162 11AD; # (랞; 랞; 랞; 랞; 랞; ) HANGUL SYLLABLE RAENH
+B79F;B79F;1105 1162 11AE;B79F;1105 1162 11AE; # (랟; 랟; 랟; 랟; 랟; ) HANGUL SYLLABLE RAED
+B7A0;B7A0;1105 1162 11AF;B7A0;1105 1162 11AF; # (랠; 랠; 랠; 랠; 랠; ) HANGUL SYLLABLE RAEL
+B7A1;B7A1;1105 1162 11B0;B7A1;1105 1162 11B0; # (랡; 랡; 랡; 랡; 랡; ) HANGUL SYLLABLE RAELG
+B7A2;B7A2;1105 1162 11B1;B7A2;1105 1162 11B1; # (랢; 랢; 랢; 랢; 랢; ) HANGUL SYLLABLE RAELM
+B7A3;B7A3;1105 1162 11B2;B7A3;1105 1162 11B2; # (랣; 랣; 랣; 랣; 랣; ) HANGUL SYLLABLE RAELB
+B7A4;B7A4;1105 1162 11B3;B7A4;1105 1162 11B3; # (랤; 랤; 랤; 랤; 랤; ) HANGUL SYLLABLE RAELS
+B7A5;B7A5;1105 1162 11B4;B7A5;1105 1162 11B4; # (랥; 랥; 랥; 랥; 랥; ) HANGUL SYLLABLE RAELT
+B7A6;B7A6;1105 1162 11B5;B7A6;1105 1162 11B5; # (랦; 랦; 랦; 랦; 랦; ) HANGUL SYLLABLE RAELP
+B7A7;B7A7;1105 1162 11B6;B7A7;1105 1162 11B6; # (랧; 랧; 랧; 랧; 랧; ) HANGUL SYLLABLE RAELH
+B7A8;B7A8;1105 1162 11B7;B7A8;1105 1162 11B7; # (램; 램; 램; 램; 램; ) HANGUL SYLLABLE RAEM
+B7A9;B7A9;1105 1162 11B8;B7A9;1105 1162 11B8; # (랩; 랩; 랩; 랩; 랩; ) HANGUL SYLLABLE RAEB
+B7AA;B7AA;1105 1162 11B9;B7AA;1105 1162 11B9; # (랪; 랪; 랪; 랪; 랪; ) HANGUL SYLLABLE RAEBS
+B7AB;B7AB;1105 1162 11BA;B7AB;1105 1162 11BA; # (랫; 랫; 랫; 랫; 랫; ) HANGUL SYLLABLE RAES
+B7AC;B7AC;1105 1162 11BB;B7AC;1105 1162 11BB; # (랬; 랬; 랬; 랬; 랬; ) HANGUL SYLLABLE RAESS
+B7AD;B7AD;1105 1162 11BC;B7AD;1105 1162 11BC; # (랭; 랭; 랭; 랭; 랭; ) HANGUL SYLLABLE RAENG
+B7AE;B7AE;1105 1162 11BD;B7AE;1105 1162 11BD; # (랮; 랮; 랮; 랮; 랮; ) HANGUL SYLLABLE RAEJ
+B7AF;B7AF;1105 1162 11BE;B7AF;1105 1162 11BE; # (랯; 랯; 랯; 랯; 랯; ) HANGUL SYLLABLE RAEC
+B7B0;B7B0;1105 1162 11BF;B7B0;1105 1162 11BF; # (랰; 랰; 랰; 랰; 랰; ) HANGUL SYLLABLE RAEK
+B7B1;B7B1;1105 1162 11C0;B7B1;1105 1162 11C0; # (랱; 랱; 랱; 랱; 랱; ) HANGUL SYLLABLE RAET
+B7B2;B7B2;1105 1162 11C1;B7B2;1105 1162 11C1; # (랲; 랲; 랲; 랲; 랲; ) HANGUL SYLLABLE RAEP
+B7B3;B7B3;1105 1162 11C2;B7B3;1105 1162 11C2; # (랳; 랳; 랳; 랳; 랳; ) HANGUL SYLLABLE RAEH
+B7B4;B7B4;1105 1163;B7B4;1105 1163; # (랴; 랴; 랴; 랴; 랴; ) HANGUL SYLLABLE RYA
+B7B5;B7B5;1105 1163 11A8;B7B5;1105 1163 11A8; # (략; 략; 략; 략; 략; ) HANGUL SYLLABLE RYAG
+B7B6;B7B6;1105 1163 11A9;B7B6;1105 1163 11A9; # (랶; 랶; 랶; 랶; 랶; ) HANGUL SYLLABLE RYAGG
+B7B7;B7B7;1105 1163 11AA;B7B7;1105 1163 11AA; # (랷; 랷; 랷; 랷; 랷; ) HANGUL SYLLABLE RYAGS
+B7B8;B7B8;1105 1163 11AB;B7B8;1105 1163 11AB; # (랸; 랸; 랸; 랸; 랸; ) HANGUL SYLLABLE RYAN
+B7B9;B7B9;1105 1163 11AC;B7B9;1105 1163 11AC; # (랹; 랹; 랹; 랹; 랹; ) HANGUL SYLLABLE RYANJ
+B7BA;B7BA;1105 1163 11AD;B7BA;1105 1163 11AD; # (랺; 랺; 랺; 랺; 랺; ) HANGUL SYLLABLE RYANH
+B7BB;B7BB;1105 1163 11AE;B7BB;1105 1163 11AE; # (랻; 랻; 랻; 랻; 랻; ) HANGUL SYLLABLE RYAD
+B7BC;B7BC;1105 1163 11AF;B7BC;1105 1163 11AF; # (랼; 랼; 랼; 랼; 랼; ) HANGUL SYLLABLE RYAL
+B7BD;B7BD;1105 1163 11B0;B7BD;1105 1163 11B0; # (랽; 랽; 랽; 랽; 랽; ) HANGUL SYLLABLE RYALG
+B7BE;B7BE;1105 1163 11B1;B7BE;1105 1163 11B1; # (랾; 랾; 랾; 랾; 랾; ) HANGUL SYLLABLE RYALM
+B7BF;B7BF;1105 1163 11B2;B7BF;1105 1163 11B2; # (랿; 랿; 랿; 랿; 랿; ) HANGUL SYLLABLE RYALB
+B7C0;B7C0;1105 1163 11B3;B7C0;1105 1163 11B3; # (럀; 럀; 럀; 럀; 럀; ) HANGUL SYLLABLE RYALS
+B7C1;B7C1;1105 1163 11B4;B7C1;1105 1163 11B4; # (럁; 럁; 럁; 럁; 럁; ) HANGUL SYLLABLE RYALT
+B7C2;B7C2;1105 1163 11B5;B7C2;1105 1163 11B5; # (럂; 럂; 럂; 럂; 럂; ) HANGUL SYLLABLE RYALP
+B7C3;B7C3;1105 1163 11B6;B7C3;1105 1163 11B6; # (럃; 럃; 럃; 럃; 럃; ) HANGUL SYLLABLE RYALH
+B7C4;B7C4;1105 1163 11B7;B7C4;1105 1163 11B7; # (럄; 럄; 럄; 럄; 럄; ) HANGUL SYLLABLE RYAM
+B7C5;B7C5;1105 1163 11B8;B7C5;1105 1163 11B8; # (럅; 럅; 럅; 럅; 럅; ) HANGUL SYLLABLE RYAB
+B7C6;B7C6;1105 1163 11B9;B7C6;1105 1163 11B9; # (럆; 럆; 럆; 럆; 럆; ) HANGUL SYLLABLE RYABS
+B7C7;B7C7;1105 1163 11BA;B7C7;1105 1163 11BA; # (럇; 럇; 럇; 럇; 럇; ) HANGUL SYLLABLE RYAS
+B7C8;B7C8;1105 1163 11BB;B7C8;1105 1163 11BB; # (럈; 럈; 럈; 럈; 럈; ) HANGUL SYLLABLE RYASS
+B7C9;B7C9;1105 1163 11BC;B7C9;1105 1163 11BC; # (량; 량; 량; 량; 량; ) HANGUL SYLLABLE RYANG
+B7CA;B7CA;1105 1163 11BD;B7CA;1105 1163 11BD; # (럊; 럊; 럊; 럊; 럊; ) HANGUL SYLLABLE RYAJ
+B7CB;B7CB;1105 1163 11BE;B7CB;1105 1163 11BE; # (럋; 럋; 럋; 럋; 럋; ) HANGUL SYLLABLE RYAC
+B7CC;B7CC;1105 1163 11BF;B7CC;1105 1163 11BF; # (럌; 럌; 럌; 럌; 럌; ) HANGUL SYLLABLE RYAK
+B7CD;B7CD;1105 1163 11C0;B7CD;1105 1163 11C0; # (럍; 럍; 럍; 럍; 럍; ) HANGUL SYLLABLE RYAT
+B7CE;B7CE;1105 1163 11C1;B7CE;1105 1163 11C1; # (럎; 럎; 럎; 럎; 럎; ) HANGUL SYLLABLE RYAP
+B7CF;B7CF;1105 1163 11C2;B7CF;1105 1163 11C2; # (럏; 럏; 럏; 럏; 럏; ) HANGUL SYLLABLE RYAH
+B7D0;B7D0;1105 1164;B7D0;1105 1164; # (럐; 럐; 럐; 럐; 럐; ) HANGUL SYLLABLE RYAE
+B7D1;B7D1;1105 1164 11A8;B7D1;1105 1164 11A8; # (럑; 럑; 럑; 럑; 럑; ) HANGUL SYLLABLE RYAEG
+B7D2;B7D2;1105 1164 11A9;B7D2;1105 1164 11A9; # (럒; 럒; 럒; 럒; 럒; ) HANGUL SYLLABLE RYAEGG
+B7D3;B7D3;1105 1164 11AA;B7D3;1105 1164 11AA; # (럓; 럓; 럓; 럓; 럓; ) HANGUL SYLLABLE RYAEGS
+B7D4;B7D4;1105 1164 11AB;B7D4;1105 1164 11AB; # (럔; 럔; 럔; 럔; 럔; ) HANGUL SYLLABLE RYAEN
+B7D5;B7D5;1105 1164 11AC;B7D5;1105 1164 11AC; # (럕; 럕; 럕; 럕; 럕; ) HANGUL SYLLABLE RYAENJ
+B7D6;B7D6;1105 1164 11AD;B7D6;1105 1164 11AD; # (럖; 럖; 럖; 럖; 럖; ) HANGUL SYLLABLE RYAENH
+B7D7;B7D7;1105 1164 11AE;B7D7;1105 1164 11AE; # (럗; 럗; 럗; 럗; 럗; ) HANGUL SYLLABLE RYAED
+B7D8;B7D8;1105 1164 11AF;B7D8;1105 1164 11AF; # (럘; 럘; 럘; 럘; 럘; ) HANGUL SYLLABLE RYAEL
+B7D9;B7D9;1105 1164 11B0;B7D9;1105 1164 11B0; # (럙; 럙; 럙; 럙; 럙; ) HANGUL SYLLABLE RYAELG
+B7DA;B7DA;1105 1164 11B1;B7DA;1105 1164 11B1; # (럚; 럚; 럚; 럚; 럚; ) HANGUL SYLLABLE RYAELM
+B7DB;B7DB;1105 1164 11B2;B7DB;1105 1164 11B2; # (럛; 럛; 럛; 럛; 럛; ) HANGUL SYLLABLE RYAELB
+B7DC;B7DC;1105 1164 11B3;B7DC;1105 1164 11B3; # (럜; 럜; 럜; 럜; 럜; ) HANGUL SYLLABLE RYAELS
+B7DD;B7DD;1105 1164 11B4;B7DD;1105 1164 11B4; # (럝; 럝; 럝; 럝; 럝; ) HANGUL SYLLABLE RYAELT
+B7DE;B7DE;1105 1164 11B5;B7DE;1105 1164 11B5; # (럞; 럞; 럞; 럞; 럞; ) HANGUL SYLLABLE RYAELP
+B7DF;B7DF;1105 1164 11B6;B7DF;1105 1164 11B6; # (럟; 럟; 럟; 럟; 럟; ) HANGUL SYLLABLE RYAELH
+B7E0;B7E0;1105 1164 11B7;B7E0;1105 1164 11B7; # (럠; 럠; 럠; 럠; 럠; ) HANGUL SYLLABLE RYAEM
+B7E1;B7E1;1105 1164 11B8;B7E1;1105 1164 11B8; # (럡; 럡; 럡; 럡; 럡; ) HANGUL SYLLABLE RYAEB
+B7E2;B7E2;1105 1164 11B9;B7E2;1105 1164 11B9; # (럢; 럢; 럢; 럢; 럢; ) HANGUL SYLLABLE RYAEBS
+B7E3;B7E3;1105 1164 11BA;B7E3;1105 1164 11BA; # (럣; 럣; 럣; 럣; 럣; ) HANGUL SYLLABLE RYAES
+B7E4;B7E4;1105 1164 11BB;B7E4;1105 1164 11BB; # (럤; 럤; 럤; 럤; 럤; ) HANGUL SYLLABLE RYAESS
+B7E5;B7E5;1105 1164 11BC;B7E5;1105 1164 11BC; # (럥; 럥; 럥; 럥; 럥; ) HANGUL SYLLABLE RYAENG
+B7E6;B7E6;1105 1164 11BD;B7E6;1105 1164 11BD; # (럦; 럦; 럦; 럦; 럦; ) HANGUL SYLLABLE RYAEJ
+B7E7;B7E7;1105 1164 11BE;B7E7;1105 1164 11BE; # (럧; 럧; 럧; 럧; 럧; ) HANGUL SYLLABLE RYAEC
+B7E8;B7E8;1105 1164 11BF;B7E8;1105 1164 11BF; # (럨; 럨; 럨; 럨; 럨; ) HANGUL SYLLABLE RYAEK
+B7E9;B7E9;1105 1164 11C0;B7E9;1105 1164 11C0; # (럩; 럩; 럩; 럩; 럩; ) HANGUL SYLLABLE RYAET
+B7EA;B7EA;1105 1164 11C1;B7EA;1105 1164 11C1; # (럪; 럪; 럪; 럪; 럪; ) HANGUL SYLLABLE RYAEP
+B7EB;B7EB;1105 1164 11C2;B7EB;1105 1164 11C2; # (럫; 럫; 럫; 럫; 럫; ) HANGUL SYLLABLE RYAEH
+B7EC;B7EC;1105 1165;B7EC;1105 1165; # (러; 러; 러; 러; 러; ) HANGUL SYLLABLE REO
+B7ED;B7ED;1105 1165 11A8;B7ED;1105 1165 11A8; # (럭; 럭; 럭; 럭; 럭; ) HANGUL SYLLABLE REOG
+B7EE;B7EE;1105 1165 11A9;B7EE;1105 1165 11A9; # (럮; 럮; 럮; 럮; 럮; ) HANGUL SYLLABLE REOGG
+B7EF;B7EF;1105 1165 11AA;B7EF;1105 1165 11AA; # (럯; 럯; 럯; 럯; 럯; ) HANGUL SYLLABLE REOGS
+B7F0;B7F0;1105 1165 11AB;B7F0;1105 1165 11AB; # (런; 런; 런; 런; 런; ) HANGUL SYLLABLE REON
+B7F1;B7F1;1105 1165 11AC;B7F1;1105 1165 11AC; # (럱; 럱; 럱; 럱; 럱; ) HANGUL SYLLABLE REONJ
+B7F2;B7F2;1105 1165 11AD;B7F2;1105 1165 11AD; # (럲; 럲; 럲; 럲; 럲; ) HANGUL SYLLABLE REONH
+B7F3;B7F3;1105 1165 11AE;B7F3;1105 1165 11AE; # (럳; 럳; 럳; 럳; 럳; ) HANGUL SYLLABLE REOD
+B7F4;B7F4;1105 1165 11AF;B7F4;1105 1165 11AF; # (럴; 럴; 럴; 럴; 럴; ) HANGUL SYLLABLE REOL
+B7F5;B7F5;1105 1165 11B0;B7F5;1105 1165 11B0; # (럵; 럵; 럵; 럵; 럵; ) HANGUL SYLLABLE REOLG
+B7F6;B7F6;1105 1165 11B1;B7F6;1105 1165 11B1; # (럶; 럶; 럶; 럶; 럶; ) HANGUL SYLLABLE REOLM
+B7F7;B7F7;1105 1165 11B2;B7F7;1105 1165 11B2; # (럷; 럷; 럷; 럷; 럷; ) HANGUL SYLLABLE REOLB
+B7F8;B7F8;1105 1165 11B3;B7F8;1105 1165 11B3; # (럸; 럸; 럸; 럸; 럸; ) HANGUL SYLLABLE REOLS
+B7F9;B7F9;1105 1165 11B4;B7F9;1105 1165 11B4; # (럹; 럹; 럹; 럹; 럹; ) HANGUL SYLLABLE REOLT
+B7FA;B7FA;1105 1165 11B5;B7FA;1105 1165 11B5; # (럺; 럺; 럺; 럺; 럺; ) HANGUL SYLLABLE REOLP
+B7FB;B7FB;1105 1165 11B6;B7FB;1105 1165 11B6; # (럻; 럻; 럻; 럻; 럻; ) HANGUL SYLLABLE REOLH
+B7FC;B7FC;1105 1165 11B7;B7FC;1105 1165 11B7; # (럼; 럼; 럼; 럼; 럼; ) HANGUL SYLLABLE REOM
+B7FD;B7FD;1105 1165 11B8;B7FD;1105 1165 11B8; # (럽; 럽; 럽; 럽; 럽; ) HANGUL SYLLABLE REOB
+B7FE;B7FE;1105 1165 11B9;B7FE;1105 1165 11B9; # (럾; 럾; 럾; 럾; 럾; ) HANGUL SYLLABLE REOBS
+B7FF;B7FF;1105 1165 11BA;B7FF;1105 1165 11BA; # (럿; 럿; 럿; 럿; 럿; ) HANGUL SYLLABLE REOS
+B800;B800;1105 1165 11BB;B800;1105 1165 11BB; # (렀; 렀; 렀; 렀; 렀; ) HANGUL SYLLABLE REOSS
+B801;B801;1105 1165 11BC;B801;1105 1165 11BC; # (렁; 렁; 렁; 렁; 렁; ) HANGUL SYLLABLE REONG
+B802;B802;1105 1165 11BD;B802;1105 1165 11BD; # (렂; 렂; 렂; 렂; 렂; ) HANGUL SYLLABLE REOJ
+B803;B803;1105 1165 11BE;B803;1105 1165 11BE; # (렃; 렃; 렃; 렃; 렃; ) HANGUL SYLLABLE REOC
+B804;B804;1105 1165 11BF;B804;1105 1165 11BF; # (렄; 렄; 렄; 렄; 렄; ) HANGUL SYLLABLE REOK
+B805;B805;1105 1165 11C0;B805;1105 1165 11C0; # (렅; 렅; 렅; 렅; 렅; ) HANGUL SYLLABLE REOT
+B806;B806;1105 1165 11C1;B806;1105 1165 11C1; # (렆; 렆; 렆; 렆; 렆; ) HANGUL SYLLABLE REOP
+B807;B807;1105 1165 11C2;B807;1105 1165 11C2; # (렇; 렇; 렇; 렇; 렇; ) HANGUL SYLLABLE REOH
+B808;B808;1105 1166;B808;1105 1166; # (레; 레; 레; 레; 레; ) HANGUL SYLLABLE RE
+B809;B809;1105 1166 11A8;B809;1105 1166 11A8; # (렉; 렉; 렉; 렉; 렉; ) HANGUL SYLLABLE REG
+B80A;B80A;1105 1166 11A9;B80A;1105 1166 11A9; # (렊; 렊; 렊; 렊; 렊; ) HANGUL SYLLABLE REGG
+B80B;B80B;1105 1166 11AA;B80B;1105 1166 11AA; # (렋; 렋; 렋; 렋; 렋; ) HANGUL SYLLABLE REGS
+B80C;B80C;1105 1166 11AB;B80C;1105 1166 11AB; # (렌; 렌; 렌; 렌; 렌; ) HANGUL SYLLABLE REN
+B80D;B80D;1105 1166 11AC;B80D;1105 1166 11AC; # (렍; 렍; 렍; 렍; 렍; ) HANGUL SYLLABLE RENJ
+B80E;B80E;1105 1166 11AD;B80E;1105 1166 11AD; # (렎; 렎; 렎; 렎; 렎; ) HANGUL SYLLABLE RENH
+B80F;B80F;1105 1166 11AE;B80F;1105 1166 11AE; # (렏; 렏; 렏; 렏; 렏; ) HANGUL SYLLABLE RED
+B810;B810;1105 1166 11AF;B810;1105 1166 11AF; # (렐; 렐; 렐; 렐; 렐; ) HANGUL SYLLABLE REL
+B811;B811;1105 1166 11B0;B811;1105 1166 11B0; # (렑; 렑; 렑; 렑; 렑; ) HANGUL SYLLABLE RELG
+B812;B812;1105 1166 11B1;B812;1105 1166 11B1; # (렒; 렒; 렒; 렒; 렒; ) HANGUL SYLLABLE RELM
+B813;B813;1105 1166 11B2;B813;1105 1166 11B2; # (렓; 렓; 렓; 렓; 렓; ) HANGUL SYLLABLE RELB
+B814;B814;1105 1166 11B3;B814;1105 1166 11B3; # (렔; 렔; 렔; 렔; 렔; ) HANGUL SYLLABLE RELS
+B815;B815;1105 1166 11B4;B815;1105 1166 11B4; # (렕; 렕; 렕; 렕; 렕; ) HANGUL SYLLABLE RELT
+B816;B816;1105 1166 11B5;B816;1105 1166 11B5; # (렖; 렖; 렖; 렖; 렖; ) HANGUL SYLLABLE RELP
+B817;B817;1105 1166 11B6;B817;1105 1166 11B6; # (렗; 렗; 렗; 렗; 렗; ) HANGUL SYLLABLE RELH
+B818;B818;1105 1166 11B7;B818;1105 1166 11B7; # (렘; 렘; 렘; 렘; 렘; ) HANGUL SYLLABLE REM
+B819;B819;1105 1166 11B8;B819;1105 1166 11B8; # (렙; 렙; 렙; 렙; 렙; ) HANGUL SYLLABLE REB
+B81A;B81A;1105 1166 11B9;B81A;1105 1166 11B9; # (렚; 렚; 렚; 렚; 렚; ) HANGUL SYLLABLE REBS
+B81B;B81B;1105 1166 11BA;B81B;1105 1166 11BA; # (렛; 렛; 렛; 렛; 렛; ) HANGUL SYLLABLE RES
+B81C;B81C;1105 1166 11BB;B81C;1105 1166 11BB; # (렜; 렜; 렜; 렜; 렜; ) HANGUL SYLLABLE RESS
+B81D;B81D;1105 1166 11BC;B81D;1105 1166 11BC; # (렝; 렝; 렝; 렝; 렝; ) HANGUL SYLLABLE RENG
+B81E;B81E;1105 1166 11BD;B81E;1105 1166 11BD; # (렞; 렞; 렞; 렞; 렞; ) HANGUL SYLLABLE REJ
+B81F;B81F;1105 1166 11BE;B81F;1105 1166 11BE; # (렟; 렟; 렟; 렟; 렟; ) HANGUL SYLLABLE REC
+B820;B820;1105 1166 11BF;B820;1105 1166 11BF; # (렠; 렠; 렠; 렠; 렠; ) HANGUL SYLLABLE REK
+B821;B821;1105 1166 11C0;B821;1105 1166 11C0; # (렡; 렡; 렡; 렡; 렡; ) HANGUL SYLLABLE RET
+B822;B822;1105 1166 11C1;B822;1105 1166 11C1; # (렢; 렢; 렢; 렢; 렢; ) HANGUL SYLLABLE REP
+B823;B823;1105 1166 11C2;B823;1105 1166 11C2; # (렣; 렣; 렣; 렣; 렣; ) HANGUL SYLLABLE REH
+B824;B824;1105 1167;B824;1105 1167; # (려; 려; 려; 려; 려; ) HANGUL SYLLABLE RYEO
+B825;B825;1105 1167 11A8;B825;1105 1167 11A8; # (력; 력; 력; 력; 력; ) HANGUL SYLLABLE RYEOG
+B826;B826;1105 1167 11A9;B826;1105 1167 11A9; # (렦; 렦; 렦; 렦; 렦; ) HANGUL SYLLABLE RYEOGG
+B827;B827;1105 1167 11AA;B827;1105 1167 11AA; # (렧; 렧; 렧; 렧; 렧; ) HANGUL SYLLABLE RYEOGS
+B828;B828;1105 1167 11AB;B828;1105 1167 11AB; # (련; 련; 련; 련; 련; ) HANGUL SYLLABLE RYEON
+B829;B829;1105 1167 11AC;B829;1105 1167 11AC; # (렩; 렩; 렩; 렩; 렩; ) HANGUL SYLLABLE RYEONJ
+B82A;B82A;1105 1167 11AD;B82A;1105 1167 11AD; # (렪; 렪; 렪; 렪; 렪; ) HANGUL SYLLABLE RYEONH
+B82B;B82B;1105 1167 11AE;B82B;1105 1167 11AE; # (렫; 렫; 렫; 렫; 렫; ) HANGUL SYLLABLE RYEOD
+B82C;B82C;1105 1167 11AF;B82C;1105 1167 11AF; # (렬; 렬; 렬; 렬; 렬; ) HANGUL SYLLABLE RYEOL
+B82D;B82D;1105 1167 11B0;B82D;1105 1167 11B0; # (렭; 렭; 렭; 렭; 렭; ) HANGUL SYLLABLE RYEOLG
+B82E;B82E;1105 1167 11B1;B82E;1105 1167 11B1; # (렮; 렮; 렮; 렮; 렮; ) HANGUL SYLLABLE RYEOLM
+B82F;B82F;1105 1167 11B2;B82F;1105 1167 11B2; # (렯; 렯; 렯; 렯; 렯; ) HANGUL SYLLABLE RYEOLB
+B830;B830;1105 1167 11B3;B830;1105 1167 11B3; # (렰; 렰; 렰; 렰; 렰; ) HANGUL SYLLABLE RYEOLS
+B831;B831;1105 1167 11B4;B831;1105 1167 11B4; # (렱; 렱; 렱; 렱; 렱; ) HANGUL SYLLABLE RYEOLT
+B832;B832;1105 1167 11B5;B832;1105 1167 11B5; # (렲; 렲; 렲; 렲; 렲; ) HANGUL SYLLABLE RYEOLP
+B833;B833;1105 1167 11B6;B833;1105 1167 11B6; # (렳; 렳; 렳; 렳; 렳; ) HANGUL SYLLABLE RYEOLH
+B834;B834;1105 1167 11B7;B834;1105 1167 11B7; # (렴; 렴; 렴; 렴; 렴; ) HANGUL SYLLABLE RYEOM
+B835;B835;1105 1167 11B8;B835;1105 1167 11B8; # (렵; 렵; 렵; 렵; 렵; ) HANGUL SYLLABLE RYEOB
+B836;B836;1105 1167 11B9;B836;1105 1167 11B9; # (렶; 렶; 렶; 렶; 렶; ) HANGUL SYLLABLE RYEOBS
+B837;B837;1105 1167 11BA;B837;1105 1167 11BA; # (렷; 렷; 렷; 렷; 렷; ) HANGUL SYLLABLE RYEOS
+B838;B838;1105 1167 11BB;B838;1105 1167 11BB; # (렸; 렸; 렸; 렸; 렸; ) HANGUL SYLLABLE RYEOSS
+B839;B839;1105 1167 11BC;B839;1105 1167 11BC; # (령; 령; 령; 령; 령; ) HANGUL SYLLABLE RYEONG
+B83A;B83A;1105 1167 11BD;B83A;1105 1167 11BD; # (렺; 렺; 렺; 렺; 렺; ) HANGUL SYLLABLE RYEOJ
+B83B;B83B;1105 1167 11BE;B83B;1105 1167 11BE; # (렻; 렻; 렻; 렻; 렻; ) HANGUL SYLLABLE RYEOC
+B83C;B83C;1105 1167 11BF;B83C;1105 1167 11BF; # (렼; 렼; 렼; 렼; 렼; ) HANGUL SYLLABLE RYEOK
+B83D;B83D;1105 1167 11C0;B83D;1105 1167 11C0; # (렽; 렽; 렽; 렽; 렽; ) HANGUL SYLLABLE RYEOT
+B83E;B83E;1105 1167 11C1;B83E;1105 1167 11C1; # (렾; 렾; 렾; 렾; 렾; ) HANGUL SYLLABLE RYEOP
+B83F;B83F;1105 1167 11C2;B83F;1105 1167 11C2; # (렿; 렿; 렿; 렿; 렿; ) HANGUL SYLLABLE RYEOH
+B840;B840;1105 1168;B840;1105 1168; # (례; 례; 례; 례; 례; ) HANGUL SYLLABLE RYE
+B841;B841;1105 1168 11A8;B841;1105 1168 11A8; # (롁; 롁; 롁; 롁; 롁; ) HANGUL SYLLABLE RYEG
+B842;B842;1105 1168 11A9;B842;1105 1168 11A9; # (롂; 롂; 롂; 롂; 롂; ) HANGUL SYLLABLE RYEGG
+B843;B843;1105 1168 11AA;B843;1105 1168 11AA; # (롃; 롃; 롃; 롃; 롃; ) HANGUL SYLLABLE RYEGS
+B844;B844;1105 1168 11AB;B844;1105 1168 11AB; # (롄; 롄; 롄; 롄; 롄; ) HANGUL SYLLABLE RYEN
+B845;B845;1105 1168 11AC;B845;1105 1168 11AC; # (롅; 롅; 롅; 롅; 롅; ) HANGUL SYLLABLE RYENJ
+B846;B846;1105 1168 11AD;B846;1105 1168 11AD; # (롆; 롆; 롆; 롆; 롆; ) HANGUL SYLLABLE RYENH
+B847;B847;1105 1168 11AE;B847;1105 1168 11AE; # (롇; 롇; 롇; 롇; 롇; ) HANGUL SYLLABLE RYED
+B848;B848;1105 1168 11AF;B848;1105 1168 11AF; # (롈; 롈; 롈; 롈; 롈; ) HANGUL SYLLABLE RYEL
+B849;B849;1105 1168 11B0;B849;1105 1168 11B0; # (롉; 롉; 롉; 롉; 롉; ) HANGUL SYLLABLE RYELG
+B84A;B84A;1105 1168 11B1;B84A;1105 1168 11B1; # (롊; 롊; 롊; 롊; 롊; ) HANGUL SYLLABLE RYELM
+B84B;B84B;1105 1168 11B2;B84B;1105 1168 11B2; # (롋; 롋; 롋; 롋; 롋; ) HANGUL SYLLABLE RYELB
+B84C;B84C;1105 1168 11B3;B84C;1105 1168 11B3; # (롌; 롌; 롌; 롌; 롌; ) HANGUL SYLLABLE RYELS
+B84D;B84D;1105 1168 11B4;B84D;1105 1168 11B4; # (롍; 롍; 롍; 롍; 롍; ) HANGUL SYLLABLE RYELT
+B84E;B84E;1105 1168 11B5;B84E;1105 1168 11B5; # (롎; 롎; 롎; 롎; 롎; ) HANGUL SYLLABLE RYELP
+B84F;B84F;1105 1168 11B6;B84F;1105 1168 11B6; # (롏; 롏; 롏; 롏; 롏; ) HANGUL SYLLABLE RYELH
+B850;B850;1105 1168 11B7;B850;1105 1168 11B7; # (롐; 롐; 롐; 롐; 롐; ) HANGUL SYLLABLE RYEM
+B851;B851;1105 1168 11B8;B851;1105 1168 11B8; # (롑; 롑; 롑; 롑; 롑; ) HANGUL SYLLABLE RYEB
+B852;B852;1105 1168 11B9;B852;1105 1168 11B9; # (롒; 롒; 롒; 롒; 롒; ) HANGUL SYLLABLE RYEBS
+B853;B853;1105 1168 11BA;B853;1105 1168 11BA; # (롓; 롓; 롓; 롓; 롓; ) HANGUL SYLLABLE RYES
+B854;B854;1105 1168 11BB;B854;1105 1168 11BB; # (롔; 롔; 롔; 롔; 롔; ) HANGUL SYLLABLE RYESS
+B855;B855;1105 1168 11BC;B855;1105 1168 11BC; # (롕; 롕; 롕; 롕; 롕; ) HANGUL SYLLABLE RYENG
+B856;B856;1105 1168 11BD;B856;1105 1168 11BD; # (롖; 롖; 롖; 롖; 롖; ) HANGUL SYLLABLE RYEJ
+B857;B857;1105 1168 11BE;B857;1105 1168 11BE; # (롗; 롗; 롗; 롗; 롗; ) HANGUL SYLLABLE RYEC
+B858;B858;1105 1168 11BF;B858;1105 1168 11BF; # (롘; 롘; 롘; 롘; 롘; ) HANGUL SYLLABLE RYEK
+B859;B859;1105 1168 11C0;B859;1105 1168 11C0; # (롙; 롙; 롙; 롙; 롙; ) HANGUL SYLLABLE RYET
+B85A;B85A;1105 1168 11C1;B85A;1105 1168 11C1; # (롚; 롚; 롚; 롚; 롚; ) HANGUL SYLLABLE RYEP
+B85B;B85B;1105 1168 11C2;B85B;1105 1168 11C2; # (롛; 롛; 롛; 롛; 롛; ) HANGUL SYLLABLE RYEH
+B85C;B85C;1105 1169;B85C;1105 1169; # (로; 로; 로; 로; 로; ) HANGUL SYLLABLE RO
+B85D;B85D;1105 1169 11A8;B85D;1105 1169 11A8; # (록; 록; 록; 록; 록; ) HANGUL SYLLABLE ROG
+B85E;B85E;1105 1169 11A9;B85E;1105 1169 11A9; # (롞; 롞; 롞; 롞; 롞; ) HANGUL SYLLABLE ROGG
+B85F;B85F;1105 1169 11AA;B85F;1105 1169 11AA; # (롟; 롟; 롟; 롟; 롟; ) HANGUL SYLLABLE ROGS
+B860;B860;1105 1169 11AB;B860;1105 1169 11AB; # (론; 론; 론; 론; 론; ) HANGUL SYLLABLE RON
+B861;B861;1105 1169 11AC;B861;1105 1169 11AC; # (롡; 롡; 롡; 롡; 롡; ) HANGUL SYLLABLE RONJ
+B862;B862;1105 1169 11AD;B862;1105 1169 11AD; # (롢; 롢; 롢; 롢; 롢; ) HANGUL SYLLABLE RONH
+B863;B863;1105 1169 11AE;B863;1105 1169 11AE; # (롣; 롣; 롣; 롣; 롣; ) HANGUL SYLLABLE ROD
+B864;B864;1105 1169 11AF;B864;1105 1169 11AF; # (롤; 롤; 롤; 롤; 롤; ) HANGUL SYLLABLE ROL
+B865;B865;1105 1169 11B0;B865;1105 1169 11B0; # (롥; 롥; 롥; 롥; 롥; ) HANGUL SYLLABLE ROLG
+B866;B866;1105 1169 11B1;B866;1105 1169 11B1; # (롦; 롦; 롦; 롦; 롦; ) HANGUL SYLLABLE ROLM
+B867;B867;1105 1169 11B2;B867;1105 1169 11B2; # (롧; 롧; 롧; 롧; 롧; ) HANGUL SYLLABLE ROLB
+B868;B868;1105 1169 11B3;B868;1105 1169 11B3; # (롨; 롨; 롨; 롨; 롨; ) HANGUL SYLLABLE ROLS
+B869;B869;1105 1169 11B4;B869;1105 1169 11B4; # (롩; 롩; 롩; 롩; 롩; ) HANGUL SYLLABLE ROLT
+B86A;B86A;1105 1169 11B5;B86A;1105 1169 11B5; # (롪; 롪; 롪; 롪; 롪; ) HANGUL SYLLABLE ROLP
+B86B;B86B;1105 1169 11B6;B86B;1105 1169 11B6; # (롫; 롫; 롫; 롫; 롫; ) HANGUL SYLLABLE ROLH
+B86C;B86C;1105 1169 11B7;B86C;1105 1169 11B7; # (롬; 롬; 롬; 롬; 롬; ) HANGUL SYLLABLE ROM
+B86D;B86D;1105 1169 11B8;B86D;1105 1169 11B8; # (롭; 롭; 롭; 롭; 롭; ) HANGUL SYLLABLE ROB
+B86E;B86E;1105 1169 11B9;B86E;1105 1169 11B9; # (롮; 롮; 롮; 롮; 롮; ) HANGUL SYLLABLE ROBS
+B86F;B86F;1105 1169 11BA;B86F;1105 1169 11BA; # (롯; 롯; 롯; 롯; 롯; ) HANGUL SYLLABLE ROS
+B870;B870;1105 1169 11BB;B870;1105 1169 11BB; # (롰; 롰; 롰; 롰; 롰; ) HANGUL SYLLABLE ROSS
+B871;B871;1105 1169 11BC;B871;1105 1169 11BC; # (롱; 롱; 롱; 롱; 롱; ) HANGUL SYLLABLE RONG
+B872;B872;1105 1169 11BD;B872;1105 1169 11BD; # (롲; 롲; 롲; 롲; 롲; ) HANGUL SYLLABLE ROJ
+B873;B873;1105 1169 11BE;B873;1105 1169 11BE; # (롳; 롳; 롳; 롳; 롳; ) HANGUL SYLLABLE ROC
+B874;B874;1105 1169 11BF;B874;1105 1169 11BF; # (롴; 롴; 롴; 롴; 롴; ) HANGUL SYLLABLE ROK
+B875;B875;1105 1169 11C0;B875;1105 1169 11C0; # (롵; 롵; 롵; 롵; 롵; ) HANGUL SYLLABLE ROT
+B876;B876;1105 1169 11C1;B876;1105 1169 11C1; # (롶; 롶; 롶; 롶; 롶; ) HANGUL SYLLABLE ROP
+B877;B877;1105 1169 11C2;B877;1105 1169 11C2; # (롷; 롷; 롷; 롷; 롷; ) HANGUL SYLLABLE ROH
+B878;B878;1105 116A;B878;1105 116A; # (롸; 롸; 롸; 롸; 롸; ) HANGUL SYLLABLE RWA
+B879;B879;1105 116A 11A8;B879;1105 116A 11A8; # (롹; 롹; 롹; 롹; 롹; ) HANGUL SYLLABLE RWAG
+B87A;B87A;1105 116A 11A9;B87A;1105 116A 11A9; # (롺; 롺; 롺; 롺; 롺; ) HANGUL SYLLABLE RWAGG
+B87B;B87B;1105 116A 11AA;B87B;1105 116A 11AA; # (롻; 롻; 롻; 롻; 롻; ) HANGUL SYLLABLE RWAGS
+B87C;B87C;1105 116A 11AB;B87C;1105 116A 11AB; # (롼; 롼; 롼; 롼; 롼; ) HANGUL SYLLABLE RWAN
+B87D;B87D;1105 116A 11AC;B87D;1105 116A 11AC; # (롽; 롽; 롽; 롽; 롽; ) HANGUL SYLLABLE RWANJ
+B87E;B87E;1105 116A 11AD;B87E;1105 116A 11AD; # (롾; 롾; 롾; 롾; 롾; ) HANGUL SYLLABLE RWANH
+B87F;B87F;1105 116A 11AE;B87F;1105 116A 11AE; # (롿; 롿; 롿; 롿; 롿; ) HANGUL SYLLABLE RWAD
+B880;B880;1105 116A 11AF;B880;1105 116A 11AF; # (뢀; 뢀; 뢀; 뢀; 뢀; ) HANGUL SYLLABLE RWAL
+B881;B881;1105 116A 11B0;B881;1105 116A 11B0; # (뢁; 뢁; 뢁; 뢁; 뢁; ) HANGUL SYLLABLE RWALG
+B882;B882;1105 116A 11B1;B882;1105 116A 11B1; # (뢂; 뢂; 뢂; 뢂; 뢂; ) HANGUL SYLLABLE RWALM
+B883;B883;1105 116A 11B2;B883;1105 116A 11B2; # (뢃; 뢃; 뢃; 뢃; 뢃; ) HANGUL SYLLABLE RWALB
+B884;B884;1105 116A 11B3;B884;1105 116A 11B3; # (뢄; 뢄; 뢄; 뢄; 뢄; ) HANGUL SYLLABLE RWALS
+B885;B885;1105 116A 11B4;B885;1105 116A 11B4; # (뢅; 뢅; 뢅; 뢅; 뢅; ) HANGUL SYLLABLE RWALT
+B886;B886;1105 116A 11B5;B886;1105 116A 11B5; # (뢆; 뢆; 뢆; 뢆; 뢆; ) HANGUL SYLLABLE RWALP
+B887;B887;1105 116A 11B6;B887;1105 116A 11B6; # (뢇; 뢇; 뢇; 뢇; 뢇; ) HANGUL SYLLABLE RWALH
+B888;B888;1105 116A 11B7;B888;1105 116A 11B7; # (뢈; 뢈; 뢈; 뢈; 뢈; ) HANGUL SYLLABLE RWAM
+B889;B889;1105 116A 11B8;B889;1105 116A 11B8; # (뢉; 뢉; 뢉; 뢉; 뢉; ) HANGUL SYLLABLE RWAB
+B88A;B88A;1105 116A 11B9;B88A;1105 116A 11B9; # (뢊; 뢊; 뢊; 뢊; 뢊; ) HANGUL SYLLABLE RWABS
+B88B;B88B;1105 116A 11BA;B88B;1105 116A 11BA; # (뢋; 뢋; 뢋; 뢋; 뢋; ) HANGUL SYLLABLE RWAS
+B88C;B88C;1105 116A 11BB;B88C;1105 116A 11BB; # (뢌; 뢌; 뢌; 뢌; 뢌; ) HANGUL SYLLABLE RWASS
+B88D;B88D;1105 116A 11BC;B88D;1105 116A 11BC; # (뢍; 뢍; 뢍; 뢍; 뢍; ) HANGUL SYLLABLE RWANG
+B88E;B88E;1105 116A 11BD;B88E;1105 116A 11BD; # (뢎; 뢎; 뢎; 뢎; 뢎; ) HANGUL SYLLABLE RWAJ
+B88F;B88F;1105 116A 11BE;B88F;1105 116A 11BE; # (뢏; 뢏; 뢏; 뢏; 뢏; ) HANGUL SYLLABLE RWAC
+B890;B890;1105 116A 11BF;B890;1105 116A 11BF; # (뢐; 뢐; 뢐; 뢐; 뢐; ) HANGUL SYLLABLE RWAK
+B891;B891;1105 116A 11C0;B891;1105 116A 11C0; # (뢑; 뢑; 뢑; 뢑; 뢑; ) HANGUL SYLLABLE RWAT
+B892;B892;1105 116A 11C1;B892;1105 116A 11C1; # (뢒; 뢒; 뢒; 뢒; 뢒; ) HANGUL SYLLABLE RWAP
+B893;B893;1105 116A 11C2;B893;1105 116A 11C2; # (뢓; 뢓; 뢓; 뢓; 뢓; ) HANGUL SYLLABLE RWAH
+B894;B894;1105 116B;B894;1105 116B; # (뢔; 뢔; 뢔; 뢔; 뢔; ) HANGUL SYLLABLE RWAE
+B895;B895;1105 116B 11A8;B895;1105 116B 11A8; # (뢕; 뢕; 뢕; 뢕; 뢕; ) HANGUL SYLLABLE RWAEG
+B896;B896;1105 116B 11A9;B896;1105 116B 11A9; # (뢖; 뢖; 뢖; 뢖; 뢖; ) HANGUL SYLLABLE RWAEGG
+B897;B897;1105 116B 11AA;B897;1105 116B 11AA; # (뢗; 뢗; 뢗; 뢗; 뢗; ) HANGUL SYLLABLE RWAEGS
+B898;B898;1105 116B 11AB;B898;1105 116B 11AB; # (뢘; 뢘; 뢘; 뢘; 뢘; ) HANGUL SYLLABLE RWAEN
+B899;B899;1105 116B 11AC;B899;1105 116B 11AC; # (뢙; 뢙; 뢙; 뢙; 뢙; ) HANGUL SYLLABLE RWAENJ
+B89A;B89A;1105 116B 11AD;B89A;1105 116B 11AD; # (뢚; 뢚; 뢚; 뢚; 뢚; ) HANGUL SYLLABLE RWAENH
+B89B;B89B;1105 116B 11AE;B89B;1105 116B 11AE; # (뢛; 뢛; 뢛; 뢛; 뢛; ) HANGUL SYLLABLE RWAED
+B89C;B89C;1105 116B 11AF;B89C;1105 116B 11AF; # (뢜; 뢜; 뢜; 뢜; 뢜; ) HANGUL SYLLABLE RWAEL
+B89D;B89D;1105 116B 11B0;B89D;1105 116B 11B0; # (뢝; 뢝; 뢝; 뢝; 뢝; ) HANGUL SYLLABLE RWAELG
+B89E;B89E;1105 116B 11B1;B89E;1105 116B 11B1; # (뢞; 뢞; 뢞; 뢞; 뢞; ) HANGUL SYLLABLE RWAELM
+B89F;B89F;1105 116B 11B2;B89F;1105 116B 11B2; # (뢟; 뢟; 뢟; 뢟; 뢟; ) HANGUL SYLLABLE RWAELB
+B8A0;B8A0;1105 116B 11B3;B8A0;1105 116B 11B3; # (뢠; 뢠; 뢠; 뢠; 뢠; ) HANGUL SYLLABLE RWAELS
+B8A1;B8A1;1105 116B 11B4;B8A1;1105 116B 11B4; # (뢡; 뢡; 뢡; 뢡; 뢡; ) HANGUL SYLLABLE RWAELT
+B8A2;B8A2;1105 116B 11B5;B8A2;1105 116B 11B5; # (뢢; 뢢; 뢢; 뢢; 뢢; ) HANGUL SYLLABLE RWAELP
+B8A3;B8A3;1105 116B 11B6;B8A3;1105 116B 11B6; # (뢣; 뢣; 뢣; 뢣; 뢣; ) HANGUL SYLLABLE RWAELH
+B8A4;B8A4;1105 116B 11B7;B8A4;1105 116B 11B7; # (뢤; 뢤; 뢤; 뢤; 뢤; ) HANGUL SYLLABLE RWAEM
+B8A5;B8A5;1105 116B 11B8;B8A5;1105 116B 11B8; # (뢥; 뢥; 뢥; 뢥; 뢥; ) HANGUL SYLLABLE RWAEB
+B8A6;B8A6;1105 116B 11B9;B8A6;1105 116B 11B9; # (뢦; 뢦; 뢦; 뢦; 뢦; ) HANGUL SYLLABLE RWAEBS
+B8A7;B8A7;1105 116B 11BA;B8A7;1105 116B 11BA; # (뢧; 뢧; 뢧; 뢧; 뢧; ) HANGUL SYLLABLE RWAES
+B8A8;B8A8;1105 116B 11BB;B8A8;1105 116B 11BB; # (뢨; 뢨; 뢨; 뢨; 뢨; ) HANGUL SYLLABLE RWAESS
+B8A9;B8A9;1105 116B 11BC;B8A9;1105 116B 11BC; # (뢩; 뢩; 뢩; 뢩; 뢩; ) HANGUL SYLLABLE RWAENG
+B8AA;B8AA;1105 116B 11BD;B8AA;1105 116B 11BD; # (뢪; 뢪; 뢪; 뢪; 뢪; ) HANGUL SYLLABLE RWAEJ
+B8AB;B8AB;1105 116B 11BE;B8AB;1105 116B 11BE; # (뢫; 뢫; 뢫; 뢫; 뢫; ) HANGUL SYLLABLE RWAEC
+B8AC;B8AC;1105 116B 11BF;B8AC;1105 116B 11BF; # (뢬; 뢬; 뢬; 뢬; 뢬; ) HANGUL SYLLABLE RWAEK
+B8AD;B8AD;1105 116B 11C0;B8AD;1105 116B 11C0; # (뢭; 뢭; 뢭; 뢭; 뢭; ) HANGUL SYLLABLE RWAET
+B8AE;B8AE;1105 116B 11C1;B8AE;1105 116B 11C1; # (뢮; 뢮; 뢮; 뢮; 뢮; ) HANGUL SYLLABLE RWAEP
+B8AF;B8AF;1105 116B 11C2;B8AF;1105 116B 11C2; # (뢯; 뢯; 뢯; 뢯; 뢯; ) HANGUL SYLLABLE RWAEH
+B8B0;B8B0;1105 116C;B8B0;1105 116C; # (뢰; 뢰; 뢰; 뢰; 뢰; ) HANGUL SYLLABLE ROE
+B8B1;B8B1;1105 116C 11A8;B8B1;1105 116C 11A8; # (뢱; 뢱; 뢱; 뢱; 뢱; ) HANGUL SYLLABLE ROEG
+B8B2;B8B2;1105 116C 11A9;B8B2;1105 116C 11A9; # (뢲; 뢲; 뢲; 뢲; 뢲; ) HANGUL SYLLABLE ROEGG
+B8B3;B8B3;1105 116C 11AA;B8B3;1105 116C 11AA; # (뢳; 뢳; 뢳; 뢳; 뢳; ) HANGUL SYLLABLE ROEGS
+B8B4;B8B4;1105 116C 11AB;B8B4;1105 116C 11AB; # (뢴; 뢴; 뢴; 뢴; 뢴; ) HANGUL SYLLABLE ROEN
+B8B5;B8B5;1105 116C 11AC;B8B5;1105 116C 11AC; # (뢵; 뢵; 뢵; 뢵; 뢵; ) HANGUL SYLLABLE ROENJ
+B8B6;B8B6;1105 116C 11AD;B8B6;1105 116C 11AD; # (뢶; 뢶; 뢶; 뢶; 뢶; ) HANGUL SYLLABLE ROENH
+B8B7;B8B7;1105 116C 11AE;B8B7;1105 116C 11AE; # (뢷; 뢷; 뢷; 뢷; 뢷; ) HANGUL SYLLABLE ROED
+B8B8;B8B8;1105 116C 11AF;B8B8;1105 116C 11AF; # (뢸; 뢸; 뢸; 뢸; 뢸; ) HANGUL SYLLABLE ROEL
+B8B9;B8B9;1105 116C 11B0;B8B9;1105 116C 11B0; # (뢹; 뢹; 뢹; 뢹; 뢹; ) HANGUL SYLLABLE ROELG
+B8BA;B8BA;1105 116C 11B1;B8BA;1105 116C 11B1; # (뢺; 뢺; 뢺; 뢺; 뢺; ) HANGUL SYLLABLE ROELM
+B8BB;B8BB;1105 116C 11B2;B8BB;1105 116C 11B2; # (뢻; 뢻; 뢻; 뢻; 뢻; ) HANGUL SYLLABLE ROELB
+B8BC;B8BC;1105 116C 11B3;B8BC;1105 116C 11B3; # (뢼; 뢼; 뢼; 뢼; 뢼; ) HANGUL SYLLABLE ROELS
+B8BD;B8BD;1105 116C 11B4;B8BD;1105 116C 11B4; # (뢽; 뢽; 뢽; 뢽; 뢽; ) HANGUL SYLLABLE ROELT
+B8BE;B8BE;1105 116C 11B5;B8BE;1105 116C 11B5; # (뢾; 뢾; 뢾; 뢾; 뢾; ) HANGUL SYLLABLE ROELP
+B8BF;B8BF;1105 116C 11B6;B8BF;1105 116C 11B6; # (뢿; 뢿; 뢿; 뢿; 뢿; ) HANGUL SYLLABLE ROELH
+B8C0;B8C0;1105 116C 11B7;B8C0;1105 116C 11B7; # (룀; 룀; 룀; 룀; 룀; ) HANGUL SYLLABLE ROEM
+B8C1;B8C1;1105 116C 11B8;B8C1;1105 116C 11B8; # (룁; 룁; 룁; 룁; 룁; ) HANGUL SYLLABLE ROEB
+B8C2;B8C2;1105 116C 11B9;B8C2;1105 116C 11B9; # (룂; 룂; 룂; 룂; 룂; ) HANGUL SYLLABLE ROEBS
+B8C3;B8C3;1105 116C 11BA;B8C3;1105 116C 11BA; # (룃; 룃; 룃; 룃; 룃; ) HANGUL SYLLABLE ROES
+B8C4;B8C4;1105 116C 11BB;B8C4;1105 116C 11BB; # (룄; 룄; 룄; 룄; 룄; ) HANGUL SYLLABLE ROESS
+B8C5;B8C5;1105 116C 11BC;B8C5;1105 116C 11BC; # (룅; 룅; 룅; 룅; 룅; ) HANGUL SYLLABLE ROENG
+B8C6;B8C6;1105 116C 11BD;B8C6;1105 116C 11BD; # (룆; 룆; 룆; 룆; 룆; ) HANGUL SYLLABLE ROEJ
+B8C7;B8C7;1105 116C 11BE;B8C7;1105 116C 11BE; # (룇; 룇; 룇; 룇; 룇; ) HANGUL SYLLABLE ROEC
+B8C8;B8C8;1105 116C 11BF;B8C8;1105 116C 11BF; # (룈; 룈; 룈; 룈; 룈; ) HANGUL SYLLABLE ROEK
+B8C9;B8C9;1105 116C 11C0;B8C9;1105 116C 11C0; # (룉; 룉; 룉; 룉; 룉; ) HANGUL SYLLABLE ROET
+B8CA;B8CA;1105 116C 11C1;B8CA;1105 116C 11C1; # (룊; 룊; 룊; 룊; 룊; ) HANGUL SYLLABLE ROEP
+B8CB;B8CB;1105 116C 11C2;B8CB;1105 116C 11C2; # (룋; 룋; 룋; 룋; 룋; ) HANGUL SYLLABLE ROEH
+B8CC;B8CC;1105 116D;B8CC;1105 116D; # (료; 료; 료; 료; 료; ) HANGUL SYLLABLE RYO
+B8CD;B8CD;1105 116D 11A8;B8CD;1105 116D 11A8; # (룍; 룍; 룍; 룍; 룍; ) HANGUL SYLLABLE RYOG
+B8CE;B8CE;1105 116D 11A9;B8CE;1105 116D 11A9; # (룎; 룎; 룎; 룎; 룎; ) HANGUL SYLLABLE RYOGG
+B8CF;B8CF;1105 116D 11AA;B8CF;1105 116D 11AA; # (룏; 룏; 룏; 룏; 룏; ) HANGUL SYLLABLE RYOGS
+B8D0;B8D0;1105 116D 11AB;B8D0;1105 116D 11AB; # (룐; 룐; 룐; 룐; 룐; ) HANGUL SYLLABLE RYON
+B8D1;B8D1;1105 116D 11AC;B8D1;1105 116D 11AC; # (룑; 룑; 룑; 룑; 룑; ) HANGUL SYLLABLE RYONJ
+B8D2;B8D2;1105 116D 11AD;B8D2;1105 116D 11AD; # (룒; 룒; 룒; 룒; 룒; ) HANGUL SYLLABLE RYONH
+B8D3;B8D3;1105 116D 11AE;B8D3;1105 116D 11AE; # (룓; 룓; 룓; 룓; 룓; ) HANGUL SYLLABLE RYOD
+B8D4;B8D4;1105 116D 11AF;B8D4;1105 116D 11AF; # (룔; 룔; 룔; 룔; 룔; ) HANGUL SYLLABLE RYOL
+B8D5;B8D5;1105 116D 11B0;B8D5;1105 116D 11B0; # (룕; 룕; 룕; 룕; 룕; ) HANGUL SYLLABLE RYOLG
+B8D6;B8D6;1105 116D 11B1;B8D6;1105 116D 11B1; # (룖; 룖; 룖; 룖; 룖; ) HANGUL SYLLABLE RYOLM
+B8D7;B8D7;1105 116D 11B2;B8D7;1105 116D 11B2; # (룗; 룗; 룗; 룗; 룗; ) HANGUL SYLLABLE RYOLB
+B8D8;B8D8;1105 116D 11B3;B8D8;1105 116D 11B3; # (룘; 룘; 룘; 룘; 룘; ) HANGUL SYLLABLE RYOLS
+B8D9;B8D9;1105 116D 11B4;B8D9;1105 116D 11B4; # (룙; 룙; 룙; 룙; 룙; ) HANGUL SYLLABLE RYOLT
+B8DA;B8DA;1105 116D 11B5;B8DA;1105 116D 11B5; # (룚; 룚; 룚; 룚; 룚; ) HANGUL SYLLABLE RYOLP
+B8DB;B8DB;1105 116D 11B6;B8DB;1105 116D 11B6; # (룛; 룛; 룛; 룛; 룛; ) HANGUL SYLLABLE RYOLH
+B8DC;B8DC;1105 116D 11B7;B8DC;1105 116D 11B7; # (룜; 룜; 룜; 룜; 룜; ) HANGUL SYLLABLE RYOM
+B8DD;B8DD;1105 116D 11B8;B8DD;1105 116D 11B8; # (룝; 룝; 룝; 룝; 룝; ) HANGUL SYLLABLE RYOB
+B8DE;B8DE;1105 116D 11B9;B8DE;1105 116D 11B9; # (룞; 룞; 룞; 룞; 룞; ) HANGUL SYLLABLE RYOBS
+B8DF;B8DF;1105 116D 11BA;B8DF;1105 116D 11BA; # (룟; 룟; 룟; 룟; 룟; ) HANGUL SYLLABLE RYOS
+B8E0;B8E0;1105 116D 11BB;B8E0;1105 116D 11BB; # (룠; 룠; 룠; 룠; 룠; ) HANGUL SYLLABLE RYOSS
+B8E1;B8E1;1105 116D 11BC;B8E1;1105 116D 11BC; # (룡; 룡; 룡; 룡; 룡; ) HANGUL SYLLABLE RYONG
+B8E2;B8E2;1105 116D 11BD;B8E2;1105 116D 11BD; # (룢; 룢; 룢; 룢; 룢; ) HANGUL SYLLABLE RYOJ
+B8E3;B8E3;1105 116D 11BE;B8E3;1105 116D 11BE; # (룣; 룣; 룣; 룣; 룣; ) HANGUL SYLLABLE RYOC
+B8E4;B8E4;1105 116D 11BF;B8E4;1105 116D 11BF; # (룤; 룤; 룤; 룤; 룤; ) HANGUL SYLLABLE RYOK
+B8E5;B8E5;1105 116D 11C0;B8E5;1105 116D 11C0; # (룥; 룥; 룥; 룥; 룥; ) HANGUL SYLLABLE RYOT
+B8E6;B8E6;1105 116D 11C1;B8E6;1105 116D 11C1; # (룦; 룦; 룦; 룦; 룦; ) HANGUL SYLLABLE RYOP
+B8E7;B8E7;1105 116D 11C2;B8E7;1105 116D 11C2; # (룧; 룧; 룧; 룧; 룧; ) HANGUL SYLLABLE RYOH
+B8E8;B8E8;1105 116E;B8E8;1105 116E; # (루; 루; 루; 루; 루; ) HANGUL SYLLABLE RU
+B8E9;B8E9;1105 116E 11A8;B8E9;1105 116E 11A8; # (룩; 룩; 룩; 룩; 룩; ) HANGUL SYLLABLE RUG
+B8EA;B8EA;1105 116E 11A9;B8EA;1105 116E 11A9; # (룪; 룪; 룪; 룪; 룪; ) HANGUL SYLLABLE RUGG
+B8EB;B8EB;1105 116E 11AA;B8EB;1105 116E 11AA; # (룫; 룫; 룫; 룫; 룫; ) HANGUL SYLLABLE RUGS
+B8EC;B8EC;1105 116E 11AB;B8EC;1105 116E 11AB; # (룬; 룬; 룬; 룬; 룬; ) HANGUL SYLLABLE RUN
+B8ED;B8ED;1105 116E 11AC;B8ED;1105 116E 11AC; # (룭; 룭; 룭; 룭; 룭; ) HANGUL SYLLABLE RUNJ
+B8EE;B8EE;1105 116E 11AD;B8EE;1105 116E 11AD; # (룮; 룮; 룮; 룮; 룮; ) HANGUL SYLLABLE RUNH
+B8EF;B8EF;1105 116E 11AE;B8EF;1105 116E 11AE; # (룯; 룯; 룯; 룯; 룯; ) HANGUL SYLLABLE RUD
+B8F0;B8F0;1105 116E 11AF;B8F0;1105 116E 11AF; # (룰; 룰; 룰; 룰; 룰; ) HANGUL SYLLABLE RUL
+B8F1;B8F1;1105 116E 11B0;B8F1;1105 116E 11B0; # (룱; 룱; 룱; 룱; 룱; ) HANGUL SYLLABLE RULG
+B8F2;B8F2;1105 116E 11B1;B8F2;1105 116E 11B1; # (룲; 룲; 룲; 룲; 룲; ) HANGUL SYLLABLE RULM
+B8F3;B8F3;1105 116E 11B2;B8F3;1105 116E 11B2; # (룳; 룳; 룳; 룳; 룳; ) HANGUL SYLLABLE RULB
+B8F4;B8F4;1105 116E 11B3;B8F4;1105 116E 11B3; # (룴; 룴; 룴; 룴; 룴; ) HANGUL SYLLABLE RULS
+B8F5;B8F5;1105 116E 11B4;B8F5;1105 116E 11B4; # (룵; 룵; 룵; 룵; 룵; ) HANGUL SYLLABLE RULT
+B8F6;B8F6;1105 116E 11B5;B8F6;1105 116E 11B5; # (룶; 룶; 룶; 룶; 룶; ) HANGUL SYLLABLE RULP
+B8F7;B8F7;1105 116E 11B6;B8F7;1105 116E 11B6; # (룷; 룷; 룷; 룷; 룷; ) HANGUL SYLLABLE RULH
+B8F8;B8F8;1105 116E 11B7;B8F8;1105 116E 11B7; # (룸; 룸; 룸; 룸; 룸; ) HANGUL SYLLABLE RUM
+B8F9;B8F9;1105 116E 11B8;B8F9;1105 116E 11B8; # (룹; 룹; 룹; 룹; 룹; ) HANGUL SYLLABLE RUB
+B8FA;B8FA;1105 116E 11B9;B8FA;1105 116E 11B9; # (룺; 룺; 룺; 룺; 룺; ) HANGUL SYLLABLE RUBS
+B8FB;B8FB;1105 116E 11BA;B8FB;1105 116E 11BA; # (룻; 룻; 룻; 룻; 룻; ) HANGUL SYLLABLE RUS
+B8FC;B8FC;1105 116E 11BB;B8FC;1105 116E 11BB; # (룼; 룼; 룼; 룼; 룼; ) HANGUL SYLLABLE RUSS
+B8FD;B8FD;1105 116E 11BC;B8FD;1105 116E 11BC; # (룽; 룽; 룽; 룽; 룽; ) HANGUL SYLLABLE RUNG
+B8FE;B8FE;1105 116E 11BD;B8FE;1105 116E 11BD; # (룾; 룾; 룾; 룾; 룾; ) HANGUL SYLLABLE RUJ
+B8FF;B8FF;1105 116E 11BE;B8FF;1105 116E 11BE; # (룿; 룿; 룿; 룿; 룿; ) HANGUL SYLLABLE RUC
+B900;B900;1105 116E 11BF;B900;1105 116E 11BF; # (뤀; 뤀; 뤀; 뤀; 뤀; ) HANGUL SYLLABLE RUK
+B901;B901;1105 116E 11C0;B901;1105 116E 11C0; # (뤁; 뤁; 뤁; 뤁; 뤁; ) HANGUL SYLLABLE RUT
+B902;B902;1105 116E 11C1;B902;1105 116E 11C1; # (뤂; 뤂; 뤂; 뤂; 뤂; ) HANGUL SYLLABLE RUP
+B903;B903;1105 116E 11C2;B903;1105 116E 11C2; # (뤃; 뤃; 뤃; 뤃; 뤃; ) HANGUL SYLLABLE RUH
+B904;B904;1105 116F;B904;1105 116F; # (뤄; 뤄; 뤄; 뤄; 뤄; ) HANGUL SYLLABLE RWEO
+B905;B905;1105 116F 11A8;B905;1105 116F 11A8; # (뤅; 뤅; 뤅; 뤅; 뤅; ) HANGUL SYLLABLE RWEOG
+B906;B906;1105 116F 11A9;B906;1105 116F 11A9; # (뤆; 뤆; 뤆; 뤆; 뤆; ) HANGUL SYLLABLE RWEOGG
+B907;B907;1105 116F 11AA;B907;1105 116F 11AA; # (뤇; 뤇; 뤇; 뤇; 뤇; ) HANGUL SYLLABLE RWEOGS
+B908;B908;1105 116F 11AB;B908;1105 116F 11AB; # (뤈; 뤈; 뤈; 뤈; 뤈; ) HANGUL SYLLABLE RWEON
+B909;B909;1105 116F 11AC;B909;1105 116F 11AC; # (뤉; 뤉; 뤉; 뤉; 뤉; ) HANGUL SYLLABLE RWEONJ
+B90A;B90A;1105 116F 11AD;B90A;1105 116F 11AD; # (뤊; 뤊; 뤊; 뤊; 뤊; ) HANGUL SYLLABLE RWEONH
+B90B;B90B;1105 116F 11AE;B90B;1105 116F 11AE; # (뤋; 뤋; 뤋; 뤋; 뤋; ) HANGUL SYLLABLE RWEOD
+B90C;B90C;1105 116F 11AF;B90C;1105 116F 11AF; # (뤌; 뤌; 뤌; 뤌; 뤌; ) HANGUL SYLLABLE RWEOL
+B90D;B90D;1105 116F 11B0;B90D;1105 116F 11B0; # (뤍; 뤍; 뤍; 뤍; 뤍; ) HANGUL SYLLABLE RWEOLG
+B90E;B90E;1105 116F 11B1;B90E;1105 116F 11B1; # (뤎; 뤎; 뤎; 뤎; 뤎; ) HANGUL SYLLABLE RWEOLM
+B90F;B90F;1105 116F 11B2;B90F;1105 116F 11B2; # (뤏; 뤏; 뤏; 뤏; 뤏; ) HANGUL SYLLABLE RWEOLB
+B910;B910;1105 116F 11B3;B910;1105 116F 11B3; # (뤐; 뤐; 뤐; 뤐; 뤐; ) HANGUL SYLLABLE RWEOLS
+B911;B911;1105 116F 11B4;B911;1105 116F 11B4; # (뤑; 뤑; 뤑; 뤑; 뤑; ) HANGUL SYLLABLE RWEOLT
+B912;B912;1105 116F 11B5;B912;1105 116F 11B5; # (뤒; 뤒; 뤒; 뤒; 뤒; ) HANGUL SYLLABLE RWEOLP
+B913;B913;1105 116F 11B6;B913;1105 116F 11B6; # (뤓; 뤓; 뤓; 뤓; 뤓; ) HANGUL SYLLABLE RWEOLH
+B914;B914;1105 116F 11B7;B914;1105 116F 11B7; # (뤔; 뤔; 뤔; 뤔; 뤔; ) HANGUL SYLLABLE RWEOM
+B915;B915;1105 116F 11B8;B915;1105 116F 11B8; # (뤕; 뤕; 뤕; 뤕; 뤕; ) HANGUL SYLLABLE RWEOB
+B916;B916;1105 116F 11B9;B916;1105 116F 11B9; # (뤖; 뤖; 뤖; 뤖; 뤖; ) HANGUL SYLLABLE RWEOBS
+B917;B917;1105 116F 11BA;B917;1105 116F 11BA; # (뤗; 뤗; 뤗; 뤗; 뤗; ) HANGUL SYLLABLE RWEOS
+B918;B918;1105 116F 11BB;B918;1105 116F 11BB; # (뤘; 뤘; 뤘; 뤘; 뤘; ) HANGUL SYLLABLE RWEOSS
+B919;B919;1105 116F 11BC;B919;1105 116F 11BC; # (뤙; 뤙; 뤙; 뤙; 뤙; ) HANGUL SYLLABLE RWEONG
+B91A;B91A;1105 116F 11BD;B91A;1105 116F 11BD; # (뤚; 뤚; 뤚; 뤚; 뤚; ) HANGUL SYLLABLE RWEOJ
+B91B;B91B;1105 116F 11BE;B91B;1105 116F 11BE; # (뤛; 뤛; 뤛; 뤛; 뤛; ) HANGUL SYLLABLE RWEOC
+B91C;B91C;1105 116F 11BF;B91C;1105 116F 11BF; # (뤜; 뤜; 뤜; 뤜; 뤜; ) HANGUL SYLLABLE RWEOK
+B91D;B91D;1105 116F 11C0;B91D;1105 116F 11C0; # (뤝; 뤝; 뤝; 뤝; 뤝; ) HANGUL SYLLABLE RWEOT
+B91E;B91E;1105 116F 11C1;B91E;1105 116F 11C1; # (뤞; 뤞; 뤞; 뤞; 뤞; ) HANGUL SYLLABLE RWEOP
+B91F;B91F;1105 116F 11C2;B91F;1105 116F 11C2; # (뤟; 뤟; 뤟; 뤟; 뤟; ) HANGUL SYLLABLE RWEOH
+B920;B920;1105 1170;B920;1105 1170; # (뤠; 뤠; 뤠; 뤠; 뤠; ) HANGUL SYLLABLE RWE
+B921;B921;1105 1170 11A8;B921;1105 1170 11A8; # (뤡; 뤡; 뤡; 뤡; 뤡; ) HANGUL SYLLABLE RWEG
+B922;B922;1105 1170 11A9;B922;1105 1170 11A9; # (뤢; 뤢; 뤢; 뤢; 뤢; ) HANGUL SYLLABLE RWEGG
+B923;B923;1105 1170 11AA;B923;1105 1170 11AA; # (뤣; 뤣; 뤣; 뤣; 뤣; ) HANGUL SYLLABLE RWEGS
+B924;B924;1105 1170 11AB;B924;1105 1170 11AB; # (뤤; 뤤; 뤤; 뤤; 뤤; ) HANGUL SYLLABLE RWEN
+B925;B925;1105 1170 11AC;B925;1105 1170 11AC; # (뤥; 뤥; 뤥; 뤥; 뤥; ) HANGUL SYLLABLE RWENJ
+B926;B926;1105 1170 11AD;B926;1105 1170 11AD; # (뤦; 뤦; 뤦; 뤦; 뤦; ) HANGUL SYLLABLE RWENH
+B927;B927;1105 1170 11AE;B927;1105 1170 11AE; # (뤧; 뤧; 뤧; 뤧; 뤧; ) HANGUL SYLLABLE RWED
+B928;B928;1105 1170 11AF;B928;1105 1170 11AF; # (뤨; 뤨; 뤨; 뤨; 뤨; ) HANGUL SYLLABLE RWEL
+B929;B929;1105 1170 11B0;B929;1105 1170 11B0; # (뤩; 뤩; 뤩; 뤩; 뤩; ) HANGUL SYLLABLE RWELG
+B92A;B92A;1105 1170 11B1;B92A;1105 1170 11B1; # (뤪; 뤪; 뤪; 뤪; 뤪; ) HANGUL SYLLABLE RWELM
+B92B;B92B;1105 1170 11B2;B92B;1105 1170 11B2; # (뤫; 뤫; 뤫; 뤫; 뤫; ) HANGUL SYLLABLE RWELB
+B92C;B92C;1105 1170 11B3;B92C;1105 1170 11B3; # (뤬; 뤬; 뤬; 뤬; 뤬; ) HANGUL SYLLABLE RWELS
+B92D;B92D;1105 1170 11B4;B92D;1105 1170 11B4; # (뤭; 뤭; 뤭; 뤭; 뤭; ) HANGUL SYLLABLE RWELT
+B92E;B92E;1105 1170 11B5;B92E;1105 1170 11B5; # (뤮; 뤮; 뤮; 뤮; 뤮; ) HANGUL SYLLABLE RWELP
+B92F;B92F;1105 1170 11B6;B92F;1105 1170 11B6; # (뤯; 뤯; 뤯; 뤯; 뤯; ) HANGUL SYLLABLE RWELH
+B930;B930;1105 1170 11B7;B930;1105 1170 11B7; # (뤰; 뤰; 뤰; 뤰; 뤰; ) HANGUL SYLLABLE RWEM
+B931;B931;1105 1170 11B8;B931;1105 1170 11B8; # (뤱; 뤱; 뤱; 뤱; 뤱; ) HANGUL SYLLABLE RWEB
+B932;B932;1105 1170 11B9;B932;1105 1170 11B9; # (뤲; 뤲; 뤲; 뤲; 뤲; ) HANGUL SYLLABLE RWEBS
+B933;B933;1105 1170 11BA;B933;1105 1170 11BA; # (뤳; 뤳; 뤳; 뤳; 뤳; ) HANGUL SYLLABLE RWES
+B934;B934;1105 1170 11BB;B934;1105 1170 11BB; # (뤴; 뤴; 뤴; 뤴; 뤴; ) HANGUL SYLLABLE RWESS
+B935;B935;1105 1170 11BC;B935;1105 1170 11BC; # (뤵; 뤵; 뤵; 뤵; 뤵; ) HANGUL SYLLABLE RWENG
+B936;B936;1105 1170 11BD;B936;1105 1170 11BD; # (뤶; 뤶; 뤶; 뤶; 뤶; ) HANGUL SYLLABLE RWEJ
+B937;B937;1105 1170 11BE;B937;1105 1170 11BE; # (뤷; 뤷; 뤷; 뤷; 뤷; ) HANGUL SYLLABLE RWEC
+B938;B938;1105 1170 11BF;B938;1105 1170 11BF; # (뤸; 뤸; 뤸; 뤸; 뤸; ) HANGUL SYLLABLE RWEK
+B939;B939;1105 1170 11C0;B939;1105 1170 11C0; # (뤹; 뤹; 뤹; 뤹; 뤹; ) HANGUL SYLLABLE RWET
+B93A;B93A;1105 1170 11C1;B93A;1105 1170 11C1; # (뤺; 뤺; 뤺; 뤺; 뤺; ) HANGUL SYLLABLE RWEP
+B93B;B93B;1105 1170 11C2;B93B;1105 1170 11C2; # (뤻; 뤻; 뤻; 뤻; 뤻; ) HANGUL SYLLABLE RWEH
+B93C;B93C;1105 1171;B93C;1105 1171; # (뤼; 뤼; 뤼; 뤼; 뤼; ) HANGUL SYLLABLE RWI
+B93D;B93D;1105 1171 11A8;B93D;1105 1171 11A8; # (뤽; 뤽; 뤽; 뤽; 뤽; ) HANGUL SYLLABLE RWIG
+B93E;B93E;1105 1171 11A9;B93E;1105 1171 11A9; # (뤾; 뤾; 뤾; 뤾; 뤾; ) HANGUL SYLLABLE RWIGG
+B93F;B93F;1105 1171 11AA;B93F;1105 1171 11AA; # (뤿; 뤿; 뤿; 뤿; 뤿; ) HANGUL SYLLABLE RWIGS
+B940;B940;1105 1171 11AB;B940;1105 1171 11AB; # (륀; 륀; 륀; 륀; 륀; ) HANGUL SYLLABLE RWIN
+B941;B941;1105 1171 11AC;B941;1105 1171 11AC; # (륁; 륁; 륁; 륁; 륁; ) HANGUL SYLLABLE RWINJ
+B942;B942;1105 1171 11AD;B942;1105 1171 11AD; # (륂; 륂; 륂; 륂; 륂; ) HANGUL SYLLABLE RWINH
+B943;B943;1105 1171 11AE;B943;1105 1171 11AE; # (륃; 륃; 륃; 륃; 륃; ) HANGUL SYLLABLE RWID
+B944;B944;1105 1171 11AF;B944;1105 1171 11AF; # (륄; 륄; 륄; 륄; 륄; ) HANGUL SYLLABLE RWIL
+B945;B945;1105 1171 11B0;B945;1105 1171 11B0; # (륅; 륅; 륅; 륅; 륅; ) HANGUL SYLLABLE RWILG
+B946;B946;1105 1171 11B1;B946;1105 1171 11B1; # (륆; 륆; 륆; 륆; 륆; ) HANGUL SYLLABLE RWILM
+B947;B947;1105 1171 11B2;B947;1105 1171 11B2; # (륇; 륇; 륇; 륇; 륇; ) HANGUL SYLLABLE RWILB
+B948;B948;1105 1171 11B3;B948;1105 1171 11B3; # (륈; 륈; 륈; 륈; 륈; ) HANGUL SYLLABLE RWILS
+B949;B949;1105 1171 11B4;B949;1105 1171 11B4; # (륉; 륉; 륉; 륉; 륉; ) HANGUL SYLLABLE RWILT
+B94A;B94A;1105 1171 11B5;B94A;1105 1171 11B5; # (륊; 륊; 륊; 륊; 륊; ) HANGUL SYLLABLE RWILP
+B94B;B94B;1105 1171 11B6;B94B;1105 1171 11B6; # (륋; 륋; 륋; 륋; 륋; ) HANGUL SYLLABLE RWILH
+B94C;B94C;1105 1171 11B7;B94C;1105 1171 11B7; # (륌; 륌; 륌; 륌; 륌; ) HANGUL SYLLABLE RWIM
+B94D;B94D;1105 1171 11B8;B94D;1105 1171 11B8; # (륍; 륍; 륍; 륍; 륍; ) HANGUL SYLLABLE RWIB
+B94E;B94E;1105 1171 11B9;B94E;1105 1171 11B9; # (륎; 륎; 륎; 륎; 륎; ) HANGUL SYLLABLE RWIBS
+B94F;B94F;1105 1171 11BA;B94F;1105 1171 11BA; # (륏; 륏; 륏; 륏; 륏; ) HANGUL SYLLABLE RWIS
+B950;B950;1105 1171 11BB;B950;1105 1171 11BB; # (륐; 륐; 륐; 륐; 륐; ) HANGUL SYLLABLE RWISS
+B951;B951;1105 1171 11BC;B951;1105 1171 11BC; # (륑; 륑; 륑; 륑; 륑; ) HANGUL SYLLABLE RWING
+B952;B952;1105 1171 11BD;B952;1105 1171 11BD; # (륒; 륒; 륒; 륒; 륒; ) HANGUL SYLLABLE RWIJ
+B953;B953;1105 1171 11BE;B953;1105 1171 11BE; # (륓; 륓; 륓; 륓; 륓; ) HANGUL SYLLABLE RWIC
+B954;B954;1105 1171 11BF;B954;1105 1171 11BF; # (륔; 륔; 륔; 륔; 륔; ) HANGUL SYLLABLE RWIK
+B955;B955;1105 1171 11C0;B955;1105 1171 11C0; # (륕; 륕; 륕; 륕; 륕; ) HANGUL SYLLABLE RWIT
+B956;B956;1105 1171 11C1;B956;1105 1171 11C1; # (륖; 륖; 륖; 륖; 륖; ) HANGUL SYLLABLE RWIP
+B957;B957;1105 1171 11C2;B957;1105 1171 11C2; # (륗; 륗; 륗; 륗; 륗; ) HANGUL SYLLABLE RWIH
+B958;B958;1105 1172;B958;1105 1172; # (류; 류; 류; 류; 류; ) HANGUL SYLLABLE RYU
+B959;B959;1105 1172 11A8;B959;1105 1172 11A8; # (륙; 륙; 륙; 륙; 륙; ) HANGUL SYLLABLE RYUG
+B95A;B95A;1105 1172 11A9;B95A;1105 1172 11A9; # (륚; 륚; 륚; 륚; 륚; ) HANGUL SYLLABLE RYUGG
+B95B;B95B;1105 1172 11AA;B95B;1105 1172 11AA; # (륛; 륛; 륛; 륛; 륛; ) HANGUL SYLLABLE RYUGS
+B95C;B95C;1105 1172 11AB;B95C;1105 1172 11AB; # (륜; 륜; 륜; 륜; 륜; ) HANGUL SYLLABLE RYUN
+B95D;B95D;1105 1172 11AC;B95D;1105 1172 11AC; # (륝; 륝; 륝; 륝; 륝; ) HANGUL SYLLABLE RYUNJ
+B95E;B95E;1105 1172 11AD;B95E;1105 1172 11AD; # (륞; 륞; 륞; 륞; 륞; ) HANGUL SYLLABLE RYUNH
+B95F;B95F;1105 1172 11AE;B95F;1105 1172 11AE; # (륟; 륟; 륟; 륟; 륟; ) HANGUL SYLLABLE RYUD
+B960;B960;1105 1172 11AF;B960;1105 1172 11AF; # (률; 률; 률; 률; 률; ) HANGUL SYLLABLE RYUL
+B961;B961;1105 1172 11B0;B961;1105 1172 11B0; # (륡; 륡; 륡; 륡; 륡; ) HANGUL SYLLABLE RYULG
+B962;B962;1105 1172 11B1;B962;1105 1172 11B1; # (륢; 륢; 륢; 륢; 륢; ) HANGUL SYLLABLE RYULM
+B963;B963;1105 1172 11B2;B963;1105 1172 11B2; # (륣; 륣; 륣; 륣; 륣; ) HANGUL SYLLABLE RYULB
+B964;B964;1105 1172 11B3;B964;1105 1172 11B3; # (륤; 륤; 륤; 륤; 륤; ) HANGUL SYLLABLE RYULS
+B965;B965;1105 1172 11B4;B965;1105 1172 11B4; # (륥; 륥; 륥; 륥; 륥; ) HANGUL SYLLABLE RYULT
+B966;B966;1105 1172 11B5;B966;1105 1172 11B5; # (륦; 륦; 륦; 륦; 륦; ) HANGUL SYLLABLE RYULP
+B967;B967;1105 1172 11B6;B967;1105 1172 11B6; # (륧; 륧; 륧; 륧; 륧; ) HANGUL SYLLABLE RYULH
+B968;B968;1105 1172 11B7;B968;1105 1172 11B7; # (륨; 륨; 륨; 륨; 륨; ) HANGUL SYLLABLE RYUM
+B969;B969;1105 1172 11B8;B969;1105 1172 11B8; # (륩; 륩; 륩; 륩; 륩; ) HANGUL SYLLABLE RYUB
+B96A;B96A;1105 1172 11B9;B96A;1105 1172 11B9; # (륪; 륪; 륪; 륪; 륪; ) HANGUL SYLLABLE RYUBS
+B96B;B96B;1105 1172 11BA;B96B;1105 1172 11BA; # (륫; 륫; 륫; 륫; 륫; ) HANGUL SYLLABLE RYUS
+B96C;B96C;1105 1172 11BB;B96C;1105 1172 11BB; # (륬; 륬; 륬; 륬; 륬; ) HANGUL SYLLABLE RYUSS
+B96D;B96D;1105 1172 11BC;B96D;1105 1172 11BC; # (륭; 륭; 륭; 륭; 륭; ) HANGUL SYLLABLE RYUNG
+B96E;B96E;1105 1172 11BD;B96E;1105 1172 11BD; # (륮; 륮; 륮; 륮; 륮; ) HANGUL SYLLABLE RYUJ
+B96F;B96F;1105 1172 11BE;B96F;1105 1172 11BE; # (륯; 륯; 륯; 륯; 륯; ) HANGUL SYLLABLE RYUC
+B970;B970;1105 1172 11BF;B970;1105 1172 11BF; # (륰; 륰; 륰; 륰; 륰; ) HANGUL SYLLABLE RYUK
+B971;B971;1105 1172 11C0;B971;1105 1172 11C0; # (륱; 륱; 륱; 륱; 륱; ) HANGUL SYLLABLE RYUT
+B972;B972;1105 1172 11C1;B972;1105 1172 11C1; # (륲; 륲; 륲; 륲; 륲; ) HANGUL SYLLABLE RYUP
+B973;B973;1105 1172 11C2;B973;1105 1172 11C2; # (륳; 륳; 륳; 륳; 륳; ) HANGUL SYLLABLE RYUH
+B974;B974;1105 1173;B974;1105 1173; # (르; 르; 르; 르; 르; ) HANGUL SYLLABLE REU
+B975;B975;1105 1173 11A8;B975;1105 1173 11A8; # (륵; 륵; 륵; 륵; 륵; ) HANGUL SYLLABLE REUG
+B976;B976;1105 1173 11A9;B976;1105 1173 11A9; # (륶; 륶; 륶; 륶; 륶; ) HANGUL SYLLABLE REUGG
+B977;B977;1105 1173 11AA;B977;1105 1173 11AA; # (륷; 륷; 륷; 륷; 륷; ) HANGUL SYLLABLE REUGS
+B978;B978;1105 1173 11AB;B978;1105 1173 11AB; # (른; 른; 른; 른; 른; ) HANGUL SYLLABLE REUN
+B979;B979;1105 1173 11AC;B979;1105 1173 11AC; # (륹; 륹; 륹; 륹; 륹; ) HANGUL SYLLABLE REUNJ
+B97A;B97A;1105 1173 11AD;B97A;1105 1173 11AD; # (륺; 륺; 륺; 륺; 륺; ) HANGUL SYLLABLE REUNH
+B97B;B97B;1105 1173 11AE;B97B;1105 1173 11AE; # (륻; 륻; 륻; 륻; 륻; ) HANGUL SYLLABLE REUD
+B97C;B97C;1105 1173 11AF;B97C;1105 1173 11AF; # (를; 를; 를; 를; 를; ) HANGUL SYLLABLE REUL
+B97D;B97D;1105 1173 11B0;B97D;1105 1173 11B0; # (륽; 륽; 륽; 륽; 륽; ) HANGUL SYLLABLE REULG
+B97E;B97E;1105 1173 11B1;B97E;1105 1173 11B1; # (륾; 륾; 륾; 륾; 륾; ) HANGUL SYLLABLE REULM
+B97F;B97F;1105 1173 11B2;B97F;1105 1173 11B2; # (륿; 륿; 륿; 륿; 륿; ) HANGUL SYLLABLE REULB
+B980;B980;1105 1173 11B3;B980;1105 1173 11B3; # (릀; 릀; 릀; 릀; 릀; ) HANGUL SYLLABLE REULS
+B981;B981;1105 1173 11B4;B981;1105 1173 11B4; # (릁; 릁; 릁; 릁; 릁; ) HANGUL SYLLABLE REULT
+B982;B982;1105 1173 11B5;B982;1105 1173 11B5; # (릂; 릂; 릂; 릂; 릂; ) HANGUL SYLLABLE REULP
+B983;B983;1105 1173 11B6;B983;1105 1173 11B6; # (릃; 릃; 릃; 릃; 릃; ) HANGUL SYLLABLE REULH
+B984;B984;1105 1173 11B7;B984;1105 1173 11B7; # (름; 름; 름; 름; 름; ) HANGUL SYLLABLE REUM
+B985;B985;1105 1173 11B8;B985;1105 1173 11B8; # (릅; 릅; 릅; 릅; 릅; ) HANGUL SYLLABLE REUB
+B986;B986;1105 1173 11B9;B986;1105 1173 11B9; # (릆; 릆; 릆; 릆; 릆; ) HANGUL SYLLABLE REUBS
+B987;B987;1105 1173 11BA;B987;1105 1173 11BA; # (릇; 릇; 릇; 릇; 릇; ) HANGUL SYLLABLE REUS
+B988;B988;1105 1173 11BB;B988;1105 1173 11BB; # (릈; 릈; 릈; 릈; 릈; ) HANGUL SYLLABLE REUSS
+B989;B989;1105 1173 11BC;B989;1105 1173 11BC; # (릉; 릉; 릉; 릉; 릉; ) HANGUL SYLLABLE REUNG
+B98A;B98A;1105 1173 11BD;B98A;1105 1173 11BD; # (릊; 릊; 릊; 릊; 릊; ) HANGUL SYLLABLE REUJ
+B98B;B98B;1105 1173 11BE;B98B;1105 1173 11BE; # (릋; 릋; 릋; 릋; 릋; ) HANGUL SYLLABLE REUC
+B98C;B98C;1105 1173 11BF;B98C;1105 1173 11BF; # (릌; 릌; 릌; 릌; 릌; ) HANGUL SYLLABLE REUK
+B98D;B98D;1105 1173 11C0;B98D;1105 1173 11C0; # (릍; 릍; 릍; 릍; 릍; ) HANGUL SYLLABLE REUT
+B98E;B98E;1105 1173 11C1;B98E;1105 1173 11C1; # (릎; 릎; 릎; 릎; 릎; ) HANGUL SYLLABLE REUP
+B98F;B98F;1105 1173 11C2;B98F;1105 1173 11C2; # (릏; 릏; 릏; 릏; 릏; ) HANGUL SYLLABLE REUH
+B990;B990;1105 1174;B990;1105 1174; # (릐; 릐; 릐; 릐; 릐; ) HANGUL SYLLABLE RYI
+B991;B991;1105 1174 11A8;B991;1105 1174 11A8; # (릑; 릑; 릑; 릑; 릑; ) HANGUL SYLLABLE RYIG
+B992;B992;1105 1174 11A9;B992;1105 1174 11A9; # (릒; 릒; 릒; 릒; 릒; ) HANGUL SYLLABLE RYIGG
+B993;B993;1105 1174 11AA;B993;1105 1174 11AA; # (릓; 릓; 릓; 릓; 릓; ) HANGUL SYLLABLE RYIGS
+B994;B994;1105 1174 11AB;B994;1105 1174 11AB; # (릔; 릔; 릔; 릔; 릔; ) HANGUL SYLLABLE RYIN
+B995;B995;1105 1174 11AC;B995;1105 1174 11AC; # (릕; 릕; 릕; 릕; 릕; ) HANGUL SYLLABLE RYINJ
+B996;B996;1105 1174 11AD;B996;1105 1174 11AD; # (릖; 릖; 릖; 릖; 릖; ) HANGUL SYLLABLE RYINH
+B997;B997;1105 1174 11AE;B997;1105 1174 11AE; # (릗; 릗; 릗; 릗; 릗; ) HANGUL SYLLABLE RYID
+B998;B998;1105 1174 11AF;B998;1105 1174 11AF; # (릘; 릘; 릘; 릘; 릘; ) HANGUL SYLLABLE RYIL
+B999;B999;1105 1174 11B0;B999;1105 1174 11B0; # (릙; 릙; 릙; 릙; 릙; ) HANGUL SYLLABLE RYILG
+B99A;B99A;1105 1174 11B1;B99A;1105 1174 11B1; # (릚; 릚; 릚; 릚; 릚; ) HANGUL SYLLABLE RYILM
+B99B;B99B;1105 1174 11B2;B99B;1105 1174 11B2; # (릛; 릛; 릛; 릛; 릛; ) HANGUL SYLLABLE RYILB
+B99C;B99C;1105 1174 11B3;B99C;1105 1174 11B3; # (릜; 릜; 릜; 릜; 릜; ) HANGUL SYLLABLE RYILS
+B99D;B99D;1105 1174 11B4;B99D;1105 1174 11B4; # (릝; 릝; 릝; 릝; 릝; ) HANGUL SYLLABLE RYILT
+B99E;B99E;1105 1174 11B5;B99E;1105 1174 11B5; # (릞; 릞; 릞; 릞; 릞; ) HANGUL SYLLABLE RYILP
+B99F;B99F;1105 1174 11B6;B99F;1105 1174 11B6; # (릟; 릟; 릟; 릟; 릟; ) HANGUL SYLLABLE RYILH
+B9A0;B9A0;1105 1174 11B7;B9A0;1105 1174 11B7; # (릠; 릠; 릠; 릠; 릠; ) HANGUL SYLLABLE RYIM
+B9A1;B9A1;1105 1174 11B8;B9A1;1105 1174 11B8; # (릡; 릡; 릡; 릡; 릡; ) HANGUL SYLLABLE RYIB
+B9A2;B9A2;1105 1174 11B9;B9A2;1105 1174 11B9; # (릢; 릢; 릢; 릢; 릢; ) HANGUL SYLLABLE RYIBS
+B9A3;B9A3;1105 1174 11BA;B9A3;1105 1174 11BA; # (릣; 릣; 릣; 릣; 릣; ) HANGUL SYLLABLE RYIS
+B9A4;B9A4;1105 1174 11BB;B9A4;1105 1174 11BB; # (릤; 릤; 릤; 릤; 릤; ) HANGUL SYLLABLE RYISS
+B9A5;B9A5;1105 1174 11BC;B9A5;1105 1174 11BC; # (릥; 릥; 릥; 릥; 릥; ) HANGUL SYLLABLE RYING
+B9A6;B9A6;1105 1174 11BD;B9A6;1105 1174 11BD; # (릦; 릦; 릦; 릦; 릦; ) HANGUL SYLLABLE RYIJ
+B9A7;B9A7;1105 1174 11BE;B9A7;1105 1174 11BE; # (릧; 릧; 릧; 릧; 릧; ) HANGUL SYLLABLE RYIC
+B9A8;B9A8;1105 1174 11BF;B9A8;1105 1174 11BF; # (릨; 릨; 릨; 릨; 릨; ) HANGUL SYLLABLE RYIK
+B9A9;B9A9;1105 1174 11C0;B9A9;1105 1174 11C0; # (릩; 릩; 릩; 릩; 릩; ) HANGUL SYLLABLE RYIT
+B9AA;B9AA;1105 1174 11C1;B9AA;1105 1174 11C1; # (릪; 릪; 릪; 릪; 릪; ) HANGUL SYLLABLE RYIP
+B9AB;B9AB;1105 1174 11C2;B9AB;1105 1174 11C2; # (릫; 릫; 릫; 릫; 릫; ) HANGUL SYLLABLE RYIH
+B9AC;B9AC;1105 1175;B9AC;1105 1175; # (리; 리; 리; 리; 리; ) HANGUL SYLLABLE RI
+B9AD;B9AD;1105 1175 11A8;B9AD;1105 1175 11A8; # (릭; 릭; 릭; 릭; 릭; ) HANGUL SYLLABLE RIG
+B9AE;B9AE;1105 1175 11A9;B9AE;1105 1175 11A9; # (릮; 릮; 릮; 릮; 릮; ) HANGUL SYLLABLE RIGG
+B9AF;B9AF;1105 1175 11AA;B9AF;1105 1175 11AA; # (릯; 릯; 릯; 릯; 릯; ) HANGUL SYLLABLE RIGS
+B9B0;B9B0;1105 1175 11AB;B9B0;1105 1175 11AB; # (린; 린; 린; 린; 린; ) HANGUL SYLLABLE RIN
+B9B1;B9B1;1105 1175 11AC;B9B1;1105 1175 11AC; # (릱; 릱; 릱; 릱; 릱; ) HANGUL SYLLABLE RINJ
+B9B2;B9B2;1105 1175 11AD;B9B2;1105 1175 11AD; # (릲; 릲; 릲; 릲; 릲; ) HANGUL SYLLABLE RINH
+B9B3;B9B3;1105 1175 11AE;B9B3;1105 1175 11AE; # (릳; 릳; 릳; 릳; 릳; ) HANGUL SYLLABLE RID
+B9B4;B9B4;1105 1175 11AF;B9B4;1105 1175 11AF; # (릴; 릴; 릴; 릴; 릴; ) HANGUL SYLLABLE RIL
+B9B5;B9B5;1105 1175 11B0;B9B5;1105 1175 11B0; # (릵; 릵; 릵; 릵; 릵; ) HANGUL SYLLABLE RILG
+B9B6;B9B6;1105 1175 11B1;B9B6;1105 1175 11B1; # (릶; 릶; 릶; 릶; 릶; ) HANGUL SYLLABLE RILM
+B9B7;B9B7;1105 1175 11B2;B9B7;1105 1175 11B2; # (릷; 릷; 릷; 릷; 릷; ) HANGUL SYLLABLE RILB
+B9B8;B9B8;1105 1175 11B3;B9B8;1105 1175 11B3; # (릸; 릸; 릸; 릸; 릸; ) HANGUL SYLLABLE RILS
+B9B9;B9B9;1105 1175 11B4;B9B9;1105 1175 11B4; # (릹; 릹; 릹; 릹; 릹; ) HANGUL SYLLABLE RILT
+B9BA;B9BA;1105 1175 11B5;B9BA;1105 1175 11B5; # (릺; 릺; 릺; 릺; 릺; ) HANGUL SYLLABLE RILP
+B9BB;B9BB;1105 1175 11B6;B9BB;1105 1175 11B6; # (릻; 릻; 릻; 릻; 릻; ) HANGUL SYLLABLE RILH
+B9BC;B9BC;1105 1175 11B7;B9BC;1105 1175 11B7; # (림; 림; 림; 림; 림; ) HANGUL SYLLABLE RIM
+B9BD;B9BD;1105 1175 11B8;B9BD;1105 1175 11B8; # (립; 립; 립; 립; 립; ) HANGUL SYLLABLE RIB
+B9BE;B9BE;1105 1175 11B9;B9BE;1105 1175 11B9; # (릾; 릾; 릾; 릾; 릾; ) HANGUL SYLLABLE RIBS
+B9BF;B9BF;1105 1175 11BA;B9BF;1105 1175 11BA; # (릿; 릿; 릿; 릿; 릿; ) HANGUL SYLLABLE RIS
+B9C0;B9C0;1105 1175 11BB;B9C0;1105 1175 11BB; # (맀; 맀; 맀; 맀; 맀; ) HANGUL SYLLABLE RISS
+B9C1;B9C1;1105 1175 11BC;B9C1;1105 1175 11BC; # (링; 링; 링; 링; 링; ) HANGUL SYLLABLE RING
+B9C2;B9C2;1105 1175 11BD;B9C2;1105 1175 11BD; # (맂; 맂; 맂; 맂; 맂; ) HANGUL SYLLABLE RIJ
+B9C3;B9C3;1105 1175 11BE;B9C3;1105 1175 11BE; # (맃; 맃; 맃; 맃; 맃; ) HANGUL SYLLABLE RIC
+B9C4;B9C4;1105 1175 11BF;B9C4;1105 1175 11BF; # (맄; 맄; 맄; 맄; 맄; ) HANGUL SYLLABLE RIK
+B9C5;B9C5;1105 1175 11C0;B9C5;1105 1175 11C0; # (맅; 맅; 맅; 맅; 맅; ) HANGUL SYLLABLE RIT
+B9C6;B9C6;1105 1175 11C1;B9C6;1105 1175 11C1; # (맆; 맆; 맆; 맆; 맆; ) HANGUL SYLLABLE RIP
+B9C7;B9C7;1105 1175 11C2;B9C7;1105 1175 11C2; # (맇; 맇; 맇; 맇; 맇; ) HANGUL SYLLABLE RIH
+B9C8;B9C8;1106 1161;B9C8;1106 1161; # (마; 마; 마; 마; 마; ) HANGUL SYLLABLE MA
+B9C9;B9C9;1106 1161 11A8;B9C9;1106 1161 11A8; # (막; 막; 막; 막; 막; ) HANGUL SYLLABLE MAG
+B9CA;B9CA;1106 1161 11A9;B9CA;1106 1161 11A9; # (맊; 맊; 맊; 맊; 맊; ) HANGUL SYLLABLE MAGG
+B9CB;B9CB;1106 1161 11AA;B9CB;1106 1161 11AA; # (맋; 맋; 맋; 맋; 맋; ) HANGUL SYLLABLE MAGS
+B9CC;B9CC;1106 1161 11AB;B9CC;1106 1161 11AB; # (만; 만; 만; 만; 만; ) HANGUL SYLLABLE MAN
+B9CD;B9CD;1106 1161 11AC;B9CD;1106 1161 11AC; # (맍; 맍; 맍; 맍; 맍; ) HANGUL SYLLABLE MANJ
+B9CE;B9CE;1106 1161 11AD;B9CE;1106 1161 11AD; # (많; 많; 많; 많; 많; ) HANGUL SYLLABLE MANH
+B9CF;B9CF;1106 1161 11AE;B9CF;1106 1161 11AE; # (맏; 맏; 맏; 맏; 맏; ) HANGUL SYLLABLE MAD
+B9D0;B9D0;1106 1161 11AF;B9D0;1106 1161 11AF; # (말; 말; 말; 말; 말; ) HANGUL SYLLABLE MAL
+B9D1;B9D1;1106 1161 11B0;B9D1;1106 1161 11B0; # (맑; 맑; 맑; 맑; 맑; ) HANGUL SYLLABLE MALG
+B9D2;B9D2;1106 1161 11B1;B9D2;1106 1161 11B1; # (맒; 맒; 맒; 맒; 맒; ) HANGUL SYLLABLE MALM
+B9D3;B9D3;1106 1161 11B2;B9D3;1106 1161 11B2; # (맓; 맓; 맓; 맓; 맓; ) HANGUL SYLLABLE MALB
+B9D4;B9D4;1106 1161 11B3;B9D4;1106 1161 11B3; # (맔; 맔; 맔; 맔; 맔; ) HANGUL SYLLABLE MALS
+B9D5;B9D5;1106 1161 11B4;B9D5;1106 1161 11B4; # (맕; 맕; 맕; 맕; 맕; ) HANGUL SYLLABLE MALT
+B9D6;B9D6;1106 1161 11B5;B9D6;1106 1161 11B5; # (맖; 맖; 맖; 맖; 맖; ) HANGUL SYLLABLE MALP
+B9D7;B9D7;1106 1161 11B6;B9D7;1106 1161 11B6; # (맗; 맗; 맗; 맗; 맗; ) HANGUL SYLLABLE MALH
+B9D8;B9D8;1106 1161 11B7;B9D8;1106 1161 11B7; # (맘; 맘; 맘; 맘; 맘; ) HANGUL SYLLABLE MAM
+B9D9;B9D9;1106 1161 11B8;B9D9;1106 1161 11B8; # (맙; 맙; 맙; 맙; 맙; ) HANGUL SYLLABLE MAB
+B9DA;B9DA;1106 1161 11B9;B9DA;1106 1161 11B9; # (맚; 맚; 맚; 맚; 맚; ) HANGUL SYLLABLE MABS
+B9DB;B9DB;1106 1161 11BA;B9DB;1106 1161 11BA; # (맛; 맛; 맛; 맛; 맛; ) HANGUL SYLLABLE MAS
+B9DC;B9DC;1106 1161 11BB;B9DC;1106 1161 11BB; # (맜; 맜; 맜; 맜; 맜; ) HANGUL SYLLABLE MASS
+B9DD;B9DD;1106 1161 11BC;B9DD;1106 1161 11BC; # (망; 망; 망; 망; 망; ) HANGUL SYLLABLE MANG
+B9DE;B9DE;1106 1161 11BD;B9DE;1106 1161 11BD; # (맞; 맞; 맞; 맞; 맞; ) HANGUL SYLLABLE MAJ
+B9DF;B9DF;1106 1161 11BE;B9DF;1106 1161 11BE; # (맟; 맟; 맟; 맟; 맟; ) HANGUL SYLLABLE MAC
+B9E0;B9E0;1106 1161 11BF;B9E0;1106 1161 11BF; # (맠; 맠; 맠; 맠; 맠; ) HANGUL SYLLABLE MAK
+B9E1;B9E1;1106 1161 11C0;B9E1;1106 1161 11C0; # (맡; 맡; 맡; 맡; 맡; ) HANGUL SYLLABLE MAT
+B9E2;B9E2;1106 1161 11C1;B9E2;1106 1161 11C1; # (맢; 맢; 맢; 맢; 맢; ) HANGUL SYLLABLE MAP
+B9E3;B9E3;1106 1161 11C2;B9E3;1106 1161 11C2; # (맣; 맣; 맣; 맣; 맣; ) HANGUL SYLLABLE MAH
+B9E4;B9E4;1106 1162;B9E4;1106 1162; # (매; 매; 매; 매; 매; ) HANGUL SYLLABLE MAE
+B9E5;B9E5;1106 1162 11A8;B9E5;1106 1162 11A8; # (맥; 맥; 맥; 맥; 맥; ) HANGUL SYLLABLE MAEG
+B9E6;B9E6;1106 1162 11A9;B9E6;1106 1162 11A9; # (맦; 맦; 맦; 맦; 맦; ) HANGUL SYLLABLE MAEGG
+B9E7;B9E7;1106 1162 11AA;B9E7;1106 1162 11AA; # (맧; 맧; 맧; 맧; 맧; ) HANGUL SYLLABLE MAEGS
+B9E8;B9E8;1106 1162 11AB;B9E8;1106 1162 11AB; # (맨; 맨; 맨; 맨; 맨; ) HANGUL SYLLABLE MAEN
+B9E9;B9E9;1106 1162 11AC;B9E9;1106 1162 11AC; # (맩; 맩; 맩; 맩; 맩; ) HANGUL SYLLABLE MAENJ
+B9EA;B9EA;1106 1162 11AD;B9EA;1106 1162 11AD; # (맪; 맪; 맪; 맪; 맪; ) HANGUL SYLLABLE MAENH
+B9EB;B9EB;1106 1162 11AE;B9EB;1106 1162 11AE; # (맫; 맫; 맫; 맫; 맫; ) HANGUL SYLLABLE MAED
+B9EC;B9EC;1106 1162 11AF;B9EC;1106 1162 11AF; # (맬; 맬; 맬; 맬; 맬; ) HANGUL SYLLABLE MAEL
+B9ED;B9ED;1106 1162 11B0;B9ED;1106 1162 11B0; # (맭; 맭; 맭; 맭; 맭; ) HANGUL SYLLABLE MAELG
+B9EE;B9EE;1106 1162 11B1;B9EE;1106 1162 11B1; # (맮; 맮; 맮; 맮; 맮; ) HANGUL SYLLABLE MAELM
+B9EF;B9EF;1106 1162 11B2;B9EF;1106 1162 11B2; # (맯; 맯; 맯; 맯; 맯; ) HANGUL SYLLABLE MAELB
+B9F0;B9F0;1106 1162 11B3;B9F0;1106 1162 11B3; # (맰; 맰; 맰; 맰; 맰; ) HANGUL SYLLABLE MAELS
+B9F1;B9F1;1106 1162 11B4;B9F1;1106 1162 11B4; # (맱; 맱; 맱; 맱; 맱; ) HANGUL SYLLABLE MAELT
+B9F2;B9F2;1106 1162 11B5;B9F2;1106 1162 11B5; # (맲; 맲; 맲; 맲; 맲; ) HANGUL SYLLABLE MAELP
+B9F3;B9F3;1106 1162 11B6;B9F3;1106 1162 11B6; # (맳; 맳; 맳; 맳; 맳; ) HANGUL SYLLABLE MAELH
+B9F4;B9F4;1106 1162 11B7;B9F4;1106 1162 11B7; # (맴; 맴; 맴; 맴; 맴; ) HANGUL SYLLABLE MAEM
+B9F5;B9F5;1106 1162 11B8;B9F5;1106 1162 11B8; # (맵; 맵; 맵; 맵; 맵; ) HANGUL SYLLABLE MAEB
+B9F6;B9F6;1106 1162 11B9;B9F6;1106 1162 11B9; # (맶; 맶; 맶; 맶; 맶; ) HANGUL SYLLABLE MAEBS
+B9F7;B9F7;1106 1162 11BA;B9F7;1106 1162 11BA; # (맷; 맷; 맷; 맷; 맷; ) HANGUL SYLLABLE MAES
+B9F8;B9F8;1106 1162 11BB;B9F8;1106 1162 11BB; # (맸; 맸; 맸; 맸; 맸; ) HANGUL SYLLABLE MAESS
+B9F9;B9F9;1106 1162 11BC;B9F9;1106 1162 11BC; # (맹; 맹; 맹; 맹; 맹; ) HANGUL SYLLABLE MAENG
+B9FA;B9FA;1106 1162 11BD;B9FA;1106 1162 11BD; # (맺; 맺; 맺; 맺; 맺; ) HANGUL SYLLABLE MAEJ
+B9FB;B9FB;1106 1162 11BE;B9FB;1106 1162 11BE; # (맻; 맻; 맻; 맻; 맻; ) HANGUL SYLLABLE MAEC
+B9FC;B9FC;1106 1162 11BF;B9FC;1106 1162 11BF; # (맼; 맼; 맼; 맼; 맼; ) HANGUL SYLLABLE MAEK
+B9FD;B9FD;1106 1162 11C0;B9FD;1106 1162 11C0; # (맽; 맽; 맽; 맽; 맽; ) HANGUL SYLLABLE MAET
+B9FE;B9FE;1106 1162 11C1;B9FE;1106 1162 11C1; # (맾; 맾; 맾; 맾; 맾; ) HANGUL SYLLABLE MAEP
+B9FF;B9FF;1106 1162 11C2;B9FF;1106 1162 11C2; # (맿; 맿; 맿; 맿; 맿; ) HANGUL SYLLABLE MAEH
+BA00;BA00;1106 1163;BA00;1106 1163; # (먀; 먀; 먀; 먀; 먀; ) HANGUL SYLLABLE MYA
+BA01;BA01;1106 1163 11A8;BA01;1106 1163 11A8; # (먁; 먁; 먁; 먁; 먁; ) HANGUL SYLLABLE MYAG
+BA02;BA02;1106 1163 11A9;BA02;1106 1163 11A9; # (먂; 먂; 먂; 먂; 먂; ) HANGUL SYLLABLE MYAGG
+BA03;BA03;1106 1163 11AA;BA03;1106 1163 11AA; # (먃; 먃; 먃; 먃; 먃; ) HANGUL SYLLABLE MYAGS
+BA04;BA04;1106 1163 11AB;BA04;1106 1163 11AB; # (먄; 먄; 먄; 먄; 먄; ) HANGUL SYLLABLE MYAN
+BA05;BA05;1106 1163 11AC;BA05;1106 1163 11AC; # (먅; 먅; 먅; 먅; 먅; ) HANGUL SYLLABLE MYANJ
+BA06;BA06;1106 1163 11AD;BA06;1106 1163 11AD; # (먆; 먆; 먆; 먆; 먆; ) HANGUL SYLLABLE MYANH
+BA07;BA07;1106 1163 11AE;BA07;1106 1163 11AE; # (먇; 먇; 먇; 먇; 먇; ) HANGUL SYLLABLE MYAD
+BA08;BA08;1106 1163 11AF;BA08;1106 1163 11AF; # (먈; 먈; 먈; 먈; 먈; ) HANGUL SYLLABLE MYAL
+BA09;BA09;1106 1163 11B0;BA09;1106 1163 11B0; # (먉; 먉; 먉; 먉; 먉; ) HANGUL SYLLABLE MYALG
+BA0A;BA0A;1106 1163 11B1;BA0A;1106 1163 11B1; # (먊; 먊; 먊; 먊; 먊; ) HANGUL SYLLABLE MYALM
+BA0B;BA0B;1106 1163 11B2;BA0B;1106 1163 11B2; # (먋; 먋; 먋; 먋; 먋; ) HANGUL SYLLABLE MYALB
+BA0C;BA0C;1106 1163 11B3;BA0C;1106 1163 11B3; # (먌; 먌; 먌; 먌; 먌; ) HANGUL SYLLABLE MYALS
+BA0D;BA0D;1106 1163 11B4;BA0D;1106 1163 11B4; # (먍; 먍; 먍; 먍; 먍; ) HANGUL SYLLABLE MYALT
+BA0E;BA0E;1106 1163 11B5;BA0E;1106 1163 11B5; # (먎; 먎; 먎; 먎; 먎; ) HANGUL SYLLABLE MYALP
+BA0F;BA0F;1106 1163 11B6;BA0F;1106 1163 11B6; # (먏; 먏; 먏; 먏; 먏; ) HANGUL SYLLABLE MYALH
+BA10;BA10;1106 1163 11B7;BA10;1106 1163 11B7; # (먐; 먐; 먐; 먐; 먐; ) HANGUL SYLLABLE MYAM
+BA11;BA11;1106 1163 11B8;BA11;1106 1163 11B8; # (먑; 먑; 먑; 먑; 먑; ) HANGUL SYLLABLE MYAB
+BA12;BA12;1106 1163 11B9;BA12;1106 1163 11B9; # (먒; 먒; 먒; 먒; 먒; ) HANGUL SYLLABLE MYABS
+BA13;BA13;1106 1163 11BA;BA13;1106 1163 11BA; # (먓; 먓; 먓; 먓; 먓; ) HANGUL SYLLABLE MYAS
+BA14;BA14;1106 1163 11BB;BA14;1106 1163 11BB; # (먔; 먔; 먔; 먔; 먔; ) HANGUL SYLLABLE MYASS
+BA15;BA15;1106 1163 11BC;BA15;1106 1163 11BC; # (먕; 먕; 먕; 먕; 먕; ) HANGUL SYLLABLE MYANG
+BA16;BA16;1106 1163 11BD;BA16;1106 1163 11BD; # (먖; 먖; 먖; 먖; 먖; ) HANGUL SYLLABLE MYAJ
+BA17;BA17;1106 1163 11BE;BA17;1106 1163 11BE; # (먗; 먗; 먗; 먗; 먗; ) HANGUL SYLLABLE MYAC
+BA18;BA18;1106 1163 11BF;BA18;1106 1163 11BF; # (먘; 먘; 먘; 먘; 먘; ) HANGUL SYLLABLE MYAK
+BA19;BA19;1106 1163 11C0;BA19;1106 1163 11C0; # (먙; 먙; 먙; 먙; 먙; ) HANGUL SYLLABLE MYAT
+BA1A;BA1A;1106 1163 11C1;BA1A;1106 1163 11C1; # (먚; 먚; 먚; 먚; 먚; ) HANGUL SYLLABLE MYAP
+BA1B;BA1B;1106 1163 11C2;BA1B;1106 1163 11C2; # (먛; 먛; 먛; 먛; 먛; ) HANGUL SYLLABLE MYAH
+BA1C;BA1C;1106 1164;BA1C;1106 1164; # (먜; 먜; 먜; 먜; 먜; ) HANGUL SYLLABLE MYAE
+BA1D;BA1D;1106 1164 11A8;BA1D;1106 1164 11A8; # (먝; 먝; 먝; 먝; 먝; ) HANGUL SYLLABLE MYAEG
+BA1E;BA1E;1106 1164 11A9;BA1E;1106 1164 11A9; # (먞; 먞; 먞; 먞; 먞; ) HANGUL SYLLABLE MYAEGG
+BA1F;BA1F;1106 1164 11AA;BA1F;1106 1164 11AA; # (먟; 먟; 먟; 먟; 먟; ) HANGUL SYLLABLE MYAEGS
+BA20;BA20;1106 1164 11AB;BA20;1106 1164 11AB; # (먠; 먠; 먠; 먠; 먠; ) HANGUL SYLLABLE MYAEN
+BA21;BA21;1106 1164 11AC;BA21;1106 1164 11AC; # (먡; 먡; 먡; 먡; 먡; ) HANGUL SYLLABLE MYAENJ
+BA22;BA22;1106 1164 11AD;BA22;1106 1164 11AD; # (먢; 먢; 먢; 먢; 먢; ) HANGUL SYLLABLE MYAENH
+BA23;BA23;1106 1164 11AE;BA23;1106 1164 11AE; # (먣; 먣; 먣; 먣; 먣; ) HANGUL SYLLABLE MYAED
+BA24;BA24;1106 1164 11AF;BA24;1106 1164 11AF; # (먤; 먤; 먤; 먤; 먤; ) HANGUL SYLLABLE MYAEL
+BA25;BA25;1106 1164 11B0;BA25;1106 1164 11B0; # (먥; 먥; 먥; 먥; 먥; ) HANGUL SYLLABLE MYAELG
+BA26;BA26;1106 1164 11B1;BA26;1106 1164 11B1; # (먦; 먦; 먦; 먦; 먦; ) HANGUL SYLLABLE MYAELM
+BA27;BA27;1106 1164 11B2;BA27;1106 1164 11B2; # (먧; 먧; 먧; 먧; 먧; ) HANGUL SYLLABLE MYAELB
+BA28;BA28;1106 1164 11B3;BA28;1106 1164 11B3; # (먨; 먨; 먨; 먨; 먨; ) HANGUL SYLLABLE MYAELS
+BA29;BA29;1106 1164 11B4;BA29;1106 1164 11B4; # (먩; 먩; 먩; 먩; 먩; ) HANGUL SYLLABLE MYAELT
+BA2A;BA2A;1106 1164 11B5;BA2A;1106 1164 11B5; # (먪; 먪; 먪; 먪; 먪; ) HANGUL SYLLABLE MYAELP
+BA2B;BA2B;1106 1164 11B6;BA2B;1106 1164 11B6; # (먫; 먫; 먫; 먫; 먫; ) HANGUL SYLLABLE MYAELH
+BA2C;BA2C;1106 1164 11B7;BA2C;1106 1164 11B7; # (먬; 먬; 먬; 먬; 먬; ) HANGUL SYLLABLE MYAEM
+BA2D;BA2D;1106 1164 11B8;BA2D;1106 1164 11B8; # (먭; 먭; 먭; 먭; 먭; ) HANGUL SYLLABLE MYAEB
+BA2E;BA2E;1106 1164 11B9;BA2E;1106 1164 11B9; # (먮; 먮; 먮; 먮; 먮; ) HANGUL SYLLABLE MYAEBS
+BA2F;BA2F;1106 1164 11BA;BA2F;1106 1164 11BA; # (먯; 먯; 먯; 먯; 먯; ) HANGUL SYLLABLE MYAES
+BA30;BA30;1106 1164 11BB;BA30;1106 1164 11BB; # (먰; 먰; 먰; 먰; 먰; ) HANGUL SYLLABLE MYAESS
+BA31;BA31;1106 1164 11BC;BA31;1106 1164 11BC; # (먱; 먱; 먱; 먱; 먱; ) HANGUL SYLLABLE MYAENG
+BA32;BA32;1106 1164 11BD;BA32;1106 1164 11BD; # (먲; 먲; 먲; 먲; 먲; ) HANGUL SYLLABLE MYAEJ
+BA33;BA33;1106 1164 11BE;BA33;1106 1164 11BE; # (먳; 먳; 먳; 먳; 먳; ) HANGUL SYLLABLE MYAEC
+BA34;BA34;1106 1164 11BF;BA34;1106 1164 11BF; # (먴; 먴; 먴; 먴; 먴; ) HANGUL SYLLABLE MYAEK
+BA35;BA35;1106 1164 11C0;BA35;1106 1164 11C0; # (먵; 먵; 먵; 먵; 먵; ) HANGUL SYLLABLE MYAET
+BA36;BA36;1106 1164 11C1;BA36;1106 1164 11C1; # (먶; 먶; 먶; 먶; 먶; ) HANGUL SYLLABLE MYAEP
+BA37;BA37;1106 1164 11C2;BA37;1106 1164 11C2; # (먷; 먷; 먷; 먷; 먷; ) HANGUL SYLLABLE MYAEH
+BA38;BA38;1106 1165;BA38;1106 1165; # (머; 머; 머; 머; 머; ) HANGUL SYLLABLE MEO
+BA39;BA39;1106 1165 11A8;BA39;1106 1165 11A8; # (먹; 먹; 먹; 먹; 먹; ) HANGUL SYLLABLE MEOG
+BA3A;BA3A;1106 1165 11A9;BA3A;1106 1165 11A9; # (먺; 먺; 먺; 먺; 먺; ) HANGUL SYLLABLE MEOGG
+BA3B;BA3B;1106 1165 11AA;BA3B;1106 1165 11AA; # (먻; 먻; 먻; 먻; 먻; ) HANGUL SYLLABLE MEOGS
+BA3C;BA3C;1106 1165 11AB;BA3C;1106 1165 11AB; # (먼; 먼; 먼; 먼; 먼; ) HANGUL SYLLABLE MEON
+BA3D;BA3D;1106 1165 11AC;BA3D;1106 1165 11AC; # (먽; 먽; 먽; 먽; 먽; ) HANGUL SYLLABLE MEONJ
+BA3E;BA3E;1106 1165 11AD;BA3E;1106 1165 11AD; # (먾; 먾; 먾; 먾; 먾; ) HANGUL SYLLABLE MEONH
+BA3F;BA3F;1106 1165 11AE;BA3F;1106 1165 11AE; # (먿; 먿; 먿; 먿; 먿; ) HANGUL SYLLABLE MEOD
+BA40;BA40;1106 1165 11AF;BA40;1106 1165 11AF; # (멀; 멀; 멀; 멀; 멀; ) HANGUL SYLLABLE MEOL
+BA41;BA41;1106 1165 11B0;BA41;1106 1165 11B0; # (멁; 멁; 멁; 멁; 멁; ) HANGUL SYLLABLE MEOLG
+BA42;BA42;1106 1165 11B1;BA42;1106 1165 11B1; # (멂; 멂; 멂; 멂; 멂; ) HANGUL SYLLABLE MEOLM
+BA43;BA43;1106 1165 11B2;BA43;1106 1165 11B2; # (멃; 멃; 멃; 멃; 멃; ) HANGUL SYLLABLE MEOLB
+BA44;BA44;1106 1165 11B3;BA44;1106 1165 11B3; # (멄; 멄; 멄; 멄; 멄; ) HANGUL SYLLABLE MEOLS
+BA45;BA45;1106 1165 11B4;BA45;1106 1165 11B4; # (멅; 멅; 멅; 멅; 멅; ) HANGUL SYLLABLE MEOLT
+BA46;BA46;1106 1165 11B5;BA46;1106 1165 11B5; # (멆; 멆; 멆; 멆; 멆; ) HANGUL SYLLABLE MEOLP
+BA47;BA47;1106 1165 11B6;BA47;1106 1165 11B6; # (멇; 멇; 멇; 멇; 멇; ) HANGUL SYLLABLE MEOLH
+BA48;BA48;1106 1165 11B7;BA48;1106 1165 11B7; # (멈; 멈; 멈; 멈; 멈; ) HANGUL SYLLABLE MEOM
+BA49;BA49;1106 1165 11B8;BA49;1106 1165 11B8; # (멉; 멉; 멉; 멉; 멉; ) HANGUL SYLLABLE MEOB
+BA4A;BA4A;1106 1165 11B9;BA4A;1106 1165 11B9; # (멊; 멊; 멊; 멊; 멊; ) HANGUL SYLLABLE MEOBS
+BA4B;BA4B;1106 1165 11BA;BA4B;1106 1165 11BA; # (멋; 멋; 멋; 멋; 멋; ) HANGUL SYLLABLE MEOS
+BA4C;BA4C;1106 1165 11BB;BA4C;1106 1165 11BB; # (멌; 멌; 멌; 멌; 멌; ) HANGUL SYLLABLE MEOSS
+BA4D;BA4D;1106 1165 11BC;BA4D;1106 1165 11BC; # (멍; 멍; 멍; 멍; 멍; ) HANGUL SYLLABLE MEONG
+BA4E;BA4E;1106 1165 11BD;BA4E;1106 1165 11BD; # (멎; 멎; 멎; 멎; 멎; ) HANGUL SYLLABLE MEOJ
+BA4F;BA4F;1106 1165 11BE;BA4F;1106 1165 11BE; # (멏; 멏; 멏; 멏; 멏; ) HANGUL SYLLABLE MEOC
+BA50;BA50;1106 1165 11BF;BA50;1106 1165 11BF; # (멐; 멐; 멐; 멐; 멐; ) HANGUL SYLLABLE MEOK
+BA51;BA51;1106 1165 11C0;BA51;1106 1165 11C0; # (멑; 멑; 멑; 멑; 멑; ) HANGUL SYLLABLE MEOT
+BA52;BA52;1106 1165 11C1;BA52;1106 1165 11C1; # (멒; 멒; 멒; 멒; 멒; ) HANGUL SYLLABLE MEOP
+BA53;BA53;1106 1165 11C2;BA53;1106 1165 11C2; # (멓; 멓; 멓; 멓; 멓; ) HANGUL SYLLABLE MEOH
+BA54;BA54;1106 1166;BA54;1106 1166; # (메; 메; 메; 메; 메; ) HANGUL SYLLABLE ME
+BA55;BA55;1106 1166 11A8;BA55;1106 1166 11A8; # (멕; 멕; 멕; 멕; 멕; ) HANGUL SYLLABLE MEG
+BA56;BA56;1106 1166 11A9;BA56;1106 1166 11A9; # (멖; 멖; 멖; 멖; 멖; ) HANGUL SYLLABLE MEGG
+BA57;BA57;1106 1166 11AA;BA57;1106 1166 11AA; # (멗; 멗; 멗; 멗; 멗; ) HANGUL SYLLABLE MEGS
+BA58;BA58;1106 1166 11AB;BA58;1106 1166 11AB; # (멘; 멘; 멘; 멘; 멘; ) HANGUL SYLLABLE MEN
+BA59;BA59;1106 1166 11AC;BA59;1106 1166 11AC; # (멙; 멙; 멙; 멙; 멙; ) HANGUL SYLLABLE MENJ
+BA5A;BA5A;1106 1166 11AD;BA5A;1106 1166 11AD; # (멚; 멚; 멚; 멚; 멚; ) HANGUL SYLLABLE MENH
+BA5B;BA5B;1106 1166 11AE;BA5B;1106 1166 11AE; # (멛; 멛; 멛; 멛; 멛; ) HANGUL SYLLABLE MED
+BA5C;BA5C;1106 1166 11AF;BA5C;1106 1166 11AF; # (멜; 멜; 멜; 멜; 멜; ) HANGUL SYLLABLE MEL
+BA5D;BA5D;1106 1166 11B0;BA5D;1106 1166 11B0; # (멝; 멝; 멝; 멝; 멝; ) HANGUL SYLLABLE MELG
+BA5E;BA5E;1106 1166 11B1;BA5E;1106 1166 11B1; # (멞; 멞; 멞; 멞; 멞; ) HANGUL SYLLABLE MELM
+BA5F;BA5F;1106 1166 11B2;BA5F;1106 1166 11B2; # (멟; 멟; 멟; 멟; 멟; ) HANGUL SYLLABLE MELB
+BA60;BA60;1106 1166 11B3;BA60;1106 1166 11B3; # (멠; 멠; 멠; 멠; 멠; ) HANGUL SYLLABLE MELS
+BA61;BA61;1106 1166 11B4;BA61;1106 1166 11B4; # (멡; 멡; 멡; 멡; 멡; ) HANGUL SYLLABLE MELT
+BA62;BA62;1106 1166 11B5;BA62;1106 1166 11B5; # (멢; 멢; 멢; 멢; 멢; ) HANGUL SYLLABLE MELP
+BA63;BA63;1106 1166 11B6;BA63;1106 1166 11B6; # (멣; 멣; 멣; 멣; 멣; ) HANGUL SYLLABLE MELH
+BA64;BA64;1106 1166 11B7;BA64;1106 1166 11B7; # (멤; 멤; 멤; 멤; 멤; ) HANGUL SYLLABLE MEM
+BA65;BA65;1106 1166 11B8;BA65;1106 1166 11B8; # (멥; 멥; 멥; 멥; 멥; ) HANGUL SYLLABLE MEB
+BA66;BA66;1106 1166 11B9;BA66;1106 1166 11B9; # (멦; 멦; 멦; 멦; 멦; ) HANGUL SYLLABLE MEBS
+BA67;BA67;1106 1166 11BA;BA67;1106 1166 11BA; # (멧; 멧; 멧; 멧; 멧; ) HANGUL SYLLABLE MES
+BA68;BA68;1106 1166 11BB;BA68;1106 1166 11BB; # (멨; 멨; 멨; 멨; 멨; ) HANGUL SYLLABLE MESS
+BA69;BA69;1106 1166 11BC;BA69;1106 1166 11BC; # (멩; 멩; 멩; 멩; 멩; ) HANGUL SYLLABLE MENG
+BA6A;BA6A;1106 1166 11BD;BA6A;1106 1166 11BD; # (멪; 멪; 멪; 멪; 멪; ) HANGUL SYLLABLE MEJ
+BA6B;BA6B;1106 1166 11BE;BA6B;1106 1166 11BE; # (멫; 멫; 멫; 멫; 멫; ) HANGUL SYLLABLE MEC
+BA6C;BA6C;1106 1166 11BF;BA6C;1106 1166 11BF; # (멬; 멬; 멬; 멬; 멬; ) HANGUL SYLLABLE MEK
+BA6D;BA6D;1106 1166 11C0;BA6D;1106 1166 11C0; # (멭; 멭; 멭; 멭; 멭; ) HANGUL SYLLABLE MET
+BA6E;BA6E;1106 1166 11C1;BA6E;1106 1166 11C1; # (멮; 멮; 멮; 멮; 멮; ) HANGUL SYLLABLE MEP
+BA6F;BA6F;1106 1166 11C2;BA6F;1106 1166 11C2; # (멯; 멯; 멯; 멯; 멯; ) HANGUL SYLLABLE MEH
+BA70;BA70;1106 1167;BA70;1106 1167; # (며; 며; 며; 며; 며; ) HANGUL SYLLABLE MYEO
+BA71;BA71;1106 1167 11A8;BA71;1106 1167 11A8; # (멱; 멱; 멱; 멱; 멱; ) HANGUL SYLLABLE MYEOG
+BA72;BA72;1106 1167 11A9;BA72;1106 1167 11A9; # (멲; 멲; 멲; 멲; 멲; ) HANGUL SYLLABLE MYEOGG
+BA73;BA73;1106 1167 11AA;BA73;1106 1167 11AA; # (멳; 멳; 멳; 멳; 멳; ) HANGUL SYLLABLE MYEOGS
+BA74;BA74;1106 1167 11AB;BA74;1106 1167 11AB; # (면; 면; 면; 면; 면; ) HANGUL SYLLABLE MYEON
+BA75;BA75;1106 1167 11AC;BA75;1106 1167 11AC; # (멵; 멵; 멵; 멵; 멵; ) HANGUL SYLLABLE MYEONJ
+BA76;BA76;1106 1167 11AD;BA76;1106 1167 11AD; # (멶; 멶; 멶; 멶; 멶; ) HANGUL SYLLABLE MYEONH
+BA77;BA77;1106 1167 11AE;BA77;1106 1167 11AE; # (멷; 멷; 멷; 멷; 멷; ) HANGUL SYLLABLE MYEOD
+BA78;BA78;1106 1167 11AF;BA78;1106 1167 11AF; # (멸; 멸; 멸; 멸; 멸; ) HANGUL SYLLABLE MYEOL
+BA79;BA79;1106 1167 11B0;BA79;1106 1167 11B0; # (멹; 멹; 멹; 멹; 멹; ) HANGUL SYLLABLE MYEOLG
+BA7A;BA7A;1106 1167 11B1;BA7A;1106 1167 11B1; # (멺; 멺; 멺; 멺; 멺; ) HANGUL SYLLABLE MYEOLM
+BA7B;BA7B;1106 1167 11B2;BA7B;1106 1167 11B2; # (멻; 멻; 멻; 멻; 멻; ) HANGUL SYLLABLE MYEOLB
+BA7C;BA7C;1106 1167 11B3;BA7C;1106 1167 11B3; # (멼; 멼; 멼; 멼; 멼; ) HANGUL SYLLABLE MYEOLS
+BA7D;BA7D;1106 1167 11B4;BA7D;1106 1167 11B4; # (멽; 멽; 멽; 멽; 멽; ) HANGUL SYLLABLE MYEOLT
+BA7E;BA7E;1106 1167 11B5;BA7E;1106 1167 11B5; # (멾; 멾; 멾; 멾; 멾; ) HANGUL SYLLABLE MYEOLP
+BA7F;BA7F;1106 1167 11B6;BA7F;1106 1167 11B6; # (멿; 멿; 멿; 멿; 멿; ) HANGUL SYLLABLE MYEOLH
+BA80;BA80;1106 1167 11B7;BA80;1106 1167 11B7; # (몀; 몀; 몀; 몀; 몀; ) HANGUL SYLLABLE MYEOM
+BA81;BA81;1106 1167 11B8;BA81;1106 1167 11B8; # (몁; 몁; 몁; 몁; 몁; ) HANGUL SYLLABLE MYEOB
+BA82;BA82;1106 1167 11B9;BA82;1106 1167 11B9; # (몂; 몂; 몂; 몂; 몂; ) HANGUL SYLLABLE MYEOBS
+BA83;BA83;1106 1167 11BA;BA83;1106 1167 11BA; # (몃; 몃; 몃; 몃; 몃; ) HANGUL SYLLABLE MYEOS
+BA84;BA84;1106 1167 11BB;BA84;1106 1167 11BB; # (몄; 몄; 몄; 몄; 몄; ) HANGUL SYLLABLE MYEOSS
+BA85;BA85;1106 1167 11BC;BA85;1106 1167 11BC; # (명; 명; 명; 명; 명; ) HANGUL SYLLABLE MYEONG
+BA86;BA86;1106 1167 11BD;BA86;1106 1167 11BD; # (몆; 몆; 몆; 몆; 몆; ) HANGUL SYLLABLE MYEOJ
+BA87;BA87;1106 1167 11BE;BA87;1106 1167 11BE; # (몇; 몇; 몇; 몇; 몇; ) HANGUL SYLLABLE MYEOC
+BA88;BA88;1106 1167 11BF;BA88;1106 1167 11BF; # (몈; 몈; 몈; 몈; 몈; ) HANGUL SYLLABLE MYEOK
+BA89;BA89;1106 1167 11C0;BA89;1106 1167 11C0; # (몉; 몉; 몉; 몉; 몉; ) HANGUL SYLLABLE MYEOT
+BA8A;BA8A;1106 1167 11C1;BA8A;1106 1167 11C1; # (몊; 몊; 몊; 몊; 몊; ) HANGUL SYLLABLE MYEOP
+BA8B;BA8B;1106 1167 11C2;BA8B;1106 1167 11C2; # (몋; 몋; 몋; 몋; 몋; ) HANGUL SYLLABLE MYEOH
+BA8C;BA8C;1106 1168;BA8C;1106 1168; # (몌; 몌; 몌; 몌; 몌; ) HANGUL SYLLABLE MYE
+BA8D;BA8D;1106 1168 11A8;BA8D;1106 1168 11A8; # (몍; 몍; 몍; 몍; 몍; ) HANGUL SYLLABLE MYEG
+BA8E;BA8E;1106 1168 11A9;BA8E;1106 1168 11A9; # (몎; 몎; 몎; 몎; 몎; ) HANGUL SYLLABLE MYEGG
+BA8F;BA8F;1106 1168 11AA;BA8F;1106 1168 11AA; # (몏; 몏; 몏; 몏; 몏; ) HANGUL SYLLABLE MYEGS
+BA90;BA90;1106 1168 11AB;BA90;1106 1168 11AB; # (몐; 몐; 몐; 몐; 몐; ) HANGUL SYLLABLE MYEN
+BA91;BA91;1106 1168 11AC;BA91;1106 1168 11AC; # (몑; 몑; 몑; 몑; 몑; ) HANGUL SYLLABLE MYENJ
+BA92;BA92;1106 1168 11AD;BA92;1106 1168 11AD; # (몒; 몒; 몒; 몒; 몒; ) HANGUL SYLLABLE MYENH
+BA93;BA93;1106 1168 11AE;BA93;1106 1168 11AE; # (몓; 몓; 몓; 몓; 몓; ) HANGUL SYLLABLE MYED
+BA94;BA94;1106 1168 11AF;BA94;1106 1168 11AF; # (몔; 몔; 몔; 몔; 몔; ) HANGUL SYLLABLE MYEL
+BA95;BA95;1106 1168 11B0;BA95;1106 1168 11B0; # (몕; 몕; 몕; 몕; 몕; ) HANGUL SYLLABLE MYELG
+BA96;BA96;1106 1168 11B1;BA96;1106 1168 11B1; # (몖; 몖; 몖; 몖; 몖; ) HANGUL SYLLABLE MYELM
+BA97;BA97;1106 1168 11B2;BA97;1106 1168 11B2; # (몗; 몗; 몗; 몗; 몗; ) HANGUL SYLLABLE MYELB
+BA98;BA98;1106 1168 11B3;BA98;1106 1168 11B3; # (몘; 몘; 몘; 몘; 몘; ) HANGUL SYLLABLE MYELS
+BA99;BA99;1106 1168 11B4;BA99;1106 1168 11B4; # (몙; 몙; 몙; 몙; 몙; ) HANGUL SYLLABLE MYELT
+BA9A;BA9A;1106 1168 11B5;BA9A;1106 1168 11B5; # (몚; 몚; 몚; 몚; 몚; ) HANGUL SYLLABLE MYELP
+BA9B;BA9B;1106 1168 11B6;BA9B;1106 1168 11B6; # (몛; 몛; 몛; 몛; 몛; ) HANGUL SYLLABLE MYELH
+BA9C;BA9C;1106 1168 11B7;BA9C;1106 1168 11B7; # (몜; 몜; 몜; 몜; 몜; ) HANGUL SYLLABLE MYEM
+BA9D;BA9D;1106 1168 11B8;BA9D;1106 1168 11B8; # (몝; 몝; 몝; 몝; 몝; ) HANGUL SYLLABLE MYEB
+BA9E;BA9E;1106 1168 11B9;BA9E;1106 1168 11B9; # (몞; 몞; 몞; 몞; 몞; ) HANGUL SYLLABLE MYEBS
+BA9F;BA9F;1106 1168 11BA;BA9F;1106 1168 11BA; # (몟; 몟; 몟; 몟; 몟; ) HANGUL SYLLABLE MYES
+BAA0;BAA0;1106 1168 11BB;BAA0;1106 1168 11BB; # (몠; 몠; 몠; 몠; 몠; ) HANGUL SYLLABLE MYESS
+BAA1;BAA1;1106 1168 11BC;BAA1;1106 1168 11BC; # (몡; 몡; 몡; 몡; 몡; ) HANGUL SYLLABLE MYENG
+BAA2;BAA2;1106 1168 11BD;BAA2;1106 1168 11BD; # (몢; 몢; 몢; 몢; 몢; ) HANGUL SYLLABLE MYEJ
+BAA3;BAA3;1106 1168 11BE;BAA3;1106 1168 11BE; # (몣; 몣; 몣; 몣; 몣; ) HANGUL SYLLABLE MYEC
+BAA4;BAA4;1106 1168 11BF;BAA4;1106 1168 11BF; # (몤; 몤; 몤; 몤; 몤; ) HANGUL SYLLABLE MYEK
+BAA5;BAA5;1106 1168 11C0;BAA5;1106 1168 11C0; # (몥; 몥; 몥; 몥; 몥; ) HANGUL SYLLABLE MYET
+BAA6;BAA6;1106 1168 11C1;BAA6;1106 1168 11C1; # (몦; 몦; 몦; 몦; 몦; ) HANGUL SYLLABLE MYEP
+BAA7;BAA7;1106 1168 11C2;BAA7;1106 1168 11C2; # (몧; 몧; 몧; 몧; 몧; ) HANGUL SYLLABLE MYEH
+BAA8;BAA8;1106 1169;BAA8;1106 1169; # (모; 모; 모; 모; 모; ) HANGUL SYLLABLE MO
+BAA9;BAA9;1106 1169 11A8;BAA9;1106 1169 11A8; # (목; 목; 목; 목; 목; ) HANGUL SYLLABLE MOG
+BAAA;BAAA;1106 1169 11A9;BAAA;1106 1169 11A9; # (몪; 몪; 몪; 몪; 몪; ) HANGUL SYLLABLE MOGG
+BAAB;BAAB;1106 1169 11AA;BAAB;1106 1169 11AA; # (몫; 몫; 몫; 몫; 몫; ) HANGUL SYLLABLE MOGS
+BAAC;BAAC;1106 1169 11AB;BAAC;1106 1169 11AB; # (몬; 몬; 몬; 몬; 몬; ) HANGUL SYLLABLE MON
+BAAD;BAAD;1106 1169 11AC;BAAD;1106 1169 11AC; # (몭; 몭; 몭; 몭; 몭; ) HANGUL SYLLABLE MONJ
+BAAE;BAAE;1106 1169 11AD;BAAE;1106 1169 11AD; # (몮; 몮; 몮; 몮; 몮; ) HANGUL SYLLABLE MONH
+BAAF;BAAF;1106 1169 11AE;BAAF;1106 1169 11AE; # (몯; 몯; 몯; 몯; 몯; ) HANGUL SYLLABLE MOD
+BAB0;BAB0;1106 1169 11AF;BAB0;1106 1169 11AF; # (몰; 몰; 몰; 몰; 몰; ) HANGUL SYLLABLE MOL
+BAB1;BAB1;1106 1169 11B0;BAB1;1106 1169 11B0; # (몱; 몱; 몱; 몱; 몱; ) HANGUL SYLLABLE MOLG
+BAB2;BAB2;1106 1169 11B1;BAB2;1106 1169 11B1; # (몲; 몲; 몲; 몲; 몲; ) HANGUL SYLLABLE MOLM
+BAB3;BAB3;1106 1169 11B2;BAB3;1106 1169 11B2; # (몳; 몳; 몳; 몳; 몳; ) HANGUL SYLLABLE MOLB
+BAB4;BAB4;1106 1169 11B3;BAB4;1106 1169 11B3; # (몴; 몴; 몴; 몴; 몴; ) HANGUL SYLLABLE MOLS
+BAB5;BAB5;1106 1169 11B4;BAB5;1106 1169 11B4; # (몵; 몵; 몵; 몵; 몵; ) HANGUL SYLLABLE MOLT
+BAB6;BAB6;1106 1169 11B5;BAB6;1106 1169 11B5; # (몶; 몶; 몶; 몶; 몶; ) HANGUL SYLLABLE MOLP
+BAB7;BAB7;1106 1169 11B6;BAB7;1106 1169 11B6; # (몷; 몷; 몷; 몷; 몷; ) HANGUL SYLLABLE MOLH
+BAB8;BAB8;1106 1169 11B7;BAB8;1106 1169 11B7; # (몸; 몸; 몸; 몸; 몸; ) HANGUL SYLLABLE MOM
+BAB9;BAB9;1106 1169 11B8;BAB9;1106 1169 11B8; # (몹; 몹; 몹; 몹; 몹; ) HANGUL SYLLABLE MOB
+BABA;BABA;1106 1169 11B9;BABA;1106 1169 11B9; # (몺; 몺; 몺; 몺; 몺; ) HANGUL SYLLABLE MOBS
+BABB;BABB;1106 1169 11BA;BABB;1106 1169 11BA; # (못; 못; 못; 못; 못; ) HANGUL SYLLABLE MOS
+BABC;BABC;1106 1169 11BB;BABC;1106 1169 11BB; # (몼; 몼; 몼; 몼; 몼; ) HANGUL SYLLABLE MOSS
+BABD;BABD;1106 1169 11BC;BABD;1106 1169 11BC; # (몽; 몽; 몽; 몽; 몽; ) HANGUL SYLLABLE MONG
+BABE;BABE;1106 1169 11BD;BABE;1106 1169 11BD; # (몾; 몾; 몾; 몾; 몾; ) HANGUL SYLLABLE MOJ
+BABF;BABF;1106 1169 11BE;BABF;1106 1169 11BE; # (몿; 몿; 몿; 몿; 몿; ) HANGUL SYLLABLE MOC
+BAC0;BAC0;1106 1169 11BF;BAC0;1106 1169 11BF; # (뫀; 뫀; 뫀; 뫀; 뫀; ) HANGUL SYLLABLE MOK
+BAC1;BAC1;1106 1169 11C0;BAC1;1106 1169 11C0; # (뫁; 뫁; 뫁; 뫁; 뫁; ) HANGUL SYLLABLE MOT
+BAC2;BAC2;1106 1169 11C1;BAC2;1106 1169 11C1; # (뫂; 뫂; 뫂; 뫂; 뫂; ) HANGUL SYLLABLE MOP
+BAC3;BAC3;1106 1169 11C2;BAC3;1106 1169 11C2; # (뫃; 뫃; 뫃; 뫃; 뫃; ) HANGUL SYLLABLE MOH
+BAC4;BAC4;1106 116A;BAC4;1106 116A; # (뫄; 뫄; 뫄; 뫄; 뫄; ) HANGUL SYLLABLE MWA
+BAC5;BAC5;1106 116A 11A8;BAC5;1106 116A 11A8; # (뫅; 뫅; 뫅; 뫅; 뫅; ) HANGUL SYLLABLE MWAG
+BAC6;BAC6;1106 116A 11A9;BAC6;1106 116A 11A9; # (뫆; 뫆; 뫆; 뫆; 뫆; ) HANGUL SYLLABLE MWAGG
+BAC7;BAC7;1106 116A 11AA;BAC7;1106 116A 11AA; # (뫇; 뫇; 뫇; 뫇; 뫇; ) HANGUL SYLLABLE MWAGS
+BAC8;BAC8;1106 116A 11AB;BAC8;1106 116A 11AB; # (뫈; 뫈; 뫈; 뫈; 뫈; ) HANGUL SYLLABLE MWAN
+BAC9;BAC9;1106 116A 11AC;BAC9;1106 116A 11AC; # (뫉; 뫉; 뫉; 뫉; 뫉; ) HANGUL SYLLABLE MWANJ
+BACA;BACA;1106 116A 11AD;BACA;1106 116A 11AD; # (뫊; 뫊; 뫊; 뫊; 뫊; ) HANGUL SYLLABLE MWANH
+BACB;BACB;1106 116A 11AE;BACB;1106 116A 11AE; # (뫋; 뫋; 뫋; 뫋; 뫋; ) HANGUL SYLLABLE MWAD
+BACC;BACC;1106 116A 11AF;BACC;1106 116A 11AF; # (뫌; 뫌; 뫌; 뫌; 뫌; ) HANGUL SYLLABLE MWAL
+BACD;BACD;1106 116A 11B0;BACD;1106 116A 11B0; # (뫍; 뫍; 뫍; 뫍; 뫍; ) HANGUL SYLLABLE MWALG
+BACE;BACE;1106 116A 11B1;BACE;1106 116A 11B1; # (뫎; 뫎; 뫎; 뫎; 뫎; ) HANGUL SYLLABLE MWALM
+BACF;BACF;1106 116A 11B2;BACF;1106 116A 11B2; # (뫏; 뫏; 뫏; 뫏; 뫏; ) HANGUL SYLLABLE MWALB
+BAD0;BAD0;1106 116A 11B3;BAD0;1106 116A 11B3; # (뫐; 뫐; 뫐; 뫐; 뫐; ) HANGUL SYLLABLE MWALS
+BAD1;BAD1;1106 116A 11B4;BAD1;1106 116A 11B4; # (뫑; 뫑; 뫑; 뫑; 뫑; ) HANGUL SYLLABLE MWALT
+BAD2;BAD2;1106 116A 11B5;BAD2;1106 116A 11B5; # (뫒; 뫒; 뫒; 뫒; 뫒; ) HANGUL SYLLABLE MWALP
+BAD3;BAD3;1106 116A 11B6;BAD3;1106 116A 11B6; # (뫓; 뫓; 뫓; 뫓; 뫓; ) HANGUL SYLLABLE MWALH
+BAD4;BAD4;1106 116A 11B7;BAD4;1106 116A 11B7; # (뫔; 뫔; 뫔; 뫔; 뫔; ) HANGUL SYLLABLE MWAM
+BAD5;BAD5;1106 116A 11B8;BAD5;1106 116A 11B8; # (뫕; 뫕; 뫕; 뫕; 뫕; ) HANGUL SYLLABLE MWAB
+BAD6;BAD6;1106 116A 11B9;BAD6;1106 116A 11B9; # (뫖; 뫖; 뫖; 뫖; 뫖; ) HANGUL SYLLABLE MWABS
+BAD7;BAD7;1106 116A 11BA;BAD7;1106 116A 11BA; # (뫗; 뫗; 뫗; 뫗; 뫗; ) HANGUL SYLLABLE MWAS
+BAD8;BAD8;1106 116A 11BB;BAD8;1106 116A 11BB; # (뫘; 뫘; 뫘; 뫘; 뫘; ) HANGUL SYLLABLE MWASS
+BAD9;BAD9;1106 116A 11BC;BAD9;1106 116A 11BC; # (뫙; 뫙; 뫙; 뫙; 뫙; ) HANGUL SYLLABLE MWANG
+BADA;BADA;1106 116A 11BD;BADA;1106 116A 11BD; # (뫚; 뫚; 뫚; 뫚; 뫚; ) HANGUL SYLLABLE MWAJ
+BADB;BADB;1106 116A 11BE;BADB;1106 116A 11BE; # (뫛; 뫛; 뫛; 뫛; 뫛; ) HANGUL SYLLABLE MWAC
+BADC;BADC;1106 116A 11BF;BADC;1106 116A 11BF; # (뫜; 뫜; 뫜; 뫜; 뫜; ) HANGUL SYLLABLE MWAK
+BADD;BADD;1106 116A 11C0;BADD;1106 116A 11C0; # (뫝; 뫝; 뫝; 뫝; 뫝; ) HANGUL SYLLABLE MWAT
+BADE;BADE;1106 116A 11C1;BADE;1106 116A 11C1; # (뫞; 뫞; 뫞; 뫞; 뫞; ) HANGUL SYLLABLE MWAP
+BADF;BADF;1106 116A 11C2;BADF;1106 116A 11C2; # (뫟; 뫟; 뫟; 뫟; 뫟; ) HANGUL SYLLABLE MWAH
+BAE0;BAE0;1106 116B;BAE0;1106 116B; # (뫠; 뫠; 뫠; 뫠; 뫠; ) HANGUL SYLLABLE MWAE
+BAE1;BAE1;1106 116B 11A8;BAE1;1106 116B 11A8; # (뫡; 뫡; 뫡; 뫡; 뫡; ) HANGUL SYLLABLE MWAEG
+BAE2;BAE2;1106 116B 11A9;BAE2;1106 116B 11A9; # (뫢; 뫢; 뫢; 뫢; 뫢; ) HANGUL SYLLABLE MWAEGG
+BAE3;BAE3;1106 116B 11AA;BAE3;1106 116B 11AA; # (뫣; 뫣; 뫣; 뫣; 뫣; ) HANGUL SYLLABLE MWAEGS
+BAE4;BAE4;1106 116B 11AB;BAE4;1106 116B 11AB; # (뫤; 뫤; 뫤; 뫤; 뫤; ) HANGUL SYLLABLE MWAEN
+BAE5;BAE5;1106 116B 11AC;BAE5;1106 116B 11AC; # (뫥; 뫥; 뫥; 뫥; 뫥; ) HANGUL SYLLABLE MWAENJ
+BAE6;BAE6;1106 116B 11AD;BAE6;1106 116B 11AD; # (뫦; 뫦; 뫦; 뫦; 뫦; ) HANGUL SYLLABLE MWAENH
+BAE7;BAE7;1106 116B 11AE;BAE7;1106 116B 11AE; # (뫧; 뫧; 뫧; 뫧; 뫧; ) HANGUL SYLLABLE MWAED
+BAE8;BAE8;1106 116B 11AF;BAE8;1106 116B 11AF; # (뫨; 뫨; 뫨; 뫨; 뫨; ) HANGUL SYLLABLE MWAEL
+BAE9;BAE9;1106 116B 11B0;BAE9;1106 116B 11B0; # (뫩; 뫩; 뫩; 뫩; 뫩; ) HANGUL SYLLABLE MWAELG
+BAEA;BAEA;1106 116B 11B1;BAEA;1106 116B 11B1; # (뫪; 뫪; 뫪; 뫪; 뫪; ) HANGUL SYLLABLE MWAELM
+BAEB;BAEB;1106 116B 11B2;BAEB;1106 116B 11B2; # (뫫; 뫫; 뫫; 뫫; 뫫; ) HANGUL SYLLABLE MWAELB
+BAEC;BAEC;1106 116B 11B3;BAEC;1106 116B 11B3; # (뫬; 뫬; 뫬; 뫬; 뫬; ) HANGUL SYLLABLE MWAELS
+BAED;BAED;1106 116B 11B4;BAED;1106 116B 11B4; # (뫭; 뫭; 뫭; 뫭; 뫭; ) HANGUL SYLLABLE MWAELT
+BAEE;BAEE;1106 116B 11B5;BAEE;1106 116B 11B5; # (뫮; 뫮; 뫮; 뫮; 뫮; ) HANGUL SYLLABLE MWAELP
+BAEF;BAEF;1106 116B 11B6;BAEF;1106 116B 11B6; # (뫯; 뫯; 뫯; 뫯; 뫯; ) HANGUL SYLLABLE MWAELH
+BAF0;BAF0;1106 116B 11B7;BAF0;1106 116B 11B7; # (뫰; 뫰; 뫰; 뫰; 뫰; ) HANGUL SYLLABLE MWAEM
+BAF1;BAF1;1106 116B 11B8;BAF1;1106 116B 11B8; # (뫱; 뫱; 뫱; 뫱; 뫱; ) HANGUL SYLLABLE MWAEB
+BAF2;BAF2;1106 116B 11B9;BAF2;1106 116B 11B9; # (뫲; 뫲; 뫲; 뫲; 뫲; ) HANGUL SYLLABLE MWAEBS
+BAF3;BAF3;1106 116B 11BA;BAF3;1106 116B 11BA; # (뫳; 뫳; 뫳; 뫳; 뫳; ) HANGUL SYLLABLE MWAES
+BAF4;BAF4;1106 116B 11BB;BAF4;1106 116B 11BB; # (뫴; 뫴; 뫴; 뫴; 뫴; ) HANGUL SYLLABLE MWAESS
+BAF5;BAF5;1106 116B 11BC;BAF5;1106 116B 11BC; # (뫵; 뫵; 뫵; 뫵; 뫵; ) HANGUL SYLLABLE MWAENG
+BAF6;BAF6;1106 116B 11BD;BAF6;1106 116B 11BD; # (뫶; 뫶; 뫶; 뫶; 뫶; ) HANGUL SYLLABLE MWAEJ
+BAF7;BAF7;1106 116B 11BE;BAF7;1106 116B 11BE; # (뫷; 뫷; 뫷; 뫷; 뫷; ) HANGUL SYLLABLE MWAEC
+BAF8;BAF8;1106 116B 11BF;BAF8;1106 116B 11BF; # (뫸; 뫸; 뫸; 뫸; 뫸; ) HANGUL SYLLABLE MWAEK
+BAF9;BAF9;1106 116B 11C0;BAF9;1106 116B 11C0; # (뫹; 뫹; 뫹; 뫹; 뫹; ) HANGUL SYLLABLE MWAET
+BAFA;BAFA;1106 116B 11C1;BAFA;1106 116B 11C1; # (뫺; 뫺; 뫺; 뫺; 뫺; ) HANGUL SYLLABLE MWAEP
+BAFB;BAFB;1106 116B 11C2;BAFB;1106 116B 11C2; # (뫻; 뫻; 뫻; 뫻; 뫻; ) HANGUL SYLLABLE MWAEH
+BAFC;BAFC;1106 116C;BAFC;1106 116C; # (뫼; 뫼; 뫼; 뫼; 뫼; ) HANGUL SYLLABLE MOE
+BAFD;BAFD;1106 116C 11A8;BAFD;1106 116C 11A8; # (뫽; 뫽; 뫽; 뫽; 뫽; ) HANGUL SYLLABLE MOEG
+BAFE;BAFE;1106 116C 11A9;BAFE;1106 116C 11A9; # (뫾; 뫾; 뫾; 뫾; 뫾; ) HANGUL SYLLABLE MOEGG
+BAFF;BAFF;1106 116C 11AA;BAFF;1106 116C 11AA; # (뫿; 뫿; 뫿; 뫿; 뫿; ) HANGUL SYLLABLE MOEGS
+BB00;BB00;1106 116C 11AB;BB00;1106 116C 11AB; # (묀; 묀; 묀; 묀; 묀; ) HANGUL SYLLABLE MOEN
+BB01;BB01;1106 116C 11AC;BB01;1106 116C 11AC; # (묁; 묁; 묁; 묁; 묁; ) HANGUL SYLLABLE MOENJ
+BB02;BB02;1106 116C 11AD;BB02;1106 116C 11AD; # (묂; 묂; 묂; 묂; 묂; ) HANGUL SYLLABLE MOENH
+BB03;BB03;1106 116C 11AE;BB03;1106 116C 11AE; # (묃; 묃; 묃; 묃; 묃; ) HANGUL SYLLABLE MOED
+BB04;BB04;1106 116C 11AF;BB04;1106 116C 11AF; # (묄; 묄; 묄; 묄; 묄; ) HANGUL SYLLABLE MOEL
+BB05;BB05;1106 116C 11B0;BB05;1106 116C 11B0; # (묅; 묅; 묅; 묅; 묅; ) HANGUL SYLLABLE MOELG
+BB06;BB06;1106 116C 11B1;BB06;1106 116C 11B1; # (묆; 묆; 묆; 묆; 묆; ) HANGUL SYLLABLE MOELM
+BB07;BB07;1106 116C 11B2;BB07;1106 116C 11B2; # (묇; 묇; 묇; 묇; 묇; ) HANGUL SYLLABLE MOELB
+BB08;BB08;1106 116C 11B3;BB08;1106 116C 11B3; # (묈; 묈; 묈; 묈; 묈; ) HANGUL SYLLABLE MOELS
+BB09;BB09;1106 116C 11B4;BB09;1106 116C 11B4; # (묉; 묉; 묉; 묉; 묉; ) HANGUL SYLLABLE MOELT
+BB0A;BB0A;1106 116C 11B5;BB0A;1106 116C 11B5; # (묊; 묊; 묊; 묊; 묊; ) HANGUL SYLLABLE MOELP
+BB0B;BB0B;1106 116C 11B6;BB0B;1106 116C 11B6; # (묋; 묋; 묋; 묋; 묋; ) HANGUL SYLLABLE MOELH
+BB0C;BB0C;1106 116C 11B7;BB0C;1106 116C 11B7; # (묌; 묌; 묌; 묌; 묌; ) HANGUL SYLLABLE MOEM
+BB0D;BB0D;1106 116C 11B8;BB0D;1106 116C 11B8; # (묍; 묍; 묍; 묍; 묍; ) HANGUL SYLLABLE MOEB
+BB0E;BB0E;1106 116C 11B9;BB0E;1106 116C 11B9; # (묎; 묎; 묎; 묎; 묎; ) HANGUL SYLLABLE MOEBS
+BB0F;BB0F;1106 116C 11BA;BB0F;1106 116C 11BA; # (묏; 묏; 묏; 묏; 묏; ) HANGUL SYLLABLE MOES
+BB10;BB10;1106 116C 11BB;BB10;1106 116C 11BB; # (묐; 묐; 묐; 묐; 묐; ) HANGUL SYLLABLE MOESS
+BB11;BB11;1106 116C 11BC;BB11;1106 116C 11BC; # (묑; 묑; 묑; 묑; 묑; ) HANGUL SYLLABLE MOENG
+BB12;BB12;1106 116C 11BD;BB12;1106 116C 11BD; # (묒; 묒; 묒; 묒; 묒; ) HANGUL SYLLABLE MOEJ
+BB13;BB13;1106 116C 11BE;BB13;1106 116C 11BE; # (묓; 묓; 묓; 묓; 묓; ) HANGUL SYLLABLE MOEC
+BB14;BB14;1106 116C 11BF;BB14;1106 116C 11BF; # (묔; 묔; 묔; 묔; 묔; ) HANGUL SYLLABLE MOEK
+BB15;BB15;1106 116C 11C0;BB15;1106 116C 11C0; # (묕; 묕; 묕; 묕; 묕; ) HANGUL SYLLABLE MOET
+BB16;BB16;1106 116C 11C1;BB16;1106 116C 11C1; # (묖; 묖; 묖; 묖; 묖; ) HANGUL SYLLABLE MOEP
+BB17;BB17;1106 116C 11C2;BB17;1106 116C 11C2; # (묗; 묗; 묗; 묗; 묗; ) HANGUL SYLLABLE MOEH
+BB18;BB18;1106 116D;BB18;1106 116D; # (묘; 묘; 묘; 묘; 묘; ) HANGUL SYLLABLE MYO
+BB19;BB19;1106 116D 11A8;BB19;1106 116D 11A8; # (묙; 묙; 묙; 묙; 묙; ) HANGUL SYLLABLE MYOG
+BB1A;BB1A;1106 116D 11A9;BB1A;1106 116D 11A9; # (묚; 묚; 묚; 묚; 묚; ) HANGUL SYLLABLE MYOGG
+BB1B;BB1B;1106 116D 11AA;BB1B;1106 116D 11AA; # (묛; 묛; 묛; 묛; 묛; ) HANGUL SYLLABLE MYOGS
+BB1C;BB1C;1106 116D 11AB;BB1C;1106 116D 11AB; # (묜; 묜; 묜; 묜; 묜; ) HANGUL SYLLABLE MYON
+BB1D;BB1D;1106 116D 11AC;BB1D;1106 116D 11AC; # (묝; 묝; 묝; 묝; 묝; ) HANGUL SYLLABLE MYONJ
+BB1E;BB1E;1106 116D 11AD;BB1E;1106 116D 11AD; # (묞; 묞; 묞; 묞; 묞; ) HANGUL SYLLABLE MYONH
+BB1F;BB1F;1106 116D 11AE;BB1F;1106 116D 11AE; # (묟; 묟; 묟; 묟; 묟; ) HANGUL SYLLABLE MYOD
+BB20;BB20;1106 116D 11AF;BB20;1106 116D 11AF; # (묠; 묠; 묠; 묠; 묠; ) HANGUL SYLLABLE MYOL
+BB21;BB21;1106 116D 11B0;BB21;1106 116D 11B0; # (묡; 묡; 묡; 묡; 묡; ) HANGUL SYLLABLE MYOLG
+BB22;BB22;1106 116D 11B1;BB22;1106 116D 11B1; # (묢; 묢; 묢; 묢; 묢; ) HANGUL SYLLABLE MYOLM
+BB23;BB23;1106 116D 11B2;BB23;1106 116D 11B2; # (묣; 묣; 묣; 묣; 묣; ) HANGUL SYLLABLE MYOLB
+BB24;BB24;1106 116D 11B3;BB24;1106 116D 11B3; # (묤; 묤; 묤; 묤; 묤; ) HANGUL SYLLABLE MYOLS
+BB25;BB25;1106 116D 11B4;BB25;1106 116D 11B4; # (묥; 묥; 묥; 묥; 묥; ) HANGUL SYLLABLE MYOLT
+BB26;BB26;1106 116D 11B5;BB26;1106 116D 11B5; # (묦; 묦; 묦; 묦; 묦; ) HANGUL SYLLABLE MYOLP
+BB27;BB27;1106 116D 11B6;BB27;1106 116D 11B6; # (묧; 묧; 묧; 묧; 묧; ) HANGUL SYLLABLE MYOLH
+BB28;BB28;1106 116D 11B7;BB28;1106 116D 11B7; # (묨; 묨; 묨; 묨; 묨; ) HANGUL SYLLABLE MYOM
+BB29;BB29;1106 116D 11B8;BB29;1106 116D 11B8; # (묩; 묩; 묩; 묩; 묩; ) HANGUL SYLLABLE MYOB
+BB2A;BB2A;1106 116D 11B9;BB2A;1106 116D 11B9; # (묪; 묪; 묪; 묪; 묪; ) HANGUL SYLLABLE MYOBS
+BB2B;BB2B;1106 116D 11BA;BB2B;1106 116D 11BA; # (묫; 묫; 묫; 묫; 묫; ) HANGUL SYLLABLE MYOS
+BB2C;BB2C;1106 116D 11BB;BB2C;1106 116D 11BB; # (묬; 묬; 묬; 묬; 묬; ) HANGUL SYLLABLE MYOSS
+BB2D;BB2D;1106 116D 11BC;BB2D;1106 116D 11BC; # (묭; 묭; 묭; 묭; 묭; ) HANGUL SYLLABLE MYONG
+BB2E;BB2E;1106 116D 11BD;BB2E;1106 116D 11BD; # (묮; 묮; 묮; 묮; 묮; ) HANGUL SYLLABLE MYOJ
+BB2F;BB2F;1106 116D 11BE;BB2F;1106 116D 11BE; # (묯; 묯; 묯; 묯; 묯; ) HANGUL SYLLABLE MYOC
+BB30;BB30;1106 116D 11BF;BB30;1106 116D 11BF; # (묰; 묰; 묰; 묰; 묰; ) HANGUL SYLLABLE MYOK
+BB31;BB31;1106 116D 11C0;BB31;1106 116D 11C0; # (묱; 묱; 묱; 묱; 묱; ) HANGUL SYLLABLE MYOT
+BB32;BB32;1106 116D 11C1;BB32;1106 116D 11C1; # (묲; 묲; 묲; 묲; 묲; ) HANGUL SYLLABLE MYOP
+BB33;BB33;1106 116D 11C2;BB33;1106 116D 11C2; # (묳; 묳; 묳; 묳; 묳; ) HANGUL SYLLABLE MYOH
+BB34;BB34;1106 116E;BB34;1106 116E; # (무; 무; 무; 무; 무; ) HANGUL SYLLABLE MU
+BB35;BB35;1106 116E 11A8;BB35;1106 116E 11A8; # (묵; 묵; 묵; 묵; 묵; ) HANGUL SYLLABLE MUG
+BB36;BB36;1106 116E 11A9;BB36;1106 116E 11A9; # (묶; 묶; 묶; 묶; 묶; ) HANGUL SYLLABLE MUGG
+BB37;BB37;1106 116E 11AA;BB37;1106 116E 11AA; # (묷; 묷; 묷; 묷; 묷; ) HANGUL SYLLABLE MUGS
+BB38;BB38;1106 116E 11AB;BB38;1106 116E 11AB; # (문; 문; 문; 문; 문; ) HANGUL SYLLABLE MUN
+BB39;BB39;1106 116E 11AC;BB39;1106 116E 11AC; # (묹; 묹; 묹; 묹; 묹; ) HANGUL SYLLABLE MUNJ
+BB3A;BB3A;1106 116E 11AD;BB3A;1106 116E 11AD; # (묺; 묺; 묺; 묺; 묺; ) HANGUL SYLLABLE MUNH
+BB3B;BB3B;1106 116E 11AE;BB3B;1106 116E 11AE; # (묻; 묻; 묻; 묻; 묻; ) HANGUL SYLLABLE MUD
+BB3C;BB3C;1106 116E 11AF;BB3C;1106 116E 11AF; # (물; 물; 물; 물; 물; ) HANGUL SYLLABLE MUL
+BB3D;BB3D;1106 116E 11B0;BB3D;1106 116E 11B0; # (묽; 묽; 묽; 묽; 묽; ) HANGUL SYLLABLE MULG
+BB3E;BB3E;1106 116E 11B1;BB3E;1106 116E 11B1; # (묾; 묾; 묾; 묾; 묾; ) HANGUL SYLLABLE MULM
+BB3F;BB3F;1106 116E 11B2;BB3F;1106 116E 11B2; # (묿; 묿; 묿; 묿; 묿; ) HANGUL SYLLABLE MULB
+BB40;BB40;1106 116E 11B3;BB40;1106 116E 11B3; # (뭀; 뭀; 뭀; 뭀; 뭀; ) HANGUL SYLLABLE MULS
+BB41;BB41;1106 116E 11B4;BB41;1106 116E 11B4; # (뭁; 뭁; 뭁; 뭁; 뭁; ) HANGUL SYLLABLE MULT
+BB42;BB42;1106 116E 11B5;BB42;1106 116E 11B5; # (뭂; 뭂; 뭂; 뭂; 뭂; ) HANGUL SYLLABLE MULP
+BB43;BB43;1106 116E 11B6;BB43;1106 116E 11B6; # (뭃; 뭃; 뭃; 뭃; 뭃; ) HANGUL SYLLABLE MULH
+BB44;BB44;1106 116E 11B7;BB44;1106 116E 11B7; # (뭄; 뭄; 뭄; 뭄; 뭄; ) HANGUL SYLLABLE MUM
+BB45;BB45;1106 116E 11B8;BB45;1106 116E 11B8; # (뭅; 뭅; 뭅; 뭅; 뭅; ) HANGUL SYLLABLE MUB
+BB46;BB46;1106 116E 11B9;BB46;1106 116E 11B9; # (뭆; 뭆; 뭆; 뭆; 뭆; ) HANGUL SYLLABLE MUBS
+BB47;BB47;1106 116E 11BA;BB47;1106 116E 11BA; # (뭇; 뭇; 뭇; 뭇; 뭇; ) HANGUL SYLLABLE MUS
+BB48;BB48;1106 116E 11BB;BB48;1106 116E 11BB; # (뭈; 뭈; 뭈; 뭈; 뭈; ) HANGUL SYLLABLE MUSS
+BB49;BB49;1106 116E 11BC;BB49;1106 116E 11BC; # (뭉; 뭉; 뭉; 뭉; 뭉; ) HANGUL SYLLABLE MUNG
+BB4A;BB4A;1106 116E 11BD;BB4A;1106 116E 11BD; # (뭊; 뭊; 뭊; 뭊; 뭊; ) HANGUL SYLLABLE MUJ
+BB4B;BB4B;1106 116E 11BE;BB4B;1106 116E 11BE; # (뭋; 뭋; 뭋; 뭋; 뭋; ) HANGUL SYLLABLE MUC
+BB4C;BB4C;1106 116E 11BF;BB4C;1106 116E 11BF; # (뭌; 뭌; 뭌; 뭌; 뭌; ) HANGUL SYLLABLE MUK
+BB4D;BB4D;1106 116E 11C0;BB4D;1106 116E 11C0; # (뭍; 뭍; 뭍; 뭍; 뭍; ) HANGUL SYLLABLE MUT
+BB4E;BB4E;1106 116E 11C1;BB4E;1106 116E 11C1; # (뭎; 뭎; 뭎; 뭎; 뭎; ) HANGUL SYLLABLE MUP
+BB4F;BB4F;1106 116E 11C2;BB4F;1106 116E 11C2; # (뭏; 뭏; 뭏; 뭏; 뭏; ) HANGUL SYLLABLE MUH
+BB50;BB50;1106 116F;BB50;1106 116F; # (뭐; 뭐; 뭐; 뭐; 뭐; ) HANGUL SYLLABLE MWEO
+BB51;BB51;1106 116F 11A8;BB51;1106 116F 11A8; # (뭑; 뭑; 뭑; 뭑; 뭑; ) HANGUL SYLLABLE MWEOG
+BB52;BB52;1106 116F 11A9;BB52;1106 116F 11A9; # (뭒; 뭒; 뭒; 뭒; 뭒; ) HANGUL SYLLABLE MWEOGG
+BB53;BB53;1106 116F 11AA;BB53;1106 116F 11AA; # (뭓; 뭓; 뭓; 뭓; 뭓; ) HANGUL SYLLABLE MWEOGS
+BB54;BB54;1106 116F 11AB;BB54;1106 116F 11AB; # (뭔; 뭔; 뭔; 뭔; 뭔; ) HANGUL SYLLABLE MWEON
+BB55;BB55;1106 116F 11AC;BB55;1106 116F 11AC; # (뭕; 뭕; 뭕; 뭕; 뭕; ) HANGUL SYLLABLE MWEONJ
+BB56;BB56;1106 116F 11AD;BB56;1106 116F 11AD; # (뭖; 뭖; 뭖; 뭖; 뭖; ) HANGUL SYLLABLE MWEONH
+BB57;BB57;1106 116F 11AE;BB57;1106 116F 11AE; # (뭗; 뭗; 뭗; 뭗; 뭗; ) HANGUL SYLLABLE MWEOD
+BB58;BB58;1106 116F 11AF;BB58;1106 116F 11AF; # (뭘; 뭘; 뭘; 뭘; 뭘; ) HANGUL SYLLABLE MWEOL
+BB59;BB59;1106 116F 11B0;BB59;1106 116F 11B0; # (뭙; 뭙; 뭙; 뭙; 뭙; ) HANGUL SYLLABLE MWEOLG
+BB5A;BB5A;1106 116F 11B1;BB5A;1106 116F 11B1; # (뭚; 뭚; 뭚; 뭚; 뭚; ) HANGUL SYLLABLE MWEOLM
+BB5B;BB5B;1106 116F 11B2;BB5B;1106 116F 11B2; # (뭛; 뭛; 뭛; 뭛; 뭛; ) HANGUL SYLLABLE MWEOLB
+BB5C;BB5C;1106 116F 11B3;BB5C;1106 116F 11B3; # (뭜; 뭜; 뭜; 뭜; 뭜; ) HANGUL SYLLABLE MWEOLS
+BB5D;BB5D;1106 116F 11B4;BB5D;1106 116F 11B4; # (뭝; 뭝; 뭝; 뭝; 뭝; ) HANGUL SYLLABLE MWEOLT
+BB5E;BB5E;1106 116F 11B5;BB5E;1106 116F 11B5; # (뭞; 뭞; 뭞; 뭞; 뭞; ) HANGUL SYLLABLE MWEOLP
+BB5F;BB5F;1106 116F 11B6;BB5F;1106 116F 11B6; # (뭟; 뭟; 뭟; 뭟; 뭟; ) HANGUL SYLLABLE MWEOLH
+BB60;BB60;1106 116F 11B7;BB60;1106 116F 11B7; # (뭠; 뭠; 뭠; 뭠; 뭠; ) HANGUL SYLLABLE MWEOM
+BB61;BB61;1106 116F 11B8;BB61;1106 116F 11B8; # (뭡; 뭡; 뭡; 뭡; 뭡; ) HANGUL SYLLABLE MWEOB
+BB62;BB62;1106 116F 11B9;BB62;1106 116F 11B9; # (뭢; 뭢; 뭢; 뭢; 뭢; ) HANGUL SYLLABLE MWEOBS
+BB63;BB63;1106 116F 11BA;BB63;1106 116F 11BA; # (뭣; 뭣; 뭣; 뭣; 뭣; ) HANGUL SYLLABLE MWEOS
+BB64;BB64;1106 116F 11BB;BB64;1106 116F 11BB; # (뭤; 뭤; 뭤; 뭤; 뭤; ) HANGUL SYLLABLE MWEOSS
+BB65;BB65;1106 116F 11BC;BB65;1106 116F 11BC; # (뭥; 뭥; 뭥; 뭥; 뭥; ) HANGUL SYLLABLE MWEONG
+BB66;BB66;1106 116F 11BD;BB66;1106 116F 11BD; # (뭦; 뭦; 뭦; 뭦; 뭦; ) HANGUL SYLLABLE MWEOJ
+BB67;BB67;1106 116F 11BE;BB67;1106 116F 11BE; # (뭧; 뭧; 뭧; 뭧; 뭧; ) HANGUL SYLLABLE MWEOC
+BB68;BB68;1106 116F 11BF;BB68;1106 116F 11BF; # (뭨; 뭨; 뭨; 뭨; 뭨; ) HANGUL SYLLABLE MWEOK
+BB69;BB69;1106 116F 11C0;BB69;1106 116F 11C0; # (뭩; 뭩; 뭩; 뭩; 뭩; ) HANGUL SYLLABLE MWEOT
+BB6A;BB6A;1106 116F 11C1;BB6A;1106 116F 11C1; # (뭪; 뭪; 뭪; 뭪; 뭪; ) HANGUL SYLLABLE MWEOP
+BB6B;BB6B;1106 116F 11C2;BB6B;1106 116F 11C2; # (뭫; 뭫; 뭫; 뭫; 뭫; ) HANGUL SYLLABLE MWEOH
+BB6C;BB6C;1106 1170;BB6C;1106 1170; # (뭬; 뭬; 뭬; 뭬; 뭬; ) HANGUL SYLLABLE MWE
+BB6D;BB6D;1106 1170 11A8;BB6D;1106 1170 11A8; # (뭭; 뭭; 뭭; 뭭; 뭭; ) HANGUL SYLLABLE MWEG
+BB6E;BB6E;1106 1170 11A9;BB6E;1106 1170 11A9; # (뭮; 뭮; 뭮; 뭮; 뭮; ) HANGUL SYLLABLE MWEGG
+BB6F;BB6F;1106 1170 11AA;BB6F;1106 1170 11AA; # (뭯; 뭯; 뭯; 뭯; 뭯; ) HANGUL SYLLABLE MWEGS
+BB70;BB70;1106 1170 11AB;BB70;1106 1170 11AB; # (뭰; 뭰; 뭰; 뭰; 뭰; ) HANGUL SYLLABLE MWEN
+BB71;BB71;1106 1170 11AC;BB71;1106 1170 11AC; # (뭱; 뭱; 뭱; 뭱; 뭱; ) HANGUL SYLLABLE MWENJ
+BB72;BB72;1106 1170 11AD;BB72;1106 1170 11AD; # (뭲; 뭲; 뭲; 뭲; 뭲; ) HANGUL SYLLABLE MWENH
+BB73;BB73;1106 1170 11AE;BB73;1106 1170 11AE; # (뭳; 뭳; 뭳; 뭳; 뭳; ) HANGUL SYLLABLE MWED
+BB74;BB74;1106 1170 11AF;BB74;1106 1170 11AF; # (뭴; 뭴; 뭴; 뭴; 뭴; ) HANGUL SYLLABLE MWEL
+BB75;BB75;1106 1170 11B0;BB75;1106 1170 11B0; # (뭵; 뭵; 뭵; 뭵; 뭵; ) HANGUL SYLLABLE MWELG
+BB76;BB76;1106 1170 11B1;BB76;1106 1170 11B1; # (뭶; 뭶; 뭶; 뭶; 뭶; ) HANGUL SYLLABLE MWELM
+BB77;BB77;1106 1170 11B2;BB77;1106 1170 11B2; # (뭷; 뭷; 뭷; 뭷; 뭷; ) HANGUL SYLLABLE MWELB
+BB78;BB78;1106 1170 11B3;BB78;1106 1170 11B3; # (뭸; 뭸; 뭸; 뭸; 뭸; ) HANGUL SYLLABLE MWELS
+BB79;BB79;1106 1170 11B4;BB79;1106 1170 11B4; # (뭹; 뭹; 뭹; 뭹; 뭹; ) HANGUL SYLLABLE MWELT
+BB7A;BB7A;1106 1170 11B5;BB7A;1106 1170 11B5; # (뭺; 뭺; 뭺; 뭺; 뭺; ) HANGUL SYLLABLE MWELP
+BB7B;BB7B;1106 1170 11B6;BB7B;1106 1170 11B6; # (뭻; 뭻; 뭻; 뭻; 뭻; ) HANGUL SYLLABLE MWELH
+BB7C;BB7C;1106 1170 11B7;BB7C;1106 1170 11B7; # (뭼; 뭼; 뭼; 뭼; 뭼; ) HANGUL SYLLABLE MWEM
+BB7D;BB7D;1106 1170 11B8;BB7D;1106 1170 11B8; # (뭽; 뭽; 뭽; 뭽; 뭽; ) HANGUL SYLLABLE MWEB
+BB7E;BB7E;1106 1170 11B9;BB7E;1106 1170 11B9; # (뭾; 뭾; 뭾; 뭾; 뭾; ) HANGUL SYLLABLE MWEBS
+BB7F;BB7F;1106 1170 11BA;BB7F;1106 1170 11BA; # (뭿; 뭿; 뭿; 뭿; 뭿; ) HANGUL SYLLABLE MWES
+BB80;BB80;1106 1170 11BB;BB80;1106 1170 11BB; # (뮀; 뮀; 뮀; 뮀; 뮀; ) HANGUL SYLLABLE MWESS
+BB81;BB81;1106 1170 11BC;BB81;1106 1170 11BC; # (뮁; 뮁; 뮁; 뮁; 뮁; ) HANGUL SYLLABLE MWENG
+BB82;BB82;1106 1170 11BD;BB82;1106 1170 11BD; # (뮂; 뮂; 뮂; 뮂; 뮂; ) HANGUL SYLLABLE MWEJ
+BB83;BB83;1106 1170 11BE;BB83;1106 1170 11BE; # (뮃; 뮃; 뮃; 뮃; 뮃; ) HANGUL SYLLABLE MWEC
+BB84;BB84;1106 1170 11BF;BB84;1106 1170 11BF; # (뮄; 뮄; 뮄; 뮄; 뮄; ) HANGUL SYLLABLE MWEK
+BB85;BB85;1106 1170 11C0;BB85;1106 1170 11C0; # (뮅; 뮅; 뮅; 뮅; 뮅; ) HANGUL SYLLABLE MWET
+BB86;BB86;1106 1170 11C1;BB86;1106 1170 11C1; # (뮆; 뮆; 뮆; 뮆; 뮆; ) HANGUL SYLLABLE MWEP
+BB87;BB87;1106 1170 11C2;BB87;1106 1170 11C2; # (뮇; 뮇; 뮇; 뮇; 뮇; ) HANGUL SYLLABLE MWEH
+BB88;BB88;1106 1171;BB88;1106 1171; # (뮈; 뮈; 뮈; 뮈; 뮈; ) HANGUL SYLLABLE MWI
+BB89;BB89;1106 1171 11A8;BB89;1106 1171 11A8; # (뮉; 뮉; 뮉; 뮉; 뮉; ) HANGUL SYLLABLE MWIG
+BB8A;BB8A;1106 1171 11A9;BB8A;1106 1171 11A9; # (뮊; 뮊; 뮊; 뮊; 뮊; ) HANGUL SYLLABLE MWIGG
+BB8B;BB8B;1106 1171 11AA;BB8B;1106 1171 11AA; # (뮋; 뮋; 뮋; 뮋; 뮋; ) HANGUL SYLLABLE MWIGS
+BB8C;BB8C;1106 1171 11AB;BB8C;1106 1171 11AB; # (뮌; 뮌; 뮌; 뮌; 뮌; ) HANGUL SYLLABLE MWIN
+BB8D;BB8D;1106 1171 11AC;BB8D;1106 1171 11AC; # (뮍; 뮍; 뮍; 뮍; 뮍; ) HANGUL SYLLABLE MWINJ
+BB8E;BB8E;1106 1171 11AD;BB8E;1106 1171 11AD; # (뮎; 뮎; 뮎; 뮎; 뮎; ) HANGUL SYLLABLE MWINH
+BB8F;BB8F;1106 1171 11AE;BB8F;1106 1171 11AE; # (뮏; 뮏; 뮏; 뮏; 뮏; ) HANGUL SYLLABLE MWID
+BB90;BB90;1106 1171 11AF;BB90;1106 1171 11AF; # (뮐; 뮐; 뮐; 뮐; 뮐; ) HANGUL SYLLABLE MWIL
+BB91;BB91;1106 1171 11B0;BB91;1106 1171 11B0; # (뮑; 뮑; 뮑; 뮑; 뮑; ) HANGUL SYLLABLE MWILG
+BB92;BB92;1106 1171 11B1;BB92;1106 1171 11B1; # (뮒; 뮒; 뮒; 뮒; 뮒; ) HANGUL SYLLABLE MWILM
+BB93;BB93;1106 1171 11B2;BB93;1106 1171 11B2; # (뮓; 뮓; 뮓; 뮓; 뮓; ) HANGUL SYLLABLE MWILB
+BB94;BB94;1106 1171 11B3;BB94;1106 1171 11B3; # (뮔; 뮔; 뮔; 뮔; 뮔; ) HANGUL SYLLABLE MWILS
+BB95;BB95;1106 1171 11B4;BB95;1106 1171 11B4; # (뮕; 뮕; 뮕; 뮕; 뮕; ) HANGUL SYLLABLE MWILT
+BB96;BB96;1106 1171 11B5;BB96;1106 1171 11B5; # (뮖; 뮖; 뮖; 뮖; 뮖; ) HANGUL SYLLABLE MWILP
+BB97;BB97;1106 1171 11B6;BB97;1106 1171 11B6; # (뮗; 뮗; 뮗; 뮗; 뮗; ) HANGUL SYLLABLE MWILH
+BB98;BB98;1106 1171 11B7;BB98;1106 1171 11B7; # (뮘; 뮘; 뮘; 뮘; 뮘; ) HANGUL SYLLABLE MWIM
+BB99;BB99;1106 1171 11B8;BB99;1106 1171 11B8; # (뮙; 뮙; 뮙; 뮙; 뮙; ) HANGUL SYLLABLE MWIB
+BB9A;BB9A;1106 1171 11B9;BB9A;1106 1171 11B9; # (뮚; 뮚; 뮚; 뮚; 뮚; ) HANGUL SYLLABLE MWIBS
+BB9B;BB9B;1106 1171 11BA;BB9B;1106 1171 11BA; # (뮛; 뮛; 뮛; 뮛; 뮛; ) HANGUL SYLLABLE MWIS
+BB9C;BB9C;1106 1171 11BB;BB9C;1106 1171 11BB; # (뮜; 뮜; 뮜; 뮜; 뮜; ) HANGUL SYLLABLE MWISS
+BB9D;BB9D;1106 1171 11BC;BB9D;1106 1171 11BC; # (뮝; 뮝; 뮝; 뮝; 뮝; ) HANGUL SYLLABLE MWING
+BB9E;BB9E;1106 1171 11BD;BB9E;1106 1171 11BD; # (뮞; 뮞; 뮞; 뮞; 뮞; ) HANGUL SYLLABLE MWIJ
+BB9F;BB9F;1106 1171 11BE;BB9F;1106 1171 11BE; # (뮟; 뮟; 뮟; 뮟; 뮟; ) HANGUL SYLLABLE MWIC
+BBA0;BBA0;1106 1171 11BF;BBA0;1106 1171 11BF; # (뮠; 뮠; 뮠; 뮠; 뮠; ) HANGUL SYLLABLE MWIK
+BBA1;BBA1;1106 1171 11C0;BBA1;1106 1171 11C0; # (뮡; 뮡; 뮡; 뮡; 뮡; ) HANGUL SYLLABLE MWIT
+BBA2;BBA2;1106 1171 11C1;BBA2;1106 1171 11C1; # (뮢; 뮢; 뮢; 뮢; 뮢; ) HANGUL SYLLABLE MWIP
+BBA3;BBA3;1106 1171 11C2;BBA3;1106 1171 11C2; # (뮣; 뮣; 뮣; 뮣; 뮣; ) HANGUL SYLLABLE MWIH
+BBA4;BBA4;1106 1172;BBA4;1106 1172; # (뮤; 뮤; 뮤; 뮤; 뮤; ) HANGUL SYLLABLE MYU
+BBA5;BBA5;1106 1172 11A8;BBA5;1106 1172 11A8; # (뮥; 뮥; 뮥; 뮥; 뮥; ) HANGUL SYLLABLE MYUG
+BBA6;BBA6;1106 1172 11A9;BBA6;1106 1172 11A9; # (뮦; 뮦; 뮦; 뮦; 뮦; ) HANGUL SYLLABLE MYUGG
+BBA7;BBA7;1106 1172 11AA;BBA7;1106 1172 11AA; # (뮧; 뮧; 뮧; 뮧; 뮧; ) HANGUL SYLLABLE MYUGS
+BBA8;BBA8;1106 1172 11AB;BBA8;1106 1172 11AB; # (뮨; 뮨; 뮨; 뮨; 뮨; ) HANGUL SYLLABLE MYUN
+BBA9;BBA9;1106 1172 11AC;BBA9;1106 1172 11AC; # (뮩; 뮩; 뮩; 뮩; 뮩; ) HANGUL SYLLABLE MYUNJ
+BBAA;BBAA;1106 1172 11AD;BBAA;1106 1172 11AD; # (뮪; 뮪; 뮪; 뮪; 뮪; ) HANGUL SYLLABLE MYUNH
+BBAB;BBAB;1106 1172 11AE;BBAB;1106 1172 11AE; # (뮫; 뮫; 뮫; 뮫; 뮫; ) HANGUL SYLLABLE MYUD
+BBAC;BBAC;1106 1172 11AF;BBAC;1106 1172 11AF; # (뮬; 뮬; 뮬; 뮬; 뮬; ) HANGUL SYLLABLE MYUL
+BBAD;BBAD;1106 1172 11B0;BBAD;1106 1172 11B0; # (뮭; 뮭; 뮭; 뮭; 뮭; ) HANGUL SYLLABLE MYULG
+BBAE;BBAE;1106 1172 11B1;BBAE;1106 1172 11B1; # (뮮; 뮮; 뮮; 뮮; 뮮; ) HANGUL SYLLABLE MYULM
+BBAF;BBAF;1106 1172 11B2;BBAF;1106 1172 11B2; # (뮯; 뮯; 뮯; 뮯; 뮯; ) HANGUL SYLLABLE MYULB
+BBB0;BBB0;1106 1172 11B3;BBB0;1106 1172 11B3; # (뮰; 뮰; 뮰; 뮰; 뮰; ) HANGUL SYLLABLE MYULS
+BBB1;BBB1;1106 1172 11B4;BBB1;1106 1172 11B4; # (뮱; 뮱; 뮱; 뮱; 뮱; ) HANGUL SYLLABLE MYULT
+BBB2;BBB2;1106 1172 11B5;BBB2;1106 1172 11B5; # (뮲; 뮲; 뮲; 뮲; 뮲; ) HANGUL SYLLABLE MYULP
+BBB3;BBB3;1106 1172 11B6;BBB3;1106 1172 11B6; # (뮳; 뮳; 뮳; 뮳; 뮳; ) HANGUL SYLLABLE MYULH
+BBB4;BBB4;1106 1172 11B7;BBB4;1106 1172 11B7; # (뮴; 뮴; 뮴; 뮴; 뮴; ) HANGUL SYLLABLE MYUM
+BBB5;BBB5;1106 1172 11B8;BBB5;1106 1172 11B8; # (뮵; 뮵; 뮵; 뮵; 뮵; ) HANGUL SYLLABLE MYUB
+BBB6;BBB6;1106 1172 11B9;BBB6;1106 1172 11B9; # (뮶; 뮶; 뮶; 뮶; 뮶; ) HANGUL SYLLABLE MYUBS
+BBB7;BBB7;1106 1172 11BA;BBB7;1106 1172 11BA; # (뮷; 뮷; 뮷; 뮷; 뮷; ) HANGUL SYLLABLE MYUS
+BBB8;BBB8;1106 1172 11BB;BBB8;1106 1172 11BB; # (뮸; 뮸; 뮸; 뮸; 뮸; ) HANGUL SYLLABLE MYUSS
+BBB9;BBB9;1106 1172 11BC;BBB9;1106 1172 11BC; # (뮹; 뮹; 뮹; 뮹; 뮹; ) HANGUL SYLLABLE MYUNG
+BBBA;BBBA;1106 1172 11BD;BBBA;1106 1172 11BD; # (뮺; 뮺; 뮺; 뮺; 뮺; ) HANGUL SYLLABLE MYUJ
+BBBB;BBBB;1106 1172 11BE;BBBB;1106 1172 11BE; # (뮻; 뮻; 뮻; 뮻; 뮻; ) HANGUL SYLLABLE MYUC
+BBBC;BBBC;1106 1172 11BF;BBBC;1106 1172 11BF; # (뮼; 뮼; 뮼; 뮼; 뮼; ) HANGUL SYLLABLE MYUK
+BBBD;BBBD;1106 1172 11C0;BBBD;1106 1172 11C0; # (뮽; 뮽; 뮽; 뮽; 뮽; ) HANGUL SYLLABLE MYUT
+BBBE;BBBE;1106 1172 11C1;BBBE;1106 1172 11C1; # (뮾; 뮾; 뮾; 뮾; 뮾; ) HANGUL SYLLABLE MYUP
+BBBF;BBBF;1106 1172 11C2;BBBF;1106 1172 11C2; # (뮿; 뮿; 뮿; 뮿; 뮿; ) HANGUL SYLLABLE MYUH
+BBC0;BBC0;1106 1173;BBC0;1106 1173; # (므; 므; 므; 므; 므; ) HANGUL SYLLABLE MEU
+BBC1;BBC1;1106 1173 11A8;BBC1;1106 1173 11A8; # (믁; 믁; 믁; 믁; 믁; ) HANGUL SYLLABLE MEUG
+BBC2;BBC2;1106 1173 11A9;BBC2;1106 1173 11A9; # (믂; 믂; 믂; 믂; 믂; ) HANGUL SYLLABLE MEUGG
+BBC3;BBC3;1106 1173 11AA;BBC3;1106 1173 11AA; # (믃; 믃; 믃; 믃; 믃; ) HANGUL SYLLABLE MEUGS
+BBC4;BBC4;1106 1173 11AB;BBC4;1106 1173 11AB; # (믄; 믄; 믄; 믄; 믄; ) HANGUL SYLLABLE MEUN
+BBC5;BBC5;1106 1173 11AC;BBC5;1106 1173 11AC; # (믅; 믅; 믅; 믅; 믅; ) HANGUL SYLLABLE MEUNJ
+BBC6;BBC6;1106 1173 11AD;BBC6;1106 1173 11AD; # (믆; 믆; 믆; 믆; 믆; ) HANGUL SYLLABLE MEUNH
+BBC7;BBC7;1106 1173 11AE;BBC7;1106 1173 11AE; # (믇; 믇; 믇; 믇; 믇; ) HANGUL SYLLABLE MEUD
+BBC8;BBC8;1106 1173 11AF;BBC8;1106 1173 11AF; # (믈; 믈; 믈; 믈; 믈; ) HANGUL SYLLABLE MEUL
+BBC9;BBC9;1106 1173 11B0;BBC9;1106 1173 11B0; # (믉; 믉; 믉; 믉; 믉; ) HANGUL SYLLABLE MEULG
+BBCA;BBCA;1106 1173 11B1;BBCA;1106 1173 11B1; # (믊; 믊; 믊; 믊; 믊; ) HANGUL SYLLABLE MEULM
+BBCB;BBCB;1106 1173 11B2;BBCB;1106 1173 11B2; # (믋; 믋; 믋; 믋; 믋; ) HANGUL SYLLABLE MEULB
+BBCC;BBCC;1106 1173 11B3;BBCC;1106 1173 11B3; # (믌; 믌; 믌; 믌; 믌; ) HANGUL SYLLABLE MEULS
+BBCD;BBCD;1106 1173 11B4;BBCD;1106 1173 11B4; # (믍; 믍; 믍; 믍; 믍; ) HANGUL SYLLABLE MEULT
+BBCE;BBCE;1106 1173 11B5;BBCE;1106 1173 11B5; # (믎; 믎; 믎; 믎; 믎; ) HANGUL SYLLABLE MEULP
+BBCF;BBCF;1106 1173 11B6;BBCF;1106 1173 11B6; # (믏; 믏; 믏; 믏; 믏; ) HANGUL SYLLABLE MEULH
+BBD0;BBD0;1106 1173 11B7;BBD0;1106 1173 11B7; # (믐; 믐; 믐; 믐; 믐; ) HANGUL SYLLABLE MEUM
+BBD1;BBD1;1106 1173 11B8;BBD1;1106 1173 11B8; # (믑; 믑; 믑; 믑; 믑; ) HANGUL SYLLABLE MEUB
+BBD2;BBD2;1106 1173 11B9;BBD2;1106 1173 11B9; # (믒; 믒; 믒; 믒; 믒; ) HANGUL SYLLABLE MEUBS
+BBD3;BBD3;1106 1173 11BA;BBD3;1106 1173 11BA; # (믓; 믓; 믓; 믓; 믓; ) HANGUL SYLLABLE MEUS
+BBD4;BBD4;1106 1173 11BB;BBD4;1106 1173 11BB; # (믔; 믔; 믔; 믔; 믔; ) HANGUL SYLLABLE MEUSS
+BBD5;BBD5;1106 1173 11BC;BBD5;1106 1173 11BC; # (믕; 믕; 믕; 믕; 믕; ) HANGUL SYLLABLE MEUNG
+BBD6;BBD6;1106 1173 11BD;BBD6;1106 1173 11BD; # (믖; 믖; 믖; 믖; 믖; ) HANGUL SYLLABLE MEUJ
+BBD7;BBD7;1106 1173 11BE;BBD7;1106 1173 11BE; # (믗; 믗; 믗; 믗; 믗; ) HANGUL SYLLABLE MEUC
+BBD8;BBD8;1106 1173 11BF;BBD8;1106 1173 11BF; # (믘; 믘; 믘; 믘; 믘; ) HANGUL SYLLABLE MEUK
+BBD9;BBD9;1106 1173 11C0;BBD9;1106 1173 11C0; # (믙; 믙; 믙; 믙; 믙; ) HANGUL SYLLABLE MEUT
+BBDA;BBDA;1106 1173 11C1;BBDA;1106 1173 11C1; # (믚; 믚; 믚; 믚; 믚; ) HANGUL SYLLABLE MEUP
+BBDB;BBDB;1106 1173 11C2;BBDB;1106 1173 11C2; # (믛; 믛; 믛; 믛; 믛; ) HANGUL SYLLABLE MEUH
+BBDC;BBDC;1106 1174;BBDC;1106 1174; # (믜; 믜; 믜; 믜; 믜; ) HANGUL SYLLABLE MYI
+BBDD;BBDD;1106 1174 11A8;BBDD;1106 1174 11A8; # (믝; 믝; 믝; 믝; 믝; ) HANGUL SYLLABLE MYIG
+BBDE;BBDE;1106 1174 11A9;BBDE;1106 1174 11A9; # (믞; 믞; 믞; 믞; 믞; ) HANGUL SYLLABLE MYIGG
+BBDF;BBDF;1106 1174 11AA;BBDF;1106 1174 11AA; # (믟; 믟; 믟; 믟; 믟; ) HANGUL SYLLABLE MYIGS
+BBE0;BBE0;1106 1174 11AB;BBE0;1106 1174 11AB; # (믠; 믠; 믠; 믠; 믠; ) HANGUL SYLLABLE MYIN
+BBE1;BBE1;1106 1174 11AC;BBE1;1106 1174 11AC; # (믡; 믡; 믡; 믡; 믡; ) HANGUL SYLLABLE MYINJ
+BBE2;BBE2;1106 1174 11AD;BBE2;1106 1174 11AD; # (믢; 믢; 믢; 믢; 믢; ) HANGUL SYLLABLE MYINH
+BBE3;BBE3;1106 1174 11AE;BBE3;1106 1174 11AE; # (믣; 믣; 믣; 믣; 믣; ) HANGUL SYLLABLE MYID
+BBE4;BBE4;1106 1174 11AF;BBE4;1106 1174 11AF; # (믤; 믤; 믤; 믤; 믤; ) HANGUL SYLLABLE MYIL
+BBE5;BBE5;1106 1174 11B0;BBE5;1106 1174 11B0; # (믥; 믥; 믥; 믥; 믥; ) HANGUL SYLLABLE MYILG
+BBE6;BBE6;1106 1174 11B1;BBE6;1106 1174 11B1; # (믦; 믦; 믦; 믦; 믦; ) HANGUL SYLLABLE MYILM
+BBE7;BBE7;1106 1174 11B2;BBE7;1106 1174 11B2; # (믧; 믧; 믧; 믧; 믧; ) HANGUL SYLLABLE MYILB
+BBE8;BBE8;1106 1174 11B3;BBE8;1106 1174 11B3; # (믨; 믨; 믨; 믨; 믨; ) HANGUL SYLLABLE MYILS
+BBE9;BBE9;1106 1174 11B4;BBE9;1106 1174 11B4; # (믩; 믩; 믩; 믩; 믩; ) HANGUL SYLLABLE MYILT
+BBEA;BBEA;1106 1174 11B5;BBEA;1106 1174 11B5; # (믪; 믪; 믪; 믪; 믪; ) HANGUL SYLLABLE MYILP
+BBEB;BBEB;1106 1174 11B6;BBEB;1106 1174 11B6; # (믫; 믫; 믫; 믫; 믫; ) HANGUL SYLLABLE MYILH
+BBEC;BBEC;1106 1174 11B7;BBEC;1106 1174 11B7; # (믬; 믬; 믬; 믬; 믬; ) HANGUL SYLLABLE MYIM
+BBED;BBED;1106 1174 11B8;BBED;1106 1174 11B8; # (믭; 믭; 믭; 믭; 믭; ) HANGUL SYLLABLE MYIB
+BBEE;BBEE;1106 1174 11B9;BBEE;1106 1174 11B9; # (믮; 믮; 믮; 믮; 믮; ) HANGUL SYLLABLE MYIBS
+BBEF;BBEF;1106 1174 11BA;BBEF;1106 1174 11BA; # (믯; 믯; 믯; 믯; 믯; ) HANGUL SYLLABLE MYIS
+BBF0;BBF0;1106 1174 11BB;BBF0;1106 1174 11BB; # (믰; 믰; 믰; 믰; 믰; ) HANGUL SYLLABLE MYISS
+BBF1;BBF1;1106 1174 11BC;BBF1;1106 1174 11BC; # (믱; 믱; 믱; 믱; 믱; ) HANGUL SYLLABLE MYING
+BBF2;BBF2;1106 1174 11BD;BBF2;1106 1174 11BD; # (믲; 믲; 믲; 믲; 믲; ) HANGUL SYLLABLE MYIJ
+BBF3;BBF3;1106 1174 11BE;BBF3;1106 1174 11BE; # (믳; 믳; 믳; 믳; 믳; ) HANGUL SYLLABLE MYIC
+BBF4;BBF4;1106 1174 11BF;BBF4;1106 1174 11BF; # (믴; 믴; 믴; 믴; 믴; ) HANGUL SYLLABLE MYIK
+BBF5;BBF5;1106 1174 11C0;BBF5;1106 1174 11C0; # (믵; 믵; 믵; 믵; 믵; ) HANGUL SYLLABLE MYIT
+BBF6;BBF6;1106 1174 11C1;BBF6;1106 1174 11C1; # (믶; 믶; 믶; 믶; 믶; ) HANGUL SYLLABLE MYIP
+BBF7;BBF7;1106 1174 11C2;BBF7;1106 1174 11C2; # (믷; 믷; 믷; 믷; 믷; ) HANGUL SYLLABLE MYIH
+BBF8;BBF8;1106 1175;BBF8;1106 1175; # (미; 미; 미; 미; 미; ) HANGUL SYLLABLE MI
+BBF9;BBF9;1106 1175 11A8;BBF9;1106 1175 11A8; # (믹; 믹; 믹; 믹; 믹; ) HANGUL SYLLABLE MIG
+BBFA;BBFA;1106 1175 11A9;BBFA;1106 1175 11A9; # (믺; 믺; 믺; 믺; 믺; ) HANGUL SYLLABLE MIGG
+BBFB;BBFB;1106 1175 11AA;BBFB;1106 1175 11AA; # (믻; 믻; 믻; 믻; 믻; ) HANGUL SYLLABLE MIGS
+BBFC;BBFC;1106 1175 11AB;BBFC;1106 1175 11AB; # (민; 민; 민; 민; 민; ) HANGUL SYLLABLE MIN
+BBFD;BBFD;1106 1175 11AC;BBFD;1106 1175 11AC; # (믽; 믽; 믽; 믽; 믽; ) HANGUL SYLLABLE MINJ
+BBFE;BBFE;1106 1175 11AD;BBFE;1106 1175 11AD; # (믾; 믾; 믾; 믾; 믾; ) HANGUL SYLLABLE MINH
+BBFF;BBFF;1106 1175 11AE;BBFF;1106 1175 11AE; # (믿; 믿; 믿; 믿; 믿; ) HANGUL SYLLABLE MID
+BC00;BC00;1106 1175 11AF;BC00;1106 1175 11AF; # (밀; 밀; 밀; 밀; 밀; ) HANGUL SYLLABLE MIL
+BC01;BC01;1106 1175 11B0;BC01;1106 1175 11B0; # (밁; 밁; 밁; 밁; 밁; ) HANGUL SYLLABLE MILG
+BC02;BC02;1106 1175 11B1;BC02;1106 1175 11B1; # (밂; 밂; 밂; 밂; 밂; ) HANGUL SYLLABLE MILM
+BC03;BC03;1106 1175 11B2;BC03;1106 1175 11B2; # (밃; 밃; 밃; 밃; 밃; ) HANGUL SYLLABLE MILB
+BC04;BC04;1106 1175 11B3;BC04;1106 1175 11B3; # (밄; 밄; 밄; 밄; 밄; ) HANGUL SYLLABLE MILS
+BC05;BC05;1106 1175 11B4;BC05;1106 1175 11B4; # (밅; 밅; 밅; 밅; 밅; ) HANGUL SYLLABLE MILT
+BC06;BC06;1106 1175 11B5;BC06;1106 1175 11B5; # (밆; 밆; 밆; 밆; 밆; ) HANGUL SYLLABLE MILP
+BC07;BC07;1106 1175 11B6;BC07;1106 1175 11B6; # (밇; 밇; 밇; 밇; 밇; ) HANGUL SYLLABLE MILH
+BC08;BC08;1106 1175 11B7;BC08;1106 1175 11B7; # (밈; 밈; 밈; 밈; 밈; ) HANGUL SYLLABLE MIM
+BC09;BC09;1106 1175 11B8;BC09;1106 1175 11B8; # (밉; 밉; 밉; 밉; 밉; ) HANGUL SYLLABLE MIB
+BC0A;BC0A;1106 1175 11B9;BC0A;1106 1175 11B9; # (밊; 밊; 밊; 밊; 밊; ) HANGUL SYLLABLE MIBS
+BC0B;BC0B;1106 1175 11BA;BC0B;1106 1175 11BA; # (밋; 밋; 밋; 밋; 밋; ) HANGUL SYLLABLE MIS
+BC0C;BC0C;1106 1175 11BB;BC0C;1106 1175 11BB; # (밌; 밌; 밌; 밌; 밌; ) HANGUL SYLLABLE MISS
+BC0D;BC0D;1106 1175 11BC;BC0D;1106 1175 11BC; # (밍; 밍; 밍; 밍; 밍; ) HANGUL SYLLABLE MING
+BC0E;BC0E;1106 1175 11BD;BC0E;1106 1175 11BD; # (밎; 밎; 밎; 밎; 밎; ) HANGUL SYLLABLE MIJ
+BC0F;BC0F;1106 1175 11BE;BC0F;1106 1175 11BE; # (및; 및; 및; 및; 및; ) HANGUL SYLLABLE MIC
+BC10;BC10;1106 1175 11BF;BC10;1106 1175 11BF; # (밐; 밐; 밐; 밐; 밐; ) HANGUL SYLLABLE MIK
+BC11;BC11;1106 1175 11C0;BC11;1106 1175 11C0; # (밑; 밑; 밑; 밑; 밑; ) HANGUL SYLLABLE MIT
+BC12;BC12;1106 1175 11C1;BC12;1106 1175 11C1; # (밒; 밒; 밒; 밒; 밒; ) HANGUL SYLLABLE MIP
+BC13;BC13;1106 1175 11C2;BC13;1106 1175 11C2; # (밓; 밓; 밓; 밓; 밓; ) HANGUL SYLLABLE MIH
+BC14;BC14;1107 1161;BC14;1107 1161; # (바; 바; 바; 바; 바; ) HANGUL SYLLABLE BA
+BC15;BC15;1107 1161 11A8;BC15;1107 1161 11A8; # (박; 박; 박; 박; 박; ) HANGUL SYLLABLE BAG
+BC16;BC16;1107 1161 11A9;BC16;1107 1161 11A9; # (밖; 밖; 밖; 밖; 밖; ) HANGUL SYLLABLE BAGG
+BC17;BC17;1107 1161 11AA;BC17;1107 1161 11AA; # (밗; 밗; 밗; 밗; 밗; ) HANGUL SYLLABLE BAGS
+BC18;BC18;1107 1161 11AB;BC18;1107 1161 11AB; # (반; 반; 반; 반; 반; ) HANGUL SYLLABLE BAN
+BC19;BC19;1107 1161 11AC;BC19;1107 1161 11AC; # (밙; 밙; 밙; 밙; 밙; ) HANGUL SYLLABLE BANJ
+BC1A;BC1A;1107 1161 11AD;BC1A;1107 1161 11AD; # (밚; 밚; 밚; 밚; 밚; ) HANGUL SYLLABLE BANH
+BC1B;BC1B;1107 1161 11AE;BC1B;1107 1161 11AE; # (받; 받; 받; 받; 받; ) HANGUL SYLLABLE BAD
+BC1C;BC1C;1107 1161 11AF;BC1C;1107 1161 11AF; # (발; 발; 발; 발; 발; ) HANGUL SYLLABLE BAL
+BC1D;BC1D;1107 1161 11B0;BC1D;1107 1161 11B0; # (밝; 밝; 밝; 밝; 밝; ) HANGUL SYLLABLE BALG
+BC1E;BC1E;1107 1161 11B1;BC1E;1107 1161 11B1; # (밞; 밞; 밞; 밞; 밞; ) HANGUL SYLLABLE BALM
+BC1F;BC1F;1107 1161 11B2;BC1F;1107 1161 11B2; # (밟; 밟; 밟; 밟; 밟; ) HANGUL SYLLABLE BALB
+BC20;BC20;1107 1161 11B3;BC20;1107 1161 11B3; # (밠; 밠; 밠; 밠; 밠; ) HANGUL SYLLABLE BALS
+BC21;BC21;1107 1161 11B4;BC21;1107 1161 11B4; # (밡; 밡; 밡; 밡; 밡; ) HANGUL SYLLABLE BALT
+BC22;BC22;1107 1161 11B5;BC22;1107 1161 11B5; # (밢; 밢; 밢; 밢; 밢; ) HANGUL SYLLABLE BALP
+BC23;BC23;1107 1161 11B6;BC23;1107 1161 11B6; # (밣; 밣; 밣; 밣; 밣; ) HANGUL SYLLABLE BALH
+BC24;BC24;1107 1161 11B7;BC24;1107 1161 11B7; # (밤; 밤; 밤; 밤; 밤; ) HANGUL SYLLABLE BAM
+BC25;BC25;1107 1161 11B8;BC25;1107 1161 11B8; # (밥; 밥; 밥; 밥; 밥; ) HANGUL SYLLABLE BAB
+BC26;BC26;1107 1161 11B9;BC26;1107 1161 11B9; # (밦; 밦; 밦; 밦; 밦; ) HANGUL SYLLABLE BABS
+BC27;BC27;1107 1161 11BA;BC27;1107 1161 11BA; # (밧; 밧; 밧; 밧; 밧; ) HANGUL SYLLABLE BAS
+BC28;BC28;1107 1161 11BB;BC28;1107 1161 11BB; # (밨; 밨; 밨; 밨; 밨; ) HANGUL SYLLABLE BASS
+BC29;BC29;1107 1161 11BC;BC29;1107 1161 11BC; # (방; 방; 방; 방; 방; ) HANGUL SYLLABLE BANG
+BC2A;BC2A;1107 1161 11BD;BC2A;1107 1161 11BD; # (밪; 밪; 밪; 밪; 밪; ) HANGUL SYLLABLE BAJ
+BC2B;BC2B;1107 1161 11BE;BC2B;1107 1161 11BE; # (밫; 밫; 밫; 밫; 밫; ) HANGUL SYLLABLE BAC
+BC2C;BC2C;1107 1161 11BF;BC2C;1107 1161 11BF; # (밬; 밬; 밬; 밬; 밬; ) HANGUL SYLLABLE BAK
+BC2D;BC2D;1107 1161 11C0;BC2D;1107 1161 11C0; # (밭; 밭; 밭; 밭; 밭; ) HANGUL SYLLABLE BAT
+BC2E;BC2E;1107 1161 11C1;BC2E;1107 1161 11C1; # (밮; 밮; 밮; 밮; 밮; ) HANGUL SYLLABLE BAP
+BC2F;BC2F;1107 1161 11C2;BC2F;1107 1161 11C2; # (밯; 밯; 밯; 밯; 밯; ) HANGUL SYLLABLE BAH
+BC30;BC30;1107 1162;BC30;1107 1162; # (배; 배; 배; 배; 배; ) HANGUL SYLLABLE BAE
+BC31;BC31;1107 1162 11A8;BC31;1107 1162 11A8; # (백; 백; 백; 백; 백; ) HANGUL SYLLABLE BAEG
+BC32;BC32;1107 1162 11A9;BC32;1107 1162 11A9; # (밲; 밲; 밲; 밲; 밲; ) HANGUL SYLLABLE BAEGG
+BC33;BC33;1107 1162 11AA;BC33;1107 1162 11AA; # (밳; 밳; 밳; 밳; 밳; ) HANGUL SYLLABLE BAEGS
+BC34;BC34;1107 1162 11AB;BC34;1107 1162 11AB; # (밴; 밴; 밴; 밴; 밴; ) HANGUL SYLLABLE BAEN
+BC35;BC35;1107 1162 11AC;BC35;1107 1162 11AC; # (밵; 밵; 밵; 밵; 밵; ) HANGUL SYLLABLE BAENJ
+BC36;BC36;1107 1162 11AD;BC36;1107 1162 11AD; # (밶; 밶; 밶; 밶; 밶; ) HANGUL SYLLABLE BAENH
+BC37;BC37;1107 1162 11AE;BC37;1107 1162 11AE; # (밷; 밷; 밷; 밷; 밷; ) HANGUL SYLLABLE BAED
+BC38;BC38;1107 1162 11AF;BC38;1107 1162 11AF; # (밸; 밸; 밸; 밸; 밸; ) HANGUL SYLLABLE BAEL
+BC39;BC39;1107 1162 11B0;BC39;1107 1162 11B0; # (밹; 밹; 밹; 밹; 밹; ) HANGUL SYLLABLE BAELG
+BC3A;BC3A;1107 1162 11B1;BC3A;1107 1162 11B1; # (밺; 밺; 밺; 밺; 밺; ) HANGUL SYLLABLE BAELM
+BC3B;BC3B;1107 1162 11B2;BC3B;1107 1162 11B2; # (밻; 밻; 밻; 밻; 밻; ) HANGUL SYLLABLE BAELB
+BC3C;BC3C;1107 1162 11B3;BC3C;1107 1162 11B3; # (밼; 밼; 밼; 밼; 밼; ) HANGUL SYLLABLE BAELS
+BC3D;BC3D;1107 1162 11B4;BC3D;1107 1162 11B4; # (밽; 밽; 밽; 밽; 밽; ) HANGUL SYLLABLE BAELT
+BC3E;BC3E;1107 1162 11B5;BC3E;1107 1162 11B5; # (밾; 밾; 밾; 밾; 밾; ) HANGUL SYLLABLE BAELP
+BC3F;BC3F;1107 1162 11B6;BC3F;1107 1162 11B6; # (밿; 밿; 밿; 밿; 밿; ) HANGUL SYLLABLE BAELH
+BC40;BC40;1107 1162 11B7;BC40;1107 1162 11B7; # (뱀; 뱀; 뱀; 뱀; 뱀; ) HANGUL SYLLABLE BAEM
+BC41;BC41;1107 1162 11B8;BC41;1107 1162 11B8; # (뱁; 뱁; 뱁; 뱁; 뱁; ) HANGUL SYLLABLE BAEB
+BC42;BC42;1107 1162 11B9;BC42;1107 1162 11B9; # (뱂; 뱂; 뱂; 뱂; 뱂; ) HANGUL SYLLABLE BAEBS
+BC43;BC43;1107 1162 11BA;BC43;1107 1162 11BA; # (뱃; 뱃; 뱃; 뱃; 뱃; ) HANGUL SYLLABLE BAES
+BC44;BC44;1107 1162 11BB;BC44;1107 1162 11BB; # (뱄; 뱄; 뱄; 뱄; 뱄; ) HANGUL SYLLABLE BAESS
+BC45;BC45;1107 1162 11BC;BC45;1107 1162 11BC; # (뱅; 뱅; 뱅; 뱅; 뱅; ) HANGUL SYLLABLE BAENG
+BC46;BC46;1107 1162 11BD;BC46;1107 1162 11BD; # (뱆; 뱆; 뱆; 뱆; 뱆; ) HANGUL SYLLABLE BAEJ
+BC47;BC47;1107 1162 11BE;BC47;1107 1162 11BE; # (뱇; 뱇; 뱇; 뱇; 뱇; ) HANGUL SYLLABLE BAEC
+BC48;BC48;1107 1162 11BF;BC48;1107 1162 11BF; # (뱈; 뱈; 뱈; 뱈; 뱈; ) HANGUL SYLLABLE BAEK
+BC49;BC49;1107 1162 11C0;BC49;1107 1162 11C0; # (뱉; 뱉; 뱉; 뱉; 뱉; ) HANGUL SYLLABLE BAET
+BC4A;BC4A;1107 1162 11C1;BC4A;1107 1162 11C1; # (뱊; 뱊; 뱊; 뱊; 뱊; ) HANGUL SYLLABLE BAEP
+BC4B;BC4B;1107 1162 11C2;BC4B;1107 1162 11C2; # (뱋; 뱋; 뱋; 뱋; 뱋; ) HANGUL SYLLABLE BAEH
+BC4C;BC4C;1107 1163;BC4C;1107 1163; # (뱌; 뱌; 뱌; 뱌; 뱌; ) HANGUL SYLLABLE BYA
+BC4D;BC4D;1107 1163 11A8;BC4D;1107 1163 11A8; # (뱍; 뱍; 뱍; 뱍; 뱍; ) HANGUL SYLLABLE BYAG
+BC4E;BC4E;1107 1163 11A9;BC4E;1107 1163 11A9; # (뱎; 뱎; 뱎; 뱎; 뱎; ) HANGUL SYLLABLE BYAGG
+BC4F;BC4F;1107 1163 11AA;BC4F;1107 1163 11AA; # (뱏; 뱏; 뱏; 뱏; 뱏; ) HANGUL SYLLABLE BYAGS
+BC50;BC50;1107 1163 11AB;BC50;1107 1163 11AB; # (뱐; 뱐; 뱐; 뱐; 뱐; ) HANGUL SYLLABLE BYAN
+BC51;BC51;1107 1163 11AC;BC51;1107 1163 11AC; # (뱑; 뱑; 뱑; 뱑; 뱑; ) HANGUL SYLLABLE BYANJ
+BC52;BC52;1107 1163 11AD;BC52;1107 1163 11AD; # (뱒; 뱒; 뱒; 뱒; 뱒; ) HANGUL SYLLABLE BYANH
+BC53;BC53;1107 1163 11AE;BC53;1107 1163 11AE; # (뱓; 뱓; 뱓; 뱓; 뱓; ) HANGUL SYLLABLE BYAD
+BC54;BC54;1107 1163 11AF;BC54;1107 1163 11AF; # (뱔; 뱔; 뱔; 뱔; 뱔; ) HANGUL SYLLABLE BYAL
+BC55;BC55;1107 1163 11B0;BC55;1107 1163 11B0; # (뱕; 뱕; 뱕; 뱕; 뱕; ) HANGUL SYLLABLE BYALG
+BC56;BC56;1107 1163 11B1;BC56;1107 1163 11B1; # (뱖; 뱖; 뱖; 뱖; 뱖; ) HANGUL SYLLABLE BYALM
+BC57;BC57;1107 1163 11B2;BC57;1107 1163 11B2; # (뱗; 뱗; 뱗; 뱗; 뱗; ) HANGUL SYLLABLE BYALB
+BC58;BC58;1107 1163 11B3;BC58;1107 1163 11B3; # (뱘; 뱘; 뱘; 뱘; 뱘; ) HANGUL SYLLABLE BYALS
+BC59;BC59;1107 1163 11B4;BC59;1107 1163 11B4; # (뱙; 뱙; 뱙; 뱙; 뱙; ) HANGUL SYLLABLE BYALT
+BC5A;BC5A;1107 1163 11B5;BC5A;1107 1163 11B5; # (뱚; 뱚; 뱚; 뱚; 뱚; ) HANGUL SYLLABLE BYALP
+BC5B;BC5B;1107 1163 11B6;BC5B;1107 1163 11B6; # (뱛; 뱛; 뱛; 뱛; 뱛; ) HANGUL SYLLABLE BYALH
+BC5C;BC5C;1107 1163 11B7;BC5C;1107 1163 11B7; # (뱜; 뱜; 뱜; 뱜; 뱜; ) HANGUL SYLLABLE BYAM
+BC5D;BC5D;1107 1163 11B8;BC5D;1107 1163 11B8; # (뱝; 뱝; 뱝; 뱝; 뱝; ) HANGUL SYLLABLE BYAB
+BC5E;BC5E;1107 1163 11B9;BC5E;1107 1163 11B9; # (뱞; 뱞; 뱞; 뱞; 뱞; ) HANGUL SYLLABLE BYABS
+BC5F;BC5F;1107 1163 11BA;BC5F;1107 1163 11BA; # (뱟; 뱟; 뱟; 뱟; 뱟; ) HANGUL SYLLABLE BYAS
+BC60;BC60;1107 1163 11BB;BC60;1107 1163 11BB; # (뱠; 뱠; 뱠; 뱠; 뱠; ) HANGUL SYLLABLE BYASS
+BC61;BC61;1107 1163 11BC;BC61;1107 1163 11BC; # (뱡; 뱡; 뱡; 뱡; 뱡; ) HANGUL SYLLABLE BYANG
+BC62;BC62;1107 1163 11BD;BC62;1107 1163 11BD; # (뱢; 뱢; 뱢; 뱢; 뱢; ) HANGUL SYLLABLE BYAJ
+BC63;BC63;1107 1163 11BE;BC63;1107 1163 11BE; # (뱣; 뱣; 뱣; 뱣; 뱣; ) HANGUL SYLLABLE BYAC
+BC64;BC64;1107 1163 11BF;BC64;1107 1163 11BF; # (뱤; 뱤; 뱤; 뱤; 뱤; ) HANGUL SYLLABLE BYAK
+BC65;BC65;1107 1163 11C0;BC65;1107 1163 11C0; # (뱥; 뱥; 뱥; 뱥; 뱥; ) HANGUL SYLLABLE BYAT
+BC66;BC66;1107 1163 11C1;BC66;1107 1163 11C1; # (뱦; 뱦; 뱦; 뱦; 뱦; ) HANGUL SYLLABLE BYAP
+BC67;BC67;1107 1163 11C2;BC67;1107 1163 11C2; # (뱧; 뱧; 뱧; 뱧; 뱧; ) HANGUL SYLLABLE BYAH
+BC68;BC68;1107 1164;BC68;1107 1164; # (뱨; 뱨; 뱨; 뱨; 뱨; ) HANGUL SYLLABLE BYAE
+BC69;BC69;1107 1164 11A8;BC69;1107 1164 11A8; # (뱩; 뱩; 뱩; 뱩; 뱩; ) HANGUL SYLLABLE BYAEG
+BC6A;BC6A;1107 1164 11A9;BC6A;1107 1164 11A9; # (뱪; 뱪; 뱪; 뱪; 뱪; ) HANGUL SYLLABLE BYAEGG
+BC6B;BC6B;1107 1164 11AA;BC6B;1107 1164 11AA; # (뱫; 뱫; 뱫; 뱫; 뱫; ) HANGUL SYLLABLE BYAEGS
+BC6C;BC6C;1107 1164 11AB;BC6C;1107 1164 11AB; # (뱬; 뱬; 뱬; 뱬; 뱬; ) HANGUL SYLLABLE BYAEN
+BC6D;BC6D;1107 1164 11AC;BC6D;1107 1164 11AC; # (뱭; 뱭; 뱭; 뱭; 뱭; ) HANGUL SYLLABLE BYAENJ
+BC6E;BC6E;1107 1164 11AD;BC6E;1107 1164 11AD; # (뱮; 뱮; 뱮; 뱮; 뱮; ) HANGUL SYLLABLE BYAENH
+BC6F;BC6F;1107 1164 11AE;BC6F;1107 1164 11AE; # (뱯; 뱯; 뱯; 뱯; 뱯; ) HANGUL SYLLABLE BYAED
+BC70;BC70;1107 1164 11AF;BC70;1107 1164 11AF; # (뱰; 뱰; 뱰; 뱰; 뱰; ) HANGUL SYLLABLE BYAEL
+BC71;BC71;1107 1164 11B0;BC71;1107 1164 11B0; # (뱱; 뱱; 뱱; 뱱; 뱱; ) HANGUL SYLLABLE BYAELG
+BC72;BC72;1107 1164 11B1;BC72;1107 1164 11B1; # (뱲; 뱲; 뱲; 뱲; 뱲; ) HANGUL SYLLABLE BYAELM
+BC73;BC73;1107 1164 11B2;BC73;1107 1164 11B2; # (뱳; 뱳; 뱳; 뱳; 뱳; ) HANGUL SYLLABLE BYAELB
+BC74;BC74;1107 1164 11B3;BC74;1107 1164 11B3; # (뱴; 뱴; 뱴; 뱴; 뱴; ) HANGUL SYLLABLE BYAELS
+BC75;BC75;1107 1164 11B4;BC75;1107 1164 11B4; # (뱵; 뱵; 뱵; 뱵; 뱵; ) HANGUL SYLLABLE BYAELT
+BC76;BC76;1107 1164 11B5;BC76;1107 1164 11B5; # (뱶; 뱶; 뱶; 뱶; 뱶; ) HANGUL SYLLABLE BYAELP
+BC77;BC77;1107 1164 11B6;BC77;1107 1164 11B6; # (뱷; 뱷; 뱷; 뱷; 뱷; ) HANGUL SYLLABLE BYAELH
+BC78;BC78;1107 1164 11B7;BC78;1107 1164 11B7; # (뱸; 뱸; 뱸; 뱸; 뱸; ) HANGUL SYLLABLE BYAEM
+BC79;BC79;1107 1164 11B8;BC79;1107 1164 11B8; # (뱹; 뱹; 뱹; 뱹; 뱹; ) HANGUL SYLLABLE BYAEB
+BC7A;BC7A;1107 1164 11B9;BC7A;1107 1164 11B9; # (뱺; 뱺; 뱺; 뱺; 뱺; ) HANGUL SYLLABLE BYAEBS
+BC7B;BC7B;1107 1164 11BA;BC7B;1107 1164 11BA; # (뱻; 뱻; 뱻; 뱻; 뱻; ) HANGUL SYLLABLE BYAES
+BC7C;BC7C;1107 1164 11BB;BC7C;1107 1164 11BB; # (뱼; 뱼; 뱼; 뱼; 뱼; ) HANGUL SYLLABLE BYAESS
+BC7D;BC7D;1107 1164 11BC;BC7D;1107 1164 11BC; # (뱽; 뱽; 뱽; 뱽; 뱽; ) HANGUL SYLLABLE BYAENG
+BC7E;BC7E;1107 1164 11BD;BC7E;1107 1164 11BD; # (뱾; 뱾; 뱾; 뱾; 뱾; ) HANGUL SYLLABLE BYAEJ
+BC7F;BC7F;1107 1164 11BE;BC7F;1107 1164 11BE; # (뱿; 뱿; 뱿; 뱿; 뱿; ) HANGUL SYLLABLE BYAEC
+BC80;BC80;1107 1164 11BF;BC80;1107 1164 11BF; # (벀; 벀; 벀; 벀; 벀; ) HANGUL SYLLABLE BYAEK
+BC81;BC81;1107 1164 11C0;BC81;1107 1164 11C0; # (벁; 벁; 벁; 벁; 벁; ) HANGUL SYLLABLE BYAET
+BC82;BC82;1107 1164 11C1;BC82;1107 1164 11C1; # (벂; 벂; 벂; 벂; 벂; ) HANGUL SYLLABLE BYAEP
+BC83;BC83;1107 1164 11C2;BC83;1107 1164 11C2; # (벃; 벃; 벃; 벃; 벃; ) HANGUL SYLLABLE BYAEH
+BC84;BC84;1107 1165;BC84;1107 1165; # (버; 버; 버; 버; 버; ) HANGUL SYLLABLE BEO
+BC85;BC85;1107 1165 11A8;BC85;1107 1165 11A8; # (벅; 벅; 벅; 벅; 벅; ) HANGUL SYLLABLE BEOG
+BC86;BC86;1107 1165 11A9;BC86;1107 1165 11A9; # (벆; 벆; 벆; 벆; 벆; ) HANGUL SYLLABLE BEOGG
+BC87;BC87;1107 1165 11AA;BC87;1107 1165 11AA; # (벇; 벇; 벇; 벇; 벇; ) HANGUL SYLLABLE BEOGS
+BC88;BC88;1107 1165 11AB;BC88;1107 1165 11AB; # (번; 번; 번; 번; 번; ) HANGUL SYLLABLE BEON
+BC89;BC89;1107 1165 11AC;BC89;1107 1165 11AC; # (벉; 벉; 벉; 벉; 벉; ) HANGUL SYLLABLE BEONJ
+BC8A;BC8A;1107 1165 11AD;BC8A;1107 1165 11AD; # (벊; 벊; 벊; 벊; 벊; ) HANGUL SYLLABLE BEONH
+BC8B;BC8B;1107 1165 11AE;BC8B;1107 1165 11AE; # (벋; 벋; 벋; 벋; 벋; ) HANGUL SYLLABLE BEOD
+BC8C;BC8C;1107 1165 11AF;BC8C;1107 1165 11AF; # (벌; 벌; 벌; 벌; 벌; ) HANGUL SYLLABLE BEOL
+BC8D;BC8D;1107 1165 11B0;BC8D;1107 1165 11B0; # (벍; 벍; 벍; 벍; 벍; ) HANGUL SYLLABLE BEOLG
+BC8E;BC8E;1107 1165 11B1;BC8E;1107 1165 11B1; # (벎; 벎; 벎; 벎; 벎; ) HANGUL SYLLABLE BEOLM
+BC8F;BC8F;1107 1165 11B2;BC8F;1107 1165 11B2; # (벏; 벏; 벏; 벏; 벏; ) HANGUL SYLLABLE BEOLB
+BC90;BC90;1107 1165 11B3;BC90;1107 1165 11B3; # (벐; 벐; 벐; 벐; 벐; ) HANGUL SYLLABLE BEOLS
+BC91;BC91;1107 1165 11B4;BC91;1107 1165 11B4; # (벑; 벑; 벑; 벑; 벑; ) HANGUL SYLLABLE BEOLT
+BC92;BC92;1107 1165 11B5;BC92;1107 1165 11B5; # (벒; 벒; 벒; 벒; 벒; ) HANGUL SYLLABLE BEOLP
+BC93;BC93;1107 1165 11B6;BC93;1107 1165 11B6; # (벓; 벓; 벓; 벓; 벓; ) HANGUL SYLLABLE BEOLH
+BC94;BC94;1107 1165 11B7;BC94;1107 1165 11B7; # (범; 범; 범; 범; 범; ) HANGUL SYLLABLE BEOM
+BC95;BC95;1107 1165 11B8;BC95;1107 1165 11B8; # (법; 법; 법; 법; 법; ) HANGUL SYLLABLE BEOB
+BC96;BC96;1107 1165 11B9;BC96;1107 1165 11B9; # (벖; 벖; 벖; 벖; 벖; ) HANGUL SYLLABLE BEOBS
+BC97;BC97;1107 1165 11BA;BC97;1107 1165 11BA; # (벗; 벗; 벗; 벗; 벗; ) HANGUL SYLLABLE BEOS
+BC98;BC98;1107 1165 11BB;BC98;1107 1165 11BB; # (벘; 벘; 벘; 벘; 벘; ) HANGUL SYLLABLE BEOSS
+BC99;BC99;1107 1165 11BC;BC99;1107 1165 11BC; # (벙; 벙; 벙; 벙; 벙; ) HANGUL SYLLABLE BEONG
+BC9A;BC9A;1107 1165 11BD;BC9A;1107 1165 11BD; # (벚; 벚; 벚; 벚; 벚; ) HANGUL SYLLABLE BEOJ
+BC9B;BC9B;1107 1165 11BE;BC9B;1107 1165 11BE; # (벛; 벛; 벛; 벛; 벛; ) HANGUL SYLLABLE BEOC
+BC9C;BC9C;1107 1165 11BF;BC9C;1107 1165 11BF; # (벜; 벜; 벜; 벜; 벜; ) HANGUL SYLLABLE BEOK
+BC9D;BC9D;1107 1165 11C0;BC9D;1107 1165 11C0; # (벝; 벝; 벝; 벝; 벝; ) HANGUL SYLLABLE BEOT
+BC9E;BC9E;1107 1165 11C1;BC9E;1107 1165 11C1; # (벞; 벞; 벞; 벞; 벞; ) HANGUL SYLLABLE BEOP
+BC9F;BC9F;1107 1165 11C2;BC9F;1107 1165 11C2; # (벟; 벟; 벟; 벟; 벟; ) HANGUL SYLLABLE BEOH
+BCA0;BCA0;1107 1166;BCA0;1107 1166; # (베; 베; 베; 베; 베; ) HANGUL SYLLABLE BE
+BCA1;BCA1;1107 1166 11A8;BCA1;1107 1166 11A8; # (벡; 벡; 벡; 벡; 벡; ) HANGUL SYLLABLE BEG
+BCA2;BCA2;1107 1166 11A9;BCA2;1107 1166 11A9; # (벢; 벢; 벢; 벢; 벢; ) HANGUL SYLLABLE BEGG
+BCA3;BCA3;1107 1166 11AA;BCA3;1107 1166 11AA; # (벣; 벣; 벣; 벣; 벣; ) HANGUL SYLLABLE BEGS
+BCA4;BCA4;1107 1166 11AB;BCA4;1107 1166 11AB; # (벤; 벤; 벤; 벤; 벤; ) HANGUL SYLLABLE BEN
+BCA5;BCA5;1107 1166 11AC;BCA5;1107 1166 11AC; # (벥; 벥; 벥; 벥; 벥; ) HANGUL SYLLABLE BENJ
+BCA6;BCA6;1107 1166 11AD;BCA6;1107 1166 11AD; # (벦; 벦; 벦; 벦; 벦; ) HANGUL SYLLABLE BENH
+BCA7;BCA7;1107 1166 11AE;BCA7;1107 1166 11AE; # (벧; 벧; 벧; 벧; 벧; ) HANGUL SYLLABLE BED
+BCA8;BCA8;1107 1166 11AF;BCA8;1107 1166 11AF; # (벨; 벨; 벨; 벨; 벨; ) HANGUL SYLLABLE BEL
+BCA9;BCA9;1107 1166 11B0;BCA9;1107 1166 11B0; # (벩; 벩; 벩; 벩; 벩; ) HANGUL SYLLABLE BELG
+BCAA;BCAA;1107 1166 11B1;BCAA;1107 1166 11B1; # (벪; 벪; 벪; 벪; 벪; ) HANGUL SYLLABLE BELM
+BCAB;BCAB;1107 1166 11B2;BCAB;1107 1166 11B2; # (벫; 벫; 벫; 벫; 벫; ) HANGUL SYLLABLE BELB
+BCAC;BCAC;1107 1166 11B3;BCAC;1107 1166 11B3; # (벬; 벬; 벬; 벬; 벬; ) HANGUL SYLLABLE BELS
+BCAD;BCAD;1107 1166 11B4;BCAD;1107 1166 11B4; # (벭; 벭; 벭; 벭; 벭; ) HANGUL SYLLABLE BELT
+BCAE;BCAE;1107 1166 11B5;BCAE;1107 1166 11B5; # (벮; 벮; 벮; 벮; 벮; ) HANGUL SYLLABLE BELP
+BCAF;BCAF;1107 1166 11B6;BCAF;1107 1166 11B6; # (벯; 벯; 벯; 벯; 벯; ) HANGUL SYLLABLE BELH
+BCB0;BCB0;1107 1166 11B7;BCB0;1107 1166 11B7; # (벰; 벰; 벰; 벰; 벰; ) HANGUL SYLLABLE BEM
+BCB1;BCB1;1107 1166 11B8;BCB1;1107 1166 11B8; # (벱; 벱; 벱; 벱; 벱; ) HANGUL SYLLABLE BEB
+BCB2;BCB2;1107 1166 11B9;BCB2;1107 1166 11B9; # (벲; 벲; 벲; 벲; 벲; ) HANGUL SYLLABLE BEBS
+BCB3;BCB3;1107 1166 11BA;BCB3;1107 1166 11BA; # (벳; 벳; 벳; 벳; 벳; ) HANGUL SYLLABLE BES
+BCB4;BCB4;1107 1166 11BB;BCB4;1107 1166 11BB; # (벴; 벴; 벴; 벴; 벴; ) HANGUL SYLLABLE BESS
+BCB5;BCB5;1107 1166 11BC;BCB5;1107 1166 11BC; # (벵; 벵; 벵; 벵; 벵; ) HANGUL SYLLABLE BENG
+BCB6;BCB6;1107 1166 11BD;BCB6;1107 1166 11BD; # (벶; 벶; 벶; 벶; 벶; ) HANGUL SYLLABLE BEJ
+BCB7;BCB7;1107 1166 11BE;BCB7;1107 1166 11BE; # (벷; 벷; 벷; 벷; 벷; ) HANGUL SYLLABLE BEC
+BCB8;BCB8;1107 1166 11BF;BCB8;1107 1166 11BF; # (벸; 벸; 벸; 벸; 벸; ) HANGUL SYLLABLE BEK
+BCB9;BCB9;1107 1166 11C0;BCB9;1107 1166 11C0; # (벹; 벹; 벹; 벹; 벹; ) HANGUL SYLLABLE BET
+BCBA;BCBA;1107 1166 11C1;BCBA;1107 1166 11C1; # (벺; 벺; 벺; 벺; 벺; ) HANGUL SYLLABLE BEP
+BCBB;BCBB;1107 1166 11C2;BCBB;1107 1166 11C2; # (벻; 벻; 벻; 벻; 벻; ) HANGUL SYLLABLE BEH
+BCBC;BCBC;1107 1167;BCBC;1107 1167; # (벼; 벼; 벼; 벼; 벼; ) HANGUL SYLLABLE BYEO
+BCBD;BCBD;1107 1167 11A8;BCBD;1107 1167 11A8; # (벽; 벽; 벽; 벽; 벽; ) HANGUL SYLLABLE BYEOG
+BCBE;BCBE;1107 1167 11A9;BCBE;1107 1167 11A9; # (벾; 벾; 벾; 벾; 벾; ) HANGUL SYLLABLE BYEOGG
+BCBF;BCBF;1107 1167 11AA;BCBF;1107 1167 11AA; # (벿; 벿; 벿; 벿; 벿; ) HANGUL SYLLABLE BYEOGS
+BCC0;BCC0;1107 1167 11AB;BCC0;1107 1167 11AB; # (변; 변; 변; 변; 변; ) HANGUL SYLLABLE BYEON
+BCC1;BCC1;1107 1167 11AC;BCC1;1107 1167 11AC; # (볁; 볁; 볁; 볁; 볁; ) HANGUL SYLLABLE BYEONJ
+BCC2;BCC2;1107 1167 11AD;BCC2;1107 1167 11AD; # (볂; 볂; 볂; 볂; 볂; ) HANGUL SYLLABLE BYEONH
+BCC3;BCC3;1107 1167 11AE;BCC3;1107 1167 11AE; # (볃; 볃; 볃; 볃; 볃; ) HANGUL SYLLABLE BYEOD
+BCC4;BCC4;1107 1167 11AF;BCC4;1107 1167 11AF; # (별; 별; 별; 별; 별; ) HANGUL SYLLABLE BYEOL
+BCC5;BCC5;1107 1167 11B0;BCC5;1107 1167 11B0; # (볅; 볅; 볅; 볅; 볅; ) HANGUL SYLLABLE BYEOLG
+BCC6;BCC6;1107 1167 11B1;BCC6;1107 1167 11B1; # (볆; 볆; 볆; 볆; 볆; ) HANGUL SYLLABLE BYEOLM
+BCC7;BCC7;1107 1167 11B2;BCC7;1107 1167 11B2; # (볇; 볇; 볇; 볇; 볇; ) HANGUL SYLLABLE BYEOLB
+BCC8;BCC8;1107 1167 11B3;BCC8;1107 1167 11B3; # (볈; 볈; 볈; 볈; 볈; ) HANGUL SYLLABLE BYEOLS
+BCC9;BCC9;1107 1167 11B4;BCC9;1107 1167 11B4; # (볉; 볉; 볉; 볉; 볉; ) HANGUL SYLLABLE BYEOLT
+BCCA;BCCA;1107 1167 11B5;BCCA;1107 1167 11B5; # (볊; 볊; 볊; 볊; 볊; ) HANGUL SYLLABLE BYEOLP
+BCCB;BCCB;1107 1167 11B6;BCCB;1107 1167 11B6; # (볋; 볋; 볋; 볋; 볋; ) HANGUL SYLLABLE BYEOLH
+BCCC;BCCC;1107 1167 11B7;BCCC;1107 1167 11B7; # (볌; 볌; 볌; 볌; 볌; ) HANGUL SYLLABLE BYEOM
+BCCD;BCCD;1107 1167 11B8;BCCD;1107 1167 11B8; # (볍; 볍; 볍; 볍; 볍; ) HANGUL SYLLABLE BYEOB
+BCCE;BCCE;1107 1167 11B9;BCCE;1107 1167 11B9; # (볎; 볎; 볎; 볎; 볎; ) HANGUL SYLLABLE BYEOBS
+BCCF;BCCF;1107 1167 11BA;BCCF;1107 1167 11BA; # (볏; 볏; 볏; 볏; 볏; ) HANGUL SYLLABLE BYEOS
+BCD0;BCD0;1107 1167 11BB;BCD0;1107 1167 11BB; # (볐; 볐; 볐; 볐; 볐; ) HANGUL SYLLABLE BYEOSS
+BCD1;BCD1;1107 1167 11BC;BCD1;1107 1167 11BC; # (병; 병; 병; 병; 병; ) HANGUL SYLLABLE BYEONG
+BCD2;BCD2;1107 1167 11BD;BCD2;1107 1167 11BD; # (볒; 볒; 볒; 볒; 볒; ) HANGUL SYLLABLE BYEOJ
+BCD3;BCD3;1107 1167 11BE;BCD3;1107 1167 11BE; # (볓; 볓; 볓; 볓; 볓; ) HANGUL SYLLABLE BYEOC
+BCD4;BCD4;1107 1167 11BF;BCD4;1107 1167 11BF; # (볔; 볔; 볔; 볔; 볔; ) HANGUL SYLLABLE BYEOK
+BCD5;BCD5;1107 1167 11C0;BCD5;1107 1167 11C0; # (볕; 볕; 볕; 볕; 볕; ) HANGUL SYLLABLE BYEOT
+BCD6;BCD6;1107 1167 11C1;BCD6;1107 1167 11C1; # (볖; 볖; 볖; 볖; 볖; ) HANGUL SYLLABLE BYEOP
+BCD7;BCD7;1107 1167 11C2;BCD7;1107 1167 11C2; # (볗; 볗; 볗; 볗; 볗; ) HANGUL SYLLABLE BYEOH
+BCD8;BCD8;1107 1168;BCD8;1107 1168; # (볘; 볘; 볘; 볘; 볘; ) HANGUL SYLLABLE BYE
+BCD9;BCD9;1107 1168 11A8;BCD9;1107 1168 11A8; # (볙; 볙; 볙; 볙; 볙; ) HANGUL SYLLABLE BYEG
+BCDA;BCDA;1107 1168 11A9;BCDA;1107 1168 11A9; # (볚; 볚; 볚; 볚; 볚; ) HANGUL SYLLABLE BYEGG
+BCDB;BCDB;1107 1168 11AA;BCDB;1107 1168 11AA; # (볛; 볛; 볛; 볛; 볛; ) HANGUL SYLLABLE BYEGS
+BCDC;BCDC;1107 1168 11AB;BCDC;1107 1168 11AB; # (볜; 볜; 볜; 볜; 볜; ) HANGUL SYLLABLE BYEN
+BCDD;BCDD;1107 1168 11AC;BCDD;1107 1168 11AC; # (볝; 볝; 볝; 볝; 볝; ) HANGUL SYLLABLE BYENJ
+BCDE;BCDE;1107 1168 11AD;BCDE;1107 1168 11AD; # (볞; 볞; 볞; 볞; 볞; ) HANGUL SYLLABLE BYENH
+BCDF;BCDF;1107 1168 11AE;BCDF;1107 1168 11AE; # (볟; 볟; 볟; 볟; 볟; ) HANGUL SYLLABLE BYED
+BCE0;BCE0;1107 1168 11AF;BCE0;1107 1168 11AF; # (볠; 볠; 볠; 볠; 볠; ) HANGUL SYLLABLE BYEL
+BCE1;BCE1;1107 1168 11B0;BCE1;1107 1168 11B0; # (볡; 볡; 볡; 볡; 볡; ) HANGUL SYLLABLE BYELG
+BCE2;BCE2;1107 1168 11B1;BCE2;1107 1168 11B1; # (볢; 볢; 볢; 볢; 볢; ) HANGUL SYLLABLE BYELM
+BCE3;BCE3;1107 1168 11B2;BCE3;1107 1168 11B2; # (볣; 볣; 볣; 볣; 볣; ) HANGUL SYLLABLE BYELB
+BCE4;BCE4;1107 1168 11B3;BCE4;1107 1168 11B3; # (볤; 볤; 볤; 볤; 볤; ) HANGUL SYLLABLE BYELS
+BCE5;BCE5;1107 1168 11B4;BCE5;1107 1168 11B4; # (볥; 볥; 볥; 볥; 볥; ) HANGUL SYLLABLE BYELT
+BCE6;BCE6;1107 1168 11B5;BCE6;1107 1168 11B5; # (볦; 볦; 볦; 볦; 볦; ) HANGUL SYLLABLE BYELP
+BCE7;BCE7;1107 1168 11B6;BCE7;1107 1168 11B6; # (볧; 볧; 볧; 볧; 볧; ) HANGUL SYLLABLE BYELH
+BCE8;BCE8;1107 1168 11B7;BCE8;1107 1168 11B7; # (볨; 볨; 볨; 볨; 볨; ) HANGUL SYLLABLE BYEM
+BCE9;BCE9;1107 1168 11B8;BCE9;1107 1168 11B8; # (볩; 볩; 볩; 볩; 볩; ) HANGUL SYLLABLE BYEB
+BCEA;BCEA;1107 1168 11B9;BCEA;1107 1168 11B9; # (볪; 볪; 볪; 볪; 볪; ) HANGUL SYLLABLE BYEBS
+BCEB;BCEB;1107 1168 11BA;BCEB;1107 1168 11BA; # (볫; 볫; 볫; 볫; 볫; ) HANGUL SYLLABLE BYES
+BCEC;BCEC;1107 1168 11BB;BCEC;1107 1168 11BB; # (볬; 볬; 볬; 볬; 볬; ) HANGUL SYLLABLE BYESS
+BCED;BCED;1107 1168 11BC;BCED;1107 1168 11BC; # (볭; 볭; 볭; 볭; 볭; ) HANGUL SYLLABLE BYENG
+BCEE;BCEE;1107 1168 11BD;BCEE;1107 1168 11BD; # (볮; 볮; 볮; 볮; 볮; ) HANGUL SYLLABLE BYEJ
+BCEF;BCEF;1107 1168 11BE;BCEF;1107 1168 11BE; # (볯; 볯; 볯; 볯; 볯; ) HANGUL SYLLABLE BYEC
+BCF0;BCF0;1107 1168 11BF;BCF0;1107 1168 11BF; # (볰; 볰; 볰; 볰; 볰; ) HANGUL SYLLABLE BYEK
+BCF1;BCF1;1107 1168 11C0;BCF1;1107 1168 11C0; # (볱; 볱; 볱; 볱; 볱; ) HANGUL SYLLABLE BYET
+BCF2;BCF2;1107 1168 11C1;BCF2;1107 1168 11C1; # (볲; 볲; 볲; 볲; 볲; ) HANGUL SYLLABLE BYEP
+BCF3;BCF3;1107 1168 11C2;BCF3;1107 1168 11C2; # (볳; 볳; 볳; 볳; 볳; ) HANGUL SYLLABLE BYEH
+BCF4;BCF4;1107 1169;BCF4;1107 1169; # (보; 보; 보; 보; 보; ) HANGUL SYLLABLE BO
+BCF5;BCF5;1107 1169 11A8;BCF5;1107 1169 11A8; # (복; 복; 복; 복; 복; ) HANGUL SYLLABLE BOG
+BCF6;BCF6;1107 1169 11A9;BCF6;1107 1169 11A9; # (볶; 볶; 볶; 볶; 볶; ) HANGUL SYLLABLE BOGG
+BCF7;BCF7;1107 1169 11AA;BCF7;1107 1169 11AA; # (볷; 볷; 볷; 볷; 볷; ) HANGUL SYLLABLE BOGS
+BCF8;BCF8;1107 1169 11AB;BCF8;1107 1169 11AB; # (본; 본; 본; 본; 본; ) HANGUL SYLLABLE BON
+BCF9;BCF9;1107 1169 11AC;BCF9;1107 1169 11AC; # (볹; 볹; 볹; 볹; 볹; ) HANGUL SYLLABLE BONJ
+BCFA;BCFA;1107 1169 11AD;BCFA;1107 1169 11AD; # (볺; 볺; 볺; 볺; 볺; ) HANGUL SYLLABLE BONH
+BCFB;BCFB;1107 1169 11AE;BCFB;1107 1169 11AE; # (볻; 볻; 볻; 볻; 볻; ) HANGUL SYLLABLE BOD
+BCFC;BCFC;1107 1169 11AF;BCFC;1107 1169 11AF; # (볼; 볼; 볼; 볼; 볼; ) HANGUL SYLLABLE BOL
+BCFD;BCFD;1107 1169 11B0;BCFD;1107 1169 11B0; # (볽; 볽; 볽; 볽; 볽; ) HANGUL SYLLABLE BOLG
+BCFE;BCFE;1107 1169 11B1;BCFE;1107 1169 11B1; # (볾; 볾; 볾; 볾; 볾; ) HANGUL SYLLABLE BOLM
+BCFF;BCFF;1107 1169 11B2;BCFF;1107 1169 11B2; # (볿; 볿; 볿; 볿; 볿; ) HANGUL SYLLABLE BOLB
+BD00;BD00;1107 1169 11B3;BD00;1107 1169 11B3; # (봀; 봀; 봀; 봀; 봀; ) HANGUL SYLLABLE BOLS
+BD01;BD01;1107 1169 11B4;BD01;1107 1169 11B4; # (봁; 봁; 봁; 봁; 봁; ) HANGUL SYLLABLE BOLT
+BD02;BD02;1107 1169 11B5;BD02;1107 1169 11B5; # (봂; 봂; 봂; 봂; 봂; ) HANGUL SYLLABLE BOLP
+BD03;BD03;1107 1169 11B6;BD03;1107 1169 11B6; # (봃; 봃; 봃; 봃; 봃; ) HANGUL SYLLABLE BOLH
+BD04;BD04;1107 1169 11B7;BD04;1107 1169 11B7; # (봄; 봄; 봄; 봄; 봄; ) HANGUL SYLLABLE BOM
+BD05;BD05;1107 1169 11B8;BD05;1107 1169 11B8; # (봅; 봅; 봅; 봅; 봅; ) HANGUL SYLLABLE BOB
+BD06;BD06;1107 1169 11B9;BD06;1107 1169 11B9; # (봆; 봆; 봆; 봆; 봆; ) HANGUL SYLLABLE BOBS
+BD07;BD07;1107 1169 11BA;BD07;1107 1169 11BA; # (봇; 봇; 봇; 봇; 봇; ) HANGUL SYLLABLE BOS
+BD08;BD08;1107 1169 11BB;BD08;1107 1169 11BB; # (봈; 봈; 봈; 봈; 봈; ) HANGUL SYLLABLE BOSS
+BD09;BD09;1107 1169 11BC;BD09;1107 1169 11BC; # (봉; 봉; 봉; 봉; 봉; ) HANGUL SYLLABLE BONG
+BD0A;BD0A;1107 1169 11BD;BD0A;1107 1169 11BD; # (봊; 봊; 봊; 봊; 봊; ) HANGUL SYLLABLE BOJ
+BD0B;BD0B;1107 1169 11BE;BD0B;1107 1169 11BE; # (봋; 봋; 봋; 봋; 봋; ) HANGUL SYLLABLE BOC
+BD0C;BD0C;1107 1169 11BF;BD0C;1107 1169 11BF; # (봌; 봌; 봌; 봌; 봌; ) HANGUL SYLLABLE BOK
+BD0D;BD0D;1107 1169 11C0;BD0D;1107 1169 11C0; # (봍; 봍; 봍; 봍; 봍; ) HANGUL SYLLABLE BOT
+BD0E;BD0E;1107 1169 11C1;BD0E;1107 1169 11C1; # (봎; 봎; 봎; 봎; 봎; ) HANGUL SYLLABLE BOP
+BD0F;BD0F;1107 1169 11C2;BD0F;1107 1169 11C2; # (봏; 봏; 봏; 봏; 봏; ) HANGUL SYLLABLE BOH
+BD10;BD10;1107 116A;BD10;1107 116A; # (봐; 봐; 봐; 봐; 봐; ) HANGUL SYLLABLE BWA
+BD11;BD11;1107 116A 11A8;BD11;1107 116A 11A8; # (봑; 봑; 봑; 봑; 봑; ) HANGUL SYLLABLE BWAG
+BD12;BD12;1107 116A 11A9;BD12;1107 116A 11A9; # (봒; 봒; 봒; 봒; 봒; ) HANGUL SYLLABLE BWAGG
+BD13;BD13;1107 116A 11AA;BD13;1107 116A 11AA; # (봓; 봓; 봓; 봓; 봓; ) HANGUL SYLLABLE BWAGS
+BD14;BD14;1107 116A 11AB;BD14;1107 116A 11AB; # (봔; 봔; 봔; 봔; 봔; ) HANGUL SYLLABLE BWAN
+BD15;BD15;1107 116A 11AC;BD15;1107 116A 11AC; # (봕; 봕; 봕; 봕; 봕; ) HANGUL SYLLABLE BWANJ
+BD16;BD16;1107 116A 11AD;BD16;1107 116A 11AD; # (봖; 봖; 봖; 봖; 봖; ) HANGUL SYLLABLE BWANH
+BD17;BD17;1107 116A 11AE;BD17;1107 116A 11AE; # (봗; 봗; 봗; 봗; 봗; ) HANGUL SYLLABLE BWAD
+BD18;BD18;1107 116A 11AF;BD18;1107 116A 11AF; # (봘; 봘; 봘; 봘; 봘; ) HANGUL SYLLABLE BWAL
+BD19;BD19;1107 116A 11B0;BD19;1107 116A 11B0; # (봙; 봙; 봙; 봙; 봙; ) HANGUL SYLLABLE BWALG
+BD1A;BD1A;1107 116A 11B1;BD1A;1107 116A 11B1; # (봚; 봚; 봚; 봚; 봚; ) HANGUL SYLLABLE BWALM
+BD1B;BD1B;1107 116A 11B2;BD1B;1107 116A 11B2; # (봛; 봛; 봛; 봛; 봛; ) HANGUL SYLLABLE BWALB
+BD1C;BD1C;1107 116A 11B3;BD1C;1107 116A 11B3; # (봜; 봜; 봜; 봜; 봜; ) HANGUL SYLLABLE BWALS
+BD1D;BD1D;1107 116A 11B4;BD1D;1107 116A 11B4; # (봝; 봝; 봝; 봝; 봝; ) HANGUL SYLLABLE BWALT
+BD1E;BD1E;1107 116A 11B5;BD1E;1107 116A 11B5; # (봞; 봞; 봞; 봞; 봞; ) HANGUL SYLLABLE BWALP
+BD1F;BD1F;1107 116A 11B6;BD1F;1107 116A 11B6; # (봟; 봟; 봟; 봟; 봟; ) HANGUL SYLLABLE BWALH
+BD20;BD20;1107 116A 11B7;BD20;1107 116A 11B7; # (봠; 봠; 봠; 봠; 봠; ) HANGUL SYLLABLE BWAM
+BD21;BD21;1107 116A 11B8;BD21;1107 116A 11B8; # (봡; 봡; 봡; 봡; 봡; ) HANGUL SYLLABLE BWAB
+BD22;BD22;1107 116A 11B9;BD22;1107 116A 11B9; # (봢; 봢; 봢; 봢; 봢; ) HANGUL SYLLABLE BWABS
+BD23;BD23;1107 116A 11BA;BD23;1107 116A 11BA; # (봣; 봣; 봣; 봣; 봣; ) HANGUL SYLLABLE BWAS
+BD24;BD24;1107 116A 11BB;BD24;1107 116A 11BB; # (봤; 봤; 봤; 봤; 봤; ) HANGUL SYLLABLE BWASS
+BD25;BD25;1107 116A 11BC;BD25;1107 116A 11BC; # (봥; 봥; 봥; 봥; 봥; ) HANGUL SYLLABLE BWANG
+BD26;BD26;1107 116A 11BD;BD26;1107 116A 11BD; # (봦; 봦; 봦; 봦; 봦; ) HANGUL SYLLABLE BWAJ
+BD27;BD27;1107 116A 11BE;BD27;1107 116A 11BE; # (봧; 봧; 봧; 봧; 봧; ) HANGUL SYLLABLE BWAC
+BD28;BD28;1107 116A 11BF;BD28;1107 116A 11BF; # (봨; 봨; 봨; 봨; 봨; ) HANGUL SYLLABLE BWAK
+BD29;BD29;1107 116A 11C0;BD29;1107 116A 11C0; # (봩; 봩; 봩; 봩; 봩; ) HANGUL SYLLABLE BWAT
+BD2A;BD2A;1107 116A 11C1;BD2A;1107 116A 11C1; # (봪; 봪; 봪; 봪; 봪; ) HANGUL SYLLABLE BWAP
+BD2B;BD2B;1107 116A 11C2;BD2B;1107 116A 11C2; # (봫; 봫; 봫; 봫; 봫; ) HANGUL SYLLABLE BWAH
+BD2C;BD2C;1107 116B;BD2C;1107 116B; # (봬; 봬; 봬; 봬; 봬; ) HANGUL SYLLABLE BWAE
+BD2D;BD2D;1107 116B 11A8;BD2D;1107 116B 11A8; # (봭; 봭; 봭; 봭; 봭; ) HANGUL SYLLABLE BWAEG
+BD2E;BD2E;1107 116B 11A9;BD2E;1107 116B 11A9; # (봮; 봮; 봮; 봮; 봮; ) HANGUL SYLLABLE BWAEGG
+BD2F;BD2F;1107 116B 11AA;BD2F;1107 116B 11AA; # (봯; 봯; 봯; 봯; 봯; ) HANGUL SYLLABLE BWAEGS
+BD30;BD30;1107 116B 11AB;BD30;1107 116B 11AB; # (봰; 봰; 봰; 봰; 봰; ) HANGUL SYLLABLE BWAEN
+BD31;BD31;1107 116B 11AC;BD31;1107 116B 11AC; # (봱; 봱; 봱; 봱; 봱; ) HANGUL SYLLABLE BWAENJ
+BD32;BD32;1107 116B 11AD;BD32;1107 116B 11AD; # (봲; 봲; 봲; 봲; 봲; ) HANGUL SYLLABLE BWAENH
+BD33;BD33;1107 116B 11AE;BD33;1107 116B 11AE; # (봳; 봳; 봳; 봳; 봳; ) HANGUL SYLLABLE BWAED
+BD34;BD34;1107 116B 11AF;BD34;1107 116B 11AF; # (봴; 봴; 봴; 봴; 봴; ) HANGUL SYLLABLE BWAEL
+BD35;BD35;1107 116B 11B0;BD35;1107 116B 11B0; # (봵; 봵; 봵; 봵; 봵; ) HANGUL SYLLABLE BWAELG
+BD36;BD36;1107 116B 11B1;BD36;1107 116B 11B1; # (봶; 봶; 봶; 봶; 봶; ) HANGUL SYLLABLE BWAELM
+BD37;BD37;1107 116B 11B2;BD37;1107 116B 11B2; # (봷; 봷; 봷; 봷; 봷; ) HANGUL SYLLABLE BWAELB
+BD38;BD38;1107 116B 11B3;BD38;1107 116B 11B3; # (봸; 봸; 봸; 봸; 봸; ) HANGUL SYLLABLE BWAELS
+BD39;BD39;1107 116B 11B4;BD39;1107 116B 11B4; # (봹; 봹; 봹; 봹; 봹; ) HANGUL SYLLABLE BWAELT
+BD3A;BD3A;1107 116B 11B5;BD3A;1107 116B 11B5; # (봺; 봺; 봺; 봺; 봺; ) HANGUL SYLLABLE BWAELP
+BD3B;BD3B;1107 116B 11B6;BD3B;1107 116B 11B6; # (봻; 봻; 봻; 봻; 봻; ) HANGUL SYLLABLE BWAELH
+BD3C;BD3C;1107 116B 11B7;BD3C;1107 116B 11B7; # (봼; 봼; 봼; 봼; 봼; ) HANGUL SYLLABLE BWAEM
+BD3D;BD3D;1107 116B 11B8;BD3D;1107 116B 11B8; # (봽; 봽; 봽; 봽; 봽; ) HANGUL SYLLABLE BWAEB
+BD3E;BD3E;1107 116B 11B9;BD3E;1107 116B 11B9; # (봾; 봾; 봾; 봾; 봾; ) HANGUL SYLLABLE BWAEBS
+BD3F;BD3F;1107 116B 11BA;BD3F;1107 116B 11BA; # (봿; 봿; 봿; 봿; 봿; ) HANGUL SYLLABLE BWAES
+BD40;BD40;1107 116B 11BB;BD40;1107 116B 11BB; # (뵀; 뵀; 뵀; 뵀; 뵀; ) HANGUL SYLLABLE BWAESS
+BD41;BD41;1107 116B 11BC;BD41;1107 116B 11BC; # (뵁; 뵁; 뵁; 뵁; 뵁; ) HANGUL SYLLABLE BWAENG
+BD42;BD42;1107 116B 11BD;BD42;1107 116B 11BD; # (뵂; 뵂; 뵂; 뵂; 뵂; ) HANGUL SYLLABLE BWAEJ
+BD43;BD43;1107 116B 11BE;BD43;1107 116B 11BE; # (뵃; 뵃; 뵃; 뵃; 뵃; ) HANGUL SYLLABLE BWAEC
+BD44;BD44;1107 116B 11BF;BD44;1107 116B 11BF; # (뵄; 뵄; 뵄; 뵄; 뵄; ) HANGUL SYLLABLE BWAEK
+BD45;BD45;1107 116B 11C0;BD45;1107 116B 11C0; # (뵅; 뵅; 뵅; 뵅; 뵅; ) HANGUL SYLLABLE BWAET
+BD46;BD46;1107 116B 11C1;BD46;1107 116B 11C1; # (뵆; 뵆; 뵆; 뵆; 뵆; ) HANGUL SYLLABLE BWAEP
+BD47;BD47;1107 116B 11C2;BD47;1107 116B 11C2; # (뵇; 뵇; 뵇; 뵇; 뵇; ) HANGUL SYLLABLE BWAEH
+BD48;BD48;1107 116C;BD48;1107 116C; # (뵈; 뵈; 뵈; 뵈; 뵈; ) HANGUL SYLLABLE BOE
+BD49;BD49;1107 116C 11A8;BD49;1107 116C 11A8; # (뵉; 뵉; 뵉; 뵉; 뵉; ) HANGUL SYLLABLE BOEG
+BD4A;BD4A;1107 116C 11A9;BD4A;1107 116C 11A9; # (뵊; 뵊; 뵊; 뵊; 뵊; ) HANGUL SYLLABLE BOEGG
+BD4B;BD4B;1107 116C 11AA;BD4B;1107 116C 11AA; # (뵋; 뵋; 뵋; 뵋; 뵋; ) HANGUL SYLLABLE BOEGS
+BD4C;BD4C;1107 116C 11AB;BD4C;1107 116C 11AB; # (뵌; 뵌; 뵌; 뵌; 뵌; ) HANGUL SYLLABLE BOEN
+BD4D;BD4D;1107 116C 11AC;BD4D;1107 116C 11AC; # (뵍; 뵍; 뵍; 뵍; 뵍; ) HANGUL SYLLABLE BOENJ
+BD4E;BD4E;1107 116C 11AD;BD4E;1107 116C 11AD; # (뵎; 뵎; 뵎; 뵎; 뵎; ) HANGUL SYLLABLE BOENH
+BD4F;BD4F;1107 116C 11AE;BD4F;1107 116C 11AE; # (뵏; 뵏; 뵏; 뵏; 뵏; ) HANGUL SYLLABLE BOED
+BD50;BD50;1107 116C 11AF;BD50;1107 116C 11AF; # (뵐; 뵐; 뵐; 뵐; 뵐; ) HANGUL SYLLABLE BOEL
+BD51;BD51;1107 116C 11B0;BD51;1107 116C 11B0; # (뵑; 뵑; 뵑; 뵑; 뵑; ) HANGUL SYLLABLE BOELG
+BD52;BD52;1107 116C 11B1;BD52;1107 116C 11B1; # (뵒; 뵒; 뵒; 뵒; 뵒; ) HANGUL SYLLABLE BOELM
+BD53;BD53;1107 116C 11B2;BD53;1107 116C 11B2; # (뵓; 뵓; 뵓; 뵓; 뵓; ) HANGUL SYLLABLE BOELB
+BD54;BD54;1107 116C 11B3;BD54;1107 116C 11B3; # (뵔; 뵔; 뵔; 뵔; 뵔; ) HANGUL SYLLABLE BOELS
+BD55;BD55;1107 116C 11B4;BD55;1107 116C 11B4; # (뵕; 뵕; 뵕; 뵕; 뵕; ) HANGUL SYLLABLE BOELT
+BD56;BD56;1107 116C 11B5;BD56;1107 116C 11B5; # (뵖; 뵖; 뵖; 뵖; 뵖; ) HANGUL SYLLABLE BOELP
+BD57;BD57;1107 116C 11B6;BD57;1107 116C 11B6; # (뵗; 뵗; 뵗; 뵗; 뵗; ) HANGUL SYLLABLE BOELH
+BD58;BD58;1107 116C 11B7;BD58;1107 116C 11B7; # (뵘; 뵘; 뵘; 뵘; 뵘; ) HANGUL SYLLABLE BOEM
+BD59;BD59;1107 116C 11B8;BD59;1107 116C 11B8; # (뵙; 뵙; 뵙; 뵙; 뵙; ) HANGUL SYLLABLE BOEB
+BD5A;BD5A;1107 116C 11B9;BD5A;1107 116C 11B9; # (뵚; 뵚; 뵚; 뵚; 뵚; ) HANGUL SYLLABLE BOEBS
+BD5B;BD5B;1107 116C 11BA;BD5B;1107 116C 11BA; # (뵛; 뵛; 뵛; 뵛; 뵛; ) HANGUL SYLLABLE BOES
+BD5C;BD5C;1107 116C 11BB;BD5C;1107 116C 11BB; # (뵜; 뵜; 뵜; 뵜; 뵜; ) HANGUL SYLLABLE BOESS
+BD5D;BD5D;1107 116C 11BC;BD5D;1107 116C 11BC; # (뵝; 뵝; 뵝; 뵝; 뵝; ) HANGUL SYLLABLE BOENG
+BD5E;BD5E;1107 116C 11BD;BD5E;1107 116C 11BD; # (뵞; 뵞; 뵞; 뵞; 뵞; ) HANGUL SYLLABLE BOEJ
+BD5F;BD5F;1107 116C 11BE;BD5F;1107 116C 11BE; # (뵟; 뵟; 뵟; 뵟; 뵟; ) HANGUL SYLLABLE BOEC
+BD60;BD60;1107 116C 11BF;BD60;1107 116C 11BF; # (뵠; 뵠; 뵠; 뵠; 뵠; ) HANGUL SYLLABLE BOEK
+BD61;BD61;1107 116C 11C0;BD61;1107 116C 11C0; # (뵡; 뵡; 뵡; 뵡; 뵡; ) HANGUL SYLLABLE BOET
+BD62;BD62;1107 116C 11C1;BD62;1107 116C 11C1; # (뵢; 뵢; 뵢; 뵢; 뵢; ) HANGUL SYLLABLE BOEP
+BD63;BD63;1107 116C 11C2;BD63;1107 116C 11C2; # (뵣; 뵣; 뵣; 뵣; 뵣; ) HANGUL SYLLABLE BOEH
+BD64;BD64;1107 116D;BD64;1107 116D; # (뵤; 뵤; 뵤; 뵤; 뵤; ) HANGUL SYLLABLE BYO
+BD65;BD65;1107 116D 11A8;BD65;1107 116D 11A8; # (뵥; 뵥; 뵥; 뵥; 뵥; ) HANGUL SYLLABLE BYOG
+BD66;BD66;1107 116D 11A9;BD66;1107 116D 11A9; # (뵦; 뵦; 뵦; 뵦; 뵦; ) HANGUL SYLLABLE BYOGG
+BD67;BD67;1107 116D 11AA;BD67;1107 116D 11AA; # (뵧; 뵧; 뵧; 뵧; 뵧; ) HANGUL SYLLABLE BYOGS
+BD68;BD68;1107 116D 11AB;BD68;1107 116D 11AB; # (뵨; 뵨; 뵨; 뵨; 뵨; ) HANGUL SYLLABLE BYON
+BD69;BD69;1107 116D 11AC;BD69;1107 116D 11AC; # (뵩; 뵩; 뵩; 뵩; 뵩; ) HANGUL SYLLABLE BYONJ
+BD6A;BD6A;1107 116D 11AD;BD6A;1107 116D 11AD; # (뵪; 뵪; 뵪; 뵪; 뵪; ) HANGUL SYLLABLE BYONH
+BD6B;BD6B;1107 116D 11AE;BD6B;1107 116D 11AE; # (뵫; 뵫; 뵫; 뵫; 뵫; ) HANGUL SYLLABLE BYOD
+BD6C;BD6C;1107 116D 11AF;BD6C;1107 116D 11AF; # (뵬; 뵬; 뵬; 뵬; 뵬; ) HANGUL SYLLABLE BYOL
+BD6D;BD6D;1107 116D 11B0;BD6D;1107 116D 11B0; # (뵭; 뵭; 뵭; 뵭; 뵭; ) HANGUL SYLLABLE BYOLG
+BD6E;BD6E;1107 116D 11B1;BD6E;1107 116D 11B1; # (뵮; 뵮; 뵮; 뵮; 뵮; ) HANGUL SYLLABLE BYOLM
+BD6F;BD6F;1107 116D 11B2;BD6F;1107 116D 11B2; # (뵯; 뵯; 뵯; 뵯; 뵯; ) HANGUL SYLLABLE BYOLB
+BD70;BD70;1107 116D 11B3;BD70;1107 116D 11B3; # (뵰; 뵰; 뵰; 뵰; 뵰; ) HANGUL SYLLABLE BYOLS
+BD71;BD71;1107 116D 11B4;BD71;1107 116D 11B4; # (뵱; 뵱; 뵱; 뵱; 뵱; ) HANGUL SYLLABLE BYOLT
+BD72;BD72;1107 116D 11B5;BD72;1107 116D 11B5; # (뵲; 뵲; 뵲; 뵲; 뵲; ) HANGUL SYLLABLE BYOLP
+BD73;BD73;1107 116D 11B6;BD73;1107 116D 11B6; # (뵳; 뵳; 뵳; 뵳; 뵳; ) HANGUL SYLLABLE BYOLH
+BD74;BD74;1107 116D 11B7;BD74;1107 116D 11B7; # (뵴; 뵴; 뵴; 뵴; 뵴; ) HANGUL SYLLABLE BYOM
+BD75;BD75;1107 116D 11B8;BD75;1107 116D 11B8; # (뵵; 뵵; 뵵; 뵵; 뵵; ) HANGUL SYLLABLE BYOB
+BD76;BD76;1107 116D 11B9;BD76;1107 116D 11B9; # (뵶; 뵶; 뵶; 뵶; 뵶; ) HANGUL SYLLABLE BYOBS
+BD77;BD77;1107 116D 11BA;BD77;1107 116D 11BA; # (뵷; 뵷; 뵷; 뵷; 뵷; ) HANGUL SYLLABLE BYOS
+BD78;BD78;1107 116D 11BB;BD78;1107 116D 11BB; # (뵸; 뵸; 뵸; 뵸; 뵸; ) HANGUL SYLLABLE BYOSS
+BD79;BD79;1107 116D 11BC;BD79;1107 116D 11BC; # (뵹; 뵹; 뵹; 뵹; 뵹; ) HANGUL SYLLABLE BYONG
+BD7A;BD7A;1107 116D 11BD;BD7A;1107 116D 11BD; # (뵺; 뵺; 뵺; 뵺; 뵺; ) HANGUL SYLLABLE BYOJ
+BD7B;BD7B;1107 116D 11BE;BD7B;1107 116D 11BE; # (뵻; 뵻; 뵻; 뵻; 뵻; ) HANGUL SYLLABLE BYOC
+BD7C;BD7C;1107 116D 11BF;BD7C;1107 116D 11BF; # (뵼; 뵼; 뵼; 뵼; 뵼; ) HANGUL SYLLABLE BYOK
+BD7D;BD7D;1107 116D 11C0;BD7D;1107 116D 11C0; # (뵽; 뵽; 뵽; 뵽; 뵽; ) HANGUL SYLLABLE BYOT
+BD7E;BD7E;1107 116D 11C1;BD7E;1107 116D 11C1; # (뵾; 뵾; 뵾; 뵾; 뵾; ) HANGUL SYLLABLE BYOP
+BD7F;BD7F;1107 116D 11C2;BD7F;1107 116D 11C2; # (뵿; 뵿; 뵿; 뵿; 뵿; ) HANGUL SYLLABLE BYOH
+BD80;BD80;1107 116E;BD80;1107 116E; # (부; 부; 부; 부; 부; ) HANGUL SYLLABLE BU
+BD81;BD81;1107 116E 11A8;BD81;1107 116E 11A8; # (북; 북; 북; 북; 북; ) HANGUL SYLLABLE BUG
+BD82;BD82;1107 116E 11A9;BD82;1107 116E 11A9; # (붂; 붂; 붂; 붂; 붂; ) HANGUL SYLLABLE BUGG
+BD83;BD83;1107 116E 11AA;BD83;1107 116E 11AA; # (붃; 붃; 붃; 붃; 붃; ) HANGUL SYLLABLE BUGS
+BD84;BD84;1107 116E 11AB;BD84;1107 116E 11AB; # (분; 분; 분; 분; 분; ) HANGUL SYLLABLE BUN
+BD85;BD85;1107 116E 11AC;BD85;1107 116E 11AC; # (붅; 붅; 붅; 붅; 붅; ) HANGUL SYLLABLE BUNJ
+BD86;BD86;1107 116E 11AD;BD86;1107 116E 11AD; # (붆; 붆; 붆; 붆; 붆; ) HANGUL SYLLABLE BUNH
+BD87;BD87;1107 116E 11AE;BD87;1107 116E 11AE; # (붇; 붇; 붇; 붇; 붇; ) HANGUL SYLLABLE BUD
+BD88;BD88;1107 116E 11AF;BD88;1107 116E 11AF; # (불; 불; 불; 불; 불; ) HANGUL SYLLABLE BUL
+BD89;BD89;1107 116E 11B0;BD89;1107 116E 11B0; # (붉; 붉; 붉; 붉; 붉; ) HANGUL SYLLABLE BULG
+BD8A;BD8A;1107 116E 11B1;BD8A;1107 116E 11B1; # (붊; 붊; 붊; 붊; 붊; ) HANGUL SYLLABLE BULM
+BD8B;BD8B;1107 116E 11B2;BD8B;1107 116E 11B2; # (붋; 붋; 붋; 붋; 붋; ) HANGUL SYLLABLE BULB
+BD8C;BD8C;1107 116E 11B3;BD8C;1107 116E 11B3; # (붌; 붌; 붌; 붌; 붌; ) HANGUL SYLLABLE BULS
+BD8D;BD8D;1107 116E 11B4;BD8D;1107 116E 11B4; # (붍; 붍; 붍; 붍; 붍; ) HANGUL SYLLABLE BULT
+BD8E;BD8E;1107 116E 11B5;BD8E;1107 116E 11B5; # (붎; 붎; 붎; 붎; 붎; ) HANGUL SYLLABLE BULP
+BD8F;BD8F;1107 116E 11B6;BD8F;1107 116E 11B6; # (붏; 붏; 붏; 붏; 붏; ) HANGUL SYLLABLE BULH
+BD90;BD90;1107 116E 11B7;BD90;1107 116E 11B7; # (붐; 붐; 붐; 붐; 붐; ) HANGUL SYLLABLE BUM
+BD91;BD91;1107 116E 11B8;BD91;1107 116E 11B8; # (붑; 붑; 붑; 붑; 붑; ) HANGUL SYLLABLE BUB
+BD92;BD92;1107 116E 11B9;BD92;1107 116E 11B9; # (붒; 붒; 붒; 붒; 붒; ) HANGUL SYLLABLE BUBS
+BD93;BD93;1107 116E 11BA;BD93;1107 116E 11BA; # (붓; 붓; 붓; 붓; 붓; ) HANGUL SYLLABLE BUS
+BD94;BD94;1107 116E 11BB;BD94;1107 116E 11BB; # (붔; 붔; 붔; 붔; 붔; ) HANGUL SYLLABLE BUSS
+BD95;BD95;1107 116E 11BC;BD95;1107 116E 11BC; # (붕; 붕; 붕; 붕; 붕; ) HANGUL SYLLABLE BUNG
+BD96;BD96;1107 116E 11BD;BD96;1107 116E 11BD; # (붖; 붖; 붖; 붖; 붖; ) HANGUL SYLLABLE BUJ
+BD97;BD97;1107 116E 11BE;BD97;1107 116E 11BE; # (붗; 붗; 붗; 붗; 붗; ) HANGUL SYLLABLE BUC
+BD98;BD98;1107 116E 11BF;BD98;1107 116E 11BF; # (붘; 붘; 붘; 붘; 붘; ) HANGUL SYLLABLE BUK
+BD99;BD99;1107 116E 11C0;BD99;1107 116E 11C0; # (붙; 붙; 붙; 붙; 붙; ) HANGUL SYLLABLE BUT
+BD9A;BD9A;1107 116E 11C1;BD9A;1107 116E 11C1; # (붚; 붚; 붚; 붚; 붚; ) HANGUL SYLLABLE BUP
+BD9B;BD9B;1107 116E 11C2;BD9B;1107 116E 11C2; # (붛; 붛; 붛; 붛; 붛; ) HANGUL SYLLABLE BUH
+BD9C;BD9C;1107 116F;BD9C;1107 116F; # (붜; 붜; 붜; 붜; 붜; ) HANGUL SYLLABLE BWEO
+BD9D;BD9D;1107 116F 11A8;BD9D;1107 116F 11A8; # (붝; 붝; 붝; 붝; 붝; ) HANGUL SYLLABLE BWEOG
+BD9E;BD9E;1107 116F 11A9;BD9E;1107 116F 11A9; # (붞; 붞; 붞; 붞; 붞; ) HANGUL SYLLABLE BWEOGG
+BD9F;BD9F;1107 116F 11AA;BD9F;1107 116F 11AA; # (붟; 붟; 붟; 붟; 붟; ) HANGUL SYLLABLE BWEOGS
+BDA0;BDA0;1107 116F 11AB;BDA0;1107 116F 11AB; # (붠; 붠; 붠; 붠; 붠; ) HANGUL SYLLABLE BWEON
+BDA1;BDA1;1107 116F 11AC;BDA1;1107 116F 11AC; # (붡; 붡; 붡; 붡; 붡; ) HANGUL SYLLABLE BWEONJ
+BDA2;BDA2;1107 116F 11AD;BDA2;1107 116F 11AD; # (붢; 붢; 붢; 붢; 붢; ) HANGUL SYLLABLE BWEONH
+BDA3;BDA3;1107 116F 11AE;BDA3;1107 116F 11AE; # (붣; 붣; 붣; 붣; 붣; ) HANGUL SYLLABLE BWEOD
+BDA4;BDA4;1107 116F 11AF;BDA4;1107 116F 11AF; # (붤; 붤; 붤; 붤; 붤; ) HANGUL SYLLABLE BWEOL
+BDA5;BDA5;1107 116F 11B0;BDA5;1107 116F 11B0; # (붥; 붥; 붥; 붥; 붥; ) HANGUL SYLLABLE BWEOLG
+BDA6;BDA6;1107 116F 11B1;BDA6;1107 116F 11B1; # (붦; 붦; 붦; 붦; 붦; ) HANGUL SYLLABLE BWEOLM
+BDA7;BDA7;1107 116F 11B2;BDA7;1107 116F 11B2; # (붧; 붧; 붧; 붧; 붧; ) HANGUL SYLLABLE BWEOLB
+BDA8;BDA8;1107 116F 11B3;BDA8;1107 116F 11B3; # (붨; 붨; 붨; 붨; 붨; ) HANGUL SYLLABLE BWEOLS
+BDA9;BDA9;1107 116F 11B4;BDA9;1107 116F 11B4; # (붩; 붩; 붩; 붩; 붩; ) HANGUL SYLLABLE BWEOLT
+BDAA;BDAA;1107 116F 11B5;BDAA;1107 116F 11B5; # (붪; 붪; 붪; 붪; 붪; ) HANGUL SYLLABLE BWEOLP
+BDAB;BDAB;1107 116F 11B6;BDAB;1107 116F 11B6; # (붫; 붫; 붫; 붫; 붫; ) HANGUL SYLLABLE BWEOLH
+BDAC;BDAC;1107 116F 11B7;BDAC;1107 116F 11B7; # (붬; 붬; 붬; 붬; 붬; ) HANGUL SYLLABLE BWEOM
+BDAD;BDAD;1107 116F 11B8;BDAD;1107 116F 11B8; # (붭; 붭; 붭; 붭; 붭; ) HANGUL SYLLABLE BWEOB
+BDAE;BDAE;1107 116F 11B9;BDAE;1107 116F 11B9; # (붮; 붮; 붮; 붮; 붮; ) HANGUL SYLLABLE BWEOBS
+BDAF;BDAF;1107 116F 11BA;BDAF;1107 116F 11BA; # (붯; 붯; 붯; 붯; 붯; ) HANGUL SYLLABLE BWEOS
+BDB0;BDB0;1107 116F 11BB;BDB0;1107 116F 11BB; # (붰; 붰; 붰; 붰; 붰; ) HANGUL SYLLABLE BWEOSS
+BDB1;BDB1;1107 116F 11BC;BDB1;1107 116F 11BC; # (붱; 붱; 붱; 붱; 붱; ) HANGUL SYLLABLE BWEONG
+BDB2;BDB2;1107 116F 11BD;BDB2;1107 116F 11BD; # (붲; 붲; 붲; 붲; 붲; ) HANGUL SYLLABLE BWEOJ
+BDB3;BDB3;1107 116F 11BE;BDB3;1107 116F 11BE; # (붳; 붳; 붳; 붳; 붳; ) HANGUL SYLLABLE BWEOC
+BDB4;BDB4;1107 116F 11BF;BDB4;1107 116F 11BF; # (붴; 붴; 붴; 붴; 붴; ) HANGUL SYLLABLE BWEOK
+BDB5;BDB5;1107 116F 11C0;BDB5;1107 116F 11C0; # (붵; 붵; 붵; 붵; 붵; ) HANGUL SYLLABLE BWEOT
+BDB6;BDB6;1107 116F 11C1;BDB6;1107 116F 11C1; # (붶; 붶; 붶; 붶; 붶; ) HANGUL SYLLABLE BWEOP
+BDB7;BDB7;1107 116F 11C2;BDB7;1107 116F 11C2; # (붷; 붷; 붷; 붷; 붷; ) HANGUL SYLLABLE BWEOH
+BDB8;BDB8;1107 1170;BDB8;1107 1170; # (붸; 붸; 붸; 붸; 붸; ) HANGUL SYLLABLE BWE
+BDB9;BDB9;1107 1170 11A8;BDB9;1107 1170 11A8; # (붹; 붹; 붹; 붹; 붹; ) HANGUL SYLLABLE BWEG
+BDBA;BDBA;1107 1170 11A9;BDBA;1107 1170 11A9; # (붺; 붺; 붺; 붺; 붺; ) HANGUL SYLLABLE BWEGG
+BDBB;BDBB;1107 1170 11AA;BDBB;1107 1170 11AA; # (붻; 붻; 붻; 붻; 붻; ) HANGUL SYLLABLE BWEGS
+BDBC;BDBC;1107 1170 11AB;BDBC;1107 1170 11AB; # (붼; 붼; 붼; 붼; 붼; ) HANGUL SYLLABLE BWEN
+BDBD;BDBD;1107 1170 11AC;BDBD;1107 1170 11AC; # (붽; 붽; 붽; 붽; 붽; ) HANGUL SYLLABLE BWENJ
+BDBE;BDBE;1107 1170 11AD;BDBE;1107 1170 11AD; # (붾; 붾; 붾; 붾; 붾; ) HANGUL SYLLABLE BWENH
+BDBF;BDBF;1107 1170 11AE;BDBF;1107 1170 11AE; # (붿; 붿; 붿; 붿; 붿; ) HANGUL SYLLABLE BWED
+BDC0;BDC0;1107 1170 11AF;BDC0;1107 1170 11AF; # (뷀; 뷀; 뷀; 뷀; 뷀; ) HANGUL SYLLABLE BWEL
+BDC1;BDC1;1107 1170 11B0;BDC1;1107 1170 11B0; # (뷁; 뷁; 뷁; 뷁; 뷁; ) HANGUL SYLLABLE BWELG
+BDC2;BDC2;1107 1170 11B1;BDC2;1107 1170 11B1; # (뷂; 뷂; 뷂; 뷂; 뷂; ) HANGUL SYLLABLE BWELM
+BDC3;BDC3;1107 1170 11B2;BDC3;1107 1170 11B2; # (뷃; 뷃; 뷃; 뷃; 뷃; ) HANGUL SYLLABLE BWELB
+BDC4;BDC4;1107 1170 11B3;BDC4;1107 1170 11B3; # (뷄; 뷄; 뷄; 뷄; 뷄; ) HANGUL SYLLABLE BWELS
+BDC5;BDC5;1107 1170 11B4;BDC5;1107 1170 11B4; # (뷅; 뷅; 뷅; 뷅; 뷅; ) HANGUL SYLLABLE BWELT
+BDC6;BDC6;1107 1170 11B5;BDC6;1107 1170 11B5; # (뷆; 뷆; 뷆; 뷆; 뷆; ) HANGUL SYLLABLE BWELP
+BDC7;BDC7;1107 1170 11B6;BDC7;1107 1170 11B6; # (뷇; 뷇; 뷇; 뷇; 뷇; ) HANGUL SYLLABLE BWELH
+BDC8;BDC8;1107 1170 11B7;BDC8;1107 1170 11B7; # (뷈; 뷈; 뷈; 뷈; 뷈; ) HANGUL SYLLABLE BWEM
+BDC9;BDC9;1107 1170 11B8;BDC9;1107 1170 11B8; # (뷉; 뷉; 뷉; 뷉; 뷉; ) HANGUL SYLLABLE BWEB
+BDCA;BDCA;1107 1170 11B9;BDCA;1107 1170 11B9; # (뷊; 뷊; 뷊; 뷊; 뷊; ) HANGUL SYLLABLE BWEBS
+BDCB;BDCB;1107 1170 11BA;BDCB;1107 1170 11BA; # (뷋; 뷋; 뷋; 뷋; 뷋; ) HANGUL SYLLABLE BWES
+BDCC;BDCC;1107 1170 11BB;BDCC;1107 1170 11BB; # (뷌; 뷌; 뷌; 뷌; 뷌; ) HANGUL SYLLABLE BWESS
+BDCD;BDCD;1107 1170 11BC;BDCD;1107 1170 11BC; # (뷍; 뷍; 뷍; 뷍; 뷍; ) HANGUL SYLLABLE BWENG
+BDCE;BDCE;1107 1170 11BD;BDCE;1107 1170 11BD; # (뷎; 뷎; 뷎; 뷎; 뷎; ) HANGUL SYLLABLE BWEJ
+BDCF;BDCF;1107 1170 11BE;BDCF;1107 1170 11BE; # (뷏; 뷏; 뷏; 뷏; 뷏; ) HANGUL SYLLABLE BWEC
+BDD0;BDD0;1107 1170 11BF;BDD0;1107 1170 11BF; # (뷐; 뷐; 뷐; 뷐; 뷐; ) HANGUL SYLLABLE BWEK
+BDD1;BDD1;1107 1170 11C0;BDD1;1107 1170 11C0; # (뷑; 뷑; 뷑; 뷑; 뷑; ) HANGUL SYLLABLE BWET
+BDD2;BDD2;1107 1170 11C1;BDD2;1107 1170 11C1; # (뷒; 뷒; 뷒; 뷒; 뷒; ) HANGUL SYLLABLE BWEP
+BDD3;BDD3;1107 1170 11C2;BDD3;1107 1170 11C2; # (뷓; 뷓; 뷓; 뷓; 뷓; ) HANGUL SYLLABLE BWEH
+BDD4;BDD4;1107 1171;BDD4;1107 1171; # (뷔; 뷔; 뷔; 뷔; 뷔; ) HANGUL SYLLABLE BWI
+BDD5;BDD5;1107 1171 11A8;BDD5;1107 1171 11A8; # (뷕; 뷕; 뷕; 뷕; 뷕; ) HANGUL SYLLABLE BWIG
+BDD6;BDD6;1107 1171 11A9;BDD6;1107 1171 11A9; # (뷖; 뷖; 뷖; 뷖; 뷖; ) HANGUL SYLLABLE BWIGG
+BDD7;BDD7;1107 1171 11AA;BDD7;1107 1171 11AA; # (뷗; 뷗; 뷗; 뷗; 뷗; ) HANGUL SYLLABLE BWIGS
+BDD8;BDD8;1107 1171 11AB;BDD8;1107 1171 11AB; # (뷘; 뷘; 뷘; 뷘; 뷘; ) HANGUL SYLLABLE BWIN
+BDD9;BDD9;1107 1171 11AC;BDD9;1107 1171 11AC; # (뷙; 뷙; 뷙; 뷙; 뷙; ) HANGUL SYLLABLE BWINJ
+BDDA;BDDA;1107 1171 11AD;BDDA;1107 1171 11AD; # (뷚; 뷚; 뷚; 뷚; 뷚; ) HANGUL SYLLABLE BWINH
+BDDB;BDDB;1107 1171 11AE;BDDB;1107 1171 11AE; # (뷛; 뷛; 뷛; 뷛; 뷛; ) HANGUL SYLLABLE BWID
+BDDC;BDDC;1107 1171 11AF;BDDC;1107 1171 11AF; # (뷜; 뷜; 뷜; 뷜; 뷜; ) HANGUL SYLLABLE BWIL
+BDDD;BDDD;1107 1171 11B0;BDDD;1107 1171 11B0; # (뷝; 뷝; 뷝; 뷝; 뷝; ) HANGUL SYLLABLE BWILG
+BDDE;BDDE;1107 1171 11B1;BDDE;1107 1171 11B1; # (뷞; 뷞; 뷞; 뷞; 뷞; ) HANGUL SYLLABLE BWILM
+BDDF;BDDF;1107 1171 11B2;BDDF;1107 1171 11B2; # (뷟; 뷟; 뷟; 뷟; 뷟; ) HANGUL SYLLABLE BWILB
+BDE0;BDE0;1107 1171 11B3;BDE0;1107 1171 11B3; # (뷠; 뷠; 뷠; 뷠; 뷠; ) HANGUL SYLLABLE BWILS
+BDE1;BDE1;1107 1171 11B4;BDE1;1107 1171 11B4; # (뷡; 뷡; 뷡; 뷡; 뷡; ) HANGUL SYLLABLE BWILT
+BDE2;BDE2;1107 1171 11B5;BDE2;1107 1171 11B5; # (뷢; 뷢; 뷢; 뷢; 뷢; ) HANGUL SYLLABLE BWILP
+BDE3;BDE3;1107 1171 11B6;BDE3;1107 1171 11B6; # (뷣; 뷣; 뷣; 뷣; 뷣; ) HANGUL SYLLABLE BWILH
+BDE4;BDE4;1107 1171 11B7;BDE4;1107 1171 11B7; # (뷤; 뷤; 뷤; 뷤; 뷤; ) HANGUL SYLLABLE BWIM
+BDE5;BDE5;1107 1171 11B8;BDE5;1107 1171 11B8; # (뷥; 뷥; 뷥; 뷥; 뷥; ) HANGUL SYLLABLE BWIB
+BDE6;BDE6;1107 1171 11B9;BDE6;1107 1171 11B9; # (뷦; 뷦; 뷦; 뷦; 뷦; ) HANGUL SYLLABLE BWIBS
+BDE7;BDE7;1107 1171 11BA;BDE7;1107 1171 11BA; # (뷧; 뷧; 뷧; 뷧; 뷧; ) HANGUL SYLLABLE BWIS
+BDE8;BDE8;1107 1171 11BB;BDE8;1107 1171 11BB; # (뷨; 뷨; 뷨; 뷨; 뷨; ) HANGUL SYLLABLE BWISS
+BDE9;BDE9;1107 1171 11BC;BDE9;1107 1171 11BC; # (뷩; 뷩; 뷩; 뷩; 뷩; ) HANGUL SYLLABLE BWING
+BDEA;BDEA;1107 1171 11BD;BDEA;1107 1171 11BD; # (뷪; 뷪; 뷪; 뷪; 뷪; ) HANGUL SYLLABLE BWIJ
+BDEB;BDEB;1107 1171 11BE;BDEB;1107 1171 11BE; # (뷫; 뷫; 뷫; 뷫; 뷫; ) HANGUL SYLLABLE BWIC
+BDEC;BDEC;1107 1171 11BF;BDEC;1107 1171 11BF; # (뷬; 뷬; 뷬; 뷬; 뷬; ) HANGUL SYLLABLE BWIK
+BDED;BDED;1107 1171 11C0;BDED;1107 1171 11C0; # (뷭; 뷭; 뷭; 뷭; 뷭; ) HANGUL SYLLABLE BWIT
+BDEE;BDEE;1107 1171 11C1;BDEE;1107 1171 11C1; # (뷮; 뷮; 뷮; 뷮; 뷮; ) HANGUL SYLLABLE BWIP
+BDEF;BDEF;1107 1171 11C2;BDEF;1107 1171 11C2; # (뷯; 뷯; 뷯; 뷯; 뷯; ) HANGUL SYLLABLE BWIH
+BDF0;BDF0;1107 1172;BDF0;1107 1172; # (뷰; 뷰; 뷰; 뷰; 뷰; ) HANGUL SYLLABLE BYU
+BDF1;BDF1;1107 1172 11A8;BDF1;1107 1172 11A8; # (뷱; 뷱; 뷱; 뷱; 뷱; ) HANGUL SYLLABLE BYUG
+BDF2;BDF2;1107 1172 11A9;BDF2;1107 1172 11A9; # (뷲; 뷲; 뷲; 뷲; 뷲; ) HANGUL SYLLABLE BYUGG
+BDF3;BDF3;1107 1172 11AA;BDF3;1107 1172 11AA; # (뷳; 뷳; 뷳; 뷳; 뷳; ) HANGUL SYLLABLE BYUGS
+BDF4;BDF4;1107 1172 11AB;BDF4;1107 1172 11AB; # (뷴; 뷴; 뷴; 뷴; 뷴; ) HANGUL SYLLABLE BYUN
+BDF5;BDF5;1107 1172 11AC;BDF5;1107 1172 11AC; # (뷵; 뷵; 뷵; 뷵; 뷵; ) HANGUL SYLLABLE BYUNJ
+BDF6;BDF6;1107 1172 11AD;BDF6;1107 1172 11AD; # (뷶; 뷶; 뷶; 뷶; 뷶; ) HANGUL SYLLABLE BYUNH
+BDF7;BDF7;1107 1172 11AE;BDF7;1107 1172 11AE; # (뷷; 뷷; 뷷; 뷷; 뷷; ) HANGUL SYLLABLE BYUD
+BDF8;BDF8;1107 1172 11AF;BDF8;1107 1172 11AF; # (뷸; 뷸; 뷸; 뷸; 뷸; ) HANGUL SYLLABLE BYUL
+BDF9;BDF9;1107 1172 11B0;BDF9;1107 1172 11B0; # (뷹; 뷹; 뷹; 뷹; 뷹; ) HANGUL SYLLABLE BYULG
+BDFA;BDFA;1107 1172 11B1;BDFA;1107 1172 11B1; # (뷺; 뷺; 뷺; 뷺; 뷺; ) HANGUL SYLLABLE BYULM
+BDFB;BDFB;1107 1172 11B2;BDFB;1107 1172 11B2; # (뷻; 뷻; 뷻; 뷻; 뷻; ) HANGUL SYLLABLE BYULB
+BDFC;BDFC;1107 1172 11B3;BDFC;1107 1172 11B3; # (뷼; 뷼; 뷼; 뷼; 뷼; ) HANGUL SYLLABLE BYULS
+BDFD;BDFD;1107 1172 11B4;BDFD;1107 1172 11B4; # (뷽; 뷽; 뷽; 뷽; 뷽; ) HANGUL SYLLABLE BYULT
+BDFE;BDFE;1107 1172 11B5;BDFE;1107 1172 11B5; # (뷾; 뷾; 뷾; 뷾; 뷾; ) HANGUL SYLLABLE BYULP
+BDFF;BDFF;1107 1172 11B6;BDFF;1107 1172 11B6; # (뷿; 뷿; 뷿; 뷿; 뷿; ) HANGUL SYLLABLE BYULH
+BE00;BE00;1107 1172 11B7;BE00;1107 1172 11B7; # (븀; 븀; 븀; 븀; 븀; ) HANGUL SYLLABLE BYUM
+BE01;BE01;1107 1172 11B8;BE01;1107 1172 11B8; # (븁; 븁; 븁; 븁; 븁; ) HANGUL SYLLABLE BYUB
+BE02;BE02;1107 1172 11B9;BE02;1107 1172 11B9; # (븂; 븂; 븂; 븂; 븂; ) HANGUL SYLLABLE BYUBS
+BE03;BE03;1107 1172 11BA;BE03;1107 1172 11BA; # (븃; 븃; 븃; 븃; 븃; ) HANGUL SYLLABLE BYUS
+BE04;BE04;1107 1172 11BB;BE04;1107 1172 11BB; # (븄; 븄; 븄; 븄; 븄; ) HANGUL SYLLABLE BYUSS
+BE05;BE05;1107 1172 11BC;BE05;1107 1172 11BC; # (븅; 븅; 븅; 븅; 븅; ) HANGUL SYLLABLE BYUNG
+BE06;BE06;1107 1172 11BD;BE06;1107 1172 11BD; # (븆; 븆; 븆; 븆; 븆; ) HANGUL SYLLABLE BYUJ
+BE07;BE07;1107 1172 11BE;BE07;1107 1172 11BE; # (븇; 븇; 븇; 븇; 븇; ) HANGUL SYLLABLE BYUC
+BE08;BE08;1107 1172 11BF;BE08;1107 1172 11BF; # (븈; 븈; 븈; 븈; 븈; ) HANGUL SYLLABLE BYUK
+BE09;BE09;1107 1172 11C0;BE09;1107 1172 11C0; # (븉; 븉; 븉; 븉; 븉; ) HANGUL SYLLABLE BYUT
+BE0A;BE0A;1107 1172 11C1;BE0A;1107 1172 11C1; # (븊; 븊; 븊; 븊; 븊; ) HANGUL SYLLABLE BYUP
+BE0B;BE0B;1107 1172 11C2;BE0B;1107 1172 11C2; # (븋; 븋; 븋; 븋; 븋; ) HANGUL SYLLABLE BYUH
+BE0C;BE0C;1107 1173;BE0C;1107 1173; # (브; 브; 브; 브; 브; ) HANGUL SYLLABLE BEU
+BE0D;BE0D;1107 1173 11A8;BE0D;1107 1173 11A8; # (븍; 븍; 븍; 븍; 븍; ) HANGUL SYLLABLE BEUG
+BE0E;BE0E;1107 1173 11A9;BE0E;1107 1173 11A9; # (븎; 븎; 븎; 븎; 븎; ) HANGUL SYLLABLE BEUGG
+BE0F;BE0F;1107 1173 11AA;BE0F;1107 1173 11AA; # (븏; 븏; 븏; 븏; 븏; ) HANGUL SYLLABLE BEUGS
+BE10;BE10;1107 1173 11AB;BE10;1107 1173 11AB; # (븐; 븐; 븐; 븐; 븐; ) HANGUL SYLLABLE BEUN
+BE11;BE11;1107 1173 11AC;BE11;1107 1173 11AC; # (븑; 븑; 븑; 븑; 븑; ) HANGUL SYLLABLE BEUNJ
+BE12;BE12;1107 1173 11AD;BE12;1107 1173 11AD; # (븒; 븒; 븒; 븒; 븒; ) HANGUL SYLLABLE BEUNH
+BE13;BE13;1107 1173 11AE;BE13;1107 1173 11AE; # (븓; 븓; 븓; 븓; 븓; ) HANGUL SYLLABLE BEUD
+BE14;BE14;1107 1173 11AF;BE14;1107 1173 11AF; # (블; 블; 블; 블; 블; ) HANGUL SYLLABLE BEUL
+BE15;BE15;1107 1173 11B0;BE15;1107 1173 11B0; # (븕; 븕; 븕; 븕; 븕; ) HANGUL SYLLABLE BEULG
+BE16;BE16;1107 1173 11B1;BE16;1107 1173 11B1; # (븖; 븖; 븖; 븖; 븖; ) HANGUL SYLLABLE BEULM
+BE17;BE17;1107 1173 11B2;BE17;1107 1173 11B2; # (븗; 븗; 븗; 븗; 븗; ) HANGUL SYLLABLE BEULB
+BE18;BE18;1107 1173 11B3;BE18;1107 1173 11B3; # (븘; 븘; 븘; 븘; 븘; ) HANGUL SYLLABLE BEULS
+BE19;BE19;1107 1173 11B4;BE19;1107 1173 11B4; # (븙; 븙; 븙; 븙; 븙; ) HANGUL SYLLABLE BEULT
+BE1A;BE1A;1107 1173 11B5;BE1A;1107 1173 11B5; # (븚; 븚; 븚; 븚; 븚; ) HANGUL SYLLABLE BEULP
+BE1B;BE1B;1107 1173 11B6;BE1B;1107 1173 11B6; # (븛; 븛; 븛; 븛; 븛; ) HANGUL SYLLABLE BEULH
+BE1C;BE1C;1107 1173 11B7;BE1C;1107 1173 11B7; # (븜; 븜; 븜; 븜; 븜; ) HANGUL SYLLABLE BEUM
+BE1D;BE1D;1107 1173 11B8;BE1D;1107 1173 11B8; # (븝; 븝; 븝; 븝; 븝; ) HANGUL SYLLABLE BEUB
+BE1E;BE1E;1107 1173 11B9;BE1E;1107 1173 11B9; # (븞; 븞; 븞; 븞; 븞; ) HANGUL SYLLABLE BEUBS
+BE1F;BE1F;1107 1173 11BA;BE1F;1107 1173 11BA; # (븟; 븟; 븟; 븟; 븟; ) HANGUL SYLLABLE BEUS
+BE20;BE20;1107 1173 11BB;BE20;1107 1173 11BB; # (븠; 븠; 븠; 븠; 븠; ) HANGUL SYLLABLE BEUSS
+BE21;BE21;1107 1173 11BC;BE21;1107 1173 11BC; # (븡; 븡; 븡; 븡; 븡; ) HANGUL SYLLABLE BEUNG
+BE22;BE22;1107 1173 11BD;BE22;1107 1173 11BD; # (븢; 븢; 븢; 븢; 븢; ) HANGUL SYLLABLE BEUJ
+BE23;BE23;1107 1173 11BE;BE23;1107 1173 11BE; # (븣; 븣; 븣; 븣; 븣; ) HANGUL SYLLABLE BEUC
+BE24;BE24;1107 1173 11BF;BE24;1107 1173 11BF; # (븤; 븤; 븤; 븤; 븤; ) HANGUL SYLLABLE BEUK
+BE25;BE25;1107 1173 11C0;BE25;1107 1173 11C0; # (븥; 븥; 븥; 븥; 븥; ) HANGUL SYLLABLE BEUT
+BE26;BE26;1107 1173 11C1;BE26;1107 1173 11C1; # (븦; 븦; 븦; 븦; 븦; ) HANGUL SYLLABLE BEUP
+BE27;BE27;1107 1173 11C2;BE27;1107 1173 11C2; # (븧; 븧; 븧; 븧; 븧; ) HANGUL SYLLABLE BEUH
+BE28;BE28;1107 1174;BE28;1107 1174; # (븨; 븨; 븨; 븨; 븨; ) HANGUL SYLLABLE BYI
+BE29;BE29;1107 1174 11A8;BE29;1107 1174 11A8; # (븩; 븩; 븩; 븩; 븩; ) HANGUL SYLLABLE BYIG
+BE2A;BE2A;1107 1174 11A9;BE2A;1107 1174 11A9; # (븪; 븪; 븪; 븪; 븪; ) HANGUL SYLLABLE BYIGG
+BE2B;BE2B;1107 1174 11AA;BE2B;1107 1174 11AA; # (븫; 븫; 븫; 븫; 븫; ) HANGUL SYLLABLE BYIGS
+BE2C;BE2C;1107 1174 11AB;BE2C;1107 1174 11AB; # (븬; 븬; 븬; 븬; 븬; ) HANGUL SYLLABLE BYIN
+BE2D;BE2D;1107 1174 11AC;BE2D;1107 1174 11AC; # (븭; 븭; 븭; 븭; 븭; ) HANGUL SYLLABLE BYINJ
+BE2E;BE2E;1107 1174 11AD;BE2E;1107 1174 11AD; # (븮; 븮; 븮; 븮; 븮; ) HANGUL SYLLABLE BYINH
+BE2F;BE2F;1107 1174 11AE;BE2F;1107 1174 11AE; # (븯; 븯; 븯; 븯; 븯; ) HANGUL SYLLABLE BYID
+BE30;BE30;1107 1174 11AF;BE30;1107 1174 11AF; # (븰; 븰; 븰; 븰; 븰; ) HANGUL SYLLABLE BYIL
+BE31;BE31;1107 1174 11B0;BE31;1107 1174 11B0; # (븱; 븱; 븱; 븱; 븱; ) HANGUL SYLLABLE BYILG
+BE32;BE32;1107 1174 11B1;BE32;1107 1174 11B1; # (븲; 븲; 븲; 븲; 븲; ) HANGUL SYLLABLE BYILM
+BE33;BE33;1107 1174 11B2;BE33;1107 1174 11B2; # (븳; 븳; 븳; 븳; 븳; ) HANGUL SYLLABLE BYILB
+BE34;BE34;1107 1174 11B3;BE34;1107 1174 11B3; # (븴; 븴; 븴; 븴; 븴; ) HANGUL SYLLABLE BYILS
+BE35;BE35;1107 1174 11B4;BE35;1107 1174 11B4; # (븵; 븵; 븵; 븵; 븵; ) HANGUL SYLLABLE BYILT
+BE36;BE36;1107 1174 11B5;BE36;1107 1174 11B5; # (븶; 븶; 븶; 븶; 븶; ) HANGUL SYLLABLE BYILP
+BE37;BE37;1107 1174 11B6;BE37;1107 1174 11B6; # (븷; 븷; 븷; 븷; 븷; ) HANGUL SYLLABLE BYILH
+BE38;BE38;1107 1174 11B7;BE38;1107 1174 11B7; # (븸; 븸; 븸; 븸; 븸; ) HANGUL SYLLABLE BYIM
+BE39;BE39;1107 1174 11B8;BE39;1107 1174 11B8; # (븹; 븹; 븹; 븹; 븹; ) HANGUL SYLLABLE BYIB
+BE3A;BE3A;1107 1174 11B9;BE3A;1107 1174 11B9; # (븺; 븺; 븺; 븺; 븺; ) HANGUL SYLLABLE BYIBS
+BE3B;BE3B;1107 1174 11BA;BE3B;1107 1174 11BA; # (븻; 븻; 븻; 븻; 븻; ) HANGUL SYLLABLE BYIS
+BE3C;BE3C;1107 1174 11BB;BE3C;1107 1174 11BB; # (븼; 븼; 븼; 븼; 븼; ) HANGUL SYLLABLE BYISS
+BE3D;BE3D;1107 1174 11BC;BE3D;1107 1174 11BC; # (븽; 븽; 븽; 븽; 븽; ) HANGUL SYLLABLE BYING
+BE3E;BE3E;1107 1174 11BD;BE3E;1107 1174 11BD; # (븾; 븾; 븾; 븾; 븾; ) HANGUL SYLLABLE BYIJ
+BE3F;BE3F;1107 1174 11BE;BE3F;1107 1174 11BE; # (븿; 븿; 븿; 븿; 븿; ) HANGUL SYLLABLE BYIC
+BE40;BE40;1107 1174 11BF;BE40;1107 1174 11BF; # (빀; 빀; 빀; 빀; 빀; ) HANGUL SYLLABLE BYIK
+BE41;BE41;1107 1174 11C0;BE41;1107 1174 11C0; # (빁; 빁; 빁; 빁; 빁; ) HANGUL SYLLABLE BYIT
+BE42;BE42;1107 1174 11C1;BE42;1107 1174 11C1; # (빂; 빂; 빂; 빂; 빂; ) HANGUL SYLLABLE BYIP
+BE43;BE43;1107 1174 11C2;BE43;1107 1174 11C2; # (빃; 빃; 빃; 빃; 빃; ) HANGUL SYLLABLE BYIH
+BE44;BE44;1107 1175;BE44;1107 1175; # (비; 비; 비; 비; 비; ) HANGUL SYLLABLE BI
+BE45;BE45;1107 1175 11A8;BE45;1107 1175 11A8; # (빅; 빅; 빅; 빅; 빅; ) HANGUL SYLLABLE BIG
+BE46;BE46;1107 1175 11A9;BE46;1107 1175 11A9; # (빆; 빆; 빆; 빆; 빆; ) HANGUL SYLLABLE BIGG
+BE47;BE47;1107 1175 11AA;BE47;1107 1175 11AA; # (빇; 빇; 빇; 빇; 빇; ) HANGUL SYLLABLE BIGS
+BE48;BE48;1107 1175 11AB;BE48;1107 1175 11AB; # (빈; 빈; 빈; 빈; 빈; ) HANGUL SYLLABLE BIN
+BE49;BE49;1107 1175 11AC;BE49;1107 1175 11AC; # (빉; 빉; 빉; 빉; 빉; ) HANGUL SYLLABLE BINJ
+BE4A;BE4A;1107 1175 11AD;BE4A;1107 1175 11AD; # (빊; 빊; 빊; 빊; 빊; ) HANGUL SYLLABLE BINH
+BE4B;BE4B;1107 1175 11AE;BE4B;1107 1175 11AE; # (빋; 빋; 빋; 빋; 빋; ) HANGUL SYLLABLE BID
+BE4C;BE4C;1107 1175 11AF;BE4C;1107 1175 11AF; # (빌; 빌; 빌; 빌; 빌; ) HANGUL SYLLABLE BIL
+BE4D;BE4D;1107 1175 11B0;BE4D;1107 1175 11B0; # (빍; 빍; 빍; 빍; 빍; ) HANGUL SYLLABLE BILG
+BE4E;BE4E;1107 1175 11B1;BE4E;1107 1175 11B1; # (빎; 빎; 빎; 빎; 빎; ) HANGUL SYLLABLE BILM
+BE4F;BE4F;1107 1175 11B2;BE4F;1107 1175 11B2; # (빏; 빏; 빏; 빏; 빏; ) HANGUL SYLLABLE BILB
+BE50;BE50;1107 1175 11B3;BE50;1107 1175 11B3; # (빐; 빐; 빐; 빐; 빐; ) HANGUL SYLLABLE BILS
+BE51;BE51;1107 1175 11B4;BE51;1107 1175 11B4; # (빑; 빑; 빑; 빑; 빑; ) HANGUL SYLLABLE BILT
+BE52;BE52;1107 1175 11B5;BE52;1107 1175 11B5; # (빒; 빒; 빒; 빒; 빒; ) HANGUL SYLLABLE BILP
+BE53;BE53;1107 1175 11B6;BE53;1107 1175 11B6; # (빓; 빓; 빓; 빓; 빓; ) HANGUL SYLLABLE BILH
+BE54;BE54;1107 1175 11B7;BE54;1107 1175 11B7; # (빔; 빔; 빔; 빔; 빔; ) HANGUL SYLLABLE BIM
+BE55;BE55;1107 1175 11B8;BE55;1107 1175 11B8; # (빕; 빕; 빕; 빕; 빕; ) HANGUL SYLLABLE BIB
+BE56;BE56;1107 1175 11B9;BE56;1107 1175 11B9; # (빖; 빖; 빖; 빖; 빖; ) HANGUL SYLLABLE BIBS
+BE57;BE57;1107 1175 11BA;BE57;1107 1175 11BA; # (빗; 빗; 빗; 빗; 빗; ) HANGUL SYLLABLE BIS
+BE58;BE58;1107 1175 11BB;BE58;1107 1175 11BB; # (빘; 빘; 빘; 빘; 빘; ) HANGUL SYLLABLE BISS
+BE59;BE59;1107 1175 11BC;BE59;1107 1175 11BC; # (빙; 빙; 빙; 빙; 빙; ) HANGUL SYLLABLE BING
+BE5A;BE5A;1107 1175 11BD;BE5A;1107 1175 11BD; # (빚; 빚; 빚; 빚; 빚; ) HANGUL SYLLABLE BIJ
+BE5B;BE5B;1107 1175 11BE;BE5B;1107 1175 11BE; # (빛; 빛; 빛; 빛; 빛; ) HANGUL SYLLABLE BIC
+BE5C;BE5C;1107 1175 11BF;BE5C;1107 1175 11BF; # (빜; 빜; 빜; 빜; 빜; ) HANGUL SYLLABLE BIK
+BE5D;BE5D;1107 1175 11C0;BE5D;1107 1175 11C0; # (빝; 빝; 빝; 빝; 빝; ) HANGUL SYLLABLE BIT
+BE5E;BE5E;1107 1175 11C1;BE5E;1107 1175 11C1; # (빞; 빞; 빞; 빞; 빞; ) HANGUL SYLLABLE BIP
+BE5F;BE5F;1107 1175 11C2;BE5F;1107 1175 11C2; # (빟; 빟; 빟; 빟; 빟; ) HANGUL SYLLABLE BIH
+BE60;BE60;1108 1161;BE60;1108 1161; # (빠; 빠; 빠; 빠; 빠; ) HANGUL SYLLABLE BBA
+BE61;BE61;1108 1161 11A8;BE61;1108 1161 11A8; # (빡; 빡; 빡; 빡; 빡; ) HANGUL SYLLABLE BBAG
+BE62;BE62;1108 1161 11A9;BE62;1108 1161 11A9; # (빢; 빢; 빢; 빢; 빢; ) HANGUL SYLLABLE BBAGG
+BE63;BE63;1108 1161 11AA;BE63;1108 1161 11AA; # (빣; 빣; 빣; 빣; 빣; ) HANGUL SYLLABLE BBAGS
+BE64;BE64;1108 1161 11AB;BE64;1108 1161 11AB; # (빤; 빤; 빤; 빤; 빤; ) HANGUL SYLLABLE BBAN
+BE65;BE65;1108 1161 11AC;BE65;1108 1161 11AC; # (빥; 빥; 빥; 빥; 빥; ) HANGUL SYLLABLE BBANJ
+BE66;BE66;1108 1161 11AD;BE66;1108 1161 11AD; # (빦; 빦; 빦; 빦; 빦; ) HANGUL SYLLABLE BBANH
+BE67;BE67;1108 1161 11AE;BE67;1108 1161 11AE; # (빧; 빧; 빧; 빧; 빧; ) HANGUL SYLLABLE BBAD
+BE68;BE68;1108 1161 11AF;BE68;1108 1161 11AF; # (빨; 빨; 빨; 빨; 빨; ) HANGUL SYLLABLE BBAL
+BE69;BE69;1108 1161 11B0;BE69;1108 1161 11B0; # (빩; 빩; 빩; 빩; 빩; ) HANGUL SYLLABLE BBALG
+BE6A;BE6A;1108 1161 11B1;BE6A;1108 1161 11B1; # (빪; 빪; 빪; 빪; 빪; ) HANGUL SYLLABLE BBALM
+BE6B;BE6B;1108 1161 11B2;BE6B;1108 1161 11B2; # (빫; 빫; 빫; 빫; 빫; ) HANGUL SYLLABLE BBALB
+BE6C;BE6C;1108 1161 11B3;BE6C;1108 1161 11B3; # (빬; 빬; 빬; 빬; 빬; ) HANGUL SYLLABLE BBALS
+BE6D;BE6D;1108 1161 11B4;BE6D;1108 1161 11B4; # (빭; 빭; 빭; 빭; 빭; ) HANGUL SYLLABLE BBALT
+BE6E;BE6E;1108 1161 11B5;BE6E;1108 1161 11B5; # (빮; 빮; 빮; 빮; 빮; ) HANGUL SYLLABLE BBALP
+BE6F;BE6F;1108 1161 11B6;BE6F;1108 1161 11B6; # (빯; 빯; 빯; 빯; 빯; ) HANGUL SYLLABLE BBALH
+BE70;BE70;1108 1161 11B7;BE70;1108 1161 11B7; # (빰; 빰; 빰; 빰; 빰; ) HANGUL SYLLABLE BBAM
+BE71;BE71;1108 1161 11B8;BE71;1108 1161 11B8; # (빱; 빱; 빱; 빱; 빱; ) HANGUL SYLLABLE BBAB
+BE72;BE72;1108 1161 11B9;BE72;1108 1161 11B9; # (빲; 빲; 빲; 빲; 빲; ) HANGUL SYLLABLE BBABS
+BE73;BE73;1108 1161 11BA;BE73;1108 1161 11BA; # (빳; 빳; 빳; 빳; 빳; ) HANGUL SYLLABLE BBAS
+BE74;BE74;1108 1161 11BB;BE74;1108 1161 11BB; # (빴; 빴; 빴; 빴; 빴; ) HANGUL SYLLABLE BBASS
+BE75;BE75;1108 1161 11BC;BE75;1108 1161 11BC; # (빵; 빵; 빵; 빵; 빵; ) HANGUL SYLLABLE BBANG
+BE76;BE76;1108 1161 11BD;BE76;1108 1161 11BD; # (빶; 빶; 빶; 빶; 빶; ) HANGUL SYLLABLE BBAJ
+BE77;BE77;1108 1161 11BE;BE77;1108 1161 11BE; # (빷; 빷; 빷; 빷; 빷; ) HANGUL SYLLABLE BBAC
+BE78;BE78;1108 1161 11BF;BE78;1108 1161 11BF; # (빸; 빸; 빸; 빸; 빸; ) HANGUL SYLLABLE BBAK
+BE79;BE79;1108 1161 11C0;BE79;1108 1161 11C0; # (빹; 빹; 빹; 빹; 빹; ) HANGUL SYLLABLE BBAT
+BE7A;BE7A;1108 1161 11C1;BE7A;1108 1161 11C1; # (빺; 빺; 빺; 빺; 빺; ) HANGUL SYLLABLE BBAP
+BE7B;BE7B;1108 1161 11C2;BE7B;1108 1161 11C2; # (빻; 빻; 빻; 빻; 빻; ) HANGUL SYLLABLE BBAH
+BE7C;BE7C;1108 1162;BE7C;1108 1162; # (빼; 빼; 빼; 빼; 빼; ) HANGUL SYLLABLE BBAE
+BE7D;BE7D;1108 1162 11A8;BE7D;1108 1162 11A8; # (빽; 빽; 빽; 빽; 빽; ) HANGUL SYLLABLE BBAEG
+BE7E;BE7E;1108 1162 11A9;BE7E;1108 1162 11A9; # (빾; 빾; 빾; 빾; 빾; ) HANGUL SYLLABLE BBAEGG
+BE7F;BE7F;1108 1162 11AA;BE7F;1108 1162 11AA; # (빿; 빿; 빿; 빿; 빿; ) HANGUL SYLLABLE BBAEGS
+BE80;BE80;1108 1162 11AB;BE80;1108 1162 11AB; # (뺀; 뺀; 뺀; 뺀; 뺀; ) HANGUL SYLLABLE BBAEN
+BE81;BE81;1108 1162 11AC;BE81;1108 1162 11AC; # (뺁; 뺁; 뺁; 뺁; 뺁; ) HANGUL SYLLABLE BBAENJ
+BE82;BE82;1108 1162 11AD;BE82;1108 1162 11AD; # (뺂; 뺂; 뺂; 뺂; 뺂; ) HANGUL SYLLABLE BBAENH
+BE83;BE83;1108 1162 11AE;BE83;1108 1162 11AE; # (뺃; 뺃; 뺃; 뺃; 뺃; ) HANGUL SYLLABLE BBAED
+BE84;BE84;1108 1162 11AF;BE84;1108 1162 11AF; # (뺄; 뺄; 뺄; 뺄; 뺄; ) HANGUL SYLLABLE BBAEL
+BE85;BE85;1108 1162 11B0;BE85;1108 1162 11B0; # (뺅; 뺅; 뺅; 뺅; 뺅; ) HANGUL SYLLABLE BBAELG
+BE86;BE86;1108 1162 11B1;BE86;1108 1162 11B1; # (뺆; 뺆; 뺆; 뺆; 뺆; ) HANGUL SYLLABLE BBAELM
+BE87;BE87;1108 1162 11B2;BE87;1108 1162 11B2; # (뺇; 뺇; 뺇; 뺇; 뺇; ) HANGUL SYLLABLE BBAELB
+BE88;BE88;1108 1162 11B3;BE88;1108 1162 11B3; # (뺈; 뺈; 뺈; 뺈; 뺈; ) HANGUL SYLLABLE BBAELS
+BE89;BE89;1108 1162 11B4;BE89;1108 1162 11B4; # (뺉; 뺉; 뺉; 뺉; 뺉; ) HANGUL SYLLABLE BBAELT
+BE8A;BE8A;1108 1162 11B5;BE8A;1108 1162 11B5; # (뺊; 뺊; 뺊; 뺊; 뺊; ) HANGUL SYLLABLE BBAELP
+BE8B;BE8B;1108 1162 11B6;BE8B;1108 1162 11B6; # (뺋; 뺋; 뺋; 뺋; 뺋; ) HANGUL SYLLABLE BBAELH
+BE8C;BE8C;1108 1162 11B7;BE8C;1108 1162 11B7; # (뺌; 뺌; 뺌; 뺌; 뺌; ) HANGUL SYLLABLE BBAEM
+BE8D;BE8D;1108 1162 11B8;BE8D;1108 1162 11B8; # (뺍; 뺍; 뺍; 뺍; 뺍; ) HANGUL SYLLABLE BBAEB
+BE8E;BE8E;1108 1162 11B9;BE8E;1108 1162 11B9; # (뺎; 뺎; 뺎; 뺎; 뺎; ) HANGUL SYLLABLE BBAEBS
+BE8F;BE8F;1108 1162 11BA;BE8F;1108 1162 11BA; # (뺏; 뺏; 뺏; 뺏; 뺏; ) HANGUL SYLLABLE BBAES
+BE90;BE90;1108 1162 11BB;BE90;1108 1162 11BB; # (뺐; 뺐; 뺐; 뺐; 뺐; ) HANGUL SYLLABLE BBAESS
+BE91;BE91;1108 1162 11BC;BE91;1108 1162 11BC; # (뺑; 뺑; 뺑; 뺑; 뺑; ) HANGUL SYLLABLE BBAENG
+BE92;BE92;1108 1162 11BD;BE92;1108 1162 11BD; # (뺒; 뺒; 뺒; 뺒; 뺒; ) HANGUL SYLLABLE BBAEJ
+BE93;BE93;1108 1162 11BE;BE93;1108 1162 11BE; # (뺓; 뺓; 뺓; 뺓; 뺓; ) HANGUL SYLLABLE BBAEC
+BE94;BE94;1108 1162 11BF;BE94;1108 1162 11BF; # (뺔; 뺔; 뺔; 뺔; 뺔; ) HANGUL SYLLABLE BBAEK
+BE95;BE95;1108 1162 11C0;BE95;1108 1162 11C0; # (뺕; 뺕; 뺕; 뺕; 뺕; ) HANGUL SYLLABLE BBAET
+BE96;BE96;1108 1162 11C1;BE96;1108 1162 11C1; # (뺖; 뺖; 뺖; 뺖; 뺖; ) HANGUL SYLLABLE BBAEP
+BE97;BE97;1108 1162 11C2;BE97;1108 1162 11C2; # (뺗; 뺗; 뺗; 뺗; 뺗; ) HANGUL SYLLABLE BBAEH
+BE98;BE98;1108 1163;BE98;1108 1163; # (뺘; 뺘; 뺘; 뺘; 뺘; ) HANGUL SYLLABLE BBYA
+BE99;BE99;1108 1163 11A8;BE99;1108 1163 11A8; # (뺙; 뺙; 뺙; 뺙; 뺙; ) HANGUL SYLLABLE BBYAG
+BE9A;BE9A;1108 1163 11A9;BE9A;1108 1163 11A9; # (뺚; 뺚; 뺚; 뺚; 뺚; ) HANGUL SYLLABLE BBYAGG
+BE9B;BE9B;1108 1163 11AA;BE9B;1108 1163 11AA; # (뺛; 뺛; 뺛; 뺛; 뺛; ) HANGUL SYLLABLE BBYAGS
+BE9C;BE9C;1108 1163 11AB;BE9C;1108 1163 11AB; # (뺜; 뺜; 뺜; 뺜; 뺜; ) HANGUL SYLLABLE BBYAN
+BE9D;BE9D;1108 1163 11AC;BE9D;1108 1163 11AC; # (뺝; 뺝; 뺝; 뺝; 뺝; ) HANGUL SYLLABLE BBYANJ
+BE9E;BE9E;1108 1163 11AD;BE9E;1108 1163 11AD; # (뺞; 뺞; 뺞; 뺞; 뺞; ) HANGUL SYLLABLE BBYANH
+BE9F;BE9F;1108 1163 11AE;BE9F;1108 1163 11AE; # (뺟; 뺟; 뺟; 뺟; 뺟; ) HANGUL SYLLABLE BBYAD
+BEA0;BEA0;1108 1163 11AF;BEA0;1108 1163 11AF; # (뺠; 뺠; 뺠; 뺠; 뺠; ) HANGUL SYLLABLE BBYAL
+BEA1;BEA1;1108 1163 11B0;BEA1;1108 1163 11B0; # (뺡; 뺡; 뺡; 뺡; 뺡; ) HANGUL SYLLABLE BBYALG
+BEA2;BEA2;1108 1163 11B1;BEA2;1108 1163 11B1; # (뺢; 뺢; 뺢; 뺢; 뺢; ) HANGUL SYLLABLE BBYALM
+BEA3;BEA3;1108 1163 11B2;BEA3;1108 1163 11B2; # (뺣; 뺣; 뺣; 뺣; 뺣; ) HANGUL SYLLABLE BBYALB
+BEA4;BEA4;1108 1163 11B3;BEA4;1108 1163 11B3; # (뺤; 뺤; 뺤; 뺤; 뺤; ) HANGUL SYLLABLE BBYALS
+BEA5;BEA5;1108 1163 11B4;BEA5;1108 1163 11B4; # (뺥; 뺥; 뺥; 뺥; 뺥; ) HANGUL SYLLABLE BBYALT
+BEA6;BEA6;1108 1163 11B5;BEA6;1108 1163 11B5; # (뺦; 뺦; 뺦; 뺦; 뺦; ) HANGUL SYLLABLE BBYALP
+BEA7;BEA7;1108 1163 11B6;BEA7;1108 1163 11B6; # (뺧; 뺧; 뺧; 뺧; 뺧; ) HANGUL SYLLABLE BBYALH
+BEA8;BEA8;1108 1163 11B7;BEA8;1108 1163 11B7; # (뺨; 뺨; 뺨; 뺨; 뺨; ) HANGUL SYLLABLE BBYAM
+BEA9;BEA9;1108 1163 11B8;BEA9;1108 1163 11B8; # (뺩; 뺩; 뺩; 뺩; 뺩; ) HANGUL SYLLABLE BBYAB
+BEAA;BEAA;1108 1163 11B9;BEAA;1108 1163 11B9; # (뺪; 뺪; 뺪; 뺪; 뺪; ) HANGUL SYLLABLE BBYABS
+BEAB;BEAB;1108 1163 11BA;BEAB;1108 1163 11BA; # (뺫; 뺫; 뺫; 뺫; 뺫; ) HANGUL SYLLABLE BBYAS
+BEAC;BEAC;1108 1163 11BB;BEAC;1108 1163 11BB; # (뺬; 뺬; 뺬; 뺬; 뺬; ) HANGUL SYLLABLE BBYASS
+BEAD;BEAD;1108 1163 11BC;BEAD;1108 1163 11BC; # (뺭; 뺭; 뺭; 뺭; 뺭; ) HANGUL SYLLABLE BBYANG
+BEAE;BEAE;1108 1163 11BD;BEAE;1108 1163 11BD; # (뺮; 뺮; 뺮; 뺮; 뺮; ) HANGUL SYLLABLE BBYAJ
+BEAF;BEAF;1108 1163 11BE;BEAF;1108 1163 11BE; # (뺯; 뺯; 뺯; 뺯; 뺯; ) HANGUL SYLLABLE BBYAC
+BEB0;BEB0;1108 1163 11BF;BEB0;1108 1163 11BF; # (뺰; 뺰; 뺰; 뺰; 뺰; ) HANGUL SYLLABLE BBYAK
+BEB1;BEB1;1108 1163 11C0;BEB1;1108 1163 11C0; # (뺱; 뺱; 뺱; 뺱; 뺱; ) HANGUL SYLLABLE BBYAT
+BEB2;BEB2;1108 1163 11C1;BEB2;1108 1163 11C1; # (뺲; 뺲; 뺲; 뺲; 뺲; ) HANGUL SYLLABLE BBYAP
+BEB3;BEB3;1108 1163 11C2;BEB3;1108 1163 11C2; # (뺳; 뺳; 뺳; 뺳; 뺳; ) HANGUL SYLLABLE BBYAH
+BEB4;BEB4;1108 1164;BEB4;1108 1164; # (뺴; 뺴; 뺴; 뺴; 뺴; ) HANGUL SYLLABLE BBYAE
+BEB5;BEB5;1108 1164 11A8;BEB5;1108 1164 11A8; # (뺵; 뺵; 뺵; 뺵; 뺵; ) HANGUL SYLLABLE BBYAEG
+BEB6;BEB6;1108 1164 11A9;BEB6;1108 1164 11A9; # (뺶; 뺶; 뺶; 뺶; 뺶; ) HANGUL SYLLABLE BBYAEGG
+BEB7;BEB7;1108 1164 11AA;BEB7;1108 1164 11AA; # (뺷; 뺷; 뺷; 뺷; 뺷; ) HANGUL SYLLABLE BBYAEGS
+BEB8;BEB8;1108 1164 11AB;BEB8;1108 1164 11AB; # (뺸; 뺸; 뺸; 뺸; 뺸; ) HANGUL SYLLABLE BBYAEN
+BEB9;BEB9;1108 1164 11AC;BEB9;1108 1164 11AC; # (뺹; 뺹; 뺹; 뺹; 뺹; ) HANGUL SYLLABLE BBYAENJ
+BEBA;BEBA;1108 1164 11AD;BEBA;1108 1164 11AD; # (뺺; 뺺; 뺺; 뺺; 뺺; ) HANGUL SYLLABLE BBYAENH
+BEBB;BEBB;1108 1164 11AE;BEBB;1108 1164 11AE; # (뺻; 뺻; 뺻; 뺻; 뺻; ) HANGUL SYLLABLE BBYAED
+BEBC;BEBC;1108 1164 11AF;BEBC;1108 1164 11AF; # (뺼; 뺼; 뺼; 뺼; 뺼; ) HANGUL SYLLABLE BBYAEL
+BEBD;BEBD;1108 1164 11B0;BEBD;1108 1164 11B0; # (뺽; 뺽; 뺽; 뺽; 뺽; ) HANGUL SYLLABLE BBYAELG
+BEBE;BEBE;1108 1164 11B1;BEBE;1108 1164 11B1; # (뺾; 뺾; 뺾; 뺾; 뺾; ) HANGUL SYLLABLE BBYAELM
+BEBF;BEBF;1108 1164 11B2;BEBF;1108 1164 11B2; # (뺿; 뺿; 뺿; 뺿; 뺿; ) HANGUL SYLLABLE BBYAELB
+BEC0;BEC0;1108 1164 11B3;BEC0;1108 1164 11B3; # (뻀; 뻀; 뻀; 뻀; 뻀; ) HANGUL SYLLABLE BBYAELS
+BEC1;BEC1;1108 1164 11B4;BEC1;1108 1164 11B4; # (뻁; 뻁; 뻁; 뻁; 뻁; ) HANGUL SYLLABLE BBYAELT
+BEC2;BEC2;1108 1164 11B5;BEC2;1108 1164 11B5; # (뻂; 뻂; 뻂; 뻂; 뻂; ) HANGUL SYLLABLE BBYAELP
+BEC3;BEC3;1108 1164 11B6;BEC3;1108 1164 11B6; # (뻃; 뻃; 뻃; 뻃; 뻃; ) HANGUL SYLLABLE BBYAELH
+BEC4;BEC4;1108 1164 11B7;BEC4;1108 1164 11B7; # (뻄; 뻄; 뻄; 뻄; 뻄; ) HANGUL SYLLABLE BBYAEM
+BEC5;BEC5;1108 1164 11B8;BEC5;1108 1164 11B8; # (뻅; 뻅; 뻅; 뻅; 뻅; ) HANGUL SYLLABLE BBYAEB
+BEC6;BEC6;1108 1164 11B9;BEC6;1108 1164 11B9; # (뻆; 뻆; 뻆; 뻆; 뻆; ) HANGUL SYLLABLE BBYAEBS
+BEC7;BEC7;1108 1164 11BA;BEC7;1108 1164 11BA; # (뻇; 뻇; 뻇; 뻇; 뻇; ) HANGUL SYLLABLE BBYAES
+BEC8;BEC8;1108 1164 11BB;BEC8;1108 1164 11BB; # (뻈; 뻈; 뻈; 뻈; 뻈; ) HANGUL SYLLABLE BBYAESS
+BEC9;BEC9;1108 1164 11BC;BEC9;1108 1164 11BC; # (뻉; 뻉; 뻉; 뻉; 뻉; ) HANGUL SYLLABLE BBYAENG
+BECA;BECA;1108 1164 11BD;BECA;1108 1164 11BD; # (뻊; 뻊; 뻊; 뻊; 뻊; ) HANGUL SYLLABLE BBYAEJ
+BECB;BECB;1108 1164 11BE;BECB;1108 1164 11BE; # (뻋; 뻋; 뻋; 뻋; 뻋; ) HANGUL SYLLABLE BBYAEC
+BECC;BECC;1108 1164 11BF;BECC;1108 1164 11BF; # (뻌; 뻌; 뻌; 뻌; 뻌; ) HANGUL SYLLABLE BBYAEK
+BECD;BECD;1108 1164 11C0;BECD;1108 1164 11C0; # (뻍; 뻍; 뻍; 뻍; 뻍; ) HANGUL SYLLABLE BBYAET
+BECE;BECE;1108 1164 11C1;BECE;1108 1164 11C1; # (뻎; 뻎; 뻎; 뻎; 뻎; ) HANGUL SYLLABLE BBYAEP
+BECF;BECF;1108 1164 11C2;BECF;1108 1164 11C2; # (뻏; 뻏; 뻏; 뻏; 뻏; ) HANGUL SYLLABLE BBYAEH
+BED0;BED0;1108 1165;BED0;1108 1165; # (뻐; 뻐; 뻐; 뻐; 뻐; ) HANGUL SYLLABLE BBEO
+BED1;BED1;1108 1165 11A8;BED1;1108 1165 11A8; # (뻑; 뻑; 뻑; 뻑; 뻑; ) HANGUL SYLLABLE BBEOG
+BED2;BED2;1108 1165 11A9;BED2;1108 1165 11A9; # (뻒; 뻒; 뻒; 뻒; 뻒; ) HANGUL SYLLABLE BBEOGG
+BED3;BED3;1108 1165 11AA;BED3;1108 1165 11AA; # (뻓; 뻓; 뻓; 뻓; 뻓; ) HANGUL SYLLABLE BBEOGS
+BED4;BED4;1108 1165 11AB;BED4;1108 1165 11AB; # (뻔; 뻔; 뻔; 뻔; 뻔; ) HANGUL SYLLABLE BBEON
+BED5;BED5;1108 1165 11AC;BED5;1108 1165 11AC; # (뻕; 뻕; 뻕; 뻕; 뻕; ) HANGUL SYLLABLE BBEONJ
+BED6;BED6;1108 1165 11AD;BED6;1108 1165 11AD; # (뻖; 뻖; 뻖; 뻖; 뻖; ) HANGUL SYLLABLE BBEONH
+BED7;BED7;1108 1165 11AE;BED7;1108 1165 11AE; # (뻗; 뻗; 뻗; 뻗; 뻗; ) HANGUL SYLLABLE BBEOD
+BED8;BED8;1108 1165 11AF;BED8;1108 1165 11AF; # (뻘; 뻘; 뻘; 뻘; 뻘; ) HANGUL SYLLABLE BBEOL
+BED9;BED9;1108 1165 11B0;BED9;1108 1165 11B0; # (뻙; 뻙; 뻙; 뻙; 뻙; ) HANGUL SYLLABLE BBEOLG
+BEDA;BEDA;1108 1165 11B1;BEDA;1108 1165 11B1; # (뻚; 뻚; 뻚; 뻚; 뻚; ) HANGUL SYLLABLE BBEOLM
+BEDB;BEDB;1108 1165 11B2;BEDB;1108 1165 11B2; # (뻛; 뻛; 뻛; 뻛; 뻛; ) HANGUL SYLLABLE BBEOLB
+BEDC;BEDC;1108 1165 11B3;BEDC;1108 1165 11B3; # (뻜; 뻜; 뻜; 뻜; 뻜; ) HANGUL SYLLABLE BBEOLS
+BEDD;BEDD;1108 1165 11B4;BEDD;1108 1165 11B4; # (뻝; 뻝; 뻝; 뻝; 뻝; ) HANGUL SYLLABLE BBEOLT
+BEDE;BEDE;1108 1165 11B5;BEDE;1108 1165 11B5; # (뻞; 뻞; 뻞; 뻞; 뻞; ) HANGUL SYLLABLE BBEOLP
+BEDF;BEDF;1108 1165 11B6;BEDF;1108 1165 11B6; # (뻟; 뻟; 뻟; 뻟; 뻟; ) HANGUL SYLLABLE BBEOLH
+BEE0;BEE0;1108 1165 11B7;BEE0;1108 1165 11B7; # (뻠; 뻠; 뻠; 뻠; 뻠; ) HANGUL SYLLABLE BBEOM
+BEE1;BEE1;1108 1165 11B8;BEE1;1108 1165 11B8; # (뻡; 뻡; 뻡; 뻡; 뻡; ) HANGUL SYLLABLE BBEOB
+BEE2;BEE2;1108 1165 11B9;BEE2;1108 1165 11B9; # (뻢; 뻢; 뻢; 뻢; 뻢; ) HANGUL SYLLABLE BBEOBS
+BEE3;BEE3;1108 1165 11BA;BEE3;1108 1165 11BA; # (뻣; 뻣; 뻣; 뻣; 뻣; ) HANGUL SYLLABLE BBEOS
+BEE4;BEE4;1108 1165 11BB;BEE4;1108 1165 11BB; # (뻤; 뻤; 뻤; 뻤; 뻤; ) HANGUL SYLLABLE BBEOSS
+BEE5;BEE5;1108 1165 11BC;BEE5;1108 1165 11BC; # (뻥; 뻥; 뻥; 뻥; 뻥; ) HANGUL SYLLABLE BBEONG
+BEE6;BEE6;1108 1165 11BD;BEE6;1108 1165 11BD; # (뻦; 뻦; 뻦; 뻦; 뻦; ) HANGUL SYLLABLE BBEOJ
+BEE7;BEE7;1108 1165 11BE;BEE7;1108 1165 11BE; # (뻧; 뻧; 뻧; 뻧; 뻧; ) HANGUL SYLLABLE BBEOC
+BEE8;BEE8;1108 1165 11BF;BEE8;1108 1165 11BF; # (뻨; 뻨; 뻨; 뻨; 뻨; ) HANGUL SYLLABLE BBEOK
+BEE9;BEE9;1108 1165 11C0;BEE9;1108 1165 11C0; # (뻩; 뻩; 뻩; 뻩; 뻩; ) HANGUL SYLLABLE BBEOT
+BEEA;BEEA;1108 1165 11C1;BEEA;1108 1165 11C1; # (뻪; 뻪; 뻪; 뻪; 뻪; ) HANGUL SYLLABLE BBEOP
+BEEB;BEEB;1108 1165 11C2;BEEB;1108 1165 11C2; # (뻫; 뻫; 뻫; 뻫; 뻫; ) HANGUL SYLLABLE BBEOH
+BEEC;BEEC;1108 1166;BEEC;1108 1166; # (뻬; 뻬; 뻬; 뻬; 뻬; ) HANGUL SYLLABLE BBE
+BEED;BEED;1108 1166 11A8;BEED;1108 1166 11A8; # (뻭; 뻭; 뻭; 뻭; 뻭; ) HANGUL SYLLABLE BBEG
+BEEE;BEEE;1108 1166 11A9;BEEE;1108 1166 11A9; # (뻮; 뻮; 뻮; 뻮; 뻮; ) HANGUL SYLLABLE BBEGG
+BEEF;BEEF;1108 1166 11AA;BEEF;1108 1166 11AA; # (뻯; 뻯; 뻯; 뻯; 뻯; ) HANGUL SYLLABLE BBEGS
+BEF0;BEF0;1108 1166 11AB;BEF0;1108 1166 11AB; # (뻰; 뻰; 뻰; 뻰; 뻰; ) HANGUL SYLLABLE BBEN
+BEF1;BEF1;1108 1166 11AC;BEF1;1108 1166 11AC; # (뻱; 뻱; 뻱; 뻱; 뻱; ) HANGUL SYLLABLE BBENJ
+BEF2;BEF2;1108 1166 11AD;BEF2;1108 1166 11AD; # (뻲; 뻲; 뻲; 뻲; 뻲; ) HANGUL SYLLABLE BBENH
+BEF3;BEF3;1108 1166 11AE;BEF3;1108 1166 11AE; # (뻳; 뻳; 뻳; 뻳; 뻳; ) HANGUL SYLLABLE BBED
+BEF4;BEF4;1108 1166 11AF;BEF4;1108 1166 11AF; # (뻴; 뻴; 뻴; 뻴; 뻴; ) HANGUL SYLLABLE BBEL
+BEF5;BEF5;1108 1166 11B0;BEF5;1108 1166 11B0; # (뻵; 뻵; 뻵; 뻵; 뻵; ) HANGUL SYLLABLE BBELG
+BEF6;BEF6;1108 1166 11B1;BEF6;1108 1166 11B1; # (뻶; 뻶; 뻶; 뻶; 뻶; ) HANGUL SYLLABLE BBELM
+BEF7;BEF7;1108 1166 11B2;BEF7;1108 1166 11B2; # (뻷; 뻷; 뻷; 뻷; 뻷; ) HANGUL SYLLABLE BBELB
+BEF8;BEF8;1108 1166 11B3;BEF8;1108 1166 11B3; # (뻸; 뻸; 뻸; 뻸; 뻸; ) HANGUL SYLLABLE BBELS
+BEF9;BEF9;1108 1166 11B4;BEF9;1108 1166 11B4; # (뻹; 뻹; 뻹; 뻹; 뻹; ) HANGUL SYLLABLE BBELT
+BEFA;BEFA;1108 1166 11B5;BEFA;1108 1166 11B5; # (뻺; 뻺; 뻺; 뻺; 뻺; ) HANGUL SYLLABLE BBELP
+BEFB;BEFB;1108 1166 11B6;BEFB;1108 1166 11B6; # (뻻; 뻻; 뻻; 뻻; 뻻; ) HANGUL SYLLABLE BBELH
+BEFC;BEFC;1108 1166 11B7;BEFC;1108 1166 11B7; # (뻼; 뻼; 뻼; 뻼; 뻼; ) HANGUL SYLLABLE BBEM
+BEFD;BEFD;1108 1166 11B8;BEFD;1108 1166 11B8; # (뻽; 뻽; 뻽; 뻽; 뻽; ) HANGUL SYLLABLE BBEB
+BEFE;BEFE;1108 1166 11B9;BEFE;1108 1166 11B9; # (뻾; 뻾; 뻾; 뻾; 뻾; ) HANGUL SYLLABLE BBEBS
+BEFF;BEFF;1108 1166 11BA;BEFF;1108 1166 11BA; # (뻿; 뻿; 뻿; 뻿; 뻿; ) HANGUL SYLLABLE BBES
+BF00;BF00;1108 1166 11BB;BF00;1108 1166 11BB; # (뼀; 뼀; 뼀; 뼀; 뼀; ) HANGUL SYLLABLE BBESS
+BF01;BF01;1108 1166 11BC;BF01;1108 1166 11BC; # (뼁; 뼁; 뼁; 뼁; 뼁; ) HANGUL SYLLABLE BBENG
+BF02;BF02;1108 1166 11BD;BF02;1108 1166 11BD; # (뼂; 뼂; 뼂; 뼂; 뼂; ) HANGUL SYLLABLE BBEJ
+BF03;BF03;1108 1166 11BE;BF03;1108 1166 11BE; # (뼃; 뼃; 뼃; 뼃; 뼃; ) HANGUL SYLLABLE BBEC
+BF04;BF04;1108 1166 11BF;BF04;1108 1166 11BF; # (뼄; 뼄; 뼄; 뼄; 뼄; ) HANGUL SYLLABLE BBEK
+BF05;BF05;1108 1166 11C0;BF05;1108 1166 11C0; # (뼅; 뼅; 뼅; 뼅; 뼅; ) HANGUL SYLLABLE BBET
+BF06;BF06;1108 1166 11C1;BF06;1108 1166 11C1; # (뼆; 뼆; 뼆; 뼆; 뼆; ) HANGUL SYLLABLE BBEP
+BF07;BF07;1108 1166 11C2;BF07;1108 1166 11C2; # (뼇; 뼇; 뼇; 뼇; 뼇; ) HANGUL SYLLABLE BBEH
+BF08;BF08;1108 1167;BF08;1108 1167; # (뼈; 뼈; 뼈; 뼈; 뼈; ) HANGUL SYLLABLE BBYEO
+BF09;BF09;1108 1167 11A8;BF09;1108 1167 11A8; # (뼉; 뼉; 뼉; 뼉; 뼉; ) HANGUL SYLLABLE BBYEOG
+BF0A;BF0A;1108 1167 11A9;BF0A;1108 1167 11A9; # (뼊; 뼊; 뼊; 뼊; 뼊; ) HANGUL SYLLABLE BBYEOGG
+BF0B;BF0B;1108 1167 11AA;BF0B;1108 1167 11AA; # (뼋; 뼋; 뼋; 뼋; 뼋; ) HANGUL SYLLABLE BBYEOGS
+BF0C;BF0C;1108 1167 11AB;BF0C;1108 1167 11AB; # (뼌; 뼌; 뼌; 뼌; 뼌; ) HANGUL SYLLABLE BBYEON
+BF0D;BF0D;1108 1167 11AC;BF0D;1108 1167 11AC; # (뼍; 뼍; 뼍; 뼍; 뼍; ) HANGUL SYLLABLE BBYEONJ
+BF0E;BF0E;1108 1167 11AD;BF0E;1108 1167 11AD; # (뼎; 뼎; 뼎; 뼎; 뼎; ) HANGUL SYLLABLE BBYEONH
+BF0F;BF0F;1108 1167 11AE;BF0F;1108 1167 11AE; # (뼏; 뼏; 뼏; 뼏; 뼏; ) HANGUL SYLLABLE BBYEOD
+BF10;BF10;1108 1167 11AF;BF10;1108 1167 11AF; # (뼐; 뼐; 뼐; 뼐; 뼐; ) HANGUL SYLLABLE BBYEOL
+BF11;BF11;1108 1167 11B0;BF11;1108 1167 11B0; # (뼑; 뼑; 뼑; 뼑; 뼑; ) HANGUL SYLLABLE BBYEOLG
+BF12;BF12;1108 1167 11B1;BF12;1108 1167 11B1; # (뼒; 뼒; 뼒; 뼒; 뼒; ) HANGUL SYLLABLE BBYEOLM
+BF13;BF13;1108 1167 11B2;BF13;1108 1167 11B2; # (뼓; 뼓; 뼓; 뼓; 뼓; ) HANGUL SYLLABLE BBYEOLB
+BF14;BF14;1108 1167 11B3;BF14;1108 1167 11B3; # (뼔; 뼔; 뼔; 뼔; 뼔; ) HANGUL SYLLABLE BBYEOLS
+BF15;BF15;1108 1167 11B4;BF15;1108 1167 11B4; # (뼕; 뼕; 뼕; 뼕; 뼕; ) HANGUL SYLLABLE BBYEOLT
+BF16;BF16;1108 1167 11B5;BF16;1108 1167 11B5; # (뼖; 뼖; 뼖; 뼖; 뼖; ) HANGUL SYLLABLE BBYEOLP
+BF17;BF17;1108 1167 11B6;BF17;1108 1167 11B6; # (뼗; 뼗; 뼗; 뼗; 뼗; ) HANGUL SYLLABLE BBYEOLH
+BF18;BF18;1108 1167 11B7;BF18;1108 1167 11B7; # (뼘; 뼘; 뼘; 뼘; 뼘; ) HANGUL SYLLABLE BBYEOM
+BF19;BF19;1108 1167 11B8;BF19;1108 1167 11B8; # (뼙; 뼙; 뼙; 뼙; 뼙; ) HANGUL SYLLABLE BBYEOB
+BF1A;BF1A;1108 1167 11B9;BF1A;1108 1167 11B9; # (뼚; 뼚; 뼚; 뼚; 뼚; ) HANGUL SYLLABLE BBYEOBS
+BF1B;BF1B;1108 1167 11BA;BF1B;1108 1167 11BA; # (뼛; 뼛; 뼛; 뼛; 뼛; ) HANGUL SYLLABLE BBYEOS
+BF1C;BF1C;1108 1167 11BB;BF1C;1108 1167 11BB; # (뼜; 뼜; 뼜; 뼜; 뼜; ) HANGUL SYLLABLE BBYEOSS
+BF1D;BF1D;1108 1167 11BC;BF1D;1108 1167 11BC; # (뼝; 뼝; 뼝; 뼝; 뼝; ) HANGUL SYLLABLE BBYEONG
+BF1E;BF1E;1108 1167 11BD;BF1E;1108 1167 11BD; # (뼞; 뼞; 뼞; 뼞; 뼞; ) HANGUL SYLLABLE BBYEOJ
+BF1F;BF1F;1108 1167 11BE;BF1F;1108 1167 11BE; # (뼟; 뼟; 뼟; 뼟; 뼟; ) HANGUL SYLLABLE BBYEOC
+BF20;BF20;1108 1167 11BF;BF20;1108 1167 11BF; # (뼠; 뼠; 뼠; 뼠; 뼠; ) HANGUL SYLLABLE BBYEOK
+BF21;BF21;1108 1167 11C0;BF21;1108 1167 11C0; # (뼡; 뼡; 뼡; 뼡; 뼡; ) HANGUL SYLLABLE BBYEOT
+BF22;BF22;1108 1167 11C1;BF22;1108 1167 11C1; # (뼢; 뼢; 뼢; 뼢; 뼢; ) HANGUL SYLLABLE BBYEOP
+BF23;BF23;1108 1167 11C2;BF23;1108 1167 11C2; # (뼣; 뼣; 뼣; 뼣; 뼣; ) HANGUL SYLLABLE BBYEOH
+BF24;BF24;1108 1168;BF24;1108 1168; # (뼤; 뼤; 뼤; 뼤; 뼤; ) HANGUL SYLLABLE BBYE
+BF25;BF25;1108 1168 11A8;BF25;1108 1168 11A8; # (뼥; 뼥; 뼥; 뼥; 뼥; ) HANGUL SYLLABLE BBYEG
+BF26;BF26;1108 1168 11A9;BF26;1108 1168 11A9; # (뼦; 뼦; 뼦; 뼦; 뼦; ) HANGUL SYLLABLE BBYEGG
+BF27;BF27;1108 1168 11AA;BF27;1108 1168 11AA; # (뼧; 뼧; 뼧; 뼧; 뼧; ) HANGUL SYLLABLE BBYEGS
+BF28;BF28;1108 1168 11AB;BF28;1108 1168 11AB; # (뼨; 뼨; 뼨; 뼨; 뼨; ) HANGUL SYLLABLE BBYEN
+BF29;BF29;1108 1168 11AC;BF29;1108 1168 11AC; # (뼩; 뼩; 뼩; 뼩; 뼩; ) HANGUL SYLLABLE BBYENJ
+BF2A;BF2A;1108 1168 11AD;BF2A;1108 1168 11AD; # (뼪; 뼪; 뼪; 뼪; 뼪; ) HANGUL SYLLABLE BBYENH
+BF2B;BF2B;1108 1168 11AE;BF2B;1108 1168 11AE; # (뼫; 뼫; 뼫; 뼫; 뼫; ) HANGUL SYLLABLE BBYED
+BF2C;BF2C;1108 1168 11AF;BF2C;1108 1168 11AF; # (뼬; 뼬; 뼬; 뼬; 뼬; ) HANGUL SYLLABLE BBYEL
+BF2D;BF2D;1108 1168 11B0;BF2D;1108 1168 11B0; # (뼭; 뼭; 뼭; 뼭; 뼭; ) HANGUL SYLLABLE BBYELG
+BF2E;BF2E;1108 1168 11B1;BF2E;1108 1168 11B1; # (뼮; 뼮; 뼮; 뼮; 뼮; ) HANGUL SYLLABLE BBYELM
+BF2F;BF2F;1108 1168 11B2;BF2F;1108 1168 11B2; # (뼯; 뼯; 뼯; 뼯; 뼯; ) HANGUL SYLLABLE BBYELB
+BF30;BF30;1108 1168 11B3;BF30;1108 1168 11B3; # (뼰; 뼰; 뼰; 뼰; 뼰; ) HANGUL SYLLABLE BBYELS
+BF31;BF31;1108 1168 11B4;BF31;1108 1168 11B4; # (뼱; 뼱; 뼱; 뼱; 뼱; ) HANGUL SYLLABLE BBYELT
+BF32;BF32;1108 1168 11B5;BF32;1108 1168 11B5; # (뼲; 뼲; 뼲; 뼲; 뼲; ) HANGUL SYLLABLE BBYELP
+BF33;BF33;1108 1168 11B6;BF33;1108 1168 11B6; # (뼳; 뼳; 뼳; 뼳; 뼳; ) HANGUL SYLLABLE BBYELH
+BF34;BF34;1108 1168 11B7;BF34;1108 1168 11B7; # (뼴; 뼴; 뼴; 뼴; 뼴; ) HANGUL SYLLABLE BBYEM
+BF35;BF35;1108 1168 11B8;BF35;1108 1168 11B8; # (뼵; 뼵; 뼵; 뼵; 뼵; ) HANGUL SYLLABLE BBYEB
+BF36;BF36;1108 1168 11B9;BF36;1108 1168 11B9; # (뼶; 뼶; 뼶; 뼶; 뼶; ) HANGUL SYLLABLE BBYEBS
+BF37;BF37;1108 1168 11BA;BF37;1108 1168 11BA; # (뼷; 뼷; 뼷; 뼷; 뼷; ) HANGUL SYLLABLE BBYES
+BF38;BF38;1108 1168 11BB;BF38;1108 1168 11BB; # (뼸; 뼸; 뼸; 뼸; 뼸; ) HANGUL SYLLABLE BBYESS
+BF39;BF39;1108 1168 11BC;BF39;1108 1168 11BC; # (뼹; 뼹; 뼹; 뼹; 뼹; ) HANGUL SYLLABLE BBYENG
+BF3A;BF3A;1108 1168 11BD;BF3A;1108 1168 11BD; # (뼺; 뼺; 뼺; 뼺; 뼺; ) HANGUL SYLLABLE BBYEJ
+BF3B;BF3B;1108 1168 11BE;BF3B;1108 1168 11BE; # (뼻; 뼻; 뼻; 뼻; 뼻; ) HANGUL SYLLABLE BBYEC
+BF3C;BF3C;1108 1168 11BF;BF3C;1108 1168 11BF; # (뼼; 뼼; 뼼; 뼼; 뼼; ) HANGUL SYLLABLE BBYEK
+BF3D;BF3D;1108 1168 11C0;BF3D;1108 1168 11C0; # (뼽; 뼽; 뼽; 뼽; 뼽; ) HANGUL SYLLABLE BBYET
+BF3E;BF3E;1108 1168 11C1;BF3E;1108 1168 11C1; # (뼾; 뼾; 뼾; 뼾; 뼾; ) HANGUL SYLLABLE BBYEP
+BF3F;BF3F;1108 1168 11C2;BF3F;1108 1168 11C2; # (뼿; 뼿; 뼿; 뼿; 뼿; ) HANGUL SYLLABLE BBYEH
+BF40;BF40;1108 1169;BF40;1108 1169; # (뽀; 뽀; 뽀; 뽀; 뽀; ) HANGUL SYLLABLE BBO
+BF41;BF41;1108 1169 11A8;BF41;1108 1169 11A8; # (뽁; 뽁; 뽁; 뽁; 뽁; ) HANGUL SYLLABLE BBOG
+BF42;BF42;1108 1169 11A9;BF42;1108 1169 11A9; # (뽂; 뽂; 뽂; 뽂; 뽂; ) HANGUL SYLLABLE BBOGG
+BF43;BF43;1108 1169 11AA;BF43;1108 1169 11AA; # (뽃; 뽃; 뽃; 뽃; 뽃; ) HANGUL SYLLABLE BBOGS
+BF44;BF44;1108 1169 11AB;BF44;1108 1169 11AB; # (뽄; 뽄; 뽄; 뽄; 뽄; ) HANGUL SYLLABLE BBON
+BF45;BF45;1108 1169 11AC;BF45;1108 1169 11AC; # (뽅; 뽅; 뽅; 뽅; 뽅; ) HANGUL SYLLABLE BBONJ
+BF46;BF46;1108 1169 11AD;BF46;1108 1169 11AD; # (뽆; 뽆; 뽆; 뽆; 뽆; ) HANGUL SYLLABLE BBONH
+BF47;BF47;1108 1169 11AE;BF47;1108 1169 11AE; # (뽇; 뽇; 뽇; 뽇; 뽇; ) HANGUL SYLLABLE BBOD
+BF48;BF48;1108 1169 11AF;BF48;1108 1169 11AF; # (뽈; 뽈; 뽈; 뽈; 뽈; ) HANGUL SYLLABLE BBOL
+BF49;BF49;1108 1169 11B0;BF49;1108 1169 11B0; # (뽉; 뽉; 뽉; 뽉; 뽉; ) HANGUL SYLLABLE BBOLG
+BF4A;BF4A;1108 1169 11B1;BF4A;1108 1169 11B1; # (뽊; 뽊; 뽊; 뽊; 뽊; ) HANGUL SYLLABLE BBOLM
+BF4B;BF4B;1108 1169 11B2;BF4B;1108 1169 11B2; # (뽋; 뽋; 뽋; 뽋; 뽋; ) HANGUL SYLLABLE BBOLB
+BF4C;BF4C;1108 1169 11B3;BF4C;1108 1169 11B3; # (뽌; 뽌; 뽌; 뽌; 뽌; ) HANGUL SYLLABLE BBOLS
+BF4D;BF4D;1108 1169 11B4;BF4D;1108 1169 11B4; # (뽍; 뽍; 뽍; 뽍; 뽍; ) HANGUL SYLLABLE BBOLT
+BF4E;BF4E;1108 1169 11B5;BF4E;1108 1169 11B5; # (뽎; 뽎; 뽎; 뽎; 뽎; ) HANGUL SYLLABLE BBOLP
+BF4F;BF4F;1108 1169 11B6;BF4F;1108 1169 11B6; # (뽏; 뽏; 뽏; 뽏; 뽏; ) HANGUL SYLLABLE BBOLH
+BF50;BF50;1108 1169 11B7;BF50;1108 1169 11B7; # (뽐; 뽐; 뽐; 뽐; 뽐; ) HANGUL SYLLABLE BBOM
+BF51;BF51;1108 1169 11B8;BF51;1108 1169 11B8; # (뽑; 뽑; 뽑; 뽑; 뽑; ) HANGUL SYLLABLE BBOB
+BF52;BF52;1108 1169 11B9;BF52;1108 1169 11B9; # (뽒; 뽒; 뽒; 뽒; 뽒; ) HANGUL SYLLABLE BBOBS
+BF53;BF53;1108 1169 11BA;BF53;1108 1169 11BA; # (뽓; 뽓; 뽓; 뽓; 뽓; ) HANGUL SYLLABLE BBOS
+BF54;BF54;1108 1169 11BB;BF54;1108 1169 11BB; # (뽔; 뽔; 뽔; 뽔; 뽔; ) HANGUL SYLLABLE BBOSS
+BF55;BF55;1108 1169 11BC;BF55;1108 1169 11BC; # (뽕; 뽕; 뽕; 뽕; 뽕; ) HANGUL SYLLABLE BBONG
+BF56;BF56;1108 1169 11BD;BF56;1108 1169 11BD; # (뽖; 뽖; 뽖; 뽖; 뽖; ) HANGUL SYLLABLE BBOJ
+BF57;BF57;1108 1169 11BE;BF57;1108 1169 11BE; # (뽗; 뽗; 뽗; 뽗; 뽗; ) HANGUL SYLLABLE BBOC
+BF58;BF58;1108 1169 11BF;BF58;1108 1169 11BF; # (뽘; 뽘; 뽘; 뽘; 뽘; ) HANGUL SYLLABLE BBOK
+BF59;BF59;1108 1169 11C0;BF59;1108 1169 11C0; # (뽙; 뽙; 뽙; 뽙; 뽙; ) HANGUL SYLLABLE BBOT
+BF5A;BF5A;1108 1169 11C1;BF5A;1108 1169 11C1; # (뽚; 뽚; 뽚; 뽚; 뽚; ) HANGUL SYLLABLE BBOP
+BF5B;BF5B;1108 1169 11C2;BF5B;1108 1169 11C2; # (뽛; 뽛; 뽛; 뽛; 뽛; ) HANGUL SYLLABLE BBOH
+BF5C;BF5C;1108 116A;BF5C;1108 116A; # (뽜; 뽜; 뽜; 뽜; 뽜; ) HANGUL SYLLABLE BBWA
+BF5D;BF5D;1108 116A 11A8;BF5D;1108 116A 11A8; # (뽝; 뽝; 뽝; 뽝; 뽝; ) HANGUL SYLLABLE BBWAG
+BF5E;BF5E;1108 116A 11A9;BF5E;1108 116A 11A9; # (뽞; 뽞; 뽞; 뽞; 뽞; ) HANGUL SYLLABLE BBWAGG
+BF5F;BF5F;1108 116A 11AA;BF5F;1108 116A 11AA; # (뽟; 뽟; 뽟; 뽟; 뽟; ) HANGUL SYLLABLE BBWAGS
+BF60;BF60;1108 116A 11AB;BF60;1108 116A 11AB; # (뽠; 뽠; 뽠; 뽠; 뽠; ) HANGUL SYLLABLE BBWAN
+BF61;BF61;1108 116A 11AC;BF61;1108 116A 11AC; # (뽡; 뽡; 뽡; 뽡; 뽡; ) HANGUL SYLLABLE BBWANJ
+BF62;BF62;1108 116A 11AD;BF62;1108 116A 11AD; # (뽢; 뽢; 뽢; 뽢; 뽢; ) HANGUL SYLLABLE BBWANH
+BF63;BF63;1108 116A 11AE;BF63;1108 116A 11AE; # (뽣; 뽣; 뽣; 뽣; 뽣; ) HANGUL SYLLABLE BBWAD
+BF64;BF64;1108 116A 11AF;BF64;1108 116A 11AF; # (뽤; 뽤; 뽤; 뽤; 뽤; ) HANGUL SYLLABLE BBWAL
+BF65;BF65;1108 116A 11B0;BF65;1108 116A 11B0; # (뽥; 뽥; 뽥; 뽥; 뽥; ) HANGUL SYLLABLE BBWALG
+BF66;BF66;1108 116A 11B1;BF66;1108 116A 11B1; # (뽦; 뽦; 뽦; 뽦; 뽦; ) HANGUL SYLLABLE BBWALM
+BF67;BF67;1108 116A 11B2;BF67;1108 116A 11B2; # (뽧; 뽧; 뽧; 뽧; 뽧; ) HANGUL SYLLABLE BBWALB
+BF68;BF68;1108 116A 11B3;BF68;1108 116A 11B3; # (뽨; 뽨; 뽨; 뽨; 뽨; ) HANGUL SYLLABLE BBWALS
+BF69;BF69;1108 116A 11B4;BF69;1108 116A 11B4; # (뽩; 뽩; 뽩; 뽩; 뽩; ) HANGUL SYLLABLE BBWALT
+BF6A;BF6A;1108 116A 11B5;BF6A;1108 116A 11B5; # (뽪; 뽪; 뽪; 뽪; 뽪; ) HANGUL SYLLABLE BBWALP
+BF6B;BF6B;1108 116A 11B6;BF6B;1108 116A 11B6; # (뽫; 뽫; 뽫; 뽫; 뽫; ) HANGUL SYLLABLE BBWALH
+BF6C;BF6C;1108 116A 11B7;BF6C;1108 116A 11B7; # (뽬; 뽬; 뽬; 뽬; 뽬; ) HANGUL SYLLABLE BBWAM
+BF6D;BF6D;1108 116A 11B8;BF6D;1108 116A 11B8; # (뽭; 뽭; 뽭; 뽭; 뽭; ) HANGUL SYLLABLE BBWAB
+BF6E;BF6E;1108 116A 11B9;BF6E;1108 116A 11B9; # (뽮; 뽮; 뽮; 뽮; 뽮; ) HANGUL SYLLABLE BBWABS
+BF6F;BF6F;1108 116A 11BA;BF6F;1108 116A 11BA; # (뽯; 뽯; 뽯; 뽯; 뽯; ) HANGUL SYLLABLE BBWAS
+BF70;BF70;1108 116A 11BB;BF70;1108 116A 11BB; # (뽰; 뽰; 뽰; 뽰; 뽰; ) HANGUL SYLLABLE BBWASS
+BF71;BF71;1108 116A 11BC;BF71;1108 116A 11BC; # (뽱; 뽱; 뽱; 뽱; 뽱; ) HANGUL SYLLABLE BBWANG
+BF72;BF72;1108 116A 11BD;BF72;1108 116A 11BD; # (뽲; 뽲; 뽲; 뽲; 뽲; ) HANGUL SYLLABLE BBWAJ
+BF73;BF73;1108 116A 11BE;BF73;1108 116A 11BE; # (뽳; 뽳; 뽳; 뽳; 뽳; ) HANGUL SYLLABLE BBWAC
+BF74;BF74;1108 116A 11BF;BF74;1108 116A 11BF; # (뽴; 뽴; 뽴; 뽴; 뽴; ) HANGUL SYLLABLE BBWAK
+BF75;BF75;1108 116A 11C0;BF75;1108 116A 11C0; # (뽵; 뽵; 뽵; 뽵; 뽵; ) HANGUL SYLLABLE BBWAT
+BF76;BF76;1108 116A 11C1;BF76;1108 116A 11C1; # (뽶; 뽶; 뽶; 뽶; 뽶; ) HANGUL SYLLABLE BBWAP
+BF77;BF77;1108 116A 11C2;BF77;1108 116A 11C2; # (뽷; 뽷; 뽷; 뽷; 뽷; ) HANGUL SYLLABLE BBWAH
+BF78;BF78;1108 116B;BF78;1108 116B; # (뽸; 뽸; 뽸; 뽸; 뽸; ) HANGUL SYLLABLE BBWAE
+BF79;BF79;1108 116B 11A8;BF79;1108 116B 11A8; # (뽹; 뽹; 뽹; 뽹; 뽹; ) HANGUL SYLLABLE BBWAEG
+BF7A;BF7A;1108 116B 11A9;BF7A;1108 116B 11A9; # (뽺; 뽺; 뽺; 뽺; 뽺; ) HANGUL SYLLABLE BBWAEGG
+BF7B;BF7B;1108 116B 11AA;BF7B;1108 116B 11AA; # (뽻; 뽻; 뽻; 뽻; 뽻; ) HANGUL SYLLABLE BBWAEGS
+BF7C;BF7C;1108 116B 11AB;BF7C;1108 116B 11AB; # (뽼; 뽼; 뽼; 뽼; 뽼; ) HANGUL SYLLABLE BBWAEN
+BF7D;BF7D;1108 116B 11AC;BF7D;1108 116B 11AC; # (뽽; 뽽; 뽽; 뽽; 뽽; ) HANGUL SYLLABLE BBWAENJ
+BF7E;BF7E;1108 116B 11AD;BF7E;1108 116B 11AD; # (뽾; 뽾; 뽾; 뽾; 뽾; ) HANGUL SYLLABLE BBWAENH
+BF7F;BF7F;1108 116B 11AE;BF7F;1108 116B 11AE; # (뽿; 뽿; 뽿; 뽿; 뽿; ) HANGUL SYLLABLE BBWAED
+BF80;BF80;1108 116B 11AF;BF80;1108 116B 11AF; # (뾀; 뾀; 뾀; 뾀; 뾀; ) HANGUL SYLLABLE BBWAEL
+BF81;BF81;1108 116B 11B0;BF81;1108 116B 11B0; # (뾁; 뾁; 뾁; 뾁; 뾁; ) HANGUL SYLLABLE BBWAELG
+BF82;BF82;1108 116B 11B1;BF82;1108 116B 11B1; # (뾂; 뾂; 뾂; 뾂; 뾂; ) HANGUL SYLLABLE BBWAELM
+BF83;BF83;1108 116B 11B2;BF83;1108 116B 11B2; # (뾃; 뾃; 뾃; 뾃; 뾃; ) HANGUL SYLLABLE BBWAELB
+BF84;BF84;1108 116B 11B3;BF84;1108 116B 11B3; # (뾄; 뾄; 뾄; 뾄; 뾄; ) HANGUL SYLLABLE BBWAELS
+BF85;BF85;1108 116B 11B4;BF85;1108 116B 11B4; # (뾅; 뾅; 뾅; 뾅; 뾅; ) HANGUL SYLLABLE BBWAELT
+BF86;BF86;1108 116B 11B5;BF86;1108 116B 11B5; # (뾆; 뾆; 뾆; 뾆; 뾆; ) HANGUL SYLLABLE BBWAELP
+BF87;BF87;1108 116B 11B6;BF87;1108 116B 11B6; # (뾇; 뾇; 뾇; 뾇; 뾇; ) HANGUL SYLLABLE BBWAELH
+BF88;BF88;1108 116B 11B7;BF88;1108 116B 11B7; # (뾈; 뾈; 뾈; 뾈; 뾈; ) HANGUL SYLLABLE BBWAEM
+BF89;BF89;1108 116B 11B8;BF89;1108 116B 11B8; # (뾉; 뾉; 뾉; 뾉; 뾉; ) HANGUL SYLLABLE BBWAEB
+BF8A;BF8A;1108 116B 11B9;BF8A;1108 116B 11B9; # (뾊; 뾊; 뾊; 뾊; 뾊; ) HANGUL SYLLABLE BBWAEBS
+BF8B;BF8B;1108 116B 11BA;BF8B;1108 116B 11BA; # (뾋; 뾋; 뾋; 뾋; 뾋; ) HANGUL SYLLABLE BBWAES
+BF8C;BF8C;1108 116B 11BB;BF8C;1108 116B 11BB; # (뾌; 뾌; 뾌; 뾌; 뾌; ) HANGUL SYLLABLE BBWAESS
+BF8D;BF8D;1108 116B 11BC;BF8D;1108 116B 11BC; # (뾍; 뾍; 뾍; 뾍; 뾍; ) HANGUL SYLLABLE BBWAENG
+BF8E;BF8E;1108 116B 11BD;BF8E;1108 116B 11BD; # (뾎; 뾎; 뾎; 뾎; 뾎; ) HANGUL SYLLABLE BBWAEJ
+BF8F;BF8F;1108 116B 11BE;BF8F;1108 116B 11BE; # (뾏; 뾏; 뾏; 뾏; 뾏; ) HANGUL SYLLABLE BBWAEC
+BF90;BF90;1108 116B 11BF;BF90;1108 116B 11BF; # (뾐; 뾐; 뾐; 뾐; 뾐; ) HANGUL SYLLABLE BBWAEK
+BF91;BF91;1108 116B 11C0;BF91;1108 116B 11C0; # (뾑; 뾑; 뾑; 뾑; 뾑; ) HANGUL SYLLABLE BBWAET
+BF92;BF92;1108 116B 11C1;BF92;1108 116B 11C1; # (뾒; 뾒; 뾒; 뾒; 뾒; ) HANGUL SYLLABLE BBWAEP
+BF93;BF93;1108 116B 11C2;BF93;1108 116B 11C2; # (뾓; 뾓; 뾓; 뾓; 뾓; ) HANGUL SYLLABLE BBWAEH
+BF94;BF94;1108 116C;BF94;1108 116C; # (뾔; 뾔; 뾔; 뾔; 뾔; ) HANGUL SYLLABLE BBOE
+BF95;BF95;1108 116C 11A8;BF95;1108 116C 11A8; # (뾕; 뾕; 뾕; 뾕; 뾕; ) HANGUL SYLLABLE BBOEG
+BF96;BF96;1108 116C 11A9;BF96;1108 116C 11A9; # (뾖; 뾖; 뾖; 뾖; 뾖; ) HANGUL SYLLABLE BBOEGG
+BF97;BF97;1108 116C 11AA;BF97;1108 116C 11AA; # (뾗; 뾗; 뾗; 뾗; 뾗; ) HANGUL SYLLABLE BBOEGS
+BF98;BF98;1108 116C 11AB;BF98;1108 116C 11AB; # (뾘; 뾘; 뾘; 뾘; 뾘; ) HANGUL SYLLABLE BBOEN
+BF99;BF99;1108 116C 11AC;BF99;1108 116C 11AC; # (뾙; 뾙; 뾙; 뾙; 뾙; ) HANGUL SYLLABLE BBOENJ
+BF9A;BF9A;1108 116C 11AD;BF9A;1108 116C 11AD; # (뾚; 뾚; 뾚; 뾚; 뾚; ) HANGUL SYLLABLE BBOENH
+BF9B;BF9B;1108 116C 11AE;BF9B;1108 116C 11AE; # (뾛; 뾛; 뾛; 뾛; 뾛; ) HANGUL SYLLABLE BBOED
+BF9C;BF9C;1108 116C 11AF;BF9C;1108 116C 11AF; # (뾜; 뾜; 뾜; 뾜; 뾜; ) HANGUL SYLLABLE BBOEL
+BF9D;BF9D;1108 116C 11B0;BF9D;1108 116C 11B0; # (뾝; 뾝; 뾝; 뾝; 뾝; ) HANGUL SYLLABLE BBOELG
+BF9E;BF9E;1108 116C 11B1;BF9E;1108 116C 11B1; # (뾞; 뾞; 뾞; 뾞; 뾞; ) HANGUL SYLLABLE BBOELM
+BF9F;BF9F;1108 116C 11B2;BF9F;1108 116C 11B2; # (뾟; 뾟; 뾟; 뾟; 뾟; ) HANGUL SYLLABLE BBOELB
+BFA0;BFA0;1108 116C 11B3;BFA0;1108 116C 11B3; # (뾠; 뾠; 뾠; 뾠; 뾠; ) HANGUL SYLLABLE BBOELS
+BFA1;BFA1;1108 116C 11B4;BFA1;1108 116C 11B4; # (뾡; 뾡; 뾡; 뾡; 뾡; ) HANGUL SYLLABLE BBOELT
+BFA2;BFA2;1108 116C 11B5;BFA2;1108 116C 11B5; # (뾢; 뾢; 뾢; 뾢; 뾢; ) HANGUL SYLLABLE BBOELP
+BFA3;BFA3;1108 116C 11B6;BFA3;1108 116C 11B6; # (뾣; 뾣; 뾣; 뾣; 뾣; ) HANGUL SYLLABLE BBOELH
+BFA4;BFA4;1108 116C 11B7;BFA4;1108 116C 11B7; # (뾤; 뾤; 뾤; 뾤; 뾤; ) HANGUL SYLLABLE BBOEM
+BFA5;BFA5;1108 116C 11B8;BFA5;1108 116C 11B8; # (뾥; 뾥; 뾥; 뾥; 뾥; ) HANGUL SYLLABLE BBOEB
+BFA6;BFA6;1108 116C 11B9;BFA6;1108 116C 11B9; # (뾦; 뾦; 뾦; 뾦; 뾦; ) HANGUL SYLLABLE BBOEBS
+BFA7;BFA7;1108 116C 11BA;BFA7;1108 116C 11BA; # (뾧; 뾧; 뾧; 뾧; 뾧; ) HANGUL SYLLABLE BBOES
+BFA8;BFA8;1108 116C 11BB;BFA8;1108 116C 11BB; # (뾨; 뾨; 뾨; 뾨; 뾨; ) HANGUL SYLLABLE BBOESS
+BFA9;BFA9;1108 116C 11BC;BFA9;1108 116C 11BC; # (뾩; 뾩; 뾩; 뾩; 뾩; ) HANGUL SYLLABLE BBOENG
+BFAA;BFAA;1108 116C 11BD;BFAA;1108 116C 11BD; # (뾪; 뾪; 뾪; 뾪; 뾪; ) HANGUL SYLLABLE BBOEJ
+BFAB;BFAB;1108 116C 11BE;BFAB;1108 116C 11BE; # (뾫; 뾫; 뾫; 뾫; 뾫; ) HANGUL SYLLABLE BBOEC
+BFAC;BFAC;1108 116C 11BF;BFAC;1108 116C 11BF; # (뾬; 뾬; 뾬; 뾬; 뾬; ) HANGUL SYLLABLE BBOEK
+BFAD;BFAD;1108 116C 11C0;BFAD;1108 116C 11C0; # (뾭; 뾭; 뾭; 뾭; 뾭; ) HANGUL SYLLABLE BBOET
+BFAE;BFAE;1108 116C 11C1;BFAE;1108 116C 11C1; # (뾮; 뾮; 뾮; 뾮; 뾮; ) HANGUL SYLLABLE BBOEP
+BFAF;BFAF;1108 116C 11C2;BFAF;1108 116C 11C2; # (뾯; 뾯; 뾯; 뾯; 뾯; ) HANGUL SYLLABLE BBOEH
+BFB0;BFB0;1108 116D;BFB0;1108 116D; # (뾰; 뾰; 뾰; 뾰; 뾰; ) HANGUL SYLLABLE BBYO
+BFB1;BFB1;1108 116D 11A8;BFB1;1108 116D 11A8; # (뾱; 뾱; 뾱; 뾱; 뾱; ) HANGUL SYLLABLE BBYOG
+BFB2;BFB2;1108 116D 11A9;BFB2;1108 116D 11A9; # (뾲; 뾲; 뾲; 뾲; 뾲; ) HANGUL SYLLABLE BBYOGG
+BFB3;BFB3;1108 116D 11AA;BFB3;1108 116D 11AA; # (뾳; 뾳; 뾳; 뾳; 뾳; ) HANGUL SYLLABLE BBYOGS
+BFB4;BFB4;1108 116D 11AB;BFB4;1108 116D 11AB; # (뾴; 뾴; 뾴; 뾴; 뾴; ) HANGUL SYLLABLE BBYON
+BFB5;BFB5;1108 116D 11AC;BFB5;1108 116D 11AC; # (뾵; 뾵; 뾵; 뾵; 뾵; ) HANGUL SYLLABLE BBYONJ
+BFB6;BFB6;1108 116D 11AD;BFB6;1108 116D 11AD; # (뾶; 뾶; 뾶; 뾶; 뾶; ) HANGUL SYLLABLE BBYONH
+BFB7;BFB7;1108 116D 11AE;BFB7;1108 116D 11AE; # (뾷; 뾷; 뾷; 뾷; 뾷; ) HANGUL SYLLABLE BBYOD
+BFB8;BFB8;1108 116D 11AF;BFB8;1108 116D 11AF; # (뾸; 뾸; 뾸; 뾸; 뾸; ) HANGUL SYLLABLE BBYOL
+BFB9;BFB9;1108 116D 11B0;BFB9;1108 116D 11B0; # (뾹; 뾹; 뾹; 뾹; 뾹; ) HANGUL SYLLABLE BBYOLG
+BFBA;BFBA;1108 116D 11B1;BFBA;1108 116D 11B1; # (뾺; 뾺; 뾺; 뾺; 뾺; ) HANGUL SYLLABLE BBYOLM
+BFBB;BFBB;1108 116D 11B2;BFBB;1108 116D 11B2; # (뾻; 뾻; 뾻; 뾻; 뾻; ) HANGUL SYLLABLE BBYOLB
+BFBC;BFBC;1108 116D 11B3;BFBC;1108 116D 11B3; # (뾼; 뾼; 뾼; 뾼; 뾼; ) HANGUL SYLLABLE BBYOLS
+BFBD;BFBD;1108 116D 11B4;BFBD;1108 116D 11B4; # (뾽; 뾽; 뾽; 뾽; 뾽; ) HANGUL SYLLABLE BBYOLT
+BFBE;BFBE;1108 116D 11B5;BFBE;1108 116D 11B5; # (뾾; 뾾; 뾾; 뾾; 뾾; ) HANGUL SYLLABLE BBYOLP
+BFBF;BFBF;1108 116D 11B6;BFBF;1108 116D 11B6; # (뾿; 뾿; 뾿; 뾿; 뾿; ) HANGUL SYLLABLE BBYOLH
+BFC0;BFC0;1108 116D 11B7;BFC0;1108 116D 11B7; # (뿀; 뿀; 뿀; 뿀; 뿀; ) HANGUL SYLLABLE BBYOM
+BFC1;BFC1;1108 116D 11B8;BFC1;1108 116D 11B8; # (뿁; 뿁; 뿁; 뿁; 뿁; ) HANGUL SYLLABLE BBYOB
+BFC2;BFC2;1108 116D 11B9;BFC2;1108 116D 11B9; # (뿂; 뿂; 뿂; 뿂; 뿂; ) HANGUL SYLLABLE BBYOBS
+BFC3;BFC3;1108 116D 11BA;BFC3;1108 116D 11BA; # (뿃; 뿃; 뿃; 뿃; 뿃; ) HANGUL SYLLABLE BBYOS
+BFC4;BFC4;1108 116D 11BB;BFC4;1108 116D 11BB; # (뿄; 뿄; 뿄; 뿄; 뿄; ) HANGUL SYLLABLE BBYOSS
+BFC5;BFC5;1108 116D 11BC;BFC5;1108 116D 11BC; # (뿅; 뿅; 뿅; 뿅; 뿅; ) HANGUL SYLLABLE BBYONG
+BFC6;BFC6;1108 116D 11BD;BFC6;1108 116D 11BD; # (뿆; 뿆; 뿆; 뿆; 뿆; ) HANGUL SYLLABLE BBYOJ
+BFC7;BFC7;1108 116D 11BE;BFC7;1108 116D 11BE; # (뿇; 뿇; 뿇; 뿇; 뿇; ) HANGUL SYLLABLE BBYOC
+BFC8;BFC8;1108 116D 11BF;BFC8;1108 116D 11BF; # (뿈; 뿈; 뿈; 뿈; 뿈; ) HANGUL SYLLABLE BBYOK
+BFC9;BFC9;1108 116D 11C0;BFC9;1108 116D 11C0; # (뿉; 뿉; 뿉; 뿉; 뿉; ) HANGUL SYLLABLE BBYOT
+BFCA;BFCA;1108 116D 11C1;BFCA;1108 116D 11C1; # (뿊; 뿊; 뿊; 뿊; 뿊; ) HANGUL SYLLABLE BBYOP
+BFCB;BFCB;1108 116D 11C2;BFCB;1108 116D 11C2; # (뿋; 뿋; 뿋; 뿋; 뿋; ) HANGUL SYLLABLE BBYOH
+BFCC;BFCC;1108 116E;BFCC;1108 116E; # (뿌; 뿌; 뿌; 뿌; 뿌; ) HANGUL SYLLABLE BBU
+BFCD;BFCD;1108 116E 11A8;BFCD;1108 116E 11A8; # (뿍; 뿍; 뿍; 뿍; 뿍; ) HANGUL SYLLABLE BBUG
+BFCE;BFCE;1108 116E 11A9;BFCE;1108 116E 11A9; # (뿎; 뿎; 뿎; 뿎; 뿎; ) HANGUL SYLLABLE BBUGG
+BFCF;BFCF;1108 116E 11AA;BFCF;1108 116E 11AA; # (뿏; 뿏; 뿏; 뿏; 뿏; ) HANGUL SYLLABLE BBUGS
+BFD0;BFD0;1108 116E 11AB;BFD0;1108 116E 11AB; # (뿐; 뿐; 뿐; 뿐; 뿐; ) HANGUL SYLLABLE BBUN
+BFD1;BFD1;1108 116E 11AC;BFD1;1108 116E 11AC; # (뿑; 뿑; 뿑; 뿑; 뿑; ) HANGUL SYLLABLE BBUNJ
+BFD2;BFD2;1108 116E 11AD;BFD2;1108 116E 11AD; # (뿒; 뿒; 뿒; 뿒; 뿒; ) HANGUL SYLLABLE BBUNH
+BFD3;BFD3;1108 116E 11AE;BFD3;1108 116E 11AE; # (뿓; 뿓; 뿓; 뿓; 뿓; ) HANGUL SYLLABLE BBUD
+BFD4;BFD4;1108 116E 11AF;BFD4;1108 116E 11AF; # (뿔; 뿔; 뿔; 뿔; 뿔; ) HANGUL SYLLABLE BBUL
+BFD5;BFD5;1108 116E 11B0;BFD5;1108 116E 11B0; # (뿕; 뿕; 뿕; 뿕; 뿕; ) HANGUL SYLLABLE BBULG
+BFD6;BFD6;1108 116E 11B1;BFD6;1108 116E 11B1; # (뿖; 뿖; 뿖; 뿖; 뿖; ) HANGUL SYLLABLE BBULM
+BFD7;BFD7;1108 116E 11B2;BFD7;1108 116E 11B2; # (뿗; 뿗; 뿗; 뿗; 뿗; ) HANGUL SYLLABLE BBULB
+BFD8;BFD8;1108 116E 11B3;BFD8;1108 116E 11B3; # (뿘; 뿘; 뿘; 뿘; 뿘; ) HANGUL SYLLABLE BBULS
+BFD9;BFD9;1108 116E 11B4;BFD9;1108 116E 11B4; # (뿙; 뿙; 뿙; 뿙; 뿙; ) HANGUL SYLLABLE BBULT
+BFDA;BFDA;1108 116E 11B5;BFDA;1108 116E 11B5; # (뿚; 뿚; 뿚; 뿚; 뿚; ) HANGUL SYLLABLE BBULP
+BFDB;BFDB;1108 116E 11B6;BFDB;1108 116E 11B6; # (뿛; 뿛; 뿛; 뿛; 뿛; ) HANGUL SYLLABLE BBULH
+BFDC;BFDC;1108 116E 11B7;BFDC;1108 116E 11B7; # (뿜; 뿜; 뿜; 뿜; 뿜; ) HANGUL SYLLABLE BBUM
+BFDD;BFDD;1108 116E 11B8;BFDD;1108 116E 11B8; # (뿝; 뿝; 뿝; 뿝; 뿝; ) HANGUL SYLLABLE BBUB
+BFDE;BFDE;1108 116E 11B9;BFDE;1108 116E 11B9; # (뿞; 뿞; 뿞; 뿞; 뿞; ) HANGUL SYLLABLE BBUBS
+BFDF;BFDF;1108 116E 11BA;BFDF;1108 116E 11BA; # (뿟; 뿟; 뿟; 뿟; 뿟; ) HANGUL SYLLABLE BBUS
+BFE0;BFE0;1108 116E 11BB;BFE0;1108 116E 11BB; # (뿠; 뿠; 뿠; 뿠; 뿠; ) HANGUL SYLLABLE BBUSS
+BFE1;BFE1;1108 116E 11BC;BFE1;1108 116E 11BC; # (뿡; 뿡; 뿡; 뿡; 뿡; ) HANGUL SYLLABLE BBUNG
+BFE2;BFE2;1108 116E 11BD;BFE2;1108 116E 11BD; # (뿢; 뿢; 뿢; 뿢; 뿢; ) HANGUL SYLLABLE BBUJ
+BFE3;BFE3;1108 116E 11BE;BFE3;1108 116E 11BE; # (뿣; 뿣; 뿣; 뿣; 뿣; ) HANGUL SYLLABLE BBUC
+BFE4;BFE4;1108 116E 11BF;BFE4;1108 116E 11BF; # (뿤; 뿤; 뿤; 뿤; 뿤; ) HANGUL SYLLABLE BBUK
+BFE5;BFE5;1108 116E 11C0;BFE5;1108 116E 11C0; # (뿥; 뿥; 뿥; 뿥; 뿥; ) HANGUL SYLLABLE BBUT
+BFE6;BFE6;1108 116E 11C1;BFE6;1108 116E 11C1; # (뿦; 뿦; 뿦; 뿦; 뿦; ) HANGUL SYLLABLE BBUP
+BFE7;BFE7;1108 116E 11C2;BFE7;1108 116E 11C2; # (뿧; 뿧; 뿧; 뿧; 뿧; ) HANGUL SYLLABLE BBUH
+BFE8;BFE8;1108 116F;BFE8;1108 116F; # (뿨; 뿨; 뿨; 뿨; 뿨; ) HANGUL SYLLABLE BBWEO
+BFE9;BFE9;1108 116F 11A8;BFE9;1108 116F 11A8; # (뿩; 뿩; 뿩; 뿩; 뿩; ) HANGUL SYLLABLE BBWEOG
+BFEA;BFEA;1108 116F 11A9;BFEA;1108 116F 11A9; # (뿪; 뿪; 뿪; 뿪; 뿪; ) HANGUL SYLLABLE BBWEOGG
+BFEB;BFEB;1108 116F 11AA;BFEB;1108 116F 11AA; # (뿫; 뿫; 뿫; 뿫; 뿫; ) HANGUL SYLLABLE BBWEOGS
+BFEC;BFEC;1108 116F 11AB;BFEC;1108 116F 11AB; # (뿬; 뿬; 뿬; 뿬; 뿬; ) HANGUL SYLLABLE BBWEON
+BFED;BFED;1108 116F 11AC;BFED;1108 116F 11AC; # (뿭; 뿭; 뿭; 뿭; 뿭; ) HANGUL SYLLABLE BBWEONJ
+BFEE;BFEE;1108 116F 11AD;BFEE;1108 116F 11AD; # (뿮; 뿮; 뿮; 뿮; 뿮; ) HANGUL SYLLABLE BBWEONH
+BFEF;BFEF;1108 116F 11AE;BFEF;1108 116F 11AE; # (뿯; 뿯; 뿯; 뿯; 뿯; ) HANGUL SYLLABLE BBWEOD
+BFF0;BFF0;1108 116F 11AF;BFF0;1108 116F 11AF; # (뿰; 뿰; 뿰; 뿰; 뿰; ) HANGUL SYLLABLE BBWEOL
+BFF1;BFF1;1108 116F 11B0;BFF1;1108 116F 11B0; # (뿱; 뿱; 뿱; 뿱; 뿱; ) HANGUL SYLLABLE BBWEOLG
+BFF2;BFF2;1108 116F 11B1;BFF2;1108 116F 11B1; # (뿲; 뿲; 뿲; 뿲; 뿲; ) HANGUL SYLLABLE BBWEOLM
+BFF3;BFF3;1108 116F 11B2;BFF3;1108 116F 11B2; # (뿳; 뿳; 뿳; 뿳; 뿳; ) HANGUL SYLLABLE BBWEOLB
+BFF4;BFF4;1108 116F 11B3;BFF4;1108 116F 11B3; # (뿴; 뿴; 뿴; 뿴; 뿴; ) HANGUL SYLLABLE BBWEOLS
+BFF5;BFF5;1108 116F 11B4;BFF5;1108 116F 11B4; # (뿵; 뿵; 뿵; 뿵; 뿵; ) HANGUL SYLLABLE BBWEOLT
+BFF6;BFF6;1108 116F 11B5;BFF6;1108 116F 11B5; # (뿶; 뿶; 뿶; 뿶; 뿶; ) HANGUL SYLLABLE BBWEOLP
+BFF7;BFF7;1108 116F 11B6;BFF7;1108 116F 11B6; # (뿷; 뿷; 뿷; 뿷; 뿷; ) HANGUL SYLLABLE BBWEOLH
+BFF8;BFF8;1108 116F 11B7;BFF8;1108 116F 11B7; # (뿸; 뿸; 뿸; 뿸; 뿸; ) HANGUL SYLLABLE BBWEOM
+BFF9;BFF9;1108 116F 11B8;BFF9;1108 116F 11B8; # (뿹; 뿹; 뿹; 뿹; 뿹; ) HANGUL SYLLABLE BBWEOB
+BFFA;BFFA;1108 116F 11B9;BFFA;1108 116F 11B9; # (뿺; 뿺; 뿺; 뿺; 뿺; ) HANGUL SYLLABLE BBWEOBS
+BFFB;BFFB;1108 116F 11BA;BFFB;1108 116F 11BA; # (뿻; 뿻; 뿻; 뿻; 뿻; ) HANGUL SYLLABLE BBWEOS
+BFFC;BFFC;1108 116F 11BB;BFFC;1108 116F 11BB; # (뿼; 뿼; 뿼; 뿼; 뿼; ) HANGUL SYLLABLE BBWEOSS
+BFFD;BFFD;1108 116F 11BC;BFFD;1108 116F 11BC; # (뿽; 뿽; 뿽; 뿽; 뿽; ) HANGUL SYLLABLE BBWEONG
+BFFE;BFFE;1108 116F 11BD;BFFE;1108 116F 11BD; # (뿾; 뿾; 뿾; 뿾; 뿾; ) HANGUL SYLLABLE BBWEOJ
+BFFF;BFFF;1108 116F 11BE;BFFF;1108 116F 11BE; # (뿿; 뿿; 뿿; 뿿; 뿿; ) HANGUL SYLLABLE BBWEOC
+C000;C000;1108 116F 11BF;C000;1108 116F 11BF; # (쀀; 쀀; 쀀; 쀀; 쀀; ) HANGUL SYLLABLE BBWEOK
+C001;C001;1108 116F 11C0;C001;1108 116F 11C0; # (쀁; 쀁; 쀁; 쀁; 쀁; ) HANGUL SYLLABLE BBWEOT
+C002;C002;1108 116F 11C1;C002;1108 116F 11C1; # (쀂; 쀂; 쀂; 쀂; 쀂; ) HANGUL SYLLABLE BBWEOP
+C003;C003;1108 116F 11C2;C003;1108 116F 11C2; # (쀃; 쀃; 쀃; 쀃; 쀃; ) HANGUL SYLLABLE BBWEOH
+C004;C004;1108 1170;C004;1108 1170; # (쀄; 쀄; 쀄; 쀄; 쀄; ) HANGUL SYLLABLE BBWE
+C005;C005;1108 1170 11A8;C005;1108 1170 11A8; # (쀅; 쀅; 쀅; 쀅; 쀅; ) HANGUL SYLLABLE BBWEG
+C006;C006;1108 1170 11A9;C006;1108 1170 11A9; # (쀆; 쀆; 쀆; 쀆; 쀆; ) HANGUL SYLLABLE BBWEGG
+C007;C007;1108 1170 11AA;C007;1108 1170 11AA; # (쀇; 쀇; 쀇; 쀇; 쀇; ) HANGUL SYLLABLE BBWEGS
+C008;C008;1108 1170 11AB;C008;1108 1170 11AB; # (쀈; 쀈; 쀈; 쀈; 쀈; ) HANGUL SYLLABLE BBWEN
+C009;C009;1108 1170 11AC;C009;1108 1170 11AC; # (쀉; 쀉; 쀉; 쀉; 쀉; ) HANGUL SYLLABLE BBWENJ
+C00A;C00A;1108 1170 11AD;C00A;1108 1170 11AD; # (쀊; 쀊; 쀊; 쀊; 쀊; ) HANGUL SYLLABLE BBWENH
+C00B;C00B;1108 1170 11AE;C00B;1108 1170 11AE; # (쀋; 쀋; 쀋; 쀋; 쀋; ) HANGUL SYLLABLE BBWED
+C00C;C00C;1108 1170 11AF;C00C;1108 1170 11AF; # (쀌; 쀌; 쀌; 쀌; 쀌; ) HANGUL SYLLABLE BBWEL
+C00D;C00D;1108 1170 11B0;C00D;1108 1170 11B0; # (쀍; 쀍; 쀍; 쀍; 쀍; ) HANGUL SYLLABLE BBWELG
+C00E;C00E;1108 1170 11B1;C00E;1108 1170 11B1; # (쀎; 쀎; 쀎; 쀎; 쀎; ) HANGUL SYLLABLE BBWELM
+C00F;C00F;1108 1170 11B2;C00F;1108 1170 11B2; # (쀏; 쀏; 쀏; 쀏; 쀏; ) HANGUL SYLLABLE BBWELB
+C010;C010;1108 1170 11B3;C010;1108 1170 11B3; # (쀐; 쀐; 쀐; 쀐; 쀐; ) HANGUL SYLLABLE BBWELS
+C011;C011;1108 1170 11B4;C011;1108 1170 11B4; # (쀑; 쀑; 쀑; 쀑; 쀑; ) HANGUL SYLLABLE BBWELT
+C012;C012;1108 1170 11B5;C012;1108 1170 11B5; # (쀒; 쀒; 쀒; 쀒; 쀒; ) HANGUL SYLLABLE BBWELP
+C013;C013;1108 1170 11B6;C013;1108 1170 11B6; # (쀓; 쀓; 쀓; 쀓; 쀓; ) HANGUL SYLLABLE BBWELH
+C014;C014;1108 1170 11B7;C014;1108 1170 11B7; # (쀔; 쀔; 쀔; 쀔; 쀔; ) HANGUL SYLLABLE BBWEM
+C015;C015;1108 1170 11B8;C015;1108 1170 11B8; # (쀕; 쀕; 쀕; 쀕; 쀕; ) HANGUL SYLLABLE BBWEB
+C016;C016;1108 1170 11B9;C016;1108 1170 11B9; # (쀖; 쀖; 쀖; 쀖; 쀖; ) HANGUL SYLLABLE BBWEBS
+C017;C017;1108 1170 11BA;C017;1108 1170 11BA; # (쀗; 쀗; 쀗; 쀗; 쀗; ) HANGUL SYLLABLE BBWES
+C018;C018;1108 1170 11BB;C018;1108 1170 11BB; # (쀘; 쀘; 쀘; 쀘; 쀘; ) HANGUL SYLLABLE BBWESS
+C019;C019;1108 1170 11BC;C019;1108 1170 11BC; # (쀙; 쀙; 쀙; 쀙; 쀙; ) HANGUL SYLLABLE BBWENG
+C01A;C01A;1108 1170 11BD;C01A;1108 1170 11BD; # (쀚; 쀚; 쀚; 쀚; 쀚; ) HANGUL SYLLABLE BBWEJ
+C01B;C01B;1108 1170 11BE;C01B;1108 1170 11BE; # (쀛; 쀛; 쀛; 쀛; 쀛; ) HANGUL SYLLABLE BBWEC
+C01C;C01C;1108 1170 11BF;C01C;1108 1170 11BF; # (쀜; 쀜; 쀜; 쀜; 쀜; ) HANGUL SYLLABLE BBWEK
+C01D;C01D;1108 1170 11C0;C01D;1108 1170 11C0; # (쀝; 쀝; 쀝; 쀝; 쀝; ) HANGUL SYLLABLE BBWET
+C01E;C01E;1108 1170 11C1;C01E;1108 1170 11C1; # (쀞; 쀞; 쀞; 쀞; 쀞; ) HANGUL SYLLABLE BBWEP
+C01F;C01F;1108 1170 11C2;C01F;1108 1170 11C2; # (쀟; 쀟; 쀟; 쀟; 쀟; ) HANGUL SYLLABLE BBWEH
+C020;C020;1108 1171;C020;1108 1171; # (쀠; 쀠; 쀠; 쀠; 쀠; ) HANGUL SYLLABLE BBWI
+C021;C021;1108 1171 11A8;C021;1108 1171 11A8; # (쀡; 쀡; 쀡; 쀡; 쀡; ) HANGUL SYLLABLE BBWIG
+C022;C022;1108 1171 11A9;C022;1108 1171 11A9; # (쀢; 쀢; 쀢; 쀢; 쀢; ) HANGUL SYLLABLE BBWIGG
+C023;C023;1108 1171 11AA;C023;1108 1171 11AA; # (쀣; 쀣; 쀣; 쀣; 쀣; ) HANGUL SYLLABLE BBWIGS
+C024;C024;1108 1171 11AB;C024;1108 1171 11AB; # (쀤; 쀤; 쀤; 쀤; 쀤; ) HANGUL SYLLABLE BBWIN
+C025;C025;1108 1171 11AC;C025;1108 1171 11AC; # (쀥; 쀥; 쀥; 쀥; 쀥; ) HANGUL SYLLABLE BBWINJ
+C026;C026;1108 1171 11AD;C026;1108 1171 11AD; # (쀦; 쀦; 쀦; 쀦; 쀦; ) HANGUL SYLLABLE BBWINH
+C027;C027;1108 1171 11AE;C027;1108 1171 11AE; # (쀧; 쀧; 쀧; 쀧; 쀧; ) HANGUL SYLLABLE BBWID
+C028;C028;1108 1171 11AF;C028;1108 1171 11AF; # (쀨; 쀨; 쀨; 쀨; 쀨; ) HANGUL SYLLABLE BBWIL
+C029;C029;1108 1171 11B0;C029;1108 1171 11B0; # (쀩; 쀩; 쀩; 쀩; 쀩; ) HANGUL SYLLABLE BBWILG
+C02A;C02A;1108 1171 11B1;C02A;1108 1171 11B1; # (쀪; 쀪; 쀪; 쀪; 쀪; ) HANGUL SYLLABLE BBWILM
+C02B;C02B;1108 1171 11B2;C02B;1108 1171 11B2; # (쀫; 쀫; 쀫; 쀫; 쀫; ) HANGUL SYLLABLE BBWILB
+C02C;C02C;1108 1171 11B3;C02C;1108 1171 11B3; # (쀬; 쀬; 쀬; 쀬; 쀬; ) HANGUL SYLLABLE BBWILS
+C02D;C02D;1108 1171 11B4;C02D;1108 1171 11B4; # (쀭; 쀭; 쀭; 쀭; 쀭; ) HANGUL SYLLABLE BBWILT
+C02E;C02E;1108 1171 11B5;C02E;1108 1171 11B5; # (쀮; 쀮; 쀮; 쀮; 쀮; ) HANGUL SYLLABLE BBWILP
+C02F;C02F;1108 1171 11B6;C02F;1108 1171 11B6; # (쀯; 쀯; 쀯; 쀯; 쀯; ) HANGUL SYLLABLE BBWILH
+C030;C030;1108 1171 11B7;C030;1108 1171 11B7; # (쀰; 쀰; 쀰; 쀰; 쀰; ) HANGUL SYLLABLE BBWIM
+C031;C031;1108 1171 11B8;C031;1108 1171 11B8; # (쀱; 쀱; 쀱; 쀱; 쀱; ) HANGUL SYLLABLE BBWIB
+C032;C032;1108 1171 11B9;C032;1108 1171 11B9; # (쀲; 쀲; 쀲; 쀲; 쀲; ) HANGUL SYLLABLE BBWIBS
+C033;C033;1108 1171 11BA;C033;1108 1171 11BA; # (쀳; 쀳; 쀳; 쀳; 쀳; ) HANGUL SYLLABLE BBWIS
+C034;C034;1108 1171 11BB;C034;1108 1171 11BB; # (쀴; 쀴; 쀴; 쀴; 쀴; ) HANGUL SYLLABLE BBWISS
+C035;C035;1108 1171 11BC;C035;1108 1171 11BC; # (쀵; 쀵; 쀵; 쀵; 쀵; ) HANGUL SYLLABLE BBWING
+C036;C036;1108 1171 11BD;C036;1108 1171 11BD; # (쀶; 쀶; 쀶; 쀶; 쀶; ) HANGUL SYLLABLE BBWIJ
+C037;C037;1108 1171 11BE;C037;1108 1171 11BE; # (쀷; 쀷; 쀷; 쀷; 쀷; ) HANGUL SYLLABLE BBWIC
+C038;C038;1108 1171 11BF;C038;1108 1171 11BF; # (쀸; 쀸; 쀸; 쀸; 쀸; ) HANGUL SYLLABLE BBWIK
+C039;C039;1108 1171 11C0;C039;1108 1171 11C0; # (쀹; 쀹; 쀹; 쀹; 쀹; ) HANGUL SYLLABLE BBWIT
+C03A;C03A;1108 1171 11C1;C03A;1108 1171 11C1; # (쀺; 쀺; 쀺; 쀺; 쀺; ) HANGUL SYLLABLE BBWIP
+C03B;C03B;1108 1171 11C2;C03B;1108 1171 11C2; # (쀻; 쀻; 쀻; 쀻; 쀻; ) HANGUL SYLLABLE BBWIH
+C03C;C03C;1108 1172;C03C;1108 1172; # (쀼; 쀼; 쀼; 쀼; 쀼; ) HANGUL SYLLABLE BBYU
+C03D;C03D;1108 1172 11A8;C03D;1108 1172 11A8; # (쀽; 쀽; 쀽; 쀽; 쀽; ) HANGUL SYLLABLE BBYUG
+C03E;C03E;1108 1172 11A9;C03E;1108 1172 11A9; # (쀾; 쀾; 쀾; 쀾; 쀾; ) HANGUL SYLLABLE BBYUGG
+C03F;C03F;1108 1172 11AA;C03F;1108 1172 11AA; # (쀿; 쀿; 쀿; 쀿; 쀿; ) HANGUL SYLLABLE BBYUGS
+C040;C040;1108 1172 11AB;C040;1108 1172 11AB; # (쁀; 쁀; 쁀; 쁀; 쁀; ) HANGUL SYLLABLE BBYUN
+C041;C041;1108 1172 11AC;C041;1108 1172 11AC; # (쁁; 쁁; 쁁; 쁁; 쁁; ) HANGUL SYLLABLE BBYUNJ
+C042;C042;1108 1172 11AD;C042;1108 1172 11AD; # (쁂; 쁂; 쁂; 쁂; 쁂; ) HANGUL SYLLABLE BBYUNH
+C043;C043;1108 1172 11AE;C043;1108 1172 11AE; # (쁃; 쁃; 쁃; 쁃; 쁃; ) HANGUL SYLLABLE BBYUD
+C044;C044;1108 1172 11AF;C044;1108 1172 11AF; # (쁄; 쁄; 쁄; 쁄; 쁄; ) HANGUL SYLLABLE BBYUL
+C045;C045;1108 1172 11B0;C045;1108 1172 11B0; # (쁅; 쁅; 쁅; 쁅; 쁅; ) HANGUL SYLLABLE BBYULG
+C046;C046;1108 1172 11B1;C046;1108 1172 11B1; # (쁆; 쁆; 쁆; 쁆; 쁆; ) HANGUL SYLLABLE BBYULM
+C047;C047;1108 1172 11B2;C047;1108 1172 11B2; # (쁇; 쁇; 쁇; 쁇; 쁇; ) HANGUL SYLLABLE BBYULB
+C048;C048;1108 1172 11B3;C048;1108 1172 11B3; # (쁈; 쁈; 쁈; 쁈; 쁈; ) HANGUL SYLLABLE BBYULS
+C049;C049;1108 1172 11B4;C049;1108 1172 11B4; # (쁉; 쁉; 쁉; 쁉; 쁉; ) HANGUL SYLLABLE BBYULT
+C04A;C04A;1108 1172 11B5;C04A;1108 1172 11B5; # (쁊; 쁊; 쁊; 쁊; 쁊; ) HANGUL SYLLABLE BBYULP
+C04B;C04B;1108 1172 11B6;C04B;1108 1172 11B6; # (쁋; 쁋; 쁋; 쁋; 쁋; ) HANGUL SYLLABLE BBYULH
+C04C;C04C;1108 1172 11B7;C04C;1108 1172 11B7; # (쁌; 쁌; 쁌; 쁌; 쁌; ) HANGUL SYLLABLE BBYUM
+C04D;C04D;1108 1172 11B8;C04D;1108 1172 11B8; # (쁍; 쁍; 쁍; 쁍; 쁍; ) HANGUL SYLLABLE BBYUB
+C04E;C04E;1108 1172 11B9;C04E;1108 1172 11B9; # (쁎; 쁎; 쁎; 쁎; 쁎; ) HANGUL SYLLABLE BBYUBS
+C04F;C04F;1108 1172 11BA;C04F;1108 1172 11BA; # (쁏; 쁏; 쁏; 쁏; 쁏; ) HANGUL SYLLABLE BBYUS
+C050;C050;1108 1172 11BB;C050;1108 1172 11BB; # (쁐; 쁐; 쁐; 쁐; 쁐; ) HANGUL SYLLABLE BBYUSS
+C051;C051;1108 1172 11BC;C051;1108 1172 11BC; # (쁑; 쁑; 쁑; 쁑; 쁑; ) HANGUL SYLLABLE BBYUNG
+C052;C052;1108 1172 11BD;C052;1108 1172 11BD; # (쁒; 쁒; 쁒; 쁒; 쁒; ) HANGUL SYLLABLE BBYUJ
+C053;C053;1108 1172 11BE;C053;1108 1172 11BE; # (쁓; 쁓; 쁓; 쁓; 쁓; ) HANGUL SYLLABLE BBYUC
+C054;C054;1108 1172 11BF;C054;1108 1172 11BF; # (쁔; 쁔; 쁔; 쁔; 쁔; ) HANGUL SYLLABLE BBYUK
+C055;C055;1108 1172 11C0;C055;1108 1172 11C0; # (쁕; 쁕; 쁕; 쁕; 쁕; ) HANGUL SYLLABLE BBYUT
+C056;C056;1108 1172 11C1;C056;1108 1172 11C1; # (쁖; 쁖; 쁖; 쁖; 쁖; ) HANGUL SYLLABLE BBYUP
+C057;C057;1108 1172 11C2;C057;1108 1172 11C2; # (쁗; 쁗; 쁗; 쁗; 쁗; ) HANGUL SYLLABLE BBYUH
+C058;C058;1108 1173;C058;1108 1173; # (쁘; 쁘; 쁘; 쁘; 쁘; ) HANGUL SYLLABLE BBEU
+C059;C059;1108 1173 11A8;C059;1108 1173 11A8; # (쁙; 쁙; 쁙; 쁙; 쁙; ) HANGUL SYLLABLE BBEUG
+C05A;C05A;1108 1173 11A9;C05A;1108 1173 11A9; # (쁚; 쁚; 쁚; 쁚; 쁚; ) HANGUL SYLLABLE BBEUGG
+C05B;C05B;1108 1173 11AA;C05B;1108 1173 11AA; # (쁛; 쁛; 쁛; 쁛; 쁛; ) HANGUL SYLLABLE BBEUGS
+C05C;C05C;1108 1173 11AB;C05C;1108 1173 11AB; # (쁜; 쁜; 쁜; 쁜; 쁜; ) HANGUL SYLLABLE BBEUN
+C05D;C05D;1108 1173 11AC;C05D;1108 1173 11AC; # (쁝; 쁝; 쁝; 쁝; 쁝; ) HANGUL SYLLABLE BBEUNJ
+C05E;C05E;1108 1173 11AD;C05E;1108 1173 11AD; # (쁞; 쁞; 쁞; 쁞; 쁞; ) HANGUL SYLLABLE BBEUNH
+C05F;C05F;1108 1173 11AE;C05F;1108 1173 11AE; # (쁟; 쁟; 쁟; 쁟; 쁟; ) HANGUL SYLLABLE BBEUD
+C060;C060;1108 1173 11AF;C060;1108 1173 11AF; # (쁠; 쁠; 쁠; 쁠; 쁠; ) HANGUL SYLLABLE BBEUL
+C061;C061;1108 1173 11B0;C061;1108 1173 11B0; # (쁡; 쁡; 쁡; 쁡; 쁡; ) HANGUL SYLLABLE BBEULG
+C062;C062;1108 1173 11B1;C062;1108 1173 11B1; # (쁢; 쁢; 쁢; 쁢; 쁢; ) HANGUL SYLLABLE BBEULM
+C063;C063;1108 1173 11B2;C063;1108 1173 11B2; # (쁣; 쁣; 쁣; 쁣; 쁣; ) HANGUL SYLLABLE BBEULB
+C064;C064;1108 1173 11B3;C064;1108 1173 11B3; # (쁤; 쁤; 쁤; 쁤; 쁤; ) HANGUL SYLLABLE BBEULS
+C065;C065;1108 1173 11B4;C065;1108 1173 11B4; # (쁥; 쁥; 쁥; 쁥; 쁥; ) HANGUL SYLLABLE BBEULT
+C066;C066;1108 1173 11B5;C066;1108 1173 11B5; # (쁦; 쁦; 쁦; 쁦; 쁦; ) HANGUL SYLLABLE BBEULP
+C067;C067;1108 1173 11B6;C067;1108 1173 11B6; # (쁧; 쁧; 쁧; 쁧; 쁧; ) HANGUL SYLLABLE BBEULH
+C068;C068;1108 1173 11B7;C068;1108 1173 11B7; # (쁨; 쁨; 쁨; 쁨; 쁨; ) HANGUL SYLLABLE BBEUM
+C069;C069;1108 1173 11B8;C069;1108 1173 11B8; # (쁩; 쁩; 쁩; 쁩; 쁩; ) HANGUL SYLLABLE BBEUB
+C06A;C06A;1108 1173 11B9;C06A;1108 1173 11B9; # (쁪; 쁪; 쁪; 쁪; 쁪; ) HANGUL SYLLABLE BBEUBS
+C06B;C06B;1108 1173 11BA;C06B;1108 1173 11BA; # (쁫; 쁫; 쁫; 쁫; 쁫; ) HANGUL SYLLABLE BBEUS
+C06C;C06C;1108 1173 11BB;C06C;1108 1173 11BB; # (쁬; 쁬; 쁬; 쁬; 쁬; ) HANGUL SYLLABLE BBEUSS
+C06D;C06D;1108 1173 11BC;C06D;1108 1173 11BC; # (쁭; 쁭; 쁭; 쁭; 쁭; ) HANGUL SYLLABLE BBEUNG
+C06E;C06E;1108 1173 11BD;C06E;1108 1173 11BD; # (쁮; 쁮; 쁮; 쁮; 쁮; ) HANGUL SYLLABLE BBEUJ
+C06F;C06F;1108 1173 11BE;C06F;1108 1173 11BE; # (쁯; 쁯; 쁯; 쁯; 쁯; ) HANGUL SYLLABLE BBEUC
+C070;C070;1108 1173 11BF;C070;1108 1173 11BF; # (쁰; 쁰; 쁰; 쁰; 쁰; ) HANGUL SYLLABLE BBEUK
+C071;C071;1108 1173 11C0;C071;1108 1173 11C0; # (쁱; 쁱; 쁱; 쁱; 쁱; ) HANGUL SYLLABLE BBEUT
+C072;C072;1108 1173 11C1;C072;1108 1173 11C1; # (쁲; 쁲; 쁲; 쁲; 쁲; ) HANGUL SYLLABLE BBEUP
+C073;C073;1108 1173 11C2;C073;1108 1173 11C2; # (쁳; 쁳; 쁳; 쁳; 쁳; ) HANGUL SYLLABLE BBEUH
+C074;C074;1108 1174;C074;1108 1174; # (쁴; 쁴; 쁴; 쁴; 쁴; ) HANGUL SYLLABLE BBYI
+C075;C075;1108 1174 11A8;C075;1108 1174 11A8; # (쁵; 쁵; 쁵; 쁵; 쁵; ) HANGUL SYLLABLE BBYIG
+C076;C076;1108 1174 11A9;C076;1108 1174 11A9; # (쁶; 쁶; 쁶; 쁶; 쁶; ) HANGUL SYLLABLE BBYIGG
+C077;C077;1108 1174 11AA;C077;1108 1174 11AA; # (쁷; 쁷; 쁷; 쁷; 쁷; ) HANGUL SYLLABLE BBYIGS
+C078;C078;1108 1174 11AB;C078;1108 1174 11AB; # (쁸; 쁸; 쁸; 쁸; 쁸; ) HANGUL SYLLABLE BBYIN
+C079;C079;1108 1174 11AC;C079;1108 1174 11AC; # (쁹; 쁹; 쁹; 쁹; 쁹; ) HANGUL SYLLABLE BBYINJ
+C07A;C07A;1108 1174 11AD;C07A;1108 1174 11AD; # (쁺; 쁺; 쁺; 쁺; 쁺; ) HANGUL SYLLABLE BBYINH
+C07B;C07B;1108 1174 11AE;C07B;1108 1174 11AE; # (쁻; 쁻; 쁻; 쁻; 쁻; ) HANGUL SYLLABLE BBYID
+C07C;C07C;1108 1174 11AF;C07C;1108 1174 11AF; # (쁼; 쁼; 쁼; 쁼; 쁼; ) HANGUL SYLLABLE BBYIL
+C07D;C07D;1108 1174 11B0;C07D;1108 1174 11B0; # (쁽; 쁽; 쁽; 쁽; 쁽; ) HANGUL SYLLABLE BBYILG
+C07E;C07E;1108 1174 11B1;C07E;1108 1174 11B1; # (쁾; 쁾; 쁾; 쁾; 쁾; ) HANGUL SYLLABLE BBYILM
+C07F;C07F;1108 1174 11B2;C07F;1108 1174 11B2; # (쁿; 쁿; 쁿; 쁿; 쁿; ) HANGUL SYLLABLE BBYILB
+C080;C080;1108 1174 11B3;C080;1108 1174 11B3; # (삀; 삀; 삀; 삀; 삀; ) HANGUL SYLLABLE BBYILS
+C081;C081;1108 1174 11B4;C081;1108 1174 11B4; # (삁; 삁; 삁; 삁; 삁; ) HANGUL SYLLABLE BBYILT
+C082;C082;1108 1174 11B5;C082;1108 1174 11B5; # (삂; 삂; 삂; 삂; 삂; ) HANGUL SYLLABLE BBYILP
+C083;C083;1108 1174 11B6;C083;1108 1174 11B6; # (삃; 삃; 삃; 삃; 삃; ) HANGUL SYLLABLE BBYILH
+C084;C084;1108 1174 11B7;C084;1108 1174 11B7; # (삄; 삄; 삄; 삄; 삄; ) HANGUL SYLLABLE BBYIM
+C085;C085;1108 1174 11B8;C085;1108 1174 11B8; # (삅; 삅; 삅; 삅; 삅; ) HANGUL SYLLABLE BBYIB
+C086;C086;1108 1174 11B9;C086;1108 1174 11B9; # (삆; 삆; 삆; 삆; 삆; ) HANGUL SYLLABLE BBYIBS
+C087;C087;1108 1174 11BA;C087;1108 1174 11BA; # (삇; 삇; 삇; 삇; 삇; ) HANGUL SYLLABLE BBYIS
+C088;C088;1108 1174 11BB;C088;1108 1174 11BB; # (삈; 삈; 삈; 삈; 삈; ) HANGUL SYLLABLE BBYISS
+C089;C089;1108 1174 11BC;C089;1108 1174 11BC; # (삉; 삉; 삉; 삉; 삉; ) HANGUL SYLLABLE BBYING
+C08A;C08A;1108 1174 11BD;C08A;1108 1174 11BD; # (삊; 삊; 삊; 삊; 삊; ) HANGUL SYLLABLE BBYIJ
+C08B;C08B;1108 1174 11BE;C08B;1108 1174 11BE; # (삋; 삋; 삋; 삋; 삋; ) HANGUL SYLLABLE BBYIC
+C08C;C08C;1108 1174 11BF;C08C;1108 1174 11BF; # (삌; 삌; 삌; 삌; 삌; ) HANGUL SYLLABLE BBYIK
+C08D;C08D;1108 1174 11C0;C08D;1108 1174 11C0; # (삍; 삍; 삍; 삍; 삍; ) HANGUL SYLLABLE BBYIT
+C08E;C08E;1108 1174 11C1;C08E;1108 1174 11C1; # (삎; 삎; 삎; 삎; 삎; ) HANGUL SYLLABLE BBYIP
+C08F;C08F;1108 1174 11C2;C08F;1108 1174 11C2; # (삏; 삏; 삏; 삏; 삏; ) HANGUL SYLLABLE BBYIH
+C090;C090;1108 1175;C090;1108 1175; # (삐; 삐; 삐; 삐; 삐; ) HANGUL SYLLABLE BBI
+C091;C091;1108 1175 11A8;C091;1108 1175 11A8; # (삑; 삑; 삑; 삑; 삑; ) HANGUL SYLLABLE BBIG
+C092;C092;1108 1175 11A9;C092;1108 1175 11A9; # (삒; 삒; 삒; 삒; 삒; ) HANGUL SYLLABLE BBIGG
+C093;C093;1108 1175 11AA;C093;1108 1175 11AA; # (삓; 삓; 삓; 삓; 삓; ) HANGUL SYLLABLE BBIGS
+C094;C094;1108 1175 11AB;C094;1108 1175 11AB; # (삔; 삔; 삔; 삔; 삔; ) HANGUL SYLLABLE BBIN
+C095;C095;1108 1175 11AC;C095;1108 1175 11AC; # (삕; 삕; 삕; 삕; 삕; ) HANGUL SYLLABLE BBINJ
+C096;C096;1108 1175 11AD;C096;1108 1175 11AD; # (삖; 삖; 삖; 삖; 삖; ) HANGUL SYLLABLE BBINH
+C097;C097;1108 1175 11AE;C097;1108 1175 11AE; # (삗; 삗; 삗; 삗; 삗; ) HANGUL SYLLABLE BBID
+C098;C098;1108 1175 11AF;C098;1108 1175 11AF; # (삘; 삘; 삘; 삘; 삘; ) HANGUL SYLLABLE BBIL
+C099;C099;1108 1175 11B0;C099;1108 1175 11B0; # (삙; 삙; 삙; 삙; 삙; ) HANGUL SYLLABLE BBILG
+C09A;C09A;1108 1175 11B1;C09A;1108 1175 11B1; # (삚; 삚; 삚; 삚; 삚; ) HANGUL SYLLABLE BBILM
+C09B;C09B;1108 1175 11B2;C09B;1108 1175 11B2; # (삛; 삛; 삛; 삛; 삛; ) HANGUL SYLLABLE BBILB
+C09C;C09C;1108 1175 11B3;C09C;1108 1175 11B3; # (삜; 삜; 삜; 삜; 삜; ) HANGUL SYLLABLE BBILS
+C09D;C09D;1108 1175 11B4;C09D;1108 1175 11B4; # (삝; 삝; 삝; 삝; 삝; ) HANGUL SYLLABLE BBILT
+C09E;C09E;1108 1175 11B5;C09E;1108 1175 11B5; # (삞; 삞; 삞; 삞; 삞; ) HANGUL SYLLABLE BBILP
+C09F;C09F;1108 1175 11B6;C09F;1108 1175 11B6; # (삟; 삟; 삟; 삟; 삟; ) HANGUL SYLLABLE BBILH
+C0A0;C0A0;1108 1175 11B7;C0A0;1108 1175 11B7; # (삠; 삠; 삠; 삠; 삠; ) HANGUL SYLLABLE BBIM
+C0A1;C0A1;1108 1175 11B8;C0A1;1108 1175 11B8; # (삡; 삡; 삡; 삡; 삡; ) HANGUL SYLLABLE BBIB
+C0A2;C0A2;1108 1175 11B9;C0A2;1108 1175 11B9; # (삢; 삢; 삢; 삢; 삢; ) HANGUL SYLLABLE BBIBS
+C0A3;C0A3;1108 1175 11BA;C0A3;1108 1175 11BA; # (삣; 삣; 삣; 삣; 삣; ) HANGUL SYLLABLE BBIS
+C0A4;C0A4;1108 1175 11BB;C0A4;1108 1175 11BB; # (삤; 삤; 삤; 삤; 삤; ) HANGUL SYLLABLE BBISS
+C0A5;C0A5;1108 1175 11BC;C0A5;1108 1175 11BC; # (삥; 삥; 삥; 삥; 삥; ) HANGUL SYLLABLE BBING
+C0A6;C0A6;1108 1175 11BD;C0A6;1108 1175 11BD; # (삦; 삦; 삦; 삦; 삦; ) HANGUL SYLLABLE BBIJ
+C0A7;C0A7;1108 1175 11BE;C0A7;1108 1175 11BE; # (삧; 삧; 삧; 삧; 삧; ) HANGUL SYLLABLE BBIC
+C0A8;C0A8;1108 1175 11BF;C0A8;1108 1175 11BF; # (삨; 삨; 삨; 삨; 삨; ) HANGUL SYLLABLE BBIK
+C0A9;C0A9;1108 1175 11C0;C0A9;1108 1175 11C0; # (삩; 삩; 삩; 삩; 삩; ) HANGUL SYLLABLE BBIT
+C0AA;C0AA;1108 1175 11C1;C0AA;1108 1175 11C1; # (삪; 삪; 삪; 삪; 삪; ) HANGUL SYLLABLE BBIP
+C0AB;C0AB;1108 1175 11C2;C0AB;1108 1175 11C2; # (삫; 삫; 삫; 삫; 삫; ) HANGUL SYLLABLE BBIH
+C0AC;C0AC;1109 1161;C0AC;1109 1161; # (사; 사; 사; 사; 사; ) HANGUL SYLLABLE SA
+C0AD;C0AD;1109 1161 11A8;C0AD;1109 1161 11A8; # (삭; 삭; 삭; 삭; 삭; ) HANGUL SYLLABLE SAG
+C0AE;C0AE;1109 1161 11A9;C0AE;1109 1161 11A9; # (삮; 삮; 삮; 삮; 삮; ) HANGUL SYLLABLE SAGG
+C0AF;C0AF;1109 1161 11AA;C0AF;1109 1161 11AA; # (삯; 삯; 삯; 삯; 삯; ) HANGUL SYLLABLE SAGS
+C0B0;C0B0;1109 1161 11AB;C0B0;1109 1161 11AB; # (산; 산; 산; 산; 산; ) HANGUL SYLLABLE SAN
+C0B1;C0B1;1109 1161 11AC;C0B1;1109 1161 11AC; # (삱; 삱; 삱; 삱; 삱; ) HANGUL SYLLABLE SANJ
+C0B2;C0B2;1109 1161 11AD;C0B2;1109 1161 11AD; # (삲; 삲; 삲; 삲; 삲; ) HANGUL SYLLABLE SANH
+C0B3;C0B3;1109 1161 11AE;C0B3;1109 1161 11AE; # (삳; 삳; 삳; 삳; 삳; ) HANGUL SYLLABLE SAD
+C0B4;C0B4;1109 1161 11AF;C0B4;1109 1161 11AF; # (살; 살; 살; 살; 살; ) HANGUL SYLLABLE SAL
+C0B5;C0B5;1109 1161 11B0;C0B5;1109 1161 11B0; # (삵; 삵; 삵; 삵; 삵; ) HANGUL SYLLABLE SALG
+C0B6;C0B6;1109 1161 11B1;C0B6;1109 1161 11B1; # (삶; 삶; 삶; 삶; 삶; ) HANGUL SYLLABLE SALM
+C0B7;C0B7;1109 1161 11B2;C0B7;1109 1161 11B2; # (삷; 삷; 삷; 삷; 삷; ) HANGUL SYLLABLE SALB
+C0B8;C0B8;1109 1161 11B3;C0B8;1109 1161 11B3; # (삸; 삸; 삸; 삸; 삸; ) HANGUL SYLLABLE SALS
+C0B9;C0B9;1109 1161 11B4;C0B9;1109 1161 11B4; # (삹; 삹; 삹; 삹; 삹; ) HANGUL SYLLABLE SALT
+C0BA;C0BA;1109 1161 11B5;C0BA;1109 1161 11B5; # (삺; 삺; 삺; 삺; 삺; ) HANGUL SYLLABLE SALP
+C0BB;C0BB;1109 1161 11B6;C0BB;1109 1161 11B6; # (삻; 삻; 삻; 삻; 삻; ) HANGUL SYLLABLE SALH
+C0BC;C0BC;1109 1161 11B7;C0BC;1109 1161 11B7; # (삼; 삼; 삼; 삼; 삼; ) HANGUL SYLLABLE SAM
+C0BD;C0BD;1109 1161 11B8;C0BD;1109 1161 11B8; # (삽; 삽; 삽; 삽; 삽; ) HANGUL SYLLABLE SAB
+C0BE;C0BE;1109 1161 11B9;C0BE;1109 1161 11B9; # (삾; 삾; 삾; 삾; 삾; ) HANGUL SYLLABLE SABS
+C0BF;C0BF;1109 1161 11BA;C0BF;1109 1161 11BA; # (삿; 삿; 삿; 삿; 삿; ) HANGUL SYLLABLE SAS
+C0C0;C0C0;1109 1161 11BB;C0C0;1109 1161 11BB; # (샀; 샀; 샀; 샀; 샀; ) HANGUL SYLLABLE SASS
+C0C1;C0C1;1109 1161 11BC;C0C1;1109 1161 11BC; # (상; 상; 상; 상; 상; ) HANGUL SYLLABLE SANG
+C0C2;C0C2;1109 1161 11BD;C0C2;1109 1161 11BD; # (샂; 샂; 샂; 샂; 샂; ) HANGUL SYLLABLE SAJ
+C0C3;C0C3;1109 1161 11BE;C0C3;1109 1161 11BE; # (샃; 샃; 샃; 샃; 샃; ) HANGUL SYLLABLE SAC
+C0C4;C0C4;1109 1161 11BF;C0C4;1109 1161 11BF; # (샄; 샄; 샄; 샄; 샄; ) HANGUL SYLLABLE SAK
+C0C5;C0C5;1109 1161 11C0;C0C5;1109 1161 11C0; # (샅; 샅; 샅; 샅; 샅; ) HANGUL SYLLABLE SAT
+C0C6;C0C6;1109 1161 11C1;C0C6;1109 1161 11C1; # (샆; 샆; 샆; 샆; 샆; ) HANGUL SYLLABLE SAP
+C0C7;C0C7;1109 1161 11C2;C0C7;1109 1161 11C2; # (샇; 샇; 샇; 샇; 샇; ) HANGUL SYLLABLE SAH
+C0C8;C0C8;1109 1162;C0C8;1109 1162; # (새; 새; 새; 새; 새; ) HANGUL SYLLABLE SAE
+C0C9;C0C9;1109 1162 11A8;C0C9;1109 1162 11A8; # (색; 색; 색; 색; 색; ) HANGUL SYLLABLE SAEG
+C0CA;C0CA;1109 1162 11A9;C0CA;1109 1162 11A9; # (샊; 샊; 샊; 샊; 샊; ) HANGUL SYLLABLE SAEGG
+C0CB;C0CB;1109 1162 11AA;C0CB;1109 1162 11AA; # (샋; 샋; 샋; 샋; 샋; ) HANGUL SYLLABLE SAEGS
+C0CC;C0CC;1109 1162 11AB;C0CC;1109 1162 11AB; # (샌; 샌; 샌; 샌; 샌; ) HANGUL SYLLABLE SAEN
+C0CD;C0CD;1109 1162 11AC;C0CD;1109 1162 11AC; # (샍; 샍; 샍; 샍; 샍; ) HANGUL SYLLABLE SAENJ
+C0CE;C0CE;1109 1162 11AD;C0CE;1109 1162 11AD; # (샎; 샎; 샎; 샎; 샎; ) HANGUL SYLLABLE SAENH
+C0CF;C0CF;1109 1162 11AE;C0CF;1109 1162 11AE; # (샏; 샏; 샏; 샏; 샏; ) HANGUL SYLLABLE SAED
+C0D0;C0D0;1109 1162 11AF;C0D0;1109 1162 11AF; # (샐; 샐; 샐; 샐; 샐; ) HANGUL SYLLABLE SAEL
+C0D1;C0D1;1109 1162 11B0;C0D1;1109 1162 11B0; # (샑; 샑; 샑; 샑; 샑; ) HANGUL SYLLABLE SAELG
+C0D2;C0D2;1109 1162 11B1;C0D2;1109 1162 11B1; # (샒; 샒; 샒; 샒; 샒; ) HANGUL SYLLABLE SAELM
+C0D3;C0D3;1109 1162 11B2;C0D3;1109 1162 11B2; # (샓; 샓; 샓; 샓; 샓; ) HANGUL SYLLABLE SAELB
+C0D4;C0D4;1109 1162 11B3;C0D4;1109 1162 11B3; # (샔; 샔; 샔; 샔; 샔; ) HANGUL SYLLABLE SAELS
+C0D5;C0D5;1109 1162 11B4;C0D5;1109 1162 11B4; # (샕; 샕; 샕; 샕; 샕; ) HANGUL SYLLABLE SAELT
+C0D6;C0D6;1109 1162 11B5;C0D6;1109 1162 11B5; # (샖; 샖; 샖; 샖; 샖; ) HANGUL SYLLABLE SAELP
+C0D7;C0D7;1109 1162 11B6;C0D7;1109 1162 11B6; # (샗; 샗; 샗; 샗; 샗; ) HANGUL SYLLABLE SAELH
+C0D8;C0D8;1109 1162 11B7;C0D8;1109 1162 11B7; # (샘; 샘; 샘; 샘; 샘; ) HANGUL SYLLABLE SAEM
+C0D9;C0D9;1109 1162 11B8;C0D9;1109 1162 11B8; # (샙; 샙; 샙; 샙; 샙; ) HANGUL SYLLABLE SAEB
+C0DA;C0DA;1109 1162 11B9;C0DA;1109 1162 11B9; # (샚; 샚; 샚; 샚; 샚; ) HANGUL SYLLABLE SAEBS
+C0DB;C0DB;1109 1162 11BA;C0DB;1109 1162 11BA; # (샛; 샛; 샛; 샛; 샛; ) HANGUL SYLLABLE SAES
+C0DC;C0DC;1109 1162 11BB;C0DC;1109 1162 11BB; # (샜; 샜; 샜; 샜; 샜; ) HANGUL SYLLABLE SAESS
+C0DD;C0DD;1109 1162 11BC;C0DD;1109 1162 11BC; # (생; 생; 생; 생; 생; ) HANGUL SYLLABLE SAENG
+C0DE;C0DE;1109 1162 11BD;C0DE;1109 1162 11BD; # (샞; 샞; 샞; 샞; 샞; ) HANGUL SYLLABLE SAEJ
+C0DF;C0DF;1109 1162 11BE;C0DF;1109 1162 11BE; # (샟; 샟; 샟; 샟; 샟; ) HANGUL SYLLABLE SAEC
+C0E0;C0E0;1109 1162 11BF;C0E0;1109 1162 11BF; # (샠; 샠; 샠; 샠; 샠; ) HANGUL SYLLABLE SAEK
+C0E1;C0E1;1109 1162 11C0;C0E1;1109 1162 11C0; # (샡; 샡; 샡; 샡; 샡; ) HANGUL SYLLABLE SAET
+C0E2;C0E2;1109 1162 11C1;C0E2;1109 1162 11C1; # (샢; 샢; 샢; 샢; 샢; ) HANGUL SYLLABLE SAEP
+C0E3;C0E3;1109 1162 11C2;C0E3;1109 1162 11C2; # (샣; 샣; 샣; 샣; 샣; ) HANGUL SYLLABLE SAEH
+C0E4;C0E4;1109 1163;C0E4;1109 1163; # (샤; 샤; 샤; 샤; 샤; ) HANGUL SYLLABLE SYA
+C0E5;C0E5;1109 1163 11A8;C0E5;1109 1163 11A8; # (샥; 샥; 샥; 샥; 샥; ) HANGUL SYLLABLE SYAG
+C0E6;C0E6;1109 1163 11A9;C0E6;1109 1163 11A9; # (샦; 샦; 샦; 샦; 샦; ) HANGUL SYLLABLE SYAGG
+C0E7;C0E7;1109 1163 11AA;C0E7;1109 1163 11AA; # (샧; 샧; 샧; 샧; 샧; ) HANGUL SYLLABLE SYAGS
+C0E8;C0E8;1109 1163 11AB;C0E8;1109 1163 11AB; # (샨; 샨; 샨; 샨; 샨; ) HANGUL SYLLABLE SYAN
+C0E9;C0E9;1109 1163 11AC;C0E9;1109 1163 11AC; # (샩; 샩; 샩; 샩; 샩; ) HANGUL SYLLABLE SYANJ
+C0EA;C0EA;1109 1163 11AD;C0EA;1109 1163 11AD; # (샪; 샪; 샪; 샪; 샪; ) HANGUL SYLLABLE SYANH
+C0EB;C0EB;1109 1163 11AE;C0EB;1109 1163 11AE; # (샫; 샫; 샫; 샫; 샫; ) HANGUL SYLLABLE SYAD
+C0EC;C0EC;1109 1163 11AF;C0EC;1109 1163 11AF; # (샬; 샬; 샬; 샬; 샬; ) HANGUL SYLLABLE SYAL
+C0ED;C0ED;1109 1163 11B0;C0ED;1109 1163 11B0; # (샭; 샭; 샭; 샭; 샭; ) HANGUL SYLLABLE SYALG
+C0EE;C0EE;1109 1163 11B1;C0EE;1109 1163 11B1; # (샮; 샮; 샮; 샮; 샮; ) HANGUL SYLLABLE SYALM
+C0EF;C0EF;1109 1163 11B2;C0EF;1109 1163 11B2; # (샯; 샯; 샯; 샯; 샯; ) HANGUL SYLLABLE SYALB
+C0F0;C0F0;1109 1163 11B3;C0F0;1109 1163 11B3; # (샰; 샰; 샰; 샰; 샰; ) HANGUL SYLLABLE SYALS
+C0F1;C0F1;1109 1163 11B4;C0F1;1109 1163 11B4; # (샱; 샱; 샱; 샱; 샱; ) HANGUL SYLLABLE SYALT
+C0F2;C0F2;1109 1163 11B5;C0F2;1109 1163 11B5; # (샲; 샲; 샲; 샲; 샲; ) HANGUL SYLLABLE SYALP
+C0F3;C0F3;1109 1163 11B6;C0F3;1109 1163 11B6; # (샳; 샳; 샳; 샳; 샳; ) HANGUL SYLLABLE SYALH
+C0F4;C0F4;1109 1163 11B7;C0F4;1109 1163 11B7; # (샴; 샴; 샴; 샴; 샴; ) HANGUL SYLLABLE SYAM
+C0F5;C0F5;1109 1163 11B8;C0F5;1109 1163 11B8; # (샵; 샵; 샵; 샵; 샵; ) HANGUL SYLLABLE SYAB
+C0F6;C0F6;1109 1163 11B9;C0F6;1109 1163 11B9; # (샶; 샶; 샶; 샶; 샶; ) HANGUL SYLLABLE SYABS
+C0F7;C0F7;1109 1163 11BA;C0F7;1109 1163 11BA; # (샷; 샷; 샷; 샷; 샷; ) HANGUL SYLLABLE SYAS
+C0F8;C0F8;1109 1163 11BB;C0F8;1109 1163 11BB; # (샸; 샸; 샸; 샸; 샸; ) HANGUL SYLLABLE SYASS
+C0F9;C0F9;1109 1163 11BC;C0F9;1109 1163 11BC; # (샹; 샹; 샹; 샹; 샹; ) HANGUL SYLLABLE SYANG
+C0FA;C0FA;1109 1163 11BD;C0FA;1109 1163 11BD; # (샺; 샺; 샺; 샺; 샺; ) HANGUL SYLLABLE SYAJ
+C0FB;C0FB;1109 1163 11BE;C0FB;1109 1163 11BE; # (샻; 샻; 샻; 샻; 샻; ) HANGUL SYLLABLE SYAC
+C0FC;C0FC;1109 1163 11BF;C0FC;1109 1163 11BF; # (샼; 샼; 샼; 샼; 샼; ) HANGUL SYLLABLE SYAK
+C0FD;C0FD;1109 1163 11C0;C0FD;1109 1163 11C0; # (샽; 샽; 샽; 샽; 샽; ) HANGUL SYLLABLE SYAT
+C0FE;C0FE;1109 1163 11C1;C0FE;1109 1163 11C1; # (샾; 샾; 샾; 샾; 샾; ) HANGUL SYLLABLE SYAP
+C0FF;C0FF;1109 1163 11C2;C0FF;1109 1163 11C2; # (샿; 샿; 샿; 샿; 샿; ) HANGUL SYLLABLE SYAH
+C100;C100;1109 1164;C100;1109 1164; # (섀; 섀; 섀; 섀; 섀; ) HANGUL SYLLABLE SYAE
+C101;C101;1109 1164 11A8;C101;1109 1164 11A8; # (섁; 섁; 섁; 섁; 섁; ) HANGUL SYLLABLE SYAEG
+C102;C102;1109 1164 11A9;C102;1109 1164 11A9; # (섂; 섂; 섂; 섂; 섂; ) HANGUL SYLLABLE SYAEGG
+C103;C103;1109 1164 11AA;C103;1109 1164 11AA; # (섃; 섃; 섃; 섃; 섃; ) HANGUL SYLLABLE SYAEGS
+C104;C104;1109 1164 11AB;C104;1109 1164 11AB; # (섄; 섄; 섄; 섄; 섄; ) HANGUL SYLLABLE SYAEN
+C105;C105;1109 1164 11AC;C105;1109 1164 11AC; # (섅; 섅; 섅; 섅; 섅; ) HANGUL SYLLABLE SYAENJ
+C106;C106;1109 1164 11AD;C106;1109 1164 11AD; # (섆; 섆; 섆; 섆; 섆; ) HANGUL SYLLABLE SYAENH
+C107;C107;1109 1164 11AE;C107;1109 1164 11AE; # (섇; 섇; 섇; 섇; 섇; ) HANGUL SYLLABLE SYAED
+C108;C108;1109 1164 11AF;C108;1109 1164 11AF; # (섈; 섈; 섈; 섈; 섈; ) HANGUL SYLLABLE SYAEL
+C109;C109;1109 1164 11B0;C109;1109 1164 11B0; # (섉; 섉; 섉; 섉; 섉; ) HANGUL SYLLABLE SYAELG
+C10A;C10A;1109 1164 11B1;C10A;1109 1164 11B1; # (섊; 섊; 섊; 섊; 섊; ) HANGUL SYLLABLE SYAELM
+C10B;C10B;1109 1164 11B2;C10B;1109 1164 11B2; # (섋; 섋; 섋; 섋; 섋; ) HANGUL SYLLABLE SYAELB
+C10C;C10C;1109 1164 11B3;C10C;1109 1164 11B3; # (섌; 섌; 섌; 섌; 섌; ) HANGUL SYLLABLE SYAELS
+C10D;C10D;1109 1164 11B4;C10D;1109 1164 11B4; # (섍; 섍; 섍; 섍; 섍; ) HANGUL SYLLABLE SYAELT
+C10E;C10E;1109 1164 11B5;C10E;1109 1164 11B5; # (섎; 섎; 섎; 섎; 섎; ) HANGUL SYLLABLE SYAELP
+C10F;C10F;1109 1164 11B6;C10F;1109 1164 11B6; # (섏; 섏; 섏; 섏; 섏; ) HANGUL SYLLABLE SYAELH
+C110;C110;1109 1164 11B7;C110;1109 1164 11B7; # (섐; 섐; 섐; 섐; 섐; ) HANGUL SYLLABLE SYAEM
+C111;C111;1109 1164 11B8;C111;1109 1164 11B8; # (섑; 섑; 섑; 섑; 섑; ) HANGUL SYLLABLE SYAEB
+C112;C112;1109 1164 11B9;C112;1109 1164 11B9; # (섒; 섒; 섒; 섒; 섒; ) HANGUL SYLLABLE SYAEBS
+C113;C113;1109 1164 11BA;C113;1109 1164 11BA; # (섓; 섓; 섓; 섓; 섓; ) HANGUL SYLLABLE SYAES
+C114;C114;1109 1164 11BB;C114;1109 1164 11BB; # (섔; 섔; 섔; 섔; 섔; ) HANGUL SYLLABLE SYAESS
+C115;C115;1109 1164 11BC;C115;1109 1164 11BC; # (섕; 섕; 섕; 섕; 섕; ) HANGUL SYLLABLE SYAENG
+C116;C116;1109 1164 11BD;C116;1109 1164 11BD; # (섖; 섖; 섖; 섖; 섖; ) HANGUL SYLLABLE SYAEJ
+C117;C117;1109 1164 11BE;C117;1109 1164 11BE; # (섗; 섗; 섗; 섗; 섗; ) HANGUL SYLLABLE SYAEC
+C118;C118;1109 1164 11BF;C118;1109 1164 11BF; # (섘; 섘; 섘; 섘; 섘; ) HANGUL SYLLABLE SYAEK
+C119;C119;1109 1164 11C0;C119;1109 1164 11C0; # (섙; 섙; 섙; 섙; 섙; ) HANGUL SYLLABLE SYAET
+C11A;C11A;1109 1164 11C1;C11A;1109 1164 11C1; # (섚; 섚; 섚; 섚; 섚; ) HANGUL SYLLABLE SYAEP
+C11B;C11B;1109 1164 11C2;C11B;1109 1164 11C2; # (섛; 섛; 섛; 섛; 섛; ) HANGUL SYLLABLE SYAEH
+C11C;C11C;1109 1165;C11C;1109 1165; # (서; 서; 서; 서; 서; ) HANGUL SYLLABLE SEO
+C11D;C11D;1109 1165 11A8;C11D;1109 1165 11A8; # (석; 석; 석; 석; 석; ) HANGUL SYLLABLE SEOG
+C11E;C11E;1109 1165 11A9;C11E;1109 1165 11A9; # (섞; 섞; 섞; 섞; 섞; ) HANGUL SYLLABLE SEOGG
+C11F;C11F;1109 1165 11AA;C11F;1109 1165 11AA; # (섟; 섟; 섟; 섟; 섟; ) HANGUL SYLLABLE SEOGS
+C120;C120;1109 1165 11AB;C120;1109 1165 11AB; # (선; 선; 선; 선; 선; ) HANGUL SYLLABLE SEON
+C121;C121;1109 1165 11AC;C121;1109 1165 11AC; # (섡; 섡; 섡; 섡; 섡; ) HANGUL SYLLABLE SEONJ
+C122;C122;1109 1165 11AD;C122;1109 1165 11AD; # (섢; 섢; 섢; 섢; 섢; ) HANGUL SYLLABLE SEONH
+C123;C123;1109 1165 11AE;C123;1109 1165 11AE; # (섣; 섣; 섣; 섣; 섣; ) HANGUL SYLLABLE SEOD
+C124;C124;1109 1165 11AF;C124;1109 1165 11AF; # (설; 설; 설; 설; 설; ) HANGUL SYLLABLE SEOL
+C125;C125;1109 1165 11B0;C125;1109 1165 11B0; # (섥; 섥; 섥; 섥; 섥; ) HANGUL SYLLABLE SEOLG
+C126;C126;1109 1165 11B1;C126;1109 1165 11B1; # (섦; 섦; 섦; 섦; 섦; ) HANGUL SYLLABLE SEOLM
+C127;C127;1109 1165 11B2;C127;1109 1165 11B2; # (섧; 섧; 섧; 섧; 섧; ) HANGUL SYLLABLE SEOLB
+C128;C128;1109 1165 11B3;C128;1109 1165 11B3; # (섨; 섨; 섨; 섨; 섨; ) HANGUL SYLLABLE SEOLS
+C129;C129;1109 1165 11B4;C129;1109 1165 11B4; # (섩; 섩; 섩; 섩; 섩; ) HANGUL SYLLABLE SEOLT
+C12A;C12A;1109 1165 11B5;C12A;1109 1165 11B5; # (섪; 섪; 섪; 섪; 섪; ) HANGUL SYLLABLE SEOLP
+C12B;C12B;1109 1165 11B6;C12B;1109 1165 11B6; # (섫; 섫; 섫; 섫; 섫; ) HANGUL SYLLABLE SEOLH
+C12C;C12C;1109 1165 11B7;C12C;1109 1165 11B7; # (섬; 섬; 섬; 섬; 섬; ) HANGUL SYLLABLE SEOM
+C12D;C12D;1109 1165 11B8;C12D;1109 1165 11B8; # (섭; 섭; 섭; 섭; 섭; ) HANGUL SYLLABLE SEOB
+C12E;C12E;1109 1165 11B9;C12E;1109 1165 11B9; # (섮; 섮; 섮; 섮; 섮; ) HANGUL SYLLABLE SEOBS
+C12F;C12F;1109 1165 11BA;C12F;1109 1165 11BA; # (섯; 섯; 섯; 섯; 섯; ) HANGUL SYLLABLE SEOS
+C130;C130;1109 1165 11BB;C130;1109 1165 11BB; # (섰; 섰; 섰; 섰; 섰; ) HANGUL SYLLABLE SEOSS
+C131;C131;1109 1165 11BC;C131;1109 1165 11BC; # (성; 성; 성; 성; 성; ) HANGUL SYLLABLE SEONG
+C132;C132;1109 1165 11BD;C132;1109 1165 11BD; # (섲; 섲; 섲; 섲; 섲; ) HANGUL SYLLABLE SEOJ
+C133;C133;1109 1165 11BE;C133;1109 1165 11BE; # (섳; 섳; 섳; 섳; 섳; ) HANGUL SYLLABLE SEOC
+C134;C134;1109 1165 11BF;C134;1109 1165 11BF; # (섴; 섴; 섴; 섴; 섴; ) HANGUL SYLLABLE SEOK
+C135;C135;1109 1165 11C0;C135;1109 1165 11C0; # (섵; 섵; 섵; 섵; 섵; ) HANGUL SYLLABLE SEOT
+C136;C136;1109 1165 11C1;C136;1109 1165 11C1; # (섶; 섶; 섶; 섶; 섶; ) HANGUL SYLLABLE SEOP
+C137;C137;1109 1165 11C2;C137;1109 1165 11C2; # (섷; 섷; 섷; 섷; 섷; ) HANGUL SYLLABLE SEOH
+C138;C138;1109 1166;C138;1109 1166; # (세; 세; 세; 세; 세; ) HANGUL SYLLABLE SE
+C139;C139;1109 1166 11A8;C139;1109 1166 11A8; # (섹; 섹; 섹; 섹; 섹; ) HANGUL SYLLABLE SEG
+C13A;C13A;1109 1166 11A9;C13A;1109 1166 11A9; # (섺; 섺; 섺; 섺; 섺; ) HANGUL SYLLABLE SEGG
+C13B;C13B;1109 1166 11AA;C13B;1109 1166 11AA; # (섻; 섻; 섻; 섻; 섻; ) HANGUL SYLLABLE SEGS
+C13C;C13C;1109 1166 11AB;C13C;1109 1166 11AB; # (센; 센; 센; 센; 센; ) HANGUL SYLLABLE SEN
+C13D;C13D;1109 1166 11AC;C13D;1109 1166 11AC; # (섽; 섽; 섽; 섽; 섽; ) HANGUL SYLLABLE SENJ
+C13E;C13E;1109 1166 11AD;C13E;1109 1166 11AD; # (섾; 섾; 섾; 섾; 섾; ) HANGUL SYLLABLE SENH
+C13F;C13F;1109 1166 11AE;C13F;1109 1166 11AE; # (섿; 섿; 섿; 섿; 섿; ) HANGUL SYLLABLE SED
+C140;C140;1109 1166 11AF;C140;1109 1166 11AF; # (셀; 셀; 셀; 셀; 셀; ) HANGUL SYLLABLE SEL
+C141;C141;1109 1166 11B0;C141;1109 1166 11B0; # (셁; 셁; 셁; 셁; 셁; ) HANGUL SYLLABLE SELG
+C142;C142;1109 1166 11B1;C142;1109 1166 11B1; # (셂; 셂; 셂; 셂; 셂; ) HANGUL SYLLABLE SELM
+C143;C143;1109 1166 11B2;C143;1109 1166 11B2; # (셃; 셃; 셃; 셃; 셃; ) HANGUL SYLLABLE SELB
+C144;C144;1109 1166 11B3;C144;1109 1166 11B3; # (셄; 셄; 셄; 셄; 셄; ) HANGUL SYLLABLE SELS
+C145;C145;1109 1166 11B4;C145;1109 1166 11B4; # (셅; 셅; 셅; 셅; 셅; ) HANGUL SYLLABLE SELT
+C146;C146;1109 1166 11B5;C146;1109 1166 11B5; # (셆; 셆; 셆; 셆; 셆; ) HANGUL SYLLABLE SELP
+C147;C147;1109 1166 11B6;C147;1109 1166 11B6; # (셇; 셇; 셇; 셇; 셇; ) HANGUL SYLLABLE SELH
+C148;C148;1109 1166 11B7;C148;1109 1166 11B7; # (셈; 셈; 셈; 셈; 셈; ) HANGUL SYLLABLE SEM
+C149;C149;1109 1166 11B8;C149;1109 1166 11B8; # (셉; 셉; 셉; 셉; 셉; ) HANGUL SYLLABLE SEB
+C14A;C14A;1109 1166 11B9;C14A;1109 1166 11B9; # (셊; 셊; 셊; 셊; 셊; ) HANGUL SYLLABLE SEBS
+C14B;C14B;1109 1166 11BA;C14B;1109 1166 11BA; # (셋; 셋; 셋; 셋; 셋; ) HANGUL SYLLABLE SES
+C14C;C14C;1109 1166 11BB;C14C;1109 1166 11BB; # (셌; 셌; 셌; 셌; 셌; ) HANGUL SYLLABLE SESS
+C14D;C14D;1109 1166 11BC;C14D;1109 1166 11BC; # (셍; 셍; 셍; 셍; 셍; ) HANGUL SYLLABLE SENG
+C14E;C14E;1109 1166 11BD;C14E;1109 1166 11BD; # (셎; 셎; 셎; 셎; 셎; ) HANGUL SYLLABLE SEJ
+C14F;C14F;1109 1166 11BE;C14F;1109 1166 11BE; # (셏; 셏; 셏; 셏; 셏; ) HANGUL SYLLABLE SEC
+C150;C150;1109 1166 11BF;C150;1109 1166 11BF; # (셐; 셐; 셐; 셐; 셐; ) HANGUL SYLLABLE SEK
+C151;C151;1109 1166 11C0;C151;1109 1166 11C0; # (셑; 셑; 셑; 셑; 셑; ) HANGUL SYLLABLE SET
+C152;C152;1109 1166 11C1;C152;1109 1166 11C1; # (셒; 셒; 셒; 셒; 셒; ) HANGUL SYLLABLE SEP
+C153;C153;1109 1166 11C2;C153;1109 1166 11C2; # (셓; 셓; 셓; 셓; 셓; ) HANGUL SYLLABLE SEH
+C154;C154;1109 1167;C154;1109 1167; # (셔; 셔; 셔; 셔; 셔; ) HANGUL SYLLABLE SYEO
+C155;C155;1109 1167 11A8;C155;1109 1167 11A8; # (셕; 셕; 셕; 셕; 셕; ) HANGUL SYLLABLE SYEOG
+C156;C156;1109 1167 11A9;C156;1109 1167 11A9; # (셖; 셖; 셖; 셖; 셖; ) HANGUL SYLLABLE SYEOGG
+C157;C157;1109 1167 11AA;C157;1109 1167 11AA; # (셗; 셗; 셗; 셗; 셗; ) HANGUL SYLLABLE SYEOGS
+C158;C158;1109 1167 11AB;C158;1109 1167 11AB; # (션; 션; 션; 션; 션; ) HANGUL SYLLABLE SYEON
+C159;C159;1109 1167 11AC;C159;1109 1167 11AC; # (셙; 셙; 셙; 셙; 셙; ) HANGUL SYLLABLE SYEONJ
+C15A;C15A;1109 1167 11AD;C15A;1109 1167 11AD; # (셚; 셚; 셚; 셚; 셚; ) HANGUL SYLLABLE SYEONH
+C15B;C15B;1109 1167 11AE;C15B;1109 1167 11AE; # (셛; 셛; 셛; 셛; 셛; ) HANGUL SYLLABLE SYEOD
+C15C;C15C;1109 1167 11AF;C15C;1109 1167 11AF; # (셜; 셜; 셜; 셜; 셜; ) HANGUL SYLLABLE SYEOL
+C15D;C15D;1109 1167 11B0;C15D;1109 1167 11B0; # (셝; 셝; 셝; 셝; 셝; ) HANGUL SYLLABLE SYEOLG
+C15E;C15E;1109 1167 11B1;C15E;1109 1167 11B1; # (셞; 셞; 셞; 셞; 셞; ) HANGUL SYLLABLE SYEOLM
+C15F;C15F;1109 1167 11B2;C15F;1109 1167 11B2; # (셟; 셟; 셟; 셟; 셟; ) HANGUL SYLLABLE SYEOLB
+C160;C160;1109 1167 11B3;C160;1109 1167 11B3; # (셠; 셠; 셠; 셠; 셠; ) HANGUL SYLLABLE SYEOLS
+C161;C161;1109 1167 11B4;C161;1109 1167 11B4; # (셡; 셡; 셡; 셡; 셡; ) HANGUL SYLLABLE SYEOLT
+C162;C162;1109 1167 11B5;C162;1109 1167 11B5; # (셢; 셢; 셢; 셢; 셢; ) HANGUL SYLLABLE SYEOLP
+C163;C163;1109 1167 11B6;C163;1109 1167 11B6; # (셣; 셣; 셣; 셣; 셣; ) HANGUL SYLLABLE SYEOLH
+C164;C164;1109 1167 11B7;C164;1109 1167 11B7; # (셤; 셤; 셤; 셤; 셤; ) HANGUL SYLLABLE SYEOM
+C165;C165;1109 1167 11B8;C165;1109 1167 11B8; # (셥; 셥; 셥; 셥; 셥; ) HANGUL SYLLABLE SYEOB
+C166;C166;1109 1167 11B9;C166;1109 1167 11B9; # (셦; 셦; 셦; 셦; 셦; ) HANGUL SYLLABLE SYEOBS
+C167;C167;1109 1167 11BA;C167;1109 1167 11BA; # (셧; 셧; 셧; 셧; 셧; ) HANGUL SYLLABLE SYEOS
+C168;C168;1109 1167 11BB;C168;1109 1167 11BB; # (셨; 셨; 셨; 셨; 셨; ) HANGUL SYLLABLE SYEOSS
+C169;C169;1109 1167 11BC;C169;1109 1167 11BC; # (셩; 셩; 셩; 셩; 셩; ) HANGUL SYLLABLE SYEONG
+C16A;C16A;1109 1167 11BD;C16A;1109 1167 11BD; # (셪; 셪; 셪; 셪; 셪; ) HANGUL SYLLABLE SYEOJ
+C16B;C16B;1109 1167 11BE;C16B;1109 1167 11BE; # (셫; 셫; 셫; 셫; 셫; ) HANGUL SYLLABLE SYEOC
+C16C;C16C;1109 1167 11BF;C16C;1109 1167 11BF; # (셬; 셬; 셬; 셬; 셬; ) HANGUL SYLLABLE SYEOK
+C16D;C16D;1109 1167 11C0;C16D;1109 1167 11C0; # (셭; 셭; 셭; 셭; 셭; ) HANGUL SYLLABLE SYEOT
+C16E;C16E;1109 1167 11C1;C16E;1109 1167 11C1; # (셮; 셮; 셮; 셮; 셮; ) HANGUL SYLLABLE SYEOP
+C16F;C16F;1109 1167 11C2;C16F;1109 1167 11C2; # (셯; 셯; 셯; 셯; 셯; ) HANGUL SYLLABLE SYEOH
+C170;C170;1109 1168;C170;1109 1168; # (셰; 셰; 셰; 셰; 셰; ) HANGUL SYLLABLE SYE
+C171;C171;1109 1168 11A8;C171;1109 1168 11A8; # (셱; 셱; 셱; 셱; 셱; ) HANGUL SYLLABLE SYEG
+C172;C172;1109 1168 11A9;C172;1109 1168 11A9; # (셲; 셲; 셲; 셲; 셲; ) HANGUL SYLLABLE SYEGG
+C173;C173;1109 1168 11AA;C173;1109 1168 11AA; # (셳; 셳; 셳; 셳; 셳; ) HANGUL SYLLABLE SYEGS
+C174;C174;1109 1168 11AB;C174;1109 1168 11AB; # (셴; 셴; 셴; 셴; 셴; ) HANGUL SYLLABLE SYEN
+C175;C175;1109 1168 11AC;C175;1109 1168 11AC; # (셵; 셵; 셵; 셵; 셵; ) HANGUL SYLLABLE SYENJ
+C176;C176;1109 1168 11AD;C176;1109 1168 11AD; # (셶; 셶; 셶; 셶; 셶; ) HANGUL SYLLABLE SYENH
+C177;C177;1109 1168 11AE;C177;1109 1168 11AE; # (셷; 셷; 셷; 셷; 셷; ) HANGUL SYLLABLE SYED
+C178;C178;1109 1168 11AF;C178;1109 1168 11AF; # (셸; 셸; 셸; 셸; 셸; ) HANGUL SYLLABLE SYEL
+C179;C179;1109 1168 11B0;C179;1109 1168 11B0; # (셹; 셹; 셹; 셹; 셹; ) HANGUL SYLLABLE SYELG
+C17A;C17A;1109 1168 11B1;C17A;1109 1168 11B1; # (셺; 셺; 셺; 셺; 셺; ) HANGUL SYLLABLE SYELM
+C17B;C17B;1109 1168 11B2;C17B;1109 1168 11B2; # (셻; 셻; 셻; 셻; 셻; ) HANGUL SYLLABLE SYELB
+C17C;C17C;1109 1168 11B3;C17C;1109 1168 11B3; # (셼; 셼; 셼; 셼; 셼; ) HANGUL SYLLABLE SYELS
+C17D;C17D;1109 1168 11B4;C17D;1109 1168 11B4; # (셽; 셽; 셽; 셽; 셽; ) HANGUL SYLLABLE SYELT
+C17E;C17E;1109 1168 11B5;C17E;1109 1168 11B5; # (셾; 셾; 셾; 셾; 셾; ) HANGUL SYLLABLE SYELP
+C17F;C17F;1109 1168 11B6;C17F;1109 1168 11B6; # (셿; 셿; 셿; 셿; 셿; ) HANGUL SYLLABLE SYELH
+C180;C180;1109 1168 11B7;C180;1109 1168 11B7; # (솀; 솀; 솀; 솀; 솀; ) HANGUL SYLLABLE SYEM
+C181;C181;1109 1168 11B8;C181;1109 1168 11B8; # (솁; 솁; 솁; 솁; 솁; ) HANGUL SYLLABLE SYEB
+C182;C182;1109 1168 11B9;C182;1109 1168 11B9; # (솂; 솂; 솂; 솂; 솂; ) HANGUL SYLLABLE SYEBS
+C183;C183;1109 1168 11BA;C183;1109 1168 11BA; # (솃; 솃; 솃; 솃; 솃; ) HANGUL SYLLABLE SYES
+C184;C184;1109 1168 11BB;C184;1109 1168 11BB; # (솄; 솄; 솄; 솄; 솄; ) HANGUL SYLLABLE SYESS
+C185;C185;1109 1168 11BC;C185;1109 1168 11BC; # (솅; 솅; 솅; 솅; 솅; ) HANGUL SYLLABLE SYENG
+C186;C186;1109 1168 11BD;C186;1109 1168 11BD; # (솆; 솆; 솆; 솆; 솆; ) HANGUL SYLLABLE SYEJ
+C187;C187;1109 1168 11BE;C187;1109 1168 11BE; # (솇; 솇; 솇; 솇; 솇; ) HANGUL SYLLABLE SYEC
+C188;C188;1109 1168 11BF;C188;1109 1168 11BF; # (솈; 솈; 솈; 솈; 솈; ) HANGUL SYLLABLE SYEK
+C189;C189;1109 1168 11C0;C189;1109 1168 11C0; # (솉; 솉; 솉; 솉; 솉; ) HANGUL SYLLABLE SYET
+C18A;C18A;1109 1168 11C1;C18A;1109 1168 11C1; # (솊; 솊; 솊; 솊; 솊; ) HANGUL SYLLABLE SYEP
+C18B;C18B;1109 1168 11C2;C18B;1109 1168 11C2; # (솋; 솋; 솋; 솋; 솋; ) HANGUL SYLLABLE SYEH
+C18C;C18C;1109 1169;C18C;1109 1169; # (소; 소; 소; 소; 소; ) HANGUL SYLLABLE SO
+C18D;C18D;1109 1169 11A8;C18D;1109 1169 11A8; # (속; 속; 속; 속; 속; ) HANGUL SYLLABLE SOG
+C18E;C18E;1109 1169 11A9;C18E;1109 1169 11A9; # (솎; 솎; 솎; 솎; 솎; ) HANGUL SYLLABLE SOGG
+C18F;C18F;1109 1169 11AA;C18F;1109 1169 11AA; # (솏; 솏; 솏; 솏; 솏; ) HANGUL SYLLABLE SOGS
+C190;C190;1109 1169 11AB;C190;1109 1169 11AB; # (손; 손; 손; 손; 손; ) HANGUL SYLLABLE SON
+C191;C191;1109 1169 11AC;C191;1109 1169 11AC; # (솑; 솑; 솑; 솑; 솑; ) HANGUL SYLLABLE SONJ
+C192;C192;1109 1169 11AD;C192;1109 1169 11AD; # (솒; 솒; 솒; 솒; 솒; ) HANGUL SYLLABLE SONH
+C193;C193;1109 1169 11AE;C193;1109 1169 11AE; # (솓; 솓; 솓; 솓; 솓; ) HANGUL SYLLABLE SOD
+C194;C194;1109 1169 11AF;C194;1109 1169 11AF; # (솔; 솔; 솔; 솔; 솔; ) HANGUL SYLLABLE SOL
+C195;C195;1109 1169 11B0;C195;1109 1169 11B0; # (솕; 솕; 솕; 솕; 솕; ) HANGUL SYLLABLE SOLG
+C196;C196;1109 1169 11B1;C196;1109 1169 11B1; # (솖; 솖; 솖; 솖; 솖; ) HANGUL SYLLABLE SOLM
+C197;C197;1109 1169 11B2;C197;1109 1169 11B2; # (솗; 솗; 솗; 솗; 솗; ) HANGUL SYLLABLE SOLB
+C198;C198;1109 1169 11B3;C198;1109 1169 11B3; # (솘; 솘; 솘; 솘; 솘; ) HANGUL SYLLABLE SOLS
+C199;C199;1109 1169 11B4;C199;1109 1169 11B4; # (솙; 솙; 솙; 솙; 솙; ) HANGUL SYLLABLE SOLT
+C19A;C19A;1109 1169 11B5;C19A;1109 1169 11B5; # (솚; 솚; 솚; 솚; 솚; ) HANGUL SYLLABLE SOLP
+C19B;C19B;1109 1169 11B6;C19B;1109 1169 11B6; # (솛; 솛; 솛; 솛; 솛; ) HANGUL SYLLABLE SOLH
+C19C;C19C;1109 1169 11B7;C19C;1109 1169 11B7; # (솜; 솜; 솜; 솜; 솜; ) HANGUL SYLLABLE SOM
+C19D;C19D;1109 1169 11B8;C19D;1109 1169 11B8; # (솝; 솝; 솝; 솝; 솝; ) HANGUL SYLLABLE SOB
+C19E;C19E;1109 1169 11B9;C19E;1109 1169 11B9; # (솞; 솞; 솞; 솞; 솞; ) HANGUL SYLLABLE SOBS
+C19F;C19F;1109 1169 11BA;C19F;1109 1169 11BA; # (솟; 솟; 솟; 솟; 솟; ) HANGUL SYLLABLE SOS
+C1A0;C1A0;1109 1169 11BB;C1A0;1109 1169 11BB; # (솠; 솠; 솠; 솠; 솠; ) HANGUL SYLLABLE SOSS
+C1A1;C1A1;1109 1169 11BC;C1A1;1109 1169 11BC; # (송; 송; 송; 송; 송; ) HANGUL SYLLABLE SONG
+C1A2;C1A2;1109 1169 11BD;C1A2;1109 1169 11BD; # (솢; 솢; 솢; 솢; 솢; ) HANGUL SYLLABLE SOJ
+C1A3;C1A3;1109 1169 11BE;C1A3;1109 1169 11BE; # (솣; 솣; 솣; 솣; 솣; ) HANGUL SYLLABLE SOC
+C1A4;C1A4;1109 1169 11BF;C1A4;1109 1169 11BF; # (솤; 솤; 솤; 솤; 솤; ) HANGUL SYLLABLE SOK
+C1A5;C1A5;1109 1169 11C0;C1A5;1109 1169 11C0; # (솥; 솥; 솥; 솥; 솥; ) HANGUL SYLLABLE SOT
+C1A6;C1A6;1109 1169 11C1;C1A6;1109 1169 11C1; # (솦; 솦; 솦; 솦; 솦; ) HANGUL SYLLABLE SOP
+C1A7;C1A7;1109 1169 11C2;C1A7;1109 1169 11C2; # (솧; 솧; 솧; 솧; 솧; ) HANGUL SYLLABLE SOH
+C1A8;C1A8;1109 116A;C1A8;1109 116A; # (솨; 솨; 솨; 솨; 솨; ) HANGUL SYLLABLE SWA
+C1A9;C1A9;1109 116A 11A8;C1A9;1109 116A 11A8; # (솩; 솩; 솩; 솩; 솩; ) HANGUL SYLLABLE SWAG
+C1AA;C1AA;1109 116A 11A9;C1AA;1109 116A 11A9; # (솪; 솪; 솪; 솪; 솪; ) HANGUL SYLLABLE SWAGG
+C1AB;C1AB;1109 116A 11AA;C1AB;1109 116A 11AA; # (솫; 솫; 솫; 솫; 솫; ) HANGUL SYLLABLE SWAGS
+C1AC;C1AC;1109 116A 11AB;C1AC;1109 116A 11AB; # (솬; 솬; 솬; 솬; 솬; ) HANGUL SYLLABLE SWAN
+C1AD;C1AD;1109 116A 11AC;C1AD;1109 116A 11AC; # (솭; 솭; 솭; 솭; 솭; ) HANGUL SYLLABLE SWANJ
+C1AE;C1AE;1109 116A 11AD;C1AE;1109 116A 11AD; # (솮; 솮; 솮; 솮; 솮; ) HANGUL SYLLABLE SWANH
+C1AF;C1AF;1109 116A 11AE;C1AF;1109 116A 11AE; # (솯; 솯; 솯; 솯; 솯; ) HANGUL SYLLABLE SWAD
+C1B0;C1B0;1109 116A 11AF;C1B0;1109 116A 11AF; # (솰; 솰; 솰; 솰; 솰; ) HANGUL SYLLABLE SWAL
+C1B1;C1B1;1109 116A 11B0;C1B1;1109 116A 11B0; # (솱; 솱; 솱; 솱; 솱; ) HANGUL SYLLABLE SWALG
+C1B2;C1B2;1109 116A 11B1;C1B2;1109 116A 11B1; # (솲; 솲; 솲; 솲; 솲; ) HANGUL SYLLABLE SWALM
+C1B3;C1B3;1109 116A 11B2;C1B3;1109 116A 11B2; # (솳; 솳; 솳; 솳; 솳; ) HANGUL SYLLABLE SWALB
+C1B4;C1B4;1109 116A 11B3;C1B4;1109 116A 11B3; # (솴; 솴; 솴; 솴; 솴; ) HANGUL SYLLABLE SWALS
+C1B5;C1B5;1109 116A 11B4;C1B5;1109 116A 11B4; # (솵; 솵; 솵; 솵; 솵; ) HANGUL SYLLABLE SWALT
+C1B6;C1B6;1109 116A 11B5;C1B6;1109 116A 11B5; # (솶; 솶; 솶; 솶; 솶; ) HANGUL SYLLABLE SWALP
+C1B7;C1B7;1109 116A 11B6;C1B7;1109 116A 11B6; # (솷; 솷; 솷; 솷; 솷; ) HANGUL SYLLABLE SWALH
+C1B8;C1B8;1109 116A 11B7;C1B8;1109 116A 11B7; # (솸; 솸; 솸; 솸; 솸; ) HANGUL SYLLABLE SWAM
+C1B9;C1B9;1109 116A 11B8;C1B9;1109 116A 11B8; # (솹; 솹; 솹; 솹; 솹; ) HANGUL SYLLABLE SWAB
+C1BA;C1BA;1109 116A 11B9;C1BA;1109 116A 11B9; # (솺; 솺; 솺; 솺; 솺; ) HANGUL SYLLABLE SWABS
+C1BB;C1BB;1109 116A 11BA;C1BB;1109 116A 11BA; # (솻; 솻; 솻; 솻; 솻; ) HANGUL SYLLABLE SWAS
+C1BC;C1BC;1109 116A 11BB;C1BC;1109 116A 11BB; # (솼; 솼; 솼; 솼; 솼; ) HANGUL SYLLABLE SWASS
+C1BD;C1BD;1109 116A 11BC;C1BD;1109 116A 11BC; # (솽; 솽; 솽; 솽; 솽; ) HANGUL SYLLABLE SWANG
+C1BE;C1BE;1109 116A 11BD;C1BE;1109 116A 11BD; # (솾; 솾; 솾; 솾; 솾; ) HANGUL SYLLABLE SWAJ
+C1BF;C1BF;1109 116A 11BE;C1BF;1109 116A 11BE; # (솿; 솿; 솿; 솿; 솿; ) HANGUL SYLLABLE SWAC
+C1C0;C1C0;1109 116A 11BF;C1C0;1109 116A 11BF; # (쇀; 쇀; 쇀; 쇀; 쇀; ) HANGUL SYLLABLE SWAK
+C1C1;C1C1;1109 116A 11C0;C1C1;1109 116A 11C0; # (쇁; 쇁; 쇁; 쇁; 쇁; ) HANGUL SYLLABLE SWAT
+C1C2;C1C2;1109 116A 11C1;C1C2;1109 116A 11C1; # (쇂; 쇂; 쇂; 쇂; 쇂; ) HANGUL SYLLABLE SWAP
+C1C3;C1C3;1109 116A 11C2;C1C3;1109 116A 11C2; # (쇃; 쇃; 쇃; 쇃; 쇃; ) HANGUL SYLLABLE SWAH
+C1C4;C1C4;1109 116B;C1C4;1109 116B; # (쇄; 쇄; 쇄; 쇄; 쇄; ) HANGUL SYLLABLE SWAE
+C1C5;C1C5;1109 116B 11A8;C1C5;1109 116B 11A8; # (쇅; 쇅; 쇅; 쇅; 쇅; ) HANGUL SYLLABLE SWAEG
+C1C6;C1C6;1109 116B 11A9;C1C6;1109 116B 11A9; # (쇆; 쇆; 쇆; 쇆; 쇆; ) HANGUL SYLLABLE SWAEGG
+C1C7;C1C7;1109 116B 11AA;C1C7;1109 116B 11AA; # (쇇; 쇇; 쇇; 쇇; 쇇; ) HANGUL SYLLABLE SWAEGS
+C1C8;C1C8;1109 116B 11AB;C1C8;1109 116B 11AB; # (쇈; 쇈; 쇈; 쇈; 쇈; ) HANGUL SYLLABLE SWAEN
+C1C9;C1C9;1109 116B 11AC;C1C9;1109 116B 11AC; # (쇉; 쇉; 쇉; 쇉; 쇉; ) HANGUL SYLLABLE SWAENJ
+C1CA;C1CA;1109 116B 11AD;C1CA;1109 116B 11AD; # (쇊; 쇊; 쇊; 쇊; 쇊; ) HANGUL SYLLABLE SWAENH
+C1CB;C1CB;1109 116B 11AE;C1CB;1109 116B 11AE; # (쇋; 쇋; 쇋; 쇋; 쇋; ) HANGUL SYLLABLE SWAED
+C1CC;C1CC;1109 116B 11AF;C1CC;1109 116B 11AF; # (쇌; 쇌; 쇌; 쇌; 쇌; ) HANGUL SYLLABLE SWAEL
+C1CD;C1CD;1109 116B 11B0;C1CD;1109 116B 11B0; # (쇍; 쇍; 쇍; 쇍; 쇍; ) HANGUL SYLLABLE SWAELG
+C1CE;C1CE;1109 116B 11B1;C1CE;1109 116B 11B1; # (쇎; 쇎; 쇎; 쇎; 쇎; ) HANGUL SYLLABLE SWAELM
+C1CF;C1CF;1109 116B 11B2;C1CF;1109 116B 11B2; # (쇏; 쇏; 쇏; 쇏; 쇏; ) HANGUL SYLLABLE SWAELB
+C1D0;C1D0;1109 116B 11B3;C1D0;1109 116B 11B3; # (쇐; 쇐; 쇐; 쇐; 쇐; ) HANGUL SYLLABLE SWAELS
+C1D1;C1D1;1109 116B 11B4;C1D1;1109 116B 11B4; # (쇑; 쇑; 쇑; 쇑; 쇑; ) HANGUL SYLLABLE SWAELT
+C1D2;C1D2;1109 116B 11B5;C1D2;1109 116B 11B5; # (쇒; 쇒; 쇒; 쇒; 쇒; ) HANGUL SYLLABLE SWAELP
+C1D3;C1D3;1109 116B 11B6;C1D3;1109 116B 11B6; # (쇓; 쇓; 쇓; 쇓; 쇓; ) HANGUL SYLLABLE SWAELH
+C1D4;C1D4;1109 116B 11B7;C1D4;1109 116B 11B7; # (쇔; 쇔; 쇔; 쇔; 쇔; ) HANGUL SYLLABLE SWAEM
+C1D5;C1D5;1109 116B 11B8;C1D5;1109 116B 11B8; # (쇕; 쇕; 쇕; 쇕; 쇕; ) HANGUL SYLLABLE SWAEB
+C1D6;C1D6;1109 116B 11B9;C1D6;1109 116B 11B9; # (쇖; 쇖; 쇖; 쇖; 쇖; ) HANGUL SYLLABLE SWAEBS
+C1D7;C1D7;1109 116B 11BA;C1D7;1109 116B 11BA; # (쇗; 쇗; 쇗; 쇗; 쇗; ) HANGUL SYLLABLE SWAES
+C1D8;C1D8;1109 116B 11BB;C1D8;1109 116B 11BB; # (쇘; 쇘; 쇘; 쇘; 쇘; ) HANGUL SYLLABLE SWAESS
+C1D9;C1D9;1109 116B 11BC;C1D9;1109 116B 11BC; # (쇙; 쇙; 쇙; 쇙; 쇙; ) HANGUL SYLLABLE SWAENG
+C1DA;C1DA;1109 116B 11BD;C1DA;1109 116B 11BD; # (쇚; 쇚; 쇚; 쇚; 쇚; ) HANGUL SYLLABLE SWAEJ
+C1DB;C1DB;1109 116B 11BE;C1DB;1109 116B 11BE; # (쇛; 쇛; 쇛; 쇛; 쇛; ) HANGUL SYLLABLE SWAEC
+C1DC;C1DC;1109 116B 11BF;C1DC;1109 116B 11BF; # (쇜; 쇜; 쇜; 쇜; 쇜; ) HANGUL SYLLABLE SWAEK
+C1DD;C1DD;1109 116B 11C0;C1DD;1109 116B 11C0; # (쇝; 쇝; 쇝; 쇝; 쇝; ) HANGUL SYLLABLE SWAET
+C1DE;C1DE;1109 116B 11C1;C1DE;1109 116B 11C1; # (쇞; 쇞; 쇞; 쇞; 쇞; ) HANGUL SYLLABLE SWAEP
+C1DF;C1DF;1109 116B 11C2;C1DF;1109 116B 11C2; # (쇟; 쇟; 쇟; 쇟; 쇟; ) HANGUL SYLLABLE SWAEH
+C1E0;C1E0;1109 116C;C1E0;1109 116C; # (쇠; 쇠; 쇠; 쇠; 쇠; ) HANGUL SYLLABLE SOE
+C1E1;C1E1;1109 116C 11A8;C1E1;1109 116C 11A8; # (쇡; 쇡; 쇡; 쇡; 쇡; ) HANGUL SYLLABLE SOEG
+C1E2;C1E2;1109 116C 11A9;C1E2;1109 116C 11A9; # (쇢; 쇢; 쇢; 쇢; 쇢; ) HANGUL SYLLABLE SOEGG
+C1E3;C1E3;1109 116C 11AA;C1E3;1109 116C 11AA; # (쇣; 쇣; 쇣; 쇣; 쇣; ) HANGUL SYLLABLE SOEGS
+C1E4;C1E4;1109 116C 11AB;C1E4;1109 116C 11AB; # (쇤; 쇤; 쇤; 쇤; 쇤; ) HANGUL SYLLABLE SOEN
+C1E5;C1E5;1109 116C 11AC;C1E5;1109 116C 11AC; # (쇥; 쇥; 쇥; 쇥; 쇥; ) HANGUL SYLLABLE SOENJ
+C1E6;C1E6;1109 116C 11AD;C1E6;1109 116C 11AD; # (쇦; 쇦; 쇦; 쇦; 쇦; ) HANGUL SYLLABLE SOENH
+C1E7;C1E7;1109 116C 11AE;C1E7;1109 116C 11AE; # (쇧; 쇧; 쇧; 쇧; 쇧; ) HANGUL SYLLABLE SOED
+C1E8;C1E8;1109 116C 11AF;C1E8;1109 116C 11AF; # (쇨; 쇨; 쇨; 쇨; 쇨; ) HANGUL SYLLABLE SOEL
+C1E9;C1E9;1109 116C 11B0;C1E9;1109 116C 11B0; # (쇩; 쇩; 쇩; 쇩; 쇩; ) HANGUL SYLLABLE SOELG
+C1EA;C1EA;1109 116C 11B1;C1EA;1109 116C 11B1; # (쇪; 쇪; 쇪; 쇪; 쇪; ) HANGUL SYLLABLE SOELM
+C1EB;C1EB;1109 116C 11B2;C1EB;1109 116C 11B2; # (쇫; 쇫; 쇫; 쇫; 쇫; ) HANGUL SYLLABLE SOELB
+C1EC;C1EC;1109 116C 11B3;C1EC;1109 116C 11B3; # (쇬; 쇬; 쇬; 쇬; 쇬; ) HANGUL SYLLABLE SOELS
+C1ED;C1ED;1109 116C 11B4;C1ED;1109 116C 11B4; # (쇭; 쇭; 쇭; 쇭; 쇭; ) HANGUL SYLLABLE SOELT
+C1EE;C1EE;1109 116C 11B5;C1EE;1109 116C 11B5; # (쇮; 쇮; 쇮; 쇮; 쇮; ) HANGUL SYLLABLE SOELP
+C1EF;C1EF;1109 116C 11B6;C1EF;1109 116C 11B6; # (쇯; 쇯; 쇯; 쇯; 쇯; ) HANGUL SYLLABLE SOELH
+C1F0;C1F0;1109 116C 11B7;C1F0;1109 116C 11B7; # (쇰; 쇰; 쇰; 쇰; 쇰; ) HANGUL SYLLABLE SOEM
+C1F1;C1F1;1109 116C 11B8;C1F1;1109 116C 11B8; # (쇱; 쇱; 쇱; 쇱; 쇱; ) HANGUL SYLLABLE SOEB
+C1F2;C1F2;1109 116C 11B9;C1F2;1109 116C 11B9; # (쇲; 쇲; 쇲; 쇲; 쇲; ) HANGUL SYLLABLE SOEBS
+C1F3;C1F3;1109 116C 11BA;C1F3;1109 116C 11BA; # (쇳; 쇳; 쇳; 쇳; 쇳; ) HANGUL SYLLABLE SOES
+C1F4;C1F4;1109 116C 11BB;C1F4;1109 116C 11BB; # (쇴; 쇴; 쇴; 쇴; 쇴; ) HANGUL SYLLABLE SOESS
+C1F5;C1F5;1109 116C 11BC;C1F5;1109 116C 11BC; # (쇵; 쇵; 쇵; 쇵; 쇵; ) HANGUL SYLLABLE SOENG
+C1F6;C1F6;1109 116C 11BD;C1F6;1109 116C 11BD; # (쇶; 쇶; 쇶; 쇶; 쇶; ) HANGUL SYLLABLE SOEJ
+C1F7;C1F7;1109 116C 11BE;C1F7;1109 116C 11BE; # (쇷; 쇷; 쇷; 쇷; 쇷; ) HANGUL SYLLABLE SOEC
+C1F8;C1F8;1109 116C 11BF;C1F8;1109 116C 11BF; # (쇸; 쇸; 쇸; 쇸; 쇸; ) HANGUL SYLLABLE SOEK
+C1F9;C1F9;1109 116C 11C0;C1F9;1109 116C 11C0; # (쇹; 쇹; 쇹; 쇹; 쇹; ) HANGUL SYLLABLE SOET
+C1FA;C1FA;1109 116C 11C1;C1FA;1109 116C 11C1; # (쇺; 쇺; 쇺; 쇺; 쇺; ) HANGUL SYLLABLE SOEP
+C1FB;C1FB;1109 116C 11C2;C1FB;1109 116C 11C2; # (쇻; 쇻; 쇻; 쇻; 쇻; ) HANGUL SYLLABLE SOEH
+C1FC;C1FC;1109 116D;C1FC;1109 116D; # (쇼; 쇼; 쇼; 쇼; 쇼; ) HANGUL SYLLABLE SYO
+C1FD;C1FD;1109 116D 11A8;C1FD;1109 116D 11A8; # (쇽; 쇽; 쇽; 쇽; 쇽; ) HANGUL SYLLABLE SYOG
+C1FE;C1FE;1109 116D 11A9;C1FE;1109 116D 11A9; # (쇾; 쇾; 쇾; 쇾; 쇾; ) HANGUL SYLLABLE SYOGG
+C1FF;C1FF;1109 116D 11AA;C1FF;1109 116D 11AA; # (쇿; 쇿; 쇿; 쇿; 쇿; ) HANGUL SYLLABLE SYOGS
+C200;C200;1109 116D 11AB;C200;1109 116D 11AB; # (숀; 숀; 숀; 숀; 숀; ) HANGUL SYLLABLE SYON
+C201;C201;1109 116D 11AC;C201;1109 116D 11AC; # (숁; 숁; 숁; 숁; 숁; ) HANGUL SYLLABLE SYONJ
+C202;C202;1109 116D 11AD;C202;1109 116D 11AD; # (숂; 숂; 숂; 숂; 숂; ) HANGUL SYLLABLE SYONH
+C203;C203;1109 116D 11AE;C203;1109 116D 11AE; # (숃; 숃; 숃; 숃; 숃; ) HANGUL SYLLABLE SYOD
+C204;C204;1109 116D 11AF;C204;1109 116D 11AF; # (숄; 숄; 숄; 숄; 숄; ) HANGUL SYLLABLE SYOL
+C205;C205;1109 116D 11B0;C205;1109 116D 11B0; # (숅; 숅; 숅; 숅; 숅; ) HANGUL SYLLABLE SYOLG
+C206;C206;1109 116D 11B1;C206;1109 116D 11B1; # (숆; 숆; 숆; 숆; 숆; ) HANGUL SYLLABLE SYOLM
+C207;C207;1109 116D 11B2;C207;1109 116D 11B2; # (숇; 숇; 숇; 숇; 숇; ) HANGUL SYLLABLE SYOLB
+C208;C208;1109 116D 11B3;C208;1109 116D 11B3; # (숈; 숈; 숈; 숈; 숈; ) HANGUL SYLLABLE SYOLS
+C209;C209;1109 116D 11B4;C209;1109 116D 11B4; # (숉; 숉; 숉; 숉; 숉; ) HANGUL SYLLABLE SYOLT
+C20A;C20A;1109 116D 11B5;C20A;1109 116D 11B5; # (숊; 숊; 숊; 숊; 숊; ) HANGUL SYLLABLE SYOLP
+C20B;C20B;1109 116D 11B6;C20B;1109 116D 11B6; # (숋; 숋; 숋; 숋; 숋; ) HANGUL SYLLABLE SYOLH
+C20C;C20C;1109 116D 11B7;C20C;1109 116D 11B7; # (숌; 숌; 숌; 숌; 숌; ) HANGUL SYLLABLE SYOM
+C20D;C20D;1109 116D 11B8;C20D;1109 116D 11B8; # (숍; 숍; 숍; 숍; 숍; ) HANGUL SYLLABLE SYOB
+C20E;C20E;1109 116D 11B9;C20E;1109 116D 11B9; # (숎; 숎; 숎; 숎; 숎; ) HANGUL SYLLABLE SYOBS
+C20F;C20F;1109 116D 11BA;C20F;1109 116D 11BA; # (숏; 숏; 숏; 숏; 숏; ) HANGUL SYLLABLE SYOS
+C210;C210;1109 116D 11BB;C210;1109 116D 11BB; # (숐; 숐; 숐; 숐; 숐; ) HANGUL SYLLABLE SYOSS
+C211;C211;1109 116D 11BC;C211;1109 116D 11BC; # (숑; 숑; 숑; 숑; 숑; ) HANGUL SYLLABLE SYONG
+C212;C212;1109 116D 11BD;C212;1109 116D 11BD; # (숒; 숒; 숒; 숒; 숒; ) HANGUL SYLLABLE SYOJ
+C213;C213;1109 116D 11BE;C213;1109 116D 11BE; # (숓; 숓; 숓; 숓; 숓; ) HANGUL SYLLABLE SYOC
+C214;C214;1109 116D 11BF;C214;1109 116D 11BF; # (숔; 숔; 숔; 숔; 숔; ) HANGUL SYLLABLE SYOK
+C215;C215;1109 116D 11C0;C215;1109 116D 11C0; # (숕; 숕; 숕; 숕; 숕; ) HANGUL SYLLABLE SYOT
+C216;C216;1109 116D 11C1;C216;1109 116D 11C1; # (숖; 숖; 숖; 숖; 숖; ) HANGUL SYLLABLE SYOP
+C217;C217;1109 116D 11C2;C217;1109 116D 11C2; # (숗; 숗; 숗; 숗; 숗; ) HANGUL SYLLABLE SYOH
+C218;C218;1109 116E;C218;1109 116E; # (수; 수; 수; 수; 수; ) HANGUL SYLLABLE SU
+C219;C219;1109 116E 11A8;C219;1109 116E 11A8; # (숙; 숙; 숙; 숙; 숙; ) HANGUL SYLLABLE SUG
+C21A;C21A;1109 116E 11A9;C21A;1109 116E 11A9; # (숚; 숚; 숚; 숚; 숚; ) HANGUL SYLLABLE SUGG
+C21B;C21B;1109 116E 11AA;C21B;1109 116E 11AA; # (숛; 숛; 숛; 숛; 숛; ) HANGUL SYLLABLE SUGS
+C21C;C21C;1109 116E 11AB;C21C;1109 116E 11AB; # (순; 순; 순; 순; 순; ) HANGUL SYLLABLE SUN
+C21D;C21D;1109 116E 11AC;C21D;1109 116E 11AC; # (숝; 숝; 숝; 숝; 숝; ) HANGUL SYLLABLE SUNJ
+C21E;C21E;1109 116E 11AD;C21E;1109 116E 11AD; # (숞; 숞; 숞; 숞; 숞; ) HANGUL SYLLABLE SUNH
+C21F;C21F;1109 116E 11AE;C21F;1109 116E 11AE; # (숟; 숟; 숟; 숟; 숟; ) HANGUL SYLLABLE SUD
+C220;C220;1109 116E 11AF;C220;1109 116E 11AF; # (술; 술; 술; 술; 술; ) HANGUL SYLLABLE SUL
+C221;C221;1109 116E 11B0;C221;1109 116E 11B0; # (숡; 숡; 숡; 숡; 숡; ) HANGUL SYLLABLE SULG
+C222;C222;1109 116E 11B1;C222;1109 116E 11B1; # (숢; 숢; 숢; 숢; 숢; ) HANGUL SYLLABLE SULM
+C223;C223;1109 116E 11B2;C223;1109 116E 11B2; # (숣; 숣; 숣; 숣; 숣; ) HANGUL SYLLABLE SULB
+C224;C224;1109 116E 11B3;C224;1109 116E 11B3; # (숤; 숤; 숤; 숤; 숤; ) HANGUL SYLLABLE SULS
+C225;C225;1109 116E 11B4;C225;1109 116E 11B4; # (숥; 숥; 숥; 숥; 숥; ) HANGUL SYLLABLE SULT
+C226;C226;1109 116E 11B5;C226;1109 116E 11B5; # (숦; 숦; 숦; 숦; 숦; ) HANGUL SYLLABLE SULP
+C227;C227;1109 116E 11B6;C227;1109 116E 11B6; # (숧; 숧; 숧; 숧; 숧; ) HANGUL SYLLABLE SULH
+C228;C228;1109 116E 11B7;C228;1109 116E 11B7; # (숨; 숨; 숨; 숨; 숨; ) HANGUL SYLLABLE SUM
+C229;C229;1109 116E 11B8;C229;1109 116E 11B8; # (숩; 숩; 숩; 숩; 숩; ) HANGUL SYLLABLE SUB
+C22A;C22A;1109 116E 11B9;C22A;1109 116E 11B9; # (숪; 숪; 숪; 숪; 숪; ) HANGUL SYLLABLE SUBS
+C22B;C22B;1109 116E 11BA;C22B;1109 116E 11BA; # (숫; 숫; 숫; 숫; 숫; ) HANGUL SYLLABLE SUS
+C22C;C22C;1109 116E 11BB;C22C;1109 116E 11BB; # (숬; 숬; 숬; 숬; 숬; ) HANGUL SYLLABLE SUSS
+C22D;C22D;1109 116E 11BC;C22D;1109 116E 11BC; # (숭; 숭; 숭; 숭; 숭; ) HANGUL SYLLABLE SUNG
+C22E;C22E;1109 116E 11BD;C22E;1109 116E 11BD; # (숮; 숮; 숮; 숮; 숮; ) HANGUL SYLLABLE SUJ
+C22F;C22F;1109 116E 11BE;C22F;1109 116E 11BE; # (숯; 숯; 숯; 숯; 숯; ) HANGUL SYLLABLE SUC
+C230;C230;1109 116E 11BF;C230;1109 116E 11BF; # (숰; 숰; 숰; 숰; 숰; ) HANGUL SYLLABLE SUK
+C231;C231;1109 116E 11C0;C231;1109 116E 11C0; # (숱; 숱; 숱; 숱; 숱; ) HANGUL SYLLABLE SUT
+C232;C232;1109 116E 11C1;C232;1109 116E 11C1; # (숲; 숲; 숲; 숲; 숲; ) HANGUL SYLLABLE SUP
+C233;C233;1109 116E 11C2;C233;1109 116E 11C2; # (숳; 숳; 숳; 숳; 숳; ) HANGUL SYLLABLE SUH
+C234;C234;1109 116F;C234;1109 116F; # (숴; 숴; 숴; 숴; 숴; ) HANGUL SYLLABLE SWEO
+C235;C235;1109 116F 11A8;C235;1109 116F 11A8; # (숵; 숵; 숵; 숵; 숵; ) HANGUL SYLLABLE SWEOG
+C236;C236;1109 116F 11A9;C236;1109 116F 11A9; # (숶; 숶; 숶; 숶; 숶; ) HANGUL SYLLABLE SWEOGG
+C237;C237;1109 116F 11AA;C237;1109 116F 11AA; # (숷; 숷; 숷; 숷; 숷; ) HANGUL SYLLABLE SWEOGS
+C238;C238;1109 116F 11AB;C238;1109 116F 11AB; # (숸; 숸; 숸; 숸; 숸; ) HANGUL SYLLABLE SWEON
+C239;C239;1109 116F 11AC;C239;1109 116F 11AC; # (숹; 숹; 숹; 숹; 숹; ) HANGUL SYLLABLE SWEONJ
+C23A;C23A;1109 116F 11AD;C23A;1109 116F 11AD; # (숺; 숺; 숺; 숺; 숺; ) HANGUL SYLLABLE SWEONH
+C23B;C23B;1109 116F 11AE;C23B;1109 116F 11AE; # (숻; 숻; 숻; 숻; 숻; ) HANGUL SYLLABLE SWEOD
+C23C;C23C;1109 116F 11AF;C23C;1109 116F 11AF; # (숼; 숼; 숼; 숼; 숼; ) HANGUL SYLLABLE SWEOL
+C23D;C23D;1109 116F 11B0;C23D;1109 116F 11B0; # (숽; 숽; 숽; 숽; 숽; ) HANGUL SYLLABLE SWEOLG
+C23E;C23E;1109 116F 11B1;C23E;1109 116F 11B1; # (숾; 숾; 숾; 숾; 숾; ) HANGUL SYLLABLE SWEOLM
+C23F;C23F;1109 116F 11B2;C23F;1109 116F 11B2; # (숿; 숿; 숿; 숿; 숿; ) HANGUL SYLLABLE SWEOLB
+C240;C240;1109 116F 11B3;C240;1109 116F 11B3; # (쉀; 쉀; 쉀; 쉀; 쉀; ) HANGUL SYLLABLE SWEOLS
+C241;C241;1109 116F 11B4;C241;1109 116F 11B4; # (쉁; 쉁; 쉁; 쉁; 쉁; ) HANGUL SYLLABLE SWEOLT
+C242;C242;1109 116F 11B5;C242;1109 116F 11B5; # (쉂; 쉂; 쉂; 쉂; 쉂; ) HANGUL SYLLABLE SWEOLP
+C243;C243;1109 116F 11B6;C243;1109 116F 11B6; # (쉃; 쉃; 쉃; 쉃; 쉃; ) HANGUL SYLLABLE SWEOLH
+C244;C244;1109 116F 11B7;C244;1109 116F 11B7; # (쉄; 쉄; 쉄; 쉄; 쉄; ) HANGUL SYLLABLE SWEOM
+C245;C245;1109 116F 11B8;C245;1109 116F 11B8; # (쉅; 쉅; 쉅; 쉅; 쉅; ) HANGUL SYLLABLE SWEOB
+C246;C246;1109 116F 11B9;C246;1109 116F 11B9; # (쉆; 쉆; 쉆; 쉆; 쉆; ) HANGUL SYLLABLE SWEOBS
+C247;C247;1109 116F 11BA;C247;1109 116F 11BA; # (쉇; 쉇; 쉇; 쉇; 쉇; ) HANGUL SYLLABLE SWEOS
+C248;C248;1109 116F 11BB;C248;1109 116F 11BB; # (쉈; 쉈; 쉈; 쉈; 쉈; ) HANGUL SYLLABLE SWEOSS
+C249;C249;1109 116F 11BC;C249;1109 116F 11BC; # (쉉; 쉉; 쉉; 쉉; 쉉; ) HANGUL SYLLABLE SWEONG
+C24A;C24A;1109 116F 11BD;C24A;1109 116F 11BD; # (쉊; 쉊; 쉊; 쉊; 쉊; ) HANGUL SYLLABLE SWEOJ
+C24B;C24B;1109 116F 11BE;C24B;1109 116F 11BE; # (쉋; 쉋; 쉋; 쉋; 쉋; ) HANGUL SYLLABLE SWEOC
+C24C;C24C;1109 116F 11BF;C24C;1109 116F 11BF; # (쉌; 쉌; 쉌; 쉌; 쉌; ) HANGUL SYLLABLE SWEOK
+C24D;C24D;1109 116F 11C0;C24D;1109 116F 11C0; # (쉍; 쉍; 쉍; 쉍; 쉍; ) HANGUL SYLLABLE SWEOT
+C24E;C24E;1109 116F 11C1;C24E;1109 116F 11C1; # (쉎; 쉎; 쉎; 쉎; 쉎; ) HANGUL SYLLABLE SWEOP
+C24F;C24F;1109 116F 11C2;C24F;1109 116F 11C2; # (쉏; 쉏; 쉏; 쉏; 쉏; ) HANGUL SYLLABLE SWEOH
+C250;C250;1109 1170;C250;1109 1170; # (쉐; 쉐; 쉐; 쉐; 쉐; ) HANGUL SYLLABLE SWE
+C251;C251;1109 1170 11A8;C251;1109 1170 11A8; # (쉑; 쉑; 쉑; 쉑; 쉑; ) HANGUL SYLLABLE SWEG
+C252;C252;1109 1170 11A9;C252;1109 1170 11A9; # (쉒; 쉒; 쉒; 쉒; 쉒; ) HANGUL SYLLABLE SWEGG
+C253;C253;1109 1170 11AA;C253;1109 1170 11AA; # (쉓; 쉓; 쉓; 쉓; 쉓; ) HANGUL SYLLABLE SWEGS
+C254;C254;1109 1170 11AB;C254;1109 1170 11AB; # (쉔; 쉔; 쉔; 쉔; 쉔; ) HANGUL SYLLABLE SWEN
+C255;C255;1109 1170 11AC;C255;1109 1170 11AC; # (쉕; 쉕; 쉕; 쉕; 쉕; ) HANGUL SYLLABLE SWENJ
+C256;C256;1109 1170 11AD;C256;1109 1170 11AD; # (쉖; 쉖; 쉖; 쉖; 쉖; ) HANGUL SYLLABLE SWENH
+C257;C257;1109 1170 11AE;C257;1109 1170 11AE; # (쉗; 쉗; 쉗; 쉗; 쉗; ) HANGUL SYLLABLE SWED
+C258;C258;1109 1170 11AF;C258;1109 1170 11AF; # (쉘; 쉘; 쉘; 쉘; 쉘; ) HANGUL SYLLABLE SWEL
+C259;C259;1109 1170 11B0;C259;1109 1170 11B0; # (쉙; 쉙; 쉙; 쉙; 쉙; ) HANGUL SYLLABLE SWELG
+C25A;C25A;1109 1170 11B1;C25A;1109 1170 11B1; # (쉚; 쉚; 쉚; 쉚; 쉚; ) HANGUL SYLLABLE SWELM
+C25B;C25B;1109 1170 11B2;C25B;1109 1170 11B2; # (쉛; 쉛; 쉛; 쉛; 쉛; ) HANGUL SYLLABLE SWELB
+C25C;C25C;1109 1170 11B3;C25C;1109 1170 11B3; # (쉜; 쉜; 쉜; 쉜; 쉜; ) HANGUL SYLLABLE SWELS
+C25D;C25D;1109 1170 11B4;C25D;1109 1170 11B4; # (쉝; 쉝; 쉝; 쉝; 쉝; ) HANGUL SYLLABLE SWELT
+C25E;C25E;1109 1170 11B5;C25E;1109 1170 11B5; # (쉞; 쉞; 쉞; 쉞; 쉞; ) HANGUL SYLLABLE SWELP
+C25F;C25F;1109 1170 11B6;C25F;1109 1170 11B6; # (쉟; 쉟; 쉟; 쉟; 쉟; ) HANGUL SYLLABLE SWELH
+C260;C260;1109 1170 11B7;C260;1109 1170 11B7; # (쉠; 쉠; 쉠; 쉠; 쉠; ) HANGUL SYLLABLE SWEM
+C261;C261;1109 1170 11B8;C261;1109 1170 11B8; # (쉡; 쉡; 쉡; 쉡; 쉡; ) HANGUL SYLLABLE SWEB
+C262;C262;1109 1170 11B9;C262;1109 1170 11B9; # (쉢; 쉢; 쉢; 쉢; 쉢; ) HANGUL SYLLABLE SWEBS
+C263;C263;1109 1170 11BA;C263;1109 1170 11BA; # (쉣; 쉣; 쉣; 쉣; 쉣; ) HANGUL SYLLABLE SWES
+C264;C264;1109 1170 11BB;C264;1109 1170 11BB; # (쉤; 쉤; 쉤; 쉤; 쉤; ) HANGUL SYLLABLE SWESS
+C265;C265;1109 1170 11BC;C265;1109 1170 11BC; # (쉥; 쉥; 쉥; 쉥; 쉥; ) HANGUL SYLLABLE SWENG
+C266;C266;1109 1170 11BD;C266;1109 1170 11BD; # (쉦; 쉦; 쉦; 쉦; 쉦; ) HANGUL SYLLABLE SWEJ
+C267;C267;1109 1170 11BE;C267;1109 1170 11BE; # (쉧; 쉧; 쉧; 쉧; 쉧; ) HANGUL SYLLABLE SWEC
+C268;C268;1109 1170 11BF;C268;1109 1170 11BF; # (쉨; 쉨; 쉨; 쉨; 쉨; ) HANGUL SYLLABLE SWEK
+C269;C269;1109 1170 11C0;C269;1109 1170 11C0; # (쉩; 쉩; 쉩; 쉩; 쉩; ) HANGUL SYLLABLE SWET
+C26A;C26A;1109 1170 11C1;C26A;1109 1170 11C1; # (쉪; 쉪; 쉪; 쉪; 쉪; ) HANGUL SYLLABLE SWEP
+C26B;C26B;1109 1170 11C2;C26B;1109 1170 11C2; # (쉫; 쉫; 쉫; 쉫; 쉫; ) HANGUL SYLLABLE SWEH
+C26C;C26C;1109 1171;C26C;1109 1171; # (쉬; 쉬; 쉬; 쉬; 쉬; ) HANGUL SYLLABLE SWI
+C26D;C26D;1109 1171 11A8;C26D;1109 1171 11A8; # (쉭; 쉭; 쉭; 쉭; 쉭; ) HANGUL SYLLABLE SWIG
+C26E;C26E;1109 1171 11A9;C26E;1109 1171 11A9; # (쉮; 쉮; 쉮; 쉮; 쉮; ) HANGUL SYLLABLE SWIGG
+C26F;C26F;1109 1171 11AA;C26F;1109 1171 11AA; # (쉯; 쉯; 쉯; 쉯; 쉯; ) HANGUL SYLLABLE SWIGS
+C270;C270;1109 1171 11AB;C270;1109 1171 11AB; # (쉰; 쉰; 쉰; 쉰; 쉰; ) HANGUL SYLLABLE SWIN
+C271;C271;1109 1171 11AC;C271;1109 1171 11AC; # (쉱; 쉱; 쉱; 쉱; 쉱; ) HANGUL SYLLABLE SWINJ
+C272;C272;1109 1171 11AD;C272;1109 1171 11AD; # (쉲; 쉲; 쉲; 쉲; 쉲; ) HANGUL SYLLABLE SWINH
+C273;C273;1109 1171 11AE;C273;1109 1171 11AE; # (쉳; 쉳; 쉳; 쉳; 쉳; ) HANGUL SYLLABLE SWID
+C274;C274;1109 1171 11AF;C274;1109 1171 11AF; # (쉴; 쉴; 쉴; 쉴; 쉴; ) HANGUL SYLLABLE SWIL
+C275;C275;1109 1171 11B0;C275;1109 1171 11B0; # (쉵; 쉵; 쉵; 쉵; 쉵; ) HANGUL SYLLABLE SWILG
+C276;C276;1109 1171 11B1;C276;1109 1171 11B1; # (쉶; 쉶; 쉶; 쉶; 쉶; ) HANGUL SYLLABLE SWILM
+C277;C277;1109 1171 11B2;C277;1109 1171 11B2; # (쉷; 쉷; 쉷; 쉷; 쉷; ) HANGUL SYLLABLE SWILB
+C278;C278;1109 1171 11B3;C278;1109 1171 11B3; # (쉸; 쉸; 쉸; 쉸; 쉸; ) HANGUL SYLLABLE SWILS
+C279;C279;1109 1171 11B4;C279;1109 1171 11B4; # (쉹; 쉹; 쉹; 쉹; 쉹; ) HANGUL SYLLABLE SWILT
+C27A;C27A;1109 1171 11B5;C27A;1109 1171 11B5; # (쉺; 쉺; 쉺; 쉺; 쉺; ) HANGUL SYLLABLE SWILP
+C27B;C27B;1109 1171 11B6;C27B;1109 1171 11B6; # (쉻; 쉻; 쉻; 쉻; 쉻; ) HANGUL SYLLABLE SWILH
+C27C;C27C;1109 1171 11B7;C27C;1109 1171 11B7; # (쉼; 쉼; 쉼; 쉼; 쉼; ) HANGUL SYLLABLE SWIM
+C27D;C27D;1109 1171 11B8;C27D;1109 1171 11B8; # (쉽; 쉽; 쉽; 쉽; 쉽; ) HANGUL SYLLABLE SWIB
+C27E;C27E;1109 1171 11B9;C27E;1109 1171 11B9; # (쉾; 쉾; 쉾; 쉾; 쉾; ) HANGUL SYLLABLE SWIBS
+C27F;C27F;1109 1171 11BA;C27F;1109 1171 11BA; # (쉿; 쉿; 쉿; 쉿; 쉿; ) HANGUL SYLLABLE SWIS
+C280;C280;1109 1171 11BB;C280;1109 1171 11BB; # (슀; 슀; 슀; 슀; 슀; ) HANGUL SYLLABLE SWISS
+C281;C281;1109 1171 11BC;C281;1109 1171 11BC; # (슁; 슁; 슁; 슁; 슁; ) HANGUL SYLLABLE SWING
+C282;C282;1109 1171 11BD;C282;1109 1171 11BD; # (슂; 슂; 슂; 슂; 슂; ) HANGUL SYLLABLE SWIJ
+C283;C283;1109 1171 11BE;C283;1109 1171 11BE; # (슃; 슃; 슃; 슃; 슃; ) HANGUL SYLLABLE SWIC
+C284;C284;1109 1171 11BF;C284;1109 1171 11BF; # (슄; 슄; 슄; 슄; 슄; ) HANGUL SYLLABLE SWIK
+C285;C285;1109 1171 11C0;C285;1109 1171 11C0; # (슅; 슅; 슅; 슅; 슅; ) HANGUL SYLLABLE SWIT
+C286;C286;1109 1171 11C1;C286;1109 1171 11C1; # (슆; 슆; 슆; 슆; 슆; ) HANGUL SYLLABLE SWIP
+C287;C287;1109 1171 11C2;C287;1109 1171 11C2; # (슇; 슇; 슇; 슇; 슇; ) HANGUL SYLLABLE SWIH
+C288;C288;1109 1172;C288;1109 1172; # (슈; 슈; 슈; 슈; 슈; ) HANGUL SYLLABLE SYU
+C289;C289;1109 1172 11A8;C289;1109 1172 11A8; # (슉; 슉; 슉; 슉; 슉; ) HANGUL SYLLABLE SYUG
+C28A;C28A;1109 1172 11A9;C28A;1109 1172 11A9; # (슊; 슊; 슊; 슊; 슊; ) HANGUL SYLLABLE SYUGG
+C28B;C28B;1109 1172 11AA;C28B;1109 1172 11AA; # (슋; 슋; 슋; 슋; 슋; ) HANGUL SYLLABLE SYUGS
+C28C;C28C;1109 1172 11AB;C28C;1109 1172 11AB; # (슌; 슌; 슌; 슌; 슌; ) HANGUL SYLLABLE SYUN
+C28D;C28D;1109 1172 11AC;C28D;1109 1172 11AC; # (슍; 슍; 슍; 슍; 슍; ) HANGUL SYLLABLE SYUNJ
+C28E;C28E;1109 1172 11AD;C28E;1109 1172 11AD; # (슎; 슎; 슎; 슎; 슎; ) HANGUL SYLLABLE SYUNH
+C28F;C28F;1109 1172 11AE;C28F;1109 1172 11AE; # (슏; 슏; 슏; 슏; 슏; ) HANGUL SYLLABLE SYUD
+C290;C290;1109 1172 11AF;C290;1109 1172 11AF; # (슐; 슐; 슐; 슐; 슐; ) HANGUL SYLLABLE SYUL
+C291;C291;1109 1172 11B0;C291;1109 1172 11B0; # (슑; 슑; 슑; 슑; 슑; ) HANGUL SYLLABLE SYULG
+C292;C292;1109 1172 11B1;C292;1109 1172 11B1; # (슒; 슒; 슒; 슒; 슒; ) HANGUL SYLLABLE SYULM
+C293;C293;1109 1172 11B2;C293;1109 1172 11B2; # (슓; 슓; 슓; 슓; 슓; ) HANGUL SYLLABLE SYULB
+C294;C294;1109 1172 11B3;C294;1109 1172 11B3; # (슔; 슔; 슔; 슔; 슔; ) HANGUL SYLLABLE SYULS
+C295;C295;1109 1172 11B4;C295;1109 1172 11B4; # (슕; 슕; 슕; 슕; 슕; ) HANGUL SYLLABLE SYULT
+C296;C296;1109 1172 11B5;C296;1109 1172 11B5; # (슖; 슖; 슖; 슖; 슖; ) HANGUL SYLLABLE SYULP
+C297;C297;1109 1172 11B6;C297;1109 1172 11B6; # (슗; 슗; 슗; 슗; 슗; ) HANGUL SYLLABLE SYULH
+C298;C298;1109 1172 11B7;C298;1109 1172 11B7; # (슘; 슘; 슘; 슘; 슘; ) HANGUL SYLLABLE SYUM
+C299;C299;1109 1172 11B8;C299;1109 1172 11B8; # (슙; 슙; 슙; 슙; 슙; ) HANGUL SYLLABLE SYUB
+C29A;C29A;1109 1172 11B9;C29A;1109 1172 11B9; # (슚; 슚; 슚; 슚; 슚; ) HANGUL SYLLABLE SYUBS
+C29B;C29B;1109 1172 11BA;C29B;1109 1172 11BA; # (슛; 슛; 슛; 슛; 슛; ) HANGUL SYLLABLE SYUS
+C29C;C29C;1109 1172 11BB;C29C;1109 1172 11BB; # (슜; 슜; 슜; 슜; 슜; ) HANGUL SYLLABLE SYUSS
+C29D;C29D;1109 1172 11BC;C29D;1109 1172 11BC; # (슝; 슝; 슝; 슝; 슝; ) HANGUL SYLLABLE SYUNG
+C29E;C29E;1109 1172 11BD;C29E;1109 1172 11BD; # (슞; 슞; 슞; 슞; 슞; ) HANGUL SYLLABLE SYUJ
+C29F;C29F;1109 1172 11BE;C29F;1109 1172 11BE; # (슟; 슟; 슟; 슟; 슟; ) HANGUL SYLLABLE SYUC
+C2A0;C2A0;1109 1172 11BF;C2A0;1109 1172 11BF; # (슠; 슠; 슠; 슠; 슠; ) HANGUL SYLLABLE SYUK
+C2A1;C2A1;1109 1172 11C0;C2A1;1109 1172 11C0; # (슡; 슡; 슡; 슡; 슡; ) HANGUL SYLLABLE SYUT
+C2A2;C2A2;1109 1172 11C1;C2A2;1109 1172 11C1; # (슢; 슢; 슢; 슢; 슢; ) HANGUL SYLLABLE SYUP
+C2A3;C2A3;1109 1172 11C2;C2A3;1109 1172 11C2; # (슣; 슣; 슣; 슣; 슣; ) HANGUL SYLLABLE SYUH
+C2A4;C2A4;1109 1173;C2A4;1109 1173; # (스; 스; 스; 스; 스; ) HANGUL SYLLABLE SEU
+C2A5;C2A5;1109 1173 11A8;C2A5;1109 1173 11A8; # (슥; 슥; 슥; 슥; 슥; ) HANGUL SYLLABLE SEUG
+C2A6;C2A6;1109 1173 11A9;C2A6;1109 1173 11A9; # (슦; 슦; 슦; 슦; 슦; ) HANGUL SYLLABLE SEUGG
+C2A7;C2A7;1109 1173 11AA;C2A7;1109 1173 11AA; # (슧; 슧; 슧; 슧; 슧; ) HANGUL SYLLABLE SEUGS
+C2A8;C2A8;1109 1173 11AB;C2A8;1109 1173 11AB; # (슨; 슨; 슨; 슨; 슨; ) HANGUL SYLLABLE SEUN
+C2A9;C2A9;1109 1173 11AC;C2A9;1109 1173 11AC; # (슩; 슩; 슩; 슩; 슩; ) HANGUL SYLLABLE SEUNJ
+C2AA;C2AA;1109 1173 11AD;C2AA;1109 1173 11AD; # (슪; 슪; 슪; 슪; 슪; ) HANGUL SYLLABLE SEUNH
+C2AB;C2AB;1109 1173 11AE;C2AB;1109 1173 11AE; # (슫; 슫; 슫; 슫; 슫; ) HANGUL SYLLABLE SEUD
+C2AC;C2AC;1109 1173 11AF;C2AC;1109 1173 11AF; # (슬; 슬; 슬; 슬; 슬; ) HANGUL SYLLABLE SEUL
+C2AD;C2AD;1109 1173 11B0;C2AD;1109 1173 11B0; # (슭; 슭; 슭; 슭; 슭; ) HANGUL SYLLABLE SEULG
+C2AE;C2AE;1109 1173 11B1;C2AE;1109 1173 11B1; # (슮; 슮; 슮; 슮; 슮; ) HANGUL SYLLABLE SEULM
+C2AF;C2AF;1109 1173 11B2;C2AF;1109 1173 11B2; # (슯; 슯; 슯; 슯; 슯; ) HANGUL SYLLABLE SEULB
+C2B0;C2B0;1109 1173 11B3;C2B0;1109 1173 11B3; # (슰; 슰; 슰; 슰; 슰; ) HANGUL SYLLABLE SEULS
+C2B1;C2B1;1109 1173 11B4;C2B1;1109 1173 11B4; # (슱; 슱; 슱; 슱; 슱; ) HANGUL SYLLABLE SEULT
+C2B2;C2B2;1109 1173 11B5;C2B2;1109 1173 11B5; # (슲; 슲; 슲; 슲; 슲; ) HANGUL SYLLABLE SEULP
+C2B3;C2B3;1109 1173 11B6;C2B3;1109 1173 11B6; # (슳; 슳; 슳; 슳; 슳; ) HANGUL SYLLABLE SEULH
+C2B4;C2B4;1109 1173 11B7;C2B4;1109 1173 11B7; # (슴; 슴; 슴; 슴; 슴; ) HANGUL SYLLABLE SEUM
+C2B5;C2B5;1109 1173 11B8;C2B5;1109 1173 11B8; # (습; 습; 습; 습; 습; ) HANGUL SYLLABLE SEUB
+C2B6;C2B6;1109 1173 11B9;C2B6;1109 1173 11B9; # (슶; 슶; 슶; 슶; 슶; ) HANGUL SYLLABLE SEUBS
+C2B7;C2B7;1109 1173 11BA;C2B7;1109 1173 11BA; # (슷; 슷; 슷; 슷; 슷; ) HANGUL SYLLABLE SEUS
+C2B8;C2B8;1109 1173 11BB;C2B8;1109 1173 11BB; # (슸; 슸; 슸; 슸; 슸; ) HANGUL SYLLABLE SEUSS
+C2B9;C2B9;1109 1173 11BC;C2B9;1109 1173 11BC; # (승; 승; 승; 승; 승; ) HANGUL SYLLABLE SEUNG
+C2BA;C2BA;1109 1173 11BD;C2BA;1109 1173 11BD; # (슺; 슺; 슺; 슺; 슺; ) HANGUL SYLLABLE SEUJ
+C2BB;C2BB;1109 1173 11BE;C2BB;1109 1173 11BE; # (슻; 슻; 슻; 슻; 슻; ) HANGUL SYLLABLE SEUC
+C2BC;C2BC;1109 1173 11BF;C2BC;1109 1173 11BF; # (슼; 슼; 슼; 슼; 슼; ) HANGUL SYLLABLE SEUK
+C2BD;C2BD;1109 1173 11C0;C2BD;1109 1173 11C0; # (슽; 슽; 슽; 슽; 슽; ) HANGUL SYLLABLE SEUT
+C2BE;C2BE;1109 1173 11C1;C2BE;1109 1173 11C1; # (슾; 슾; 슾; 슾; 슾; ) HANGUL SYLLABLE SEUP
+C2BF;C2BF;1109 1173 11C2;C2BF;1109 1173 11C2; # (슿; 슿; 슿; 슿; 슿; ) HANGUL SYLLABLE SEUH
+C2C0;C2C0;1109 1174;C2C0;1109 1174; # (싀; 싀; 싀; 싀; 싀; ) HANGUL SYLLABLE SYI
+C2C1;C2C1;1109 1174 11A8;C2C1;1109 1174 11A8; # (싁; 싁; 싁; 싁; 싁; ) HANGUL SYLLABLE SYIG
+C2C2;C2C2;1109 1174 11A9;C2C2;1109 1174 11A9; # (싂; 싂; 싂; 싂; 싂; ) HANGUL SYLLABLE SYIGG
+C2C3;C2C3;1109 1174 11AA;C2C3;1109 1174 11AA; # (싃; 싃; 싃; 싃; 싃; ) HANGUL SYLLABLE SYIGS
+C2C4;C2C4;1109 1174 11AB;C2C4;1109 1174 11AB; # (싄; 싄; 싄; 싄; 싄; ) HANGUL SYLLABLE SYIN
+C2C5;C2C5;1109 1174 11AC;C2C5;1109 1174 11AC; # (싅; 싅; 싅; 싅; 싅; ) HANGUL SYLLABLE SYINJ
+C2C6;C2C6;1109 1174 11AD;C2C6;1109 1174 11AD; # (싆; 싆; 싆; 싆; 싆; ) HANGUL SYLLABLE SYINH
+C2C7;C2C7;1109 1174 11AE;C2C7;1109 1174 11AE; # (싇; 싇; 싇; 싇; 싇; ) HANGUL SYLLABLE SYID
+C2C8;C2C8;1109 1174 11AF;C2C8;1109 1174 11AF; # (싈; 싈; 싈; 싈; 싈; ) HANGUL SYLLABLE SYIL
+C2C9;C2C9;1109 1174 11B0;C2C9;1109 1174 11B0; # (싉; 싉; 싉; 싉; 싉; ) HANGUL SYLLABLE SYILG
+C2CA;C2CA;1109 1174 11B1;C2CA;1109 1174 11B1; # (싊; 싊; 싊; 싊; 싊; ) HANGUL SYLLABLE SYILM
+C2CB;C2CB;1109 1174 11B2;C2CB;1109 1174 11B2; # (싋; 싋; 싋; 싋; 싋; ) HANGUL SYLLABLE SYILB
+C2CC;C2CC;1109 1174 11B3;C2CC;1109 1174 11B3; # (싌; 싌; 싌; 싌; 싌; ) HANGUL SYLLABLE SYILS
+C2CD;C2CD;1109 1174 11B4;C2CD;1109 1174 11B4; # (싍; 싍; 싍; 싍; 싍; ) HANGUL SYLLABLE SYILT
+C2CE;C2CE;1109 1174 11B5;C2CE;1109 1174 11B5; # (싎; 싎; 싎; 싎; 싎; ) HANGUL SYLLABLE SYILP
+C2CF;C2CF;1109 1174 11B6;C2CF;1109 1174 11B6; # (싏; 싏; 싏; 싏; 싏; ) HANGUL SYLLABLE SYILH
+C2D0;C2D0;1109 1174 11B7;C2D0;1109 1174 11B7; # (싐; 싐; 싐; 싐; 싐; ) HANGUL SYLLABLE SYIM
+C2D1;C2D1;1109 1174 11B8;C2D1;1109 1174 11B8; # (싑; 싑; 싑; 싑; 싑; ) HANGUL SYLLABLE SYIB
+C2D2;C2D2;1109 1174 11B9;C2D2;1109 1174 11B9; # (싒; 싒; 싒; 싒; 싒; ) HANGUL SYLLABLE SYIBS
+C2D3;C2D3;1109 1174 11BA;C2D3;1109 1174 11BA; # (싓; 싓; 싓; 싓; 싓; ) HANGUL SYLLABLE SYIS
+C2D4;C2D4;1109 1174 11BB;C2D4;1109 1174 11BB; # (싔; 싔; 싔; 싔; 싔; ) HANGUL SYLLABLE SYISS
+C2D5;C2D5;1109 1174 11BC;C2D5;1109 1174 11BC; # (싕; 싕; 싕; 싕; 싕; ) HANGUL SYLLABLE SYING
+C2D6;C2D6;1109 1174 11BD;C2D6;1109 1174 11BD; # (싖; 싖; 싖; 싖; 싖; ) HANGUL SYLLABLE SYIJ
+C2D7;C2D7;1109 1174 11BE;C2D7;1109 1174 11BE; # (싗; 싗; 싗; 싗; 싗; ) HANGUL SYLLABLE SYIC
+C2D8;C2D8;1109 1174 11BF;C2D8;1109 1174 11BF; # (싘; 싘; 싘; 싘; 싘; ) HANGUL SYLLABLE SYIK
+C2D9;C2D9;1109 1174 11C0;C2D9;1109 1174 11C0; # (싙; 싙; 싙; 싙; 싙; ) HANGUL SYLLABLE SYIT
+C2DA;C2DA;1109 1174 11C1;C2DA;1109 1174 11C1; # (싚; 싚; 싚; 싚; 싚; ) HANGUL SYLLABLE SYIP
+C2DB;C2DB;1109 1174 11C2;C2DB;1109 1174 11C2; # (싛; 싛; 싛; 싛; 싛; ) HANGUL SYLLABLE SYIH
+C2DC;C2DC;1109 1175;C2DC;1109 1175; # (시; 시; 시; 시; 시; ) HANGUL SYLLABLE SI
+C2DD;C2DD;1109 1175 11A8;C2DD;1109 1175 11A8; # (식; 식; 식; 식; 식; ) HANGUL SYLLABLE SIG
+C2DE;C2DE;1109 1175 11A9;C2DE;1109 1175 11A9; # (싞; 싞; 싞; 싞; 싞; ) HANGUL SYLLABLE SIGG
+C2DF;C2DF;1109 1175 11AA;C2DF;1109 1175 11AA; # (싟; 싟; 싟; 싟; 싟; ) HANGUL SYLLABLE SIGS
+C2E0;C2E0;1109 1175 11AB;C2E0;1109 1175 11AB; # (신; 신; 신; 신; 신; ) HANGUL SYLLABLE SIN
+C2E1;C2E1;1109 1175 11AC;C2E1;1109 1175 11AC; # (싡; 싡; 싡; 싡; 싡; ) HANGUL SYLLABLE SINJ
+C2E2;C2E2;1109 1175 11AD;C2E2;1109 1175 11AD; # (싢; 싢; 싢; 싢; 싢; ) HANGUL SYLLABLE SINH
+C2E3;C2E3;1109 1175 11AE;C2E3;1109 1175 11AE; # (싣; 싣; 싣; 싣; 싣; ) HANGUL SYLLABLE SID
+C2E4;C2E4;1109 1175 11AF;C2E4;1109 1175 11AF; # (실; 실; 실; 실; 실; ) HANGUL SYLLABLE SIL
+C2E5;C2E5;1109 1175 11B0;C2E5;1109 1175 11B0; # (싥; 싥; 싥; 싥; 싥; ) HANGUL SYLLABLE SILG
+C2E6;C2E6;1109 1175 11B1;C2E6;1109 1175 11B1; # (싦; 싦; 싦; 싦; 싦; ) HANGUL SYLLABLE SILM
+C2E7;C2E7;1109 1175 11B2;C2E7;1109 1175 11B2; # (싧; 싧; 싧; 싧; 싧; ) HANGUL SYLLABLE SILB
+C2E8;C2E8;1109 1175 11B3;C2E8;1109 1175 11B3; # (싨; 싨; 싨; 싨; 싨; ) HANGUL SYLLABLE SILS
+C2E9;C2E9;1109 1175 11B4;C2E9;1109 1175 11B4; # (싩; 싩; 싩; 싩; 싩; ) HANGUL SYLLABLE SILT
+C2EA;C2EA;1109 1175 11B5;C2EA;1109 1175 11B5; # (싪; 싪; 싪; 싪; 싪; ) HANGUL SYLLABLE SILP
+C2EB;C2EB;1109 1175 11B6;C2EB;1109 1175 11B6; # (싫; 싫; 싫; 싫; 싫; ) HANGUL SYLLABLE SILH
+C2EC;C2EC;1109 1175 11B7;C2EC;1109 1175 11B7; # (심; 심; 심; 심; 심; ) HANGUL SYLLABLE SIM
+C2ED;C2ED;1109 1175 11B8;C2ED;1109 1175 11B8; # (십; 십; 십; 십; 십; ) HANGUL SYLLABLE SIB
+C2EE;C2EE;1109 1175 11B9;C2EE;1109 1175 11B9; # (싮; 싮; 싮; 싮; 싮; ) HANGUL SYLLABLE SIBS
+C2EF;C2EF;1109 1175 11BA;C2EF;1109 1175 11BA; # (싯; 싯; 싯; 싯; 싯; ) HANGUL SYLLABLE SIS
+C2F0;C2F0;1109 1175 11BB;C2F0;1109 1175 11BB; # (싰; 싰; 싰; 싰; 싰; ) HANGUL SYLLABLE SISS
+C2F1;C2F1;1109 1175 11BC;C2F1;1109 1175 11BC; # (싱; 싱; 싱; 싱; 싱; ) HANGUL SYLLABLE SING
+C2F2;C2F2;1109 1175 11BD;C2F2;1109 1175 11BD; # (싲; 싲; 싲; 싲; 싲; ) HANGUL SYLLABLE SIJ
+C2F3;C2F3;1109 1175 11BE;C2F3;1109 1175 11BE; # (싳; 싳; 싳; 싳; 싳; ) HANGUL SYLLABLE SIC
+C2F4;C2F4;1109 1175 11BF;C2F4;1109 1175 11BF; # (싴; 싴; 싴; 싴; 싴; ) HANGUL SYLLABLE SIK
+C2F5;C2F5;1109 1175 11C0;C2F5;1109 1175 11C0; # (싵; 싵; 싵; 싵; 싵; ) HANGUL SYLLABLE SIT
+C2F6;C2F6;1109 1175 11C1;C2F6;1109 1175 11C1; # (싶; 싶; 싶; 싶; 싶; ) HANGUL SYLLABLE SIP
+C2F7;C2F7;1109 1175 11C2;C2F7;1109 1175 11C2; # (싷; 싷; 싷; 싷; 싷; ) HANGUL SYLLABLE SIH
+C2F8;C2F8;110A 1161;C2F8;110A 1161; # (싸; 싸; 싸; 싸; 싸; ) HANGUL SYLLABLE SSA
+C2F9;C2F9;110A 1161 11A8;C2F9;110A 1161 11A8; # (싹; 싹; 싹; 싹; 싹; ) HANGUL SYLLABLE SSAG
+C2FA;C2FA;110A 1161 11A9;C2FA;110A 1161 11A9; # (싺; 싺; 싺; 싺; 싺; ) HANGUL SYLLABLE SSAGG
+C2FB;C2FB;110A 1161 11AA;C2FB;110A 1161 11AA; # (싻; 싻; 싻; 싻; 싻; ) HANGUL SYLLABLE SSAGS
+C2FC;C2FC;110A 1161 11AB;C2FC;110A 1161 11AB; # (싼; 싼; 싼; 싼; 싼; ) HANGUL SYLLABLE SSAN
+C2FD;C2FD;110A 1161 11AC;C2FD;110A 1161 11AC; # (싽; 싽; 싽; 싽; 싽; ) HANGUL SYLLABLE SSANJ
+C2FE;C2FE;110A 1161 11AD;C2FE;110A 1161 11AD; # (싾; 싾; 싾; 싾; 싾; ) HANGUL SYLLABLE SSANH
+C2FF;C2FF;110A 1161 11AE;C2FF;110A 1161 11AE; # (싿; 싿; 싿; 싿; 싿; ) HANGUL SYLLABLE SSAD
+C300;C300;110A 1161 11AF;C300;110A 1161 11AF; # (쌀; 쌀; 쌀; 쌀; 쌀; ) HANGUL SYLLABLE SSAL
+C301;C301;110A 1161 11B0;C301;110A 1161 11B0; # (쌁; 쌁; 쌁; 쌁; 쌁; ) HANGUL SYLLABLE SSALG
+C302;C302;110A 1161 11B1;C302;110A 1161 11B1; # (쌂; 쌂; 쌂; 쌂; 쌂; ) HANGUL SYLLABLE SSALM
+C303;C303;110A 1161 11B2;C303;110A 1161 11B2; # (쌃; 쌃; 쌃; 쌃; 쌃; ) HANGUL SYLLABLE SSALB
+C304;C304;110A 1161 11B3;C304;110A 1161 11B3; # (쌄; 쌄; 쌄; 쌄; 쌄; ) HANGUL SYLLABLE SSALS
+C305;C305;110A 1161 11B4;C305;110A 1161 11B4; # (쌅; 쌅; 쌅; 쌅; 쌅; ) HANGUL SYLLABLE SSALT
+C306;C306;110A 1161 11B5;C306;110A 1161 11B5; # (쌆; 쌆; 쌆; 쌆; 쌆; ) HANGUL SYLLABLE SSALP
+C307;C307;110A 1161 11B6;C307;110A 1161 11B6; # (쌇; 쌇; 쌇; 쌇; 쌇; ) HANGUL SYLLABLE SSALH
+C308;C308;110A 1161 11B7;C308;110A 1161 11B7; # (쌈; 쌈; 쌈; 쌈; 쌈; ) HANGUL SYLLABLE SSAM
+C309;C309;110A 1161 11B8;C309;110A 1161 11B8; # (쌉; 쌉; 쌉; 쌉; 쌉; ) HANGUL SYLLABLE SSAB
+C30A;C30A;110A 1161 11B9;C30A;110A 1161 11B9; # (쌊; 쌊; 쌊; 쌊; 쌊; ) HANGUL SYLLABLE SSABS
+C30B;C30B;110A 1161 11BA;C30B;110A 1161 11BA; # (쌋; 쌋; 쌋; 쌋; 쌋; ) HANGUL SYLLABLE SSAS
+C30C;C30C;110A 1161 11BB;C30C;110A 1161 11BB; # (쌌; 쌌; 쌌; 쌌; 쌌; ) HANGUL SYLLABLE SSASS
+C30D;C30D;110A 1161 11BC;C30D;110A 1161 11BC; # (쌍; 쌍; 쌍; 쌍; 쌍; ) HANGUL SYLLABLE SSANG
+C30E;C30E;110A 1161 11BD;C30E;110A 1161 11BD; # (쌎; 쌎; 쌎; 쌎; 쌎; ) HANGUL SYLLABLE SSAJ
+C30F;C30F;110A 1161 11BE;C30F;110A 1161 11BE; # (쌏; 쌏; 쌏; 쌏; 쌏; ) HANGUL SYLLABLE SSAC
+C310;C310;110A 1161 11BF;C310;110A 1161 11BF; # (쌐; 쌐; 쌐; 쌐; 쌐; ) HANGUL SYLLABLE SSAK
+C311;C311;110A 1161 11C0;C311;110A 1161 11C0; # (쌑; 쌑; 쌑; 쌑; 쌑; ) HANGUL SYLLABLE SSAT
+C312;C312;110A 1161 11C1;C312;110A 1161 11C1; # (쌒; 쌒; 쌒; 쌒; 쌒; ) HANGUL SYLLABLE SSAP
+C313;C313;110A 1161 11C2;C313;110A 1161 11C2; # (쌓; 쌓; 쌓; 쌓; 쌓; ) HANGUL SYLLABLE SSAH
+C314;C314;110A 1162;C314;110A 1162; # (쌔; 쌔; 쌔; 쌔; 쌔; ) HANGUL SYLLABLE SSAE
+C315;C315;110A 1162 11A8;C315;110A 1162 11A8; # (쌕; 쌕; 쌕; 쌕; 쌕; ) HANGUL SYLLABLE SSAEG
+C316;C316;110A 1162 11A9;C316;110A 1162 11A9; # (쌖; 쌖; 쌖; 쌖; 쌖; ) HANGUL SYLLABLE SSAEGG
+C317;C317;110A 1162 11AA;C317;110A 1162 11AA; # (쌗; 쌗; 쌗; 쌗; 쌗; ) HANGUL SYLLABLE SSAEGS
+C318;C318;110A 1162 11AB;C318;110A 1162 11AB; # (쌘; 쌘; 쌘; 쌘; 쌘; ) HANGUL SYLLABLE SSAEN
+C319;C319;110A 1162 11AC;C319;110A 1162 11AC; # (쌙; 쌙; 쌙; 쌙; 쌙; ) HANGUL SYLLABLE SSAENJ
+C31A;C31A;110A 1162 11AD;C31A;110A 1162 11AD; # (쌚; 쌚; 쌚; 쌚; 쌚; ) HANGUL SYLLABLE SSAENH
+C31B;C31B;110A 1162 11AE;C31B;110A 1162 11AE; # (쌛; 쌛; 쌛; 쌛; 쌛; ) HANGUL SYLLABLE SSAED
+C31C;C31C;110A 1162 11AF;C31C;110A 1162 11AF; # (쌜; 쌜; 쌜; 쌜; 쌜; ) HANGUL SYLLABLE SSAEL
+C31D;C31D;110A 1162 11B0;C31D;110A 1162 11B0; # (쌝; 쌝; 쌝; 쌝; 쌝; ) HANGUL SYLLABLE SSAELG
+C31E;C31E;110A 1162 11B1;C31E;110A 1162 11B1; # (쌞; 쌞; 쌞; 쌞; 쌞; ) HANGUL SYLLABLE SSAELM
+C31F;C31F;110A 1162 11B2;C31F;110A 1162 11B2; # (쌟; 쌟; 쌟; 쌟; 쌟; ) HANGUL SYLLABLE SSAELB
+C320;C320;110A 1162 11B3;C320;110A 1162 11B3; # (쌠; 쌠; 쌠; 쌠; 쌠; ) HANGUL SYLLABLE SSAELS
+C321;C321;110A 1162 11B4;C321;110A 1162 11B4; # (쌡; 쌡; 쌡; 쌡; 쌡; ) HANGUL SYLLABLE SSAELT
+C322;C322;110A 1162 11B5;C322;110A 1162 11B5; # (쌢; 쌢; 쌢; 쌢; 쌢; ) HANGUL SYLLABLE SSAELP
+C323;C323;110A 1162 11B6;C323;110A 1162 11B6; # (쌣; 쌣; 쌣; 쌣; 쌣; ) HANGUL SYLLABLE SSAELH
+C324;C324;110A 1162 11B7;C324;110A 1162 11B7; # (쌤; 쌤; 쌤; 쌤; 쌤; ) HANGUL SYLLABLE SSAEM
+C325;C325;110A 1162 11B8;C325;110A 1162 11B8; # (쌥; 쌥; 쌥; 쌥; 쌥; ) HANGUL SYLLABLE SSAEB
+C326;C326;110A 1162 11B9;C326;110A 1162 11B9; # (쌦; 쌦; 쌦; 쌦; 쌦; ) HANGUL SYLLABLE SSAEBS
+C327;C327;110A 1162 11BA;C327;110A 1162 11BA; # (쌧; 쌧; 쌧; 쌧; 쌧; ) HANGUL SYLLABLE SSAES
+C328;C328;110A 1162 11BB;C328;110A 1162 11BB; # (쌨; 쌨; 쌨; 쌨; 쌨; ) HANGUL SYLLABLE SSAESS
+C329;C329;110A 1162 11BC;C329;110A 1162 11BC; # (쌩; 쌩; 쌩; 쌩; 쌩; ) HANGUL SYLLABLE SSAENG
+C32A;C32A;110A 1162 11BD;C32A;110A 1162 11BD; # (쌪; 쌪; 쌪; 쌪; 쌪; ) HANGUL SYLLABLE SSAEJ
+C32B;C32B;110A 1162 11BE;C32B;110A 1162 11BE; # (쌫; 쌫; 쌫; 쌫; 쌫; ) HANGUL SYLLABLE SSAEC
+C32C;C32C;110A 1162 11BF;C32C;110A 1162 11BF; # (쌬; 쌬; 쌬; 쌬; 쌬; ) HANGUL SYLLABLE SSAEK
+C32D;C32D;110A 1162 11C0;C32D;110A 1162 11C0; # (쌭; 쌭; 쌭; 쌭; 쌭; ) HANGUL SYLLABLE SSAET
+C32E;C32E;110A 1162 11C1;C32E;110A 1162 11C1; # (쌮; 쌮; 쌮; 쌮; 쌮; ) HANGUL SYLLABLE SSAEP
+C32F;C32F;110A 1162 11C2;C32F;110A 1162 11C2; # (쌯; 쌯; 쌯; 쌯; 쌯; ) HANGUL SYLLABLE SSAEH
+C330;C330;110A 1163;C330;110A 1163; # (쌰; 쌰; 쌰; 쌰; 쌰; ) HANGUL SYLLABLE SSYA
+C331;C331;110A 1163 11A8;C331;110A 1163 11A8; # (쌱; 쌱; 쌱; 쌱; 쌱; ) HANGUL SYLLABLE SSYAG
+C332;C332;110A 1163 11A9;C332;110A 1163 11A9; # (쌲; 쌲; 쌲; 쌲; 쌲; ) HANGUL SYLLABLE SSYAGG
+C333;C333;110A 1163 11AA;C333;110A 1163 11AA; # (쌳; 쌳; 쌳; 쌳; 쌳; ) HANGUL SYLLABLE SSYAGS
+C334;C334;110A 1163 11AB;C334;110A 1163 11AB; # (쌴; 쌴; 쌴; 쌴; 쌴; ) HANGUL SYLLABLE SSYAN
+C335;C335;110A 1163 11AC;C335;110A 1163 11AC; # (쌵; 쌵; 쌵; 쌵; 쌵; ) HANGUL SYLLABLE SSYANJ
+C336;C336;110A 1163 11AD;C336;110A 1163 11AD; # (쌶; 쌶; 쌶; 쌶; 쌶; ) HANGUL SYLLABLE SSYANH
+C337;C337;110A 1163 11AE;C337;110A 1163 11AE; # (쌷; 쌷; 쌷; 쌷; 쌷; ) HANGUL SYLLABLE SSYAD
+C338;C338;110A 1163 11AF;C338;110A 1163 11AF; # (쌸; 쌸; 쌸; 쌸; 쌸; ) HANGUL SYLLABLE SSYAL
+C339;C339;110A 1163 11B0;C339;110A 1163 11B0; # (쌹; 쌹; 쌹; 쌹; 쌹; ) HANGUL SYLLABLE SSYALG
+C33A;C33A;110A 1163 11B1;C33A;110A 1163 11B1; # (쌺; 쌺; 쌺; 쌺; 쌺; ) HANGUL SYLLABLE SSYALM
+C33B;C33B;110A 1163 11B2;C33B;110A 1163 11B2; # (쌻; 쌻; 쌻; 쌻; 쌻; ) HANGUL SYLLABLE SSYALB
+C33C;C33C;110A 1163 11B3;C33C;110A 1163 11B3; # (쌼; 쌼; 쌼; 쌼; 쌼; ) HANGUL SYLLABLE SSYALS
+C33D;C33D;110A 1163 11B4;C33D;110A 1163 11B4; # (쌽; 쌽; 쌽; 쌽; 쌽; ) HANGUL SYLLABLE SSYALT
+C33E;C33E;110A 1163 11B5;C33E;110A 1163 11B5; # (쌾; 쌾; 쌾; 쌾; 쌾; ) HANGUL SYLLABLE SSYALP
+C33F;C33F;110A 1163 11B6;C33F;110A 1163 11B6; # (쌿; 쌿; 쌿; 쌿; 쌿; ) HANGUL SYLLABLE SSYALH
+C340;C340;110A 1163 11B7;C340;110A 1163 11B7; # (썀; 썀; 썀; 썀; 썀; ) HANGUL SYLLABLE SSYAM
+C341;C341;110A 1163 11B8;C341;110A 1163 11B8; # (썁; 썁; 썁; 썁; 썁; ) HANGUL SYLLABLE SSYAB
+C342;C342;110A 1163 11B9;C342;110A 1163 11B9; # (썂; 썂; 썂; 썂; 썂; ) HANGUL SYLLABLE SSYABS
+C343;C343;110A 1163 11BA;C343;110A 1163 11BA; # (썃; 썃; 썃; 썃; 썃; ) HANGUL SYLLABLE SSYAS
+C344;C344;110A 1163 11BB;C344;110A 1163 11BB; # (썄; 썄; 썄; 썄; 썄; ) HANGUL SYLLABLE SSYASS
+C345;C345;110A 1163 11BC;C345;110A 1163 11BC; # (썅; 썅; 썅; 썅; 썅; ) HANGUL SYLLABLE SSYANG
+C346;C346;110A 1163 11BD;C346;110A 1163 11BD; # (썆; 썆; 썆; 썆; 썆; ) HANGUL SYLLABLE SSYAJ
+C347;C347;110A 1163 11BE;C347;110A 1163 11BE; # (썇; 썇; 썇; 썇; 썇; ) HANGUL SYLLABLE SSYAC
+C348;C348;110A 1163 11BF;C348;110A 1163 11BF; # (썈; 썈; 썈; 썈; 썈; ) HANGUL SYLLABLE SSYAK
+C349;C349;110A 1163 11C0;C349;110A 1163 11C0; # (썉; 썉; 썉; 썉; 썉; ) HANGUL SYLLABLE SSYAT
+C34A;C34A;110A 1163 11C1;C34A;110A 1163 11C1; # (썊; 썊; 썊; 썊; 썊; ) HANGUL SYLLABLE SSYAP
+C34B;C34B;110A 1163 11C2;C34B;110A 1163 11C2; # (썋; 썋; 썋; 썋; 썋; ) HANGUL SYLLABLE SSYAH
+C34C;C34C;110A 1164;C34C;110A 1164; # (썌; 썌; 썌; 썌; 썌; ) HANGUL SYLLABLE SSYAE
+C34D;C34D;110A 1164 11A8;C34D;110A 1164 11A8; # (썍; 썍; 썍; 썍; 썍; ) HANGUL SYLLABLE SSYAEG
+C34E;C34E;110A 1164 11A9;C34E;110A 1164 11A9; # (썎; 썎; 썎; 썎; 썎; ) HANGUL SYLLABLE SSYAEGG
+C34F;C34F;110A 1164 11AA;C34F;110A 1164 11AA; # (썏; 썏; 썏; 썏; 썏; ) HANGUL SYLLABLE SSYAEGS
+C350;C350;110A 1164 11AB;C350;110A 1164 11AB; # (썐; 썐; 썐; 썐; 썐; ) HANGUL SYLLABLE SSYAEN
+C351;C351;110A 1164 11AC;C351;110A 1164 11AC; # (썑; 썑; 썑; 썑; 썑; ) HANGUL SYLLABLE SSYAENJ
+C352;C352;110A 1164 11AD;C352;110A 1164 11AD; # (썒; 썒; 썒; 썒; 썒; ) HANGUL SYLLABLE SSYAENH
+C353;C353;110A 1164 11AE;C353;110A 1164 11AE; # (썓; 썓; 썓; 썓; 썓; ) HANGUL SYLLABLE SSYAED
+C354;C354;110A 1164 11AF;C354;110A 1164 11AF; # (썔; 썔; 썔; 썔; 썔; ) HANGUL SYLLABLE SSYAEL
+C355;C355;110A 1164 11B0;C355;110A 1164 11B0; # (썕; 썕; 썕; 썕; 썕; ) HANGUL SYLLABLE SSYAELG
+C356;C356;110A 1164 11B1;C356;110A 1164 11B1; # (썖; 썖; 썖; 썖; 썖; ) HANGUL SYLLABLE SSYAELM
+C357;C357;110A 1164 11B2;C357;110A 1164 11B2; # (썗; 썗; 썗; 썗; 썗; ) HANGUL SYLLABLE SSYAELB
+C358;C358;110A 1164 11B3;C358;110A 1164 11B3; # (썘; 썘; 썘; 썘; 썘; ) HANGUL SYLLABLE SSYAELS
+C359;C359;110A 1164 11B4;C359;110A 1164 11B4; # (썙; 썙; 썙; 썙; 썙; ) HANGUL SYLLABLE SSYAELT
+C35A;C35A;110A 1164 11B5;C35A;110A 1164 11B5; # (썚; 썚; 썚; 썚; 썚; ) HANGUL SYLLABLE SSYAELP
+C35B;C35B;110A 1164 11B6;C35B;110A 1164 11B6; # (썛; 썛; 썛; 썛; 썛; ) HANGUL SYLLABLE SSYAELH
+C35C;C35C;110A 1164 11B7;C35C;110A 1164 11B7; # (썜; 썜; 썜; 썜; 썜; ) HANGUL SYLLABLE SSYAEM
+C35D;C35D;110A 1164 11B8;C35D;110A 1164 11B8; # (썝; 썝; 썝; 썝; 썝; ) HANGUL SYLLABLE SSYAEB
+C35E;C35E;110A 1164 11B9;C35E;110A 1164 11B9; # (썞; 썞; 썞; 썞; 썞; ) HANGUL SYLLABLE SSYAEBS
+C35F;C35F;110A 1164 11BA;C35F;110A 1164 11BA; # (썟; 썟; 썟; 썟; 썟; ) HANGUL SYLLABLE SSYAES
+C360;C360;110A 1164 11BB;C360;110A 1164 11BB; # (썠; 썠; 썠; 썠; 썠; ) HANGUL SYLLABLE SSYAESS
+C361;C361;110A 1164 11BC;C361;110A 1164 11BC; # (썡; 썡; 썡; 썡; 썡; ) HANGUL SYLLABLE SSYAENG
+C362;C362;110A 1164 11BD;C362;110A 1164 11BD; # (썢; 썢; 썢; 썢; 썢; ) HANGUL SYLLABLE SSYAEJ
+C363;C363;110A 1164 11BE;C363;110A 1164 11BE; # (썣; 썣; 썣; 썣; 썣; ) HANGUL SYLLABLE SSYAEC
+C364;C364;110A 1164 11BF;C364;110A 1164 11BF; # (썤; 썤; 썤; 썤; 썤; ) HANGUL SYLLABLE SSYAEK
+C365;C365;110A 1164 11C0;C365;110A 1164 11C0; # (썥; 썥; 썥; 썥; 썥; ) HANGUL SYLLABLE SSYAET
+C366;C366;110A 1164 11C1;C366;110A 1164 11C1; # (썦; 썦; 썦; 썦; 썦; ) HANGUL SYLLABLE SSYAEP
+C367;C367;110A 1164 11C2;C367;110A 1164 11C2; # (썧; 썧; 썧; 썧; 썧; ) HANGUL SYLLABLE SSYAEH
+C368;C368;110A 1165;C368;110A 1165; # (써; 써; 써; 써; 써; ) HANGUL SYLLABLE SSEO
+C369;C369;110A 1165 11A8;C369;110A 1165 11A8; # (썩; 썩; 썩; 썩; 썩; ) HANGUL SYLLABLE SSEOG
+C36A;C36A;110A 1165 11A9;C36A;110A 1165 11A9; # (썪; 썪; 썪; 썪; 썪; ) HANGUL SYLLABLE SSEOGG
+C36B;C36B;110A 1165 11AA;C36B;110A 1165 11AA; # (썫; 썫; 썫; 썫; 썫; ) HANGUL SYLLABLE SSEOGS
+C36C;C36C;110A 1165 11AB;C36C;110A 1165 11AB; # (썬; 썬; 썬; 썬; 썬; ) HANGUL SYLLABLE SSEON
+C36D;C36D;110A 1165 11AC;C36D;110A 1165 11AC; # (썭; 썭; 썭; 썭; 썭; ) HANGUL SYLLABLE SSEONJ
+C36E;C36E;110A 1165 11AD;C36E;110A 1165 11AD; # (썮; 썮; 썮; 썮; 썮; ) HANGUL SYLLABLE SSEONH
+C36F;C36F;110A 1165 11AE;C36F;110A 1165 11AE; # (썯; 썯; 썯; 썯; 썯; ) HANGUL SYLLABLE SSEOD
+C370;C370;110A 1165 11AF;C370;110A 1165 11AF; # (썰; 썰; 썰; 썰; 썰; ) HANGUL SYLLABLE SSEOL
+C371;C371;110A 1165 11B0;C371;110A 1165 11B0; # (썱; 썱; 썱; 썱; 썱; ) HANGUL SYLLABLE SSEOLG
+C372;C372;110A 1165 11B1;C372;110A 1165 11B1; # (썲; 썲; 썲; 썲; 썲; ) HANGUL SYLLABLE SSEOLM
+C373;C373;110A 1165 11B2;C373;110A 1165 11B2; # (썳; 썳; 썳; 썳; 썳; ) HANGUL SYLLABLE SSEOLB
+C374;C374;110A 1165 11B3;C374;110A 1165 11B3; # (썴; 썴; 썴; 썴; 썴; ) HANGUL SYLLABLE SSEOLS
+C375;C375;110A 1165 11B4;C375;110A 1165 11B4; # (썵; 썵; 썵; 썵; 썵; ) HANGUL SYLLABLE SSEOLT
+C376;C376;110A 1165 11B5;C376;110A 1165 11B5; # (썶; 썶; 썶; 썶; 썶; ) HANGUL SYLLABLE SSEOLP
+C377;C377;110A 1165 11B6;C377;110A 1165 11B6; # (썷; 썷; 썷; 썷; 썷; ) HANGUL SYLLABLE SSEOLH
+C378;C378;110A 1165 11B7;C378;110A 1165 11B7; # (썸; 썸; 썸; 썸; 썸; ) HANGUL SYLLABLE SSEOM
+C379;C379;110A 1165 11B8;C379;110A 1165 11B8; # (썹; 썹; 썹; 썹; 썹; ) HANGUL SYLLABLE SSEOB
+C37A;C37A;110A 1165 11B9;C37A;110A 1165 11B9; # (썺; 썺; 썺; 썺; 썺; ) HANGUL SYLLABLE SSEOBS
+C37B;C37B;110A 1165 11BA;C37B;110A 1165 11BA; # (썻; 썻; 썻; 썻; 썻; ) HANGUL SYLLABLE SSEOS
+C37C;C37C;110A 1165 11BB;C37C;110A 1165 11BB; # (썼; 썼; 썼; 썼; 썼; ) HANGUL SYLLABLE SSEOSS
+C37D;C37D;110A 1165 11BC;C37D;110A 1165 11BC; # (썽; 썽; 썽; 썽; 썽; ) HANGUL SYLLABLE SSEONG
+C37E;C37E;110A 1165 11BD;C37E;110A 1165 11BD; # (썾; 썾; 썾; 썾; 썾; ) HANGUL SYLLABLE SSEOJ
+C37F;C37F;110A 1165 11BE;C37F;110A 1165 11BE; # (썿; 썿; 썿; 썿; 썿; ) HANGUL SYLLABLE SSEOC
+C380;C380;110A 1165 11BF;C380;110A 1165 11BF; # (쎀; 쎀; 쎀; 쎀; 쎀; ) HANGUL SYLLABLE SSEOK
+C381;C381;110A 1165 11C0;C381;110A 1165 11C0; # (쎁; 쎁; 쎁; 쎁; 쎁; ) HANGUL SYLLABLE SSEOT
+C382;C382;110A 1165 11C1;C382;110A 1165 11C1; # (쎂; 쎂; 쎂; 쎂; 쎂; ) HANGUL SYLLABLE SSEOP
+C383;C383;110A 1165 11C2;C383;110A 1165 11C2; # (쎃; 쎃; 쎃; 쎃; 쎃; ) HANGUL SYLLABLE SSEOH
+C384;C384;110A 1166;C384;110A 1166; # (쎄; 쎄; 쎄; 쎄; 쎄; ) HANGUL SYLLABLE SSE
+C385;C385;110A 1166 11A8;C385;110A 1166 11A8; # (쎅; 쎅; 쎅; 쎅; 쎅; ) HANGUL SYLLABLE SSEG
+C386;C386;110A 1166 11A9;C386;110A 1166 11A9; # (쎆; 쎆; 쎆; 쎆; 쎆; ) HANGUL SYLLABLE SSEGG
+C387;C387;110A 1166 11AA;C387;110A 1166 11AA; # (쎇; 쎇; 쎇; 쎇; 쎇; ) HANGUL SYLLABLE SSEGS
+C388;C388;110A 1166 11AB;C388;110A 1166 11AB; # (쎈; 쎈; 쎈; 쎈; 쎈; ) HANGUL SYLLABLE SSEN
+C389;C389;110A 1166 11AC;C389;110A 1166 11AC; # (쎉; 쎉; 쎉; 쎉; 쎉; ) HANGUL SYLLABLE SSENJ
+C38A;C38A;110A 1166 11AD;C38A;110A 1166 11AD; # (쎊; 쎊; 쎊; 쎊; 쎊; ) HANGUL SYLLABLE SSENH
+C38B;C38B;110A 1166 11AE;C38B;110A 1166 11AE; # (쎋; 쎋; 쎋; 쎋; 쎋; ) HANGUL SYLLABLE SSED
+C38C;C38C;110A 1166 11AF;C38C;110A 1166 11AF; # (쎌; 쎌; 쎌; 쎌; 쎌; ) HANGUL SYLLABLE SSEL
+C38D;C38D;110A 1166 11B0;C38D;110A 1166 11B0; # (쎍; 쎍; 쎍; 쎍; 쎍; ) HANGUL SYLLABLE SSELG
+C38E;C38E;110A 1166 11B1;C38E;110A 1166 11B1; # (쎎; 쎎; 쎎; 쎎; 쎎; ) HANGUL SYLLABLE SSELM
+C38F;C38F;110A 1166 11B2;C38F;110A 1166 11B2; # (쎏; 쎏; 쎏; 쎏; 쎏; ) HANGUL SYLLABLE SSELB
+C390;C390;110A 1166 11B3;C390;110A 1166 11B3; # (쎐; 쎐; 쎐; 쎐; 쎐; ) HANGUL SYLLABLE SSELS
+C391;C391;110A 1166 11B4;C391;110A 1166 11B4; # (쎑; 쎑; 쎑; 쎑; 쎑; ) HANGUL SYLLABLE SSELT
+C392;C392;110A 1166 11B5;C392;110A 1166 11B5; # (쎒; 쎒; 쎒; 쎒; 쎒; ) HANGUL SYLLABLE SSELP
+C393;C393;110A 1166 11B6;C393;110A 1166 11B6; # (쎓; 쎓; 쎓; 쎓; 쎓; ) HANGUL SYLLABLE SSELH
+C394;C394;110A 1166 11B7;C394;110A 1166 11B7; # (쎔; 쎔; 쎔; 쎔; 쎔; ) HANGUL SYLLABLE SSEM
+C395;C395;110A 1166 11B8;C395;110A 1166 11B8; # (쎕; 쎕; 쎕; 쎕; 쎕; ) HANGUL SYLLABLE SSEB
+C396;C396;110A 1166 11B9;C396;110A 1166 11B9; # (쎖; 쎖; 쎖; 쎖; 쎖; ) HANGUL SYLLABLE SSEBS
+C397;C397;110A 1166 11BA;C397;110A 1166 11BA; # (쎗; 쎗; 쎗; 쎗; 쎗; ) HANGUL SYLLABLE SSES
+C398;C398;110A 1166 11BB;C398;110A 1166 11BB; # (쎘; 쎘; 쎘; 쎘; 쎘; ) HANGUL SYLLABLE SSESS
+C399;C399;110A 1166 11BC;C399;110A 1166 11BC; # (쎙; 쎙; 쎙; 쎙; 쎙; ) HANGUL SYLLABLE SSENG
+C39A;C39A;110A 1166 11BD;C39A;110A 1166 11BD; # (쎚; 쎚; 쎚; 쎚; 쎚; ) HANGUL SYLLABLE SSEJ
+C39B;C39B;110A 1166 11BE;C39B;110A 1166 11BE; # (쎛; 쎛; 쎛; 쎛; 쎛; ) HANGUL SYLLABLE SSEC
+C39C;C39C;110A 1166 11BF;C39C;110A 1166 11BF; # (쎜; 쎜; 쎜; 쎜; 쎜; ) HANGUL SYLLABLE SSEK
+C39D;C39D;110A 1166 11C0;C39D;110A 1166 11C0; # (쎝; 쎝; 쎝; 쎝; 쎝; ) HANGUL SYLLABLE SSET
+C39E;C39E;110A 1166 11C1;C39E;110A 1166 11C1; # (쎞; 쎞; 쎞; 쎞; 쎞; ) HANGUL SYLLABLE SSEP
+C39F;C39F;110A 1166 11C2;C39F;110A 1166 11C2; # (쎟; 쎟; 쎟; 쎟; 쎟; ) HANGUL SYLLABLE SSEH
+C3A0;C3A0;110A 1167;C3A0;110A 1167; # (쎠; 쎠; 쎠; 쎠; 쎠; ) HANGUL SYLLABLE SSYEO
+C3A1;C3A1;110A 1167 11A8;C3A1;110A 1167 11A8; # (쎡; 쎡; 쎡; 쎡; 쎡; ) HANGUL SYLLABLE SSYEOG
+C3A2;C3A2;110A 1167 11A9;C3A2;110A 1167 11A9; # (쎢; 쎢; 쎢; 쎢; 쎢; ) HANGUL SYLLABLE SSYEOGG
+C3A3;C3A3;110A 1167 11AA;C3A3;110A 1167 11AA; # (쎣; 쎣; 쎣; 쎣; 쎣; ) HANGUL SYLLABLE SSYEOGS
+C3A4;C3A4;110A 1167 11AB;C3A4;110A 1167 11AB; # (쎤; 쎤; 쎤; 쎤; 쎤; ) HANGUL SYLLABLE SSYEON
+C3A5;C3A5;110A 1167 11AC;C3A5;110A 1167 11AC; # (쎥; 쎥; 쎥; 쎥; 쎥; ) HANGUL SYLLABLE SSYEONJ
+C3A6;C3A6;110A 1167 11AD;C3A6;110A 1167 11AD; # (쎦; 쎦; 쎦; 쎦; 쎦; ) HANGUL SYLLABLE SSYEONH
+C3A7;C3A7;110A 1167 11AE;C3A7;110A 1167 11AE; # (쎧; 쎧; 쎧; 쎧; 쎧; ) HANGUL SYLLABLE SSYEOD
+C3A8;C3A8;110A 1167 11AF;C3A8;110A 1167 11AF; # (쎨; 쎨; 쎨; 쎨; 쎨; ) HANGUL SYLLABLE SSYEOL
+C3A9;C3A9;110A 1167 11B0;C3A9;110A 1167 11B0; # (쎩; 쎩; 쎩; 쎩; 쎩; ) HANGUL SYLLABLE SSYEOLG
+C3AA;C3AA;110A 1167 11B1;C3AA;110A 1167 11B1; # (쎪; 쎪; 쎪; 쎪; 쎪; ) HANGUL SYLLABLE SSYEOLM
+C3AB;C3AB;110A 1167 11B2;C3AB;110A 1167 11B2; # (쎫; 쎫; 쎫; 쎫; 쎫; ) HANGUL SYLLABLE SSYEOLB
+C3AC;C3AC;110A 1167 11B3;C3AC;110A 1167 11B3; # (쎬; 쎬; 쎬; 쎬; 쎬; ) HANGUL SYLLABLE SSYEOLS
+C3AD;C3AD;110A 1167 11B4;C3AD;110A 1167 11B4; # (쎭; 쎭; 쎭; 쎭; 쎭; ) HANGUL SYLLABLE SSYEOLT
+C3AE;C3AE;110A 1167 11B5;C3AE;110A 1167 11B5; # (쎮; 쎮; 쎮; 쎮; 쎮; ) HANGUL SYLLABLE SSYEOLP
+C3AF;C3AF;110A 1167 11B6;C3AF;110A 1167 11B6; # (쎯; 쎯; 쎯; 쎯; 쎯; ) HANGUL SYLLABLE SSYEOLH
+C3B0;C3B0;110A 1167 11B7;C3B0;110A 1167 11B7; # (쎰; 쎰; 쎰; 쎰; 쎰; ) HANGUL SYLLABLE SSYEOM
+C3B1;C3B1;110A 1167 11B8;C3B1;110A 1167 11B8; # (쎱; 쎱; 쎱; 쎱; 쎱; ) HANGUL SYLLABLE SSYEOB
+C3B2;C3B2;110A 1167 11B9;C3B2;110A 1167 11B9; # (쎲; 쎲; 쎲; 쎲; 쎲; ) HANGUL SYLLABLE SSYEOBS
+C3B3;C3B3;110A 1167 11BA;C3B3;110A 1167 11BA; # (쎳; 쎳; 쎳; 쎳; 쎳; ) HANGUL SYLLABLE SSYEOS
+C3B4;C3B4;110A 1167 11BB;C3B4;110A 1167 11BB; # (쎴; 쎴; 쎴; 쎴; 쎴; ) HANGUL SYLLABLE SSYEOSS
+C3B5;C3B5;110A 1167 11BC;C3B5;110A 1167 11BC; # (쎵; 쎵; 쎵; 쎵; 쎵; ) HANGUL SYLLABLE SSYEONG
+C3B6;C3B6;110A 1167 11BD;C3B6;110A 1167 11BD; # (쎶; 쎶; 쎶; 쎶; 쎶; ) HANGUL SYLLABLE SSYEOJ
+C3B7;C3B7;110A 1167 11BE;C3B7;110A 1167 11BE; # (쎷; 쎷; 쎷; 쎷; 쎷; ) HANGUL SYLLABLE SSYEOC
+C3B8;C3B8;110A 1167 11BF;C3B8;110A 1167 11BF; # (쎸; 쎸; 쎸; 쎸; 쎸; ) HANGUL SYLLABLE SSYEOK
+C3B9;C3B9;110A 1167 11C0;C3B9;110A 1167 11C0; # (쎹; 쎹; 쎹; 쎹; 쎹; ) HANGUL SYLLABLE SSYEOT
+C3BA;C3BA;110A 1167 11C1;C3BA;110A 1167 11C1; # (쎺; 쎺; 쎺; 쎺; 쎺; ) HANGUL SYLLABLE SSYEOP
+C3BB;C3BB;110A 1167 11C2;C3BB;110A 1167 11C2; # (쎻; 쎻; 쎻; 쎻; 쎻; ) HANGUL SYLLABLE SSYEOH
+C3BC;C3BC;110A 1168;C3BC;110A 1168; # (쎼; 쎼; 쎼; 쎼; 쎼; ) HANGUL SYLLABLE SSYE
+C3BD;C3BD;110A 1168 11A8;C3BD;110A 1168 11A8; # (쎽; 쎽; 쎽; 쎽; 쎽; ) HANGUL SYLLABLE SSYEG
+C3BE;C3BE;110A 1168 11A9;C3BE;110A 1168 11A9; # (쎾; 쎾; 쎾; 쎾; 쎾; ) HANGUL SYLLABLE SSYEGG
+C3BF;C3BF;110A 1168 11AA;C3BF;110A 1168 11AA; # (쎿; 쎿; 쎿; 쎿; 쎿; ) HANGUL SYLLABLE SSYEGS
+C3C0;C3C0;110A 1168 11AB;C3C0;110A 1168 11AB; # (쏀; 쏀; 쏀; 쏀; 쏀; ) HANGUL SYLLABLE SSYEN
+C3C1;C3C1;110A 1168 11AC;C3C1;110A 1168 11AC; # (쏁; 쏁; 쏁; 쏁; 쏁; ) HANGUL SYLLABLE SSYENJ
+C3C2;C3C2;110A 1168 11AD;C3C2;110A 1168 11AD; # (쏂; 쏂; 쏂; 쏂; 쏂; ) HANGUL SYLLABLE SSYENH
+C3C3;C3C3;110A 1168 11AE;C3C3;110A 1168 11AE; # (쏃; 쏃; 쏃; 쏃; 쏃; ) HANGUL SYLLABLE SSYED
+C3C4;C3C4;110A 1168 11AF;C3C4;110A 1168 11AF; # (쏄; 쏄; 쏄; 쏄; 쏄; ) HANGUL SYLLABLE SSYEL
+C3C5;C3C5;110A 1168 11B0;C3C5;110A 1168 11B0; # (쏅; 쏅; 쏅; 쏅; 쏅; ) HANGUL SYLLABLE SSYELG
+C3C6;C3C6;110A 1168 11B1;C3C6;110A 1168 11B1; # (쏆; 쏆; 쏆; 쏆; 쏆; ) HANGUL SYLLABLE SSYELM
+C3C7;C3C7;110A 1168 11B2;C3C7;110A 1168 11B2; # (쏇; 쏇; 쏇; 쏇; 쏇; ) HANGUL SYLLABLE SSYELB
+C3C8;C3C8;110A 1168 11B3;C3C8;110A 1168 11B3; # (쏈; 쏈; 쏈; 쏈; 쏈; ) HANGUL SYLLABLE SSYELS
+C3C9;C3C9;110A 1168 11B4;C3C9;110A 1168 11B4; # (쏉; 쏉; 쏉; 쏉; 쏉; ) HANGUL SYLLABLE SSYELT
+C3CA;C3CA;110A 1168 11B5;C3CA;110A 1168 11B5; # (쏊; 쏊; 쏊; 쏊; 쏊; ) HANGUL SYLLABLE SSYELP
+C3CB;C3CB;110A 1168 11B6;C3CB;110A 1168 11B6; # (쏋; 쏋; 쏋; 쏋; 쏋; ) HANGUL SYLLABLE SSYELH
+C3CC;C3CC;110A 1168 11B7;C3CC;110A 1168 11B7; # (쏌; 쏌; 쏌; 쏌; 쏌; ) HANGUL SYLLABLE SSYEM
+C3CD;C3CD;110A 1168 11B8;C3CD;110A 1168 11B8; # (쏍; 쏍; 쏍; 쏍; 쏍; ) HANGUL SYLLABLE SSYEB
+C3CE;C3CE;110A 1168 11B9;C3CE;110A 1168 11B9; # (쏎; 쏎; 쏎; 쏎; 쏎; ) HANGUL SYLLABLE SSYEBS
+C3CF;C3CF;110A 1168 11BA;C3CF;110A 1168 11BA; # (쏏; 쏏; 쏏; 쏏; 쏏; ) HANGUL SYLLABLE SSYES
+C3D0;C3D0;110A 1168 11BB;C3D0;110A 1168 11BB; # (쏐; 쏐; 쏐; 쏐; 쏐; ) HANGUL SYLLABLE SSYESS
+C3D1;C3D1;110A 1168 11BC;C3D1;110A 1168 11BC; # (쏑; 쏑; 쏑; 쏑; 쏑; ) HANGUL SYLLABLE SSYENG
+C3D2;C3D2;110A 1168 11BD;C3D2;110A 1168 11BD; # (쏒; 쏒; 쏒; 쏒; 쏒; ) HANGUL SYLLABLE SSYEJ
+C3D3;C3D3;110A 1168 11BE;C3D3;110A 1168 11BE; # (쏓; 쏓; 쏓; 쏓; 쏓; ) HANGUL SYLLABLE SSYEC
+C3D4;C3D4;110A 1168 11BF;C3D4;110A 1168 11BF; # (쏔; 쏔; 쏔; 쏔; 쏔; ) HANGUL SYLLABLE SSYEK
+C3D5;C3D5;110A 1168 11C0;C3D5;110A 1168 11C0; # (쏕; 쏕; 쏕; 쏕; 쏕; ) HANGUL SYLLABLE SSYET
+C3D6;C3D6;110A 1168 11C1;C3D6;110A 1168 11C1; # (쏖; 쏖; 쏖; 쏖; 쏖; ) HANGUL SYLLABLE SSYEP
+C3D7;C3D7;110A 1168 11C2;C3D7;110A 1168 11C2; # (쏗; 쏗; 쏗; 쏗; 쏗; ) HANGUL SYLLABLE SSYEH
+C3D8;C3D8;110A 1169;C3D8;110A 1169; # (쏘; 쏘; 쏘; 쏘; 쏘; ) HANGUL SYLLABLE SSO
+C3D9;C3D9;110A 1169 11A8;C3D9;110A 1169 11A8; # (쏙; 쏙; 쏙; 쏙; 쏙; ) HANGUL SYLLABLE SSOG
+C3DA;C3DA;110A 1169 11A9;C3DA;110A 1169 11A9; # (쏚; 쏚; 쏚; 쏚; 쏚; ) HANGUL SYLLABLE SSOGG
+C3DB;C3DB;110A 1169 11AA;C3DB;110A 1169 11AA; # (쏛; 쏛; 쏛; 쏛; 쏛; ) HANGUL SYLLABLE SSOGS
+C3DC;C3DC;110A 1169 11AB;C3DC;110A 1169 11AB; # (쏜; 쏜; 쏜; 쏜; 쏜; ) HANGUL SYLLABLE SSON
+C3DD;C3DD;110A 1169 11AC;C3DD;110A 1169 11AC; # (쏝; 쏝; 쏝; 쏝; 쏝; ) HANGUL SYLLABLE SSONJ
+C3DE;C3DE;110A 1169 11AD;C3DE;110A 1169 11AD; # (쏞; 쏞; 쏞; 쏞; 쏞; ) HANGUL SYLLABLE SSONH
+C3DF;C3DF;110A 1169 11AE;C3DF;110A 1169 11AE; # (쏟; 쏟; 쏟; 쏟; 쏟; ) HANGUL SYLLABLE SSOD
+C3E0;C3E0;110A 1169 11AF;C3E0;110A 1169 11AF; # (쏠; 쏠; 쏠; 쏠; 쏠; ) HANGUL SYLLABLE SSOL
+C3E1;C3E1;110A 1169 11B0;C3E1;110A 1169 11B0; # (쏡; 쏡; 쏡; 쏡; 쏡; ) HANGUL SYLLABLE SSOLG
+C3E2;C3E2;110A 1169 11B1;C3E2;110A 1169 11B1; # (쏢; 쏢; 쏢; 쏢; 쏢; ) HANGUL SYLLABLE SSOLM
+C3E3;C3E3;110A 1169 11B2;C3E3;110A 1169 11B2; # (쏣; 쏣; 쏣; 쏣; 쏣; ) HANGUL SYLLABLE SSOLB
+C3E4;C3E4;110A 1169 11B3;C3E4;110A 1169 11B3; # (쏤; 쏤; 쏤; 쏤; 쏤; ) HANGUL SYLLABLE SSOLS
+C3E5;C3E5;110A 1169 11B4;C3E5;110A 1169 11B4; # (쏥; 쏥; 쏥; 쏥; 쏥; ) HANGUL SYLLABLE SSOLT
+C3E6;C3E6;110A 1169 11B5;C3E6;110A 1169 11B5; # (쏦; 쏦; 쏦; 쏦; 쏦; ) HANGUL SYLLABLE SSOLP
+C3E7;C3E7;110A 1169 11B6;C3E7;110A 1169 11B6; # (쏧; 쏧; 쏧; 쏧; 쏧; ) HANGUL SYLLABLE SSOLH
+C3E8;C3E8;110A 1169 11B7;C3E8;110A 1169 11B7; # (쏨; 쏨; 쏨; 쏨; 쏨; ) HANGUL SYLLABLE SSOM
+C3E9;C3E9;110A 1169 11B8;C3E9;110A 1169 11B8; # (쏩; 쏩; 쏩; 쏩; 쏩; ) HANGUL SYLLABLE SSOB
+C3EA;C3EA;110A 1169 11B9;C3EA;110A 1169 11B9; # (쏪; 쏪; 쏪; 쏪; 쏪; ) HANGUL SYLLABLE SSOBS
+C3EB;C3EB;110A 1169 11BA;C3EB;110A 1169 11BA; # (쏫; 쏫; 쏫; 쏫; 쏫; ) HANGUL SYLLABLE SSOS
+C3EC;C3EC;110A 1169 11BB;C3EC;110A 1169 11BB; # (쏬; 쏬; 쏬; 쏬; 쏬; ) HANGUL SYLLABLE SSOSS
+C3ED;C3ED;110A 1169 11BC;C3ED;110A 1169 11BC; # (쏭; 쏭; 쏭; 쏭; 쏭; ) HANGUL SYLLABLE SSONG
+C3EE;C3EE;110A 1169 11BD;C3EE;110A 1169 11BD; # (쏮; 쏮; 쏮; 쏮; 쏮; ) HANGUL SYLLABLE SSOJ
+C3EF;C3EF;110A 1169 11BE;C3EF;110A 1169 11BE; # (쏯; 쏯; 쏯; 쏯; 쏯; ) HANGUL SYLLABLE SSOC
+C3F0;C3F0;110A 1169 11BF;C3F0;110A 1169 11BF; # (쏰; 쏰; 쏰; 쏰; 쏰; ) HANGUL SYLLABLE SSOK
+C3F1;C3F1;110A 1169 11C0;C3F1;110A 1169 11C0; # (쏱; 쏱; 쏱; 쏱; 쏱; ) HANGUL SYLLABLE SSOT
+C3F2;C3F2;110A 1169 11C1;C3F2;110A 1169 11C1; # (쏲; 쏲; 쏲; 쏲; 쏲; ) HANGUL SYLLABLE SSOP
+C3F3;C3F3;110A 1169 11C2;C3F3;110A 1169 11C2; # (쏳; 쏳; 쏳; 쏳; 쏳; ) HANGUL SYLLABLE SSOH
+C3F4;C3F4;110A 116A;C3F4;110A 116A; # (쏴; 쏴; 쏴; 쏴; 쏴; ) HANGUL SYLLABLE SSWA
+C3F5;C3F5;110A 116A 11A8;C3F5;110A 116A 11A8; # (쏵; 쏵; 쏵; 쏵; 쏵; ) HANGUL SYLLABLE SSWAG
+C3F6;C3F6;110A 116A 11A9;C3F6;110A 116A 11A9; # (쏶; 쏶; 쏶; 쏶; 쏶; ) HANGUL SYLLABLE SSWAGG
+C3F7;C3F7;110A 116A 11AA;C3F7;110A 116A 11AA; # (쏷; 쏷; 쏷; 쏷; 쏷; ) HANGUL SYLLABLE SSWAGS
+C3F8;C3F8;110A 116A 11AB;C3F8;110A 116A 11AB; # (쏸; 쏸; 쏸; 쏸; 쏸; ) HANGUL SYLLABLE SSWAN
+C3F9;C3F9;110A 116A 11AC;C3F9;110A 116A 11AC; # (쏹; 쏹; 쏹; 쏹; 쏹; ) HANGUL SYLLABLE SSWANJ
+C3FA;C3FA;110A 116A 11AD;C3FA;110A 116A 11AD; # (쏺; 쏺; 쏺; 쏺; 쏺; ) HANGUL SYLLABLE SSWANH
+C3FB;C3FB;110A 116A 11AE;C3FB;110A 116A 11AE; # (쏻; 쏻; 쏻; 쏻; 쏻; ) HANGUL SYLLABLE SSWAD
+C3FC;C3FC;110A 116A 11AF;C3FC;110A 116A 11AF; # (쏼; 쏼; 쏼; 쏼; 쏼; ) HANGUL SYLLABLE SSWAL
+C3FD;C3FD;110A 116A 11B0;C3FD;110A 116A 11B0; # (쏽; 쏽; 쏽; 쏽; 쏽; ) HANGUL SYLLABLE SSWALG
+C3FE;C3FE;110A 116A 11B1;C3FE;110A 116A 11B1; # (쏾; 쏾; 쏾; 쏾; 쏾; ) HANGUL SYLLABLE SSWALM
+C3FF;C3FF;110A 116A 11B2;C3FF;110A 116A 11B2; # (쏿; 쏿; 쏿; 쏿; 쏿; ) HANGUL SYLLABLE SSWALB
+C400;C400;110A 116A 11B3;C400;110A 116A 11B3; # (쐀; 쐀; 쐀; 쐀; 쐀; ) HANGUL SYLLABLE SSWALS
+C401;C401;110A 116A 11B4;C401;110A 116A 11B4; # (쐁; 쐁; 쐁; 쐁; 쐁; ) HANGUL SYLLABLE SSWALT
+C402;C402;110A 116A 11B5;C402;110A 116A 11B5; # (쐂; 쐂; 쐂; 쐂; 쐂; ) HANGUL SYLLABLE SSWALP
+C403;C403;110A 116A 11B6;C403;110A 116A 11B6; # (쐃; 쐃; 쐃; 쐃; 쐃; ) HANGUL SYLLABLE SSWALH
+C404;C404;110A 116A 11B7;C404;110A 116A 11B7; # (쐄; 쐄; 쐄; 쐄; 쐄; ) HANGUL SYLLABLE SSWAM
+C405;C405;110A 116A 11B8;C405;110A 116A 11B8; # (쐅; 쐅; 쐅; 쐅; 쐅; ) HANGUL SYLLABLE SSWAB
+C406;C406;110A 116A 11B9;C406;110A 116A 11B9; # (쐆; 쐆; 쐆; 쐆; 쐆; ) HANGUL SYLLABLE SSWABS
+C407;C407;110A 116A 11BA;C407;110A 116A 11BA; # (쐇; 쐇; 쐇; 쐇; 쐇; ) HANGUL SYLLABLE SSWAS
+C408;C408;110A 116A 11BB;C408;110A 116A 11BB; # (쐈; 쐈; 쐈; 쐈; 쐈; ) HANGUL SYLLABLE SSWASS
+C409;C409;110A 116A 11BC;C409;110A 116A 11BC; # (쐉; 쐉; 쐉; 쐉; 쐉; ) HANGUL SYLLABLE SSWANG
+C40A;C40A;110A 116A 11BD;C40A;110A 116A 11BD; # (쐊; 쐊; 쐊; 쐊; 쐊; ) HANGUL SYLLABLE SSWAJ
+C40B;C40B;110A 116A 11BE;C40B;110A 116A 11BE; # (쐋; 쐋; 쐋; 쐋; 쐋; ) HANGUL SYLLABLE SSWAC
+C40C;C40C;110A 116A 11BF;C40C;110A 116A 11BF; # (쐌; 쐌; 쐌; 쐌; 쐌; ) HANGUL SYLLABLE SSWAK
+C40D;C40D;110A 116A 11C0;C40D;110A 116A 11C0; # (쐍; 쐍; 쐍; 쐍; 쐍; ) HANGUL SYLLABLE SSWAT
+C40E;C40E;110A 116A 11C1;C40E;110A 116A 11C1; # (쐎; 쐎; 쐎; 쐎; 쐎; ) HANGUL SYLLABLE SSWAP
+C40F;C40F;110A 116A 11C2;C40F;110A 116A 11C2; # (쐏; 쐏; 쐏; 쐏; 쐏; ) HANGUL SYLLABLE SSWAH
+C410;C410;110A 116B;C410;110A 116B; # (쐐; 쐐; 쐐; 쐐; 쐐; ) HANGUL SYLLABLE SSWAE
+C411;C411;110A 116B 11A8;C411;110A 116B 11A8; # (쐑; 쐑; 쐑; 쐑; 쐑; ) HANGUL SYLLABLE SSWAEG
+C412;C412;110A 116B 11A9;C412;110A 116B 11A9; # (쐒; 쐒; 쐒; 쐒; 쐒; ) HANGUL SYLLABLE SSWAEGG
+C413;C413;110A 116B 11AA;C413;110A 116B 11AA; # (쐓; 쐓; 쐓; 쐓; 쐓; ) HANGUL SYLLABLE SSWAEGS
+C414;C414;110A 116B 11AB;C414;110A 116B 11AB; # (쐔; 쐔; 쐔; 쐔; 쐔; ) HANGUL SYLLABLE SSWAEN
+C415;C415;110A 116B 11AC;C415;110A 116B 11AC; # (쐕; 쐕; 쐕; 쐕; 쐕; ) HANGUL SYLLABLE SSWAENJ
+C416;C416;110A 116B 11AD;C416;110A 116B 11AD; # (쐖; 쐖; 쐖; 쐖; 쐖; ) HANGUL SYLLABLE SSWAENH
+C417;C417;110A 116B 11AE;C417;110A 116B 11AE; # (쐗; 쐗; 쐗; 쐗; 쐗; ) HANGUL SYLLABLE SSWAED
+C418;C418;110A 116B 11AF;C418;110A 116B 11AF; # (쐘; 쐘; 쐘; 쐘; 쐘; ) HANGUL SYLLABLE SSWAEL
+C419;C419;110A 116B 11B0;C419;110A 116B 11B0; # (쐙; 쐙; 쐙; 쐙; 쐙; ) HANGUL SYLLABLE SSWAELG
+C41A;C41A;110A 116B 11B1;C41A;110A 116B 11B1; # (쐚; 쐚; 쐚; 쐚; 쐚; ) HANGUL SYLLABLE SSWAELM
+C41B;C41B;110A 116B 11B2;C41B;110A 116B 11B2; # (쐛; 쐛; 쐛; 쐛; 쐛; ) HANGUL SYLLABLE SSWAELB
+C41C;C41C;110A 116B 11B3;C41C;110A 116B 11B3; # (쐜; 쐜; 쐜; 쐜; 쐜; ) HANGUL SYLLABLE SSWAELS
+C41D;C41D;110A 116B 11B4;C41D;110A 116B 11B4; # (쐝; 쐝; 쐝; 쐝; 쐝; ) HANGUL SYLLABLE SSWAELT
+C41E;C41E;110A 116B 11B5;C41E;110A 116B 11B5; # (쐞; 쐞; 쐞; 쐞; 쐞; ) HANGUL SYLLABLE SSWAELP
+C41F;C41F;110A 116B 11B6;C41F;110A 116B 11B6; # (쐟; 쐟; 쐟; 쐟; 쐟; ) HANGUL SYLLABLE SSWAELH
+C420;C420;110A 116B 11B7;C420;110A 116B 11B7; # (쐠; 쐠; 쐠; 쐠; 쐠; ) HANGUL SYLLABLE SSWAEM
+C421;C421;110A 116B 11B8;C421;110A 116B 11B8; # (쐡; 쐡; 쐡; 쐡; 쐡; ) HANGUL SYLLABLE SSWAEB
+C422;C422;110A 116B 11B9;C422;110A 116B 11B9; # (쐢; 쐢; 쐢; 쐢; 쐢; ) HANGUL SYLLABLE SSWAEBS
+C423;C423;110A 116B 11BA;C423;110A 116B 11BA; # (쐣; 쐣; 쐣; 쐣; 쐣; ) HANGUL SYLLABLE SSWAES
+C424;C424;110A 116B 11BB;C424;110A 116B 11BB; # (쐤; 쐤; 쐤; 쐤; 쐤; ) HANGUL SYLLABLE SSWAESS
+C425;C425;110A 116B 11BC;C425;110A 116B 11BC; # (쐥; 쐥; 쐥; 쐥; 쐥; ) HANGUL SYLLABLE SSWAENG
+C426;C426;110A 116B 11BD;C426;110A 116B 11BD; # (쐦; 쐦; 쐦; 쐦; 쐦; ) HANGUL SYLLABLE SSWAEJ
+C427;C427;110A 116B 11BE;C427;110A 116B 11BE; # (쐧; 쐧; 쐧; 쐧; 쐧; ) HANGUL SYLLABLE SSWAEC
+C428;C428;110A 116B 11BF;C428;110A 116B 11BF; # (쐨; 쐨; 쐨; 쐨; 쐨; ) HANGUL SYLLABLE SSWAEK
+C429;C429;110A 116B 11C0;C429;110A 116B 11C0; # (쐩; 쐩; 쐩; 쐩; 쐩; ) HANGUL SYLLABLE SSWAET
+C42A;C42A;110A 116B 11C1;C42A;110A 116B 11C1; # (쐪; 쐪; 쐪; 쐪; 쐪; ) HANGUL SYLLABLE SSWAEP
+C42B;C42B;110A 116B 11C2;C42B;110A 116B 11C2; # (쐫; 쐫; 쐫; 쐫; 쐫; ) HANGUL SYLLABLE SSWAEH
+C42C;C42C;110A 116C;C42C;110A 116C; # (쐬; 쐬; 쐬; 쐬; 쐬; ) HANGUL SYLLABLE SSOE
+C42D;C42D;110A 116C 11A8;C42D;110A 116C 11A8; # (쐭; 쐭; 쐭; 쐭; 쐭; ) HANGUL SYLLABLE SSOEG
+C42E;C42E;110A 116C 11A9;C42E;110A 116C 11A9; # (쐮; 쐮; 쐮; 쐮; 쐮; ) HANGUL SYLLABLE SSOEGG
+C42F;C42F;110A 116C 11AA;C42F;110A 116C 11AA; # (쐯; 쐯; 쐯; 쐯; 쐯; ) HANGUL SYLLABLE SSOEGS
+C430;C430;110A 116C 11AB;C430;110A 116C 11AB; # (쐰; 쐰; 쐰; 쐰; 쐰; ) HANGUL SYLLABLE SSOEN
+C431;C431;110A 116C 11AC;C431;110A 116C 11AC; # (쐱; 쐱; 쐱; 쐱; 쐱; ) HANGUL SYLLABLE SSOENJ
+C432;C432;110A 116C 11AD;C432;110A 116C 11AD; # (쐲; 쐲; 쐲; 쐲; 쐲; ) HANGUL SYLLABLE SSOENH
+C433;C433;110A 116C 11AE;C433;110A 116C 11AE; # (쐳; 쐳; 쐳; 쐳; 쐳; ) HANGUL SYLLABLE SSOED
+C434;C434;110A 116C 11AF;C434;110A 116C 11AF; # (쐴; 쐴; 쐴; 쐴; 쐴; ) HANGUL SYLLABLE SSOEL
+C435;C435;110A 116C 11B0;C435;110A 116C 11B0; # (쐵; 쐵; 쐵; 쐵; 쐵; ) HANGUL SYLLABLE SSOELG
+C436;C436;110A 116C 11B1;C436;110A 116C 11B1; # (쐶; 쐶; 쐶; 쐶; 쐶; ) HANGUL SYLLABLE SSOELM
+C437;C437;110A 116C 11B2;C437;110A 116C 11B2; # (쐷; 쐷; 쐷; 쐷; 쐷; ) HANGUL SYLLABLE SSOELB
+C438;C438;110A 116C 11B3;C438;110A 116C 11B3; # (쐸; 쐸; 쐸; 쐸; 쐸; ) HANGUL SYLLABLE SSOELS
+C439;C439;110A 116C 11B4;C439;110A 116C 11B4; # (쐹; 쐹; 쐹; 쐹; 쐹; ) HANGUL SYLLABLE SSOELT
+C43A;C43A;110A 116C 11B5;C43A;110A 116C 11B5; # (쐺; 쐺; 쐺; 쐺; 쐺; ) HANGUL SYLLABLE SSOELP
+C43B;C43B;110A 116C 11B6;C43B;110A 116C 11B6; # (쐻; 쐻; 쐻; 쐻; 쐻; ) HANGUL SYLLABLE SSOELH
+C43C;C43C;110A 116C 11B7;C43C;110A 116C 11B7; # (쐼; 쐼; 쐼; 쐼; 쐼; ) HANGUL SYLLABLE SSOEM
+C43D;C43D;110A 116C 11B8;C43D;110A 116C 11B8; # (쐽; 쐽; 쐽; 쐽; 쐽; ) HANGUL SYLLABLE SSOEB
+C43E;C43E;110A 116C 11B9;C43E;110A 116C 11B9; # (쐾; 쐾; 쐾; 쐾; 쐾; ) HANGUL SYLLABLE SSOEBS
+C43F;C43F;110A 116C 11BA;C43F;110A 116C 11BA; # (쐿; 쐿; 쐿; 쐿; 쐿; ) HANGUL SYLLABLE SSOES
+C440;C440;110A 116C 11BB;C440;110A 116C 11BB; # (쑀; 쑀; 쑀; 쑀; 쑀; ) HANGUL SYLLABLE SSOESS
+C441;C441;110A 116C 11BC;C441;110A 116C 11BC; # (쑁; 쑁; 쑁; 쑁; 쑁; ) HANGUL SYLLABLE SSOENG
+C442;C442;110A 116C 11BD;C442;110A 116C 11BD; # (쑂; 쑂; 쑂; 쑂; 쑂; ) HANGUL SYLLABLE SSOEJ
+C443;C443;110A 116C 11BE;C443;110A 116C 11BE; # (쑃; 쑃; 쑃; 쑃; 쑃; ) HANGUL SYLLABLE SSOEC
+C444;C444;110A 116C 11BF;C444;110A 116C 11BF; # (쑄; 쑄; 쑄; 쑄; 쑄; ) HANGUL SYLLABLE SSOEK
+C445;C445;110A 116C 11C0;C445;110A 116C 11C0; # (쑅; 쑅; 쑅; 쑅; 쑅; ) HANGUL SYLLABLE SSOET
+C446;C446;110A 116C 11C1;C446;110A 116C 11C1; # (쑆; 쑆; 쑆; 쑆; 쑆; ) HANGUL SYLLABLE SSOEP
+C447;C447;110A 116C 11C2;C447;110A 116C 11C2; # (쑇; 쑇; 쑇; 쑇; 쑇; ) HANGUL SYLLABLE SSOEH
+C448;C448;110A 116D;C448;110A 116D; # (쑈; 쑈; 쑈; 쑈; 쑈; ) HANGUL SYLLABLE SSYO
+C449;C449;110A 116D 11A8;C449;110A 116D 11A8; # (쑉; 쑉; 쑉; 쑉; 쑉; ) HANGUL SYLLABLE SSYOG
+C44A;C44A;110A 116D 11A9;C44A;110A 116D 11A9; # (쑊; 쑊; 쑊; 쑊; 쑊; ) HANGUL SYLLABLE SSYOGG
+C44B;C44B;110A 116D 11AA;C44B;110A 116D 11AA; # (쑋; 쑋; 쑋; 쑋; 쑋; ) HANGUL SYLLABLE SSYOGS
+C44C;C44C;110A 116D 11AB;C44C;110A 116D 11AB; # (쑌; 쑌; 쑌; 쑌; 쑌; ) HANGUL SYLLABLE SSYON
+C44D;C44D;110A 116D 11AC;C44D;110A 116D 11AC; # (쑍; 쑍; 쑍; 쑍; 쑍; ) HANGUL SYLLABLE SSYONJ
+C44E;C44E;110A 116D 11AD;C44E;110A 116D 11AD; # (쑎; 쑎; 쑎; 쑎; 쑎; ) HANGUL SYLLABLE SSYONH
+C44F;C44F;110A 116D 11AE;C44F;110A 116D 11AE; # (쑏; 쑏; 쑏; 쑏; 쑏; ) HANGUL SYLLABLE SSYOD
+C450;C450;110A 116D 11AF;C450;110A 116D 11AF; # (쑐; 쑐; 쑐; 쑐; 쑐; ) HANGUL SYLLABLE SSYOL
+C451;C451;110A 116D 11B0;C451;110A 116D 11B0; # (쑑; 쑑; 쑑; 쑑; 쑑; ) HANGUL SYLLABLE SSYOLG
+C452;C452;110A 116D 11B1;C452;110A 116D 11B1; # (쑒; 쑒; 쑒; 쑒; 쑒; ) HANGUL SYLLABLE SSYOLM
+C453;C453;110A 116D 11B2;C453;110A 116D 11B2; # (쑓; 쑓; 쑓; 쑓; 쑓; ) HANGUL SYLLABLE SSYOLB
+C454;C454;110A 116D 11B3;C454;110A 116D 11B3; # (쑔; 쑔; 쑔; 쑔; 쑔; ) HANGUL SYLLABLE SSYOLS
+C455;C455;110A 116D 11B4;C455;110A 116D 11B4; # (쑕; 쑕; 쑕; 쑕; 쑕; ) HANGUL SYLLABLE SSYOLT
+C456;C456;110A 116D 11B5;C456;110A 116D 11B5; # (쑖; 쑖; 쑖; 쑖; 쑖; ) HANGUL SYLLABLE SSYOLP
+C457;C457;110A 116D 11B6;C457;110A 116D 11B6; # (쑗; 쑗; 쑗; 쑗; 쑗; ) HANGUL SYLLABLE SSYOLH
+C458;C458;110A 116D 11B7;C458;110A 116D 11B7; # (쑘; 쑘; 쑘; 쑘; 쑘; ) HANGUL SYLLABLE SSYOM
+C459;C459;110A 116D 11B8;C459;110A 116D 11B8; # (쑙; 쑙; 쑙; 쑙; 쑙; ) HANGUL SYLLABLE SSYOB
+C45A;C45A;110A 116D 11B9;C45A;110A 116D 11B9; # (쑚; 쑚; 쑚; 쑚; 쑚; ) HANGUL SYLLABLE SSYOBS
+C45B;C45B;110A 116D 11BA;C45B;110A 116D 11BA; # (쑛; 쑛; 쑛; 쑛; 쑛; ) HANGUL SYLLABLE SSYOS
+C45C;C45C;110A 116D 11BB;C45C;110A 116D 11BB; # (쑜; 쑜; 쑜; 쑜; 쑜; ) HANGUL SYLLABLE SSYOSS
+C45D;C45D;110A 116D 11BC;C45D;110A 116D 11BC; # (쑝; 쑝; 쑝; 쑝; 쑝; ) HANGUL SYLLABLE SSYONG
+C45E;C45E;110A 116D 11BD;C45E;110A 116D 11BD; # (쑞; 쑞; 쑞; 쑞; 쑞; ) HANGUL SYLLABLE SSYOJ
+C45F;C45F;110A 116D 11BE;C45F;110A 116D 11BE; # (쑟; 쑟; 쑟; 쑟; 쑟; ) HANGUL SYLLABLE SSYOC
+C460;C460;110A 116D 11BF;C460;110A 116D 11BF; # (쑠; 쑠; 쑠; 쑠; 쑠; ) HANGUL SYLLABLE SSYOK
+C461;C461;110A 116D 11C0;C461;110A 116D 11C0; # (쑡; 쑡; 쑡; 쑡; 쑡; ) HANGUL SYLLABLE SSYOT
+C462;C462;110A 116D 11C1;C462;110A 116D 11C1; # (쑢; 쑢; 쑢; 쑢; 쑢; ) HANGUL SYLLABLE SSYOP
+C463;C463;110A 116D 11C2;C463;110A 116D 11C2; # (쑣; 쑣; 쑣; 쑣; 쑣; ) HANGUL SYLLABLE SSYOH
+C464;C464;110A 116E;C464;110A 116E; # (쑤; 쑤; 쑤; 쑤; 쑤; ) HANGUL SYLLABLE SSU
+C465;C465;110A 116E 11A8;C465;110A 116E 11A8; # (쑥; 쑥; 쑥; 쑥; 쑥; ) HANGUL SYLLABLE SSUG
+C466;C466;110A 116E 11A9;C466;110A 116E 11A9; # (쑦; 쑦; 쑦; 쑦; 쑦; ) HANGUL SYLLABLE SSUGG
+C467;C467;110A 116E 11AA;C467;110A 116E 11AA; # (쑧; 쑧; 쑧; 쑧; 쑧; ) HANGUL SYLLABLE SSUGS
+C468;C468;110A 116E 11AB;C468;110A 116E 11AB; # (쑨; 쑨; 쑨; 쑨; 쑨; ) HANGUL SYLLABLE SSUN
+C469;C469;110A 116E 11AC;C469;110A 116E 11AC; # (쑩; 쑩; 쑩; 쑩; 쑩; ) HANGUL SYLLABLE SSUNJ
+C46A;C46A;110A 116E 11AD;C46A;110A 116E 11AD; # (쑪; 쑪; 쑪; 쑪; 쑪; ) HANGUL SYLLABLE SSUNH
+C46B;C46B;110A 116E 11AE;C46B;110A 116E 11AE; # (쑫; 쑫; 쑫; 쑫; 쑫; ) HANGUL SYLLABLE SSUD
+C46C;C46C;110A 116E 11AF;C46C;110A 116E 11AF; # (쑬; 쑬; 쑬; 쑬; 쑬; ) HANGUL SYLLABLE SSUL
+C46D;C46D;110A 116E 11B0;C46D;110A 116E 11B0; # (쑭; 쑭; 쑭; 쑭; 쑭; ) HANGUL SYLLABLE SSULG
+C46E;C46E;110A 116E 11B1;C46E;110A 116E 11B1; # (쑮; 쑮; 쑮; 쑮; 쑮; ) HANGUL SYLLABLE SSULM
+C46F;C46F;110A 116E 11B2;C46F;110A 116E 11B2; # (쑯; 쑯; 쑯; 쑯; 쑯; ) HANGUL SYLLABLE SSULB
+C470;C470;110A 116E 11B3;C470;110A 116E 11B3; # (쑰; 쑰; 쑰; 쑰; 쑰; ) HANGUL SYLLABLE SSULS
+C471;C471;110A 116E 11B4;C471;110A 116E 11B4; # (쑱; 쑱; 쑱; 쑱; 쑱; ) HANGUL SYLLABLE SSULT
+C472;C472;110A 116E 11B5;C472;110A 116E 11B5; # (쑲; 쑲; 쑲; 쑲; 쑲; ) HANGUL SYLLABLE SSULP
+C473;C473;110A 116E 11B6;C473;110A 116E 11B6; # (쑳; 쑳; 쑳; 쑳; 쑳; ) HANGUL SYLLABLE SSULH
+C474;C474;110A 116E 11B7;C474;110A 116E 11B7; # (쑴; 쑴; 쑴; 쑴; 쑴; ) HANGUL SYLLABLE SSUM
+C475;C475;110A 116E 11B8;C475;110A 116E 11B8; # (쑵; 쑵; 쑵; 쑵; 쑵; ) HANGUL SYLLABLE SSUB
+C476;C476;110A 116E 11B9;C476;110A 116E 11B9; # (쑶; 쑶; 쑶; 쑶; 쑶; ) HANGUL SYLLABLE SSUBS
+C477;C477;110A 116E 11BA;C477;110A 116E 11BA; # (쑷; 쑷; 쑷; 쑷; 쑷; ) HANGUL SYLLABLE SSUS
+C478;C478;110A 116E 11BB;C478;110A 116E 11BB; # (쑸; 쑸; 쑸; 쑸; 쑸; ) HANGUL SYLLABLE SSUSS
+C479;C479;110A 116E 11BC;C479;110A 116E 11BC; # (쑹; 쑹; 쑹; 쑹; 쑹; ) HANGUL SYLLABLE SSUNG
+C47A;C47A;110A 116E 11BD;C47A;110A 116E 11BD; # (쑺; 쑺; 쑺; 쑺; 쑺; ) HANGUL SYLLABLE SSUJ
+C47B;C47B;110A 116E 11BE;C47B;110A 116E 11BE; # (쑻; 쑻; 쑻; 쑻; 쑻; ) HANGUL SYLLABLE SSUC
+C47C;C47C;110A 116E 11BF;C47C;110A 116E 11BF; # (쑼; 쑼; 쑼; 쑼; 쑼; ) HANGUL SYLLABLE SSUK
+C47D;C47D;110A 116E 11C0;C47D;110A 116E 11C0; # (쑽; 쑽; 쑽; 쑽; 쑽; ) HANGUL SYLLABLE SSUT
+C47E;C47E;110A 116E 11C1;C47E;110A 116E 11C1; # (쑾; 쑾; 쑾; 쑾; 쑾; ) HANGUL SYLLABLE SSUP
+C47F;C47F;110A 116E 11C2;C47F;110A 116E 11C2; # (쑿; 쑿; 쑿; 쑿; 쑿; ) HANGUL SYLLABLE SSUH
+C480;C480;110A 116F;C480;110A 116F; # (쒀; 쒀; 쒀; 쒀; 쒀; ) HANGUL SYLLABLE SSWEO
+C481;C481;110A 116F 11A8;C481;110A 116F 11A8; # (쒁; 쒁; 쒁; 쒁; 쒁; ) HANGUL SYLLABLE SSWEOG
+C482;C482;110A 116F 11A9;C482;110A 116F 11A9; # (쒂; 쒂; 쒂; 쒂; 쒂; ) HANGUL SYLLABLE SSWEOGG
+C483;C483;110A 116F 11AA;C483;110A 116F 11AA; # (쒃; 쒃; 쒃; 쒃; 쒃; ) HANGUL SYLLABLE SSWEOGS
+C484;C484;110A 116F 11AB;C484;110A 116F 11AB; # (쒄; 쒄; 쒄; 쒄; 쒄; ) HANGUL SYLLABLE SSWEON
+C485;C485;110A 116F 11AC;C485;110A 116F 11AC; # (쒅; 쒅; 쒅; 쒅; 쒅; ) HANGUL SYLLABLE SSWEONJ
+C486;C486;110A 116F 11AD;C486;110A 116F 11AD; # (쒆; 쒆; 쒆; 쒆; 쒆; ) HANGUL SYLLABLE SSWEONH
+C487;C487;110A 116F 11AE;C487;110A 116F 11AE; # (쒇; 쒇; 쒇; 쒇; 쒇; ) HANGUL SYLLABLE SSWEOD
+C488;C488;110A 116F 11AF;C488;110A 116F 11AF; # (쒈; 쒈; 쒈; 쒈; 쒈; ) HANGUL SYLLABLE SSWEOL
+C489;C489;110A 116F 11B0;C489;110A 116F 11B0; # (쒉; 쒉; 쒉; 쒉; 쒉; ) HANGUL SYLLABLE SSWEOLG
+C48A;C48A;110A 116F 11B1;C48A;110A 116F 11B1; # (쒊; 쒊; 쒊; 쒊; 쒊; ) HANGUL SYLLABLE SSWEOLM
+C48B;C48B;110A 116F 11B2;C48B;110A 116F 11B2; # (쒋; 쒋; 쒋; 쒋; 쒋; ) HANGUL SYLLABLE SSWEOLB
+C48C;C48C;110A 116F 11B3;C48C;110A 116F 11B3; # (쒌; 쒌; 쒌; 쒌; 쒌; ) HANGUL SYLLABLE SSWEOLS
+C48D;C48D;110A 116F 11B4;C48D;110A 116F 11B4; # (쒍; 쒍; 쒍; 쒍; 쒍; ) HANGUL SYLLABLE SSWEOLT
+C48E;C48E;110A 116F 11B5;C48E;110A 116F 11B5; # (쒎; 쒎; 쒎; 쒎; 쒎; ) HANGUL SYLLABLE SSWEOLP
+C48F;C48F;110A 116F 11B6;C48F;110A 116F 11B6; # (쒏; 쒏; 쒏; 쒏; 쒏; ) HANGUL SYLLABLE SSWEOLH
+C490;C490;110A 116F 11B7;C490;110A 116F 11B7; # (쒐; 쒐; 쒐; 쒐; 쒐; ) HANGUL SYLLABLE SSWEOM
+C491;C491;110A 116F 11B8;C491;110A 116F 11B8; # (쒑; 쒑; 쒑; 쒑; 쒑; ) HANGUL SYLLABLE SSWEOB
+C492;C492;110A 116F 11B9;C492;110A 116F 11B9; # (쒒; 쒒; 쒒; 쒒; 쒒; ) HANGUL SYLLABLE SSWEOBS
+C493;C493;110A 116F 11BA;C493;110A 116F 11BA; # (쒓; 쒓; 쒓; 쒓; 쒓; ) HANGUL SYLLABLE SSWEOS
+C494;C494;110A 116F 11BB;C494;110A 116F 11BB; # (쒔; 쒔; 쒔; 쒔; 쒔; ) HANGUL SYLLABLE SSWEOSS
+C495;C495;110A 116F 11BC;C495;110A 116F 11BC; # (쒕; 쒕; 쒕; 쒕; 쒕; ) HANGUL SYLLABLE SSWEONG
+C496;C496;110A 116F 11BD;C496;110A 116F 11BD; # (쒖; 쒖; 쒖; 쒖; 쒖; ) HANGUL SYLLABLE SSWEOJ
+C497;C497;110A 116F 11BE;C497;110A 116F 11BE; # (쒗; 쒗; 쒗; 쒗; 쒗; ) HANGUL SYLLABLE SSWEOC
+C498;C498;110A 116F 11BF;C498;110A 116F 11BF; # (쒘; 쒘; 쒘; 쒘; 쒘; ) HANGUL SYLLABLE SSWEOK
+C499;C499;110A 116F 11C0;C499;110A 116F 11C0; # (쒙; 쒙; 쒙; 쒙; 쒙; ) HANGUL SYLLABLE SSWEOT
+C49A;C49A;110A 116F 11C1;C49A;110A 116F 11C1; # (쒚; 쒚; 쒚; 쒚; 쒚; ) HANGUL SYLLABLE SSWEOP
+C49B;C49B;110A 116F 11C2;C49B;110A 116F 11C2; # (쒛; 쒛; 쒛; 쒛; 쒛; ) HANGUL SYLLABLE SSWEOH
+C49C;C49C;110A 1170;C49C;110A 1170; # (쒜; 쒜; 쒜; 쒜; 쒜; ) HANGUL SYLLABLE SSWE
+C49D;C49D;110A 1170 11A8;C49D;110A 1170 11A8; # (쒝; 쒝; 쒝; 쒝; 쒝; ) HANGUL SYLLABLE SSWEG
+C49E;C49E;110A 1170 11A9;C49E;110A 1170 11A9; # (쒞; 쒞; 쒞; 쒞; 쒞; ) HANGUL SYLLABLE SSWEGG
+C49F;C49F;110A 1170 11AA;C49F;110A 1170 11AA; # (쒟; 쒟; 쒟; 쒟; 쒟; ) HANGUL SYLLABLE SSWEGS
+C4A0;C4A0;110A 1170 11AB;C4A0;110A 1170 11AB; # (쒠; 쒠; 쒠; 쒠; 쒠; ) HANGUL SYLLABLE SSWEN
+C4A1;C4A1;110A 1170 11AC;C4A1;110A 1170 11AC; # (쒡; 쒡; 쒡; 쒡; 쒡; ) HANGUL SYLLABLE SSWENJ
+C4A2;C4A2;110A 1170 11AD;C4A2;110A 1170 11AD; # (쒢; 쒢; 쒢; 쒢; 쒢; ) HANGUL SYLLABLE SSWENH
+C4A3;C4A3;110A 1170 11AE;C4A3;110A 1170 11AE; # (쒣; 쒣; 쒣; 쒣; 쒣; ) HANGUL SYLLABLE SSWED
+C4A4;C4A4;110A 1170 11AF;C4A4;110A 1170 11AF; # (쒤; 쒤; 쒤; 쒤; 쒤; ) HANGUL SYLLABLE SSWEL
+C4A5;C4A5;110A 1170 11B0;C4A5;110A 1170 11B0; # (쒥; 쒥; 쒥; 쒥; 쒥; ) HANGUL SYLLABLE SSWELG
+C4A6;C4A6;110A 1170 11B1;C4A6;110A 1170 11B1; # (쒦; 쒦; 쒦; 쒦; 쒦; ) HANGUL SYLLABLE SSWELM
+C4A7;C4A7;110A 1170 11B2;C4A7;110A 1170 11B2; # (쒧; 쒧; 쒧; 쒧; 쒧; ) HANGUL SYLLABLE SSWELB
+C4A8;C4A8;110A 1170 11B3;C4A8;110A 1170 11B3; # (쒨; 쒨; 쒨; 쒨; 쒨; ) HANGUL SYLLABLE SSWELS
+C4A9;C4A9;110A 1170 11B4;C4A9;110A 1170 11B4; # (쒩; 쒩; 쒩; 쒩; 쒩; ) HANGUL SYLLABLE SSWELT
+C4AA;C4AA;110A 1170 11B5;C4AA;110A 1170 11B5; # (쒪; 쒪; 쒪; 쒪; 쒪; ) HANGUL SYLLABLE SSWELP
+C4AB;C4AB;110A 1170 11B6;C4AB;110A 1170 11B6; # (쒫; 쒫; 쒫; 쒫; 쒫; ) HANGUL SYLLABLE SSWELH
+C4AC;C4AC;110A 1170 11B7;C4AC;110A 1170 11B7; # (쒬; 쒬; 쒬; 쒬; 쒬; ) HANGUL SYLLABLE SSWEM
+C4AD;C4AD;110A 1170 11B8;C4AD;110A 1170 11B8; # (쒭; 쒭; 쒭; 쒭; 쒭; ) HANGUL SYLLABLE SSWEB
+C4AE;C4AE;110A 1170 11B9;C4AE;110A 1170 11B9; # (쒮; 쒮; 쒮; 쒮; 쒮; ) HANGUL SYLLABLE SSWEBS
+C4AF;C4AF;110A 1170 11BA;C4AF;110A 1170 11BA; # (쒯; 쒯; 쒯; 쒯; 쒯; ) HANGUL SYLLABLE SSWES
+C4B0;C4B0;110A 1170 11BB;C4B0;110A 1170 11BB; # (쒰; 쒰; 쒰; 쒰; 쒰; ) HANGUL SYLLABLE SSWESS
+C4B1;C4B1;110A 1170 11BC;C4B1;110A 1170 11BC; # (쒱; 쒱; 쒱; 쒱; 쒱; ) HANGUL SYLLABLE SSWENG
+C4B2;C4B2;110A 1170 11BD;C4B2;110A 1170 11BD; # (쒲; 쒲; 쒲; 쒲; 쒲; ) HANGUL SYLLABLE SSWEJ
+C4B3;C4B3;110A 1170 11BE;C4B3;110A 1170 11BE; # (쒳; 쒳; 쒳; 쒳; 쒳; ) HANGUL SYLLABLE SSWEC
+C4B4;C4B4;110A 1170 11BF;C4B4;110A 1170 11BF; # (쒴; 쒴; 쒴; 쒴; 쒴; ) HANGUL SYLLABLE SSWEK
+C4B5;C4B5;110A 1170 11C0;C4B5;110A 1170 11C0; # (쒵; 쒵; 쒵; 쒵; 쒵; ) HANGUL SYLLABLE SSWET
+C4B6;C4B6;110A 1170 11C1;C4B6;110A 1170 11C1; # (쒶; 쒶; 쒶; 쒶; 쒶; ) HANGUL SYLLABLE SSWEP
+C4B7;C4B7;110A 1170 11C2;C4B7;110A 1170 11C2; # (쒷; 쒷; 쒷; 쒷; 쒷; ) HANGUL SYLLABLE SSWEH
+C4B8;C4B8;110A 1171;C4B8;110A 1171; # (쒸; 쒸; 쒸; 쒸; 쒸; ) HANGUL SYLLABLE SSWI
+C4B9;C4B9;110A 1171 11A8;C4B9;110A 1171 11A8; # (쒹; 쒹; 쒹; 쒹; 쒹; ) HANGUL SYLLABLE SSWIG
+C4BA;C4BA;110A 1171 11A9;C4BA;110A 1171 11A9; # (쒺; 쒺; 쒺; 쒺; 쒺; ) HANGUL SYLLABLE SSWIGG
+C4BB;C4BB;110A 1171 11AA;C4BB;110A 1171 11AA; # (쒻; 쒻; 쒻; 쒻; 쒻; ) HANGUL SYLLABLE SSWIGS
+C4BC;C4BC;110A 1171 11AB;C4BC;110A 1171 11AB; # (쒼; 쒼; 쒼; 쒼; 쒼; ) HANGUL SYLLABLE SSWIN
+C4BD;C4BD;110A 1171 11AC;C4BD;110A 1171 11AC; # (쒽; 쒽; 쒽; 쒽; 쒽; ) HANGUL SYLLABLE SSWINJ
+C4BE;C4BE;110A 1171 11AD;C4BE;110A 1171 11AD; # (쒾; 쒾; 쒾; 쒾; 쒾; ) HANGUL SYLLABLE SSWINH
+C4BF;C4BF;110A 1171 11AE;C4BF;110A 1171 11AE; # (쒿; 쒿; 쒿; 쒿; 쒿; ) HANGUL SYLLABLE SSWID
+C4C0;C4C0;110A 1171 11AF;C4C0;110A 1171 11AF; # (쓀; 쓀; 쓀; 쓀; 쓀; ) HANGUL SYLLABLE SSWIL
+C4C1;C4C1;110A 1171 11B0;C4C1;110A 1171 11B0; # (쓁; 쓁; 쓁; 쓁; 쓁; ) HANGUL SYLLABLE SSWILG
+C4C2;C4C2;110A 1171 11B1;C4C2;110A 1171 11B1; # (쓂; 쓂; 쓂; 쓂; 쓂; ) HANGUL SYLLABLE SSWILM
+C4C3;C4C3;110A 1171 11B2;C4C3;110A 1171 11B2; # (쓃; 쓃; 쓃; 쓃; 쓃; ) HANGUL SYLLABLE SSWILB
+C4C4;C4C4;110A 1171 11B3;C4C4;110A 1171 11B3; # (쓄; 쓄; 쓄; 쓄; 쓄; ) HANGUL SYLLABLE SSWILS
+C4C5;C4C5;110A 1171 11B4;C4C5;110A 1171 11B4; # (쓅; 쓅; 쓅; 쓅; 쓅; ) HANGUL SYLLABLE SSWILT
+C4C6;C4C6;110A 1171 11B5;C4C6;110A 1171 11B5; # (쓆; 쓆; 쓆; 쓆; 쓆; ) HANGUL SYLLABLE SSWILP
+C4C7;C4C7;110A 1171 11B6;C4C7;110A 1171 11B6; # (쓇; 쓇; 쓇; 쓇; 쓇; ) HANGUL SYLLABLE SSWILH
+C4C8;C4C8;110A 1171 11B7;C4C8;110A 1171 11B7; # (쓈; 쓈; 쓈; 쓈; 쓈; ) HANGUL SYLLABLE SSWIM
+C4C9;C4C9;110A 1171 11B8;C4C9;110A 1171 11B8; # (쓉; 쓉; 쓉; 쓉; 쓉; ) HANGUL SYLLABLE SSWIB
+C4CA;C4CA;110A 1171 11B9;C4CA;110A 1171 11B9; # (쓊; 쓊; 쓊; 쓊; 쓊; ) HANGUL SYLLABLE SSWIBS
+C4CB;C4CB;110A 1171 11BA;C4CB;110A 1171 11BA; # (쓋; 쓋; 쓋; 쓋; 쓋; ) HANGUL SYLLABLE SSWIS
+C4CC;C4CC;110A 1171 11BB;C4CC;110A 1171 11BB; # (쓌; 쓌; 쓌; 쓌; 쓌; ) HANGUL SYLLABLE SSWISS
+C4CD;C4CD;110A 1171 11BC;C4CD;110A 1171 11BC; # (쓍; 쓍; 쓍; 쓍; 쓍; ) HANGUL SYLLABLE SSWING
+C4CE;C4CE;110A 1171 11BD;C4CE;110A 1171 11BD; # (쓎; 쓎; 쓎; 쓎; 쓎; ) HANGUL SYLLABLE SSWIJ
+C4CF;C4CF;110A 1171 11BE;C4CF;110A 1171 11BE; # (쓏; 쓏; 쓏; 쓏; 쓏; ) HANGUL SYLLABLE SSWIC
+C4D0;C4D0;110A 1171 11BF;C4D0;110A 1171 11BF; # (쓐; 쓐; 쓐; 쓐; 쓐; ) HANGUL SYLLABLE SSWIK
+C4D1;C4D1;110A 1171 11C0;C4D1;110A 1171 11C0; # (쓑; 쓑; 쓑; 쓑; 쓑; ) HANGUL SYLLABLE SSWIT
+C4D2;C4D2;110A 1171 11C1;C4D2;110A 1171 11C1; # (쓒; 쓒; 쓒; 쓒; 쓒; ) HANGUL SYLLABLE SSWIP
+C4D3;C4D3;110A 1171 11C2;C4D3;110A 1171 11C2; # (쓓; 쓓; 쓓; 쓓; 쓓; ) HANGUL SYLLABLE SSWIH
+C4D4;C4D4;110A 1172;C4D4;110A 1172; # (쓔; 쓔; 쓔; 쓔; 쓔; ) HANGUL SYLLABLE SSYU
+C4D5;C4D5;110A 1172 11A8;C4D5;110A 1172 11A8; # (쓕; 쓕; 쓕; 쓕; 쓕; ) HANGUL SYLLABLE SSYUG
+C4D6;C4D6;110A 1172 11A9;C4D6;110A 1172 11A9; # (쓖; 쓖; 쓖; 쓖; 쓖; ) HANGUL SYLLABLE SSYUGG
+C4D7;C4D7;110A 1172 11AA;C4D7;110A 1172 11AA; # (쓗; 쓗; 쓗; 쓗; 쓗; ) HANGUL SYLLABLE SSYUGS
+C4D8;C4D8;110A 1172 11AB;C4D8;110A 1172 11AB; # (쓘; 쓘; 쓘; 쓘; 쓘; ) HANGUL SYLLABLE SSYUN
+C4D9;C4D9;110A 1172 11AC;C4D9;110A 1172 11AC; # (쓙; 쓙; 쓙; 쓙; 쓙; ) HANGUL SYLLABLE SSYUNJ
+C4DA;C4DA;110A 1172 11AD;C4DA;110A 1172 11AD; # (쓚; 쓚; 쓚; 쓚; 쓚; ) HANGUL SYLLABLE SSYUNH
+C4DB;C4DB;110A 1172 11AE;C4DB;110A 1172 11AE; # (쓛; 쓛; 쓛; 쓛; 쓛; ) HANGUL SYLLABLE SSYUD
+C4DC;C4DC;110A 1172 11AF;C4DC;110A 1172 11AF; # (쓜; 쓜; 쓜; 쓜; 쓜; ) HANGUL SYLLABLE SSYUL
+C4DD;C4DD;110A 1172 11B0;C4DD;110A 1172 11B0; # (쓝; 쓝; 쓝; 쓝; 쓝; ) HANGUL SYLLABLE SSYULG
+C4DE;C4DE;110A 1172 11B1;C4DE;110A 1172 11B1; # (쓞; 쓞; 쓞; 쓞; 쓞; ) HANGUL SYLLABLE SSYULM
+C4DF;C4DF;110A 1172 11B2;C4DF;110A 1172 11B2; # (쓟; 쓟; 쓟; 쓟; 쓟; ) HANGUL SYLLABLE SSYULB
+C4E0;C4E0;110A 1172 11B3;C4E0;110A 1172 11B3; # (쓠; 쓠; 쓠; 쓠; 쓠; ) HANGUL SYLLABLE SSYULS
+C4E1;C4E1;110A 1172 11B4;C4E1;110A 1172 11B4; # (쓡; 쓡; 쓡; 쓡; 쓡; ) HANGUL SYLLABLE SSYULT
+C4E2;C4E2;110A 1172 11B5;C4E2;110A 1172 11B5; # (쓢; 쓢; 쓢; 쓢; 쓢; ) HANGUL SYLLABLE SSYULP
+C4E3;C4E3;110A 1172 11B6;C4E3;110A 1172 11B6; # (쓣; 쓣; 쓣; 쓣; 쓣; ) HANGUL SYLLABLE SSYULH
+C4E4;C4E4;110A 1172 11B7;C4E4;110A 1172 11B7; # (쓤; 쓤; 쓤; 쓤; 쓤; ) HANGUL SYLLABLE SSYUM
+C4E5;C4E5;110A 1172 11B8;C4E5;110A 1172 11B8; # (쓥; 쓥; 쓥; 쓥; 쓥; ) HANGUL SYLLABLE SSYUB
+C4E6;C4E6;110A 1172 11B9;C4E6;110A 1172 11B9; # (쓦; 쓦; 쓦; 쓦; 쓦; ) HANGUL SYLLABLE SSYUBS
+C4E7;C4E7;110A 1172 11BA;C4E7;110A 1172 11BA; # (쓧; 쓧; 쓧; 쓧; 쓧; ) HANGUL SYLLABLE SSYUS
+C4E8;C4E8;110A 1172 11BB;C4E8;110A 1172 11BB; # (쓨; 쓨; 쓨; 쓨; 쓨; ) HANGUL SYLLABLE SSYUSS
+C4E9;C4E9;110A 1172 11BC;C4E9;110A 1172 11BC; # (쓩; 쓩; 쓩; 쓩; 쓩; ) HANGUL SYLLABLE SSYUNG
+C4EA;C4EA;110A 1172 11BD;C4EA;110A 1172 11BD; # (쓪; 쓪; 쓪; 쓪; 쓪; ) HANGUL SYLLABLE SSYUJ
+C4EB;C4EB;110A 1172 11BE;C4EB;110A 1172 11BE; # (쓫; 쓫; 쓫; 쓫; 쓫; ) HANGUL SYLLABLE SSYUC
+C4EC;C4EC;110A 1172 11BF;C4EC;110A 1172 11BF; # (쓬; 쓬; 쓬; 쓬; 쓬; ) HANGUL SYLLABLE SSYUK
+C4ED;C4ED;110A 1172 11C0;C4ED;110A 1172 11C0; # (쓭; 쓭; 쓭; 쓭; 쓭; ) HANGUL SYLLABLE SSYUT
+C4EE;C4EE;110A 1172 11C1;C4EE;110A 1172 11C1; # (쓮; 쓮; 쓮; 쓮; 쓮; ) HANGUL SYLLABLE SSYUP
+C4EF;C4EF;110A 1172 11C2;C4EF;110A 1172 11C2; # (쓯; 쓯; 쓯; 쓯; 쓯; ) HANGUL SYLLABLE SSYUH
+C4F0;C4F0;110A 1173;C4F0;110A 1173; # (쓰; 쓰; 쓰; 쓰; 쓰; ) HANGUL SYLLABLE SSEU
+C4F1;C4F1;110A 1173 11A8;C4F1;110A 1173 11A8; # (쓱; 쓱; 쓱; 쓱; 쓱; ) HANGUL SYLLABLE SSEUG
+C4F2;C4F2;110A 1173 11A9;C4F2;110A 1173 11A9; # (쓲; 쓲; 쓲; 쓲; 쓲; ) HANGUL SYLLABLE SSEUGG
+C4F3;C4F3;110A 1173 11AA;C4F3;110A 1173 11AA; # (쓳; 쓳; 쓳; 쓳; 쓳; ) HANGUL SYLLABLE SSEUGS
+C4F4;C4F4;110A 1173 11AB;C4F4;110A 1173 11AB; # (쓴; 쓴; 쓴; 쓴; 쓴; ) HANGUL SYLLABLE SSEUN
+C4F5;C4F5;110A 1173 11AC;C4F5;110A 1173 11AC; # (쓵; 쓵; 쓵; 쓵; 쓵; ) HANGUL SYLLABLE SSEUNJ
+C4F6;C4F6;110A 1173 11AD;C4F6;110A 1173 11AD; # (쓶; 쓶; 쓶; 쓶; 쓶; ) HANGUL SYLLABLE SSEUNH
+C4F7;C4F7;110A 1173 11AE;C4F7;110A 1173 11AE; # (쓷; 쓷; 쓷; 쓷; 쓷; ) HANGUL SYLLABLE SSEUD
+C4F8;C4F8;110A 1173 11AF;C4F8;110A 1173 11AF; # (쓸; 쓸; 쓸; 쓸; 쓸; ) HANGUL SYLLABLE SSEUL
+C4F9;C4F9;110A 1173 11B0;C4F9;110A 1173 11B0; # (쓹; 쓹; 쓹; 쓹; 쓹; ) HANGUL SYLLABLE SSEULG
+C4FA;C4FA;110A 1173 11B1;C4FA;110A 1173 11B1; # (쓺; 쓺; 쓺; 쓺; 쓺; ) HANGUL SYLLABLE SSEULM
+C4FB;C4FB;110A 1173 11B2;C4FB;110A 1173 11B2; # (쓻; 쓻; 쓻; 쓻; 쓻; ) HANGUL SYLLABLE SSEULB
+C4FC;C4FC;110A 1173 11B3;C4FC;110A 1173 11B3; # (쓼; 쓼; 쓼; 쓼; 쓼; ) HANGUL SYLLABLE SSEULS
+C4FD;C4FD;110A 1173 11B4;C4FD;110A 1173 11B4; # (쓽; 쓽; 쓽; 쓽; 쓽; ) HANGUL SYLLABLE SSEULT
+C4FE;C4FE;110A 1173 11B5;C4FE;110A 1173 11B5; # (쓾; 쓾; 쓾; 쓾; 쓾; ) HANGUL SYLLABLE SSEULP
+C4FF;C4FF;110A 1173 11B6;C4FF;110A 1173 11B6; # (쓿; 쓿; 쓿; 쓿; 쓿; ) HANGUL SYLLABLE SSEULH
+C500;C500;110A 1173 11B7;C500;110A 1173 11B7; # (씀; 씀; 씀; 씀; 씀; ) HANGUL SYLLABLE SSEUM
+C501;C501;110A 1173 11B8;C501;110A 1173 11B8; # (씁; 씁; 씁; 씁; 씁; ) HANGUL SYLLABLE SSEUB
+C502;C502;110A 1173 11B9;C502;110A 1173 11B9; # (씂; 씂; 씂; 씂; 씂; ) HANGUL SYLLABLE SSEUBS
+C503;C503;110A 1173 11BA;C503;110A 1173 11BA; # (씃; 씃; 씃; 씃; 씃; ) HANGUL SYLLABLE SSEUS
+C504;C504;110A 1173 11BB;C504;110A 1173 11BB; # (씄; 씄; 씄; 씄; 씄; ) HANGUL SYLLABLE SSEUSS
+C505;C505;110A 1173 11BC;C505;110A 1173 11BC; # (씅; 씅; 씅; 씅; 씅; ) HANGUL SYLLABLE SSEUNG
+C506;C506;110A 1173 11BD;C506;110A 1173 11BD; # (씆; 씆; 씆; 씆; 씆; ) HANGUL SYLLABLE SSEUJ
+C507;C507;110A 1173 11BE;C507;110A 1173 11BE; # (씇; 씇; 씇; 씇; 씇; ) HANGUL SYLLABLE SSEUC
+C508;C508;110A 1173 11BF;C508;110A 1173 11BF; # (씈; 씈; 씈; 씈; 씈; ) HANGUL SYLLABLE SSEUK
+C509;C509;110A 1173 11C0;C509;110A 1173 11C0; # (씉; 씉; 씉; 씉; 씉; ) HANGUL SYLLABLE SSEUT
+C50A;C50A;110A 1173 11C1;C50A;110A 1173 11C1; # (씊; 씊; 씊; 씊; 씊; ) HANGUL SYLLABLE SSEUP
+C50B;C50B;110A 1173 11C2;C50B;110A 1173 11C2; # (씋; 씋; 씋; 씋; 씋; ) HANGUL SYLLABLE SSEUH
+C50C;C50C;110A 1174;C50C;110A 1174; # (씌; 씌; 씌; 씌; 씌; ) HANGUL SYLLABLE SSYI
+C50D;C50D;110A 1174 11A8;C50D;110A 1174 11A8; # (씍; 씍; 씍; 씍; 씍; ) HANGUL SYLLABLE SSYIG
+C50E;C50E;110A 1174 11A9;C50E;110A 1174 11A9; # (씎; 씎; 씎; 씎; 씎; ) HANGUL SYLLABLE SSYIGG
+C50F;C50F;110A 1174 11AA;C50F;110A 1174 11AA; # (씏; 씏; 씏; 씏; 씏; ) HANGUL SYLLABLE SSYIGS
+C510;C510;110A 1174 11AB;C510;110A 1174 11AB; # (씐; 씐; 씐; 씐; 씐; ) HANGUL SYLLABLE SSYIN
+C511;C511;110A 1174 11AC;C511;110A 1174 11AC; # (씑; 씑; 씑; 씑; 씑; ) HANGUL SYLLABLE SSYINJ
+C512;C512;110A 1174 11AD;C512;110A 1174 11AD; # (씒; 씒; 씒; 씒; 씒; ) HANGUL SYLLABLE SSYINH
+C513;C513;110A 1174 11AE;C513;110A 1174 11AE; # (씓; 씓; 씓; 씓; 씓; ) HANGUL SYLLABLE SSYID
+C514;C514;110A 1174 11AF;C514;110A 1174 11AF; # (씔; 씔; 씔; 씔; 씔; ) HANGUL SYLLABLE SSYIL
+C515;C515;110A 1174 11B0;C515;110A 1174 11B0; # (씕; 씕; 씕; 씕; 씕; ) HANGUL SYLLABLE SSYILG
+C516;C516;110A 1174 11B1;C516;110A 1174 11B1; # (씖; 씖; 씖; 씖; 씖; ) HANGUL SYLLABLE SSYILM
+C517;C517;110A 1174 11B2;C517;110A 1174 11B2; # (씗; 씗; 씗; 씗; 씗; ) HANGUL SYLLABLE SSYILB
+C518;C518;110A 1174 11B3;C518;110A 1174 11B3; # (씘; 씘; 씘; 씘; 씘; ) HANGUL SYLLABLE SSYILS
+C519;C519;110A 1174 11B4;C519;110A 1174 11B4; # (씙; 씙; 씙; 씙; 씙; ) HANGUL SYLLABLE SSYILT
+C51A;C51A;110A 1174 11B5;C51A;110A 1174 11B5; # (씚; 씚; 씚; 씚; 씚; ) HANGUL SYLLABLE SSYILP
+C51B;C51B;110A 1174 11B6;C51B;110A 1174 11B6; # (씛; 씛; 씛; 씛; 씛; ) HANGUL SYLLABLE SSYILH
+C51C;C51C;110A 1174 11B7;C51C;110A 1174 11B7; # (씜; 씜; 씜; 씜; 씜; ) HANGUL SYLLABLE SSYIM
+C51D;C51D;110A 1174 11B8;C51D;110A 1174 11B8; # (씝; 씝; 씝; 씝; 씝; ) HANGUL SYLLABLE SSYIB
+C51E;C51E;110A 1174 11B9;C51E;110A 1174 11B9; # (씞; 씞; 씞; 씞; 씞; ) HANGUL SYLLABLE SSYIBS
+C51F;C51F;110A 1174 11BA;C51F;110A 1174 11BA; # (씟; 씟; 씟; 씟; 씟; ) HANGUL SYLLABLE SSYIS
+C520;C520;110A 1174 11BB;C520;110A 1174 11BB; # (씠; 씠; 씠; 씠; 씠; ) HANGUL SYLLABLE SSYISS
+C521;C521;110A 1174 11BC;C521;110A 1174 11BC; # (씡; 씡; 씡; 씡; 씡; ) HANGUL SYLLABLE SSYING
+C522;C522;110A 1174 11BD;C522;110A 1174 11BD; # (씢; 씢; 씢; 씢; 씢; ) HANGUL SYLLABLE SSYIJ
+C523;C523;110A 1174 11BE;C523;110A 1174 11BE; # (씣; 씣; 씣; 씣; 씣; ) HANGUL SYLLABLE SSYIC
+C524;C524;110A 1174 11BF;C524;110A 1174 11BF; # (씤; 씤; 씤; 씤; 씤; ) HANGUL SYLLABLE SSYIK
+C525;C525;110A 1174 11C0;C525;110A 1174 11C0; # (씥; 씥; 씥; 씥; 씥; ) HANGUL SYLLABLE SSYIT
+C526;C526;110A 1174 11C1;C526;110A 1174 11C1; # (씦; 씦; 씦; 씦; 씦; ) HANGUL SYLLABLE SSYIP
+C527;C527;110A 1174 11C2;C527;110A 1174 11C2; # (씧; 씧; 씧; 씧; 씧; ) HANGUL SYLLABLE SSYIH
+C528;C528;110A 1175;C528;110A 1175; # (씨; 씨; 씨; 씨; 씨; ) HANGUL SYLLABLE SSI
+C529;C529;110A 1175 11A8;C529;110A 1175 11A8; # (씩; 씩; 씩; 씩; 씩; ) HANGUL SYLLABLE SSIG
+C52A;C52A;110A 1175 11A9;C52A;110A 1175 11A9; # (씪; 씪; 씪; 씪; 씪; ) HANGUL SYLLABLE SSIGG
+C52B;C52B;110A 1175 11AA;C52B;110A 1175 11AA; # (씫; 씫; 씫; 씫; 씫; ) HANGUL SYLLABLE SSIGS
+C52C;C52C;110A 1175 11AB;C52C;110A 1175 11AB; # (씬; 씬; 씬; 씬; 씬; ) HANGUL SYLLABLE SSIN
+C52D;C52D;110A 1175 11AC;C52D;110A 1175 11AC; # (씭; 씭; 씭; 씭; 씭; ) HANGUL SYLLABLE SSINJ
+C52E;C52E;110A 1175 11AD;C52E;110A 1175 11AD; # (씮; 씮; 씮; 씮; 씮; ) HANGUL SYLLABLE SSINH
+C52F;C52F;110A 1175 11AE;C52F;110A 1175 11AE; # (씯; 씯; 씯; 씯; 씯; ) HANGUL SYLLABLE SSID
+C530;C530;110A 1175 11AF;C530;110A 1175 11AF; # (씰; 씰; 씰; 씰; 씰; ) HANGUL SYLLABLE SSIL
+C531;C531;110A 1175 11B0;C531;110A 1175 11B0; # (씱; 씱; 씱; 씱; 씱; ) HANGUL SYLLABLE SSILG
+C532;C532;110A 1175 11B1;C532;110A 1175 11B1; # (씲; 씲; 씲; 씲; 씲; ) HANGUL SYLLABLE SSILM
+C533;C533;110A 1175 11B2;C533;110A 1175 11B2; # (씳; 씳; 씳; 씳; 씳; ) HANGUL SYLLABLE SSILB
+C534;C534;110A 1175 11B3;C534;110A 1175 11B3; # (씴; 씴; 씴; 씴; 씴; ) HANGUL SYLLABLE SSILS
+C535;C535;110A 1175 11B4;C535;110A 1175 11B4; # (씵; 씵; 씵; 씵; 씵; ) HANGUL SYLLABLE SSILT
+C536;C536;110A 1175 11B5;C536;110A 1175 11B5; # (씶; 씶; 씶; 씶; 씶; ) HANGUL SYLLABLE SSILP
+C537;C537;110A 1175 11B6;C537;110A 1175 11B6; # (씷; 씷; 씷; 씷; 씷; ) HANGUL SYLLABLE SSILH
+C538;C538;110A 1175 11B7;C538;110A 1175 11B7; # (씸; 씸; 씸; 씸; 씸; ) HANGUL SYLLABLE SSIM
+C539;C539;110A 1175 11B8;C539;110A 1175 11B8; # (씹; 씹; 씹; 씹; 씹; ) HANGUL SYLLABLE SSIB
+C53A;C53A;110A 1175 11B9;C53A;110A 1175 11B9; # (씺; 씺; 씺; 씺; 씺; ) HANGUL SYLLABLE SSIBS
+C53B;C53B;110A 1175 11BA;C53B;110A 1175 11BA; # (씻; 씻; 씻; 씻; 씻; ) HANGUL SYLLABLE SSIS
+C53C;C53C;110A 1175 11BB;C53C;110A 1175 11BB; # (씼; 씼; 씼; 씼; 씼; ) HANGUL SYLLABLE SSISS
+C53D;C53D;110A 1175 11BC;C53D;110A 1175 11BC; # (씽; 씽; 씽; 씽; 씽; ) HANGUL SYLLABLE SSING
+C53E;C53E;110A 1175 11BD;C53E;110A 1175 11BD; # (씾; 씾; 씾; 씾; 씾; ) HANGUL SYLLABLE SSIJ
+C53F;C53F;110A 1175 11BE;C53F;110A 1175 11BE; # (씿; 씿; 씿; 씿; 씿; ) HANGUL SYLLABLE SSIC
+C540;C540;110A 1175 11BF;C540;110A 1175 11BF; # (앀; 앀; 앀; 앀; 앀; ) HANGUL SYLLABLE SSIK
+C541;C541;110A 1175 11C0;C541;110A 1175 11C0; # (앁; 앁; 앁; 앁; 앁; ) HANGUL SYLLABLE SSIT
+C542;C542;110A 1175 11C1;C542;110A 1175 11C1; # (앂; 앂; 앂; 앂; 앂; ) HANGUL SYLLABLE SSIP
+C543;C543;110A 1175 11C2;C543;110A 1175 11C2; # (앃; 앃; 앃; 앃; 앃; ) HANGUL SYLLABLE SSIH
+C544;C544;110B 1161;C544;110B 1161; # (아; 아; 아; 아; 아; ) HANGUL SYLLABLE A
+C545;C545;110B 1161 11A8;C545;110B 1161 11A8; # (악; 악; 악; 악; 악; ) HANGUL SYLLABLE AG
+C546;C546;110B 1161 11A9;C546;110B 1161 11A9; # (앆; 앆; 앆; 앆; 앆; ) HANGUL SYLLABLE AGG
+C547;C547;110B 1161 11AA;C547;110B 1161 11AA; # (앇; 앇; 앇; 앇; 앇; ) HANGUL SYLLABLE AGS
+C548;C548;110B 1161 11AB;C548;110B 1161 11AB; # (안; 안; 안; 안; 안; ) HANGUL SYLLABLE AN
+C549;C549;110B 1161 11AC;C549;110B 1161 11AC; # (앉; 앉; 앉; 앉; 앉; ) HANGUL SYLLABLE ANJ
+C54A;C54A;110B 1161 11AD;C54A;110B 1161 11AD; # (않; 않; 않; 않; 않; ) HANGUL SYLLABLE ANH
+C54B;C54B;110B 1161 11AE;C54B;110B 1161 11AE; # (앋; 앋; 앋; 앋; 앋; ) HANGUL SYLLABLE AD
+C54C;C54C;110B 1161 11AF;C54C;110B 1161 11AF; # (알; 알; 알; 알; 알; ) HANGUL SYLLABLE AL
+C54D;C54D;110B 1161 11B0;C54D;110B 1161 11B0; # (앍; 앍; 앍; 앍; 앍; ) HANGUL SYLLABLE ALG
+C54E;C54E;110B 1161 11B1;C54E;110B 1161 11B1; # (앎; 앎; 앎; 앎; 앎; ) HANGUL SYLLABLE ALM
+C54F;C54F;110B 1161 11B2;C54F;110B 1161 11B2; # (앏; 앏; 앏; 앏; 앏; ) HANGUL SYLLABLE ALB
+C550;C550;110B 1161 11B3;C550;110B 1161 11B3; # (앐; 앐; 앐; 앐; 앐; ) HANGUL SYLLABLE ALS
+C551;C551;110B 1161 11B4;C551;110B 1161 11B4; # (앑; 앑; 앑; 앑; 앑; ) HANGUL SYLLABLE ALT
+C552;C552;110B 1161 11B5;C552;110B 1161 11B5; # (앒; 앒; 앒; 앒; 앒; ) HANGUL SYLLABLE ALP
+C553;C553;110B 1161 11B6;C553;110B 1161 11B6; # (앓; 앓; 앓; 앓; 앓; ) HANGUL SYLLABLE ALH
+C554;C554;110B 1161 11B7;C554;110B 1161 11B7; # (암; 암; 암; 암; 암; ) HANGUL SYLLABLE AM
+C555;C555;110B 1161 11B8;C555;110B 1161 11B8; # (압; 압; 압; 압; 압; ) HANGUL SYLLABLE AB
+C556;C556;110B 1161 11B9;C556;110B 1161 11B9; # (앖; 앖; 앖; 앖; 앖; ) HANGUL SYLLABLE ABS
+C557;C557;110B 1161 11BA;C557;110B 1161 11BA; # (앗; 앗; 앗; 앗; 앗; ) HANGUL SYLLABLE AS
+C558;C558;110B 1161 11BB;C558;110B 1161 11BB; # (았; 았; 았; 았; 았; ) HANGUL SYLLABLE ASS
+C559;C559;110B 1161 11BC;C559;110B 1161 11BC; # (앙; 앙; 앙; 앙; 앙; ) HANGUL SYLLABLE ANG
+C55A;C55A;110B 1161 11BD;C55A;110B 1161 11BD; # (앚; 앚; 앚; 앚; 앚; ) HANGUL SYLLABLE AJ
+C55B;C55B;110B 1161 11BE;C55B;110B 1161 11BE; # (앛; 앛; 앛; 앛; 앛; ) HANGUL SYLLABLE AC
+C55C;C55C;110B 1161 11BF;C55C;110B 1161 11BF; # (앜; 앜; 앜; 앜; 앜; ) HANGUL SYLLABLE AK
+C55D;C55D;110B 1161 11C0;C55D;110B 1161 11C0; # (앝; 앝; 앝; 앝; 앝; ) HANGUL SYLLABLE AT
+C55E;C55E;110B 1161 11C1;C55E;110B 1161 11C1; # (앞; 앞; 앞; 앞; 앞; ) HANGUL SYLLABLE AP
+C55F;C55F;110B 1161 11C2;C55F;110B 1161 11C2; # (앟; 앟; 앟; 앟; 앟; ) HANGUL SYLLABLE AH
+C560;C560;110B 1162;C560;110B 1162; # (애; 애; 애; 애; 애; ) HANGUL SYLLABLE AE
+C561;C561;110B 1162 11A8;C561;110B 1162 11A8; # (액; 액; 액; 액; 액; ) HANGUL SYLLABLE AEG
+C562;C562;110B 1162 11A9;C562;110B 1162 11A9; # (앢; 앢; 앢; 앢; 앢; ) HANGUL SYLLABLE AEGG
+C563;C563;110B 1162 11AA;C563;110B 1162 11AA; # (앣; 앣; 앣; 앣; 앣; ) HANGUL SYLLABLE AEGS
+C564;C564;110B 1162 11AB;C564;110B 1162 11AB; # (앤; 앤; 앤; 앤; 앤; ) HANGUL SYLLABLE AEN
+C565;C565;110B 1162 11AC;C565;110B 1162 11AC; # (앥; 앥; 앥; 앥; 앥; ) HANGUL SYLLABLE AENJ
+C566;C566;110B 1162 11AD;C566;110B 1162 11AD; # (앦; 앦; 앦; 앦; 앦; ) HANGUL SYLLABLE AENH
+C567;C567;110B 1162 11AE;C567;110B 1162 11AE; # (앧; 앧; 앧; 앧; 앧; ) HANGUL SYLLABLE AED
+C568;C568;110B 1162 11AF;C568;110B 1162 11AF; # (앨; 앨; 앨; 앨; 앨; ) HANGUL SYLLABLE AEL
+C569;C569;110B 1162 11B0;C569;110B 1162 11B0; # (앩; 앩; 앩; 앩; 앩; ) HANGUL SYLLABLE AELG
+C56A;C56A;110B 1162 11B1;C56A;110B 1162 11B1; # (앪; 앪; 앪; 앪; 앪; ) HANGUL SYLLABLE AELM
+C56B;C56B;110B 1162 11B2;C56B;110B 1162 11B2; # (앫; 앫; 앫; 앫; 앫; ) HANGUL SYLLABLE AELB
+C56C;C56C;110B 1162 11B3;C56C;110B 1162 11B3; # (앬; 앬; 앬; 앬; 앬; ) HANGUL SYLLABLE AELS
+C56D;C56D;110B 1162 11B4;C56D;110B 1162 11B4; # (앭; 앭; 앭; 앭; 앭; ) HANGUL SYLLABLE AELT
+C56E;C56E;110B 1162 11B5;C56E;110B 1162 11B5; # (앮; 앮; 앮; 앮; 앮; ) HANGUL SYLLABLE AELP
+C56F;C56F;110B 1162 11B6;C56F;110B 1162 11B6; # (앯; 앯; 앯; 앯; 앯; ) HANGUL SYLLABLE AELH
+C570;C570;110B 1162 11B7;C570;110B 1162 11B7; # (앰; 앰; 앰; 앰; 앰; ) HANGUL SYLLABLE AEM
+C571;C571;110B 1162 11B8;C571;110B 1162 11B8; # (앱; 앱; 앱; 앱; 앱; ) HANGUL SYLLABLE AEB
+C572;C572;110B 1162 11B9;C572;110B 1162 11B9; # (앲; 앲; 앲; 앲; 앲; ) HANGUL SYLLABLE AEBS
+C573;C573;110B 1162 11BA;C573;110B 1162 11BA; # (앳; 앳; 앳; 앳; 앳; ) HANGUL SYLLABLE AES
+C574;C574;110B 1162 11BB;C574;110B 1162 11BB; # (앴; 앴; 앴; 앴; 앴; ) HANGUL SYLLABLE AESS
+C575;C575;110B 1162 11BC;C575;110B 1162 11BC; # (앵; 앵; 앵; 앵; 앵; ) HANGUL SYLLABLE AENG
+C576;C576;110B 1162 11BD;C576;110B 1162 11BD; # (앶; 앶; 앶; 앶; 앶; ) HANGUL SYLLABLE AEJ
+C577;C577;110B 1162 11BE;C577;110B 1162 11BE; # (앷; 앷; 앷; 앷; 앷; ) HANGUL SYLLABLE AEC
+C578;C578;110B 1162 11BF;C578;110B 1162 11BF; # (앸; 앸; 앸; 앸; 앸; ) HANGUL SYLLABLE AEK
+C579;C579;110B 1162 11C0;C579;110B 1162 11C0; # (앹; 앹; 앹; 앹; 앹; ) HANGUL SYLLABLE AET
+C57A;C57A;110B 1162 11C1;C57A;110B 1162 11C1; # (앺; 앺; 앺; 앺; 앺; ) HANGUL SYLLABLE AEP
+C57B;C57B;110B 1162 11C2;C57B;110B 1162 11C2; # (앻; 앻; 앻; 앻; 앻; ) HANGUL SYLLABLE AEH
+C57C;C57C;110B 1163;C57C;110B 1163; # (야; 야; 야; 야; 야; ) HANGUL SYLLABLE YA
+C57D;C57D;110B 1163 11A8;C57D;110B 1163 11A8; # (약; 약; 약; 약; 약; ) HANGUL SYLLABLE YAG
+C57E;C57E;110B 1163 11A9;C57E;110B 1163 11A9; # (앾; 앾; 앾; 앾; 앾; ) HANGUL SYLLABLE YAGG
+C57F;C57F;110B 1163 11AA;C57F;110B 1163 11AA; # (앿; 앿; 앿; 앿; 앿; ) HANGUL SYLLABLE YAGS
+C580;C580;110B 1163 11AB;C580;110B 1163 11AB; # (얀; 얀; 얀; 얀; 얀; ) HANGUL SYLLABLE YAN
+C581;C581;110B 1163 11AC;C581;110B 1163 11AC; # (얁; 얁; 얁; 얁; 얁; ) HANGUL SYLLABLE YANJ
+C582;C582;110B 1163 11AD;C582;110B 1163 11AD; # (얂; 얂; 얂; 얂; 얂; ) HANGUL SYLLABLE YANH
+C583;C583;110B 1163 11AE;C583;110B 1163 11AE; # (얃; 얃; 얃; 얃; 얃; ) HANGUL SYLLABLE YAD
+C584;C584;110B 1163 11AF;C584;110B 1163 11AF; # (얄; 얄; 얄; 얄; 얄; ) HANGUL SYLLABLE YAL
+C585;C585;110B 1163 11B0;C585;110B 1163 11B0; # (얅; 얅; 얅; 얅; 얅; ) HANGUL SYLLABLE YALG
+C586;C586;110B 1163 11B1;C586;110B 1163 11B1; # (얆; 얆; 얆; 얆; 얆; ) HANGUL SYLLABLE YALM
+C587;C587;110B 1163 11B2;C587;110B 1163 11B2; # (얇; 얇; 얇; 얇; 얇; ) HANGUL SYLLABLE YALB
+C588;C588;110B 1163 11B3;C588;110B 1163 11B3; # (얈; 얈; 얈; 얈; 얈; ) HANGUL SYLLABLE YALS
+C589;C589;110B 1163 11B4;C589;110B 1163 11B4; # (얉; 얉; 얉; 얉; 얉; ) HANGUL SYLLABLE YALT
+C58A;C58A;110B 1163 11B5;C58A;110B 1163 11B5; # (얊; 얊; 얊; 얊; 얊; ) HANGUL SYLLABLE YALP
+C58B;C58B;110B 1163 11B6;C58B;110B 1163 11B6; # (얋; 얋; 얋; 얋; 얋; ) HANGUL SYLLABLE YALH
+C58C;C58C;110B 1163 11B7;C58C;110B 1163 11B7; # (얌; 얌; 얌; 얌; 얌; ) HANGUL SYLLABLE YAM
+C58D;C58D;110B 1163 11B8;C58D;110B 1163 11B8; # (얍; 얍; 얍; 얍; 얍; ) HANGUL SYLLABLE YAB
+C58E;C58E;110B 1163 11B9;C58E;110B 1163 11B9; # (얎; 얎; 얎; 얎; 얎; ) HANGUL SYLLABLE YABS
+C58F;C58F;110B 1163 11BA;C58F;110B 1163 11BA; # (얏; 얏; 얏; 얏; 얏; ) HANGUL SYLLABLE YAS
+C590;C590;110B 1163 11BB;C590;110B 1163 11BB; # (얐; 얐; 얐; 얐; 얐; ) HANGUL SYLLABLE YASS
+C591;C591;110B 1163 11BC;C591;110B 1163 11BC; # (양; 양; 양; 양; 양; ) HANGUL SYLLABLE YANG
+C592;C592;110B 1163 11BD;C592;110B 1163 11BD; # (얒; 얒; 얒; 얒; 얒; ) HANGUL SYLLABLE YAJ
+C593;C593;110B 1163 11BE;C593;110B 1163 11BE; # (얓; 얓; 얓; 얓; 얓; ) HANGUL SYLLABLE YAC
+C594;C594;110B 1163 11BF;C594;110B 1163 11BF; # (얔; 얔; 얔; 얔; 얔; ) HANGUL SYLLABLE YAK
+C595;C595;110B 1163 11C0;C595;110B 1163 11C0; # (얕; 얕; 얕; 얕; 얕; ) HANGUL SYLLABLE YAT
+C596;C596;110B 1163 11C1;C596;110B 1163 11C1; # (얖; 얖; 얖; 얖; 얖; ) HANGUL SYLLABLE YAP
+C597;C597;110B 1163 11C2;C597;110B 1163 11C2; # (얗; 얗; 얗; 얗; 얗; ) HANGUL SYLLABLE YAH
+C598;C598;110B 1164;C598;110B 1164; # (얘; 얘; 얘; 얘; 얘; ) HANGUL SYLLABLE YAE
+C599;C599;110B 1164 11A8;C599;110B 1164 11A8; # (얙; 얙; 얙; 얙; 얙; ) HANGUL SYLLABLE YAEG
+C59A;C59A;110B 1164 11A9;C59A;110B 1164 11A9; # (얚; 얚; 얚; 얚; 얚; ) HANGUL SYLLABLE YAEGG
+C59B;C59B;110B 1164 11AA;C59B;110B 1164 11AA; # (얛; 얛; 얛; 얛; 얛; ) HANGUL SYLLABLE YAEGS
+C59C;C59C;110B 1164 11AB;C59C;110B 1164 11AB; # (얜; 얜; 얜; 얜; 얜; ) HANGUL SYLLABLE YAEN
+C59D;C59D;110B 1164 11AC;C59D;110B 1164 11AC; # (얝; 얝; 얝; 얝; 얝; ) HANGUL SYLLABLE YAENJ
+C59E;C59E;110B 1164 11AD;C59E;110B 1164 11AD; # (얞; 얞; 얞; 얞; 얞; ) HANGUL SYLLABLE YAENH
+C59F;C59F;110B 1164 11AE;C59F;110B 1164 11AE; # (얟; 얟; 얟; 얟; 얟; ) HANGUL SYLLABLE YAED
+C5A0;C5A0;110B 1164 11AF;C5A0;110B 1164 11AF; # (얠; 얠; 얠; 얠; 얠; ) HANGUL SYLLABLE YAEL
+C5A1;C5A1;110B 1164 11B0;C5A1;110B 1164 11B0; # (얡; 얡; 얡; 얡; 얡; ) HANGUL SYLLABLE YAELG
+C5A2;C5A2;110B 1164 11B1;C5A2;110B 1164 11B1; # (얢; 얢; 얢; 얢; 얢; ) HANGUL SYLLABLE YAELM
+C5A3;C5A3;110B 1164 11B2;C5A3;110B 1164 11B2; # (얣; 얣; 얣; 얣; 얣; ) HANGUL SYLLABLE YAELB
+C5A4;C5A4;110B 1164 11B3;C5A4;110B 1164 11B3; # (얤; 얤; 얤; 얤; 얤; ) HANGUL SYLLABLE YAELS
+C5A5;C5A5;110B 1164 11B4;C5A5;110B 1164 11B4; # (얥; 얥; 얥; 얥; 얥; ) HANGUL SYLLABLE YAELT
+C5A6;C5A6;110B 1164 11B5;C5A6;110B 1164 11B5; # (얦; 얦; 얦; 얦; 얦; ) HANGUL SYLLABLE YAELP
+C5A7;C5A7;110B 1164 11B6;C5A7;110B 1164 11B6; # (얧; 얧; 얧; 얧; 얧; ) HANGUL SYLLABLE YAELH
+C5A8;C5A8;110B 1164 11B7;C5A8;110B 1164 11B7; # (얨; 얨; 얨; 얨; 얨; ) HANGUL SYLLABLE YAEM
+C5A9;C5A9;110B 1164 11B8;C5A9;110B 1164 11B8; # (얩; 얩; 얩; 얩; 얩; ) HANGUL SYLLABLE YAEB
+C5AA;C5AA;110B 1164 11B9;C5AA;110B 1164 11B9; # (얪; 얪; 얪; 얪; 얪; ) HANGUL SYLLABLE YAEBS
+C5AB;C5AB;110B 1164 11BA;C5AB;110B 1164 11BA; # (얫; 얫; 얫; 얫; 얫; ) HANGUL SYLLABLE YAES
+C5AC;C5AC;110B 1164 11BB;C5AC;110B 1164 11BB; # (얬; 얬; 얬; 얬; 얬; ) HANGUL SYLLABLE YAESS
+C5AD;C5AD;110B 1164 11BC;C5AD;110B 1164 11BC; # (얭; 얭; 얭; 얭; 얭; ) HANGUL SYLLABLE YAENG
+C5AE;C5AE;110B 1164 11BD;C5AE;110B 1164 11BD; # (얮; 얮; 얮; 얮; 얮; ) HANGUL SYLLABLE YAEJ
+C5AF;C5AF;110B 1164 11BE;C5AF;110B 1164 11BE; # (얯; 얯; 얯; 얯; 얯; ) HANGUL SYLLABLE YAEC
+C5B0;C5B0;110B 1164 11BF;C5B0;110B 1164 11BF; # (얰; 얰; 얰; 얰; 얰; ) HANGUL SYLLABLE YAEK
+C5B1;C5B1;110B 1164 11C0;C5B1;110B 1164 11C0; # (얱; 얱; 얱; 얱; 얱; ) HANGUL SYLLABLE YAET
+C5B2;C5B2;110B 1164 11C1;C5B2;110B 1164 11C1; # (얲; 얲; 얲; 얲; 얲; ) HANGUL SYLLABLE YAEP
+C5B3;C5B3;110B 1164 11C2;C5B3;110B 1164 11C2; # (얳; 얳; 얳; 얳; 얳; ) HANGUL SYLLABLE YAEH
+C5B4;C5B4;110B 1165;C5B4;110B 1165; # (어; 어; 어; 어; 어; ) HANGUL SYLLABLE EO
+C5B5;C5B5;110B 1165 11A8;C5B5;110B 1165 11A8; # (억; 억; 억; 억; 억; ) HANGUL SYLLABLE EOG
+C5B6;C5B6;110B 1165 11A9;C5B6;110B 1165 11A9; # (얶; 얶; 얶; 얶; 얶; ) HANGUL SYLLABLE EOGG
+C5B7;C5B7;110B 1165 11AA;C5B7;110B 1165 11AA; # (얷; 얷; 얷; 얷; 얷; ) HANGUL SYLLABLE EOGS
+C5B8;C5B8;110B 1165 11AB;C5B8;110B 1165 11AB; # (언; 언; 언; 언; 언; ) HANGUL SYLLABLE EON
+C5B9;C5B9;110B 1165 11AC;C5B9;110B 1165 11AC; # (얹; 얹; 얹; 얹; 얹; ) HANGUL SYLLABLE EONJ
+C5BA;C5BA;110B 1165 11AD;C5BA;110B 1165 11AD; # (얺; 얺; 얺; 얺; 얺; ) HANGUL SYLLABLE EONH
+C5BB;C5BB;110B 1165 11AE;C5BB;110B 1165 11AE; # (얻; 얻; 얻; 얻; 얻; ) HANGUL SYLLABLE EOD
+C5BC;C5BC;110B 1165 11AF;C5BC;110B 1165 11AF; # (얼; 얼; 얼; 얼; 얼; ) HANGUL SYLLABLE EOL
+C5BD;C5BD;110B 1165 11B0;C5BD;110B 1165 11B0; # (얽; 얽; 얽; 얽; 얽; ) HANGUL SYLLABLE EOLG
+C5BE;C5BE;110B 1165 11B1;C5BE;110B 1165 11B1; # (얾; 얾; 얾; 얾; 얾; ) HANGUL SYLLABLE EOLM
+C5BF;C5BF;110B 1165 11B2;C5BF;110B 1165 11B2; # (얿; 얿; 얿; 얿; 얿; ) HANGUL SYLLABLE EOLB
+C5C0;C5C0;110B 1165 11B3;C5C0;110B 1165 11B3; # (엀; 엀; 엀; 엀; 엀; ) HANGUL SYLLABLE EOLS
+C5C1;C5C1;110B 1165 11B4;C5C1;110B 1165 11B4; # (엁; 엁; 엁; 엁; 엁; ) HANGUL SYLLABLE EOLT
+C5C2;C5C2;110B 1165 11B5;C5C2;110B 1165 11B5; # (엂; 엂; 엂; 엂; 엂; ) HANGUL SYLLABLE EOLP
+C5C3;C5C3;110B 1165 11B6;C5C3;110B 1165 11B6; # (엃; 엃; 엃; 엃; 엃; ) HANGUL SYLLABLE EOLH
+C5C4;C5C4;110B 1165 11B7;C5C4;110B 1165 11B7; # (엄; 엄; 엄; 엄; 엄; ) HANGUL SYLLABLE EOM
+C5C5;C5C5;110B 1165 11B8;C5C5;110B 1165 11B8; # (업; 업; 업; 업; 업; ) HANGUL SYLLABLE EOB
+C5C6;C5C6;110B 1165 11B9;C5C6;110B 1165 11B9; # (없; 없; 없; 없; 없; ) HANGUL SYLLABLE EOBS
+C5C7;C5C7;110B 1165 11BA;C5C7;110B 1165 11BA; # (엇; 엇; 엇; 엇; 엇; ) HANGUL SYLLABLE EOS
+C5C8;C5C8;110B 1165 11BB;C5C8;110B 1165 11BB; # (었; 었; 었; 었; 었; ) HANGUL SYLLABLE EOSS
+C5C9;C5C9;110B 1165 11BC;C5C9;110B 1165 11BC; # (엉; 엉; 엉; 엉; 엉; ) HANGUL SYLLABLE EONG
+C5CA;C5CA;110B 1165 11BD;C5CA;110B 1165 11BD; # (엊; 엊; 엊; 엊; 엊; ) HANGUL SYLLABLE EOJ
+C5CB;C5CB;110B 1165 11BE;C5CB;110B 1165 11BE; # (엋; 엋; 엋; 엋; 엋; ) HANGUL SYLLABLE EOC
+C5CC;C5CC;110B 1165 11BF;C5CC;110B 1165 11BF; # (엌; 엌; 엌; 엌; 엌; ) HANGUL SYLLABLE EOK
+C5CD;C5CD;110B 1165 11C0;C5CD;110B 1165 11C0; # (엍; 엍; 엍; 엍; 엍; ) HANGUL SYLLABLE EOT
+C5CE;C5CE;110B 1165 11C1;C5CE;110B 1165 11C1; # (엎; 엎; 엎; 엎; 엎; ) HANGUL SYLLABLE EOP
+C5CF;C5CF;110B 1165 11C2;C5CF;110B 1165 11C2; # (엏; 엏; 엏; 엏; 엏; ) HANGUL SYLLABLE EOH
+C5D0;C5D0;110B 1166;C5D0;110B 1166; # (에; 에; 에; 에; 에; ) HANGUL SYLLABLE E
+C5D1;C5D1;110B 1166 11A8;C5D1;110B 1166 11A8; # (엑; 엑; 엑; 엑; 엑; ) HANGUL SYLLABLE EG
+C5D2;C5D2;110B 1166 11A9;C5D2;110B 1166 11A9; # (엒; 엒; 엒; 엒; 엒; ) HANGUL SYLLABLE EGG
+C5D3;C5D3;110B 1166 11AA;C5D3;110B 1166 11AA; # (엓; 엓; 엓; 엓; 엓; ) HANGUL SYLLABLE EGS
+C5D4;C5D4;110B 1166 11AB;C5D4;110B 1166 11AB; # (엔; 엔; 엔; 엔; 엔; ) HANGUL SYLLABLE EN
+C5D5;C5D5;110B 1166 11AC;C5D5;110B 1166 11AC; # (엕; 엕; 엕; 엕; 엕; ) HANGUL SYLLABLE ENJ
+C5D6;C5D6;110B 1166 11AD;C5D6;110B 1166 11AD; # (엖; 엖; 엖; 엖; 엖; ) HANGUL SYLLABLE ENH
+C5D7;C5D7;110B 1166 11AE;C5D7;110B 1166 11AE; # (엗; 엗; 엗; 엗; 엗; ) HANGUL SYLLABLE ED
+C5D8;C5D8;110B 1166 11AF;C5D8;110B 1166 11AF; # (엘; 엘; 엘; 엘; 엘; ) HANGUL SYLLABLE EL
+C5D9;C5D9;110B 1166 11B0;C5D9;110B 1166 11B0; # (엙; 엙; 엙; 엙; 엙; ) HANGUL SYLLABLE ELG
+C5DA;C5DA;110B 1166 11B1;C5DA;110B 1166 11B1; # (엚; 엚; 엚; 엚; 엚; ) HANGUL SYLLABLE ELM
+C5DB;C5DB;110B 1166 11B2;C5DB;110B 1166 11B2; # (엛; 엛; 엛; 엛; 엛; ) HANGUL SYLLABLE ELB
+C5DC;C5DC;110B 1166 11B3;C5DC;110B 1166 11B3; # (엜; 엜; 엜; 엜; 엜; ) HANGUL SYLLABLE ELS
+C5DD;C5DD;110B 1166 11B4;C5DD;110B 1166 11B4; # (엝; 엝; 엝; 엝; 엝; ) HANGUL SYLLABLE ELT
+C5DE;C5DE;110B 1166 11B5;C5DE;110B 1166 11B5; # (엞; 엞; 엞; 엞; 엞; ) HANGUL SYLLABLE ELP
+C5DF;C5DF;110B 1166 11B6;C5DF;110B 1166 11B6; # (엟; 엟; 엟; 엟; 엟; ) HANGUL SYLLABLE ELH
+C5E0;C5E0;110B 1166 11B7;C5E0;110B 1166 11B7; # (엠; 엠; 엠; 엠; 엠; ) HANGUL SYLLABLE EM
+C5E1;C5E1;110B 1166 11B8;C5E1;110B 1166 11B8; # (엡; 엡; 엡; 엡; 엡; ) HANGUL SYLLABLE EB
+C5E2;C5E2;110B 1166 11B9;C5E2;110B 1166 11B9; # (엢; 엢; 엢; 엢; 엢; ) HANGUL SYLLABLE EBS
+C5E3;C5E3;110B 1166 11BA;C5E3;110B 1166 11BA; # (엣; 엣; 엣; 엣; 엣; ) HANGUL SYLLABLE ES
+C5E4;C5E4;110B 1166 11BB;C5E4;110B 1166 11BB; # (엤; 엤; 엤; 엤; 엤; ) HANGUL SYLLABLE ESS
+C5E5;C5E5;110B 1166 11BC;C5E5;110B 1166 11BC; # (엥; 엥; 엥; 엥; 엥; ) HANGUL SYLLABLE ENG
+C5E6;C5E6;110B 1166 11BD;C5E6;110B 1166 11BD; # (엦; 엦; 엦; 엦; 엦; ) HANGUL SYLLABLE EJ
+C5E7;C5E7;110B 1166 11BE;C5E7;110B 1166 11BE; # (엧; 엧; 엧; 엧; 엧; ) HANGUL SYLLABLE EC
+C5E8;C5E8;110B 1166 11BF;C5E8;110B 1166 11BF; # (엨; 엨; 엨; 엨; 엨; ) HANGUL SYLLABLE EK
+C5E9;C5E9;110B 1166 11C0;C5E9;110B 1166 11C0; # (엩; 엩; 엩; 엩; 엩; ) HANGUL SYLLABLE ET
+C5EA;C5EA;110B 1166 11C1;C5EA;110B 1166 11C1; # (엪; 엪; 엪; 엪; 엪; ) HANGUL SYLLABLE EP
+C5EB;C5EB;110B 1166 11C2;C5EB;110B 1166 11C2; # (엫; 엫; 엫; 엫; 엫; ) HANGUL SYLLABLE EH
+C5EC;C5EC;110B 1167;C5EC;110B 1167; # (여; 여; 여; 여; 여; ) HANGUL SYLLABLE YEO
+C5ED;C5ED;110B 1167 11A8;C5ED;110B 1167 11A8; # (역; 역; 역; 역; 역; ) HANGUL SYLLABLE YEOG
+C5EE;C5EE;110B 1167 11A9;C5EE;110B 1167 11A9; # (엮; 엮; 엮; 엮; 엮; ) HANGUL SYLLABLE YEOGG
+C5EF;C5EF;110B 1167 11AA;C5EF;110B 1167 11AA; # (엯; 엯; 엯; 엯; 엯; ) HANGUL SYLLABLE YEOGS
+C5F0;C5F0;110B 1167 11AB;C5F0;110B 1167 11AB; # (연; 연; 연; 연; 연; ) HANGUL SYLLABLE YEON
+C5F1;C5F1;110B 1167 11AC;C5F1;110B 1167 11AC; # (엱; 엱; 엱; 엱; 엱; ) HANGUL SYLLABLE YEONJ
+C5F2;C5F2;110B 1167 11AD;C5F2;110B 1167 11AD; # (엲; 엲; 엲; 엲; 엲; ) HANGUL SYLLABLE YEONH
+C5F3;C5F3;110B 1167 11AE;C5F3;110B 1167 11AE; # (엳; 엳; 엳; 엳; 엳; ) HANGUL SYLLABLE YEOD
+C5F4;C5F4;110B 1167 11AF;C5F4;110B 1167 11AF; # (열; 열; 열; 열; 열; ) HANGUL SYLLABLE YEOL
+C5F5;C5F5;110B 1167 11B0;C5F5;110B 1167 11B0; # (엵; 엵; 엵; 엵; 엵; ) HANGUL SYLLABLE YEOLG
+C5F6;C5F6;110B 1167 11B1;C5F6;110B 1167 11B1; # (엶; 엶; 엶; 엶; 엶; ) HANGUL SYLLABLE YEOLM
+C5F7;C5F7;110B 1167 11B2;C5F7;110B 1167 11B2; # (엷; 엷; 엷; 엷; 엷; ) HANGUL SYLLABLE YEOLB
+C5F8;C5F8;110B 1167 11B3;C5F8;110B 1167 11B3; # (엸; 엸; 엸; 엸; 엸; ) HANGUL SYLLABLE YEOLS
+C5F9;C5F9;110B 1167 11B4;C5F9;110B 1167 11B4; # (엹; 엹; 엹; 엹; 엹; ) HANGUL SYLLABLE YEOLT
+C5FA;C5FA;110B 1167 11B5;C5FA;110B 1167 11B5; # (엺; 엺; 엺; 엺; 엺; ) HANGUL SYLLABLE YEOLP
+C5FB;C5FB;110B 1167 11B6;C5FB;110B 1167 11B6; # (엻; 엻; 엻; 엻; 엻; ) HANGUL SYLLABLE YEOLH
+C5FC;C5FC;110B 1167 11B7;C5FC;110B 1167 11B7; # (염; 염; 염; 염; 염; ) HANGUL SYLLABLE YEOM
+C5FD;C5FD;110B 1167 11B8;C5FD;110B 1167 11B8; # (엽; 엽; 엽; 엽; 엽; ) HANGUL SYLLABLE YEOB
+C5FE;C5FE;110B 1167 11B9;C5FE;110B 1167 11B9; # (엾; 엾; 엾; 엾; 엾; ) HANGUL SYLLABLE YEOBS
+C5FF;C5FF;110B 1167 11BA;C5FF;110B 1167 11BA; # (엿; 엿; 엿; 엿; 엿; ) HANGUL SYLLABLE YEOS
+C600;C600;110B 1167 11BB;C600;110B 1167 11BB; # (였; 였; 였; 였; 였; ) HANGUL SYLLABLE YEOSS
+C601;C601;110B 1167 11BC;C601;110B 1167 11BC; # (영; 영; 영; 영; 영; ) HANGUL SYLLABLE YEONG
+C602;C602;110B 1167 11BD;C602;110B 1167 11BD; # (옂; 옂; 옂; 옂; 옂; ) HANGUL SYLLABLE YEOJ
+C603;C603;110B 1167 11BE;C603;110B 1167 11BE; # (옃; 옃; 옃; 옃; 옃; ) HANGUL SYLLABLE YEOC
+C604;C604;110B 1167 11BF;C604;110B 1167 11BF; # (옄; 옄; 옄; 옄; 옄; ) HANGUL SYLLABLE YEOK
+C605;C605;110B 1167 11C0;C605;110B 1167 11C0; # (옅; 옅; 옅; 옅; 옅; ) HANGUL SYLLABLE YEOT
+C606;C606;110B 1167 11C1;C606;110B 1167 11C1; # (옆; 옆; 옆; 옆; 옆; ) HANGUL SYLLABLE YEOP
+C607;C607;110B 1167 11C2;C607;110B 1167 11C2; # (옇; 옇; 옇; 옇; 옇; ) HANGUL SYLLABLE YEOH
+C608;C608;110B 1168;C608;110B 1168; # (예; 예; 예; 예; 예; ) HANGUL SYLLABLE YE
+C609;C609;110B 1168 11A8;C609;110B 1168 11A8; # (옉; 옉; 옉; 옉; 옉; ) HANGUL SYLLABLE YEG
+C60A;C60A;110B 1168 11A9;C60A;110B 1168 11A9; # (옊; 옊; 옊; 옊; 옊; ) HANGUL SYLLABLE YEGG
+C60B;C60B;110B 1168 11AA;C60B;110B 1168 11AA; # (옋; 옋; 옋; 옋; 옋; ) HANGUL SYLLABLE YEGS
+C60C;C60C;110B 1168 11AB;C60C;110B 1168 11AB; # (옌; 옌; 옌; 옌; 옌; ) HANGUL SYLLABLE YEN
+C60D;C60D;110B 1168 11AC;C60D;110B 1168 11AC; # (옍; 옍; 옍; 옍; 옍; ) HANGUL SYLLABLE YENJ
+C60E;C60E;110B 1168 11AD;C60E;110B 1168 11AD; # (옎; 옎; 옎; 옎; 옎; ) HANGUL SYLLABLE YENH
+C60F;C60F;110B 1168 11AE;C60F;110B 1168 11AE; # (옏; 옏; 옏; 옏; 옏; ) HANGUL SYLLABLE YED
+C610;C610;110B 1168 11AF;C610;110B 1168 11AF; # (옐; 옐; 옐; 옐; 옐; ) HANGUL SYLLABLE YEL
+C611;C611;110B 1168 11B0;C611;110B 1168 11B0; # (옑; 옑; 옑; 옑; 옑; ) HANGUL SYLLABLE YELG
+C612;C612;110B 1168 11B1;C612;110B 1168 11B1; # (옒; 옒; 옒; 옒; 옒; ) HANGUL SYLLABLE YELM
+C613;C613;110B 1168 11B2;C613;110B 1168 11B2; # (옓; 옓; 옓; 옓; 옓; ) HANGUL SYLLABLE YELB
+C614;C614;110B 1168 11B3;C614;110B 1168 11B3; # (옔; 옔; 옔; 옔; 옔; ) HANGUL SYLLABLE YELS
+C615;C615;110B 1168 11B4;C615;110B 1168 11B4; # (옕; 옕; 옕; 옕; 옕; ) HANGUL SYLLABLE YELT
+C616;C616;110B 1168 11B5;C616;110B 1168 11B5; # (옖; 옖; 옖; 옖; 옖; ) HANGUL SYLLABLE YELP
+C617;C617;110B 1168 11B6;C617;110B 1168 11B6; # (옗; 옗; 옗; 옗; 옗; ) HANGUL SYLLABLE YELH
+C618;C618;110B 1168 11B7;C618;110B 1168 11B7; # (옘; 옘; 옘; 옘; 옘; ) HANGUL SYLLABLE YEM
+C619;C619;110B 1168 11B8;C619;110B 1168 11B8; # (옙; 옙; 옙; 옙; 옙; ) HANGUL SYLLABLE YEB
+C61A;C61A;110B 1168 11B9;C61A;110B 1168 11B9; # (옚; 옚; 옚; 옚; 옚; ) HANGUL SYLLABLE YEBS
+C61B;C61B;110B 1168 11BA;C61B;110B 1168 11BA; # (옛; 옛; 옛; 옛; 옛; ) HANGUL SYLLABLE YES
+C61C;C61C;110B 1168 11BB;C61C;110B 1168 11BB; # (옜; 옜; 옜; 옜; 옜; ) HANGUL SYLLABLE YESS
+C61D;C61D;110B 1168 11BC;C61D;110B 1168 11BC; # (옝; 옝; 옝; 옝; 옝; ) HANGUL SYLLABLE YENG
+C61E;C61E;110B 1168 11BD;C61E;110B 1168 11BD; # (옞; 옞; 옞; 옞; 옞; ) HANGUL SYLLABLE YEJ
+C61F;C61F;110B 1168 11BE;C61F;110B 1168 11BE; # (옟; 옟; 옟; 옟; 옟; ) HANGUL SYLLABLE YEC
+C620;C620;110B 1168 11BF;C620;110B 1168 11BF; # (옠; 옠; 옠; 옠; 옠; ) HANGUL SYLLABLE YEK
+C621;C621;110B 1168 11C0;C621;110B 1168 11C0; # (옡; 옡; 옡; 옡; 옡; ) HANGUL SYLLABLE YET
+C622;C622;110B 1168 11C1;C622;110B 1168 11C1; # (옢; 옢; 옢; 옢; 옢; ) HANGUL SYLLABLE YEP
+C623;C623;110B 1168 11C2;C623;110B 1168 11C2; # (옣; 옣; 옣; 옣; 옣; ) HANGUL SYLLABLE YEH
+C624;C624;110B 1169;C624;110B 1169; # (오; 오; 오; 오; 오; ) HANGUL SYLLABLE O
+C625;C625;110B 1169 11A8;C625;110B 1169 11A8; # (옥; 옥; 옥; 옥; 옥; ) HANGUL SYLLABLE OG
+C626;C626;110B 1169 11A9;C626;110B 1169 11A9; # (옦; 옦; 옦; 옦; 옦; ) HANGUL SYLLABLE OGG
+C627;C627;110B 1169 11AA;C627;110B 1169 11AA; # (옧; 옧; 옧; 옧; 옧; ) HANGUL SYLLABLE OGS
+C628;C628;110B 1169 11AB;C628;110B 1169 11AB; # (온; 온; 온; 온; 온; ) HANGUL SYLLABLE ON
+C629;C629;110B 1169 11AC;C629;110B 1169 11AC; # (옩; 옩; 옩; 옩; 옩; ) HANGUL SYLLABLE ONJ
+C62A;C62A;110B 1169 11AD;C62A;110B 1169 11AD; # (옪; 옪; 옪; 옪; 옪; ) HANGUL SYLLABLE ONH
+C62B;C62B;110B 1169 11AE;C62B;110B 1169 11AE; # (옫; 옫; 옫; 옫; 옫; ) HANGUL SYLLABLE OD
+C62C;C62C;110B 1169 11AF;C62C;110B 1169 11AF; # (올; 올; 올; 올; 올; ) HANGUL SYLLABLE OL
+C62D;C62D;110B 1169 11B0;C62D;110B 1169 11B0; # (옭; 옭; 옭; 옭; 옭; ) HANGUL SYLLABLE OLG
+C62E;C62E;110B 1169 11B1;C62E;110B 1169 11B1; # (옮; 옮; 옮; 옮; 옮; ) HANGUL SYLLABLE OLM
+C62F;C62F;110B 1169 11B2;C62F;110B 1169 11B2; # (옯; 옯; 옯; 옯; 옯; ) HANGUL SYLLABLE OLB
+C630;C630;110B 1169 11B3;C630;110B 1169 11B3; # (옰; 옰; 옰; 옰; 옰; ) HANGUL SYLLABLE OLS
+C631;C631;110B 1169 11B4;C631;110B 1169 11B4; # (옱; 옱; 옱; 옱; 옱; ) HANGUL SYLLABLE OLT
+C632;C632;110B 1169 11B5;C632;110B 1169 11B5; # (옲; 옲; 옲; 옲; 옲; ) HANGUL SYLLABLE OLP
+C633;C633;110B 1169 11B6;C633;110B 1169 11B6; # (옳; 옳; 옳; 옳; 옳; ) HANGUL SYLLABLE OLH
+C634;C634;110B 1169 11B7;C634;110B 1169 11B7; # (옴; 옴; 옴; 옴; 옴; ) HANGUL SYLLABLE OM
+C635;C635;110B 1169 11B8;C635;110B 1169 11B8; # (옵; 옵; 옵; 옵; 옵; ) HANGUL SYLLABLE OB
+C636;C636;110B 1169 11B9;C636;110B 1169 11B9; # (옶; 옶; 옶; 옶; 옶; ) HANGUL SYLLABLE OBS
+C637;C637;110B 1169 11BA;C637;110B 1169 11BA; # (옷; 옷; 옷; 옷; 옷; ) HANGUL SYLLABLE OS
+C638;C638;110B 1169 11BB;C638;110B 1169 11BB; # (옸; 옸; 옸; 옸; 옸; ) HANGUL SYLLABLE OSS
+C639;C639;110B 1169 11BC;C639;110B 1169 11BC; # (옹; 옹; 옹; 옹; 옹; ) HANGUL SYLLABLE ONG
+C63A;C63A;110B 1169 11BD;C63A;110B 1169 11BD; # (옺; 옺; 옺; 옺; 옺; ) HANGUL SYLLABLE OJ
+C63B;C63B;110B 1169 11BE;C63B;110B 1169 11BE; # (옻; 옻; 옻; 옻; 옻; ) HANGUL SYLLABLE OC
+C63C;C63C;110B 1169 11BF;C63C;110B 1169 11BF; # (옼; 옼; 옼; 옼; 옼; ) HANGUL SYLLABLE OK
+C63D;C63D;110B 1169 11C0;C63D;110B 1169 11C0; # (옽; 옽; 옽; 옽; 옽; ) HANGUL SYLLABLE OT
+C63E;C63E;110B 1169 11C1;C63E;110B 1169 11C1; # (옾; 옾; 옾; 옾; 옾; ) HANGUL SYLLABLE OP
+C63F;C63F;110B 1169 11C2;C63F;110B 1169 11C2; # (옿; 옿; 옿; 옿; 옿; ) HANGUL SYLLABLE OH
+C640;C640;110B 116A;C640;110B 116A; # (와; 와; 와; 와; 와; ) HANGUL SYLLABLE WA
+C641;C641;110B 116A 11A8;C641;110B 116A 11A8; # (왁; 왁; 왁; 왁; 왁; ) HANGUL SYLLABLE WAG
+C642;C642;110B 116A 11A9;C642;110B 116A 11A9; # (왂; 왂; 왂; 왂; 왂; ) HANGUL SYLLABLE WAGG
+C643;C643;110B 116A 11AA;C643;110B 116A 11AA; # (왃; 왃; 왃; 왃; 왃; ) HANGUL SYLLABLE WAGS
+C644;C644;110B 116A 11AB;C644;110B 116A 11AB; # (완; 완; 완; 완; 완; ) HANGUL SYLLABLE WAN
+C645;C645;110B 116A 11AC;C645;110B 116A 11AC; # (왅; 왅; 왅; 왅; 왅; ) HANGUL SYLLABLE WANJ
+C646;C646;110B 116A 11AD;C646;110B 116A 11AD; # (왆; 왆; 왆; 왆; 왆; ) HANGUL SYLLABLE WANH
+C647;C647;110B 116A 11AE;C647;110B 116A 11AE; # (왇; 왇; 왇; 왇; 왇; ) HANGUL SYLLABLE WAD
+C648;C648;110B 116A 11AF;C648;110B 116A 11AF; # (왈; 왈; 왈; 왈; 왈; ) HANGUL SYLLABLE WAL
+C649;C649;110B 116A 11B0;C649;110B 116A 11B0; # (왉; 왉; 왉; 왉; 왉; ) HANGUL SYLLABLE WALG
+C64A;C64A;110B 116A 11B1;C64A;110B 116A 11B1; # (왊; 왊; 왊; 왊; 왊; ) HANGUL SYLLABLE WALM
+C64B;C64B;110B 116A 11B2;C64B;110B 116A 11B2; # (왋; 왋; 왋; 왋; 왋; ) HANGUL SYLLABLE WALB
+C64C;C64C;110B 116A 11B3;C64C;110B 116A 11B3; # (왌; 왌; 왌; 왌; 왌; ) HANGUL SYLLABLE WALS
+C64D;C64D;110B 116A 11B4;C64D;110B 116A 11B4; # (왍; 왍; 왍; 왍; 왍; ) HANGUL SYLLABLE WALT
+C64E;C64E;110B 116A 11B5;C64E;110B 116A 11B5; # (왎; 왎; 왎; 왎; 왎; ) HANGUL SYLLABLE WALP
+C64F;C64F;110B 116A 11B6;C64F;110B 116A 11B6; # (왏; 왏; 왏; 왏; 왏; ) HANGUL SYLLABLE WALH
+C650;C650;110B 116A 11B7;C650;110B 116A 11B7; # (왐; 왐; 왐; 왐; 왐; ) HANGUL SYLLABLE WAM
+C651;C651;110B 116A 11B8;C651;110B 116A 11B8; # (왑; 왑; 왑; 왑; 왑; ) HANGUL SYLLABLE WAB
+C652;C652;110B 116A 11B9;C652;110B 116A 11B9; # (왒; 왒; 왒; 왒; 왒; ) HANGUL SYLLABLE WABS
+C653;C653;110B 116A 11BA;C653;110B 116A 11BA; # (왓; 왓; 왓; 왓; 왓; ) HANGUL SYLLABLE WAS
+C654;C654;110B 116A 11BB;C654;110B 116A 11BB; # (왔; 왔; 왔; 왔; 왔; ) HANGUL SYLLABLE WASS
+C655;C655;110B 116A 11BC;C655;110B 116A 11BC; # (왕; 왕; 왕; 왕; 왕; ) HANGUL SYLLABLE WANG
+C656;C656;110B 116A 11BD;C656;110B 116A 11BD; # (왖; 왖; 왖; 왖; 왖; ) HANGUL SYLLABLE WAJ
+C657;C657;110B 116A 11BE;C657;110B 116A 11BE; # (왗; 왗; 왗; 왗; 왗; ) HANGUL SYLLABLE WAC
+C658;C658;110B 116A 11BF;C658;110B 116A 11BF; # (왘; 왘; 왘; 왘; 왘; ) HANGUL SYLLABLE WAK
+C659;C659;110B 116A 11C0;C659;110B 116A 11C0; # (왙; 왙; 왙; 왙; 왙; ) HANGUL SYLLABLE WAT
+C65A;C65A;110B 116A 11C1;C65A;110B 116A 11C1; # (왚; 왚; 왚; 왚; 왚; ) HANGUL SYLLABLE WAP
+C65B;C65B;110B 116A 11C2;C65B;110B 116A 11C2; # (왛; 왛; 왛; 왛; 왛; ) HANGUL SYLLABLE WAH
+C65C;C65C;110B 116B;C65C;110B 116B; # (왜; 왜; 왜; 왜; 왜; ) HANGUL SYLLABLE WAE
+C65D;C65D;110B 116B 11A8;C65D;110B 116B 11A8; # (왝; 왝; 왝; 왝; 왝; ) HANGUL SYLLABLE WAEG
+C65E;C65E;110B 116B 11A9;C65E;110B 116B 11A9; # (왞; 왞; 왞; 왞; 왞; ) HANGUL SYLLABLE WAEGG
+C65F;C65F;110B 116B 11AA;C65F;110B 116B 11AA; # (왟; 왟; 왟; 왟; 왟; ) HANGUL SYLLABLE WAEGS
+C660;C660;110B 116B 11AB;C660;110B 116B 11AB; # (왠; 왠; 왠; 왠; 왠; ) HANGUL SYLLABLE WAEN
+C661;C661;110B 116B 11AC;C661;110B 116B 11AC; # (왡; 왡; 왡; 왡; 왡; ) HANGUL SYLLABLE WAENJ
+C662;C662;110B 116B 11AD;C662;110B 116B 11AD; # (왢; 왢; 왢; 왢; 왢; ) HANGUL SYLLABLE WAENH
+C663;C663;110B 116B 11AE;C663;110B 116B 11AE; # (왣; 왣; 왣; 왣; 왣; ) HANGUL SYLLABLE WAED
+C664;C664;110B 116B 11AF;C664;110B 116B 11AF; # (왤; 왤; 왤; 왤; 왤; ) HANGUL SYLLABLE WAEL
+C665;C665;110B 116B 11B0;C665;110B 116B 11B0; # (왥; 왥; 왥; 왥; 왥; ) HANGUL SYLLABLE WAELG
+C666;C666;110B 116B 11B1;C666;110B 116B 11B1; # (왦; 왦; 왦; 왦; 왦; ) HANGUL SYLLABLE WAELM
+C667;C667;110B 116B 11B2;C667;110B 116B 11B2; # (왧; 왧; 왧; 왧; 왧; ) HANGUL SYLLABLE WAELB
+C668;C668;110B 116B 11B3;C668;110B 116B 11B3; # (왨; 왨; 왨; 왨; 왨; ) HANGUL SYLLABLE WAELS
+C669;C669;110B 116B 11B4;C669;110B 116B 11B4; # (왩; 왩; 왩; 왩; 왩; ) HANGUL SYLLABLE WAELT
+C66A;C66A;110B 116B 11B5;C66A;110B 116B 11B5; # (왪; 왪; 왪; 왪; 왪; ) HANGUL SYLLABLE WAELP
+C66B;C66B;110B 116B 11B6;C66B;110B 116B 11B6; # (왫; 왫; 왫; 왫; 왫; ) HANGUL SYLLABLE WAELH
+C66C;C66C;110B 116B 11B7;C66C;110B 116B 11B7; # (왬; 왬; 왬; 왬; 왬; ) HANGUL SYLLABLE WAEM
+C66D;C66D;110B 116B 11B8;C66D;110B 116B 11B8; # (왭; 왭; 왭; 왭; 왭; ) HANGUL SYLLABLE WAEB
+C66E;C66E;110B 116B 11B9;C66E;110B 116B 11B9; # (왮; 왮; 왮; 왮; 왮; ) HANGUL SYLLABLE WAEBS
+C66F;C66F;110B 116B 11BA;C66F;110B 116B 11BA; # (왯; 왯; 왯; 왯; 왯; ) HANGUL SYLLABLE WAES
+C670;C670;110B 116B 11BB;C670;110B 116B 11BB; # (왰; 왰; 왰; 왰; 왰; ) HANGUL SYLLABLE WAESS
+C671;C671;110B 116B 11BC;C671;110B 116B 11BC; # (왱; 왱; 왱; 왱; 왱; ) HANGUL SYLLABLE WAENG
+C672;C672;110B 116B 11BD;C672;110B 116B 11BD; # (왲; 왲; 왲; 왲; 왲; ) HANGUL SYLLABLE WAEJ
+C673;C673;110B 116B 11BE;C673;110B 116B 11BE; # (왳; 왳; 왳; 왳; 왳; ) HANGUL SYLLABLE WAEC
+C674;C674;110B 116B 11BF;C674;110B 116B 11BF; # (왴; 왴; 왴; 왴; 왴; ) HANGUL SYLLABLE WAEK
+C675;C675;110B 116B 11C0;C675;110B 116B 11C0; # (왵; 왵; 왵; 왵; 왵; ) HANGUL SYLLABLE WAET
+C676;C676;110B 116B 11C1;C676;110B 116B 11C1; # (왶; 왶; 왶; 왶; 왶; ) HANGUL SYLLABLE WAEP
+C677;C677;110B 116B 11C2;C677;110B 116B 11C2; # (왷; 왷; 왷; 왷; 왷; ) HANGUL SYLLABLE WAEH
+C678;C678;110B 116C;C678;110B 116C; # (외; 외; 외; 외; 외; ) HANGUL SYLLABLE OE
+C679;C679;110B 116C 11A8;C679;110B 116C 11A8; # (왹; 왹; 왹; 왹; 왹; ) HANGUL SYLLABLE OEG
+C67A;C67A;110B 116C 11A9;C67A;110B 116C 11A9; # (왺; 왺; 왺; 왺; 왺; ) HANGUL SYLLABLE OEGG
+C67B;C67B;110B 116C 11AA;C67B;110B 116C 11AA; # (왻; 왻; 왻; 왻; 왻; ) HANGUL SYLLABLE OEGS
+C67C;C67C;110B 116C 11AB;C67C;110B 116C 11AB; # (왼; 왼; 왼; 왼; 왼; ) HANGUL SYLLABLE OEN
+C67D;C67D;110B 116C 11AC;C67D;110B 116C 11AC; # (왽; 왽; 왽; 왽; 왽; ) HANGUL SYLLABLE OENJ
+C67E;C67E;110B 116C 11AD;C67E;110B 116C 11AD; # (왾; 왾; 왾; 왾; 왾; ) HANGUL SYLLABLE OENH
+C67F;C67F;110B 116C 11AE;C67F;110B 116C 11AE; # (왿; 왿; 왿; 왿; 왿; ) HANGUL SYLLABLE OED
+C680;C680;110B 116C 11AF;C680;110B 116C 11AF; # (욀; 욀; 욀; 욀; 욀; ) HANGUL SYLLABLE OEL
+C681;C681;110B 116C 11B0;C681;110B 116C 11B0; # (욁; 욁; 욁; 욁; 욁; ) HANGUL SYLLABLE OELG
+C682;C682;110B 116C 11B1;C682;110B 116C 11B1; # (욂; 욂; 욂; 욂; 욂; ) HANGUL SYLLABLE OELM
+C683;C683;110B 116C 11B2;C683;110B 116C 11B2; # (욃; 욃; 욃; 욃; 욃; ) HANGUL SYLLABLE OELB
+C684;C684;110B 116C 11B3;C684;110B 116C 11B3; # (욄; 욄; 욄; 욄; 욄; ) HANGUL SYLLABLE OELS
+C685;C685;110B 116C 11B4;C685;110B 116C 11B4; # (욅; 욅; 욅; 욅; 욅; ) HANGUL SYLLABLE OELT
+C686;C686;110B 116C 11B5;C686;110B 116C 11B5; # (욆; 욆; 욆; 욆; 욆; ) HANGUL SYLLABLE OELP
+C687;C687;110B 116C 11B6;C687;110B 116C 11B6; # (욇; 욇; 욇; 욇; 욇; ) HANGUL SYLLABLE OELH
+C688;C688;110B 116C 11B7;C688;110B 116C 11B7; # (욈; 욈; 욈; 욈; 욈; ) HANGUL SYLLABLE OEM
+C689;C689;110B 116C 11B8;C689;110B 116C 11B8; # (욉; 욉; 욉; 욉; 욉; ) HANGUL SYLLABLE OEB
+C68A;C68A;110B 116C 11B9;C68A;110B 116C 11B9; # (욊; 욊; 욊; 욊; 욊; ) HANGUL SYLLABLE OEBS
+C68B;C68B;110B 116C 11BA;C68B;110B 116C 11BA; # (욋; 욋; 욋; 욋; 욋; ) HANGUL SYLLABLE OES
+C68C;C68C;110B 116C 11BB;C68C;110B 116C 11BB; # (욌; 욌; 욌; 욌; 욌; ) HANGUL SYLLABLE OESS
+C68D;C68D;110B 116C 11BC;C68D;110B 116C 11BC; # (욍; 욍; 욍; 욍; 욍; ) HANGUL SYLLABLE OENG
+C68E;C68E;110B 116C 11BD;C68E;110B 116C 11BD; # (욎; 욎; 욎; 욎; 욎; ) HANGUL SYLLABLE OEJ
+C68F;C68F;110B 116C 11BE;C68F;110B 116C 11BE; # (욏; 욏; 욏; 욏; 욏; ) HANGUL SYLLABLE OEC
+C690;C690;110B 116C 11BF;C690;110B 116C 11BF; # (욐; 욐; 욐; 욐; 욐; ) HANGUL SYLLABLE OEK
+C691;C691;110B 116C 11C0;C691;110B 116C 11C0; # (욑; 욑; 욑; 욑; 욑; ) HANGUL SYLLABLE OET
+C692;C692;110B 116C 11C1;C692;110B 116C 11C1; # (욒; 욒; 욒; 욒; 욒; ) HANGUL SYLLABLE OEP
+C693;C693;110B 116C 11C2;C693;110B 116C 11C2; # (욓; 욓; 욓; 욓; 욓; ) HANGUL SYLLABLE OEH
+C694;C694;110B 116D;C694;110B 116D; # (요; 요; 요; 요; 요; ) HANGUL SYLLABLE YO
+C695;C695;110B 116D 11A8;C695;110B 116D 11A8; # (욕; 욕; 욕; 욕; 욕; ) HANGUL SYLLABLE YOG
+C696;C696;110B 116D 11A9;C696;110B 116D 11A9; # (욖; 욖; 욖; 욖; 욖; ) HANGUL SYLLABLE YOGG
+C697;C697;110B 116D 11AA;C697;110B 116D 11AA; # (욗; 욗; 욗; 욗; 욗; ) HANGUL SYLLABLE YOGS
+C698;C698;110B 116D 11AB;C698;110B 116D 11AB; # (욘; 욘; 욘; 욘; 욘; ) HANGUL SYLLABLE YON
+C699;C699;110B 116D 11AC;C699;110B 116D 11AC; # (욙; 욙; 욙; 욙; 욙; ) HANGUL SYLLABLE YONJ
+C69A;C69A;110B 116D 11AD;C69A;110B 116D 11AD; # (욚; 욚; 욚; 욚; 욚; ) HANGUL SYLLABLE YONH
+C69B;C69B;110B 116D 11AE;C69B;110B 116D 11AE; # (욛; 욛; 욛; 욛; 욛; ) HANGUL SYLLABLE YOD
+C69C;C69C;110B 116D 11AF;C69C;110B 116D 11AF; # (욜; 욜; 욜; 욜; 욜; ) HANGUL SYLLABLE YOL
+C69D;C69D;110B 116D 11B0;C69D;110B 116D 11B0; # (욝; 욝; 욝; 욝; 욝; ) HANGUL SYLLABLE YOLG
+C69E;C69E;110B 116D 11B1;C69E;110B 116D 11B1; # (욞; 욞; 욞; 욞; 욞; ) HANGUL SYLLABLE YOLM
+C69F;C69F;110B 116D 11B2;C69F;110B 116D 11B2; # (욟; 욟; 욟; 욟; 욟; ) HANGUL SYLLABLE YOLB
+C6A0;C6A0;110B 116D 11B3;C6A0;110B 116D 11B3; # (욠; 욠; 욠; 욠; 욠; ) HANGUL SYLLABLE YOLS
+C6A1;C6A1;110B 116D 11B4;C6A1;110B 116D 11B4; # (욡; 욡; 욡; 욡; 욡; ) HANGUL SYLLABLE YOLT
+C6A2;C6A2;110B 116D 11B5;C6A2;110B 116D 11B5; # (욢; 욢; 욢; 욢; 욢; ) HANGUL SYLLABLE YOLP
+C6A3;C6A3;110B 116D 11B6;C6A3;110B 116D 11B6; # (욣; 욣; 욣; 욣; 욣; ) HANGUL SYLLABLE YOLH
+C6A4;C6A4;110B 116D 11B7;C6A4;110B 116D 11B7; # (욤; 욤; 욤; 욤; 욤; ) HANGUL SYLLABLE YOM
+C6A5;C6A5;110B 116D 11B8;C6A5;110B 116D 11B8; # (욥; 욥; 욥; 욥; 욥; ) HANGUL SYLLABLE YOB
+C6A6;C6A6;110B 116D 11B9;C6A6;110B 116D 11B9; # (욦; 욦; 욦; 욦; 욦; ) HANGUL SYLLABLE YOBS
+C6A7;C6A7;110B 116D 11BA;C6A7;110B 116D 11BA; # (욧; 욧; 욧; 욧; 욧; ) HANGUL SYLLABLE YOS
+C6A8;C6A8;110B 116D 11BB;C6A8;110B 116D 11BB; # (욨; 욨; 욨; 욨; 욨; ) HANGUL SYLLABLE YOSS
+C6A9;C6A9;110B 116D 11BC;C6A9;110B 116D 11BC; # (용; 용; 용; 용; 용; ) HANGUL SYLLABLE YONG
+C6AA;C6AA;110B 116D 11BD;C6AA;110B 116D 11BD; # (욪; 욪; 욪; 욪; 욪; ) HANGUL SYLLABLE YOJ
+C6AB;C6AB;110B 116D 11BE;C6AB;110B 116D 11BE; # (욫; 욫; 욫; 욫; 욫; ) HANGUL SYLLABLE YOC
+C6AC;C6AC;110B 116D 11BF;C6AC;110B 116D 11BF; # (욬; 욬; 욬; 욬; 욬; ) HANGUL SYLLABLE YOK
+C6AD;C6AD;110B 116D 11C0;C6AD;110B 116D 11C0; # (욭; 욭; 욭; 욭; 욭; ) HANGUL SYLLABLE YOT
+C6AE;C6AE;110B 116D 11C1;C6AE;110B 116D 11C1; # (욮; 욮; 욮; 욮; 욮; ) HANGUL SYLLABLE YOP
+C6AF;C6AF;110B 116D 11C2;C6AF;110B 116D 11C2; # (욯; 욯; 욯; 욯; 욯; ) HANGUL SYLLABLE YOH
+C6B0;C6B0;110B 116E;C6B0;110B 116E; # (우; 우; 우; 우; 우; ) HANGUL SYLLABLE U
+C6B1;C6B1;110B 116E 11A8;C6B1;110B 116E 11A8; # (욱; 욱; 욱; 욱; 욱; ) HANGUL SYLLABLE UG
+C6B2;C6B2;110B 116E 11A9;C6B2;110B 116E 11A9; # (욲; 욲; 욲; 욲; 욲; ) HANGUL SYLLABLE UGG
+C6B3;C6B3;110B 116E 11AA;C6B3;110B 116E 11AA; # (욳; 욳; 욳; 욳; 욳; ) HANGUL SYLLABLE UGS
+C6B4;C6B4;110B 116E 11AB;C6B4;110B 116E 11AB; # (운; 운; 운; 운; 운; ) HANGUL SYLLABLE UN
+C6B5;C6B5;110B 116E 11AC;C6B5;110B 116E 11AC; # (욵; 욵; 욵; 욵; 욵; ) HANGUL SYLLABLE UNJ
+C6B6;C6B6;110B 116E 11AD;C6B6;110B 116E 11AD; # (욶; 욶; 욶; 욶; 욶; ) HANGUL SYLLABLE UNH
+C6B7;C6B7;110B 116E 11AE;C6B7;110B 116E 11AE; # (욷; 욷; 욷; 욷; 욷; ) HANGUL SYLLABLE UD
+C6B8;C6B8;110B 116E 11AF;C6B8;110B 116E 11AF; # (울; 울; 울; 울; 울; ) HANGUL SYLLABLE UL
+C6B9;C6B9;110B 116E 11B0;C6B9;110B 116E 11B0; # (욹; 욹; 욹; 욹; 욹; ) HANGUL SYLLABLE ULG
+C6BA;C6BA;110B 116E 11B1;C6BA;110B 116E 11B1; # (욺; 욺; 욺; 욺; 욺; ) HANGUL SYLLABLE ULM
+C6BB;C6BB;110B 116E 11B2;C6BB;110B 116E 11B2; # (욻; 욻; 욻; 욻; 욻; ) HANGUL SYLLABLE ULB
+C6BC;C6BC;110B 116E 11B3;C6BC;110B 116E 11B3; # (욼; 욼; 욼; 욼; 욼; ) HANGUL SYLLABLE ULS
+C6BD;C6BD;110B 116E 11B4;C6BD;110B 116E 11B4; # (욽; 욽; 욽; 욽; 욽; ) HANGUL SYLLABLE ULT
+C6BE;C6BE;110B 116E 11B5;C6BE;110B 116E 11B5; # (욾; 욾; 욾; 욾; 욾; ) HANGUL SYLLABLE ULP
+C6BF;C6BF;110B 116E 11B6;C6BF;110B 116E 11B6; # (욿; 욿; 욿; 욿; 욿; ) HANGUL SYLLABLE ULH
+C6C0;C6C0;110B 116E 11B7;C6C0;110B 116E 11B7; # (움; 움; 움; 움; 움; ) HANGUL SYLLABLE UM
+C6C1;C6C1;110B 116E 11B8;C6C1;110B 116E 11B8; # (웁; 웁; 웁; 웁; 웁; ) HANGUL SYLLABLE UB
+C6C2;C6C2;110B 116E 11B9;C6C2;110B 116E 11B9; # (웂; 웂; 웂; 웂; 웂; ) HANGUL SYLLABLE UBS
+C6C3;C6C3;110B 116E 11BA;C6C3;110B 116E 11BA; # (웃; 웃; 웃; 웃; 웃; ) HANGUL SYLLABLE US
+C6C4;C6C4;110B 116E 11BB;C6C4;110B 116E 11BB; # (웄; 웄; 웄; 웄; 웄; ) HANGUL SYLLABLE USS
+C6C5;C6C5;110B 116E 11BC;C6C5;110B 116E 11BC; # (웅; 웅; 웅; 웅; 웅; ) HANGUL SYLLABLE UNG
+C6C6;C6C6;110B 116E 11BD;C6C6;110B 116E 11BD; # (웆; 웆; 웆; 웆; 웆; ) HANGUL SYLLABLE UJ
+C6C7;C6C7;110B 116E 11BE;C6C7;110B 116E 11BE; # (웇; 웇; 웇; 웇; 웇; ) HANGUL SYLLABLE UC
+C6C8;C6C8;110B 116E 11BF;C6C8;110B 116E 11BF; # (웈; 웈; 웈; 웈; 웈; ) HANGUL SYLLABLE UK
+C6C9;C6C9;110B 116E 11C0;C6C9;110B 116E 11C0; # (웉; 웉; 웉; 웉; 웉; ) HANGUL SYLLABLE UT
+C6CA;C6CA;110B 116E 11C1;C6CA;110B 116E 11C1; # (웊; 웊; 웊; 웊; 웊; ) HANGUL SYLLABLE UP
+C6CB;C6CB;110B 116E 11C2;C6CB;110B 116E 11C2; # (웋; 웋; 웋; 웋; 웋; ) HANGUL SYLLABLE UH
+C6CC;C6CC;110B 116F;C6CC;110B 116F; # (워; 워; 워; 워; 워; ) HANGUL SYLLABLE WEO
+C6CD;C6CD;110B 116F 11A8;C6CD;110B 116F 11A8; # (웍; 웍; 웍; 웍; 웍; ) HANGUL SYLLABLE WEOG
+C6CE;C6CE;110B 116F 11A9;C6CE;110B 116F 11A9; # (웎; 웎; 웎; 웎; 웎; ) HANGUL SYLLABLE WEOGG
+C6CF;C6CF;110B 116F 11AA;C6CF;110B 116F 11AA; # (웏; 웏; 웏; 웏; 웏; ) HANGUL SYLLABLE WEOGS
+C6D0;C6D0;110B 116F 11AB;C6D0;110B 116F 11AB; # (원; 원; 원; 원; 원; ) HANGUL SYLLABLE WEON
+C6D1;C6D1;110B 116F 11AC;C6D1;110B 116F 11AC; # (웑; 웑; 웑; 웑; 웑; ) HANGUL SYLLABLE WEONJ
+C6D2;C6D2;110B 116F 11AD;C6D2;110B 116F 11AD; # (웒; 웒; 웒; 웒; 웒; ) HANGUL SYLLABLE WEONH
+C6D3;C6D3;110B 116F 11AE;C6D3;110B 116F 11AE; # (웓; 웓; 웓; 웓; 웓; ) HANGUL SYLLABLE WEOD
+C6D4;C6D4;110B 116F 11AF;C6D4;110B 116F 11AF; # (월; 월; 월; 월; 월; ) HANGUL SYLLABLE WEOL
+C6D5;C6D5;110B 116F 11B0;C6D5;110B 116F 11B0; # (웕; 웕; 웕; 웕; 웕; ) HANGUL SYLLABLE WEOLG
+C6D6;C6D6;110B 116F 11B1;C6D6;110B 116F 11B1; # (웖; 웖; 웖; 웖; 웖; ) HANGUL SYLLABLE WEOLM
+C6D7;C6D7;110B 116F 11B2;C6D7;110B 116F 11B2; # (웗; 웗; 웗; 웗; 웗; ) HANGUL SYLLABLE WEOLB
+C6D8;C6D8;110B 116F 11B3;C6D8;110B 116F 11B3; # (웘; 웘; 웘; 웘; 웘; ) HANGUL SYLLABLE WEOLS
+C6D9;C6D9;110B 116F 11B4;C6D9;110B 116F 11B4; # (웙; 웙; 웙; 웙; 웙; ) HANGUL SYLLABLE WEOLT
+C6DA;C6DA;110B 116F 11B5;C6DA;110B 116F 11B5; # (웚; 웚; 웚; 웚; 웚; ) HANGUL SYLLABLE WEOLP
+C6DB;C6DB;110B 116F 11B6;C6DB;110B 116F 11B6; # (웛; 웛; 웛; 웛; 웛; ) HANGUL SYLLABLE WEOLH
+C6DC;C6DC;110B 116F 11B7;C6DC;110B 116F 11B7; # (웜; 웜; 웜; 웜; 웜; ) HANGUL SYLLABLE WEOM
+C6DD;C6DD;110B 116F 11B8;C6DD;110B 116F 11B8; # (웝; 웝; 웝; 웝; 웝; ) HANGUL SYLLABLE WEOB
+C6DE;C6DE;110B 116F 11B9;C6DE;110B 116F 11B9; # (웞; 웞; 웞; 웞; 웞; ) HANGUL SYLLABLE WEOBS
+C6DF;C6DF;110B 116F 11BA;C6DF;110B 116F 11BA; # (웟; 웟; 웟; 웟; 웟; ) HANGUL SYLLABLE WEOS
+C6E0;C6E0;110B 116F 11BB;C6E0;110B 116F 11BB; # (웠; 웠; 웠; 웠; 웠; ) HANGUL SYLLABLE WEOSS
+C6E1;C6E1;110B 116F 11BC;C6E1;110B 116F 11BC; # (웡; 웡; 웡; 웡; 웡; ) HANGUL SYLLABLE WEONG
+C6E2;C6E2;110B 116F 11BD;C6E2;110B 116F 11BD; # (웢; 웢; 웢; 웢; 웢; ) HANGUL SYLLABLE WEOJ
+C6E3;C6E3;110B 116F 11BE;C6E3;110B 116F 11BE; # (웣; 웣; 웣; 웣; 웣; ) HANGUL SYLLABLE WEOC
+C6E4;C6E4;110B 116F 11BF;C6E4;110B 116F 11BF; # (웤; 웤; 웤; 웤; 웤; ) HANGUL SYLLABLE WEOK
+C6E5;C6E5;110B 116F 11C0;C6E5;110B 116F 11C0; # (웥; 웥; 웥; 웥; 웥; ) HANGUL SYLLABLE WEOT
+C6E6;C6E6;110B 116F 11C1;C6E6;110B 116F 11C1; # (웦; 웦; 웦; 웦; 웦; ) HANGUL SYLLABLE WEOP
+C6E7;C6E7;110B 116F 11C2;C6E7;110B 116F 11C2; # (웧; 웧; 웧; 웧; 웧; ) HANGUL SYLLABLE WEOH
+C6E8;C6E8;110B 1170;C6E8;110B 1170; # (웨; 웨; 웨; 웨; 웨; ) HANGUL SYLLABLE WE
+C6E9;C6E9;110B 1170 11A8;C6E9;110B 1170 11A8; # (웩; 웩; 웩; 웩; 웩; ) HANGUL SYLLABLE WEG
+C6EA;C6EA;110B 1170 11A9;C6EA;110B 1170 11A9; # (웪; 웪; 웪; 웪; 웪; ) HANGUL SYLLABLE WEGG
+C6EB;C6EB;110B 1170 11AA;C6EB;110B 1170 11AA; # (웫; 웫; 웫; 웫; 웫; ) HANGUL SYLLABLE WEGS
+C6EC;C6EC;110B 1170 11AB;C6EC;110B 1170 11AB; # (웬; 웬; 웬; 웬; 웬; ) HANGUL SYLLABLE WEN
+C6ED;C6ED;110B 1170 11AC;C6ED;110B 1170 11AC; # (웭; 웭; 웭; 웭; 웭; ) HANGUL SYLLABLE WENJ
+C6EE;C6EE;110B 1170 11AD;C6EE;110B 1170 11AD; # (웮; 웮; 웮; 웮; 웮; ) HANGUL SYLLABLE WENH
+C6EF;C6EF;110B 1170 11AE;C6EF;110B 1170 11AE; # (웯; 웯; 웯; 웯; 웯; ) HANGUL SYLLABLE WED
+C6F0;C6F0;110B 1170 11AF;C6F0;110B 1170 11AF; # (웰; 웰; 웰; 웰; 웰; ) HANGUL SYLLABLE WEL
+C6F1;C6F1;110B 1170 11B0;C6F1;110B 1170 11B0; # (웱; 웱; 웱; 웱; 웱; ) HANGUL SYLLABLE WELG
+C6F2;C6F2;110B 1170 11B1;C6F2;110B 1170 11B1; # (웲; 웲; 웲; 웲; 웲; ) HANGUL SYLLABLE WELM
+C6F3;C6F3;110B 1170 11B2;C6F3;110B 1170 11B2; # (웳; 웳; 웳; 웳; 웳; ) HANGUL SYLLABLE WELB
+C6F4;C6F4;110B 1170 11B3;C6F4;110B 1170 11B3; # (웴; 웴; 웴; 웴; 웴; ) HANGUL SYLLABLE WELS
+C6F5;C6F5;110B 1170 11B4;C6F5;110B 1170 11B4; # (웵; 웵; 웵; 웵; 웵; ) HANGUL SYLLABLE WELT
+C6F6;C6F6;110B 1170 11B5;C6F6;110B 1170 11B5; # (웶; 웶; 웶; 웶; 웶; ) HANGUL SYLLABLE WELP
+C6F7;C6F7;110B 1170 11B6;C6F7;110B 1170 11B6; # (웷; 웷; 웷; 웷; 웷; ) HANGUL SYLLABLE WELH
+C6F8;C6F8;110B 1170 11B7;C6F8;110B 1170 11B7; # (웸; 웸; 웸; 웸; 웸; ) HANGUL SYLLABLE WEM
+C6F9;C6F9;110B 1170 11B8;C6F9;110B 1170 11B8; # (웹; 웹; 웹; 웹; 웹; ) HANGUL SYLLABLE WEB
+C6FA;C6FA;110B 1170 11B9;C6FA;110B 1170 11B9; # (웺; 웺; 웺; 웺; 웺; ) HANGUL SYLLABLE WEBS
+C6FB;C6FB;110B 1170 11BA;C6FB;110B 1170 11BA; # (웻; 웻; 웻; 웻; 웻; ) HANGUL SYLLABLE WES
+C6FC;C6FC;110B 1170 11BB;C6FC;110B 1170 11BB; # (웼; 웼; 웼; 웼; 웼; ) HANGUL SYLLABLE WESS
+C6FD;C6FD;110B 1170 11BC;C6FD;110B 1170 11BC; # (웽; 웽; 웽; 웽; 웽; ) HANGUL SYLLABLE WENG
+C6FE;C6FE;110B 1170 11BD;C6FE;110B 1170 11BD; # (웾; 웾; 웾; 웾; 웾; ) HANGUL SYLLABLE WEJ
+C6FF;C6FF;110B 1170 11BE;C6FF;110B 1170 11BE; # (웿; 웿; 웿; 웿; 웿; ) HANGUL SYLLABLE WEC
+C700;C700;110B 1170 11BF;C700;110B 1170 11BF; # (윀; 윀; 윀; 윀; 윀; ) HANGUL SYLLABLE WEK
+C701;C701;110B 1170 11C0;C701;110B 1170 11C0; # (윁; 윁; 윁; 윁; 윁; ) HANGUL SYLLABLE WET
+C702;C702;110B 1170 11C1;C702;110B 1170 11C1; # (윂; 윂; 윂; 윂; 윂; ) HANGUL SYLLABLE WEP
+C703;C703;110B 1170 11C2;C703;110B 1170 11C2; # (윃; 윃; 윃; 윃; 윃; ) HANGUL SYLLABLE WEH
+C704;C704;110B 1171;C704;110B 1171; # (위; 위; 위; 위; 위; ) HANGUL SYLLABLE WI
+C705;C705;110B 1171 11A8;C705;110B 1171 11A8; # (윅; 윅; 윅; 윅; 윅; ) HANGUL SYLLABLE WIG
+C706;C706;110B 1171 11A9;C706;110B 1171 11A9; # (윆; 윆; 윆; 윆; 윆; ) HANGUL SYLLABLE WIGG
+C707;C707;110B 1171 11AA;C707;110B 1171 11AA; # (윇; 윇; 윇; 윇; 윇; ) HANGUL SYLLABLE WIGS
+C708;C708;110B 1171 11AB;C708;110B 1171 11AB; # (윈; 윈; 윈; 윈; 윈; ) HANGUL SYLLABLE WIN
+C709;C709;110B 1171 11AC;C709;110B 1171 11AC; # (윉; 윉; 윉; 윉; 윉; ) HANGUL SYLLABLE WINJ
+C70A;C70A;110B 1171 11AD;C70A;110B 1171 11AD; # (윊; 윊; 윊; 윊; 윊; ) HANGUL SYLLABLE WINH
+C70B;C70B;110B 1171 11AE;C70B;110B 1171 11AE; # (윋; 윋; 윋; 윋; 윋; ) HANGUL SYLLABLE WID
+C70C;C70C;110B 1171 11AF;C70C;110B 1171 11AF; # (윌; 윌; 윌; 윌; 윌; ) HANGUL SYLLABLE WIL
+C70D;C70D;110B 1171 11B0;C70D;110B 1171 11B0; # (윍; 윍; 윍; 윍; 윍; ) HANGUL SYLLABLE WILG
+C70E;C70E;110B 1171 11B1;C70E;110B 1171 11B1; # (윎; 윎; 윎; 윎; 윎; ) HANGUL SYLLABLE WILM
+C70F;C70F;110B 1171 11B2;C70F;110B 1171 11B2; # (윏; 윏; 윏; 윏; 윏; ) HANGUL SYLLABLE WILB
+C710;C710;110B 1171 11B3;C710;110B 1171 11B3; # (윐; 윐; 윐; 윐; 윐; ) HANGUL SYLLABLE WILS
+C711;C711;110B 1171 11B4;C711;110B 1171 11B4; # (윑; 윑; 윑; 윑; 윑; ) HANGUL SYLLABLE WILT
+C712;C712;110B 1171 11B5;C712;110B 1171 11B5; # (윒; 윒; 윒; 윒; 윒; ) HANGUL SYLLABLE WILP
+C713;C713;110B 1171 11B6;C713;110B 1171 11B6; # (윓; 윓; 윓; 윓; 윓; ) HANGUL SYLLABLE WILH
+C714;C714;110B 1171 11B7;C714;110B 1171 11B7; # (윔; 윔; 윔; 윔; 윔; ) HANGUL SYLLABLE WIM
+C715;C715;110B 1171 11B8;C715;110B 1171 11B8; # (윕; 윕; 윕; 윕; 윕; ) HANGUL SYLLABLE WIB
+C716;C716;110B 1171 11B9;C716;110B 1171 11B9; # (윖; 윖; 윖; 윖; 윖; ) HANGUL SYLLABLE WIBS
+C717;C717;110B 1171 11BA;C717;110B 1171 11BA; # (윗; 윗; 윗; 윗; 윗; ) HANGUL SYLLABLE WIS
+C718;C718;110B 1171 11BB;C718;110B 1171 11BB; # (윘; 윘; 윘; 윘; 윘; ) HANGUL SYLLABLE WISS
+C719;C719;110B 1171 11BC;C719;110B 1171 11BC; # (윙; 윙; 윙; 윙; 윙; ) HANGUL SYLLABLE WING
+C71A;C71A;110B 1171 11BD;C71A;110B 1171 11BD; # (윚; 윚; 윚; 윚; 윚; ) HANGUL SYLLABLE WIJ
+C71B;C71B;110B 1171 11BE;C71B;110B 1171 11BE; # (윛; 윛; 윛; 윛; 윛; ) HANGUL SYLLABLE WIC
+C71C;C71C;110B 1171 11BF;C71C;110B 1171 11BF; # (윜; 윜; 윜; 윜; 윜; ) HANGUL SYLLABLE WIK
+C71D;C71D;110B 1171 11C0;C71D;110B 1171 11C0; # (윝; 윝; 윝; 윝; 윝; ) HANGUL SYLLABLE WIT
+C71E;C71E;110B 1171 11C1;C71E;110B 1171 11C1; # (윞; 윞; 윞; 윞; 윞; ) HANGUL SYLLABLE WIP
+C71F;C71F;110B 1171 11C2;C71F;110B 1171 11C2; # (윟; 윟; 윟; 윟; 윟; ) HANGUL SYLLABLE WIH
+C720;C720;110B 1172;C720;110B 1172; # (유; 유; 유; 유; 유; ) HANGUL SYLLABLE YU
+C721;C721;110B 1172 11A8;C721;110B 1172 11A8; # (육; 육; 육; 육; 육; ) HANGUL SYLLABLE YUG
+C722;C722;110B 1172 11A9;C722;110B 1172 11A9; # (윢; 윢; 윢; 윢; 윢; ) HANGUL SYLLABLE YUGG
+C723;C723;110B 1172 11AA;C723;110B 1172 11AA; # (윣; 윣; 윣; 윣; 윣; ) HANGUL SYLLABLE YUGS
+C724;C724;110B 1172 11AB;C724;110B 1172 11AB; # (윤; 윤; 윤; 윤; 윤; ) HANGUL SYLLABLE YUN
+C725;C725;110B 1172 11AC;C725;110B 1172 11AC; # (윥; 윥; 윥; 윥; 윥; ) HANGUL SYLLABLE YUNJ
+C726;C726;110B 1172 11AD;C726;110B 1172 11AD; # (윦; 윦; 윦; 윦; 윦; ) HANGUL SYLLABLE YUNH
+C727;C727;110B 1172 11AE;C727;110B 1172 11AE; # (윧; 윧; 윧; 윧; 윧; ) HANGUL SYLLABLE YUD
+C728;C728;110B 1172 11AF;C728;110B 1172 11AF; # (율; 율; 율; 율; 율; ) HANGUL SYLLABLE YUL
+C729;C729;110B 1172 11B0;C729;110B 1172 11B0; # (윩; 윩; 윩; 윩; 윩; ) HANGUL SYLLABLE YULG
+C72A;C72A;110B 1172 11B1;C72A;110B 1172 11B1; # (윪; 윪; 윪; 윪; 윪; ) HANGUL SYLLABLE YULM
+C72B;C72B;110B 1172 11B2;C72B;110B 1172 11B2; # (윫; 윫; 윫; 윫; 윫; ) HANGUL SYLLABLE YULB
+C72C;C72C;110B 1172 11B3;C72C;110B 1172 11B3; # (윬; 윬; 윬; 윬; 윬; ) HANGUL SYLLABLE YULS
+C72D;C72D;110B 1172 11B4;C72D;110B 1172 11B4; # (윭; 윭; 윭; 윭; 윭; ) HANGUL SYLLABLE YULT
+C72E;C72E;110B 1172 11B5;C72E;110B 1172 11B5; # (윮; 윮; 윮; 윮; 윮; ) HANGUL SYLLABLE YULP
+C72F;C72F;110B 1172 11B6;C72F;110B 1172 11B6; # (윯; 윯; 윯; 윯; 윯; ) HANGUL SYLLABLE YULH
+C730;C730;110B 1172 11B7;C730;110B 1172 11B7; # (윰; 윰; 윰; 윰; 윰; ) HANGUL SYLLABLE YUM
+C731;C731;110B 1172 11B8;C731;110B 1172 11B8; # (윱; 윱; 윱; 윱; 윱; ) HANGUL SYLLABLE YUB
+C732;C732;110B 1172 11B9;C732;110B 1172 11B9; # (윲; 윲; 윲; 윲; 윲; ) HANGUL SYLLABLE YUBS
+C733;C733;110B 1172 11BA;C733;110B 1172 11BA; # (윳; 윳; 윳; 윳; 윳; ) HANGUL SYLLABLE YUS
+C734;C734;110B 1172 11BB;C734;110B 1172 11BB; # (윴; 윴; 윴; 윴; 윴; ) HANGUL SYLLABLE YUSS
+C735;C735;110B 1172 11BC;C735;110B 1172 11BC; # (융; 융; 융; 융; 융; ) HANGUL SYLLABLE YUNG
+C736;C736;110B 1172 11BD;C736;110B 1172 11BD; # (윶; 윶; 윶; 윶; 윶; ) HANGUL SYLLABLE YUJ
+C737;C737;110B 1172 11BE;C737;110B 1172 11BE; # (윷; 윷; 윷; 윷; 윷; ) HANGUL SYLLABLE YUC
+C738;C738;110B 1172 11BF;C738;110B 1172 11BF; # (윸; 윸; 윸; 윸; 윸; ) HANGUL SYLLABLE YUK
+C739;C739;110B 1172 11C0;C739;110B 1172 11C0; # (윹; 윹; 윹; 윹; 윹; ) HANGUL SYLLABLE YUT
+C73A;C73A;110B 1172 11C1;C73A;110B 1172 11C1; # (윺; 윺; 윺; 윺; 윺; ) HANGUL SYLLABLE YUP
+C73B;C73B;110B 1172 11C2;C73B;110B 1172 11C2; # (윻; 윻; 윻; 윻; 윻; ) HANGUL SYLLABLE YUH
+C73C;C73C;110B 1173;C73C;110B 1173; # (으; 으; 으; 으; 으; ) HANGUL SYLLABLE EU
+C73D;C73D;110B 1173 11A8;C73D;110B 1173 11A8; # (윽; 윽; 윽; 윽; 윽; ) HANGUL SYLLABLE EUG
+C73E;C73E;110B 1173 11A9;C73E;110B 1173 11A9; # (윾; 윾; 윾; 윾; 윾; ) HANGUL SYLLABLE EUGG
+C73F;C73F;110B 1173 11AA;C73F;110B 1173 11AA; # (윿; 윿; 윿; 윿; 윿; ) HANGUL SYLLABLE EUGS
+C740;C740;110B 1173 11AB;C740;110B 1173 11AB; # (은; 은; 은; 은; 은; ) HANGUL SYLLABLE EUN
+C741;C741;110B 1173 11AC;C741;110B 1173 11AC; # (읁; 읁; 읁; 읁; 읁; ) HANGUL SYLLABLE EUNJ
+C742;C742;110B 1173 11AD;C742;110B 1173 11AD; # (읂; 읂; 읂; 읂; 읂; ) HANGUL SYLLABLE EUNH
+C743;C743;110B 1173 11AE;C743;110B 1173 11AE; # (읃; 읃; 읃; 읃; 읃; ) HANGUL SYLLABLE EUD
+C744;C744;110B 1173 11AF;C744;110B 1173 11AF; # (을; 을; 을; 을; 을; ) HANGUL SYLLABLE EUL
+C745;C745;110B 1173 11B0;C745;110B 1173 11B0; # (읅; 읅; 읅; 읅; 읅; ) HANGUL SYLLABLE EULG
+C746;C746;110B 1173 11B1;C746;110B 1173 11B1; # (읆; 읆; 읆; 읆; 읆; ) HANGUL SYLLABLE EULM
+C747;C747;110B 1173 11B2;C747;110B 1173 11B2; # (읇; 읇; 읇; 읇; 읇; ) HANGUL SYLLABLE EULB
+C748;C748;110B 1173 11B3;C748;110B 1173 11B3; # (읈; 읈; 읈; 읈; 읈; ) HANGUL SYLLABLE EULS
+C749;C749;110B 1173 11B4;C749;110B 1173 11B4; # (읉; 읉; 읉; 읉; 읉; ) HANGUL SYLLABLE EULT
+C74A;C74A;110B 1173 11B5;C74A;110B 1173 11B5; # (읊; 읊; 읊; 읊; 읊; ) HANGUL SYLLABLE EULP
+C74B;C74B;110B 1173 11B6;C74B;110B 1173 11B6; # (읋; 읋; 읋; 읋; 읋; ) HANGUL SYLLABLE EULH
+C74C;C74C;110B 1173 11B7;C74C;110B 1173 11B7; # (음; 음; 음; 음; 음; ) HANGUL SYLLABLE EUM
+C74D;C74D;110B 1173 11B8;C74D;110B 1173 11B8; # (읍; 읍; 읍; 읍; 읍; ) HANGUL SYLLABLE EUB
+C74E;C74E;110B 1173 11B9;C74E;110B 1173 11B9; # (읎; 읎; 읎; 읎; 읎; ) HANGUL SYLLABLE EUBS
+C74F;C74F;110B 1173 11BA;C74F;110B 1173 11BA; # (읏; 읏; 읏; 읏; 읏; ) HANGUL SYLLABLE EUS
+C750;C750;110B 1173 11BB;C750;110B 1173 11BB; # (읐; 읐; 읐; 읐; 읐; ) HANGUL SYLLABLE EUSS
+C751;C751;110B 1173 11BC;C751;110B 1173 11BC; # (응; 응; 응; 응; 응; ) HANGUL SYLLABLE EUNG
+C752;C752;110B 1173 11BD;C752;110B 1173 11BD; # (읒; 읒; 읒; 읒; 읒; ) HANGUL SYLLABLE EUJ
+C753;C753;110B 1173 11BE;C753;110B 1173 11BE; # (읓; 읓; 읓; 읓; 읓; ) HANGUL SYLLABLE EUC
+C754;C754;110B 1173 11BF;C754;110B 1173 11BF; # (읔; 읔; 읔; 읔; 읔; ) HANGUL SYLLABLE EUK
+C755;C755;110B 1173 11C0;C755;110B 1173 11C0; # (읕; 읕; 읕; 읕; 읕; ) HANGUL SYLLABLE EUT
+C756;C756;110B 1173 11C1;C756;110B 1173 11C1; # (읖; 읖; 읖; 읖; 읖; ) HANGUL SYLLABLE EUP
+C757;C757;110B 1173 11C2;C757;110B 1173 11C2; # (읗; 읗; 읗; 읗; 읗; ) HANGUL SYLLABLE EUH
+C758;C758;110B 1174;C758;110B 1174; # (의; 의; 의; 의; 의; ) HANGUL SYLLABLE YI
+C759;C759;110B 1174 11A8;C759;110B 1174 11A8; # (읙; 읙; 읙; 읙; 읙; ) HANGUL SYLLABLE YIG
+C75A;C75A;110B 1174 11A9;C75A;110B 1174 11A9; # (읚; 읚; 읚; 읚; 읚; ) HANGUL SYLLABLE YIGG
+C75B;C75B;110B 1174 11AA;C75B;110B 1174 11AA; # (읛; 읛; 읛; 읛; 읛; ) HANGUL SYLLABLE YIGS
+C75C;C75C;110B 1174 11AB;C75C;110B 1174 11AB; # (읜; 읜; 읜; 읜; 읜; ) HANGUL SYLLABLE YIN
+C75D;C75D;110B 1174 11AC;C75D;110B 1174 11AC; # (읝; 읝; 읝; 읝; 읝; ) HANGUL SYLLABLE YINJ
+C75E;C75E;110B 1174 11AD;C75E;110B 1174 11AD; # (읞; 읞; 읞; 읞; 읞; ) HANGUL SYLLABLE YINH
+C75F;C75F;110B 1174 11AE;C75F;110B 1174 11AE; # (읟; 읟; 읟; 읟; 읟; ) HANGUL SYLLABLE YID
+C760;C760;110B 1174 11AF;C760;110B 1174 11AF; # (읠; 읠; 읠; 읠; 읠; ) HANGUL SYLLABLE YIL
+C761;C761;110B 1174 11B0;C761;110B 1174 11B0; # (읡; 읡; 읡; 읡; 읡; ) HANGUL SYLLABLE YILG
+C762;C762;110B 1174 11B1;C762;110B 1174 11B1; # (읢; 읢; 읢; 읢; 읢; ) HANGUL SYLLABLE YILM
+C763;C763;110B 1174 11B2;C763;110B 1174 11B2; # (읣; 읣; 읣; 읣; 읣; ) HANGUL SYLLABLE YILB
+C764;C764;110B 1174 11B3;C764;110B 1174 11B3; # (읤; 읤; 읤; 읤; 읤; ) HANGUL SYLLABLE YILS
+C765;C765;110B 1174 11B4;C765;110B 1174 11B4; # (읥; 읥; 읥; 읥; 읥; ) HANGUL SYLLABLE YILT
+C766;C766;110B 1174 11B5;C766;110B 1174 11B5; # (읦; 읦; 읦; 읦; 읦; ) HANGUL SYLLABLE YILP
+C767;C767;110B 1174 11B6;C767;110B 1174 11B6; # (읧; 읧; 읧; 읧; 읧; ) HANGUL SYLLABLE YILH
+C768;C768;110B 1174 11B7;C768;110B 1174 11B7; # (읨; 읨; 읨; 읨; 읨; ) HANGUL SYLLABLE YIM
+C769;C769;110B 1174 11B8;C769;110B 1174 11B8; # (읩; 읩; 읩; 읩; 읩; ) HANGUL SYLLABLE YIB
+C76A;C76A;110B 1174 11B9;C76A;110B 1174 11B9; # (읪; 읪; 읪; 읪; 읪; ) HANGUL SYLLABLE YIBS
+C76B;C76B;110B 1174 11BA;C76B;110B 1174 11BA; # (읫; 읫; 읫; 읫; 읫; ) HANGUL SYLLABLE YIS
+C76C;C76C;110B 1174 11BB;C76C;110B 1174 11BB; # (읬; 읬; 읬; 읬; 읬; ) HANGUL SYLLABLE YISS
+C76D;C76D;110B 1174 11BC;C76D;110B 1174 11BC; # (읭; 읭; 읭; 읭; 읭; ) HANGUL SYLLABLE YING
+C76E;C76E;110B 1174 11BD;C76E;110B 1174 11BD; # (읮; 읮; 읮; 읮; 읮; ) HANGUL SYLLABLE YIJ
+C76F;C76F;110B 1174 11BE;C76F;110B 1174 11BE; # (읯; 읯; 읯; 읯; 읯; ) HANGUL SYLLABLE YIC
+C770;C770;110B 1174 11BF;C770;110B 1174 11BF; # (읰; 읰; 읰; 읰; 읰; ) HANGUL SYLLABLE YIK
+C771;C771;110B 1174 11C0;C771;110B 1174 11C0; # (읱; 읱; 읱; 읱; 읱; ) HANGUL SYLLABLE YIT
+C772;C772;110B 1174 11C1;C772;110B 1174 11C1; # (읲; 읲; 읲; 읲; 읲; ) HANGUL SYLLABLE YIP
+C773;C773;110B 1174 11C2;C773;110B 1174 11C2; # (읳; 읳; 읳; 읳; 읳; ) HANGUL SYLLABLE YIH
+C774;C774;110B 1175;C774;110B 1175; # (이; 이; 이; 이; 이; ) HANGUL SYLLABLE I
+C775;C775;110B 1175 11A8;C775;110B 1175 11A8; # (익; 익; 익; 익; 익; ) HANGUL SYLLABLE IG
+C776;C776;110B 1175 11A9;C776;110B 1175 11A9; # (읶; 읶; 읶; 읶; 읶; ) HANGUL SYLLABLE IGG
+C777;C777;110B 1175 11AA;C777;110B 1175 11AA; # (읷; 읷; 읷; 읷; 읷; ) HANGUL SYLLABLE IGS
+C778;C778;110B 1175 11AB;C778;110B 1175 11AB; # (인; 인; 인; 인; 인; ) HANGUL SYLLABLE IN
+C779;C779;110B 1175 11AC;C779;110B 1175 11AC; # (읹; 읹; 읹; 읹; 읹; ) HANGUL SYLLABLE INJ
+C77A;C77A;110B 1175 11AD;C77A;110B 1175 11AD; # (읺; 읺; 읺; 읺; 읺; ) HANGUL SYLLABLE INH
+C77B;C77B;110B 1175 11AE;C77B;110B 1175 11AE; # (읻; 읻; 읻; 읻; 읻; ) HANGUL SYLLABLE ID
+C77C;C77C;110B 1175 11AF;C77C;110B 1175 11AF; # (일; 일; 일; 일; 일; ) HANGUL SYLLABLE IL
+C77D;C77D;110B 1175 11B0;C77D;110B 1175 11B0; # (읽; 읽; 읽; 읽; 읽; ) HANGUL SYLLABLE ILG
+C77E;C77E;110B 1175 11B1;C77E;110B 1175 11B1; # (읾; 읾; 읾; 읾; 읾; ) HANGUL SYLLABLE ILM
+C77F;C77F;110B 1175 11B2;C77F;110B 1175 11B2; # (읿; 읿; 읿; 읿; 읿; ) HANGUL SYLLABLE ILB
+C780;C780;110B 1175 11B3;C780;110B 1175 11B3; # (잀; 잀; 잀; 잀; 잀; ) HANGUL SYLLABLE ILS
+C781;C781;110B 1175 11B4;C781;110B 1175 11B4; # (잁; 잁; 잁; 잁; 잁; ) HANGUL SYLLABLE ILT
+C782;C782;110B 1175 11B5;C782;110B 1175 11B5; # (잂; 잂; 잂; 잂; 잂; ) HANGUL SYLLABLE ILP
+C783;C783;110B 1175 11B6;C783;110B 1175 11B6; # (잃; 잃; 잃; 잃; 잃; ) HANGUL SYLLABLE ILH
+C784;C784;110B 1175 11B7;C784;110B 1175 11B7; # (임; 임; 임; 임; 임; ) HANGUL SYLLABLE IM
+C785;C785;110B 1175 11B8;C785;110B 1175 11B8; # (입; 입; 입; 입; 입; ) HANGUL SYLLABLE IB
+C786;C786;110B 1175 11B9;C786;110B 1175 11B9; # (잆; 잆; 잆; 잆; 잆; ) HANGUL SYLLABLE IBS
+C787;C787;110B 1175 11BA;C787;110B 1175 11BA; # (잇; 잇; 잇; 잇; 잇; ) HANGUL SYLLABLE IS
+C788;C788;110B 1175 11BB;C788;110B 1175 11BB; # (있; 있; 있; 있; 있; ) HANGUL SYLLABLE ISS
+C789;C789;110B 1175 11BC;C789;110B 1175 11BC; # (잉; 잉; 잉; 잉; 잉; ) HANGUL SYLLABLE ING
+C78A;C78A;110B 1175 11BD;C78A;110B 1175 11BD; # (잊; 잊; 잊; 잊; 잊; ) HANGUL SYLLABLE IJ
+C78B;C78B;110B 1175 11BE;C78B;110B 1175 11BE; # (잋; 잋; 잋; 잋; 잋; ) HANGUL SYLLABLE IC
+C78C;C78C;110B 1175 11BF;C78C;110B 1175 11BF; # (잌; 잌; 잌; 잌; 잌; ) HANGUL SYLLABLE IK
+C78D;C78D;110B 1175 11C0;C78D;110B 1175 11C0; # (잍; 잍; 잍; 잍; 잍; ) HANGUL SYLLABLE IT
+C78E;C78E;110B 1175 11C1;C78E;110B 1175 11C1; # (잎; 잎; 잎; 잎; 잎; ) HANGUL SYLLABLE IP
+C78F;C78F;110B 1175 11C2;C78F;110B 1175 11C2; # (잏; 잏; 잏; 잏; 잏; ) HANGUL SYLLABLE IH
+C790;C790;110C 1161;C790;110C 1161; # (자; 자; 자; 자; 자; ) HANGUL SYLLABLE JA
+C791;C791;110C 1161 11A8;C791;110C 1161 11A8; # (작; 작; 작; 작; 작; ) HANGUL SYLLABLE JAG
+C792;C792;110C 1161 11A9;C792;110C 1161 11A9; # (잒; 잒; 잒; 잒; 잒; ) HANGUL SYLLABLE JAGG
+C793;C793;110C 1161 11AA;C793;110C 1161 11AA; # (잓; 잓; 잓; 잓; 잓; ) HANGUL SYLLABLE JAGS
+C794;C794;110C 1161 11AB;C794;110C 1161 11AB; # (잔; 잔; 잔; 잔; 잔; ) HANGUL SYLLABLE JAN
+C795;C795;110C 1161 11AC;C795;110C 1161 11AC; # (잕; 잕; 잕; 잕; 잕; ) HANGUL SYLLABLE JANJ
+C796;C796;110C 1161 11AD;C796;110C 1161 11AD; # (잖; 잖; 잖; 잖; 잖; ) HANGUL SYLLABLE JANH
+C797;C797;110C 1161 11AE;C797;110C 1161 11AE; # (잗; 잗; 잗; 잗; 잗; ) HANGUL SYLLABLE JAD
+C798;C798;110C 1161 11AF;C798;110C 1161 11AF; # (잘; 잘; 잘; 잘; 잘; ) HANGUL SYLLABLE JAL
+C799;C799;110C 1161 11B0;C799;110C 1161 11B0; # (잙; 잙; 잙; 잙; 잙; ) HANGUL SYLLABLE JALG
+C79A;C79A;110C 1161 11B1;C79A;110C 1161 11B1; # (잚; 잚; 잚; 잚; 잚; ) HANGUL SYLLABLE JALM
+C79B;C79B;110C 1161 11B2;C79B;110C 1161 11B2; # (잛; 잛; 잛; 잛; 잛; ) HANGUL SYLLABLE JALB
+C79C;C79C;110C 1161 11B3;C79C;110C 1161 11B3; # (잜; 잜; 잜; 잜; 잜; ) HANGUL SYLLABLE JALS
+C79D;C79D;110C 1161 11B4;C79D;110C 1161 11B4; # (잝; 잝; 잝; 잝; 잝; ) HANGUL SYLLABLE JALT
+C79E;C79E;110C 1161 11B5;C79E;110C 1161 11B5; # (잞; 잞; 잞; 잞; 잞; ) HANGUL SYLLABLE JALP
+C79F;C79F;110C 1161 11B6;C79F;110C 1161 11B6; # (잟; 잟; 잟; 잟; 잟; ) HANGUL SYLLABLE JALH
+C7A0;C7A0;110C 1161 11B7;C7A0;110C 1161 11B7; # (잠; 잠; 잠; 잠; 잠; ) HANGUL SYLLABLE JAM
+C7A1;C7A1;110C 1161 11B8;C7A1;110C 1161 11B8; # (잡; 잡; 잡; 잡; 잡; ) HANGUL SYLLABLE JAB
+C7A2;C7A2;110C 1161 11B9;C7A2;110C 1161 11B9; # (잢; 잢; 잢; 잢; 잢; ) HANGUL SYLLABLE JABS
+C7A3;C7A3;110C 1161 11BA;C7A3;110C 1161 11BA; # (잣; 잣; 잣; 잣; 잣; ) HANGUL SYLLABLE JAS
+C7A4;C7A4;110C 1161 11BB;C7A4;110C 1161 11BB; # (잤; 잤; 잤; 잤; 잤; ) HANGUL SYLLABLE JASS
+C7A5;C7A5;110C 1161 11BC;C7A5;110C 1161 11BC; # (장; 장; 장; 장; 장; ) HANGUL SYLLABLE JANG
+C7A6;C7A6;110C 1161 11BD;C7A6;110C 1161 11BD; # (잦; 잦; 잦; 잦; 잦; ) HANGUL SYLLABLE JAJ
+C7A7;C7A7;110C 1161 11BE;C7A7;110C 1161 11BE; # (잧; 잧; 잧; 잧; 잧; ) HANGUL SYLLABLE JAC
+C7A8;C7A8;110C 1161 11BF;C7A8;110C 1161 11BF; # (잨; 잨; 잨; 잨; 잨; ) HANGUL SYLLABLE JAK
+C7A9;C7A9;110C 1161 11C0;C7A9;110C 1161 11C0; # (잩; 잩; 잩; 잩; 잩; ) HANGUL SYLLABLE JAT
+C7AA;C7AA;110C 1161 11C1;C7AA;110C 1161 11C1; # (잪; 잪; 잪; 잪; 잪; ) HANGUL SYLLABLE JAP
+C7AB;C7AB;110C 1161 11C2;C7AB;110C 1161 11C2; # (잫; 잫; 잫; 잫; 잫; ) HANGUL SYLLABLE JAH
+C7AC;C7AC;110C 1162;C7AC;110C 1162; # (재; 재; 재; 재; 재; ) HANGUL SYLLABLE JAE
+C7AD;C7AD;110C 1162 11A8;C7AD;110C 1162 11A8; # (잭; 잭; 잭; 잭; 잭; ) HANGUL SYLLABLE JAEG
+C7AE;C7AE;110C 1162 11A9;C7AE;110C 1162 11A9; # (잮; 잮; 잮; 잮; 잮; ) HANGUL SYLLABLE JAEGG
+C7AF;C7AF;110C 1162 11AA;C7AF;110C 1162 11AA; # (잯; 잯; 잯; 잯; 잯; ) HANGUL SYLLABLE JAEGS
+C7B0;C7B0;110C 1162 11AB;C7B0;110C 1162 11AB; # (잰; 잰; 잰; 잰; 잰; ) HANGUL SYLLABLE JAEN
+C7B1;C7B1;110C 1162 11AC;C7B1;110C 1162 11AC; # (잱; 잱; 잱; 잱; 잱; ) HANGUL SYLLABLE JAENJ
+C7B2;C7B2;110C 1162 11AD;C7B2;110C 1162 11AD; # (잲; 잲; 잲; 잲; 잲; ) HANGUL SYLLABLE JAENH
+C7B3;C7B3;110C 1162 11AE;C7B3;110C 1162 11AE; # (잳; 잳; 잳; 잳; 잳; ) HANGUL SYLLABLE JAED
+C7B4;C7B4;110C 1162 11AF;C7B4;110C 1162 11AF; # (잴; 잴; 잴; 잴; 잴; ) HANGUL SYLLABLE JAEL
+C7B5;C7B5;110C 1162 11B0;C7B5;110C 1162 11B0; # (잵; 잵; 잵; 잵; 잵; ) HANGUL SYLLABLE JAELG
+C7B6;C7B6;110C 1162 11B1;C7B6;110C 1162 11B1; # (잶; 잶; 잶; 잶; 잶; ) HANGUL SYLLABLE JAELM
+C7B7;C7B7;110C 1162 11B2;C7B7;110C 1162 11B2; # (잷; 잷; 잷; 잷; 잷; ) HANGUL SYLLABLE JAELB
+C7B8;C7B8;110C 1162 11B3;C7B8;110C 1162 11B3; # (잸; 잸; 잸; 잸; 잸; ) HANGUL SYLLABLE JAELS
+C7B9;C7B9;110C 1162 11B4;C7B9;110C 1162 11B4; # (잹; 잹; 잹; 잹; 잹; ) HANGUL SYLLABLE JAELT
+C7BA;C7BA;110C 1162 11B5;C7BA;110C 1162 11B5; # (잺; 잺; 잺; 잺; 잺; ) HANGUL SYLLABLE JAELP
+C7BB;C7BB;110C 1162 11B6;C7BB;110C 1162 11B6; # (잻; 잻; 잻; 잻; 잻; ) HANGUL SYLLABLE JAELH
+C7BC;C7BC;110C 1162 11B7;C7BC;110C 1162 11B7; # (잼; 잼; 잼; 잼; 잼; ) HANGUL SYLLABLE JAEM
+C7BD;C7BD;110C 1162 11B8;C7BD;110C 1162 11B8; # (잽; 잽; 잽; 잽; 잽; ) HANGUL SYLLABLE JAEB
+C7BE;C7BE;110C 1162 11B9;C7BE;110C 1162 11B9; # (잾; 잾; 잾; 잾; 잾; ) HANGUL SYLLABLE JAEBS
+C7BF;C7BF;110C 1162 11BA;C7BF;110C 1162 11BA; # (잿; 잿; 잿; 잿; 잿; ) HANGUL SYLLABLE JAES
+C7C0;C7C0;110C 1162 11BB;C7C0;110C 1162 11BB; # (쟀; 쟀; 쟀; 쟀; 쟀; ) HANGUL SYLLABLE JAESS
+C7C1;C7C1;110C 1162 11BC;C7C1;110C 1162 11BC; # (쟁; 쟁; 쟁; 쟁; 쟁; ) HANGUL SYLLABLE JAENG
+C7C2;C7C2;110C 1162 11BD;C7C2;110C 1162 11BD; # (쟂; 쟂; 쟂; 쟂; 쟂; ) HANGUL SYLLABLE JAEJ
+C7C3;C7C3;110C 1162 11BE;C7C3;110C 1162 11BE; # (쟃; 쟃; 쟃; 쟃; 쟃; ) HANGUL SYLLABLE JAEC
+C7C4;C7C4;110C 1162 11BF;C7C4;110C 1162 11BF; # (쟄; 쟄; 쟄; 쟄; 쟄; ) HANGUL SYLLABLE JAEK
+C7C5;C7C5;110C 1162 11C0;C7C5;110C 1162 11C0; # (쟅; 쟅; 쟅; 쟅; 쟅; ) HANGUL SYLLABLE JAET
+C7C6;C7C6;110C 1162 11C1;C7C6;110C 1162 11C1; # (쟆; 쟆; 쟆; 쟆; 쟆; ) HANGUL SYLLABLE JAEP
+C7C7;C7C7;110C 1162 11C2;C7C7;110C 1162 11C2; # (쟇; 쟇; 쟇; 쟇; 쟇; ) HANGUL SYLLABLE JAEH
+C7C8;C7C8;110C 1163;C7C8;110C 1163; # (쟈; 쟈; 쟈; 쟈; 쟈; ) HANGUL SYLLABLE JYA
+C7C9;C7C9;110C 1163 11A8;C7C9;110C 1163 11A8; # (쟉; 쟉; 쟉; 쟉; 쟉; ) HANGUL SYLLABLE JYAG
+C7CA;C7CA;110C 1163 11A9;C7CA;110C 1163 11A9; # (쟊; 쟊; 쟊; 쟊; 쟊; ) HANGUL SYLLABLE JYAGG
+C7CB;C7CB;110C 1163 11AA;C7CB;110C 1163 11AA; # (쟋; 쟋; 쟋; 쟋; 쟋; ) HANGUL SYLLABLE JYAGS
+C7CC;C7CC;110C 1163 11AB;C7CC;110C 1163 11AB; # (쟌; 쟌; 쟌; 쟌; 쟌; ) HANGUL SYLLABLE JYAN
+C7CD;C7CD;110C 1163 11AC;C7CD;110C 1163 11AC; # (쟍; 쟍; 쟍; 쟍; 쟍; ) HANGUL SYLLABLE JYANJ
+C7CE;C7CE;110C 1163 11AD;C7CE;110C 1163 11AD; # (쟎; 쟎; 쟎; 쟎; 쟎; ) HANGUL SYLLABLE JYANH
+C7CF;C7CF;110C 1163 11AE;C7CF;110C 1163 11AE; # (쟏; 쟏; 쟏; 쟏; 쟏; ) HANGUL SYLLABLE JYAD
+C7D0;C7D0;110C 1163 11AF;C7D0;110C 1163 11AF; # (쟐; 쟐; 쟐; 쟐; 쟐; ) HANGUL SYLLABLE JYAL
+C7D1;C7D1;110C 1163 11B0;C7D1;110C 1163 11B0; # (쟑; 쟑; 쟑; 쟑; 쟑; ) HANGUL SYLLABLE JYALG
+C7D2;C7D2;110C 1163 11B1;C7D2;110C 1163 11B1; # (쟒; 쟒; 쟒; 쟒; 쟒; ) HANGUL SYLLABLE JYALM
+C7D3;C7D3;110C 1163 11B2;C7D3;110C 1163 11B2; # (쟓; 쟓; 쟓; 쟓; 쟓; ) HANGUL SYLLABLE JYALB
+C7D4;C7D4;110C 1163 11B3;C7D4;110C 1163 11B3; # (쟔; 쟔; 쟔; 쟔; 쟔; ) HANGUL SYLLABLE JYALS
+C7D5;C7D5;110C 1163 11B4;C7D5;110C 1163 11B4; # (쟕; 쟕; 쟕; 쟕; 쟕; ) HANGUL SYLLABLE JYALT
+C7D6;C7D6;110C 1163 11B5;C7D6;110C 1163 11B5; # (쟖; 쟖; 쟖; 쟖; 쟖; ) HANGUL SYLLABLE JYALP
+C7D7;C7D7;110C 1163 11B6;C7D7;110C 1163 11B6; # (쟗; 쟗; 쟗; 쟗; 쟗; ) HANGUL SYLLABLE JYALH
+C7D8;C7D8;110C 1163 11B7;C7D8;110C 1163 11B7; # (쟘; 쟘; 쟘; 쟘; 쟘; ) HANGUL SYLLABLE JYAM
+C7D9;C7D9;110C 1163 11B8;C7D9;110C 1163 11B8; # (쟙; 쟙; 쟙; 쟙; 쟙; ) HANGUL SYLLABLE JYAB
+C7DA;C7DA;110C 1163 11B9;C7DA;110C 1163 11B9; # (쟚; 쟚; 쟚; 쟚; 쟚; ) HANGUL SYLLABLE JYABS
+C7DB;C7DB;110C 1163 11BA;C7DB;110C 1163 11BA; # (쟛; 쟛; 쟛; 쟛; 쟛; ) HANGUL SYLLABLE JYAS
+C7DC;C7DC;110C 1163 11BB;C7DC;110C 1163 11BB; # (쟜; 쟜; 쟜; 쟜; 쟜; ) HANGUL SYLLABLE JYASS
+C7DD;C7DD;110C 1163 11BC;C7DD;110C 1163 11BC; # (쟝; 쟝; 쟝; 쟝; 쟝; ) HANGUL SYLLABLE JYANG
+C7DE;C7DE;110C 1163 11BD;C7DE;110C 1163 11BD; # (쟞; 쟞; 쟞; 쟞; 쟞; ) HANGUL SYLLABLE JYAJ
+C7DF;C7DF;110C 1163 11BE;C7DF;110C 1163 11BE; # (쟟; 쟟; 쟟; 쟟; 쟟; ) HANGUL SYLLABLE JYAC
+C7E0;C7E0;110C 1163 11BF;C7E0;110C 1163 11BF; # (쟠; 쟠; 쟠; 쟠; 쟠; ) HANGUL SYLLABLE JYAK
+C7E1;C7E1;110C 1163 11C0;C7E1;110C 1163 11C0; # (쟡; 쟡; 쟡; 쟡; 쟡; ) HANGUL SYLLABLE JYAT
+C7E2;C7E2;110C 1163 11C1;C7E2;110C 1163 11C1; # (쟢; 쟢; 쟢; 쟢; 쟢; ) HANGUL SYLLABLE JYAP
+C7E3;C7E3;110C 1163 11C2;C7E3;110C 1163 11C2; # (쟣; 쟣; 쟣; 쟣; 쟣; ) HANGUL SYLLABLE JYAH
+C7E4;C7E4;110C 1164;C7E4;110C 1164; # (쟤; 쟤; 쟤; 쟤; 쟤; ) HANGUL SYLLABLE JYAE
+C7E5;C7E5;110C 1164 11A8;C7E5;110C 1164 11A8; # (쟥; 쟥; 쟥; 쟥; 쟥; ) HANGUL SYLLABLE JYAEG
+C7E6;C7E6;110C 1164 11A9;C7E6;110C 1164 11A9; # (쟦; 쟦; 쟦; 쟦; 쟦; ) HANGUL SYLLABLE JYAEGG
+C7E7;C7E7;110C 1164 11AA;C7E7;110C 1164 11AA; # (쟧; 쟧; 쟧; 쟧; 쟧; ) HANGUL SYLLABLE JYAEGS
+C7E8;C7E8;110C 1164 11AB;C7E8;110C 1164 11AB; # (쟨; 쟨; 쟨; 쟨; 쟨; ) HANGUL SYLLABLE JYAEN
+C7E9;C7E9;110C 1164 11AC;C7E9;110C 1164 11AC; # (쟩; 쟩; 쟩; 쟩; 쟩; ) HANGUL SYLLABLE JYAENJ
+C7EA;C7EA;110C 1164 11AD;C7EA;110C 1164 11AD; # (쟪; 쟪; 쟪; 쟪; 쟪; ) HANGUL SYLLABLE JYAENH
+C7EB;C7EB;110C 1164 11AE;C7EB;110C 1164 11AE; # (쟫; 쟫; 쟫; 쟫; 쟫; ) HANGUL SYLLABLE JYAED
+C7EC;C7EC;110C 1164 11AF;C7EC;110C 1164 11AF; # (쟬; 쟬; 쟬; 쟬; 쟬; ) HANGUL SYLLABLE JYAEL
+C7ED;C7ED;110C 1164 11B0;C7ED;110C 1164 11B0; # (쟭; 쟭; 쟭; 쟭; 쟭; ) HANGUL SYLLABLE JYAELG
+C7EE;C7EE;110C 1164 11B1;C7EE;110C 1164 11B1; # (쟮; 쟮; 쟮; 쟮; 쟮; ) HANGUL SYLLABLE JYAELM
+C7EF;C7EF;110C 1164 11B2;C7EF;110C 1164 11B2; # (쟯; 쟯; 쟯; 쟯; 쟯; ) HANGUL SYLLABLE JYAELB
+C7F0;C7F0;110C 1164 11B3;C7F0;110C 1164 11B3; # (쟰; 쟰; 쟰; 쟰; 쟰; ) HANGUL SYLLABLE JYAELS
+C7F1;C7F1;110C 1164 11B4;C7F1;110C 1164 11B4; # (쟱; 쟱; 쟱; 쟱; 쟱; ) HANGUL SYLLABLE JYAELT
+C7F2;C7F2;110C 1164 11B5;C7F2;110C 1164 11B5; # (쟲; 쟲; 쟲; 쟲; 쟲; ) HANGUL SYLLABLE JYAELP
+C7F3;C7F3;110C 1164 11B6;C7F3;110C 1164 11B6; # (쟳; 쟳; 쟳; 쟳; 쟳; ) HANGUL SYLLABLE JYAELH
+C7F4;C7F4;110C 1164 11B7;C7F4;110C 1164 11B7; # (쟴; 쟴; 쟴; 쟴; 쟴; ) HANGUL SYLLABLE JYAEM
+C7F5;C7F5;110C 1164 11B8;C7F5;110C 1164 11B8; # (쟵; 쟵; 쟵; 쟵; 쟵; ) HANGUL SYLLABLE JYAEB
+C7F6;C7F6;110C 1164 11B9;C7F6;110C 1164 11B9; # (쟶; 쟶; 쟶; 쟶; 쟶; ) HANGUL SYLLABLE JYAEBS
+C7F7;C7F7;110C 1164 11BA;C7F7;110C 1164 11BA; # (쟷; 쟷; 쟷; 쟷; 쟷; ) HANGUL SYLLABLE JYAES
+C7F8;C7F8;110C 1164 11BB;C7F8;110C 1164 11BB; # (쟸; 쟸; 쟸; 쟸; 쟸; ) HANGUL SYLLABLE JYAESS
+C7F9;C7F9;110C 1164 11BC;C7F9;110C 1164 11BC; # (쟹; 쟹; 쟹; 쟹; 쟹; ) HANGUL SYLLABLE JYAENG
+C7FA;C7FA;110C 1164 11BD;C7FA;110C 1164 11BD; # (쟺; 쟺; 쟺; 쟺; 쟺; ) HANGUL SYLLABLE JYAEJ
+C7FB;C7FB;110C 1164 11BE;C7FB;110C 1164 11BE; # (쟻; 쟻; 쟻; 쟻; 쟻; ) HANGUL SYLLABLE JYAEC
+C7FC;C7FC;110C 1164 11BF;C7FC;110C 1164 11BF; # (쟼; 쟼; 쟼; 쟼; 쟼; ) HANGUL SYLLABLE JYAEK
+C7FD;C7FD;110C 1164 11C0;C7FD;110C 1164 11C0; # (쟽; 쟽; 쟽; 쟽; 쟽; ) HANGUL SYLLABLE JYAET
+C7FE;C7FE;110C 1164 11C1;C7FE;110C 1164 11C1; # (쟾; 쟾; 쟾; 쟾; 쟾; ) HANGUL SYLLABLE JYAEP
+C7FF;C7FF;110C 1164 11C2;C7FF;110C 1164 11C2; # (쟿; 쟿; 쟿; 쟿; 쟿; ) HANGUL SYLLABLE JYAEH
+C800;C800;110C 1165;C800;110C 1165; # (저; 저; 저; 저; 저; ) HANGUL SYLLABLE JEO
+C801;C801;110C 1165 11A8;C801;110C 1165 11A8; # (적; 적; 적; 적; 적; ) HANGUL SYLLABLE JEOG
+C802;C802;110C 1165 11A9;C802;110C 1165 11A9; # (젂; 젂; 젂; 젂; 젂; ) HANGUL SYLLABLE JEOGG
+C803;C803;110C 1165 11AA;C803;110C 1165 11AA; # (젃; 젃; 젃; 젃; 젃; ) HANGUL SYLLABLE JEOGS
+C804;C804;110C 1165 11AB;C804;110C 1165 11AB; # (전; 전; 전; 전; 전; ) HANGUL SYLLABLE JEON
+C805;C805;110C 1165 11AC;C805;110C 1165 11AC; # (젅; 젅; 젅; 젅; 젅; ) HANGUL SYLLABLE JEONJ
+C806;C806;110C 1165 11AD;C806;110C 1165 11AD; # (젆; 젆; 젆; 젆; 젆; ) HANGUL SYLLABLE JEONH
+C807;C807;110C 1165 11AE;C807;110C 1165 11AE; # (젇; 젇; 젇; 젇; 젇; ) HANGUL SYLLABLE JEOD
+C808;C808;110C 1165 11AF;C808;110C 1165 11AF; # (절; 절; 절; 절; 절; ) HANGUL SYLLABLE JEOL
+C809;C809;110C 1165 11B0;C809;110C 1165 11B0; # (젉; 젉; 젉; 젉; 젉; ) HANGUL SYLLABLE JEOLG
+C80A;C80A;110C 1165 11B1;C80A;110C 1165 11B1; # (젊; 젊; 젊; 젊; 젊; ) HANGUL SYLLABLE JEOLM
+C80B;C80B;110C 1165 11B2;C80B;110C 1165 11B2; # (젋; 젋; 젋; 젋; 젋; ) HANGUL SYLLABLE JEOLB
+C80C;C80C;110C 1165 11B3;C80C;110C 1165 11B3; # (젌; 젌; 젌; 젌; 젌; ) HANGUL SYLLABLE JEOLS
+C80D;C80D;110C 1165 11B4;C80D;110C 1165 11B4; # (젍; 젍; 젍; 젍; 젍; ) HANGUL SYLLABLE JEOLT
+C80E;C80E;110C 1165 11B5;C80E;110C 1165 11B5; # (젎; 젎; 젎; 젎; 젎; ) HANGUL SYLLABLE JEOLP
+C80F;C80F;110C 1165 11B6;C80F;110C 1165 11B6; # (젏; 젏; 젏; 젏; 젏; ) HANGUL SYLLABLE JEOLH
+C810;C810;110C 1165 11B7;C810;110C 1165 11B7; # (점; 점; 점; 점; 점; ) HANGUL SYLLABLE JEOM
+C811;C811;110C 1165 11B8;C811;110C 1165 11B8; # (접; 접; 접; 접; 접; ) HANGUL SYLLABLE JEOB
+C812;C812;110C 1165 11B9;C812;110C 1165 11B9; # (젒; 젒; 젒; 젒; 젒; ) HANGUL SYLLABLE JEOBS
+C813;C813;110C 1165 11BA;C813;110C 1165 11BA; # (젓; 젓; 젓; 젓; 젓; ) HANGUL SYLLABLE JEOS
+C814;C814;110C 1165 11BB;C814;110C 1165 11BB; # (젔; 젔; 젔; 젔; 젔; ) HANGUL SYLLABLE JEOSS
+C815;C815;110C 1165 11BC;C815;110C 1165 11BC; # (정; 정; 정; 정; 정; ) HANGUL SYLLABLE JEONG
+C816;C816;110C 1165 11BD;C816;110C 1165 11BD; # (젖; 젖; 젖; 젖; 젖; ) HANGUL SYLLABLE JEOJ
+C817;C817;110C 1165 11BE;C817;110C 1165 11BE; # (젗; 젗; 젗; 젗; 젗; ) HANGUL SYLLABLE JEOC
+C818;C818;110C 1165 11BF;C818;110C 1165 11BF; # (젘; 젘; 젘; 젘; 젘; ) HANGUL SYLLABLE JEOK
+C819;C819;110C 1165 11C0;C819;110C 1165 11C0; # (젙; 젙; 젙; 젙; 젙; ) HANGUL SYLLABLE JEOT
+C81A;C81A;110C 1165 11C1;C81A;110C 1165 11C1; # (젚; 젚; 젚; 젚; 젚; ) HANGUL SYLLABLE JEOP
+C81B;C81B;110C 1165 11C2;C81B;110C 1165 11C2; # (젛; 젛; 젛; 젛; 젛; ) HANGUL SYLLABLE JEOH
+C81C;C81C;110C 1166;C81C;110C 1166; # (제; 제; 제; 제; 제; ) HANGUL SYLLABLE JE
+C81D;C81D;110C 1166 11A8;C81D;110C 1166 11A8; # (젝; 젝; 젝; 젝; 젝; ) HANGUL SYLLABLE JEG
+C81E;C81E;110C 1166 11A9;C81E;110C 1166 11A9; # (젞; 젞; 젞; 젞; 젞; ) HANGUL SYLLABLE JEGG
+C81F;C81F;110C 1166 11AA;C81F;110C 1166 11AA; # (젟; 젟; 젟; 젟; 젟; ) HANGUL SYLLABLE JEGS
+C820;C820;110C 1166 11AB;C820;110C 1166 11AB; # (젠; 젠; 젠; 젠; 젠; ) HANGUL SYLLABLE JEN
+C821;C821;110C 1166 11AC;C821;110C 1166 11AC; # (젡; 젡; 젡; 젡; 젡; ) HANGUL SYLLABLE JENJ
+C822;C822;110C 1166 11AD;C822;110C 1166 11AD; # (젢; 젢; 젢; 젢; 젢; ) HANGUL SYLLABLE JENH
+C823;C823;110C 1166 11AE;C823;110C 1166 11AE; # (젣; 젣; 젣; 젣; 젣; ) HANGUL SYLLABLE JED
+C824;C824;110C 1166 11AF;C824;110C 1166 11AF; # (젤; 젤; 젤; 젤; 젤; ) HANGUL SYLLABLE JEL
+C825;C825;110C 1166 11B0;C825;110C 1166 11B0; # (젥; 젥; 젥; 젥; 젥; ) HANGUL SYLLABLE JELG
+C826;C826;110C 1166 11B1;C826;110C 1166 11B1; # (젦; 젦; 젦; 젦; 젦; ) HANGUL SYLLABLE JELM
+C827;C827;110C 1166 11B2;C827;110C 1166 11B2; # (젧; 젧; 젧; 젧; 젧; ) HANGUL SYLLABLE JELB
+C828;C828;110C 1166 11B3;C828;110C 1166 11B3; # (젨; 젨; 젨; 젨; 젨; ) HANGUL SYLLABLE JELS
+C829;C829;110C 1166 11B4;C829;110C 1166 11B4; # (젩; 젩; 젩; 젩; 젩; ) HANGUL SYLLABLE JELT
+C82A;C82A;110C 1166 11B5;C82A;110C 1166 11B5; # (젪; 젪; 젪; 젪; 젪; ) HANGUL SYLLABLE JELP
+C82B;C82B;110C 1166 11B6;C82B;110C 1166 11B6; # (젫; 젫; 젫; 젫; 젫; ) HANGUL SYLLABLE JELH
+C82C;C82C;110C 1166 11B7;C82C;110C 1166 11B7; # (젬; 젬; 젬; 젬; 젬; ) HANGUL SYLLABLE JEM
+C82D;C82D;110C 1166 11B8;C82D;110C 1166 11B8; # (젭; 젭; 젭; 젭; 젭; ) HANGUL SYLLABLE JEB
+C82E;C82E;110C 1166 11B9;C82E;110C 1166 11B9; # (젮; 젮; 젮; 젮; 젮; ) HANGUL SYLLABLE JEBS
+C82F;C82F;110C 1166 11BA;C82F;110C 1166 11BA; # (젯; 젯; 젯; 젯; 젯; ) HANGUL SYLLABLE JES
+C830;C830;110C 1166 11BB;C830;110C 1166 11BB; # (젰; 젰; 젰; 젰; 젰; ) HANGUL SYLLABLE JESS
+C831;C831;110C 1166 11BC;C831;110C 1166 11BC; # (젱; 젱; 젱; 젱; 젱; ) HANGUL SYLLABLE JENG
+C832;C832;110C 1166 11BD;C832;110C 1166 11BD; # (젲; 젲; 젲; 젲; 젲; ) HANGUL SYLLABLE JEJ
+C833;C833;110C 1166 11BE;C833;110C 1166 11BE; # (젳; 젳; 젳; 젳; 젳; ) HANGUL SYLLABLE JEC
+C834;C834;110C 1166 11BF;C834;110C 1166 11BF; # (젴; 젴; 젴; 젴; 젴; ) HANGUL SYLLABLE JEK
+C835;C835;110C 1166 11C0;C835;110C 1166 11C0; # (젵; 젵; 젵; 젵; 젵; ) HANGUL SYLLABLE JET
+C836;C836;110C 1166 11C1;C836;110C 1166 11C1; # (젶; 젶; 젶; 젶; 젶; ) HANGUL SYLLABLE JEP
+C837;C837;110C 1166 11C2;C837;110C 1166 11C2; # (젷; 젷; 젷; 젷; 젷; ) HANGUL SYLLABLE JEH
+C838;C838;110C 1167;C838;110C 1167; # (져; 져; 져; 져; 져; ) HANGUL SYLLABLE JYEO
+C839;C839;110C 1167 11A8;C839;110C 1167 11A8; # (젹; 젹; 젹; 젹; 젹; ) HANGUL SYLLABLE JYEOG
+C83A;C83A;110C 1167 11A9;C83A;110C 1167 11A9; # (젺; 젺; 젺; 젺; 젺; ) HANGUL SYLLABLE JYEOGG
+C83B;C83B;110C 1167 11AA;C83B;110C 1167 11AA; # (젻; 젻; 젻; 젻; 젻; ) HANGUL SYLLABLE JYEOGS
+C83C;C83C;110C 1167 11AB;C83C;110C 1167 11AB; # (젼; 젼; 젼; 젼; 젼; ) HANGUL SYLLABLE JYEON
+C83D;C83D;110C 1167 11AC;C83D;110C 1167 11AC; # (젽; 젽; 젽; 젽; 젽; ) HANGUL SYLLABLE JYEONJ
+C83E;C83E;110C 1167 11AD;C83E;110C 1167 11AD; # (젾; 젾; 젾; 젾; 젾; ) HANGUL SYLLABLE JYEONH
+C83F;C83F;110C 1167 11AE;C83F;110C 1167 11AE; # (젿; 젿; 젿; 젿; 젿; ) HANGUL SYLLABLE JYEOD
+C840;C840;110C 1167 11AF;C840;110C 1167 11AF; # (졀; 졀; 졀; 졀; 졀; ) HANGUL SYLLABLE JYEOL
+C841;C841;110C 1167 11B0;C841;110C 1167 11B0; # (졁; 졁; 졁; 졁; 졁; ) HANGUL SYLLABLE JYEOLG
+C842;C842;110C 1167 11B1;C842;110C 1167 11B1; # (졂; 졂; 졂; 졂; 졂; ) HANGUL SYLLABLE JYEOLM
+C843;C843;110C 1167 11B2;C843;110C 1167 11B2; # (졃; 졃; 졃; 졃; 졃; ) HANGUL SYLLABLE JYEOLB
+C844;C844;110C 1167 11B3;C844;110C 1167 11B3; # (졄; 졄; 졄; 졄; 졄; ) HANGUL SYLLABLE JYEOLS
+C845;C845;110C 1167 11B4;C845;110C 1167 11B4; # (졅; 졅; 졅; 졅; 졅; ) HANGUL SYLLABLE JYEOLT
+C846;C846;110C 1167 11B5;C846;110C 1167 11B5; # (졆; 졆; 졆; 졆; 졆; ) HANGUL SYLLABLE JYEOLP
+C847;C847;110C 1167 11B6;C847;110C 1167 11B6; # (졇; 졇; 졇; 졇; 졇; ) HANGUL SYLLABLE JYEOLH
+C848;C848;110C 1167 11B7;C848;110C 1167 11B7; # (졈; 졈; 졈; 졈; 졈; ) HANGUL SYLLABLE JYEOM
+C849;C849;110C 1167 11B8;C849;110C 1167 11B8; # (졉; 졉; 졉; 졉; 졉; ) HANGUL SYLLABLE JYEOB
+C84A;C84A;110C 1167 11B9;C84A;110C 1167 11B9; # (졊; 졊; 졊; 졊; 졊; ) HANGUL SYLLABLE JYEOBS
+C84B;C84B;110C 1167 11BA;C84B;110C 1167 11BA; # (졋; 졋; 졋; 졋; 졋; ) HANGUL SYLLABLE JYEOS
+C84C;C84C;110C 1167 11BB;C84C;110C 1167 11BB; # (졌; 졌; 졌; 졌; 졌; ) HANGUL SYLLABLE JYEOSS
+C84D;C84D;110C 1167 11BC;C84D;110C 1167 11BC; # (졍; 졍; 졍; 졍; 졍; ) HANGUL SYLLABLE JYEONG
+C84E;C84E;110C 1167 11BD;C84E;110C 1167 11BD; # (졎; 졎; 졎; 졎; 졎; ) HANGUL SYLLABLE JYEOJ
+C84F;C84F;110C 1167 11BE;C84F;110C 1167 11BE; # (졏; 졏; 졏; 졏; 졏; ) HANGUL SYLLABLE JYEOC
+C850;C850;110C 1167 11BF;C850;110C 1167 11BF; # (졐; 졐; 졐; 졐; 졐; ) HANGUL SYLLABLE JYEOK
+C851;C851;110C 1167 11C0;C851;110C 1167 11C0; # (졑; 졑; 졑; 졑; 졑; ) HANGUL SYLLABLE JYEOT
+C852;C852;110C 1167 11C1;C852;110C 1167 11C1; # (졒; 졒; 졒; 졒; 졒; ) HANGUL SYLLABLE JYEOP
+C853;C853;110C 1167 11C2;C853;110C 1167 11C2; # (졓; 졓; 졓; 졓; 졓; ) HANGUL SYLLABLE JYEOH
+C854;C854;110C 1168;C854;110C 1168; # (졔; 졔; 졔; 졔; 졔; ) HANGUL SYLLABLE JYE
+C855;C855;110C 1168 11A8;C855;110C 1168 11A8; # (졕; 졕; 졕; 졕; 졕; ) HANGUL SYLLABLE JYEG
+C856;C856;110C 1168 11A9;C856;110C 1168 11A9; # (졖; 졖; 졖; 졖; 졖; ) HANGUL SYLLABLE JYEGG
+C857;C857;110C 1168 11AA;C857;110C 1168 11AA; # (졗; 졗; 졗; 졗; 졗; ) HANGUL SYLLABLE JYEGS
+C858;C858;110C 1168 11AB;C858;110C 1168 11AB; # (졘; 졘; 졘; 졘; 졘; ) HANGUL SYLLABLE JYEN
+C859;C859;110C 1168 11AC;C859;110C 1168 11AC; # (졙; 졙; 졙; 졙; 졙; ) HANGUL SYLLABLE JYENJ
+C85A;C85A;110C 1168 11AD;C85A;110C 1168 11AD; # (졚; 졚; 졚; 졚; 졚; ) HANGUL SYLLABLE JYENH
+C85B;C85B;110C 1168 11AE;C85B;110C 1168 11AE; # (졛; 졛; 졛; 졛; 졛; ) HANGUL SYLLABLE JYED
+C85C;C85C;110C 1168 11AF;C85C;110C 1168 11AF; # (졜; 졜; 졜; 졜; 졜; ) HANGUL SYLLABLE JYEL
+C85D;C85D;110C 1168 11B0;C85D;110C 1168 11B0; # (졝; 졝; 졝; 졝; 졝; ) HANGUL SYLLABLE JYELG
+C85E;C85E;110C 1168 11B1;C85E;110C 1168 11B1; # (졞; 졞; 졞; 졞; 졞; ) HANGUL SYLLABLE JYELM
+C85F;C85F;110C 1168 11B2;C85F;110C 1168 11B2; # (졟; 졟; 졟; 졟; 졟; ) HANGUL SYLLABLE JYELB
+C860;C860;110C 1168 11B3;C860;110C 1168 11B3; # (졠; 졠; 졠; 졠; 졠; ) HANGUL SYLLABLE JYELS
+C861;C861;110C 1168 11B4;C861;110C 1168 11B4; # (졡; 졡; 졡; 졡; 졡; ) HANGUL SYLLABLE JYELT
+C862;C862;110C 1168 11B5;C862;110C 1168 11B5; # (졢; 졢; 졢; 졢; 졢; ) HANGUL SYLLABLE JYELP
+C863;C863;110C 1168 11B6;C863;110C 1168 11B6; # (졣; 졣; 졣; 졣; 졣; ) HANGUL SYLLABLE JYELH
+C864;C864;110C 1168 11B7;C864;110C 1168 11B7; # (졤; 졤; 졤; 졤; 졤; ) HANGUL SYLLABLE JYEM
+C865;C865;110C 1168 11B8;C865;110C 1168 11B8; # (졥; 졥; 졥; 졥; 졥; ) HANGUL SYLLABLE JYEB
+C866;C866;110C 1168 11B9;C866;110C 1168 11B9; # (졦; 졦; 졦; 졦; 졦; ) HANGUL SYLLABLE JYEBS
+C867;C867;110C 1168 11BA;C867;110C 1168 11BA; # (졧; 졧; 졧; 졧; 졧; ) HANGUL SYLLABLE JYES
+C868;C868;110C 1168 11BB;C868;110C 1168 11BB; # (졨; 졨; 졨; 졨; 졨; ) HANGUL SYLLABLE JYESS
+C869;C869;110C 1168 11BC;C869;110C 1168 11BC; # (졩; 졩; 졩; 졩; 졩; ) HANGUL SYLLABLE JYENG
+C86A;C86A;110C 1168 11BD;C86A;110C 1168 11BD; # (졪; 졪; 졪; 졪; 졪; ) HANGUL SYLLABLE JYEJ
+C86B;C86B;110C 1168 11BE;C86B;110C 1168 11BE; # (졫; 졫; 졫; 졫; 졫; ) HANGUL SYLLABLE JYEC
+C86C;C86C;110C 1168 11BF;C86C;110C 1168 11BF; # (졬; 졬; 졬; 졬; 졬; ) HANGUL SYLLABLE JYEK
+C86D;C86D;110C 1168 11C0;C86D;110C 1168 11C0; # (졭; 졭; 졭; 졭; 졭; ) HANGUL SYLLABLE JYET
+C86E;C86E;110C 1168 11C1;C86E;110C 1168 11C1; # (졮; 졮; 졮; 졮; 졮; ) HANGUL SYLLABLE JYEP
+C86F;C86F;110C 1168 11C2;C86F;110C 1168 11C2; # (졯; 졯; 졯; 졯; 졯; ) HANGUL SYLLABLE JYEH
+C870;C870;110C 1169;C870;110C 1169; # (조; 조; 조; 조; 조; ) HANGUL SYLLABLE JO
+C871;C871;110C 1169 11A8;C871;110C 1169 11A8; # (족; 족; 족; 족; 족; ) HANGUL SYLLABLE JOG
+C872;C872;110C 1169 11A9;C872;110C 1169 11A9; # (졲; 졲; 졲; 졲; 졲; ) HANGUL SYLLABLE JOGG
+C873;C873;110C 1169 11AA;C873;110C 1169 11AA; # (졳; 졳; 졳; 졳; 졳; ) HANGUL SYLLABLE JOGS
+C874;C874;110C 1169 11AB;C874;110C 1169 11AB; # (존; 존; 존; 존; 존; ) HANGUL SYLLABLE JON
+C875;C875;110C 1169 11AC;C875;110C 1169 11AC; # (졵; 졵; 졵; 졵; 졵; ) HANGUL SYLLABLE JONJ
+C876;C876;110C 1169 11AD;C876;110C 1169 11AD; # (졶; 졶; 졶; 졶; 졶; ) HANGUL SYLLABLE JONH
+C877;C877;110C 1169 11AE;C877;110C 1169 11AE; # (졷; 졷; 졷; 졷; 졷; ) HANGUL SYLLABLE JOD
+C878;C878;110C 1169 11AF;C878;110C 1169 11AF; # (졸; 졸; 졸; 졸; 졸; ) HANGUL SYLLABLE JOL
+C879;C879;110C 1169 11B0;C879;110C 1169 11B0; # (졹; 졹; 졹; 졹; 졹; ) HANGUL SYLLABLE JOLG
+C87A;C87A;110C 1169 11B1;C87A;110C 1169 11B1; # (졺; 졺; 졺; 졺; 졺; ) HANGUL SYLLABLE JOLM
+C87B;C87B;110C 1169 11B2;C87B;110C 1169 11B2; # (졻; 졻; 졻; 졻; 졻; ) HANGUL SYLLABLE JOLB
+C87C;C87C;110C 1169 11B3;C87C;110C 1169 11B3; # (졼; 졼; 졼; 졼; 졼; ) HANGUL SYLLABLE JOLS
+C87D;C87D;110C 1169 11B4;C87D;110C 1169 11B4; # (졽; 졽; 졽; 졽; 졽; ) HANGUL SYLLABLE JOLT
+C87E;C87E;110C 1169 11B5;C87E;110C 1169 11B5; # (졾; 졾; 졾; 졾; 졾; ) HANGUL SYLLABLE JOLP
+C87F;C87F;110C 1169 11B6;C87F;110C 1169 11B6; # (졿; 졿; 졿; 졿; 졿; ) HANGUL SYLLABLE JOLH
+C880;C880;110C 1169 11B7;C880;110C 1169 11B7; # (좀; 좀; 좀; 좀; 좀; ) HANGUL SYLLABLE JOM
+C881;C881;110C 1169 11B8;C881;110C 1169 11B8; # (좁; 좁; 좁; 좁; 좁; ) HANGUL SYLLABLE JOB
+C882;C882;110C 1169 11B9;C882;110C 1169 11B9; # (좂; 좂; 좂; 좂; 좂; ) HANGUL SYLLABLE JOBS
+C883;C883;110C 1169 11BA;C883;110C 1169 11BA; # (좃; 좃; 좃; 좃; 좃; ) HANGUL SYLLABLE JOS
+C884;C884;110C 1169 11BB;C884;110C 1169 11BB; # (좄; 좄; 좄; 좄; 좄; ) HANGUL SYLLABLE JOSS
+C885;C885;110C 1169 11BC;C885;110C 1169 11BC; # (종; 종; 종; 종; 종; ) HANGUL SYLLABLE JONG
+C886;C886;110C 1169 11BD;C886;110C 1169 11BD; # (좆; 좆; 좆; 좆; 좆; ) HANGUL SYLLABLE JOJ
+C887;C887;110C 1169 11BE;C887;110C 1169 11BE; # (좇; 좇; 좇; 좇; 좇; ) HANGUL SYLLABLE JOC
+C888;C888;110C 1169 11BF;C888;110C 1169 11BF; # (좈; 좈; 좈; 좈; 좈; ) HANGUL SYLLABLE JOK
+C889;C889;110C 1169 11C0;C889;110C 1169 11C0; # (좉; 좉; 좉; 좉; 좉; ) HANGUL SYLLABLE JOT
+C88A;C88A;110C 1169 11C1;C88A;110C 1169 11C1; # (좊; 좊; 좊; 좊; 좊; ) HANGUL SYLLABLE JOP
+C88B;C88B;110C 1169 11C2;C88B;110C 1169 11C2; # (좋; 좋; 좋; 좋; 좋; ) HANGUL SYLLABLE JOH
+C88C;C88C;110C 116A;C88C;110C 116A; # (좌; 좌; 좌; 좌; 좌; ) HANGUL SYLLABLE JWA
+C88D;C88D;110C 116A 11A8;C88D;110C 116A 11A8; # (좍; 좍; 좍; 좍; 좍; ) HANGUL SYLLABLE JWAG
+C88E;C88E;110C 116A 11A9;C88E;110C 116A 11A9; # (좎; 좎; 좎; 좎; 좎; ) HANGUL SYLLABLE JWAGG
+C88F;C88F;110C 116A 11AA;C88F;110C 116A 11AA; # (좏; 좏; 좏; 좏; 좏; ) HANGUL SYLLABLE JWAGS
+C890;C890;110C 116A 11AB;C890;110C 116A 11AB; # (좐; 좐; 좐; 좐; 좐; ) HANGUL SYLLABLE JWAN
+C891;C891;110C 116A 11AC;C891;110C 116A 11AC; # (좑; 좑; 좑; 좑; 좑; ) HANGUL SYLLABLE JWANJ
+C892;C892;110C 116A 11AD;C892;110C 116A 11AD; # (좒; 좒; 좒; 좒; 좒; ) HANGUL SYLLABLE JWANH
+C893;C893;110C 116A 11AE;C893;110C 116A 11AE; # (좓; 좓; 좓; 좓; 좓; ) HANGUL SYLLABLE JWAD
+C894;C894;110C 116A 11AF;C894;110C 116A 11AF; # (좔; 좔; 좔; 좔; 좔; ) HANGUL SYLLABLE JWAL
+C895;C895;110C 116A 11B0;C895;110C 116A 11B0; # (좕; 좕; 좕; 좕; 좕; ) HANGUL SYLLABLE JWALG
+C896;C896;110C 116A 11B1;C896;110C 116A 11B1; # (좖; 좖; 좖; 좖; 좖; ) HANGUL SYLLABLE JWALM
+C897;C897;110C 116A 11B2;C897;110C 116A 11B2; # (좗; 좗; 좗; 좗; 좗; ) HANGUL SYLLABLE JWALB
+C898;C898;110C 116A 11B3;C898;110C 116A 11B3; # (좘; 좘; 좘; 좘; 좘; ) HANGUL SYLLABLE JWALS
+C899;C899;110C 116A 11B4;C899;110C 116A 11B4; # (좙; 좙; 좙; 좙; 좙; ) HANGUL SYLLABLE JWALT
+C89A;C89A;110C 116A 11B5;C89A;110C 116A 11B5; # (좚; 좚; 좚; 좚; 좚; ) HANGUL SYLLABLE JWALP
+C89B;C89B;110C 116A 11B6;C89B;110C 116A 11B6; # (좛; 좛; 좛; 좛; 좛; ) HANGUL SYLLABLE JWALH
+C89C;C89C;110C 116A 11B7;C89C;110C 116A 11B7; # (좜; 좜; 좜; 좜; 좜; ) HANGUL SYLLABLE JWAM
+C89D;C89D;110C 116A 11B8;C89D;110C 116A 11B8; # (좝; 좝; 좝; 좝; 좝; ) HANGUL SYLLABLE JWAB
+C89E;C89E;110C 116A 11B9;C89E;110C 116A 11B9; # (좞; 좞; 좞; 좞; 좞; ) HANGUL SYLLABLE JWABS
+C89F;C89F;110C 116A 11BA;C89F;110C 116A 11BA; # (좟; 좟; 좟; 좟; 좟; ) HANGUL SYLLABLE JWAS
+C8A0;C8A0;110C 116A 11BB;C8A0;110C 116A 11BB; # (좠; 좠; 좠; 좠; 좠; ) HANGUL SYLLABLE JWASS
+C8A1;C8A1;110C 116A 11BC;C8A1;110C 116A 11BC; # (좡; 좡; 좡; 좡; 좡; ) HANGUL SYLLABLE JWANG
+C8A2;C8A2;110C 116A 11BD;C8A2;110C 116A 11BD; # (좢; 좢; 좢; 좢; 좢; ) HANGUL SYLLABLE JWAJ
+C8A3;C8A3;110C 116A 11BE;C8A3;110C 116A 11BE; # (좣; 좣; 좣; 좣; 좣; ) HANGUL SYLLABLE JWAC
+C8A4;C8A4;110C 116A 11BF;C8A4;110C 116A 11BF; # (좤; 좤; 좤; 좤; 좤; ) HANGUL SYLLABLE JWAK
+C8A5;C8A5;110C 116A 11C0;C8A5;110C 116A 11C0; # (좥; 좥; 좥; 좥; 좥; ) HANGUL SYLLABLE JWAT
+C8A6;C8A6;110C 116A 11C1;C8A6;110C 116A 11C1; # (좦; 좦; 좦; 좦; 좦; ) HANGUL SYLLABLE JWAP
+C8A7;C8A7;110C 116A 11C2;C8A7;110C 116A 11C2; # (좧; 좧; 좧; 좧; 좧; ) HANGUL SYLLABLE JWAH
+C8A8;C8A8;110C 116B;C8A8;110C 116B; # (좨; 좨; 좨; 좨; 좨; ) HANGUL SYLLABLE JWAE
+C8A9;C8A9;110C 116B 11A8;C8A9;110C 116B 11A8; # (좩; 좩; 좩; 좩; 좩; ) HANGUL SYLLABLE JWAEG
+C8AA;C8AA;110C 116B 11A9;C8AA;110C 116B 11A9; # (좪; 좪; 좪; 좪; 좪; ) HANGUL SYLLABLE JWAEGG
+C8AB;C8AB;110C 116B 11AA;C8AB;110C 116B 11AA; # (좫; 좫; 좫; 좫; 좫; ) HANGUL SYLLABLE JWAEGS
+C8AC;C8AC;110C 116B 11AB;C8AC;110C 116B 11AB; # (좬; 좬; 좬; 좬; 좬; ) HANGUL SYLLABLE JWAEN
+C8AD;C8AD;110C 116B 11AC;C8AD;110C 116B 11AC; # (좭; 좭; 좭; 좭; 좭; ) HANGUL SYLLABLE JWAENJ
+C8AE;C8AE;110C 116B 11AD;C8AE;110C 116B 11AD; # (좮; 좮; 좮; 좮; 좮; ) HANGUL SYLLABLE JWAENH
+C8AF;C8AF;110C 116B 11AE;C8AF;110C 116B 11AE; # (좯; 좯; 좯; 좯; 좯; ) HANGUL SYLLABLE JWAED
+C8B0;C8B0;110C 116B 11AF;C8B0;110C 116B 11AF; # (좰; 좰; 좰; 좰; 좰; ) HANGUL SYLLABLE JWAEL
+C8B1;C8B1;110C 116B 11B0;C8B1;110C 116B 11B0; # (좱; 좱; 좱; 좱; 좱; ) HANGUL SYLLABLE JWAELG
+C8B2;C8B2;110C 116B 11B1;C8B2;110C 116B 11B1; # (좲; 좲; 좲; 좲; 좲; ) HANGUL SYLLABLE JWAELM
+C8B3;C8B3;110C 116B 11B2;C8B3;110C 116B 11B2; # (좳; 좳; 좳; 좳; 좳; ) HANGUL SYLLABLE JWAELB
+C8B4;C8B4;110C 116B 11B3;C8B4;110C 116B 11B3; # (좴; 좴; 좴; 좴; 좴; ) HANGUL SYLLABLE JWAELS
+C8B5;C8B5;110C 116B 11B4;C8B5;110C 116B 11B4; # (좵; 좵; 좵; 좵; 좵; ) HANGUL SYLLABLE JWAELT
+C8B6;C8B6;110C 116B 11B5;C8B6;110C 116B 11B5; # (좶; 좶; 좶; 좶; 좶; ) HANGUL SYLLABLE JWAELP
+C8B7;C8B7;110C 116B 11B6;C8B7;110C 116B 11B6; # (좷; 좷; 좷; 좷; 좷; ) HANGUL SYLLABLE JWAELH
+C8B8;C8B8;110C 116B 11B7;C8B8;110C 116B 11B7; # (좸; 좸; 좸; 좸; 좸; ) HANGUL SYLLABLE JWAEM
+C8B9;C8B9;110C 116B 11B8;C8B9;110C 116B 11B8; # (좹; 좹; 좹; 좹; 좹; ) HANGUL SYLLABLE JWAEB
+C8BA;C8BA;110C 116B 11B9;C8BA;110C 116B 11B9; # (좺; 좺; 좺; 좺; 좺; ) HANGUL SYLLABLE JWAEBS
+C8BB;C8BB;110C 116B 11BA;C8BB;110C 116B 11BA; # (좻; 좻; 좻; 좻; 좻; ) HANGUL SYLLABLE JWAES
+C8BC;C8BC;110C 116B 11BB;C8BC;110C 116B 11BB; # (좼; 좼; 좼; 좼; 좼; ) HANGUL SYLLABLE JWAESS
+C8BD;C8BD;110C 116B 11BC;C8BD;110C 116B 11BC; # (좽; 좽; 좽; 좽; 좽; ) HANGUL SYLLABLE JWAENG
+C8BE;C8BE;110C 116B 11BD;C8BE;110C 116B 11BD; # (좾; 좾; 좾; 좾; 좾; ) HANGUL SYLLABLE JWAEJ
+C8BF;C8BF;110C 116B 11BE;C8BF;110C 116B 11BE; # (좿; 좿; 좿; 좿; 좿; ) HANGUL SYLLABLE JWAEC
+C8C0;C8C0;110C 116B 11BF;C8C0;110C 116B 11BF; # (죀; 죀; 죀; 죀; 죀; ) HANGUL SYLLABLE JWAEK
+C8C1;C8C1;110C 116B 11C0;C8C1;110C 116B 11C0; # (죁; 죁; 죁; 죁; 죁; ) HANGUL SYLLABLE JWAET
+C8C2;C8C2;110C 116B 11C1;C8C2;110C 116B 11C1; # (죂; 죂; 죂; 죂; 죂; ) HANGUL SYLLABLE JWAEP
+C8C3;C8C3;110C 116B 11C2;C8C3;110C 116B 11C2; # (죃; 죃; 죃; 죃; 죃; ) HANGUL SYLLABLE JWAEH
+C8C4;C8C4;110C 116C;C8C4;110C 116C; # (죄; 죄; 죄; 죄; 죄; ) HANGUL SYLLABLE JOE
+C8C5;C8C5;110C 116C 11A8;C8C5;110C 116C 11A8; # (죅; 죅; 죅; 죅; 죅; ) HANGUL SYLLABLE JOEG
+C8C6;C8C6;110C 116C 11A9;C8C6;110C 116C 11A9; # (죆; 죆; 죆; 죆; 죆; ) HANGUL SYLLABLE JOEGG
+C8C7;C8C7;110C 116C 11AA;C8C7;110C 116C 11AA; # (죇; 죇; 죇; 죇; 죇; ) HANGUL SYLLABLE JOEGS
+C8C8;C8C8;110C 116C 11AB;C8C8;110C 116C 11AB; # (죈; 죈; 죈; 죈; 죈; ) HANGUL SYLLABLE JOEN
+C8C9;C8C9;110C 116C 11AC;C8C9;110C 116C 11AC; # (죉; 죉; 죉; 죉; 죉; ) HANGUL SYLLABLE JOENJ
+C8CA;C8CA;110C 116C 11AD;C8CA;110C 116C 11AD; # (죊; 죊; 죊; 죊; 죊; ) HANGUL SYLLABLE JOENH
+C8CB;C8CB;110C 116C 11AE;C8CB;110C 116C 11AE; # (죋; 죋; 죋; 죋; 죋; ) HANGUL SYLLABLE JOED
+C8CC;C8CC;110C 116C 11AF;C8CC;110C 116C 11AF; # (죌; 죌; 죌; 죌; 죌; ) HANGUL SYLLABLE JOEL
+C8CD;C8CD;110C 116C 11B0;C8CD;110C 116C 11B0; # (죍; 죍; 죍; 죍; 죍; ) HANGUL SYLLABLE JOELG
+C8CE;C8CE;110C 116C 11B1;C8CE;110C 116C 11B1; # (죎; 죎; 죎; 죎; 죎; ) HANGUL SYLLABLE JOELM
+C8CF;C8CF;110C 116C 11B2;C8CF;110C 116C 11B2; # (죏; 죏; 죏; 죏; 죏; ) HANGUL SYLLABLE JOELB
+C8D0;C8D0;110C 116C 11B3;C8D0;110C 116C 11B3; # (죐; 죐; 죐; 죐; 죐; ) HANGUL SYLLABLE JOELS
+C8D1;C8D1;110C 116C 11B4;C8D1;110C 116C 11B4; # (죑; 죑; 죑; 죑; 죑; ) HANGUL SYLLABLE JOELT
+C8D2;C8D2;110C 116C 11B5;C8D2;110C 116C 11B5; # (죒; 죒; 죒; 죒; 죒; ) HANGUL SYLLABLE JOELP
+C8D3;C8D3;110C 116C 11B6;C8D3;110C 116C 11B6; # (죓; 죓; 죓; 죓; 죓; ) HANGUL SYLLABLE JOELH
+C8D4;C8D4;110C 116C 11B7;C8D4;110C 116C 11B7; # (죔; 죔; 죔; 죔; 죔; ) HANGUL SYLLABLE JOEM
+C8D5;C8D5;110C 116C 11B8;C8D5;110C 116C 11B8; # (죕; 죕; 죕; 죕; 죕; ) HANGUL SYLLABLE JOEB
+C8D6;C8D6;110C 116C 11B9;C8D6;110C 116C 11B9; # (죖; 죖; 죖; 죖; 죖; ) HANGUL SYLLABLE JOEBS
+C8D7;C8D7;110C 116C 11BA;C8D7;110C 116C 11BA; # (죗; 죗; 죗; 죗; 죗; ) HANGUL SYLLABLE JOES
+C8D8;C8D8;110C 116C 11BB;C8D8;110C 116C 11BB; # (죘; 죘; 죘; 죘; 죘; ) HANGUL SYLLABLE JOESS
+C8D9;C8D9;110C 116C 11BC;C8D9;110C 116C 11BC; # (죙; 죙; 죙; 죙; 죙; ) HANGUL SYLLABLE JOENG
+C8DA;C8DA;110C 116C 11BD;C8DA;110C 116C 11BD; # (죚; 죚; 죚; 죚; 죚; ) HANGUL SYLLABLE JOEJ
+C8DB;C8DB;110C 116C 11BE;C8DB;110C 116C 11BE; # (죛; 죛; 죛; 죛; 죛; ) HANGUL SYLLABLE JOEC
+C8DC;C8DC;110C 116C 11BF;C8DC;110C 116C 11BF; # (죜; 죜; 죜; 죜; 죜; ) HANGUL SYLLABLE JOEK
+C8DD;C8DD;110C 116C 11C0;C8DD;110C 116C 11C0; # (죝; 죝; 죝; 죝; 죝; ) HANGUL SYLLABLE JOET
+C8DE;C8DE;110C 116C 11C1;C8DE;110C 116C 11C1; # (죞; 죞; 죞; 죞; 죞; ) HANGUL SYLLABLE JOEP
+C8DF;C8DF;110C 116C 11C2;C8DF;110C 116C 11C2; # (죟; 죟; 죟; 죟; 죟; ) HANGUL SYLLABLE JOEH
+C8E0;C8E0;110C 116D;C8E0;110C 116D; # (죠; 죠; 죠; 죠; 죠; ) HANGUL SYLLABLE JYO
+C8E1;C8E1;110C 116D 11A8;C8E1;110C 116D 11A8; # (죡; 죡; 죡; 죡; 죡; ) HANGUL SYLLABLE JYOG
+C8E2;C8E2;110C 116D 11A9;C8E2;110C 116D 11A9; # (죢; 죢; 죢; 죢; 죢; ) HANGUL SYLLABLE JYOGG
+C8E3;C8E3;110C 116D 11AA;C8E3;110C 116D 11AA; # (죣; 죣; 죣; 죣; 죣; ) HANGUL SYLLABLE JYOGS
+C8E4;C8E4;110C 116D 11AB;C8E4;110C 116D 11AB; # (죤; 죤; 죤; 죤; 죤; ) HANGUL SYLLABLE JYON
+C8E5;C8E5;110C 116D 11AC;C8E5;110C 116D 11AC; # (죥; 죥; 죥; 죥; 죥; ) HANGUL SYLLABLE JYONJ
+C8E6;C8E6;110C 116D 11AD;C8E6;110C 116D 11AD; # (죦; 죦; 죦; 죦; 죦; ) HANGUL SYLLABLE JYONH
+C8E7;C8E7;110C 116D 11AE;C8E7;110C 116D 11AE; # (죧; 죧; 죧; 죧; 죧; ) HANGUL SYLLABLE JYOD
+C8E8;C8E8;110C 116D 11AF;C8E8;110C 116D 11AF; # (죨; 죨; 죨; 죨; 죨; ) HANGUL SYLLABLE JYOL
+C8E9;C8E9;110C 116D 11B0;C8E9;110C 116D 11B0; # (죩; 죩; 죩; 죩; 죩; ) HANGUL SYLLABLE JYOLG
+C8EA;C8EA;110C 116D 11B1;C8EA;110C 116D 11B1; # (죪; 죪; 죪; 죪; 죪; ) HANGUL SYLLABLE JYOLM
+C8EB;C8EB;110C 116D 11B2;C8EB;110C 116D 11B2; # (죫; 죫; 죫; 죫; 죫; ) HANGUL SYLLABLE JYOLB
+C8EC;C8EC;110C 116D 11B3;C8EC;110C 116D 11B3; # (죬; 죬; 죬; 죬; 죬; ) HANGUL SYLLABLE JYOLS
+C8ED;C8ED;110C 116D 11B4;C8ED;110C 116D 11B4; # (죭; 죭; 죭; 죭; 죭; ) HANGUL SYLLABLE JYOLT
+C8EE;C8EE;110C 116D 11B5;C8EE;110C 116D 11B5; # (죮; 죮; 죮; 죮; 죮; ) HANGUL SYLLABLE JYOLP
+C8EF;C8EF;110C 116D 11B6;C8EF;110C 116D 11B6; # (죯; 죯; 죯; 죯; 죯; ) HANGUL SYLLABLE JYOLH
+C8F0;C8F0;110C 116D 11B7;C8F0;110C 116D 11B7; # (죰; 죰; 죰; 죰; 죰; ) HANGUL SYLLABLE JYOM
+C8F1;C8F1;110C 116D 11B8;C8F1;110C 116D 11B8; # (죱; 죱; 죱; 죱; 죱; ) HANGUL SYLLABLE JYOB
+C8F2;C8F2;110C 116D 11B9;C8F2;110C 116D 11B9; # (죲; 죲; 죲; 죲; 죲; ) HANGUL SYLLABLE JYOBS
+C8F3;C8F3;110C 116D 11BA;C8F3;110C 116D 11BA; # (죳; 죳; 죳; 죳; 죳; ) HANGUL SYLLABLE JYOS
+C8F4;C8F4;110C 116D 11BB;C8F4;110C 116D 11BB; # (죴; 죴; 죴; 죴; 죴; ) HANGUL SYLLABLE JYOSS
+C8F5;C8F5;110C 116D 11BC;C8F5;110C 116D 11BC; # (죵; 죵; 죵; 죵; 죵; ) HANGUL SYLLABLE JYONG
+C8F6;C8F6;110C 116D 11BD;C8F6;110C 116D 11BD; # (죶; 죶; 죶; 죶; 죶; ) HANGUL SYLLABLE JYOJ
+C8F7;C8F7;110C 116D 11BE;C8F7;110C 116D 11BE; # (죷; 죷; 죷; 죷; 죷; ) HANGUL SYLLABLE JYOC
+C8F8;C8F8;110C 116D 11BF;C8F8;110C 116D 11BF; # (죸; 죸; 죸; 죸; 죸; ) HANGUL SYLLABLE JYOK
+C8F9;C8F9;110C 116D 11C0;C8F9;110C 116D 11C0; # (죹; 죹; 죹; 죹; 죹; ) HANGUL SYLLABLE JYOT
+C8FA;C8FA;110C 116D 11C1;C8FA;110C 116D 11C1; # (죺; 죺; 죺; 죺; 죺; ) HANGUL SYLLABLE JYOP
+C8FB;C8FB;110C 116D 11C2;C8FB;110C 116D 11C2; # (죻; 죻; 죻; 죻; 죻; ) HANGUL SYLLABLE JYOH
+C8FC;C8FC;110C 116E;C8FC;110C 116E; # (주; 주; 주; 주; 주; ) HANGUL SYLLABLE JU
+C8FD;C8FD;110C 116E 11A8;C8FD;110C 116E 11A8; # (죽; 죽; 죽; 죽; 죽; ) HANGUL SYLLABLE JUG
+C8FE;C8FE;110C 116E 11A9;C8FE;110C 116E 11A9; # (죾; 죾; 죾; 죾; 죾; ) HANGUL SYLLABLE JUGG
+C8FF;C8FF;110C 116E 11AA;C8FF;110C 116E 11AA; # (죿; 죿; 죿; 죿; 죿; ) HANGUL SYLLABLE JUGS
+C900;C900;110C 116E 11AB;C900;110C 116E 11AB; # (준; 준; 준; 준; 준; ) HANGUL SYLLABLE JUN
+C901;C901;110C 116E 11AC;C901;110C 116E 11AC; # (줁; 줁; 줁; 줁; 줁; ) HANGUL SYLLABLE JUNJ
+C902;C902;110C 116E 11AD;C902;110C 116E 11AD; # (줂; 줂; 줂; 줂; 줂; ) HANGUL SYLLABLE JUNH
+C903;C903;110C 116E 11AE;C903;110C 116E 11AE; # (줃; 줃; 줃; 줃; 줃; ) HANGUL SYLLABLE JUD
+C904;C904;110C 116E 11AF;C904;110C 116E 11AF; # (줄; 줄; 줄; 줄; 줄; ) HANGUL SYLLABLE JUL
+C905;C905;110C 116E 11B0;C905;110C 116E 11B0; # (줅; 줅; 줅; 줅; 줅; ) HANGUL SYLLABLE JULG
+C906;C906;110C 116E 11B1;C906;110C 116E 11B1; # (줆; 줆; 줆; 줆; 줆; ) HANGUL SYLLABLE JULM
+C907;C907;110C 116E 11B2;C907;110C 116E 11B2; # (줇; 줇; 줇; 줇; 줇; ) HANGUL SYLLABLE JULB
+C908;C908;110C 116E 11B3;C908;110C 116E 11B3; # (줈; 줈; 줈; 줈; 줈; ) HANGUL SYLLABLE JULS
+C909;C909;110C 116E 11B4;C909;110C 116E 11B4; # (줉; 줉; 줉; 줉; 줉; ) HANGUL SYLLABLE JULT
+C90A;C90A;110C 116E 11B5;C90A;110C 116E 11B5; # (줊; 줊; 줊; 줊; 줊; ) HANGUL SYLLABLE JULP
+C90B;C90B;110C 116E 11B6;C90B;110C 116E 11B6; # (줋; 줋; 줋; 줋; 줋; ) HANGUL SYLLABLE JULH
+C90C;C90C;110C 116E 11B7;C90C;110C 116E 11B7; # (줌; 줌; 줌; 줌; 줌; ) HANGUL SYLLABLE JUM
+C90D;C90D;110C 116E 11B8;C90D;110C 116E 11B8; # (줍; 줍; 줍; 줍; 줍; ) HANGUL SYLLABLE JUB
+C90E;C90E;110C 116E 11B9;C90E;110C 116E 11B9; # (줎; 줎; 줎; 줎; 줎; ) HANGUL SYLLABLE JUBS
+C90F;C90F;110C 116E 11BA;C90F;110C 116E 11BA; # (줏; 줏; 줏; 줏; 줏; ) HANGUL SYLLABLE JUS
+C910;C910;110C 116E 11BB;C910;110C 116E 11BB; # (줐; 줐; 줐; 줐; 줐; ) HANGUL SYLLABLE JUSS
+C911;C911;110C 116E 11BC;C911;110C 116E 11BC; # (중; 중; 중; 중; 중; ) HANGUL SYLLABLE JUNG
+C912;C912;110C 116E 11BD;C912;110C 116E 11BD; # (줒; 줒; 줒; 줒; 줒; ) HANGUL SYLLABLE JUJ
+C913;C913;110C 116E 11BE;C913;110C 116E 11BE; # (줓; 줓; 줓; 줓; 줓; ) HANGUL SYLLABLE JUC
+C914;C914;110C 116E 11BF;C914;110C 116E 11BF; # (줔; 줔; 줔; 줔; 줔; ) HANGUL SYLLABLE JUK
+C915;C915;110C 116E 11C0;C915;110C 116E 11C0; # (줕; 줕; 줕; 줕; 줕; ) HANGUL SYLLABLE JUT
+C916;C916;110C 116E 11C1;C916;110C 116E 11C1; # (줖; 줖; 줖; 줖; 줖; ) HANGUL SYLLABLE JUP
+C917;C917;110C 116E 11C2;C917;110C 116E 11C2; # (줗; 줗; 줗; 줗; 줗; ) HANGUL SYLLABLE JUH
+C918;C918;110C 116F;C918;110C 116F; # (줘; 줘; 줘; 줘; 줘; ) HANGUL SYLLABLE JWEO
+C919;C919;110C 116F 11A8;C919;110C 116F 11A8; # (줙; 줙; 줙; 줙; 줙; ) HANGUL SYLLABLE JWEOG
+C91A;C91A;110C 116F 11A9;C91A;110C 116F 11A9; # (줚; 줚; 줚; 줚; 줚; ) HANGUL SYLLABLE JWEOGG
+C91B;C91B;110C 116F 11AA;C91B;110C 116F 11AA; # (줛; 줛; 줛; 줛; 줛; ) HANGUL SYLLABLE JWEOGS
+C91C;C91C;110C 116F 11AB;C91C;110C 116F 11AB; # (줜; 줜; 줜; 줜; 줜; ) HANGUL SYLLABLE JWEON
+C91D;C91D;110C 116F 11AC;C91D;110C 116F 11AC; # (줝; 줝; 줝; 줝; 줝; ) HANGUL SYLLABLE JWEONJ
+C91E;C91E;110C 116F 11AD;C91E;110C 116F 11AD; # (줞; 줞; 줞; 줞; 줞; ) HANGUL SYLLABLE JWEONH
+C91F;C91F;110C 116F 11AE;C91F;110C 116F 11AE; # (줟; 줟; 줟; 줟; 줟; ) HANGUL SYLLABLE JWEOD
+C920;C920;110C 116F 11AF;C920;110C 116F 11AF; # (줠; 줠; 줠; 줠; 줠; ) HANGUL SYLLABLE JWEOL
+C921;C921;110C 116F 11B0;C921;110C 116F 11B0; # (줡; 줡; 줡; 줡; 줡; ) HANGUL SYLLABLE JWEOLG
+C922;C922;110C 116F 11B1;C922;110C 116F 11B1; # (줢; 줢; 줢; 줢; 줢; ) HANGUL SYLLABLE JWEOLM
+C923;C923;110C 116F 11B2;C923;110C 116F 11B2; # (줣; 줣; 줣; 줣; 줣; ) HANGUL SYLLABLE JWEOLB
+C924;C924;110C 116F 11B3;C924;110C 116F 11B3; # (줤; 줤; 줤; 줤; 줤; ) HANGUL SYLLABLE JWEOLS
+C925;C925;110C 116F 11B4;C925;110C 116F 11B4; # (줥; 줥; 줥; 줥; 줥; ) HANGUL SYLLABLE JWEOLT
+C926;C926;110C 116F 11B5;C926;110C 116F 11B5; # (줦; 줦; 줦; 줦; 줦; ) HANGUL SYLLABLE JWEOLP
+C927;C927;110C 116F 11B6;C927;110C 116F 11B6; # (줧; 줧; 줧; 줧; 줧; ) HANGUL SYLLABLE JWEOLH
+C928;C928;110C 116F 11B7;C928;110C 116F 11B7; # (줨; 줨; 줨; 줨; 줨; ) HANGUL SYLLABLE JWEOM
+C929;C929;110C 116F 11B8;C929;110C 116F 11B8; # (줩; 줩; 줩; 줩; 줩; ) HANGUL SYLLABLE JWEOB
+C92A;C92A;110C 116F 11B9;C92A;110C 116F 11B9; # (줪; 줪; 줪; 줪; 줪; ) HANGUL SYLLABLE JWEOBS
+C92B;C92B;110C 116F 11BA;C92B;110C 116F 11BA; # (줫; 줫; 줫; 줫; 줫; ) HANGUL SYLLABLE JWEOS
+C92C;C92C;110C 116F 11BB;C92C;110C 116F 11BB; # (줬; 줬; 줬; 줬; 줬; ) HANGUL SYLLABLE JWEOSS
+C92D;C92D;110C 116F 11BC;C92D;110C 116F 11BC; # (줭; 줭; 줭; 줭; 줭; ) HANGUL SYLLABLE JWEONG
+C92E;C92E;110C 116F 11BD;C92E;110C 116F 11BD; # (줮; 줮; 줮; 줮; 줮; ) HANGUL SYLLABLE JWEOJ
+C92F;C92F;110C 116F 11BE;C92F;110C 116F 11BE; # (줯; 줯; 줯; 줯; 줯; ) HANGUL SYLLABLE JWEOC
+C930;C930;110C 116F 11BF;C930;110C 116F 11BF; # (줰; 줰; 줰; 줰; 줰; ) HANGUL SYLLABLE JWEOK
+C931;C931;110C 116F 11C0;C931;110C 116F 11C0; # (줱; 줱; 줱; 줱; 줱; ) HANGUL SYLLABLE JWEOT
+C932;C932;110C 116F 11C1;C932;110C 116F 11C1; # (줲; 줲; 줲; 줲; 줲; ) HANGUL SYLLABLE JWEOP
+C933;C933;110C 116F 11C2;C933;110C 116F 11C2; # (줳; 줳; 줳; 줳; 줳; ) HANGUL SYLLABLE JWEOH
+C934;C934;110C 1170;C934;110C 1170; # (줴; 줴; 줴; 줴; 줴; ) HANGUL SYLLABLE JWE
+C935;C935;110C 1170 11A8;C935;110C 1170 11A8; # (줵; 줵; 줵; 줵; 줵; ) HANGUL SYLLABLE JWEG
+C936;C936;110C 1170 11A9;C936;110C 1170 11A9; # (줶; 줶; 줶; 줶; 줶; ) HANGUL SYLLABLE JWEGG
+C937;C937;110C 1170 11AA;C937;110C 1170 11AA; # (줷; 줷; 줷; 줷; 줷; ) HANGUL SYLLABLE JWEGS
+C938;C938;110C 1170 11AB;C938;110C 1170 11AB; # (줸; 줸; 줸; 줸; 줸; ) HANGUL SYLLABLE JWEN
+C939;C939;110C 1170 11AC;C939;110C 1170 11AC; # (줹; 줹; 줹; 줹; 줹; ) HANGUL SYLLABLE JWENJ
+C93A;C93A;110C 1170 11AD;C93A;110C 1170 11AD; # (줺; 줺; 줺; 줺; 줺; ) HANGUL SYLLABLE JWENH
+C93B;C93B;110C 1170 11AE;C93B;110C 1170 11AE; # (줻; 줻; 줻; 줻; 줻; ) HANGUL SYLLABLE JWED
+C93C;C93C;110C 1170 11AF;C93C;110C 1170 11AF; # (줼; 줼; 줼; 줼; 줼; ) HANGUL SYLLABLE JWEL
+C93D;C93D;110C 1170 11B0;C93D;110C 1170 11B0; # (줽; 줽; 줽; 줽; 줽; ) HANGUL SYLLABLE JWELG
+C93E;C93E;110C 1170 11B1;C93E;110C 1170 11B1; # (줾; 줾; 줾; 줾; 줾; ) HANGUL SYLLABLE JWELM
+C93F;C93F;110C 1170 11B2;C93F;110C 1170 11B2; # (줿; 줿; 줿; 줿; 줿; ) HANGUL SYLLABLE JWELB
+C940;C940;110C 1170 11B3;C940;110C 1170 11B3; # (쥀; 쥀; 쥀; 쥀; 쥀; ) HANGUL SYLLABLE JWELS
+C941;C941;110C 1170 11B4;C941;110C 1170 11B4; # (쥁; 쥁; 쥁; 쥁; 쥁; ) HANGUL SYLLABLE JWELT
+C942;C942;110C 1170 11B5;C942;110C 1170 11B5; # (쥂; 쥂; 쥂; 쥂; 쥂; ) HANGUL SYLLABLE JWELP
+C943;C943;110C 1170 11B6;C943;110C 1170 11B6; # (쥃; 쥃; 쥃; 쥃; 쥃; ) HANGUL SYLLABLE JWELH
+C944;C944;110C 1170 11B7;C944;110C 1170 11B7; # (쥄; 쥄; 쥄; 쥄; 쥄; ) HANGUL SYLLABLE JWEM
+C945;C945;110C 1170 11B8;C945;110C 1170 11B8; # (쥅; 쥅; 쥅; 쥅; 쥅; ) HANGUL SYLLABLE JWEB
+C946;C946;110C 1170 11B9;C946;110C 1170 11B9; # (쥆; 쥆; 쥆; 쥆; 쥆; ) HANGUL SYLLABLE JWEBS
+C947;C947;110C 1170 11BA;C947;110C 1170 11BA; # (쥇; 쥇; 쥇; 쥇; 쥇; ) HANGUL SYLLABLE JWES
+C948;C948;110C 1170 11BB;C948;110C 1170 11BB; # (쥈; 쥈; 쥈; 쥈; 쥈; ) HANGUL SYLLABLE JWESS
+C949;C949;110C 1170 11BC;C949;110C 1170 11BC; # (쥉; 쥉; 쥉; 쥉; 쥉; ) HANGUL SYLLABLE JWENG
+C94A;C94A;110C 1170 11BD;C94A;110C 1170 11BD; # (쥊; 쥊; 쥊; 쥊; 쥊; ) HANGUL SYLLABLE JWEJ
+C94B;C94B;110C 1170 11BE;C94B;110C 1170 11BE; # (쥋; 쥋; 쥋; 쥋; 쥋; ) HANGUL SYLLABLE JWEC
+C94C;C94C;110C 1170 11BF;C94C;110C 1170 11BF; # (쥌; 쥌; 쥌; 쥌; 쥌; ) HANGUL SYLLABLE JWEK
+C94D;C94D;110C 1170 11C0;C94D;110C 1170 11C0; # (쥍; 쥍; 쥍; 쥍; 쥍; ) HANGUL SYLLABLE JWET
+C94E;C94E;110C 1170 11C1;C94E;110C 1170 11C1; # (쥎; 쥎; 쥎; 쥎; 쥎; ) HANGUL SYLLABLE JWEP
+C94F;C94F;110C 1170 11C2;C94F;110C 1170 11C2; # (쥏; 쥏; 쥏; 쥏; 쥏; ) HANGUL SYLLABLE JWEH
+C950;C950;110C 1171;C950;110C 1171; # (쥐; 쥐; 쥐; 쥐; 쥐; ) HANGUL SYLLABLE JWI
+C951;C951;110C 1171 11A8;C951;110C 1171 11A8; # (쥑; 쥑; 쥑; 쥑; 쥑; ) HANGUL SYLLABLE JWIG
+C952;C952;110C 1171 11A9;C952;110C 1171 11A9; # (쥒; 쥒; 쥒; 쥒; 쥒; ) HANGUL SYLLABLE JWIGG
+C953;C953;110C 1171 11AA;C953;110C 1171 11AA; # (쥓; 쥓; 쥓; 쥓; 쥓; ) HANGUL SYLLABLE JWIGS
+C954;C954;110C 1171 11AB;C954;110C 1171 11AB; # (쥔; 쥔; 쥔; 쥔; 쥔; ) HANGUL SYLLABLE JWIN
+C955;C955;110C 1171 11AC;C955;110C 1171 11AC; # (쥕; 쥕; 쥕; 쥕; 쥕; ) HANGUL SYLLABLE JWINJ
+C956;C956;110C 1171 11AD;C956;110C 1171 11AD; # (쥖; 쥖; 쥖; 쥖; 쥖; ) HANGUL SYLLABLE JWINH
+C957;C957;110C 1171 11AE;C957;110C 1171 11AE; # (쥗; 쥗; 쥗; 쥗; 쥗; ) HANGUL SYLLABLE JWID
+C958;C958;110C 1171 11AF;C958;110C 1171 11AF; # (쥘; 쥘; 쥘; 쥘; 쥘; ) HANGUL SYLLABLE JWIL
+C959;C959;110C 1171 11B0;C959;110C 1171 11B0; # (쥙; 쥙; 쥙; 쥙; 쥙; ) HANGUL SYLLABLE JWILG
+C95A;C95A;110C 1171 11B1;C95A;110C 1171 11B1; # (쥚; 쥚; 쥚; 쥚; 쥚; ) HANGUL SYLLABLE JWILM
+C95B;C95B;110C 1171 11B2;C95B;110C 1171 11B2; # (쥛; 쥛; 쥛; 쥛; 쥛; ) HANGUL SYLLABLE JWILB
+C95C;C95C;110C 1171 11B3;C95C;110C 1171 11B3; # (쥜; 쥜; 쥜; 쥜; 쥜; ) HANGUL SYLLABLE JWILS
+C95D;C95D;110C 1171 11B4;C95D;110C 1171 11B4; # (쥝; 쥝; 쥝; 쥝; 쥝; ) HANGUL SYLLABLE JWILT
+C95E;C95E;110C 1171 11B5;C95E;110C 1171 11B5; # (쥞; 쥞; 쥞; 쥞; 쥞; ) HANGUL SYLLABLE JWILP
+C95F;C95F;110C 1171 11B6;C95F;110C 1171 11B6; # (쥟; 쥟; 쥟; 쥟; 쥟; ) HANGUL SYLLABLE JWILH
+C960;C960;110C 1171 11B7;C960;110C 1171 11B7; # (쥠; 쥠; 쥠; 쥠; 쥠; ) HANGUL SYLLABLE JWIM
+C961;C961;110C 1171 11B8;C961;110C 1171 11B8; # (쥡; 쥡; 쥡; 쥡; 쥡; ) HANGUL SYLLABLE JWIB
+C962;C962;110C 1171 11B9;C962;110C 1171 11B9; # (쥢; 쥢; 쥢; 쥢; 쥢; ) HANGUL SYLLABLE JWIBS
+C963;C963;110C 1171 11BA;C963;110C 1171 11BA; # (쥣; 쥣; 쥣; 쥣; 쥣; ) HANGUL SYLLABLE JWIS
+C964;C964;110C 1171 11BB;C964;110C 1171 11BB; # (쥤; 쥤; 쥤; 쥤; 쥤; ) HANGUL SYLLABLE JWISS
+C965;C965;110C 1171 11BC;C965;110C 1171 11BC; # (쥥; 쥥; 쥥; 쥥; 쥥; ) HANGUL SYLLABLE JWING
+C966;C966;110C 1171 11BD;C966;110C 1171 11BD; # (쥦; 쥦; 쥦; 쥦; 쥦; ) HANGUL SYLLABLE JWIJ
+C967;C967;110C 1171 11BE;C967;110C 1171 11BE; # (쥧; 쥧; 쥧; 쥧; 쥧; ) HANGUL SYLLABLE JWIC
+C968;C968;110C 1171 11BF;C968;110C 1171 11BF; # (쥨; 쥨; 쥨; 쥨; 쥨; ) HANGUL SYLLABLE JWIK
+C969;C969;110C 1171 11C0;C969;110C 1171 11C0; # (쥩; 쥩; 쥩; 쥩; 쥩; ) HANGUL SYLLABLE JWIT
+C96A;C96A;110C 1171 11C1;C96A;110C 1171 11C1; # (쥪; 쥪; 쥪; 쥪; 쥪; ) HANGUL SYLLABLE JWIP
+C96B;C96B;110C 1171 11C2;C96B;110C 1171 11C2; # (쥫; 쥫; 쥫; 쥫; 쥫; ) HANGUL SYLLABLE JWIH
+C96C;C96C;110C 1172;C96C;110C 1172; # (쥬; 쥬; 쥬; 쥬; 쥬; ) HANGUL SYLLABLE JYU
+C96D;C96D;110C 1172 11A8;C96D;110C 1172 11A8; # (쥭; 쥭; 쥭; 쥭; 쥭; ) HANGUL SYLLABLE JYUG
+C96E;C96E;110C 1172 11A9;C96E;110C 1172 11A9; # (쥮; 쥮; 쥮; 쥮; 쥮; ) HANGUL SYLLABLE JYUGG
+C96F;C96F;110C 1172 11AA;C96F;110C 1172 11AA; # (쥯; 쥯; 쥯; 쥯; 쥯; ) HANGUL SYLLABLE JYUGS
+C970;C970;110C 1172 11AB;C970;110C 1172 11AB; # (쥰; 쥰; 쥰; 쥰; 쥰; ) HANGUL SYLLABLE JYUN
+C971;C971;110C 1172 11AC;C971;110C 1172 11AC; # (쥱; 쥱; 쥱; 쥱; 쥱; ) HANGUL SYLLABLE JYUNJ
+C972;C972;110C 1172 11AD;C972;110C 1172 11AD; # (쥲; 쥲; 쥲; 쥲; 쥲; ) HANGUL SYLLABLE JYUNH
+C973;C973;110C 1172 11AE;C973;110C 1172 11AE; # (쥳; 쥳; 쥳; 쥳; 쥳; ) HANGUL SYLLABLE JYUD
+C974;C974;110C 1172 11AF;C974;110C 1172 11AF; # (쥴; 쥴; 쥴; 쥴; 쥴; ) HANGUL SYLLABLE JYUL
+C975;C975;110C 1172 11B0;C975;110C 1172 11B0; # (쥵; 쥵; 쥵; 쥵; 쥵; ) HANGUL SYLLABLE JYULG
+C976;C976;110C 1172 11B1;C976;110C 1172 11B1; # (쥶; 쥶; 쥶; 쥶; 쥶; ) HANGUL SYLLABLE JYULM
+C977;C977;110C 1172 11B2;C977;110C 1172 11B2; # (쥷; 쥷; 쥷; 쥷; 쥷; ) HANGUL SYLLABLE JYULB
+C978;C978;110C 1172 11B3;C978;110C 1172 11B3; # (쥸; 쥸; 쥸; 쥸; 쥸; ) HANGUL SYLLABLE JYULS
+C979;C979;110C 1172 11B4;C979;110C 1172 11B4; # (쥹; 쥹; 쥹; 쥹; 쥹; ) HANGUL SYLLABLE JYULT
+C97A;C97A;110C 1172 11B5;C97A;110C 1172 11B5; # (쥺; 쥺; 쥺; 쥺; 쥺; ) HANGUL SYLLABLE JYULP
+C97B;C97B;110C 1172 11B6;C97B;110C 1172 11B6; # (쥻; 쥻; 쥻; 쥻; 쥻; ) HANGUL SYLLABLE JYULH
+C97C;C97C;110C 1172 11B7;C97C;110C 1172 11B7; # (쥼; 쥼; 쥼; 쥼; 쥼; ) HANGUL SYLLABLE JYUM
+C97D;C97D;110C 1172 11B8;C97D;110C 1172 11B8; # (쥽; 쥽; 쥽; 쥽; 쥽; ) HANGUL SYLLABLE JYUB
+C97E;C97E;110C 1172 11B9;C97E;110C 1172 11B9; # (쥾; 쥾; 쥾; 쥾; 쥾; ) HANGUL SYLLABLE JYUBS
+C97F;C97F;110C 1172 11BA;C97F;110C 1172 11BA; # (쥿; 쥿; 쥿; 쥿; 쥿; ) HANGUL SYLLABLE JYUS
+C980;C980;110C 1172 11BB;C980;110C 1172 11BB; # (즀; 즀; 즀; 즀; 즀; ) HANGUL SYLLABLE JYUSS
+C981;C981;110C 1172 11BC;C981;110C 1172 11BC; # (즁; 즁; 즁; 즁; 즁; ) HANGUL SYLLABLE JYUNG
+C982;C982;110C 1172 11BD;C982;110C 1172 11BD; # (즂; 즂; 즂; 즂; 즂; ) HANGUL SYLLABLE JYUJ
+C983;C983;110C 1172 11BE;C983;110C 1172 11BE; # (즃; 즃; 즃; 즃; 즃; ) HANGUL SYLLABLE JYUC
+C984;C984;110C 1172 11BF;C984;110C 1172 11BF; # (즄; 즄; 즄; 즄; 즄; ) HANGUL SYLLABLE JYUK
+C985;C985;110C 1172 11C0;C985;110C 1172 11C0; # (즅; 즅; 즅; 즅; 즅; ) HANGUL SYLLABLE JYUT
+C986;C986;110C 1172 11C1;C986;110C 1172 11C1; # (즆; 즆; 즆; 즆; 즆; ) HANGUL SYLLABLE JYUP
+C987;C987;110C 1172 11C2;C987;110C 1172 11C2; # (즇; 즇; 즇; 즇; 즇; ) HANGUL SYLLABLE JYUH
+C988;C988;110C 1173;C988;110C 1173; # (즈; 즈; 즈; 즈; 즈; ) HANGUL SYLLABLE JEU
+C989;C989;110C 1173 11A8;C989;110C 1173 11A8; # (즉; 즉; 즉; 즉; 즉; ) HANGUL SYLLABLE JEUG
+C98A;C98A;110C 1173 11A9;C98A;110C 1173 11A9; # (즊; 즊; 즊; 즊; 즊; ) HANGUL SYLLABLE JEUGG
+C98B;C98B;110C 1173 11AA;C98B;110C 1173 11AA; # (즋; 즋; 즋; 즋; 즋; ) HANGUL SYLLABLE JEUGS
+C98C;C98C;110C 1173 11AB;C98C;110C 1173 11AB; # (즌; 즌; 즌; 즌; 즌; ) HANGUL SYLLABLE JEUN
+C98D;C98D;110C 1173 11AC;C98D;110C 1173 11AC; # (즍; 즍; 즍; 즍; 즍; ) HANGUL SYLLABLE JEUNJ
+C98E;C98E;110C 1173 11AD;C98E;110C 1173 11AD; # (즎; 즎; 즎; 즎; 즎; ) HANGUL SYLLABLE JEUNH
+C98F;C98F;110C 1173 11AE;C98F;110C 1173 11AE; # (즏; 즏; 즏; 즏; 즏; ) HANGUL SYLLABLE JEUD
+C990;C990;110C 1173 11AF;C990;110C 1173 11AF; # (즐; 즐; 즐; 즐; 즐; ) HANGUL SYLLABLE JEUL
+C991;C991;110C 1173 11B0;C991;110C 1173 11B0; # (즑; 즑; 즑; 즑; 즑; ) HANGUL SYLLABLE JEULG
+C992;C992;110C 1173 11B1;C992;110C 1173 11B1; # (즒; 즒; 즒; 즒; 즒; ) HANGUL SYLLABLE JEULM
+C993;C993;110C 1173 11B2;C993;110C 1173 11B2; # (즓; 즓; 즓; 즓; 즓; ) HANGUL SYLLABLE JEULB
+C994;C994;110C 1173 11B3;C994;110C 1173 11B3; # (즔; 즔; 즔; 즔; 즔; ) HANGUL SYLLABLE JEULS
+C995;C995;110C 1173 11B4;C995;110C 1173 11B4; # (즕; 즕; 즕; 즕; 즕; ) HANGUL SYLLABLE JEULT
+C996;C996;110C 1173 11B5;C996;110C 1173 11B5; # (즖; 즖; 즖; 즖; 즖; ) HANGUL SYLLABLE JEULP
+C997;C997;110C 1173 11B6;C997;110C 1173 11B6; # (즗; 즗; 즗; 즗; 즗; ) HANGUL SYLLABLE JEULH
+C998;C998;110C 1173 11B7;C998;110C 1173 11B7; # (즘; 즘; 즘; 즘; 즘; ) HANGUL SYLLABLE JEUM
+C999;C999;110C 1173 11B8;C999;110C 1173 11B8; # (즙; 즙; 즙; 즙; 즙; ) HANGUL SYLLABLE JEUB
+C99A;C99A;110C 1173 11B9;C99A;110C 1173 11B9; # (즚; 즚; 즚; 즚; 즚; ) HANGUL SYLLABLE JEUBS
+C99B;C99B;110C 1173 11BA;C99B;110C 1173 11BA; # (즛; 즛; 즛; 즛; 즛; ) HANGUL SYLLABLE JEUS
+C99C;C99C;110C 1173 11BB;C99C;110C 1173 11BB; # (즜; 즜; 즜; 즜; 즜; ) HANGUL SYLLABLE JEUSS
+C99D;C99D;110C 1173 11BC;C99D;110C 1173 11BC; # (증; 증; 증; 증; 증; ) HANGUL SYLLABLE JEUNG
+C99E;C99E;110C 1173 11BD;C99E;110C 1173 11BD; # (즞; 즞; 즞; 즞; 즞; ) HANGUL SYLLABLE JEUJ
+C99F;C99F;110C 1173 11BE;C99F;110C 1173 11BE; # (즟; 즟; 즟; 즟; 즟; ) HANGUL SYLLABLE JEUC
+C9A0;C9A0;110C 1173 11BF;C9A0;110C 1173 11BF; # (즠; 즠; 즠; 즠; 즠; ) HANGUL SYLLABLE JEUK
+C9A1;C9A1;110C 1173 11C0;C9A1;110C 1173 11C0; # (즡; 즡; 즡; 즡; 즡; ) HANGUL SYLLABLE JEUT
+C9A2;C9A2;110C 1173 11C1;C9A2;110C 1173 11C1; # (즢; 즢; 즢; 즢; 즢; ) HANGUL SYLLABLE JEUP
+C9A3;C9A3;110C 1173 11C2;C9A3;110C 1173 11C2; # (즣; 즣; 즣; 즣; 즣; ) HANGUL SYLLABLE JEUH
+C9A4;C9A4;110C 1174;C9A4;110C 1174; # (즤; 즤; 즤; 즤; 즤; ) HANGUL SYLLABLE JYI
+C9A5;C9A5;110C 1174 11A8;C9A5;110C 1174 11A8; # (즥; 즥; 즥; 즥; 즥; ) HANGUL SYLLABLE JYIG
+C9A6;C9A6;110C 1174 11A9;C9A6;110C 1174 11A9; # (즦; 즦; 즦; 즦; 즦; ) HANGUL SYLLABLE JYIGG
+C9A7;C9A7;110C 1174 11AA;C9A7;110C 1174 11AA; # (즧; 즧; 즧; 즧; 즧; ) HANGUL SYLLABLE JYIGS
+C9A8;C9A8;110C 1174 11AB;C9A8;110C 1174 11AB; # (즨; 즨; 즨; 즨; 즨; ) HANGUL SYLLABLE JYIN
+C9A9;C9A9;110C 1174 11AC;C9A9;110C 1174 11AC; # (즩; 즩; 즩; 즩; 즩; ) HANGUL SYLLABLE JYINJ
+C9AA;C9AA;110C 1174 11AD;C9AA;110C 1174 11AD; # (즪; 즪; 즪; 즪; 즪; ) HANGUL SYLLABLE JYINH
+C9AB;C9AB;110C 1174 11AE;C9AB;110C 1174 11AE; # (즫; 즫; 즫; 즫; 즫; ) HANGUL SYLLABLE JYID
+C9AC;C9AC;110C 1174 11AF;C9AC;110C 1174 11AF; # (즬; 즬; 즬; 즬; 즬; ) HANGUL SYLLABLE JYIL
+C9AD;C9AD;110C 1174 11B0;C9AD;110C 1174 11B0; # (즭; 즭; 즭; 즭; 즭; ) HANGUL SYLLABLE JYILG
+C9AE;C9AE;110C 1174 11B1;C9AE;110C 1174 11B1; # (즮; 즮; 즮; 즮; 즮; ) HANGUL SYLLABLE JYILM
+C9AF;C9AF;110C 1174 11B2;C9AF;110C 1174 11B2; # (즯; 즯; 즯; 즯; 즯; ) HANGUL SYLLABLE JYILB
+C9B0;C9B0;110C 1174 11B3;C9B0;110C 1174 11B3; # (즰; 즰; 즰; 즰; 즰; ) HANGUL SYLLABLE JYILS
+C9B1;C9B1;110C 1174 11B4;C9B1;110C 1174 11B4; # (즱; 즱; 즱; 즱; 즱; ) HANGUL SYLLABLE JYILT
+C9B2;C9B2;110C 1174 11B5;C9B2;110C 1174 11B5; # (즲; 즲; 즲; 즲; 즲; ) HANGUL SYLLABLE JYILP
+C9B3;C9B3;110C 1174 11B6;C9B3;110C 1174 11B6; # (즳; 즳; 즳; 즳; 즳; ) HANGUL SYLLABLE JYILH
+C9B4;C9B4;110C 1174 11B7;C9B4;110C 1174 11B7; # (즴; 즴; 즴; 즴; 즴; ) HANGUL SYLLABLE JYIM
+C9B5;C9B5;110C 1174 11B8;C9B5;110C 1174 11B8; # (즵; 즵; 즵; 즵; 즵; ) HANGUL SYLLABLE JYIB
+C9B6;C9B6;110C 1174 11B9;C9B6;110C 1174 11B9; # (즶; 즶; 즶; 즶; 즶; ) HANGUL SYLLABLE JYIBS
+C9B7;C9B7;110C 1174 11BA;C9B7;110C 1174 11BA; # (즷; 즷; 즷; 즷; 즷; ) HANGUL SYLLABLE JYIS
+C9B8;C9B8;110C 1174 11BB;C9B8;110C 1174 11BB; # (즸; 즸; 즸; 즸; 즸; ) HANGUL SYLLABLE JYISS
+C9B9;C9B9;110C 1174 11BC;C9B9;110C 1174 11BC; # (즹; 즹; 즹; 즹; 즹; ) HANGUL SYLLABLE JYING
+C9BA;C9BA;110C 1174 11BD;C9BA;110C 1174 11BD; # (즺; 즺; 즺; 즺; 즺; ) HANGUL SYLLABLE JYIJ
+C9BB;C9BB;110C 1174 11BE;C9BB;110C 1174 11BE; # (즻; 즻; 즻; 즻; 즻; ) HANGUL SYLLABLE JYIC
+C9BC;C9BC;110C 1174 11BF;C9BC;110C 1174 11BF; # (즼; 즼; 즼; 즼; 즼; ) HANGUL SYLLABLE JYIK
+C9BD;C9BD;110C 1174 11C0;C9BD;110C 1174 11C0; # (즽; 즽; 즽; 즽; 즽; ) HANGUL SYLLABLE JYIT
+C9BE;C9BE;110C 1174 11C1;C9BE;110C 1174 11C1; # (즾; 즾; 즾; 즾; 즾; ) HANGUL SYLLABLE JYIP
+C9BF;C9BF;110C 1174 11C2;C9BF;110C 1174 11C2; # (즿; 즿; 즿; 즿; 즿; ) HANGUL SYLLABLE JYIH
+C9C0;C9C0;110C 1175;C9C0;110C 1175; # (지; 지; 지; 지; 지; ) HANGUL SYLLABLE JI
+C9C1;C9C1;110C 1175 11A8;C9C1;110C 1175 11A8; # (직; 직; 직; 직; 직; ) HANGUL SYLLABLE JIG
+C9C2;C9C2;110C 1175 11A9;C9C2;110C 1175 11A9; # (짂; 짂; 짂; 짂; 짂; ) HANGUL SYLLABLE JIGG
+C9C3;C9C3;110C 1175 11AA;C9C3;110C 1175 11AA; # (짃; 짃; 짃; 짃; 짃; ) HANGUL SYLLABLE JIGS
+C9C4;C9C4;110C 1175 11AB;C9C4;110C 1175 11AB; # (진; 진; 진; 진; 진; ) HANGUL SYLLABLE JIN
+C9C5;C9C5;110C 1175 11AC;C9C5;110C 1175 11AC; # (짅; 짅; 짅; 짅; 짅; ) HANGUL SYLLABLE JINJ
+C9C6;C9C6;110C 1175 11AD;C9C6;110C 1175 11AD; # (짆; 짆; 짆; 짆; 짆; ) HANGUL SYLLABLE JINH
+C9C7;C9C7;110C 1175 11AE;C9C7;110C 1175 11AE; # (짇; 짇; 짇; 짇; 짇; ) HANGUL SYLLABLE JID
+C9C8;C9C8;110C 1175 11AF;C9C8;110C 1175 11AF; # (질; 질; 질; 질; 질; ) HANGUL SYLLABLE JIL
+C9C9;C9C9;110C 1175 11B0;C9C9;110C 1175 11B0; # (짉; 짉; 짉; 짉; 짉; ) HANGUL SYLLABLE JILG
+C9CA;C9CA;110C 1175 11B1;C9CA;110C 1175 11B1; # (짊; 짊; 짊; 짊; 짊; ) HANGUL SYLLABLE JILM
+C9CB;C9CB;110C 1175 11B2;C9CB;110C 1175 11B2; # (짋; 짋; 짋; 짋; 짋; ) HANGUL SYLLABLE JILB
+C9CC;C9CC;110C 1175 11B3;C9CC;110C 1175 11B3; # (짌; 짌; 짌; 짌; 짌; ) HANGUL SYLLABLE JILS
+C9CD;C9CD;110C 1175 11B4;C9CD;110C 1175 11B4; # (짍; 짍; 짍; 짍; 짍; ) HANGUL SYLLABLE JILT
+C9CE;C9CE;110C 1175 11B5;C9CE;110C 1175 11B5; # (짎; 짎; 짎; 짎; 짎; ) HANGUL SYLLABLE JILP
+C9CF;C9CF;110C 1175 11B6;C9CF;110C 1175 11B6; # (짏; 짏; 짏; 짏; 짏; ) HANGUL SYLLABLE JILH
+C9D0;C9D0;110C 1175 11B7;C9D0;110C 1175 11B7; # (짐; 짐; 짐; 짐; 짐; ) HANGUL SYLLABLE JIM
+C9D1;C9D1;110C 1175 11B8;C9D1;110C 1175 11B8; # (집; 집; 집; 집; 집; ) HANGUL SYLLABLE JIB
+C9D2;C9D2;110C 1175 11B9;C9D2;110C 1175 11B9; # (짒; 짒; 짒; 짒; 짒; ) HANGUL SYLLABLE JIBS
+C9D3;C9D3;110C 1175 11BA;C9D3;110C 1175 11BA; # (짓; 짓; 짓; 짓; 짓; ) HANGUL SYLLABLE JIS
+C9D4;C9D4;110C 1175 11BB;C9D4;110C 1175 11BB; # (짔; 짔; 짔; 짔; 짔; ) HANGUL SYLLABLE JISS
+C9D5;C9D5;110C 1175 11BC;C9D5;110C 1175 11BC; # (징; 징; 징; 징; 징; ) HANGUL SYLLABLE JING
+C9D6;C9D6;110C 1175 11BD;C9D6;110C 1175 11BD; # (짖; 짖; 짖; 짖; 짖; ) HANGUL SYLLABLE JIJ
+C9D7;C9D7;110C 1175 11BE;C9D7;110C 1175 11BE; # (짗; 짗; 짗; 짗; 짗; ) HANGUL SYLLABLE JIC
+C9D8;C9D8;110C 1175 11BF;C9D8;110C 1175 11BF; # (짘; 짘; 짘; 짘; 짘; ) HANGUL SYLLABLE JIK
+C9D9;C9D9;110C 1175 11C0;C9D9;110C 1175 11C0; # (짙; 짙; 짙; 짙; 짙; ) HANGUL SYLLABLE JIT
+C9DA;C9DA;110C 1175 11C1;C9DA;110C 1175 11C1; # (짚; 짚; 짚; 짚; 짚; ) HANGUL SYLLABLE JIP
+C9DB;C9DB;110C 1175 11C2;C9DB;110C 1175 11C2; # (짛; 짛; 짛; 짛; 짛; ) HANGUL SYLLABLE JIH
+C9DC;C9DC;110D 1161;C9DC;110D 1161; # (짜; 짜; 짜; 짜; 짜; ) HANGUL SYLLABLE JJA
+C9DD;C9DD;110D 1161 11A8;C9DD;110D 1161 11A8; # (짝; 짝; 짝; 짝; 짝; ) HANGUL SYLLABLE JJAG
+C9DE;C9DE;110D 1161 11A9;C9DE;110D 1161 11A9; # (짞; 짞; 짞; 짞; 짞; ) HANGUL SYLLABLE JJAGG
+C9DF;C9DF;110D 1161 11AA;C9DF;110D 1161 11AA; # (짟; 짟; 짟; 짟; 짟; ) HANGUL SYLLABLE JJAGS
+C9E0;C9E0;110D 1161 11AB;C9E0;110D 1161 11AB; # (짠; 짠; 짠; 짠; 짠; ) HANGUL SYLLABLE JJAN
+C9E1;C9E1;110D 1161 11AC;C9E1;110D 1161 11AC; # (짡; 짡; 짡; 짡; 짡; ) HANGUL SYLLABLE JJANJ
+C9E2;C9E2;110D 1161 11AD;C9E2;110D 1161 11AD; # (짢; 짢; 짢; 짢; 짢; ) HANGUL SYLLABLE JJANH
+C9E3;C9E3;110D 1161 11AE;C9E3;110D 1161 11AE; # (짣; 짣; 짣; 짣; 짣; ) HANGUL SYLLABLE JJAD
+C9E4;C9E4;110D 1161 11AF;C9E4;110D 1161 11AF; # (짤; 짤; 짤; 짤; 짤; ) HANGUL SYLLABLE JJAL
+C9E5;C9E5;110D 1161 11B0;C9E5;110D 1161 11B0; # (짥; 짥; 짥; 짥; 짥; ) HANGUL SYLLABLE JJALG
+C9E6;C9E6;110D 1161 11B1;C9E6;110D 1161 11B1; # (짦; 짦; 짦; 짦; 짦; ) HANGUL SYLLABLE JJALM
+C9E7;C9E7;110D 1161 11B2;C9E7;110D 1161 11B2; # (짧; 짧; 짧; 짧; 짧; ) HANGUL SYLLABLE JJALB
+C9E8;C9E8;110D 1161 11B3;C9E8;110D 1161 11B3; # (짨; 짨; 짨; 짨; 짨; ) HANGUL SYLLABLE JJALS
+C9E9;C9E9;110D 1161 11B4;C9E9;110D 1161 11B4; # (짩; 짩; 짩; 짩; 짩; ) HANGUL SYLLABLE JJALT
+C9EA;C9EA;110D 1161 11B5;C9EA;110D 1161 11B5; # (짪; 짪; 짪; 짪; 짪; ) HANGUL SYLLABLE JJALP
+C9EB;C9EB;110D 1161 11B6;C9EB;110D 1161 11B6; # (짫; 짫; 짫; 짫; 짫; ) HANGUL SYLLABLE JJALH
+C9EC;C9EC;110D 1161 11B7;C9EC;110D 1161 11B7; # (짬; 짬; 짬; 짬; 짬; ) HANGUL SYLLABLE JJAM
+C9ED;C9ED;110D 1161 11B8;C9ED;110D 1161 11B8; # (짭; 짭; 짭; 짭; 짭; ) HANGUL SYLLABLE JJAB
+C9EE;C9EE;110D 1161 11B9;C9EE;110D 1161 11B9; # (짮; 짮; 짮; 짮; 짮; ) HANGUL SYLLABLE JJABS
+C9EF;C9EF;110D 1161 11BA;C9EF;110D 1161 11BA; # (짯; 짯; 짯; 짯; 짯; ) HANGUL SYLLABLE JJAS
+C9F0;C9F0;110D 1161 11BB;C9F0;110D 1161 11BB; # (짰; 짰; 짰; 짰; 짰; ) HANGUL SYLLABLE JJASS
+C9F1;C9F1;110D 1161 11BC;C9F1;110D 1161 11BC; # (짱; 짱; 짱; 짱; 짱; ) HANGUL SYLLABLE JJANG
+C9F2;C9F2;110D 1161 11BD;C9F2;110D 1161 11BD; # (짲; 짲; 짲; 짲; 짲; ) HANGUL SYLLABLE JJAJ
+C9F3;C9F3;110D 1161 11BE;C9F3;110D 1161 11BE; # (짳; 짳; 짳; 짳; 짳; ) HANGUL SYLLABLE JJAC
+C9F4;C9F4;110D 1161 11BF;C9F4;110D 1161 11BF; # (짴; 짴; 짴; 짴; 짴; ) HANGUL SYLLABLE JJAK
+C9F5;C9F5;110D 1161 11C0;C9F5;110D 1161 11C0; # (짵; 짵; 짵; 짵; 짵; ) HANGUL SYLLABLE JJAT
+C9F6;C9F6;110D 1161 11C1;C9F6;110D 1161 11C1; # (짶; 짶; 짶; 짶; 짶; ) HANGUL SYLLABLE JJAP
+C9F7;C9F7;110D 1161 11C2;C9F7;110D 1161 11C2; # (짷; 짷; 짷; 짷; 짷; ) HANGUL SYLLABLE JJAH
+C9F8;C9F8;110D 1162;C9F8;110D 1162; # (째; 째; 째; 째; 째; ) HANGUL SYLLABLE JJAE
+C9F9;C9F9;110D 1162 11A8;C9F9;110D 1162 11A8; # (짹; 짹; 짹; 짹; 짹; ) HANGUL SYLLABLE JJAEG
+C9FA;C9FA;110D 1162 11A9;C9FA;110D 1162 11A9; # (짺; 짺; 짺; 짺; 짺; ) HANGUL SYLLABLE JJAEGG
+C9FB;C9FB;110D 1162 11AA;C9FB;110D 1162 11AA; # (짻; 짻; 짻; 짻; 짻; ) HANGUL SYLLABLE JJAEGS
+C9FC;C9FC;110D 1162 11AB;C9FC;110D 1162 11AB; # (짼; 짼; 짼; 짼; 짼; ) HANGUL SYLLABLE JJAEN
+C9FD;C9FD;110D 1162 11AC;C9FD;110D 1162 11AC; # (짽; 짽; 짽; 짽; 짽; ) HANGUL SYLLABLE JJAENJ
+C9FE;C9FE;110D 1162 11AD;C9FE;110D 1162 11AD; # (짾; 짾; 짾; 짾; 짾; ) HANGUL SYLLABLE JJAENH
+C9FF;C9FF;110D 1162 11AE;C9FF;110D 1162 11AE; # (짿; 짿; 짿; 짿; 짿; ) HANGUL SYLLABLE JJAED
+CA00;CA00;110D 1162 11AF;CA00;110D 1162 11AF; # (쨀; 쨀; 쨀; 쨀; 쨀; ) HANGUL SYLLABLE JJAEL
+CA01;CA01;110D 1162 11B0;CA01;110D 1162 11B0; # (쨁; 쨁; 쨁; 쨁; 쨁; ) HANGUL SYLLABLE JJAELG
+CA02;CA02;110D 1162 11B1;CA02;110D 1162 11B1; # (쨂; 쨂; 쨂; 쨂; 쨂; ) HANGUL SYLLABLE JJAELM
+CA03;CA03;110D 1162 11B2;CA03;110D 1162 11B2; # (쨃; 쨃; 쨃; 쨃; 쨃; ) HANGUL SYLLABLE JJAELB
+CA04;CA04;110D 1162 11B3;CA04;110D 1162 11B3; # (쨄; 쨄; 쨄; 쨄; 쨄; ) HANGUL SYLLABLE JJAELS
+CA05;CA05;110D 1162 11B4;CA05;110D 1162 11B4; # (쨅; 쨅; 쨅; 쨅; 쨅; ) HANGUL SYLLABLE JJAELT
+CA06;CA06;110D 1162 11B5;CA06;110D 1162 11B5; # (쨆; 쨆; 쨆; 쨆; 쨆; ) HANGUL SYLLABLE JJAELP
+CA07;CA07;110D 1162 11B6;CA07;110D 1162 11B6; # (쨇; 쨇; 쨇; 쨇; 쨇; ) HANGUL SYLLABLE JJAELH
+CA08;CA08;110D 1162 11B7;CA08;110D 1162 11B7; # (쨈; 쨈; 쨈; 쨈; 쨈; ) HANGUL SYLLABLE JJAEM
+CA09;CA09;110D 1162 11B8;CA09;110D 1162 11B8; # (쨉; 쨉; 쨉; 쨉; 쨉; ) HANGUL SYLLABLE JJAEB
+CA0A;CA0A;110D 1162 11B9;CA0A;110D 1162 11B9; # (쨊; 쨊; 쨊; 쨊; 쨊; ) HANGUL SYLLABLE JJAEBS
+CA0B;CA0B;110D 1162 11BA;CA0B;110D 1162 11BA; # (쨋; 쨋; 쨋; 쨋; 쨋; ) HANGUL SYLLABLE JJAES
+CA0C;CA0C;110D 1162 11BB;CA0C;110D 1162 11BB; # (쨌; 쨌; 쨌; 쨌; 쨌; ) HANGUL SYLLABLE JJAESS
+CA0D;CA0D;110D 1162 11BC;CA0D;110D 1162 11BC; # (쨍; 쨍; 쨍; 쨍; 쨍; ) HANGUL SYLLABLE JJAENG
+CA0E;CA0E;110D 1162 11BD;CA0E;110D 1162 11BD; # (쨎; 쨎; 쨎; 쨎; 쨎; ) HANGUL SYLLABLE JJAEJ
+CA0F;CA0F;110D 1162 11BE;CA0F;110D 1162 11BE; # (쨏; 쨏; 쨏; 쨏; 쨏; ) HANGUL SYLLABLE JJAEC
+CA10;CA10;110D 1162 11BF;CA10;110D 1162 11BF; # (쨐; 쨐; 쨐; 쨐; 쨐; ) HANGUL SYLLABLE JJAEK
+CA11;CA11;110D 1162 11C0;CA11;110D 1162 11C0; # (쨑; 쨑; 쨑; 쨑; 쨑; ) HANGUL SYLLABLE JJAET
+CA12;CA12;110D 1162 11C1;CA12;110D 1162 11C1; # (쨒; 쨒; 쨒; 쨒; 쨒; ) HANGUL SYLLABLE JJAEP
+CA13;CA13;110D 1162 11C2;CA13;110D 1162 11C2; # (쨓; 쨓; 쨓; 쨓; 쨓; ) HANGUL SYLLABLE JJAEH
+CA14;CA14;110D 1163;CA14;110D 1163; # (쨔; 쨔; 쨔; 쨔; 쨔; ) HANGUL SYLLABLE JJYA
+CA15;CA15;110D 1163 11A8;CA15;110D 1163 11A8; # (쨕; 쨕; 쨕; 쨕; 쨕; ) HANGUL SYLLABLE JJYAG
+CA16;CA16;110D 1163 11A9;CA16;110D 1163 11A9; # (쨖; 쨖; 쨖; 쨖; 쨖; ) HANGUL SYLLABLE JJYAGG
+CA17;CA17;110D 1163 11AA;CA17;110D 1163 11AA; # (쨗; 쨗; 쨗; 쨗; 쨗; ) HANGUL SYLLABLE JJYAGS
+CA18;CA18;110D 1163 11AB;CA18;110D 1163 11AB; # (쨘; 쨘; 쨘; 쨘; 쨘; ) HANGUL SYLLABLE JJYAN
+CA19;CA19;110D 1163 11AC;CA19;110D 1163 11AC; # (쨙; 쨙; 쨙; 쨙; 쨙; ) HANGUL SYLLABLE JJYANJ
+CA1A;CA1A;110D 1163 11AD;CA1A;110D 1163 11AD; # (쨚; 쨚; 쨚; 쨚; 쨚; ) HANGUL SYLLABLE JJYANH
+CA1B;CA1B;110D 1163 11AE;CA1B;110D 1163 11AE; # (쨛; 쨛; 쨛; 쨛; 쨛; ) HANGUL SYLLABLE JJYAD
+CA1C;CA1C;110D 1163 11AF;CA1C;110D 1163 11AF; # (쨜; 쨜; 쨜; 쨜; 쨜; ) HANGUL SYLLABLE JJYAL
+CA1D;CA1D;110D 1163 11B0;CA1D;110D 1163 11B0; # (쨝; 쨝; 쨝; 쨝; 쨝; ) HANGUL SYLLABLE JJYALG
+CA1E;CA1E;110D 1163 11B1;CA1E;110D 1163 11B1; # (쨞; 쨞; 쨞; 쨞; 쨞; ) HANGUL SYLLABLE JJYALM
+CA1F;CA1F;110D 1163 11B2;CA1F;110D 1163 11B2; # (쨟; 쨟; 쨟; 쨟; 쨟; ) HANGUL SYLLABLE JJYALB
+CA20;CA20;110D 1163 11B3;CA20;110D 1163 11B3; # (쨠; 쨠; 쨠; 쨠; 쨠; ) HANGUL SYLLABLE JJYALS
+CA21;CA21;110D 1163 11B4;CA21;110D 1163 11B4; # (쨡; 쨡; 쨡; 쨡; 쨡; ) HANGUL SYLLABLE JJYALT
+CA22;CA22;110D 1163 11B5;CA22;110D 1163 11B5; # (쨢; 쨢; 쨢; 쨢; 쨢; ) HANGUL SYLLABLE JJYALP
+CA23;CA23;110D 1163 11B6;CA23;110D 1163 11B6; # (쨣; 쨣; 쨣; 쨣; 쨣; ) HANGUL SYLLABLE JJYALH
+CA24;CA24;110D 1163 11B7;CA24;110D 1163 11B7; # (쨤; 쨤; 쨤; 쨤; 쨤; ) HANGUL SYLLABLE JJYAM
+CA25;CA25;110D 1163 11B8;CA25;110D 1163 11B8; # (쨥; 쨥; 쨥; 쨥; 쨥; ) HANGUL SYLLABLE JJYAB
+CA26;CA26;110D 1163 11B9;CA26;110D 1163 11B9; # (쨦; 쨦; 쨦; 쨦; 쨦; ) HANGUL SYLLABLE JJYABS
+CA27;CA27;110D 1163 11BA;CA27;110D 1163 11BA; # (쨧; 쨧; 쨧; 쨧; 쨧; ) HANGUL SYLLABLE JJYAS
+CA28;CA28;110D 1163 11BB;CA28;110D 1163 11BB; # (쨨; 쨨; 쨨; 쨨; 쨨; ) HANGUL SYLLABLE JJYASS
+CA29;CA29;110D 1163 11BC;CA29;110D 1163 11BC; # (쨩; 쨩; 쨩; 쨩; 쨩; ) HANGUL SYLLABLE JJYANG
+CA2A;CA2A;110D 1163 11BD;CA2A;110D 1163 11BD; # (쨪; 쨪; 쨪; 쨪; 쨪; ) HANGUL SYLLABLE JJYAJ
+CA2B;CA2B;110D 1163 11BE;CA2B;110D 1163 11BE; # (쨫; 쨫; 쨫; 쨫; 쨫; ) HANGUL SYLLABLE JJYAC
+CA2C;CA2C;110D 1163 11BF;CA2C;110D 1163 11BF; # (쨬; 쨬; 쨬; 쨬; 쨬; ) HANGUL SYLLABLE JJYAK
+CA2D;CA2D;110D 1163 11C0;CA2D;110D 1163 11C0; # (쨭; 쨭; 쨭; 쨭; 쨭; ) HANGUL SYLLABLE JJYAT
+CA2E;CA2E;110D 1163 11C1;CA2E;110D 1163 11C1; # (쨮; 쨮; 쨮; 쨮; 쨮; ) HANGUL SYLLABLE JJYAP
+CA2F;CA2F;110D 1163 11C2;CA2F;110D 1163 11C2; # (쨯; 쨯; 쨯; 쨯; 쨯; ) HANGUL SYLLABLE JJYAH
+CA30;CA30;110D 1164;CA30;110D 1164; # (쨰; 쨰; 쨰; 쨰; 쨰; ) HANGUL SYLLABLE JJYAE
+CA31;CA31;110D 1164 11A8;CA31;110D 1164 11A8; # (쨱; 쨱; 쨱; 쨱; 쨱; ) HANGUL SYLLABLE JJYAEG
+CA32;CA32;110D 1164 11A9;CA32;110D 1164 11A9; # (쨲; 쨲; 쨲; 쨲; 쨲; ) HANGUL SYLLABLE JJYAEGG
+CA33;CA33;110D 1164 11AA;CA33;110D 1164 11AA; # (쨳; 쨳; 쨳; 쨳; 쨳; ) HANGUL SYLLABLE JJYAEGS
+CA34;CA34;110D 1164 11AB;CA34;110D 1164 11AB; # (쨴; 쨴; 쨴; 쨴; 쨴; ) HANGUL SYLLABLE JJYAEN
+CA35;CA35;110D 1164 11AC;CA35;110D 1164 11AC; # (쨵; 쨵; 쨵; 쨵; 쨵; ) HANGUL SYLLABLE JJYAENJ
+CA36;CA36;110D 1164 11AD;CA36;110D 1164 11AD; # (쨶; 쨶; 쨶; 쨶; 쨶; ) HANGUL SYLLABLE JJYAENH
+CA37;CA37;110D 1164 11AE;CA37;110D 1164 11AE; # (쨷; 쨷; 쨷; 쨷; 쨷; ) HANGUL SYLLABLE JJYAED
+CA38;CA38;110D 1164 11AF;CA38;110D 1164 11AF; # (쨸; 쨸; 쨸; 쨸; 쨸; ) HANGUL SYLLABLE JJYAEL
+CA39;CA39;110D 1164 11B0;CA39;110D 1164 11B0; # (쨹; 쨹; 쨹; 쨹; 쨹; ) HANGUL SYLLABLE JJYAELG
+CA3A;CA3A;110D 1164 11B1;CA3A;110D 1164 11B1; # (쨺; 쨺; 쨺; 쨺; 쨺; ) HANGUL SYLLABLE JJYAELM
+CA3B;CA3B;110D 1164 11B2;CA3B;110D 1164 11B2; # (쨻; 쨻; 쨻; 쨻; 쨻; ) HANGUL SYLLABLE JJYAELB
+CA3C;CA3C;110D 1164 11B3;CA3C;110D 1164 11B3; # (쨼; 쨼; 쨼; 쨼; 쨼; ) HANGUL SYLLABLE JJYAELS
+CA3D;CA3D;110D 1164 11B4;CA3D;110D 1164 11B4; # (쨽; 쨽; 쨽; 쨽; 쨽; ) HANGUL SYLLABLE JJYAELT
+CA3E;CA3E;110D 1164 11B5;CA3E;110D 1164 11B5; # (쨾; 쨾; 쨾; 쨾; 쨾; ) HANGUL SYLLABLE JJYAELP
+CA3F;CA3F;110D 1164 11B6;CA3F;110D 1164 11B6; # (쨿; 쨿; 쨿; 쨿; 쨿; ) HANGUL SYLLABLE JJYAELH
+CA40;CA40;110D 1164 11B7;CA40;110D 1164 11B7; # (쩀; 쩀; 쩀; 쩀; 쩀; ) HANGUL SYLLABLE JJYAEM
+CA41;CA41;110D 1164 11B8;CA41;110D 1164 11B8; # (쩁; 쩁; 쩁; 쩁; 쩁; ) HANGUL SYLLABLE JJYAEB
+CA42;CA42;110D 1164 11B9;CA42;110D 1164 11B9; # (쩂; 쩂; 쩂; 쩂; 쩂; ) HANGUL SYLLABLE JJYAEBS
+CA43;CA43;110D 1164 11BA;CA43;110D 1164 11BA; # (쩃; 쩃; 쩃; 쩃; 쩃; ) HANGUL SYLLABLE JJYAES
+CA44;CA44;110D 1164 11BB;CA44;110D 1164 11BB; # (쩄; 쩄; 쩄; 쩄; 쩄; ) HANGUL SYLLABLE JJYAESS
+CA45;CA45;110D 1164 11BC;CA45;110D 1164 11BC; # (쩅; 쩅; 쩅; 쩅; 쩅; ) HANGUL SYLLABLE JJYAENG
+CA46;CA46;110D 1164 11BD;CA46;110D 1164 11BD; # (쩆; 쩆; 쩆; 쩆; 쩆; ) HANGUL SYLLABLE JJYAEJ
+CA47;CA47;110D 1164 11BE;CA47;110D 1164 11BE; # (쩇; 쩇; 쩇; 쩇; 쩇; ) HANGUL SYLLABLE JJYAEC
+CA48;CA48;110D 1164 11BF;CA48;110D 1164 11BF; # (쩈; 쩈; 쩈; 쩈; 쩈; ) HANGUL SYLLABLE JJYAEK
+CA49;CA49;110D 1164 11C0;CA49;110D 1164 11C0; # (쩉; 쩉; 쩉; 쩉; 쩉; ) HANGUL SYLLABLE JJYAET
+CA4A;CA4A;110D 1164 11C1;CA4A;110D 1164 11C1; # (쩊; 쩊; 쩊; 쩊; 쩊; ) HANGUL SYLLABLE JJYAEP
+CA4B;CA4B;110D 1164 11C2;CA4B;110D 1164 11C2; # (쩋; 쩋; 쩋; 쩋; 쩋; ) HANGUL SYLLABLE JJYAEH
+CA4C;CA4C;110D 1165;CA4C;110D 1165; # (쩌; 쩌; 쩌; 쩌; 쩌; ) HANGUL SYLLABLE JJEO
+CA4D;CA4D;110D 1165 11A8;CA4D;110D 1165 11A8; # (쩍; 쩍; 쩍; 쩍; 쩍; ) HANGUL SYLLABLE JJEOG
+CA4E;CA4E;110D 1165 11A9;CA4E;110D 1165 11A9; # (쩎; 쩎; 쩎; 쩎; 쩎; ) HANGUL SYLLABLE JJEOGG
+CA4F;CA4F;110D 1165 11AA;CA4F;110D 1165 11AA; # (쩏; 쩏; 쩏; 쩏; 쩏; ) HANGUL SYLLABLE JJEOGS
+CA50;CA50;110D 1165 11AB;CA50;110D 1165 11AB; # (쩐; 쩐; 쩐; 쩐; 쩐; ) HANGUL SYLLABLE JJEON
+CA51;CA51;110D 1165 11AC;CA51;110D 1165 11AC; # (쩑; 쩑; 쩑; 쩑; 쩑; ) HANGUL SYLLABLE JJEONJ
+CA52;CA52;110D 1165 11AD;CA52;110D 1165 11AD; # (쩒; 쩒; 쩒; 쩒; 쩒; ) HANGUL SYLLABLE JJEONH
+CA53;CA53;110D 1165 11AE;CA53;110D 1165 11AE; # (쩓; 쩓; 쩓; 쩓; 쩓; ) HANGUL SYLLABLE JJEOD
+CA54;CA54;110D 1165 11AF;CA54;110D 1165 11AF; # (쩔; 쩔; 쩔; 쩔; 쩔; ) HANGUL SYLLABLE JJEOL
+CA55;CA55;110D 1165 11B0;CA55;110D 1165 11B0; # (쩕; 쩕; 쩕; 쩕; 쩕; ) HANGUL SYLLABLE JJEOLG
+CA56;CA56;110D 1165 11B1;CA56;110D 1165 11B1; # (쩖; 쩖; 쩖; 쩖; 쩖; ) HANGUL SYLLABLE JJEOLM
+CA57;CA57;110D 1165 11B2;CA57;110D 1165 11B2; # (쩗; 쩗; 쩗; 쩗; 쩗; ) HANGUL SYLLABLE JJEOLB
+CA58;CA58;110D 1165 11B3;CA58;110D 1165 11B3; # (쩘; 쩘; 쩘; 쩘; 쩘; ) HANGUL SYLLABLE JJEOLS
+CA59;CA59;110D 1165 11B4;CA59;110D 1165 11B4; # (쩙; 쩙; 쩙; 쩙; 쩙; ) HANGUL SYLLABLE JJEOLT
+CA5A;CA5A;110D 1165 11B5;CA5A;110D 1165 11B5; # (쩚; 쩚; 쩚; 쩚; 쩚; ) HANGUL SYLLABLE JJEOLP
+CA5B;CA5B;110D 1165 11B6;CA5B;110D 1165 11B6; # (쩛; 쩛; 쩛; 쩛; 쩛; ) HANGUL SYLLABLE JJEOLH
+CA5C;CA5C;110D 1165 11B7;CA5C;110D 1165 11B7; # (쩜; 쩜; 쩜; 쩜; 쩜; ) HANGUL SYLLABLE JJEOM
+CA5D;CA5D;110D 1165 11B8;CA5D;110D 1165 11B8; # (쩝; 쩝; 쩝; 쩝; 쩝; ) HANGUL SYLLABLE JJEOB
+CA5E;CA5E;110D 1165 11B9;CA5E;110D 1165 11B9; # (쩞; 쩞; 쩞; 쩞; 쩞; ) HANGUL SYLLABLE JJEOBS
+CA5F;CA5F;110D 1165 11BA;CA5F;110D 1165 11BA; # (쩟; 쩟; 쩟; 쩟; 쩟; ) HANGUL SYLLABLE JJEOS
+CA60;CA60;110D 1165 11BB;CA60;110D 1165 11BB; # (쩠; 쩠; 쩠; 쩠; 쩠; ) HANGUL SYLLABLE JJEOSS
+CA61;CA61;110D 1165 11BC;CA61;110D 1165 11BC; # (쩡; 쩡; 쩡; 쩡; 쩡; ) HANGUL SYLLABLE JJEONG
+CA62;CA62;110D 1165 11BD;CA62;110D 1165 11BD; # (쩢; 쩢; 쩢; 쩢; 쩢; ) HANGUL SYLLABLE JJEOJ
+CA63;CA63;110D 1165 11BE;CA63;110D 1165 11BE; # (쩣; 쩣; 쩣; 쩣; 쩣; ) HANGUL SYLLABLE JJEOC
+CA64;CA64;110D 1165 11BF;CA64;110D 1165 11BF; # (쩤; 쩤; 쩤; 쩤; 쩤; ) HANGUL SYLLABLE JJEOK
+CA65;CA65;110D 1165 11C0;CA65;110D 1165 11C0; # (쩥; 쩥; 쩥; 쩥; 쩥; ) HANGUL SYLLABLE JJEOT
+CA66;CA66;110D 1165 11C1;CA66;110D 1165 11C1; # (쩦; 쩦; 쩦; 쩦; 쩦; ) HANGUL SYLLABLE JJEOP
+CA67;CA67;110D 1165 11C2;CA67;110D 1165 11C2; # (쩧; 쩧; 쩧; 쩧; 쩧; ) HANGUL SYLLABLE JJEOH
+CA68;CA68;110D 1166;CA68;110D 1166; # (쩨; 쩨; 쩨; 쩨; 쩨; ) HANGUL SYLLABLE JJE
+CA69;CA69;110D 1166 11A8;CA69;110D 1166 11A8; # (쩩; 쩩; 쩩; 쩩; 쩩; ) HANGUL SYLLABLE JJEG
+CA6A;CA6A;110D 1166 11A9;CA6A;110D 1166 11A9; # (쩪; 쩪; 쩪; 쩪; 쩪; ) HANGUL SYLLABLE JJEGG
+CA6B;CA6B;110D 1166 11AA;CA6B;110D 1166 11AA; # (쩫; 쩫; 쩫; 쩫; 쩫; ) HANGUL SYLLABLE JJEGS
+CA6C;CA6C;110D 1166 11AB;CA6C;110D 1166 11AB; # (쩬; 쩬; 쩬; 쩬; 쩬; ) HANGUL SYLLABLE JJEN
+CA6D;CA6D;110D 1166 11AC;CA6D;110D 1166 11AC; # (쩭; 쩭; 쩭; 쩭; 쩭; ) HANGUL SYLLABLE JJENJ
+CA6E;CA6E;110D 1166 11AD;CA6E;110D 1166 11AD; # (쩮; 쩮; 쩮; 쩮; 쩮; ) HANGUL SYLLABLE JJENH
+CA6F;CA6F;110D 1166 11AE;CA6F;110D 1166 11AE; # (쩯; 쩯; 쩯; 쩯; 쩯; ) HANGUL SYLLABLE JJED
+CA70;CA70;110D 1166 11AF;CA70;110D 1166 11AF; # (쩰; 쩰; 쩰; 쩰; 쩰; ) HANGUL SYLLABLE JJEL
+CA71;CA71;110D 1166 11B0;CA71;110D 1166 11B0; # (쩱; 쩱; 쩱; 쩱; 쩱; ) HANGUL SYLLABLE JJELG
+CA72;CA72;110D 1166 11B1;CA72;110D 1166 11B1; # (쩲; 쩲; 쩲; 쩲; 쩲; ) HANGUL SYLLABLE JJELM
+CA73;CA73;110D 1166 11B2;CA73;110D 1166 11B2; # (쩳; 쩳; 쩳; 쩳; 쩳; ) HANGUL SYLLABLE JJELB
+CA74;CA74;110D 1166 11B3;CA74;110D 1166 11B3; # (쩴; 쩴; 쩴; 쩴; 쩴; ) HANGUL SYLLABLE JJELS
+CA75;CA75;110D 1166 11B4;CA75;110D 1166 11B4; # (쩵; 쩵; 쩵; 쩵; 쩵; ) HANGUL SYLLABLE JJELT
+CA76;CA76;110D 1166 11B5;CA76;110D 1166 11B5; # (쩶; 쩶; 쩶; 쩶; 쩶; ) HANGUL SYLLABLE JJELP
+CA77;CA77;110D 1166 11B6;CA77;110D 1166 11B6; # (쩷; 쩷; 쩷; 쩷; 쩷; ) HANGUL SYLLABLE JJELH
+CA78;CA78;110D 1166 11B7;CA78;110D 1166 11B7; # (쩸; 쩸; 쩸; 쩸; 쩸; ) HANGUL SYLLABLE JJEM
+CA79;CA79;110D 1166 11B8;CA79;110D 1166 11B8; # (쩹; 쩹; 쩹; 쩹; 쩹; ) HANGUL SYLLABLE JJEB
+CA7A;CA7A;110D 1166 11B9;CA7A;110D 1166 11B9; # (쩺; 쩺; 쩺; 쩺; 쩺; ) HANGUL SYLLABLE JJEBS
+CA7B;CA7B;110D 1166 11BA;CA7B;110D 1166 11BA; # (쩻; 쩻; 쩻; 쩻; 쩻; ) HANGUL SYLLABLE JJES
+CA7C;CA7C;110D 1166 11BB;CA7C;110D 1166 11BB; # (쩼; 쩼; 쩼; 쩼; 쩼; ) HANGUL SYLLABLE JJESS
+CA7D;CA7D;110D 1166 11BC;CA7D;110D 1166 11BC; # (쩽; 쩽; 쩽; 쩽; 쩽; ) HANGUL SYLLABLE JJENG
+CA7E;CA7E;110D 1166 11BD;CA7E;110D 1166 11BD; # (쩾; 쩾; 쩾; 쩾; 쩾; ) HANGUL SYLLABLE JJEJ
+CA7F;CA7F;110D 1166 11BE;CA7F;110D 1166 11BE; # (쩿; 쩿; 쩿; 쩿; 쩿; ) HANGUL SYLLABLE JJEC
+CA80;CA80;110D 1166 11BF;CA80;110D 1166 11BF; # (쪀; 쪀; 쪀; 쪀; 쪀; ) HANGUL SYLLABLE JJEK
+CA81;CA81;110D 1166 11C0;CA81;110D 1166 11C0; # (쪁; 쪁; 쪁; 쪁; 쪁; ) HANGUL SYLLABLE JJET
+CA82;CA82;110D 1166 11C1;CA82;110D 1166 11C1; # (쪂; 쪂; 쪂; 쪂; 쪂; ) HANGUL SYLLABLE JJEP
+CA83;CA83;110D 1166 11C2;CA83;110D 1166 11C2; # (쪃; 쪃; 쪃; 쪃; 쪃; ) HANGUL SYLLABLE JJEH
+CA84;CA84;110D 1167;CA84;110D 1167; # (쪄; 쪄; 쪄; 쪄; 쪄; ) HANGUL SYLLABLE JJYEO
+CA85;CA85;110D 1167 11A8;CA85;110D 1167 11A8; # (쪅; 쪅; 쪅; 쪅; 쪅; ) HANGUL SYLLABLE JJYEOG
+CA86;CA86;110D 1167 11A9;CA86;110D 1167 11A9; # (쪆; 쪆; 쪆; 쪆; 쪆; ) HANGUL SYLLABLE JJYEOGG
+CA87;CA87;110D 1167 11AA;CA87;110D 1167 11AA; # (쪇; 쪇; 쪇; 쪇; 쪇; ) HANGUL SYLLABLE JJYEOGS
+CA88;CA88;110D 1167 11AB;CA88;110D 1167 11AB; # (쪈; 쪈; 쪈; 쪈; 쪈; ) HANGUL SYLLABLE JJYEON
+CA89;CA89;110D 1167 11AC;CA89;110D 1167 11AC; # (쪉; 쪉; 쪉; 쪉; 쪉; ) HANGUL SYLLABLE JJYEONJ
+CA8A;CA8A;110D 1167 11AD;CA8A;110D 1167 11AD; # (쪊; 쪊; 쪊; 쪊; 쪊; ) HANGUL SYLLABLE JJYEONH
+CA8B;CA8B;110D 1167 11AE;CA8B;110D 1167 11AE; # (쪋; 쪋; 쪋; 쪋; 쪋; ) HANGUL SYLLABLE JJYEOD
+CA8C;CA8C;110D 1167 11AF;CA8C;110D 1167 11AF; # (쪌; 쪌; 쪌; 쪌; 쪌; ) HANGUL SYLLABLE JJYEOL
+CA8D;CA8D;110D 1167 11B0;CA8D;110D 1167 11B0; # (쪍; 쪍; 쪍; 쪍; 쪍; ) HANGUL SYLLABLE JJYEOLG
+CA8E;CA8E;110D 1167 11B1;CA8E;110D 1167 11B1; # (쪎; 쪎; 쪎; 쪎; 쪎; ) HANGUL SYLLABLE JJYEOLM
+CA8F;CA8F;110D 1167 11B2;CA8F;110D 1167 11B2; # (쪏; 쪏; 쪏; 쪏; 쪏; ) HANGUL SYLLABLE JJYEOLB
+CA90;CA90;110D 1167 11B3;CA90;110D 1167 11B3; # (쪐; 쪐; 쪐; 쪐; 쪐; ) HANGUL SYLLABLE JJYEOLS
+CA91;CA91;110D 1167 11B4;CA91;110D 1167 11B4; # (쪑; 쪑; 쪑; 쪑; 쪑; ) HANGUL SYLLABLE JJYEOLT
+CA92;CA92;110D 1167 11B5;CA92;110D 1167 11B5; # (쪒; 쪒; 쪒; 쪒; 쪒; ) HANGUL SYLLABLE JJYEOLP
+CA93;CA93;110D 1167 11B6;CA93;110D 1167 11B6; # (쪓; 쪓; 쪓; 쪓; 쪓; ) HANGUL SYLLABLE JJYEOLH
+CA94;CA94;110D 1167 11B7;CA94;110D 1167 11B7; # (쪔; 쪔; 쪔; 쪔; 쪔; ) HANGUL SYLLABLE JJYEOM
+CA95;CA95;110D 1167 11B8;CA95;110D 1167 11B8; # (쪕; 쪕; 쪕; 쪕; 쪕; ) HANGUL SYLLABLE JJYEOB
+CA96;CA96;110D 1167 11B9;CA96;110D 1167 11B9; # (쪖; 쪖; 쪖; 쪖; 쪖; ) HANGUL SYLLABLE JJYEOBS
+CA97;CA97;110D 1167 11BA;CA97;110D 1167 11BA; # (쪗; 쪗; 쪗; 쪗; 쪗; ) HANGUL SYLLABLE JJYEOS
+CA98;CA98;110D 1167 11BB;CA98;110D 1167 11BB; # (쪘; 쪘; 쪘; 쪘; 쪘; ) HANGUL SYLLABLE JJYEOSS
+CA99;CA99;110D 1167 11BC;CA99;110D 1167 11BC; # (쪙; 쪙; 쪙; 쪙; 쪙; ) HANGUL SYLLABLE JJYEONG
+CA9A;CA9A;110D 1167 11BD;CA9A;110D 1167 11BD; # (쪚; 쪚; 쪚; 쪚; 쪚; ) HANGUL SYLLABLE JJYEOJ
+CA9B;CA9B;110D 1167 11BE;CA9B;110D 1167 11BE; # (쪛; 쪛; 쪛; 쪛; 쪛; ) HANGUL SYLLABLE JJYEOC
+CA9C;CA9C;110D 1167 11BF;CA9C;110D 1167 11BF; # (쪜; 쪜; 쪜; 쪜; 쪜; ) HANGUL SYLLABLE JJYEOK
+CA9D;CA9D;110D 1167 11C0;CA9D;110D 1167 11C0; # (쪝; 쪝; 쪝; 쪝; 쪝; ) HANGUL SYLLABLE JJYEOT
+CA9E;CA9E;110D 1167 11C1;CA9E;110D 1167 11C1; # (쪞; 쪞; 쪞; 쪞; 쪞; ) HANGUL SYLLABLE JJYEOP
+CA9F;CA9F;110D 1167 11C2;CA9F;110D 1167 11C2; # (쪟; 쪟; 쪟; 쪟; 쪟; ) HANGUL SYLLABLE JJYEOH
+CAA0;CAA0;110D 1168;CAA0;110D 1168; # (쪠; 쪠; 쪠; 쪠; 쪠; ) HANGUL SYLLABLE JJYE
+CAA1;CAA1;110D 1168 11A8;CAA1;110D 1168 11A8; # (쪡; 쪡; 쪡; 쪡; 쪡; ) HANGUL SYLLABLE JJYEG
+CAA2;CAA2;110D 1168 11A9;CAA2;110D 1168 11A9; # (쪢; 쪢; 쪢; 쪢; 쪢; ) HANGUL SYLLABLE JJYEGG
+CAA3;CAA3;110D 1168 11AA;CAA3;110D 1168 11AA; # (쪣; 쪣; 쪣; 쪣; 쪣; ) HANGUL SYLLABLE JJYEGS
+CAA4;CAA4;110D 1168 11AB;CAA4;110D 1168 11AB; # (쪤; 쪤; 쪤; 쪤; 쪤; ) HANGUL SYLLABLE JJYEN
+CAA5;CAA5;110D 1168 11AC;CAA5;110D 1168 11AC; # (쪥; 쪥; 쪥; 쪥; 쪥; ) HANGUL SYLLABLE JJYENJ
+CAA6;CAA6;110D 1168 11AD;CAA6;110D 1168 11AD; # (쪦; 쪦; 쪦; 쪦; 쪦; ) HANGUL SYLLABLE JJYENH
+CAA7;CAA7;110D 1168 11AE;CAA7;110D 1168 11AE; # (쪧; 쪧; 쪧; 쪧; 쪧; ) HANGUL SYLLABLE JJYED
+CAA8;CAA8;110D 1168 11AF;CAA8;110D 1168 11AF; # (쪨; 쪨; 쪨; 쪨; 쪨; ) HANGUL SYLLABLE JJYEL
+CAA9;CAA9;110D 1168 11B0;CAA9;110D 1168 11B0; # (쪩; 쪩; 쪩; 쪩; 쪩; ) HANGUL SYLLABLE JJYELG
+CAAA;CAAA;110D 1168 11B1;CAAA;110D 1168 11B1; # (쪪; 쪪; 쪪; 쪪; 쪪; ) HANGUL SYLLABLE JJYELM
+CAAB;CAAB;110D 1168 11B2;CAAB;110D 1168 11B2; # (쪫; 쪫; 쪫; 쪫; 쪫; ) HANGUL SYLLABLE JJYELB
+CAAC;CAAC;110D 1168 11B3;CAAC;110D 1168 11B3; # (쪬; 쪬; 쪬; 쪬; 쪬; ) HANGUL SYLLABLE JJYELS
+CAAD;CAAD;110D 1168 11B4;CAAD;110D 1168 11B4; # (쪭; 쪭; 쪭; 쪭; 쪭; ) HANGUL SYLLABLE JJYELT
+CAAE;CAAE;110D 1168 11B5;CAAE;110D 1168 11B5; # (쪮; 쪮; 쪮; 쪮; 쪮; ) HANGUL SYLLABLE JJYELP
+CAAF;CAAF;110D 1168 11B6;CAAF;110D 1168 11B6; # (쪯; 쪯; 쪯; 쪯; 쪯; ) HANGUL SYLLABLE JJYELH
+CAB0;CAB0;110D 1168 11B7;CAB0;110D 1168 11B7; # (쪰; 쪰; 쪰; 쪰; 쪰; ) HANGUL SYLLABLE JJYEM
+CAB1;CAB1;110D 1168 11B8;CAB1;110D 1168 11B8; # (쪱; 쪱; 쪱; 쪱; 쪱; ) HANGUL SYLLABLE JJYEB
+CAB2;CAB2;110D 1168 11B9;CAB2;110D 1168 11B9; # (쪲; 쪲; 쪲; 쪲; 쪲; ) HANGUL SYLLABLE JJYEBS
+CAB3;CAB3;110D 1168 11BA;CAB3;110D 1168 11BA; # (쪳; 쪳; 쪳; 쪳; 쪳; ) HANGUL SYLLABLE JJYES
+CAB4;CAB4;110D 1168 11BB;CAB4;110D 1168 11BB; # (쪴; 쪴; 쪴; 쪴; 쪴; ) HANGUL SYLLABLE JJYESS
+CAB5;CAB5;110D 1168 11BC;CAB5;110D 1168 11BC; # (쪵; 쪵; 쪵; 쪵; 쪵; ) HANGUL SYLLABLE JJYENG
+CAB6;CAB6;110D 1168 11BD;CAB6;110D 1168 11BD; # (쪶; 쪶; 쪶; 쪶; 쪶; ) HANGUL SYLLABLE JJYEJ
+CAB7;CAB7;110D 1168 11BE;CAB7;110D 1168 11BE; # (쪷; 쪷; 쪷; 쪷; 쪷; ) HANGUL SYLLABLE JJYEC
+CAB8;CAB8;110D 1168 11BF;CAB8;110D 1168 11BF; # (쪸; 쪸; 쪸; 쪸; 쪸; ) HANGUL SYLLABLE JJYEK
+CAB9;CAB9;110D 1168 11C0;CAB9;110D 1168 11C0; # (쪹; 쪹; 쪹; 쪹; 쪹; ) HANGUL SYLLABLE JJYET
+CABA;CABA;110D 1168 11C1;CABA;110D 1168 11C1; # (쪺; 쪺; 쪺; 쪺; 쪺; ) HANGUL SYLLABLE JJYEP
+CABB;CABB;110D 1168 11C2;CABB;110D 1168 11C2; # (쪻; 쪻; 쪻; 쪻; 쪻; ) HANGUL SYLLABLE JJYEH
+CABC;CABC;110D 1169;CABC;110D 1169; # (쪼; 쪼; 쪼; 쪼; 쪼; ) HANGUL SYLLABLE JJO
+CABD;CABD;110D 1169 11A8;CABD;110D 1169 11A8; # (쪽; 쪽; 쪽; 쪽; 쪽; ) HANGUL SYLLABLE JJOG
+CABE;CABE;110D 1169 11A9;CABE;110D 1169 11A9; # (쪾; 쪾; 쪾; 쪾; 쪾; ) HANGUL SYLLABLE JJOGG
+CABF;CABF;110D 1169 11AA;CABF;110D 1169 11AA; # (쪿; 쪿; 쪿; 쪿; 쪿; ) HANGUL SYLLABLE JJOGS
+CAC0;CAC0;110D 1169 11AB;CAC0;110D 1169 11AB; # (쫀; 쫀; 쫀; 쫀; 쫀; ) HANGUL SYLLABLE JJON
+CAC1;CAC1;110D 1169 11AC;CAC1;110D 1169 11AC; # (쫁; 쫁; 쫁; 쫁; 쫁; ) HANGUL SYLLABLE JJONJ
+CAC2;CAC2;110D 1169 11AD;CAC2;110D 1169 11AD; # (쫂; 쫂; 쫂; 쫂; 쫂; ) HANGUL SYLLABLE JJONH
+CAC3;CAC3;110D 1169 11AE;CAC3;110D 1169 11AE; # (쫃; 쫃; 쫃; 쫃; 쫃; ) HANGUL SYLLABLE JJOD
+CAC4;CAC4;110D 1169 11AF;CAC4;110D 1169 11AF; # (쫄; 쫄; 쫄; 쫄; 쫄; ) HANGUL SYLLABLE JJOL
+CAC5;CAC5;110D 1169 11B0;CAC5;110D 1169 11B0; # (쫅; 쫅; 쫅; 쫅; 쫅; ) HANGUL SYLLABLE JJOLG
+CAC6;CAC6;110D 1169 11B1;CAC6;110D 1169 11B1; # (쫆; 쫆; 쫆; 쫆; 쫆; ) HANGUL SYLLABLE JJOLM
+CAC7;CAC7;110D 1169 11B2;CAC7;110D 1169 11B2; # (쫇; 쫇; 쫇; 쫇; 쫇; ) HANGUL SYLLABLE JJOLB
+CAC8;CAC8;110D 1169 11B3;CAC8;110D 1169 11B3; # (쫈; 쫈; 쫈; 쫈; 쫈; ) HANGUL SYLLABLE JJOLS
+CAC9;CAC9;110D 1169 11B4;CAC9;110D 1169 11B4; # (쫉; 쫉; 쫉; 쫉; 쫉; ) HANGUL SYLLABLE JJOLT
+CACA;CACA;110D 1169 11B5;CACA;110D 1169 11B5; # (쫊; 쫊; 쫊; 쫊; 쫊; ) HANGUL SYLLABLE JJOLP
+CACB;CACB;110D 1169 11B6;CACB;110D 1169 11B6; # (쫋; 쫋; 쫋; 쫋; 쫋; ) HANGUL SYLLABLE JJOLH
+CACC;CACC;110D 1169 11B7;CACC;110D 1169 11B7; # (쫌; 쫌; 쫌; 쫌; 쫌; ) HANGUL SYLLABLE JJOM
+CACD;CACD;110D 1169 11B8;CACD;110D 1169 11B8; # (쫍; 쫍; 쫍; 쫍; 쫍; ) HANGUL SYLLABLE JJOB
+CACE;CACE;110D 1169 11B9;CACE;110D 1169 11B9; # (쫎; 쫎; 쫎; 쫎; 쫎; ) HANGUL SYLLABLE JJOBS
+CACF;CACF;110D 1169 11BA;CACF;110D 1169 11BA; # (쫏; 쫏; 쫏; 쫏; 쫏; ) HANGUL SYLLABLE JJOS
+CAD0;CAD0;110D 1169 11BB;CAD0;110D 1169 11BB; # (쫐; 쫐; 쫐; 쫐; 쫐; ) HANGUL SYLLABLE JJOSS
+CAD1;CAD1;110D 1169 11BC;CAD1;110D 1169 11BC; # (쫑; 쫑; 쫑; 쫑; 쫑; ) HANGUL SYLLABLE JJONG
+CAD2;CAD2;110D 1169 11BD;CAD2;110D 1169 11BD; # (쫒; 쫒; 쫒; 쫒; 쫒; ) HANGUL SYLLABLE JJOJ
+CAD3;CAD3;110D 1169 11BE;CAD3;110D 1169 11BE; # (쫓; 쫓; 쫓; 쫓; 쫓; ) HANGUL SYLLABLE JJOC
+CAD4;CAD4;110D 1169 11BF;CAD4;110D 1169 11BF; # (쫔; 쫔; 쫔; 쫔; 쫔; ) HANGUL SYLLABLE JJOK
+CAD5;CAD5;110D 1169 11C0;CAD5;110D 1169 11C0; # (쫕; 쫕; 쫕; 쫕; 쫕; ) HANGUL SYLLABLE JJOT
+CAD6;CAD6;110D 1169 11C1;CAD6;110D 1169 11C1; # (쫖; 쫖; 쫖; 쫖; 쫖; ) HANGUL SYLLABLE JJOP
+CAD7;CAD7;110D 1169 11C2;CAD7;110D 1169 11C2; # (쫗; 쫗; 쫗; 쫗; 쫗; ) HANGUL SYLLABLE JJOH
+CAD8;CAD8;110D 116A;CAD8;110D 116A; # (쫘; 쫘; 쫘; 쫘; 쫘; ) HANGUL SYLLABLE JJWA
+CAD9;CAD9;110D 116A 11A8;CAD9;110D 116A 11A8; # (쫙; 쫙; 쫙; 쫙; 쫙; ) HANGUL SYLLABLE JJWAG
+CADA;CADA;110D 116A 11A9;CADA;110D 116A 11A9; # (쫚; 쫚; 쫚; 쫚; 쫚; ) HANGUL SYLLABLE JJWAGG
+CADB;CADB;110D 116A 11AA;CADB;110D 116A 11AA; # (쫛; 쫛; 쫛; 쫛; 쫛; ) HANGUL SYLLABLE JJWAGS
+CADC;CADC;110D 116A 11AB;CADC;110D 116A 11AB; # (쫜; 쫜; 쫜; 쫜; 쫜; ) HANGUL SYLLABLE JJWAN
+CADD;CADD;110D 116A 11AC;CADD;110D 116A 11AC; # (쫝; 쫝; 쫝; 쫝; 쫝; ) HANGUL SYLLABLE JJWANJ
+CADE;CADE;110D 116A 11AD;CADE;110D 116A 11AD; # (쫞; 쫞; 쫞; 쫞; 쫞; ) HANGUL SYLLABLE JJWANH
+CADF;CADF;110D 116A 11AE;CADF;110D 116A 11AE; # (쫟; 쫟; 쫟; 쫟; 쫟; ) HANGUL SYLLABLE JJWAD
+CAE0;CAE0;110D 116A 11AF;CAE0;110D 116A 11AF; # (쫠; 쫠; 쫠; 쫠; 쫠; ) HANGUL SYLLABLE JJWAL
+CAE1;CAE1;110D 116A 11B0;CAE1;110D 116A 11B0; # (쫡; 쫡; 쫡; 쫡; 쫡; ) HANGUL SYLLABLE JJWALG
+CAE2;CAE2;110D 116A 11B1;CAE2;110D 116A 11B1; # (쫢; 쫢; 쫢; 쫢; 쫢; ) HANGUL SYLLABLE JJWALM
+CAE3;CAE3;110D 116A 11B2;CAE3;110D 116A 11B2; # (쫣; 쫣; 쫣; 쫣; 쫣; ) HANGUL SYLLABLE JJWALB
+CAE4;CAE4;110D 116A 11B3;CAE4;110D 116A 11B3; # (쫤; 쫤; 쫤; 쫤; 쫤; ) HANGUL SYLLABLE JJWALS
+CAE5;CAE5;110D 116A 11B4;CAE5;110D 116A 11B4; # (쫥; 쫥; 쫥; 쫥; 쫥; ) HANGUL SYLLABLE JJWALT
+CAE6;CAE6;110D 116A 11B5;CAE6;110D 116A 11B5; # (쫦; 쫦; 쫦; 쫦; 쫦; ) HANGUL SYLLABLE JJWALP
+CAE7;CAE7;110D 116A 11B6;CAE7;110D 116A 11B6; # (쫧; 쫧; 쫧; 쫧; 쫧; ) HANGUL SYLLABLE JJWALH
+CAE8;CAE8;110D 116A 11B7;CAE8;110D 116A 11B7; # (쫨; 쫨; 쫨; 쫨; 쫨; ) HANGUL SYLLABLE JJWAM
+CAE9;CAE9;110D 116A 11B8;CAE9;110D 116A 11B8; # (쫩; 쫩; 쫩; 쫩; 쫩; ) HANGUL SYLLABLE JJWAB
+CAEA;CAEA;110D 116A 11B9;CAEA;110D 116A 11B9; # (쫪; 쫪; 쫪; 쫪; 쫪; ) HANGUL SYLLABLE JJWABS
+CAEB;CAEB;110D 116A 11BA;CAEB;110D 116A 11BA; # (쫫; 쫫; 쫫; 쫫; 쫫; ) HANGUL SYLLABLE JJWAS
+CAEC;CAEC;110D 116A 11BB;CAEC;110D 116A 11BB; # (쫬; 쫬; 쫬; 쫬; 쫬; ) HANGUL SYLLABLE JJWASS
+CAED;CAED;110D 116A 11BC;CAED;110D 116A 11BC; # (쫭; 쫭; 쫭; 쫭; 쫭; ) HANGUL SYLLABLE JJWANG
+CAEE;CAEE;110D 116A 11BD;CAEE;110D 116A 11BD; # (쫮; 쫮; 쫮; 쫮; 쫮; ) HANGUL SYLLABLE JJWAJ
+CAEF;CAEF;110D 116A 11BE;CAEF;110D 116A 11BE; # (쫯; 쫯; 쫯; 쫯; 쫯; ) HANGUL SYLLABLE JJWAC
+CAF0;CAF0;110D 116A 11BF;CAF0;110D 116A 11BF; # (쫰; 쫰; 쫰; 쫰; 쫰; ) HANGUL SYLLABLE JJWAK
+CAF1;CAF1;110D 116A 11C0;CAF1;110D 116A 11C0; # (쫱; 쫱; 쫱; 쫱; 쫱; ) HANGUL SYLLABLE JJWAT
+CAF2;CAF2;110D 116A 11C1;CAF2;110D 116A 11C1; # (쫲; 쫲; 쫲; 쫲; 쫲; ) HANGUL SYLLABLE JJWAP
+CAF3;CAF3;110D 116A 11C2;CAF3;110D 116A 11C2; # (쫳; 쫳; 쫳; 쫳; 쫳; ) HANGUL SYLLABLE JJWAH
+CAF4;CAF4;110D 116B;CAF4;110D 116B; # (쫴; 쫴; 쫴; 쫴; 쫴; ) HANGUL SYLLABLE JJWAE
+CAF5;CAF5;110D 116B 11A8;CAF5;110D 116B 11A8; # (쫵; 쫵; 쫵; 쫵; 쫵; ) HANGUL SYLLABLE JJWAEG
+CAF6;CAF6;110D 116B 11A9;CAF6;110D 116B 11A9; # (쫶; 쫶; 쫶; 쫶; 쫶; ) HANGUL SYLLABLE JJWAEGG
+CAF7;CAF7;110D 116B 11AA;CAF7;110D 116B 11AA; # (쫷; 쫷; 쫷; 쫷; 쫷; ) HANGUL SYLLABLE JJWAEGS
+CAF8;CAF8;110D 116B 11AB;CAF8;110D 116B 11AB; # (쫸; 쫸; 쫸; 쫸; 쫸; ) HANGUL SYLLABLE JJWAEN
+CAF9;CAF9;110D 116B 11AC;CAF9;110D 116B 11AC; # (쫹; 쫹; 쫹; 쫹; 쫹; ) HANGUL SYLLABLE JJWAENJ
+CAFA;CAFA;110D 116B 11AD;CAFA;110D 116B 11AD; # (쫺; 쫺; 쫺; 쫺; 쫺; ) HANGUL SYLLABLE JJWAENH
+CAFB;CAFB;110D 116B 11AE;CAFB;110D 116B 11AE; # (쫻; 쫻; 쫻; 쫻; 쫻; ) HANGUL SYLLABLE JJWAED
+CAFC;CAFC;110D 116B 11AF;CAFC;110D 116B 11AF; # (쫼; 쫼; 쫼; 쫼; 쫼; ) HANGUL SYLLABLE JJWAEL
+CAFD;CAFD;110D 116B 11B0;CAFD;110D 116B 11B0; # (쫽; 쫽; 쫽; 쫽; 쫽; ) HANGUL SYLLABLE JJWAELG
+CAFE;CAFE;110D 116B 11B1;CAFE;110D 116B 11B1; # (쫾; 쫾; 쫾; 쫾; 쫾; ) HANGUL SYLLABLE JJWAELM
+CAFF;CAFF;110D 116B 11B2;CAFF;110D 116B 11B2; # (쫿; 쫿; 쫿; 쫿; 쫿; ) HANGUL SYLLABLE JJWAELB
+CB00;CB00;110D 116B 11B3;CB00;110D 116B 11B3; # (쬀; 쬀; 쬀; 쬀; 쬀; ) HANGUL SYLLABLE JJWAELS
+CB01;CB01;110D 116B 11B4;CB01;110D 116B 11B4; # (쬁; 쬁; 쬁; 쬁; 쬁; ) HANGUL SYLLABLE JJWAELT
+CB02;CB02;110D 116B 11B5;CB02;110D 116B 11B5; # (쬂; 쬂; 쬂; 쬂; 쬂; ) HANGUL SYLLABLE JJWAELP
+CB03;CB03;110D 116B 11B6;CB03;110D 116B 11B6; # (쬃; 쬃; 쬃; 쬃; 쬃; ) HANGUL SYLLABLE JJWAELH
+CB04;CB04;110D 116B 11B7;CB04;110D 116B 11B7; # (쬄; 쬄; 쬄; 쬄; 쬄; ) HANGUL SYLLABLE JJWAEM
+CB05;CB05;110D 116B 11B8;CB05;110D 116B 11B8; # (쬅; 쬅; 쬅; 쬅; 쬅; ) HANGUL SYLLABLE JJWAEB
+CB06;CB06;110D 116B 11B9;CB06;110D 116B 11B9; # (쬆; 쬆; 쬆; 쬆; 쬆; ) HANGUL SYLLABLE JJWAEBS
+CB07;CB07;110D 116B 11BA;CB07;110D 116B 11BA; # (쬇; 쬇; 쬇; 쬇; 쬇; ) HANGUL SYLLABLE JJWAES
+CB08;CB08;110D 116B 11BB;CB08;110D 116B 11BB; # (쬈; 쬈; 쬈; 쬈; 쬈; ) HANGUL SYLLABLE JJWAESS
+CB09;CB09;110D 116B 11BC;CB09;110D 116B 11BC; # (쬉; 쬉; 쬉; 쬉; 쬉; ) HANGUL SYLLABLE JJWAENG
+CB0A;CB0A;110D 116B 11BD;CB0A;110D 116B 11BD; # (쬊; 쬊; 쬊; 쬊; 쬊; ) HANGUL SYLLABLE JJWAEJ
+CB0B;CB0B;110D 116B 11BE;CB0B;110D 116B 11BE; # (쬋; 쬋; 쬋; 쬋; 쬋; ) HANGUL SYLLABLE JJWAEC
+CB0C;CB0C;110D 116B 11BF;CB0C;110D 116B 11BF; # (쬌; 쬌; 쬌; 쬌; 쬌; ) HANGUL SYLLABLE JJWAEK
+CB0D;CB0D;110D 116B 11C0;CB0D;110D 116B 11C0; # (쬍; 쬍; 쬍; 쬍; 쬍; ) HANGUL SYLLABLE JJWAET
+CB0E;CB0E;110D 116B 11C1;CB0E;110D 116B 11C1; # (쬎; 쬎; 쬎; 쬎; 쬎; ) HANGUL SYLLABLE JJWAEP
+CB0F;CB0F;110D 116B 11C2;CB0F;110D 116B 11C2; # (쬏; 쬏; 쬏; 쬏; 쬏; ) HANGUL SYLLABLE JJWAEH
+CB10;CB10;110D 116C;CB10;110D 116C; # (쬐; 쬐; 쬐; 쬐; 쬐; ) HANGUL SYLLABLE JJOE
+CB11;CB11;110D 116C 11A8;CB11;110D 116C 11A8; # (쬑; 쬑; 쬑; 쬑; 쬑; ) HANGUL SYLLABLE JJOEG
+CB12;CB12;110D 116C 11A9;CB12;110D 116C 11A9; # (쬒; 쬒; 쬒; 쬒; 쬒; ) HANGUL SYLLABLE JJOEGG
+CB13;CB13;110D 116C 11AA;CB13;110D 116C 11AA; # (쬓; 쬓; 쬓; 쬓; 쬓; ) HANGUL SYLLABLE JJOEGS
+CB14;CB14;110D 116C 11AB;CB14;110D 116C 11AB; # (쬔; 쬔; 쬔; 쬔; 쬔; ) HANGUL SYLLABLE JJOEN
+CB15;CB15;110D 116C 11AC;CB15;110D 116C 11AC; # (쬕; 쬕; 쬕; 쬕; 쬕; ) HANGUL SYLLABLE JJOENJ
+CB16;CB16;110D 116C 11AD;CB16;110D 116C 11AD; # (쬖; 쬖; 쬖; 쬖; 쬖; ) HANGUL SYLLABLE JJOENH
+CB17;CB17;110D 116C 11AE;CB17;110D 116C 11AE; # (쬗; 쬗; 쬗; 쬗; 쬗; ) HANGUL SYLLABLE JJOED
+CB18;CB18;110D 116C 11AF;CB18;110D 116C 11AF; # (쬘; 쬘; 쬘; 쬘; 쬘; ) HANGUL SYLLABLE JJOEL
+CB19;CB19;110D 116C 11B0;CB19;110D 116C 11B0; # (쬙; 쬙; 쬙; 쬙; 쬙; ) HANGUL SYLLABLE JJOELG
+CB1A;CB1A;110D 116C 11B1;CB1A;110D 116C 11B1; # (쬚; 쬚; 쬚; 쬚; 쬚; ) HANGUL SYLLABLE JJOELM
+CB1B;CB1B;110D 116C 11B2;CB1B;110D 116C 11B2; # (쬛; 쬛; 쬛; 쬛; 쬛; ) HANGUL SYLLABLE JJOELB
+CB1C;CB1C;110D 116C 11B3;CB1C;110D 116C 11B3; # (쬜; 쬜; 쬜; 쬜; 쬜; ) HANGUL SYLLABLE JJOELS
+CB1D;CB1D;110D 116C 11B4;CB1D;110D 116C 11B4; # (쬝; 쬝; 쬝; 쬝; 쬝; ) HANGUL SYLLABLE JJOELT
+CB1E;CB1E;110D 116C 11B5;CB1E;110D 116C 11B5; # (쬞; 쬞; 쬞; 쬞; 쬞; ) HANGUL SYLLABLE JJOELP
+CB1F;CB1F;110D 116C 11B6;CB1F;110D 116C 11B6; # (쬟; 쬟; 쬟; 쬟; 쬟; ) HANGUL SYLLABLE JJOELH
+CB20;CB20;110D 116C 11B7;CB20;110D 116C 11B7; # (쬠; 쬠; 쬠; 쬠; 쬠; ) HANGUL SYLLABLE JJOEM
+CB21;CB21;110D 116C 11B8;CB21;110D 116C 11B8; # (쬡; 쬡; 쬡; 쬡; 쬡; ) HANGUL SYLLABLE JJOEB
+CB22;CB22;110D 116C 11B9;CB22;110D 116C 11B9; # (쬢; 쬢; 쬢; 쬢; 쬢; ) HANGUL SYLLABLE JJOEBS
+CB23;CB23;110D 116C 11BA;CB23;110D 116C 11BA; # (쬣; 쬣; 쬣; 쬣; 쬣; ) HANGUL SYLLABLE JJOES
+CB24;CB24;110D 116C 11BB;CB24;110D 116C 11BB; # (쬤; 쬤; 쬤; 쬤; 쬤; ) HANGUL SYLLABLE JJOESS
+CB25;CB25;110D 116C 11BC;CB25;110D 116C 11BC; # (쬥; 쬥; 쬥; 쬥; 쬥; ) HANGUL SYLLABLE JJOENG
+CB26;CB26;110D 116C 11BD;CB26;110D 116C 11BD; # (쬦; 쬦; 쬦; 쬦; 쬦; ) HANGUL SYLLABLE JJOEJ
+CB27;CB27;110D 116C 11BE;CB27;110D 116C 11BE; # (쬧; 쬧; 쬧; 쬧; 쬧; ) HANGUL SYLLABLE JJOEC
+CB28;CB28;110D 116C 11BF;CB28;110D 116C 11BF; # (쬨; 쬨; 쬨; 쬨; 쬨; ) HANGUL SYLLABLE JJOEK
+CB29;CB29;110D 116C 11C0;CB29;110D 116C 11C0; # (쬩; 쬩; 쬩; 쬩; 쬩; ) HANGUL SYLLABLE JJOET
+CB2A;CB2A;110D 116C 11C1;CB2A;110D 116C 11C1; # (쬪; 쬪; 쬪; 쬪; 쬪; ) HANGUL SYLLABLE JJOEP
+CB2B;CB2B;110D 116C 11C2;CB2B;110D 116C 11C2; # (쬫; 쬫; 쬫; 쬫; 쬫; ) HANGUL SYLLABLE JJOEH
+CB2C;CB2C;110D 116D;CB2C;110D 116D; # (쬬; 쬬; 쬬; 쬬; 쬬; ) HANGUL SYLLABLE JJYO
+CB2D;CB2D;110D 116D 11A8;CB2D;110D 116D 11A8; # (쬭; 쬭; 쬭; 쬭; 쬭; ) HANGUL SYLLABLE JJYOG
+CB2E;CB2E;110D 116D 11A9;CB2E;110D 116D 11A9; # (쬮; 쬮; 쬮; 쬮; 쬮; ) HANGUL SYLLABLE JJYOGG
+CB2F;CB2F;110D 116D 11AA;CB2F;110D 116D 11AA; # (쬯; 쬯; 쬯; 쬯; 쬯; ) HANGUL SYLLABLE JJYOGS
+CB30;CB30;110D 116D 11AB;CB30;110D 116D 11AB; # (쬰; 쬰; 쬰; 쬰; 쬰; ) HANGUL SYLLABLE JJYON
+CB31;CB31;110D 116D 11AC;CB31;110D 116D 11AC; # (쬱; 쬱; 쬱; 쬱; 쬱; ) HANGUL SYLLABLE JJYONJ
+CB32;CB32;110D 116D 11AD;CB32;110D 116D 11AD; # (쬲; 쬲; 쬲; 쬲; 쬲; ) HANGUL SYLLABLE JJYONH
+CB33;CB33;110D 116D 11AE;CB33;110D 116D 11AE; # (쬳; 쬳; 쬳; 쬳; 쬳; ) HANGUL SYLLABLE JJYOD
+CB34;CB34;110D 116D 11AF;CB34;110D 116D 11AF; # (쬴; 쬴; 쬴; 쬴; 쬴; ) HANGUL SYLLABLE JJYOL
+CB35;CB35;110D 116D 11B0;CB35;110D 116D 11B0; # (쬵; 쬵; 쬵; 쬵; 쬵; ) HANGUL SYLLABLE JJYOLG
+CB36;CB36;110D 116D 11B1;CB36;110D 116D 11B1; # (쬶; 쬶; 쬶; 쬶; 쬶; ) HANGUL SYLLABLE JJYOLM
+CB37;CB37;110D 116D 11B2;CB37;110D 116D 11B2; # (쬷; 쬷; 쬷; 쬷; 쬷; ) HANGUL SYLLABLE JJYOLB
+CB38;CB38;110D 116D 11B3;CB38;110D 116D 11B3; # (쬸; 쬸; 쬸; 쬸; 쬸; ) HANGUL SYLLABLE JJYOLS
+CB39;CB39;110D 116D 11B4;CB39;110D 116D 11B4; # (쬹; 쬹; 쬹; 쬹; 쬹; ) HANGUL SYLLABLE JJYOLT
+CB3A;CB3A;110D 116D 11B5;CB3A;110D 116D 11B5; # (쬺; 쬺; 쬺; 쬺; 쬺; ) HANGUL SYLLABLE JJYOLP
+CB3B;CB3B;110D 116D 11B6;CB3B;110D 116D 11B6; # (쬻; 쬻; 쬻; 쬻; 쬻; ) HANGUL SYLLABLE JJYOLH
+CB3C;CB3C;110D 116D 11B7;CB3C;110D 116D 11B7; # (쬼; 쬼; 쬼; 쬼; 쬼; ) HANGUL SYLLABLE JJYOM
+CB3D;CB3D;110D 116D 11B8;CB3D;110D 116D 11B8; # (쬽; 쬽; 쬽; 쬽; 쬽; ) HANGUL SYLLABLE JJYOB
+CB3E;CB3E;110D 116D 11B9;CB3E;110D 116D 11B9; # (쬾; 쬾; 쬾; 쬾; 쬾; ) HANGUL SYLLABLE JJYOBS
+CB3F;CB3F;110D 116D 11BA;CB3F;110D 116D 11BA; # (쬿; 쬿; 쬿; 쬿; 쬿; ) HANGUL SYLLABLE JJYOS
+CB40;CB40;110D 116D 11BB;CB40;110D 116D 11BB; # (쭀; 쭀; 쭀; 쭀; 쭀; ) HANGUL SYLLABLE JJYOSS
+CB41;CB41;110D 116D 11BC;CB41;110D 116D 11BC; # (쭁; 쭁; 쭁; 쭁; 쭁; ) HANGUL SYLLABLE JJYONG
+CB42;CB42;110D 116D 11BD;CB42;110D 116D 11BD; # (쭂; 쭂; 쭂; 쭂; 쭂; ) HANGUL SYLLABLE JJYOJ
+CB43;CB43;110D 116D 11BE;CB43;110D 116D 11BE; # (쭃; 쭃; 쭃; 쭃; 쭃; ) HANGUL SYLLABLE JJYOC
+CB44;CB44;110D 116D 11BF;CB44;110D 116D 11BF; # (쭄; 쭄; 쭄; 쭄; 쭄; ) HANGUL SYLLABLE JJYOK
+CB45;CB45;110D 116D 11C0;CB45;110D 116D 11C0; # (쭅; 쭅; 쭅; 쭅; 쭅; ) HANGUL SYLLABLE JJYOT
+CB46;CB46;110D 116D 11C1;CB46;110D 116D 11C1; # (쭆; 쭆; 쭆; 쭆; 쭆; ) HANGUL SYLLABLE JJYOP
+CB47;CB47;110D 116D 11C2;CB47;110D 116D 11C2; # (쭇; 쭇; 쭇; 쭇; 쭇; ) HANGUL SYLLABLE JJYOH
+CB48;CB48;110D 116E;CB48;110D 116E; # (쭈; 쭈; 쭈; 쭈; 쭈; ) HANGUL SYLLABLE JJU
+CB49;CB49;110D 116E 11A8;CB49;110D 116E 11A8; # (쭉; 쭉; 쭉; 쭉; 쭉; ) HANGUL SYLLABLE JJUG
+CB4A;CB4A;110D 116E 11A9;CB4A;110D 116E 11A9; # (쭊; 쭊; 쭊; 쭊; 쭊; ) HANGUL SYLLABLE JJUGG
+CB4B;CB4B;110D 116E 11AA;CB4B;110D 116E 11AA; # (쭋; 쭋; 쭋; 쭋; 쭋; ) HANGUL SYLLABLE JJUGS
+CB4C;CB4C;110D 116E 11AB;CB4C;110D 116E 11AB; # (쭌; 쭌; 쭌; 쭌; 쭌; ) HANGUL SYLLABLE JJUN
+CB4D;CB4D;110D 116E 11AC;CB4D;110D 116E 11AC; # (쭍; 쭍; 쭍; 쭍; 쭍; ) HANGUL SYLLABLE JJUNJ
+CB4E;CB4E;110D 116E 11AD;CB4E;110D 116E 11AD; # (쭎; 쭎; 쭎; 쭎; 쭎; ) HANGUL SYLLABLE JJUNH
+CB4F;CB4F;110D 116E 11AE;CB4F;110D 116E 11AE; # (쭏; 쭏; 쭏; 쭏; 쭏; ) HANGUL SYLLABLE JJUD
+CB50;CB50;110D 116E 11AF;CB50;110D 116E 11AF; # (쭐; 쭐; 쭐; 쭐; 쭐; ) HANGUL SYLLABLE JJUL
+CB51;CB51;110D 116E 11B0;CB51;110D 116E 11B0; # (쭑; 쭑; 쭑; 쭑; 쭑; ) HANGUL SYLLABLE JJULG
+CB52;CB52;110D 116E 11B1;CB52;110D 116E 11B1; # (쭒; 쭒; 쭒; 쭒; 쭒; ) HANGUL SYLLABLE JJULM
+CB53;CB53;110D 116E 11B2;CB53;110D 116E 11B2; # (쭓; 쭓; 쭓; 쭓; 쭓; ) HANGUL SYLLABLE JJULB
+CB54;CB54;110D 116E 11B3;CB54;110D 116E 11B3; # (쭔; 쭔; 쭔; 쭔; 쭔; ) HANGUL SYLLABLE JJULS
+CB55;CB55;110D 116E 11B4;CB55;110D 116E 11B4; # (쭕; 쭕; 쭕; 쭕; 쭕; ) HANGUL SYLLABLE JJULT
+CB56;CB56;110D 116E 11B5;CB56;110D 116E 11B5; # (쭖; 쭖; 쭖; 쭖; 쭖; ) HANGUL SYLLABLE JJULP
+CB57;CB57;110D 116E 11B6;CB57;110D 116E 11B6; # (쭗; 쭗; 쭗; 쭗; 쭗; ) HANGUL SYLLABLE JJULH
+CB58;CB58;110D 116E 11B7;CB58;110D 116E 11B7; # (쭘; 쭘; 쭘; 쭘; 쭘; ) HANGUL SYLLABLE JJUM
+CB59;CB59;110D 116E 11B8;CB59;110D 116E 11B8; # (쭙; 쭙; 쭙; 쭙; 쭙; ) HANGUL SYLLABLE JJUB
+CB5A;CB5A;110D 116E 11B9;CB5A;110D 116E 11B9; # (쭚; 쭚; 쭚; 쭚; 쭚; ) HANGUL SYLLABLE JJUBS
+CB5B;CB5B;110D 116E 11BA;CB5B;110D 116E 11BA; # (쭛; 쭛; 쭛; 쭛; 쭛; ) HANGUL SYLLABLE JJUS
+CB5C;CB5C;110D 116E 11BB;CB5C;110D 116E 11BB; # (쭜; 쭜; 쭜; 쭜; 쭜; ) HANGUL SYLLABLE JJUSS
+CB5D;CB5D;110D 116E 11BC;CB5D;110D 116E 11BC; # (쭝; 쭝; 쭝; 쭝; 쭝; ) HANGUL SYLLABLE JJUNG
+CB5E;CB5E;110D 116E 11BD;CB5E;110D 116E 11BD; # (쭞; 쭞; 쭞; 쭞; 쭞; ) HANGUL SYLLABLE JJUJ
+CB5F;CB5F;110D 116E 11BE;CB5F;110D 116E 11BE; # (쭟; 쭟; 쭟; 쭟; 쭟; ) HANGUL SYLLABLE JJUC
+CB60;CB60;110D 116E 11BF;CB60;110D 116E 11BF; # (쭠; 쭠; 쭠; 쭠; 쭠; ) HANGUL SYLLABLE JJUK
+CB61;CB61;110D 116E 11C0;CB61;110D 116E 11C0; # (쭡; 쭡; 쭡; 쭡; 쭡; ) HANGUL SYLLABLE JJUT
+CB62;CB62;110D 116E 11C1;CB62;110D 116E 11C1; # (쭢; 쭢; 쭢; 쭢; 쭢; ) HANGUL SYLLABLE JJUP
+CB63;CB63;110D 116E 11C2;CB63;110D 116E 11C2; # (쭣; 쭣; 쭣; 쭣; 쭣; ) HANGUL SYLLABLE JJUH
+CB64;CB64;110D 116F;CB64;110D 116F; # (쭤; 쭤; 쭤; 쭤; 쭤; ) HANGUL SYLLABLE JJWEO
+CB65;CB65;110D 116F 11A8;CB65;110D 116F 11A8; # (쭥; 쭥; 쭥; 쭥; 쭥; ) HANGUL SYLLABLE JJWEOG
+CB66;CB66;110D 116F 11A9;CB66;110D 116F 11A9; # (쭦; 쭦; 쭦; 쭦; 쭦; ) HANGUL SYLLABLE JJWEOGG
+CB67;CB67;110D 116F 11AA;CB67;110D 116F 11AA; # (쭧; 쭧; 쭧; 쭧; 쭧; ) HANGUL SYLLABLE JJWEOGS
+CB68;CB68;110D 116F 11AB;CB68;110D 116F 11AB; # (쭨; 쭨; 쭨; 쭨; 쭨; ) HANGUL SYLLABLE JJWEON
+CB69;CB69;110D 116F 11AC;CB69;110D 116F 11AC; # (쭩; 쭩; 쭩; 쭩; 쭩; ) HANGUL SYLLABLE JJWEONJ
+CB6A;CB6A;110D 116F 11AD;CB6A;110D 116F 11AD; # (쭪; 쭪; 쭪; 쭪; 쭪; ) HANGUL SYLLABLE JJWEONH
+CB6B;CB6B;110D 116F 11AE;CB6B;110D 116F 11AE; # (쭫; 쭫; 쭫; 쭫; 쭫; ) HANGUL SYLLABLE JJWEOD
+CB6C;CB6C;110D 116F 11AF;CB6C;110D 116F 11AF; # (쭬; 쭬; 쭬; 쭬; 쭬; ) HANGUL SYLLABLE JJWEOL
+CB6D;CB6D;110D 116F 11B0;CB6D;110D 116F 11B0; # (쭭; 쭭; 쭭; 쭭; 쭭; ) HANGUL SYLLABLE JJWEOLG
+CB6E;CB6E;110D 116F 11B1;CB6E;110D 116F 11B1; # (쭮; 쭮; 쭮; 쭮; 쭮; ) HANGUL SYLLABLE JJWEOLM
+CB6F;CB6F;110D 116F 11B2;CB6F;110D 116F 11B2; # (쭯; 쭯; 쭯; 쭯; 쭯; ) HANGUL SYLLABLE JJWEOLB
+CB70;CB70;110D 116F 11B3;CB70;110D 116F 11B3; # (쭰; 쭰; 쭰; 쭰; 쭰; ) HANGUL SYLLABLE JJWEOLS
+CB71;CB71;110D 116F 11B4;CB71;110D 116F 11B4; # (쭱; 쭱; 쭱; 쭱; 쭱; ) HANGUL SYLLABLE JJWEOLT
+CB72;CB72;110D 116F 11B5;CB72;110D 116F 11B5; # (쭲; 쭲; 쭲; 쭲; 쭲; ) HANGUL SYLLABLE JJWEOLP
+CB73;CB73;110D 116F 11B6;CB73;110D 116F 11B6; # (쭳; 쭳; 쭳; 쭳; 쭳; ) HANGUL SYLLABLE JJWEOLH
+CB74;CB74;110D 116F 11B7;CB74;110D 116F 11B7; # (쭴; 쭴; 쭴; 쭴; 쭴; ) HANGUL SYLLABLE JJWEOM
+CB75;CB75;110D 116F 11B8;CB75;110D 116F 11B8; # (쭵; 쭵; 쭵; 쭵; 쭵; ) HANGUL SYLLABLE JJWEOB
+CB76;CB76;110D 116F 11B9;CB76;110D 116F 11B9; # (쭶; 쭶; 쭶; 쭶; 쭶; ) HANGUL SYLLABLE JJWEOBS
+CB77;CB77;110D 116F 11BA;CB77;110D 116F 11BA; # (쭷; 쭷; 쭷; 쭷; 쭷; ) HANGUL SYLLABLE JJWEOS
+CB78;CB78;110D 116F 11BB;CB78;110D 116F 11BB; # (쭸; 쭸; 쭸; 쭸; 쭸; ) HANGUL SYLLABLE JJWEOSS
+CB79;CB79;110D 116F 11BC;CB79;110D 116F 11BC; # (쭹; 쭹; 쭹; 쭹; 쭹; ) HANGUL SYLLABLE JJWEONG
+CB7A;CB7A;110D 116F 11BD;CB7A;110D 116F 11BD; # (쭺; 쭺; 쭺; 쭺; 쭺; ) HANGUL SYLLABLE JJWEOJ
+CB7B;CB7B;110D 116F 11BE;CB7B;110D 116F 11BE; # (쭻; 쭻; 쭻; 쭻; 쭻; ) HANGUL SYLLABLE JJWEOC
+CB7C;CB7C;110D 116F 11BF;CB7C;110D 116F 11BF; # (쭼; 쭼; 쭼; 쭼; 쭼; ) HANGUL SYLLABLE JJWEOK
+CB7D;CB7D;110D 116F 11C0;CB7D;110D 116F 11C0; # (쭽; 쭽; 쭽; 쭽; 쭽; ) HANGUL SYLLABLE JJWEOT
+CB7E;CB7E;110D 116F 11C1;CB7E;110D 116F 11C1; # (쭾; 쭾; 쭾; 쭾; 쭾; ) HANGUL SYLLABLE JJWEOP
+CB7F;CB7F;110D 116F 11C2;CB7F;110D 116F 11C2; # (쭿; 쭿; 쭿; 쭿; 쭿; ) HANGUL SYLLABLE JJWEOH
+CB80;CB80;110D 1170;CB80;110D 1170; # (쮀; 쮀; 쮀; 쮀; 쮀; ) HANGUL SYLLABLE JJWE
+CB81;CB81;110D 1170 11A8;CB81;110D 1170 11A8; # (쮁; 쮁; 쮁; 쮁; 쮁; ) HANGUL SYLLABLE JJWEG
+CB82;CB82;110D 1170 11A9;CB82;110D 1170 11A9; # (쮂; 쮂; 쮂; 쮂; 쮂; ) HANGUL SYLLABLE JJWEGG
+CB83;CB83;110D 1170 11AA;CB83;110D 1170 11AA; # (쮃; 쮃; 쮃; 쮃; 쮃; ) HANGUL SYLLABLE JJWEGS
+CB84;CB84;110D 1170 11AB;CB84;110D 1170 11AB; # (쮄; 쮄; 쮄; 쮄; 쮄; ) HANGUL SYLLABLE JJWEN
+CB85;CB85;110D 1170 11AC;CB85;110D 1170 11AC; # (쮅; 쮅; 쮅; 쮅; 쮅; ) HANGUL SYLLABLE JJWENJ
+CB86;CB86;110D 1170 11AD;CB86;110D 1170 11AD; # (쮆; 쮆; 쮆; 쮆; 쮆; ) HANGUL SYLLABLE JJWENH
+CB87;CB87;110D 1170 11AE;CB87;110D 1170 11AE; # (쮇; 쮇; 쮇; 쮇; 쮇; ) HANGUL SYLLABLE JJWED
+CB88;CB88;110D 1170 11AF;CB88;110D 1170 11AF; # (쮈; 쮈; 쮈; 쮈; 쮈; ) HANGUL SYLLABLE JJWEL
+CB89;CB89;110D 1170 11B0;CB89;110D 1170 11B0; # (쮉; 쮉; 쮉; 쮉; 쮉; ) HANGUL SYLLABLE JJWELG
+CB8A;CB8A;110D 1170 11B1;CB8A;110D 1170 11B1; # (쮊; 쮊; 쮊; 쮊; 쮊; ) HANGUL SYLLABLE JJWELM
+CB8B;CB8B;110D 1170 11B2;CB8B;110D 1170 11B2; # (쮋; 쮋; 쮋; 쮋; 쮋; ) HANGUL SYLLABLE JJWELB
+CB8C;CB8C;110D 1170 11B3;CB8C;110D 1170 11B3; # (쮌; 쮌; 쮌; 쮌; 쮌; ) HANGUL SYLLABLE JJWELS
+CB8D;CB8D;110D 1170 11B4;CB8D;110D 1170 11B4; # (쮍; 쮍; 쮍; 쮍; 쮍; ) HANGUL SYLLABLE JJWELT
+CB8E;CB8E;110D 1170 11B5;CB8E;110D 1170 11B5; # (쮎; 쮎; 쮎; 쮎; 쮎; ) HANGUL SYLLABLE JJWELP
+CB8F;CB8F;110D 1170 11B6;CB8F;110D 1170 11B6; # (쮏; 쮏; 쮏; 쮏; 쮏; ) HANGUL SYLLABLE JJWELH
+CB90;CB90;110D 1170 11B7;CB90;110D 1170 11B7; # (쮐; 쮐; 쮐; 쮐; 쮐; ) HANGUL SYLLABLE JJWEM
+CB91;CB91;110D 1170 11B8;CB91;110D 1170 11B8; # (쮑; 쮑; 쮑; 쮑; 쮑; ) HANGUL SYLLABLE JJWEB
+CB92;CB92;110D 1170 11B9;CB92;110D 1170 11B9; # (쮒; 쮒; 쮒; 쮒; 쮒; ) HANGUL SYLLABLE JJWEBS
+CB93;CB93;110D 1170 11BA;CB93;110D 1170 11BA; # (쮓; 쮓; 쮓; 쮓; 쮓; ) HANGUL SYLLABLE JJWES
+CB94;CB94;110D 1170 11BB;CB94;110D 1170 11BB; # (쮔; 쮔; 쮔; 쮔; 쮔; ) HANGUL SYLLABLE JJWESS
+CB95;CB95;110D 1170 11BC;CB95;110D 1170 11BC; # (쮕; 쮕; 쮕; 쮕; 쮕; ) HANGUL SYLLABLE JJWENG
+CB96;CB96;110D 1170 11BD;CB96;110D 1170 11BD; # (쮖; 쮖; 쮖; 쮖; 쮖; ) HANGUL SYLLABLE JJWEJ
+CB97;CB97;110D 1170 11BE;CB97;110D 1170 11BE; # (쮗; 쮗; 쮗; 쮗; 쮗; ) HANGUL SYLLABLE JJWEC
+CB98;CB98;110D 1170 11BF;CB98;110D 1170 11BF; # (쮘; 쮘; 쮘; 쮘; 쮘; ) HANGUL SYLLABLE JJWEK
+CB99;CB99;110D 1170 11C0;CB99;110D 1170 11C0; # (쮙; 쮙; 쮙; 쮙; 쮙; ) HANGUL SYLLABLE JJWET
+CB9A;CB9A;110D 1170 11C1;CB9A;110D 1170 11C1; # (쮚; 쮚; 쮚; 쮚; 쮚; ) HANGUL SYLLABLE JJWEP
+CB9B;CB9B;110D 1170 11C2;CB9B;110D 1170 11C2; # (쮛; 쮛; 쮛; 쮛; 쮛; ) HANGUL SYLLABLE JJWEH
+CB9C;CB9C;110D 1171;CB9C;110D 1171; # (쮜; 쮜; 쮜; 쮜; 쮜; ) HANGUL SYLLABLE JJWI
+CB9D;CB9D;110D 1171 11A8;CB9D;110D 1171 11A8; # (쮝; 쮝; 쮝; 쮝; 쮝; ) HANGUL SYLLABLE JJWIG
+CB9E;CB9E;110D 1171 11A9;CB9E;110D 1171 11A9; # (쮞; 쮞; 쮞; 쮞; 쮞; ) HANGUL SYLLABLE JJWIGG
+CB9F;CB9F;110D 1171 11AA;CB9F;110D 1171 11AA; # (쮟; 쮟; 쮟; 쮟; 쮟; ) HANGUL SYLLABLE JJWIGS
+CBA0;CBA0;110D 1171 11AB;CBA0;110D 1171 11AB; # (쮠; 쮠; 쮠; 쮠; 쮠; ) HANGUL SYLLABLE JJWIN
+CBA1;CBA1;110D 1171 11AC;CBA1;110D 1171 11AC; # (쮡; 쮡; 쮡; 쮡; 쮡; ) HANGUL SYLLABLE JJWINJ
+CBA2;CBA2;110D 1171 11AD;CBA2;110D 1171 11AD; # (쮢; 쮢; 쮢; 쮢; 쮢; ) HANGUL SYLLABLE JJWINH
+CBA3;CBA3;110D 1171 11AE;CBA3;110D 1171 11AE; # (쮣; 쮣; 쮣; 쮣; 쮣; ) HANGUL SYLLABLE JJWID
+CBA4;CBA4;110D 1171 11AF;CBA4;110D 1171 11AF; # (쮤; 쮤; 쮤; 쮤; 쮤; ) HANGUL SYLLABLE JJWIL
+CBA5;CBA5;110D 1171 11B0;CBA5;110D 1171 11B0; # (쮥; 쮥; 쮥; 쮥; 쮥; ) HANGUL SYLLABLE JJWILG
+CBA6;CBA6;110D 1171 11B1;CBA6;110D 1171 11B1; # (쮦; 쮦; 쮦; 쮦; 쮦; ) HANGUL SYLLABLE JJWILM
+CBA7;CBA7;110D 1171 11B2;CBA7;110D 1171 11B2; # (쮧; 쮧; 쮧; 쮧; 쮧; ) HANGUL SYLLABLE JJWILB
+CBA8;CBA8;110D 1171 11B3;CBA8;110D 1171 11B3; # (쮨; 쮨; 쮨; 쮨; 쮨; ) HANGUL SYLLABLE JJWILS
+CBA9;CBA9;110D 1171 11B4;CBA9;110D 1171 11B4; # (쮩; 쮩; 쮩; 쮩; 쮩; ) HANGUL SYLLABLE JJWILT
+CBAA;CBAA;110D 1171 11B5;CBAA;110D 1171 11B5; # (쮪; 쮪; 쮪; 쮪; 쮪; ) HANGUL SYLLABLE JJWILP
+CBAB;CBAB;110D 1171 11B6;CBAB;110D 1171 11B6; # (쮫; 쮫; 쮫; 쮫; 쮫; ) HANGUL SYLLABLE JJWILH
+CBAC;CBAC;110D 1171 11B7;CBAC;110D 1171 11B7; # (쮬; 쮬; 쮬; 쮬; 쮬; ) HANGUL SYLLABLE JJWIM
+CBAD;CBAD;110D 1171 11B8;CBAD;110D 1171 11B8; # (쮭; 쮭; 쮭; 쮭; 쮭; ) HANGUL SYLLABLE JJWIB
+CBAE;CBAE;110D 1171 11B9;CBAE;110D 1171 11B9; # (쮮; 쮮; 쮮; 쮮; 쮮; ) HANGUL SYLLABLE JJWIBS
+CBAF;CBAF;110D 1171 11BA;CBAF;110D 1171 11BA; # (쮯; 쮯; 쮯; 쮯; 쮯; ) HANGUL SYLLABLE JJWIS
+CBB0;CBB0;110D 1171 11BB;CBB0;110D 1171 11BB; # (쮰; 쮰; 쮰; 쮰; 쮰; ) HANGUL SYLLABLE JJWISS
+CBB1;CBB1;110D 1171 11BC;CBB1;110D 1171 11BC; # (쮱; 쮱; 쮱; 쮱; 쮱; ) HANGUL SYLLABLE JJWING
+CBB2;CBB2;110D 1171 11BD;CBB2;110D 1171 11BD; # (쮲; 쮲; 쮲; 쮲; 쮲; ) HANGUL SYLLABLE JJWIJ
+CBB3;CBB3;110D 1171 11BE;CBB3;110D 1171 11BE; # (쮳; 쮳; 쮳; 쮳; 쮳; ) HANGUL SYLLABLE JJWIC
+CBB4;CBB4;110D 1171 11BF;CBB4;110D 1171 11BF; # (쮴; 쮴; 쮴; 쮴; 쮴; ) HANGUL SYLLABLE JJWIK
+CBB5;CBB5;110D 1171 11C0;CBB5;110D 1171 11C0; # (쮵; 쮵; 쮵; 쮵; 쮵; ) HANGUL SYLLABLE JJWIT
+CBB6;CBB6;110D 1171 11C1;CBB6;110D 1171 11C1; # (쮶; 쮶; 쮶; 쮶; 쮶; ) HANGUL SYLLABLE JJWIP
+CBB7;CBB7;110D 1171 11C2;CBB7;110D 1171 11C2; # (쮷; 쮷; 쮷; 쮷; 쮷; ) HANGUL SYLLABLE JJWIH
+CBB8;CBB8;110D 1172;CBB8;110D 1172; # (쮸; 쮸; 쮸; 쮸; 쮸; ) HANGUL SYLLABLE JJYU
+CBB9;CBB9;110D 1172 11A8;CBB9;110D 1172 11A8; # (쮹; 쮹; 쮹; 쮹; 쮹; ) HANGUL SYLLABLE JJYUG
+CBBA;CBBA;110D 1172 11A9;CBBA;110D 1172 11A9; # (쮺; 쮺; 쮺; 쮺; 쮺; ) HANGUL SYLLABLE JJYUGG
+CBBB;CBBB;110D 1172 11AA;CBBB;110D 1172 11AA; # (쮻; 쮻; 쮻; 쮻; 쮻; ) HANGUL SYLLABLE JJYUGS
+CBBC;CBBC;110D 1172 11AB;CBBC;110D 1172 11AB; # (쮼; 쮼; 쮼; 쮼; 쮼; ) HANGUL SYLLABLE JJYUN
+CBBD;CBBD;110D 1172 11AC;CBBD;110D 1172 11AC; # (쮽; 쮽; 쮽; 쮽; 쮽; ) HANGUL SYLLABLE JJYUNJ
+CBBE;CBBE;110D 1172 11AD;CBBE;110D 1172 11AD; # (쮾; 쮾; 쮾; 쮾; 쮾; ) HANGUL SYLLABLE JJYUNH
+CBBF;CBBF;110D 1172 11AE;CBBF;110D 1172 11AE; # (쮿; 쮿; 쮿; 쮿; 쮿; ) HANGUL SYLLABLE JJYUD
+CBC0;CBC0;110D 1172 11AF;CBC0;110D 1172 11AF; # (쯀; 쯀; 쯀; 쯀; 쯀; ) HANGUL SYLLABLE JJYUL
+CBC1;CBC1;110D 1172 11B0;CBC1;110D 1172 11B0; # (쯁; 쯁; 쯁; 쯁; 쯁; ) HANGUL SYLLABLE JJYULG
+CBC2;CBC2;110D 1172 11B1;CBC2;110D 1172 11B1; # (쯂; 쯂; 쯂; 쯂; 쯂; ) HANGUL SYLLABLE JJYULM
+CBC3;CBC3;110D 1172 11B2;CBC3;110D 1172 11B2; # (쯃; 쯃; 쯃; 쯃; 쯃; ) HANGUL SYLLABLE JJYULB
+CBC4;CBC4;110D 1172 11B3;CBC4;110D 1172 11B3; # (쯄; 쯄; 쯄; 쯄; 쯄; ) HANGUL SYLLABLE JJYULS
+CBC5;CBC5;110D 1172 11B4;CBC5;110D 1172 11B4; # (쯅; 쯅; 쯅; 쯅; 쯅; ) HANGUL SYLLABLE JJYULT
+CBC6;CBC6;110D 1172 11B5;CBC6;110D 1172 11B5; # (쯆; 쯆; 쯆; 쯆; 쯆; ) HANGUL SYLLABLE JJYULP
+CBC7;CBC7;110D 1172 11B6;CBC7;110D 1172 11B6; # (쯇; 쯇; 쯇; 쯇; 쯇; ) HANGUL SYLLABLE JJYULH
+CBC8;CBC8;110D 1172 11B7;CBC8;110D 1172 11B7; # (쯈; 쯈; 쯈; 쯈; 쯈; ) HANGUL SYLLABLE JJYUM
+CBC9;CBC9;110D 1172 11B8;CBC9;110D 1172 11B8; # (쯉; 쯉; 쯉; 쯉; 쯉; ) HANGUL SYLLABLE JJYUB
+CBCA;CBCA;110D 1172 11B9;CBCA;110D 1172 11B9; # (쯊; 쯊; 쯊; 쯊; 쯊; ) HANGUL SYLLABLE JJYUBS
+CBCB;CBCB;110D 1172 11BA;CBCB;110D 1172 11BA; # (쯋; 쯋; 쯋; 쯋; 쯋; ) HANGUL SYLLABLE JJYUS
+CBCC;CBCC;110D 1172 11BB;CBCC;110D 1172 11BB; # (쯌; 쯌; 쯌; 쯌; 쯌; ) HANGUL SYLLABLE JJYUSS
+CBCD;CBCD;110D 1172 11BC;CBCD;110D 1172 11BC; # (쯍; 쯍; 쯍; 쯍; 쯍; ) HANGUL SYLLABLE JJYUNG
+CBCE;CBCE;110D 1172 11BD;CBCE;110D 1172 11BD; # (쯎; 쯎; 쯎; 쯎; 쯎; ) HANGUL SYLLABLE JJYUJ
+CBCF;CBCF;110D 1172 11BE;CBCF;110D 1172 11BE; # (쯏; 쯏; 쯏; 쯏; 쯏; ) HANGUL SYLLABLE JJYUC
+CBD0;CBD0;110D 1172 11BF;CBD0;110D 1172 11BF; # (쯐; 쯐; 쯐; 쯐; 쯐; ) HANGUL SYLLABLE JJYUK
+CBD1;CBD1;110D 1172 11C0;CBD1;110D 1172 11C0; # (쯑; 쯑; 쯑; 쯑; 쯑; ) HANGUL SYLLABLE JJYUT
+CBD2;CBD2;110D 1172 11C1;CBD2;110D 1172 11C1; # (쯒; 쯒; 쯒; 쯒; 쯒; ) HANGUL SYLLABLE JJYUP
+CBD3;CBD3;110D 1172 11C2;CBD3;110D 1172 11C2; # (쯓; 쯓; 쯓; 쯓; 쯓; ) HANGUL SYLLABLE JJYUH
+CBD4;CBD4;110D 1173;CBD4;110D 1173; # (쯔; 쯔; 쯔; 쯔; 쯔; ) HANGUL SYLLABLE JJEU
+CBD5;CBD5;110D 1173 11A8;CBD5;110D 1173 11A8; # (쯕; 쯕; 쯕; 쯕; 쯕; ) HANGUL SYLLABLE JJEUG
+CBD6;CBD6;110D 1173 11A9;CBD6;110D 1173 11A9; # (쯖; 쯖; 쯖; 쯖; 쯖; ) HANGUL SYLLABLE JJEUGG
+CBD7;CBD7;110D 1173 11AA;CBD7;110D 1173 11AA; # (쯗; 쯗; 쯗; 쯗; 쯗; ) HANGUL SYLLABLE JJEUGS
+CBD8;CBD8;110D 1173 11AB;CBD8;110D 1173 11AB; # (쯘; 쯘; 쯘; 쯘; 쯘; ) HANGUL SYLLABLE JJEUN
+CBD9;CBD9;110D 1173 11AC;CBD9;110D 1173 11AC; # (쯙; 쯙; 쯙; 쯙; 쯙; ) HANGUL SYLLABLE JJEUNJ
+CBDA;CBDA;110D 1173 11AD;CBDA;110D 1173 11AD; # (쯚; 쯚; 쯚; 쯚; 쯚; ) HANGUL SYLLABLE JJEUNH
+CBDB;CBDB;110D 1173 11AE;CBDB;110D 1173 11AE; # (쯛; 쯛; 쯛; 쯛; 쯛; ) HANGUL SYLLABLE JJEUD
+CBDC;CBDC;110D 1173 11AF;CBDC;110D 1173 11AF; # (쯜; 쯜; 쯜; 쯜; 쯜; ) HANGUL SYLLABLE JJEUL
+CBDD;CBDD;110D 1173 11B0;CBDD;110D 1173 11B0; # (쯝; 쯝; 쯝; 쯝; 쯝; ) HANGUL SYLLABLE JJEULG
+CBDE;CBDE;110D 1173 11B1;CBDE;110D 1173 11B1; # (쯞; 쯞; 쯞; 쯞; 쯞; ) HANGUL SYLLABLE JJEULM
+CBDF;CBDF;110D 1173 11B2;CBDF;110D 1173 11B2; # (쯟; 쯟; 쯟; 쯟; 쯟; ) HANGUL SYLLABLE JJEULB
+CBE0;CBE0;110D 1173 11B3;CBE0;110D 1173 11B3; # (쯠; 쯠; 쯠; 쯠; 쯠; ) HANGUL SYLLABLE JJEULS
+CBE1;CBE1;110D 1173 11B4;CBE1;110D 1173 11B4; # (쯡; 쯡; 쯡; 쯡; 쯡; ) HANGUL SYLLABLE JJEULT
+CBE2;CBE2;110D 1173 11B5;CBE2;110D 1173 11B5; # (쯢; 쯢; 쯢; 쯢; 쯢; ) HANGUL SYLLABLE JJEULP
+CBE3;CBE3;110D 1173 11B6;CBE3;110D 1173 11B6; # (쯣; 쯣; 쯣; 쯣; 쯣; ) HANGUL SYLLABLE JJEULH
+CBE4;CBE4;110D 1173 11B7;CBE4;110D 1173 11B7; # (쯤; 쯤; 쯤; 쯤; 쯤; ) HANGUL SYLLABLE JJEUM
+CBE5;CBE5;110D 1173 11B8;CBE5;110D 1173 11B8; # (쯥; 쯥; 쯥; 쯥; 쯥; ) HANGUL SYLLABLE JJEUB
+CBE6;CBE6;110D 1173 11B9;CBE6;110D 1173 11B9; # (쯦; 쯦; 쯦; 쯦; 쯦; ) HANGUL SYLLABLE JJEUBS
+CBE7;CBE7;110D 1173 11BA;CBE7;110D 1173 11BA; # (쯧; 쯧; 쯧; 쯧; 쯧; ) HANGUL SYLLABLE JJEUS
+CBE8;CBE8;110D 1173 11BB;CBE8;110D 1173 11BB; # (쯨; 쯨; 쯨; 쯨; 쯨; ) HANGUL SYLLABLE JJEUSS
+CBE9;CBE9;110D 1173 11BC;CBE9;110D 1173 11BC; # (쯩; 쯩; 쯩; 쯩; 쯩; ) HANGUL SYLLABLE JJEUNG
+CBEA;CBEA;110D 1173 11BD;CBEA;110D 1173 11BD; # (쯪; 쯪; 쯪; 쯪; 쯪; ) HANGUL SYLLABLE JJEUJ
+CBEB;CBEB;110D 1173 11BE;CBEB;110D 1173 11BE; # (쯫; 쯫; 쯫; 쯫; 쯫; ) HANGUL SYLLABLE JJEUC
+CBEC;CBEC;110D 1173 11BF;CBEC;110D 1173 11BF; # (쯬; 쯬; 쯬; 쯬; 쯬; ) HANGUL SYLLABLE JJEUK
+CBED;CBED;110D 1173 11C0;CBED;110D 1173 11C0; # (쯭; 쯭; 쯭; 쯭; 쯭; ) HANGUL SYLLABLE JJEUT
+CBEE;CBEE;110D 1173 11C1;CBEE;110D 1173 11C1; # (쯮; 쯮; 쯮; 쯮; 쯮; ) HANGUL SYLLABLE JJEUP
+CBEF;CBEF;110D 1173 11C2;CBEF;110D 1173 11C2; # (쯯; 쯯; 쯯; 쯯; 쯯; ) HANGUL SYLLABLE JJEUH
+CBF0;CBF0;110D 1174;CBF0;110D 1174; # (쯰; 쯰; 쯰; 쯰; 쯰; ) HANGUL SYLLABLE JJYI
+CBF1;CBF1;110D 1174 11A8;CBF1;110D 1174 11A8; # (쯱; 쯱; 쯱; 쯱; 쯱; ) HANGUL SYLLABLE JJYIG
+CBF2;CBF2;110D 1174 11A9;CBF2;110D 1174 11A9; # (쯲; 쯲; 쯲; 쯲; 쯲; ) HANGUL SYLLABLE JJYIGG
+CBF3;CBF3;110D 1174 11AA;CBF3;110D 1174 11AA; # (쯳; 쯳; 쯳; 쯳; 쯳; ) HANGUL SYLLABLE JJYIGS
+CBF4;CBF4;110D 1174 11AB;CBF4;110D 1174 11AB; # (쯴; 쯴; 쯴; 쯴; 쯴; ) HANGUL SYLLABLE JJYIN
+CBF5;CBF5;110D 1174 11AC;CBF5;110D 1174 11AC; # (쯵; 쯵; 쯵; 쯵; 쯵; ) HANGUL SYLLABLE JJYINJ
+CBF6;CBF6;110D 1174 11AD;CBF6;110D 1174 11AD; # (쯶; 쯶; 쯶; 쯶; 쯶; ) HANGUL SYLLABLE JJYINH
+CBF7;CBF7;110D 1174 11AE;CBF7;110D 1174 11AE; # (쯷; 쯷; 쯷; 쯷; 쯷; ) HANGUL SYLLABLE JJYID
+CBF8;CBF8;110D 1174 11AF;CBF8;110D 1174 11AF; # (쯸; 쯸; 쯸; 쯸; 쯸; ) HANGUL SYLLABLE JJYIL
+CBF9;CBF9;110D 1174 11B0;CBF9;110D 1174 11B0; # (쯹; 쯹; 쯹; 쯹; 쯹; ) HANGUL SYLLABLE JJYILG
+CBFA;CBFA;110D 1174 11B1;CBFA;110D 1174 11B1; # (쯺; 쯺; 쯺; 쯺; 쯺; ) HANGUL SYLLABLE JJYILM
+CBFB;CBFB;110D 1174 11B2;CBFB;110D 1174 11B2; # (쯻; 쯻; 쯻; 쯻; 쯻; ) HANGUL SYLLABLE JJYILB
+CBFC;CBFC;110D 1174 11B3;CBFC;110D 1174 11B3; # (쯼; 쯼; 쯼; 쯼; 쯼; ) HANGUL SYLLABLE JJYILS
+CBFD;CBFD;110D 1174 11B4;CBFD;110D 1174 11B4; # (쯽; 쯽; 쯽; 쯽; 쯽; ) HANGUL SYLLABLE JJYILT
+CBFE;CBFE;110D 1174 11B5;CBFE;110D 1174 11B5; # (쯾; 쯾; 쯾; 쯾; 쯾; ) HANGUL SYLLABLE JJYILP
+CBFF;CBFF;110D 1174 11B6;CBFF;110D 1174 11B6; # (쯿; 쯿; 쯿; 쯿; 쯿; ) HANGUL SYLLABLE JJYILH
+CC00;CC00;110D 1174 11B7;CC00;110D 1174 11B7; # (찀; 찀; 찀; 찀; 찀; ) HANGUL SYLLABLE JJYIM
+CC01;CC01;110D 1174 11B8;CC01;110D 1174 11B8; # (찁; 찁; 찁; 찁; 찁; ) HANGUL SYLLABLE JJYIB
+CC02;CC02;110D 1174 11B9;CC02;110D 1174 11B9; # (찂; 찂; 찂; 찂; 찂; ) HANGUL SYLLABLE JJYIBS
+CC03;CC03;110D 1174 11BA;CC03;110D 1174 11BA; # (찃; 찃; 찃; 찃; 찃; ) HANGUL SYLLABLE JJYIS
+CC04;CC04;110D 1174 11BB;CC04;110D 1174 11BB; # (찄; 찄; 찄; 찄; 찄; ) HANGUL SYLLABLE JJYISS
+CC05;CC05;110D 1174 11BC;CC05;110D 1174 11BC; # (찅; 찅; 찅; 찅; 찅; ) HANGUL SYLLABLE JJYING
+CC06;CC06;110D 1174 11BD;CC06;110D 1174 11BD; # (찆; 찆; 찆; 찆; 찆; ) HANGUL SYLLABLE JJYIJ
+CC07;CC07;110D 1174 11BE;CC07;110D 1174 11BE; # (찇; 찇; 찇; 찇; 찇; ) HANGUL SYLLABLE JJYIC
+CC08;CC08;110D 1174 11BF;CC08;110D 1174 11BF; # (찈; 찈; 찈; 찈; 찈; ) HANGUL SYLLABLE JJYIK
+CC09;CC09;110D 1174 11C0;CC09;110D 1174 11C0; # (찉; 찉; 찉; 찉; 찉; ) HANGUL SYLLABLE JJYIT
+CC0A;CC0A;110D 1174 11C1;CC0A;110D 1174 11C1; # (찊; 찊; 찊; 찊; 찊; ) HANGUL SYLLABLE JJYIP
+CC0B;CC0B;110D 1174 11C2;CC0B;110D 1174 11C2; # (찋; 찋; 찋; 찋; 찋; ) HANGUL SYLLABLE JJYIH
+CC0C;CC0C;110D 1175;CC0C;110D 1175; # (찌; 찌; 찌; 찌; 찌; ) HANGUL SYLLABLE JJI
+CC0D;CC0D;110D 1175 11A8;CC0D;110D 1175 11A8; # (찍; 찍; 찍; 찍; 찍; ) HANGUL SYLLABLE JJIG
+CC0E;CC0E;110D 1175 11A9;CC0E;110D 1175 11A9; # (찎; 찎; 찎; 찎; 찎; ) HANGUL SYLLABLE JJIGG
+CC0F;CC0F;110D 1175 11AA;CC0F;110D 1175 11AA; # (찏; 찏; 찏; 찏; 찏; ) HANGUL SYLLABLE JJIGS
+CC10;CC10;110D 1175 11AB;CC10;110D 1175 11AB; # (찐; 찐; 찐; 찐; 찐; ) HANGUL SYLLABLE JJIN
+CC11;CC11;110D 1175 11AC;CC11;110D 1175 11AC; # (찑; 찑; 찑; 찑; 찑; ) HANGUL SYLLABLE JJINJ
+CC12;CC12;110D 1175 11AD;CC12;110D 1175 11AD; # (찒; 찒; 찒; 찒; 찒; ) HANGUL SYLLABLE JJINH
+CC13;CC13;110D 1175 11AE;CC13;110D 1175 11AE; # (찓; 찓; 찓; 찓; 찓; ) HANGUL SYLLABLE JJID
+CC14;CC14;110D 1175 11AF;CC14;110D 1175 11AF; # (찔; 찔; 찔; 찔; 찔; ) HANGUL SYLLABLE JJIL
+CC15;CC15;110D 1175 11B0;CC15;110D 1175 11B0; # (찕; 찕; 찕; 찕; 찕; ) HANGUL SYLLABLE JJILG
+CC16;CC16;110D 1175 11B1;CC16;110D 1175 11B1; # (찖; 찖; 찖; 찖; 찖; ) HANGUL SYLLABLE JJILM
+CC17;CC17;110D 1175 11B2;CC17;110D 1175 11B2; # (찗; 찗; 찗; 찗; 찗; ) HANGUL SYLLABLE JJILB
+CC18;CC18;110D 1175 11B3;CC18;110D 1175 11B3; # (찘; 찘; 찘; 찘; 찘; ) HANGUL SYLLABLE JJILS
+CC19;CC19;110D 1175 11B4;CC19;110D 1175 11B4; # (찙; 찙; 찙; 찙; 찙; ) HANGUL SYLLABLE JJILT
+CC1A;CC1A;110D 1175 11B5;CC1A;110D 1175 11B5; # (찚; 찚; 찚; 찚; 찚; ) HANGUL SYLLABLE JJILP
+CC1B;CC1B;110D 1175 11B6;CC1B;110D 1175 11B6; # (찛; 찛; 찛; 찛; 찛; ) HANGUL SYLLABLE JJILH
+CC1C;CC1C;110D 1175 11B7;CC1C;110D 1175 11B7; # (찜; 찜; 찜; 찜; 찜; ) HANGUL SYLLABLE JJIM
+CC1D;CC1D;110D 1175 11B8;CC1D;110D 1175 11B8; # (찝; 찝; 찝; 찝; 찝; ) HANGUL SYLLABLE JJIB
+CC1E;CC1E;110D 1175 11B9;CC1E;110D 1175 11B9; # (찞; 찞; 찞; 찞; 찞; ) HANGUL SYLLABLE JJIBS
+CC1F;CC1F;110D 1175 11BA;CC1F;110D 1175 11BA; # (찟; 찟; 찟; 찟; 찟; ) HANGUL SYLLABLE JJIS
+CC20;CC20;110D 1175 11BB;CC20;110D 1175 11BB; # (찠; 찠; 찠; 찠; 찠; ) HANGUL SYLLABLE JJISS
+CC21;CC21;110D 1175 11BC;CC21;110D 1175 11BC; # (찡; 찡; 찡; 찡; 찡; ) HANGUL SYLLABLE JJING
+CC22;CC22;110D 1175 11BD;CC22;110D 1175 11BD; # (찢; 찢; 찢; 찢; 찢; ) HANGUL SYLLABLE JJIJ
+CC23;CC23;110D 1175 11BE;CC23;110D 1175 11BE; # (찣; 찣; 찣; 찣; 찣; ) HANGUL SYLLABLE JJIC
+CC24;CC24;110D 1175 11BF;CC24;110D 1175 11BF; # (찤; 찤; 찤; 찤; 찤; ) HANGUL SYLLABLE JJIK
+CC25;CC25;110D 1175 11C0;CC25;110D 1175 11C0; # (찥; 찥; 찥; 찥; 찥; ) HANGUL SYLLABLE JJIT
+CC26;CC26;110D 1175 11C1;CC26;110D 1175 11C1; # (찦; 찦; 찦; 찦; 찦; ) HANGUL SYLLABLE JJIP
+CC27;CC27;110D 1175 11C2;CC27;110D 1175 11C2; # (찧; 찧; 찧; 찧; 찧; ) HANGUL SYLLABLE JJIH
+CC28;CC28;110E 1161;CC28;110E 1161; # (차; 차; 차; 차; 차; ) HANGUL SYLLABLE CA
+CC29;CC29;110E 1161 11A8;CC29;110E 1161 11A8; # (착; 착; 착; 착; 착; ) HANGUL SYLLABLE CAG
+CC2A;CC2A;110E 1161 11A9;CC2A;110E 1161 11A9; # (찪; 찪; 찪; 찪; 찪; ) HANGUL SYLLABLE CAGG
+CC2B;CC2B;110E 1161 11AA;CC2B;110E 1161 11AA; # (찫; 찫; 찫; 찫; 찫; ) HANGUL SYLLABLE CAGS
+CC2C;CC2C;110E 1161 11AB;CC2C;110E 1161 11AB; # (찬; 찬; 찬; 찬; 찬; ) HANGUL SYLLABLE CAN
+CC2D;CC2D;110E 1161 11AC;CC2D;110E 1161 11AC; # (찭; 찭; 찭; 찭; 찭; ) HANGUL SYLLABLE CANJ
+CC2E;CC2E;110E 1161 11AD;CC2E;110E 1161 11AD; # (찮; 찮; 찮; 찮; 찮; ) HANGUL SYLLABLE CANH
+CC2F;CC2F;110E 1161 11AE;CC2F;110E 1161 11AE; # (찯; 찯; 찯; 찯; 찯; ) HANGUL SYLLABLE CAD
+CC30;CC30;110E 1161 11AF;CC30;110E 1161 11AF; # (찰; 찰; 찰; 찰; 찰; ) HANGUL SYLLABLE CAL
+CC31;CC31;110E 1161 11B0;CC31;110E 1161 11B0; # (찱; 찱; 찱; 찱; 찱; ) HANGUL SYLLABLE CALG
+CC32;CC32;110E 1161 11B1;CC32;110E 1161 11B1; # (찲; 찲; 찲; 찲; 찲; ) HANGUL SYLLABLE CALM
+CC33;CC33;110E 1161 11B2;CC33;110E 1161 11B2; # (찳; 찳; 찳; 찳; 찳; ) HANGUL SYLLABLE CALB
+CC34;CC34;110E 1161 11B3;CC34;110E 1161 11B3; # (찴; 찴; 찴; 찴; 찴; ) HANGUL SYLLABLE CALS
+CC35;CC35;110E 1161 11B4;CC35;110E 1161 11B4; # (찵; 찵; 찵; 찵; 찵; ) HANGUL SYLLABLE CALT
+CC36;CC36;110E 1161 11B5;CC36;110E 1161 11B5; # (찶; 찶; 찶; 찶; 찶; ) HANGUL SYLLABLE CALP
+CC37;CC37;110E 1161 11B6;CC37;110E 1161 11B6; # (찷; 찷; 찷; 찷; 찷; ) HANGUL SYLLABLE CALH
+CC38;CC38;110E 1161 11B7;CC38;110E 1161 11B7; # (참; 참; 참; 참; 참; ) HANGUL SYLLABLE CAM
+CC39;CC39;110E 1161 11B8;CC39;110E 1161 11B8; # (찹; 찹; 찹; 찹; 찹; ) HANGUL SYLLABLE CAB
+CC3A;CC3A;110E 1161 11B9;CC3A;110E 1161 11B9; # (찺; 찺; 찺; 찺; 찺; ) HANGUL SYLLABLE CABS
+CC3B;CC3B;110E 1161 11BA;CC3B;110E 1161 11BA; # (찻; 찻; 찻; 찻; 찻; ) HANGUL SYLLABLE CAS
+CC3C;CC3C;110E 1161 11BB;CC3C;110E 1161 11BB; # (찼; 찼; 찼; 찼; 찼; ) HANGUL SYLLABLE CASS
+CC3D;CC3D;110E 1161 11BC;CC3D;110E 1161 11BC; # (창; 창; 창; 창; 창; ) HANGUL SYLLABLE CANG
+CC3E;CC3E;110E 1161 11BD;CC3E;110E 1161 11BD; # (찾; 찾; 찾; 찾; 찾; ) HANGUL SYLLABLE CAJ
+CC3F;CC3F;110E 1161 11BE;CC3F;110E 1161 11BE; # (찿; 찿; 찿; 찿; 찿; ) HANGUL SYLLABLE CAC
+CC40;CC40;110E 1161 11BF;CC40;110E 1161 11BF; # (챀; 챀; 챀; 챀; 챀; ) HANGUL SYLLABLE CAK
+CC41;CC41;110E 1161 11C0;CC41;110E 1161 11C0; # (챁; 챁; 챁; 챁; 챁; ) HANGUL SYLLABLE CAT
+CC42;CC42;110E 1161 11C1;CC42;110E 1161 11C1; # (챂; 챂; 챂; 챂; 챂; ) HANGUL SYLLABLE CAP
+CC43;CC43;110E 1161 11C2;CC43;110E 1161 11C2; # (챃; 챃; 챃; 챃; 챃; ) HANGUL SYLLABLE CAH
+CC44;CC44;110E 1162;CC44;110E 1162; # (채; 채; 채; 채; 채; ) HANGUL SYLLABLE CAE
+CC45;CC45;110E 1162 11A8;CC45;110E 1162 11A8; # (책; 책; 책; 책; 책; ) HANGUL SYLLABLE CAEG
+CC46;CC46;110E 1162 11A9;CC46;110E 1162 11A9; # (챆; 챆; 챆; 챆; 챆; ) HANGUL SYLLABLE CAEGG
+CC47;CC47;110E 1162 11AA;CC47;110E 1162 11AA; # (챇; 챇; 챇; 챇; 챇; ) HANGUL SYLLABLE CAEGS
+CC48;CC48;110E 1162 11AB;CC48;110E 1162 11AB; # (챈; 챈; 챈; 챈; 챈; ) HANGUL SYLLABLE CAEN
+CC49;CC49;110E 1162 11AC;CC49;110E 1162 11AC; # (챉; 챉; 챉; 챉; 챉; ) HANGUL SYLLABLE CAENJ
+CC4A;CC4A;110E 1162 11AD;CC4A;110E 1162 11AD; # (챊; 챊; 챊; 챊; 챊; ) HANGUL SYLLABLE CAENH
+CC4B;CC4B;110E 1162 11AE;CC4B;110E 1162 11AE; # (챋; 챋; 챋; 챋; 챋; ) HANGUL SYLLABLE CAED
+CC4C;CC4C;110E 1162 11AF;CC4C;110E 1162 11AF; # (챌; 챌; 챌; 챌; 챌; ) HANGUL SYLLABLE CAEL
+CC4D;CC4D;110E 1162 11B0;CC4D;110E 1162 11B0; # (챍; 챍; 챍; 챍; 챍; ) HANGUL SYLLABLE CAELG
+CC4E;CC4E;110E 1162 11B1;CC4E;110E 1162 11B1; # (챎; 챎; 챎; 챎; 챎; ) HANGUL SYLLABLE CAELM
+CC4F;CC4F;110E 1162 11B2;CC4F;110E 1162 11B2; # (챏; 챏; 챏; 챏; 챏; ) HANGUL SYLLABLE CAELB
+CC50;CC50;110E 1162 11B3;CC50;110E 1162 11B3; # (챐; 챐; 챐; 챐; 챐; ) HANGUL SYLLABLE CAELS
+CC51;CC51;110E 1162 11B4;CC51;110E 1162 11B4; # (챑; 챑; 챑; 챑; 챑; ) HANGUL SYLLABLE CAELT
+CC52;CC52;110E 1162 11B5;CC52;110E 1162 11B5; # (챒; 챒; 챒; 챒; 챒; ) HANGUL SYLLABLE CAELP
+CC53;CC53;110E 1162 11B6;CC53;110E 1162 11B6; # (챓; 챓; 챓; 챓; 챓; ) HANGUL SYLLABLE CAELH
+CC54;CC54;110E 1162 11B7;CC54;110E 1162 11B7; # (챔; 챔; 챔; 챔; 챔; ) HANGUL SYLLABLE CAEM
+CC55;CC55;110E 1162 11B8;CC55;110E 1162 11B8; # (챕; 챕; 챕; 챕; 챕; ) HANGUL SYLLABLE CAEB
+CC56;CC56;110E 1162 11B9;CC56;110E 1162 11B9; # (챖; 챖; 챖; 챖; 챖; ) HANGUL SYLLABLE CAEBS
+CC57;CC57;110E 1162 11BA;CC57;110E 1162 11BA; # (챗; 챗; 챗; 챗; 챗; ) HANGUL SYLLABLE CAES
+CC58;CC58;110E 1162 11BB;CC58;110E 1162 11BB; # (챘; 챘; 챘; 챘; 챘; ) HANGUL SYLLABLE CAESS
+CC59;CC59;110E 1162 11BC;CC59;110E 1162 11BC; # (챙; 챙; 챙; 챙; 챙; ) HANGUL SYLLABLE CAENG
+CC5A;CC5A;110E 1162 11BD;CC5A;110E 1162 11BD; # (챚; 챚; 챚; 챚; 챚; ) HANGUL SYLLABLE CAEJ
+CC5B;CC5B;110E 1162 11BE;CC5B;110E 1162 11BE; # (챛; 챛; 챛; 챛; 챛; ) HANGUL SYLLABLE CAEC
+CC5C;CC5C;110E 1162 11BF;CC5C;110E 1162 11BF; # (챜; 챜; 챜; 챜; 챜; ) HANGUL SYLLABLE CAEK
+CC5D;CC5D;110E 1162 11C0;CC5D;110E 1162 11C0; # (챝; 챝; 챝; 챝; 챝; ) HANGUL SYLLABLE CAET
+CC5E;CC5E;110E 1162 11C1;CC5E;110E 1162 11C1; # (챞; 챞; 챞; 챞; 챞; ) HANGUL SYLLABLE CAEP
+CC5F;CC5F;110E 1162 11C2;CC5F;110E 1162 11C2; # (챟; 챟; 챟; 챟; 챟; ) HANGUL SYLLABLE CAEH
+CC60;CC60;110E 1163;CC60;110E 1163; # (챠; 챠; 챠; 챠; 챠; ) HANGUL SYLLABLE CYA
+CC61;CC61;110E 1163 11A8;CC61;110E 1163 11A8; # (챡; 챡; 챡; 챡; 챡; ) HANGUL SYLLABLE CYAG
+CC62;CC62;110E 1163 11A9;CC62;110E 1163 11A9; # (챢; 챢; 챢; 챢; 챢; ) HANGUL SYLLABLE CYAGG
+CC63;CC63;110E 1163 11AA;CC63;110E 1163 11AA; # (챣; 챣; 챣; 챣; 챣; ) HANGUL SYLLABLE CYAGS
+CC64;CC64;110E 1163 11AB;CC64;110E 1163 11AB; # (챤; 챤; 챤; 챤; 챤; ) HANGUL SYLLABLE CYAN
+CC65;CC65;110E 1163 11AC;CC65;110E 1163 11AC; # (챥; 챥; 챥; 챥; 챥; ) HANGUL SYLLABLE CYANJ
+CC66;CC66;110E 1163 11AD;CC66;110E 1163 11AD; # (챦; 챦; 챦; 챦; 챦; ) HANGUL SYLLABLE CYANH
+CC67;CC67;110E 1163 11AE;CC67;110E 1163 11AE; # (챧; 챧; 챧; 챧; 챧; ) HANGUL SYLLABLE CYAD
+CC68;CC68;110E 1163 11AF;CC68;110E 1163 11AF; # (챨; 챨; 챨; 챨; 챨; ) HANGUL SYLLABLE CYAL
+CC69;CC69;110E 1163 11B0;CC69;110E 1163 11B0; # (챩; 챩; 챩; 챩; 챩; ) HANGUL SYLLABLE CYALG
+CC6A;CC6A;110E 1163 11B1;CC6A;110E 1163 11B1; # (챪; 챪; 챪; 챪; 챪; ) HANGUL SYLLABLE CYALM
+CC6B;CC6B;110E 1163 11B2;CC6B;110E 1163 11B2; # (챫; 챫; 챫; 챫; 챫; ) HANGUL SYLLABLE CYALB
+CC6C;CC6C;110E 1163 11B3;CC6C;110E 1163 11B3; # (챬; 챬; 챬; 챬; 챬; ) HANGUL SYLLABLE CYALS
+CC6D;CC6D;110E 1163 11B4;CC6D;110E 1163 11B4; # (챭; 챭; 챭; 챭; 챭; ) HANGUL SYLLABLE CYALT
+CC6E;CC6E;110E 1163 11B5;CC6E;110E 1163 11B5; # (챮; 챮; 챮; 챮; 챮; ) HANGUL SYLLABLE CYALP
+CC6F;CC6F;110E 1163 11B6;CC6F;110E 1163 11B6; # (챯; 챯; 챯; 챯; 챯; ) HANGUL SYLLABLE CYALH
+CC70;CC70;110E 1163 11B7;CC70;110E 1163 11B7; # (챰; 챰; 챰; 챰; 챰; ) HANGUL SYLLABLE CYAM
+CC71;CC71;110E 1163 11B8;CC71;110E 1163 11B8; # (챱; 챱; 챱; 챱; 챱; ) HANGUL SYLLABLE CYAB
+CC72;CC72;110E 1163 11B9;CC72;110E 1163 11B9; # (챲; 챲; 챲; 챲; 챲; ) HANGUL SYLLABLE CYABS
+CC73;CC73;110E 1163 11BA;CC73;110E 1163 11BA; # (챳; 챳; 챳; 챳; 챳; ) HANGUL SYLLABLE CYAS
+CC74;CC74;110E 1163 11BB;CC74;110E 1163 11BB; # (챴; 챴; 챴; 챴; 챴; ) HANGUL SYLLABLE CYASS
+CC75;CC75;110E 1163 11BC;CC75;110E 1163 11BC; # (챵; 챵; 챵; 챵; 챵; ) HANGUL SYLLABLE CYANG
+CC76;CC76;110E 1163 11BD;CC76;110E 1163 11BD; # (챶; 챶; 챶; 챶; 챶; ) HANGUL SYLLABLE CYAJ
+CC77;CC77;110E 1163 11BE;CC77;110E 1163 11BE; # (챷; 챷; 챷; 챷; 챷; ) HANGUL SYLLABLE CYAC
+CC78;CC78;110E 1163 11BF;CC78;110E 1163 11BF; # (챸; 챸; 챸; 챸; 챸; ) HANGUL SYLLABLE CYAK
+CC79;CC79;110E 1163 11C0;CC79;110E 1163 11C0; # (챹; 챹; 챹; 챹; 챹; ) HANGUL SYLLABLE CYAT
+CC7A;CC7A;110E 1163 11C1;CC7A;110E 1163 11C1; # (챺; 챺; 챺; 챺; 챺; ) HANGUL SYLLABLE CYAP
+CC7B;CC7B;110E 1163 11C2;CC7B;110E 1163 11C2; # (챻; 챻; 챻; 챻; 챻; ) HANGUL SYLLABLE CYAH
+CC7C;CC7C;110E 1164;CC7C;110E 1164; # (챼; 챼; 챼; 챼; 챼; ) HANGUL SYLLABLE CYAE
+CC7D;CC7D;110E 1164 11A8;CC7D;110E 1164 11A8; # (챽; 챽; 챽; 챽; 챽; ) HANGUL SYLLABLE CYAEG
+CC7E;CC7E;110E 1164 11A9;CC7E;110E 1164 11A9; # (챾; 챾; 챾; 챾; 챾; ) HANGUL SYLLABLE CYAEGG
+CC7F;CC7F;110E 1164 11AA;CC7F;110E 1164 11AA; # (챿; 챿; 챿; 챿; 챿; ) HANGUL SYLLABLE CYAEGS
+CC80;CC80;110E 1164 11AB;CC80;110E 1164 11AB; # (첀; 첀; 첀; 첀; 첀; ) HANGUL SYLLABLE CYAEN
+CC81;CC81;110E 1164 11AC;CC81;110E 1164 11AC; # (첁; 첁; 첁; 첁; 첁; ) HANGUL SYLLABLE CYAENJ
+CC82;CC82;110E 1164 11AD;CC82;110E 1164 11AD; # (첂; 첂; 첂; 첂; 첂; ) HANGUL SYLLABLE CYAENH
+CC83;CC83;110E 1164 11AE;CC83;110E 1164 11AE; # (첃; 첃; 첃; 첃; 첃; ) HANGUL SYLLABLE CYAED
+CC84;CC84;110E 1164 11AF;CC84;110E 1164 11AF; # (첄; 첄; 첄; 첄; 첄; ) HANGUL SYLLABLE CYAEL
+CC85;CC85;110E 1164 11B0;CC85;110E 1164 11B0; # (첅; 첅; 첅; 첅; 첅; ) HANGUL SYLLABLE CYAELG
+CC86;CC86;110E 1164 11B1;CC86;110E 1164 11B1; # (첆; 첆; 첆; 첆; 첆; ) HANGUL SYLLABLE CYAELM
+CC87;CC87;110E 1164 11B2;CC87;110E 1164 11B2; # (첇; 첇; 첇; 첇; 첇; ) HANGUL SYLLABLE CYAELB
+CC88;CC88;110E 1164 11B3;CC88;110E 1164 11B3; # (첈; 첈; 첈; 첈; 첈; ) HANGUL SYLLABLE CYAELS
+CC89;CC89;110E 1164 11B4;CC89;110E 1164 11B4; # (첉; 첉; 첉; 첉; 첉; ) HANGUL SYLLABLE CYAELT
+CC8A;CC8A;110E 1164 11B5;CC8A;110E 1164 11B5; # (첊; 첊; 첊; 첊; 첊; ) HANGUL SYLLABLE CYAELP
+CC8B;CC8B;110E 1164 11B6;CC8B;110E 1164 11B6; # (첋; 첋; 첋; 첋; 첋; ) HANGUL SYLLABLE CYAELH
+CC8C;CC8C;110E 1164 11B7;CC8C;110E 1164 11B7; # (첌; 첌; 첌; 첌; 첌; ) HANGUL SYLLABLE CYAEM
+CC8D;CC8D;110E 1164 11B8;CC8D;110E 1164 11B8; # (첍; 첍; 첍; 첍; 첍; ) HANGUL SYLLABLE CYAEB
+CC8E;CC8E;110E 1164 11B9;CC8E;110E 1164 11B9; # (첎; 첎; 첎; 첎; 첎; ) HANGUL SYLLABLE CYAEBS
+CC8F;CC8F;110E 1164 11BA;CC8F;110E 1164 11BA; # (첏; 첏; 첏; 첏; 첏; ) HANGUL SYLLABLE CYAES
+CC90;CC90;110E 1164 11BB;CC90;110E 1164 11BB; # (첐; 첐; 첐; 첐; 첐; ) HANGUL SYLLABLE CYAESS
+CC91;CC91;110E 1164 11BC;CC91;110E 1164 11BC; # (첑; 첑; 첑; 첑; 첑; ) HANGUL SYLLABLE CYAENG
+CC92;CC92;110E 1164 11BD;CC92;110E 1164 11BD; # (첒; 첒; 첒; 첒; 첒; ) HANGUL SYLLABLE CYAEJ
+CC93;CC93;110E 1164 11BE;CC93;110E 1164 11BE; # (첓; 첓; 첓; 첓; 첓; ) HANGUL SYLLABLE CYAEC
+CC94;CC94;110E 1164 11BF;CC94;110E 1164 11BF; # (첔; 첔; 첔; 첔; 첔; ) HANGUL SYLLABLE CYAEK
+CC95;CC95;110E 1164 11C0;CC95;110E 1164 11C0; # (첕; 첕; 첕; 첕; 첕; ) HANGUL SYLLABLE CYAET
+CC96;CC96;110E 1164 11C1;CC96;110E 1164 11C1; # (첖; 첖; 첖; 첖; 첖; ) HANGUL SYLLABLE CYAEP
+CC97;CC97;110E 1164 11C2;CC97;110E 1164 11C2; # (첗; 첗; 첗; 첗; 첗; ) HANGUL SYLLABLE CYAEH
+CC98;CC98;110E 1165;CC98;110E 1165; # (처; 처; 처; 처; 처; ) HANGUL SYLLABLE CEO
+CC99;CC99;110E 1165 11A8;CC99;110E 1165 11A8; # (척; 척; 척; 척; 척; ) HANGUL SYLLABLE CEOG
+CC9A;CC9A;110E 1165 11A9;CC9A;110E 1165 11A9; # (첚; 첚; 첚; 첚; 첚; ) HANGUL SYLLABLE CEOGG
+CC9B;CC9B;110E 1165 11AA;CC9B;110E 1165 11AA; # (첛; 첛; 첛; 첛; 첛; ) HANGUL SYLLABLE CEOGS
+CC9C;CC9C;110E 1165 11AB;CC9C;110E 1165 11AB; # (천; 천; 천; 천; 천; ) HANGUL SYLLABLE CEON
+CC9D;CC9D;110E 1165 11AC;CC9D;110E 1165 11AC; # (첝; 첝; 첝; 첝; 첝; ) HANGUL SYLLABLE CEONJ
+CC9E;CC9E;110E 1165 11AD;CC9E;110E 1165 11AD; # (첞; 첞; 첞; 첞; 첞; ) HANGUL SYLLABLE CEONH
+CC9F;CC9F;110E 1165 11AE;CC9F;110E 1165 11AE; # (첟; 첟; 첟; 첟; 첟; ) HANGUL SYLLABLE CEOD
+CCA0;CCA0;110E 1165 11AF;CCA0;110E 1165 11AF; # (철; 철; 철; 철; 철; ) HANGUL SYLLABLE CEOL
+CCA1;CCA1;110E 1165 11B0;CCA1;110E 1165 11B0; # (첡; 첡; 첡; 첡; 첡; ) HANGUL SYLLABLE CEOLG
+CCA2;CCA2;110E 1165 11B1;CCA2;110E 1165 11B1; # (첢; 첢; 첢; 첢; 첢; ) HANGUL SYLLABLE CEOLM
+CCA3;CCA3;110E 1165 11B2;CCA3;110E 1165 11B2; # (첣; 첣; 첣; 첣; 첣; ) HANGUL SYLLABLE CEOLB
+CCA4;CCA4;110E 1165 11B3;CCA4;110E 1165 11B3; # (첤; 첤; 첤; 첤; 첤; ) HANGUL SYLLABLE CEOLS
+CCA5;CCA5;110E 1165 11B4;CCA5;110E 1165 11B4; # (첥; 첥; 첥; 첥; 첥; ) HANGUL SYLLABLE CEOLT
+CCA6;CCA6;110E 1165 11B5;CCA6;110E 1165 11B5; # (첦; 첦; 첦; 첦; 첦; ) HANGUL SYLLABLE CEOLP
+CCA7;CCA7;110E 1165 11B6;CCA7;110E 1165 11B6; # (첧; 첧; 첧; 첧; 첧; ) HANGUL SYLLABLE CEOLH
+CCA8;CCA8;110E 1165 11B7;CCA8;110E 1165 11B7; # (첨; 첨; 첨; 첨; 첨; ) HANGUL SYLLABLE CEOM
+CCA9;CCA9;110E 1165 11B8;CCA9;110E 1165 11B8; # (첩; 첩; 첩; 첩; 첩; ) HANGUL SYLLABLE CEOB
+CCAA;CCAA;110E 1165 11B9;CCAA;110E 1165 11B9; # (첪; 첪; 첪; 첪; 첪; ) HANGUL SYLLABLE CEOBS
+CCAB;CCAB;110E 1165 11BA;CCAB;110E 1165 11BA; # (첫; 첫; 첫; 첫; 첫; ) HANGUL SYLLABLE CEOS
+CCAC;CCAC;110E 1165 11BB;CCAC;110E 1165 11BB; # (첬; 첬; 첬; 첬; 첬; ) HANGUL SYLLABLE CEOSS
+CCAD;CCAD;110E 1165 11BC;CCAD;110E 1165 11BC; # (청; 청; 청; 청; 청; ) HANGUL SYLLABLE CEONG
+CCAE;CCAE;110E 1165 11BD;CCAE;110E 1165 11BD; # (첮; 첮; 첮; 첮; 첮; ) HANGUL SYLLABLE CEOJ
+CCAF;CCAF;110E 1165 11BE;CCAF;110E 1165 11BE; # (첯; 첯; 첯; 첯; 첯; ) HANGUL SYLLABLE CEOC
+CCB0;CCB0;110E 1165 11BF;CCB0;110E 1165 11BF; # (첰; 첰; 첰; 첰; 첰; ) HANGUL SYLLABLE CEOK
+CCB1;CCB1;110E 1165 11C0;CCB1;110E 1165 11C0; # (첱; 첱; 첱; 첱; 첱; ) HANGUL SYLLABLE CEOT
+CCB2;CCB2;110E 1165 11C1;CCB2;110E 1165 11C1; # (첲; 첲; 첲; 첲; 첲; ) HANGUL SYLLABLE CEOP
+CCB3;CCB3;110E 1165 11C2;CCB3;110E 1165 11C2; # (첳; 첳; 첳; 첳; 첳; ) HANGUL SYLLABLE CEOH
+CCB4;CCB4;110E 1166;CCB4;110E 1166; # (체; 체; 체; 체; 체; ) HANGUL SYLLABLE CE
+CCB5;CCB5;110E 1166 11A8;CCB5;110E 1166 11A8; # (첵; 첵; 첵; 첵; 첵; ) HANGUL SYLLABLE CEG
+CCB6;CCB6;110E 1166 11A9;CCB6;110E 1166 11A9; # (첶; 첶; 첶; 첶; 첶; ) HANGUL SYLLABLE CEGG
+CCB7;CCB7;110E 1166 11AA;CCB7;110E 1166 11AA; # (첷; 첷; 첷; 첷; 첷; ) HANGUL SYLLABLE CEGS
+CCB8;CCB8;110E 1166 11AB;CCB8;110E 1166 11AB; # (첸; 첸; 첸; 첸; 첸; ) HANGUL SYLLABLE CEN
+CCB9;CCB9;110E 1166 11AC;CCB9;110E 1166 11AC; # (첹; 첹; 첹; 첹; 첹; ) HANGUL SYLLABLE CENJ
+CCBA;CCBA;110E 1166 11AD;CCBA;110E 1166 11AD; # (첺; 첺; 첺; 첺; 첺; ) HANGUL SYLLABLE CENH
+CCBB;CCBB;110E 1166 11AE;CCBB;110E 1166 11AE; # (첻; 첻; 첻; 첻; 첻; ) HANGUL SYLLABLE CED
+CCBC;CCBC;110E 1166 11AF;CCBC;110E 1166 11AF; # (첼; 첼; 첼; 첼; 첼; ) HANGUL SYLLABLE CEL
+CCBD;CCBD;110E 1166 11B0;CCBD;110E 1166 11B0; # (첽; 첽; 첽; 첽; 첽; ) HANGUL SYLLABLE CELG
+CCBE;CCBE;110E 1166 11B1;CCBE;110E 1166 11B1; # (첾; 첾; 첾; 첾; 첾; ) HANGUL SYLLABLE CELM
+CCBF;CCBF;110E 1166 11B2;CCBF;110E 1166 11B2; # (첿; 첿; 첿; 첿; 첿; ) HANGUL SYLLABLE CELB
+CCC0;CCC0;110E 1166 11B3;CCC0;110E 1166 11B3; # (쳀; 쳀; 쳀; 쳀; 쳀; ) HANGUL SYLLABLE CELS
+CCC1;CCC1;110E 1166 11B4;CCC1;110E 1166 11B4; # (쳁; 쳁; 쳁; 쳁; 쳁; ) HANGUL SYLLABLE CELT
+CCC2;CCC2;110E 1166 11B5;CCC2;110E 1166 11B5; # (쳂; 쳂; 쳂; 쳂; 쳂; ) HANGUL SYLLABLE CELP
+CCC3;CCC3;110E 1166 11B6;CCC3;110E 1166 11B6; # (쳃; 쳃; 쳃; 쳃; 쳃; ) HANGUL SYLLABLE CELH
+CCC4;CCC4;110E 1166 11B7;CCC4;110E 1166 11B7; # (쳄; 쳄; 쳄; 쳄; 쳄; ) HANGUL SYLLABLE CEM
+CCC5;CCC5;110E 1166 11B8;CCC5;110E 1166 11B8; # (쳅; 쳅; 쳅; 쳅; 쳅; ) HANGUL SYLLABLE CEB
+CCC6;CCC6;110E 1166 11B9;CCC6;110E 1166 11B9; # (쳆; 쳆; 쳆; 쳆; 쳆; ) HANGUL SYLLABLE CEBS
+CCC7;CCC7;110E 1166 11BA;CCC7;110E 1166 11BA; # (쳇; 쳇; 쳇; 쳇; 쳇; ) HANGUL SYLLABLE CES
+CCC8;CCC8;110E 1166 11BB;CCC8;110E 1166 11BB; # (쳈; 쳈; 쳈; 쳈; 쳈; ) HANGUL SYLLABLE CESS
+CCC9;CCC9;110E 1166 11BC;CCC9;110E 1166 11BC; # (쳉; 쳉; 쳉; 쳉; 쳉; ) HANGUL SYLLABLE CENG
+CCCA;CCCA;110E 1166 11BD;CCCA;110E 1166 11BD; # (쳊; 쳊; 쳊; 쳊; 쳊; ) HANGUL SYLLABLE CEJ
+CCCB;CCCB;110E 1166 11BE;CCCB;110E 1166 11BE; # (쳋; 쳋; 쳋; 쳋; 쳋; ) HANGUL SYLLABLE CEC
+CCCC;CCCC;110E 1166 11BF;CCCC;110E 1166 11BF; # (쳌; 쳌; 쳌; 쳌; 쳌; ) HANGUL SYLLABLE CEK
+CCCD;CCCD;110E 1166 11C0;CCCD;110E 1166 11C0; # (쳍; 쳍; 쳍; 쳍; 쳍; ) HANGUL SYLLABLE CET
+CCCE;CCCE;110E 1166 11C1;CCCE;110E 1166 11C1; # (쳎; 쳎; 쳎; 쳎; 쳎; ) HANGUL SYLLABLE CEP
+CCCF;CCCF;110E 1166 11C2;CCCF;110E 1166 11C2; # (쳏; 쳏; 쳏; 쳏; 쳏; ) HANGUL SYLLABLE CEH
+CCD0;CCD0;110E 1167;CCD0;110E 1167; # (쳐; 쳐; 쳐; 쳐; 쳐; ) HANGUL SYLLABLE CYEO
+CCD1;CCD1;110E 1167 11A8;CCD1;110E 1167 11A8; # (쳑; 쳑; 쳑; 쳑; 쳑; ) HANGUL SYLLABLE CYEOG
+CCD2;CCD2;110E 1167 11A9;CCD2;110E 1167 11A9; # (쳒; 쳒; 쳒; 쳒; 쳒; ) HANGUL SYLLABLE CYEOGG
+CCD3;CCD3;110E 1167 11AA;CCD3;110E 1167 11AA; # (쳓; 쳓; 쳓; 쳓; 쳓; ) HANGUL SYLLABLE CYEOGS
+CCD4;CCD4;110E 1167 11AB;CCD4;110E 1167 11AB; # (쳔; 쳔; 쳔; 쳔; 쳔; ) HANGUL SYLLABLE CYEON
+CCD5;CCD5;110E 1167 11AC;CCD5;110E 1167 11AC; # (쳕; 쳕; 쳕; 쳕; 쳕; ) HANGUL SYLLABLE CYEONJ
+CCD6;CCD6;110E 1167 11AD;CCD6;110E 1167 11AD; # (쳖; 쳖; 쳖; 쳖; 쳖; ) HANGUL SYLLABLE CYEONH
+CCD7;CCD7;110E 1167 11AE;CCD7;110E 1167 11AE; # (쳗; 쳗; 쳗; 쳗; 쳗; ) HANGUL SYLLABLE CYEOD
+CCD8;CCD8;110E 1167 11AF;CCD8;110E 1167 11AF; # (쳘; 쳘; 쳘; 쳘; 쳘; ) HANGUL SYLLABLE CYEOL
+CCD9;CCD9;110E 1167 11B0;CCD9;110E 1167 11B0; # (쳙; 쳙; 쳙; 쳙; 쳙; ) HANGUL SYLLABLE CYEOLG
+CCDA;CCDA;110E 1167 11B1;CCDA;110E 1167 11B1; # (쳚; 쳚; 쳚; 쳚; 쳚; ) HANGUL SYLLABLE CYEOLM
+CCDB;CCDB;110E 1167 11B2;CCDB;110E 1167 11B2; # (쳛; 쳛; 쳛; 쳛; 쳛; ) HANGUL SYLLABLE CYEOLB
+CCDC;CCDC;110E 1167 11B3;CCDC;110E 1167 11B3; # (쳜; 쳜; 쳜; 쳜; 쳜; ) HANGUL SYLLABLE CYEOLS
+CCDD;CCDD;110E 1167 11B4;CCDD;110E 1167 11B4; # (쳝; 쳝; 쳝; 쳝; 쳝; ) HANGUL SYLLABLE CYEOLT
+CCDE;CCDE;110E 1167 11B5;CCDE;110E 1167 11B5; # (쳞; 쳞; 쳞; 쳞; 쳞; ) HANGUL SYLLABLE CYEOLP
+CCDF;CCDF;110E 1167 11B6;CCDF;110E 1167 11B6; # (쳟; 쳟; 쳟; 쳟; 쳟; ) HANGUL SYLLABLE CYEOLH
+CCE0;CCE0;110E 1167 11B7;CCE0;110E 1167 11B7; # (쳠; 쳠; 쳠; 쳠; 쳠; ) HANGUL SYLLABLE CYEOM
+CCE1;CCE1;110E 1167 11B8;CCE1;110E 1167 11B8; # (쳡; 쳡; 쳡; 쳡; 쳡; ) HANGUL SYLLABLE CYEOB
+CCE2;CCE2;110E 1167 11B9;CCE2;110E 1167 11B9; # (쳢; 쳢; 쳢; 쳢; 쳢; ) HANGUL SYLLABLE CYEOBS
+CCE3;CCE3;110E 1167 11BA;CCE3;110E 1167 11BA; # (쳣; 쳣; 쳣; 쳣; 쳣; ) HANGUL SYLLABLE CYEOS
+CCE4;CCE4;110E 1167 11BB;CCE4;110E 1167 11BB; # (쳤; 쳤; 쳤; 쳤; 쳤; ) HANGUL SYLLABLE CYEOSS
+CCE5;CCE5;110E 1167 11BC;CCE5;110E 1167 11BC; # (쳥; 쳥; 쳥; 쳥; 쳥; ) HANGUL SYLLABLE CYEONG
+CCE6;CCE6;110E 1167 11BD;CCE6;110E 1167 11BD; # (쳦; 쳦; 쳦; 쳦; 쳦; ) HANGUL SYLLABLE CYEOJ
+CCE7;CCE7;110E 1167 11BE;CCE7;110E 1167 11BE; # (쳧; 쳧; 쳧; 쳧; 쳧; ) HANGUL SYLLABLE CYEOC
+CCE8;CCE8;110E 1167 11BF;CCE8;110E 1167 11BF; # (쳨; 쳨; 쳨; 쳨; 쳨; ) HANGUL SYLLABLE CYEOK
+CCE9;CCE9;110E 1167 11C0;CCE9;110E 1167 11C0; # (쳩; 쳩; 쳩; 쳩; 쳩; ) HANGUL SYLLABLE CYEOT
+CCEA;CCEA;110E 1167 11C1;CCEA;110E 1167 11C1; # (쳪; 쳪; 쳪; 쳪; 쳪; ) HANGUL SYLLABLE CYEOP
+CCEB;CCEB;110E 1167 11C2;CCEB;110E 1167 11C2; # (쳫; 쳫; 쳫; 쳫; 쳫; ) HANGUL SYLLABLE CYEOH
+CCEC;CCEC;110E 1168;CCEC;110E 1168; # (쳬; 쳬; 쳬; 쳬; 쳬; ) HANGUL SYLLABLE CYE
+CCED;CCED;110E 1168 11A8;CCED;110E 1168 11A8; # (쳭; 쳭; 쳭; 쳭; 쳭; ) HANGUL SYLLABLE CYEG
+CCEE;CCEE;110E 1168 11A9;CCEE;110E 1168 11A9; # (쳮; 쳮; 쳮; 쳮; 쳮; ) HANGUL SYLLABLE CYEGG
+CCEF;CCEF;110E 1168 11AA;CCEF;110E 1168 11AA; # (쳯; 쳯; 쳯; 쳯; 쳯; ) HANGUL SYLLABLE CYEGS
+CCF0;CCF0;110E 1168 11AB;CCF0;110E 1168 11AB; # (쳰; 쳰; 쳰; 쳰; 쳰; ) HANGUL SYLLABLE CYEN
+CCF1;CCF1;110E 1168 11AC;CCF1;110E 1168 11AC; # (쳱; 쳱; 쳱; 쳱; 쳱; ) HANGUL SYLLABLE CYENJ
+CCF2;CCF2;110E 1168 11AD;CCF2;110E 1168 11AD; # (쳲; 쳲; 쳲; 쳲; 쳲; ) HANGUL SYLLABLE CYENH
+CCF3;CCF3;110E 1168 11AE;CCF3;110E 1168 11AE; # (쳳; 쳳; 쳳; 쳳; 쳳; ) HANGUL SYLLABLE CYED
+CCF4;CCF4;110E 1168 11AF;CCF4;110E 1168 11AF; # (쳴; 쳴; 쳴; 쳴; 쳴; ) HANGUL SYLLABLE CYEL
+CCF5;CCF5;110E 1168 11B0;CCF5;110E 1168 11B0; # (쳵; 쳵; 쳵; 쳵; 쳵; ) HANGUL SYLLABLE CYELG
+CCF6;CCF6;110E 1168 11B1;CCF6;110E 1168 11B1; # (쳶; 쳶; 쳶; 쳶; 쳶; ) HANGUL SYLLABLE CYELM
+CCF7;CCF7;110E 1168 11B2;CCF7;110E 1168 11B2; # (쳷; 쳷; 쳷; 쳷; 쳷; ) HANGUL SYLLABLE CYELB
+CCF8;CCF8;110E 1168 11B3;CCF8;110E 1168 11B3; # (쳸; 쳸; 쳸; 쳸; 쳸; ) HANGUL SYLLABLE CYELS
+CCF9;CCF9;110E 1168 11B4;CCF9;110E 1168 11B4; # (쳹; 쳹; 쳹; 쳹; 쳹; ) HANGUL SYLLABLE CYELT
+CCFA;CCFA;110E 1168 11B5;CCFA;110E 1168 11B5; # (쳺; 쳺; 쳺; 쳺; 쳺; ) HANGUL SYLLABLE CYELP
+CCFB;CCFB;110E 1168 11B6;CCFB;110E 1168 11B6; # (쳻; 쳻; 쳻; 쳻; 쳻; ) HANGUL SYLLABLE CYELH
+CCFC;CCFC;110E 1168 11B7;CCFC;110E 1168 11B7; # (쳼; 쳼; 쳼; 쳼; 쳼; ) HANGUL SYLLABLE CYEM
+CCFD;CCFD;110E 1168 11B8;CCFD;110E 1168 11B8; # (쳽; 쳽; 쳽; 쳽; 쳽; ) HANGUL SYLLABLE CYEB
+CCFE;CCFE;110E 1168 11B9;CCFE;110E 1168 11B9; # (쳾; 쳾; 쳾; 쳾; 쳾; ) HANGUL SYLLABLE CYEBS
+CCFF;CCFF;110E 1168 11BA;CCFF;110E 1168 11BA; # (쳿; 쳿; 쳿; 쳿; 쳿; ) HANGUL SYLLABLE CYES
+CD00;CD00;110E 1168 11BB;CD00;110E 1168 11BB; # (촀; 촀; 촀; 촀; 촀; ) HANGUL SYLLABLE CYESS
+CD01;CD01;110E 1168 11BC;CD01;110E 1168 11BC; # (촁; 촁; 촁; 촁; 촁; ) HANGUL SYLLABLE CYENG
+CD02;CD02;110E 1168 11BD;CD02;110E 1168 11BD; # (촂; 촂; 촂; 촂; 촂; ) HANGUL SYLLABLE CYEJ
+CD03;CD03;110E 1168 11BE;CD03;110E 1168 11BE; # (촃; 촃; 촃; 촃; 촃; ) HANGUL SYLLABLE CYEC
+CD04;CD04;110E 1168 11BF;CD04;110E 1168 11BF; # (촄; 촄; 촄; 촄; 촄; ) HANGUL SYLLABLE CYEK
+CD05;CD05;110E 1168 11C0;CD05;110E 1168 11C0; # (촅; 촅; 촅; 촅; 촅; ) HANGUL SYLLABLE CYET
+CD06;CD06;110E 1168 11C1;CD06;110E 1168 11C1; # (촆; 촆; 촆; 촆; 촆; ) HANGUL SYLLABLE CYEP
+CD07;CD07;110E 1168 11C2;CD07;110E 1168 11C2; # (촇; 촇; 촇; 촇; 촇; ) HANGUL SYLLABLE CYEH
+CD08;CD08;110E 1169;CD08;110E 1169; # (초; 초; 초; 초; 초; ) HANGUL SYLLABLE CO
+CD09;CD09;110E 1169 11A8;CD09;110E 1169 11A8; # (촉; 촉; 촉; 촉; 촉; ) HANGUL SYLLABLE COG
+CD0A;CD0A;110E 1169 11A9;CD0A;110E 1169 11A9; # (촊; 촊; 촊; 촊; 촊; ) HANGUL SYLLABLE COGG
+CD0B;CD0B;110E 1169 11AA;CD0B;110E 1169 11AA; # (촋; 촋; 촋; 촋; 촋; ) HANGUL SYLLABLE COGS
+CD0C;CD0C;110E 1169 11AB;CD0C;110E 1169 11AB; # (촌; 촌; 촌; 촌; 촌; ) HANGUL SYLLABLE CON
+CD0D;CD0D;110E 1169 11AC;CD0D;110E 1169 11AC; # (촍; 촍; 촍; 촍; 촍; ) HANGUL SYLLABLE CONJ
+CD0E;CD0E;110E 1169 11AD;CD0E;110E 1169 11AD; # (촎; 촎; 촎; 촎; 촎; ) HANGUL SYLLABLE CONH
+CD0F;CD0F;110E 1169 11AE;CD0F;110E 1169 11AE; # (촏; 촏; 촏; 촏; 촏; ) HANGUL SYLLABLE COD
+CD10;CD10;110E 1169 11AF;CD10;110E 1169 11AF; # (촐; 촐; 촐; 촐; 촐; ) HANGUL SYLLABLE COL
+CD11;CD11;110E 1169 11B0;CD11;110E 1169 11B0; # (촑; 촑; 촑; 촑; 촑; ) HANGUL SYLLABLE COLG
+CD12;CD12;110E 1169 11B1;CD12;110E 1169 11B1; # (촒; 촒; 촒; 촒; 촒; ) HANGUL SYLLABLE COLM
+CD13;CD13;110E 1169 11B2;CD13;110E 1169 11B2; # (촓; 촓; 촓; 촓; 촓; ) HANGUL SYLLABLE COLB
+CD14;CD14;110E 1169 11B3;CD14;110E 1169 11B3; # (촔; 촔; 촔; 촔; 촔; ) HANGUL SYLLABLE COLS
+CD15;CD15;110E 1169 11B4;CD15;110E 1169 11B4; # (촕; 촕; 촕; 촕; 촕; ) HANGUL SYLLABLE COLT
+CD16;CD16;110E 1169 11B5;CD16;110E 1169 11B5; # (촖; 촖; 촖; 촖; 촖; ) HANGUL SYLLABLE COLP
+CD17;CD17;110E 1169 11B6;CD17;110E 1169 11B6; # (촗; 촗; 촗; 촗; 촗; ) HANGUL SYLLABLE COLH
+CD18;CD18;110E 1169 11B7;CD18;110E 1169 11B7; # (촘; 촘; 촘; 촘; 촘; ) HANGUL SYLLABLE COM
+CD19;CD19;110E 1169 11B8;CD19;110E 1169 11B8; # (촙; 촙; 촙; 촙; 촙; ) HANGUL SYLLABLE COB
+CD1A;CD1A;110E 1169 11B9;CD1A;110E 1169 11B9; # (촚; 촚; 촚; 촚; 촚; ) HANGUL SYLLABLE COBS
+CD1B;CD1B;110E 1169 11BA;CD1B;110E 1169 11BA; # (촛; 촛; 촛; 촛; 촛; ) HANGUL SYLLABLE COS
+CD1C;CD1C;110E 1169 11BB;CD1C;110E 1169 11BB; # (촜; 촜; 촜; 촜; 촜; ) HANGUL SYLLABLE COSS
+CD1D;CD1D;110E 1169 11BC;CD1D;110E 1169 11BC; # (총; 총; 총; 총; 총; ) HANGUL SYLLABLE CONG
+CD1E;CD1E;110E 1169 11BD;CD1E;110E 1169 11BD; # (촞; 촞; 촞; 촞; 촞; ) HANGUL SYLLABLE COJ
+CD1F;CD1F;110E 1169 11BE;CD1F;110E 1169 11BE; # (촟; 촟; 촟; 촟; 촟; ) HANGUL SYLLABLE COC
+CD20;CD20;110E 1169 11BF;CD20;110E 1169 11BF; # (촠; 촠; 촠; 촠; 촠; ) HANGUL SYLLABLE COK
+CD21;CD21;110E 1169 11C0;CD21;110E 1169 11C0; # (촡; 촡; 촡; 촡; 촡; ) HANGUL SYLLABLE COT
+CD22;CD22;110E 1169 11C1;CD22;110E 1169 11C1; # (촢; 촢; 촢; 촢; 촢; ) HANGUL SYLLABLE COP
+CD23;CD23;110E 1169 11C2;CD23;110E 1169 11C2; # (촣; 촣; 촣; 촣; 촣; ) HANGUL SYLLABLE COH
+CD24;CD24;110E 116A;CD24;110E 116A; # (촤; 촤; 촤; 촤; 촤; ) HANGUL SYLLABLE CWA
+CD25;CD25;110E 116A 11A8;CD25;110E 116A 11A8; # (촥; 촥; 촥; 촥; 촥; ) HANGUL SYLLABLE CWAG
+CD26;CD26;110E 116A 11A9;CD26;110E 116A 11A9; # (촦; 촦; 촦; 촦; 촦; ) HANGUL SYLLABLE CWAGG
+CD27;CD27;110E 116A 11AA;CD27;110E 116A 11AA; # (촧; 촧; 촧; 촧; 촧; ) HANGUL SYLLABLE CWAGS
+CD28;CD28;110E 116A 11AB;CD28;110E 116A 11AB; # (촨; 촨; 촨; 촨; 촨; ) HANGUL SYLLABLE CWAN
+CD29;CD29;110E 116A 11AC;CD29;110E 116A 11AC; # (촩; 촩; 촩; 촩; 촩; ) HANGUL SYLLABLE CWANJ
+CD2A;CD2A;110E 116A 11AD;CD2A;110E 116A 11AD; # (촪; 촪; 촪; 촪; 촪; ) HANGUL SYLLABLE CWANH
+CD2B;CD2B;110E 116A 11AE;CD2B;110E 116A 11AE; # (촫; 촫; 촫; 촫; 촫; ) HANGUL SYLLABLE CWAD
+CD2C;CD2C;110E 116A 11AF;CD2C;110E 116A 11AF; # (촬; 촬; 촬; 촬; 촬; ) HANGUL SYLLABLE CWAL
+CD2D;CD2D;110E 116A 11B0;CD2D;110E 116A 11B0; # (촭; 촭; 촭; 촭; 촭; ) HANGUL SYLLABLE CWALG
+CD2E;CD2E;110E 116A 11B1;CD2E;110E 116A 11B1; # (촮; 촮; 촮; 촮; 촮; ) HANGUL SYLLABLE CWALM
+CD2F;CD2F;110E 116A 11B2;CD2F;110E 116A 11B2; # (촯; 촯; 촯; 촯; 촯; ) HANGUL SYLLABLE CWALB
+CD30;CD30;110E 116A 11B3;CD30;110E 116A 11B3; # (촰; 촰; 촰; 촰; 촰; ) HANGUL SYLLABLE CWALS
+CD31;CD31;110E 116A 11B4;CD31;110E 116A 11B4; # (촱; 촱; 촱; 촱; 촱; ) HANGUL SYLLABLE CWALT
+CD32;CD32;110E 116A 11B5;CD32;110E 116A 11B5; # (촲; 촲; 촲; 촲; 촲; ) HANGUL SYLLABLE CWALP
+CD33;CD33;110E 116A 11B6;CD33;110E 116A 11B6; # (촳; 촳; 촳; 촳; 촳; ) HANGUL SYLLABLE CWALH
+CD34;CD34;110E 116A 11B7;CD34;110E 116A 11B7; # (촴; 촴; 촴; 촴; 촴; ) HANGUL SYLLABLE CWAM
+CD35;CD35;110E 116A 11B8;CD35;110E 116A 11B8; # (촵; 촵; 촵; 촵; 촵; ) HANGUL SYLLABLE CWAB
+CD36;CD36;110E 116A 11B9;CD36;110E 116A 11B9; # (촶; 촶; 촶; 촶; 촶; ) HANGUL SYLLABLE CWABS
+CD37;CD37;110E 116A 11BA;CD37;110E 116A 11BA; # (촷; 촷; 촷; 촷; 촷; ) HANGUL SYLLABLE CWAS
+CD38;CD38;110E 116A 11BB;CD38;110E 116A 11BB; # (촸; 촸; 촸; 촸; 촸; ) HANGUL SYLLABLE CWASS
+CD39;CD39;110E 116A 11BC;CD39;110E 116A 11BC; # (촹; 촹; 촹; 촹; 촹; ) HANGUL SYLLABLE CWANG
+CD3A;CD3A;110E 116A 11BD;CD3A;110E 116A 11BD; # (촺; 촺; 촺; 촺; 촺; ) HANGUL SYLLABLE CWAJ
+CD3B;CD3B;110E 116A 11BE;CD3B;110E 116A 11BE; # (촻; 촻; 촻; 촻; 촻; ) HANGUL SYLLABLE CWAC
+CD3C;CD3C;110E 116A 11BF;CD3C;110E 116A 11BF; # (촼; 촼; 촼; 촼; 촼; ) HANGUL SYLLABLE CWAK
+CD3D;CD3D;110E 116A 11C0;CD3D;110E 116A 11C0; # (촽; 촽; 촽; 촽; 촽; ) HANGUL SYLLABLE CWAT
+CD3E;CD3E;110E 116A 11C1;CD3E;110E 116A 11C1; # (촾; 촾; 촾; 촾; 촾; ) HANGUL SYLLABLE CWAP
+CD3F;CD3F;110E 116A 11C2;CD3F;110E 116A 11C2; # (촿; 촿; 촿; 촿; 촿; ) HANGUL SYLLABLE CWAH
+CD40;CD40;110E 116B;CD40;110E 116B; # (쵀; 쵀; 쵀; 쵀; 쵀; ) HANGUL SYLLABLE CWAE
+CD41;CD41;110E 116B 11A8;CD41;110E 116B 11A8; # (쵁; 쵁; 쵁; 쵁; 쵁; ) HANGUL SYLLABLE CWAEG
+CD42;CD42;110E 116B 11A9;CD42;110E 116B 11A9; # (쵂; 쵂; 쵂; 쵂; 쵂; ) HANGUL SYLLABLE CWAEGG
+CD43;CD43;110E 116B 11AA;CD43;110E 116B 11AA; # (쵃; 쵃; 쵃; 쵃; 쵃; ) HANGUL SYLLABLE CWAEGS
+CD44;CD44;110E 116B 11AB;CD44;110E 116B 11AB; # (쵄; 쵄; 쵄; 쵄; 쵄; ) HANGUL SYLLABLE CWAEN
+CD45;CD45;110E 116B 11AC;CD45;110E 116B 11AC; # (쵅; 쵅; 쵅; 쵅; 쵅; ) HANGUL SYLLABLE CWAENJ
+CD46;CD46;110E 116B 11AD;CD46;110E 116B 11AD; # (쵆; 쵆; 쵆; 쵆; 쵆; ) HANGUL SYLLABLE CWAENH
+CD47;CD47;110E 116B 11AE;CD47;110E 116B 11AE; # (쵇; 쵇; 쵇; 쵇; 쵇; ) HANGUL SYLLABLE CWAED
+CD48;CD48;110E 116B 11AF;CD48;110E 116B 11AF; # (쵈; 쵈; 쵈; 쵈; 쵈; ) HANGUL SYLLABLE CWAEL
+CD49;CD49;110E 116B 11B0;CD49;110E 116B 11B0; # (쵉; 쵉; 쵉; 쵉; 쵉; ) HANGUL SYLLABLE CWAELG
+CD4A;CD4A;110E 116B 11B1;CD4A;110E 116B 11B1; # (쵊; 쵊; 쵊; 쵊; 쵊; ) HANGUL SYLLABLE CWAELM
+CD4B;CD4B;110E 116B 11B2;CD4B;110E 116B 11B2; # (쵋; 쵋; 쵋; 쵋; 쵋; ) HANGUL SYLLABLE CWAELB
+CD4C;CD4C;110E 116B 11B3;CD4C;110E 116B 11B3; # (쵌; 쵌; 쵌; 쵌; 쵌; ) HANGUL SYLLABLE CWAELS
+CD4D;CD4D;110E 116B 11B4;CD4D;110E 116B 11B4; # (쵍; 쵍; 쵍; 쵍; 쵍; ) HANGUL SYLLABLE CWAELT
+CD4E;CD4E;110E 116B 11B5;CD4E;110E 116B 11B5; # (쵎; 쵎; 쵎; 쵎; 쵎; ) HANGUL SYLLABLE CWAELP
+CD4F;CD4F;110E 116B 11B6;CD4F;110E 116B 11B6; # (쵏; 쵏; 쵏; 쵏; 쵏; ) HANGUL SYLLABLE CWAELH
+CD50;CD50;110E 116B 11B7;CD50;110E 116B 11B7; # (쵐; 쵐; 쵐; 쵐; 쵐; ) HANGUL SYLLABLE CWAEM
+CD51;CD51;110E 116B 11B8;CD51;110E 116B 11B8; # (쵑; 쵑; 쵑; 쵑; 쵑; ) HANGUL SYLLABLE CWAEB
+CD52;CD52;110E 116B 11B9;CD52;110E 116B 11B9; # (쵒; 쵒; 쵒; 쵒; 쵒; ) HANGUL SYLLABLE CWAEBS
+CD53;CD53;110E 116B 11BA;CD53;110E 116B 11BA; # (쵓; 쵓; 쵓; 쵓; 쵓; ) HANGUL SYLLABLE CWAES
+CD54;CD54;110E 116B 11BB;CD54;110E 116B 11BB; # (쵔; 쵔; 쵔; 쵔; 쵔; ) HANGUL SYLLABLE CWAESS
+CD55;CD55;110E 116B 11BC;CD55;110E 116B 11BC; # (쵕; 쵕; 쵕; 쵕; 쵕; ) HANGUL SYLLABLE CWAENG
+CD56;CD56;110E 116B 11BD;CD56;110E 116B 11BD; # (쵖; 쵖; 쵖; 쵖; 쵖; ) HANGUL SYLLABLE CWAEJ
+CD57;CD57;110E 116B 11BE;CD57;110E 116B 11BE; # (쵗; 쵗; 쵗; 쵗; 쵗; ) HANGUL SYLLABLE CWAEC
+CD58;CD58;110E 116B 11BF;CD58;110E 116B 11BF; # (쵘; 쵘; 쵘; 쵘; 쵘; ) HANGUL SYLLABLE CWAEK
+CD59;CD59;110E 116B 11C0;CD59;110E 116B 11C0; # (쵙; 쵙; 쵙; 쵙; 쵙; ) HANGUL SYLLABLE CWAET
+CD5A;CD5A;110E 116B 11C1;CD5A;110E 116B 11C1; # (쵚; 쵚; 쵚; 쵚; 쵚; ) HANGUL SYLLABLE CWAEP
+CD5B;CD5B;110E 116B 11C2;CD5B;110E 116B 11C2; # (쵛; 쵛; 쵛; 쵛; 쵛; ) HANGUL SYLLABLE CWAEH
+CD5C;CD5C;110E 116C;CD5C;110E 116C; # (최; 최; 최; 최; 최; ) HANGUL SYLLABLE COE
+CD5D;CD5D;110E 116C 11A8;CD5D;110E 116C 11A8; # (쵝; 쵝; 쵝; 쵝; 쵝; ) HANGUL SYLLABLE COEG
+CD5E;CD5E;110E 116C 11A9;CD5E;110E 116C 11A9; # (쵞; 쵞; 쵞; 쵞; 쵞; ) HANGUL SYLLABLE COEGG
+CD5F;CD5F;110E 116C 11AA;CD5F;110E 116C 11AA; # (쵟; 쵟; 쵟; 쵟; 쵟; ) HANGUL SYLLABLE COEGS
+CD60;CD60;110E 116C 11AB;CD60;110E 116C 11AB; # (쵠; 쵠; 쵠; 쵠; 쵠; ) HANGUL SYLLABLE COEN
+CD61;CD61;110E 116C 11AC;CD61;110E 116C 11AC; # (쵡; 쵡; 쵡; 쵡; 쵡; ) HANGUL SYLLABLE COENJ
+CD62;CD62;110E 116C 11AD;CD62;110E 116C 11AD; # (쵢; 쵢; 쵢; 쵢; 쵢; ) HANGUL SYLLABLE COENH
+CD63;CD63;110E 116C 11AE;CD63;110E 116C 11AE; # (쵣; 쵣; 쵣; 쵣; 쵣; ) HANGUL SYLLABLE COED
+CD64;CD64;110E 116C 11AF;CD64;110E 116C 11AF; # (쵤; 쵤; 쵤; 쵤; 쵤; ) HANGUL SYLLABLE COEL
+CD65;CD65;110E 116C 11B0;CD65;110E 116C 11B0; # (쵥; 쵥; 쵥; 쵥; 쵥; ) HANGUL SYLLABLE COELG
+CD66;CD66;110E 116C 11B1;CD66;110E 116C 11B1; # (쵦; 쵦; 쵦; 쵦; 쵦; ) HANGUL SYLLABLE COELM
+CD67;CD67;110E 116C 11B2;CD67;110E 116C 11B2; # (쵧; 쵧; 쵧; 쵧; 쵧; ) HANGUL SYLLABLE COELB
+CD68;CD68;110E 116C 11B3;CD68;110E 116C 11B3; # (쵨; 쵨; 쵨; 쵨; 쵨; ) HANGUL SYLLABLE COELS
+CD69;CD69;110E 116C 11B4;CD69;110E 116C 11B4; # (쵩; 쵩; 쵩; 쵩; 쵩; ) HANGUL SYLLABLE COELT
+CD6A;CD6A;110E 116C 11B5;CD6A;110E 116C 11B5; # (쵪; 쵪; 쵪; 쵪; 쵪; ) HANGUL SYLLABLE COELP
+CD6B;CD6B;110E 116C 11B6;CD6B;110E 116C 11B6; # (쵫; 쵫; 쵫; 쵫; 쵫; ) HANGUL SYLLABLE COELH
+CD6C;CD6C;110E 116C 11B7;CD6C;110E 116C 11B7; # (쵬; 쵬; 쵬; 쵬; 쵬; ) HANGUL SYLLABLE COEM
+CD6D;CD6D;110E 116C 11B8;CD6D;110E 116C 11B8; # (쵭; 쵭; 쵭; 쵭; 쵭; ) HANGUL SYLLABLE COEB
+CD6E;CD6E;110E 116C 11B9;CD6E;110E 116C 11B9; # (쵮; 쵮; 쵮; 쵮; 쵮; ) HANGUL SYLLABLE COEBS
+CD6F;CD6F;110E 116C 11BA;CD6F;110E 116C 11BA; # (쵯; 쵯; 쵯; 쵯; 쵯; ) HANGUL SYLLABLE COES
+CD70;CD70;110E 116C 11BB;CD70;110E 116C 11BB; # (쵰; 쵰; 쵰; 쵰; 쵰; ) HANGUL SYLLABLE COESS
+CD71;CD71;110E 116C 11BC;CD71;110E 116C 11BC; # (쵱; 쵱; 쵱; 쵱; 쵱; ) HANGUL SYLLABLE COENG
+CD72;CD72;110E 116C 11BD;CD72;110E 116C 11BD; # (쵲; 쵲; 쵲; 쵲; 쵲; ) HANGUL SYLLABLE COEJ
+CD73;CD73;110E 116C 11BE;CD73;110E 116C 11BE; # (쵳; 쵳; 쵳; 쵳; 쵳; ) HANGUL SYLLABLE COEC
+CD74;CD74;110E 116C 11BF;CD74;110E 116C 11BF; # (쵴; 쵴; 쵴; 쵴; 쵴; ) HANGUL SYLLABLE COEK
+CD75;CD75;110E 116C 11C0;CD75;110E 116C 11C0; # (쵵; 쵵; 쵵; 쵵; 쵵; ) HANGUL SYLLABLE COET
+CD76;CD76;110E 116C 11C1;CD76;110E 116C 11C1; # (쵶; 쵶; 쵶; 쵶; 쵶; ) HANGUL SYLLABLE COEP
+CD77;CD77;110E 116C 11C2;CD77;110E 116C 11C2; # (쵷; 쵷; 쵷; 쵷; 쵷; ) HANGUL SYLLABLE COEH
+CD78;CD78;110E 116D;CD78;110E 116D; # (쵸; 쵸; 쵸; 쵸; 쵸; ) HANGUL SYLLABLE CYO
+CD79;CD79;110E 116D 11A8;CD79;110E 116D 11A8; # (쵹; 쵹; 쵹; 쵹; 쵹; ) HANGUL SYLLABLE CYOG
+CD7A;CD7A;110E 116D 11A9;CD7A;110E 116D 11A9; # (쵺; 쵺; 쵺; 쵺; 쵺; ) HANGUL SYLLABLE CYOGG
+CD7B;CD7B;110E 116D 11AA;CD7B;110E 116D 11AA; # (쵻; 쵻; 쵻; 쵻; 쵻; ) HANGUL SYLLABLE CYOGS
+CD7C;CD7C;110E 116D 11AB;CD7C;110E 116D 11AB; # (쵼; 쵼; 쵼; 쵼; 쵼; ) HANGUL SYLLABLE CYON
+CD7D;CD7D;110E 116D 11AC;CD7D;110E 116D 11AC; # (쵽; 쵽; 쵽; 쵽; 쵽; ) HANGUL SYLLABLE CYONJ
+CD7E;CD7E;110E 116D 11AD;CD7E;110E 116D 11AD; # (쵾; 쵾; 쵾; 쵾; 쵾; ) HANGUL SYLLABLE CYONH
+CD7F;CD7F;110E 116D 11AE;CD7F;110E 116D 11AE; # (쵿; 쵿; 쵿; 쵿; 쵿; ) HANGUL SYLLABLE CYOD
+CD80;CD80;110E 116D 11AF;CD80;110E 116D 11AF; # (춀; 춀; 춀; 춀; 춀; ) HANGUL SYLLABLE CYOL
+CD81;CD81;110E 116D 11B0;CD81;110E 116D 11B0; # (춁; 춁; 춁; 춁; 춁; ) HANGUL SYLLABLE CYOLG
+CD82;CD82;110E 116D 11B1;CD82;110E 116D 11B1; # (춂; 춂; 춂; 춂; 춂; ) HANGUL SYLLABLE CYOLM
+CD83;CD83;110E 116D 11B2;CD83;110E 116D 11B2; # (춃; 춃; 춃; 춃; 춃; ) HANGUL SYLLABLE CYOLB
+CD84;CD84;110E 116D 11B3;CD84;110E 116D 11B3; # (춄; 춄; 춄; 춄; 춄; ) HANGUL SYLLABLE CYOLS
+CD85;CD85;110E 116D 11B4;CD85;110E 116D 11B4; # (춅; 춅; 춅; 춅; 춅; ) HANGUL SYLLABLE CYOLT
+CD86;CD86;110E 116D 11B5;CD86;110E 116D 11B5; # (춆; 춆; 춆; 춆; 춆; ) HANGUL SYLLABLE CYOLP
+CD87;CD87;110E 116D 11B6;CD87;110E 116D 11B6; # (춇; 춇; 춇; 춇; 춇; ) HANGUL SYLLABLE CYOLH
+CD88;CD88;110E 116D 11B7;CD88;110E 116D 11B7; # (춈; 춈; 춈; 춈; 춈; ) HANGUL SYLLABLE CYOM
+CD89;CD89;110E 116D 11B8;CD89;110E 116D 11B8; # (춉; 춉; 춉; 춉; 춉; ) HANGUL SYLLABLE CYOB
+CD8A;CD8A;110E 116D 11B9;CD8A;110E 116D 11B9; # (춊; 춊; 춊; 춊; 춊; ) HANGUL SYLLABLE CYOBS
+CD8B;CD8B;110E 116D 11BA;CD8B;110E 116D 11BA; # (춋; 춋; 춋; 춋; 춋; ) HANGUL SYLLABLE CYOS
+CD8C;CD8C;110E 116D 11BB;CD8C;110E 116D 11BB; # (춌; 춌; 춌; 춌; 춌; ) HANGUL SYLLABLE CYOSS
+CD8D;CD8D;110E 116D 11BC;CD8D;110E 116D 11BC; # (춍; 춍; 춍; 춍; 춍; ) HANGUL SYLLABLE CYONG
+CD8E;CD8E;110E 116D 11BD;CD8E;110E 116D 11BD; # (춎; 춎; 춎; 춎; 춎; ) HANGUL SYLLABLE CYOJ
+CD8F;CD8F;110E 116D 11BE;CD8F;110E 116D 11BE; # (춏; 춏; 춏; 춏; 춏; ) HANGUL SYLLABLE CYOC
+CD90;CD90;110E 116D 11BF;CD90;110E 116D 11BF; # (춐; 춐; 춐; 춐; 춐; ) HANGUL SYLLABLE CYOK
+CD91;CD91;110E 116D 11C0;CD91;110E 116D 11C0; # (춑; 춑; 춑; 춑; 춑; ) HANGUL SYLLABLE CYOT
+CD92;CD92;110E 116D 11C1;CD92;110E 116D 11C1; # (춒; 춒; 춒; 춒; 춒; ) HANGUL SYLLABLE CYOP
+CD93;CD93;110E 116D 11C2;CD93;110E 116D 11C2; # (춓; 춓; 춓; 춓; 춓; ) HANGUL SYLLABLE CYOH
+CD94;CD94;110E 116E;CD94;110E 116E; # (추; 추; 추; 추; 추; ) HANGUL SYLLABLE CU
+CD95;CD95;110E 116E 11A8;CD95;110E 116E 11A8; # (축; 축; 축; 축; 축; ) HANGUL SYLLABLE CUG
+CD96;CD96;110E 116E 11A9;CD96;110E 116E 11A9; # (춖; 춖; 춖; 춖; 춖; ) HANGUL SYLLABLE CUGG
+CD97;CD97;110E 116E 11AA;CD97;110E 116E 11AA; # (춗; 춗; 춗; 춗; 춗; ) HANGUL SYLLABLE CUGS
+CD98;CD98;110E 116E 11AB;CD98;110E 116E 11AB; # (춘; 춘; 춘; 춘; 춘; ) HANGUL SYLLABLE CUN
+CD99;CD99;110E 116E 11AC;CD99;110E 116E 11AC; # (춙; 춙; 춙; 춙; 춙; ) HANGUL SYLLABLE CUNJ
+CD9A;CD9A;110E 116E 11AD;CD9A;110E 116E 11AD; # (춚; 춚; 춚; 춚; 춚; ) HANGUL SYLLABLE CUNH
+CD9B;CD9B;110E 116E 11AE;CD9B;110E 116E 11AE; # (춛; 춛; 춛; 춛; 춛; ) HANGUL SYLLABLE CUD
+CD9C;CD9C;110E 116E 11AF;CD9C;110E 116E 11AF; # (출; 출; 출; 출; 출; ) HANGUL SYLLABLE CUL
+CD9D;CD9D;110E 116E 11B0;CD9D;110E 116E 11B0; # (춝; 춝; 춝; 춝; 춝; ) HANGUL SYLLABLE CULG
+CD9E;CD9E;110E 116E 11B1;CD9E;110E 116E 11B1; # (춞; 춞; 춞; 춞; 춞; ) HANGUL SYLLABLE CULM
+CD9F;CD9F;110E 116E 11B2;CD9F;110E 116E 11B2; # (춟; 춟; 춟; 춟; 춟; ) HANGUL SYLLABLE CULB
+CDA0;CDA0;110E 116E 11B3;CDA0;110E 116E 11B3; # (춠; 춠; 춠; 춠; 춠; ) HANGUL SYLLABLE CULS
+CDA1;CDA1;110E 116E 11B4;CDA1;110E 116E 11B4; # (춡; 춡; 춡; 춡; 춡; ) HANGUL SYLLABLE CULT
+CDA2;CDA2;110E 116E 11B5;CDA2;110E 116E 11B5; # (춢; 춢; 춢; 춢; 춢; ) HANGUL SYLLABLE CULP
+CDA3;CDA3;110E 116E 11B6;CDA3;110E 116E 11B6; # (춣; 춣; 춣; 춣; 춣; ) HANGUL SYLLABLE CULH
+CDA4;CDA4;110E 116E 11B7;CDA4;110E 116E 11B7; # (춤; 춤; 춤; 춤; 춤; ) HANGUL SYLLABLE CUM
+CDA5;CDA5;110E 116E 11B8;CDA5;110E 116E 11B8; # (춥; 춥; 춥; 춥; 춥; ) HANGUL SYLLABLE CUB
+CDA6;CDA6;110E 116E 11B9;CDA6;110E 116E 11B9; # (춦; 춦; 춦; 춦; 춦; ) HANGUL SYLLABLE CUBS
+CDA7;CDA7;110E 116E 11BA;CDA7;110E 116E 11BA; # (춧; 춧; 춧; 춧; 춧; ) HANGUL SYLLABLE CUS
+CDA8;CDA8;110E 116E 11BB;CDA8;110E 116E 11BB; # (춨; 춨; 춨; 춨; 춨; ) HANGUL SYLLABLE CUSS
+CDA9;CDA9;110E 116E 11BC;CDA9;110E 116E 11BC; # (충; 충; 충; 충; 충; ) HANGUL SYLLABLE CUNG
+CDAA;CDAA;110E 116E 11BD;CDAA;110E 116E 11BD; # (춪; 춪; 춪; 춪; 춪; ) HANGUL SYLLABLE CUJ
+CDAB;CDAB;110E 116E 11BE;CDAB;110E 116E 11BE; # (춫; 춫; 춫; 춫; 춫; ) HANGUL SYLLABLE CUC
+CDAC;CDAC;110E 116E 11BF;CDAC;110E 116E 11BF; # (춬; 춬; 춬; 춬; 춬; ) HANGUL SYLLABLE CUK
+CDAD;CDAD;110E 116E 11C0;CDAD;110E 116E 11C0; # (춭; 춭; 춭; 춭; 춭; ) HANGUL SYLLABLE CUT
+CDAE;CDAE;110E 116E 11C1;CDAE;110E 116E 11C1; # (춮; 춮; 춮; 춮; 춮; ) HANGUL SYLLABLE CUP
+CDAF;CDAF;110E 116E 11C2;CDAF;110E 116E 11C2; # (춯; 춯; 춯; 춯; 춯; ) HANGUL SYLLABLE CUH
+CDB0;CDB0;110E 116F;CDB0;110E 116F; # (춰; 춰; 춰; 춰; 춰; ) HANGUL SYLLABLE CWEO
+CDB1;CDB1;110E 116F 11A8;CDB1;110E 116F 11A8; # (춱; 춱; 춱; 춱; 춱; ) HANGUL SYLLABLE CWEOG
+CDB2;CDB2;110E 116F 11A9;CDB2;110E 116F 11A9; # (춲; 춲; 춲; 춲; 춲; ) HANGUL SYLLABLE CWEOGG
+CDB3;CDB3;110E 116F 11AA;CDB3;110E 116F 11AA; # (춳; 춳; 춳; 춳; 춳; ) HANGUL SYLLABLE CWEOGS
+CDB4;CDB4;110E 116F 11AB;CDB4;110E 116F 11AB; # (춴; 춴; 춴; 춴; 춴; ) HANGUL SYLLABLE CWEON
+CDB5;CDB5;110E 116F 11AC;CDB5;110E 116F 11AC; # (춵; 춵; 춵; 춵; 춵; ) HANGUL SYLLABLE CWEONJ
+CDB6;CDB6;110E 116F 11AD;CDB6;110E 116F 11AD; # (춶; 춶; 춶; 춶; 춶; ) HANGUL SYLLABLE CWEONH
+CDB7;CDB7;110E 116F 11AE;CDB7;110E 116F 11AE; # (춷; 춷; 춷; 춷; 춷; ) HANGUL SYLLABLE CWEOD
+CDB8;CDB8;110E 116F 11AF;CDB8;110E 116F 11AF; # (춸; 춸; 춸; 춸; 춸; ) HANGUL SYLLABLE CWEOL
+CDB9;CDB9;110E 116F 11B0;CDB9;110E 116F 11B0; # (춹; 춹; 춹; 춹; 춹; ) HANGUL SYLLABLE CWEOLG
+CDBA;CDBA;110E 116F 11B1;CDBA;110E 116F 11B1; # (춺; 춺; 춺; 춺; 춺; ) HANGUL SYLLABLE CWEOLM
+CDBB;CDBB;110E 116F 11B2;CDBB;110E 116F 11B2; # (춻; 춻; 춻; 춻; 춻; ) HANGUL SYLLABLE CWEOLB
+CDBC;CDBC;110E 116F 11B3;CDBC;110E 116F 11B3; # (춼; 춼; 춼; 춼; 춼; ) HANGUL SYLLABLE CWEOLS
+CDBD;CDBD;110E 116F 11B4;CDBD;110E 116F 11B4; # (춽; 춽; 춽; 춽; 춽; ) HANGUL SYLLABLE CWEOLT
+CDBE;CDBE;110E 116F 11B5;CDBE;110E 116F 11B5; # (춾; 춾; 춾; 춾; 춾; ) HANGUL SYLLABLE CWEOLP
+CDBF;CDBF;110E 116F 11B6;CDBF;110E 116F 11B6; # (춿; 춿; 춿; 춿; 춿; ) HANGUL SYLLABLE CWEOLH
+CDC0;CDC0;110E 116F 11B7;CDC0;110E 116F 11B7; # (췀; 췀; 췀; 췀; 췀; ) HANGUL SYLLABLE CWEOM
+CDC1;CDC1;110E 116F 11B8;CDC1;110E 116F 11B8; # (췁; 췁; 췁; 췁; 췁; ) HANGUL SYLLABLE CWEOB
+CDC2;CDC2;110E 116F 11B9;CDC2;110E 116F 11B9; # (췂; 췂; 췂; 췂; 췂; ) HANGUL SYLLABLE CWEOBS
+CDC3;CDC3;110E 116F 11BA;CDC3;110E 116F 11BA; # (췃; 췃; 췃; 췃; 췃; ) HANGUL SYLLABLE CWEOS
+CDC4;CDC4;110E 116F 11BB;CDC4;110E 116F 11BB; # (췄; 췄; 췄; 췄; 췄; ) HANGUL SYLLABLE CWEOSS
+CDC5;CDC5;110E 116F 11BC;CDC5;110E 116F 11BC; # (췅; 췅; 췅; 췅; 췅; ) HANGUL SYLLABLE CWEONG
+CDC6;CDC6;110E 116F 11BD;CDC6;110E 116F 11BD; # (췆; 췆; 췆; 췆; 췆; ) HANGUL SYLLABLE CWEOJ
+CDC7;CDC7;110E 116F 11BE;CDC7;110E 116F 11BE; # (췇; 췇; 췇; 췇; 췇; ) HANGUL SYLLABLE CWEOC
+CDC8;CDC8;110E 116F 11BF;CDC8;110E 116F 11BF; # (췈; 췈; 췈; 췈; 췈; ) HANGUL SYLLABLE CWEOK
+CDC9;CDC9;110E 116F 11C0;CDC9;110E 116F 11C0; # (췉; 췉; 췉; 췉; 췉; ) HANGUL SYLLABLE CWEOT
+CDCA;CDCA;110E 116F 11C1;CDCA;110E 116F 11C1; # (췊; 췊; 췊; 췊; 췊; ) HANGUL SYLLABLE CWEOP
+CDCB;CDCB;110E 116F 11C2;CDCB;110E 116F 11C2; # (췋; 췋; 췋; 췋; 췋; ) HANGUL SYLLABLE CWEOH
+CDCC;CDCC;110E 1170;CDCC;110E 1170; # (췌; 췌; 췌; 췌; 췌; ) HANGUL SYLLABLE CWE
+CDCD;CDCD;110E 1170 11A8;CDCD;110E 1170 11A8; # (췍; 췍; 췍; 췍; 췍; ) HANGUL SYLLABLE CWEG
+CDCE;CDCE;110E 1170 11A9;CDCE;110E 1170 11A9; # (췎; 췎; 췎; 췎; 췎; ) HANGUL SYLLABLE CWEGG
+CDCF;CDCF;110E 1170 11AA;CDCF;110E 1170 11AA; # (췏; 췏; 췏; 췏; 췏; ) HANGUL SYLLABLE CWEGS
+CDD0;CDD0;110E 1170 11AB;CDD0;110E 1170 11AB; # (췐; 췐; 췐; 췐; 췐; ) HANGUL SYLLABLE CWEN
+CDD1;CDD1;110E 1170 11AC;CDD1;110E 1170 11AC; # (췑; 췑; 췑; 췑; 췑; ) HANGUL SYLLABLE CWENJ
+CDD2;CDD2;110E 1170 11AD;CDD2;110E 1170 11AD; # (췒; 췒; 췒; 췒; 췒; ) HANGUL SYLLABLE CWENH
+CDD3;CDD3;110E 1170 11AE;CDD3;110E 1170 11AE; # (췓; 췓; 췓; 췓; 췓; ) HANGUL SYLLABLE CWED
+CDD4;CDD4;110E 1170 11AF;CDD4;110E 1170 11AF; # (췔; 췔; 췔; 췔; 췔; ) HANGUL SYLLABLE CWEL
+CDD5;CDD5;110E 1170 11B0;CDD5;110E 1170 11B0; # (췕; 췕; 췕; 췕; 췕; ) HANGUL SYLLABLE CWELG
+CDD6;CDD6;110E 1170 11B1;CDD6;110E 1170 11B1; # (췖; 췖; 췖; 췖; 췖; ) HANGUL SYLLABLE CWELM
+CDD7;CDD7;110E 1170 11B2;CDD7;110E 1170 11B2; # (췗; 췗; 췗; 췗; 췗; ) HANGUL SYLLABLE CWELB
+CDD8;CDD8;110E 1170 11B3;CDD8;110E 1170 11B3; # (췘; 췘; 췘; 췘; 췘; ) HANGUL SYLLABLE CWELS
+CDD9;CDD9;110E 1170 11B4;CDD9;110E 1170 11B4; # (췙; 췙; 췙; 췙; 췙; ) HANGUL SYLLABLE CWELT
+CDDA;CDDA;110E 1170 11B5;CDDA;110E 1170 11B5; # (췚; 췚; 췚; 췚; 췚; ) HANGUL SYLLABLE CWELP
+CDDB;CDDB;110E 1170 11B6;CDDB;110E 1170 11B6; # (췛; 췛; 췛; 췛; 췛; ) HANGUL SYLLABLE CWELH
+CDDC;CDDC;110E 1170 11B7;CDDC;110E 1170 11B7; # (췜; 췜; 췜; 췜; 췜; ) HANGUL SYLLABLE CWEM
+CDDD;CDDD;110E 1170 11B8;CDDD;110E 1170 11B8; # (췝; 췝; 췝; 췝; 췝; ) HANGUL SYLLABLE CWEB
+CDDE;CDDE;110E 1170 11B9;CDDE;110E 1170 11B9; # (췞; 췞; 췞; 췞; 췞; ) HANGUL SYLLABLE CWEBS
+CDDF;CDDF;110E 1170 11BA;CDDF;110E 1170 11BA; # (췟; 췟; 췟; 췟; 췟; ) HANGUL SYLLABLE CWES
+CDE0;CDE0;110E 1170 11BB;CDE0;110E 1170 11BB; # (췠; 췠; 췠; 췠; 췠; ) HANGUL SYLLABLE CWESS
+CDE1;CDE1;110E 1170 11BC;CDE1;110E 1170 11BC; # (췡; 췡; 췡; 췡; 췡; ) HANGUL SYLLABLE CWENG
+CDE2;CDE2;110E 1170 11BD;CDE2;110E 1170 11BD; # (췢; 췢; 췢; 췢; 췢; ) HANGUL SYLLABLE CWEJ
+CDE3;CDE3;110E 1170 11BE;CDE3;110E 1170 11BE; # (췣; 췣; 췣; 췣; 췣; ) HANGUL SYLLABLE CWEC
+CDE4;CDE4;110E 1170 11BF;CDE4;110E 1170 11BF; # (췤; 췤; 췤; 췤; 췤; ) HANGUL SYLLABLE CWEK
+CDE5;CDE5;110E 1170 11C0;CDE5;110E 1170 11C0; # (췥; 췥; 췥; 췥; 췥; ) HANGUL SYLLABLE CWET
+CDE6;CDE6;110E 1170 11C1;CDE6;110E 1170 11C1; # (췦; 췦; 췦; 췦; 췦; ) HANGUL SYLLABLE CWEP
+CDE7;CDE7;110E 1170 11C2;CDE7;110E 1170 11C2; # (췧; 췧; 췧; 췧; 췧; ) HANGUL SYLLABLE CWEH
+CDE8;CDE8;110E 1171;CDE8;110E 1171; # (취; 취; 취; 취; 취; ) HANGUL SYLLABLE CWI
+CDE9;CDE9;110E 1171 11A8;CDE9;110E 1171 11A8; # (췩; 췩; 췩; 췩; 췩; ) HANGUL SYLLABLE CWIG
+CDEA;CDEA;110E 1171 11A9;CDEA;110E 1171 11A9; # (췪; 췪; 췪; 췪; 췪; ) HANGUL SYLLABLE CWIGG
+CDEB;CDEB;110E 1171 11AA;CDEB;110E 1171 11AA; # (췫; 췫; 췫; 췫; 췫; ) HANGUL SYLLABLE CWIGS
+CDEC;CDEC;110E 1171 11AB;CDEC;110E 1171 11AB; # (췬; 췬; 췬; 췬; 췬; ) HANGUL SYLLABLE CWIN
+CDED;CDED;110E 1171 11AC;CDED;110E 1171 11AC; # (췭; 췭; 췭; 췭; 췭; ) HANGUL SYLLABLE CWINJ
+CDEE;CDEE;110E 1171 11AD;CDEE;110E 1171 11AD; # (췮; 췮; 췮; 췮; 췮; ) HANGUL SYLLABLE CWINH
+CDEF;CDEF;110E 1171 11AE;CDEF;110E 1171 11AE; # (췯; 췯; 췯; 췯; 췯; ) HANGUL SYLLABLE CWID
+CDF0;CDF0;110E 1171 11AF;CDF0;110E 1171 11AF; # (췰; 췰; 췰; 췰; 췰; ) HANGUL SYLLABLE CWIL
+CDF1;CDF1;110E 1171 11B0;CDF1;110E 1171 11B0; # (췱; 췱; 췱; 췱; 췱; ) HANGUL SYLLABLE CWILG
+CDF2;CDF2;110E 1171 11B1;CDF2;110E 1171 11B1; # (췲; 췲; 췲; 췲; 췲; ) HANGUL SYLLABLE CWILM
+CDF3;CDF3;110E 1171 11B2;CDF3;110E 1171 11B2; # (췳; 췳; 췳; 췳; 췳; ) HANGUL SYLLABLE CWILB
+CDF4;CDF4;110E 1171 11B3;CDF4;110E 1171 11B3; # (췴; 췴; 췴; 췴; 췴; ) HANGUL SYLLABLE CWILS
+CDF5;CDF5;110E 1171 11B4;CDF5;110E 1171 11B4; # (췵; 췵; 췵; 췵; 췵; ) HANGUL SYLLABLE CWILT
+CDF6;CDF6;110E 1171 11B5;CDF6;110E 1171 11B5; # (췶; 췶; 췶; 췶; 췶; ) HANGUL SYLLABLE CWILP
+CDF7;CDF7;110E 1171 11B6;CDF7;110E 1171 11B6; # (췷; 췷; 췷; 췷; 췷; ) HANGUL SYLLABLE CWILH
+CDF8;CDF8;110E 1171 11B7;CDF8;110E 1171 11B7; # (췸; 췸; 췸; 췸; 췸; ) HANGUL SYLLABLE CWIM
+CDF9;CDF9;110E 1171 11B8;CDF9;110E 1171 11B8; # (췹; 췹; 췹; 췹; 췹; ) HANGUL SYLLABLE CWIB
+CDFA;CDFA;110E 1171 11B9;CDFA;110E 1171 11B9; # (췺; 췺; 췺; 췺; 췺; ) HANGUL SYLLABLE CWIBS
+CDFB;CDFB;110E 1171 11BA;CDFB;110E 1171 11BA; # (췻; 췻; 췻; 췻; 췻; ) HANGUL SYLLABLE CWIS
+CDFC;CDFC;110E 1171 11BB;CDFC;110E 1171 11BB; # (췼; 췼; 췼; 췼; 췼; ) HANGUL SYLLABLE CWISS
+CDFD;CDFD;110E 1171 11BC;CDFD;110E 1171 11BC; # (췽; 췽; 췽; 췽; 췽; ) HANGUL SYLLABLE CWING
+CDFE;CDFE;110E 1171 11BD;CDFE;110E 1171 11BD; # (췾; 췾; 췾; 췾; 췾; ) HANGUL SYLLABLE CWIJ
+CDFF;CDFF;110E 1171 11BE;CDFF;110E 1171 11BE; # (췿; 췿; 췿; 췿; 췿; ) HANGUL SYLLABLE CWIC
+CE00;CE00;110E 1171 11BF;CE00;110E 1171 11BF; # (츀; 츀; 츀; 츀; 츀; ) HANGUL SYLLABLE CWIK
+CE01;CE01;110E 1171 11C0;CE01;110E 1171 11C0; # (츁; 츁; 츁; 츁; 츁; ) HANGUL SYLLABLE CWIT
+CE02;CE02;110E 1171 11C1;CE02;110E 1171 11C1; # (츂; 츂; 츂; 츂; 츂; ) HANGUL SYLLABLE CWIP
+CE03;CE03;110E 1171 11C2;CE03;110E 1171 11C2; # (츃; 츃; 츃; 츃; 츃; ) HANGUL SYLLABLE CWIH
+CE04;CE04;110E 1172;CE04;110E 1172; # (츄; 츄; 츄; 츄; 츄; ) HANGUL SYLLABLE CYU
+CE05;CE05;110E 1172 11A8;CE05;110E 1172 11A8; # (츅; 츅; 츅; 츅; 츅; ) HANGUL SYLLABLE CYUG
+CE06;CE06;110E 1172 11A9;CE06;110E 1172 11A9; # (츆; 츆; 츆; 츆; 츆; ) HANGUL SYLLABLE CYUGG
+CE07;CE07;110E 1172 11AA;CE07;110E 1172 11AA; # (츇; 츇; 츇; 츇; 츇; ) HANGUL SYLLABLE CYUGS
+CE08;CE08;110E 1172 11AB;CE08;110E 1172 11AB; # (츈; 츈; 츈; 츈; 츈; ) HANGUL SYLLABLE CYUN
+CE09;CE09;110E 1172 11AC;CE09;110E 1172 11AC; # (츉; 츉; 츉; 츉; 츉; ) HANGUL SYLLABLE CYUNJ
+CE0A;CE0A;110E 1172 11AD;CE0A;110E 1172 11AD; # (츊; 츊; 츊; 츊; 츊; ) HANGUL SYLLABLE CYUNH
+CE0B;CE0B;110E 1172 11AE;CE0B;110E 1172 11AE; # (츋; 츋; 츋; 츋; 츋; ) HANGUL SYLLABLE CYUD
+CE0C;CE0C;110E 1172 11AF;CE0C;110E 1172 11AF; # (츌; 츌; 츌; 츌; 츌; ) HANGUL SYLLABLE CYUL
+CE0D;CE0D;110E 1172 11B0;CE0D;110E 1172 11B0; # (츍; 츍; 츍; 츍; 츍; ) HANGUL SYLLABLE CYULG
+CE0E;CE0E;110E 1172 11B1;CE0E;110E 1172 11B1; # (츎; 츎; 츎; 츎; 츎; ) HANGUL SYLLABLE CYULM
+CE0F;CE0F;110E 1172 11B2;CE0F;110E 1172 11B2; # (츏; 츏; 츏; 츏; 츏; ) HANGUL SYLLABLE CYULB
+CE10;CE10;110E 1172 11B3;CE10;110E 1172 11B3; # (츐; 츐; 츐; 츐; 츐; ) HANGUL SYLLABLE CYULS
+CE11;CE11;110E 1172 11B4;CE11;110E 1172 11B4; # (츑; 츑; 츑; 츑; 츑; ) HANGUL SYLLABLE CYULT
+CE12;CE12;110E 1172 11B5;CE12;110E 1172 11B5; # (츒; 츒; 츒; 츒; 츒; ) HANGUL SYLLABLE CYULP
+CE13;CE13;110E 1172 11B6;CE13;110E 1172 11B6; # (츓; 츓; 츓; 츓; 츓; ) HANGUL SYLLABLE CYULH
+CE14;CE14;110E 1172 11B7;CE14;110E 1172 11B7; # (츔; 츔; 츔; 츔; 츔; ) HANGUL SYLLABLE CYUM
+CE15;CE15;110E 1172 11B8;CE15;110E 1172 11B8; # (츕; 츕; 츕; 츕; 츕; ) HANGUL SYLLABLE CYUB
+CE16;CE16;110E 1172 11B9;CE16;110E 1172 11B9; # (츖; 츖; 츖; 츖; 츖; ) HANGUL SYLLABLE CYUBS
+CE17;CE17;110E 1172 11BA;CE17;110E 1172 11BA; # (츗; 츗; 츗; 츗; 츗; ) HANGUL SYLLABLE CYUS
+CE18;CE18;110E 1172 11BB;CE18;110E 1172 11BB; # (츘; 츘; 츘; 츘; 츘; ) HANGUL SYLLABLE CYUSS
+CE19;CE19;110E 1172 11BC;CE19;110E 1172 11BC; # (츙; 츙; 츙; 츙; 츙; ) HANGUL SYLLABLE CYUNG
+CE1A;CE1A;110E 1172 11BD;CE1A;110E 1172 11BD; # (츚; 츚; 츚; 츚; 츚; ) HANGUL SYLLABLE CYUJ
+CE1B;CE1B;110E 1172 11BE;CE1B;110E 1172 11BE; # (츛; 츛; 츛; 츛; 츛; ) HANGUL SYLLABLE CYUC
+CE1C;CE1C;110E 1172 11BF;CE1C;110E 1172 11BF; # (츜; 츜; 츜; 츜; 츜; ) HANGUL SYLLABLE CYUK
+CE1D;CE1D;110E 1172 11C0;CE1D;110E 1172 11C0; # (츝; 츝; 츝; 츝; 츝; ) HANGUL SYLLABLE CYUT
+CE1E;CE1E;110E 1172 11C1;CE1E;110E 1172 11C1; # (츞; 츞; 츞; 츞; 츞; ) HANGUL SYLLABLE CYUP
+CE1F;CE1F;110E 1172 11C2;CE1F;110E 1172 11C2; # (츟; 츟; 츟; 츟; 츟; ) HANGUL SYLLABLE CYUH
+CE20;CE20;110E 1173;CE20;110E 1173; # (츠; 츠; 츠; 츠; 츠; ) HANGUL SYLLABLE CEU
+CE21;CE21;110E 1173 11A8;CE21;110E 1173 11A8; # (측; 측; 측; 측; 측; ) HANGUL SYLLABLE CEUG
+CE22;CE22;110E 1173 11A9;CE22;110E 1173 11A9; # (츢; 츢; 츢; 츢; 츢; ) HANGUL SYLLABLE CEUGG
+CE23;CE23;110E 1173 11AA;CE23;110E 1173 11AA; # (츣; 츣; 츣; 츣; 츣; ) HANGUL SYLLABLE CEUGS
+CE24;CE24;110E 1173 11AB;CE24;110E 1173 11AB; # (츤; 츤; 츤; 츤; 츤; ) HANGUL SYLLABLE CEUN
+CE25;CE25;110E 1173 11AC;CE25;110E 1173 11AC; # (츥; 츥; 츥; 츥; 츥; ) HANGUL SYLLABLE CEUNJ
+CE26;CE26;110E 1173 11AD;CE26;110E 1173 11AD; # (츦; 츦; 츦; 츦; 츦; ) HANGUL SYLLABLE CEUNH
+CE27;CE27;110E 1173 11AE;CE27;110E 1173 11AE; # (츧; 츧; 츧; 츧; 츧; ) HANGUL SYLLABLE CEUD
+CE28;CE28;110E 1173 11AF;CE28;110E 1173 11AF; # (츨; 츨; 츨; 츨; 츨; ) HANGUL SYLLABLE CEUL
+CE29;CE29;110E 1173 11B0;CE29;110E 1173 11B0; # (츩; 츩; 츩; 츩; 츩; ) HANGUL SYLLABLE CEULG
+CE2A;CE2A;110E 1173 11B1;CE2A;110E 1173 11B1; # (츪; 츪; 츪; 츪; 츪; ) HANGUL SYLLABLE CEULM
+CE2B;CE2B;110E 1173 11B2;CE2B;110E 1173 11B2; # (츫; 츫; 츫; 츫; 츫; ) HANGUL SYLLABLE CEULB
+CE2C;CE2C;110E 1173 11B3;CE2C;110E 1173 11B3; # (츬; 츬; 츬; 츬; 츬; ) HANGUL SYLLABLE CEULS
+CE2D;CE2D;110E 1173 11B4;CE2D;110E 1173 11B4; # (츭; 츭; 츭; 츭; 츭; ) HANGUL SYLLABLE CEULT
+CE2E;CE2E;110E 1173 11B5;CE2E;110E 1173 11B5; # (츮; 츮; 츮; 츮; 츮; ) HANGUL SYLLABLE CEULP
+CE2F;CE2F;110E 1173 11B6;CE2F;110E 1173 11B6; # (츯; 츯; 츯; 츯; 츯; ) HANGUL SYLLABLE CEULH
+CE30;CE30;110E 1173 11B7;CE30;110E 1173 11B7; # (츰; 츰; 츰; 츰; 츰; ) HANGUL SYLLABLE CEUM
+CE31;CE31;110E 1173 11B8;CE31;110E 1173 11B8; # (츱; 츱; 츱; 츱; 츱; ) HANGUL SYLLABLE CEUB
+CE32;CE32;110E 1173 11B9;CE32;110E 1173 11B9; # (츲; 츲; 츲; 츲; 츲; ) HANGUL SYLLABLE CEUBS
+CE33;CE33;110E 1173 11BA;CE33;110E 1173 11BA; # (츳; 츳; 츳; 츳; 츳; ) HANGUL SYLLABLE CEUS
+CE34;CE34;110E 1173 11BB;CE34;110E 1173 11BB; # (츴; 츴; 츴; 츴; 츴; ) HANGUL SYLLABLE CEUSS
+CE35;CE35;110E 1173 11BC;CE35;110E 1173 11BC; # (층; 층; 층; 층; 층; ) HANGUL SYLLABLE CEUNG
+CE36;CE36;110E 1173 11BD;CE36;110E 1173 11BD; # (츶; 츶; 츶; 츶; 츶; ) HANGUL SYLLABLE CEUJ
+CE37;CE37;110E 1173 11BE;CE37;110E 1173 11BE; # (츷; 츷; 츷; 츷; 츷; ) HANGUL SYLLABLE CEUC
+CE38;CE38;110E 1173 11BF;CE38;110E 1173 11BF; # (츸; 츸; 츸; 츸; 츸; ) HANGUL SYLLABLE CEUK
+CE39;CE39;110E 1173 11C0;CE39;110E 1173 11C0; # (츹; 츹; 츹; 츹; 츹; ) HANGUL SYLLABLE CEUT
+CE3A;CE3A;110E 1173 11C1;CE3A;110E 1173 11C1; # (츺; 츺; 츺; 츺; 츺; ) HANGUL SYLLABLE CEUP
+CE3B;CE3B;110E 1173 11C2;CE3B;110E 1173 11C2; # (츻; 츻; 츻; 츻; 츻; ) HANGUL SYLLABLE CEUH
+CE3C;CE3C;110E 1174;CE3C;110E 1174; # (츼; 츼; 츼; 츼; 츼; ) HANGUL SYLLABLE CYI
+CE3D;CE3D;110E 1174 11A8;CE3D;110E 1174 11A8; # (츽; 츽; 츽; 츽; 츽; ) HANGUL SYLLABLE CYIG
+CE3E;CE3E;110E 1174 11A9;CE3E;110E 1174 11A9; # (츾; 츾; 츾; 츾; 츾; ) HANGUL SYLLABLE CYIGG
+CE3F;CE3F;110E 1174 11AA;CE3F;110E 1174 11AA; # (츿; 츿; 츿; 츿; 츿; ) HANGUL SYLLABLE CYIGS
+CE40;CE40;110E 1174 11AB;CE40;110E 1174 11AB; # (칀; 칀; 칀; 칀; 칀; ) HANGUL SYLLABLE CYIN
+CE41;CE41;110E 1174 11AC;CE41;110E 1174 11AC; # (칁; 칁; 칁; 칁; 칁; ) HANGUL SYLLABLE CYINJ
+CE42;CE42;110E 1174 11AD;CE42;110E 1174 11AD; # (칂; 칂; 칂; 칂; 칂; ) HANGUL SYLLABLE CYINH
+CE43;CE43;110E 1174 11AE;CE43;110E 1174 11AE; # (칃; 칃; 칃; 칃; 칃; ) HANGUL SYLLABLE CYID
+CE44;CE44;110E 1174 11AF;CE44;110E 1174 11AF; # (칄; 칄; 칄; 칄; 칄; ) HANGUL SYLLABLE CYIL
+CE45;CE45;110E 1174 11B0;CE45;110E 1174 11B0; # (칅; 칅; 칅; 칅; 칅; ) HANGUL SYLLABLE CYILG
+CE46;CE46;110E 1174 11B1;CE46;110E 1174 11B1; # (칆; 칆; 칆; 칆; 칆; ) HANGUL SYLLABLE CYILM
+CE47;CE47;110E 1174 11B2;CE47;110E 1174 11B2; # (칇; 칇; 칇; 칇; 칇; ) HANGUL SYLLABLE CYILB
+CE48;CE48;110E 1174 11B3;CE48;110E 1174 11B3; # (칈; 칈; 칈; 칈; 칈; ) HANGUL SYLLABLE CYILS
+CE49;CE49;110E 1174 11B4;CE49;110E 1174 11B4; # (칉; 칉; 칉; 칉; 칉; ) HANGUL SYLLABLE CYILT
+CE4A;CE4A;110E 1174 11B5;CE4A;110E 1174 11B5; # (칊; 칊; 칊; 칊; 칊; ) HANGUL SYLLABLE CYILP
+CE4B;CE4B;110E 1174 11B6;CE4B;110E 1174 11B6; # (칋; 칋; 칋; 칋; 칋; ) HANGUL SYLLABLE CYILH
+CE4C;CE4C;110E 1174 11B7;CE4C;110E 1174 11B7; # (칌; 칌; 칌; 칌; 칌; ) HANGUL SYLLABLE CYIM
+CE4D;CE4D;110E 1174 11B8;CE4D;110E 1174 11B8; # (칍; 칍; 칍; 칍; 칍; ) HANGUL SYLLABLE CYIB
+CE4E;CE4E;110E 1174 11B9;CE4E;110E 1174 11B9; # (칎; 칎; 칎; 칎; 칎; ) HANGUL SYLLABLE CYIBS
+CE4F;CE4F;110E 1174 11BA;CE4F;110E 1174 11BA; # (칏; 칏; 칏; 칏; 칏; ) HANGUL SYLLABLE CYIS
+CE50;CE50;110E 1174 11BB;CE50;110E 1174 11BB; # (칐; 칐; 칐; 칐; 칐; ) HANGUL SYLLABLE CYISS
+CE51;CE51;110E 1174 11BC;CE51;110E 1174 11BC; # (칑; 칑; 칑; 칑; 칑; ) HANGUL SYLLABLE CYING
+CE52;CE52;110E 1174 11BD;CE52;110E 1174 11BD; # (칒; 칒; 칒; 칒; 칒; ) HANGUL SYLLABLE CYIJ
+CE53;CE53;110E 1174 11BE;CE53;110E 1174 11BE; # (칓; 칓; 칓; 칓; 칓; ) HANGUL SYLLABLE CYIC
+CE54;CE54;110E 1174 11BF;CE54;110E 1174 11BF; # (칔; 칔; 칔; 칔; 칔; ) HANGUL SYLLABLE CYIK
+CE55;CE55;110E 1174 11C0;CE55;110E 1174 11C0; # (칕; 칕; 칕; 칕; 칕; ) HANGUL SYLLABLE CYIT
+CE56;CE56;110E 1174 11C1;CE56;110E 1174 11C1; # (칖; 칖; 칖; 칖; 칖; ) HANGUL SYLLABLE CYIP
+CE57;CE57;110E 1174 11C2;CE57;110E 1174 11C2; # (칗; 칗; 칗; 칗; 칗; ) HANGUL SYLLABLE CYIH
+CE58;CE58;110E 1175;CE58;110E 1175; # (치; 치; 치; 치; 치; ) HANGUL SYLLABLE CI
+CE59;CE59;110E 1175 11A8;CE59;110E 1175 11A8; # (칙; 칙; 칙; 칙; 칙; ) HANGUL SYLLABLE CIG
+CE5A;CE5A;110E 1175 11A9;CE5A;110E 1175 11A9; # (칚; 칚; 칚; 칚; 칚; ) HANGUL SYLLABLE CIGG
+CE5B;CE5B;110E 1175 11AA;CE5B;110E 1175 11AA; # (칛; 칛; 칛; 칛; 칛; ) HANGUL SYLLABLE CIGS
+CE5C;CE5C;110E 1175 11AB;CE5C;110E 1175 11AB; # (친; 친; 친; 친; 친; ) HANGUL SYLLABLE CIN
+CE5D;CE5D;110E 1175 11AC;CE5D;110E 1175 11AC; # (칝; 칝; 칝; 칝; 칝; ) HANGUL SYLLABLE CINJ
+CE5E;CE5E;110E 1175 11AD;CE5E;110E 1175 11AD; # (칞; 칞; 칞; 칞; 칞; ) HANGUL SYLLABLE CINH
+CE5F;CE5F;110E 1175 11AE;CE5F;110E 1175 11AE; # (칟; 칟; 칟; 칟; 칟; ) HANGUL SYLLABLE CID
+CE60;CE60;110E 1175 11AF;CE60;110E 1175 11AF; # (칠; 칠; 칠; 칠; 칠; ) HANGUL SYLLABLE CIL
+CE61;CE61;110E 1175 11B0;CE61;110E 1175 11B0; # (칡; 칡; 칡; 칡; 칡; ) HANGUL SYLLABLE CILG
+CE62;CE62;110E 1175 11B1;CE62;110E 1175 11B1; # (칢; 칢; 칢; 칢; 칢; ) HANGUL SYLLABLE CILM
+CE63;CE63;110E 1175 11B2;CE63;110E 1175 11B2; # (칣; 칣; 칣; 칣; 칣; ) HANGUL SYLLABLE CILB
+CE64;CE64;110E 1175 11B3;CE64;110E 1175 11B3; # (칤; 칤; 칤; 칤; 칤; ) HANGUL SYLLABLE CILS
+CE65;CE65;110E 1175 11B4;CE65;110E 1175 11B4; # (칥; 칥; 칥; 칥; 칥; ) HANGUL SYLLABLE CILT
+CE66;CE66;110E 1175 11B5;CE66;110E 1175 11B5; # (칦; 칦; 칦; 칦; 칦; ) HANGUL SYLLABLE CILP
+CE67;CE67;110E 1175 11B6;CE67;110E 1175 11B6; # (칧; 칧; 칧; 칧; 칧; ) HANGUL SYLLABLE CILH
+CE68;CE68;110E 1175 11B7;CE68;110E 1175 11B7; # (침; 침; 침; 침; 침; ) HANGUL SYLLABLE CIM
+CE69;CE69;110E 1175 11B8;CE69;110E 1175 11B8; # (칩; 칩; 칩; 칩; 칩; ) HANGUL SYLLABLE CIB
+CE6A;CE6A;110E 1175 11B9;CE6A;110E 1175 11B9; # (칪; 칪; 칪; 칪; 칪; ) HANGUL SYLLABLE CIBS
+CE6B;CE6B;110E 1175 11BA;CE6B;110E 1175 11BA; # (칫; 칫; 칫; 칫; 칫; ) HANGUL SYLLABLE CIS
+CE6C;CE6C;110E 1175 11BB;CE6C;110E 1175 11BB; # (칬; 칬; 칬; 칬; 칬; ) HANGUL SYLLABLE CISS
+CE6D;CE6D;110E 1175 11BC;CE6D;110E 1175 11BC; # (칭; 칭; 칭; 칭; 칭; ) HANGUL SYLLABLE CING
+CE6E;CE6E;110E 1175 11BD;CE6E;110E 1175 11BD; # (칮; 칮; 칮; 칮; 칮; ) HANGUL SYLLABLE CIJ
+CE6F;CE6F;110E 1175 11BE;CE6F;110E 1175 11BE; # (칯; 칯; 칯; 칯; 칯; ) HANGUL SYLLABLE CIC
+CE70;CE70;110E 1175 11BF;CE70;110E 1175 11BF; # (칰; 칰; 칰; 칰; 칰; ) HANGUL SYLLABLE CIK
+CE71;CE71;110E 1175 11C0;CE71;110E 1175 11C0; # (칱; 칱; 칱; 칱; 칱; ) HANGUL SYLLABLE CIT
+CE72;CE72;110E 1175 11C1;CE72;110E 1175 11C1; # (칲; 칲; 칲; 칲; 칲; ) HANGUL SYLLABLE CIP
+CE73;CE73;110E 1175 11C2;CE73;110E 1175 11C2; # (칳; 칳; 칳; 칳; 칳; ) HANGUL SYLLABLE CIH
+CE74;CE74;110F 1161;CE74;110F 1161; # (카; 카; 카; 카; 카; ) HANGUL SYLLABLE KA
+CE75;CE75;110F 1161 11A8;CE75;110F 1161 11A8; # (칵; 칵; 칵; 칵; 칵; ) HANGUL SYLLABLE KAG
+CE76;CE76;110F 1161 11A9;CE76;110F 1161 11A9; # (칶; 칶; 칶; 칶; 칶; ) HANGUL SYLLABLE KAGG
+CE77;CE77;110F 1161 11AA;CE77;110F 1161 11AA; # (칷; 칷; 칷; 칷; 칷; ) HANGUL SYLLABLE KAGS
+CE78;CE78;110F 1161 11AB;CE78;110F 1161 11AB; # (칸; 칸; 칸; 칸; 칸; ) HANGUL SYLLABLE KAN
+CE79;CE79;110F 1161 11AC;CE79;110F 1161 11AC; # (칹; 칹; 칹; 칹; 칹; ) HANGUL SYLLABLE KANJ
+CE7A;CE7A;110F 1161 11AD;CE7A;110F 1161 11AD; # (칺; 칺; 칺; 칺; 칺; ) HANGUL SYLLABLE KANH
+CE7B;CE7B;110F 1161 11AE;CE7B;110F 1161 11AE; # (칻; 칻; 칻; 칻; 칻; ) HANGUL SYLLABLE KAD
+CE7C;CE7C;110F 1161 11AF;CE7C;110F 1161 11AF; # (칼; 칼; 칼; 칼; 칼; ) HANGUL SYLLABLE KAL
+CE7D;CE7D;110F 1161 11B0;CE7D;110F 1161 11B0; # (칽; 칽; 칽; 칽; 칽; ) HANGUL SYLLABLE KALG
+CE7E;CE7E;110F 1161 11B1;CE7E;110F 1161 11B1; # (칾; 칾; 칾; 칾; 칾; ) HANGUL SYLLABLE KALM
+CE7F;CE7F;110F 1161 11B2;CE7F;110F 1161 11B2; # (칿; 칿; 칿; 칿; 칿; ) HANGUL SYLLABLE KALB
+CE80;CE80;110F 1161 11B3;CE80;110F 1161 11B3; # (캀; 캀; 캀; 캀; 캀; ) HANGUL SYLLABLE KALS
+CE81;CE81;110F 1161 11B4;CE81;110F 1161 11B4; # (캁; 캁; 캁; 캁; 캁; ) HANGUL SYLLABLE KALT
+CE82;CE82;110F 1161 11B5;CE82;110F 1161 11B5; # (캂; 캂; 캂; 캂; 캂; ) HANGUL SYLLABLE KALP
+CE83;CE83;110F 1161 11B6;CE83;110F 1161 11B6; # (캃; 캃; 캃; 캃; 캃; ) HANGUL SYLLABLE KALH
+CE84;CE84;110F 1161 11B7;CE84;110F 1161 11B7; # (캄; 캄; 캄; 캄; 캄; ) HANGUL SYLLABLE KAM
+CE85;CE85;110F 1161 11B8;CE85;110F 1161 11B8; # (캅; 캅; 캅; 캅; 캅; ) HANGUL SYLLABLE KAB
+CE86;CE86;110F 1161 11B9;CE86;110F 1161 11B9; # (캆; 캆; 캆; 캆; 캆; ) HANGUL SYLLABLE KABS
+CE87;CE87;110F 1161 11BA;CE87;110F 1161 11BA; # (캇; 캇; 캇; 캇; 캇; ) HANGUL SYLLABLE KAS
+CE88;CE88;110F 1161 11BB;CE88;110F 1161 11BB; # (캈; 캈; 캈; 캈; 캈; ) HANGUL SYLLABLE KASS
+CE89;CE89;110F 1161 11BC;CE89;110F 1161 11BC; # (캉; 캉; 캉; 캉; 캉; ) HANGUL SYLLABLE KANG
+CE8A;CE8A;110F 1161 11BD;CE8A;110F 1161 11BD; # (캊; 캊; 캊; 캊; 캊; ) HANGUL SYLLABLE KAJ
+CE8B;CE8B;110F 1161 11BE;CE8B;110F 1161 11BE; # (캋; 캋; 캋; 캋; 캋; ) HANGUL SYLLABLE KAC
+CE8C;CE8C;110F 1161 11BF;CE8C;110F 1161 11BF; # (캌; 캌; 캌; 캌; 캌; ) HANGUL SYLLABLE KAK
+CE8D;CE8D;110F 1161 11C0;CE8D;110F 1161 11C0; # (캍; 캍; 캍; 캍; 캍; ) HANGUL SYLLABLE KAT
+CE8E;CE8E;110F 1161 11C1;CE8E;110F 1161 11C1; # (캎; 캎; 캎; 캎; 캎; ) HANGUL SYLLABLE KAP
+CE8F;CE8F;110F 1161 11C2;CE8F;110F 1161 11C2; # (캏; 캏; 캏; 캏; 캏; ) HANGUL SYLLABLE KAH
+CE90;CE90;110F 1162;CE90;110F 1162; # (캐; 캐; 캐; 캐; 캐; ) HANGUL SYLLABLE KAE
+CE91;CE91;110F 1162 11A8;CE91;110F 1162 11A8; # (캑; 캑; 캑; 캑; 캑; ) HANGUL SYLLABLE KAEG
+CE92;CE92;110F 1162 11A9;CE92;110F 1162 11A9; # (캒; 캒; 캒; 캒; 캒; ) HANGUL SYLLABLE KAEGG
+CE93;CE93;110F 1162 11AA;CE93;110F 1162 11AA; # (캓; 캓; 캓; 캓; 캓; ) HANGUL SYLLABLE KAEGS
+CE94;CE94;110F 1162 11AB;CE94;110F 1162 11AB; # (캔; 캔; 캔; 캔; 캔; ) HANGUL SYLLABLE KAEN
+CE95;CE95;110F 1162 11AC;CE95;110F 1162 11AC; # (캕; 캕; 캕; 캕; 캕; ) HANGUL SYLLABLE KAENJ
+CE96;CE96;110F 1162 11AD;CE96;110F 1162 11AD; # (캖; 캖; 캖; 캖; 캖; ) HANGUL SYLLABLE KAENH
+CE97;CE97;110F 1162 11AE;CE97;110F 1162 11AE; # (캗; 캗; 캗; 캗; 캗; ) HANGUL SYLLABLE KAED
+CE98;CE98;110F 1162 11AF;CE98;110F 1162 11AF; # (캘; 캘; 캘; 캘; 캘; ) HANGUL SYLLABLE KAEL
+CE99;CE99;110F 1162 11B0;CE99;110F 1162 11B0; # (캙; 캙; 캙; 캙; 캙; ) HANGUL SYLLABLE KAELG
+CE9A;CE9A;110F 1162 11B1;CE9A;110F 1162 11B1; # (캚; 캚; 캚; 캚; 캚; ) HANGUL SYLLABLE KAELM
+CE9B;CE9B;110F 1162 11B2;CE9B;110F 1162 11B2; # (캛; 캛; 캛; 캛; 캛; ) HANGUL SYLLABLE KAELB
+CE9C;CE9C;110F 1162 11B3;CE9C;110F 1162 11B3; # (캜; 캜; 캜; 캜; 캜; ) HANGUL SYLLABLE KAELS
+CE9D;CE9D;110F 1162 11B4;CE9D;110F 1162 11B4; # (캝; 캝; 캝; 캝; 캝; ) HANGUL SYLLABLE KAELT
+CE9E;CE9E;110F 1162 11B5;CE9E;110F 1162 11B5; # (캞; 캞; 캞; 캞; 캞; ) HANGUL SYLLABLE KAELP
+CE9F;CE9F;110F 1162 11B6;CE9F;110F 1162 11B6; # (캟; 캟; 캟; 캟; 캟; ) HANGUL SYLLABLE KAELH
+CEA0;CEA0;110F 1162 11B7;CEA0;110F 1162 11B7; # (캠; 캠; 캠; 캠; 캠; ) HANGUL SYLLABLE KAEM
+CEA1;CEA1;110F 1162 11B8;CEA1;110F 1162 11B8; # (캡; 캡; 캡; 캡; 캡; ) HANGUL SYLLABLE KAEB
+CEA2;CEA2;110F 1162 11B9;CEA2;110F 1162 11B9; # (캢; 캢; 캢; 캢; 캢; ) HANGUL SYLLABLE KAEBS
+CEA3;CEA3;110F 1162 11BA;CEA3;110F 1162 11BA; # (캣; 캣; 캣; 캣; 캣; ) HANGUL SYLLABLE KAES
+CEA4;CEA4;110F 1162 11BB;CEA4;110F 1162 11BB; # (캤; 캤; 캤; 캤; 캤; ) HANGUL SYLLABLE KAESS
+CEA5;CEA5;110F 1162 11BC;CEA5;110F 1162 11BC; # (캥; 캥; 캥; 캥; 캥; ) HANGUL SYLLABLE KAENG
+CEA6;CEA6;110F 1162 11BD;CEA6;110F 1162 11BD; # (캦; 캦; 캦; 캦; 캦; ) HANGUL SYLLABLE KAEJ
+CEA7;CEA7;110F 1162 11BE;CEA7;110F 1162 11BE; # (캧; 캧; 캧; 캧; 캧; ) HANGUL SYLLABLE KAEC
+CEA8;CEA8;110F 1162 11BF;CEA8;110F 1162 11BF; # (캨; 캨; 캨; 캨; 캨; ) HANGUL SYLLABLE KAEK
+CEA9;CEA9;110F 1162 11C0;CEA9;110F 1162 11C0; # (캩; 캩; 캩; 캩; 캩; ) HANGUL SYLLABLE KAET
+CEAA;CEAA;110F 1162 11C1;CEAA;110F 1162 11C1; # (캪; 캪; 캪; 캪; 캪; ) HANGUL SYLLABLE KAEP
+CEAB;CEAB;110F 1162 11C2;CEAB;110F 1162 11C2; # (캫; 캫; 캫; 캫; 캫; ) HANGUL SYLLABLE KAEH
+CEAC;CEAC;110F 1163;CEAC;110F 1163; # (캬; 캬; 캬; 캬; 캬; ) HANGUL SYLLABLE KYA
+CEAD;CEAD;110F 1163 11A8;CEAD;110F 1163 11A8; # (캭; 캭; 캭; 캭; 캭; ) HANGUL SYLLABLE KYAG
+CEAE;CEAE;110F 1163 11A9;CEAE;110F 1163 11A9; # (캮; 캮; 캮; 캮; 캮; ) HANGUL SYLLABLE KYAGG
+CEAF;CEAF;110F 1163 11AA;CEAF;110F 1163 11AA; # (캯; 캯; 캯; 캯; 캯; ) HANGUL SYLLABLE KYAGS
+CEB0;CEB0;110F 1163 11AB;CEB0;110F 1163 11AB; # (캰; 캰; 캰; 캰; 캰; ) HANGUL SYLLABLE KYAN
+CEB1;CEB1;110F 1163 11AC;CEB1;110F 1163 11AC; # (캱; 캱; 캱; 캱; 캱; ) HANGUL SYLLABLE KYANJ
+CEB2;CEB2;110F 1163 11AD;CEB2;110F 1163 11AD; # (캲; 캲; 캲; 캲; 캲; ) HANGUL SYLLABLE KYANH
+CEB3;CEB3;110F 1163 11AE;CEB3;110F 1163 11AE; # (캳; 캳; 캳; 캳; 캳; ) HANGUL SYLLABLE KYAD
+CEB4;CEB4;110F 1163 11AF;CEB4;110F 1163 11AF; # (캴; 캴; 캴; 캴; 캴; ) HANGUL SYLLABLE KYAL
+CEB5;CEB5;110F 1163 11B0;CEB5;110F 1163 11B0; # (캵; 캵; 캵; 캵; 캵; ) HANGUL SYLLABLE KYALG
+CEB6;CEB6;110F 1163 11B1;CEB6;110F 1163 11B1; # (캶; 캶; 캶; 캶; 캶; ) HANGUL SYLLABLE KYALM
+CEB7;CEB7;110F 1163 11B2;CEB7;110F 1163 11B2; # (캷; 캷; 캷; 캷; 캷; ) HANGUL SYLLABLE KYALB
+CEB8;CEB8;110F 1163 11B3;CEB8;110F 1163 11B3; # (캸; 캸; 캸; 캸; 캸; ) HANGUL SYLLABLE KYALS
+CEB9;CEB9;110F 1163 11B4;CEB9;110F 1163 11B4; # (캹; 캹; 캹; 캹; 캹; ) HANGUL SYLLABLE KYALT
+CEBA;CEBA;110F 1163 11B5;CEBA;110F 1163 11B5; # (캺; 캺; 캺; 캺; 캺; ) HANGUL SYLLABLE KYALP
+CEBB;CEBB;110F 1163 11B6;CEBB;110F 1163 11B6; # (캻; 캻; 캻; 캻; 캻; ) HANGUL SYLLABLE KYALH
+CEBC;CEBC;110F 1163 11B7;CEBC;110F 1163 11B7; # (캼; 캼; 캼; 캼; 캼; ) HANGUL SYLLABLE KYAM
+CEBD;CEBD;110F 1163 11B8;CEBD;110F 1163 11B8; # (캽; 캽; 캽; 캽; 캽; ) HANGUL SYLLABLE KYAB
+CEBE;CEBE;110F 1163 11B9;CEBE;110F 1163 11B9; # (캾; 캾; 캾; 캾; 캾; ) HANGUL SYLLABLE KYABS
+CEBF;CEBF;110F 1163 11BA;CEBF;110F 1163 11BA; # (캿; 캿; 캿; 캿; 캿; ) HANGUL SYLLABLE KYAS
+CEC0;CEC0;110F 1163 11BB;CEC0;110F 1163 11BB; # (컀; 컀; 컀; 컀; 컀; ) HANGUL SYLLABLE KYASS
+CEC1;CEC1;110F 1163 11BC;CEC1;110F 1163 11BC; # (컁; 컁; 컁; 컁; 컁; ) HANGUL SYLLABLE KYANG
+CEC2;CEC2;110F 1163 11BD;CEC2;110F 1163 11BD; # (컂; 컂; 컂; 컂; 컂; ) HANGUL SYLLABLE KYAJ
+CEC3;CEC3;110F 1163 11BE;CEC3;110F 1163 11BE; # (컃; 컃; 컃; 컃; 컃; ) HANGUL SYLLABLE KYAC
+CEC4;CEC4;110F 1163 11BF;CEC4;110F 1163 11BF; # (컄; 컄; 컄; 컄; 컄; ) HANGUL SYLLABLE KYAK
+CEC5;CEC5;110F 1163 11C0;CEC5;110F 1163 11C0; # (컅; 컅; 컅; 컅; 컅; ) HANGUL SYLLABLE KYAT
+CEC6;CEC6;110F 1163 11C1;CEC6;110F 1163 11C1; # (컆; 컆; 컆; 컆; 컆; ) HANGUL SYLLABLE KYAP
+CEC7;CEC7;110F 1163 11C2;CEC7;110F 1163 11C2; # (컇; 컇; 컇; 컇; 컇; ) HANGUL SYLLABLE KYAH
+CEC8;CEC8;110F 1164;CEC8;110F 1164; # (컈; 컈; 컈; 컈; 컈; ) HANGUL SYLLABLE KYAE
+CEC9;CEC9;110F 1164 11A8;CEC9;110F 1164 11A8; # (컉; 컉; 컉; 컉; 컉; ) HANGUL SYLLABLE KYAEG
+CECA;CECA;110F 1164 11A9;CECA;110F 1164 11A9; # (컊; 컊; 컊; 컊; 컊; ) HANGUL SYLLABLE KYAEGG
+CECB;CECB;110F 1164 11AA;CECB;110F 1164 11AA; # (컋; 컋; 컋; 컋; 컋; ) HANGUL SYLLABLE KYAEGS
+CECC;CECC;110F 1164 11AB;CECC;110F 1164 11AB; # (컌; 컌; 컌; 컌; 컌; ) HANGUL SYLLABLE KYAEN
+CECD;CECD;110F 1164 11AC;CECD;110F 1164 11AC; # (컍; 컍; 컍; 컍; 컍; ) HANGUL SYLLABLE KYAENJ
+CECE;CECE;110F 1164 11AD;CECE;110F 1164 11AD; # (컎; 컎; 컎; 컎; 컎; ) HANGUL SYLLABLE KYAENH
+CECF;CECF;110F 1164 11AE;CECF;110F 1164 11AE; # (컏; 컏; 컏; 컏; 컏; ) HANGUL SYLLABLE KYAED
+CED0;CED0;110F 1164 11AF;CED0;110F 1164 11AF; # (컐; 컐; 컐; 컐; 컐; ) HANGUL SYLLABLE KYAEL
+CED1;CED1;110F 1164 11B0;CED1;110F 1164 11B0; # (컑; 컑; 컑; 컑; 컑; ) HANGUL SYLLABLE KYAELG
+CED2;CED2;110F 1164 11B1;CED2;110F 1164 11B1; # (컒; 컒; 컒; 컒; 컒; ) HANGUL SYLLABLE KYAELM
+CED3;CED3;110F 1164 11B2;CED3;110F 1164 11B2; # (컓; 컓; 컓; 컓; 컓; ) HANGUL SYLLABLE KYAELB
+CED4;CED4;110F 1164 11B3;CED4;110F 1164 11B3; # (컔; 컔; 컔; 컔; 컔; ) HANGUL SYLLABLE KYAELS
+CED5;CED5;110F 1164 11B4;CED5;110F 1164 11B4; # (컕; 컕; 컕; 컕; 컕; ) HANGUL SYLLABLE KYAELT
+CED6;CED6;110F 1164 11B5;CED6;110F 1164 11B5; # (컖; 컖; 컖; 컖; 컖; ) HANGUL SYLLABLE KYAELP
+CED7;CED7;110F 1164 11B6;CED7;110F 1164 11B6; # (컗; 컗; 컗; 컗; 컗; ) HANGUL SYLLABLE KYAELH
+CED8;CED8;110F 1164 11B7;CED8;110F 1164 11B7; # (컘; 컘; 컘; 컘; 컘; ) HANGUL SYLLABLE KYAEM
+CED9;CED9;110F 1164 11B8;CED9;110F 1164 11B8; # (컙; 컙; 컙; 컙; 컙; ) HANGUL SYLLABLE KYAEB
+CEDA;CEDA;110F 1164 11B9;CEDA;110F 1164 11B9; # (컚; 컚; 컚; 컚; 컚; ) HANGUL SYLLABLE KYAEBS
+CEDB;CEDB;110F 1164 11BA;CEDB;110F 1164 11BA; # (컛; 컛; 컛; 컛; 컛; ) HANGUL SYLLABLE KYAES
+CEDC;CEDC;110F 1164 11BB;CEDC;110F 1164 11BB; # (컜; 컜; 컜; 컜; 컜; ) HANGUL SYLLABLE KYAESS
+CEDD;CEDD;110F 1164 11BC;CEDD;110F 1164 11BC; # (컝; 컝; 컝; 컝; 컝; ) HANGUL SYLLABLE KYAENG
+CEDE;CEDE;110F 1164 11BD;CEDE;110F 1164 11BD; # (컞; 컞; 컞; 컞; 컞; ) HANGUL SYLLABLE KYAEJ
+CEDF;CEDF;110F 1164 11BE;CEDF;110F 1164 11BE; # (컟; 컟; 컟; 컟; 컟; ) HANGUL SYLLABLE KYAEC
+CEE0;CEE0;110F 1164 11BF;CEE0;110F 1164 11BF; # (컠; 컠; 컠; 컠; 컠; ) HANGUL SYLLABLE KYAEK
+CEE1;CEE1;110F 1164 11C0;CEE1;110F 1164 11C0; # (컡; 컡; 컡; 컡; 컡; ) HANGUL SYLLABLE KYAET
+CEE2;CEE2;110F 1164 11C1;CEE2;110F 1164 11C1; # (컢; 컢; 컢; 컢; 컢; ) HANGUL SYLLABLE KYAEP
+CEE3;CEE3;110F 1164 11C2;CEE3;110F 1164 11C2; # (컣; 컣; 컣; 컣; 컣; ) HANGUL SYLLABLE KYAEH
+CEE4;CEE4;110F 1165;CEE4;110F 1165; # (커; 커; 커; 커; 커; ) HANGUL SYLLABLE KEO
+CEE5;CEE5;110F 1165 11A8;CEE5;110F 1165 11A8; # (컥; 컥; 컥; 컥; 컥; ) HANGUL SYLLABLE KEOG
+CEE6;CEE6;110F 1165 11A9;CEE6;110F 1165 11A9; # (컦; 컦; 컦; 컦; 컦; ) HANGUL SYLLABLE KEOGG
+CEE7;CEE7;110F 1165 11AA;CEE7;110F 1165 11AA; # (컧; 컧; 컧; 컧; 컧; ) HANGUL SYLLABLE KEOGS
+CEE8;CEE8;110F 1165 11AB;CEE8;110F 1165 11AB; # (컨; 컨; 컨; 컨; 컨; ) HANGUL SYLLABLE KEON
+CEE9;CEE9;110F 1165 11AC;CEE9;110F 1165 11AC; # (컩; 컩; 컩; 컩; 컩; ) HANGUL SYLLABLE KEONJ
+CEEA;CEEA;110F 1165 11AD;CEEA;110F 1165 11AD; # (컪; 컪; 컪; 컪; 컪; ) HANGUL SYLLABLE KEONH
+CEEB;CEEB;110F 1165 11AE;CEEB;110F 1165 11AE; # (컫; 컫; 컫; 컫; 컫; ) HANGUL SYLLABLE KEOD
+CEEC;CEEC;110F 1165 11AF;CEEC;110F 1165 11AF; # (컬; 컬; 컬; 컬; 컬; ) HANGUL SYLLABLE KEOL
+CEED;CEED;110F 1165 11B0;CEED;110F 1165 11B0; # (컭; 컭; 컭; 컭; 컭; ) HANGUL SYLLABLE KEOLG
+CEEE;CEEE;110F 1165 11B1;CEEE;110F 1165 11B1; # (컮; 컮; 컮; 컮; 컮; ) HANGUL SYLLABLE KEOLM
+CEEF;CEEF;110F 1165 11B2;CEEF;110F 1165 11B2; # (컯; 컯; 컯; 컯; 컯; ) HANGUL SYLLABLE KEOLB
+CEF0;CEF0;110F 1165 11B3;CEF0;110F 1165 11B3; # (컰; 컰; 컰; 컰; 컰; ) HANGUL SYLLABLE KEOLS
+CEF1;CEF1;110F 1165 11B4;CEF1;110F 1165 11B4; # (컱; 컱; 컱; 컱; 컱; ) HANGUL SYLLABLE KEOLT
+CEF2;CEF2;110F 1165 11B5;CEF2;110F 1165 11B5; # (컲; 컲; 컲; 컲; 컲; ) HANGUL SYLLABLE KEOLP
+CEF3;CEF3;110F 1165 11B6;CEF3;110F 1165 11B6; # (컳; 컳; 컳; 컳; 컳; ) HANGUL SYLLABLE KEOLH
+CEF4;CEF4;110F 1165 11B7;CEF4;110F 1165 11B7; # (컴; 컴; 컴; 컴; 컴; ) HANGUL SYLLABLE KEOM
+CEF5;CEF5;110F 1165 11B8;CEF5;110F 1165 11B8; # (컵; 컵; 컵; 컵; 컵; ) HANGUL SYLLABLE KEOB
+CEF6;CEF6;110F 1165 11B9;CEF6;110F 1165 11B9; # (컶; 컶; 컶; 컶; 컶; ) HANGUL SYLLABLE KEOBS
+CEF7;CEF7;110F 1165 11BA;CEF7;110F 1165 11BA; # (컷; 컷; 컷; 컷; 컷; ) HANGUL SYLLABLE KEOS
+CEF8;CEF8;110F 1165 11BB;CEF8;110F 1165 11BB; # (컸; 컸; 컸; 컸; 컸; ) HANGUL SYLLABLE KEOSS
+CEF9;CEF9;110F 1165 11BC;CEF9;110F 1165 11BC; # (컹; 컹; 컹; 컹; 컹; ) HANGUL SYLLABLE KEONG
+CEFA;CEFA;110F 1165 11BD;CEFA;110F 1165 11BD; # (컺; 컺; 컺; 컺; 컺; ) HANGUL SYLLABLE KEOJ
+CEFB;CEFB;110F 1165 11BE;CEFB;110F 1165 11BE; # (컻; 컻; 컻; 컻; 컻; ) HANGUL SYLLABLE KEOC
+CEFC;CEFC;110F 1165 11BF;CEFC;110F 1165 11BF; # (컼; 컼; 컼; 컼; 컼; ) HANGUL SYLLABLE KEOK
+CEFD;CEFD;110F 1165 11C0;CEFD;110F 1165 11C0; # (컽; 컽; 컽; 컽; 컽; ) HANGUL SYLLABLE KEOT
+CEFE;CEFE;110F 1165 11C1;CEFE;110F 1165 11C1; # (컾; 컾; 컾; 컾; 컾; ) HANGUL SYLLABLE KEOP
+CEFF;CEFF;110F 1165 11C2;CEFF;110F 1165 11C2; # (컿; 컿; 컿; 컿; 컿; ) HANGUL SYLLABLE KEOH
+CF00;CF00;110F 1166;CF00;110F 1166; # (케; 케; 케; 케; 케; ) HANGUL SYLLABLE KE
+CF01;CF01;110F 1166 11A8;CF01;110F 1166 11A8; # (켁; 켁; 켁; 켁; 켁; ) HANGUL SYLLABLE KEG
+CF02;CF02;110F 1166 11A9;CF02;110F 1166 11A9; # (켂; 켂; 켂; 켂; 켂; ) HANGUL SYLLABLE KEGG
+CF03;CF03;110F 1166 11AA;CF03;110F 1166 11AA; # (켃; 켃; 켃; 켃; 켃; ) HANGUL SYLLABLE KEGS
+CF04;CF04;110F 1166 11AB;CF04;110F 1166 11AB; # (켄; 켄; 켄; 켄; 켄; ) HANGUL SYLLABLE KEN
+CF05;CF05;110F 1166 11AC;CF05;110F 1166 11AC; # (켅; 켅; 켅; 켅; 켅; ) HANGUL SYLLABLE KENJ
+CF06;CF06;110F 1166 11AD;CF06;110F 1166 11AD; # (켆; 켆; 켆; 켆; 켆; ) HANGUL SYLLABLE KENH
+CF07;CF07;110F 1166 11AE;CF07;110F 1166 11AE; # (켇; 켇; 켇; 켇; 켇; ) HANGUL SYLLABLE KED
+CF08;CF08;110F 1166 11AF;CF08;110F 1166 11AF; # (켈; 켈; 켈; 켈; 켈; ) HANGUL SYLLABLE KEL
+CF09;CF09;110F 1166 11B0;CF09;110F 1166 11B0; # (켉; 켉; 켉; 켉; 켉; ) HANGUL SYLLABLE KELG
+CF0A;CF0A;110F 1166 11B1;CF0A;110F 1166 11B1; # (켊; 켊; 켊; 켊; 켊; ) HANGUL SYLLABLE KELM
+CF0B;CF0B;110F 1166 11B2;CF0B;110F 1166 11B2; # (켋; 켋; 켋; 켋; 켋; ) HANGUL SYLLABLE KELB
+CF0C;CF0C;110F 1166 11B3;CF0C;110F 1166 11B3; # (켌; 켌; 켌; 켌; 켌; ) HANGUL SYLLABLE KELS
+CF0D;CF0D;110F 1166 11B4;CF0D;110F 1166 11B4; # (켍; 켍; 켍; 켍; 켍; ) HANGUL SYLLABLE KELT
+CF0E;CF0E;110F 1166 11B5;CF0E;110F 1166 11B5; # (켎; 켎; 켎; 켎; 켎; ) HANGUL SYLLABLE KELP
+CF0F;CF0F;110F 1166 11B6;CF0F;110F 1166 11B6; # (켏; 켏; 켏; 켏; 켏; ) HANGUL SYLLABLE KELH
+CF10;CF10;110F 1166 11B7;CF10;110F 1166 11B7; # (켐; 켐; 켐; 켐; 켐; ) HANGUL SYLLABLE KEM
+CF11;CF11;110F 1166 11B8;CF11;110F 1166 11B8; # (켑; 켑; 켑; 켑; 켑; ) HANGUL SYLLABLE KEB
+CF12;CF12;110F 1166 11B9;CF12;110F 1166 11B9; # (켒; 켒; 켒; 켒; 켒; ) HANGUL SYLLABLE KEBS
+CF13;CF13;110F 1166 11BA;CF13;110F 1166 11BA; # (켓; 켓; 켓; 켓; 켓; ) HANGUL SYLLABLE KES
+CF14;CF14;110F 1166 11BB;CF14;110F 1166 11BB; # (켔; 켔; 켔; 켔; 켔; ) HANGUL SYLLABLE KESS
+CF15;CF15;110F 1166 11BC;CF15;110F 1166 11BC; # (켕; 켕; 켕; 켕; 켕; ) HANGUL SYLLABLE KENG
+CF16;CF16;110F 1166 11BD;CF16;110F 1166 11BD; # (켖; 켖; 켖; 켖; 켖; ) HANGUL SYLLABLE KEJ
+CF17;CF17;110F 1166 11BE;CF17;110F 1166 11BE; # (켗; 켗; 켗; 켗; 켗; ) HANGUL SYLLABLE KEC
+CF18;CF18;110F 1166 11BF;CF18;110F 1166 11BF; # (켘; 켘; 켘; 켘; 켘; ) HANGUL SYLLABLE KEK
+CF19;CF19;110F 1166 11C0;CF19;110F 1166 11C0; # (켙; 켙; 켙; 켙; 켙; ) HANGUL SYLLABLE KET
+CF1A;CF1A;110F 1166 11C1;CF1A;110F 1166 11C1; # (켚; 켚; 켚; 켚; 켚; ) HANGUL SYLLABLE KEP
+CF1B;CF1B;110F 1166 11C2;CF1B;110F 1166 11C2; # (켛; 켛; 켛; 켛; 켛; ) HANGUL SYLLABLE KEH
+CF1C;CF1C;110F 1167;CF1C;110F 1167; # (켜; 켜; 켜; 켜; 켜; ) HANGUL SYLLABLE KYEO
+CF1D;CF1D;110F 1167 11A8;CF1D;110F 1167 11A8; # (켝; 켝; 켝; 켝; 켝; ) HANGUL SYLLABLE KYEOG
+CF1E;CF1E;110F 1167 11A9;CF1E;110F 1167 11A9; # (켞; 켞; 켞; 켞; 켞; ) HANGUL SYLLABLE KYEOGG
+CF1F;CF1F;110F 1167 11AA;CF1F;110F 1167 11AA; # (켟; 켟; 켟; 켟; 켟; ) HANGUL SYLLABLE KYEOGS
+CF20;CF20;110F 1167 11AB;CF20;110F 1167 11AB; # (켠; 켠; 켠; 켠; 켠; ) HANGUL SYLLABLE KYEON
+CF21;CF21;110F 1167 11AC;CF21;110F 1167 11AC; # (켡; 켡; 켡; 켡; 켡; ) HANGUL SYLLABLE KYEONJ
+CF22;CF22;110F 1167 11AD;CF22;110F 1167 11AD; # (켢; 켢; 켢; 켢; 켢; ) HANGUL SYLLABLE KYEONH
+CF23;CF23;110F 1167 11AE;CF23;110F 1167 11AE; # (켣; 켣; 켣; 켣; 켣; ) HANGUL SYLLABLE KYEOD
+CF24;CF24;110F 1167 11AF;CF24;110F 1167 11AF; # (켤; 켤; 켤; 켤; 켤; ) HANGUL SYLLABLE KYEOL
+CF25;CF25;110F 1167 11B0;CF25;110F 1167 11B0; # (켥; 켥; 켥; 켥; 켥; ) HANGUL SYLLABLE KYEOLG
+CF26;CF26;110F 1167 11B1;CF26;110F 1167 11B1; # (켦; 켦; 켦; 켦; 켦; ) HANGUL SYLLABLE KYEOLM
+CF27;CF27;110F 1167 11B2;CF27;110F 1167 11B2; # (켧; 켧; 켧; 켧; 켧; ) HANGUL SYLLABLE KYEOLB
+CF28;CF28;110F 1167 11B3;CF28;110F 1167 11B3; # (켨; 켨; 켨; 켨; 켨; ) HANGUL SYLLABLE KYEOLS
+CF29;CF29;110F 1167 11B4;CF29;110F 1167 11B4; # (켩; 켩; 켩; 켩; 켩; ) HANGUL SYLLABLE KYEOLT
+CF2A;CF2A;110F 1167 11B5;CF2A;110F 1167 11B5; # (켪; 켪; 켪; 켪; 켪; ) HANGUL SYLLABLE KYEOLP
+CF2B;CF2B;110F 1167 11B6;CF2B;110F 1167 11B6; # (켫; 켫; 켫; 켫; 켫; ) HANGUL SYLLABLE KYEOLH
+CF2C;CF2C;110F 1167 11B7;CF2C;110F 1167 11B7; # (켬; 켬; 켬; 켬; 켬; ) HANGUL SYLLABLE KYEOM
+CF2D;CF2D;110F 1167 11B8;CF2D;110F 1167 11B8; # (켭; 켭; 켭; 켭; 켭; ) HANGUL SYLLABLE KYEOB
+CF2E;CF2E;110F 1167 11B9;CF2E;110F 1167 11B9; # (켮; 켮; 켮; 켮; 켮; ) HANGUL SYLLABLE KYEOBS
+CF2F;CF2F;110F 1167 11BA;CF2F;110F 1167 11BA; # (켯; 켯; 켯; 켯; 켯; ) HANGUL SYLLABLE KYEOS
+CF30;CF30;110F 1167 11BB;CF30;110F 1167 11BB; # (켰; 켰; 켰; 켰; 켰; ) HANGUL SYLLABLE KYEOSS
+CF31;CF31;110F 1167 11BC;CF31;110F 1167 11BC; # (켱; 켱; 켱; 켱; 켱; ) HANGUL SYLLABLE KYEONG
+CF32;CF32;110F 1167 11BD;CF32;110F 1167 11BD; # (켲; 켲; 켲; 켲; 켲; ) HANGUL SYLLABLE KYEOJ
+CF33;CF33;110F 1167 11BE;CF33;110F 1167 11BE; # (켳; 켳; 켳; 켳; 켳; ) HANGUL SYLLABLE KYEOC
+CF34;CF34;110F 1167 11BF;CF34;110F 1167 11BF; # (켴; 켴; 켴; 켴; 켴; ) HANGUL SYLLABLE KYEOK
+CF35;CF35;110F 1167 11C0;CF35;110F 1167 11C0; # (켵; 켵; 켵; 켵; 켵; ) HANGUL SYLLABLE KYEOT
+CF36;CF36;110F 1167 11C1;CF36;110F 1167 11C1; # (켶; 켶; 켶; 켶; 켶; ) HANGUL SYLLABLE KYEOP
+CF37;CF37;110F 1167 11C2;CF37;110F 1167 11C2; # (켷; 켷; 켷; 켷; 켷; ) HANGUL SYLLABLE KYEOH
+CF38;CF38;110F 1168;CF38;110F 1168; # (켸; 켸; 켸; 켸; 켸; ) HANGUL SYLLABLE KYE
+CF39;CF39;110F 1168 11A8;CF39;110F 1168 11A8; # (켹; 켹; 켹; 켹; 켹; ) HANGUL SYLLABLE KYEG
+CF3A;CF3A;110F 1168 11A9;CF3A;110F 1168 11A9; # (켺; 켺; 켺; 켺; 켺; ) HANGUL SYLLABLE KYEGG
+CF3B;CF3B;110F 1168 11AA;CF3B;110F 1168 11AA; # (켻; 켻; 켻; 켻; 켻; ) HANGUL SYLLABLE KYEGS
+CF3C;CF3C;110F 1168 11AB;CF3C;110F 1168 11AB; # (켼; 켼; 켼; 켼; 켼; ) HANGUL SYLLABLE KYEN
+CF3D;CF3D;110F 1168 11AC;CF3D;110F 1168 11AC; # (켽; 켽; 켽; 켽; 켽; ) HANGUL SYLLABLE KYENJ
+CF3E;CF3E;110F 1168 11AD;CF3E;110F 1168 11AD; # (켾; 켾; 켾; 켾; 켾; ) HANGUL SYLLABLE KYENH
+CF3F;CF3F;110F 1168 11AE;CF3F;110F 1168 11AE; # (켿; 켿; 켿; 켿; 켿; ) HANGUL SYLLABLE KYED
+CF40;CF40;110F 1168 11AF;CF40;110F 1168 11AF; # (콀; 콀; 콀; 콀; 콀; ) HANGUL SYLLABLE KYEL
+CF41;CF41;110F 1168 11B0;CF41;110F 1168 11B0; # (콁; 콁; 콁; 콁; 콁; ) HANGUL SYLLABLE KYELG
+CF42;CF42;110F 1168 11B1;CF42;110F 1168 11B1; # (콂; 콂; 콂; 콂; 콂; ) HANGUL SYLLABLE KYELM
+CF43;CF43;110F 1168 11B2;CF43;110F 1168 11B2; # (콃; 콃; 콃; 콃; 콃; ) HANGUL SYLLABLE KYELB
+CF44;CF44;110F 1168 11B3;CF44;110F 1168 11B3; # (콄; 콄; 콄; 콄; 콄; ) HANGUL SYLLABLE KYELS
+CF45;CF45;110F 1168 11B4;CF45;110F 1168 11B4; # (콅; 콅; 콅; 콅; 콅; ) HANGUL SYLLABLE KYELT
+CF46;CF46;110F 1168 11B5;CF46;110F 1168 11B5; # (콆; 콆; 콆; 콆; 콆; ) HANGUL SYLLABLE KYELP
+CF47;CF47;110F 1168 11B6;CF47;110F 1168 11B6; # (콇; 콇; 콇; 콇; 콇; ) HANGUL SYLLABLE KYELH
+CF48;CF48;110F 1168 11B7;CF48;110F 1168 11B7; # (콈; 콈; 콈; 콈; 콈; ) HANGUL SYLLABLE KYEM
+CF49;CF49;110F 1168 11B8;CF49;110F 1168 11B8; # (콉; 콉; 콉; 콉; 콉; ) HANGUL SYLLABLE KYEB
+CF4A;CF4A;110F 1168 11B9;CF4A;110F 1168 11B9; # (콊; 콊; 콊; 콊; 콊; ) HANGUL SYLLABLE KYEBS
+CF4B;CF4B;110F 1168 11BA;CF4B;110F 1168 11BA; # (콋; 콋; 콋; 콋; 콋; ) HANGUL SYLLABLE KYES
+CF4C;CF4C;110F 1168 11BB;CF4C;110F 1168 11BB; # (콌; 콌; 콌; 콌; 콌; ) HANGUL SYLLABLE KYESS
+CF4D;CF4D;110F 1168 11BC;CF4D;110F 1168 11BC; # (콍; 콍; 콍; 콍; 콍; ) HANGUL SYLLABLE KYENG
+CF4E;CF4E;110F 1168 11BD;CF4E;110F 1168 11BD; # (콎; 콎; 콎; 콎; 콎; ) HANGUL SYLLABLE KYEJ
+CF4F;CF4F;110F 1168 11BE;CF4F;110F 1168 11BE; # (콏; 콏; 콏; 콏; 콏; ) HANGUL SYLLABLE KYEC
+CF50;CF50;110F 1168 11BF;CF50;110F 1168 11BF; # (콐; 콐; 콐; 콐; 콐; ) HANGUL SYLLABLE KYEK
+CF51;CF51;110F 1168 11C0;CF51;110F 1168 11C0; # (콑; 콑; 콑; 콑; 콑; ) HANGUL SYLLABLE KYET
+CF52;CF52;110F 1168 11C1;CF52;110F 1168 11C1; # (콒; 콒; 콒; 콒; 콒; ) HANGUL SYLLABLE KYEP
+CF53;CF53;110F 1168 11C2;CF53;110F 1168 11C2; # (콓; 콓; 콓; 콓; 콓; ) HANGUL SYLLABLE KYEH
+CF54;CF54;110F 1169;CF54;110F 1169; # (코; 코; 코; 코; 코; ) HANGUL SYLLABLE KO
+CF55;CF55;110F 1169 11A8;CF55;110F 1169 11A8; # (콕; 콕; 콕; 콕; 콕; ) HANGUL SYLLABLE KOG
+CF56;CF56;110F 1169 11A9;CF56;110F 1169 11A9; # (콖; 콖; 콖; 콖; 콖; ) HANGUL SYLLABLE KOGG
+CF57;CF57;110F 1169 11AA;CF57;110F 1169 11AA; # (콗; 콗; 콗; 콗; 콗; ) HANGUL SYLLABLE KOGS
+CF58;CF58;110F 1169 11AB;CF58;110F 1169 11AB; # (콘; 콘; 콘; 콘; 콘; ) HANGUL SYLLABLE KON
+CF59;CF59;110F 1169 11AC;CF59;110F 1169 11AC; # (콙; 콙; 콙; 콙; 콙; ) HANGUL SYLLABLE KONJ
+CF5A;CF5A;110F 1169 11AD;CF5A;110F 1169 11AD; # (콚; 콚; 콚; 콚; 콚; ) HANGUL SYLLABLE KONH
+CF5B;CF5B;110F 1169 11AE;CF5B;110F 1169 11AE; # (콛; 콛; 콛; 콛; 콛; ) HANGUL SYLLABLE KOD
+CF5C;CF5C;110F 1169 11AF;CF5C;110F 1169 11AF; # (콜; 콜; 콜; 콜; 콜; ) HANGUL SYLLABLE KOL
+CF5D;CF5D;110F 1169 11B0;CF5D;110F 1169 11B0; # (콝; 콝; 콝; 콝; 콝; ) HANGUL SYLLABLE KOLG
+CF5E;CF5E;110F 1169 11B1;CF5E;110F 1169 11B1; # (콞; 콞; 콞; 콞; 콞; ) HANGUL SYLLABLE KOLM
+CF5F;CF5F;110F 1169 11B2;CF5F;110F 1169 11B2; # (콟; 콟; 콟; 콟; 콟; ) HANGUL SYLLABLE KOLB
+CF60;CF60;110F 1169 11B3;CF60;110F 1169 11B3; # (콠; 콠; 콠; 콠; 콠; ) HANGUL SYLLABLE KOLS
+CF61;CF61;110F 1169 11B4;CF61;110F 1169 11B4; # (콡; 콡; 콡; 콡; 콡; ) HANGUL SYLLABLE KOLT
+CF62;CF62;110F 1169 11B5;CF62;110F 1169 11B5; # (콢; 콢; 콢; 콢; 콢; ) HANGUL SYLLABLE KOLP
+CF63;CF63;110F 1169 11B6;CF63;110F 1169 11B6; # (콣; 콣; 콣; 콣; 콣; ) HANGUL SYLLABLE KOLH
+CF64;CF64;110F 1169 11B7;CF64;110F 1169 11B7; # (콤; 콤; 콤; 콤; 콤; ) HANGUL SYLLABLE KOM
+CF65;CF65;110F 1169 11B8;CF65;110F 1169 11B8; # (콥; 콥; 콥; 콥; 콥; ) HANGUL SYLLABLE KOB
+CF66;CF66;110F 1169 11B9;CF66;110F 1169 11B9; # (콦; 콦; 콦; 콦; 콦; ) HANGUL SYLLABLE KOBS
+CF67;CF67;110F 1169 11BA;CF67;110F 1169 11BA; # (콧; 콧; 콧; 콧; 콧; ) HANGUL SYLLABLE KOS
+CF68;CF68;110F 1169 11BB;CF68;110F 1169 11BB; # (콨; 콨; 콨; 콨; 콨; ) HANGUL SYLLABLE KOSS
+CF69;CF69;110F 1169 11BC;CF69;110F 1169 11BC; # (콩; 콩; 콩; 콩; 콩; ) HANGUL SYLLABLE KONG
+CF6A;CF6A;110F 1169 11BD;CF6A;110F 1169 11BD; # (콪; 콪; 콪; 콪; 콪; ) HANGUL SYLLABLE KOJ
+CF6B;CF6B;110F 1169 11BE;CF6B;110F 1169 11BE; # (콫; 콫; 콫; 콫; 콫; ) HANGUL SYLLABLE KOC
+CF6C;CF6C;110F 1169 11BF;CF6C;110F 1169 11BF; # (콬; 콬; 콬; 콬; 콬; ) HANGUL SYLLABLE KOK
+CF6D;CF6D;110F 1169 11C0;CF6D;110F 1169 11C0; # (콭; 콭; 콭; 콭; 콭; ) HANGUL SYLLABLE KOT
+CF6E;CF6E;110F 1169 11C1;CF6E;110F 1169 11C1; # (콮; 콮; 콮; 콮; 콮; ) HANGUL SYLLABLE KOP
+CF6F;CF6F;110F 1169 11C2;CF6F;110F 1169 11C2; # (콯; 콯; 콯; 콯; 콯; ) HANGUL SYLLABLE KOH
+CF70;CF70;110F 116A;CF70;110F 116A; # (콰; 콰; 콰; 콰; 콰; ) HANGUL SYLLABLE KWA
+CF71;CF71;110F 116A 11A8;CF71;110F 116A 11A8; # (콱; 콱; 콱; 콱; 콱; ) HANGUL SYLLABLE KWAG
+CF72;CF72;110F 116A 11A9;CF72;110F 116A 11A9; # (콲; 콲; 콲; 콲; 콲; ) HANGUL SYLLABLE KWAGG
+CF73;CF73;110F 116A 11AA;CF73;110F 116A 11AA; # (콳; 콳; 콳; 콳; 콳; ) HANGUL SYLLABLE KWAGS
+CF74;CF74;110F 116A 11AB;CF74;110F 116A 11AB; # (콴; 콴; 콴; 콴; 콴; ) HANGUL SYLLABLE KWAN
+CF75;CF75;110F 116A 11AC;CF75;110F 116A 11AC; # (콵; 콵; 콵; 콵; 콵; ) HANGUL SYLLABLE KWANJ
+CF76;CF76;110F 116A 11AD;CF76;110F 116A 11AD; # (콶; 콶; 콶; 콶; 콶; ) HANGUL SYLLABLE KWANH
+CF77;CF77;110F 116A 11AE;CF77;110F 116A 11AE; # (콷; 콷; 콷; 콷; 콷; ) HANGUL SYLLABLE KWAD
+CF78;CF78;110F 116A 11AF;CF78;110F 116A 11AF; # (콸; 콸; 콸; 콸; 콸; ) HANGUL SYLLABLE KWAL
+CF79;CF79;110F 116A 11B0;CF79;110F 116A 11B0; # (콹; 콹; 콹; 콹; 콹; ) HANGUL SYLLABLE KWALG
+CF7A;CF7A;110F 116A 11B1;CF7A;110F 116A 11B1; # (콺; 콺; 콺; 콺; 콺; ) HANGUL SYLLABLE KWALM
+CF7B;CF7B;110F 116A 11B2;CF7B;110F 116A 11B2; # (콻; 콻; 콻; 콻; 콻; ) HANGUL SYLLABLE KWALB
+CF7C;CF7C;110F 116A 11B3;CF7C;110F 116A 11B3; # (콼; 콼; 콼; 콼; 콼; ) HANGUL SYLLABLE KWALS
+CF7D;CF7D;110F 116A 11B4;CF7D;110F 116A 11B4; # (콽; 콽; 콽; 콽; 콽; ) HANGUL SYLLABLE KWALT
+CF7E;CF7E;110F 116A 11B5;CF7E;110F 116A 11B5; # (콾; 콾; 콾; 콾; 콾; ) HANGUL SYLLABLE KWALP
+CF7F;CF7F;110F 116A 11B6;CF7F;110F 116A 11B6; # (콿; 콿; 콿; 콿; 콿; ) HANGUL SYLLABLE KWALH
+CF80;CF80;110F 116A 11B7;CF80;110F 116A 11B7; # (쾀; 쾀; 쾀; 쾀; 쾀; ) HANGUL SYLLABLE KWAM
+CF81;CF81;110F 116A 11B8;CF81;110F 116A 11B8; # (쾁; 쾁; 쾁; 쾁; 쾁; ) HANGUL SYLLABLE KWAB
+CF82;CF82;110F 116A 11B9;CF82;110F 116A 11B9; # (쾂; 쾂; 쾂; 쾂; 쾂; ) HANGUL SYLLABLE KWABS
+CF83;CF83;110F 116A 11BA;CF83;110F 116A 11BA; # (쾃; 쾃; 쾃; 쾃; 쾃; ) HANGUL SYLLABLE KWAS
+CF84;CF84;110F 116A 11BB;CF84;110F 116A 11BB; # (쾄; 쾄; 쾄; 쾄; 쾄; ) HANGUL SYLLABLE KWASS
+CF85;CF85;110F 116A 11BC;CF85;110F 116A 11BC; # (쾅; 쾅; 쾅; 쾅; 쾅; ) HANGUL SYLLABLE KWANG
+CF86;CF86;110F 116A 11BD;CF86;110F 116A 11BD; # (쾆; 쾆; 쾆; 쾆; 쾆; ) HANGUL SYLLABLE KWAJ
+CF87;CF87;110F 116A 11BE;CF87;110F 116A 11BE; # (쾇; 쾇; 쾇; 쾇; 쾇; ) HANGUL SYLLABLE KWAC
+CF88;CF88;110F 116A 11BF;CF88;110F 116A 11BF; # (쾈; 쾈; 쾈; 쾈; 쾈; ) HANGUL SYLLABLE KWAK
+CF89;CF89;110F 116A 11C0;CF89;110F 116A 11C0; # (쾉; 쾉; 쾉; 쾉; 쾉; ) HANGUL SYLLABLE KWAT
+CF8A;CF8A;110F 116A 11C1;CF8A;110F 116A 11C1; # (쾊; 쾊; 쾊; 쾊; 쾊; ) HANGUL SYLLABLE KWAP
+CF8B;CF8B;110F 116A 11C2;CF8B;110F 116A 11C2; # (쾋; 쾋; 쾋; 쾋; 쾋; ) HANGUL SYLLABLE KWAH
+CF8C;CF8C;110F 116B;CF8C;110F 116B; # (쾌; 쾌; 쾌; 쾌; 쾌; ) HANGUL SYLLABLE KWAE
+CF8D;CF8D;110F 116B 11A8;CF8D;110F 116B 11A8; # (쾍; 쾍; 쾍; 쾍; 쾍; ) HANGUL SYLLABLE KWAEG
+CF8E;CF8E;110F 116B 11A9;CF8E;110F 116B 11A9; # (쾎; 쾎; 쾎; 쾎; 쾎; ) HANGUL SYLLABLE KWAEGG
+CF8F;CF8F;110F 116B 11AA;CF8F;110F 116B 11AA; # (쾏; 쾏; 쾏; 쾏; 쾏; ) HANGUL SYLLABLE KWAEGS
+CF90;CF90;110F 116B 11AB;CF90;110F 116B 11AB; # (쾐; 쾐; 쾐; 쾐; 쾐; ) HANGUL SYLLABLE KWAEN
+CF91;CF91;110F 116B 11AC;CF91;110F 116B 11AC; # (쾑; 쾑; 쾑; 쾑; 쾑; ) HANGUL SYLLABLE KWAENJ
+CF92;CF92;110F 116B 11AD;CF92;110F 116B 11AD; # (쾒; 쾒; 쾒; 쾒; 쾒; ) HANGUL SYLLABLE KWAENH
+CF93;CF93;110F 116B 11AE;CF93;110F 116B 11AE; # (쾓; 쾓; 쾓; 쾓; 쾓; ) HANGUL SYLLABLE KWAED
+CF94;CF94;110F 116B 11AF;CF94;110F 116B 11AF; # (쾔; 쾔; 쾔; 쾔; 쾔; ) HANGUL SYLLABLE KWAEL
+CF95;CF95;110F 116B 11B0;CF95;110F 116B 11B0; # (쾕; 쾕; 쾕; 쾕; 쾕; ) HANGUL SYLLABLE KWAELG
+CF96;CF96;110F 116B 11B1;CF96;110F 116B 11B1; # (쾖; 쾖; 쾖; 쾖; 쾖; ) HANGUL SYLLABLE KWAELM
+CF97;CF97;110F 116B 11B2;CF97;110F 116B 11B2; # (쾗; 쾗; 쾗; 쾗; 쾗; ) HANGUL SYLLABLE KWAELB
+CF98;CF98;110F 116B 11B3;CF98;110F 116B 11B3; # (쾘; 쾘; 쾘; 쾘; 쾘; ) HANGUL SYLLABLE KWAELS
+CF99;CF99;110F 116B 11B4;CF99;110F 116B 11B4; # (쾙; 쾙; 쾙; 쾙; 쾙; ) HANGUL SYLLABLE KWAELT
+CF9A;CF9A;110F 116B 11B5;CF9A;110F 116B 11B5; # (쾚; 쾚; 쾚; 쾚; 쾚; ) HANGUL SYLLABLE KWAELP
+CF9B;CF9B;110F 116B 11B6;CF9B;110F 116B 11B6; # (쾛; 쾛; 쾛; 쾛; 쾛; ) HANGUL SYLLABLE KWAELH
+CF9C;CF9C;110F 116B 11B7;CF9C;110F 116B 11B7; # (쾜; 쾜; 쾜; 쾜; 쾜; ) HANGUL SYLLABLE KWAEM
+CF9D;CF9D;110F 116B 11B8;CF9D;110F 116B 11B8; # (쾝; 쾝; 쾝; 쾝; 쾝; ) HANGUL SYLLABLE KWAEB
+CF9E;CF9E;110F 116B 11B9;CF9E;110F 116B 11B9; # (쾞; 쾞; 쾞; 쾞; 쾞; ) HANGUL SYLLABLE KWAEBS
+CF9F;CF9F;110F 116B 11BA;CF9F;110F 116B 11BA; # (쾟; 쾟; 쾟; 쾟; 쾟; ) HANGUL SYLLABLE KWAES
+CFA0;CFA0;110F 116B 11BB;CFA0;110F 116B 11BB; # (쾠; 쾠; 쾠; 쾠; 쾠; ) HANGUL SYLLABLE KWAESS
+CFA1;CFA1;110F 116B 11BC;CFA1;110F 116B 11BC; # (쾡; 쾡; 쾡; 쾡; 쾡; ) HANGUL SYLLABLE KWAENG
+CFA2;CFA2;110F 116B 11BD;CFA2;110F 116B 11BD; # (쾢; 쾢; 쾢; 쾢; 쾢; ) HANGUL SYLLABLE KWAEJ
+CFA3;CFA3;110F 116B 11BE;CFA3;110F 116B 11BE; # (쾣; 쾣; 쾣; 쾣; 쾣; ) HANGUL SYLLABLE KWAEC
+CFA4;CFA4;110F 116B 11BF;CFA4;110F 116B 11BF; # (쾤; 쾤; 쾤; 쾤; 쾤; ) HANGUL SYLLABLE KWAEK
+CFA5;CFA5;110F 116B 11C0;CFA5;110F 116B 11C0; # (쾥; 쾥; 쾥; 쾥; 쾥; ) HANGUL SYLLABLE KWAET
+CFA6;CFA6;110F 116B 11C1;CFA6;110F 116B 11C1; # (쾦; 쾦; 쾦; 쾦; 쾦; ) HANGUL SYLLABLE KWAEP
+CFA7;CFA7;110F 116B 11C2;CFA7;110F 116B 11C2; # (쾧; 쾧; 쾧; 쾧; 쾧; ) HANGUL SYLLABLE KWAEH
+CFA8;CFA8;110F 116C;CFA8;110F 116C; # (쾨; 쾨; 쾨; 쾨; 쾨; ) HANGUL SYLLABLE KOE
+CFA9;CFA9;110F 116C 11A8;CFA9;110F 116C 11A8; # (쾩; 쾩; 쾩; 쾩; 쾩; ) HANGUL SYLLABLE KOEG
+CFAA;CFAA;110F 116C 11A9;CFAA;110F 116C 11A9; # (쾪; 쾪; 쾪; 쾪; 쾪; ) HANGUL SYLLABLE KOEGG
+CFAB;CFAB;110F 116C 11AA;CFAB;110F 116C 11AA; # (쾫; 쾫; 쾫; 쾫; 쾫; ) HANGUL SYLLABLE KOEGS
+CFAC;CFAC;110F 116C 11AB;CFAC;110F 116C 11AB; # (쾬; 쾬; 쾬; 쾬; 쾬; ) HANGUL SYLLABLE KOEN
+CFAD;CFAD;110F 116C 11AC;CFAD;110F 116C 11AC; # (쾭; 쾭; 쾭; 쾭; 쾭; ) HANGUL SYLLABLE KOENJ
+CFAE;CFAE;110F 116C 11AD;CFAE;110F 116C 11AD; # (쾮; 쾮; 쾮; 쾮; 쾮; ) HANGUL SYLLABLE KOENH
+CFAF;CFAF;110F 116C 11AE;CFAF;110F 116C 11AE; # (쾯; 쾯; 쾯; 쾯; 쾯; ) HANGUL SYLLABLE KOED
+CFB0;CFB0;110F 116C 11AF;CFB0;110F 116C 11AF; # (쾰; 쾰; 쾰; 쾰; 쾰; ) HANGUL SYLLABLE KOEL
+CFB1;CFB1;110F 116C 11B0;CFB1;110F 116C 11B0; # (쾱; 쾱; 쾱; 쾱; 쾱; ) HANGUL SYLLABLE KOELG
+CFB2;CFB2;110F 116C 11B1;CFB2;110F 116C 11B1; # (쾲; 쾲; 쾲; 쾲; 쾲; ) HANGUL SYLLABLE KOELM
+CFB3;CFB3;110F 116C 11B2;CFB3;110F 116C 11B2; # (쾳; 쾳; 쾳; 쾳; 쾳; ) HANGUL SYLLABLE KOELB
+CFB4;CFB4;110F 116C 11B3;CFB4;110F 116C 11B3; # (쾴; 쾴; 쾴; 쾴; 쾴; ) HANGUL SYLLABLE KOELS
+CFB5;CFB5;110F 116C 11B4;CFB5;110F 116C 11B4; # (쾵; 쾵; 쾵; 쾵; 쾵; ) HANGUL SYLLABLE KOELT
+CFB6;CFB6;110F 116C 11B5;CFB6;110F 116C 11B5; # (쾶; 쾶; 쾶; 쾶; 쾶; ) HANGUL SYLLABLE KOELP
+CFB7;CFB7;110F 116C 11B6;CFB7;110F 116C 11B6; # (쾷; 쾷; 쾷; 쾷; 쾷; ) HANGUL SYLLABLE KOELH
+CFB8;CFB8;110F 116C 11B7;CFB8;110F 116C 11B7; # (쾸; 쾸; 쾸; 쾸; 쾸; ) HANGUL SYLLABLE KOEM
+CFB9;CFB9;110F 116C 11B8;CFB9;110F 116C 11B8; # (쾹; 쾹; 쾹; 쾹; 쾹; ) HANGUL SYLLABLE KOEB
+CFBA;CFBA;110F 116C 11B9;CFBA;110F 116C 11B9; # (쾺; 쾺; 쾺; 쾺; 쾺; ) HANGUL SYLLABLE KOEBS
+CFBB;CFBB;110F 116C 11BA;CFBB;110F 116C 11BA; # (쾻; 쾻; 쾻; 쾻; 쾻; ) HANGUL SYLLABLE KOES
+CFBC;CFBC;110F 116C 11BB;CFBC;110F 116C 11BB; # (쾼; 쾼; 쾼; 쾼; 쾼; ) HANGUL SYLLABLE KOESS
+CFBD;CFBD;110F 116C 11BC;CFBD;110F 116C 11BC; # (쾽; 쾽; 쾽; 쾽; 쾽; ) HANGUL SYLLABLE KOENG
+CFBE;CFBE;110F 116C 11BD;CFBE;110F 116C 11BD; # (쾾; 쾾; 쾾; 쾾; 쾾; ) HANGUL SYLLABLE KOEJ
+CFBF;CFBF;110F 116C 11BE;CFBF;110F 116C 11BE; # (쾿; 쾿; 쾿; 쾿; 쾿; ) HANGUL SYLLABLE KOEC
+CFC0;CFC0;110F 116C 11BF;CFC0;110F 116C 11BF; # (쿀; 쿀; 쿀; 쿀; 쿀; ) HANGUL SYLLABLE KOEK
+CFC1;CFC1;110F 116C 11C0;CFC1;110F 116C 11C0; # (쿁; 쿁; 쿁; 쿁; 쿁; ) HANGUL SYLLABLE KOET
+CFC2;CFC2;110F 116C 11C1;CFC2;110F 116C 11C1; # (쿂; 쿂; 쿂; 쿂; 쿂; ) HANGUL SYLLABLE KOEP
+CFC3;CFC3;110F 116C 11C2;CFC3;110F 116C 11C2; # (쿃; 쿃; 쿃; 쿃; 쿃; ) HANGUL SYLLABLE KOEH
+CFC4;CFC4;110F 116D;CFC4;110F 116D; # (쿄; 쿄; 쿄; 쿄; 쿄; ) HANGUL SYLLABLE KYO
+CFC5;CFC5;110F 116D 11A8;CFC5;110F 116D 11A8; # (쿅; 쿅; 쿅; 쿅; 쿅; ) HANGUL SYLLABLE KYOG
+CFC6;CFC6;110F 116D 11A9;CFC6;110F 116D 11A9; # (쿆; 쿆; 쿆; 쿆; 쿆; ) HANGUL SYLLABLE KYOGG
+CFC7;CFC7;110F 116D 11AA;CFC7;110F 116D 11AA; # (쿇; 쿇; 쿇; 쿇; 쿇; ) HANGUL SYLLABLE KYOGS
+CFC8;CFC8;110F 116D 11AB;CFC8;110F 116D 11AB; # (쿈; 쿈; 쿈; 쿈; 쿈; ) HANGUL SYLLABLE KYON
+CFC9;CFC9;110F 116D 11AC;CFC9;110F 116D 11AC; # (쿉; 쿉; 쿉; 쿉; 쿉; ) HANGUL SYLLABLE KYONJ
+CFCA;CFCA;110F 116D 11AD;CFCA;110F 116D 11AD; # (쿊; 쿊; 쿊; 쿊; 쿊; ) HANGUL SYLLABLE KYONH
+CFCB;CFCB;110F 116D 11AE;CFCB;110F 116D 11AE; # (쿋; 쿋; 쿋; 쿋; 쿋; ) HANGUL SYLLABLE KYOD
+CFCC;CFCC;110F 116D 11AF;CFCC;110F 116D 11AF; # (쿌; 쿌; 쿌; 쿌; 쿌; ) HANGUL SYLLABLE KYOL
+CFCD;CFCD;110F 116D 11B0;CFCD;110F 116D 11B0; # (쿍; 쿍; 쿍; 쿍; 쿍; ) HANGUL SYLLABLE KYOLG
+CFCE;CFCE;110F 116D 11B1;CFCE;110F 116D 11B1; # (쿎; 쿎; 쿎; 쿎; 쿎; ) HANGUL SYLLABLE KYOLM
+CFCF;CFCF;110F 116D 11B2;CFCF;110F 116D 11B2; # (쿏; 쿏; 쿏; 쿏; 쿏; ) HANGUL SYLLABLE KYOLB
+CFD0;CFD0;110F 116D 11B3;CFD0;110F 116D 11B3; # (쿐; 쿐; 쿐; 쿐; 쿐; ) HANGUL SYLLABLE KYOLS
+CFD1;CFD1;110F 116D 11B4;CFD1;110F 116D 11B4; # (쿑; 쿑; 쿑; 쿑; 쿑; ) HANGUL SYLLABLE KYOLT
+CFD2;CFD2;110F 116D 11B5;CFD2;110F 116D 11B5; # (쿒; 쿒; 쿒; 쿒; 쿒; ) HANGUL SYLLABLE KYOLP
+CFD3;CFD3;110F 116D 11B6;CFD3;110F 116D 11B6; # (쿓; 쿓; 쿓; 쿓; 쿓; ) HANGUL SYLLABLE KYOLH
+CFD4;CFD4;110F 116D 11B7;CFD4;110F 116D 11B7; # (쿔; 쿔; 쿔; 쿔; 쿔; ) HANGUL SYLLABLE KYOM
+CFD5;CFD5;110F 116D 11B8;CFD5;110F 116D 11B8; # (쿕; 쿕; 쿕; 쿕; 쿕; ) HANGUL SYLLABLE KYOB
+CFD6;CFD6;110F 116D 11B9;CFD6;110F 116D 11B9; # (쿖; 쿖; 쿖; 쿖; 쿖; ) HANGUL SYLLABLE KYOBS
+CFD7;CFD7;110F 116D 11BA;CFD7;110F 116D 11BA; # (쿗; 쿗; 쿗; 쿗; 쿗; ) HANGUL SYLLABLE KYOS
+CFD8;CFD8;110F 116D 11BB;CFD8;110F 116D 11BB; # (쿘; 쿘; 쿘; 쿘; 쿘; ) HANGUL SYLLABLE KYOSS
+CFD9;CFD9;110F 116D 11BC;CFD9;110F 116D 11BC; # (쿙; 쿙; 쿙; 쿙; 쿙; ) HANGUL SYLLABLE KYONG
+CFDA;CFDA;110F 116D 11BD;CFDA;110F 116D 11BD; # (쿚; 쿚; 쿚; 쿚; 쿚; ) HANGUL SYLLABLE KYOJ
+CFDB;CFDB;110F 116D 11BE;CFDB;110F 116D 11BE; # (쿛; 쿛; 쿛; 쿛; 쿛; ) HANGUL SYLLABLE KYOC
+CFDC;CFDC;110F 116D 11BF;CFDC;110F 116D 11BF; # (쿜; 쿜; 쿜; 쿜; 쿜; ) HANGUL SYLLABLE KYOK
+CFDD;CFDD;110F 116D 11C0;CFDD;110F 116D 11C0; # (쿝; 쿝; 쿝; 쿝; 쿝; ) HANGUL SYLLABLE KYOT
+CFDE;CFDE;110F 116D 11C1;CFDE;110F 116D 11C1; # (쿞; 쿞; 쿞; 쿞; 쿞; ) HANGUL SYLLABLE KYOP
+CFDF;CFDF;110F 116D 11C2;CFDF;110F 116D 11C2; # (쿟; 쿟; 쿟; 쿟; 쿟; ) HANGUL SYLLABLE KYOH
+CFE0;CFE0;110F 116E;CFE0;110F 116E; # (쿠; 쿠; 쿠; 쿠; 쿠; ) HANGUL SYLLABLE KU
+CFE1;CFE1;110F 116E 11A8;CFE1;110F 116E 11A8; # (쿡; 쿡; 쿡; 쿡; 쿡; ) HANGUL SYLLABLE KUG
+CFE2;CFE2;110F 116E 11A9;CFE2;110F 116E 11A9; # (쿢; 쿢; 쿢; 쿢; 쿢; ) HANGUL SYLLABLE KUGG
+CFE3;CFE3;110F 116E 11AA;CFE3;110F 116E 11AA; # (쿣; 쿣; 쿣; 쿣; 쿣; ) HANGUL SYLLABLE KUGS
+CFE4;CFE4;110F 116E 11AB;CFE4;110F 116E 11AB; # (쿤; 쿤; 쿤; 쿤; 쿤; ) HANGUL SYLLABLE KUN
+CFE5;CFE5;110F 116E 11AC;CFE5;110F 116E 11AC; # (쿥; 쿥; 쿥; 쿥; 쿥; ) HANGUL SYLLABLE KUNJ
+CFE6;CFE6;110F 116E 11AD;CFE6;110F 116E 11AD; # (쿦; 쿦; 쿦; 쿦; 쿦; ) HANGUL SYLLABLE KUNH
+CFE7;CFE7;110F 116E 11AE;CFE7;110F 116E 11AE; # (쿧; 쿧; 쿧; 쿧; 쿧; ) HANGUL SYLLABLE KUD
+CFE8;CFE8;110F 116E 11AF;CFE8;110F 116E 11AF; # (쿨; 쿨; 쿨; 쿨; 쿨; ) HANGUL SYLLABLE KUL
+CFE9;CFE9;110F 116E 11B0;CFE9;110F 116E 11B0; # (쿩; 쿩; 쿩; 쿩; 쿩; ) HANGUL SYLLABLE KULG
+CFEA;CFEA;110F 116E 11B1;CFEA;110F 116E 11B1; # (쿪; 쿪; 쿪; 쿪; 쿪; ) HANGUL SYLLABLE KULM
+CFEB;CFEB;110F 116E 11B2;CFEB;110F 116E 11B2; # (쿫; 쿫; 쿫; 쿫; 쿫; ) HANGUL SYLLABLE KULB
+CFEC;CFEC;110F 116E 11B3;CFEC;110F 116E 11B3; # (쿬; 쿬; 쿬; 쿬; 쿬; ) HANGUL SYLLABLE KULS
+CFED;CFED;110F 116E 11B4;CFED;110F 116E 11B4; # (쿭; 쿭; 쿭; 쿭; 쿭; ) HANGUL SYLLABLE KULT
+CFEE;CFEE;110F 116E 11B5;CFEE;110F 116E 11B5; # (쿮; 쿮; 쿮; 쿮; 쿮; ) HANGUL SYLLABLE KULP
+CFEF;CFEF;110F 116E 11B6;CFEF;110F 116E 11B6; # (쿯; 쿯; 쿯; 쿯; 쿯; ) HANGUL SYLLABLE KULH
+CFF0;CFF0;110F 116E 11B7;CFF0;110F 116E 11B7; # (쿰; 쿰; 쿰; 쿰; 쿰; ) HANGUL SYLLABLE KUM
+CFF1;CFF1;110F 116E 11B8;CFF1;110F 116E 11B8; # (쿱; 쿱; 쿱; 쿱; 쿱; ) HANGUL SYLLABLE KUB
+CFF2;CFF2;110F 116E 11B9;CFF2;110F 116E 11B9; # (쿲; 쿲; 쿲; 쿲; 쿲; ) HANGUL SYLLABLE KUBS
+CFF3;CFF3;110F 116E 11BA;CFF3;110F 116E 11BA; # (쿳; 쿳; 쿳; 쿳; 쿳; ) HANGUL SYLLABLE KUS
+CFF4;CFF4;110F 116E 11BB;CFF4;110F 116E 11BB; # (쿴; 쿴; 쿴; 쿴; 쿴; ) HANGUL SYLLABLE KUSS
+CFF5;CFF5;110F 116E 11BC;CFF5;110F 116E 11BC; # (쿵; 쿵; 쿵; 쿵; 쿵; ) HANGUL SYLLABLE KUNG
+CFF6;CFF6;110F 116E 11BD;CFF6;110F 116E 11BD; # (쿶; 쿶; 쿶; 쿶; 쿶; ) HANGUL SYLLABLE KUJ
+CFF7;CFF7;110F 116E 11BE;CFF7;110F 116E 11BE; # (쿷; 쿷; 쿷; 쿷; 쿷; ) HANGUL SYLLABLE KUC
+CFF8;CFF8;110F 116E 11BF;CFF8;110F 116E 11BF; # (쿸; 쿸; 쿸; 쿸; 쿸; ) HANGUL SYLLABLE KUK
+CFF9;CFF9;110F 116E 11C0;CFF9;110F 116E 11C0; # (쿹; 쿹; 쿹; 쿹; 쿹; ) HANGUL SYLLABLE KUT
+CFFA;CFFA;110F 116E 11C1;CFFA;110F 116E 11C1; # (쿺; 쿺; 쿺; 쿺; 쿺; ) HANGUL SYLLABLE KUP
+CFFB;CFFB;110F 116E 11C2;CFFB;110F 116E 11C2; # (쿻; 쿻; 쿻; 쿻; 쿻; ) HANGUL SYLLABLE KUH
+CFFC;CFFC;110F 116F;CFFC;110F 116F; # (쿼; 쿼; 쿼; 쿼; 쿼; ) HANGUL SYLLABLE KWEO
+CFFD;CFFD;110F 116F 11A8;CFFD;110F 116F 11A8; # (쿽; 쿽; 쿽; 쿽; 쿽; ) HANGUL SYLLABLE KWEOG
+CFFE;CFFE;110F 116F 11A9;CFFE;110F 116F 11A9; # (쿾; 쿾; 쿾; 쿾; 쿾; ) HANGUL SYLLABLE KWEOGG
+CFFF;CFFF;110F 116F 11AA;CFFF;110F 116F 11AA; # (쿿; 쿿; 쿿; 쿿; 쿿; ) HANGUL SYLLABLE KWEOGS
+D000;D000;110F 116F 11AB;D000;110F 116F 11AB; # (퀀; 퀀; 퀀; 퀀; 퀀; ) HANGUL SYLLABLE KWEON
+D001;D001;110F 116F 11AC;D001;110F 116F 11AC; # (퀁; 퀁; 퀁; 퀁; 퀁; ) HANGUL SYLLABLE KWEONJ
+D002;D002;110F 116F 11AD;D002;110F 116F 11AD; # (퀂; 퀂; 퀂; 퀂; 퀂; ) HANGUL SYLLABLE KWEONH
+D003;D003;110F 116F 11AE;D003;110F 116F 11AE; # (퀃; 퀃; 퀃; 퀃; 퀃; ) HANGUL SYLLABLE KWEOD
+D004;D004;110F 116F 11AF;D004;110F 116F 11AF; # (퀄; 퀄; 퀄; 퀄; 퀄; ) HANGUL SYLLABLE KWEOL
+D005;D005;110F 116F 11B0;D005;110F 116F 11B0; # (퀅; 퀅; 퀅; 퀅; 퀅; ) HANGUL SYLLABLE KWEOLG
+D006;D006;110F 116F 11B1;D006;110F 116F 11B1; # (퀆; 퀆; 퀆; 퀆; 퀆; ) HANGUL SYLLABLE KWEOLM
+D007;D007;110F 116F 11B2;D007;110F 116F 11B2; # (퀇; 퀇; 퀇; 퀇; 퀇; ) HANGUL SYLLABLE KWEOLB
+D008;D008;110F 116F 11B3;D008;110F 116F 11B3; # (퀈; 퀈; 퀈; 퀈; 퀈; ) HANGUL SYLLABLE KWEOLS
+D009;D009;110F 116F 11B4;D009;110F 116F 11B4; # (퀉; 퀉; 퀉; 퀉; 퀉; ) HANGUL SYLLABLE KWEOLT
+D00A;D00A;110F 116F 11B5;D00A;110F 116F 11B5; # (퀊; 퀊; 퀊; 퀊; 퀊; ) HANGUL SYLLABLE KWEOLP
+D00B;D00B;110F 116F 11B6;D00B;110F 116F 11B6; # (퀋; 퀋; 퀋; 퀋; 퀋; ) HANGUL SYLLABLE KWEOLH
+D00C;D00C;110F 116F 11B7;D00C;110F 116F 11B7; # (퀌; 퀌; 퀌; 퀌; 퀌; ) HANGUL SYLLABLE KWEOM
+D00D;D00D;110F 116F 11B8;D00D;110F 116F 11B8; # (퀍; 퀍; 퀍; 퀍; 퀍; ) HANGUL SYLLABLE KWEOB
+D00E;D00E;110F 116F 11B9;D00E;110F 116F 11B9; # (퀎; 퀎; 퀎; 퀎; 퀎; ) HANGUL SYLLABLE KWEOBS
+D00F;D00F;110F 116F 11BA;D00F;110F 116F 11BA; # (퀏; 퀏; 퀏; 퀏; 퀏; ) HANGUL SYLLABLE KWEOS
+D010;D010;110F 116F 11BB;D010;110F 116F 11BB; # (퀐; 퀐; 퀐; 퀐; 퀐; ) HANGUL SYLLABLE KWEOSS
+D011;D011;110F 116F 11BC;D011;110F 116F 11BC; # (퀑; 퀑; 퀑; 퀑; 퀑; ) HANGUL SYLLABLE KWEONG
+D012;D012;110F 116F 11BD;D012;110F 116F 11BD; # (퀒; 퀒; 퀒; 퀒; 퀒; ) HANGUL SYLLABLE KWEOJ
+D013;D013;110F 116F 11BE;D013;110F 116F 11BE; # (퀓; 퀓; 퀓; 퀓; 퀓; ) HANGUL SYLLABLE KWEOC
+D014;D014;110F 116F 11BF;D014;110F 116F 11BF; # (퀔; 퀔; 퀔; 퀔; 퀔; ) HANGUL SYLLABLE KWEOK
+D015;D015;110F 116F 11C0;D015;110F 116F 11C0; # (퀕; 퀕; 퀕; 퀕; 퀕; ) HANGUL SYLLABLE KWEOT
+D016;D016;110F 116F 11C1;D016;110F 116F 11C1; # (퀖; 퀖; 퀖; 퀖; 퀖; ) HANGUL SYLLABLE KWEOP
+D017;D017;110F 116F 11C2;D017;110F 116F 11C2; # (퀗; 퀗; 퀗; 퀗; 퀗; ) HANGUL SYLLABLE KWEOH
+D018;D018;110F 1170;D018;110F 1170; # (퀘; 퀘; 퀘; 퀘; 퀘; ) HANGUL SYLLABLE KWE
+D019;D019;110F 1170 11A8;D019;110F 1170 11A8; # (퀙; 퀙; 퀙; 퀙; 퀙; ) HANGUL SYLLABLE KWEG
+D01A;D01A;110F 1170 11A9;D01A;110F 1170 11A9; # (퀚; 퀚; 퀚; 퀚; 퀚; ) HANGUL SYLLABLE KWEGG
+D01B;D01B;110F 1170 11AA;D01B;110F 1170 11AA; # (퀛; 퀛; 퀛; 퀛; 퀛; ) HANGUL SYLLABLE KWEGS
+D01C;D01C;110F 1170 11AB;D01C;110F 1170 11AB; # (퀜; 퀜; 퀜; 퀜; 퀜; ) HANGUL SYLLABLE KWEN
+D01D;D01D;110F 1170 11AC;D01D;110F 1170 11AC; # (퀝; 퀝; 퀝; 퀝; 퀝; ) HANGUL SYLLABLE KWENJ
+D01E;D01E;110F 1170 11AD;D01E;110F 1170 11AD; # (퀞; 퀞; 퀞; 퀞; 퀞; ) HANGUL SYLLABLE KWENH
+D01F;D01F;110F 1170 11AE;D01F;110F 1170 11AE; # (퀟; 퀟; 퀟; 퀟; 퀟; ) HANGUL SYLLABLE KWED
+D020;D020;110F 1170 11AF;D020;110F 1170 11AF; # (퀠; 퀠; 퀠; 퀠; 퀠; ) HANGUL SYLLABLE KWEL
+D021;D021;110F 1170 11B0;D021;110F 1170 11B0; # (퀡; 퀡; 퀡; 퀡; 퀡; ) HANGUL SYLLABLE KWELG
+D022;D022;110F 1170 11B1;D022;110F 1170 11B1; # (퀢; 퀢; 퀢; 퀢; 퀢; ) HANGUL SYLLABLE KWELM
+D023;D023;110F 1170 11B2;D023;110F 1170 11B2; # (퀣; 퀣; 퀣; 퀣; 퀣; ) HANGUL SYLLABLE KWELB
+D024;D024;110F 1170 11B3;D024;110F 1170 11B3; # (퀤; 퀤; 퀤; 퀤; 퀤; ) HANGUL SYLLABLE KWELS
+D025;D025;110F 1170 11B4;D025;110F 1170 11B4; # (퀥; 퀥; 퀥; 퀥; 퀥; ) HANGUL SYLLABLE KWELT
+D026;D026;110F 1170 11B5;D026;110F 1170 11B5; # (퀦; 퀦; 퀦; 퀦; 퀦; ) HANGUL SYLLABLE KWELP
+D027;D027;110F 1170 11B6;D027;110F 1170 11B6; # (퀧; 퀧; 퀧; 퀧; 퀧; ) HANGUL SYLLABLE KWELH
+D028;D028;110F 1170 11B7;D028;110F 1170 11B7; # (퀨; 퀨; 퀨; 퀨; 퀨; ) HANGUL SYLLABLE KWEM
+D029;D029;110F 1170 11B8;D029;110F 1170 11B8; # (퀩; 퀩; 퀩; 퀩; 퀩; ) HANGUL SYLLABLE KWEB
+D02A;D02A;110F 1170 11B9;D02A;110F 1170 11B9; # (퀪; 퀪; 퀪; 퀪; 퀪; ) HANGUL SYLLABLE KWEBS
+D02B;D02B;110F 1170 11BA;D02B;110F 1170 11BA; # (퀫; 퀫; 퀫; 퀫; 퀫; ) HANGUL SYLLABLE KWES
+D02C;D02C;110F 1170 11BB;D02C;110F 1170 11BB; # (퀬; 퀬; 퀬; 퀬; 퀬; ) HANGUL SYLLABLE KWESS
+D02D;D02D;110F 1170 11BC;D02D;110F 1170 11BC; # (퀭; 퀭; 퀭; 퀭; 퀭; ) HANGUL SYLLABLE KWENG
+D02E;D02E;110F 1170 11BD;D02E;110F 1170 11BD; # (퀮; 퀮; 퀮; 퀮; 퀮; ) HANGUL SYLLABLE KWEJ
+D02F;D02F;110F 1170 11BE;D02F;110F 1170 11BE; # (퀯; 퀯; 퀯; 퀯; 퀯; ) HANGUL SYLLABLE KWEC
+D030;D030;110F 1170 11BF;D030;110F 1170 11BF; # (퀰; 퀰; 퀰; 퀰; 퀰; ) HANGUL SYLLABLE KWEK
+D031;D031;110F 1170 11C0;D031;110F 1170 11C0; # (퀱; 퀱; 퀱; 퀱; 퀱; ) HANGUL SYLLABLE KWET
+D032;D032;110F 1170 11C1;D032;110F 1170 11C1; # (퀲; 퀲; 퀲; 퀲; 퀲; ) HANGUL SYLLABLE KWEP
+D033;D033;110F 1170 11C2;D033;110F 1170 11C2; # (퀳; 퀳; 퀳; 퀳; 퀳; ) HANGUL SYLLABLE KWEH
+D034;D034;110F 1171;D034;110F 1171; # (퀴; 퀴; 퀴; 퀴; 퀴; ) HANGUL SYLLABLE KWI
+D035;D035;110F 1171 11A8;D035;110F 1171 11A8; # (퀵; 퀵; 퀵; 퀵; 퀵; ) HANGUL SYLLABLE KWIG
+D036;D036;110F 1171 11A9;D036;110F 1171 11A9; # (퀶; 퀶; 퀶; 퀶; 퀶; ) HANGUL SYLLABLE KWIGG
+D037;D037;110F 1171 11AA;D037;110F 1171 11AA; # (퀷; 퀷; 퀷; 퀷; 퀷; ) HANGUL SYLLABLE KWIGS
+D038;D038;110F 1171 11AB;D038;110F 1171 11AB; # (퀸; 퀸; 퀸; 퀸; 퀸; ) HANGUL SYLLABLE KWIN
+D039;D039;110F 1171 11AC;D039;110F 1171 11AC; # (퀹; 퀹; 퀹; 퀹; 퀹; ) HANGUL SYLLABLE KWINJ
+D03A;D03A;110F 1171 11AD;D03A;110F 1171 11AD; # (퀺; 퀺; 퀺; 퀺; 퀺; ) HANGUL SYLLABLE KWINH
+D03B;D03B;110F 1171 11AE;D03B;110F 1171 11AE; # (퀻; 퀻; 퀻; 퀻; 퀻; ) HANGUL SYLLABLE KWID
+D03C;D03C;110F 1171 11AF;D03C;110F 1171 11AF; # (퀼; 퀼; 퀼; 퀼; 퀼; ) HANGUL SYLLABLE KWIL
+D03D;D03D;110F 1171 11B0;D03D;110F 1171 11B0; # (퀽; 퀽; 퀽; 퀽; 퀽; ) HANGUL SYLLABLE KWILG
+D03E;D03E;110F 1171 11B1;D03E;110F 1171 11B1; # (퀾; 퀾; 퀾; 퀾; 퀾; ) HANGUL SYLLABLE KWILM
+D03F;D03F;110F 1171 11B2;D03F;110F 1171 11B2; # (퀿; 퀿; 퀿; 퀿; 퀿; ) HANGUL SYLLABLE KWILB
+D040;D040;110F 1171 11B3;D040;110F 1171 11B3; # (큀; 큀; 큀; 큀; 큀; ) HANGUL SYLLABLE KWILS
+D041;D041;110F 1171 11B4;D041;110F 1171 11B4; # (큁; 큁; 큁; 큁; 큁; ) HANGUL SYLLABLE KWILT
+D042;D042;110F 1171 11B5;D042;110F 1171 11B5; # (큂; 큂; 큂; 큂; 큂; ) HANGUL SYLLABLE KWILP
+D043;D043;110F 1171 11B6;D043;110F 1171 11B6; # (큃; 큃; 큃; 큃; 큃; ) HANGUL SYLLABLE KWILH
+D044;D044;110F 1171 11B7;D044;110F 1171 11B7; # (큄; 큄; 큄; 큄; 큄; ) HANGUL SYLLABLE KWIM
+D045;D045;110F 1171 11B8;D045;110F 1171 11B8; # (큅; 큅; 큅; 큅; 큅; ) HANGUL SYLLABLE KWIB
+D046;D046;110F 1171 11B9;D046;110F 1171 11B9; # (큆; 큆; 큆; 큆; 큆; ) HANGUL SYLLABLE KWIBS
+D047;D047;110F 1171 11BA;D047;110F 1171 11BA; # (큇; 큇; 큇; 큇; 큇; ) HANGUL SYLLABLE KWIS
+D048;D048;110F 1171 11BB;D048;110F 1171 11BB; # (큈; 큈; 큈; 큈; 큈; ) HANGUL SYLLABLE KWISS
+D049;D049;110F 1171 11BC;D049;110F 1171 11BC; # (큉; 큉; 큉; 큉; 큉; ) HANGUL SYLLABLE KWING
+D04A;D04A;110F 1171 11BD;D04A;110F 1171 11BD; # (큊; 큊; 큊; 큊; 큊; ) HANGUL SYLLABLE KWIJ
+D04B;D04B;110F 1171 11BE;D04B;110F 1171 11BE; # (큋; 큋; 큋; 큋; 큋; ) HANGUL SYLLABLE KWIC
+D04C;D04C;110F 1171 11BF;D04C;110F 1171 11BF; # (큌; 큌; 큌; 큌; 큌; ) HANGUL SYLLABLE KWIK
+D04D;D04D;110F 1171 11C0;D04D;110F 1171 11C0; # (큍; 큍; 큍; 큍; 큍; ) HANGUL SYLLABLE KWIT
+D04E;D04E;110F 1171 11C1;D04E;110F 1171 11C1; # (큎; 큎; 큎; 큎; 큎; ) HANGUL SYLLABLE KWIP
+D04F;D04F;110F 1171 11C2;D04F;110F 1171 11C2; # (큏; 큏; 큏; 큏; 큏; ) HANGUL SYLLABLE KWIH
+D050;D050;110F 1172;D050;110F 1172; # (큐; 큐; 큐; 큐; 큐; ) HANGUL SYLLABLE KYU
+D051;D051;110F 1172 11A8;D051;110F 1172 11A8; # (큑; 큑; 큑; 큑; 큑; ) HANGUL SYLLABLE KYUG
+D052;D052;110F 1172 11A9;D052;110F 1172 11A9; # (큒; 큒; 큒; 큒; 큒; ) HANGUL SYLLABLE KYUGG
+D053;D053;110F 1172 11AA;D053;110F 1172 11AA; # (큓; 큓; 큓; 큓; 큓; ) HANGUL SYLLABLE KYUGS
+D054;D054;110F 1172 11AB;D054;110F 1172 11AB; # (큔; 큔; 큔; 큔; 큔; ) HANGUL SYLLABLE KYUN
+D055;D055;110F 1172 11AC;D055;110F 1172 11AC; # (큕; 큕; 큕; 큕; 큕; ) HANGUL SYLLABLE KYUNJ
+D056;D056;110F 1172 11AD;D056;110F 1172 11AD; # (큖; 큖; 큖; 큖; 큖; ) HANGUL SYLLABLE KYUNH
+D057;D057;110F 1172 11AE;D057;110F 1172 11AE; # (큗; 큗; 큗; 큗; 큗; ) HANGUL SYLLABLE KYUD
+D058;D058;110F 1172 11AF;D058;110F 1172 11AF; # (큘; 큘; 큘; 큘; 큘; ) HANGUL SYLLABLE KYUL
+D059;D059;110F 1172 11B0;D059;110F 1172 11B0; # (큙; 큙; 큙; 큙; 큙; ) HANGUL SYLLABLE KYULG
+D05A;D05A;110F 1172 11B1;D05A;110F 1172 11B1; # (큚; 큚; 큚; 큚; 큚; ) HANGUL SYLLABLE KYULM
+D05B;D05B;110F 1172 11B2;D05B;110F 1172 11B2; # (큛; 큛; 큛; 큛; 큛; ) HANGUL SYLLABLE KYULB
+D05C;D05C;110F 1172 11B3;D05C;110F 1172 11B3; # (큜; 큜; 큜; 큜; 큜; ) HANGUL SYLLABLE KYULS
+D05D;D05D;110F 1172 11B4;D05D;110F 1172 11B4; # (큝; 큝; 큝; 큝; 큝; ) HANGUL SYLLABLE KYULT
+D05E;D05E;110F 1172 11B5;D05E;110F 1172 11B5; # (큞; 큞; 큞; 큞; 큞; ) HANGUL SYLLABLE KYULP
+D05F;D05F;110F 1172 11B6;D05F;110F 1172 11B6; # (큟; 큟; 큟; 큟; 큟; ) HANGUL SYLLABLE KYULH
+D060;D060;110F 1172 11B7;D060;110F 1172 11B7; # (큠; 큠; 큠; 큠; 큠; ) HANGUL SYLLABLE KYUM
+D061;D061;110F 1172 11B8;D061;110F 1172 11B8; # (큡; 큡; 큡; 큡; 큡; ) HANGUL SYLLABLE KYUB
+D062;D062;110F 1172 11B9;D062;110F 1172 11B9; # (큢; 큢; 큢; 큢; 큢; ) HANGUL SYLLABLE KYUBS
+D063;D063;110F 1172 11BA;D063;110F 1172 11BA; # (큣; 큣; 큣; 큣; 큣; ) HANGUL SYLLABLE KYUS
+D064;D064;110F 1172 11BB;D064;110F 1172 11BB; # (큤; 큤; 큤; 큤; 큤; ) HANGUL SYLLABLE KYUSS
+D065;D065;110F 1172 11BC;D065;110F 1172 11BC; # (큥; 큥; 큥; 큥; 큥; ) HANGUL SYLLABLE KYUNG
+D066;D066;110F 1172 11BD;D066;110F 1172 11BD; # (큦; 큦; 큦; 큦; 큦; ) HANGUL SYLLABLE KYUJ
+D067;D067;110F 1172 11BE;D067;110F 1172 11BE; # (큧; 큧; 큧; 큧; 큧; ) HANGUL SYLLABLE KYUC
+D068;D068;110F 1172 11BF;D068;110F 1172 11BF; # (큨; 큨; 큨; 큨; 큨; ) HANGUL SYLLABLE KYUK
+D069;D069;110F 1172 11C0;D069;110F 1172 11C0; # (큩; 큩; 큩; 큩; 큩; ) HANGUL SYLLABLE KYUT
+D06A;D06A;110F 1172 11C1;D06A;110F 1172 11C1; # (큪; 큪; 큪; 큪; 큪; ) HANGUL SYLLABLE KYUP
+D06B;D06B;110F 1172 11C2;D06B;110F 1172 11C2; # (큫; 큫; 큫; 큫; 큫; ) HANGUL SYLLABLE KYUH
+D06C;D06C;110F 1173;D06C;110F 1173; # (크; 크; 크; 크; 크; ) HANGUL SYLLABLE KEU
+D06D;D06D;110F 1173 11A8;D06D;110F 1173 11A8; # (큭; 큭; 큭; 큭; 큭; ) HANGUL SYLLABLE KEUG
+D06E;D06E;110F 1173 11A9;D06E;110F 1173 11A9; # (큮; 큮; 큮; 큮; 큮; ) HANGUL SYLLABLE KEUGG
+D06F;D06F;110F 1173 11AA;D06F;110F 1173 11AA; # (큯; 큯; 큯; 큯; 큯; ) HANGUL SYLLABLE KEUGS
+D070;D070;110F 1173 11AB;D070;110F 1173 11AB; # (큰; 큰; 큰; 큰; 큰; ) HANGUL SYLLABLE KEUN
+D071;D071;110F 1173 11AC;D071;110F 1173 11AC; # (큱; 큱; 큱; 큱; 큱; ) HANGUL SYLLABLE KEUNJ
+D072;D072;110F 1173 11AD;D072;110F 1173 11AD; # (큲; 큲; 큲; 큲; 큲; ) HANGUL SYLLABLE KEUNH
+D073;D073;110F 1173 11AE;D073;110F 1173 11AE; # (큳; 큳; 큳; 큳; 큳; ) HANGUL SYLLABLE KEUD
+D074;D074;110F 1173 11AF;D074;110F 1173 11AF; # (클; 클; 클; 클; 클; ) HANGUL SYLLABLE KEUL
+D075;D075;110F 1173 11B0;D075;110F 1173 11B0; # (큵; 큵; 큵; 큵; 큵; ) HANGUL SYLLABLE KEULG
+D076;D076;110F 1173 11B1;D076;110F 1173 11B1; # (큶; 큶; 큶; 큶; 큶; ) HANGUL SYLLABLE KEULM
+D077;D077;110F 1173 11B2;D077;110F 1173 11B2; # (큷; 큷; 큷; 큷; 큷; ) HANGUL SYLLABLE KEULB
+D078;D078;110F 1173 11B3;D078;110F 1173 11B3; # (큸; 큸; 큸; 큸; 큸; ) HANGUL SYLLABLE KEULS
+D079;D079;110F 1173 11B4;D079;110F 1173 11B4; # (큹; 큹; 큹; 큹; 큹; ) HANGUL SYLLABLE KEULT
+D07A;D07A;110F 1173 11B5;D07A;110F 1173 11B5; # (큺; 큺; 큺; 큺; 큺; ) HANGUL SYLLABLE KEULP
+D07B;D07B;110F 1173 11B6;D07B;110F 1173 11B6; # (큻; 큻; 큻; 큻; 큻; ) HANGUL SYLLABLE KEULH
+D07C;D07C;110F 1173 11B7;D07C;110F 1173 11B7; # (큼; 큼; 큼; 큼; 큼; ) HANGUL SYLLABLE KEUM
+D07D;D07D;110F 1173 11B8;D07D;110F 1173 11B8; # (큽; 큽; 큽; 큽; 큽; ) HANGUL SYLLABLE KEUB
+D07E;D07E;110F 1173 11B9;D07E;110F 1173 11B9; # (큾; 큾; 큾; 큾; 큾; ) HANGUL SYLLABLE KEUBS
+D07F;D07F;110F 1173 11BA;D07F;110F 1173 11BA; # (큿; 큿; 큿; 큿; 큿; ) HANGUL SYLLABLE KEUS
+D080;D080;110F 1173 11BB;D080;110F 1173 11BB; # (킀; 킀; 킀; 킀; 킀; ) HANGUL SYLLABLE KEUSS
+D081;D081;110F 1173 11BC;D081;110F 1173 11BC; # (킁; 킁; 킁; 킁; 킁; ) HANGUL SYLLABLE KEUNG
+D082;D082;110F 1173 11BD;D082;110F 1173 11BD; # (킂; 킂; 킂; 킂; 킂; ) HANGUL SYLLABLE KEUJ
+D083;D083;110F 1173 11BE;D083;110F 1173 11BE; # (킃; 킃; 킃; 킃; 킃; ) HANGUL SYLLABLE KEUC
+D084;D084;110F 1173 11BF;D084;110F 1173 11BF; # (킄; 킄; 킄; 킄; 킄; ) HANGUL SYLLABLE KEUK
+D085;D085;110F 1173 11C0;D085;110F 1173 11C0; # (킅; 킅; 킅; 킅; 킅; ) HANGUL SYLLABLE KEUT
+D086;D086;110F 1173 11C1;D086;110F 1173 11C1; # (킆; 킆; 킆; 킆; 킆; ) HANGUL SYLLABLE KEUP
+D087;D087;110F 1173 11C2;D087;110F 1173 11C2; # (킇; 킇; 킇; 킇; 킇; ) HANGUL SYLLABLE KEUH
+D088;D088;110F 1174;D088;110F 1174; # (킈; 킈; 킈; 킈; 킈; ) HANGUL SYLLABLE KYI
+D089;D089;110F 1174 11A8;D089;110F 1174 11A8; # (킉; 킉; 킉; 킉; 킉; ) HANGUL SYLLABLE KYIG
+D08A;D08A;110F 1174 11A9;D08A;110F 1174 11A9; # (킊; 킊; 킊; 킊; 킊; ) HANGUL SYLLABLE KYIGG
+D08B;D08B;110F 1174 11AA;D08B;110F 1174 11AA; # (킋; 킋; 킋; 킋; 킋; ) HANGUL SYLLABLE KYIGS
+D08C;D08C;110F 1174 11AB;D08C;110F 1174 11AB; # (킌; 킌; 킌; 킌; 킌; ) HANGUL SYLLABLE KYIN
+D08D;D08D;110F 1174 11AC;D08D;110F 1174 11AC; # (킍; 킍; 킍; 킍; 킍; ) HANGUL SYLLABLE KYINJ
+D08E;D08E;110F 1174 11AD;D08E;110F 1174 11AD; # (킎; 킎; 킎; 킎; 킎; ) HANGUL SYLLABLE KYINH
+D08F;D08F;110F 1174 11AE;D08F;110F 1174 11AE; # (킏; 킏; 킏; 킏; 킏; ) HANGUL SYLLABLE KYID
+D090;D090;110F 1174 11AF;D090;110F 1174 11AF; # (킐; 킐; 킐; 킐; 킐; ) HANGUL SYLLABLE KYIL
+D091;D091;110F 1174 11B0;D091;110F 1174 11B0; # (킑; 킑; 킑; 킑; 킑; ) HANGUL SYLLABLE KYILG
+D092;D092;110F 1174 11B1;D092;110F 1174 11B1; # (킒; 킒; 킒; 킒; 킒; ) HANGUL SYLLABLE KYILM
+D093;D093;110F 1174 11B2;D093;110F 1174 11B2; # (킓; 킓; 킓; 킓; 킓; ) HANGUL SYLLABLE KYILB
+D094;D094;110F 1174 11B3;D094;110F 1174 11B3; # (킔; 킔; 킔; 킔; 킔; ) HANGUL SYLLABLE KYILS
+D095;D095;110F 1174 11B4;D095;110F 1174 11B4; # (킕; 킕; 킕; 킕; 킕; ) HANGUL SYLLABLE KYILT
+D096;D096;110F 1174 11B5;D096;110F 1174 11B5; # (킖; 킖; 킖; 킖; 킖; ) HANGUL SYLLABLE KYILP
+D097;D097;110F 1174 11B6;D097;110F 1174 11B6; # (킗; 킗; 킗; 킗; 킗; ) HANGUL SYLLABLE KYILH
+D098;D098;110F 1174 11B7;D098;110F 1174 11B7; # (킘; 킘; 킘; 킘; 킘; ) HANGUL SYLLABLE KYIM
+D099;D099;110F 1174 11B8;D099;110F 1174 11B8; # (킙; 킙; 킙; 킙; 킙; ) HANGUL SYLLABLE KYIB
+D09A;D09A;110F 1174 11B9;D09A;110F 1174 11B9; # (킚; 킚; 킚; 킚; 킚; ) HANGUL SYLLABLE KYIBS
+D09B;D09B;110F 1174 11BA;D09B;110F 1174 11BA; # (킛; 킛; 킛; 킛; 킛; ) HANGUL SYLLABLE KYIS
+D09C;D09C;110F 1174 11BB;D09C;110F 1174 11BB; # (킜; 킜; 킜; 킜; 킜; ) HANGUL SYLLABLE KYISS
+D09D;D09D;110F 1174 11BC;D09D;110F 1174 11BC; # (킝; 킝; 킝; 킝; 킝; ) HANGUL SYLLABLE KYING
+D09E;D09E;110F 1174 11BD;D09E;110F 1174 11BD; # (킞; 킞; 킞; 킞; 킞; ) HANGUL SYLLABLE KYIJ
+D09F;D09F;110F 1174 11BE;D09F;110F 1174 11BE; # (킟; 킟; 킟; 킟; 킟; ) HANGUL SYLLABLE KYIC
+D0A0;D0A0;110F 1174 11BF;D0A0;110F 1174 11BF; # (킠; 킠; 킠; 킠; 킠; ) HANGUL SYLLABLE KYIK
+D0A1;D0A1;110F 1174 11C0;D0A1;110F 1174 11C0; # (킡; 킡; 킡; 킡; 킡; ) HANGUL SYLLABLE KYIT
+D0A2;D0A2;110F 1174 11C1;D0A2;110F 1174 11C1; # (킢; 킢; 킢; 킢; 킢; ) HANGUL SYLLABLE KYIP
+D0A3;D0A3;110F 1174 11C2;D0A3;110F 1174 11C2; # (킣; 킣; 킣; 킣; 킣; ) HANGUL SYLLABLE KYIH
+D0A4;D0A4;110F 1175;D0A4;110F 1175; # (키; 키; 키; 키; 키; ) HANGUL SYLLABLE KI
+D0A5;D0A5;110F 1175 11A8;D0A5;110F 1175 11A8; # (킥; 킥; 킥; 킥; 킥; ) HANGUL SYLLABLE KIG
+D0A6;D0A6;110F 1175 11A9;D0A6;110F 1175 11A9; # (킦; 킦; 킦; 킦; 킦; ) HANGUL SYLLABLE KIGG
+D0A7;D0A7;110F 1175 11AA;D0A7;110F 1175 11AA; # (킧; 킧; 킧; 킧; 킧; ) HANGUL SYLLABLE KIGS
+D0A8;D0A8;110F 1175 11AB;D0A8;110F 1175 11AB; # (킨; 킨; 킨; 킨; 킨; ) HANGUL SYLLABLE KIN
+D0A9;D0A9;110F 1175 11AC;D0A9;110F 1175 11AC; # (킩; 킩; 킩; 킩; 킩; ) HANGUL SYLLABLE KINJ
+D0AA;D0AA;110F 1175 11AD;D0AA;110F 1175 11AD; # (킪; 킪; 킪; 킪; 킪; ) HANGUL SYLLABLE KINH
+D0AB;D0AB;110F 1175 11AE;D0AB;110F 1175 11AE; # (킫; 킫; 킫; 킫; 킫; ) HANGUL SYLLABLE KID
+D0AC;D0AC;110F 1175 11AF;D0AC;110F 1175 11AF; # (킬; 킬; 킬; 킬; 킬; ) HANGUL SYLLABLE KIL
+D0AD;D0AD;110F 1175 11B0;D0AD;110F 1175 11B0; # (킭; 킭; 킭; 킭; 킭; ) HANGUL SYLLABLE KILG
+D0AE;D0AE;110F 1175 11B1;D0AE;110F 1175 11B1; # (킮; 킮; 킮; 킮; 킮; ) HANGUL SYLLABLE KILM
+D0AF;D0AF;110F 1175 11B2;D0AF;110F 1175 11B2; # (킯; 킯; 킯; 킯; 킯; ) HANGUL SYLLABLE KILB
+D0B0;D0B0;110F 1175 11B3;D0B0;110F 1175 11B3; # (킰; 킰; 킰; 킰; 킰; ) HANGUL SYLLABLE KILS
+D0B1;D0B1;110F 1175 11B4;D0B1;110F 1175 11B4; # (킱; 킱; 킱; 킱; 킱; ) HANGUL SYLLABLE KILT
+D0B2;D0B2;110F 1175 11B5;D0B2;110F 1175 11B5; # (킲; 킲; 킲; 킲; 킲; ) HANGUL SYLLABLE KILP
+D0B3;D0B3;110F 1175 11B6;D0B3;110F 1175 11B6; # (킳; 킳; 킳; 킳; 킳; ) HANGUL SYLLABLE KILH
+D0B4;D0B4;110F 1175 11B7;D0B4;110F 1175 11B7; # (킴; 킴; 킴; 킴; 킴; ) HANGUL SYLLABLE KIM
+D0B5;D0B5;110F 1175 11B8;D0B5;110F 1175 11B8; # (킵; 킵; 킵; 킵; 킵; ) HANGUL SYLLABLE KIB
+D0B6;D0B6;110F 1175 11B9;D0B6;110F 1175 11B9; # (킶; 킶; 킶; 킶; 킶; ) HANGUL SYLLABLE KIBS
+D0B7;D0B7;110F 1175 11BA;D0B7;110F 1175 11BA; # (킷; 킷; 킷; 킷; 킷; ) HANGUL SYLLABLE KIS
+D0B8;D0B8;110F 1175 11BB;D0B8;110F 1175 11BB; # (킸; 킸; 킸; 킸; 킸; ) HANGUL SYLLABLE KISS
+D0B9;D0B9;110F 1175 11BC;D0B9;110F 1175 11BC; # (킹; 킹; 킹; 킹; 킹; ) HANGUL SYLLABLE KING
+D0BA;D0BA;110F 1175 11BD;D0BA;110F 1175 11BD; # (킺; 킺; 킺; 킺; 킺; ) HANGUL SYLLABLE KIJ
+D0BB;D0BB;110F 1175 11BE;D0BB;110F 1175 11BE; # (킻; 킻; 킻; 킻; 킻; ) HANGUL SYLLABLE KIC
+D0BC;D0BC;110F 1175 11BF;D0BC;110F 1175 11BF; # (킼; 킼; 킼; 킼; 킼; ) HANGUL SYLLABLE KIK
+D0BD;D0BD;110F 1175 11C0;D0BD;110F 1175 11C0; # (킽; 킽; 킽; 킽; 킽; ) HANGUL SYLLABLE KIT
+D0BE;D0BE;110F 1175 11C1;D0BE;110F 1175 11C1; # (킾; 킾; 킾; 킾; 킾; ) HANGUL SYLLABLE KIP
+D0BF;D0BF;110F 1175 11C2;D0BF;110F 1175 11C2; # (킿; 킿; 킿; 킿; 킿; ) HANGUL SYLLABLE KIH
+D0C0;D0C0;1110 1161;D0C0;1110 1161; # (타; 타; 타; 타; 타; ) HANGUL SYLLABLE TA
+D0C1;D0C1;1110 1161 11A8;D0C1;1110 1161 11A8; # (탁; 탁; 탁; 탁; 탁; ) HANGUL SYLLABLE TAG
+D0C2;D0C2;1110 1161 11A9;D0C2;1110 1161 11A9; # (탂; 탂; 탂; 탂; 탂; ) HANGUL SYLLABLE TAGG
+D0C3;D0C3;1110 1161 11AA;D0C3;1110 1161 11AA; # (탃; 탃; 탃; 탃; 탃; ) HANGUL SYLLABLE TAGS
+D0C4;D0C4;1110 1161 11AB;D0C4;1110 1161 11AB; # (탄; 탄; 탄; 탄; 탄; ) HANGUL SYLLABLE TAN
+D0C5;D0C5;1110 1161 11AC;D0C5;1110 1161 11AC; # (탅; 탅; 탅; 탅; 탅; ) HANGUL SYLLABLE TANJ
+D0C6;D0C6;1110 1161 11AD;D0C6;1110 1161 11AD; # (탆; 탆; 탆; 탆; 탆; ) HANGUL SYLLABLE TANH
+D0C7;D0C7;1110 1161 11AE;D0C7;1110 1161 11AE; # (탇; 탇; 탇; 탇; 탇; ) HANGUL SYLLABLE TAD
+D0C8;D0C8;1110 1161 11AF;D0C8;1110 1161 11AF; # (탈; 탈; 탈; 탈; 탈; ) HANGUL SYLLABLE TAL
+D0C9;D0C9;1110 1161 11B0;D0C9;1110 1161 11B0; # (탉; 탉; 탉; 탉; 탉; ) HANGUL SYLLABLE TALG
+D0CA;D0CA;1110 1161 11B1;D0CA;1110 1161 11B1; # (탊; 탊; 탊; 탊; 탊; ) HANGUL SYLLABLE TALM
+D0CB;D0CB;1110 1161 11B2;D0CB;1110 1161 11B2; # (탋; 탋; 탋; 탋; 탋; ) HANGUL SYLLABLE TALB
+D0CC;D0CC;1110 1161 11B3;D0CC;1110 1161 11B3; # (탌; 탌; 탌; 탌; 탌; ) HANGUL SYLLABLE TALS
+D0CD;D0CD;1110 1161 11B4;D0CD;1110 1161 11B4; # (탍; 탍; 탍; 탍; 탍; ) HANGUL SYLLABLE TALT
+D0CE;D0CE;1110 1161 11B5;D0CE;1110 1161 11B5; # (탎; 탎; 탎; 탎; 탎; ) HANGUL SYLLABLE TALP
+D0CF;D0CF;1110 1161 11B6;D0CF;1110 1161 11B6; # (탏; 탏; 탏; 탏; 탏; ) HANGUL SYLLABLE TALH
+D0D0;D0D0;1110 1161 11B7;D0D0;1110 1161 11B7; # (탐; 탐; 탐; 탐; 탐; ) HANGUL SYLLABLE TAM
+D0D1;D0D1;1110 1161 11B8;D0D1;1110 1161 11B8; # (탑; 탑; 탑; 탑; 탑; ) HANGUL SYLLABLE TAB
+D0D2;D0D2;1110 1161 11B9;D0D2;1110 1161 11B9; # (탒; 탒; 탒; 탒; 탒; ) HANGUL SYLLABLE TABS
+D0D3;D0D3;1110 1161 11BA;D0D3;1110 1161 11BA; # (탓; 탓; 탓; 탓; 탓; ) HANGUL SYLLABLE TAS
+D0D4;D0D4;1110 1161 11BB;D0D4;1110 1161 11BB; # (탔; 탔; 탔; 탔; 탔; ) HANGUL SYLLABLE TASS
+D0D5;D0D5;1110 1161 11BC;D0D5;1110 1161 11BC; # (탕; 탕; 탕; 탕; 탕; ) HANGUL SYLLABLE TANG
+D0D6;D0D6;1110 1161 11BD;D0D6;1110 1161 11BD; # (탖; 탖; 탖; 탖; 탖; ) HANGUL SYLLABLE TAJ
+D0D7;D0D7;1110 1161 11BE;D0D7;1110 1161 11BE; # (탗; 탗; 탗; 탗; 탗; ) HANGUL SYLLABLE TAC
+D0D8;D0D8;1110 1161 11BF;D0D8;1110 1161 11BF; # (탘; 탘; 탘; 탘; 탘; ) HANGUL SYLLABLE TAK
+D0D9;D0D9;1110 1161 11C0;D0D9;1110 1161 11C0; # (탙; 탙; 탙; 탙; 탙; ) HANGUL SYLLABLE TAT
+D0DA;D0DA;1110 1161 11C1;D0DA;1110 1161 11C1; # (탚; 탚; 탚; 탚; 탚; ) HANGUL SYLLABLE TAP
+D0DB;D0DB;1110 1161 11C2;D0DB;1110 1161 11C2; # (탛; 탛; 탛; 탛; 탛; ) HANGUL SYLLABLE TAH
+D0DC;D0DC;1110 1162;D0DC;1110 1162; # (태; 태; 태; 태; 태; ) HANGUL SYLLABLE TAE
+D0DD;D0DD;1110 1162 11A8;D0DD;1110 1162 11A8; # (택; 택; 택; 택; 택; ) HANGUL SYLLABLE TAEG
+D0DE;D0DE;1110 1162 11A9;D0DE;1110 1162 11A9; # (탞; 탞; 탞; 탞; 탞; ) HANGUL SYLLABLE TAEGG
+D0DF;D0DF;1110 1162 11AA;D0DF;1110 1162 11AA; # (탟; 탟; 탟; 탟; 탟; ) HANGUL SYLLABLE TAEGS
+D0E0;D0E0;1110 1162 11AB;D0E0;1110 1162 11AB; # (탠; 탠; 탠; 탠; 탠; ) HANGUL SYLLABLE TAEN
+D0E1;D0E1;1110 1162 11AC;D0E1;1110 1162 11AC; # (탡; 탡; 탡; 탡; 탡; ) HANGUL SYLLABLE TAENJ
+D0E2;D0E2;1110 1162 11AD;D0E2;1110 1162 11AD; # (탢; 탢; 탢; 탢; 탢; ) HANGUL SYLLABLE TAENH
+D0E3;D0E3;1110 1162 11AE;D0E3;1110 1162 11AE; # (탣; 탣; 탣; 탣; 탣; ) HANGUL SYLLABLE TAED
+D0E4;D0E4;1110 1162 11AF;D0E4;1110 1162 11AF; # (탤; 탤; 탤; 탤; 탤; ) HANGUL SYLLABLE TAEL
+D0E5;D0E5;1110 1162 11B0;D0E5;1110 1162 11B0; # (탥; 탥; 탥; 탥; 탥; ) HANGUL SYLLABLE TAELG
+D0E6;D0E6;1110 1162 11B1;D0E6;1110 1162 11B1; # (탦; 탦; 탦; 탦; 탦; ) HANGUL SYLLABLE TAELM
+D0E7;D0E7;1110 1162 11B2;D0E7;1110 1162 11B2; # (탧; 탧; 탧; 탧; 탧; ) HANGUL SYLLABLE TAELB
+D0E8;D0E8;1110 1162 11B3;D0E8;1110 1162 11B3; # (탨; 탨; 탨; 탨; 탨; ) HANGUL SYLLABLE TAELS
+D0E9;D0E9;1110 1162 11B4;D0E9;1110 1162 11B4; # (탩; 탩; 탩; 탩; 탩; ) HANGUL SYLLABLE TAELT
+D0EA;D0EA;1110 1162 11B5;D0EA;1110 1162 11B5; # (탪; 탪; 탪; 탪; 탪; ) HANGUL SYLLABLE TAELP
+D0EB;D0EB;1110 1162 11B6;D0EB;1110 1162 11B6; # (탫; 탫; 탫; 탫; 탫; ) HANGUL SYLLABLE TAELH
+D0EC;D0EC;1110 1162 11B7;D0EC;1110 1162 11B7; # (탬; 탬; 탬; 탬; 탬; ) HANGUL SYLLABLE TAEM
+D0ED;D0ED;1110 1162 11B8;D0ED;1110 1162 11B8; # (탭; 탭; 탭; 탭; 탭; ) HANGUL SYLLABLE TAEB
+D0EE;D0EE;1110 1162 11B9;D0EE;1110 1162 11B9; # (탮; 탮; 탮; 탮; 탮; ) HANGUL SYLLABLE TAEBS
+D0EF;D0EF;1110 1162 11BA;D0EF;1110 1162 11BA; # (탯; 탯; 탯; 탯; 탯; ) HANGUL SYLLABLE TAES
+D0F0;D0F0;1110 1162 11BB;D0F0;1110 1162 11BB; # (탰; 탰; 탰; 탰; 탰; ) HANGUL SYLLABLE TAESS
+D0F1;D0F1;1110 1162 11BC;D0F1;1110 1162 11BC; # (탱; 탱; 탱; 탱; 탱; ) HANGUL SYLLABLE TAENG
+D0F2;D0F2;1110 1162 11BD;D0F2;1110 1162 11BD; # (탲; 탲; 탲; 탲; 탲; ) HANGUL SYLLABLE TAEJ
+D0F3;D0F3;1110 1162 11BE;D0F3;1110 1162 11BE; # (탳; 탳; 탳; 탳; 탳; ) HANGUL SYLLABLE TAEC
+D0F4;D0F4;1110 1162 11BF;D0F4;1110 1162 11BF; # (탴; 탴; 탴; 탴; 탴; ) HANGUL SYLLABLE TAEK
+D0F5;D0F5;1110 1162 11C0;D0F5;1110 1162 11C0; # (탵; 탵; 탵; 탵; 탵; ) HANGUL SYLLABLE TAET
+D0F6;D0F6;1110 1162 11C1;D0F6;1110 1162 11C1; # (탶; 탶; 탶; 탶; 탶; ) HANGUL SYLLABLE TAEP
+D0F7;D0F7;1110 1162 11C2;D0F7;1110 1162 11C2; # (탷; 탷; 탷; 탷; 탷; ) HANGUL SYLLABLE TAEH
+D0F8;D0F8;1110 1163;D0F8;1110 1163; # (탸; 탸; 탸; 탸; 탸; ) HANGUL SYLLABLE TYA
+D0F9;D0F9;1110 1163 11A8;D0F9;1110 1163 11A8; # (탹; 탹; 탹; 탹; 탹; ) HANGUL SYLLABLE TYAG
+D0FA;D0FA;1110 1163 11A9;D0FA;1110 1163 11A9; # (탺; 탺; 탺; 탺; 탺; ) HANGUL SYLLABLE TYAGG
+D0FB;D0FB;1110 1163 11AA;D0FB;1110 1163 11AA; # (탻; 탻; 탻; 탻; 탻; ) HANGUL SYLLABLE TYAGS
+D0FC;D0FC;1110 1163 11AB;D0FC;1110 1163 11AB; # (탼; 탼; 탼; 탼; 탼; ) HANGUL SYLLABLE TYAN
+D0FD;D0FD;1110 1163 11AC;D0FD;1110 1163 11AC; # (탽; 탽; 탽; 탽; 탽; ) HANGUL SYLLABLE TYANJ
+D0FE;D0FE;1110 1163 11AD;D0FE;1110 1163 11AD; # (탾; 탾; 탾; 탾; 탾; ) HANGUL SYLLABLE TYANH
+D0FF;D0FF;1110 1163 11AE;D0FF;1110 1163 11AE; # (탿; 탿; 탿; 탿; 탿; ) HANGUL SYLLABLE TYAD
+D100;D100;1110 1163 11AF;D100;1110 1163 11AF; # (턀; 턀; 턀; 턀; 턀; ) HANGUL SYLLABLE TYAL
+D101;D101;1110 1163 11B0;D101;1110 1163 11B0; # (턁; 턁; 턁; 턁; 턁; ) HANGUL SYLLABLE TYALG
+D102;D102;1110 1163 11B1;D102;1110 1163 11B1; # (턂; 턂; 턂; 턂; 턂; ) HANGUL SYLLABLE TYALM
+D103;D103;1110 1163 11B2;D103;1110 1163 11B2; # (턃; 턃; 턃; 턃; 턃; ) HANGUL SYLLABLE TYALB
+D104;D104;1110 1163 11B3;D104;1110 1163 11B3; # (턄; 턄; 턄; 턄; 턄; ) HANGUL SYLLABLE TYALS
+D105;D105;1110 1163 11B4;D105;1110 1163 11B4; # (턅; 턅; 턅; 턅; 턅; ) HANGUL SYLLABLE TYALT
+D106;D106;1110 1163 11B5;D106;1110 1163 11B5; # (턆; 턆; 턆; 턆; 턆; ) HANGUL SYLLABLE TYALP
+D107;D107;1110 1163 11B6;D107;1110 1163 11B6; # (턇; 턇; 턇; 턇; 턇; ) HANGUL SYLLABLE TYALH
+D108;D108;1110 1163 11B7;D108;1110 1163 11B7; # (턈; 턈; 턈; 턈; 턈; ) HANGUL SYLLABLE TYAM
+D109;D109;1110 1163 11B8;D109;1110 1163 11B8; # (턉; 턉; 턉; 턉; 턉; ) HANGUL SYLLABLE TYAB
+D10A;D10A;1110 1163 11B9;D10A;1110 1163 11B9; # (턊; 턊; 턊; 턊; 턊; ) HANGUL SYLLABLE TYABS
+D10B;D10B;1110 1163 11BA;D10B;1110 1163 11BA; # (턋; 턋; 턋; 턋; 턋; ) HANGUL SYLLABLE TYAS
+D10C;D10C;1110 1163 11BB;D10C;1110 1163 11BB; # (턌; 턌; 턌; 턌; 턌; ) HANGUL SYLLABLE TYASS
+D10D;D10D;1110 1163 11BC;D10D;1110 1163 11BC; # (턍; 턍; 턍; 턍; 턍; ) HANGUL SYLLABLE TYANG
+D10E;D10E;1110 1163 11BD;D10E;1110 1163 11BD; # (턎; 턎; 턎; 턎; 턎; ) HANGUL SYLLABLE TYAJ
+D10F;D10F;1110 1163 11BE;D10F;1110 1163 11BE; # (턏; 턏; 턏; 턏; 턏; ) HANGUL SYLLABLE TYAC
+D110;D110;1110 1163 11BF;D110;1110 1163 11BF; # (턐; 턐; 턐; 턐; 턐; ) HANGUL SYLLABLE TYAK
+D111;D111;1110 1163 11C0;D111;1110 1163 11C0; # (턑; 턑; 턑; 턑; 턑; ) HANGUL SYLLABLE TYAT
+D112;D112;1110 1163 11C1;D112;1110 1163 11C1; # (턒; 턒; 턒; 턒; 턒; ) HANGUL SYLLABLE TYAP
+D113;D113;1110 1163 11C2;D113;1110 1163 11C2; # (턓; 턓; 턓; 턓; 턓; ) HANGUL SYLLABLE TYAH
+D114;D114;1110 1164;D114;1110 1164; # (턔; 턔; 턔; 턔; 턔; ) HANGUL SYLLABLE TYAE
+D115;D115;1110 1164 11A8;D115;1110 1164 11A8; # (턕; 턕; 턕; 턕; 턕; ) HANGUL SYLLABLE TYAEG
+D116;D116;1110 1164 11A9;D116;1110 1164 11A9; # (턖; 턖; 턖; 턖; 턖; ) HANGUL SYLLABLE TYAEGG
+D117;D117;1110 1164 11AA;D117;1110 1164 11AA; # (턗; 턗; 턗; 턗; 턗; ) HANGUL SYLLABLE TYAEGS
+D118;D118;1110 1164 11AB;D118;1110 1164 11AB; # (턘; 턘; 턘; 턘; 턘; ) HANGUL SYLLABLE TYAEN
+D119;D119;1110 1164 11AC;D119;1110 1164 11AC; # (턙; 턙; 턙; 턙; 턙; ) HANGUL SYLLABLE TYAENJ
+D11A;D11A;1110 1164 11AD;D11A;1110 1164 11AD; # (턚; 턚; 턚; 턚; 턚; ) HANGUL SYLLABLE TYAENH
+D11B;D11B;1110 1164 11AE;D11B;1110 1164 11AE; # (턛; 턛; 턛; 턛; 턛; ) HANGUL SYLLABLE TYAED
+D11C;D11C;1110 1164 11AF;D11C;1110 1164 11AF; # (턜; 턜; 턜; 턜; 턜; ) HANGUL SYLLABLE TYAEL
+D11D;D11D;1110 1164 11B0;D11D;1110 1164 11B0; # (턝; 턝; 턝; 턝; 턝; ) HANGUL SYLLABLE TYAELG
+D11E;D11E;1110 1164 11B1;D11E;1110 1164 11B1; # (턞; 턞; 턞; 턞; 턞; ) HANGUL SYLLABLE TYAELM
+D11F;D11F;1110 1164 11B2;D11F;1110 1164 11B2; # (턟; 턟; 턟; 턟; 턟; ) HANGUL SYLLABLE TYAELB
+D120;D120;1110 1164 11B3;D120;1110 1164 11B3; # (턠; 턠; 턠; 턠; 턠; ) HANGUL SYLLABLE TYAELS
+D121;D121;1110 1164 11B4;D121;1110 1164 11B4; # (턡; 턡; 턡; 턡; 턡; ) HANGUL SYLLABLE TYAELT
+D122;D122;1110 1164 11B5;D122;1110 1164 11B5; # (턢; 턢; 턢; 턢; 턢; ) HANGUL SYLLABLE TYAELP
+D123;D123;1110 1164 11B6;D123;1110 1164 11B6; # (턣; 턣; 턣; 턣; 턣; ) HANGUL SYLLABLE TYAELH
+D124;D124;1110 1164 11B7;D124;1110 1164 11B7; # (턤; 턤; 턤; 턤; 턤; ) HANGUL SYLLABLE TYAEM
+D125;D125;1110 1164 11B8;D125;1110 1164 11B8; # (턥; 턥; 턥; 턥; 턥; ) HANGUL SYLLABLE TYAEB
+D126;D126;1110 1164 11B9;D126;1110 1164 11B9; # (턦; 턦; 턦; 턦; 턦; ) HANGUL SYLLABLE TYAEBS
+D127;D127;1110 1164 11BA;D127;1110 1164 11BA; # (턧; 턧; 턧; 턧; 턧; ) HANGUL SYLLABLE TYAES
+D128;D128;1110 1164 11BB;D128;1110 1164 11BB; # (턨; 턨; 턨; 턨; 턨; ) HANGUL SYLLABLE TYAESS
+D129;D129;1110 1164 11BC;D129;1110 1164 11BC; # (턩; 턩; 턩; 턩; 턩; ) HANGUL SYLLABLE TYAENG
+D12A;D12A;1110 1164 11BD;D12A;1110 1164 11BD; # (턪; 턪; 턪; 턪; 턪; ) HANGUL SYLLABLE TYAEJ
+D12B;D12B;1110 1164 11BE;D12B;1110 1164 11BE; # (턫; 턫; 턫; 턫; 턫; ) HANGUL SYLLABLE TYAEC
+D12C;D12C;1110 1164 11BF;D12C;1110 1164 11BF; # (턬; 턬; 턬; 턬; 턬; ) HANGUL SYLLABLE TYAEK
+D12D;D12D;1110 1164 11C0;D12D;1110 1164 11C0; # (턭; 턭; 턭; 턭; 턭; ) HANGUL SYLLABLE TYAET
+D12E;D12E;1110 1164 11C1;D12E;1110 1164 11C1; # (턮; 턮; 턮; 턮; 턮; ) HANGUL SYLLABLE TYAEP
+D12F;D12F;1110 1164 11C2;D12F;1110 1164 11C2; # (턯; 턯; 턯; 턯; 턯; ) HANGUL SYLLABLE TYAEH
+D130;D130;1110 1165;D130;1110 1165; # (터; 터; 터; 터; 터; ) HANGUL SYLLABLE TEO
+D131;D131;1110 1165 11A8;D131;1110 1165 11A8; # (턱; 턱; 턱; 턱; 턱; ) HANGUL SYLLABLE TEOG
+D132;D132;1110 1165 11A9;D132;1110 1165 11A9; # (턲; 턲; 턲; 턲; 턲; ) HANGUL SYLLABLE TEOGG
+D133;D133;1110 1165 11AA;D133;1110 1165 11AA; # (턳; 턳; 턳; 턳; 턳; ) HANGUL SYLLABLE TEOGS
+D134;D134;1110 1165 11AB;D134;1110 1165 11AB; # (턴; 턴; 턴; 턴; 턴; ) HANGUL SYLLABLE TEON
+D135;D135;1110 1165 11AC;D135;1110 1165 11AC; # (턵; 턵; 턵; 턵; 턵; ) HANGUL SYLLABLE TEONJ
+D136;D136;1110 1165 11AD;D136;1110 1165 11AD; # (턶; 턶; 턶; 턶; 턶; ) HANGUL SYLLABLE TEONH
+D137;D137;1110 1165 11AE;D137;1110 1165 11AE; # (턷; 턷; 턷; 턷; 턷; ) HANGUL SYLLABLE TEOD
+D138;D138;1110 1165 11AF;D138;1110 1165 11AF; # (털; 털; 털; 털; 털; ) HANGUL SYLLABLE TEOL
+D139;D139;1110 1165 11B0;D139;1110 1165 11B0; # (턹; 턹; 턹; 턹; 턹; ) HANGUL SYLLABLE TEOLG
+D13A;D13A;1110 1165 11B1;D13A;1110 1165 11B1; # (턺; 턺; 턺; 턺; 턺; ) HANGUL SYLLABLE TEOLM
+D13B;D13B;1110 1165 11B2;D13B;1110 1165 11B2; # (턻; 턻; 턻; 턻; 턻; ) HANGUL SYLLABLE TEOLB
+D13C;D13C;1110 1165 11B3;D13C;1110 1165 11B3; # (턼; 턼; 턼; 턼; 턼; ) HANGUL SYLLABLE TEOLS
+D13D;D13D;1110 1165 11B4;D13D;1110 1165 11B4; # (턽; 턽; 턽; 턽; 턽; ) HANGUL SYLLABLE TEOLT
+D13E;D13E;1110 1165 11B5;D13E;1110 1165 11B5; # (턾; 턾; 턾; 턾; 턾; ) HANGUL SYLLABLE TEOLP
+D13F;D13F;1110 1165 11B6;D13F;1110 1165 11B6; # (턿; 턿; 턿; 턿; 턿; ) HANGUL SYLLABLE TEOLH
+D140;D140;1110 1165 11B7;D140;1110 1165 11B7; # (텀; 텀; 텀; 텀; 텀; ) HANGUL SYLLABLE TEOM
+D141;D141;1110 1165 11B8;D141;1110 1165 11B8; # (텁; 텁; 텁; 텁; 텁; ) HANGUL SYLLABLE TEOB
+D142;D142;1110 1165 11B9;D142;1110 1165 11B9; # (텂; 텂; 텂; 텂; 텂; ) HANGUL SYLLABLE TEOBS
+D143;D143;1110 1165 11BA;D143;1110 1165 11BA; # (텃; 텃; 텃; 텃; 텃; ) HANGUL SYLLABLE TEOS
+D144;D144;1110 1165 11BB;D144;1110 1165 11BB; # (텄; 텄; 텄; 텄; 텄; ) HANGUL SYLLABLE TEOSS
+D145;D145;1110 1165 11BC;D145;1110 1165 11BC; # (텅; 텅; 텅; 텅; 텅; ) HANGUL SYLLABLE TEONG
+D146;D146;1110 1165 11BD;D146;1110 1165 11BD; # (텆; 텆; 텆; 텆; 텆; ) HANGUL SYLLABLE TEOJ
+D147;D147;1110 1165 11BE;D147;1110 1165 11BE; # (텇; 텇; 텇; 텇; 텇; ) HANGUL SYLLABLE TEOC
+D148;D148;1110 1165 11BF;D148;1110 1165 11BF; # (텈; 텈; 텈; 텈; 텈; ) HANGUL SYLLABLE TEOK
+D149;D149;1110 1165 11C0;D149;1110 1165 11C0; # (텉; 텉; 텉; 텉; 텉; ) HANGUL SYLLABLE TEOT
+D14A;D14A;1110 1165 11C1;D14A;1110 1165 11C1; # (텊; 텊; 텊; 텊; 텊; ) HANGUL SYLLABLE TEOP
+D14B;D14B;1110 1165 11C2;D14B;1110 1165 11C2; # (텋; 텋; 텋; 텋; 텋; ) HANGUL SYLLABLE TEOH
+D14C;D14C;1110 1166;D14C;1110 1166; # (테; 테; 테; 테; 테; ) HANGUL SYLLABLE TE
+D14D;D14D;1110 1166 11A8;D14D;1110 1166 11A8; # (텍; 텍; 텍; 텍; 텍; ) HANGUL SYLLABLE TEG
+D14E;D14E;1110 1166 11A9;D14E;1110 1166 11A9; # (텎; 텎; 텎; 텎; 텎; ) HANGUL SYLLABLE TEGG
+D14F;D14F;1110 1166 11AA;D14F;1110 1166 11AA; # (텏; 텏; 텏; 텏; 텏; ) HANGUL SYLLABLE TEGS
+D150;D150;1110 1166 11AB;D150;1110 1166 11AB; # (텐; 텐; 텐; 텐; 텐; ) HANGUL SYLLABLE TEN
+D151;D151;1110 1166 11AC;D151;1110 1166 11AC; # (텑; 텑; 텑; 텑; 텑; ) HANGUL SYLLABLE TENJ
+D152;D152;1110 1166 11AD;D152;1110 1166 11AD; # (텒; 텒; 텒; 텒; 텒; ) HANGUL SYLLABLE TENH
+D153;D153;1110 1166 11AE;D153;1110 1166 11AE; # (텓; 텓; 텓; 텓; 텓; ) HANGUL SYLLABLE TED
+D154;D154;1110 1166 11AF;D154;1110 1166 11AF; # (텔; 텔; 텔; 텔; 텔; ) HANGUL SYLLABLE TEL
+D155;D155;1110 1166 11B0;D155;1110 1166 11B0; # (텕; 텕; 텕; 텕; 텕; ) HANGUL SYLLABLE TELG
+D156;D156;1110 1166 11B1;D156;1110 1166 11B1; # (텖; 텖; 텖; 텖; 텖; ) HANGUL SYLLABLE TELM
+D157;D157;1110 1166 11B2;D157;1110 1166 11B2; # (텗; 텗; 텗; 텗; 텗; ) HANGUL SYLLABLE TELB
+D158;D158;1110 1166 11B3;D158;1110 1166 11B3; # (텘; 텘; 텘; 텘; 텘; ) HANGUL SYLLABLE TELS
+D159;D159;1110 1166 11B4;D159;1110 1166 11B4; # (텙; 텙; 텙; 텙; 텙; ) HANGUL SYLLABLE TELT
+D15A;D15A;1110 1166 11B5;D15A;1110 1166 11B5; # (텚; 텚; 텚; 텚; 텚; ) HANGUL SYLLABLE TELP
+D15B;D15B;1110 1166 11B6;D15B;1110 1166 11B6; # (텛; 텛; 텛; 텛; 텛; ) HANGUL SYLLABLE TELH
+D15C;D15C;1110 1166 11B7;D15C;1110 1166 11B7; # (템; 템; 템; 템; 템; ) HANGUL SYLLABLE TEM
+D15D;D15D;1110 1166 11B8;D15D;1110 1166 11B8; # (텝; 텝; 텝; 텝; 텝; ) HANGUL SYLLABLE TEB
+D15E;D15E;1110 1166 11B9;D15E;1110 1166 11B9; # (텞; 텞; 텞; 텞; 텞; ) HANGUL SYLLABLE TEBS
+D15F;D15F;1110 1166 11BA;D15F;1110 1166 11BA; # (텟; 텟; 텟; 텟; 텟; ) HANGUL SYLLABLE TES
+D160;D160;1110 1166 11BB;D160;1110 1166 11BB; # (텠; 텠; 텠; 텠; 텠; ) HANGUL SYLLABLE TESS
+D161;D161;1110 1166 11BC;D161;1110 1166 11BC; # (텡; 텡; 텡; 텡; 텡; ) HANGUL SYLLABLE TENG
+D162;D162;1110 1166 11BD;D162;1110 1166 11BD; # (텢; 텢; 텢; 텢; 텢; ) HANGUL SYLLABLE TEJ
+D163;D163;1110 1166 11BE;D163;1110 1166 11BE; # (텣; 텣; 텣; 텣; 텣; ) HANGUL SYLLABLE TEC
+D164;D164;1110 1166 11BF;D164;1110 1166 11BF; # (텤; 텤; 텤; 텤; 텤; ) HANGUL SYLLABLE TEK
+D165;D165;1110 1166 11C0;D165;1110 1166 11C0; # (텥; 텥; 텥; 텥; 텥; ) HANGUL SYLLABLE TET
+D166;D166;1110 1166 11C1;D166;1110 1166 11C1; # (텦; 텦; 텦; 텦; 텦; ) HANGUL SYLLABLE TEP
+D167;D167;1110 1166 11C2;D167;1110 1166 11C2; # (텧; 텧; 텧; 텧; 텧; ) HANGUL SYLLABLE TEH
+D168;D168;1110 1167;D168;1110 1167; # (텨; 텨; 텨; 텨; 텨; ) HANGUL SYLLABLE TYEO
+D169;D169;1110 1167 11A8;D169;1110 1167 11A8; # (텩; 텩; 텩; 텩; 텩; ) HANGUL SYLLABLE TYEOG
+D16A;D16A;1110 1167 11A9;D16A;1110 1167 11A9; # (텪; 텪; 텪; 텪; 텪; ) HANGUL SYLLABLE TYEOGG
+D16B;D16B;1110 1167 11AA;D16B;1110 1167 11AA; # (텫; 텫; 텫; 텫; 텫; ) HANGUL SYLLABLE TYEOGS
+D16C;D16C;1110 1167 11AB;D16C;1110 1167 11AB; # (텬; 텬; 텬; 텬; 텬; ) HANGUL SYLLABLE TYEON
+D16D;D16D;1110 1167 11AC;D16D;1110 1167 11AC; # (텭; 텭; 텭; 텭; 텭; ) HANGUL SYLLABLE TYEONJ
+D16E;D16E;1110 1167 11AD;D16E;1110 1167 11AD; # (텮; 텮; 텮; 텮; 텮; ) HANGUL SYLLABLE TYEONH
+D16F;D16F;1110 1167 11AE;D16F;1110 1167 11AE; # (텯; 텯; 텯; 텯; 텯; ) HANGUL SYLLABLE TYEOD
+D170;D170;1110 1167 11AF;D170;1110 1167 11AF; # (텰; 텰; 텰; 텰; 텰; ) HANGUL SYLLABLE TYEOL
+D171;D171;1110 1167 11B0;D171;1110 1167 11B0; # (텱; 텱; 텱; 텱; 텱; ) HANGUL SYLLABLE TYEOLG
+D172;D172;1110 1167 11B1;D172;1110 1167 11B1; # (텲; 텲; 텲; 텲; 텲; ) HANGUL SYLLABLE TYEOLM
+D173;D173;1110 1167 11B2;D173;1110 1167 11B2; # (텳; 텳; 텳; 텳; 텳; ) HANGUL SYLLABLE TYEOLB
+D174;D174;1110 1167 11B3;D174;1110 1167 11B3; # (텴; 텴; 텴; 텴; 텴; ) HANGUL SYLLABLE TYEOLS
+D175;D175;1110 1167 11B4;D175;1110 1167 11B4; # (텵; 텵; 텵; 텵; 텵; ) HANGUL SYLLABLE TYEOLT
+D176;D176;1110 1167 11B5;D176;1110 1167 11B5; # (텶; 텶; 텶; 텶; 텶; ) HANGUL SYLLABLE TYEOLP
+D177;D177;1110 1167 11B6;D177;1110 1167 11B6; # (텷; 텷; 텷; 텷; 텷; ) HANGUL SYLLABLE TYEOLH
+D178;D178;1110 1167 11B7;D178;1110 1167 11B7; # (텸; 텸; 텸; 텸; 텸; ) HANGUL SYLLABLE TYEOM
+D179;D179;1110 1167 11B8;D179;1110 1167 11B8; # (텹; 텹; 텹; 텹; 텹; ) HANGUL SYLLABLE TYEOB
+D17A;D17A;1110 1167 11B9;D17A;1110 1167 11B9; # (텺; 텺; 텺; 텺; 텺; ) HANGUL SYLLABLE TYEOBS
+D17B;D17B;1110 1167 11BA;D17B;1110 1167 11BA; # (텻; 텻; 텻; 텻; 텻; ) HANGUL SYLLABLE TYEOS
+D17C;D17C;1110 1167 11BB;D17C;1110 1167 11BB; # (텼; 텼; 텼; 텼; 텼; ) HANGUL SYLLABLE TYEOSS
+D17D;D17D;1110 1167 11BC;D17D;1110 1167 11BC; # (텽; 텽; 텽; 텽; 텽; ) HANGUL SYLLABLE TYEONG
+D17E;D17E;1110 1167 11BD;D17E;1110 1167 11BD; # (텾; 텾; 텾; 텾; 텾; ) HANGUL SYLLABLE TYEOJ
+D17F;D17F;1110 1167 11BE;D17F;1110 1167 11BE; # (텿; 텿; 텿; 텿; 텿; ) HANGUL SYLLABLE TYEOC
+D180;D180;1110 1167 11BF;D180;1110 1167 11BF; # (톀; 톀; 톀; 톀; 톀; ) HANGUL SYLLABLE TYEOK
+D181;D181;1110 1167 11C0;D181;1110 1167 11C0; # (톁; 톁; 톁; 톁; 톁; ) HANGUL SYLLABLE TYEOT
+D182;D182;1110 1167 11C1;D182;1110 1167 11C1; # (톂; 톂; 톂; 톂; 톂; ) HANGUL SYLLABLE TYEOP
+D183;D183;1110 1167 11C2;D183;1110 1167 11C2; # (톃; 톃; 톃; 톃; 톃; ) HANGUL SYLLABLE TYEOH
+D184;D184;1110 1168;D184;1110 1168; # (톄; 톄; 톄; 톄; 톄; ) HANGUL SYLLABLE TYE
+D185;D185;1110 1168 11A8;D185;1110 1168 11A8; # (톅; 톅; 톅; 톅; 톅; ) HANGUL SYLLABLE TYEG
+D186;D186;1110 1168 11A9;D186;1110 1168 11A9; # (톆; 톆; 톆; 톆; 톆; ) HANGUL SYLLABLE TYEGG
+D187;D187;1110 1168 11AA;D187;1110 1168 11AA; # (톇; 톇; 톇; 톇; 톇; ) HANGUL SYLLABLE TYEGS
+D188;D188;1110 1168 11AB;D188;1110 1168 11AB; # (톈; 톈; 톈; 톈; 톈; ) HANGUL SYLLABLE TYEN
+D189;D189;1110 1168 11AC;D189;1110 1168 11AC; # (톉; 톉; 톉; 톉; 톉; ) HANGUL SYLLABLE TYENJ
+D18A;D18A;1110 1168 11AD;D18A;1110 1168 11AD; # (톊; 톊; 톊; 톊; 톊; ) HANGUL SYLLABLE TYENH
+D18B;D18B;1110 1168 11AE;D18B;1110 1168 11AE; # (톋; 톋; 톋; 톋; 톋; ) HANGUL SYLLABLE TYED
+D18C;D18C;1110 1168 11AF;D18C;1110 1168 11AF; # (톌; 톌; 톌; 톌; 톌; ) HANGUL SYLLABLE TYEL
+D18D;D18D;1110 1168 11B0;D18D;1110 1168 11B0; # (톍; 톍; 톍; 톍; 톍; ) HANGUL SYLLABLE TYELG
+D18E;D18E;1110 1168 11B1;D18E;1110 1168 11B1; # (톎; 톎; 톎; 톎; 톎; ) HANGUL SYLLABLE TYELM
+D18F;D18F;1110 1168 11B2;D18F;1110 1168 11B2; # (톏; 톏; 톏; 톏; 톏; ) HANGUL SYLLABLE TYELB
+D190;D190;1110 1168 11B3;D190;1110 1168 11B3; # (톐; 톐; 톐; 톐; 톐; ) HANGUL SYLLABLE TYELS
+D191;D191;1110 1168 11B4;D191;1110 1168 11B4; # (톑; 톑; 톑; 톑; 톑; ) HANGUL SYLLABLE TYELT
+D192;D192;1110 1168 11B5;D192;1110 1168 11B5; # (톒; 톒; 톒; 톒; 톒; ) HANGUL SYLLABLE TYELP
+D193;D193;1110 1168 11B6;D193;1110 1168 11B6; # (톓; 톓; 톓; 톓; 톓; ) HANGUL SYLLABLE TYELH
+D194;D194;1110 1168 11B7;D194;1110 1168 11B7; # (톔; 톔; 톔; 톔; 톔; ) HANGUL SYLLABLE TYEM
+D195;D195;1110 1168 11B8;D195;1110 1168 11B8; # (톕; 톕; 톕; 톕; 톕; ) HANGUL SYLLABLE TYEB
+D196;D196;1110 1168 11B9;D196;1110 1168 11B9; # (톖; 톖; 톖; 톖; 톖; ) HANGUL SYLLABLE TYEBS
+D197;D197;1110 1168 11BA;D197;1110 1168 11BA; # (톗; 톗; 톗; 톗; 톗; ) HANGUL SYLLABLE TYES
+D198;D198;1110 1168 11BB;D198;1110 1168 11BB; # (톘; 톘; 톘; 톘; 톘; ) HANGUL SYLLABLE TYESS
+D199;D199;1110 1168 11BC;D199;1110 1168 11BC; # (톙; 톙; 톙; 톙; 톙; ) HANGUL SYLLABLE TYENG
+D19A;D19A;1110 1168 11BD;D19A;1110 1168 11BD; # (톚; 톚; 톚; 톚; 톚; ) HANGUL SYLLABLE TYEJ
+D19B;D19B;1110 1168 11BE;D19B;1110 1168 11BE; # (톛; 톛; 톛; 톛; 톛; ) HANGUL SYLLABLE TYEC
+D19C;D19C;1110 1168 11BF;D19C;1110 1168 11BF; # (톜; 톜; 톜; 톜; 톜; ) HANGUL SYLLABLE TYEK
+D19D;D19D;1110 1168 11C0;D19D;1110 1168 11C0; # (톝; 톝; 톝; 톝; 톝; ) HANGUL SYLLABLE TYET
+D19E;D19E;1110 1168 11C1;D19E;1110 1168 11C1; # (톞; 톞; 톞; 톞; 톞; ) HANGUL SYLLABLE TYEP
+D19F;D19F;1110 1168 11C2;D19F;1110 1168 11C2; # (톟; 톟; 톟; 톟; 톟; ) HANGUL SYLLABLE TYEH
+D1A0;D1A0;1110 1169;D1A0;1110 1169; # (토; 토; 토; 토; 토; ) HANGUL SYLLABLE TO
+D1A1;D1A1;1110 1169 11A8;D1A1;1110 1169 11A8; # (톡; 톡; 톡; 톡; 톡; ) HANGUL SYLLABLE TOG
+D1A2;D1A2;1110 1169 11A9;D1A2;1110 1169 11A9; # (톢; 톢; 톢; 톢; 톢; ) HANGUL SYLLABLE TOGG
+D1A3;D1A3;1110 1169 11AA;D1A3;1110 1169 11AA; # (톣; 톣; 톣; 톣; 톣; ) HANGUL SYLLABLE TOGS
+D1A4;D1A4;1110 1169 11AB;D1A4;1110 1169 11AB; # (톤; 톤; 톤; 톤; 톤; ) HANGUL SYLLABLE TON
+D1A5;D1A5;1110 1169 11AC;D1A5;1110 1169 11AC; # (톥; 톥; 톥; 톥; 톥; ) HANGUL SYLLABLE TONJ
+D1A6;D1A6;1110 1169 11AD;D1A6;1110 1169 11AD; # (톦; 톦; 톦; 톦; 톦; ) HANGUL SYLLABLE TONH
+D1A7;D1A7;1110 1169 11AE;D1A7;1110 1169 11AE; # (톧; 톧; 톧; 톧; 톧; ) HANGUL SYLLABLE TOD
+D1A8;D1A8;1110 1169 11AF;D1A8;1110 1169 11AF; # (톨; 톨; 톨; 톨; 톨; ) HANGUL SYLLABLE TOL
+D1A9;D1A9;1110 1169 11B0;D1A9;1110 1169 11B0; # (톩; 톩; 톩; 톩; 톩; ) HANGUL SYLLABLE TOLG
+D1AA;D1AA;1110 1169 11B1;D1AA;1110 1169 11B1; # (톪; 톪; 톪; 톪; 톪; ) HANGUL SYLLABLE TOLM
+D1AB;D1AB;1110 1169 11B2;D1AB;1110 1169 11B2; # (톫; 톫; 톫; 톫; 톫; ) HANGUL SYLLABLE TOLB
+D1AC;D1AC;1110 1169 11B3;D1AC;1110 1169 11B3; # (톬; 톬; 톬; 톬; 톬; ) HANGUL SYLLABLE TOLS
+D1AD;D1AD;1110 1169 11B4;D1AD;1110 1169 11B4; # (톭; 톭; 톭; 톭; 톭; ) HANGUL SYLLABLE TOLT
+D1AE;D1AE;1110 1169 11B5;D1AE;1110 1169 11B5; # (톮; 톮; 톮; 톮; 톮; ) HANGUL SYLLABLE TOLP
+D1AF;D1AF;1110 1169 11B6;D1AF;1110 1169 11B6; # (톯; 톯; 톯; 톯; 톯; ) HANGUL SYLLABLE TOLH
+D1B0;D1B0;1110 1169 11B7;D1B0;1110 1169 11B7; # (톰; 톰; 톰; 톰; 톰; ) HANGUL SYLLABLE TOM
+D1B1;D1B1;1110 1169 11B8;D1B1;1110 1169 11B8; # (톱; 톱; 톱; 톱; 톱; ) HANGUL SYLLABLE TOB
+D1B2;D1B2;1110 1169 11B9;D1B2;1110 1169 11B9; # (톲; 톲; 톲; 톲; 톲; ) HANGUL SYLLABLE TOBS
+D1B3;D1B3;1110 1169 11BA;D1B3;1110 1169 11BA; # (톳; 톳; 톳; 톳; 톳; ) HANGUL SYLLABLE TOS
+D1B4;D1B4;1110 1169 11BB;D1B4;1110 1169 11BB; # (톴; 톴; 톴; 톴; 톴; ) HANGUL SYLLABLE TOSS
+D1B5;D1B5;1110 1169 11BC;D1B5;1110 1169 11BC; # (통; 통; 통; 통; 통; ) HANGUL SYLLABLE TONG
+D1B6;D1B6;1110 1169 11BD;D1B6;1110 1169 11BD; # (톶; 톶; 톶; 톶; 톶; ) HANGUL SYLLABLE TOJ
+D1B7;D1B7;1110 1169 11BE;D1B7;1110 1169 11BE; # (톷; 톷; 톷; 톷; 톷; ) HANGUL SYLLABLE TOC
+D1B8;D1B8;1110 1169 11BF;D1B8;1110 1169 11BF; # (톸; 톸; 톸; 톸; 톸; ) HANGUL SYLLABLE TOK
+D1B9;D1B9;1110 1169 11C0;D1B9;1110 1169 11C0; # (톹; 톹; 톹; 톹; 톹; ) HANGUL SYLLABLE TOT
+D1BA;D1BA;1110 1169 11C1;D1BA;1110 1169 11C1; # (톺; 톺; 톺; 톺; 톺; ) HANGUL SYLLABLE TOP
+D1BB;D1BB;1110 1169 11C2;D1BB;1110 1169 11C2; # (톻; 톻; 톻; 톻; 톻; ) HANGUL SYLLABLE TOH
+D1BC;D1BC;1110 116A;D1BC;1110 116A; # (톼; 톼; 톼; 톼; 톼; ) HANGUL SYLLABLE TWA
+D1BD;D1BD;1110 116A 11A8;D1BD;1110 116A 11A8; # (톽; 톽; 톽; 톽; 톽; ) HANGUL SYLLABLE TWAG
+D1BE;D1BE;1110 116A 11A9;D1BE;1110 116A 11A9; # (톾; 톾; 톾; 톾; 톾; ) HANGUL SYLLABLE TWAGG
+D1BF;D1BF;1110 116A 11AA;D1BF;1110 116A 11AA; # (톿; 톿; 톿; 톿; 톿; ) HANGUL SYLLABLE TWAGS
+D1C0;D1C0;1110 116A 11AB;D1C0;1110 116A 11AB; # (퇀; 퇀; 퇀; 퇀; 퇀; ) HANGUL SYLLABLE TWAN
+D1C1;D1C1;1110 116A 11AC;D1C1;1110 116A 11AC; # (퇁; 퇁; 퇁; 퇁; 퇁; ) HANGUL SYLLABLE TWANJ
+D1C2;D1C2;1110 116A 11AD;D1C2;1110 116A 11AD; # (퇂; 퇂; 퇂; 퇂; 퇂; ) HANGUL SYLLABLE TWANH
+D1C3;D1C3;1110 116A 11AE;D1C3;1110 116A 11AE; # (퇃; 퇃; 퇃; 퇃; 퇃; ) HANGUL SYLLABLE TWAD
+D1C4;D1C4;1110 116A 11AF;D1C4;1110 116A 11AF; # (퇄; 퇄; 퇄; 퇄; 퇄; ) HANGUL SYLLABLE TWAL
+D1C5;D1C5;1110 116A 11B0;D1C5;1110 116A 11B0; # (퇅; 퇅; 퇅; 퇅; 퇅; ) HANGUL SYLLABLE TWALG
+D1C6;D1C6;1110 116A 11B1;D1C6;1110 116A 11B1; # (퇆; 퇆; 퇆; 퇆; 퇆; ) HANGUL SYLLABLE TWALM
+D1C7;D1C7;1110 116A 11B2;D1C7;1110 116A 11B2; # (퇇; 퇇; 퇇; 퇇; 퇇; ) HANGUL SYLLABLE TWALB
+D1C8;D1C8;1110 116A 11B3;D1C8;1110 116A 11B3; # (퇈; 퇈; 퇈; 퇈; 퇈; ) HANGUL SYLLABLE TWALS
+D1C9;D1C9;1110 116A 11B4;D1C9;1110 116A 11B4; # (퇉; 퇉; 퇉; 퇉; 퇉; ) HANGUL SYLLABLE TWALT
+D1CA;D1CA;1110 116A 11B5;D1CA;1110 116A 11B5; # (퇊; 퇊; 퇊; 퇊; 퇊; ) HANGUL SYLLABLE TWALP
+D1CB;D1CB;1110 116A 11B6;D1CB;1110 116A 11B6; # (퇋; 퇋; 퇋; 퇋; 퇋; ) HANGUL SYLLABLE TWALH
+D1CC;D1CC;1110 116A 11B7;D1CC;1110 116A 11B7; # (퇌; 퇌; 퇌; 퇌; 퇌; ) HANGUL SYLLABLE TWAM
+D1CD;D1CD;1110 116A 11B8;D1CD;1110 116A 11B8; # (퇍; 퇍; 퇍; 퇍; 퇍; ) HANGUL SYLLABLE TWAB
+D1CE;D1CE;1110 116A 11B9;D1CE;1110 116A 11B9; # (퇎; 퇎; 퇎; 퇎; 퇎; ) HANGUL SYLLABLE TWABS
+D1CF;D1CF;1110 116A 11BA;D1CF;1110 116A 11BA; # (퇏; 퇏; 퇏; 퇏; 퇏; ) HANGUL SYLLABLE TWAS
+D1D0;D1D0;1110 116A 11BB;D1D0;1110 116A 11BB; # (퇐; 퇐; 퇐; 퇐; 퇐; ) HANGUL SYLLABLE TWASS
+D1D1;D1D1;1110 116A 11BC;D1D1;1110 116A 11BC; # (퇑; 퇑; 퇑; 퇑; 퇑; ) HANGUL SYLLABLE TWANG
+D1D2;D1D2;1110 116A 11BD;D1D2;1110 116A 11BD; # (퇒; 퇒; 퇒; 퇒; 퇒; ) HANGUL SYLLABLE TWAJ
+D1D3;D1D3;1110 116A 11BE;D1D3;1110 116A 11BE; # (퇓; 퇓; 퇓; 퇓; 퇓; ) HANGUL SYLLABLE TWAC
+D1D4;D1D4;1110 116A 11BF;D1D4;1110 116A 11BF; # (퇔; 퇔; 퇔; 퇔; 퇔; ) HANGUL SYLLABLE TWAK
+D1D5;D1D5;1110 116A 11C0;D1D5;1110 116A 11C0; # (퇕; 퇕; 퇕; 퇕; 퇕; ) HANGUL SYLLABLE TWAT
+D1D6;D1D6;1110 116A 11C1;D1D6;1110 116A 11C1; # (퇖; 퇖; 퇖; 퇖; 퇖; ) HANGUL SYLLABLE TWAP
+D1D7;D1D7;1110 116A 11C2;D1D7;1110 116A 11C2; # (퇗; 퇗; 퇗; 퇗; 퇗; ) HANGUL SYLLABLE TWAH
+D1D8;D1D8;1110 116B;D1D8;1110 116B; # (퇘; 퇘; 퇘; 퇘; 퇘; ) HANGUL SYLLABLE TWAE
+D1D9;D1D9;1110 116B 11A8;D1D9;1110 116B 11A8; # (퇙; 퇙; 퇙; 퇙; 퇙; ) HANGUL SYLLABLE TWAEG
+D1DA;D1DA;1110 116B 11A9;D1DA;1110 116B 11A9; # (퇚; 퇚; 퇚; 퇚; 퇚; ) HANGUL SYLLABLE TWAEGG
+D1DB;D1DB;1110 116B 11AA;D1DB;1110 116B 11AA; # (퇛; 퇛; 퇛; 퇛; 퇛; ) HANGUL SYLLABLE TWAEGS
+D1DC;D1DC;1110 116B 11AB;D1DC;1110 116B 11AB; # (퇜; 퇜; 퇜; 퇜; 퇜; ) HANGUL SYLLABLE TWAEN
+D1DD;D1DD;1110 116B 11AC;D1DD;1110 116B 11AC; # (퇝; 퇝; 퇝; 퇝; 퇝; ) HANGUL SYLLABLE TWAENJ
+D1DE;D1DE;1110 116B 11AD;D1DE;1110 116B 11AD; # (퇞; 퇞; 퇞; 퇞; 퇞; ) HANGUL SYLLABLE TWAENH
+D1DF;D1DF;1110 116B 11AE;D1DF;1110 116B 11AE; # (퇟; 퇟; 퇟; 퇟; 퇟; ) HANGUL SYLLABLE TWAED
+D1E0;D1E0;1110 116B 11AF;D1E0;1110 116B 11AF; # (퇠; 퇠; 퇠; 퇠; 퇠; ) HANGUL SYLLABLE TWAEL
+D1E1;D1E1;1110 116B 11B0;D1E1;1110 116B 11B0; # (퇡; 퇡; 퇡; 퇡; 퇡; ) HANGUL SYLLABLE TWAELG
+D1E2;D1E2;1110 116B 11B1;D1E2;1110 116B 11B1; # (퇢; 퇢; 퇢; 퇢; 퇢; ) HANGUL SYLLABLE TWAELM
+D1E3;D1E3;1110 116B 11B2;D1E3;1110 116B 11B2; # (퇣; 퇣; 퇣; 퇣; 퇣; ) HANGUL SYLLABLE TWAELB
+D1E4;D1E4;1110 116B 11B3;D1E4;1110 116B 11B3; # (퇤; 퇤; 퇤; 퇤; 퇤; ) HANGUL SYLLABLE TWAELS
+D1E5;D1E5;1110 116B 11B4;D1E5;1110 116B 11B4; # (퇥; 퇥; 퇥; 퇥; 퇥; ) HANGUL SYLLABLE TWAELT
+D1E6;D1E6;1110 116B 11B5;D1E6;1110 116B 11B5; # (퇦; 퇦; 퇦; 퇦; 퇦; ) HANGUL SYLLABLE TWAELP
+D1E7;D1E7;1110 116B 11B6;D1E7;1110 116B 11B6; # (퇧; 퇧; 퇧; 퇧; 퇧; ) HANGUL SYLLABLE TWAELH
+D1E8;D1E8;1110 116B 11B7;D1E8;1110 116B 11B7; # (퇨; 퇨; 퇨; 퇨; 퇨; ) HANGUL SYLLABLE TWAEM
+D1E9;D1E9;1110 116B 11B8;D1E9;1110 116B 11B8; # (퇩; 퇩; 퇩; 퇩; 퇩; ) HANGUL SYLLABLE TWAEB
+D1EA;D1EA;1110 116B 11B9;D1EA;1110 116B 11B9; # (퇪; 퇪; 퇪; 퇪; 퇪; ) HANGUL SYLLABLE TWAEBS
+D1EB;D1EB;1110 116B 11BA;D1EB;1110 116B 11BA; # (퇫; 퇫; 퇫; 퇫; 퇫; ) HANGUL SYLLABLE TWAES
+D1EC;D1EC;1110 116B 11BB;D1EC;1110 116B 11BB; # (퇬; 퇬; 퇬; 퇬; 퇬; ) HANGUL SYLLABLE TWAESS
+D1ED;D1ED;1110 116B 11BC;D1ED;1110 116B 11BC; # (퇭; 퇭; 퇭; 퇭; 퇭; ) HANGUL SYLLABLE TWAENG
+D1EE;D1EE;1110 116B 11BD;D1EE;1110 116B 11BD; # (퇮; 퇮; 퇮; 퇮; 퇮; ) HANGUL SYLLABLE TWAEJ
+D1EF;D1EF;1110 116B 11BE;D1EF;1110 116B 11BE; # (퇯; 퇯; 퇯; 퇯; 퇯; ) HANGUL SYLLABLE TWAEC
+D1F0;D1F0;1110 116B 11BF;D1F0;1110 116B 11BF; # (퇰; 퇰; 퇰; 퇰; 퇰; ) HANGUL SYLLABLE TWAEK
+D1F1;D1F1;1110 116B 11C0;D1F1;1110 116B 11C0; # (퇱; 퇱; 퇱; 퇱; 퇱; ) HANGUL SYLLABLE TWAET
+D1F2;D1F2;1110 116B 11C1;D1F2;1110 116B 11C1; # (퇲; 퇲; 퇲; 퇲; 퇲; ) HANGUL SYLLABLE TWAEP
+D1F3;D1F3;1110 116B 11C2;D1F3;1110 116B 11C2; # (퇳; 퇳; 퇳; 퇳; 퇳; ) HANGUL SYLLABLE TWAEH
+D1F4;D1F4;1110 116C;D1F4;1110 116C; # (퇴; 퇴; 퇴; 퇴; 퇴; ) HANGUL SYLLABLE TOE
+D1F5;D1F5;1110 116C 11A8;D1F5;1110 116C 11A8; # (퇵; 퇵; 퇵; 퇵; 퇵; ) HANGUL SYLLABLE TOEG
+D1F6;D1F6;1110 116C 11A9;D1F6;1110 116C 11A9; # (퇶; 퇶; 퇶; 퇶; 퇶; ) HANGUL SYLLABLE TOEGG
+D1F7;D1F7;1110 116C 11AA;D1F7;1110 116C 11AA; # (퇷; 퇷; 퇷; 퇷; 퇷; ) HANGUL SYLLABLE TOEGS
+D1F8;D1F8;1110 116C 11AB;D1F8;1110 116C 11AB; # (퇸; 퇸; 퇸; 퇸; 퇸; ) HANGUL SYLLABLE TOEN
+D1F9;D1F9;1110 116C 11AC;D1F9;1110 116C 11AC; # (퇹; 퇹; 퇹; 퇹; 퇹; ) HANGUL SYLLABLE TOENJ
+D1FA;D1FA;1110 116C 11AD;D1FA;1110 116C 11AD; # (퇺; 퇺; 퇺; 퇺; 퇺; ) HANGUL SYLLABLE TOENH
+D1FB;D1FB;1110 116C 11AE;D1FB;1110 116C 11AE; # (퇻; 퇻; 퇻; 퇻; 퇻; ) HANGUL SYLLABLE TOED
+D1FC;D1FC;1110 116C 11AF;D1FC;1110 116C 11AF; # (퇼; 퇼; 퇼; 퇼; 퇼; ) HANGUL SYLLABLE TOEL
+D1FD;D1FD;1110 116C 11B0;D1FD;1110 116C 11B0; # (퇽; 퇽; 퇽; 퇽; 퇽; ) HANGUL SYLLABLE TOELG
+D1FE;D1FE;1110 116C 11B1;D1FE;1110 116C 11B1; # (퇾; 퇾; 퇾; 퇾; 퇾; ) HANGUL SYLLABLE TOELM
+D1FF;D1FF;1110 116C 11B2;D1FF;1110 116C 11B2; # (퇿; 퇿; 퇿; 퇿; 퇿; ) HANGUL SYLLABLE TOELB
+D200;D200;1110 116C 11B3;D200;1110 116C 11B3; # (툀; 툀; 툀; 툀; 툀; ) HANGUL SYLLABLE TOELS
+D201;D201;1110 116C 11B4;D201;1110 116C 11B4; # (툁; 툁; 툁; 툁; 툁; ) HANGUL SYLLABLE TOELT
+D202;D202;1110 116C 11B5;D202;1110 116C 11B5; # (툂; 툂; 툂; 툂; 툂; ) HANGUL SYLLABLE TOELP
+D203;D203;1110 116C 11B6;D203;1110 116C 11B6; # (툃; 툃; 툃; 툃; 툃; ) HANGUL SYLLABLE TOELH
+D204;D204;1110 116C 11B7;D204;1110 116C 11B7; # (툄; 툄; 툄; 툄; 툄; ) HANGUL SYLLABLE TOEM
+D205;D205;1110 116C 11B8;D205;1110 116C 11B8; # (툅; 툅; 툅; 툅; 툅; ) HANGUL SYLLABLE TOEB
+D206;D206;1110 116C 11B9;D206;1110 116C 11B9; # (툆; 툆; 툆; 툆; 툆; ) HANGUL SYLLABLE TOEBS
+D207;D207;1110 116C 11BA;D207;1110 116C 11BA; # (툇; 툇; 툇; 툇; 툇; ) HANGUL SYLLABLE TOES
+D208;D208;1110 116C 11BB;D208;1110 116C 11BB; # (툈; 툈; 툈; 툈; 툈; ) HANGUL SYLLABLE TOESS
+D209;D209;1110 116C 11BC;D209;1110 116C 11BC; # (툉; 툉; 툉; 툉; 툉; ) HANGUL SYLLABLE TOENG
+D20A;D20A;1110 116C 11BD;D20A;1110 116C 11BD; # (툊; 툊; 툊; 툊; 툊; ) HANGUL SYLLABLE TOEJ
+D20B;D20B;1110 116C 11BE;D20B;1110 116C 11BE; # (툋; 툋; 툋; 툋; 툋; ) HANGUL SYLLABLE TOEC
+D20C;D20C;1110 116C 11BF;D20C;1110 116C 11BF; # (툌; 툌; 툌; 툌; 툌; ) HANGUL SYLLABLE TOEK
+D20D;D20D;1110 116C 11C0;D20D;1110 116C 11C0; # (툍; 툍; 툍; 툍; 툍; ) HANGUL SYLLABLE TOET
+D20E;D20E;1110 116C 11C1;D20E;1110 116C 11C1; # (툎; 툎; 툎; 툎; 툎; ) HANGUL SYLLABLE TOEP
+D20F;D20F;1110 116C 11C2;D20F;1110 116C 11C2; # (툏; 툏; 툏; 툏; 툏; ) HANGUL SYLLABLE TOEH
+D210;D210;1110 116D;D210;1110 116D; # (툐; 툐; 툐; 툐; 툐; ) HANGUL SYLLABLE TYO
+D211;D211;1110 116D 11A8;D211;1110 116D 11A8; # (툑; 툑; 툑; 툑; 툑; ) HANGUL SYLLABLE TYOG
+D212;D212;1110 116D 11A9;D212;1110 116D 11A9; # (툒; 툒; 툒; 툒; 툒; ) HANGUL SYLLABLE TYOGG
+D213;D213;1110 116D 11AA;D213;1110 116D 11AA; # (툓; 툓; 툓; 툓; 툓; ) HANGUL SYLLABLE TYOGS
+D214;D214;1110 116D 11AB;D214;1110 116D 11AB; # (툔; 툔; 툔; 툔; 툔; ) HANGUL SYLLABLE TYON
+D215;D215;1110 116D 11AC;D215;1110 116D 11AC; # (툕; 툕; 툕; 툕; 툕; ) HANGUL SYLLABLE TYONJ
+D216;D216;1110 116D 11AD;D216;1110 116D 11AD; # (툖; 툖; 툖; 툖; 툖; ) HANGUL SYLLABLE TYONH
+D217;D217;1110 116D 11AE;D217;1110 116D 11AE; # (툗; 툗; 툗; 툗; 툗; ) HANGUL SYLLABLE TYOD
+D218;D218;1110 116D 11AF;D218;1110 116D 11AF; # (툘; 툘; 툘; 툘; 툘; ) HANGUL SYLLABLE TYOL
+D219;D219;1110 116D 11B0;D219;1110 116D 11B0; # (툙; 툙; 툙; 툙; 툙; ) HANGUL SYLLABLE TYOLG
+D21A;D21A;1110 116D 11B1;D21A;1110 116D 11B1; # (툚; 툚; 툚; 툚; 툚; ) HANGUL SYLLABLE TYOLM
+D21B;D21B;1110 116D 11B2;D21B;1110 116D 11B2; # (툛; 툛; 툛; 툛; 툛; ) HANGUL SYLLABLE TYOLB
+D21C;D21C;1110 116D 11B3;D21C;1110 116D 11B3; # (툜; 툜; 툜; 툜; 툜; ) HANGUL SYLLABLE TYOLS
+D21D;D21D;1110 116D 11B4;D21D;1110 116D 11B4; # (툝; 툝; 툝; 툝; 툝; ) HANGUL SYLLABLE TYOLT
+D21E;D21E;1110 116D 11B5;D21E;1110 116D 11B5; # (툞; 툞; 툞; 툞; 툞; ) HANGUL SYLLABLE TYOLP
+D21F;D21F;1110 116D 11B6;D21F;1110 116D 11B6; # (툟; 툟; 툟; 툟; 툟; ) HANGUL SYLLABLE TYOLH
+D220;D220;1110 116D 11B7;D220;1110 116D 11B7; # (툠; 툠; 툠; 툠; 툠; ) HANGUL SYLLABLE TYOM
+D221;D221;1110 116D 11B8;D221;1110 116D 11B8; # (툡; 툡; 툡; 툡; 툡; ) HANGUL SYLLABLE TYOB
+D222;D222;1110 116D 11B9;D222;1110 116D 11B9; # (툢; 툢; 툢; 툢; 툢; ) HANGUL SYLLABLE TYOBS
+D223;D223;1110 116D 11BA;D223;1110 116D 11BA; # (툣; 툣; 툣; 툣; 툣; ) HANGUL SYLLABLE TYOS
+D224;D224;1110 116D 11BB;D224;1110 116D 11BB; # (툤; 툤; 툤; 툤; 툤; ) HANGUL SYLLABLE TYOSS
+D225;D225;1110 116D 11BC;D225;1110 116D 11BC; # (툥; 툥; 툥; 툥; 툥; ) HANGUL SYLLABLE TYONG
+D226;D226;1110 116D 11BD;D226;1110 116D 11BD; # (툦; 툦; 툦; 툦; 툦; ) HANGUL SYLLABLE TYOJ
+D227;D227;1110 116D 11BE;D227;1110 116D 11BE; # (툧; 툧; 툧; 툧; 툧; ) HANGUL SYLLABLE TYOC
+D228;D228;1110 116D 11BF;D228;1110 116D 11BF; # (툨; 툨; 툨; 툨; 툨; ) HANGUL SYLLABLE TYOK
+D229;D229;1110 116D 11C0;D229;1110 116D 11C0; # (툩; 툩; 툩; 툩; 툩; ) HANGUL SYLLABLE TYOT
+D22A;D22A;1110 116D 11C1;D22A;1110 116D 11C1; # (툪; 툪; 툪; 툪; 툪; ) HANGUL SYLLABLE TYOP
+D22B;D22B;1110 116D 11C2;D22B;1110 116D 11C2; # (툫; 툫; 툫; 툫; 툫; ) HANGUL SYLLABLE TYOH
+D22C;D22C;1110 116E;D22C;1110 116E; # (투; 투; 투; 투; 투; ) HANGUL SYLLABLE TU
+D22D;D22D;1110 116E 11A8;D22D;1110 116E 11A8; # (툭; 툭; 툭; 툭; 툭; ) HANGUL SYLLABLE TUG
+D22E;D22E;1110 116E 11A9;D22E;1110 116E 11A9; # (툮; 툮; 툮; 툮; 툮; ) HANGUL SYLLABLE TUGG
+D22F;D22F;1110 116E 11AA;D22F;1110 116E 11AA; # (툯; 툯; 툯; 툯; 툯; ) HANGUL SYLLABLE TUGS
+D230;D230;1110 116E 11AB;D230;1110 116E 11AB; # (툰; 툰; 툰; 툰; 툰; ) HANGUL SYLLABLE TUN
+D231;D231;1110 116E 11AC;D231;1110 116E 11AC; # (툱; 툱; 툱; 툱; 툱; ) HANGUL SYLLABLE TUNJ
+D232;D232;1110 116E 11AD;D232;1110 116E 11AD; # (툲; 툲; 툲; 툲; 툲; ) HANGUL SYLLABLE TUNH
+D233;D233;1110 116E 11AE;D233;1110 116E 11AE; # (툳; 툳; 툳; 툳; 툳; ) HANGUL SYLLABLE TUD
+D234;D234;1110 116E 11AF;D234;1110 116E 11AF; # (툴; 툴; 툴; 툴; 툴; ) HANGUL SYLLABLE TUL
+D235;D235;1110 116E 11B0;D235;1110 116E 11B0; # (툵; 툵; 툵; 툵; 툵; ) HANGUL SYLLABLE TULG
+D236;D236;1110 116E 11B1;D236;1110 116E 11B1; # (툶; 툶; 툶; 툶; 툶; ) HANGUL SYLLABLE TULM
+D237;D237;1110 116E 11B2;D237;1110 116E 11B2; # (툷; 툷; 툷; 툷; 툷; ) HANGUL SYLLABLE TULB
+D238;D238;1110 116E 11B3;D238;1110 116E 11B3; # (툸; 툸; 툸; 툸; 툸; ) HANGUL SYLLABLE TULS
+D239;D239;1110 116E 11B4;D239;1110 116E 11B4; # (툹; 툹; 툹; 툹; 툹; ) HANGUL SYLLABLE TULT
+D23A;D23A;1110 116E 11B5;D23A;1110 116E 11B5; # (툺; 툺; 툺; 툺; 툺; ) HANGUL SYLLABLE TULP
+D23B;D23B;1110 116E 11B6;D23B;1110 116E 11B6; # (툻; 툻; 툻; 툻; 툻; ) HANGUL SYLLABLE TULH
+D23C;D23C;1110 116E 11B7;D23C;1110 116E 11B7; # (툼; 툼; 툼; 툼; 툼; ) HANGUL SYLLABLE TUM
+D23D;D23D;1110 116E 11B8;D23D;1110 116E 11B8; # (툽; 툽; 툽; 툽; 툽; ) HANGUL SYLLABLE TUB
+D23E;D23E;1110 116E 11B9;D23E;1110 116E 11B9; # (툾; 툾; 툾; 툾; 툾; ) HANGUL SYLLABLE TUBS
+D23F;D23F;1110 116E 11BA;D23F;1110 116E 11BA; # (툿; 툿; 툿; 툿; 툿; ) HANGUL SYLLABLE TUS
+D240;D240;1110 116E 11BB;D240;1110 116E 11BB; # (퉀; 퉀; 퉀; 퉀; 퉀; ) HANGUL SYLLABLE TUSS
+D241;D241;1110 116E 11BC;D241;1110 116E 11BC; # (퉁; 퉁; 퉁; 퉁; 퉁; ) HANGUL SYLLABLE TUNG
+D242;D242;1110 116E 11BD;D242;1110 116E 11BD; # (퉂; 퉂; 퉂; 퉂; 퉂; ) HANGUL SYLLABLE TUJ
+D243;D243;1110 116E 11BE;D243;1110 116E 11BE; # (퉃; 퉃; 퉃; 퉃; 퉃; ) HANGUL SYLLABLE TUC
+D244;D244;1110 116E 11BF;D244;1110 116E 11BF; # (퉄; 퉄; 퉄; 퉄; 퉄; ) HANGUL SYLLABLE TUK
+D245;D245;1110 116E 11C0;D245;1110 116E 11C0; # (퉅; 퉅; 퉅; 퉅; 퉅; ) HANGUL SYLLABLE TUT
+D246;D246;1110 116E 11C1;D246;1110 116E 11C1; # (퉆; 퉆; 퉆; 퉆; 퉆; ) HANGUL SYLLABLE TUP
+D247;D247;1110 116E 11C2;D247;1110 116E 11C2; # (퉇; 퉇; 퉇; 퉇; 퉇; ) HANGUL SYLLABLE TUH
+D248;D248;1110 116F;D248;1110 116F; # (퉈; 퉈; 퉈; 퉈; 퉈; ) HANGUL SYLLABLE TWEO
+D249;D249;1110 116F 11A8;D249;1110 116F 11A8; # (퉉; 퉉; 퉉; 퉉; 퉉; ) HANGUL SYLLABLE TWEOG
+D24A;D24A;1110 116F 11A9;D24A;1110 116F 11A9; # (퉊; 퉊; 퉊; 퉊; 퉊; ) HANGUL SYLLABLE TWEOGG
+D24B;D24B;1110 116F 11AA;D24B;1110 116F 11AA; # (퉋; 퉋; 퉋; 퉋; 퉋; ) HANGUL SYLLABLE TWEOGS
+D24C;D24C;1110 116F 11AB;D24C;1110 116F 11AB; # (퉌; 퉌; 퉌; 퉌; 퉌; ) HANGUL SYLLABLE TWEON
+D24D;D24D;1110 116F 11AC;D24D;1110 116F 11AC; # (퉍; 퉍; 퉍; 퉍; 퉍; ) HANGUL SYLLABLE TWEONJ
+D24E;D24E;1110 116F 11AD;D24E;1110 116F 11AD; # (퉎; 퉎; 퉎; 퉎; 퉎; ) HANGUL SYLLABLE TWEONH
+D24F;D24F;1110 116F 11AE;D24F;1110 116F 11AE; # (퉏; 퉏; 퉏; 퉏; 퉏; ) HANGUL SYLLABLE TWEOD
+D250;D250;1110 116F 11AF;D250;1110 116F 11AF; # (퉐; 퉐; 퉐; 퉐; 퉐; ) HANGUL SYLLABLE TWEOL
+D251;D251;1110 116F 11B0;D251;1110 116F 11B0; # (퉑; 퉑; 퉑; 퉑; 퉑; ) HANGUL SYLLABLE TWEOLG
+D252;D252;1110 116F 11B1;D252;1110 116F 11B1; # (퉒; 퉒; 퉒; 퉒; 퉒; ) HANGUL SYLLABLE TWEOLM
+D253;D253;1110 116F 11B2;D253;1110 116F 11B2; # (퉓; 퉓; 퉓; 퉓; 퉓; ) HANGUL SYLLABLE TWEOLB
+D254;D254;1110 116F 11B3;D254;1110 116F 11B3; # (퉔; 퉔; 퉔; 퉔; 퉔; ) HANGUL SYLLABLE TWEOLS
+D255;D255;1110 116F 11B4;D255;1110 116F 11B4; # (퉕; 퉕; 퉕; 퉕; 퉕; ) HANGUL SYLLABLE TWEOLT
+D256;D256;1110 116F 11B5;D256;1110 116F 11B5; # (퉖; 퉖; 퉖; 퉖; 퉖; ) HANGUL SYLLABLE TWEOLP
+D257;D257;1110 116F 11B6;D257;1110 116F 11B6; # (퉗; 퉗; 퉗; 퉗; 퉗; ) HANGUL SYLLABLE TWEOLH
+D258;D258;1110 116F 11B7;D258;1110 116F 11B7; # (퉘; 퉘; 퉘; 퉘; 퉘; ) HANGUL SYLLABLE TWEOM
+D259;D259;1110 116F 11B8;D259;1110 116F 11B8; # (퉙; 퉙; 퉙; 퉙; 퉙; ) HANGUL SYLLABLE TWEOB
+D25A;D25A;1110 116F 11B9;D25A;1110 116F 11B9; # (퉚; 퉚; 퉚; 퉚; 퉚; ) HANGUL SYLLABLE TWEOBS
+D25B;D25B;1110 116F 11BA;D25B;1110 116F 11BA; # (퉛; 퉛; 퉛; 퉛; 퉛; ) HANGUL SYLLABLE TWEOS
+D25C;D25C;1110 116F 11BB;D25C;1110 116F 11BB; # (퉜; 퉜; 퉜; 퉜; 퉜; ) HANGUL SYLLABLE TWEOSS
+D25D;D25D;1110 116F 11BC;D25D;1110 116F 11BC; # (퉝; 퉝; 퉝; 퉝; 퉝; ) HANGUL SYLLABLE TWEONG
+D25E;D25E;1110 116F 11BD;D25E;1110 116F 11BD; # (퉞; 퉞; 퉞; 퉞; 퉞; ) HANGUL SYLLABLE TWEOJ
+D25F;D25F;1110 116F 11BE;D25F;1110 116F 11BE; # (퉟; 퉟; 퉟; 퉟; 퉟; ) HANGUL SYLLABLE TWEOC
+D260;D260;1110 116F 11BF;D260;1110 116F 11BF; # (퉠; 퉠; 퉠; 퉠; 퉠; ) HANGUL SYLLABLE TWEOK
+D261;D261;1110 116F 11C0;D261;1110 116F 11C0; # (퉡; 퉡; 퉡; 퉡; 퉡; ) HANGUL SYLLABLE TWEOT
+D262;D262;1110 116F 11C1;D262;1110 116F 11C1; # (퉢; 퉢; 퉢; 퉢; 퉢; ) HANGUL SYLLABLE TWEOP
+D263;D263;1110 116F 11C2;D263;1110 116F 11C2; # (퉣; 퉣; 퉣; 퉣; 퉣; ) HANGUL SYLLABLE TWEOH
+D264;D264;1110 1170;D264;1110 1170; # (퉤; 퉤; 퉤; 퉤; 퉤; ) HANGUL SYLLABLE TWE
+D265;D265;1110 1170 11A8;D265;1110 1170 11A8; # (퉥; 퉥; 퉥; 퉥; 퉥; ) HANGUL SYLLABLE TWEG
+D266;D266;1110 1170 11A9;D266;1110 1170 11A9; # (퉦; 퉦; 퉦; 퉦; 퉦; ) HANGUL SYLLABLE TWEGG
+D267;D267;1110 1170 11AA;D267;1110 1170 11AA; # (퉧; 퉧; 퉧; 퉧; 퉧; ) HANGUL SYLLABLE TWEGS
+D268;D268;1110 1170 11AB;D268;1110 1170 11AB; # (퉨; 퉨; 퉨; 퉨; 퉨; ) HANGUL SYLLABLE TWEN
+D269;D269;1110 1170 11AC;D269;1110 1170 11AC; # (퉩; 퉩; 퉩; 퉩; 퉩; ) HANGUL SYLLABLE TWENJ
+D26A;D26A;1110 1170 11AD;D26A;1110 1170 11AD; # (퉪; 퉪; 퉪; 퉪; 퉪; ) HANGUL SYLLABLE TWENH
+D26B;D26B;1110 1170 11AE;D26B;1110 1170 11AE; # (퉫; 퉫; 퉫; 퉫; 퉫; ) HANGUL SYLLABLE TWED
+D26C;D26C;1110 1170 11AF;D26C;1110 1170 11AF; # (퉬; 퉬; 퉬; 퉬; 퉬; ) HANGUL SYLLABLE TWEL
+D26D;D26D;1110 1170 11B0;D26D;1110 1170 11B0; # (퉭; 퉭; 퉭; 퉭; 퉭; ) HANGUL SYLLABLE TWELG
+D26E;D26E;1110 1170 11B1;D26E;1110 1170 11B1; # (퉮; 퉮; 퉮; 퉮; 퉮; ) HANGUL SYLLABLE TWELM
+D26F;D26F;1110 1170 11B2;D26F;1110 1170 11B2; # (퉯; 퉯; 퉯; 퉯; 퉯; ) HANGUL SYLLABLE TWELB
+D270;D270;1110 1170 11B3;D270;1110 1170 11B3; # (퉰; 퉰; 퉰; 퉰; 퉰; ) HANGUL SYLLABLE TWELS
+D271;D271;1110 1170 11B4;D271;1110 1170 11B4; # (퉱; 퉱; 퉱; 퉱; 퉱; ) HANGUL SYLLABLE TWELT
+D272;D272;1110 1170 11B5;D272;1110 1170 11B5; # (퉲; 퉲; 퉲; 퉲; 퉲; ) HANGUL SYLLABLE TWELP
+D273;D273;1110 1170 11B6;D273;1110 1170 11B6; # (퉳; 퉳; 퉳; 퉳; 퉳; ) HANGUL SYLLABLE TWELH
+D274;D274;1110 1170 11B7;D274;1110 1170 11B7; # (퉴; 퉴; 퉴; 퉴; 퉴; ) HANGUL SYLLABLE TWEM
+D275;D275;1110 1170 11B8;D275;1110 1170 11B8; # (퉵; 퉵; 퉵; 퉵; 퉵; ) HANGUL SYLLABLE TWEB
+D276;D276;1110 1170 11B9;D276;1110 1170 11B9; # (퉶; 퉶; 퉶; 퉶; 퉶; ) HANGUL SYLLABLE TWEBS
+D277;D277;1110 1170 11BA;D277;1110 1170 11BA; # (퉷; 퉷; 퉷; 퉷; 퉷; ) HANGUL SYLLABLE TWES
+D278;D278;1110 1170 11BB;D278;1110 1170 11BB; # (퉸; 퉸; 퉸; 퉸; 퉸; ) HANGUL SYLLABLE TWESS
+D279;D279;1110 1170 11BC;D279;1110 1170 11BC; # (퉹; 퉹; 퉹; 퉹; 퉹; ) HANGUL SYLLABLE TWENG
+D27A;D27A;1110 1170 11BD;D27A;1110 1170 11BD; # (퉺; 퉺; 퉺; 퉺; 퉺; ) HANGUL SYLLABLE TWEJ
+D27B;D27B;1110 1170 11BE;D27B;1110 1170 11BE; # (퉻; 퉻; 퉻; 퉻; 퉻; ) HANGUL SYLLABLE TWEC
+D27C;D27C;1110 1170 11BF;D27C;1110 1170 11BF; # (퉼; 퉼; 퉼; 퉼; 퉼; ) HANGUL SYLLABLE TWEK
+D27D;D27D;1110 1170 11C0;D27D;1110 1170 11C0; # (퉽; 퉽; 퉽; 퉽; 퉽; ) HANGUL SYLLABLE TWET
+D27E;D27E;1110 1170 11C1;D27E;1110 1170 11C1; # (퉾; 퉾; 퉾; 퉾; 퉾; ) HANGUL SYLLABLE TWEP
+D27F;D27F;1110 1170 11C2;D27F;1110 1170 11C2; # (퉿; 퉿; 퉿; 퉿; 퉿; ) HANGUL SYLLABLE TWEH
+D280;D280;1110 1171;D280;1110 1171; # (튀; 튀; 튀; 튀; 튀; ) HANGUL SYLLABLE TWI
+D281;D281;1110 1171 11A8;D281;1110 1171 11A8; # (튁; 튁; 튁; 튁; 튁; ) HANGUL SYLLABLE TWIG
+D282;D282;1110 1171 11A9;D282;1110 1171 11A9; # (튂; 튂; 튂; 튂; 튂; ) HANGUL SYLLABLE TWIGG
+D283;D283;1110 1171 11AA;D283;1110 1171 11AA; # (튃; 튃; 튃; 튃; 튃; ) HANGUL SYLLABLE TWIGS
+D284;D284;1110 1171 11AB;D284;1110 1171 11AB; # (튄; 튄; 튄; 튄; 튄; ) HANGUL SYLLABLE TWIN
+D285;D285;1110 1171 11AC;D285;1110 1171 11AC; # (튅; 튅; 튅; 튅; 튅; ) HANGUL SYLLABLE TWINJ
+D286;D286;1110 1171 11AD;D286;1110 1171 11AD; # (튆; 튆; 튆; 튆; 튆; ) HANGUL SYLLABLE TWINH
+D287;D287;1110 1171 11AE;D287;1110 1171 11AE; # (튇; 튇; 튇; 튇; 튇; ) HANGUL SYLLABLE TWID
+D288;D288;1110 1171 11AF;D288;1110 1171 11AF; # (튈; 튈; 튈; 튈; 튈; ) HANGUL SYLLABLE TWIL
+D289;D289;1110 1171 11B0;D289;1110 1171 11B0; # (튉; 튉; 튉; 튉; 튉; ) HANGUL SYLLABLE TWILG
+D28A;D28A;1110 1171 11B1;D28A;1110 1171 11B1; # (튊; 튊; 튊; 튊; 튊; ) HANGUL SYLLABLE TWILM
+D28B;D28B;1110 1171 11B2;D28B;1110 1171 11B2; # (튋; 튋; 튋; 튋; 튋; ) HANGUL SYLLABLE TWILB
+D28C;D28C;1110 1171 11B3;D28C;1110 1171 11B3; # (튌; 튌; 튌; 튌; 튌; ) HANGUL SYLLABLE TWILS
+D28D;D28D;1110 1171 11B4;D28D;1110 1171 11B4; # (튍; 튍; 튍; 튍; 튍; ) HANGUL SYLLABLE TWILT
+D28E;D28E;1110 1171 11B5;D28E;1110 1171 11B5; # (튎; 튎; 튎; 튎; 튎; ) HANGUL SYLLABLE TWILP
+D28F;D28F;1110 1171 11B6;D28F;1110 1171 11B6; # (튏; 튏; 튏; 튏; 튏; ) HANGUL SYLLABLE TWILH
+D290;D290;1110 1171 11B7;D290;1110 1171 11B7; # (튐; 튐; 튐; 튐; 튐; ) HANGUL SYLLABLE TWIM
+D291;D291;1110 1171 11B8;D291;1110 1171 11B8; # (튑; 튑; 튑; 튑; 튑; ) HANGUL SYLLABLE TWIB
+D292;D292;1110 1171 11B9;D292;1110 1171 11B9; # (튒; 튒; 튒; 튒; 튒; ) HANGUL SYLLABLE TWIBS
+D293;D293;1110 1171 11BA;D293;1110 1171 11BA; # (튓; 튓; 튓; 튓; 튓; ) HANGUL SYLLABLE TWIS
+D294;D294;1110 1171 11BB;D294;1110 1171 11BB; # (튔; 튔; 튔; 튔; 튔; ) HANGUL SYLLABLE TWISS
+D295;D295;1110 1171 11BC;D295;1110 1171 11BC; # (튕; 튕; 튕; 튕; 튕; ) HANGUL SYLLABLE TWING
+D296;D296;1110 1171 11BD;D296;1110 1171 11BD; # (튖; 튖; 튖; 튖; 튖; ) HANGUL SYLLABLE TWIJ
+D297;D297;1110 1171 11BE;D297;1110 1171 11BE; # (튗; 튗; 튗; 튗; 튗; ) HANGUL SYLLABLE TWIC
+D298;D298;1110 1171 11BF;D298;1110 1171 11BF; # (튘; 튘; 튘; 튘; 튘; ) HANGUL SYLLABLE TWIK
+D299;D299;1110 1171 11C0;D299;1110 1171 11C0; # (튙; 튙; 튙; 튙; 튙; ) HANGUL SYLLABLE TWIT
+D29A;D29A;1110 1171 11C1;D29A;1110 1171 11C1; # (튚; 튚; 튚; 튚; 튚; ) HANGUL SYLLABLE TWIP
+D29B;D29B;1110 1171 11C2;D29B;1110 1171 11C2; # (튛; 튛; 튛; 튛; 튛; ) HANGUL SYLLABLE TWIH
+D29C;D29C;1110 1172;D29C;1110 1172; # (튜; 튜; 튜; 튜; 튜; ) HANGUL SYLLABLE TYU
+D29D;D29D;1110 1172 11A8;D29D;1110 1172 11A8; # (튝; 튝; 튝; 튝; 튝; ) HANGUL SYLLABLE TYUG
+D29E;D29E;1110 1172 11A9;D29E;1110 1172 11A9; # (튞; 튞; 튞; 튞; 튞; ) HANGUL SYLLABLE TYUGG
+D29F;D29F;1110 1172 11AA;D29F;1110 1172 11AA; # (튟; 튟; 튟; 튟; 튟; ) HANGUL SYLLABLE TYUGS
+D2A0;D2A0;1110 1172 11AB;D2A0;1110 1172 11AB; # (튠; 튠; 튠; 튠; 튠; ) HANGUL SYLLABLE TYUN
+D2A1;D2A1;1110 1172 11AC;D2A1;1110 1172 11AC; # (튡; 튡; 튡; 튡; 튡; ) HANGUL SYLLABLE TYUNJ
+D2A2;D2A2;1110 1172 11AD;D2A2;1110 1172 11AD; # (튢; 튢; 튢; 튢; 튢; ) HANGUL SYLLABLE TYUNH
+D2A3;D2A3;1110 1172 11AE;D2A3;1110 1172 11AE; # (튣; 튣; 튣; 튣; 튣; ) HANGUL SYLLABLE TYUD
+D2A4;D2A4;1110 1172 11AF;D2A4;1110 1172 11AF; # (튤; 튤; 튤; 튤; 튤; ) HANGUL SYLLABLE TYUL
+D2A5;D2A5;1110 1172 11B0;D2A5;1110 1172 11B0; # (튥; 튥; 튥; 튥; 튥; ) HANGUL SYLLABLE TYULG
+D2A6;D2A6;1110 1172 11B1;D2A6;1110 1172 11B1; # (튦; 튦; 튦; 튦; 튦; ) HANGUL SYLLABLE TYULM
+D2A7;D2A7;1110 1172 11B2;D2A7;1110 1172 11B2; # (튧; 튧; 튧; 튧; 튧; ) HANGUL SYLLABLE TYULB
+D2A8;D2A8;1110 1172 11B3;D2A8;1110 1172 11B3; # (튨; 튨; 튨; 튨; 튨; ) HANGUL SYLLABLE TYULS
+D2A9;D2A9;1110 1172 11B4;D2A9;1110 1172 11B4; # (튩; 튩; 튩; 튩; 튩; ) HANGUL SYLLABLE TYULT
+D2AA;D2AA;1110 1172 11B5;D2AA;1110 1172 11B5; # (튪; 튪; 튪; 튪; 튪; ) HANGUL SYLLABLE TYULP
+D2AB;D2AB;1110 1172 11B6;D2AB;1110 1172 11B6; # (튫; 튫; 튫; 튫; 튫; ) HANGUL SYLLABLE TYULH
+D2AC;D2AC;1110 1172 11B7;D2AC;1110 1172 11B7; # (튬; 튬; 튬; 튬; 튬; ) HANGUL SYLLABLE TYUM
+D2AD;D2AD;1110 1172 11B8;D2AD;1110 1172 11B8; # (튭; 튭; 튭; 튭; 튭; ) HANGUL SYLLABLE TYUB
+D2AE;D2AE;1110 1172 11B9;D2AE;1110 1172 11B9; # (튮; 튮; 튮; 튮; 튮; ) HANGUL SYLLABLE TYUBS
+D2AF;D2AF;1110 1172 11BA;D2AF;1110 1172 11BA; # (튯; 튯; 튯; 튯; 튯; ) HANGUL SYLLABLE TYUS
+D2B0;D2B0;1110 1172 11BB;D2B0;1110 1172 11BB; # (튰; 튰; 튰; 튰; 튰; ) HANGUL SYLLABLE TYUSS
+D2B1;D2B1;1110 1172 11BC;D2B1;1110 1172 11BC; # (튱; 튱; 튱; 튱; 튱; ) HANGUL SYLLABLE TYUNG
+D2B2;D2B2;1110 1172 11BD;D2B2;1110 1172 11BD; # (튲; 튲; 튲; 튲; 튲; ) HANGUL SYLLABLE TYUJ
+D2B3;D2B3;1110 1172 11BE;D2B3;1110 1172 11BE; # (튳; 튳; 튳; 튳; 튳; ) HANGUL SYLLABLE TYUC
+D2B4;D2B4;1110 1172 11BF;D2B4;1110 1172 11BF; # (튴; 튴; 튴; 튴; 튴; ) HANGUL SYLLABLE TYUK
+D2B5;D2B5;1110 1172 11C0;D2B5;1110 1172 11C0; # (튵; 튵; 튵; 튵; 튵; ) HANGUL SYLLABLE TYUT
+D2B6;D2B6;1110 1172 11C1;D2B6;1110 1172 11C1; # (튶; 튶; 튶; 튶; 튶; ) HANGUL SYLLABLE TYUP
+D2B7;D2B7;1110 1172 11C2;D2B7;1110 1172 11C2; # (튷; 튷; 튷; 튷; 튷; ) HANGUL SYLLABLE TYUH
+D2B8;D2B8;1110 1173;D2B8;1110 1173; # (트; 트; 트; 트; 트; ) HANGUL SYLLABLE TEU
+D2B9;D2B9;1110 1173 11A8;D2B9;1110 1173 11A8; # (특; 특; 특; 특; 특; ) HANGUL SYLLABLE TEUG
+D2BA;D2BA;1110 1173 11A9;D2BA;1110 1173 11A9; # (튺; 튺; 튺; 튺; 튺; ) HANGUL SYLLABLE TEUGG
+D2BB;D2BB;1110 1173 11AA;D2BB;1110 1173 11AA; # (튻; 튻; 튻; 튻; 튻; ) HANGUL SYLLABLE TEUGS
+D2BC;D2BC;1110 1173 11AB;D2BC;1110 1173 11AB; # (튼; 튼; 튼; 튼; 튼; ) HANGUL SYLLABLE TEUN
+D2BD;D2BD;1110 1173 11AC;D2BD;1110 1173 11AC; # (튽; 튽; 튽; 튽; 튽; ) HANGUL SYLLABLE TEUNJ
+D2BE;D2BE;1110 1173 11AD;D2BE;1110 1173 11AD; # (튾; 튾; 튾; 튾; 튾; ) HANGUL SYLLABLE TEUNH
+D2BF;D2BF;1110 1173 11AE;D2BF;1110 1173 11AE; # (튿; 튿; 튿; 튿; 튿; ) HANGUL SYLLABLE TEUD
+D2C0;D2C0;1110 1173 11AF;D2C0;1110 1173 11AF; # (틀; 틀; 틀; 틀; 틀; ) HANGUL SYLLABLE TEUL
+D2C1;D2C1;1110 1173 11B0;D2C1;1110 1173 11B0; # (틁; 틁; 틁; 틁; 틁; ) HANGUL SYLLABLE TEULG
+D2C2;D2C2;1110 1173 11B1;D2C2;1110 1173 11B1; # (틂; 틂; 틂; 틂; 틂; ) HANGUL SYLLABLE TEULM
+D2C3;D2C3;1110 1173 11B2;D2C3;1110 1173 11B2; # (틃; 틃; 틃; 틃; 틃; ) HANGUL SYLLABLE TEULB
+D2C4;D2C4;1110 1173 11B3;D2C4;1110 1173 11B3; # (틄; 틄; 틄; 틄; 틄; ) HANGUL SYLLABLE TEULS
+D2C5;D2C5;1110 1173 11B4;D2C5;1110 1173 11B4; # (틅; 틅; 틅; 틅; 틅; ) HANGUL SYLLABLE TEULT
+D2C6;D2C6;1110 1173 11B5;D2C6;1110 1173 11B5; # (틆; 틆; 틆; 틆; 틆; ) HANGUL SYLLABLE TEULP
+D2C7;D2C7;1110 1173 11B6;D2C7;1110 1173 11B6; # (틇; 틇; 틇; 틇; 틇; ) HANGUL SYLLABLE TEULH
+D2C8;D2C8;1110 1173 11B7;D2C8;1110 1173 11B7; # (틈; 틈; 틈; 틈; 틈; ) HANGUL SYLLABLE TEUM
+D2C9;D2C9;1110 1173 11B8;D2C9;1110 1173 11B8; # (틉; 틉; 틉; 틉; 틉; ) HANGUL SYLLABLE TEUB
+D2CA;D2CA;1110 1173 11B9;D2CA;1110 1173 11B9; # (틊; 틊; 틊; 틊; 틊; ) HANGUL SYLLABLE TEUBS
+D2CB;D2CB;1110 1173 11BA;D2CB;1110 1173 11BA; # (틋; 틋; 틋; 틋; 틋; ) HANGUL SYLLABLE TEUS
+D2CC;D2CC;1110 1173 11BB;D2CC;1110 1173 11BB; # (틌; 틌; 틌; 틌; 틌; ) HANGUL SYLLABLE TEUSS
+D2CD;D2CD;1110 1173 11BC;D2CD;1110 1173 11BC; # (틍; 틍; 틍; 틍; 틍; ) HANGUL SYLLABLE TEUNG
+D2CE;D2CE;1110 1173 11BD;D2CE;1110 1173 11BD; # (틎; 틎; 틎; 틎; 틎; ) HANGUL SYLLABLE TEUJ
+D2CF;D2CF;1110 1173 11BE;D2CF;1110 1173 11BE; # (틏; 틏; 틏; 틏; 틏; ) HANGUL SYLLABLE TEUC
+D2D0;D2D0;1110 1173 11BF;D2D0;1110 1173 11BF; # (틐; 틐; 틐; 틐; 틐; ) HANGUL SYLLABLE TEUK
+D2D1;D2D1;1110 1173 11C0;D2D1;1110 1173 11C0; # (틑; 틑; 틑; 틑; 틑; ) HANGUL SYLLABLE TEUT
+D2D2;D2D2;1110 1173 11C1;D2D2;1110 1173 11C1; # (틒; 틒; 틒; 틒; 틒; ) HANGUL SYLLABLE TEUP
+D2D3;D2D3;1110 1173 11C2;D2D3;1110 1173 11C2; # (틓; 틓; 틓; 틓; 틓; ) HANGUL SYLLABLE TEUH
+D2D4;D2D4;1110 1174;D2D4;1110 1174; # (틔; 틔; 틔; 틔; 틔; ) HANGUL SYLLABLE TYI
+D2D5;D2D5;1110 1174 11A8;D2D5;1110 1174 11A8; # (틕; 틕; 틕; 틕; 틕; ) HANGUL SYLLABLE TYIG
+D2D6;D2D6;1110 1174 11A9;D2D6;1110 1174 11A9; # (틖; 틖; 틖; 틖; 틖; ) HANGUL SYLLABLE TYIGG
+D2D7;D2D7;1110 1174 11AA;D2D7;1110 1174 11AA; # (틗; 틗; 틗; 틗; 틗; ) HANGUL SYLLABLE TYIGS
+D2D8;D2D8;1110 1174 11AB;D2D8;1110 1174 11AB; # (틘; 틘; 틘; 틘; 틘; ) HANGUL SYLLABLE TYIN
+D2D9;D2D9;1110 1174 11AC;D2D9;1110 1174 11AC; # (틙; 틙; 틙; 틙; 틙; ) HANGUL SYLLABLE TYINJ
+D2DA;D2DA;1110 1174 11AD;D2DA;1110 1174 11AD; # (틚; 틚; 틚; 틚; 틚; ) HANGUL SYLLABLE TYINH
+D2DB;D2DB;1110 1174 11AE;D2DB;1110 1174 11AE; # (틛; 틛; 틛; 틛; 틛; ) HANGUL SYLLABLE TYID
+D2DC;D2DC;1110 1174 11AF;D2DC;1110 1174 11AF; # (틜; 틜; 틜; 틜; 틜; ) HANGUL SYLLABLE TYIL
+D2DD;D2DD;1110 1174 11B0;D2DD;1110 1174 11B0; # (틝; 틝; 틝; 틝; 틝; ) HANGUL SYLLABLE TYILG
+D2DE;D2DE;1110 1174 11B1;D2DE;1110 1174 11B1; # (틞; 틞; 틞; 틞; 틞; ) HANGUL SYLLABLE TYILM
+D2DF;D2DF;1110 1174 11B2;D2DF;1110 1174 11B2; # (틟; 틟; 틟; 틟; 틟; ) HANGUL SYLLABLE TYILB
+D2E0;D2E0;1110 1174 11B3;D2E0;1110 1174 11B3; # (틠; 틠; 틠; 틠; 틠; ) HANGUL SYLLABLE TYILS
+D2E1;D2E1;1110 1174 11B4;D2E1;1110 1174 11B4; # (틡; 틡; 틡; 틡; 틡; ) HANGUL SYLLABLE TYILT
+D2E2;D2E2;1110 1174 11B5;D2E2;1110 1174 11B5; # (틢; 틢; 틢; 틢; 틢; ) HANGUL SYLLABLE TYILP
+D2E3;D2E3;1110 1174 11B6;D2E3;1110 1174 11B6; # (틣; 틣; 틣; 틣; 틣; ) HANGUL SYLLABLE TYILH
+D2E4;D2E4;1110 1174 11B7;D2E4;1110 1174 11B7; # (틤; 틤; 틤; 틤; 틤; ) HANGUL SYLLABLE TYIM
+D2E5;D2E5;1110 1174 11B8;D2E5;1110 1174 11B8; # (틥; 틥; 틥; 틥; 틥; ) HANGUL SYLLABLE TYIB
+D2E6;D2E6;1110 1174 11B9;D2E6;1110 1174 11B9; # (틦; 틦; 틦; 틦; 틦; ) HANGUL SYLLABLE TYIBS
+D2E7;D2E7;1110 1174 11BA;D2E7;1110 1174 11BA; # (틧; 틧; 틧; 틧; 틧; ) HANGUL SYLLABLE TYIS
+D2E8;D2E8;1110 1174 11BB;D2E8;1110 1174 11BB; # (틨; 틨; 틨; 틨; 틨; ) HANGUL SYLLABLE TYISS
+D2E9;D2E9;1110 1174 11BC;D2E9;1110 1174 11BC; # (틩; 틩; 틩; 틩; 틩; ) HANGUL SYLLABLE TYING
+D2EA;D2EA;1110 1174 11BD;D2EA;1110 1174 11BD; # (틪; 틪; 틪; 틪; 틪; ) HANGUL SYLLABLE TYIJ
+D2EB;D2EB;1110 1174 11BE;D2EB;1110 1174 11BE; # (틫; 틫; 틫; 틫; 틫; ) HANGUL SYLLABLE TYIC
+D2EC;D2EC;1110 1174 11BF;D2EC;1110 1174 11BF; # (틬; 틬; 틬; 틬; 틬; ) HANGUL SYLLABLE TYIK
+D2ED;D2ED;1110 1174 11C0;D2ED;1110 1174 11C0; # (틭; 틭; 틭; 틭; 틭; ) HANGUL SYLLABLE TYIT
+D2EE;D2EE;1110 1174 11C1;D2EE;1110 1174 11C1; # (틮; 틮; 틮; 틮; 틮; ) HANGUL SYLLABLE TYIP
+D2EF;D2EF;1110 1174 11C2;D2EF;1110 1174 11C2; # (틯; 틯; 틯; 틯; 틯; ) HANGUL SYLLABLE TYIH
+D2F0;D2F0;1110 1175;D2F0;1110 1175; # (티; 티; 티; 티; 티; ) HANGUL SYLLABLE TI
+D2F1;D2F1;1110 1175 11A8;D2F1;1110 1175 11A8; # (틱; 틱; 틱; 틱; 틱; ) HANGUL SYLLABLE TIG
+D2F2;D2F2;1110 1175 11A9;D2F2;1110 1175 11A9; # (틲; 틲; 틲; 틲; 틲; ) HANGUL SYLLABLE TIGG
+D2F3;D2F3;1110 1175 11AA;D2F3;1110 1175 11AA; # (틳; 틳; 틳; 틳; 틳; ) HANGUL SYLLABLE TIGS
+D2F4;D2F4;1110 1175 11AB;D2F4;1110 1175 11AB; # (틴; 틴; 틴; 틴; 틴; ) HANGUL SYLLABLE TIN
+D2F5;D2F5;1110 1175 11AC;D2F5;1110 1175 11AC; # (틵; 틵; 틵; 틵; 틵; ) HANGUL SYLLABLE TINJ
+D2F6;D2F6;1110 1175 11AD;D2F6;1110 1175 11AD; # (틶; 틶; 틶; 틶; 틶; ) HANGUL SYLLABLE TINH
+D2F7;D2F7;1110 1175 11AE;D2F7;1110 1175 11AE; # (틷; 틷; 틷; 틷; 틷; ) HANGUL SYLLABLE TID
+D2F8;D2F8;1110 1175 11AF;D2F8;1110 1175 11AF; # (틸; 틸; 틸; 틸; 틸; ) HANGUL SYLLABLE TIL
+D2F9;D2F9;1110 1175 11B0;D2F9;1110 1175 11B0; # (틹; 틹; 틹; 틹; 틹; ) HANGUL SYLLABLE TILG
+D2FA;D2FA;1110 1175 11B1;D2FA;1110 1175 11B1; # (틺; 틺; 틺; 틺; 틺; ) HANGUL SYLLABLE TILM
+D2FB;D2FB;1110 1175 11B2;D2FB;1110 1175 11B2; # (틻; 틻; 틻; 틻; 틻; ) HANGUL SYLLABLE TILB
+D2FC;D2FC;1110 1175 11B3;D2FC;1110 1175 11B3; # (틼; 틼; 틼; 틼; 틼; ) HANGUL SYLLABLE TILS
+D2FD;D2FD;1110 1175 11B4;D2FD;1110 1175 11B4; # (틽; 틽; 틽; 틽; 틽; ) HANGUL SYLLABLE TILT
+D2FE;D2FE;1110 1175 11B5;D2FE;1110 1175 11B5; # (틾; 틾; 틾; 틾; 틾; ) HANGUL SYLLABLE TILP
+D2FF;D2FF;1110 1175 11B6;D2FF;1110 1175 11B6; # (틿; 틿; 틿; 틿; 틿; ) HANGUL SYLLABLE TILH
+D300;D300;1110 1175 11B7;D300;1110 1175 11B7; # (팀; 팀; 팀; 팀; 팀; ) HANGUL SYLLABLE TIM
+D301;D301;1110 1175 11B8;D301;1110 1175 11B8; # (팁; 팁; 팁; 팁; 팁; ) HANGUL SYLLABLE TIB
+D302;D302;1110 1175 11B9;D302;1110 1175 11B9; # (팂; 팂; 팂; 팂; 팂; ) HANGUL SYLLABLE TIBS
+D303;D303;1110 1175 11BA;D303;1110 1175 11BA; # (팃; 팃; 팃; 팃; 팃; ) HANGUL SYLLABLE TIS
+D304;D304;1110 1175 11BB;D304;1110 1175 11BB; # (팄; 팄; 팄; 팄; 팄; ) HANGUL SYLLABLE TISS
+D305;D305;1110 1175 11BC;D305;1110 1175 11BC; # (팅; 팅; 팅; 팅; 팅; ) HANGUL SYLLABLE TING
+D306;D306;1110 1175 11BD;D306;1110 1175 11BD; # (팆; 팆; 팆; 팆; 팆; ) HANGUL SYLLABLE TIJ
+D307;D307;1110 1175 11BE;D307;1110 1175 11BE; # (팇; 팇; 팇; 팇; 팇; ) HANGUL SYLLABLE TIC
+D308;D308;1110 1175 11BF;D308;1110 1175 11BF; # (팈; 팈; 팈; 팈; 팈; ) HANGUL SYLLABLE TIK
+D309;D309;1110 1175 11C0;D309;1110 1175 11C0; # (팉; 팉; 팉; 팉; 팉; ) HANGUL SYLLABLE TIT
+D30A;D30A;1110 1175 11C1;D30A;1110 1175 11C1; # (팊; 팊; 팊; 팊; 팊; ) HANGUL SYLLABLE TIP
+D30B;D30B;1110 1175 11C2;D30B;1110 1175 11C2; # (팋; 팋; 팋; 팋; 팋; ) HANGUL SYLLABLE TIH
+D30C;D30C;1111 1161;D30C;1111 1161; # (파; 파; 파; 파; 파; ) HANGUL SYLLABLE PA
+D30D;D30D;1111 1161 11A8;D30D;1111 1161 11A8; # (팍; 팍; 팍; 팍; 팍; ) HANGUL SYLLABLE PAG
+D30E;D30E;1111 1161 11A9;D30E;1111 1161 11A9; # (팎; 팎; 팎; 팎; 팎; ) HANGUL SYLLABLE PAGG
+D30F;D30F;1111 1161 11AA;D30F;1111 1161 11AA; # (팏; 팏; 팏; 팏; 팏; ) HANGUL SYLLABLE PAGS
+D310;D310;1111 1161 11AB;D310;1111 1161 11AB; # (판; 판; 판; 판; 판; ) HANGUL SYLLABLE PAN
+D311;D311;1111 1161 11AC;D311;1111 1161 11AC; # (팑; 팑; 팑; 팑; 팑; ) HANGUL SYLLABLE PANJ
+D312;D312;1111 1161 11AD;D312;1111 1161 11AD; # (팒; 팒; 팒; 팒; 팒; ) HANGUL SYLLABLE PANH
+D313;D313;1111 1161 11AE;D313;1111 1161 11AE; # (팓; 팓; 팓; 팓; 팓; ) HANGUL SYLLABLE PAD
+D314;D314;1111 1161 11AF;D314;1111 1161 11AF; # (팔; 팔; 팔; 팔; 팔; ) HANGUL SYLLABLE PAL
+D315;D315;1111 1161 11B0;D315;1111 1161 11B0; # (팕; 팕; 팕; 팕; 팕; ) HANGUL SYLLABLE PALG
+D316;D316;1111 1161 11B1;D316;1111 1161 11B1; # (팖; 팖; 팖; 팖; 팖; ) HANGUL SYLLABLE PALM
+D317;D317;1111 1161 11B2;D317;1111 1161 11B2; # (팗; 팗; 팗; 팗; 팗; ) HANGUL SYLLABLE PALB
+D318;D318;1111 1161 11B3;D318;1111 1161 11B3; # (팘; 팘; 팘; 팘; 팘; ) HANGUL SYLLABLE PALS
+D319;D319;1111 1161 11B4;D319;1111 1161 11B4; # (팙; 팙; 팙; 팙; 팙; ) HANGUL SYLLABLE PALT
+D31A;D31A;1111 1161 11B5;D31A;1111 1161 11B5; # (팚; 팚; 팚; 팚; 팚; ) HANGUL SYLLABLE PALP
+D31B;D31B;1111 1161 11B6;D31B;1111 1161 11B6; # (팛; 팛; 팛; 팛; 팛; ) HANGUL SYLLABLE PALH
+D31C;D31C;1111 1161 11B7;D31C;1111 1161 11B7; # (팜; 팜; 팜; 팜; 팜; ) HANGUL SYLLABLE PAM
+D31D;D31D;1111 1161 11B8;D31D;1111 1161 11B8; # (팝; 팝; 팝; 팝; 팝; ) HANGUL SYLLABLE PAB
+D31E;D31E;1111 1161 11B9;D31E;1111 1161 11B9; # (팞; 팞; 팞; 팞; 팞; ) HANGUL SYLLABLE PABS
+D31F;D31F;1111 1161 11BA;D31F;1111 1161 11BA; # (팟; 팟; 팟; 팟; 팟; ) HANGUL SYLLABLE PAS
+D320;D320;1111 1161 11BB;D320;1111 1161 11BB; # (팠; 팠; 팠; 팠; 팠; ) HANGUL SYLLABLE PASS
+D321;D321;1111 1161 11BC;D321;1111 1161 11BC; # (팡; 팡; 팡; 팡; 팡; ) HANGUL SYLLABLE PANG
+D322;D322;1111 1161 11BD;D322;1111 1161 11BD; # (팢; 팢; 팢; 팢; 팢; ) HANGUL SYLLABLE PAJ
+D323;D323;1111 1161 11BE;D323;1111 1161 11BE; # (팣; 팣; 팣; 팣; 팣; ) HANGUL SYLLABLE PAC
+D324;D324;1111 1161 11BF;D324;1111 1161 11BF; # (팤; 팤; 팤; 팤; 팤; ) HANGUL SYLLABLE PAK
+D325;D325;1111 1161 11C0;D325;1111 1161 11C0; # (팥; 팥; 팥; 팥; 팥; ) HANGUL SYLLABLE PAT
+D326;D326;1111 1161 11C1;D326;1111 1161 11C1; # (팦; 팦; 팦; 팦; 팦; ) HANGUL SYLLABLE PAP
+D327;D327;1111 1161 11C2;D327;1111 1161 11C2; # (팧; 팧; 팧; 팧; 팧; ) HANGUL SYLLABLE PAH
+D328;D328;1111 1162;D328;1111 1162; # (패; 패; 패; 패; 패; ) HANGUL SYLLABLE PAE
+D329;D329;1111 1162 11A8;D329;1111 1162 11A8; # (팩; 팩; 팩; 팩; 팩; ) HANGUL SYLLABLE PAEG
+D32A;D32A;1111 1162 11A9;D32A;1111 1162 11A9; # (팪; 팪; 팪; 팪; 팪; ) HANGUL SYLLABLE PAEGG
+D32B;D32B;1111 1162 11AA;D32B;1111 1162 11AA; # (팫; 팫; 팫; 팫; 팫; ) HANGUL SYLLABLE PAEGS
+D32C;D32C;1111 1162 11AB;D32C;1111 1162 11AB; # (팬; 팬; 팬; 팬; 팬; ) HANGUL SYLLABLE PAEN
+D32D;D32D;1111 1162 11AC;D32D;1111 1162 11AC; # (팭; 팭; 팭; 팭; 팭; ) HANGUL SYLLABLE PAENJ
+D32E;D32E;1111 1162 11AD;D32E;1111 1162 11AD; # (팮; 팮; 팮; 팮; 팮; ) HANGUL SYLLABLE PAENH
+D32F;D32F;1111 1162 11AE;D32F;1111 1162 11AE; # (팯; 팯; 팯; 팯; 팯; ) HANGUL SYLLABLE PAED
+D330;D330;1111 1162 11AF;D330;1111 1162 11AF; # (팰; 팰; 팰; 팰; 팰; ) HANGUL SYLLABLE PAEL
+D331;D331;1111 1162 11B0;D331;1111 1162 11B0; # (팱; 팱; 팱; 팱; 팱; ) HANGUL SYLLABLE PAELG
+D332;D332;1111 1162 11B1;D332;1111 1162 11B1; # (팲; 팲; 팲; 팲; 팲; ) HANGUL SYLLABLE PAELM
+D333;D333;1111 1162 11B2;D333;1111 1162 11B2; # (팳; 팳; 팳; 팳; 팳; ) HANGUL SYLLABLE PAELB
+D334;D334;1111 1162 11B3;D334;1111 1162 11B3; # (팴; 팴; 팴; 팴; 팴; ) HANGUL SYLLABLE PAELS
+D335;D335;1111 1162 11B4;D335;1111 1162 11B4; # (팵; 팵; 팵; 팵; 팵; ) HANGUL SYLLABLE PAELT
+D336;D336;1111 1162 11B5;D336;1111 1162 11B5; # (팶; 팶; 팶; 팶; 팶; ) HANGUL SYLLABLE PAELP
+D337;D337;1111 1162 11B6;D337;1111 1162 11B6; # (팷; 팷; 팷; 팷; 팷; ) HANGUL SYLLABLE PAELH
+D338;D338;1111 1162 11B7;D338;1111 1162 11B7; # (팸; 팸; 팸; 팸; 팸; ) HANGUL SYLLABLE PAEM
+D339;D339;1111 1162 11B8;D339;1111 1162 11B8; # (팹; 팹; 팹; 팹; 팹; ) HANGUL SYLLABLE PAEB
+D33A;D33A;1111 1162 11B9;D33A;1111 1162 11B9; # (팺; 팺; 팺; 팺; 팺; ) HANGUL SYLLABLE PAEBS
+D33B;D33B;1111 1162 11BA;D33B;1111 1162 11BA; # (팻; 팻; 팻; 팻; 팻; ) HANGUL SYLLABLE PAES
+D33C;D33C;1111 1162 11BB;D33C;1111 1162 11BB; # (팼; 팼; 팼; 팼; 팼; ) HANGUL SYLLABLE PAESS
+D33D;D33D;1111 1162 11BC;D33D;1111 1162 11BC; # (팽; 팽; 팽; 팽; 팽; ) HANGUL SYLLABLE PAENG
+D33E;D33E;1111 1162 11BD;D33E;1111 1162 11BD; # (팾; 팾; 팾; 팾; 팾; ) HANGUL SYLLABLE PAEJ
+D33F;D33F;1111 1162 11BE;D33F;1111 1162 11BE; # (팿; 팿; 팿; 팿; 팿; ) HANGUL SYLLABLE PAEC
+D340;D340;1111 1162 11BF;D340;1111 1162 11BF; # (퍀; 퍀; 퍀; 퍀; 퍀; ) HANGUL SYLLABLE PAEK
+D341;D341;1111 1162 11C0;D341;1111 1162 11C0; # (퍁; 퍁; 퍁; 퍁; 퍁; ) HANGUL SYLLABLE PAET
+D342;D342;1111 1162 11C1;D342;1111 1162 11C1; # (퍂; 퍂; 퍂; 퍂; 퍂; ) HANGUL SYLLABLE PAEP
+D343;D343;1111 1162 11C2;D343;1111 1162 11C2; # (퍃; 퍃; 퍃; 퍃; 퍃; ) HANGUL SYLLABLE PAEH
+D344;D344;1111 1163;D344;1111 1163; # (퍄; 퍄; 퍄; 퍄; 퍄; ) HANGUL SYLLABLE PYA
+D345;D345;1111 1163 11A8;D345;1111 1163 11A8; # (퍅; 퍅; 퍅; 퍅; 퍅; ) HANGUL SYLLABLE PYAG
+D346;D346;1111 1163 11A9;D346;1111 1163 11A9; # (퍆; 퍆; 퍆; 퍆; 퍆; ) HANGUL SYLLABLE PYAGG
+D347;D347;1111 1163 11AA;D347;1111 1163 11AA; # (퍇; 퍇; 퍇; 퍇; 퍇; ) HANGUL SYLLABLE PYAGS
+D348;D348;1111 1163 11AB;D348;1111 1163 11AB; # (퍈; 퍈; 퍈; 퍈; 퍈; ) HANGUL SYLLABLE PYAN
+D349;D349;1111 1163 11AC;D349;1111 1163 11AC; # (퍉; 퍉; 퍉; 퍉; 퍉; ) HANGUL SYLLABLE PYANJ
+D34A;D34A;1111 1163 11AD;D34A;1111 1163 11AD; # (퍊; 퍊; 퍊; 퍊; 퍊; ) HANGUL SYLLABLE PYANH
+D34B;D34B;1111 1163 11AE;D34B;1111 1163 11AE; # (퍋; 퍋; 퍋; 퍋; 퍋; ) HANGUL SYLLABLE PYAD
+D34C;D34C;1111 1163 11AF;D34C;1111 1163 11AF; # (퍌; 퍌; 퍌; 퍌; 퍌; ) HANGUL SYLLABLE PYAL
+D34D;D34D;1111 1163 11B0;D34D;1111 1163 11B0; # (퍍; 퍍; 퍍; 퍍; 퍍; ) HANGUL SYLLABLE PYALG
+D34E;D34E;1111 1163 11B1;D34E;1111 1163 11B1; # (퍎; 퍎; 퍎; 퍎; 퍎; ) HANGUL SYLLABLE PYALM
+D34F;D34F;1111 1163 11B2;D34F;1111 1163 11B2; # (퍏; 퍏; 퍏; 퍏; 퍏; ) HANGUL SYLLABLE PYALB
+D350;D350;1111 1163 11B3;D350;1111 1163 11B3; # (퍐; 퍐; 퍐; 퍐; 퍐; ) HANGUL SYLLABLE PYALS
+D351;D351;1111 1163 11B4;D351;1111 1163 11B4; # (퍑; 퍑; 퍑; 퍑; 퍑; ) HANGUL SYLLABLE PYALT
+D352;D352;1111 1163 11B5;D352;1111 1163 11B5; # (퍒; 퍒; 퍒; 퍒; 퍒; ) HANGUL SYLLABLE PYALP
+D353;D353;1111 1163 11B6;D353;1111 1163 11B6; # (퍓; 퍓; 퍓; 퍓; 퍓; ) HANGUL SYLLABLE PYALH
+D354;D354;1111 1163 11B7;D354;1111 1163 11B7; # (퍔; 퍔; 퍔; 퍔; 퍔; ) HANGUL SYLLABLE PYAM
+D355;D355;1111 1163 11B8;D355;1111 1163 11B8; # (퍕; 퍕; 퍕; 퍕; 퍕; ) HANGUL SYLLABLE PYAB
+D356;D356;1111 1163 11B9;D356;1111 1163 11B9; # (퍖; 퍖; 퍖; 퍖; 퍖; ) HANGUL SYLLABLE PYABS
+D357;D357;1111 1163 11BA;D357;1111 1163 11BA; # (퍗; 퍗; 퍗; 퍗; 퍗; ) HANGUL SYLLABLE PYAS
+D358;D358;1111 1163 11BB;D358;1111 1163 11BB; # (퍘; 퍘; 퍘; 퍘; 퍘; ) HANGUL SYLLABLE PYASS
+D359;D359;1111 1163 11BC;D359;1111 1163 11BC; # (퍙; 퍙; 퍙; 퍙; 퍙; ) HANGUL SYLLABLE PYANG
+D35A;D35A;1111 1163 11BD;D35A;1111 1163 11BD; # (퍚; 퍚; 퍚; 퍚; 퍚; ) HANGUL SYLLABLE PYAJ
+D35B;D35B;1111 1163 11BE;D35B;1111 1163 11BE; # (퍛; 퍛; 퍛; 퍛; 퍛; ) HANGUL SYLLABLE PYAC
+D35C;D35C;1111 1163 11BF;D35C;1111 1163 11BF; # (퍜; 퍜; 퍜; 퍜; 퍜; ) HANGUL SYLLABLE PYAK
+D35D;D35D;1111 1163 11C0;D35D;1111 1163 11C0; # (퍝; 퍝; 퍝; 퍝; 퍝; ) HANGUL SYLLABLE PYAT
+D35E;D35E;1111 1163 11C1;D35E;1111 1163 11C1; # (퍞; 퍞; 퍞; 퍞; 퍞; ) HANGUL SYLLABLE PYAP
+D35F;D35F;1111 1163 11C2;D35F;1111 1163 11C2; # (퍟; 퍟; 퍟; 퍟; 퍟; ) HANGUL SYLLABLE PYAH
+D360;D360;1111 1164;D360;1111 1164; # (퍠; 퍠; 퍠; 퍠; 퍠; ) HANGUL SYLLABLE PYAE
+D361;D361;1111 1164 11A8;D361;1111 1164 11A8; # (퍡; 퍡; 퍡; 퍡; 퍡; ) HANGUL SYLLABLE PYAEG
+D362;D362;1111 1164 11A9;D362;1111 1164 11A9; # (퍢; 퍢; 퍢; 퍢; 퍢; ) HANGUL SYLLABLE PYAEGG
+D363;D363;1111 1164 11AA;D363;1111 1164 11AA; # (퍣; 퍣; 퍣; 퍣; 퍣; ) HANGUL SYLLABLE PYAEGS
+D364;D364;1111 1164 11AB;D364;1111 1164 11AB; # (퍤; 퍤; 퍤; 퍤; 퍤; ) HANGUL SYLLABLE PYAEN
+D365;D365;1111 1164 11AC;D365;1111 1164 11AC; # (퍥; 퍥; 퍥; 퍥; 퍥; ) HANGUL SYLLABLE PYAENJ
+D366;D366;1111 1164 11AD;D366;1111 1164 11AD; # (퍦; 퍦; 퍦; 퍦; 퍦; ) HANGUL SYLLABLE PYAENH
+D367;D367;1111 1164 11AE;D367;1111 1164 11AE; # (퍧; 퍧; 퍧; 퍧; 퍧; ) HANGUL SYLLABLE PYAED
+D368;D368;1111 1164 11AF;D368;1111 1164 11AF; # (퍨; 퍨; 퍨; 퍨; 퍨; ) HANGUL SYLLABLE PYAEL
+D369;D369;1111 1164 11B0;D369;1111 1164 11B0; # (퍩; 퍩; 퍩; 퍩; 퍩; ) HANGUL SYLLABLE PYAELG
+D36A;D36A;1111 1164 11B1;D36A;1111 1164 11B1; # (퍪; 퍪; 퍪; 퍪; 퍪; ) HANGUL SYLLABLE PYAELM
+D36B;D36B;1111 1164 11B2;D36B;1111 1164 11B2; # (퍫; 퍫; 퍫; 퍫; 퍫; ) HANGUL SYLLABLE PYAELB
+D36C;D36C;1111 1164 11B3;D36C;1111 1164 11B3; # (퍬; 퍬; 퍬; 퍬; 퍬; ) HANGUL SYLLABLE PYAELS
+D36D;D36D;1111 1164 11B4;D36D;1111 1164 11B4; # (퍭; 퍭; 퍭; 퍭; 퍭; ) HANGUL SYLLABLE PYAELT
+D36E;D36E;1111 1164 11B5;D36E;1111 1164 11B5; # (퍮; 퍮; 퍮; 퍮; 퍮; ) HANGUL SYLLABLE PYAELP
+D36F;D36F;1111 1164 11B6;D36F;1111 1164 11B6; # (퍯; 퍯; 퍯; 퍯; 퍯; ) HANGUL SYLLABLE PYAELH
+D370;D370;1111 1164 11B7;D370;1111 1164 11B7; # (퍰; 퍰; 퍰; 퍰; 퍰; ) HANGUL SYLLABLE PYAEM
+D371;D371;1111 1164 11B8;D371;1111 1164 11B8; # (퍱; 퍱; 퍱; 퍱; 퍱; ) HANGUL SYLLABLE PYAEB
+D372;D372;1111 1164 11B9;D372;1111 1164 11B9; # (퍲; 퍲; 퍲; 퍲; 퍲; ) HANGUL SYLLABLE PYAEBS
+D373;D373;1111 1164 11BA;D373;1111 1164 11BA; # (퍳; 퍳; 퍳; 퍳; 퍳; ) HANGUL SYLLABLE PYAES
+D374;D374;1111 1164 11BB;D374;1111 1164 11BB; # (퍴; 퍴; 퍴; 퍴; 퍴; ) HANGUL SYLLABLE PYAESS
+D375;D375;1111 1164 11BC;D375;1111 1164 11BC; # (퍵; 퍵; 퍵; 퍵; 퍵; ) HANGUL SYLLABLE PYAENG
+D376;D376;1111 1164 11BD;D376;1111 1164 11BD; # (퍶; 퍶; 퍶; 퍶; 퍶; ) HANGUL SYLLABLE PYAEJ
+D377;D377;1111 1164 11BE;D377;1111 1164 11BE; # (퍷; 퍷; 퍷; 퍷; 퍷; ) HANGUL SYLLABLE PYAEC
+D378;D378;1111 1164 11BF;D378;1111 1164 11BF; # (퍸; 퍸; 퍸; 퍸; 퍸; ) HANGUL SYLLABLE PYAEK
+D379;D379;1111 1164 11C0;D379;1111 1164 11C0; # (퍹; 퍹; 퍹; 퍹; 퍹; ) HANGUL SYLLABLE PYAET
+D37A;D37A;1111 1164 11C1;D37A;1111 1164 11C1; # (퍺; 퍺; 퍺; 퍺; 퍺; ) HANGUL SYLLABLE PYAEP
+D37B;D37B;1111 1164 11C2;D37B;1111 1164 11C2; # (퍻; 퍻; 퍻; 퍻; 퍻; ) HANGUL SYLLABLE PYAEH
+D37C;D37C;1111 1165;D37C;1111 1165; # (퍼; 퍼; 퍼; 퍼; 퍼; ) HANGUL SYLLABLE PEO
+D37D;D37D;1111 1165 11A8;D37D;1111 1165 11A8; # (퍽; 퍽; 퍽; 퍽; 퍽; ) HANGUL SYLLABLE PEOG
+D37E;D37E;1111 1165 11A9;D37E;1111 1165 11A9; # (퍾; 퍾; 퍾; 퍾; 퍾; ) HANGUL SYLLABLE PEOGG
+D37F;D37F;1111 1165 11AA;D37F;1111 1165 11AA; # (퍿; 퍿; 퍿; 퍿; 퍿; ) HANGUL SYLLABLE PEOGS
+D380;D380;1111 1165 11AB;D380;1111 1165 11AB; # (펀; 펀; 펀; 펀; 펀; ) HANGUL SYLLABLE PEON
+D381;D381;1111 1165 11AC;D381;1111 1165 11AC; # (펁; 펁; 펁; 펁; 펁; ) HANGUL SYLLABLE PEONJ
+D382;D382;1111 1165 11AD;D382;1111 1165 11AD; # (펂; 펂; 펂; 펂; 펂; ) HANGUL SYLLABLE PEONH
+D383;D383;1111 1165 11AE;D383;1111 1165 11AE; # (펃; 펃; 펃; 펃; 펃; ) HANGUL SYLLABLE PEOD
+D384;D384;1111 1165 11AF;D384;1111 1165 11AF; # (펄; 펄; 펄; 펄; 펄; ) HANGUL SYLLABLE PEOL
+D385;D385;1111 1165 11B0;D385;1111 1165 11B0; # (펅; 펅; 펅; 펅; 펅; ) HANGUL SYLLABLE PEOLG
+D386;D386;1111 1165 11B1;D386;1111 1165 11B1; # (펆; 펆; 펆; 펆; 펆; ) HANGUL SYLLABLE PEOLM
+D387;D387;1111 1165 11B2;D387;1111 1165 11B2; # (펇; 펇; 펇; 펇; 펇; ) HANGUL SYLLABLE PEOLB
+D388;D388;1111 1165 11B3;D388;1111 1165 11B3; # (펈; 펈; 펈; 펈; 펈; ) HANGUL SYLLABLE PEOLS
+D389;D389;1111 1165 11B4;D389;1111 1165 11B4; # (펉; 펉; 펉; 펉; 펉; ) HANGUL SYLLABLE PEOLT
+D38A;D38A;1111 1165 11B5;D38A;1111 1165 11B5; # (펊; 펊; 펊; 펊; 펊; ) HANGUL SYLLABLE PEOLP
+D38B;D38B;1111 1165 11B6;D38B;1111 1165 11B6; # (펋; 펋; 펋; 펋; 펋; ) HANGUL SYLLABLE PEOLH
+D38C;D38C;1111 1165 11B7;D38C;1111 1165 11B7; # (펌; 펌; 펌; 펌; 펌; ) HANGUL SYLLABLE PEOM
+D38D;D38D;1111 1165 11B8;D38D;1111 1165 11B8; # (펍; 펍; 펍; 펍; 펍; ) HANGUL SYLLABLE PEOB
+D38E;D38E;1111 1165 11B9;D38E;1111 1165 11B9; # (펎; 펎; 펎; 펎; 펎; ) HANGUL SYLLABLE PEOBS
+D38F;D38F;1111 1165 11BA;D38F;1111 1165 11BA; # (펏; 펏; 펏; 펏; 펏; ) HANGUL SYLLABLE PEOS
+D390;D390;1111 1165 11BB;D390;1111 1165 11BB; # (펐; 펐; 펐; 펐; 펐; ) HANGUL SYLLABLE PEOSS
+D391;D391;1111 1165 11BC;D391;1111 1165 11BC; # (펑; 펑; 펑; 펑; 펑; ) HANGUL SYLLABLE PEONG
+D392;D392;1111 1165 11BD;D392;1111 1165 11BD; # (펒; 펒; 펒; 펒; 펒; ) HANGUL SYLLABLE PEOJ
+D393;D393;1111 1165 11BE;D393;1111 1165 11BE; # (펓; 펓; 펓; 펓; 펓; ) HANGUL SYLLABLE PEOC
+D394;D394;1111 1165 11BF;D394;1111 1165 11BF; # (펔; 펔; 펔; 펔; 펔; ) HANGUL SYLLABLE PEOK
+D395;D395;1111 1165 11C0;D395;1111 1165 11C0; # (펕; 펕; 펕; 펕; 펕; ) HANGUL SYLLABLE PEOT
+D396;D396;1111 1165 11C1;D396;1111 1165 11C1; # (펖; 펖; 펖; 펖; 펖; ) HANGUL SYLLABLE PEOP
+D397;D397;1111 1165 11C2;D397;1111 1165 11C2; # (펗; 펗; 펗; 펗; 펗; ) HANGUL SYLLABLE PEOH
+D398;D398;1111 1166;D398;1111 1166; # (페; 페; 페; 페; 페; ) HANGUL SYLLABLE PE
+D399;D399;1111 1166 11A8;D399;1111 1166 11A8; # (펙; 펙; 펙; 펙; 펙; ) HANGUL SYLLABLE PEG
+D39A;D39A;1111 1166 11A9;D39A;1111 1166 11A9; # (펚; 펚; 펚; 펚; 펚; ) HANGUL SYLLABLE PEGG
+D39B;D39B;1111 1166 11AA;D39B;1111 1166 11AA; # (펛; 펛; 펛; 펛; 펛; ) HANGUL SYLLABLE PEGS
+D39C;D39C;1111 1166 11AB;D39C;1111 1166 11AB; # (펜; 펜; 펜; 펜; 펜; ) HANGUL SYLLABLE PEN
+D39D;D39D;1111 1166 11AC;D39D;1111 1166 11AC; # (펝; 펝; 펝; 펝; 펝; ) HANGUL SYLLABLE PENJ
+D39E;D39E;1111 1166 11AD;D39E;1111 1166 11AD; # (펞; 펞; 펞; 펞; 펞; ) HANGUL SYLLABLE PENH
+D39F;D39F;1111 1166 11AE;D39F;1111 1166 11AE; # (펟; 펟; 펟; 펟; 펟; ) HANGUL SYLLABLE PED
+D3A0;D3A0;1111 1166 11AF;D3A0;1111 1166 11AF; # (펠; 펠; 펠; 펠; 펠; ) HANGUL SYLLABLE PEL
+D3A1;D3A1;1111 1166 11B0;D3A1;1111 1166 11B0; # (펡; 펡; 펡; 펡; 펡; ) HANGUL SYLLABLE PELG
+D3A2;D3A2;1111 1166 11B1;D3A2;1111 1166 11B1; # (펢; 펢; 펢; 펢; 펢; ) HANGUL SYLLABLE PELM
+D3A3;D3A3;1111 1166 11B2;D3A3;1111 1166 11B2; # (펣; 펣; 펣; 펣; 펣; ) HANGUL SYLLABLE PELB
+D3A4;D3A4;1111 1166 11B3;D3A4;1111 1166 11B3; # (펤; 펤; 펤; 펤; 펤; ) HANGUL SYLLABLE PELS
+D3A5;D3A5;1111 1166 11B4;D3A5;1111 1166 11B4; # (펥; 펥; 펥; 펥; 펥; ) HANGUL SYLLABLE PELT
+D3A6;D3A6;1111 1166 11B5;D3A6;1111 1166 11B5; # (펦; 펦; 펦; 펦; 펦; ) HANGUL SYLLABLE PELP
+D3A7;D3A7;1111 1166 11B6;D3A7;1111 1166 11B6; # (펧; 펧; 펧; 펧; 펧; ) HANGUL SYLLABLE PELH
+D3A8;D3A8;1111 1166 11B7;D3A8;1111 1166 11B7; # (펨; 펨; 펨; 펨; 펨; ) HANGUL SYLLABLE PEM
+D3A9;D3A9;1111 1166 11B8;D3A9;1111 1166 11B8; # (펩; 펩; 펩; 펩; 펩; ) HANGUL SYLLABLE PEB
+D3AA;D3AA;1111 1166 11B9;D3AA;1111 1166 11B9; # (펪; 펪; 펪; 펪; 펪; ) HANGUL SYLLABLE PEBS
+D3AB;D3AB;1111 1166 11BA;D3AB;1111 1166 11BA; # (펫; 펫; 펫; 펫; 펫; ) HANGUL SYLLABLE PES
+D3AC;D3AC;1111 1166 11BB;D3AC;1111 1166 11BB; # (펬; 펬; 펬; 펬; 펬; ) HANGUL SYLLABLE PESS
+D3AD;D3AD;1111 1166 11BC;D3AD;1111 1166 11BC; # (펭; 펭; 펭; 펭; 펭; ) HANGUL SYLLABLE PENG
+D3AE;D3AE;1111 1166 11BD;D3AE;1111 1166 11BD; # (펮; 펮; 펮; 펮; 펮; ) HANGUL SYLLABLE PEJ
+D3AF;D3AF;1111 1166 11BE;D3AF;1111 1166 11BE; # (펯; 펯; 펯; 펯; 펯; ) HANGUL SYLLABLE PEC
+D3B0;D3B0;1111 1166 11BF;D3B0;1111 1166 11BF; # (펰; 펰; 펰; 펰; 펰; ) HANGUL SYLLABLE PEK
+D3B1;D3B1;1111 1166 11C0;D3B1;1111 1166 11C0; # (펱; 펱; 펱; 펱; 펱; ) HANGUL SYLLABLE PET
+D3B2;D3B2;1111 1166 11C1;D3B2;1111 1166 11C1; # (펲; 펲; 펲; 펲; 펲; ) HANGUL SYLLABLE PEP
+D3B3;D3B3;1111 1166 11C2;D3B3;1111 1166 11C2; # (펳; 펳; 펳; 펳; 펳; ) HANGUL SYLLABLE PEH
+D3B4;D3B4;1111 1167;D3B4;1111 1167; # (펴; 펴; 펴; 펴; 펴; ) HANGUL SYLLABLE PYEO
+D3B5;D3B5;1111 1167 11A8;D3B5;1111 1167 11A8; # (펵; 펵; 펵; 펵; 펵; ) HANGUL SYLLABLE PYEOG
+D3B6;D3B6;1111 1167 11A9;D3B6;1111 1167 11A9; # (펶; 펶; 펶; 펶; 펶; ) HANGUL SYLLABLE PYEOGG
+D3B7;D3B7;1111 1167 11AA;D3B7;1111 1167 11AA; # (펷; 펷; 펷; 펷; 펷; ) HANGUL SYLLABLE PYEOGS
+D3B8;D3B8;1111 1167 11AB;D3B8;1111 1167 11AB; # (편; 편; 편; 편; 편; ) HANGUL SYLLABLE PYEON
+D3B9;D3B9;1111 1167 11AC;D3B9;1111 1167 11AC; # (펹; 펹; 펹; 펹; 펹; ) HANGUL SYLLABLE PYEONJ
+D3BA;D3BA;1111 1167 11AD;D3BA;1111 1167 11AD; # (펺; 펺; 펺; 펺; 펺; ) HANGUL SYLLABLE PYEONH
+D3BB;D3BB;1111 1167 11AE;D3BB;1111 1167 11AE; # (펻; 펻; 펻; 펻; 펻; ) HANGUL SYLLABLE PYEOD
+D3BC;D3BC;1111 1167 11AF;D3BC;1111 1167 11AF; # (펼; 펼; 펼; 펼; 펼; ) HANGUL SYLLABLE PYEOL
+D3BD;D3BD;1111 1167 11B0;D3BD;1111 1167 11B0; # (펽; 펽; 펽; 펽; 펽; ) HANGUL SYLLABLE PYEOLG
+D3BE;D3BE;1111 1167 11B1;D3BE;1111 1167 11B1; # (펾; 펾; 펾; 펾; 펾; ) HANGUL SYLLABLE PYEOLM
+D3BF;D3BF;1111 1167 11B2;D3BF;1111 1167 11B2; # (펿; 펿; 펿; 펿; 펿; ) HANGUL SYLLABLE PYEOLB
+D3C0;D3C0;1111 1167 11B3;D3C0;1111 1167 11B3; # (폀; 폀; 폀; 폀; 폀; ) HANGUL SYLLABLE PYEOLS
+D3C1;D3C1;1111 1167 11B4;D3C1;1111 1167 11B4; # (폁; 폁; 폁; 폁; 폁; ) HANGUL SYLLABLE PYEOLT
+D3C2;D3C2;1111 1167 11B5;D3C2;1111 1167 11B5; # (폂; 폂; 폂; 폂; 폂; ) HANGUL SYLLABLE PYEOLP
+D3C3;D3C3;1111 1167 11B6;D3C3;1111 1167 11B6; # (폃; 폃; 폃; 폃; 폃; ) HANGUL SYLLABLE PYEOLH
+D3C4;D3C4;1111 1167 11B7;D3C4;1111 1167 11B7; # (폄; 폄; 폄; 폄; 폄; ) HANGUL SYLLABLE PYEOM
+D3C5;D3C5;1111 1167 11B8;D3C5;1111 1167 11B8; # (폅; 폅; 폅; 폅; 폅; ) HANGUL SYLLABLE PYEOB
+D3C6;D3C6;1111 1167 11B9;D3C6;1111 1167 11B9; # (폆; 폆; 폆; 폆; 폆; ) HANGUL SYLLABLE PYEOBS
+D3C7;D3C7;1111 1167 11BA;D3C7;1111 1167 11BA; # (폇; 폇; 폇; 폇; 폇; ) HANGUL SYLLABLE PYEOS
+D3C8;D3C8;1111 1167 11BB;D3C8;1111 1167 11BB; # (폈; 폈; 폈; 폈; 폈; ) HANGUL SYLLABLE PYEOSS
+D3C9;D3C9;1111 1167 11BC;D3C9;1111 1167 11BC; # (평; 평; 평; 평; 평; ) HANGUL SYLLABLE PYEONG
+D3CA;D3CA;1111 1167 11BD;D3CA;1111 1167 11BD; # (폊; 폊; 폊; 폊; 폊; ) HANGUL SYLLABLE PYEOJ
+D3CB;D3CB;1111 1167 11BE;D3CB;1111 1167 11BE; # (폋; 폋; 폋; 폋; 폋; ) HANGUL SYLLABLE PYEOC
+D3CC;D3CC;1111 1167 11BF;D3CC;1111 1167 11BF; # (폌; 폌; 폌; 폌; 폌; ) HANGUL SYLLABLE PYEOK
+D3CD;D3CD;1111 1167 11C0;D3CD;1111 1167 11C0; # (폍; 폍; 폍; 폍; 폍; ) HANGUL SYLLABLE PYEOT
+D3CE;D3CE;1111 1167 11C1;D3CE;1111 1167 11C1; # (폎; 폎; 폎; 폎; 폎; ) HANGUL SYLLABLE PYEOP
+D3CF;D3CF;1111 1167 11C2;D3CF;1111 1167 11C2; # (폏; 폏; 폏; 폏; 폏; ) HANGUL SYLLABLE PYEOH
+D3D0;D3D0;1111 1168;D3D0;1111 1168; # (폐; 폐; 폐; 폐; 폐; ) HANGUL SYLLABLE PYE
+D3D1;D3D1;1111 1168 11A8;D3D1;1111 1168 11A8; # (폑; 폑; 폑; 폑; 폑; ) HANGUL SYLLABLE PYEG
+D3D2;D3D2;1111 1168 11A9;D3D2;1111 1168 11A9; # (폒; 폒; 폒; 폒; 폒; ) HANGUL SYLLABLE PYEGG
+D3D3;D3D3;1111 1168 11AA;D3D3;1111 1168 11AA; # (폓; 폓; 폓; 폓; 폓; ) HANGUL SYLLABLE PYEGS
+D3D4;D3D4;1111 1168 11AB;D3D4;1111 1168 11AB; # (폔; 폔; 폔; 폔; 폔; ) HANGUL SYLLABLE PYEN
+D3D5;D3D5;1111 1168 11AC;D3D5;1111 1168 11AC; # (폕; 폕; 폕; 폕; 폕; ) HANGUL SYLLABLE PYENJ
+D3D6;D3D6;1111 1168 11AD;D3D6;1111 1168 11AD; # (폖; 폖; 폖; 폖; 폖; ) HANGUL SYLLABLE PYENH
+D3D7;D3D7;1111 1168 11AE;D3D7;1111 1168 11AE; # (폗; 폗; 폗; 폗; 폗; ) HANGUL SYLLABLE PYED
+D3D8;D3D8;1111 1168 11AF;D3D8;1111 1168 11AF; # (폘; 폘; 폘; 폘; 폘; ) HANGUL SYLLABLE PYEL
+D3D9;D3D9;1111 1168 11B0;D3D9;1111 1168 11B0; # (폙; 폙; 폙; 폙; 폙; ) HANGUL SYLLABLE PYELG
+D3DA;D3DA;1111 1168 11B1;D3DA;1111 1168 11B1; # (폚; 폚; 폚; 폚; 폚; ) HANGUL SYLLABLE PYELM
+D3DB;D3DB;1111 1168 11B2;D3DB;1111 1168 11B2; # (폛; 폛; 폛; 폛; 폛; ) HANGUL SYLLABLE PYELB
+D3DC;D3DC;1111 1168 11B3;D3DC;1111 1168 11B3; # (폜; 폜; 폜; 폜; 폜; ) HANGUL SYLLABLE PYELS
+D3DD;D3DD;1111 1168 11B4;D3DD;1111 1168 11B4; # (폝; 폝; 폝; 폝; 폝; ) HANGUL SYLLABLE PYELT
+D3DE;D3DE;1111 1168 11B5;D3DE;1111 1168 11B5; # (폞; 폞; 폞; 폞; 폞; ) HANGUL SYLLABLE PYELP
+D3DF;D3DF;1111 1168 11B6;D3DF;1111 1168 11B6; # (폟; 폟; 폟; 폟; 폟; ) HANGUL SYLLABLE PYELH
+D3E0;D3E0;1111 1168 11B7;D3E0;1111 1168 11B7; # (폠; 폠; 폠; 폠; 폠; ) HANGUL SYLLABLE PYEM
+D3E1;D3E1;1111 1168 11B8;D3E1;1111 1168 11B8; # (폡; 폡; 폡; 폡; 폡; ) HANGUL SYLLABLE PYEB
+D3E2;D3E2;1111 1168 11B9;D3E2;1111 1168 11B9; # (폢; 폢; 폢; 폢; 폢; ) HANGUL SYLLABLE PYEBS
+D3E3;D3E3;1111 1168 11BA;D3E3;1111 1168 11BA; # (폣; 폣; 폣; 폣; 폣; ) HANGUL SYLLABLE PYES
+D3E4;D3E4;1111 1168 11BB;D3E4;1111 1168 11BB; # (폤; 폤; 폤; 폤; 폤; ) HANGUL SYLLABLE PYESS
+D3E5;D3E5;1111 1168 11BC;D3E5;1111 1168 11BC; # (폥; 폥; 폥; 폥; 폥; ) HANGUL SYLLABLE PYENG
+D3E6;D3E6;1111 1168 11BD;D3E6;1111 1168 11BD; # (폦; 폦; 폦; 폦; 폦; ) HANGUL SYLLABLE PYEJ
+D3E7;D3E7;1111 1168 11BE;D3E7;1111 1168 11BE; # (폧; 폧; 폧; 폧; 폧; ) HANGUL SYLLABLE PYEC
+D3E8;D3E8;1111 1168 11BF;D3E8;1111 1168 11BF; # (폨; 폨; 폨; 폨; 폨; ) HANGUL SYLLABLE PYEK
+D3E9;D3E9;1111 1168 11C0;D3E9;1111 1168 11C0; # (폩; 폩; 폩; 폩; 폩; ) HANGUL SYLLABLE PYET
+D3EA;D3EA;1111 1168 11C1;D3EA;1111 1168 11C1; # (폪; 폪; 폪; 폪; 폪; ) HANGUL SYLLABLE PYEP
+D3EB;D3EB;1111 1168 11C2;D3EB;1111 1168 11C2; # (폫; 폫; 폫; 폫; 폫; ) HANGUL SYLLABLE PYEH
+D3EC;D3EC;1111 1169;D3EC;1111 1169; # (포; 포; 포; 포; 포; ) HANGUL SYLLABLE PO
+D3ED;D3ED;1111 1169 11A8;D3ED;1111 1169 11A8; # (폭; 폭; 폭; 폭; 폭; ) HANGUL SYLLABLE POG
+D3EE;D3EE;1111 1169 11A9;D3EE;1111 1169 11A9; # (폮; 폮; 폮; 폮; 폮; ) HANGUL SYLLABLE POGG
+D3EF;D3EF;1111 1169 11AA;D3EF;1111 1169 11AA; # (폯; 폯; 폯; 폯; 폯; ) HANGUL SYLLABLE POGS
+D3F0;D3F0;1111 1169 11AB;D3F0;1111 1169 11AB; # (폰; 폰; 폰; 폰; 폰; ) HANGUL SYLLABLE PON
+D3F1;D3F1;1111 1169 11AC;D3F1;1111 1169 11AC; # (폱; 폱; 폱; 폱; 폱; ) HANGUL SYLLABLE PONJ
+D3F2;D3F2;1111 1169 11AD;D3F2;1111 1169 11AD; # (폲; 폲; 폲; 폲; 폲; ) HANGUL SYLLABLE PONH
+D3F3;D3F3;1111 1169 11AE;D3F3;1111 1169 11AE; # (폳; 폳; 폳; 폳; 폳; ) HANGUL SYLLABLE POD
+D3F4;D3F4;1111 1169 11AF;D3F4;1111 1169 11AF; # (폴; 폴; 폴; 폴; 폴; ) HANGUL SYLLABLE POL
+D3F5;D3F5;1111 1169 11B0;D3F5;1111 1169 11B0; # (폵; 폵; 폵; 폵; 폵; ) HANGUL SYLLABLE POLG
+D3F6;D3F6;1111 1169 11B1;D3F6;1111 1169 11B1; # (폶; 폶; 폶; 폶; 폶; ) HANGUL SYLLABLE POLM
+D3F7;D3F7;1111 1169 11B2;D3F7;1111 1169 11B2; # (폷; 폷; 폷; 폷; 폷; ) HANGUL SYLLABLE POLB
+D3F8;D3F8;1111 1169 11B3;D3F8;1111 1169 11B3; # (폸; 폸; 폸; 폸; 폸; ) HANGUL SYLLABLE POLS
+D3F9;D3F9;1111 1169 11B4;D3F9;1111 1169 11B4; # (폹; 폹; 폹; 폹; 폹; ) HANGUL SYLLABLE POLT
+D3FA;D3FA;1111 1169 11B5;D3FA;1111 1169 11B5; # (폺; 폺; 폺; 폺; 폺; ) HANGUL SYLLABLE POLP
+D3FB;D3FB;1111 1169 11B6;D3FB;1111 1169 11B6; # (폻; 폻; 폻; 폻; 폻; ) HANGUL SYLLABLE POLH
+D3FC;D3FC;1111 1169 11B7;D3FC;1111 1169 11B7; # (폼; 폼; 폼; 폼; 폼; ) HANGUL SYLLABLE POM
+D3FD;D3FD;1111 1169 11B8;D3FD;1111 1169 11B8; # (폽; 폽; 폽; 폽; 폽; ) HANGUL SYLLABLE POB
+D3FE;D3FE;1111 1169 11B9;D3FE;1111 1169 11B9; # (폾; 폾; 폾; 폾; 폾; ) HANGUL SYLLABLE POBS
+D3FF;D3FF;1111 1169 11BA;D3FF;1111 1169 11BA; # (폿; 폿; 폿; 폿; 폿; ) HANGUL SYLLABLE POS
+D400;D400;1111 1169 11BB;D400;1111 1169 11BB; # (퐀; 퐀; 퐀; 퐀; 퐀; ) HANGUL SYLLABLE POSS
+D401;D401;1111 1169 11BC;D401;1111 1169 11BC; # (퐁; 퐁; 퐁; 퐁; 퐁; ) HANGUL SYLLABLE PONG
+D402;D402;1111 1169 11BD;D402;1111 1169 11BD; # (퐂; 퐂; 퐂; 퐂; 퐂; ) HANGUL SYLLABLE POJ
+D403;D403;1111 1169 11BE;D403;1111 1169 11BE; # (퐃; 퐃; 퐃; 퐃; 퐃; ) HANGUL SYLLABLE POC
+D404;D404;1111 1169 11BF;D404;1111 1169 11BF; # (퐄; 퐄; 퐄; 퐄; 퐄; ) HANGUL SYLLABLE POK
+D405;D405;1111 1169 11C0;D405;1111 1169 11C0; # (퐅; 퐅; 퐅; 퐅; 퐅; ) HANGUL SYLLABLE POT
+D406;D406;1111 1169 11C1;D406;1111 1169 11C1; # (퐆; 퐆; 퐆; 퐆; 퐆; ) HANGUL SYLLABLE POP
+D407;D407;1111 1169 11C2;D407;1111 1169 11C2; # (퐇; 퐇; 퐇; 퐇; 퐇; ) HANGUL SYLLABLE POH
+D408;D408;1111 116A;D408;1111 116A; # (퐈; 퐈; 퐈; 퐈; 퐈; ) HANGUL SYLLABLE PWA
+D409;D409;1111 116A 11A8;D409;1111 116A 11A8; # (퐉; 퐉; 퐉; 퐉; 퐉; ) HANGUL SYLLABLE PWAG
+D40A;D40A;1111 116A 11A9;D40A;1111 116A 11A9; # (퐊; 퐊; 퐊; 퐊; 퐊; ) HANGUL SYLLABLE PWAGG
+D40B;D40B;1111 116A 11AA;D40B;1111 116A 11AA; # (퐋; 퐋; 퐋; 퐋; 퐋; ) HANGUL SYLLABLE PWAGS
+D40C;D40C;1111 116A 11AB;D40C;1111 116A 11AB; # (퐌; 퐌; 퐌; 퐌; 퐌; ) HANGUL SYLLABLE PWAN
+D40D;D40D;1111 116A 11AC;D40D;1111 116A 11AC; # (퐍; 퐍; 퐍; 퐍; 퐍; ) HANGUL SYLLABLE PWANJ
+D40E;D40E;1111 116A 11AD;D40E;1111 116A 11AD; # (퐎; 퐎; 퐎; 퐎; 퐎; ) HANGUL SYLLABLE PWANH
+D40F;D40F;1111 116A 11AE;D40F;1111 116A 11AE; # (퐏; 퐏; 퐏; 퐏; 퐏; ) HANGUL SYLLABLE PWAD
+D410;D410;1111 116A 11AF;D410;1111 116A 11AF; # (퐐; 퐐; 퐐; 퐐; 퐐; ) HANGUL SYLLABLE PWAL
+D411;D411;1111 116A 11B0;D411;1111 116A 11B0; # (퐑; 퐑; 퐑; 퐑; 퐑; ) HANGUL SYLLABLE PWALG
+D412;D412;1111 116A 11B1;D412;1111 116A 11B1; # (퐒; 퐒; 퐒; 퐒; 퐒; ) HANGUL SYLLABLE PWALM
+D413;D413;1111 116A 11B2;D413;1111 116A 11B2; # (퐓; 퐓; 퐓; 퐓; 퐓; ) HANGUL SYLLABLE PWALB
+D414;D414;1111 116A 11B3;D414;1111 116A 11B3; # (퐔; 퐔; 퐔; 퐔; 퐔; ) HANGUL SYLLABLE PWALS
+D415;D415;1111 116A 11B4;D415;1111 116A 11B4; # (퐕; 퐕; 퐕; 퐕; 퐕; ) HANGUL SYLLABLE PWALT
+D416;D416;1111 116A 11B5;D416;1111 116A 11B5; # (퐖; 퐖; 퐖; 퐖; 퐖; ) HANGUL SYLLABLE PWALP
+D417;D417;1111 116A 11B6;D417;1111 116A 11B6; # (퐗; 퐗; 퐗; 퐗; 퐗; ) HANGUL SYLLABLE PWALH
+D418;D418;1111 116A 11B7;D418;1111 116A 11B7; # (퐘; 퐘; 퐘; 퐘; 퐘; ) HANGUL SYLLABLE PWAM
+D419;D419;1111 116A 11B8;D419;1111 116A 11B8; # (퐙; 퐙; 퐙; 퐙; 퐙; ) HANGUL SYLLABLE PWAB
+D41A;D41A;1111 116A 11B9;D41A;1111 116A 11B9; # (퐚; 퐚; 퐚; 퐚; 퐚; ) HANGUL SYLLABLE PWABS
+D41B;D41B;1111 116A 11BA;D41B;1111 116A 11BA; # (퐛; 퐛; 퐛; 퐛; 퐛; ) HANGUL SYLLABLE PWAS
+D41C;D41C;1111 116A 11BB;D41C;1111 116A 11BB; # (퐜; 퐜; 퐜; 퐜; 퐜; ) HANGUL SYLLABLE PWASS
+D41D;D41D;1111 116A 11BC;D41D;1111 116A 11BC; # (퐝; 퐝; 퐝; 퐝; 퐝; ) HANGUL SYLLABLE PWANG
+D41E;D41E;1111 116A 11BD;D41E;1111 116A 11BD; # (퐞; 퐞; 퐞; 퐞; 퐞; ) HANGUL SYLLABLE PWAJ
+D41F;D41F;1111 116A 11BE;D41F;1111 116A 11BE; # (퐟; 퐟; 퐟; 퐟; 퐟; ) HANGUL SYLLABLE PWAC
+D420;D420;1111 116A 11BF;D420;1111 116A 11BF; # (퐠; 퐠; 퐠; 퐠; 퐠; ) HANGUL SYLLABLE PWAK
+D421;D421;1111 116A 11C0;D421;1111 116A 11C0; # (퐡; 퐡; 퐡; 퐡; 퐡; ) HANGUL SYLLABLE PWAT
+D422;D422;1111 116A 11C1;D422;1111 116A 11C1; # (퐢; 퐢; 퐢; 퐢; 퐢; ) HANGUL SYLLABLE PWAP
+D423;D423;1111 116A 11C2;D423;1111 116A 11C2; # (퐣; 퐣; 퐣; 퐣; 퐣; ) HANGUL SYLLABLE PWAH
+D424;D424;1111 116B;D424;1111 116B; # (퐤; 퐤; 퐤; 퐤; 퐤; ) HANGUL SYLLABLE PWAE
+D425;D425;1111 116B 11A8;D425;1111 116B 11A8; # (퐥; 퐥; 퐥; 퐥; 퐥; ) HANGUL SYLLABLE PWAEG
+D426;D426;1111 116B 11A9;D426;1111 116B 11A9; # (퐦; 퐦; 퐦; 퐦; 퐦; ) HANGUL SYLLABLE PWAEGG
+D427;D427;1111 116B 11AA;D427;1111 116B 11AA; # (퐧; 퐧; 퐧; 퐧; 퐧; ) HANGUL SYLLABLE PWAEGS
+D428;D428;1111 116B 11AB;D428;1111 116B 11AB; # (퐨; 퐨; 퐨; 퐨; 퐨; ) HANGUL SYLLABLE PWAEN
+D429;D429;1111 116B 11AC;D429;1111 116B 11AC; # (퐩; 퐩; 퐩; 퐩; 퐩; ) HANGUL SYLLABLE PWAENJ
+D42A;D42A;1111 116B 11AD;D42A;1111 116B 11AD; # (퐪; 퐪; 퐪; 퐪; 퐪; ) HANGUL SYLLABLE PWAENH
+D42B;D42B;1111 116B 11AE;D42B;1111 116B 11AE; # (퐫; 퐫; 퐫; 퐫; 퐫; ) HANGUL SYLLABLE PWAED
+D42C;D42C;1111 116B 11AF;D42C;1111 116B 11AF; # (퐬; 퐬; 퐬; 퐬; 퐬; ) HANGUL SYLLABLE PWAEL
+D42D;D42D;1111 116B 11B0;D42D;1111 116B 11B0; # (퐭; 퐭; 퐭; 퐭; 퐭; ) HANGUL SYLLABLE PWAELG
+D42E;D42E;1111 116B 11B1;D42E;1111 116B 11B1; # (퐮; 퐮; 퐮; 퐮; 퐮; ) HANGUL SYLLABLE PWAELM
+D42F;D42F;1111 116B 11B2;D42F;1111 116B 11B2; # (퐯; 퐯; 퐯; 퐯; 퐯; ) HANGUL SYLLABLE PWAELB
+D430;D430;1111 116B 11B3;D430;1111 116B 11B3; # (퐰; 퐰; 퐰; 퐰; 퐰; ) HANGUL SYLLABLE PWAELS
+D431;D431;1111 116B 11B4;D431;1111 116B 11B4; # (퐱; 퐱; 퐱; 퐱; 퐱; ) HANGUL SYLLABLE PWAELT
+D432;D432;1111 116B 11B5;D432;1111 116B 11B5; # (퐲; 퐲; 퐲; 퐲; 퐲; ) HANGUL SYLLABLE PWAELP
+D433;D433;1111 116B 11B6;D433;1111 116B 11B6; # (퐳; 퐳; 퐳; 퐳; 퐳; ) HANGUL SYLLABLE PWAELH
+D434;D434;1111 116B 11B7;D434;1111 116B 11B7; # (퐴; 퐴; 퐴; 퐴; 퐴; ) HANGUL SYLLABLE PWAEM
+D435;D435;1111 116B 11B8;D435;1111 116B 11B8; # (퐵; 퐵; 퐵; 퐵; 퐵; ) HANGUL SYLLABLE PWAEB
+D436;D436;1111 116B 11B9;D436;1111 116B 11B9; # (퐶; 퐶; 퐶; 퐶; 퐶; ) HANGUL SYLLABLE PWAEBS
+D437;D437;1111 116B 11BA;D437;1111 116B 11BA; # (퐷; 퐷; 퐷; 퐷; 퐷; ) HANGUL SYLLABLE PWAES
+D438;D438;1111 116B 11BB;D438;1111 116B 11BB; # (퐸; 퐸; 퐸; 퐸; 퐸; ) HANGUL SYLLABLE PWAESS
+D439;D439;1111 116B 11BC;D439;1111 116B 11BC; # (퐹; 퐹; 퐹; 퐹; 퐹; ) HANGUL SYLLABLE PWAENG
+D43A;D43A;1111 116B 11BD;D43A;1111 116B 11BD; # (퐺; 퐺; 퐺; 퐺; 퐺; ) HANGUL SYLLABLE PWAEJ
+D43B;D43B;1111 116B 11BE;D43B;1111 116B 11BE; # (퐻; 퐻; 퐻; 퐻; 퐻; ) HANGUL SYLLABLE PWAEC
+D43C;D43C;1111 116B 11BF;D43C;1111 116B 11BF; # (퐼; 퐼; 퐼; 퐼; 퐼; ) HANGUL SYLLABLE PWAEK
+D43D;D43D;1111 116B 11C0;D43D;1111 116B 11C0; # (퐽; 퐽; 퐽; 퐽; 퐽; ) HANGUL SYLLABLE PWAET
+D43E;D43E;1111 116B 11C1;D43E;1111 116B 11C1; # (퐾; 퐾; 퐾; 퐾; 퐾; ) HANGUL SYLLABLE PWAEP
+D43F;D43F;1111 116B 11C2;D43F;1111 116B 11C2; # (퐿; 퐿; 퐿; 퐿; 퐿; ) HANGUL SYLLABLE PWAEH
+D440;D440;1111 116C;D440;1111 116C; # (푀; 푀; 푀; 푀; 푀; ) HANGUL SYLLABLE POE
+D441;D441;1111 116C 11A8;D441;1111 116C 11A8; # (푁; 푁; 푁; 푁; 푁; ) HANGUL SYLLABLE POEG
+D442;D442;1111 116C 11A9;D442;1111 116C 11A9; # (푂; 푂; 푂; 푂; 푂; ) HANGUL SYLLABLE POEGG
+D443;D443;1111 116C 11AA;D443;1111 116C 11AA; # (푃; 푃; 푃; 푃; 푃; ) HANGUL SYLLABLE POEGS
+D444;D444;1111 116C 11AB;D444;1111 116C 11AB; # (푄; 푄; 푄; 푄; 푄; ) HANGUL SYLLABLE POEN
+D445;D445;1111 116C 11AC;D445;1111 116C 11AC; # (푅; 푅; 푅; 푅; 푅; ) HANGUL SYLLABLE POENJ
+D446;D446;1111 116C 11AD;D446;1111 116C 11AD; # (푆; 푆; 푆; 푆; 푆; ) HANGUL SYLLABLE POENH
+D447;D447;1111 116C 11AE;D447;1111 116C 11AE; # (푇; 푇; 푇; 푇; 푇; ) HANGUL SYLLABLE POED
+D448;D448;1111 116C 11AF;D448;1111 116C 11AF; # (푈; 푈; 푈; 푈; 푈; ) HANGUL SYLLABLE POEL
+D449;D449;1111 116C 11B0;D449;1111 116C 11B0; # (푉; 푉; 푉; 푉; 푉; ) HANGUL SYLLABLE POELG
+D44A;D44A;1111 116C 11B1;D44A;1111 116C 11B1; # (푊; 푊; 푊; 푊; 푊; ) HANGUL SYLLABLE POELM
+D44B;D44B;1111 116C 11B2;D44B;1111 116C 11B2; # (푋; 푋; 푋; 푋; 푋; ) HANGUL SYLLABLE POELB
+D44C;D44C;1111 116C 11B3;D44C;1111 116C 11B3; # (푌; 푌; 푌; 푌; 푌; ) HANGUL SYLLABLE POELS
+D44D;D44D;1111 116C 11B4;D44D;1111 116C 11B4; # (푍; 푍; 푍; 푍; 푍; ) HANGUL SYLLABLE POELT
+D44E;D44E;1111 116C 11B5;D44E;1111 116C 11B5; # (푎; 푎; 푎; 푎; 푎; ) HANGUL SYLLABLE POELP
+D44F;D44F;1111 116C 11B6;D44F;1111 116C 11B6; # (푏; 푏; 푏; 푏; 푏; ) HANGUL SYLLABLE POELH
+D450;D450;1111 116C 11B7;D450;1111 116C 11B7; # (푐; 푐; 푐; 푐; 푐; ) HANGUL SYLLABLE POEM
+D451;D451;1111 116C 11B8;D451;1111 116C 11B8; # (푑; 푑; 푑; 푑; 푑; ) HANGUL SYLLABLE POEB
+D452;D452;1111 116C 11B9;D452;1111 116C 11B9; # (푒; 푒; 푒; 푒; 푒; ) HANGUL SYLLABLE POEBS
+D453;D453;1111 116C 11BA;D453;1111 116C 11BA; # (푓; 푓; 푓; 푓; 푓; ) HANGUL SYLLABLE POES
+D454;D454;1111 116C 11BB;D454;1111 116C 11BB; # (푔; 푔; 푔; 푔; 푔; ) HANGUL SYLLABLE POESS
+D455;D455;1111 116C 11BC;D455;1111 116C 11BC; # (푕; 푕; 푕; 푕; 푕; ) HANGUL SYLLABLE POENG
+D456;D456;1111 116C 11BD;D456;1111 116C 11BD; # (푖; 푖; 푖; 푖; 푖; ) HANGUL SYLLABLE POEJ
+D457;D457;1111 116C 11BE;D457;1111 116C 11BE; # (푗; 푗; 푗; 푗; 푗; ) HANGUL SYLLABLE POEC
+D458;D458;1111 116C 11BF;D458;1111 116C 11BF; # (푘; 푘; 푘; 푘; 푘; ) HANGUL SYLLABLE POEK
+D459;D459;1111 116C 11C0;D459;1111 116C 11C0; # (푙; 푙; 푙; 푙; 푙; ) HANGUL SYLLABLE POET
+D45A;D45A;1111 116C 11C1;D45A;1111 116C 11C1; # (푚; 푚; 푚; 푚; 푚; ) HANGUL SYLLABLE POEP
+D45B;D45B;1111 116C 11C2;D45B;1111 116C 11C2; # (푛; 푛; 푛; 푛; 푛; ) HANGUL SYLLABLE POEH
+D45C;D45C;1111 116D;D45C;1111 116D; # (표; 표; 표; 표; 표; ) HANGUL SYLLABLE PYO
+D45D;D45D;1111 116D 11A8;D45D;1111 116D 11A8; # (푝; 푝; 푝; 푝; 푝; ) HANGUL SYLLABLE PYOG
+D45E;D45E;1111 116D 11A9;D45E;1111 116D 11A9; # (푞; 푞; 푞; 푞; 푞; ) HANGUL SYLLABLE PYOGG
+D45F;D45F;1111 116D 11AA;D45F;1111 116D 11AA; # (푟; 푟; 푟; 푟; 푟; ) HANGUL SYLLABLE PYOGS
+D460;D460;1111 116D 11AB;D460;1111 116D 11AB; # (푠; 푠; 푠; 푠; 푠; ) HANGUL SYLLABLE PYON
+D461;D461;1111 116D 11AC;D461;1111 116D 11AC; # (푡; 푡; 푡; 푡; 푡; ) HANGUL SYLLABLE PYONJ
+D462;D462;1111 116D 11AD;D462;1111 116D 11AD; # (푢; 푢; 푢; 푢; 푢; ) HANGUL SYLLABLE PYONH
+D463;D463;1111 116D 11AE;D463;1111 116D 11AE; # (푣; 푣; 푣; 푣; 푣; ) HANGUL SYLLABLE PYOD
+D464;D464;1111 116D 11AF;D464;1111 116D 11AF; # (푤; 푤; 푤; 푤; 푤; ) HANGUL SYLLABLE PYOL
+D465;D465;1111 116D 11B0;D465;1111 116D 11B0; # (푥; 푥; 푥; 푥; 푥; ) HANGUL SYLLABLE PYOLG
+D466;D466;1111 116D 11B1;D466;1111 116D 11B1; # (푦; 푦; 푦; 푦; 푦; ) HANGUL SYLLABLE PYOLM
+D467;D467;1111 116D 11B2;D467;1111 116D 11B2; # (푧; 푧; 푧; 푧; 푧; ) HANGUL SYLLABLE PYOLB
+D468;D468;1111 116D 11B3;D468;1111 116D 11B3; # (푨; 푨; 푨; 푨; 푨; ) HANGUL SYLLABLE PYOLS
+D469;D469;1111 116D 11B4;D469;1111 116D 11B4; # (푩; 푩; 푩; 푩; 푩; ) HANGUL SYLLABLE PYOLT
+D46A;D46A;1111 116D 11B5;D46A;1111 116D 11B5; # (푪; 푪; 푪; 푪; 푪; ) HANGUL SYLLABLE PYOLP
+D46B;D46B;1111 116D 11B6;D46B;1111 116D 11B6; # (푫; 푫; 푫; 푫; 푫; ) HANGUL SYLLABLE PYOLH
+D46C;D46C;1111 116D 11B7;D46C;1111 116D 11B7; # (푬; 푬; 푬; 푬; 푬; ) HANGUL SYLLABLE PYOM
+D46D;D46D;1111 116D 11B8;D46D;1111 116D 11B8; # (푭; 푭; 푭; 푭; 푭; ) HANGUL SYLLABLE PYOB
+D46E;D46E;1111 116D 11B9;D46E;1111 116D 11B9; # (푮; 푮; 푮; 푮; 푮; ) HANGUL SYLLABLE PYOBS
+D46F;D46F;1111 116D 11BA;D46F;1111 116D 11BA; # (푯; 푯; 푯; 푯; 푯; ) HANGUL SYLLABLE PYOS
+D470;D470;1111 116D 11BB;D470;1111 116D 11BB; # (푰; 푰; 푰; 푰; 푰; ) HANGUL SYLLABLE PYOSS
+D471;D471;1111 116D 11BC;D471;1111 116D 11BC; # (푱; 푱; 푱; 푱; 푱; ) HANGUL SYLLABLE PYONG
+D472;D472;1111 116D 11BD;D472;1111 116D 11BD; # (푲; 푲; 푲; 푲; 푲; ) HANGUL SYLLABLE PYOJ
+D473;D473;1111 116D 11BE;D473;1111 116D 11BE; # (푳; 푳; 푳; 푳; 푳; ) HANGUL SYLLABLE PYOC
+D474;D474;1111 116D 11BF;D474;1111 116D 11BF; # (푴; 푴; 푴; 푴; 푴; ) HANGUL SYLLABLE PYOK
+D475;D475;1111 116D 11C0;D475;1111 116D 11C0; # (푵; 푵; 푵; 푵; 푵; ) HANGUL SYLLABLE PYOT
+D476;D476;1111 116D 11C1;D476;1111 116D 11C1; # (푶; 푶; 푶; 푶; 푶; ) HANGUL SYLLABLE PYOP
+D477;D477;1111 116D 11C2;D477;1111 116D 11C2; # (푷; 푷; 푷; 푷; 푷; ) HANGUL SYLLABLE PYOH
+D478;D478;1111 116E;D478;1111 116E; # (푸; 푸; 푸; 푸; 푸; ) HANGUL SYLLABLE PU
+D479;D479;1111 116E 11A8;D479;1111 116E 11A8; # (푹; 푹; 푹; 푹; 푹; ) HANGUL SYLLABLE PUG
+D47A;D47A;1111 116E 11A9;D47A;1111 116E 11A9; # (푺; 푺; 푺; 푺; 푺; ) HANGUL SYLLABLE PUGG
+D47B;D47B;1111 116E 11AA;D47B;1111 116E 11AA; # (푻; 푻; 푻; 푻; 푻; ) HANGUL SYLLABLE PUGS
+D47C;D47C;1111 116E 11AB;D47C;1111 116E 11AB; # (푼; 푼; 푼; 푼; 푼; ) HANGUL SYLLABLE PUN
+D47D;D47D;1111 116E 11AC;D47D;1111 116E 11AC; # (푽; 푽; 푽; 푽; 푽; ) HANGUL SYLLABLE PUNJ
+D47E;D47E;1111 116E 11AD;D47E;1111 116E 11AD; # (푾; 푾; 푾; 푾; 푾; ) HANGUL SYLLABLE PUNH
+D47F;D47F;1111 116E 11AE;D47F;1111 116E 11AE; # (푿; 푿; 푿; 푿; 푿; ) HANGUL SYLLABLE PUD
+D480;D480;1111 116E 11AF;D480;1111 116E 11AF; # (풀; 풀; 풀; 풀; 풀; ) HANGUL SYLLABLE PUL
+D481;D481;1111 116E 11B0;D481;1111 116E 11B0; # (풁; 풁; 풁; 풁; 풁; ) HANGUL SYLLABLE PULG
+D482;D482;1111 116E 11B1;D482;1111 116E 11B1; # (풂; 풂; 풂; 풂; 풂; ) HANGUL SYLLABLE PULM
+D483;D483;1111 116E 11B2;D483;1111 116E 11B2; # (풃; 풃; 풃; 풃; 풃; ) HANGUL SYLLABLE PULB
+D484;D484;1111 116E 11B3;D484;1111 116E 11B3; # (풄; 풄; 풄; 풄; 풄; ) HANGUL SYLLABLE PULS
+D485;D485;1111 116E 11B4;D485;1111 116E 11B4; # (풅; 풅; 풅; 풅; 풅; ) HANGUL SYLLABLE PULT
+D486;D486;1111 116E 11B5;D486;1111 116E 11B5; # (풆; 풆; 풆; 풆; 풆; ) HANGUL SYLLABLE PULP
+D487;D487;1111 116E 11B6;D487;1111 116E 11B6; # (풇; 풇; 풇; 풇; 풇; ) HANGUL SYLLABLE PULH
+D488;D488;1111 116E 11B7;D488;1111 116E 11B7; # (품; 품; 품; 품; 품; ) HANGUL SYLLABLE PUM
+D489;D489;1111 116E 11B8;D489;1111 116E 11B8; # (풉; 풉; 풉; 풉; 풉; ) HANGUL SYLLABLE PUB
+D48A;D48A;1111 116E 11B9;D48A;1111 116E 11B9; # (풊; 풊; 풊; 풊; 풊; ) HANGUL SYLLABLE PUBS
+D48B;D48B;1111 116E 11BA;D48B;1111 116E 11BA; # (풋; 풋; 풋; 풋; 풋; ) HANGUL SYLLABLE PUS
+D48C;D48C;1111 116E 11BB;D48C;1111 116E 11BB; # (풌; 풌; 풌; 풌; 풌; ) HANGUL SYLLABLE PUSS
+D48D;D48D;1111 116E 11BC;D48D;1111 116E 11BC; # (풍; 풍; 풍; 풍; 풍; ) HANGUL SYLLABLE PUNG
+D48E;D48E;1111 116E 11BD;D48E;1111 116E 11BD; # (풎; 풎; 풎; 풎; 풎; ) HANGUL SYLLABLE PUJ
+D48F;D48F;1111 116E 11BE;D48F;1111 116E 11BE; # (풏; 풏; 풏; 풏; 풏; ) HANGUL SYLLABLE PUC
+D490;D490;1111 116E 11BF;D490;1111 116E 11BF; # (풐; 풐; 풐; 풐; 풐; ) HANGUL SYLLABLE PUK
+D491;D491;1111 116E 11C0;D491;1111 116E 11C0; # (풑; 풑; 풑; 풑; 풑; ) HANGUL SYLLABLE PUT
+D492;D492;1111 116E 11C1;D492;1111 116E 11C1; # (풒; 풒; 풒; 풒; 풒; ) HANGUL SYLLABLE PUP
+D493;D493;1111 116E 11C2;D493;1111 116E 11C2; # (풓; 풓; 풓; 풓; 풓; ) HANGUL SYLLABLE PUH
+D494;D494;1111 116F;D494;1111 116F; # (풔; 풔; 풔; 풔; 풔; ) HANGUL SYLLABLE PWEO
+D495;D495;1111 116F 11A8;D495;1111 116F 11A8; # (풕; 풕; 풕; 풕; 풕; ) HANGUL SYLLABLE PWEOG
+D496;D496;1111 116F 11A9;D496;1111 116F 11A9; # (풖; 풖; 풖; 풖; 풖; ) HANGUL SYLLABLE PWEOGG
+D497;D497;1111 116F 11AA;D497;1111 116F 11AA; # (풗; 풗; 풗; 풗; 풗; ) HANGUL SYLLABLE PWEOGS
+D498;D498;1111 116F 11AB;D498;1111 116F 11AB; # (풘; 풘; 풘; 풘; 풘; ) HANGUL SYLLABLE PWEON
+D499;D499;1111 116F 11AC;D499;1111 116F 11AC; # (풙; 풙; 풙; 풙; 풙; ) HANGUL SYLLABLE PWEONJ
+D49A;D49A;1111 116F 11AD;D49A;1111 116F 11AD; # (풚; 풚; 풚; 풚; 풚; ) HANGUL SYLLABLE PWEONH
+D49B;D49B;1111 116F 11AE;D49B;1111 116F 11AE; # (풛; 풛; 풛; 풛; 풛; ) HANGUL SYLLABLE PWEOD
+D49C;D49C;1111 116F 11AF;D49C;1111 116F 11AF; # (풜; 풜; 풜; 풜; 풜; ) HANGUL SYLLABLE PWEOL
+D49D;D49D;1111 116F 11B0;D49D;1111 116F 11B0; # (풝; 풝; 풝; 풝; 풝; ) HANGUL SYLLABLE PWEOLG
+D49E;D49E;1111 116F 11B1;D49E;1111 116F 11B1; # (풞; 풞; 풞; 풞; 풞; ) HANGUL SYLLABLE PWEOLM
+D49F;D49F;1111 116F 11B2;D49F;1111 116F 11B2; # (풟; 풟; 풟; 풟; 풟; ) HANGUL SYLLABLE PWEOLB
+D4A0;D4A0;1111 116F 11B3;D4A0;1111 116F 11B3; # (풠; 풠; 풠; 풠; 풠; ) HANGUL SYLLABLE PWEOLS
+D4A1;D4A1;1111 116F 11B4;D4A1;1111 116F 11B4; # (풡; 풡; 풡; 풡; 풡; ) HANGUL SYLLABLE PWEOLT
+D4A2;D4A2;1111 116F 11B5;D4A2;1111 116F 11B5; # (풢; 풢; 풢; 풢; 풢; ) HANGUL SYLLABLE PWEOLP
+D4A3;D4A3;1111 116F 11B6;D4A3;1111 116F 11B6; # (풣; 풣; 풣; 풣; 풣; ) HANGUL SYLLABLE PWEOLH
+D4A4;D4A4;1111 116F 11B7;D4A4;1111 116F 11B7; # (풤; 풤; 풤; 풤; 풤; ) HANGUL SYLLABLE PWEOM
+D4A5;D4A5;1111 116F 11B8;D4A5;1111 116F 11B8; # (풥; 풥; 풥; 풥; 풥; ) HANGUL SYLLABLE PWEOB
+D4A6;D4A6;1111 116F 11B9;D4A6;1111 116F 11B9; # (풦; 풦; 풦; 풦; 풦; ) HANGUL SYLLABLE PWEOBS
+D4A7;D4A7;1111 116F 11BA;D4A7;1111 116F 11BA; # (풧; 풧; 풧; 풧; 풧; ) HANGUL SYLLABLE PWEOS
+D4A8;D4A8;1111 116F 11BB;D4A8;1111 116F 11BB; # (풨; 풨; 풨; 풨; 풨; ) HANGUL SYLLABLE PWEOSS
+D4A9;D4A9;1111 116F 11BC;D4A9;1111 116F 11BC; # (풩; 풩; 풩; 풩; 풩; ) HANGUL SYLLABLE PWEONG
+D4AA;D4AA;1111 116F 11BD;D4AA;1111 116F 11BD; # (풪; 풪; 풪; 풪; 풪; ) HANGUL SYLLABLE PWEOJ
+D4AB;D4AB;1111 116F 11BE;D4AB;1111 116F 11BE; # (풫; 풫; 풫; 풫; 풫; ) HANGUL SYLLABLE PWEOC
+D4AC;D4AC;1111 116F 11BF;D4AC;1111 116F 11BF; # (풬; 풬; 풬; 풬; 풬; ) HANGUL SYLLABLE PWEOK
+D4AD;D4AD;1111 116F 11C0;D4AD;1111 116F 11C0; # (풭; 풭; 풭; 풭; 풭; ) HANGUL SYLLABLE PWEOT
+D4AE;D4AE;1111 116F 11C1;D4AE;1111 116F 11C1; # (풮; 풮; 풮; 풮; 풮; ) HANGUL SYLLABLE PWEOP
+D4AF;D4AF;1111 116F 11C2;D4AF;1111 116F 11C2; # (풯; 풯; 풯; 풯; 풯; ) HANGUL SYLLABLE PWEOH
+D4B0;D4B0;1111 1170;D4B0;1111 1170; # (풰; 풰; 풰; 풰; 풰; ) HANGUL SYLLABLE PWE
+D4B1;D4B1;1111 1170 11A8;D4B1;1111 1170 11A8; # (풱; 풱; 풱; 풱; 풱; ) HANGUL SYLLABLE PWEG
+D4B2;D4B2;1111 1170 11A9;D4B2;1111 1170 11A9; # (풲; 풲; 풲; 풲; 풲; ) HANGUL SYLLABLE PWEGG
+D4B3;D4B3;1111 1170 11AA;D4B3;1111 1170 11AA; # (풳; 풳; 풳; 풳; 풳; ) HANGUL SYLLABLE PWEGS
+D4B4;D4B4;1111 1170 11AB;D4B4;1111 1170 11AB; # (풴; 풴; 풴; 풴; 풴; ) HANGUL SYLLABLE PWEN
+D4B5;D4B5;1111 1170 11AC;D4B5;1111 1170 11AC; # (풵; 풵; 풵; 풵; 풵; ) HANGUL SYLLABLE PWENJ
+D4B6;D4B6;1111 1170 11AD;D4B6;1111 1170 11AD; # (풶; 풶; 풶; 풶; 풶; ) HANGUL SYLLABLE PWENH
+D4B7;D4B7;1111 1170 11AE;D4B7;1111 1170 11AE; # (풷; 풷; 풷; 풷; 풷; ) HANGUL SYLLABLE PWED
+D4B8;D4B8;1111 1170 11AF;D4B8;1111 1170 11AF; # (풸; 풸; 풸; 풸; 풸; ) HANGUL SYLLABLE PWEL
+D4B9;D4B9;1111 1170 11B0;D4B9;1111 1170 11B0; # (풹; 풹; 풹; 풹; 풹; ) HANGUL SYLLABLE PWELG
+D4BA;D4BA;1111 1170 11B1;D4BA;1111 1170 11B1; # (풺; 풺; 풺; 풺; 풺; ) HANGUL SYLLABLE PWELM
+D4BB;D4BB;1111 1170 11B2;D4BB;1111 1170 11B2; # (풻; 풻; 풻; 풻; 풻; ) HANGUL SYLLABLE PWELB
+D4BC;D4BC;1111 1170 11B3;D4BC;1111 1170 11B3; # (풼; 풼; 풼; 풼; 풼; ) HANGUL SYLLABLE PWELS
+D4BD;D4BD;1111 1170 11B4;D4BD;1111 1170 11B4; # (풽; 풽; 풽; 풽; 풽; ) HANGUL SYLLABLE PWELT
+D4BE;D4BE;1111 1170 11B5;D4BE;1111 1170 11B5; # (풾; 풾; 풾; 풾; 풾; ) HANGUL SYLLABLE PWELP
+D4BF;D4BF;1111 1170 11B6;D4BF;1111 1170 11B6; # (풿; 풿; 풿; 풿; 풿; ) HANGUL SYLLABLE PWELH
+D4C0;D4C0;1111 1170 11B7;D4C0;1111 1170 11B7; # (퓀; 퓀; 퓀; 퓀; 퓀; ) HANGUL SYLLABLE PWEM
+D4C1;D4C1;1111 1170 11B8;D4C1;1111 1170 11B8; # (퓁; 퓁; 퓁; 퓁; 퓁; ) HANGUL SYLLABLE PWEB
+D4C2;D4C2;1111 1170 11B9;D4C2;1111 1170 11B9; # (퓂; 퓂; 퓂; 퓂; 퓂; ) HANGUL SYLLABLE PWEBS
+D4C3;D4C3;1111 1170 11BA;D4C3;1111 1170 11BA; # (퓃; 퓃; 퓃; 퓃; 퓃; ) HANGUL SYLLABLE PWES
+D4C4;D4C4;1111 1170 11BB;D4C4;1111 1170 11BB; # (퓄; 퓄; 퓄; 퓄; 퓄; ) HANGUL SYLLABLE PWESS
+D4C5;D4C5;1111 1170 11BC;D4C5;1111 1170 11BC; # (퓅; 퓅; 퓅; 퓅; 퓅; ) HANGUL SYLLABLE PWENG
+D4C6;D4C6;1111 1170 11BD;D4C6;1111 1170 11BD; # (퓆; 퓆; 퓆; 퓆; 퓆; ) HANGUL SYLLABLE PWEJ
+D4C7;D4C7;1111 1170 11BE;D4C7;1111 1170 11BE; # (퓇; 퓇; 퓇; 퓇; 퓇; ) HANGUL SYLLABLE PWEC
+D4C8;D4C8;1111 1170 11BF;D4C8;1111 1170 11BF; # (퓈; 퓈; 퓈; 퓈; 퓈; ) HANGUL SYLLABLE PWEK
+D4C9;D4C9;1111 1170 11C0;D4C9;1111 1170 11C0; # (퓉; 퓉; 퓉; 퓉; 퓉; ) HANGUL SYLLABLE PWET
+D4CA;D4CA;1111 1170 11C1;D4CA;1111 1170 11C1; # (퓊; 퓊; 퓊; 퓊; 퓊; ) HANGUL SYLLABLE PWEP
+D4CB;D4CB;1111 1170 11C2;D4CB;1111 1170 11C2; # (퓋; 퓋; 퓋; 퓋; 퓋; ) HANGUL SYLLABLE PWEH
+D4CC;D4CC;1111 1171;D4CC;1111 1171; # (퓌; 퓌; 퓌; 퓌; 퓌; ) HANGUL SYLLABLE PWI
+D4CD;D4CD;1111 1171 11A8;D4CD;1111 1171 11A8; # (퓍; 퓍; 퓍; 퓍; 퓍; ) HANGUL SYLLABLE PWIG
+D4CE;D4CE;1111 1171 11A9;D4CE;1111 1171 11A9; # (퓎; 퓎; 퓎; 퓎; 퓎; ) HANGUL SYLLABLE PWIGG
+D4CF;D4CF;1111 1171 11AA;D4CF;1111 1171 11AA; # (퓏; 퓏; 퓏; 퓏; 퓏; ) HANGUL SYLLABLE PWIGS
+D4D0;D4D0;1111 1171 11AB;D4D0;1111 1171 11AB; # (퓐; 퓐; 퓐; 퓐; 퓐; ) HANGUL SYLLABLE PWIN
+D4D1;D4D1;1111 1171 11AC;D4D1;1111 1171 11AC; # (퓑; 퓑; 퓑; 퓑; 퓑; ) HANGUL SYLLABLE PWINJ
+D4D2;D4D2;1111 1171 11AD;D4D2;1111 1171 11AD; # (퓒; 퓒; 퓒; 퓒; 퓒; ) HANGUL SYLLABLE PWINH
+D4D3;D4D3;1111 1171 11AE;D4D3;1111 1171 11AE; # (퓓; 퓓; 퓓; 퓓; 퓓; ) HANGUL SYLLABLE PWID
+D4D4;D4D4;1111 1171 11AF;D4D4;1111 1171 11AF; # (퓔; 퓔; 퓔; 퓔; 퓔; ) HANGUL SYLLABLE PWIL
+D4D5;D4D5;1111 1171 11B0;D4D5;1111 1171 11B0; # (퓕; 퓕; 퓕; 퓕; 퓕; ) HANGUL SYLLABLE PWILG
+D4D6;D4D6;1111 1171 11B1;D4D6;1111 1171 11B1; # (퓖; 퓖; 퓖; 퓖; 퓖; ) HANGUL SYLLABLE PWILM
+D4D7;D4D7;1111 1171 11B2;D4D7;1111 1171 11B2; # (퓗; 퓗; 퓗; 퓗; 퓗; ) HANGUL SYLLABLE PWILB
+D4D8;D4D8;1111 1171 11B3;D4D8;1111 1171 11B3; # (퓘; 퓘; 퓘; 퓘; 퓘; ) HANGUL SYLLABLE PWILS
+D4D9;D4D9;1111 1171 11B4;D4D9;1111 1171 11B4; # (퓙; 퓙; 퓙; 퓙; 퓙; ) HANGUL SYLLABLE PWILT
+D4DA;D4DA;1111 1171 11B5;D4DA;1111 1171 11B5; # (퓚; 퓚; 퓚; 퓚; 퓚; ) HANGUL SYLLABLE PWILP
+D4DB;D4DB;1111 1171 11B6;D4DB;1111 1171 11B6; # (퓛; 퓛; 퓛; 퓛; 퓛; ) HANGUL SYLLABLE PWILH
+D4DC;D4DC;1111 1171 11B7;D4DC;1111 1171 11B7; # (퓜; 퓜; 퓜; 퓜; 퓜; ) HANGUL SYLLABLE PWIM
+D4DD;D4DD;1111 1171 11B8;D4DD;1111 1171 11B8; # (퓝; 퓝; 퓝; 퓝; 퓝; ) HANGUL SYLLABLE PWIB
+D4DE;D4DE;1111 1171 11B9;D4DE;1111 1171 11B9; # (퓞; 퓞; 퓞; 퓞; 퓞; ) HANGUL SYLLABLE PWIBS
+D4DF;D4DF;1111 1171 11BA;D4DF;1111 1171 11BA; # (퓟; 퓟; 퓟; 퓟; 퓟; ) HANGUL SYLLABLE PWIS
+D4E0;D4E0;1111 1171 11BB;D4E0;1111 1171 11BB; # (퓠; 퓠; 퓠; 퓠; 퓠; ) HANGUL SYLLABLE PWISS
+D4E1;D4E1;1111 1171 11BC;D4E1;1111 1171 11BC; # (퓡; 퓡; 퓡; 퓡; 퓡; ) HANGUL SYLLABLE PWING
+D4E2;D4E2;1111 1171 11BD;D4E2;1111 1171 11BD; # (퓢; 퓢; 퓢; 퓢; 퓢; ) HANGUL SYLLABLE PWIJ
+D4E3;D4E3;1111 1171 11BE;D4E3;1111 1171 11BE; # (퓣; 퓣; 퓣; 퓣; 퓣; ) HANGUL SYLLABLE PWIC
+D4E4;D4E4;1111 1171 11BF;D4E4;1111 1171 11BF; # (퓤; 퓤; 퓤; 퓤; 퓤; ) HANGUL SYLLABLE PWIK
+D4E5;D4E5;1111 1171 11C0;D4E5;1111 1171 11C0; # (퓥; 퓥; 퓥; 퓥; 퓥; ) HANGUL SYLLABLE PWIT
+D4E6;D4E6;1111 1171 11C1;D4E6;1111 1171 11C1; # (퓦; 퓦; 퓦; 퓦; 퓦; ) HANGUL SYLLABLE PWIP
+D4E7;D4E7;1111 1171 11C2;D4E7;1111 1171 11C2; # (퓧; 퓧; 퓧; 퓧; 퓧; ) HANGUL SYLLABLE PWIH
+D4E8;D4E8;1111 1172;D4E8;1111 1172; # (퓨; 퓨; 퓨; 퓨; 퓨; ) HANGUL SYLLABLE PYU
+D4E9;D4E9;1111 1172 11A8;D4E9;1111 1172 11A8; # (퓩; 퓩; 퓩; 퓩; 퓩; ) HANGUL SYLLABLE PYUG
+D4EA;D4EA;1111 1172 11A9;D4EA;1111 1172 11A9; # (퓪; 퓪; 퓪; 퓪; 퓪; ) HANGUL SYLLABLE PYUGG
+D4EB;D4EB;1111 1172 11AA;D4EB;1111 1172 11AA; # (퓫; 퓫; 퓫; 퓫; 퓫; ) HANGUL SYLLABLE PYUGS
+D4EC;D4EC;1111 1172 11AB;D4EC;1111 1172 11AB; # (퓬; 퓬; 퓬; 퓬; 퓬; ) HANGUL SYLLABLE PYUN
+D4ED;D4ED;1111 1172 11AC;D4ED;1111 1172 11AC; # (퓭; 퓭; 퓭; 퓭; 퓭; ) HANGUL SYLLABLE PYUNJ
+D4EE;D4EE;1111 1172 11AD;D4EE;1111 1172 11AD; # (퓮; 퓮; 퓮; 퓮; 퓮; ) HANGUL SYLLABLE PYUNH
+D4EF;D4EF;1111 1172 11AE;D4EF;1111 1172 11AE; # (퓯; 퓯; 퓯; 퓯; 퓯; ) HANGUL SYLLABLE PYUD
+D4F0;D4F0;1111 1172 11AF;D4F0;1111 1172 11AF; # (퓰; 퓰; 퓰; 퓰; 퓰; ) HANGUL SYLLABLE PYUL
+D4F1;D4F1;1111 1172 11B0;D4F1;1111 1172 11B0; # (퓱; 퓱; 퓱; 퓱; 퓱; ) HANGUL SYLLABLE PYULG
+D4F2;D4F2;1111 1172 11B1;D4F2;1111 1172 11B1; # (퓲; 퓲; 퓲; 퓲; 퓲; ) HANGUL SYLLABLE PYULM
+D4F3;D4F3;1111 1172 11B2;D4F3;1111 1172 11B2; # (퓳; 퓳; 퓳; 퓳; 퓳; ) HANGUL SYLLABLE PYULB
+D4F4;D4F4;1111 1172 11B3;D4F4;1111 1172 11B3; # (퓴; 퓴; 퓴; 퓴; 퓴; ) HANGUL SYLLABLE PYULS
+D4F5;D4F5;1111 1172 11B4;D4F5;1111 1172 11B4; # (퓵; 퓵; 퓵; 퓵; 퓵; ) HANGUL SYLLABLE PYULT
+D4F6;D4F6;1111 1172 11B5;D4F6;1111 1172 11B5; # (퓶; 퓶; 퓶; 퓶; 퓶; ) HANGUL SYLLABLE PYULP
+D4F7;D4F7;1111 1172 11B6;D4F7;1111 1172 11B6; # (퓷; 퓷; 퓷; 퓷; 퓷; ) HANGUL SYLLABLE PYULH
+D4F8;D4F8;1111 1172 11B7;D4F8;1111 1172 11B7; # (퓸; 퓸; 퓸; 퓸; 퓸; ) HANGUL SYLLABLE PYUM
+D4F9;D4F9;1111 1172 11B8;D4F9;1111 1172 11B8; # (퓹; 퓹; 퓹; 퓹; 퓹; ) HANGUL SYLLABLE PYUB
+D4FA;D4FA;1111 1172 11B9;D4FA;1111 1172 11B9; # (퓺; 퓺; 퓺; 퓺; 퓺; ) HANGUL SYLLABLE PYUBS
+D4FB;D4FB;1111 1172 11BA;D4FB;1111 1172 11BA; # (퓻; 퓻; 퓻; 퓻; 퓻; ) HANGUL SYLLABLE PYUS
+D4FC;D4FC;1111 1172 11BB;D4FC;1111 1172 11BB; # (퓼; 퓼; 퓼; 퓼; 퓼; ) HANGUL SYLLABLE PYUSS
+D4FD;D4FD;1111 1172 11BC;D4FD;1111 1172 11BC; # (퓽; 퓽; 퓽; 퓽; 퓽; ) HANGUL SYLLABLE PYUNG
+D4FE;D4FE;1111 1172 11BD;D4FE;1111 1172 11BD; # (퓾; 퓾; 퓾; 퓾; 퓾; ) HANGUL SYLLABLE PYUJ
+D4FF;D4FF;1111 1172 11BE;D4FF;1111 1172 11BE; # (퓿; 퓿; 퓿; 퓿; 퓿; ) HANGUL SYLLABLE PYUC
+D500;D500;1111 1172 11BF;D500;1111 1172 11BF; # (픀; 픀; 픀; 픀; 픀; ) HANGUL SYLLABLE PYUK
+D501;D501;1111 1172 11C0;D501;1111 1172 11C0; # (픁; 픁; 픁; 픁; 픁; ) HANGUL SYLLABLE PYUT
+D502;D502;1111 1172 11C1;D502;1111 1172 11C1; # (픂; 픂; 픂; 픂; 픂; ) HANGUL SYLLABLE PYUP
+D503;D503;1111 1172 11C2;D503;1111 1172 11C2; # (픃; 픃; 픃; 픃; 픃; ) HANGUL SYLLABLE PYUH
+D504;D504;1111 1173;D504;1111 1173; # (프; 프; 프; 프; 프; ) HANGUL SYLLABLE PEU
+D505;D505;1111 1173 11A8;D505;1111 1173 11A8; # (픅; 픅; 픅; 픅; 픅; ) HANGUL SYLLABLE PEUG
+D506;D506;1111 1173 11A9;D506;1111 1173 11A9; # (픆; 픆; 픆; 픆; 픆; ) HANGUL SYLLABLE PEUGG
+D507;D507;1111 1173 11AA;D507;1111 1173 11AA; # (픇; 픇; 픇; 픇; 픇; ) HANGUL SYLLABLE PEUGS
+D508;D508;1111 1173 11AB;D508;1111 1173 11AB; # (픈; 픈; 픈; 픈; 픈; ) HANGUL SYLLABLE PEUN
+D509;D509;1111 1173 11AC;D509;1111 1173 11AC; # (픉; 픉; 픉; 픉; 픉; ) HANGUL SYLLABLE PEUNJ
+D50A;D50A;1111 1173 11AD;D50A;1111 1173 11AD; # (픊; 픊; 픊; 픊; 픊; ) HANGUL SYLLABLE PEUNH
+D50B;D50B;1111 1173 11AE;D50B;1111 1173 11AE; # (픋; 픋; 픋; 픋; 픋; ) HANGUL SYLLABLE PEUD
+D50C;D50C;1111 1173 11AF;D50C;1111 1173 11AF; # (플; 플; 플; 플; 플; ) HANGUL SYLLABLE PEUL
+D50D;D50D;1111 1173 11B0;D50D;1111 1173 11B0; # (픍; 픍; 픍; 픍; 픍; ) HANGUL SYLLABLE PEULG
+D50E;D50E;1111 1173 11B1;D50E;1111 1173 11B1; # (픎; 픎; 픎; 픎; 픎; ) HANGUL SYLLABLE PEULM
+D50F;D50F;1111 1173 11B2;D50F;1111 1173 11B2; # (픏; 픏; 픏; 픏; 픏; ) HANGUL SYLLABLE PEULB
+D510;D510;1111 1173 11B3;D510;1111 1173 11B3; # (픐; 픐; 픐; 픐; 픐; ) HANGUL SYLLABLE PEULS
+D511;D511;1111 1173 11B4;D511;1111 1173 11B4; # (픑; 픑; 픑; 픑; 픑; ) HANGUL SYLLABLE PEULT
+D512;D512;1111 1173 11B5;D512;1111 1173 11B5; # (픒; 픒; 픒; 픒; 픒; ) HANGUL SYLLABLE PEULP
+D513;D513;1111 1173 11B6;D513;1111 1173 11B6; # (픓; 픓; 픓; 픓; 픓; ) HANGUL SYLLABLE PEULH
+D514;D514;1111 1173 11B7;D514;1111 1173 11B7; # (픔; 픔; 픔; 픔; 픔; ) HANGUL SYLLABLE PEUM
+D515;D515;1111 1173 11B8;D515;1111 1173 11B8; # (픕; 픕; 픕; 픕; 픕; ) HANGUL SYLLABLE PEUB
+D516;D516;1111 1173 11B9;D516;1111 1173 11B9; # (픖; 픖; 픖; 픖; 픖; ) HANGUL SYLLABLE PEUBS
+D517;D517;1111 1173 11BA;D517;1111 1173 11BA; # (픗; 픗; 픗; 픗; 픗; ) HANGUL SYLLABLE PEUS
+D518;D518;1111 1173 11BB;D518;1111 1173 11BB; # (픘; 픘; 픘; 픘; 픘; ) HANGUL SYLLABLE PEUSS
+D519;D519;1111 1173 11BC;D519;1111 1173 11BC; # (픙; 픙; 픙; 픙; 픙; ) HANGUL SYLLABLE PEUNG
+D51A;D51A;1111 1173 11BD;D51A;1111 1173 11BD; # (픚; 픚; 픚; 픚; 픚; ) HANGUL SYLLABLE PEUJ
+D51B;D51B;1111 1173 11BE;D51B;1111 1173 11BE; # (픛; 픛; 픛; 픛; 픛; ) HANGUL SYLLABLE PEUC
+D51C;D51C;1111 1173 11BF;D51C;1111 1173 11BF; # (픜; 픜; 픜; 픜; 픜; ) HANGUL SYLLABLE PEUK
+D51D;D51D;1111 1173 11C0;D51D;1111 1173 11C0; # (픝; 픝; 픝; 픝; 픝; ) HANGUL SYLLABLE PEUT
+D51E;D51E;1111 1173 11C1;D51E;1111 1173 11C1; # (픞; 픞; 픞; 픞; 픞; ) HANGUL SYLLABLE PEUP
+D51F;D51F;1111 1173 11C2;D51F;1111 1173 11C2; # (픟; 픟; 픟; 픟; 픟; ) HANGUL SYLLABLE PEUH
+D520;D520;1111 1174;D520;1111 1174; # (픠; 픠; 픠; 픠; 픠; ) HANGUL SYLLABLE PYI
+D521;D521;1111 1174 11A8;D521;1111 1174 11A8; # (픡; 픡; 픡; 픡; 픡; ) HANGUL SYLLABLE PYIG
+D522;D522;1111 1174 11A9;D522;1111 1174 11A9; # (픢; 픢; 픢; 픢; 픢; ) HANGUL SYLLABLE PYIGG
+D523;D523;1111 1174 11AA;D523;1111 1174 11AA; # (픣; 픣; 픣; 픣; 픣; ) HANGUL SYLLABLE PYIGS
+D524;D524;1111 1174 11AB;D524;1111 1174 11AB; # (픤; 픤; 픤; 픤; 픤; ) HANGUL SYLLABLE PYIN
+D525;D525;1111 1174 11AC;D525;1111 1174 11AC; # (픥; 픥; 픥; 픥; 픥; ) HANGUL SYLLABLE PYINJ
+D526;D526;1111 1174 11AD;D526;1111 1174 11AD; # (픦; 픦; 픦; 픦; 픦; ) HANGUL SYLLABLE PYINH
+D527;D527;1111 1174 11AE;D527;1111 1174 11AE; # (픧; 픧; 픧; 픧; 픧; ) HANGUL SYLLABLE PYID
+D528;D528;1111 1174 11AF;D528;1111 1174 11AF; # (픨; 픨; 픨; 픨; 픨; ) HANGUL SYLLABLE PYIL
+D529;D529;1111 1174 11B0;D529;1111 1174 11B0; # (픩; 픩; 픩; 픩; 픩; ) HANGUL SYLLABLE PYILG
+D52A;D52A;1111 1174 11B1;D52A;1111 1174 11B1; # (픪; 픪; 픪; 픪; 픪; ) HANGUL SYLLABLE PYILM
+D52B;D52B;1111 1174 11B2;D52B;1111 1174 11B2; # (픫; 픫; 픫; 픫; 픫; ) HANGUL SYLLABLE PYILB
+D52C;D52C;1111 1174 11B3;D52C;1111 1174 11B3; # (픬; 픬; 픬; 픬; 픬; ) HANGUL SYLLABLE PYILS
+D52D;D52D;1111 1174 11B4;D52D;1111 1174 11B4; # (픭; 픭; 픭; 픭; 픭; ) HANGUL SYLLABLE PYILT
+D52E;D52E;1111 1174 11B5;D52E;1111 1174 11B5; # (픮; 픮; 픮; 픮; 픮; ) HANGUL SYLLABLE PYILP
+D52F;D52F;1111 1174 11B6;D52F;1111 1174 11B6; # (픯; 픯; 픯; 픯; 픯; ) HANGUL SYLLABLE PYILH
+D530;D530;1111 1174 11B7;D530;1111 1174 11B7; # (픰; 픰; 픰; 픰; 픰; ) HANGUL SYLLABLE PYIM
+D531;D531;1111 1174 11B8;D531;1111 1174 11B8; # (픱; 픱; 픱; 픱; 픱; ) HANGUL SYLLABLE PYIB
+D532;D532;1111 1174 11B9;D532;1111 1174 11B9; # (픲; 픲; 픲; 픲; 픲; ) HANGUL SYLLABLE PYIBS
+D533;D533;1111 1174 11BA;D533;1111 1174 11BA; # (픳; 픳; 픳; 픳; 픳; ) HANGUL SYLLABLE PYIS
+D534;D534;1111 1174 11BB;D534;1111 1174 11BB; # (픴; 픴; 픴; 픴; 픴; ) HANGUL SYLLABLE PYISS
+D535;D535;1111 1174 11BC;D535;1111 1174 11BC; # (픵; 픵; 픵; 픵; 픵; ) HANGUL SYLLABLE PYING
+D536;D536;1111 1174 11BD;D536;1111 1174 11BD; # (픶; 픶; 픶; 픶; 픶; ) HANGUL SYLLABLE PYIJ
+D537;D537;1111 1174 11BE;D537;1111 1174 11BE; # (픷; 픷; 픷; 픷; 픷; ) HANGUL SYLLABLE PYIC
+D538;D538;1111 1174 11BF;D538;1111 1174 11BF; # (픸; 픸; 픸; 픸; 픸; ) HANGUL SYLLABLE PYIK
+D539;D539;1111 1174 11C0;D539;1111 1174 11C0; # (픹; 픹; 픹; 픹; 픹; ) HANGUL SYLLABLE PYIT
+D53A;D53A;1111 1174 11C1;D53A;1111 1174 11C1; # (픺; 픺; 픺; 픺; 픺; ) HANGUL SYLLABLE PYIP
+D53B;D53B;1111 1174 11C2;D53B;1111 1174 11C2; # (픻; 픻; 픻; 픻; 픻; ) HANGUL SYLLABLE PYIH
+D53C;D53C;1111 1175;D53C;1111 1175; # (피; 피; 피; 피; 피; ) HANGUL SYLLABLE PI
+D53D;D53D;1111 1175 11A8;D53D;1111 1175 11A8; # (픽; 픽; 픽; 픽; 픽; ) HANGUL SYLLABLE PIG
+D53E;D53E;1111 1175 11A9;D53E;1111 1175 11A9; # (픾; 픾; 픾; 픾; 픾; ) HANGUL SYLLABLE PIGG
+D53F;D53F;1111 1175 11AA;D53F;1111 1175 11AA; # (픿; 픿; 픿; 픿; 픿; ) HANGUL SYLLABLE PIGS
+D540;D540;1111 1175 11AB;D540;1111 1175 11AB; # (핀; 핀; 핀; 핀; 핀; ) HANGUL SYLLABLE PIN
+D541;D541;1111 1175 11AC;D541;1111 1175 11AC; # (핁; 핁; 핁; 핁; 핁; ) HANGUL SYLLABLE PINJ
+D542;D542;1111 1175 11AD;D542;1111 1175 11AD; # (핂; 핂; 핂; 핂; 핂; ) HANGUL SYLLABLE PINH
+D543;D543;1111 1175 11AE;D543;1111 1175 11AE; # (핃; 핃; 핃; 핃; 핃; ) HANGUL SYLLABLE PID
+D544;D544;1111 1175 11AF;D544;1111 1175 11AF; # (필; 필; 필; 필; 필; ) HANGUL SYLLABLE PIL
+D545;D545;1111 1175 11B0;D545;1111 1175 11B0; # (핅; 핅; 핅; 핅; 핅; ) HANGUL SYLLABLE PILG
+D546;D546;1111 1175 11B1;D546;1111 1175 11B1; # (핆; 핆; 핆; 핆; 핆; ) HANGUL SYLLABLE PILM
+D547;D547;1111 1175 11B2;D547;1111 1175 11B2; # (핇; 핇; 핇; 핇; 핇; ) HANGUL SYLLABLE PILB
+D548;D548;1111 1175 11B3;D548;1111 1175 11B3; # (핈; 핈; 핈; 핈; 핈; ) HANGUL SYLLABLE PILS
+D549;D549;1111 1175 11B4;D549;1111 1175 11B4; # (핉; 핉; 핉; 핉; 핉; ) HANGUL SYLLABLE PILT
+D54A;D54A;1111 1175 11B5;D54A;1111 1175 11B5; # (핊; 핊; 핊; 핊; 핊; ) HANGUL SYLLABLE PILP
+D54B;D54B;1111 1175 11B6;D54B;1111 1175 11B6; # (핋; 핋; 핋; 핋; 핋; ) HANGUL SYLLABLE PILH
+D54C;D54C;1111 1175 11B7;D54C;1111 1175 11B7; # (핌; 핌; 핌; 핌; 핌; ) HANGUL SYLLABLE PIM
+D54D;D54D;1111 1175 11B8;D54D;1111 1175 11B8; # (핍; 핍; 핍; 핍; 핍; ) HANGUL SYLLABLE PIB
+D54E;D54E;1111 1175 11B9;D54E;1111 1175 11B9; # (핎; 핎; 핎; 핎; 핎; ) HANGUL SYLLABLE PIBS
+D54F;D54F;1111 1175 11BA;D54F;1111 1175 11BA; # (핏; 핏; 핏; 핏; 핏; ) HANGUL SYLLABLE PIS
+D550;D550;1111 1175 11BB;D550;1111 1175 11BB; # (핐; 핐; 핐; 핐; 핐; ) HANGUL SYLLABLE PISS
+D551;D551;1111 1175 11BC;D551;1111 1175 11BC; # (핑; 핑; 핑; 핑; 핑; ) HANGUL SYLLABLE PING
+D552;D552;1111 1175 11BD;D552;1111 1175 11BD; # (핒; 핒; 핒; 핒; 핒; ) HANGUL SYLLABLE PIJ
+D553;D553;1111 1175 11BE;D553;1111 1175 11BE; # (핓; 핓; 핓; 핓; 핓; ) HANGUL SYLLABLE PIC
+D554;D554;1111 1175 11BF;D554;1111 1175 11BF; # (핔; 핔; 핔; 핔; 핔; ) HANGUL SYLLABLE PIK
+D555;D555;1111 1175 11C0;D555;1111 1175 11C0; # (핕; 핕; 핕; 핕; 핕; ) HANGUL SYLLABLE PIT
+D556;D556;1111 1175 11C1;D556;1111 1175 11C1; # (핖; 핖; 핖; 핖; 핖; ) HANGUL SYLLABLE PIP
+D557;D557;1111 1175 11C2;D557;1111 1175 11C2; # (핗; 핗; 핗; 핗; 핗; ) HANGUL SYLLABLE PIH
+D558;D558;1112 1161;D558;1112 1161; # (하; 하; 하; 하; 하; ) HANGUL SYLLABLE HA
+D559;D559;1112 1161 11A8;D559;1112 1161 11A8; # (학; 학; 학; 학; 학; ) HANGUL SYLLABLE HAG
+D55A;D55A;1112 1161 11A9;D55A;1112 1161 11A9; # (핚; 핚; 핚; 핚; 핚; ) HANGUL SYLLABLE HAGG
+D55B;D55B;1112 1161 11AA;D55B;1112 1161 11AA; # (핛; 핛; 핛; 핛; 핛; ) HANGUL SYLLABLE HAGS
+D55C;D55C;1112 1161 11AB;D55C;1112 1161 11AB; # (한; 한; 한; 한; 한; ) HANGUL SYLLABLE HAN
+D55D;D55D;1112 1161 11AC;D55D;1112 1161 11AC; # (핝; 핝; 핝; 핝; 핝; ) HANGUL SYLLABLE HANJ
+D55E;D55E;1112 1161 11AD;D55E;1112 1161 11AD; # (핞; 핞; 핞; 핞; 핞; ) HANGUL SYLLABLE HANH
+D55F;D55F;1112 1161 11AE;D55F;1112 1161 11AE; # (핟; 핟; 핟; 핟; 핟; ) HANGUL SYLLABLE HAD
+D560;D560;1112 1161 11AF;D560;1112 1161 11AF; # (할; 할; 할; 할; 할; ) HANGUL SYLLABLE HAL
+D561;D561;1112 1161 11B0;D561;1112 1161 11B0; # (핡; 핡; 핡; 핡; 핡; ) HANGUL SYLLABLE HALG
+D562;D562;1112 1161 11B1;D562;1112 1161 11B1; # (핢; 핢; 핢; 핢; 핢; ) HANGUL SYLLABLE HALM
+D563;D563;1112 1161 11B2;D563;1112 1161 11B2; # (핣; 핣; 핣; 핣; 핣; ) HANGUL SYLLABLE HALB
+D564;D564;1112 1161 11B3;D564;1112 1161 11B3; # (핤; 핤; 핤; 핤; 핤; ) HANGUL SYLLABLE HALS
+D565;D565;1112 1161 11B4;D565;1112 1161 11B4; # (핥; 핥; 핥; 핥; 핥; ) HANGUL SYLLABLE HALT
+D566;D566;1112 1161 11B5;D566;1112 1161 11B5; # (핦; 핦; 핦; 핦; 핦; ) HANGUL SYLLABLE HALP
+D567;D567;1112 1161 11B6;D567;1112 1161 11B6; # (핧; 핧; 핧; 핧; 핧; ) HANGUL SYLLABLE HALH
+D568;D568;1112 1161 11B7;D568;1112 1161 11B7; # (함; 함; 함; 함; 함; ) HANGUL SYLLABLE HAM
+D569;D569;1112 1161 11B8;D569;1112 1161 11B8; # (합; 합; 합; 합; 합; ) HANGUL SYLLABLE HAB
+D56A;D56A;1112 1161 11B9;D56A;1112 1161 11B9; # (핪; 핪; 핪; 핪; 핪; ) HANGUL SYLLABLE HABS
+D56B;D56B;1112 1161 11BA;D56B;1112 1161 11BA; # (핫; 핫; 핫; 핫; 핫; ) HANGUL SYLLABLE HAS
+D56C;D56C;1112 1161 11BB;D56C;1112 1161 11BB; # (핬; 핬; 핬; 핬; 핬; ) HANGUL SYLLABLE HASS
+D56D;D56D;1112 1161 11BC;D56D;1112 1161 11BC; # (항; 항; 항; 항; 항; ) HANGUL SYLLABLE HANG
+D56E;D56E;1112 1161 11BD;D56E;1112 1161 11BD; # (핮; 핮; 핮; 핮; 핮; ) HANGUL SYLLABLE HAJ
+D56F;D56F;1112 1161 11BE;D56F;1112 1161 11BE; # (핯; 핯; 핯; 핯; 핯; ) HANGUL SYLLABLE HAC
+D570;D570;1112 1161 11BF;D570;1112 1161 11BF; # (핰; 핰; 핰; 핰; 핰; ) HANGUL SYLLABLE HAK
+D571;D571;1112 1161 11C0;D571;1112 1161 11C0; # (핱; 핱; 핱; 핱; 핱; ) HANGUL SYLLABLE HAT
+D572;D572;1112 1161 11C1;D572;1112 1161 11C1; # (핲; 핲; 핲; 핲; 핲; ) HANGUL SYLLABLE HAP
+D573;D573;1112 1161 11C2;D573;1112 1161 11C2; # (핳; 핳; 핳; 핳; 핳; ) HANGUL SYLLABLE HAH
+D574;D574;1112 1162;D574;1112 1162; # (해; 해; 해; 해; 해; ) HANGUL SYLLABLE HAE
+D575;D575;1112 1162 11A8;D575;1112 1162 11A8; # (핵; 핵; 핵; 핵; 핵; ) HANGUL SYLLABLE HAEG
+D576;D576;1112 1162 11A9;D576;1112 1162 11A9; # (핶; 핶; 핶; 핶; 핶; ) HANGUL SYLLABLE HAEGG
+D577;D577;1112 1162 11AA;D577;1112 1162 11AA; # (핷; 핷; 핷; 핷; 핷; ) HANGUL SYLLABLE HAEGS
+D578;D578;1112 1162 11AB;D578;1112 1162 11AB; # (핸; 핸; 핸; 핸; 핸; ) HANGUL SYLLABLE HAEN
+D579;D579;1112 1162 11AC;D579;1112 1162 11AC; # (핹; 핹; 핹; 핹; 핹; ) HANGUL SYLLABLE HAENJ
+D57A;D57A;1112 1162 11AD;D57A;1112 1162 11AD; # (핺; 핺; 핺; 핺; 핺; ) HANGUL SYLLABLE HAENH
+D57B;D57B;1112 1162 11AE;D57B;1112 1162 11AE; # (핻; 핻; 핻; 핻; 핻; ) HANGUL SYLLABLE HAED
+D57C;D57C;1112 1162 11AF;D57C;1112 1162 11AF; # (핼; 핼; 핼; 핼; 핼; ) HANGUL SYLLABLE HAEL
+D57D;D57D;1112 1162 11B0;D57D;1112 1162 11B0; # (핽; 핽; 핽; 핽; 핽; ) HANGUL SYLLABLE HAELG
+D57E;D57E;1112 1162 11B1;D57E;1112 1162 11B1; # (핾; 핾; 핾; 핾; 핾; ) HANGUL SYLLABLE HAELM
+D57F;D57F;1112 1162 11B2;D57F;1112 1162 11B2; # (핿; 핿; 핿; 핿; 핿; ) HANGUL SYLLABLE HAELB
+D580;D580;1112 1162 11B3;D580;1112 1162 11B3; # (햀; 햀; 햀; 햀; 햀; ) HANGUL SYLLABLE HAELS
+D581;D581;1112 1162 11B4;D581;1112 1162 11B4; # (햁; 햁; 햁; 햁; 햁; ) HANGUL SYLLABLE HAELT
+D582;D582;1112 1162 11B5;D582;1112 1162 11B5; # (햂; 햂; 햂; 햂; 햂; ) HANGUL SYLLABLE HAELP
+D583;D583;1112 1162 11B6;D583;1112 1162 11B6; # (햃; 햃; 햃; 햃; 햃; ) HANGUL SYLLABLE HAELH
+D584;D584;1112 1162 11B7;D584;1112 1162 11B7; # (햄; 햄; 햄; 햄; 햄; ) HANGUL SYLLABLE HAEM
+D585;D585;1112 1162 11B8;D585;1112 1162 11B8; # (햅; 햅; 햅; 햅; 햅; ) HANGUL SYLLABLE HAEB
+D586;D586;1112 1162 11B9;D586;1112 1162 11B9; # (햆; 햆; 햆; 햆; 햆; ) HANGUL SYLLABLE HAEBS
+D587;D587;1112 1162 11BA;D587;1112 1162 11BA; # (햇; 햇; 햇; 햇; 햇; ) HANGUL SYLLABLE HAES
+D588;D588;1112 1162 11BB;D588;1112 1162 11BB; # (했; 했; 했; 했; 했; ) HANGUL SYLLABLE HAESS
+D589;D589;1112 1162 11BC;D589;1112 1162 11BC; # (행; 행; 행; 행; 행; ) HANGUL SYLLABLE HAENG
+D58A;D58A;1112 1162 11BD;D58A;1112 1162 11BD; # (햊; 햊; 햊; 햊; 햊; ) HANGUL SYLLABLE HAEJ
+D58B;D58B;1112 1162 11BE;D58B;1112 1162 11BE; # (햋; 햋; 햋; 햋; 햋; ) HANGUL SYLLABLE HAEC
+D58C;D58C;1112 1162 11BF;D58C;1112 1162 11BF; # (햌; 햌; 햌; 햌; 햌; ) HANGUL SYLLABLE HAEK
+D58D;D58D;1112 1162 11C0;D58D;1112 1162 11C0; # (햍; 햍; 햍; 햍; 햍; ) HANGUL SYLLABLE HAET
+D58E;D58E;1112 1162 11C1;D58E;1112 1162 11C1; # (햎; 햎; 햎; 햎; 햎; ) HANGUL SYLLABLE HAEP
+D58F;D58F;1112 1162 11C2;D58F;1112 1162 11C2; # (햏; 햏; 햏; 햏; 햏; ) HANGUL SYLLABLE HAEH
+D590;D590;1112 1163;D590;1112 1163; # (햐; 햐; 햐; 햐; 햐; ) HANGUL SYLLABLE HYA
+D591;D591;1112 1163 11A8;D591;1112 1163 11A8; # (햑; 햑; 햑; 햑; 햑; ) HANGUL SYLLABLE HYAG
+D592;D592;1112 1163 11A9;D592;1112 1163 11A9; # (햒; 햒; 햒; 햒; 햒; ) HANGUL SYLLABLE HYAGG
+D593;D593;1112 1163 11AA;D593;1112 1163 11AA; # (햓; 햓; 햓; 햓; 햓; ) HANGUL SYLLABLE HYAGS
+D594;D594;1112 1163 11AB;D594;1112 1163 11AB; # (햔; 햔; 햔; 햔; 햔; ) HANGUL SYLLABLE HYAN
+D595;D595;1112 1163 11AC;D595;1112 1163 11AC; # (햕; 햕; 햕; 햕; 햕; ) HANGUL SYLLABLE HYANJ
+D596;D596;1112 1163 11AD;D596;1112 1163 11AD; # (햖; 햖; 햖; 햖; 햖; ) HANGUL SYLLABLE HYANH
+D597;D597;1112 1163 11AE;D597;1112 1163 11AE; # (햗; 햗; 햗; 햗; 햗; ) HANGUL SYLLABLE HYAD
+D598;D598;1112 1163 11AF;D598;1112 1163 11AF; # (햘; 햘; 햘; 햘; 햘; ) HANGUL SYLLABLE HYAL
+D599;D599;1112 1163 11B0;D599;1112 1163 11B0; # (햙; 햙; 햙; 햙; 햙; ) HANGUL SYLLABLE HYALG
+D59A;D59A;1112 1163 11B1;D59A;1112 1163 11B1; # (햚; 햚; 햚; 햚; 햚; ) HANGUL SYLLABLE HYALM
+D59B;D59B;1112 1163 11B2;D59B;1112 1163 11B2; # (햛; 햛; 햛; 햛; 햛; ) HANGUL SYLLABLE HYALB
+D59C;D59C;1112 1163 11B3;D59C;1112 1163 11B3; # (햜; 햜; 햜; 햜; 햜; ) HANGUL SYLLABLE HYALS
+D59D;D59D;1112 1163 11B4;D59D;1112 1163 11B4; # (햝; 햝; 햝; 햝; 햝; ) HANGUL SYLLABLE HYALT
+D59E;D59E;1112 1163 11B5;D59E;1112 1163 11B5; # (햞; 햞; 햞; 햞; 햞; ) HANGUL SYLLABLE HYALP
+D59F;D59F;1112 1163 11B6;D59F;1112 1163 11B6; # (햟; 햟; 햟; 햟; 햟; ) HANGUL SYLLABLE HYALH
+D5A0;D5A0;1112 1163 11B7;D5A0;1112 1163 11B7; # (햠; 햠; 햠; 햠; 햠; ) HANGUL SYLLABLE HYAM
+D5A1;D5A1;1112 1163 11B8;D5A1;1112 1163 11B8; # (햡; 햡; 햡; 햡; 햡; ) HANGUL SYLLABLE HYAB
+D5A2;D5A2;1112 1163 11B9;D5A2;1112 1163 11B9; # (햢; 햢; 햢; 햢; 햢; ) HANGUL SYLLABLE HYABS
+D5A3;D5A3;1112 1163 11BA;D5A3;1112 1163 11BA; # (햣; 햣; 햣; 햣; 햣; ) HANGUL SYLLABLE HYAS
+D5A4;D5A4;1112 1163 11BB;D5A4;1112 1163 11BB; # (햤; 햤; 햤; 햤; 햤; ) HANGUL SYLLABLE HYASS
+D5A5;D5A5;1112 1163 11BC;D5A5;1112 1163 11BC; # (향; 향; 향; 향; 향; ) HANGUL SYLLABLE HYANG
+D5A6;D5A6;1112 1163 11BD;D5A6;1112 1163 11BD; # (햦; 햦; 햦; 햦; 햦; ) HANGUL SYLLABLE HYAJ
+D5A7;D5A7;1112 1163 11BE;D5A7;1112 1163 11BE; # (햧; 햧; 햧; 햧; 햧; ) HANGUL SYLLABLE HYAC
+D5A8;D5A8;1112 1163 11BF;D5A8;1112 1163 11BF; # (햨; 햨; 햨; 햨; 햨; ) HANGUL SYLLABLE HYAK
+D5A9;D5A9;1112 1163 11C0;D5A9;1112 1163 11C0; # (햩; 햩; 햩; 햩; 햩; ) HANGUL SYLLABLE HYAT
+D5AA;D5AA;1112 1163 11C1;D5AA;1112 1163 11C1; # (햪; 햪; 햪; 햪; 햪; ) HANGUL SYLLABLE HYAP
+D5AB;D5AB;1112 1163 11C2;D5AB;1112 1163 11C2; # (햫; 햫; 햫; 햫; 햫; ) HANGUL SYLLABLE HYAH
+D5AC;D5AC;1112 1164;D5AC;1112 1164; # (햬; 햬; 햬; 햬; 햬; ) HANGUL SYLLABLE HYAE
+D5AD;D5AD;1112 1164 11A8;D5AD;1112 1164 11A8; # (햭; 햭; 햭; 햭; 햭; ) HANGUL SYLLABLE HYAEG
+D5AE;D5AE;1112 1164 11A9;D5AE;1112 1164 11A9; # (햮; 햮; 햮; 햮; 햮; ) HANGUL SYLLABLE HYAEGG
+D5AF;D5AF;1112 1164 11AA;D5AF;1112 1164 11AA; # (햯; 햯; 햯; 햯; 햯; ) HANGUL SYLLABLE HYAEGS
+D5B0;D5B0;1112 1164 11AB;D5B0;1112 1164 11AB; # (햰; 햰; 햰; 햰; 햰; ) HANGUL SYLLABLE HYAEN
+D5B1;D5B1;1112 1164 11AC;D5B1;1112 1164 11AC; # (햱; 햱; 햱; 햱; 햱; ) HANGUL SYLLABLE HYAENJ
+D5B2;D5B2;1112 1164 11AD;D5B2;1112 1164 11AD; # (햲; 햲; 햲; 햲; 햲; ) HANGUL SYLLABLE HYAENH
+D5B3;D5B3;1112 1164 11AE;D5B3;1112 1164 11AE; # (햳; 햳; 햳; 햳; 햳; ) HANGUL SYLLABLE HYAED
+D5B4;D5B4;1112 1164 11AF;D5B4;1112 1164 11AF; # (햴; 햴; 햴; 햴; 햴; ) HANGUL SYLLABLE HYAEL
+D5B5;D5B5;1112 1164 11B0;D5B5;1112 1164 11B0; # (햵; 햵; 햵; 햵; 햵; ) HANGUL SYLLABLE HYAELG
+D5B6;D5B6;1112 1164 11B1;D5B6;1112 1164 11B1; # (햶; 햶; 햶; 햶; 햶; ) HANGUL SYLLABLE HYAELM
+D5B7;D5B7;1112 1164 11B2;D5B7;1112 1164 11B2; # (햷; 햷; 햷; 햷; 햷; ) HANGUL SYLLABLE HYAELB
+D5B8;D5B8;1112 1164 11B3;D5B8;1112 1164 11B3; # (햸; 햸; 햸; 햸; 햸; ) HANGUL SYLLABLE HYAELS
+D5B9;D5B9;1112 1164 11B4;D5B9;1112 1164 11B4; # (햹; 햹; 햹; 햹; 햹; ) HANGUL SYLLABLE HYAELT
+D5BA;D5BA;1112 1164 11B5;D5BA;1112 1164 11B5; # (햺; 햺; 햺; 햺; 햺; ) HANGUL SYLLABLE HYAELP
+D5BB;D5BB;1112 1164 11B6;D5BB;1112 1164 11B6; # (햻; 햻; 햻; 햻; 햻; ) HANGUL SYLLABLE HYAELH
+D5BC;D5BC;1112 1164 11B7;D5BC;1112 1164 11B7; # (햼; 햼; 햼; 햼; 햼; ) HANGUL SYLLABLE HYAEM
+D5BD;D5BD;1112 1164 11B8;D5BD;1112 1164 11B8; # (햽; 햽; 햽; 햽; 햽; ) HANGUL SYLLABLE HYAEB
+D5BE;D5BE;1112 1164 11B9;D5BE;1112 1164 11B9; # (햾; 햾; 햾; 햾; 햾; ) HANGUL SYLLABLE HYAEBS
+D5BF;D5BF;1112 1164 11BA;D5BF;1112 1164 11BA; # (햿; 햿; 햿; 햿; 햿; ) HANGUL SYLLABLE HYAES
+D5C0;D5C0;1112 1164 11BB;D5C0;1112 1164 11BB; # (헀; 헀; 헀; 헀; 헀; ) HANGUL SYLLABLE HYAESS
+D5C1;D5C1;1112 1164 11BC;D5C1;1112 1164 11BC; # (헁; 헁; 헁; 헁; 헁; ) HANGUL SYLLABLE HYAENG
+D5C2;D5C2;1112 1164 11BD;D5C2;1112 1164 11BD; # (헂; 헂; 헂; 헂; 헂; ) HANGUL SYLLABLE HYAEJ
+D5C3;D5C3;1112 1164 11BE;D5C3;1112 1164 11BE; # (헃; 헃; 헃; 헃; 헃; ) HANGUL SYLLABLE HYAEC
+D5C4;D5C4;1112 1164 11BF;D5C4;1112 1164 11BF; # (헄; 헄; 헄; 헄; 헄; ) HANGUL SYLLABLE HYAEK
+D5C5;D5C5;1112 1164 11C0;D5C5;1112 1164 11C0; # (헅; 헅; 헅; 헅; 헅; ) HANGUL SYLLABLE HYAET
+D5C6;D5C6;1112 1164 11C1;D5C6;1112 1164 11C1; # (헆; 헆; 헆; 헆; 헆; ) HANGUL SYLLABLE HYAEP
+D5C7;D5C7;1112 1164 11C2;D5C7;1112 1164 11C2; # (헇; 헇; 헇; 헇; 헇; ) HANGUL SYLLABLE HYAEH
+D5C8;D5C8;1112 1165;D5C8;1112 1165; # (허; 허; 허; 허; 허; ) HANGUL SYLLABLE HEO
+D5C9;D5C9;1112 1165 11A8;D5C9;1112 1165 11A8; # (헉; 헉; 헉; 헉; 헉; ) HANGUL SYLLABLE HEOG
+D5CA;D5CA;1112 1165 11A9;D5CA;1112 1165 11A9; # (헊; 헊; 헊; 헊; 헊; ) HANGUL SYLLABLE HEOGG
+D5CB;D5CB;1112 1165 11AA;D5CB;1112 1165 11AA; # (헋; 헋; 헋; 헋; 헋; ) HANGUL SYLLABLE HEOGS
+D5CC;D5CC;1112 1165 11AB;D5CC;1112 1165 11AB; # (헌; 헌; 헌; 헌; 헌; ) HANGUL SYLLABLE HEON
+D5CD;D5CD;1112 1165 11AC;D5CD;1112 1165 11AC; # (헍; 헍; 헍; 헍; 헍; ) HANGUL SYLLABLE HEONJ
+D5CE;D5CE;1112 1165 11AD;D5CE;1112 1165 11AD; # (헎; 헎; 헎; 헎; 헎; ) HANGUL SYLLABLE HEONH
+D5CF;D5CF;1112 1165 11AE;D5CF;1112 1165 11AE; # (헏; 헏; 헏; 헏; 헏; ) HANGUL SYLLABLE HEOD
+D5D0;D5D0;1112 1165 11AF;D5D0;1112 1165 11AF; # (헐; 헐; 헐; 헐; 헐; ) HANGUL SYLLABLE HEOL
+D5D1;D5D1;1112 1165 11B0;D5D1;1112 1165 11B0; # (헑; 헑; 헑; 헑; 헑; ) HANGUL SYLLABLE HEOLG
+D5D2;D5D2;1112 1165 11B1;D5D2;1112 1165 11B1; # (헒; 헒; 헒; 헒; 헒; ) HANGUL SYLLABLE HEOLM
+D5D3;D5D3;1112 1165 11B2;D5D3;1112 1165 11B2; # (헓; 헓; 헓; 헓; 헓; ) HANGUL SYLLABLE HEOLB
+D5D4;D5D4;1112 1165 11B3;D5D4;1112 1165 11B3; # (헔; 헔; 헔; 헔; 헔; ) HANGUL SYLLABLE HEOLS
+D5D5;D5D5;1112 1165 11B4;D5D5;1112 1165 11B4; # (헕; 헕; 헕; 헕; 헕; ) HANGUL SYLLABLE HEOLT
+D5D6;D5D6;1112 1165 11B5;D5D6;1112 1165 11B5; # (헖; 헖; 헖; 헖; 헖; ) HANGUL SYLLABLE HEOLP
+D5D7;D5D7;1112 1165 11B6;D5D7;1112 1165 11B6; # (헗; 헗; 헗; 헗; 헗; ) HANGUL SYLLABLE HEOLH
+D5D8;D5D8;1112 1165 11B7;D5D8;1112 1165 11B7; # (험; 험; 험; 험; 험; ) HANGUL SYLLABLE HEOM
+D5D9;D5D9;1112 1165 11B8;D5D9;1112 1165 11B8; # (헙; 헙; 헙; 헙; 헙; ) HANGUL SYLLABLE HEOB
+D5DA;D5DA;1112 1165 11B9;D5DA;1112 1165 11B9; # (헚; 헚; 헚; 헚; 헚; ) HANGUL SYLLABLE HEOBS
+D5DB;D5DB;1112 1165 11BA;D5DB;1112 1165 11BA; # (헛; 헛; 헛; 헛; 헛; ) HANGUL SYLLABLE HEOS
+D5DC;D5DC;1112 1165 11BB;D5DC;1112 1165 11BB; # (헜; 헜; 헜; 헜; 헜; ) HANGUL SYLLABLE HEOSS
+D5DD;D5DD;1112 1165 11BC;D5DD;1112 1165 11BC; # (헝; 헝; 헝; 헝; 헝; ) HANGUL SYLLABLE HEONG
+D5DE;D5DE;1112 1165 11BD;D5DE;1112 1165 11BD; # (헞; 헞; 헞; 헞; 헞; ) HANGUL SYLLABLE HEOJ
+D5DF;D5DF;1112 1165 11BE;D5DF;1112 1165 11BE; # (헟; 헟; 헟; 헟; 헟; ) HANGUL SYLLABLE HEOC
+D5E0;D5E0;1112 1165 11BF;D5E0;1112 1165 11BF; # (헠; 헠; 헠; 헠; 헠; ) HANGUL SYLLABLE HEOK
+D5E1;D5E1;1112 1165 11C0;D5E1;1112 1165 11C0; # (헡; 헡; 헡; 헡; 헡; ) HANGUL SYLLABLE HEOT
+D5E2;D5E2;1112 1165 11C1;D5E2;1112 1165 11C1; # (헢; 헢; 헢; 헢; 헢; ) HANGUL SYLLABLE HEOP
+D5E3;D5E3;1112 1165 11C2;D5E3;1112 1165 11C2; # (헣; 헣; 헣; 헣; 헣; ) HANGUL SYLLABLE HEOH
+D5E4;D5E4;1112 1166;D5E4;1112 1166; # (헤; 헤; 헤; 헤; 헤; ) HANGUL SYLLABLE HE
+D5E5;D5E5;1112 1166 11A8;D5E5;1112 1166 11A8; # (헥; 헥; 헥; 헥; 헥; ) HANGUL SYLLABLE HEG
+D5E6;D5E6;1112 1166 11A9;D5E6;1112 1166 11A9; # (헦; 헦; 헦; 헦; 헦; ) HANGUL SYLLABLE HEGG
+D5E7;D5E7;1112 1166 11AA;D5E7;1112 1166 11AA; # (헧; 헧; 헧; 헧; 헧; ) HANGUL SYLLABLE HEGS
+D5E8;D5E8;1112 1166 11AB;D5E8;1112 1166 11AB; # (헨; 헨; 헨; 헨; 헨; ) HANGUL SYLLABLE HEN
+D5E9;D5E9;1112 1166 11AC;D5E9;1112 1166 11AC; # (헩; 헩; 헩; 헩; 헩; ) HANGUL SYLLABLE HENJ
+D5EA;D5EA;1112 1166 11AD;D5EA;1112 1166 11AD; # (헪; 헪; 헪; 헪; 헪; ) HANGUL SYLLABLE HENH
+D5EB;D5EB;1112 1166 11AE;D5EB;1112 1166 11AE; # (헫; 헫; 헫; 헫; 헫; ) HANGUL SYLLABLE HED
+D5EC;D5EC;1112 1166 11AF;D5EC;1112 1166 11AF; # (헬; 헬; 헬; 헬; 헬; ) HANGUL SYLLABLE HEL
+D5ED;D5ED;1112 1166 11B0;D5ED;1112 1166 11B0; # (헭; 헭; 헭; 헭; 헭; ) HANGUL SYLLABLE HELG
+D5EE;D5EE;1112 1166 11B1;D5EE;1112 1166 11B1; # (헮; 헮; 헮; 헮; 헮; ) HANGUL SYLLABLE HELM
+D5EF;D5EF;1112 1166 11B2;D5EF;1112 1166 11B2; # (헯; 헯; 헯; 헯; 헯; ) HANGUL SYLLABLE HELB
+D5F0;D5F0;1112 1166 11B3;D5F0;1112 1166 11B3; # (헰; 헰; 헰; 헰; 헰; ) HANGUL SYLLABLE HELS
+D5F1;D5F1;1112 1166 11B4;D5F1;1112 1166 11B4; # (헱; 헱; 헱; 헱; 헱; ) HANGUL SYLLABLE HELT
+D5F2;D5F2;1112 1166 11B5;D5F2;1112 1166 11B5; # (헲; 헲; 헲; 헲; 헲; ) HANGUL SYLLABLE HELP
+D5F3;D5F3;1112 1166 11B6;D5F3;1112 1166 11B6; # (헳; 헳; 헳; 헳; 헳; ) HANGUL SYLLABLE HELH
+D5F4;D5F4;1112 1166 11B7;D5F4;1112 1166 11B7; # (헴; 헴; 헴; 헴; 헴; ) HANGUL SYLLABLE HEM
+D5F5;D5F5;1112 1166 11B8;D5F5;1112 1166 11B8; # (헵; 헵; 헵; 헵; 헵; ) HANGUL SYLLABLE HEB
+D5F6;D5F6;1112 1166 11B9;D5F6;1112 1166 11B9; # (헶; 헶; 헶; 헶; 헶; ) HANGUL SYLLABLE HEBS
+D5F7;D5F7;1112 1166 11BA;D5F7;1112 1166 11BA; # (헷; 헷; 헷; 헷; 헷; ) HANGUL SYLLABLE HES
+D5F8;D5F8;1112 1166 11BB;D5F8;1112 1166 11BB; # (헸; 헸; 헸; 헸; 헸; ) HANGUL SYLLABLE HESS
+D5F9;D5F9;1112 1166 11BC;D5F9;1112 1166 11BC; # (헹; 헹; 헹; 헹; 헹; ) HANGUL SYLLABLE HENG
+D5FA;D5FA;1112 1166 11BD;D5FA;1112 1166 11BD; # (헺; 헺; 헺; 헺; 헺; ) HANGUL SYLLABLE HEJ
+D5FB;D5FB;1112 1166 11BE;D5FB;1112 1166 11BE; # (헻; 헻; 헻; 헻; 헻; ) HANGUL SYLLABLE HEC
+D5FC;D5FC;1112 1166 11BF;D5FC;1112 1166 11BF; # (헼; 헼; 헼; 헼; 헼; ) HANGUL SYLLABLE HEK
+D5FD;D5FD;1112 1166 11C0;D5FD;1112 1166 11C0; # (헽; 헽; 헽; 헽; 헽; ) HANGUL SYLLABLE HET
+D5FE;D5FE;1112 1166 11C1;D5FE;1112 1166 11C1; # (헾; 헾; 헾; 헾; 헾; ) HANGUL SYLLABLE HEP
+D5FF;D5FF;1112 1166 11C2;D5FF;1112 1166 11C2; # (헿; 헿; 헿; 헿; 헿; ) HANGUL SYLLABLE HEH
+D600;D600;1112 1167;D600;1112 1167; # (혀; 혀; 혀; 혀; 혀; ) HANGUL SYLLABLE HYEO
+D601;D601;1112 1167 11A8;D601;1112 1167 11A8; # (혁; 혁; 혁; 혁; 혁; ) HANGUL SYLLABLE HYEOG
+D602;D602;1112 1167 11A9;D602;1112 1167 11A9; # (혂; 혂; 혂; 혂; 혂; ) HANGUL SYLLABLE HYEOGG
+D603;D603;1112 1167 11AA;D603;1112 1167 11AA; # (혃; 혃; 혃; 혃; 혃; ) HANGUL SYLLABLE HYEOGS
+D604;D604;1112 1167 11AB;D604;1112 1167 11AB; # (현; 현; 현; 현; 현; ) HANGUL SYLLABLE HYEON
+D605;D605;1112 1167 11AC;D605;1112 1167 11AC; # (혅; 혅; 혅; 혅; 혅; ) HANGUL SYLLABLE HYEONJ
+D606;D606;1112 1167 11AD;D606;1112 1167 11AD; # (혆; 혆; 혆; 혆; 혆; ) HANGUL SYLLABLE HYEONH
+D607;D607;1112 1167 11AE;D607;1112 1167 11AE; # (혇; 혇; 혇; 혇; 혇; ) HANGUL SYLLABLE HYEOD
+D608;D608;1112 1167 11AF;D608;1112 1167 11AF; # (혈; 혈; 혈; 혈; 혈; ) HANGUL SYLLABLE HYEOL
+D609;D609;1112 1167 11B0;D609;1112 1167 11B0; # (혉; 혉; 혉; 혉; 혉; ) HANGUL SYLLABLE HYEOLG
+D60A;D60A;1112 1167 11B1;D60A;1112 1167 11B1; # (혊; 혊; 혊; 혊; 혊; ) HANGUL SYLLABLE HYEOLM
+D60B;D60B;1112 1167 11B2;D60B;1112 1167 11B2; # (혋; 혋; 혋; 혋; 혋; ) HANGUL SYLLABLE HYEOLB
+D60C;D60C;1112 1167 11B3;D60C;1112 1167 11B3; # (혌; 혌; 혌; 혌; 혌; ) HANGUL SYLLABLE HYEOLS
+D60D;D60D;1112 1167 11B4;D60D;1112 1167 11B4; # (혍; 혍; 혍; 혍; 혍; ) HANGUL SYLLABLE HYEOLT
+D60E;D60E;1112 1167 11B5;D60E;1112 1167 11B5; # (혎; 혎; 혎; 혎; 혎; ) HANGUL SYLLABLE HYEOLP
+D60F;D60F;1112 1167 11B6;D60F;1112 1167 11B6; # (혏; 혏; 혏; 혏; 혏; ) HANGUL SYLLABLE HYEOLH
+D610;D610;1112 1167 11B7;D610;1112 1167 11B7; # (혐; 혐; 혐; 혐; 혐; ) HANGUL SYLLABLE HYEOM
+D611;D611;1112 1167 11B8;D611;1112 1167 11B8; # (협; 협; 협; 협; 협; ) HANGUL SYLLABLE HYEOB
+D612;D612;1112 1167 11B9;D612;1112 1167 11B9; # (혒; 혒; 혒; 혒; 혒; ) HANGUL SYLLABLE HYEOBS
+D613;D613;1112 1167 11BA;D613;1112 1167 11BA; # (혓; 혓; 혓; 혓; 혓; ) HANGUL SYLLABLE HYEOS
+D614;D614;1112 1167 11BB;D614;1112 1167 11BB; # (혔; 혔; 혔; 혔; 혔; ) HANGUL SYLLABLE HYEOSS
+D615;D615;1112 1167 11BC;D615;1112 1167 11BC; # (형; 형; 형; 형; 형; ) HANGUL SYLLABLE HYEONG
+D616;D616;1112 1167 11BD;D616;1112 1167 11BD; # (혖; 혖; 혖; 혖; 혖; ) HANGUL SYLLABLE HYEOJ
+D617;D617;1112 1167 11BE;D617;1112 1167 11BE; # (혗; 혗; 혗; 혗; 혗; ) HANGUL SYLLABLE HYEOC
+D618;D618;1112 1167 11BF;D618;1112 1167 11BF; # (혘; 혘; 혘; 혘; 혘; ) HANGUL SYLLABLE HYEOK
+D619;D619;1112 1167 11C0;D619;1112 1167 11C0; # (혙; 혙; 혙; 혙; 혙; ) HANGUL SYLLABLE HYEOT
+D61A;D61A;1112 1167 11C1;D61A;1112 1167 11C1; # (혚; 혚; 혚; 혚; 혚; ) HANGUL SYLLABLE HYEOP
+D61B;D61B;1112 1167 11C2;D61B;1112 1167 11C2; # (혛; 혛; 혛; 혛; 혛; ) HANGUL SYLLABLE HYEOH
+D61C;D61C;1112 1168;D61C;1112 1168; # (혜; 혜; 혜; 혜; 혜; ) HANGUL SYLLABLE HYE
+D61D;D61D;1112 1168 11A8;D61D;1112 1168 11A8; # (혝; 혝; 혝; 혝; 혝; ) HANGUL SYLLABLE HYEG
+D61E;D61E;1112 1168 11A9;D61E;1112 1168 11A9; # (혞; 혞; 혞; 혞; 혞; ) HANGUL SYLLABLE HYEGG
+D61F;D61F;1112 1168 11AA;D61F;1112 1168 11AA; # (혟; 혟; 혟; 혟; 혟; ) HANGUL SYLLABLE HYEGS
+D620;D620;1112 1168 11AB;D620;1112 1168 11AB; # (혠; 혠; 혠; 혠; 혠; ) HANGUL SYLLABLE HYEN
+D621;D621;1112 1168 11AC;D621;1112 1168 11AC; # (혡; 혡; 혡; 혡; 혡; ) HANGUL SYLLABLE HYENJ
+D622;D622;1112 1168 11AD;D622;1112 1168 11AD; # (혢; 혢; 혢; 혢; 혢; ) HANGUL SYLLABLE HYENH
+D623;D623;1112 1168 11AE;D623;1112 1168 11AE; # (혣; 혣; 혣; 혣; 혣; ) HANGUL SYLLABLE HYED
+D624;D624;1112 1168 11AF;D624;1112 1168 11AF; # (혤; 혤; 혤; 혤; 혤; ) HANGUL SYLLABLE HYEL
+D625;D625;1112 1168 11B0;D625;1112 1168 11B0; # (혥; 혥; 혥; 혥; 혥; ) HANGUL SYLLABLE HYELG
+D626;D626;1112 1168 11B1;D626;1112 1168 11B1; # (혦; 혦; 혦; 혦; 혦; ) HANGUL SYLLABLE HYELM
+D627;D627;1112 1168 11B2;D627;1112 1168 11B2; # (혧; 혧; 혧; 혧; 혧; ) HANGUL SYLLABLE HYELB
+D628;D628;1112 1168 11B3;D628;1112 1168 11B3; # (혨; 혨; 혨; 혨; 혨; ) HANGUL SYLLABLE HYELS
+D629;D629;1112 1168 11B4;D629;1112 1168 11B4; # (혩; 혩; 혩; 혩; 혩; ) HANGUL SYLLABLE HYELT
+D62A;D62A;1112 1168 11B5;D62A;1112 1168 11B5; # (혪; 혪; 혪; 혪; 혪; ) HANGUL SYLLABLE HYELP
+D62B;D62B;1112 1168 11B6;D62B;1112 1168 11B6; # (혫; 혫; 혫; 혫; 혫; ) HANGUL SYLLABLE HYELH
+D62C;D62C;1112 1168 11B7;D62C;1112 1168 11B7; # (혬; 혬; 혬; 혬; 혬; ) HANGUL SYLLABLE HYEM
+D62D;D62D;1112 1168 11B8;D62D;1112 1168 11B8; # (혭; 혭; 혭; 혭; 혭; ) HANGUL SYLLABLE HYEB
+D62E;D62E;1112 1168 11B9;D62E;1112 1168 11B9; # (혮; 혮; 혮; 혮; 혮; ) HANGUL SYLLABLE HYEBS
+D62F;D62F;1112 1168 11BA;D62F;1112 1168 11BA; # (혯; 혯; 혯; 혯; 혯; ) HANGUL SYLLABLE HYES
+D630;D630;1112 1168 11BB;D630;1112 1168 11BB; # (혰; 혰; 혰; 혰; 혰; ) HANGUL SYLLABLE HYESS
+D631;D631;1112 1168 11BC;D631;1112 1168 11BC; # (혱; 혱; 혱; 혱; 혱; ) HANGUL SYLLABLE HYENG
+D632;D632;1112 1168 11BD;D632;1112 1168 11BD; # (혲; 혲; 혲; 혲; 혲; ) HANGUL SYLLABLE HYEJ
+D633;D633;1112 1168 11BE;D633;1112 1168 11BE; # (혳; 혳; 혳; 혳; 혳; ) HANGUL SYLLABLE HYEC
+D634;D634;1112 1168 11BF;D634;1112 1168 11BF; # (혴; 혴; 혴; 혴; 혴; ) HANGUL SYLLABLE HYEK
+D635;D635;1112 1168 11C0;D635;1112 1168 11C0; # (혵; 혵; 혵; 혵; 혵; ) HANGUL SYLLABLE HYET
+D636;D636;1112 1168 11C1;D636;1112 1168 11C1; # (혶; 혶; 혶; 혶; 혶; ) HANGUL SYLLABLE HYEP
+D637;D637;1112 1168 11C2;D637;1112 1168 11C2; # (혷; 혷; 혷; 혷; 혷; ) HANGUL SYLLABLE HYEH
+D638;D638;1112 1169;D638;1112 1169; # (호; 호; 호; 호; 호; ) HANGUL SYLLABLE HO
+D639;D639;1112 1169 11A8;D639;1112 1169 11A8; # (혹; 혹; 혹; 혹; 혹; ) HANGUL SYLLABLE HOG
+D63A;D63A;1112 1169 11A9;D63A;1112 1169 11A9; # (혺; 혺; 혺; 혺; 혺; ) HANGUL SYLLABLE HOGG
+D63B;D63B;1112 1169 11AA;D63B;1112 1169 11AA; # (혻; 혻; 혻; 혻; 혻; ) HANGUL SYLLABLE HOGS
+D63C;D63C;1112 1169 11AB;D63C;1112 1169 11AB; # (혼; 혼; 혼; 혼; 혼; ) HANGUL SYLLABLE HON
+D63D;D63D;1112 1169 11AC;D63D;1112 1169 11AC; # (혽; 혽; 혽; 혽; 혽; ) HANGUL SYLLABLE HONJ
+D63E;D63E;1112 1169 11AD;D63E;1112 1169 11AD; # (혾; 혾; 혾; 혾; 혾; ) HANGUL SYLLABLE HONH
+D63F;D63F;1112 1169 11AE;D63F;1112 1169 11AE; # (혿; 혿; 혿; 혿; 혿; ) HANGUL SYLLABLE HOD
+D640;D640;1112 1169 11AF;D640;1112 1169 11AF; # (홀; 홀; 홀; 홀; 홀; ) HANGUL SYLLABLE HOL
+D641;D641;1112 1169 11B0;D641;1112 1169 11B0; # (홁; 홁; 홁; 홁; 홁; ) HANGUL SYLLABLE HOLG
+D642;D642;1112 1169 11B1;D642;1112 1169 11B1; # (홂; 홂; 홂; 홂; 홂; ) HANGUL SYLLABLE HOLM
+D643;D643;1112 1169 11B2;D643;1112 1169 11B2; # (홃; 홃; 홃; 홃; 홃; ) HANGUL SYLLABLE HOLB
+D644;D644;1112 1169 11B3;D644;1112 1169 11B3; # (홄; 홄; 홄; 홄; 홄; ) HANGUL SYLLABLE HOLS
+D645;D645;1112 1169 11B4;D645;1112 1169 11B4; # (홅; 홅; 홅; 홅; 홅; ) HANGUL SYLLABLE HOLT
+D646;D646;1112 1169 11B5;D646;1112 1169 11B5; # (홆; 홆; 홆; 홆; 홆; ) HANGUL SYLLABLE HOLP
+D647;D647;1112 1169 11B6;D647;1112 1169 11B6; # (홇; 홇; 홇; 홇; 홇; ) HANGUL SYLLABLE HOLH
+D648;D648;1112 1169 11B7;D648;1112 1169 11B7; # (홈; 홈; 홈; 홈; 홈; ) HANGUL SYLLABLE HOM
+D649;D649;1112 1169 11B8;D649;1112 1169 11B8; # (홉; 홉; 홉; 홉; 홉; ) HANGUL SYLLABLE HOB
+D64A;D64A;1112 1169 11B9;D64A;1112 1169 11B9; # (홊; 홊; 홊; 홊; 홊; ) HANGUL SYLLABLE HOBS
+D64B;D64B;1112 1169 11BA;D64B;1112 1169 11BA; # (홋; 홋; 홋; 홋; 홋; ) HANGUL SYLLABLE HOS
+D64C;D64C;1112 1169 11BB;D64C;1112 1169 11BB; # (홌; 홌; 홌; 홌; 홌; ) HANGUL SYLLABLE HOSS
+D64D;D64D;1112 1169 11BC;D64D;1112 1169 11BC; # (홍; 홍; 홍; 홍; 홍; ) HANGUL SYLLABLE HONG
+D64E;D64E;1112 1169 11BD;D64E;1112 1169 11BD; # (홎; 홎; 홎; 홎; 홎; ) HANGUL SYLLABLE HOJ
+D64F;D64F;1112 1169 11BE;D64F;1112 1169 11BE; # (홏; 홏; 홏; 홏; 홏; ) HANGUL SYLLABLE HOC
+D650;D650;1112 1169 11BF;D650;1112 1169 11BF; # (홐; 홐; 홐; 홐; 홐; ) HANGUL SYLLABLE HOK
+D651;D651;1112 1169 11C0;D651;1112 1169 11C0; # (홑; 홑; 홑; 홑; 홑; ) HANGUL SYLLABLE HOT
+D652;D652;1112 1169 11C1;D652;1112 1169 11C1; # (홒; 홒; 홒; 홒; 홒; ) HANGUL SYLLABLE HOP
+D653;D653;1112 1169 11C2;D653;1112 1169 11C2; # (홓; 홓; 홓; 홓; 홓; ) HANGUL SYLLABLE HOH
+D654;D654;1112 116A;D654;1112 116A; # (화; 화; 화; 화; 화; ) HANGUL SYLLABLE HWA
+D655;D655;1112 116A 11A8;D655;1112 116A 11A8; # (확; 확; 확; 확; 확; ) HANGUL SYLLABLE HWAG
+D656;D656;1112 116A 11A9;D656;1112 116A 11A9; # (홖; 홖; 홖; 홖; 홖; ) HANGUL SYLLABLE HWAGG
+D657;D657;1112 116A 11AA;D657;1112 116A 11AA; # (홗; 홗; 홗; 홗; 홗; ) HANGUL SYLLABLE HWAGS
+D658;D658;1112 116A 11AB;D658;1112 116A 11AB; # (환; 환; 환; 환; 환; ) HANGUL SYLLABLE HWAN
+D659;D659;1112 116A 11AC;D659;1112 116A 11AC; # (홙; 홙; 홙; 홙; 홙; ) HANGUL SYLLABLE HWANJ
+D65A;D65A;1112 116A 11AD;D65A;1112 116A 11AD; # (홚; 홚; 홚; 홚; 홚; ) HANGUL SYLLABLE HWANH
+D65B;D65B;1112 116A 11AE;D65B;1112 116A 11AE; # (홛; 홛; 홛; 홛; 홛; ) HANGUL SYLLABLE HWAD
+D65C;D65C;1112 116A 11AF;D65C;1112 116A 11AF; # (활; 활; 활; 활; 활; ) HANGUL SYLLABLE HWAL
+D65D;D65D;1112 116A 11B0;D65D;1112 116A 11B0; # (홝; 홝; 홝; 홝; 홝; ) HANGUL SYLLABLE HWALG
+D65E;D65E;1112 116A 11B1;D65E;1112 116A 11B1; # (홞; 홞; 홞; 홞; 홞; ) HANGUL SYLLABLE HWALM
+D65F;D65F;1112 116A 11B2;D65F;1112 116A 11B2; # (홟; 홟; 홟; 홟; 홟; ) HANGUL SYLLABLE HWALB
+D660;D660;1112 116A 11B3;D660;1112 116A 11B3; # (홠; 홠; 홠; 홠; 홠; ) HANGUL SYLLABLE HWALS
+D661;D661;1112 116A 11B4;D661;1112 116A 11B4; # (홡; 홡; 홡; 홡; 홡; ) HANGUL SYLLABLE HWALT
+D662;D662;1112 116A 11B5;D662;1112 116A 11B5; # (홢; 홢; 홢; 홢; 홢; ) HANGUL SYLLABLE HWALP
+D663;D663;1112 116A 11B6;D663;1112 116A 11B6; # (홣; 홣; 홣; 홣; 홣; ) HANGUL SYLLABLE HWALH
+D664;D664;1112 116A 11B7;D664;1112 116A 11B7; # (홤; 홤; 홤; 홤; 홤; ) HANGUL SYLLABLE HWAM
+D665;D665;1112 116A 11B8;D665;1112 116A 11B8; # (홥; 홥; 홥; 홥; 홥; ) HANGUL SYLLABLE HWAB
+D666;D666;1112 116A 11B9;D666;1112 116A 11B9; # (홦; 홦; 홦; 홦; 홦; ) HANGUL SYLLABLE HWABS
+D667;D667;1112 116A 11BA;D667;1112 116A 11BA; # (홧; 홧; 홧; 홧; 홧; ) HANGUL SYLLABLE HWAS
+D668;D668;1112 116A 11BB;D668;1112 116A 11BB; # (홨; 홨; 홨; 홨; 홨; ) HANGUL SYLLABLE HWASS
+D669;D669;1112 116A 11BC;D669;1112 116A 11BC; # (황; 황; 황; 황; 황; ) HANGUL SYLLABLE HWANG
+D66A;D66A;1112 116A 11BD;D66A;1112 116A 11BD; # (홪; 홪; 홪; 홪; 홪; ) HANGUL SYLLABLE HWAJ
+D66B;D66B;1112 116A 11BE;D66B;1112 116A 11BE; # (홫; 홫; 홫; 홫; 홫; ) HANGUL SYLLABLE HWAC
+D66C;D66C;1112 116A 11BF;D66C;1112 116A 11BF; # (홬; 홬; 홬; 홬; 홬; ) HANGUL SYLLABLE HWAK
+D66D;D66D;1112 116A 11C0;D66D;1112 116A 11C0; # (홭; 홭; 홭; 홭; 홭; ) HANGUL SYLLABLE HWAT
+D66E;D66E;1112 116A 11C1;D66E;1112 116A 11C1; # (홮; 홮; 홮; 홮; 홮; ) HANGUL SYLLABLE HWAP
+D66F;D66F;1112 116A 11C2;D66F;1112 116A 11C2; # (홯; 홯; 홯; 홯; 홯; ) HANGUL SYLLABLE HWAH
+D670;D670;1112 116B;D670;1112 116B; # (홰; 홰; 홰; 홰; 홰; ) HANGUL SYLLABLE HWAE
+D671;D671;1112 116B 11A8;D671;1112 116B 11A8; # (홱; 홱; 홱; 홱; 홱; ) HANGUL SYLLABLE HWAEG
+D672;D672;1112 116B 11A9;D672;1112 116B 11A9; # (홲; 홲; 홲; 홲; 홲; ) HANGUL SYLLABLE HWAEGG
+D673;D673;1112 116B 11AA;D673;1112 116B 11AA; # (홳; 홳; 홳; 홳; 홳; ) HANGUL SYLLABLE HWAEGS
+D674;D674;1112 116B 11AB;D674;1112 116B 11AB; # (홴; 홴; 홴; 홴; 홴; ) HANGUL SYLLABLE HWAEN
+D675;D675;1112 116B 11AC;D675;1112 116B 11AC; # (홵; 홵; 홵; 홵; 홵; ) HANGUL SYLLABLE HWAENJ
+D676;D676;1112 116B 11AD;D676;1112 116B 11AD; # (홶; 홶; 홶; 홶; 홶; ) HANGUL SYLLABLE HWAENH
+D677;D677;1112 116B 11AE;D677;1112 116B 11AE; # (홷; 홷; 홷; 홷; 홷; ) HANGUL SYLLABLE HWAED
+D678;D678;1112 116B 11AF;D678;1112 116B 11AF; # (홸; 홸; 홸; 홸; 홸; ) HANGUL SYLLABLE HWAEL
+D679;D679;1112 116B 11B0;D679;1112 116B 11B0; # (홹; 홹; 홹; 홹; 홹; ) HANGUL SYLLABLE HWAELG
+D67A;D67A;1112 116B 11B1;D67A;1112 116B 11B1; # (홺; 홺; 홺; 홺; 홺; ) HANGUL SYLLABLE HWAELM
+D67B;D67B;1112 116B 11B2;D67B;1112 116B 11B2; # (홻; 홻; 홻; 홻; 홻; ) HANGUL SYLLABLE HWAELB
+D67C;D67C;1112 116B 11B3;D67C;1112 116B 11B3; # (홼; 홼; 홼; 홼; 홼; ) HANGUL SYLLABLE HWAELS
+D67D;D67D;1112 116B 11B4;D67D;1112 116B 11B4; # (홽; 홽; 홽; 홽; 홽; ) HANGUL SYLLABLE HWAELT
+D67E;D67E;1112 116B 11B5;D67E;1112 116B 11B5; # (홾; 홾; 홾; 홾; 홾; ) HANGUL SYLLABLE HWAELP
+D67F;D67F;1112 116B 11B6;D67F;1112 116B 11B6; # (홿; 홿; 홿; 홿; 홿; ) HANGUL SYLLABLE HWAELH
+D680;D680;1112 116B 11B7;D680;1112 116B 11B7; # (횀; 횀; 횀; 횀; 횀; ) HANGUL SYLLABLE HWAEM
+D681;D681;1112 116B 11B8;D681;1112 116B 11B8; # (횁; 횁; 횁; 횁; 횁; ) HANGUL SYLLABLE HWAEB
+D682;D682;1112 116B 11B9;D682;1112 116B 11B9; # (횂; 횂; 횂; 횂; 횂; ) HANGUL SYLLABLE HWAEBS
+D683;D683;1112 116B 11BA;D683;1112 116B 11BA; # (횃; 횃; 횃; 횃; 횃; ) HANGUL SYLLABLE HWAES
+D684;D684;1112 116B 11BB;D684;1112 116B 11BB; # (횄; 횄; 횄; 횄; 횄; ) HANGUL SYLLABLE HWAESS
+D685;D685;1112 116B 11BC;D685;1112 116B 11BC; # (횅; 횅; 횅; 횅; 횅; ) HANGUL SYLLABLE HWAENG
+D686;D686;1112 116B 11BD;D686;1112 116B 11BD; # (횆; 횆; 횆; 횆; 횆; ) HANGUL SYLLABLE HWAEJ
+D687;D687;1112 116B 11BE;D687;1112 116B 11BE; # (횇; 횇; 횇; 횇; 횇; ) HANGUL SYLLABLE HWAEC
+D688;D688;1112 116B 11BF;D688;1112 116B 11BF; # (횈; 횈; 횈; 횈; 횈; ) HANGUL SYLLABLE HWAEK
+D689;D689;1112 116B 11C0;D689;1112 116B 11C0; # (횉; 횉; 횉; 횉; 횉; ) HANGUL SYLLABLE HWAET
+D68A;D68A;1112 116B 11C1;D68A;1112 116B 11C1; # (횊; 횊; 횊; 횊; 횊; ) HANGUL SYLLABLE HWAEP
+D68B;D68B;1112 116B 11C2;D68B;1112 116B 11C2; # (횋; 횋; 횋; 횋; 횋; ) HANGUL SYLLABLE HWAEH
+D68C;D68C;1112 116C;D68C;1112 116C; # (회; 회; 회; 회; 회; ) HANGUL SYLLABLE HOE
+D68D;D68D;1112 116C 11A8;D68D;1112 116C 11A8; # (획; 획; 획; 획; 획; ) HANGUL SYLLABLE HOEG
+D68E;D68E;1112 116C 11A9;D68E;1112 116C 11A9; # (횎; 횎; 횎; 횎; 횎; ) HANGUL SYLLABLE HOEGG
+D68F;D68F;1112 116C 11AA;D68F;1112 116C 11AA; # (횏; 횏; 횏; 횏; 횏; ) HANGUL SYLLABLE HOEGS
+D690;D690;1112 116C 11AB;D690;1112 116C 11AB; # (횐; 횐; 횐; 횐; 횐; ) HANGUL SYLLABLE HOEN
+D691;D691;1112 116C 11AC;D691;1112 116C 11AC; # (횑; 횑; 횑; 횑; 횑; ) HANGUL SYLLABLE HOENJ
+D692;D692;1112 116C 11AD;D692;1112 116C 11AD; # (횒; 횒; 횒; 횒; 횒; ) HANGUL SYLLABLE HOENH
+D693;D693;1112 116C 11AE;D693;1112 116C 11AE; # (횓; 횓; 횓; 횓; 횓; ) HANGUL SYLLABLE HOED
+D694;D694;1112 116C 11AF;D694;1112 116C 11AF; # (횔; 횔; 횔; 횔; 횔; ) HANGUL SYLLABLE HOEL
+D695;D695;1112 116C 11B0;D695;1112 116C 11B0; # (횕; 횕; 횕; 횕; 횕; ) HANGUL SYLLABLE HOELG
+D696;D696;1112 116C 11B1;D696;1112 116C 11B1; # (횖; 횖; 횖; 횖; 횖; ) HANGUL SYLLABLE HOELM
+D697;D697;1112 116C 11B2;D697;1112 116C 11B2; # (횗; 횗; 횗; 횗; 횗; ) HANGUL SYLLABLE HOELB
+D698;D698;1112 116C 11B3;D698;1112 116C 11B3; # (횘; 횘; 횘; 횘; 횘; ) HANGUL SYLLABLE HOELS
+D699;D699;1112 116C 11B4;D699;1112 116C 11B4; # (횙; 횙; 횙; 횙; 횙; ) HANGUL SYLLABLE HOELT
+D69A;D69A;1112 116C 11B5;D69A;1112 116C 11B5; # (횚; 횚; 횚; 횚; 횚; ) HANGUL SYLLABLE HOELP
+D69B;D69B;1112 116C 11B6;D69B;1112 116C 11B6; # (횛; 횛; 횛; 횛; 횛; ) HANGUL SYLLABLE HOELH
+D69C;D69C;1112 116C 11B7;D69C;1112 116C 11B7; # (횜; 횜; 횜; 횜; 횜; ) HANGUL SYLLABLE HOEM
+D69D;D69D;1112 116C 11B8;D69D;1112 116C 11B8; # (횝; 횝; 횝; 횝; 횝; ) HANGUL SYLLABLE HOEB
+D69E;D69E;1112 116C 11B9;D69E;1112 116C 11B9; # (횞; 횞; 횞; 횞; 횞; ) HANGUL SYLLABLE HOEBS
+D69F;D69F;1112 116C 11BA;D69F;1112 116C 11BA; # (횟; 횟; 횟; 횟; 횟; ) HANGUL SYLLABLE HOES
+D6A0;D6A0;1112 116C 11BB;D6A0;1112 116C 11BB; # (횠; 횠; 횠; 횠; 횠; ) HANGUL SYLLABLE HOESS
+D6A1;D6A1;1112 116C 11BC;D6A1;1112 116C 11BC; # (횡; 횡; 횡; 횡; 횡; ) HANGUL SYLLABLE HOENG
+D6A2;D6A2;1112 116C 11BD;D6A2;1112 116C 11BD; # (횢; 횢; 횢; 횢; 횢; ) HANGUL SYLLABLE HOEJ
+D6A3;D6A3;1112 116C 11BE;D6A3;1112 116C 11BE; # (횣; 횣; 횣; 횣; 횣; ) HANGUL SYLLABLE HOEC
+D6A4;D6A4;1112 116C 11BF;D6A4;1112 116C 11BF; # (횤; 횤; 횤; 횤; 횤; ) HANGUL SYLLABLE HOEK
+D6A5;D6A5;1112 116C 11C0;D6A5;1112 116C 11C0; # (횥; 횥; 횥; 횥; 횥; ) HANGUL SYLLABLE HOET
+D6A6;D6A6;1112 116C 11C1;D6A6;1112 116C 11C1; # (횦; 횦; 횦; 횦; 횦; ) HANGUL SYLLABLE HOEP
+D6A7;D6A7;1112 116C 11C2;D6A7;1112 116C 11C2; # (횧; 횧; 횧; 횧; 횧; ) HANGUL SYLLABLE HOEH
+D6A8;D6A8;1112 116D;D6A8;1112 116D; # (효; 효; 효; 효; 효; ) HANGUL SYLLABLE HYO
+D6A9;D6A9;1112 116D 11A8;D6A9;1112 116D 11A8; # (횩; 횩; 횩; 횩; 횩; ) HANGUL SYLLABLE HYOG
+D6AA;D6AA;1112 116D 11A9;D6AA;1112 116D 11A9; # (횪; 횪; 횪; 횪; 횪; ) HANGUL SYLLABLE HYOGG
+D6AB;D6AB;1112 116D 11AA;D6AB;1112 116D 11AA; # (횫; 횫; 횫; 횫; 횫; ) HANGUL SYLLABLE HYOGS
+D6AC;D6AC;1112 116D 11AB;D6AC;1112 116D 11AB; # (횬; 횬; 횬; 횬; 횬; ) HANGUL SYLLABLE HYON
+D6AD;D6AD;1112 116D 11AC;D6AD;1112 116D 11AC; # (횭; 횭; 횭; 횭; 횭; ) HANGUL SYLLABLE HYONJ
+D6AE;D6AE;1112 116D 11AD;D6AE;1112 116D 11AD; # (횮; 횮; 횮; 횮; 횮; ) HANGUL SYLLABLE HYONH
+D6AF;D6AF;1112 116D 11AE;D6AF;1112 116D 11AE; # (횯; 횯; 횯; 횯; 횯; ) HANGUL SYLLABLE HYOD
+D6B0;D6B0;1112 116D 11AF;D6B0;1112 116D 11AF; # (횰; 횰; 횰; 횰; 횰; ) HANGUL SYLLABLE HYOL
+D6B1;D6B1;1112 116D 11B0;D6B1;1112 116D 11B0; # (횱; 횱; 횱; 횱; 횱; ) HANGUL SYLLABLE HYOLG
+D6B2;D6B2;1112 116D 11B1;D6B2;1112 116D 11B1; # (횲; 횲; 횲; 횲; 횲; ) HANGUL SYLLABLE HYOLM
+D6B3;D6B3;1112 116D 11B2;D6B3;1112 116D 11B2; # (횳; 횳; 횳; 횳; 횳; ) HANGUL SYLLABLE HYOLB
+D6B4;D6B4;1112 116D 11B3;D6B4;1112 116D 11B3; # (횴; 횴; 횴; 횴; 횴; ) HANGUL SYLLABLE HYOLS
+D6B5;D6B5;1112 116D 11B4;D6B5;1112 116D 11B4; # (횵; 횵; 횵; 횵; 횵; ) HANGUL SYLLABLE HYOLT
+D6B6;D6B6;1112 116D 11B5;D6B6;1112 116D 11B5; # (횶; 횶; 횶; 횶; 횶; ) HANGUL SYLLABLE HYOLP
+D6B7;D6B7;1112 116D 11B6;D6B7;1112 116D 11B6; # (횷; 횷; 횷; 횷; 횷; ) HANGUL SYLLABLE HYOLH
+D6B8;D6B8;1112 116D 11B7;D6B8;1112 116D 11B7; # (횸; 횸; 횸; 횸; 횸; ) HANGUL SYLLABLE HYOM
+D6B9;D6B9;1112 116D 11B8;D6B9;1112 116D 11B8; # (횹; 횹; 횹; 횹; 횹; ) HANGUL SYLLABLE HYOB
+D6BA;D6BA;1112 116D 11B9;D6BA;1112 116D 11B9; # (횺; 횺; 횺; 횺; 횺; ) HANGUL SYLLABLE HYOBS
+D6BB;D6BB;1112 116D 11BA;D6BB;1112 116D 11BA; # (횻; 횻; 횻; 횻; 횻; ) HANGUL SYLLABLE HYOS
+D6BC;D6BC;1112 116D 11BB;D6BC;1112 116D 11BB; # (횼; 횼; 횼; 횼; 횼; ) HANGUL SYLLABLE HYOSS
+D6BD;D6BD;1112 116D 11BC;D6BD;1112 116D 11BC; # (횽; 횽; 횽; 횽; 횽; ) HANGUL SYLLABLE HYONG
+D6BE;D6BE;1112 116D 11BD;D6BE;1112 116D 11BD; # (횾; 횾; 횾; 횾; 횾; ) HANGUL SYLLABLE HYOJ
+D6BF;D6BF;1112 116D 11BE;D6BF;1112 116D 11BE; # (횿; 횿; 횿; 횿; 횿; ) HANGUL SYLLABLE HYOC
+D6C0;D6C0;1112 116D 11BF;D6C0;1112 116D 11BF; # (훀; 훀; 훀; 훀; 훀; ) HANGUL SYLLABLE HYOK
+D6C1;D6C1;1112 116D 11C0;D6C1;1112 116D 11C0; # (훁; 훁; 훁; 훁; 훁; ) HANGUL SYLLABLE HYOT
+D6C2;D6C2;1112 116D 11C1;D6C2;1112 116D 11C1; # (훂; 훂; 훂; 훂; 훂; ) HANGUL SYLLABLE HYOP
+D6C3;D6C3;1112 116D 11C2;D6C3;1112 116D 11C2; # (훃; 훃; 훃; 훃; 훃; ) HANGUL SYLLABLE HYOH
+D6C4;D6C4;1112 116E;D6C4;1112 116E; # (후; 후; 후; 후; 후; ) HANGUL SYLLABLE HU
+D6C5;D6C5;1112 116E 11A8;D6C5;1112 116E 11A8; # (훅; 훅; 훅; 훅; 훅; ) HANGUL SYLLABLE HUG
+D6C6;D6C6;1112 116E 11A9;D6C6;1112 116E 11A9; # (훆; 훆; 훆; 훆; 훆; ) HANGUL SYLLABLE HUGG
+D6C7;D6C7;1112 116E 11AA;D6C7;1112 116E 11AA; # (훇; 훇; 훇; 훇; 훇; ) HANGUL SYLLABLE HUGS
+D6C8;D6C8;1112 116E 11AB;D6C8;1112 116E 11AB; # (훈; 훈; 훈; 훈; 훈; ) HANGUL SYLLABLE HUN
+D6C9;D6C9;1112 116E 11AC;D6C9;1112 116E 11AC; # (훉; 훉; 훉; 훉; 훉; ) HANGUL SYLLABLE HUNJ
+D6CA;D6CA;1112 116E 11AD;D6CA;1112 116E 11AD; # (훊; 훊; 훊; 훊; 훊; ) HANGUL SYLLABLE HUNH
+D6CB;D6CB;1112 116E 11AE;D6CB;1112 116E 11AE; # (훋; 훋; 훋; 훋; 훋; ) HANGUL SYLLABLE HUD
+D6CC;D6CC;1112 116E 11AF;D6CC;1112 116E 11AF; # (훌; 훌; 훌; 훌; 훌; ) HANGUL SYLLABLE HUL
+D6CD;D6CD;1112 116E 11B0;D6CD;1112 116E 11B0; # (훍; 훍; 훍; 훍; 훍; ) HANGUL SYLLABLE HULG
+D6CE;D6CE;1112 116E 11B1;D6CE;1112 116E 11B1; # (훎; 훎; 훎; 훎; 훎; ) HANGUL SYLLABLE HULM
+D6CF;D6CF;1112 116E 11B2;D6CF;1112 116E 11B2; # (훏; 훏; 훏; 훏; 훏; ) HANGUL SYLLABLE HULB
+D6D0;D6D0;1112 116E 11B3;D6D0;1112 116E 11B3; # (훐; 훐; 훐; 훐; 훐; ) HANGUL SYLLABLE HULS
+D6D1;D6D1;1112 116E 11B4;D6D1;1112 116E 11B4; # (훑; 훑; 훑; 훑; 훑; ) HANGUL SYLLABLE HULT
+D6D2;D6D2;1112 116E 11B5;D6D2;1112 116E 11B5; # (훒; 훒; 훒; 훒; 훒; ) HANGUL SYLLABLE HULP
+D6D3;D6D3;1112 116E 11B6;D6D3;1112 116E 11B6; # (훓; 훓; 훓; 훓; 훓; ) HANGUL SYLLABLE HULH
+D6D4;D6D4;1112 116E 11B7;D6D4;1112 116E 11B7; # (훔; 훔; 훔; 훔; 훔; ) HANGUL SYLLABLE HUM
+D6D5;D6D5;1112 116E 11B8;D6D5;1112 116E 11B8; # (훕; 훕; 훕; 훕; 훕; ) HANGUL SYLLABLE HUB
+D6D6;D6D6;1112 116E 11B9;D6D6;1112 116E 11B9; # (훖; 훖; 훖; 훖; 훖; ) HANGUL SYLLABLE HUBS
+D6D7;D6D7;1112 116E 11BA;D6D7;1112 116E 11BA; # (훗; 훗; 훗; 훗; 훗; ) HANGUL SYLLABLE HUS
+D6D8;D6D8;1112 116E 11BB;D6D8;1112 116E 11BB; # (훘; 훘; 훘; 훘; 훘; ) HANGUL SYLLABLE HUSS
+D6D9;D6D9;1112 116E 11BC;D6D9;1112 116E 11BC; # (훙; 훙; 훙; 훙; 훙; ) HANGUL SYLLABLE HUNG
+D6DA;D6DA;1112 116E 11BD;D6DA;1112 116E 11BD; # (훚; 훚; 훚; 훚; 훚; ) HANGUL SYLLABLE HUJ
+D6DB;D6DB;1112 116E 11BE;D6DB;1112 116E 11BE; # (훛; 훛; 훛; 훛; 훛; ) HANGUL SYLLABLE HUC
+D6DC;D6DC;1112 116E 11BF;D6DC;1112 116E 11BF; # (훜; 훜; 훜; 훜; 훜; ) HANGUL SYLLABLE HUK
+D6DD;D6DD;1112 116E 11C0;D6DD;1112 116E 11C0; # (훝; 훝; 훝; 훝; 훝; ) HANGUL SYLLABLE HUT
+D6DE;D6DE;1112 116E 11C1;D6DE;1112 116E 11C1; # (훞; 훞; 훞; 훞; 훞; ) HANGUL SYLLABLE HUP
+D6DF;D6DF;1112 116E 11C2;D6DF;1112 116E 11C2; # (훟; 훟; 훟; 훟; 훟; ) HANGUL SYLLABLE HUH
+D6E0;D6E0;1112 116F;D6E0;1112 116F; # (훠; 훠; 훠; 훠; 훠; ) HANGUL SYLLABLE HWEO
+D6E1;D6E1;1112 116F 11A8;D6E1;1112 116F 11A8; # (훡; 훡; 훡; 훡; 훡; ) HANGUL SYLLABLE HWEOG
+D6E2;D6E2;1112 116F 11A9;D6E2;1112 116F 11A9; # (훢; 훢; 훢; 훢; 훢; ) HANGUL SYLLABLE HWEOGG
+D6E3;D6E3;1112 116F 11AA;D6E3;1112 116F 11AA; # (훣; 훣; 훣; 훣; 훣; ) HANGUL SYLLABLE HWEOGS
+D6E4;D6E4;1112 116F 11AB;D6E4;1112 116F 11AB; # (훤; 훤; 훤; 훤; 훤; ) HANGUL SYLLABLE HWEON
+D6E5;D6E5;1112 116F 11AC;D6E5;1112 116F 11AC; # (훥; 훥; 훥; 훥; 훥; ) HANGUL SYLLABLE HWEONJ
+D6E6;D6E6;1112 116F 11AD;D6E6;1112 116F 11AD; # (훦; 훦; 훦; 훦; 훦; ) HANGUL SYLLABLE HWEONH
+D6E7;D6E7;1112 116F 11AE;D6E7;1112 116F 11AE; # (훧; 훧; 훧; 훧; 훧; ) HANGUL SYLLABLE HWEOD
+D6E8;D6E8;1112 116F 11AF;D6E8;1112 116F 11AF; # (훨; 훨; 훨; 훨; 훨; ) HANGUL SYLLABLE HWEOL
+D6E9;D6E9;1112 116F 11B0;D6E9;1112 116F 11B0; # (훩; 훩; 훩; 훩; 훩; ) HANGUL SYLLABLE HWEOLG
+D6EA;D6EA;1112 116F 11B1;D6EA;1112 116F 11B1; # (훪; 훪; 훪; 훪; 훪; ) HANGUL SYLLABLE HWEOLM
+D6EB;D6EB;1112 116F 11B2;D6EB;1112 116F 11B2; # (훫; 훫; 훫; 훫; 훫; ) HANGUL SYLLABLE HWEOLB
+D6EC;D6EC;1112 116F 11B3;D6EC;1112 116F 11B3; # (훬; 훬; 훬; 훬; 훬; ) HANGUL SYLLABLE HWEOLS
+D6ED;D6ED;1112 116F 11B4;D6ED;1112 116F 11B4; # (훭; 훭; 훭; 훭; 훭; ) HANGUL SYLLABLE HWEOLT
+D6EE;D6EE;1112 116F 11B5;D6EE;1112 116F 11B5; # (훮; 훮; 훮; 훮; 훮; ) HANGUL SYLLABLE HWEOLP
+D6EF;D6EF;1112 116F 11B6;D6EF;1112 116F 11B6; # (훯; 훯; 훯; 훯; 훯; ) HANGUL SYLLABLE HWEOLH
+D6F0;D6F0;1112 116F 11B7;D6F0;1112 116F 11B7; # (훰; 훰; 훰; 훰; 훰; ) HANGUL SYLLABLE HWEOM
+D6F1;D6F1;1112 116F 11B8;D6F1;1112 116F 11B8; # (훱; 훱; 훱; 훱; 훱; ) HANGUL SYLLABLE HWEOB
+D6F2;D6F2;1112 116F 11B9;D6F2;1112 116F 11B9; # (훲; 훲; 훲; 훲; 훲; ) HANGUL SYLLABLE HWEOBS
+D6F3;D6F3;1112 116F 11BA;D6F3;1112 116F 11BA; # (훳; 훳; 훳; 훳; 훳; ) HANGUL SYLLABLE HWEOS
+D6F4;D6F4;1112 116F 11BB;D6F4;1112 116F 11BB; # (훴; 훴; 훴; 훴; 훴; ) HANGUL SYLLABLE HWEOSS
+D6F5;D6F5;1112 116F 11BC;D6F5;1112 116F 11BC; # (훵; 훵; 훵; 훵; 훵; ) HANGUL SYLLABLE HWEONG
+D6F6;D6F6;1112 116F 11BD;D6F6;1112 116F 11BD; # (훶; 훶; 훶; 훶; 훶; ) HANGUL SYLLABLE HWEOJ
+D6F7;D6F7;1112 116F 11BE;D6F7;1112 116F 11BE; # (훷; 훷; 훷; 훷; 훷; ) HANGUL SYLLABLE HWEOC
+D6F8;D6F8;1112 116F 11BF;D6F8;1112 116F 11BF; # (훸; 훸; 훸; 훸; 훸; ) HANGUL SYLLABLE HWEOK
+D6F9;D6F9;1112 116F 11C0;D6F9;1112 116F 11C0; # (훹; 훹; 훹; 훹; 훹; ) HANGUL SYLLABLE HWEOT
+D6FA;D6FA;1112 116F 11C1;D6FA;1112 116F 11C1; # (훺; 훺; 훺; 훺; 훺; ) HANGUL SYLLABLE HWEOP
+D6FB;D6FB;1112 116F 11C2;D6FB;1112 116F 11C2; # (훻; 훻; 훻; 훻; 훻; ) HANGUL SYLLABLE HWEOH
+D6FC;D6FC;1112 1170;D6FC;1112 1170; # (훼; 훼; 훼; 훼; 훼; ) HANGUL SYLLABLE HWE
+D6FD;D6FD;1112 1170 11A8;D6FD;1112 1170 11A8; # (훽; 훽; 훽; 훽; 훽; ) HANGUL SYLLABLE HWEG
+D6FE;D6FE;1112 1170 11A9;D6FE;1112 1170 11A9; # (훾; 훾; 훾; 훾; 훾; ) HANGUL SYLLABLE HWEGG
+D6FF;D6FF;1112 1170 11AA;D6FF;1112 1170 11AA; # (훿; 훿; 훿; 훿; 훿; ) HANGUL SYLLABLE HWEGS
+D700;D700;1112 1170 11AB;D700;1112 1170 11AB; # (휀; 휀; 휀; 휀; 휀; ) HANGUL SYLLABLE HWEN
+D701;D701;1112 1170 11AC;D701;1112 1170 11AC; # (휁; 휁; 휁; 휁; 휁; ) HANGUL SYLLABLE HWENJ
+D702;D702;1112 1170 11AD;D702;1112 1170 11AD; # (휂; 휂; 휂; 휂; 휂; ) HANGUL SYLLABLE HWENH
+D703;D703;1112 1170 11AE;D703;1112 1170 11AE; # (휃; 휃; 휃; 휃; 휃; ) HANGUL SYLLABLE HWED
+D704;D704;1112 1170 11AF;D704;1112 1170 11AF; # (휄; 휄; 휄; 휄; 휄; ) HANGUL SYLLABLE HWEL
+D705;D705;1112 1170 11B0;D705;1112 1170 11B0; # (휅; 휅; 휅; 휅; 휅; ) HANGUL SYLLABLE HWELG
+D706;D706;1112 1170 11B1;D706;1112 1170 11B1; # (휆; 휆; 휆; 휆; 휆; ) HANGUL SYLLABLE HWELM
+D707;D707;1112 1170 11B2;D707;1112 1170 11B2; # (휇; 휇; 휇; 휇; 휇; ) HANGUL SYLLABLE HWELB
+D708;D708;1112 1170 11B3;D708;1112 1170 11B3; # (휈; 휈; 휈; 휈; 휈; ) HANGUL SYLLABLE HWELS
+D709;D709;1112 1170 11B4;D709;1112 1170 11B4; # (휉; 휉; 휉; 휉; 휉; ) HANGUL SYLLABLE HWELT
+D70A;D70A;1112 1170 11B5;D70A;1112 1170 11B5; # (휊; 휊; 휊; 휊; 휊; ) HANGUL SYLLABLE HWELP
+D70B;D70B;1112 1170 11B6;D70B;1112 1170 11B6; # (휋; 휋; 휋; 휋; 휋; ) HANGUL SYLLABLE HWELH
+D70C;D70C;1112 1170 11B7;D70C;1112 1170 11B7; # (휌; 휌; 휌; 휌; 휌; ) HANGUL SYLLABLE HWEM
+D70D;D70D;1112 1170 11B8;D70D;1112 1170 11B8; # (휍; 휍; 휍; 휍; 휍; ) HANGUL SYLLABLE HWEB
+D70E;D70E;1112 1170 11B9;D70E;1112 1170 11B9; # (휎; 휎; 휎; 휎; 휎; ) HANGUL SYLLABLE HWEBS
+D70F;D70F;1112 1170 11BA;D70F;1112 1170 11BA; # (휏; 휏; 휏; 휏; 휏; ) HANGUL SYLLABLE HWES
+D710;D710;1112 1170 11BB;D710;1112 1170 11BB; # (휐; 휐; 휐; 휐; 휐; ) HANGUL SYLLABLE HWESS
+D711;D711;1112 1170 11BC;D711;1112 1170 11BC; # (휑; 휑; 휑; 휑; 휑; ) HANGUL SYLLABLE HWENG
+D712;D712;1112 1170 11BD;D712;1112 1170 11BD; # (휒; 휒; 휒; 휒; 휒; ) HANGUL SYLLABLE HWEJ
+D713;D713;1112 1170 11BE;D713;1112 1170 11BE; # (휓; 휓; 휓; 휓; 휓; ) HANGUL SYLLABLE HWEC
+D714;D714;1112 1170 11BF;D714;1112 1170 11BF; # (휔; 휔; 휔; 휔; 휔; ) HANGUL SYLLABLE HWEK
+D715;D715;1112 1170 11C0;D715;1112 1170 11C0; # (휕; 휕; 휕; 휕; 휕; ) HANGUL SYLLABLE HWET
+D716;D716;1112 1170 11C1;D716;1112 1170 11C1; # (휖; 휖; 휖; 휖; 휖; ) HANGUL SYLLABLE HWEP
+D717;D717;1112 1170 11C2;D717;1112 1170 11C2; # (휗; 휗; 휗; 휗; 휗; ) HANGUL SYLLABLE HWEH
+D718;D718;1112 1171;D718;1112 1171; # (휘; 휘; 휘; 휘; 휘; ) HANGUL SYLLABLE HWI
+D719;D719;1112 1171 11A8;D719;1112 1171 11A8; # (휙; 휙; 휙; 휙; 휙; ) HANGUL SYLLABLE HWIG
+D71A;D71A;1112 1171 11A9;D71A;1112 1171 11A9; # (휚; 휚; 휚; 휚; 휚; ) HANGUL SYLLABLE HWIGG
+D71B;D71B;1112 1171 11AA;D71B;1112 1171 11AA; # (휛; 휛; 휛; 휛; 휛; ) HANGUL SYLLABLE HWIGS
+D71C;D71C;1112 1171 11AB;D71C;1112 1171 11AB; # (휜; 휜; 휜; 휜; 휜; ) HANGUL SYLLABLE HWIN
+D71D;D71D;1112 1171 11AC;D71D;1112 1171 11AC; # (휝; 휝; 휝; 휝; 휝; ) HANGUL SYLLABLE HWINJ
+D71E;D71E;1112 1171 11AD;D71E;1112 1171 11AD; # (휞; 휞; 휞; 휞; 휞; ) HANGUL SYLLABLE HWINH
+D71F;D71F;1112 1171 11AE;D71F;1112 1171 11AE; # (휟; 휟; 휟; 휟; 휟; ) HANGUL SYLLABLE HWID
+D720;D720;1112 1171 11AF;D720;1112 1171 11AF; # (휠; 휠; 휠; 휠; 휠; ) HANGUL SYLLABLE HWIL
+D721;D721;1112 1171 11B0;D721;1112 1171 11B0; # (휡; 휡; 휡; 휡; 휡; ) HANGUL SYLLABLE HWILG
+D722;D722;1112 1171 11B1;D722;1112 1171 11B1; # (휢; 휢; 휢; 휢; 휢; ) HANGUL SYLLABLE HWILM
+D723;D723;1112 1171 11B2;D723;1112 1171 11B2; # (휣; 휣; 휣; 휣; 휣; ) HANGUL SYLLABLE HWILB
+D724;D724;1112 1171 11B3;D724;1112 1171 11B3; # (휤; 휤; 휤; 휤; 휤; ) HANGUL SYLLABLE HWILS
+D725;D725;1112 1171 11B4;D725;1112 1171 11B4; # (휥; 휥; 휥; 휥; 휥; ) HANGUL SYLLABLE HWILT
+D726;D726;1112 1171 11B5;D726;1112 1171 11B5; # (휦; 휦; 휦; 휦; 휦; ) HANGUL SYLLABLE HWILP
+D727;D727;1112 1171 11B6;D727;1112 1171 11B6; # (휧; 휧; 휧; 휧; 휧; ) HANGUL SYLLABLE HWILH
+D728;D728;1112 1171 11B7;D728;1112 1171 11B7; # (휨; 휨; 휨; 휨; 휨; ) HANGUL SYLLABLE HWIM
+D729;D729;1112 1171 11B8;D729;1112 1171 11B8; # (휩; 휩; 휩; 휩; 휩; ) HANGUL SYLLABLE HWIB
+D72A;D72A;1112 1171 11B9;D72A;1112 1171 11B9; # (휪; 휪; 휪; 휪; 휪; ) HANGUL SYLLABLE HWIBS
+D72B;D72B;1112 1171 11BA;D72B;1112 1171 11BA; # (휫; 휫; 휫; 휫; 휫; ) HANGUL SYLLABLE HWIS
+D72C;D72C;1112 1171 11BB;D72C;1112 1171 11BB; # (휬; 휬; 휬; 휬; 휬; ) HANGUL SYLLABLE HWISS
+D72D;D72D;1112 1171 11BC;D72D;1112 1171 11BC; # (휭; 휭; 휭; 휭; 휭; ) HANGUL SYLLABLE HWING
+D72E;D72E;1112 1171 11BD;D72E;1112 1171 11BD; # (휮; 휮; 휮; 휮; 휮; ) HANGUL SYLLABLE HWIJ
+D72F;D72F;1112 1171 11BE;D72F;1112 1171 11BE; # (휯; 휯; 휯; 휯; 휯; ) HANGUL SYLLABLE HWIC
+D730;D730;1112 1171 11BF;D730;1112 1171 11BF; # (휰; 휰; 휰; 휰; 휰; ) HANGUL SYLLABLE HWIK
+D731;D731;1112 1171 11C0;D731;1112 1171 11C0; # (휱; 휱; 휱; 휱; 휱; ) HANGUL SYLLABLE HWIT
+D732;D732;1112 1171 11C1;D732;1112 1171 11C1; # (휲; 휲; 휲; 휲; 휲; ) HANGUL SYLLABLE HWIP
+D733;D733;1112 1171 11C2;D733;1112 1171 11C2; # (휳; 휳; 휳; 휳; 휳; ) HANGUL SYLLABLE HWIH
+D734;D734;1112 1172;D734;1112 1172; # (휴; 휴; 휴; 휴; 휴; ) HANGUL SYLLABLE HYU
+D735;D735;1112 1172 11A8;D735;1112 1172 11A8; # (휵; 휵; 휵; 휵; 휵; ) HANGUL SYLLABLE HYUG
+D736;D736;1112 1172 11A9;D736;1112 1172 11A9; # (휶; 휶; 휶; 휶; 휶; ) HANGUL SYLLABLE HYUGG
+D737;D737;1112 1172 11AA;D737;1112 1172 11AA; # (휷; 휷; 휷; 휷; 휷; ) HANGUL SYLLABLE HYUGS
+D738;D738;1112 1172 11AB;D738;1112 1172 11AB; # (휸; 휸; 휸; 휸; 휸; ) HANGUL SYLLABLE HYUN
+D739;D739;1112 1172 11AC;D739;1112 1172 11AC; # (휹; 휹; 휹; 휹; 휹; ) HANGUL SYLLABLE HYUNJ
+D73A;D73A;1112 1172 11AD;D73A;1112 1172 11AD; # (휺; 휺; 휺; 휺; 휺; ) HANGUL SYLLABLE HYUNH
+D73B;D73B;1112 1172 11AE;D73B;1112 1172 11AE; # (휻; 휻; 휻; 휻; 휻; ) HANGUL SYLLABLE HYUD
+D73C;D73C;1112 1172 11AF;D73C;1112 1172 11AF; # (휼; 휼; 휼; 휼; 휼; ) HANGUL SYLLABLE HYUL
+D73D;D73D;1112 1172 11B0;D73D;1112 1172 11B0; # (휽; 휽; 휽; 휽; 휽; ) HANGUL SYLLABLE HYULG
+D73E;D73E;1112 1172 11B1;D73E;1112 1172 11B1; # (휾; 휾; 휾; 휾; 휾; ) HANGUL SYLLABLE HYULM
+D73F;D73F;1112 1172 11B2;D73F;1112 1172 11B2; # (휿; 휿; 휿; 휿; 휿; ) HANGUL SYLLABLE HYULB
+D740;D740;1112 1172 11B3;D740;1112 1172 11B3; # (흀; 흀; 흀; 흀; 흀; ) HANGUL SYLLABLE HYULS
+D741;D741;1112 1172 11B4;D741;1112 1172 11B4; # (흁; 흁; 흁; 흁; 흁; ) HANGUL SYLLABLE HYULT
+D742;D742;1112 1172 11B5;D742;1112 1172 11B5; # (흂; 흂; 흂; 흂; 흂; ) HANGUL SYLLABLE HYULP
+D743;D743;1112 1172 11B6;D743;1112 1172 11B6; # (흃; 흃; 흃; 흃; 흃; ) HANGUL SYLLABLE HYULH
+D744;D744;1112 1172 11B7;D744;1112 1172 11B7; # (흄; 흄; 흄; 흄; 흄; ) HANGUL SYLLABLE HYUM
+D745;D745;1112 1172 11B8;D745;1112 1172 11B8; # (흅; 흅; 흅; 흅; 흅; ) HANGUL SYLLABLE HYUB
+D746;D746;1112 1172 11B9;D746;1112 1172 11B9; # (흆; 흆; 흆; 흆; 흆; ) HANGUL SYLLABLE HYUBS
+D747;D747;1112 1172 11BA;D747;1112 1172 11BA; # (흇; 흇; 흇; 흇; 흇; ) HANGUL SYLLABLE HYUS
+D748;D748;1112 1172 11BB;D748;1112 1172 11BB; # (흈; 흈; 흈; 흈; 흈; ) HANGUL SYLLABLE HYUSS
+D749;D749;1112 1172 11BC;D749;1112 1172 11BC; # (흉; 흉; 흉; 흉; 흉; ) HANGUL SYLLABLE HYUNG
+D74A;D74A;1112 1172 11BD;D74A;1112 1172 11BD; # (흊; 흊; 흊; 흊; 흊; ) HANGUL SYLLABLE HYUJ
+D74B;D74B;1112 1172 11BE;D74B;1112 1172 11BE; # (흋; 흋; 흋; 흋; 흋; ) HANGUL SYLLABLE HYUC
+D74C;D74C;1112 1172 11BF;D74C;1112 1172 11BF; # (흌; 흌; 흌; 흌; 흌; ) HANGUL SYLLABLE HYUK
+D74D;D74D;1112 1172 11C0;D74D;1112 1172 11C0; # (흍; 흍; 흍; 흍; 흍; ) HANGUL SYLLABLE HYUT
+D74E;D74E;1112 1172 11C1;D74E;1112 1172 11C1; # (흎; 흎; 흎; 흎; 흎; ) HANGUL SYLLABLE HYUP
+D74F;D74F;1112 1172 11C2;D74F;1112 1172 11C2; # (흏; 흏; 흏; 흏; 흏; ) HANGUL SYLLABLE HYUH
+D750;D750;1112 1173;D750;1112 1173; # (흐; 흐; 흐; 흐; 흐; ) HANGUL SYLLABLE HEU
+D751;D751;1112 1173 11A8;D751;1112 1173 11A8; # (흑; 흑; 흑; 흑; 흑; ) HANGUL SYLLABLE HEUG
+D752;D752;1112 1173 11A9;D752;1112 1173 11A9; # (흒; 흒; 흒; 흒; 흒; ) HANGUL SYLLABLE HEUGG
+D753;D753;1112 1173 11AA;D753;1112 1173 11AA; # (흓; 흓; 흓; 흓; 흓; ) HANGUL SYLLABLE HEUGS
+D754;D754;1112 1173 11AB;D754;1112 1173 11AB; # (흔; 흔; 흔; 흔; 흔; ) HANGUL SYLLABLE HEUN
+D755;D755;1112 1173 11AC;D755;1112 1173 11AC; # (흕; 흕; 흕; 흕; 흕; ) HANGUL SYLLABLE HEUNJ
+D756;D756;1112 1173 11AD;D756;1112 1173 11AD; # (흖; 흖; 흖; 흖; 흖; ) HANGUL SYLLABLE HEUNH
+D757;D757;1112 1173 11AE;D757;1112 1173 11AE; # (흗; 흗; 흗; 흗; 흗; ) HANGUL SYLLABLE HEUD
+D758;D758;1112 1173 11AF;D758;1112 1173 11AF; # (흘; 흘; 흘; 흘; 흘; ) HANGUL SYLLABLE HEUL
+D759;D759;1112 1173 11B0;D759;1112 1173 11B0; # (흙; 흙; 흙; 흙; 흙; ) HANGUL SYLLABLE HEULG
+D75A;D75A;1112 1173 11B1;D75A;1112 1173 11B1; # (흚; 흚; 흚; 흚; 흚; ) HANGUL SYLLABLE HEULM
+D75B;D75B;1112 1173 11B2;D75B;1112 1173 11B2; # (흛; 흛; 흛; 흛; 흛; ) HANGUL SYLLABLE HEULB
+D75C;D75C;1112 1173 11B3;D75C;1112 1173 11B3; # (흜; 흜; 흜; 흜; 흜; ) HANGUL SYLLABLE HEULS
+D75D;D75D;1112 1173 11B4;D75D;1112 1173 11B4; # (흝; 흝; 흝; 흝; 흝; ) HANGUL SYLLABLE HEULT
+D75E;D75E;1112 1173 11B5;D75E;1112 1173 11B5; # (흞; 흞; 흞; 흞; 흞; ) HANGUL SYLLABLE HEULP
+D75F;D75F;1112 1173 11B6;D75F;1112 1173 11B6; # (흟; 흟; 흟; 흟; 흟; ) HANGUL SYLLABLE HEULH
+D760;D760;1112 1173 11B7;D760;1112 1173 11B7; # (흠; 흠; 흠; 흠; 흠; ) HANGUL SYLLABLE HEUM
+D761;D761;1112 1173 11B8;D761;1112 1173 11B8; # (흡; 흡; 흡; 흡; 흡; ) HANGUL SYLLABLE HEUB
+D762;D762;1112 1173 11B9;D762;1112 1173 11B9; # (흢; 흢; 흢; 흢; 흢; ) HANGUL SYLLABLE HEUBS
+D763;D763;1112 1173 11BA;D763;1112 1173 11BA; # (흣; 흣; 흣; 흣; 흣; ) HANGUL SYLLABLE HEUS
+D764;D764;1112 1173 11BB;D764;1112 1173 11BB; # (흤; 흤; 흤; 흤; 흤; ) HANGUL SYLLABLE HEUSS
+D765;D765;1112 1173 11BC;D765;1112 1173 11BC; # (흥; 흥; 흥; 흥; 흥; ) HANGUL SYLLABLE HEUNG
+D766;D766;1112 1173 11BD;D766;1112 1173 11BD; # (흦; 흦; 흦; 흦; 흦; ) HANGUL SYLLABLE HEUJ
+D767;D767;1112 1173 11BE;D767;1112 1173 11BE; # (흧; 흧; 흧; 흧; 흧; ) HANGUL SYLLABLE HEUC
+D768;D768;1112 1173 11BF;D768;1112 1173 11BF; # (흨; 흨; 흨; 흨; 흨; ) HANGUL SYLLABLE HEUK
+D769;D769;1112 1173 11C0;D769;1112 1173 11C0; # (흩; 흩; 흩; 흩; 흩; ) HANGUL SYLLABLE HEUT
+D76A;D76A;1112 1173 11C1;D76A;1112 1173 11C1; # (흪; 흪; 흪; 흪; 흪; ) HANGUL SYLLABLE HEUP
+D76B;D76B;1112 1173 11C2;D76B;1112 1173 11C2; # (흫; 흫; 흫; 흫; 흫; ) HANGUL SYLLABLE HEUH
+D76C;D76C;1112 1174;D76C;1112 1174; # (희; 희; 희; 희; 희; ) HANGUL SYLLABLE HYI
+D76D;D76D;1112 1174 11A8;D76D;1112 1174 11A8; # (흭; 흭; 흭; 흭; 흭; ) HANGUL SYLLABLE HYIG
+D76E;D76E;1112 1174 11A9;D76E;1112 1174 11A9; # (흮; 흮; 흮; 흮; 흮; ) HANGUL SYLLABLE HYIGG
+D76F;D76F;1112 1174 11AA;D76F;1112 1174 11AA; # (흯; 흯; 흯; 흯; 흯; ) HANGUL SYLLABLE HYIGS
+D770;D770;1112 1174 11AB;D770;1112 1174 11AB; # (흰; 흰; 흰; 흰; 흰; ) HANGUL SYLLABLE HYIN
+D771;D771;1112 1174 11AC;D771;1112 1174 11AC; # (흱; 흱; 흱; 흱; 흱; ) HANGUL SYLLABLE HYINJ
+D772;D772;1112 1174 11AD;D772;1112 1174 11AD; # (흲; 흲; 흲; 흲; 흲; ) HANGUL SYLLABLE HYINH
+D773;D773;1112 1174 11AE;D773;1112 1174 11AE; # (흳; 흳; 흳; 흳; 흳; ) HANGUL SYLLABLE HYID
+D774;D774;1112 1174 11AF;D774;1112 1174 11AF; # (흴; 흴; 흴; 흴; 흴; ) HANGUL SYLLABLE HYIL
+D775;D775;1112 1174 11B0;D775;1112 1174 11B0; # (흵; 흵; 흵; 흵; 흵; ) HANGUL SYLLABLE HYILG
+D776;D776;1112 1174 11B1;D776;1112 1174 11B1; # (흶; 흶; 흶; 흶; 흶; ) HANGUL SYLLABLE HYILM
+D777;D777;1112 1174 11B2;D777;1112 1174 11B2; # (흷; 흷; 흷; 흷; 흷; ) HANGUL SYLLABLE HYILB
+D778;D778;1112 1174 11B3;D778;1112 1174 11B3; # (흸; 흸; 흸; 흸; 흸; ) HANGUL SYLLABLE HYILS
+D779;D779;1112 1174 11B4;D779;1112 1174 11B4; # (흹; 흹; 흹; 흹; 흹; ) HANGUL SYLLABLE HYILT
+D77A;D77A;1112 1174 11B5;D77A;1112 1174 11B5; # (흺; 흺; 흺; 흺; 흺; ) HANGUL SYLLABLE HYILP
+D77B;D77B;1112 1174 11B6;D77B;1112 1174 11B6; # (흻; 흻; 흻; 흻; 흻; ) HANGUL SYLLABLE HYILH
+D77C;D77C;1112 1174 11B7;D77C;1112 1174 11B7; # (흼; 흼; 흼; 흼; 흼; ) HANGUL SYLLABLE HYIM
+D77D;D77D;1112 1174 11B8;D77D;1112 1174 11B8; # (흽; 흽; 흽; 흽; 흽; ) HANGUL SYLLABLE HYIB
+D77E;D77E;1112 1174 11B9;D77E;1112 1174 11B9; # (흾; 흾; 흾; 흾; 흾; ) HANGUL SYLLABLE HYIBS
+D77F;D77F;1112 1174 11BA;D77F;1112 1174 11BA; # (흿; 흿; 흿; 흿; 흿; ) HANGUL SYLLABLE HYIS
+D780;D780;1112 1174 11BB;D780;1112 1174 11BB; # (힀; 힀; 힀; 힀; 힀; ) HANGUL SYLLABLE HYISS
+D781;D781;1112 1174 11BC;D781;1112 1174 11BC; # (힁; 힁; 힁; 힁; 힁; ) HANGUL SYLLABLE HYING
+D782;D782;1112 1174 11BD;D782;1112 1174 11BD; # (힂; 힂; 힂; 힂; 힂; ) HANGUL SYLLABLE HYIJ
+D783;D783;1112 1174 11BE;D783;1112 1174 11BE; # (힃; 힃; 힃; 힃; 힃; ) HANGUL SYLLABLE HYIC
+D784;D784;1112 1174 11BF;D784;1112 1174 11BF; # (힄; 힄; 힄; 힄; 힄; ) HANGUL SYLLABLE HYIK
+D785;D785;1112 1174 11C0;D785;1112 1174 11C0; # (힅; 힅; 힅; 힅; 힅; ) HANGUL SYLLABLE HYIT
+D786;D786;1112 1174 11C1;D786;1112 1174 11C1; # (힆; 힆; 힆; 힆; 힆; ) HANGUL SYLLABLE HYIP
+D787;D787;1112 1174 11C2;D787;1112 1174 11C2; # (힇; 힇; 힇; 힇; 힇; ) HANGUL SYLLABLE HYIH
+D788;D788;1112 1175;D788;1112 1175; # (히; 히; 히; 히; 히; ) HANGUL SYLLABLE HI
+D789;D789;1112 1175 11A8;D789;1112 1175 11A8; # (힉; 힉; 힉; 힉; 힉; ) HANGUL SYLLABLE HIG
+D78A;D78A;1112 1175 11A9;D78A;1112 1175 11A9; # (힊; 힊; 힊; 힊; 힊; ) HANGUL SYLLABLE HIGG
+D78B;D78B;1112 1175 11AA;D78B;1112 1175 11AA; # (힋; 힋; 힋; 힋; 힋; ) HANGUL SYLLABLE HIGS
+D78C;D78C;1112 1175 11AB;D78C;1112 1175 11AB; # (힌; 힌; 힌; 힌; 힌; ) HANGUL SYLLABLE HIN
+D78D;D78D;1112 1175 11AC;D78D;1112 1175 11AC; # (힍; 힍; 힍; 힍; 힍; ) HANGUL SYLLABLE HINJ
+D78E;D78E;1112 1175 11AD;D78E;1112 1175 11AD; # (힎; 힎; 힎; 힎; 힎; ) HANGUL SYLLABLE HINH
+D78F;D78F;1112 1175 11AE;D78F;1112 1175 11AE; # (힏; 힏; 힏; 힏; 힏; ) HANGUL SYLLABLE HID
+D790;D790;1112 1175 11AF;D790;1112 1175 11AF; # (힐; 힐; 힐; 힐; 힐; ) HANGUL SYLLABLE HIL
+D791;D791;1112 1175 11B0;D791;1112 1175 11B0; # (힑; 힑; 힑; 힑; 힑; ) HANGUL SYLLABLE HILG
+D792;D792;1112 1175 11B1;D792;1112 1175 11B1; # (힒; 힒; 힒; 힒; 힒; ) HANGUL SYLLABLE HILM
+D793;D793;1112 1175 11B2;D793;1112 1175 11B2; # (힓; 힓; 힓; 힓; 힓; ) HANGUL SYLLABLE HILB
+D794;D794;1112 1175 11B3;D794;1112 1175 11B3; # (힔; 힔; 힔; 힔; 힔; ) HANGUL SYLLABLE HILS
+D795;D795;1112 1175 11B4;D795;1112 1175 11B4; # (힕; 힕; 힕; 힕; 힕; ) HANGUL SYLLABLE HILT
+D796;D796;1112 1175 11B5;D796;1112 1175 11B5; # (힖; 힖; 힖; 힖; 힖; ) HANGUL SYLLABLE HILP
+D797;D797;1112 1175 11B6;D797;1112 1175 11B6; # (힗; 힗; 힗; 힗; 힗; ) HANGUL SYLLABLE HILH
+D798;D798;1112 1175 11B7;D798;1112 1175 11B7; # (힘; 힘; 힘; 힘; 힘; ) HANGUL SYLLABLE HIM
+D799;D799;1112 1175 11B8;D799;1112 1175 11B8; # (힙; 힙; 힙; 힙; 힙; ) HANGUL SYLLABLE HIB
+D79A;D79A;1112 1175 11B9;D79A;1112 1175 11B9; # (힚; 힚; 힚; 힚; 힚; ) HANGUL SYLLABLE HIBS
+D79B;D79B;1112 1175 11BA;D79B;1112 1175 11BA; # (힛; 힛; 힛; 힛; 힛; ) HANGUL SYLLABLE HIS
+D79C;D79C;1112 1175 11BB;D79C;1112 1175 11BB; # (힜; 힜; 힜; 힜; 힜; ) HANGUL SYLLABLE HISS
+D79D;D79D;1112 1175 11BC;D79D;1112 1175 11BC; # (힝; 힝; 힝; 힝; 힝; ) HANGUL SYLLABLE HING
+D79E;D79E;1112 1175 11BD;D79E;1112 1175 11BD; # (힞; 힞; 힞; 힞; 힞; ) HANGUL SYLLABLE HIJ
+D79F;D79F;1112 1175 11BE;D79F;1112 1175 11BE; # (힟; 힟; 힟; 힟; 힟; ) HANGUL SYLLABLE HIC
+D7A0;D7A0;1112 1175 11BF;D7A0;1112 1175 11BF; # (힠; 힠; 힠; 힠; 힠; ) HANGUL SYLLABLE HIK
+D7A1;D7A1;1112 1175 11C0;D7A1;1112 1175 11C0; # (힡; 힡; 힡; 힡; 힡; ) HANGUL SYLLABLE HIT
+D7A2;D7A2;1112 1175 11C1;D7A2;1112 1175 11C1; # (힢; 힢; 힢; 힢; 힢; ) HANGUL SYLLABLE HIP
+D7A3;D7A3;1112 1175 11C2;D7A3;1112 1175 11C2; # (힣; 힣; 힣; 힣; 힣; ) HANGUL SYLLABLE HIH
+F900;8C48;8C48;8C48;8C48; # (豈; 豈; 豈; 豈; 豈; ) CJK COMPATIBILITY IDEOGRAPH-F900
+F901;66F4;66F4;66F4;66F4; # (更; 更; 更; 更; 更; ) CJK COMPATIBILITY IDEOGRAPH-F901
+F902;8ECA;8ECA;8ECA;8ECA; # (車; 車; 車; 車; 車; ) CJK COMPATIBILITY IDEOGRAPH-F902
+F903;8CC8;8CC8;8CC8;8CC8; # (賈; 賈; 賈; 賈; 賈; ) CJK COMPATIBILITY IDEOGRAPH-F903
+F904;6ED1;6ED1;6ED1;6ED1; # (滑; 滑; 滑; 滑; 滑; ) CJK COMPATIBILITY IDEOGRAPH-F904
+F905;4E32;4E32;4E32;4E32; # (串; 串; 串; 串; 串; ) CJK COMPATIBILITY IDEOGRAPH-F905
+F906;53E5;53E5;53E5;53E5; # (句; 句; 句; 句; 句; ) CJK COMPATIBILITY IDEOGRAPH-F906
+F907;9F9C;9F9C;9F9C;9F9C; # (龜; 龜; 龜; 龜; 龜; ) CJK COMPATIBILITY IDEOGRAPH-F907
+F908;9F9C;9F9C;9F9C;9F9C; # (龜; 龜; 龜; 龜; 龜; ) CJK COMPATIBILITY IDEOGRAPH-F908
+F909;5951;5951;5951;5951; # (契; 契; 契; 契; 契; ) CJK COMPATIBILITY IDEOGRAPH-F909
+F90A;91D1;91D1;91D1;91D1; # (金; 金; 金; 金; 金; ) CJK COMPATIBILITY IDEOGRAPH-F90A
+F90B;5587;5587;5587;5587; # (喇; 喇; 喇; 喇; 喇; ) CJK COMPATIBILITY IDEOGRAPH-F90B
+F90C;5948;5948;5948;5948; # (奈; 奈; 奈; 奈; 奈; ) CJK COMPATIBILITY IDEOGRAPH-F90C
+F90D;61F6;61F6;61F6;61F6; # (懶; 懶; 懶; 懶; 懶; ) CJK COMPATIBILITY IDEOGRAPH-F90D
+F90E;7669;7669;7669;7669; # (癩; 癩; 癩; 癩; 癩; ) CJK COMPATIBILITY IDEOGRAPH-F90E
+F90F;7F85;7F85;7F85;7F85; # (羅; 羅; 羅; 羅; 羅; ) CJK COMPATIBILITY IDEOGRAPH-F90F
+F910;863F;863F;863F;863F; # (蘿; 蘿; 蘿; 蘿; 蘿; ) CJK COMPATIBILITY IDEOGRAPH-F910
+F911;87BA;87BA;87BA;87BA; # (螺; 螺; 螺; 螺; 螺; ) CJK COMPATIBILITY IDEOGRAPH-F911
+F912;88F8;88F8;88F8;88F8; # (裸; 裸; 裸; 裸; 裸; ) CJK COMPATIBILITY IDEOGRAPH-F912
+F913;908F;908F;908F;908F; # (邏; 邏; 邏; 邏; 邏; ) CJK COMPATIBILITY IDEOGRAPH-F913
+F914;6A02;6A02;6A02;6A02; # (樂; 樂; 樂; 樂; 樂; ) CJK COMPATIBILITY IDEOGRAPH-F914
+F915;6D1B;6D1B;6D1B;6D1B; # (洛; 洛; 洛; 洛; 洛; ) CJK COMPATIBILITY IDEOGRAPH-F915
+F916;70D9;70D9;70D9;70D9; # (烙; 烙; 烙; 烙; 烙; ) CJK COMPATIBILITY IDEOGRAPH-F916
+F917;73DE;73DE;73DE;73DE; # (珞; 珞; 珞; 珞; 珞; ) CJK COMPATIBILITY IDEOGRAPH-F917
+F918;843D;843D;843D;843D; # (落; 落; 落; 落; 落; ) CJK COMPATIBILITY IDEOGRAPH-F918
+F919;916A;916A;916A;916A; # (酪; 酪; 酪; 酪; 酪; ) CJK COMPATIBILITY IDEOGRAPH-F919
+F91A;99F1;99F1;99F1;99F1; # (駱; 駱; 駱; 駱; 駱; ) CJK COMPATIBILITY IDEOGRAPH-F91A
+F91B;4E82;4E82;4E82;4E82; # (亂; 亂; 亂; 亂; 亂; ) CJK COMPATIBILITY IDEOGRAPH-F91B
+F91C;5375;5375;5375;5375; # (卵; 卵; 卵; 卵; 卵; ) CJK COMPATIBILITY IDEOGRAPH-F91C
+F91D;6B04;6B04;6B04;6B04; # (欄; 欄; 欄; 欄; 欄; ) CJK COMPATIBILITY IDEOGRAPH-F91D
+F91E;721B;721B;721B;721B; # (爛; 爛; 爛; 爛; 爛; ) CJK COMPATIBILITY IDEOGRAPH-F91E
+F91F;862D;862D;862D;862D; # (蘭; 蘭; 蘭; 蘭; 蘭; ) CJK COMPATIBILITY IDEOGRAPH-F91F
+F920;9E1E;9E1E;9E1E;9E1E; # (鸞; 鸞; 鸞; 鸞; 鸞; ) CJK COMPATIBILITY IDEOGRAPH-F920
+F921;5D50;5D50;5D50;5D50; # (嵐; 嵐; 嵐; 嵐; 嵐; ) CJK COMPATIBILITY IDEOGRAPH-F921
+F922;6FEB;6FEB;6FEB;6FEB; # (濫; 濫; 濫; 濫; 濫; ) CJK COMPATIBILITY IDEOGRAPH-F922
+F923;85CD;85CD;85CD;85CD; # (藍; 藍; 藍; 藍; 藍; ) CJK COMPATIBILITY IDEOGRAPH-F923
+F924;8964;8964;8964;8964; # (襤; 襤; 襤; 襤; 襤; ) CJK COMPATIBILITY IDEOGRAPH-F924
+F925;62C9;62C9;62C9;62C9; # (拉; 拉; 拉; 拉; 拉; ) CJK COMPATIBILITY IDEOGRAPH-F925
+F926;81D8;81D8;81D8;81D8; # (臘; 臘; 臘; 臘; 臘; ) CJK COMPATIBILITY IDEOGRAPH-F926
+F927;881F;881F;881F;881F; # (蠟; 蠟; 蠟; 蠟; 蠟; ) CJK COMPATIBILITY IDEOGRAPH-F927
+F928;5ECA;5ECA;5ECA;5ECA; # (廊; 廊; 廊; 廊; 廊; ) CJK COMPATIBILITY IDEOGRAPH-F928
+F929;6717;6717;6717;6717; # (朗; 朗; 朗; 朗; 朗; ) CJK COMPATIBILITY IDEOGRAPH-F929
+F92A;6D6A;6D6A;6D6A;6D6A; # (浪; 浪; 浪; 浪; 浪; ) CJK COMPATIBILITY IDEOGRAPH-F92A
+F92B;72FC;72FC;72FC;72FC; # (狼; 狼; 狼; 狼; 狼; ) CJK COMPATIBILITY IDEOGRAPH-F92B
+F92C;90CE;90CE;90CE;90CE; # (郎; 郎; 郎; 郎; 郎; ) CJK COMPATIBILITY IDEOGRAPH-F92C
+F92D;4F86;4F86;4F86;4F86; # (來; 來; 來; 來; 來; ) CJK COMPATIBILITY IDEOGRAPH-F92D
+F92E;51B7;51B7;51B7;51B7; # (冷; 冷; 冷; 冷; 冷; ) CJK COMPATIBILITY IDEOGRAPH-F92E
+F92F;52DE;52DE;52DE;52DE; # (勞; 勞; 勞; 勞; 勞; ) CJK COMPATIBILITY IDEOGRAPH-F92F
+F930;64C4;64C4;64C4;64C4; # (擄; 擄; 擄; 擄; 擄; ) CJK COMPATIBILITY IDEOGRAPH-F930
+F931;6AD3;6AD3;6AD3;6AD3; # (櫓; 櫓; 櫓; 櫓; 櫓; ) CJK COMPATIBILITY IDEOGRAPH-F931
+F932;7210;7210;7210;7210; # (爐; 爐; 爐; 爐; 爐; ) CJK COMPATIBILITY IDEOGRAPH-F932
+F933;76E7;76E7;76E7;76E7; # (盧; 盧; 盧; 盧; 盧; ) CJK COMPATIBILITY IDEOGRAPH-F933
+F934;8001;8001;8001;8001; # (老; 老; 老; 老; 老; ) CJK COMPATIBILITY IDEOGRAPH-F934
+F935;8606;8606;8606;8606; # (蘆; 蘆; 蘆; 蘆; 蘆; ) CJK COMPATIBILITY IDEOGRAPH-F935
+F936;865C;865C;865C;865C; # (虜; 虜; 虜; 虜; 虜; ) CJK COMPATIBILITY IDEOGRAPH-F936
+F937;8DEF;8DEF;8DEF;8DEF; # (路; 路; 路; 路; 路; ) CJK COMPATIBILITY IDEOGRAPH-F937
+F938;9732;9732;9732;9732; # (露; 露; 露; 露; 露; ) CJK COMPATIBILITY IDEOGRAPH-F938
+F939;9B6F;9B6F;9B6F;9B6F; # (魯; 魯; 魯; 魯; 魯; ) CJK COMPATIBILITY IDEOGRAPH-F939
+F93A;9DFA;9DFA;9DFA;9DFA; # (鷺; 鷺; 鷺; 鷺; 鷺; ) CJK COMPATIBILITY IDEOGRAPH-F93A
+F93B;788C;788C;788C;788C; # (碌; 碌; 碌; 碌; 碌; ) CJK COMPATIBILITY IDEOGRAPH-F93B
+F93C;797F;797F;797F;797F; # (祿; 祿; 祿; 祿; 祿; ) CJK COMPATIBILITY IDEOGRAPH-F93C
+F93D;7DA0;7DA0;7DA0;7DA0; # (綠; 綠; 綠; 綠; 綠; ) CJK COMPATIBILITY IDEOGRAPH-F93D
+F93E;83C9;83C9;83C9;83C9; # (菉; 菉; 菉; 菉; 菉; ) CJK COMPATIBILITY IDEOGRAPH-F93E
+F93F;9304;9304;9304;9304; # (錄; 錄; 錄; 錄; 錄; ) CJK COMPATIBILITY IDEOGRAPH-F93F
+F940;9E7F;9E7F;9E7F;9E7F; # (鹿; 鹿; 鹿; 鹿; 鹿; ) CJK COMPATIBILITY IDEOGRAPH-F940
+F941;8AD6;8AD6;8AD6;8AD6; # (論; 論; 論; 論; 論; ) CJK COMPATIBILITY IDEOGRAPH-F941
+F942;58DF;58DF;58DF;58DF; # (壟; 壟; 壟; 壟; 壟; ) CJK COMPATIBILITY IDEOGRAPH-F942
+F943;5F04;5F04;5F04;5F04; # (弄; 弄; 弄; 弄; 弄; ) CJK COMPATIBILITY IDEOGRAPH-F943
+F944;7C60;7C60;7C60;7C60; # (籠; 籠; 籠; 籠; 籠; ) CJK COMPATIBILITY IDEOGRAPH-F944
+F945;807E;807E;807E;807E; # (聾; 聾; 聾; 聾; 聾; ) CJK COMPATIBILITY IDEOGRAPH-F945
+F946;7262;7262;7262;7262; # (牢; 牢; 牢; 牢; 牢; ) CJK COMPATIBILITY IDEOGRAPH-F946
+F947;78CA;78CA;78CA;78CA; # (磊; 磊; 磊; 磊; 磊; ) CJK COMPATIBILITY IDEOGRAPH-F947
+F948;8CC2;8CC2;8CC2;8CC2; # (賂; 賂; 賂; 賂; 賂; ) CJK COMPATIBILITY IDEOGRAPH-F948
+F949;96F7;96F7;96F7;96F7; # (雷; 雷; 雷; 雷; 雷; ) CJK COMPATIBILITY IDEOGRAPH-F949
+F94A;58D8;58D8;58D8;58D8; # (壘; 壘; 壘; 壘; 壘; ) CJK COMPATIBILITY IDEOGRAPH-F94A
+F94B;5C62;5C62;5C62;5C62; # (屢; 屢; 屢; 屢; 屢; ) CJK COMPATIBILITY IDEOGRAPH-F94B
+F94C;6A13;6A13;6A13;6A13; # (樓; 樓; 樓; 樓; 樓; ) CJK COMPATIBILITY IDEOGRAPH-F94C
+F94D;6DDA;6DDA;6DDA;6DDA; # (淚; 淚; 淚; 淚; 淚; ) CJK COMPATIBILITY IDEOGRAPH-F94D
+F94E;6F0F;6F0F;6F0F;6F0F; # (漏; 漏; 漏; 漏; 漏; ) CJK COMPATIBILITY IDEOGRAPH-F94E
+F94F;7D2F;7D2F;7D2F;7D2F; # (累; 累; 累; 累; 累; ) CJK COMPATIBILITY IDEOGRAPH-F94F
+F950;7E37;7E37;7E37;7E37; # (縷; 縷; 縷; 縷; 縷; ) CJK COMPATIBILITY IDEOGRAPH-F950
+F951;96FB;96FB;96FB;96FB; # (陋; 電; 電; 電; 電; ) CJK COMPATIBILITY IDEOGRAPH-F951
+F952;52D2;52D2;52D2;52D2; # (勒; 勒; 勒; 勒; 勒; ) CJK COMPATIBILITY IDEOGRAPH-F952
+F953;808B;808B;808B;808B; # (肋; 肋; 肋; 肋; 肋; ) CJK COMPATIBILITY IDEOGRAPH-F953
+F954;51DC;51DC;51DC;51DC; # (凜; 凜; 凜; 凜; 凜; ) CJK COMPATIBILITY IDEOGRAPH-F954
+F955;51CC;51CC;51CC;51CC; # (凌; 凌; 凌; 凌; 凌; ) CJK COMPATIBILITY IDEOGRAPH-F955
+F956;7A1C;7A1C;7A1C;7A1C; # (稜; 稜; 稜; 稜; 稜; ) CJK COMPATIBILITY IDEOGRAPH-F956
+F957;7DBE;7DBE;7DBE;7DBE; # (綾; 綾; 綾; 綾; 綾; ) CJK COMPATIBILITY IDEOGRAPH-F957
+F958;83F1;83F1;83F1;83F1; # (菱; 菱; 菱; 菱; 菱; ) CJK COMPATIBILITY IDEOGRAPH-F958
+F959;9675;9675;9675;9675; # (陵; 陵; 陵; 陵; 陵; ) CJK COMPATIBILITY IDEOGRAPH-F959
+F95A;8B80;8B80;8B80;8B80; # (讀; 讀; 讀; 讀; 讀; ) CJK COMPATIBILITY IDEOGRAPH-F95A
+F95B;62CF;62CF;62CF;62CF; # (拏; 拏; 拏; 拏; 拏; ) CJK COMPATIBILITY IDEOGRAPH-F95B
+F95C;6A02;6A02;6A02;6A02; # (樂; 樂; 樂; 樂; 樂; ) CJK COMPATIBILITY IDEOGRAPH-F95C
+F95D;8AFE;8AFE;8AFE;8AFE; # (諾; 諾; 諾; 諾; 諾; ) CJK COMPATIBILITY IDEOGRAPH-F95D
+F95E;4E39;4E39;4E39;4E39; # (丹; 丹; 丹; 丹; 丹; ) CJK COMPATIBILITY IDEOGRAPH-F95E
+F95F;5BE7;5BE7;5BE7;5BE7; # (寧; 寧; 寧; 寧; 寧; ) CJK COMPATIBILITY IDEOGRAPH-F95F
+F960;6012;6012;6012;6012; # (怒; 怒; 怒; 怒; 怒; ) CJK COMPATIBILITY IDEOGRAPH-F960
+F961;7387;7387;7387;7387; # (率; 率; 率; 率; 率; ) CJK COMPATIBILITY IDEOGRAPH-F961
+F962;7570;7570;7570;7570; # (異; 異; 異; 異; 異; ) CJK COMPATIBILITY IDEOGRAPH-F962
+F963;5317;5317;5317;5317; # (北; 北; 北; 北; 北; ) CJK COMPATIBILITY IDEOGRAPH-F963
+F964;78FB;78FB;78FB;78FB; # (磻; 磻; 磻; 磻; 磻; ) CJK COMPATIBILITY IDEOGRAPH-F964
+F965;4FBF;4FBF;4FBF;4FBF; # (便; 便; 便; 便; 便; ) CJK COMPATIBILITY IDEOGRAPH-F965
+F966;5FA9;5FA9;5FA9;5FA9; # (復; 復; 復; 復; 復; ) CJK COMPATIBILITY IDEOGRAPH-F966
+F967;4E0D;4E0D;4E0D;4E0D; # (不; 不; 不; 不; 不; ) CJK COMPATIBILITY IDEOGRAPH-F967
+F968;6CCC;6CCC;6CCC;6CCC; # (泌; 泌; 泌; 泌; 泌; ) CJK COMPATIBILITY IDEOGRAPH-F968
+F969;6578;6578;6578;6578; # (數; 數; 數; 數; 數; ) CJK COMPATIBILITY IDEOGRAPH-F969
+F96A;7D22;7D22;7D22;7D22; # (索; 索; 索; 索; 索; ) CJK COMPATIBILITY IDEOGRAPH-F96A
+F96B;53C3;53C3;53C3;53C3; # (參; 參; 參; 參; 參; ) CJK COMPATIBILITY IDEOGRAPH-F96B
+F96C;585E;585E;585E;585E; # (塞; 塞; 塞; 塞; 塞; ) CJK COMPATIBILITY IDEOGRAPH-F96C
+F96D;7701;7701;7701;7701; # (省; 省; 省; 省; 省; ) CJK COMPATIBILITY IDEOGRAPH-F96D
+F96E;8449;8449;8449;8449; # (葉; 葉; 葉; 葉; 葉; ) CJK COMPATIBILITY IDEOGRAPH-F96E
+F96F;8AAA;8AAA;8AAA;8AAA; # (說; 說; 說; 說; 說; ) CJK COMPATIBILITY IDEOGRAPH-F96F
+F970;6BBA;6BBA;6BBA;6BBA; # (殺; 殺; 殺; 殺; 殺; ) CJK COMPATIBILITY IDEOGRAPH-F970
+F971;8FB0;8FB0;8FB0;8FB0; # (辰; 辰; 辰; 辰; 辰; ) CJK COMPATIBILITY IDEOGRAPH-F971
+F972;6C88;6C88;6C88;6C88; # (沈; 沈; 沈; 沈; 沈; ) CJK COMPATIBILITY IDEOGRAPH-F972
+F973;62FE;62FE;62FE;62FE; # (拾; 拾; 拾; 拾; 拾; ) CJK COMPATIBILITY IDEOGRAPH-F973
+F974;82E5;82E5;82E5;82E5; # (若; 若; 若; 若; 若; ) CJK COMPATIBILITY IDEOGRAPH-F974
+F975;63A0;63A0;63A0;63A0; # (掠; 掠; 掠; 掠; 掠; ) CJK COMPATIBILITY IDEOGRAPH-F975
+F976;7565;7565;7565;7565; # (略; 略; 略; 略; 略; ) CJK COMPATIBILITY IDEOGRAPH-F976
+F977;4EAE;4EAE;4EAE;4EAE; # (亮; 亮; 亮; 亮; 亮; ) CJK COMPATIBILITY IDEOGRAPH-F977
+F978;5169;5169;5169;5169; # (兩; 兩; 兩; 兩; 兩; ) CJK COMPATIBILITY IDEOGRAPH-F978
+F979;51C9;51C9;51C9;51C9; # (凉; 凉; 凉; 凉; 凉; ) CJK COMPATIBILITY IDEOGRAPH-F979
+F97A;6881;6881;6881;6881; # (梁; 梁; 梁; 梁; 梁; ) CJK COMPATIBILITY IDEOGRAPH-F97A
+F97B;7CE7;7CE7;7CE7;7CE7; # (糧; 糧; 糧; 糧; 糧; ) CJK COMPATIBILITY IDEOGRAPH-F97B
+F97C;826F;826F;826F;826F; # (良; 良; 良; 良; 良; ) CJK COMPATIBILITY IDEOGRAPH-F97C
+F97D;8AD2;8AD2;8AD2;8AD2; # (諒; 諒; 諒; 諒; 諒; ) CJK COMPATIBILITY IDEOGRAPH-F97D
+F97E;91CF;91CF;91CF;91CF; # (量; 量; 量; 量; 量; ) CJK COMPATIBILITY IDEOGRAPH-F97E
+F97F;52F5;52F5;52F5;52F5; # (勵; 勵; 勵; 勵; 勵; ) CJK COMPATIBILITY IDEOGRAPH-F97F
+F980;5442;5442;5442;5442; # (呂; 呂; 呂; 呂; 呂; ) CJK COMPATIBILITY IDEOGRAPH-F980
+F981;5973;5973;5973;5973; # (女; 女; 女; 女; 女; ) CJK COMPATIBILITY IDEOGRAPH-F981
+F982;5EEC;5EEC;5EEC;5EEC; # (廬; 廬; 廬; 廬; 廬; ) CJK COMPATIBILITY IDEOGRAPH-F982
+F983;65C5;65C5;65C5;65C5; # (旅; 旅; 旅; 旅; 旅; ) CJK COMPATIBILITY IDEOGRAPH-F983
+F984;6FFE;6FFE;6FFE;6FFE; # (濾; 濾; 濾; 濾; 濾; ) CJK COMPATIBILITY IDEOGRAPH-F984
+F985;792A;792A;792A;792A; # (礪; 礪; 礪; 礪; 礪; ) CJK COMPATIBILITY IDEOGRAPH-F985
+F986;95AD;95AD;95AD;95AD; # (閭; 閭; 閭; 閭; 閭; ) CJK COMPATIBILITY IDEOGRAPH-F986
+F987;9A6A;9A6A;9A6A;9A6A; # (驪; 驪; 驪; 驪; 驪; ) CJK COMPATIBILITY IDEOGRAPH-F987
+F988;9E97;9E97;9E97;9E97; # (麗; 麗; 麗; 麗; 麗; ) CJK COMPATIBILITY IDEOGRAPH-F988
+F989;9ECE;9ECE;9ECE;9ECE; # (黎; 黎; 黎; 黎; 黎; ) CJK COMPATIBILITY IDEOGRAPH-F989
+F98A;529B;529B;529B;529B; # (力; 力; 力; 力; 力; ) CJK COMPATIBILITY IDEOGRAPH-F98A
+F98B;66C6;66C6;66C6;66C6; # (曆; 曆; 曆; 曆; 曆; ) CJK COMPATIBILITY IDEOGRAPH-F98B
+F98C;6B77;6B77;6B77;6B77; # (歷; 歷; 歷; 歷; 歷; ) CJK COMPATIBILITY IDEOGRAPH-F98C
+F98D;8F62;8F62;8F62;8F62; # (轢; 轢; 轢; 轢; 轢; ) CJK COMPATIBILITY IDEOGRAPH-F98D
+F98E;5E74;5E74;5E74;5E74; # (年; 年; 年; 年; 年; ) CJK COMPATIBILITY IDEOGRAPH-F98E
+F98F;6190;6190;6190;6190; # (憐; 憐; 憐; 憐; 憐; ) CJK COMPATIBILITY IDEOGRAPH-F98F
+F990;6200;6200;6200;6200; # (戀; 戀; 戀; 戀; 戀; ) CJK COMPATIBILITY IDEOGRAPH-F990
+F991;649A;649A;649A;649A; # (撚; 撚; 撚; 撚; 撚; ) CJK COMPATIBILITY IDEOGRAPH-F991
+F992;6F23;6F23;6F23;6F23; # (漣; 漣; 漣; 漣; 漣; ) CJK COMPATIBILITY IDEOGRAPH-F992
+F993;7149;7149;7149;7149; # (煉; 煉; 煉; 煉; 煉; ) CJK COMPATIBILITY IDEOGRAPH-F993
+F994;7489;7489;7489;7489; # (璉; 璉; 璉; 璉; 璉; ) CJK COMPATIBILITY IDEOGRAPH-F994
+F995;79CA;79CA;79CA;79CA; # (秊; 秊; 秊; 秊; 秊; ) CJK COMPATIBILITY IDEOGRAPH-F995
+F996;7DF4;7DF4;7DF4;7DF4; # (練; 練; 練; 練; 練; ) CJK COMPATIBILITY IDEOGRAPH-F996
+F997;806F;806F;806F;806F; # (聯; 聯; 聯; 聯; 聯; ) CJK COMPATIBILITY IDEOGRAPH-F997
+F998;8F26;8F26;8F26;8F26; # (輦; 輦; 輦; 輦; 輦; ) CJK COMPATIBILITY IDEOGRAPH-F998
+F999;84EE;84EE;84EE;84EE; # (蓮; 蓮; 蓮; 蓮; 蓮; ) CJK COMPATIBILITY IDEOGRAPH-F999
+F99A;9023;9023;9023;9023; # (連; 連; 連; 連; 連; ) CJK COMPATIBILITY IDEOGRAPH-F99A
+F99B;934A;934A;934A;934A; # (鍊; 鍊; 鍊; 鍊; 鍊; ) CJK COMPATIBILITY IDEOGRAPH-F99B
+F99C;5217;5217;5217;5217; # (列; 列; 列; 列; 列; ) CJK COMPATIBILITY IDEOGRAPH-F99C
+F99D;52A3;52A3;52A3;52A3; # (劣; 劣; 劣; 劣; 劣; ) CJK COMPATIBILITY IDEOGRAPH-F99D
+F99E;54BD;54BD;54BD;54BD; # (咽; 咽; 咽; 咽; 咽; ) CJK COMPATIBILITY IDEOGRAPH-F99E
+F99F;70C8;70C8;70C8;70C8; # (烈; 烈; 烈; 烈; 烈; ) CJK COMPATIBILITY IDEOGRAPH-F99F
+F9A0;88C2;88C2;88C2;88C2; # (裂; 裂; 裂; 裂; 裂; ) CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9A1;8AAA;8AAA;8AAA;8AAA; # (說; 說; 說; 說; 說; ) CJK COMPATIBILITY IDEOGRAPH-F9A1
+F9A2;5EC9;5EC9;5EC9;5EC9; # (廉; 廉; 廉; 廉; 廉; ) CJK COMPATIBILITY IDEOGRAPH-F9A2
+F9A3;5FF5;5FF5;5FF5;5FF5; # (念; 念; 念; 念; 念; ) CJK COMPATIBILITY IDEOGRAPH-F9A3
+F9A4;637B;637B;637B;637B; # (捻; 捻; 捻; 捻; 捻; ) CJK COMPATIBILITY IDEOGRAPH-F9A4
+F9A5;6BAE;6BAE;6BAE;6BAE; # (殮; 殮; 殮; 殮; 殮; ) CJK COMPATIBILITY IDEOGRAPH-F9A5
+F9A6;7C3E;7C3E;7C3E;7C3E; # (簾; 簾; 簾; 簾; 簾; ) CJK COMPATIBILITY IDEOGRAPH-F9A6
+F9A7;7375;7375;7375;7375; # (獵; 獵; 獵; 獵; 獵; ) CJK COMPATIBILITY IDEOGRAPH-F9A7
+F9A8;4EE4;4EE4;4EE4;4EE4; # (令; 令; 令; 令; 令; ) CJK COMPATIBILITY IDEOGRAPH-F9A8
+F9A9;56F9;56F9;56F9;56F9; # (囹; 囹; 囹; 囹; 囹; ) CJK COMPATIBILITY IDEOGRAPH-F9A9
+F9AA;5BE7;5BE7;5BE7;5BE7; # (寧; 寧; 寧; 寧; 寧; ) CJK COMPATIBILITY IDEOGRAPH-F9AA
+F9AB;5DBA;5DBA;5DBA;5DBA; # (嶺; 嶺; 嶺; 嶺; 嶺; ) CJK COMPATIBILITY IDEOGRAPH-F9AB
+F9AC;601C;601C;601C;601C; # (怜; 怜; 怜; 怜; 怜; ) CJK COMPATIBILITY IDEOGRAPH-F9AC
+F9AD;73B2;73B2;73B2;73B2; # (玲; 玲; 玲; 玲; 玲; ) CJK COMPATIBILITY IDEOGRAPH-F9AD
+F9AE;7469;7469;7469;7469; # (瑩; 瑩; 瑩; 瑩; 瑩; ) CJK COMPATIBILITY IDEOGRAPH-F9AE
+F9AF;7F9A;7F9A;7F9A;7F9A; # (羚; 羚; 羚; 羚; 羚; ) CJK COMPATIBILITY IDEOGRAPH-F9AF
+F9B0;8046;8046;8046;8046; # (聆; 聆; 聆; 聆; 聆; ) CJK COMPATIBILITY IDEOGRAPH-F9B0
+F9B1;9234;9234;9234;9234; # (鈴; 鈴; 鈴; 鈴; 鈴; ) CJK COMPATIBILITY IDEOGRAPH-F9B1
+F9B2;96F6;96F6;96F6;96F6; # (零; 零; 零; 零; 零; ) CJK COMPATIBILITY IDEOGRAPH-F9B2
+F9B3;9748;9748;9748;9748; # (靈; 靈; 靈; 靈; 靈; ) CJK COMPATIBILITY IDEOGRAPH-F9B3
+F9B4;9818;9818;9818;9818; # (領; 領; 領; 領; 領; ) CJK COMPATIBILITY IDEOGRAPH-F9B4
+F9B5;4F8B;4F8B;4F8B;4F8B; # (例; 例; 例; 例; 例; ) CJK COMPATIBILITY IDEOGRAPH-F9B5
+F9B6;79AE;79AE;79AE;79AE; # (禮; 禮; 禮; 禮; 禮; ) CJK COMPATIBILITY IDEOGRAPH-F9B6
+F9B7;91B4;91B4;91B4;91B4; # (醴; 醴; 醴; 醴; 醴; ) CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9B8;96B8;96B8;96B8;96B8; # (隸; 隸; 隸; 隸; 隸; ) CJK COMPATIBILITY IDEOGRAPH-F9B8
+F9B9;60E1;60E1;60E1;60E1; # (惡; 惡; 惡; 惡; 惡; ) CJK COMPATIBILITY IDEOGRAPH-F9B9
+F9BA;4E86;4E86;4E86;4E86; # (了; 了; 了; 了; 了; ) CJK COMPATIBILITY IDEOGRAPH-F9BA
+F9BB;50DA;50DA;50DA;50DA; # (僚; 僚; 僚; 僚; 僚; ) CJK COMPATIBILITY IDEOGRAPH-F9BB
+F9BC;5BEE;5BEE;5BEE;5BEE; # (寮; 寮; 寮; 寮; 寮; ) CJK COMPATIBILITY IDEOGRAPH-F9BC
+F9BD;5C3F;5C3F;5C3F;5C3F; # (尿; 尿; 尿; 尿; 尿; ) CJK COMPATIBILITY IDEOGRAPH-F9BD
+F9BE;6599;6599;6599;6599; # (料; 料; 料; 料; 料; ) CJK COMPATIBILITY IDEOGRAPH-F9BE
+F9BF;6A02;6A02;6A02;6A02; # (樂; 樂; 樂; 樂; 樂; ) CJK COMPATIBILITY IDEOGRAPH-F9BF
+F9C0;71CE;71CE;71CE;71CE; # (燎; 燎; 燎; 燎; 燎; ) CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9C1;7642;7642;7642;7642; # (療; 療; 療; 療; 療; ) CJK COMPATIBILITY IDEOGRAPH-F9C1
+F9C2;84FC;84FC;84FC;84FC; # (蓼; 蓼; 蓼; 蓼; 蓼; ) CJK COMPATIBILITY IDEOGRAPH-F9C2
+F9C3;907C;907C;907C;907C; # (遼; 遼; 遼; 遼; 遼; ) CJK COMPATIBILITY IDEOGRAPH-F9C3
+F9C4;9F8D;9F8D;9F8D;9F8D; # (龍; 龍; 龍; 龍; 龍; ) CJK COMPATIBILITY IDEOGRAPH-F9C4
+F9C5;6688;6688;6688;6688; # (暈; 暈; 暈; 暈; 暈; ) CJK COMPATIBILITY IDEOGRAPH-F9C5
+F9C6;962E;962E;962E;962E; # (阮; 阮; 阮; 阮; 阮; ) CJK COMPATIBILITY IDEOGRAPH-F9C6
+F9C7;5289;5289;5289;5289; # (劉; 劉; 劉; 劉; 劉; ) CJK COMPATIBILITY IDEOGRAPH-F9C7
+F9C8;677B;677B;677B;677B; # (杻; 杻; 杻; 杻; 杻; ) CJK COMPATIBILITY IDEOGRAPH-F9C8
+F9C9;67F3;67F3;67F3;67F3; # (柳; 柳; 柳; 柳; 柳; ) CJK COMPATIBILITY IDEOGRAPH-F9C9
+F9CA;6D41;6D41;6D41;6D41; # (流; 流; 流; 流; 流; ) CJK COMPATIBILITY IDEOGRAPH-F9CA
+F9CB;6E9C;6E9C;6E9C;6E9C; # (溜; 溜; 溜; 溜; 溜; ) CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9CC;7409;7409;7409;7409; # (琉; 琉; 琉; 琉; 琉; ) CJK COMPATIBILITY IDEOGRAPH-F9CC
+F9CD;7559;7559;7559;7559; # (留; 留; 留; 留; 留; ) CJK COMPATIBILITY IDEOGRAPH-F9CD
+F9CE;786B;786B;786B;786B; # (硫; 硫; 硫; 硫; 硫; ) CJK COMPATIBILITY IDEOGRAPH-F9CE
+F9CF;7D10;7D10;7D10;7D10; # (紐; 紐; 紐; 紐; 紐; ) CJK COMPATIBILITY IDEOGRAPH-F9CF
+F9D0;985E;985E;985E;985E; # (類; 類; 類; 類; 類; ) CJK COMPATIBILITY IDEOGRAPH-F9D0
+F9D1;516D;516D;516D;516D; # (六; 六; 六; 六; 六; ) CJK COMPATIBILITY IDEOGRAPH-F9D1
+F9D2;622E;622E;622E;622E; # (戮; 戮; 戮; 戮; 戮; ) CJK COMPATIBILITY IDEOGRAPH-F9D2
+F9D3;9678;9678;9678;9678; # (陸; 陸; 陸; 陸; 陸; ) CJK COMPATIBILITY IDEOGRAPH-F9D3
+F9D4;502B;502B;502B;502B; # (倫; 倫; 倫; 倫; 倫; ) CJK COMPATIBILITY IDEOGRAPH-F9D4
+F9D5;5D19;5D19;5D19;5D19; # (崙; 崙; 崙; 崙; 崙; ) CJK COMPATIBILITY IDEOGRAPH-F9D5
+F9D6;6DEA;6DEA;6DEA;6DEA; # (淪; 淪; 淪; 淪; 淪; ) CJK COMPATIBILITY IDEOGRAPH-F9D6
+F9D7;8F2A;8F2A;8F2A;8F2A; # (輪; 輪; 輪; 輪; 輪; ) CJK COMPATIBILITY IDEOGRAPH-F9D7
+F9D8;5F8B;5F8B;5F8B;5F8B; # (律; 律; 律; 律; 律; ) CJK COMPATIBILITY IDEOGRAPH-F9D8
+F9D9;6144;6144;6144;6144; # (慄; 慄; 慄; 慄; 慄; ) CJK COMPATIBILITY IDEOGRAPH-F9D9
+F9DA;6817;6817;6817;6817; # (栗; 栗; 栗; 栗; 栗; ) CJK COMPATIBILITY IDEOGRAPH-F9DA
+F9DB;7387;7387;7387;7387; # (率; 率; 率; 率; 率; ) CJK COMPATIBILITY IDEOGRAPH-F9DB
+F9DC;9686;9686;9686;9686; # (隆; 隆; 隆; 隆; 隆; ) CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9DD;5229;5229;5229;5229; # (利; 利; 利; 利; 利; ) CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9DE;540F;540F;540F;540F; # (吏; 吏; 吏; 吏; 吏; ) CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9DF;5C65;5C65;5C65;5C65; # (履; 履; 履; 履; 履; ) CJK COMPATIBILITY IDEOGRAPH-F9DF
+F9E0;6613;6613;6613;6613; # (易; 易; 易; 易; 易; ) CJK COMPATIBILITY IDEOGRAPH-F9E0
+F9E1;674E;674E;674E;674E; # (李; 李; 李; 李; 李; ) CJK COMPATIBILITY IDEOGRAPH-F9E1
+F9E2;68A8;68A8;68A8;68A8; # (梨; 梨; 梨; 梨; 梨; ) CJK COMPATIBILITY IDEOGRAPH-F9E2
+F9E3;6CE5;6CE5;6CE5;6CE5; # (泥; 泥; 泥; 泥; 泥; ) CJK COMPATIBILITY IDEOGRAPH-F9E3
+F9E4;7406;7406;7406;7406; # (理; 理; 理; 理; 理; ) CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9E5;75E2;75E2;75E2;75E2; # (痢; 痢; 痢; 痢; 痢; ) CJK COMPATIBILITY IDEOGRAPH-F9E5
+F9E6;7F79;7F79;7F79;7F79; # (罹; 罹; 罹; 罹; 罹; ) CJK COMPATIBILITY IDEOGRAPH-F9E6
+F9E7;88CF;88CF;88CF;88CF; # (裏; 裏; 裏; 裏; 裏; ) CJK COMPATIBILITY IDEOGRAPH-F9E7
+F9E8;88E1;88E1;88E1;88E1; # (裡; 裡; 裡; 裡; 裡; ) CJK COMPATIBILITY IDEOGRAPH-F9E8
+F9E9;91CC;91CC;91CC;91CC; # (里; 里; 里; 里; 里; ) CJK COMPATIBILITY IDEOGRAPH-F9E9
+F9EA;96E2;96E2;96E2;96E2; # (離; 離; 離; 離; 離; ) CJK COMPATIBILITY IDEOGRAPH-F9EA
+F9EB;533F;533F;533F;533F; # (匿; 匿; 匿; 匿; 匿; ) CJK COMPATIBILITY IDEOGRAPH-F9EB
+F9EC;6EBA;6EBA;6EBA;6EBA; # (溺; 溺; 溺; 溺; 溺; ) CJK COMPATIBILITY IDEOGRAPH-F9EC
+F9ED;541D;541D;541D;541D; # (吝; 吝; 吝; 吝; 吝; ) CJK COMPATIBILITY IDEOGRAPH-F9ED
+F9EE;71D0;71D0;71D0;71D0; # (燐; 燐; 燐; 燐; 燐; ) CJK COMPATIBILITY IDEOGRAPH-F9EE
+F9EF;7498;7498;7498;7498; # (璘; 璘; 璘; 璘; 璘; ) CJK COMPATIBILITY IDEOGRAPH-F9EF
+F9F0;85FA;85FA;85FA;85FA; # (藺; 藺; 藺; 藺; 藺; ) CJK COMPATIBILITY IDEOGRAPH-F9F0
+F9F1;96A3;96A3;96A3;96A3; # (隣; 隣; 隣; 隣; 隣; ) CJK COMPATIBILITY IDEOGRAPH-F9F1
+F9F2;9C57;9C57;9C57;9C57; # (鱗; 鱗; 鱗; 鱗; 鱗; ) CJK COMPATIBILITY IDEOGRAPH-F9F2
+F9F3;9E9F;9E9F;9E9F;9E9F; # (麟; 麟; 麟; 麟; 麟; ) CJK COMPATIBILITY IDEOGRAPH-F9F3
+F9F4;6797;6797;6797;6797; # (林; 林; 林; 林; 林; ) CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9F5;6DCB;6DCB;6DCB;6DCB; # (淋; 淋; 淋; 淋; 淋; ) CJK COMPATIBILITY IDEOGRAPH-F9F5
+F9F6;81E8;81E8;81E8;81E8; # (臨; 臨; 臨; 臨; 臨; ) CJK COMPATIBILITY IDEOGRAPH-F9F6
+F9F7;7ACB;7ACB;7ACB;7ACB; # (立; 立; 立; 立; 立; ) CJK COMPATIBILITY IDEOGRAPH-F9F7
+F9F8;7B20;7B20;7B20;7B20; # (笠; 笠; 笠; 笠; 笠; ) CJK COMPATIBILITY IDEOGRAPH-F9F8
+F9F9;7C92;7C92;7C92;7C92; # (粒; 粒; 粒; 粒; 粒; ) CJK COMPATIBILITY IDEOGRAPH-F9F9
+F9FA;72C0;72C0;72C0;72C0; # (狀; 狀; 狀; 狀; 狀; ) CJK COMPATIBILITY IDEOGRAPH-F9FA
+F9FB;7099;7099;7099;7099; # (炙; 炙; 炙; 炙; 炙; ) CJK COMPATIBILITY IDEOGRAPH-F9FB
+F9FC;8B58;8B58;8B58;8B58; # (識; 識; 識; 識; 識; ) CJK COMPATIBILITY IDEOGRAPH-F9FC
+F9FD;4EC0;4EC0;4EC0;4EC0; # (什; 什; 什; 什; 什; ) CJK COMPATIBILITY IDEOGRAPH-F9FD
+F9FE;8336;8336;8336;8336; # (茶; 茶; 茶; 茶; 茶; ) CJK COMPATIBILITY IDEOGRAPH-F9FE
+F9FF;523A;523A;523A;523A; # (刺; 刺; 刺; 刺; 刺; ) CJK COMPATIBILITY IDEOGRAPH-F9FF
+FA00;5207;5207;5207;5207; # (切; 切; 切; 切; 切; ) CJK COMPATIBILITY IDEOGRAPH-FA00
+FA01;5EA6;5EA6;5EA6;5EA6; # (度; 度; 度; 度; 度; ) CJK COMPATIBILITY IDEOGRAPH-FA01
+FA02;62D3;62D3;62D3;62D3; # (拓; 拓; 拓; 拓; 拓; ) CJK COMPATIBILITY IDEOGRAPH-FA02
+FA03;7CD6;7CD6;7CD6;7CD6; # (糖; 糖; 糖; 糖; 糖; ) CJK COMPATIBILITY IDEOGRAPH-FA03
+FA04;5B85;5B85;5B85;5B85; # (宅; 宅; 宅; 宅; 宅; ) CJK COMPATIBILITY IDEOGRAPH-FA04
+FA05;6D1E;6D1E;6D1E;6D1E; # (洞; 洞; 洞; 洞; 洞; ) CJK COMPATIBILITY IDEOGRAPH-FA05
+FA06;66B4;66B4;66B4;66B4; # (暴; 暴; 暴; 暴; 暴; ) CJK COMPATIBILITY IDEOGRAPH-FA06
+FA07;8F3B;8F3B;8F3B;8F3B; # (輻; 輻; 輻; 輻; 輻; ) CJK COMPATIBILITY IDEOGRAPH-FA07
+FA08;884C;884C;884C;884C; # (行; 行; 行; 行; 行; ) CJK COMPATIBILITY IDEOGRAPH-FA08
+FA09;964D;964D;964D;964D; # (降; 降; 降; 降; 降; ) CJK COMPATIBILITY IDEOGRAPH-FA09
+FA0A;898B;898B;898B;898B; # (見; 見; 見; 見; 見; ) CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA0B;5ED3;5ED3;5ED3;5ED3; # (廓; 廓; 廓; 廓; 廓; ) CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA0C;5140;5140;5140;5140; # (兀; 兀; 兀; 兀; 兀; ) CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA0D;55C0;55C0;55C0;55C0; # (嗀; 嗀; 嗀; 嗀; 嗀; ) CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10;585A;585A;585A;585A; # (塚; 塚; 塚; 塚; 塚; ) CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12;6674;6674;6674;6674; # (晴; 晴; 晴; 晴; 晴; ) CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15;51DE;51DE;51DE;51DE; # (凞; 凞; 凞; 凞; 凞; ) CJK COMPATIBILITY IDEOGRAPH-FA15
+FA16;732A;732A;732A;732A; # (猪; 猪; 猪; 猪; 猪; ) CJK COMPATIBILITY IDEOGRAPH-FA16
+FA17;76CA;76CA;76CA;76CA; # (益; 益; 益; 益; 益; ) CJK COMPATIBILITY IDEOGRAPH-FA17
+FA18;793C;793C;793C;793C; # (礼; 礼; 礼; 礼; 礼; ) CJK COMPATIBILITY IDEOGRAPH-FA18
+FA19;795E;795E;795E;795E; # (神; 神; 神; 神; 神; ) CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A;7965;7965;7965;7965; # (祥; 祥; 祥; 祥; 祥; ) CJK COMPATIBILITY IDEOGRAPH-FA1A
+FA1B;798F;798F;798F;798F; # (福; 福; 福; 福; 福; ) CJK COMPATIBILITY IDEOGRAPH-FA1B
+FA1C;9756;9756;9756;9756; # (靖; 靖; 靖; 靖; 靖; ) CJK COMPATIBILITY IDEOGRAPH-FA1C
+FA1D;7CBE;7CBE;7CBE;7CBE; # (精; 精; 精; 精; 精; ) CJK COMPATIBILITY IDEOGRAPH-FA1D
+FA1E;7FBD;7FBD;7FBD;7FBD; # (羽; 羽; 羽; 羽; 羽; ) CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20;8612;8612;8612;8612; # (蘒; 蘒; 蘒; 蘒; 蘒; ) CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22;8AF8;8AF8;8AF8;8AF8; # (諸; 諸; 諸; 諸; 諸; ) CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25;9038;9038;9038;9038; # (逸; 逸; 逸; 逸; 逸; ) CJK COMPATIBILITY IDEOGRAPH-FA25
+FA26;90FD;90FD;90FD;90FD; # (都; 都; 都; 都; 都; ) CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A;98EF;98EF;98EF;98EF; # (飯; 飯; 飯; 飯; 飯; ) CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B;98FC;98FC;98FC;98FC; # (飼; 飼; 飼; 飼; 飼; ) CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C;9928;9928;9928;9928; # (館; 館; 館; 館; 館; ) CJK COMPATIBILITY IDEOGRAPH-FA2C
+FA2D;9DB4;9DB4;9DB4;9DB4; # (鶴; 鶴; 鶴; 鶴; 鶴; ) CJK COMPATIBILITY IDEOGRAPH-FA2D
+FB00;FB00;FB00;0066 0066;0066 0066; # (ff; ff; ff; ff; ff; ) LATIN SMALL LIGATURE FF
+FB01;FB01;FB01;0066 0069;0066 0069; # (fi; fi; fi; fi; fi; ) LATIN SMALL LIGATURE FI
+FB02;FB02;FB02;0066 006C;0066 006C; # (fl; fl; fl; fl; fl; ) LATIN SMALL LIGATURE FL
+FB03;FB03;FB03;0066 0066 0069;0066 0066 0069; # (ffi; ffi; ffi; ffi; ffi; ) LATIN SMALL LIGATURE FFI
+FB04;FB04;FB04;0066 0066 006C;0066 0066 006C; # (ffl; ffl; ffl; ffl; ffl; ) LATIN SMALL LIGATURE FFL
+FB05;FB05;FB05;0073 0074;0073 0074; # (ſt; ſt; ſt; st; st; ) LATIN SMALL LIGATURE LONG S T
+FB06;FB06;FB06;0073 0074;0073 0074; # (st; st; st; st; st; ) LATIN SMALL LIGATURE ST
+FB13;FB13;FB13;0574 0576;0574 0576; # (ﬓ; ﬓ; ﬓ; մն; մն; ) ARMENIAN SMALL LIGATURE MEN NOW
+FB14;FB14;FB14;0574 0565;0574 0565; # (ﬔ; ﬔ; ﬔ; մե; մե; ) ARMENIAN SMALL LIGATURE MEN ECH
+FB15;FB15;FB15;0574 056B;0574 056B; # (ﬕ; ﬕ; ﬕ; մի; մի; ) ARMENIAN SMALL LIGATURE MEN INI
+FB16;FB16;FB16;057E 0576;057E 0576; # (ﬖ; ﬖ; ﬖ; վն; վն; ) ARMENIAN SMALL LIGATURE VEW NOW
+FB17;FB17;FB17;0574 056D;0574 056D; # (ﬗ; ﬗ; ﬗ; մխ; մխ; ) ARMENIAN SMALL LIGATURE MEN XEH
+FB1D;FB1D;05D9 05B4;FB1D;05D9 05B4; # (יִ; יִ; י◌ִ; יִ; י◌ִ; ) HEBREW LETTER YOD WITH HIRIQ
+FB1F;05F2 05B7;05F2 05B7;05F2 05B7;05F2 05B7; # (ײַ; ײ◌ַ; ײ◌ַ; ײ◌ַ; ײ◌ַ; ) HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB20;FB20;FB20;05E2;05E2; # (ﬠ; ﬠ; ﬠ; ע; ע; ) HEBREW LETTER ALTERNATIVE AYIN
+FB21;FB21;FB21;05D0;05D0; # (ﬡ; ﬡ; ﬡ; א; א; ) HEBREW LETTER WIDE ALEF
+FB22;FB22;FB22;05D3;05D3; # (ﬢ; ﬢ; ﬢ; ד; ד; ) HEBREW LETTER WIDE DALET
+FB23;FB23;FB23;05D4;05D4; # (ﬣ; ﬣ; ﬣ; ה; ה; ) HEBREW LETTER WIDE HE
+FB24;FB24;FB24;05DB;05DB; # (ﬤ; ﬤ; ﬤ; כ; כ; ) HEBREW LETTER WIDE KAF
+FB25;FB25;FB25;05DC;05DC; # (ﬥ; ﬥ; ﬥ; ל; ל; ) HEBREW LETTER WIDE LAMED
+FB26;FB26;FB26;05DD;05DD; # (ﬦ; ﬦ; ﬦ; ם; ם; ) HEBREW LETTER WIDE FINAL MEM
+FB27;FB27;FB27;05E8;05E8; # (ﬧ; ﬧ; ﬧ; ר; ר; ) HEBREW LETTER WIDE RESH
+FB28;FB28;FB28;05EA;05EA; # (ﬨ; ﬨ; ﬨ; ת; ת; ) HEBREW LETTER WIDE TAV
+FB29;FB29;FB29;002B;002B; # (﬩; ﬩; ﬩; +; +; ) HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A;05E9 05C1;05E9 05C1;05E9 05C1;05E9 05C1; # (שׁ; ש◌ׁ; ש◌ׁ; ש◌ׁ; ש◌ׁ; ) HEBREW LETTER SHIN WITH SHIN DOT
+FB2B;05E9 05C2;05E9 05C2;05E9 05C2;05E9 05C2; # (שׂ; ש◌ׂ; ש◌ׂ; ש◌ׂ; ש◌ׂ; ) HEBREW LETTER SHIN WITH SIN DOT
+FB2C;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1; # (שּׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ) HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2; # (שּׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ) HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E;05D0 05B7;05D0 05B7;05D0 05B7;05D0 05B7; # (אַ; א◌ַ; א◌ַ; א◌ַ; א◌ַ; ) HEBREW LETTER ALEF WITH PATAH
+FB2F;05D0 05B8;05D0 05B8;05D0 05B8;05D0 05B8; # (אָ; א◌ָ; א◌ָ; א◌ָ; א◌ָ; ) HEBREW LETTER ALEF WITH QAMATS
+FB30;05D0 05BC;05D0 05BC;05D0 05BC;05D0 05BC; # (אּ; א◌ּ; א◌ּ; א◌ּ; א◌ּ; ) HEBREW LETTER ALEF WITH MAPIQ
+FB31;05D1 05BC;05D1 05BC;05D1 05BC;05D1 05BC; # (בּ; ב◌ּ; ב◌ּ; ב◌ּ; ב◌ּ; ) HEBREW LETTER BET WITH DAGESH
+FB32;05D2 05BC;05D2 05BC;05D2 05BC;05D2 05BC; # (גּ; ג◌ּ; ג◌ּ; ג◌ּ; ג◌ּ; ) HEBREW LETTER GIMEL WITH DAGESH
+FB33;05D3 05BC;05D3 05BC;05D3 05BC;05D3 05BC; # (דּ; ד◌ּ; ד◌ּ; ד◌ּ; ד◌ּ; ) HEBREW LETTER DALET WITH DAGESH
+FB34;05D4 05BC;05D4 05BC;05D4 05BC;05D4 05BC; # (הּ; ה◌ּ; ה◌ּ; ה◌ּ; ה◌ּ; ) HEBREW LETTER HE WITH MAPIQ
+FB35;05D5 05BC;05D5 05BC;05D5 05BC;05D5 05BC; # (וּ; ו◌ּ; ו◌ּ; ו◌ּ; ו◌ּ; ) HEBREW LETTER VAV WITH DAGESH
+FB36;05D6 05BC;05D6 05BC;05D6 05BC;05D6 05BC; # (זּ; ז◌ּ; ז◌ּ; ז◌ּ; ז◌ּ; ) HEBREW LETTER ZAYIN WITH DAGESH
+FB38;05D8 05BC;05D8 05BC;05D8 05BC;05D8 05BC; # (טּ; ט◌ּ; ט◌ּ; ט◌ּ; ט◌ּ; ) HEBREW LETTER TET WITH DAGESH
+FB39;05D9 05BC;05D9 05BC;05D9 05BC;05D9 05BC; # (יּ; י◌ּ; י◌ּ; י◌ּ; י◌ּ; ) HEBREW LETTER YOD WITH DAGESH
+FB3A;05DA 05BC;05DA 05BC;05DA 05BC;05DA 05BC; # (ךּ; ך◌ּ; ך◌ּ; ך◌ּ; ך◌ּ; ) HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B;05DB 05BC;05DB 05BC;05DB 05BC;05DB 05BC; # (כּ; כ◌ּ; כ◌ּ; כ◌ּ; כ◌ּ; ) HEBREW LETTER KAF WITH DAGESH
+FB3C;05DC 05BC;05DC 05BC;05DC 05BC;05DC 05BC; # (לּ; ל◌ּ; ל◌ּ; ל◌ּ; ל◌ּ; ) HEBREW LETTER LAMED WITH DAGESH
+FB3E;05DE 05BC;05DE 05BC;05DE 05BC;05DE 05BC; # (מּ; מ◌ּ; מ◌ּ; מ◌ּ; מ◌ּ; ) HEBREW LETTER MEM WITH DAGESH
+FB40;05E0 05BC;05E0 05BC;05E0 05BC;05E0 05BC; # (נּ; נ◌ּ; נ◌ּ; נ◌ּ; נ◌ּ; ) HEBREW LETTER NUN WITH DAGESH
+FB41;05E1 05BC;05E1 05BC;05E1 05BC;05E1 05BC; # (סּ; ס◌ּ; ס◌ּ; ס◌ּ; ס◌ּ; ) HEBREW LETTER SAMEKH WITH DAGESH
+FB43;05E3 05BC;05E3 05BC;05E3 05BC;05E3 05BC; # (ףּ; ף◌ּ; ף◌ּ; ף◌ּ; ף◌ּ; ) HEBREW LETTER FINAL PE WITH DAGESH
+FB44;05E4 05BC;05E4 05BC;05E4 05BC;05E4 05BC; # (פּ; פ◌ּ; פ◌ּ; פ◌ּ; פ◌ּ; ) HEBREW LETTER PE WITH DAGESH
+FB46;05E6 05BC;05E6 05BC;05E6 05BC;05E6 05BC; # (צּ; צ◌ּ; צ◌ּ; צ◌ּ; צ◌ּ; ) HEBREW LETTER TSADI WITH DAGESH
+FB47;05E7 05BC;05E7 05BC;05E7 05BC;05E7 05BC; # (קּ; ק◌ּ; ק◌ּ; ק◌ּ; ק◌ּ; ) HEBREW LETTER QOF WITH DAGESH
+FB48;05E8 05BC;05E8 05BC;05E8 05BC;05E8 05BC; # (רּ; ר◌ּ; ר◌ּ; ר◌ּ; ר◌ּ; ) HEBREW LETTER RESH WITH DAGESH
+FB49;05E9 05BC;05E9 05BC;05E9 05BC;05E9 05BC; # (שּ; ש◌ּ; ש◌ּ; ש◌ּ; ש◌ּ; ) HEBREW LETTER SHIN WITH DAGESH
+FB4A;05EA 05BC;05EA 05BC;05EA 05BC;05EA 05BC; # (תּ; ת◌ּ; ת◌ּ; ת◌ּ; ת◌ּ; ) HEBREW LETTER TAV WITH DAGESH
+FB4B;05D5 05B9;05D5 05B9;05D5 05B9;05D5 05B9; # (וֹ; ו◌ֹ; ו◌ֹ; ו◌ֹ; ו◌ֹ; ) HEBREW LETTER VAV WITH HOLAM
+FB4C;05D1 05BF;05D1 05BF;05D1 05BF;05D1 05BF; # (בֿ; ב◌ֿ; ב◌ֿ; ב◌ֿ; ב◌ֿ; ) HEBREW LETTER BET WITH RAFE
+FB4D;05DB 05BF;05DB 05BF;05DB 05BF;05DB 05BF; # (כֿ; כ◌ֿ; כ◌ֿ; כ◌ֿ; כ◌ֿ; ) HEBREW LETTER KAF WITH RAFE
+FB4E;05E4 05BF;05E4 05BF;05E4 05BF;05E4 05BF; # (פֿ; פ◌ֿ; פ◌ֿ; פ◌ֿ; פ◌ֿ; ) HEBREW LETTER PE WITH RAFE
+FB4F;FB4F;FB4F;05D0 05DC;05D0 05DC; # (ﭏ; ﭏ; ﭏ; אל; אל; ) HEBREW LIGATURE ALEF LAMED
+FB50;FB50;FB50;0671;0671; # (ﭐ; ﭐ; ﭐ; ٱ; ٱ; ) ARABIC LETTER ALEF WASLA ISOLATED FORM
+FB51;FB51;FB51;0671;0671; # (ﭑ; ﭑ; ﭑ; ٱ; ٱ; ) ARABIC LETTER ALEF WASLA FINAL FORM
+FB52;FB52;FB52;067B;067B; # (ﭒ; ﭒ; ﭒ; ٻ; ٻ; ) ARABIC LETTER BEEH ISOLATED FORM
+FB53;FB53;FB53;067B;067B; # (ﭓ; ﭓ; ﭓ; ٻ; ٻ; ) ARABIC LETTER BEEH FINAL FORM
+FB54;FB54;FB54;067B;067B; # (ﭔ; ﭔ; ﭔ; ٻ; ٻ; ) ARABIC LETTER BEEH INITIAL FORM
+FB55;FB55;FB55;067B;067B; # (ﭕ; ﭕ; ﭕ; ٻ; ٻ; ) ARABIC LETTER BEEH MEDIAL FORM
+FB56;FB56;FB56;067E;067E; # (ﭖ; ﭖ; ﭖ; پ; پ; ) ARABIC LETTER PEH ISOLATED FORM
+FB57;FB57;FB57;067E;067E; # (ﭗ; ﭗ; ﭗ; پ; پ; ) ARABIC LETTER PEH FINAL FORM
+FB58;FB58;FB58;067E;067E; # (ﭘ; ﭘ; ﭘ; پ; پ; ) ARABIC LETTER PEH INITIAL FORM
+FB59;FB59;FB59;067E;067E; # (ﭙ; ﭙ; ﭙ; پ; پ; ) ARABIC LETTER PEH MEDIAL FORM
+FB5A;FB5A;FB5A;0680;0680; # (ﭚ; ﭚ; ﭚ; ڀ; ڀ; ) ARABIC LETTER BEHEH ISOLATED FORM
+FB5B;FB5B;FB5B;0680;0680; # (ﭛ; ﭛ; ﭛ; ڀ; ڀ; ) ARABIC LETTER BEHEH FINAL FORM
+FB5C;FB5C;FB5C;0680;0680; # (ﭜ; ﭜ; ﭜ; ڀ; ڀ; ) ARABIC LETTER BEHEH INITIAL FORM
+FB5D;FB5D;FB5D;0680;0680; # (ﭝ; ﭝ; ﭝ; ڀ; ڀ; ) ARABIC LETTER BEHEH MEDIAL FORM
+FB5E;FB5E;FB5E;067A;067A; # (ﭞ; ﭞ; ﭞ; ٺ; ٺ; ) ARABIC LETTER TTEHEH ISOLATED FORM
+FB5F;FB5F;FB5F;067A;067A; # (ﭟ; ﭟ; ﭟ; ٺ; ٺ; ) ARABIC LETTER TTEHEH FINAL FORM
+FB60;FB60;FB60;067A;067A; # (ﭠ; ﭠ; ﭠ; ٺ; ٺ; ) ARABIC LETTER TTEHEH INITIAL FORM
+FB61;FB61;FB61;067A;067A; # (ﭡ; ﭡ; ﭡ; ٺ; ٺ; ) ARABIC LETTER TTEHEH MEDIAL FORM
+FB62;FB62;FB62;067F;067F; # (ﭢ; ﭢ; ﭢ; ٿ; ٿ; ) ARABIC LETTER TEHEH ISOLATED FORM
+FB63;FB63;FB63;067F;067F; # (ﭣ; ﭣ; ﭣ; ٿ; ٿ; ) ARABIC LETTER TEHEH FINAL FORM
+FB64;FB64;FB64;067F;067F; # (ﭤ; ﭤ; ﭤ; ٿ; ٿ; ) ARABIC LETTER TEHEH INITIAL FORM
+FB65;FB65;FB65;067F;067F; # (ﭥ; ﭥ; ﭥ; ٿ; ٿ; ) ARABIC LETTER TEHEH MEDIAL FORM
+FB66;FB66;FB66;0679;0679; # (ﭦ; ﭦ; ﭦ; ٹ; ٹ; ) ARABIC LETTER TTEH ISOLATED FORM
+FB67;FB67;FB67;0679;0679; # (ﭧ; ﭧ; ﭧ; ٹ; ٹ; ) ARABIC LETTER TTEH FINAL FORM
+FB68;FB68;FB68;0679;0679; # (ﭨ; ﭨ; ﭨ; ٹ; ٹ; ) ARABIC LETTER TTEH INITIAL FORM
+FB69;FB69;FB69;0679;0679; # (ﭩ; ﭩ; ﭩ; ٹ; ٹ; ) ARABIC LETTER TTEH MEDIAL FORM
+FB6A;FB6A;FB6A;06A4;06A4; # (ﭪ; ﭪ; ﭪ; ڤ; ڤ; ) ARABIC LETTER VEH ISOLATED FORM
+FB6B;FB6B;FB6B;06A4;06A4; # (ﭫ; ﭫ; ﭫ; ڤ; ڤ; ) ARABIC LETTER VEH FINAL FORM
+FB6C;FB6C;FB6C;06A4;06A4; # (ﭬ; ﭬ; ﭬ; ڤ; ڤ; ) ARABIC LETTER VEH INITIAL FORM
+FB6D;FB6D;FB6D;06A4;06A4; # (ﭭ; ﭭ; ﭭ; ڤ; ڤ; ) ARABIC LETTER VEH MEDIAL FORM
+FB6E;FB6E;FB6E;06A6;06A6; # (ﭮ; ﭮ; ﭮ; ڦ; ڦ; ) ARABIC LETTER PEHEH ISOLATED FORM
+FB6F;FB6F;FB6F;06A6;06A6; # (ﭯ; ﭯ; ﭯ; ڦ; ڦ; ) ARABIC LETTER PEHEH FINAL FORM
+FB70;FB70;FB70;06A6;06A6; # (ﭰ; ﭰ; ﭰ; ڦ; ڦ; ) ARABIC LETTER PEHEH INITIAL FORM
+FB71;FB71;FB71;06A6;06A6; # (ﭱ; ﭱ; ﭱ; ڦ; ڦ; ) ARABIC LETTER PEHEH MEDIAL FORM
+FB72;FB72;FB72;0684;0684; # (ﭲ; ﭲ; ﭲ; ڄ; ڄ; ) ARABIC LETTER DYEH ISOLATED FORM
+FB73;FB73;FB73;0684;0684; # (ﭳ; ﭳ; ﭳ; ڄ; ڄ; ) ARABIC LETTER DYEH FINAL FORM
+FB74;FB74;FB74;0684;0684; # (ﭴ; ﭴ; ﭴ; ڄ; ڄ; ) ARABIC LETTER DYEH INITIAL FORM
+FB75;FB75;FB75;0684;0684; # (ﭵ; ﭵ; ﭵ; ڄ; ڄ; ) ARABIC LETTER DYEH MEDIAL FORM
+FB76;FB76;FB76;0683;0683; # (ﭶ; ﭶ; ﭶ; ڃ; ڃ; ) ARABIC LETTER NYEH ISOLATED FORM
+FB77;FB77;FB77;0683;0683; # (ﭷ; ﭷ; ﭷ; ڃ; ڃ; ) ARABIC LETTER NYEH FINAL FORM
+FB78;FB78;FB78;0683;0683; # (ﭸ; ﭸ; ﭸ; ڃ; ڃ; ) ARABIC LETTER NYEH INITIAL FORM
+FB79;FB79;FB79;0683;0683; # (ﭹ; ﭹ; ﭹ; ڃ; ڃ; ) ARABIC LETTER NYEH MEDIAL FORM
+FB7A;FB7A;FB7A;0686;0686; # (ﭺ; ﭺ; ﭺ; چ; چ; ) ARABIC LETTER TCHEH ISOLATED FORM
+FB7B;FB7B;FB7B;0686;0686; # (ﭻ; ﭻ; ﭻ; چ; چ; ) ARABIC LETTER TCHEH FINAL FORM
+FB7C;FB7C;FB7C;0686;0686; # (ﭼ; ﭼ; ﭼ; چ; چ; ) ARABIC LETTER TCHEH INITIAL FORM
+FB7D;FB7D;FB7D;0686;0686; # (ﭽ; ﭽ; ﭽ; چ; چ; ) ARABIC LETTER TCHEH MEDIAL FORM
+FB7E;FB7E;FB7E;0687;0687; # (ﭾ; ﭾ; ﭾ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH ISOLATED FORM
+FB7F;FB7F;FB7F;0687;0687; # (ﭿ; ﭿ; ﭿ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH FINAL FORM
+FB80;FB80;FB80;0687;0687; # (ﮀ; ﮀ; ﮀ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH INITIAL FORM
+FB81;FB81;FB81;0687;0687; # (ﮁ; ﮁ; ﮁ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH MEDIAL FORM
+FB82;FB82;FB82;068D;068D; # (ﮂ; ﮂ; ﮂ; ڍ; ڍ; ) ARABIC LETTER DDAHAL ISOLATED FORM
+FB83;FB83;FB83;068D;068D; # (ﮃ; ﮃ; ﮃ; ڍ; ڍ; ) ARABIC LETTER DDAHAL FINAL FORM
+FB84;FB84;FB84;068C;068C; # (ﮄ; ﮄ; ﮄ; ڌ; ڌ; ) ARABIC LETTER DAHAL ISOLATED FORM
+FB85;FB85;FB85;068C;068C; # (ﮅ; ﮅ; ﮅ; ڌ; ڌ; ) ARABIC LETTER DAHAL FINAL FORM
+FB86;FB86;FB86;068E;068E; # (ﮆ; ﮆ; ﮆ; ڎ; ڎ; ) ARABIC LETTER DUL ISOLATED FORM
+FB87;FB87;FB87;068E;068E; # (ﮇ; ﮇ; ﮇ; ڎ; ڎ; ) ARABIC LETTER DUL FINAL FORM
+FB88;FB88;FB88;0688;0688; # (ﮈ; ﮈ; ﮈ; ڈ; ڈ; ) ARABIC LETTER DDAL ISOLATED FORM
+FB89;FB89;FB89;0688;0688; # (ﮉ; ﮉ; ﮉ; ڈ; ڈ; ) ARABIC LETTER DDAL FINAL FORM
+FB8A;FB8A;FB8A;0698;0698; # (ﮊ; ﮊ; ﮊ; ژ; ژ; ) ARABIC LETTER JEH ISOLATED FORM
+FB8B;FB8B;FB8B;0698;0698; # (ﮋ; ﮋ; ﮋ; ژ; ژ; ) ARABIC LETTER JEH FINAL FORM
+FB8C;FB8C;FB8C;0691;0691; # (ﮌ; ﮌ; ﮌ; ڑ; ڑ; ) ARABIC LETTER RREH ISOLATED FORM
+FB8D;FB8D;FB8D;0691;0691; # (ﮍ; ﮍ; ﮍ; ڑ; ڑ; ) ARABIC LETTER RREH FINAL FORM
+FB8E;FB8E;FB8E;06A9;06A9; # (ﮎ; ﮎ; ﮎ; ک; ک; ) ARABIC LETTER KEHEH ISOLATED FORM
+FB8F;FB8F;FB8F;06A9;06A9; # (ﮏ; ﮏ; ﮏ; ک; ک; ) ARABIC LETTER KEHEH FINAL FORM
+FB90;FB90;FB90;06A9;06A9; # (ﮐ; ﮐ; ﮐ; ک; ک; ) ARABIC LETTER KEHEH INITIAL FORM
+FB91;FB91;FB91;06A9;06A9; # (ﮑ; ﮑ; ﮑ; ک; ک; ) ARABIC LETTER KEHEH MEDIAL FORM
+FB92;FB92;FB92;06AF;06AF; # (ﮒ; ﮒ; ﮒ; گ; گ; ) ARABIC LETTER GAF ISOLATED FORM
+FB93;FB93;FB93;06AF;06AF; # (ﮓ; ﮓ; ﮓ; گ; گ; ) ARABIC LETTER GAF FINAL FORM
+FB94;FB94;FB94;06AF;06AF; # (ﮔ; ﮔ; ﮔ; گ; گ; ) ARABIC LETTER GAF INITIAL FORM
+FB95;FB95;FB95;06AF;06AF; # (ﮕ; ﮕ; ﮕ; گ; گ; ) ARABIC LETTER GAF MEDIAL FORM
+FB96;FB96;FB96;06B3;06B3; # (ﮖ; ﮖ; ﮖ; ڳ; ڳ; ) ARABIC LETTER GUEH ISOLATED FORM
+FB97;FB97;FB97;06B3;06B3; # (ﮗ; ﮗ; ﮗ; ڳ; ڳ; ) ARABIC LETTER GUEH FINAL FORM
+FB98;FB98;FB98;06B3;06B3; # (ﮘ; ﮘ; ﮘ; ڳ; ڳ; ) ARABIC LETTER GUEH INITIAL FORM
+FB99;FB99;FB99;06B3;06B3; # (ﮙ; ﮙ; ﮙ; ڳ; ڳ; ) ARABIC LETTER GUEH MEDIAL FORM
+FB9A;FB9A;FB9A;06B1;06B1; # (ﮚ; ﮚ; ﮚ; ڱ; ڱ; ) ARABIC LETTER NGOEH ISOLATED FORM
+FB9B;FB9B;FB9B;06B1;06B1; # (ﮛ; ﮛ; ﮛ; ڱ; ڱ; ) ARABIC LETTER NGOEH FINAL FORM
+FB9C;FB9C;FB9C;06B1;06B1; # (ﮜ; ﮜ; ﮜ; ڱ; ڱ; ) ARABIC LETTER NGOEH INITIAL FORM
+FB9D;FB9D;FB9D;06B1;06B1; # (ﮝ; ﮝ; ﮝ; ڱ; ڱ; ) ARABIC LETTER NGOEH MEDIAL FORM
+FB9E;FB9E;FB9E;06BA;06BA; # (ﮞ; ﮞ; ﮞ; ں; ں; ) ARABIC LETTER NOON GHUNNA ISOLATED FORM
+FB9F;FB9F;FB9F;06BA;06BA; # (ﮟ; ﮟ; ﮟ; ں; ں; ) ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA0;FBA0;FBA0;06BB;06BB; # (ﮠ; ﮠ; ﮠ; ڻ; ڻ; ) ARABIC LETTER RNOON ISOLATED FORM
+FBA1;FBA1;FBA1;06BB;06BB; # (ﮡ; ﮡ; ﮡ; ڻ; ڻ; ) ARABIC LETTER RNOON FINAL FORM
+FBA2;FBA2;FBA2;06BB;06BB; # (ﮢ; ﮢ; ﮢ; ڻ; ڻ; ) ARABIC LETTER RNOON INITIAL FORM
+FBA3;FBA3;FBA3;06BB;06BB; # (ﮣ; ﮣ; ﮣ; ڻ; ڻ; ) ARABIC LETTER RNOON MEDIAL FORM
+FBA4;FBA4;FBA4;06C0;06D5 0654; # (ﮤ; ﮤ; ﮤ; ۀ; ە◌ٔ; ) ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+FBA5;FBA5;FBA5;06C0;06D5 0654; # (ﮥ; ﮥ; ﮥ; ۀ; ە◌ٔ; ) ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA6;FBA6;FBA6;06C1;06C1; # (ﮦ; ﮦ; ﮦ; ہ; ہ; ) ARABIC LETTER HEH GOAL ISOLATED FORM
+FBA7;FBA7;FBA7;06C1;06C1; # (ﮧ; ﮧ; ﮧ; ہ; ہ; ) ARABIC LETTER HEH GOAL FINAL FORM
+FBA8;FBA8;FBA8;06C1;06C1; # (ﮨ; ﮨ; ﮨ; ہ; ہ; ) ARABIC LETTER HEH GOAL INITIAL FORM
+FBA9;FBA9;FBA9;06C1;06C1; # (ﮩ; ﮩ; ﮩ; ہ; ہ; ) ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAA;FBAA;FBAA;06BE;06BE; # (ﮪ; ﮪ; ﮪ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+FBAB;FBAB;FBAB;06BE;06BE; # (ﮫ; ﮫ; ﮫ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAC;FBAC;FBAC;06BE;06BE; # (ﮬ; ﮬ; ﮬ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBAD;FBAD;FBAD;06BE;06BE; # (ﮭ; ﮭ; ﮭ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAE;FBAE;FBAE;06D2;06D2; # (ﮮ; ﮮ; ﮮ; ے; ے; ) ARABIC LETTER YEH BARREE ISOLATED FORM
+FBAF;FBAF;FBAF;06D2;06D2; # (ﮯ; ﮯ; ﮯ; ے; ے; ) ARABIC LETTER YEH BARREE FINAL FORM
+FBB0;FBB0;FBB0;06D3;06D2 0654; # (ﮰ; ﮰ; ﮰ; ۓ; ے◌ٔ; ) ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+FBB1;FBB1;FBB1;06D3;06D2 0654; # (ﮱ; ﮱ; ﮱ; ۓ; ے◌ٔ; ) ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3;FBD3;FBD3;06AD;06AD; # (ﯓ; ﯓ; ﯓ; ڭ; ڭ; ) ARABIC LETTER NG ISOLATED FORM
+FBD4;FBD4;FBD4;06AD;06AD; # (ﯔ; ﯔ; ﯔ; ڭ; ڭ; ) ARABIC LETTER NG FINAL FORM
+FBD5;FBD5;FBD5;06AD;06AD; # (ﯕ; ﯕ; ﯕ; ڭ; ڭ; ) ARABIC LETTER NG INITIAL FORM
+FBD6;FBD6;FBD6;06AD;06AD; # (ﯖ; ﯖ; ﯖ; ڭ; ڭ; ) ARABIC LETTER NG MEDIAL FORM
+FBD7;FBD7;FBD7;06C7;06C7; # (ﯗ; ﯗ; ﯗ; ۇ; ۇ; ) ARABIC LETTER U ISOLATED FORM
+FBD8;FBD8;FBD8;06C7;06C7; # (ﯘ; ﯘ; ﯘ; ۇ; ۇ; ) ARABIC LETTER U FINAL FORM
+FBD9;FBD9;FBD9;06C6;06C6; # (ﯙ; ﯙ; ﯙ; ۆ; ۆ; ) ARABIC LETTER OE ISOLATED FORM
+FBDA;FBDA;FBDA;06C6;06C6; # (ﯚ; ﯚ; ﯚ; ۆ; ۆ; ) ARABIC LETTER OE FINAL FORM
+FBDB;FBDB;FBDB;06C8;06C8; # (ﯛ; ﯛ; ﯛ; ۈ; ۈ; ) ARABIC LETTER YU ISOLATED FORM
+FBDC;FBDC;FBDC;06C8;06C8; # (ﯜ; ﯜ; ﯜ; ۈ; ۈ; ) ARABIC LETTER YU FINAL FORM
+FBDD;FBDD;FBDD;06C7 0674;06C7 0674; # (ﯝ; ﯝ; ﯝ; ۇٴ; ۇٴ; ) ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBDE;FBDE;FBDE;06CB;06CB; # (ﯞ; ﯞ; ﯞ; ۋ; ۋ; ) ARABIC LETTER VE ISOLATED FORM
+FBDF;FBDF;FBDF;06CB;06CB; # (ﯟ; ﯟ; ﯟ; ۋ; ۋ; ) ARABIC LETTER VE FINAL FORM
+FBE0;FBE0;FBE0;06C5;06C5; # (ﯠ; ﯠ; ﯠ; ۅ; ۅ; ) ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+FBE1;FBE1;FBE1;06C5;06C5; # (ﯡ; ﯡ; ﯡ; ۅ; ۅ; ) ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE2;FBE2;FBE2;06C9;06C9; # (ﯢ; ﯢ; ﯢ; ۉ; ۉ; ) ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+FBE3;FBE3;FBE3;06C9;06C9; # (ﯣ; ﯣ; ﯣ; ۉ; ۉ; ) ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE4;FBE4;FBE4;06D0;06D0; # (ﯤ; ﯤ; ﯤ; ې; ې; ) ARABIC LETTER E ISOLATED FORM
+FBE5;FBE5;FBE5;06D0;06D0; # (ﯥ; ﯥ; ﯥ; ې; ې; ) ARABIC LETTER E FINAL FORM
+FBE6;FBE6;FBE6;06D0;06D0; # (ﯦ; ﯦ; ﯦ; ې; ې; ) ARABIC LETTER E INITIAL FORM
+FBE7;FBE7;FBE7;06D0;06D0; # (ﯧ; ﯧ; ﯧ; ې; ې; ) ARABIC LETTER E MEDIAL FORM
+FBE8;FBE8;FBE8;0649;0649; # (ﯨ; ﯨ; ﯨ; ى; ى; ) ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBE9;FBE9;FBE9;0649;0649; # (ﯩ; ﯩ; ﯩ; ى; ى; ) ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBEA;FBEA;FBEA;0626 0627;064A 0654 0627; # (ﯪ; ﯪ; ﯪ; ئا; ي◌ٔا; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FBEB;FBEB;FBEB;0626 0627;064A 0654 0627; # (ﯫ; ﯫ; ﯫ; ئا; ي◌ٔا; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEC;FBEC;FBEC;0626 06D5;064A 0654 06D5; # (ﯬ; ﯬ; ﯬ; ئە; ي◌ٔە; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBED;FBED;FBED;0626 06D5;064A 0654 06D5; # (ﯭ; ﯭ; ﯭ; ئە; ي◌ٔە; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEE;FBEE;FBEE;0626 0648;064A 0654 0648; # (ﯮ; ﯮ; ﯮ; ئو; ي◌ٔو; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBEF;FBEF;FBEF;0626 0648;064A 0654 0648; # (ﯯ; ﯯ; ﯯ; ئو; ي◌ٔو; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF0;FBF0;FBF0;0626 06C7;064A 0654 06C7; # (ﯰ; ﯰ; ﯰ; ئۇ; ي◌ٔۇ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF1;FBF1;FBF1;0626 06C7;064A 0654 06C7; # (ﯱ; ﯱ; ﯱ; ئۇ; ي◌ٔۇ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF2;FBF2;FBF2;0626 06C6;064A 0654 06C6; # (ﯲ; ﯲ; ﯲ; ئۆ; ي◌ٔۆ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF3;FBF3;FBF3;0626 06C6;064A 0654 06C6; # (ﯳ; ﯳ; ﯳ; ئۆ; ي◌ٔۆ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF4;FBF4;FBF4;0626 06C8;064A 0654 06C8; # (ﯴ; ﯴ; ﯴ; ئۈ; ي◌ٔۈ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBF5;FBF5;FBF5;0626 06C8;064A 0654 06C8; # (ﯵ; ﯵ; ﯵ; ئۈ; ي◌ٔۈ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF6;FBF6;FBF6;0626 06D0;064A 0654 06D0; # (ﯶ; ﯶ; ﯶ; ئې; ي◌ٔې; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+FBF7;FBF7;FBF7;0626 06D0;064A 0654 06D0; # (ﯷ; ﯷ; ﯷ; ئې; ي◌ٔې; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBF8;FBF8;FBF8;0626 06D0;064A 0654 06D0; # (ﯸ; ﯸ; ﯸ; ئې; ي◌ٔې; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF9;FBF9;FBF9;0626 0649;064A 0654 0649; # (ﯹ; ﯹ; ﯹ; ئى; ي◌ٔى; ) ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FBFA;FBFA;FBFA;0626 0649;064A 0654 0649; # (ﯺ; ﯺ; ﯺ; ئى; ي◌ٔى; ) ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBFB;FBFB;FBFB;0626 0649;064A 0654 0649; # (ﯻ; ﯻ; ﯻ; ئى; ي◌ٔى; ) ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFC;FBFC;FBFC;06CC;06CC; # (ﯼ; ﯼ; ﯼ; ی; ی; ) ARABIC LETTER FARSI YEH ISOLATED FORM
+FBFD;FBFD;FBFD;06CC;06CC; # (ﯽ; ﯽ; ﯽ; ی; ی; ) ARABIC LETTER FARSI YEH FINAL FORM
+FBFE;FBFE;FBFE;06CC;06CC; # (ﯾ; ﯾ; ﯾ; ی; ی; ) ARABIC LETTER FARSI YEH INITIAL FORM
+FBFF;FBFF;FBFF;06CC;06CC; # (ﯿ; ﯿ; ﯿ; ی; ی; ) ARABIC LETTER FARSI YEH MEDIAL FORM
+FC00;FC00;FC00;0626 062C;064A 0654 062C; # (ﰀ; ﰀ; ﰀ; ئج; ي◌ٔج; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC01;FC01;FC01;0626 062D;064A 0654 062D; # (ﰁ; ﰁ; ﰁ; ئح; ي◌ٔح; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC02;FC02;FC02;0626 0645;064A 0654 0645; # (ﰂ; ﰂ; ﰂ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC03;FC03;FC03;0626 0649;064A 0654 0649; # (ﰃ; ﰃ; ﰃ; ئى; ي◌ٔى; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC04;FC04;FC04;0626 064A;064A 0654 064A; # (ﰄ; ﰄ; ﰄ; ئي; ي◌ٔي; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FC05;FC05;FC05;0628 062C;0628 062C; # (ﰅ; ﰅ; ﰅ; بج; بج; ) ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC06;FC06;FC06;0628 062D;0628 062D; # (ﰆ; ﰆ; ﰆ; بح; بح; ) ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FC07;FC07;FC07;0628 062E;0628 062E; # (ﰇ; ﰇ; ﰇ; بخ; بخ; ) ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FC08;FC08;FC08;0628 0645;0628 0645; # (ﰈ; ﰈ; ﰈ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC09;FC09;FC09;0628 0649;0628 0649; # (ﰉ; ﰉ; ﰉ; بى; بى; ) ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC0A;FC0A;FC0A;0628 064A;0628 064A; # (ﰊ; ﰊ; ﰊ; بي; بي; ) ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+FC0B;FC0B;FC0B;062A 062C;062A 062C; # (ﰋ; ﰋ; ﰋ; تج; تج; ) ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FC0C;FC0C;FC0C;062A 062D;062A 062D; # (ﰌ; ﰌ; ﰌ; تح; تح; ) ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FC0D;FC0D;FC0D;062A 062E;062A 062E; # (ﰍ; ﰍ; ﰍ; تخ; تخ; ) ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FC0E;FC0E;FC0E;062A 0645;062A 0645; # (ﰎ; ﰎ; ﰎ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FC0F;FC0F;FC0F;062A 0649;062A 0649; # (ﰏ; ﰏ; ﰏ; تى; تى; ) ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC10;FC10;FC10;062A 064A;062A 064A; # (ﰐ; ﰐ; ﰐ; تي; تي; ) ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+FC11;FC11;FC11;062B 062C;062B 062C; # (ﰑ; ﰑ; ﰑ; ثج; ثج; ) ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC12;FC12;FC12;062B 0645;062B 0645; # (ﰒ; ﰒ; ﰒ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC13;FC13;FC13;062B 0649;062B 0649; # (ﰓ; ﰓ; ﰓ; ثى; ثى; ) ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC14;FC14;FC14;062B 064A;062B 064A; # (ﰔ; ﰔ; ﰔ; ثي; ثي; ) ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+FC15;FC15;FC15;062C 062D;062C 062D; # (ﰕ; ﰕ; ﰕ; جح; جح; ) ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FC16;FC16;FC16;062C 0645;062C 0645; # (ﰖ; ﰖ; ﰖ; جم; جم; ) ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FC17;FC17;FC17;062D 062C;062D 062C; # (ﰗ; ﰗ; ﰗ; حج; حج; ) ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FC18;FC18;FC18;062D 0645;062D 0645; # (ﰘ; ﰘ; ﰘ; حم; حم; ) ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FC19;FC19;FC19;062E 062C;062E 062C; # (ﰙ; ﰙ; ﰙ; خج; خج; ) ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A;FC1A;FC1A;062E 062D;062E 062D; # (ﰚ; ﰚ; ﰚ; خح; خح; ) ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FC1B;FC1B;FC1B;062E 0645;062E 0645; # (ﰛ; ﰛ; ﰛ; خم; خم; ) ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FC1C;FC1C;FC1C;0633 062C;0633 062C; # (ﰜ; ﰜ; ﰜ; سج; سج; ) ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FC1D;FC1D;FC1D;0633 062D;0633 062D; # (ﰝ; ﰝ; ﰝ; سح; سح; ) ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FC1E;FC1E;FC1E;0633 062E;0633 062E; # (ﰞ; ﰞ; ﰞ; سخ; سخ; ) ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FC1F;FC1F;FC1F;0633 0645;0633 0645; # (ﰟ; ﰟ; ﰟ; سم; سم; ) ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FC20;FC20;FC20;0635 062D;0635 062D; # (ﰠ; ﰠ; ﰠ; صح; صح; ) ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FC21;FC21;FC21;0635 0645;0635 0645; # (ﰡ; ﰡ; ﰡ; صم; صم; ) ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FC22;FC22;FC22;0636 062C;0636 062C; # (ﰢ; ﰢ; ﰢ; ضج; ضج; ) ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FC23;FC23;FC23;0636 062D;0636 062D; # (ﰣ; ﰣ; ﰣ; ضح; ضح; ) ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FC24;FC24;FC24;0636 062E;0636 062E; # (ﰤ; ﰤ; ﰤ; ضخ; ضخ; ) ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FC25;FC25;FC25;0636 0645;0636 0645; # (ﰥ; ﰥ; ﰥ; ضم; ضم; ) ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FC26;FC26;FC26;0637 062D;0637 062D; # (ﰦ; ﰦ; ﰦ; طح; طح; ) ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FC27;FC27;FC27;0637 0645;0637 0645; # (ﰧ; ﰧ; ﰧ; طم; طم; ) ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FC28;FC28;FC28;0638 0645;0638 0645; # (ﰨ; ﰨ; ﰨ; ظم; ظم; ) ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+FC29;FC29;FC29;0639 062C;0639 062C; # (ﰩ; ﰩ; ﰩ; عج; عج; ) ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FC2A;FC2A;FC2A;0639 0645;0639 0645; # (ﰪ; ﰪ; ﰪ; عم; عم; ) ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FC2B;FC2B;FC2B;063A 062C;063A 062C; # (ﰫ; ﰫ; ﰫ; غج; غج; ) ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FC2C;FC2C;FC2C;063A 0645;063A 0645; # (ﰬ; ﰬ; ﰬ; غم; غم; ) ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FC2D;FC2D;FC2D;0641 062C;0641 062C; # (ﰭ; ﰭ; ﰭ; فج; فج; ) ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FC2E;FC2E;FC2E;0641 062D;0641 062D; # (ﰮ; ﰮ; ﰮ; فح; فح; ) ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FC2F;FC2F;FC2F;0641 062E;0641 062E; # (ﰯ; ﰯ; ﰯ; فخ; فخ; ) ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FC30;FC30;FC30;0641 0645;0641 0645; # (ﰰ; ﰰ; ﰰ; فم; فم; ) ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FC31;FC31;FC31;0641 0649;0641 0649; # (ﰱ; ﰱ; ﰱ; فى; فى; ) ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC32;FC32;FC32;0641 064A;0641 064A; # (ﰲ; ﰲ; ﰲ; في; في; ) ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+FC33;FC33;FC33;0642 062D;0642 062D; # (ﰳ; ﰳ; ﰳ; قح; قح; ) ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FC34;FC34;FC34;0642 0645;0642 0645; # (ﰴ; ﰴ; ﰴ; قم; قم; ) ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FC35;FC35;FC35;0642 0649;0642 0649; # (ﰵ; ﰵ; ﰵ; قى; قى; ) ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC36;FC36;FC36;0642 064A;0642 064A; # (ﰶ; ﰶ; ﰶ; قي; قي; ) ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+FC37;FC37;FC37;0643 0627;0643 0627; # (ﰷ; ﰷ; ﰷ; كا; كا; ) ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FC38;FC38;FC38;0643 062C;0643 062C; # (ﰸ; ﰸ; ﰸ; كج; كج; ) ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FC39;FC39;FC39;0643 062D;0643 062D; # (ﰹ; ﰹ; ﰹ; كح; كح; ) ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FC3A;FC3A;FC3A;0643 062E;0643 062E; # (ﰺ; ﰺ; ﰺ; كخ; كخ; ) ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FC3B;FC3B;FC3B;0643 0644;0643 0644; # (ﰻ; ﰻ; ﰻ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FC3C;FC3C;FC3C;0643 0645;0643 0645; # (ﰼ; ﰼ; ﰼ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FC3D;FC3D;FC3D;0643 0649;0643 0649; # (ﰽ; ﰽ; ﰽ; كى; كى; ) ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC3E;FC3E;FC3E;0643 064A;0643 064A; # (ﰾ; ﰾ; ﰾ; كي; كي; ) ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+FC3F;FC3F;FC3F;0644 062C;0644 062C; # (ﰿ; ﰿ; ﰿ; لج; لج; ) ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FC40;FC40;FC40;0644 062D;0644 062D; # (ﱀ; ﱀ; ﱀ; لح; لح; ) ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FC41;FC41;FC41;0644 062E;0644 062E; # (ﱁ; ﱁ; ﱁ; لخ; لخ; ) ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FC42;FC42;FC42;0644 0645;0644 0645; # (ﱂ; ﱂ; ﱂ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FC43;FC43;FC43;0644 0649;0644 0649; # (ﱃ; ﱃ; ﱃ; لى; لى; ) ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC44;FC44;FC44;0644 064A;0644 064A; # (ﱄ; ﱄ; ﱄ; لي; لي; ) ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+FC45;FC45;FC45;0645 062C;0645 062C; # (ﱅ; ﱅ; ﱅ; مج; مج; ) ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FC46;FC46;FC46;0645 062D;0645 062D; # (ﱆ; ﱆ; ﱆ; مح; مح; ) ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FC47;FC47;FC47;0645 062E;0645 062E; # (ﱇ; ﱇ; ﱇ; مخ; مخ; ) ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FC48;FC48;FC48;0645 0645;0645 0645; # (ﱈ; ﱈ; ﱈ; مم; مم; ) ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FC49;FC49;FC49;0645 0649;0645 0649; # (ﱉ; ﱉ; ﱉ; مى; مى; ) ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A;FC4A;FC4A;0645 064A;0645 064A; # (ﱊ; ﱊ; ﱊ; مي; مي; ) ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+FC4B;FC4B;FC4B;0646 062C;0646 062C; # (ﱋ; ﱋ; ﱋ; نج; نج; ) ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FC4C;FC4C;FC4C;0646 062D;0646 062D; # (ﱌ; ﱌ; ﱌ; نح; نح; ) ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FC4D;FC4D;FC4D;0646 062E;0646 062E; # (ﱍ; ﱍ; ﱍ; نخ; نخ; ) ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC4E;FC4E;FC4E;0646 0645;0646 0645; # (ﱎ; ﱎ; ﱎ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FC4F;FC4F;FC4F;0646 0649;0646 0649; # (ﱏ; ﱏ; ﱏ; نى; نى; ) ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC50;FC50;FC50;0646 064A;0646 064A; # (ﱐ; ﱐ; ﱐ; ني; ني; ) ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+FC51;FC51;FC51;0647 062C;0647 062C; # (ﱑ; ﱑ; ﱑ; هج; هج; ) ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FC52;FC52;FC52;0647 0645;0647 0645; # (ﱒ; ﱒ; ﱒ; هم; هم; ) ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FC53;FC53;FC53;0647 0649;0647 0649; # (ﱓ; ﱓ; ﱓ; هى; هى; ) ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54;FC54;FC54;0647 064A;0647 064A; # (ﱔ; ﱔ; ﱔ; هي; هي; ) ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+FC55;FC55;FC55;064A 062C;064A 062C; # (ﱕ; ﱕ; ﱕ; يج; يج; ) ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FC56;FC56;FC56;064A 062D;064A 062D; # (ﱖ; ﱖ; ﱖ; يح; يح; ) ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FC57;FC57;FC57;064A 062E;064A 062E; # (ﱗ; ﱗ; ﱗ; يخ; يخ; ) ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC58;FC58;FC58;064A 0645;064A 0645; # (ﱘ; ﱘ; ﱘ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FC59;FC59;FC59;064A 0649;064A 0649; # (ﱙ; ﱙ; ﱙ; يى; يى; ) ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC5A;FC5A;FC5A;064A 064A;064A 064A; # (ﱚ; ﱚ; ﱚ; يي; يي; ) ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+FC5B;FC5B;FC5B;0630 0670;0630 0670; # (ﱛ; ﱛ; ﱛ; ذ◌ٰ; ذ◌ٰ; ) ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5C;FC5C;FC5C;0631 0670;0631 0670; # (ﱜ; ﱜ; ﱜ; ر◌ٰ; ر◌ٰ; ) ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5D;FC5D;FC5D;0649 0670;0649 0670; # (ﱝ; ﱝ; ﱝ; ى◌ٰ; ى◌ٰ; ) ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5E;FC5E;FC5E;0020 064C 0651;0020 064C 0651; # (ﱞ; ﱞ; ﱞ;  ◌ٌ◌ّ;  ◌ٌ◌ّ; ) ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+FC5F;FC5F;FC5F;0020 064D 0651;0020 064D 0651; # (ﱟ; ﱟ; ﱟ;  ◌ٍ◌ّ;  ◌ٍ◌ّ; ) ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+FC60;FC60;FC60;0020 064E 0651;0020 064E 0651; # (ﱠ; ﱠ; ﱠ;  ◌َ◌ّ;  ◌َ◌ّ; ) ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+FC61;FC61;FC61;0020 064F 0651;0020 064F 0651; # (ﱡ; ﱡ; ﱡ;  ◌ُ◌ّ;  ◌ُ◌ّ; ) ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+FC62;FC62;FC62;0020 0650 0651;0020 0650 0651; # (ﱢ; ﱢ; ﱢ;  ◌ِ◌ّ;  ◌ِ◌ّ; ) ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+FC63;FC63;FC63;0020 0651 0670;0020 0651 0670; # (ﱣ; ﱣ; ﱣ;  ◌ّ◌ٰ;  ◌ّ◌ٰ; ) ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64;FC64;FC64;0626 0631;064A 0654 0631; # (ﱤ; ﱤ; ﱤ; ئر; ي◌ٔر; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65;FC65;FC65;0626 0632;064A 0654 0632; # (ﱥ; ﱥ; ﱥ; ئز; ي◌ٔز; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC66;FC66;FC66;0626 0645;064A 0654 0645; # (ﱦ; ﱦ; ﱦ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC67;FC67;FC67;0626 0646;064A 0654 0646; # (ﱧ; ﱧ; ﱧ; ئن; ي◌ٔن; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC68;FC68;FC68;0626 0649;064A 0654 0649; # (ﱨ; ﱨ; ﱨ; ئى; ي◌ٔى; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC69;FC69;FC69;0626 064A;064A 0654 064A; # (ﱩ; ﱩ; ﱩ; ئي; ي◌ٔي; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC6A;FC6A;FC6A;0628 0631;0628 0631; # (ﱪ; ﱪ; ﱪ; بر; بر; ) ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B;FC6B;FC6B;0628 0632;0628 0632; # (ﱫ; ﱫ; ﱫ; بز; بز; ) ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC6C;FC6C;FC6C;0628 0645;0628 0645; # (ﱬ; ﱬ; ﱬ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC6D;FC6D;FC6D;0628 0646;0628 0646; # (ﱭ; ﱭ; ﱭ; بن; بن; ) ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FC6E;FC6E;FC6E;0628 0649;0628 0649; # (ﱮ; ﱮ; ﱮ; بى; بى; ) ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC6F;FC6F;FC6F;0628 064A;0628 064A; # (ﱯ; ﱯ; ﱯ; بي; بي; ) ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC70;FC70;FC70;062A 0631;062A 0631; # (ﱰ; ﱰ; ﱰ; تر; تر; ) ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71;FC71;FC71;062A 0632;062A 0632; # (ﱱ; ﱱ; ﱱ; تز; تز; ) ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FC72;FC72;FC72;062A 0645;062A 0645; # (ﱲ; ﱲ; ﱲ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC73;FC73;FC73;062A 0646;062A 0646; # (ﱳ; ﱳ; ﱳ; تن; تن; ) ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FC74;FC74;FC74;062A 0649;062A 0649; # (ﱴ; ﱴ; ﱴ; تى; تى; ) ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC75;FC75;FC75;062A 064A;062A 064A; # (ﱵ; ﱵ; ﱵ; تي; تي; ) ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC76;FC76;FC76;062B 0631;062B 0631; # (ﱶ; ﱶ; ﱶ; ثر; ثر; ) ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77;FC77;FC77;062B 0632;062B 0632; # (ﱷ; ﱷ; ﱷ; ثز; ثز; ) ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FC78;FC78;FC78;062B 0645;062B 0645; # (ﱸ; ﱸ; ﱸ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC79;FC79;FC79;062B 0646;062B 0646; # (ﱹ; ﱹ; ﱹ; ثن; ثن; ) ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FC7A;FC7A;FC7A;062B 0649;062B 0649; # (ﱺ; ﱺ; ﱺ; ثى; ثى; ) ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC7B;FC7B;FC7B;062B 064A;062B 064A; # (ﱻ; ﱻ; ﱻ; ثي; ثي; ) ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC7C;FC7C;FC7C;0641 0649;0641 0649; # (ﱼ; ﱼ; ﱼ; فى; فى; ) ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC7D;FC7D;FC7D;0641 064A;0641 064A; # (ﱽ; ﱽ; ﱽ; في; في; ) ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC7E;FC7E;FC7E;0642 0649;0642 0649; # (ﱾ; ﱾ; ﱾ; قى; قى; ) ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC7F;FC7F;FC7F;0642 064A;0642 064A; # (ﱿ; ﱿ; ﱿ; قي; قي; ) ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC80;FC80;FC80;0643 0627;0643 0627; # (ﲀ; ﲀ; ﲀ; كا; كا; ) ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC81;FC81;FC81;0643 0644;0643 0644; # (ﲁ; ﲁ; ﲁ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC82;FC82;FC82;0643 0645;0643 0645; # (ﲂ; ﲂ; ﲂ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC83;FC83;FC83;0643 0649;0643 0649; # (ﲃ; ﲃ; ﲃ; كى; كى; ) ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC84;FC84;FC84;0643 064A;0643 064A; # (ﲄ; ﲄ; ﲄ; كي; كي; ) ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC85;FC85;FC85;0644 0645;0644 0645; # (ﲅ; ﲅ; ﲅ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC86;FC86;FC86;0644 0649;0644 0649; # (ﲆ; ﲆ; ﲆ; لى; لى; ) ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC87;FC87;FC87;0644 064A;0644 064A; # (ﲇ; ﲇ; ﲇ; لي; لي; ) ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC88;FC88;FC88;0645 0627;0645 0627; # (ﲈ; ﲈ; ﲈ; ما; ما; ) ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FC89;FC89;FC89;0645 0645;0645 0645; # (ﲉ; ﲉ; ﲉ; مم; مم; ) ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC8A;FC8A;FC8A;0646 0631;0646 0631; # (ﲊ; ﲊ; ﲊ; نر; نر; ) ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B;FC8B;FC8B;0646 0632;0646 0632; # (ﲋ; ﲋ; ﲋ; نز; نز; ) ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FC8C;FC8C;FC8C;0646 0645;0646 0645; # (ﲌ; ﲌ; ﲌ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC8D;FC8D;FC8D;0646 0646;0646 0646; # (ﲍ; ﲍ; ﲍ; نن; نن; ) ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FC8E;FC8E;FC8E;0646 0649;0646 0649; # (ﲎ; ﲎ; ﲎ; نى; نى; ) ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC8F;FC8F;FC8F;0646 064A;0646 064A; # (ﲏ; ﲏ; ﲏ; ني; ني; ) ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC90;FC90;FC90;0649 0670;0649 0670; # (ﲐ; ﲐ; ﲐ; ى◌ٰ; ى◌ٰ; ) ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC91;FC91;FC91;064A 0631;064A 0631; # (ﲑ; ﲑ; ﲑ; ير; ير; ) ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92;FC92;FC92;064A 0632;064A 0632; # (ﲒ; ﲒ; ﲒ; يز; يز; ) ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FC93;FC93;FC93;064A 0645;064A 0645; # (ﲓ; ﲓ; ﲓ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC94;FC94;FC94;064A 0646;064A 0646; # (ﲔ; ﲔ; ﲔ; ين; ين; ) ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FC95;FC95;FC95;064A 0649;064A 0649; # (ﲕ; ﲕ; ﲕ; يى; يى; ) ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC96;FC96;FC96;064A 064A;064A 064A; # (ﲖ; ﲖ; ﲖ; يي; يي; ) ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC97;FC97;FC97;0626 062C;064A 0654 062C; # (ﲗ; ﲗ; ﲗ; ئج; ي◌ٔج; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC98;FC98;FC98;0626 062D;064A 0654 062D; # (ﲘ; ﲘ; ﲘ; ئح; ي◌ٔح; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC99;FC99;FC99;0626 062E;064A 0654 062E; # (ﲙ; ﲙ; ﲙ; ئخ; ي◌ٔخ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC9A;FC9A;FC9A;0626 0645;064A 0654 0645; # (ﲚ; ﲚ; ﲚ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FC9B;FC9B;FC9B;0626 0647;064A 0654 0647; # (ﲛ; ﲛ; ﲛ; ئه; ي◌ٔه; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FC9C;FC9C;FC9C;0628 062C;0628 062C; # (ﲜ; ﲜ; ﲜ; بج; بج; ) ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC9D;FC9D;FC9D;0628 062D;0628 062D; # (ﲝ; ﲝ; ﲝ; بح; بح; ) ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC9E;FC9E;FC9E;0628 062E;0628 062E; # (ﲞ; ﲞ; ﲞ; بخ; بخ; ) ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC9F;FC9F;FC9F;0628 0645;0628 0645; # (ﲟ; ﲟ; ﲟ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCA0;FCA0;FCA0;0628 0647;0628 0647; # (ﲠ; ﲠ; ﲠ; به; به; ) ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCA1;FCA1;FCA1;062A 062C;062A 062C; # (ﲡ; ﲡ; ﲡ; تج; تج; ) ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FCA2;FCA2;FCA2;062A 062D;062A 062D; # (ﲢ; ﲢ; ﲢ; تح; تح; ) ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FCA3;FCA3;FCA3;062A 062E;062A 062E; # (ﲣ; ﲣ; ﲣ; تخ; تخ; ) ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FCA4;FCA4;FCA4;062A 0645;062A 0645; # (ﲤ; ﲤ; ﲤ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCA5;FCA5;FCA5;062A 0647;062A 0647; # (ﲥ; ﲥ; ﲥ; ته; ته; ) ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCA6;FCA6;FCA6;062B 0645;062B 0645; # (ﲦ; ﲦ; ﲦ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCA7;FCA7;FCA7;062C 062D;062C 062D; # (ﲧ; ﲧ; ﲧ; جح; جح; ) ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FCA8;FCA8;FCA8;062C 0645;062C 0645; # (ﲨ; ﲨ; ﲨ; جم; جم; ) ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FCA9;FCA9;FCA9;062D 062C;062D 062C; # (ﲩ; ﲩ; ﲩ; حج; حج; ) ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FCAA;FCAA;FCAA;062D 0645;062D 0645; # (ﲪ; ﲪ; ﲪ; حم; حم; ) ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FCAB;FCAB;FCAB;062E 062C;062E 062C; # (ﲫ; ﲫ; ﲫ; خج; خج; ) ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FCAC;FCAC;FCAC;062E 0645;062E 0645; # (ﲬ; ﲬ; ﲬ; خم; خم; ) ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FCAD;FCAD;FCAD;0633 062C;0633 062C; # (ﲭ; ﲭ; ﲭ; سج; سج; ) ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FCAE;FCAE;FCAE;0633 062D;0633 062D; # (ﲮ; ﲮ; ﲮ; سح; سح; ) ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FCAF;FCAF;FCAF;0633 062E;0633 062E; # (ﲯ; ﲯ; ﲯ; سخ; سخ; ) ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FCB0;FCB0;FCB0;0633 0645;0633 0645; # (ﲰ; ﲰ; ﲰ; سم; سم; ) ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCB1;FCB1;FCB1;0635 062D;0635 062D; # (ﲱ; ﲱ; ﲱ; صح; صح; ) ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FCB2;FCB2;FCB2;0635 062E;0635 062E; # (ﲲ; ﲲ; ﲲ; صخ; صخ; ) ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FCB3;FCB3;FCB3;0635 0645;0635 0645; # (ﲳ; ﲳ; ﲳ; صم; صم; ) ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FCB4;FCB4;FCB4;0636 062C;0636 062C; # (ﲴ; ﲴ; ﲴ; ضج; ضج; ) ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FCB5;FCB5;FCB5;0636 062D;0636 062D; # (ﲵ; ﲵ; ﲵ; ضح; ضح; ) ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FCB6;FCB6;FCB6;0636 062E;0636 062E; # (ﲶ; ﲶ; ﲶ; ضخ; ضخ; ) ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FCB7;FCB7;FCB7;0636 0645;0636 0645; # (ﲷ; ﲷ; ﲷ; ضم; ضم; ) ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FCB8;FCB8;FCB8;0637 062D;0637 062D; # (ﲸ; ﲸ; ﲸ; طح; طح; ) ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FCB9;FCB9;FCB9;0638 0645;0638 0645; # (ﲹ; ﲹ; ﲹ; ظم; ظم; ) ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FCBA;FCBA;FCBA;0639 062C;0639 062C; # (ﲺ; ﲺ; ﲺ; عج; عج; ) ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FCBB;FCBB;FCBB;0639 0645;0639 0645; # (ﲻ; ﲻ; ﲻ; عم; عم; ) ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FCBC;FCBC;FCBC;063A 062C;063A 062C; # (ﲼ; ﲼ; ﲼ; غج; غج; ) ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FCBD;FCBD;FCBD;063A 0645;063A 0645; # (ﲽ; ﲽ; ﲽ; غم; غم; ) ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FCBE;FCBE;FCBE;0641 062C;0641 062C; # (ﲾ; ﲾ; ﲾ; فج; فج; ) ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FCBF;FCBF;FCBF;0641 062D;0641 062D; # (ﲿ; ﲿ; ﲿ; فح; فح; ) ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FCC0;FCC0;FCC0;0641 062E;0641 062E; # (ﳀ; ﳀ; ﳀ; فخ; فخ; ) ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FCC1;FCC1;FCC1;0641 0645;0641 0645; # (ﳁ; ﳁ; ﳁ; فم; فم; ) ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FCC2;FCC2;FCC2;0642 062D;0642 062D; # (ﳂ; ﳂ; ﳂ; قح; قح; ) ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FCC3;FCC3;FCC3;0642 0645;0642 0645; # (ﳃ; ﳃ; ﳃ; قم; قم; ) ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FCC4;FCC4;FCC4;0643 062C;0643 062C; # (ﳄ; ﳄ; ﳄ; كج; كج; ) ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FCC5;FCC5;FCC5;0643 062D;0643 062D; # (ﳅ; ﳅ; ﳅ; كح; كح; ) ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FCC6;FCC6;FCC6;0643 062E;0643 062E; # (ﳆ; ﳆ; ﳆ; كخ; كخ; ) ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FCC7;FCC7;FCC7;0643 0644;0643 0644; # (ﳇ; ﳇ; ﳇ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCC8;FCC8;FCC8;0643 0645;0643 0645; # (ﳈ; ﳈ; ﳈ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCC9;FCC9;FCC9;0644 062C;0644 062C; # (ﳉ; ﳉ; ﳉ; لج; لج; ) ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FCCA;FCCA;FCCA;0644 062D;0644 062D; # (ﳊ; ﳊ; ﳊ; لح; لح; ) ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FCCB;FCCB;FCCB;0644 062E;0644 062E; # (ﳋ; ﳋ; ﳋ; لخ; لخ; ) ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FCCC;FCCC;FCCC;0644 0645;0644 0645; # (ﳌ; ﳌ; ﳌ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCCD;FCCD;FCCD;0644 0647;0644 0647; # (ﳍ; ﳍ; ﳍ; له; له; ) ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FCCE;FCCE;FCCE;0645 062C;0645 062C; # (ﳎ; ﳎ; ﳎ; مج; مج; ) ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FCCF;FCCF;FCCF;0645 062D;0645 062D; # (ﳏ; ﳏ; ﳏ; مح; مح; ) ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FCD0;FCD0;FCD0;0645 062E;0645 062E; # (ﳐ; ﳐ; ﳐ; مخ; مخ; ) ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FCD1;FCD1;FCD1;0645 0645;0645 0645; # (ﳑ; ﳑ; ﳑ; مم; مم; ) ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FCD2;FCD2;FCD2;0646 062C;0646 062C; # (ﳒ; ﳒ; ﳒ; نج; نج; ) ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FCD3;FCD3;FCD3;0646 062D;0646 062D; # (ﳓ; ﳓ; ﳓ; نح; نح; ) ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FCD4;FCD4;FCD4;0646 062E;0646 062E; # (ﳔ; ﳔ; ﳔ; نخ; نخ; ) ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FCD5;FCD5;FCD5;0646 0645;0646 0645; # (ﳕ; ﳕ; ﳕ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCD6;FCD6;FCD6;0646 0647;0646 0647; # (ﳖ; ﳖ; ﳖ; نه; نه; ) ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCD7;FCD7;FCD7;0647 062C;0647 062C; # (ﳗ; ﳗ; ﳗ; هج; هج; ) ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FCD8;FCD8;FCD8;0647 0645;0647 0645; # (ﳘ; ﳘ; ﳘ; هم; هم; ) ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FCD9;FCD9;FCD9;0647 0670;0647 0670; # (ﳙ; ﳙ; ﳙ; ه◌ٰ; ه◌ٰ; ) ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCDA;FCDA;FCDA;064A 062C;064A 062C; # (ﳚ; ﳚ; ﳚ; يج; يج; ) ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FCDB;FCDB;FCDB;064A 062D;064A 062D; # (ﳛ; ﳛ; ﳛ; يح; يح; ) ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FCDC;FCDC;FCDC;064A 062E;064A 062E; # (ﳜ; ﳜ; ﳜ; يخ; يخ; ) ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FCDD;FCDD;FCDD;064A 0645;064A 0645; # (ﳝ; ﳝ; ﳝ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCDE;FCDE;FCDE;064A 0647;064A 0647; # (ﳞ; ﳞ; ﳞ; يه; يه; ) ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCDF;FCDF;FCDF;0626 0645;064A 0654 0645; # (ﳟ; ﳟ; ﳟ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FCE0;FCE0;FCE0;0626 0647;064A 0654 0647; # (ﳠ; ﳠ; ﳠ; ئه; ي◌ٔه; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FCE1;FCE1;FCE1;0628 0645;0628 0645; # (ﳡ; ﳡ; ﳡ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FCE2;FCE2;FCE2;0628 0647;0628 0647; # (ﳢ; ﳢ; ﳢ; به; به; ) ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FCE3;FCE3;FCE3;062A 0645;062A 0645; # (ﳣ; ﳣ; ﳣ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FCE4;FCE4;FCE4;062A 0647;062A 0647; # (ﳤ; ﳤ; ﳤ; ته; ته; ) ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FCE5;FCE5;FCE5;062B 0645;062B 0645; # (ﳥ; ﳥ; ﳥ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FCE6;FCE6;FCE6;062B 0647;062B 0647; # (ﳦ; ﳦ; ﳦ; ثه; ثه; ) ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FCE7;FCE7;FCE7;0633 0645;0633 0645; # (ﳧ; ﳧ; ﳧ; سم; سم; ) ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FCE8;FCE8;FCE8;0633 0647;0633 0647; # (ﳨ; ﳨ; ﳨ; سه; سه; ) ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FCE9;FCE9;FCE9;0634 0645;0634 0645; # (ﳩ; ﳩ; ﳩ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FCEA;FCEA;FCEA;0634 0647;0634 0647; # (ﳪ; ﳪ; ﳪ; شه; شه; ) ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FCEB;FCEB;FCEB;0643 0644;0643 0644; # (ﳫ; ﳫ; ﳫ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FCEC;FCEC;FCEC;0643 0645;0643 0645; # (ﳬ; ﳬ; ﳬ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FCED;FCED;FCED;0644 0645;0644 0645; # (ﳭ; ﳭ; ﳭ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FCEE;FCEE;FCEE;0646 0645;0646 0645; # (ﳮ; ﳮ; ﳮ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FCEF;FCEF;FCEF;0646 0647;0646 0647; # (ﳯ; ﳯ; ﳯ; نه; نه; ) ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FCF0;FCF0;FCF0;064A 0645;064A 0645; # (ﳰ; ﳰ; ﳰ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FCF1;FCF1;FCF1;064A 0647;064A 0647; # (ﳱ; ﳱ; ﳱ; يه; يه; ) ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FCF2;FCF2;FCF2;0640 064E 0651;0640 064E 0651; # (ﳲ; ﳲ; ﳲ; ـ◌َ◌ّ; ـ◌َ◌ّ; ) ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FCF3;FCF3;FCF3;0640 064F 0651;0640 064F 0651; # (ﳳ; ﳳ; ﳳ; ـ◌ُ◌ّ; ـ◌ُ◌ّ; ) ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FCF4;FCF4;FCF4;0640 0650 0651;0640 0650 0651; # (ﳴ; ﳴ; ﳴ; ـ◌ِ◌ّ; ـ◌ِ◌ّ; ) ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FCF5;FCF5;FCF5;0637 0649;0637 0649; # (ﳵ; ﳵ; ﳵ; طى; طى; ) ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FCF6;FCF6;FCF6;0637 064A;0637 064A; # (ﳶ; ﳶ; ﳶ; طي; طي; ) ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+FCF7;FCF7;FCF7;0639 0649;0639 0649; # (ﳷ; ﳷ; ﳷ; عى; عى; ) ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FCF8;FCF8;FCF8;0639 064A;0639 064A; # (ﳸ; ﳸ; ﳸ; عي; عي; ) ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+FCF9;FCF9;FCF9;063A 0649;063A 0649; # (ﳹ; ﳹ; ﳹ; غى; غى; ) ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FCFA;FCFA;FCFA;063A 064A;063A 064A; # (ﳺ; ﳺ; ﳺ; غي; غي; ) ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+FCFB;FCFB;FCFB;0633 0649;0633 0649; # (ﳻ; ﳻ; ﳻ; سى; سى; ) ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFC;FCFC;FCFC;0633 064A;0633 064A; # (ﳼ; ﳼ; ﳼ; سي; سي; ) ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+FCFD;FCFD;FCFD;0634 0649;0634 0649; # (ﳽ; ﳽ; ﳽ; شى; شى; ) ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFE;FCFE;FCFE;0634 064A;0634 064A; # (ﳾ; ﳾ; ﳾ; شي; شي; ) ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+FCFF;FCFF;FCFF;062D 0649;062D 0649; # (ﳿ; ﳿ; ﳿ; حى; حى; ) ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD00;FD00;FD00;062D 064A;062D 064A; # (ﴀ; ﴀ; ﴀ; حي; حي; ) ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+FD01;FD01;FD01;062C 0649;062C 0649; # (ﴁ; ﴁ; ﴁ; جى; جى; ) ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD02;FD02;FD02;062C 064A;062C 064A; # (ﴂ; ﴂ; ﴂ; جي; جي; ) ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+FD03;FD03;FD03;062E 0649;062E 0649; # (ﴃ; ﴃ; ﴃ; خى; خى; ) ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD04;FD04;FD04;062E 064A;062E 064A; # (ﴄ; ﴄ; ﴄ; خي; خي; ) ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+FD05;FD05;FD05;0635 0649;0635 0649; # (ﴅ; ﴅ; ﴅ; صى; صى; ) ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD06;FD06;FD06;0635 064A;0635 064A; # (ﴆ; ﴆ; ﴆ; صي; صي; ) ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+FD07;FD07;FD07;0636 0649;0636 0649; # (ﴇ; ﴇ; ﴇ; ضى; ضى; ) ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD08;FD08;FD08;0636 064A;0636 064A; # (ﴈ; ﴈ; ﴈ; ضي; ضي; ) ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+FD09;FD09;FD09;0634 062C;0634 062C; # (ﴉ; ﴉ; ﴉ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD0A;FD0A;FD0A;0634 062D;0634 062D; # (ﴊ; ﴊ; ﴊ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD0B;FD0B;FD0B;0634 062E;0634 062E; # (ﴋ; ﴋ; ﴋ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD0C;FD0C;FD0C;0634 0645;0634 0645; # (ﴌ; ﴌ; ﴌ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD0D;FD0D;FD0D;0634 0631;0634 0631; # (ﴍ; ﴍ; ﴍ; شر; شر; ) ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD0E;FD0E;FD0E;0633 0631;0633 0631; # (ﴎ; ﴎ; ﴎ; سر; سر; ) ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FD0F;FD0F;FD0F;0635 0631;0635 0631; # (ﴏ; ﴏ; ﴏ; صر; صر; ) ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FD10;FD10;FD10;0636 0631;0636 0631; # (ﴐ; ﴐ; ﴐ; ضر; ضر; ) ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD11;FD11;FD11;0637 0649;0637 0649; # (ﴑ; ﴑ; ﴑ; طى; طى; ) ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FD12;FD12;FD12;0637 064A;0637 064A; # (ﴒ; ﴒ; ﴒ; طي; طي; ) ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FD13;FD13;FD13;0639 0649;0639 0649; # (ﴓ; ﴓ; ﴓ; عى; عى; ) ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FD14;FD14;FD14;0639 064A;0639 064A; # (ﴔ; ﴔ; ﴔ; عي; عي; ) ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FD15;FD15;FD15;063A 0649;063A 0649; # (ﴕ; ﴕ; ﴕ; غى; غى; ) ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FD16;FD16;FD16;063A 064A;063A 064A; # (ﴖ; ﴖ; ﴖ; غي; غي; ) ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FD17;FD17;FD17;0633 0649;0633 0649; # (ﴗ; ﴗ; ﴗ; سى; سى; ) ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FD18;FD18;FD18;0633 064A;0633 064A; # (ﴘ; ﴘ; ﴘ; سي; سي; ) ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FD19;FD19;FD19;0634 0649;0634 0649; # (ﴙ; ﴙ; ﴙ; شى; شى; ) ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FD1A;FD1A;FD1A;0634 064A;0634 064A; # (ﴚ; ﴚ; ﴚ; شي; شي; ) ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FD1B;FD1B;FD1B;062D 0649;062D 0649; # (ﴛ; ﴛ; ﴛ; حى; حى; ) ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FD1C;FD1C;FD1C;062D 064A;062D 064A; # (ﴜ; ﴜ; ﴜ; حي; حي; ) ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD1D;FD1D;FD1D;062C 0649;062C 0649; # (ﴝ; ﴝ; ﴝ; جى; جى; ) ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD1E;FD1E;FD1E;062C 064A;062C 064A; # (ﴞ; ﴞ; ﴞ; جي; جي; ) ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD1F;FD1F;FD1F;062E 0649;062E 0649; # (ﴟ; ﴟ; ﴟ; خى; خى; ) ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD20;FD20;FD20;062E 064A;062E 064A; # (ﴠ; ﴠ; ﴠ; خي; خي; ) ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD21;FD21;FD21;0635 0649;0635 0649; # (ﴡ; ﴡ; ﴡ; صى; صى; ) ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD22;FD22;FD22;0635 064A;0635 064A; # (ﴢ; ﴢ; ﴢ; صي; صي; ) ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD23;FD23;FD23;0636 0649;0636 0649; # (ﴣ; ﴣ; ﴣ; ضى; ضى; ) ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD24;FD24;FD24;0636 064A;0636 064A; # (ﴤ; ﴤ; ﴤ; ضي; ضي; ) ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD25;FD25;FD25;0634 062C;0634 062C; # (ﴥ; ﴥ; ﴥ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD26;FD26;FD26;0634 062D;0634 062D; # (ﴦ; ﴦ; ﴦ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD27;FD27;FD27;0634 062E;0634 062E; # (ﴧ; ﴧ; ﴧ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD28;FD28;FD28;0634 0645;0634 0645; # (ﴨ; ﴨ; ﴨ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD29;FD29;FD29;0634 0631;0634 0631; # (ﴩ; ﴩ; ﴩ; شر; شر; ) ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD2A;FD2A;FD2A;0633 0631;0633 0631; # (ﴪ; ﴪ; ﴪ; سر; سر; ) ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD2B;FD2B;FD2B;0635 0631;0635 0631; # (ﴫ; ﴫ; ﴫ; صر; صر; ) ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD2C;FD2C;FD2C;0636 0631;0636 0631; # (ﴬ; ﴬ; ﴬ; ضر; ضر; ) ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD2D;FD2D;FD2D;0634 062C;0634 062C; # (ﴭ; ﴭ; ﴭ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD2E;FD2E;FD2E;0634 062D;0634 062D; # (ﴮ; ﴮ; ﴮ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD2F;FD2F;FD2F;0634 062E;0634 062E; # (ﴯ; ﴯ; ﴯ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD30;FD30;FD30;0634 0645;0634 0645; # (ﴰ; ﴰ; ﴰ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FD31;FD31;FD31;0633 0647;0633 0647; # (ﴱ; ﴱ; ﴱ; سه; سه; ) ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FD32;FD32;FD32;0634 0647;0634 0647; # (ﴲ; ﴲ; ﴲ; شه; شه; ) ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FD33;FD33;FD33;0637 0645;0637 0645; # (ﴳ; ﴳ; ﴳ; طم; طم; ) ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD34;FD34;FD34;0633 062C;0633 062C; # (ﴴ; ﴴ; ﴴ; سج; سج; ) ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FD35;FD35;FD35;0633 062D;0633 062D; # (ﴵ; ﴵ; ﴵ; سح; سح; ) ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FD36;FD36;FD36;0633 062E;0633 062E; # (ﴶ; ﴶ; ﴶ; سخ; سخ; ) ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FD37;FD37;FD37;0634 062C;0634 062C; # (ﴷ; ﴷ; ﴷ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD38;FD38;FD38;0634 062D;0634 062D; # (ﴸ; ﴸ; ﴸ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD39;FD39;FD39;0634 062E;0634 062E; # (ﴹ; ﴹ; ﴹ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD3A;FD3A;FD3A;0637 0645;0637 0645; # (ﴺ; ﴺ; ﴺ; طم; طم; ) ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FD3B;FD3B;FD3B;0638 0645;0638 0645; # (ﴻ; ﴻ; ﴻ; ظم; ظم; ) ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FD3C;FD3C;FD3C;0627 064B;0627 064B; # (ﴼ; ﴼ; ﴼ; ا◌ً; ا◌ً; ) ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD3D;FD3D;FD3D;0627 064B;0627 064B; # (ﴽ; ﴽ; ﴽ; ا◌ً; ا◌ً; ) ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50;FD50;FD50;062A 062C 0645;062A 062C 0645; # (ﵐ; ﵐ; ﵐ; تجم; تجم; ) ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD51;FD51;FD51;062A 062D 062C;062A 062D 062C; # (ﵑ; ﵑ; ﵑ; تحج; تحج; ) ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD52;FD52;FD52;062A 062D 062C;062A 062D 062C; # (ﵒ; ﵒ; ﵒ; تحج; تحج; ) ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD53;FD53;FD53;062A 062D 0645;062A 062D 0645; # (ﵓ; ﵓ; ﵓ; تحم; تحم; ) ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FD54;FD54;FD54;062A 062E 0645;062A 062E 0645; # (ﵔ; ﵔ; ﵔ; تخم; تخم; ) ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FD55;FD55;FD55;062A 0645 062C;062A 0645 062C; # (ﵕ; ﵕ; ﵕ; تمج; تمج; ) ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56;FD56;FD56;062A 0645 062D;062A 0645 062D; # (ﵖ; ﵖ; ﵖ; تمح; تمح; ) ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57;FD57;FD57;062A 0645 062E;062A 0645 062E; # (ﵗ; ﵗ; ﵗ; تمخ; تمخ; ) ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD58;FD58;FD58;062C 0645 062D;062C 0645 062D; # (ﵘ; ﵘ; ﵘ; جمح; جمح; ) ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FD59;FD59;FD59;062C 0645 062D;062C 0645 062D; # (ﵙ; ﵙ; ﵙ; جمح; جمح; ) ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5A;FD5A;FD5A;062D 0645 064A;062D 0645 064A; # (ﵚ; ﵚ; ﵚ; حمي; حمي; ) ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD5B;FD5B;FD5B;062D 0645 0649;062D 0645 0649; # (ﵛ; ﵛ; ﵛ; حمى; حمى; ) ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5C;FD5C;FD5C;0633 062D 062C;0633 062D 062C; # (ﵜ; ﵜ; ﵜ; سحج; سحج; ) ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FD5D;FD5D;FD5D;0633 062C 062D;0633 062C 062D; # (ﵝ; ﵝ; ﵝ; سجح; سجح; ) ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E;FD5E;FD5E;0633 062C 0649;0633 062C 0649; # (ﵞ; ﵞ; ﵞ; سجى; سجى; ) ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD5F;FD5F;FD5F;0633 0645 062D;0633 0645 062D; # (ﵟ; ﵟ; ﵟ; سمح; سمح; ) ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD60;FD60;FD60;0633 0645 062D;0633 0645 062D; # (ﵠ; ﵠ; ﵠ; سمح; سمح; ) ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD61;FD61;FD61;0633 0645 062C;0633 0645 062C; # (ﵡ; ﵡ; ﵡ; سمج; سمج; ) ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD62;FD62;FD62;0633 0645 0645;0633 0645 0645; # (ﵢ; ﵢ; ﵢ; سمم; سمم; ) ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD63;FD63;FD63;0633 0645 0645;0633 0645 0645; # (ﵣ; ﵣ; ﵣ; سمم; سمم; ) ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD64;FD64;FD64;0635 062D 062D;0635 062D 062D; # (ﵤ; ﵤ; ﵤ; صحح; صحح; ) ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FD65;FD65;FD65;0635 062D 062D;0635 062D 062D; # (ﵥ; ﵥ; ﵥ; صحح; صحح; ) ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD66;FD66;FD66;0635 0645 0645;0635 0645 0645; # (ﵦ; ﵦ; ﵦ; صمم; صمم; ) ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD67;FD67;FD67;0634 062D 0645;0634 062D 0645; # (ﵧ; ﵧ; ﵧ; شحم; شحم; ) ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FD68;FD68;FD68;0634 062D 0645;0634 062D 0645; # (ﵨ; ﵨ; ﵨ; شحم; شحم; ) ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD69;FD69;FD69;0634 062C 064A;0634 062C 064A; # (ﵩ; ﵩ; ﵩ; شجي; شجي; ) ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD6A;FD6A;FD6A;0634 0645 062E;0634 0645 062E; # (ﵪ; ﵪ; ﵪ; شمخ; شمخ; ) ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6B;FD6B;FD6B;0634 0645 062E;0634 0645 062E; # (ﵫ; ﵫ; ﵫ; شمخ; شمخ; ) ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6C;FD6C;FD6C;0634 0645 0645;0634 0645 0645; # (ﵬ; ﵬ; ﵬ; شمم; شمم; ) ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD6D;FD6D;FD6D;0634 0645 0645;0634 0645 0645; # (ﵭ; ﵭ; ﵭ; شمم; شمم; ) ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6E;FD6E;FD6E;0636 062D 0649;0636 062D 0649; # (ﵮ; ﵮ; ﵮ; ضحى; ضحى; ) ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD6F;FD6F;FD6F;0636 062E 0645;0636 062E 0645; # (ﵯ; ﵯ; ﵯ; ضخم; ضخم; ) ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD70;FD70;FD70;0636 062E 0645;0636 062E 0645; # (ﵰ; ﵰ; ﵰ; ضخم; ضخم; ) ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD71;FD71;FD71;0637 0645 062D;0637 0645 062D; # (ﵱ; ﵱ; ﵱ; طمح; طمح; ) ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD72;FD72;FD72;0637 0645 062D;0637 0645 062D; # (ﵲ; ﵲ; ﵲ; طمح; طمح; ) ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD73;FD73;FD73;0637 0645 0645;0637 0645 0645; # (ﵳ; ﵳ; ﵳ; طمم; طمم; ) ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74;FD74;FD74;0637 0645 064A;0637 0645 064A; # (ﵴ; ﵴ; ﵴ; طمي; طمي; ) ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD75;FD75;FD75;0639 062C 0645;0639 062C 0645; # (ﵵ; ﵵ; ﵵ; عجم; عجم; ) ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FD76;FD76;FD76;0639 0645 0645;0639 0645 0645; # (ﵶ; ﵶ; ﵶ; عمم; عمم; ) ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD77;FD77;FD77;0639 0645 0645;0639 0645 0645; # (ﵷ; ﵷ; ﵷ; عمم; عمم; ) ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD78;FD78;FD78;0639 0645 0649;0639 0645 0649; # (ﵸ; ﵸ; ﵸ; عمى; عمى; ) ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD79;FD79;FD79;063A 0645 0645;063A 0645 0645; # (ﵹ; ﵹ; ﵹ; غمم; غمم; ) ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7A;FD7A;FD7A;063A 0645 064A;063A 0645 064A; # (ﵺ; ﵺ; ﵺ; غمي; غمي; ) ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD7B;FD7B;FD7B;063A 0645 0649;063A 0645 0649; # (ﵻ; ﵻ; ﵻ; غمى; غمى; ) ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7C;FD7C;FD7C;0641 062E 0645;0641 062E 0645; # (ﵼ; ﵼ; ﵼ; فخم; فخم; ) ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FD7D;FD7D;FD7D;0641 062E 0645;0641 062E 0645; # (ﵽ; ﵽ; ﵽ; فخم; فخم; ) ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7E;FD7E;FD7E;0642 0645 062D;0642 0645 062D; # (ﵾ; ﵾ; ﵾ; قمح; قمح; ) ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F;FD7F;FD7F;0642 0645 0645;0642 0645 0645; # (ﵿ; ﵿ; ﵿ; قمم; قمم; ) ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FD80;FD80;FD80;0644 062D 0645;0644 062D 0645; # (ﶀ; ﶀ; ﶀ; لحم; لحم; ) ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD81;FD81;FD81;0644 062D 064A;0644 062D 064A; # (ﶁ; ﶁ; ﶁ; لحي; لحي; ) ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FD82;FD82;FD82;0644 062D 0649;0644 062D 0649; # (ﶂ; ﶂ; ﶂ; لحى; لحى; ) ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD83;FD83;FD83;0644 062C 062C;0644 062C 062C; # (ﶃ; ﶃ; ﶃ; لجج; لجج; ) ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD84;FD84;FD84;0644 062C 062C;0644 062C 062C; # (ﶄ; ﶄ; ﶄ; لجج; لجج; ) ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FD85;FD85;FD85;0644 062E 0645;0644 062E 0645; # (ﶅ; ﶅ; ﶅ; لخم; لخم; ) ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FD86;FD86;FD86;0644 062E 0645;0644 062E 0645; # (ﶆ; ﶆ; ﶆ; لخم; لخم; ) ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD87;FD87;FD87;0644 0645 062D;0644 0645 062D; # (ﶇ; ﶇ; ﶇ; لمح; لمح; ) ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FD88;FD88;FD88;0644 0645 062D;0644 0645 062D; # (ﶈ; ﶈ; ﶈ; لمح; لمح; ) ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD89;FD89;FD89;0645 062D 062C;0645 062D 062C; # (ﶉ; ﶉ; ﶉ; محج; محج; ) ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A;FD8A;FD8A;0645 062D 0645;0645 062D 0645; # (ﶊ; ﶊ; ﶊ; محم; محم; ) ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8B;FD8B;FD8B;0645 062D 064A;0645 062D 064A; # (ﶋ; ﶋ; ﶋ; محي; محي; ) ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD8C;FD8C;FD8C;0645 062C 062D;0645 062C 062D; # (ﶌ; ﶌ; ﶌ; مجح; مجح; ) ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD8D;FD8D;FD8D;0645 062C 0645;0645 062C 0645; # (ﶍ; ﶍ; ﶍ; مجم; مجم; ) ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FD8E;FD8E;FD8E;0645 062E 062C;0645 062E 062C; # (ﶎ; ﶎ; ﶎ; مخج; مخج; ) ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F;FD8F;FD8F;0645 062E 0645;0645 062E 0645; # (ﶏ; ﶏ; ﶏ; مخم; مخم; ) ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92;FD92;FD92;0645 062C 062E;0645 062C 062E; # (ﶒ; ﶒ; ﶒ; مجخ; مجخ; ) ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD93;FD93;FD93;0647 0645 062C;0647 0645 062C; # (ﶓ; ﶓ; ﶓ; همج; همج; ) ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94;FD94;FD94;0647 0645 0645;0647 0645 0645; # (ﶔ; ﶔ; ﶔ; همم; همم; ) ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FD95;FD95;FD95;0646 062D 0645;0646 062D 0645; # (ﶕ; ﶕ; ﶕ; نحم; نحم; ) ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96;FD96;FD96;0646 062D 0649;0646 062D 0649; # (ﶖ; ﶖ; ﶖ; نحى; نحى; ) ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD97;FD97;FD97;0646 062C 0645;0646 062C 0645; # (ﶗ; ﶗ; ﶗ; نجم; نجم; ) ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD98;FD98;FD98;0646 062C 0645;0646 062C 0645; # (ﶘ; ﶘ; ﶘ; نجم; نجم; ) ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD99;FD99;FD99;0646 062C 0649;0646 062C 0649; # (ﶙ; ﶙ; ﶙ; نجى; نجى; ) ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9A;FD9A;FD9A;0646 0645 064A;0646 0645 064A; # (ﶚ; ﶚ; ﶚ; نمي; نمي; ) ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FD9B;FD9B;FD9B;0646 0645 0649;0646 0645 0649; # (ﶛ; ﶛ; ﶛ; نمى; نمى; ) ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9C;FD9C;FD9C;064A 0645 0645;064A 0645 0645; # (ﶜ; ﶜ; ﶜ; يمم; يمم; ) ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FD9D;FD9D;FD9D;064A 0645 0645;064A 0645 0645; # (ﶝ; ﶝ; ﶝ; يمم; يمم; ) ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9E;FD9E;FD9E;0628 062E 064A;0628 062E 064A; # (ﶞ; ﶞ; ﶞ; بخي; بخي; ) ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FD9F;FD9F;FD9F;062A 062C 064A;062A 062C 064A; # (ﶟ; ﶟ; ﶟ; تجي; تجي; ) ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FDA0;FDA0;FDA0;062A 062C 0649;062A 062C 0649; # (ﶠ; ﶠ; ﶠ; تجى; تجى; ) ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDA1;FDA1;FDA1;062A 062E 064A;062A 062E 064A; # (ﶡ; ﶡ; ﶡ; تخي; تخي; ) ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FDA2;FDA2;FDA2;062A 062E 0649;062A 062E 0649; # (ﶢ; ﶢ; ﶢ; تخى; تخى; ) ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA3;FDA3;FDA3;062A 0645 064A;062A 0645 064A; # (ﶣ; ﶣ; ﶣ; تمي; تمي; ) ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FDA4;FDA4;FDA4;062A 0645 0649;062A 0645 0649; # (ﶤ; ﶤ; ﶤ; تمى; تمى; ) ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5;FDA5;FDA5;062C 0645 064A;062C 0645 064A; # (ﶥ; ﶥ; ﶥ; جمي; جمي; ) ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FDA6;FDA6;FDA6;062C 062D 0649;062C 062D 0649; # (ﶦ; ﶦ; ﶦ; جحى; جحى; ) ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDA7;FDA7;FDA7;062C 0645 0649;062C 0645 0649; # (ﶧ; ﶧ; ﶧ; جمى; جمى; ) ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA8;FDA8;FDA8;0633 062E 0649;0633 062E 0649; # (ﶨ; ﶨ; ﶨ; سخى; سخى; ) ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA9;FDA9;FDA9;0635 062D 064A;0635 062D 064A; # (ﶩ; ﶩ; ﶩ; صحي; صحي; ) ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FDAA;FDAA;FDAA;0634 062D 064A;0634 062D 064A; # (ﶪ; ﶪ; ﶪ; شحي; شحي; ) ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FDAB;FDAB;FDAB;0636 062D 064A;0636 062D 064A; # (ﶫ; ﶫ; ﶫ; ضحي; ضحي; ) ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FDAC;FDAC;FDAC;0644 062C 064A;0644 062C 064A; # (ﶬ; ﶬ; ﶬ; لجي; لجي; ) ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FDAD;FDAD;FDAD;0644 0645 064A;0644 0645 064A; # (ﶭ; ﶭ; ﶭ; لمي; لمي; ) ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FDAE;FDAE;FDAE;064A 062D 064A;064A 062D 064A; # (ﶮ; ﶮ; ﶮ; يحي; يحي; ) ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FDAF;FDAF;FDAF;064A 062C 064A;064A 062C 064A; # (ﶯ; ﶯ; ﶯ; يجي; يجي; ) ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FDB0;FDB0;FDB0;064A 0645 064A;064A 0645 064A; # (ﶰ; ﶰ; ﶰ; يمي; يمي; ) ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FDB1;FDB1;FDB1;0645 0645 064A;0645 0645 064A; # (ﶱ; ﶱ; ﶱ; ممي; ممي; ) ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FDB2;FDB2;FDB2;0642 0645 064A;0642 0645 064A; # (ﶲ; ﶲ; ﶲ; قمي; قمي; ) ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FDB3;FDB3;FDB3;0646 062D 064A;0646 062D 064A; # (ﶳ; ﶳ; ﶳ; نحي; نحي; ) ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB4;FDB4;FDB4;0642 0645 062D;0642 0645 062D; # (ﶴ; ﶴ; ﶴ; قمح; قمح; ) ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FDB5;FDB5;FDB5;0644 062D 0645;0644 062D 0645; # (ﶵ; ﶵ; ﶵ; لحم; لحم; ) ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB6;FDB6;FDB6;0639 0645 064A;0639 0645 064A; # (ﶶ; ﶶ; ﶶ; عمي; عمي; ) ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FDB7;FDB7;FDB7;0643 0645 064A;0643 0645 064A; # (ﶷ; ﶷ; ﶷ; كمي; كمي; ) ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB8;FDB8;FDB8;0646 062C 062D;0646 062C 062D; # (ﶸ; ﶸ; ﶸ; نجح; نجح; ) ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDB9;FDB9;FDB9;0645 062E 064A;0645 062E 064A; # (ﶹ; ﶹ; ﶹ; مخي; مخي; ) ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBA;FDBA;FDBA;0644 062C 0645;0644 062C 0645; # (ﶺ; ﶺ; ﶺ; لجم; لجم; ) ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBB;FDBB;FDBB;0643 0645 0645;0643 0645 0645; # (ﶻ; ﶻ; ﶻ; كمم; كمم; ) ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDBC;FDBC;FDBC;0644 062C 0645;0644 062C 0645; # (ﶼ; ﶼ; ﶼ; لجم; لجم; ) ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDBD;FDBD;FDBD;0646 062C 062D;0646 062C 062D; # (ﶽ; ﶽ; ﶽ; نجح; نجح; ) ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FDBE;FDBE;FDBE;062C 062D 064A;062C 062D 064A; # (ﶾ; ﶾ; ﶾ; جحي; جحي; ) ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDBF;FDBF;FDBF;062D 062C 064A;062D 062C 064A; # (ﶿ; ﶿ; ﶿ; حجي; حجي; ) ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FDC0;FDC0;FDC0;0645 062C 064A;0645 062C 064A; # (ﷀ; ﷀ; ﷀ; مجي; مجي; ) ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FDC1;FDC1;FDC1;0641 0645 064A;0641 0645 064A; # (ﷁ; ﷁ; ﷁ; فمي; فمي; ) ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FDC2;FDC2;FDC2;0628 062D 064A;0628 062D 064A; # (ﷂ; ﷂ; ﷂ; بحي; بحي; ) ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC3;FDC3;FDC3;0643 0645 0645;0643 0645 0645; # (ﷃ; ﷃ; ﷃ; كمم; كمم; ) ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDC4;FDC4;FDC4;0639 062C 0645;0639 062C 0645; # (ﷄ; ﷄ; ﷄ; عجم; عجم; ) ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FDC5;FDC5;FDC5;0635 0645 0645;0635 0645 0645; # (ﷅ; ﷅ; ﷅ; صمم; صمم; ) ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FDC6;FDC6;FDC6;0633 062E 064A;0633 062E 064A; # (ﷆ; ﷆ; ﷆ; سخي; سخي; ) ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FDC7;FDC7;FDC7;0646 062C 064A;0646 062C 064A; # (ﷇ; ﷇ; ﷇ; نجي; نجي; ) ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0;FDF0;FDF0;0635 0644 06D2;0635 0644 06D2; # (ﷰ; ﷰ; ﷰ; صلے; صلے; ) ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF1;FDF1;FDF1;0642 0644 06D2;0642 0644 06D2; # (ﷱ; ﷱ; ﷱ; قلے; قلے; ) ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF2;FDF2;FDF2;0627 0644 0644 0647;0627 0644 0644 0647; # (ﷲ; ﷲ; ﷲ; الله; الله; ) ARABIC LIGATURE ALLAH ISOLATED FORM
+FDF3;FDF3;FDF3;0627 0643 0628 0631;0627 0643 0628 0631; # (ﷳ; ﷳ; ﷳ; اكبر; اكبر; ) ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF4;FDF4;FDF4;0645 062D 0645 062F;0645 062D 0645 062F; # (ﷴ; ﷴ; ﷴ; محمد; محمد; ) ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FDF5;FDF5;FDF5;0635 0644 0639 0645;0635 0644 0639 0645; # (ﷵ; ﷵ; ﷵ; صلعم; صلعم; ) ARABIC LIGATURE SALAM ISOLATED FORM
+FDF6;FDF6;FDF6;0631 0633 0648 0644;0631 0633 0648 0644; # (ﷶ; ﷶ; ﷶ; رسول; رسول; ) ARABIC LIGATURE RASOUL ISOLATED FORM
+FDF7;FDF7;FDF7;0639 0644 064A 0647;0639 0644 064A 0647; # (ﷷ; ﷷ; ﷷ; عليه; عليه; ) ARABIC LIGATURE ALAYHE ISOLATED FORM
+FDF8;FDF8;FDF8;0648 0633 0644 0645;0648 0633 0644 0645; # (ﷸ; ﷸ; ﷸ; وسلم; وسلم; ) ARABIC LIGATURE WASALLAM ISOLATED FORM
+FDF9;FDF9;FDF9;0635 0644 0649;0635 0644 0649; # (ﷹ; ﷹ; ﷹ; صلى; صلى; ) ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA;FDFA;FDFA;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645; # (ﷺ; ﷺ; ﷺ; صلى الله عليه وسلم; صلى الله عليه وسلم; ) ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDFB;FDFB;FDFB;062C 0644 0020 062C 0644 0627 0644 0647;062C 0644 0020 062C 0644 0627 0644 0647; # (ﷻ; ﷻ; ﷻ; جل جلاله; جل جلاله; ) ARABIC LIGATURE JALLAJALALOUHOU
+FE30;FE30;FE30;002E 002E;002E 002E; # (︰; ︰; ︰; ..; ..; ) PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31;FE31;FE31;2014;2014; # (︱; ︱; ︱; —; —; ) PRESENTATION FORM FOR VERTICAL EM DASH
+FE32;FE32;FE32;2013;2013; # (︲; ︲; ︲; –; –; ) PRESENTATION FORM FOR VERTICAL EN DASH
+FE33;FE33;FE33;005F;005F; # (︳; ︳; ︳; _; _; ) PRESENTATION FORM FOR VERTICAL LOW LINE
+FE34;FE34;FE34;005F;005F; # (︴; ︴; ︴; _; _; ) PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35;FE35;FE35;0028;0028; # (︵; ︵; ︵; (; (; ) PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36;FE36;FE36;0029;0029; # (︶; ︶; ︶; ); ); ) PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37;FE37;FE37;007B;007B; # (︷; ︷; ︷; {; {; ) PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38;FE38;FE38;007D;007D; # (︸; ︸; ︸; }; }; ) PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39;FE39;FE39;3014;3014; # (︹; ︹; ︹; 〔; 〔; ) PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A;FE3A;FE3A;3015;3015; # (︺; ︺; ︺; 〕; 〕; ) PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B;FE3B;FE3B;3010;3010; # (︻; ︻; ︻; 【; 【; ) PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C;FE3C;FE3C;3011;3011; # (︼; ︼; ︼; 】; 】; ) PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D;FE3D;FE3D;300A;300A; # (︽; ︽; ︽; 《; 《; ) PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E;FE3E;FE3E;300B;300B; # (︾; ︾; ︾; 》; 》; ) PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F;FE3F;FE3F;3008;3008; # (︿; ︿; ︿; 〈; 〈; ) PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40;FE40;FE40;3009;3009; # (﹀; ﹀; ﹀; 〉; 〉; ) PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41;FE41;FE41;300C;300C; # (﹁; ﹁; ﹁; 「; 「; ) PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42;FE42;FE42;300D;300D; # (﹂; ﹂; ﹂; 」; 」; ) PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43;FE43;FE43;300E;300E; # (﹃; ﹃; ﹃; 『; 『; ) PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44;FE44;FE44;300F;300F; # (﹄; ﹄; ﹄; 』; 』; ) PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE49;FE49;FE49;0020 0305;0020 0305; # (﹉; ﹉; ﹉;  ◌̅;  ◌̅; ) DASHED OVERLINE
+FE4A;FE4A;FE4A;0020 0305;0020 0305; # (﹊; ﹊; ﹊;  ◌̅;  ◌̅; ) CENTRELINE OVERLINE
+FE4B;FE4B;FE4B;0020 0305;0020 0305; # (﹋; ﹋; ﹋;  ◌̅;  ◌̅; ) WAVY OVERLINE
+FE4C;FE4C;FE4C;0020 0305;0020 0305; # (﹌; ﹌; ﹌;  ◌̅;  ◌̅; ) DOUBLE WAVY OVERLINE
+FE4D;FE4D;FE4D;005F;005F; # (﹍; ﹍; ﹍; _; _; ) DASHED LOW LINE
+FE4E;FE4E;FE4E;005F;005F; # (﹎; ﹎; ﹎; _; _; ) CENTRELINE LOW LINE
+FE4F;FE4F;FE4F;005F;005F; # (﹏; ﹏; ﹏; _; _; ) WAVY LOW LINE
+FE50;FE50;FE50;002C;002C; # (﹐; ﹐; ﹐; ,; ,; ) SMALL COMMA
+FE51;FE51;FE51;3001;3001; # (﹑; ﹑; ﹑; 、; 、; ) SMALL IDEOGRAPHIC COMMA
+FE52;FE52;FE52;002E;002E; # (﹒; ﹒; ﹒; .; .; ) SMALL FULL STOP
+FE54;FE54;FE54;003B;003B; # (﹔; ﹔; ﹔; ;; ;; ) SMALL SEMICOLON
+FE55;FE55;FE55;003A;003A; # (﹕; ﹕; ﹕; :; :; ) SMALL COLON
+FE56;FE56;FE56;003F;003F; # (﹖; ﹖; ﹖; ?; ?; ) SMALL QUESTION MARK
+FE57;FE57;FE57;0021;0021; # (﹗; ﹗; ﹗; !; !; ) SMALL EXCLAMATION MARK
+FE58;FE58;FE58;2014;2014; # (﹘; ﹘; ﹘; —; —; ) SMALL EM DASH
+FE59;FE59;FE59;0028;0028; # (﹙; ﹙; ﹙; (; (; ) SMALL LEFT PARENTHESIS
+FE5A;FE5A;FE5A;0029;0029; # (﹚; ﹚; ﹚; ); ); ) SMALL RIGHT PARENTHESIS
+FE5B;FE5B;FE5B;007B;007B; # (﹛; ﹛; ﹛; {; {; ) SMALL LEFT CURLY BRACKET
+FE5C;FE5C;FE5C;007D;007D; # (﹜; ﹜; ﹜; }; }; ) SMALL RIGHT CURLY BRACKET
+FE5D;FE5D;FE5D;3014;3014; # (﹝; ﹝; ﹝; 〔; 〔; ) SMALL LEFT TORTOISE SHELL BRACKET
+FE5E;FE5E;FE5E;3015;3015; # (﹞; ﹞; ﹞; 〕; 〕; ) SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F;FE5F;FE5F;0023;0023; # (﹟; ﹟; ﹟; #; #; ) SMALL NUMBER SIGN
+FE60;FE60;FE60;0026;0026; # (﹠; ﹠; ﹠; &; &; ) SMALL AMPERSAND
+FE61;FE61;FE61;002A;002A; # (﹡; ﹡; ﹡; *; *; ) SMALL ASTERISK
+FE62;FE62;FE62;002B;002B; # (﹢; ﹢; ﹢; +; +; ) SMALL PLUS SIGN
+FE63;FE63;FE63;002D;002D; # (﹣; ﹣; ﹣; -; -; ) SMALL HYPHEN-MINUS
+FE64;FE64;FE64;003C;003C; # (﹤; ﹤; ﹤; <; <; ) SMALL LESS-THAN SIGN
+FE65;FE65;FE65;003E;003E; # (﹥; ﹥; ﹥; >; >; ) SMALL GREATER-THAN SIGN
+FE66;FE66;FE66;003D;003D; # (﹦; ﹦; ﹦; =; =; ) SMALL EQUALS SIGN
+FE68;FE68;FE68;005C;005C; # (﹨; ﹨; ﹨; \; \; ) SMALL REVERSE SOLIDUS
+FE69;FE69;FE69;0024;0024; # (﹩; ﹩; ﹩; $; $; ) SMALL DOLLAR SIGN
+FE6A;FE6A;FE6A;0025;0025; # (﹪; ﹪; ﹪; %; %; ) SMALL PERCENT SIGN
+FE6B;FE6B;FE6B;0040;0040; # (﹫; ﹫; ﹫; @; @; ) SMALL COMMERCIAL AT
+FE70;FE70;FE70;0020 064B;0020 064B; # (ﹰ; ﹰ; ﹰ;  ◌ً;  ◌ً; ) ARABIC FATHATAN ISOLATED FORM
+FE71;FE71;FE71;0640 064B;0640 064B; # (ﹱ; ﹱ; ﹱ; ـ◌ً; ـ◌ً; ) ARABIC TATWEEL WITH FATHATAN ABOVE
+FE72;FE72;FE72;0020 064C;0020 064C; # (ﹲ; ﹲ; ﹲ;  ◌ٌ;  ◌ٌ; ) ARABIC DAMMATAN ISOLATED FORM
+FE74;FE74;FE74;0020 064D;0020 064D; # (ﹴ; ﹴ; ﹴ;  ◌ٍ;  ◌ٍ; ) ARABIC KASRATAN ISOLATED FORM
+FE76;FE76;FE76;0020 064E;0020 064E; # (ﹶ; ﹶ; ﹶ;  ◌َ;  ◌َ; ) ARABIC FATHA ISOLATED FORM
+FE77;FE77;FE77;0640 064E;0640 064E; # (ﹷ; ﹷ; ﹷ; ـ◌َ; ـ◌َ; ) ARABIC FATHA MEDIAL FORM
+FE78;FE78;FE78;0020 064F;0020 064F; # (ﹸ; ﹸ; ﹸ;  ◌ُ;  ◌ُ; ) ARABIC DAMMA ISOLATED FORM
+FE79;FE79;FE79;0640 064F;0640 064F; # (ﹹ; ﹹ; ﹹ; ـ◌ُ; ـ◌ُ; ) ARABIC DAMMA MEDIAL FORM
+FE7A;FE7A;FE7A;0020 0650;0020 0650; # (ﹺ; ﹺ; ﹺ;  ◌ِ;  ◌ِ; ) ARABIC KASRA ISOLATED FORM
+FE7B;FE7B;FE7B;0640 0650;0640 0650; # (ﹻ; ﹻ; ﹻ; ـ◌ِ; ـ◌ِ; ) ARABIC KASRA MEDIAL FORM
+FE7C;FE7C;FE7C;0020 0651;0020 0651; # (ﹼ; ﹼ; ﹼ;  ◌ّ;  ◌ّ; ) ARABIC SHADDA ISOLATED FORM
+FE7D;FE7D;FE7D;0640 0651;0640 0651; # (ﹽ; ﹽ; ﹽ; ـ◌ّ; ـ◌ّ; ) ARABIC SHADDA MEDIAL FORM
+FE7E;FE7E;FE7E;0020 0652;0020 0652; # (ﹾ; ﹾ; ﹾ;  ◌ْ;  ◌ْ; ) ARABIC SUKUN ISOLATED FORM
+FE7F;FE7F;FE7F;0640 0652;0640 0652; # (ﹿ; ﹿ; ﹿ; ـ◌ْ; ـ◌ْ; ) ARABIC SUKUN MEDIAL FORM
+FE80;FE80;FE80;0621;0621; # (ﺀ; ﺀ; ﺀ; ء; ء; ) ARABIC LETTER HAMZA ISOLATED FORM
+FE81;FE81;FE81;0622;0627 0653; # (ﺁ; ﺁ; ﺁ; آ; ا◌ٓ; ) ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+FE82;FE82;FE82;0622;0627 0653; # (ﺂ; ﺂ; ﺂ; آ; ا◌ٓ; ) ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE83;FE83;FE83;0623;0627 0654; # (ﺃ; ﺃ; ﺃ; أ; ا◌ٔ; ) ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+FE84;FE84;FE84;0623;0627 0654; # (ﺄ; ﺄ; ﺄ; أ; ا◌ٔ; ) ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE85;FE85;FE85;0624;0648 0654; # (ﺅ; ﺅ; ﺅ; ؤ; و◌ٔ; ) ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+FE86;FE86;FE86;0624;0648 0654; # (ﺆ; ﺆ; ﺆ; ؤ; و◌ٔ; ) ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE87;FE87;FE87;0625;0627 0655; # (ﺇ; ﺇ; ﺇ; إ; ا◌ٕ; ) ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+FE88;FE88;FE88;0625;0627 0655; # (ﺈ; ﺈ; ﺈ; إ; ا◌ٕ; ) ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE89;FE89;FE89;0626;064A 0654; # (ﺉ; ﺉ; ﺉ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FE8A;FE8A;FE8A;0626;064A 0654; # (ﺊ; ﺊ; ﺊ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE8B;FE8B;FE8B;0626;064A 0654; # (ﺋ; ﺋ; ﺋ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE8C;FE8C;FE8C;0626;064A 0654; # (ﺌ; ﺌ; ﺌ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8D;FE8D;FE8D;0627;0627; # (ﺍ; ﺍ; ﺍ; ا; ا; ) ARABIC LETTER ALEF ISOLATED FORM
+FE8E;FE8E;FE8E;0627;0627; # (ﺎ; ﺎ; ﺎ; ا; ا; ) ARABIC LETTER ALEF FINAL FORM
+FE8F;FE8F;FE8F;0628;0628; # (ﺏ; ﺏ; ﺏ; ب; ب; ) ARABIC LETTER BEH ISOLATED FORM
+FE90;FE90;FE90;0628;0628; # (ﺐ; ﺐ; ﺐ; ب; ب; ) ARABIC LETTER BEH FINAL FORM
+FE91;FE91;FE91;0628;0628; # (ﺑ; ﺑ; ﺑ; ب; ب; ) ARABIC LETTER BEH INITIAL FORM
+FE92;FE92;FE92;0628;0628; # (ﺒ; ﺒ; ﺒ; ب; ب; ) ARABIC LETTER BEH MEDIAL FORM
+FE93;FE93;FE93;0629;0629; # (ﺓ; ﺓ; ﺓ; ة; ة; ) ARABIC LETTER TEH MARBUTA ISOLATED FORM
+FE94;FE94;FE94;0629;0629; # (ﺔ; ﺔ; ﺔ; ة; ة; ) ARABIC LETTER TEH MARBUTA FINAL FORM
+FE95;FE95;FE95;062A;062A; # (ﺕ; ﺕ; ﺕ; ت; ت; ) ARABIC LETTER TEH ISOLATED FORM
+FE96;FE96;FE96;062A;062A; # (ﺖ; ﺖ; ﺖ; ت; ت; ) ARABIC LETTER TEH FINAL FORM
+FE97;FE97;FE97;062A;062A; # (ﺗ; ﺗ; ﺗ; ت; ت; ) ARABIC LETTER TEH INITIAL FORM
+FE98;FE98;FE98;062A;062A; # (ﺘ; ﺘ; ﺘ; ت; ت; ) ARABIC LETTER TEH MEDIAL FORM
+FE99;FE99;FE99;062B;062B; # (ﺙ; ﺙ; ﺙ; ث; ث; ) ARABIC LETTER THEH ISOLATED FORM
+FE9A;FE9A;FE9A;062B;062B; # (ﺚ; ﺚ; ﺚ; ث; ث; ) ARABIC LETTER THEH FINAL FORM
+FE9B;FE9B;FE9B;062B;062B; # (ﺛ; ﺛ; ﺛ; ث; ث; ) ARABIC LETTER THEH INITIAL FORM
+FE9C;FE9C;FE9C;062B;062B; # (ﺜ; ﺜ; ﺜ; ث; ث; ) ARABIC LETTER THEH MEDIAL FORM
+FE9D;FE9D;FE9D;062C;062C; # (ﺝ; ﺝ; ﺝ; ج; ج; ) ARABIC LETTER JEEM ISOLATED FORM
+FE9E;FE9E;FE9E;062C;062C; # (ﺞ; ﺞ; ﺞ; ج; ج; ) ARABIC LETTER JEEM FINAL FORM
+FE9F;FE9F;FE9F;062C;062C; # (ﺟ; ﺟ; ﺟ; ج; ج; ) ARABIC LETTER JEEM INITIAL FORM
+FEA0;FEA0;FEA0;062C;062C; # (ﺠ; ﺠ; ﺠ; ج; ج; ) ARABIC LETTER JEEM MEDIAL FORM
+FEA1;FEA1;FEA1;062D;062D; # (ﺡ; ﺡ; ﺡ; ح; ح; ) ARABIC LETTER HAH ISOLATED FORM
+FEA2;FEA2;FEA2;062D;062D; # (ﺢ; ﺢ; ﺢ; ح; ح; ) ARABIC LETTER HAH FINAL FORM
+FEA3;FEA3;FEA3;062D;062D; # (ﺣ; ﺣ; ﺣ; ح; ح; ) ARABIC LETTER HAH INITIAL FORM
+FEA4;FEA4;FEA4;062D;062D; # (ﺤ; ﺤ; ﺤ; ح; ح; ) ARABIC LETTER HAH MEDIAL FORM
+FEA5;FEA5;FEA5;062E;062E; # (ﺥ; ﺥ; ﺥ; خ; خ; ) ARABIC LETTER KHAH ISOLATED FORM
+FEA6;FEA6;FEA6;062E;062E; # (ﺦ; ﺦ; ﺦ; خ; خ; ) ARABIC LETTER KHAH FINAL FORM
+FEA7;FEA7;FEA7;062E;062E; # (ﺧ; ﺧ; ﺧ; خ; خ; ) ARABIC LETTER KHAH INITIAL FORM
+FEA8;FEA8;FEA8;062E;062E; # (ﺨ; ﺨ; ﺨ; خ; خ; ) ARABIC LETTER KHAH MEDIAL FORM
+FEA9;FEA9;FEA9;062F;062F; # (ﺩ; ﺩ; ﺩ; د; د; ) ARABIC LETTER DAL ISOLATED FORM
+FEAA;FEAA;FEAA;062F;062F; # (ﺪ; ﺪ; ﺪ; د; د; ) ARABIC LETTER DAL FINAL FORM
+FEAB;FEAB;FEAB;0630;0630; # (ﺫ; ﺫ; ﺫ; ذ; ذ; ) ARABIC LETTER THAL ISOLATED FORM
+FEAC;FEAC;FEAC;0630;0630; # (ﺬ; ﺬ; ﺬ; ذ; ذ; ) ARABIC LETTER THAL FINAL FORM
+FEAD;FEAD;FEAD;0631;0631; # (ﺭ; ﺭ; ﺭ; ر; ر; ) ARABIC LETTER REH ISOLATED FORM
+FEAE;FEAE;FEAE;0631;0631; # (ﺮ; ﺮ; ﺮ; ر; ر; ) ARABIC LETTER REH FINAL FORM
+FEAF;FEAF;FEAF;0632;0632; # (ﺯ; ﺯ; ﺯ; ز; ز; ) ARABIC LETTER ZAIN ISOLATED FORM
+FEB0;FEB0;FEB0;0632;0632; # (ﺰ; ﺰ; ﺰ; ز; ز; ) ARABIC LETTER ZAIN FINAL FORM
+FEB1;FEB1;FEB1;0633;0633; # (ﺱ; ﺱ; ﺱ; س; س; ) ARABIC LETTER SEEN ISOLATED FORM
+FEB2;FEB2;FEB2;0633;0633; # (ﺲ; ﺲ; ﺲ; س; س; ) ARABIC LETTER SEEN FINAL FORM
+FEB3;FEB3;FEB3;0633;0633; # (ﺳ; ﺳ; ﺳ; س; س; ) ARABIC LETTER SEEN INITIAL FORM
+FEB4;FEB4;FEB4;0633;0633; # (ﺴ; ﺴ; ﺴ; س; س; ) ARABIC LETTER SEEN MEDIAL FORM
+FEB5;FEB5;FEB5;0634;0634; # (ﺵ; ﺵ; ﺵ; ش; ش; ) ARABIC LETTER SHEEN ISOLATED FORM
+FEB6;FEB6;FEB6;0634;0634; # (ﺶ; ﺶ; ﺶ; ش; ش; ) ARABIC LETTER SHEEN FINAL FORM
+FEB7;FEB7;FEB7;0634;0634; # (ﺷ; ﺷ; ﺷ; ش; ش; ) ARABIC LETTER SHEEN INITIAL FORM
+FEB8;FEB8;FEB8;0634;0634; # (ﺸ; ﺸ; ﺸ; ش; ش; ) ARABIC LETTER SHEEN MEDIAL FORM
+FEB9;FEB9;FEB9;0635;0635; # (ﺹ; ﺹ; ﺹ; ص; ص; ) ARABIC LETTER SAD ISOLATED FORM
+FEBA;FEBA;FEBA;0635;0635; # (ﺺ; ﺺ; ﺺ; ص; ص; ) ARABIC LETTER SAD FINAL FORM
+FEBB;FEBB;FEBB;0635;0635; # (ﺻ; ﺻ; ﺻ; ص; ص; ) ARABIC LETTER SAD INITIAL FORM
+FEBC;FEBC;FEBC;0635;0635; # (ﺼ; ﺼ; ﺼ; ص; ص; ) ARABIC LETTER SAD MEDIAL FORM
+FEBD;FEBD;FEBD;0636;0636; # (ﺽ; ﺽ; ﺽ; ض; ض; ) ARABIC LETTER DAD ISOLATED FORM
+FEBE;FEBE;FEBE;0636;0636; # (ﺾ; ﺾ; ﺾ; ض; ض; ) ARABIC LETTER DAD FINAL FORM
+FEBF;FEBF;FEBF;0636;0636; # (ﺿ; ﺿ; ﺿ; ض; ض; ) ARABIC LETTER DAD INITIAL FORM
+FEC0;FEC0;FEC0;0636;0636; # (ﻀ; ﻀ; ﻀ; ض; ض; ) ARABIC LETTER DAD MEDIAL FORM
+FEC1;FEC1;FEC1;0637;0637; # (ﻁ; ﻁ; ﻁ; ط; ط; ) ARABIC LETTER TAH ISOLATED FORM
+FEC2;FEC2;FEC2;0637;0637; # (ﻂ; ﻂ; ﻂ; ط; ط; ) ARABIC LETTER TAH FINAL FORM
+FEC3;FEC3;FEC3;0637;0637; # (ﻃ; ﻃ; ﻃ; ط; ط; ) ARABIC LETTER TAH INITIAL FORM
+FEC4;FEC4;FEC4;0637;0637; # (ﻄ; ﻄ; ﻄ; ط; ط; ) ARABIC LETTER TAH MEDIAL FORM
+FEC5;FEC5;FEC5;0638;0638; # (ﻅ; ﻅ; ﻅ; ظ; ظ; ) ARABIC LETTER ZAH ISOLATED FORM
+FEC6;FEC6;FEC6;0638;0638; # (ﻆ; ﻆ; ﻆ; ظ; ظ; ) ARABIC LETTER ZAH FINAL FORM
+FEC7;FEC7;FEC7;0638;0638; # (ﻇ; ﻇ; ﻇ; ظ; ظ; ) ARABIC LETTER ZAH INITIAL FORM
+FEC8;FEC8;FEC8;0638;0638; # (ﻈ; ﻈ; ﻈ; ظ; ظ; ) ARABIC LETTER ZAH MEDIAL FORM
+FEC9;FEC9;FEC9;0639;0639; # (ﻉ; ﻉ; ﻉ; ع; ع; ) ARABIC LETTER AIN ISOLATED FORM
+FECA;FECA;FECA;0639;0639; # (ﻊ; ﻊ; ﻊ; ع; ع; ) ARABIC LETTER AIN FINAL FORM
+FECB;FECB;FECB;0639;0639; # (ﻋ; ﻋ; ﻋ; ع; ع; ) ARABIC LETTER AIN INITIAL FORM
+FECC;FECC;FECC;0639;0639; # (ﻌ; ﻌ; ﻌ; ع; ع; ) ARABIC LETTER AIN MEDIAL FORM
+FECD;FECD;FECD;063A;063A; # (ﻍ; ﻍ; ﻍ; غ; غ; ) ARABIC LETTER GHAIN ISOLATED FORM
+FECE;FECE;FECE;063A;063A; # (ﻎ; ﻎ; ﻎ; غ; غ; ) ARABIC LETTER GHAIN FINAL FORM
+FECF;FECF;FECF;063A;063A; # (ﻏ; ﻏ; ﻏ; غ; غ; ) ARABIC LETTER GHAIN INITIAL FORM
+FED0;FED0;FED0;063A;063A; # (ﻐ; ﻐ; ﻐ; غ; غ; ) ARABIC LETTER GHAIN MEDIAL FORM
+FED1;FED1;FED1;0641;0641; # (ﻑ; ﻑ; ﻑ; ف; ف; ) ARABIC LETTER FEH ISOLATED FORM
+FED2;FED2;FED2;0641;0641; # (ﻒ; ﻒ; ﻒ; ف; ف; ) ARABIC LETTER FEH FINAL FORM
+FED3;FED3;FED3;0641;0641; # (ﻓ; ﻓ; ﻓ; ف; ف; ) ARABIC LETTER FEH INITIAL FORM
+FED4;FED4;FED4;0641;0641; # (ﻔ; ﻔ; ﻔ; ف; ف; ) ARABIC LETTER FEH MEDIAL FORM
+FED5;FED5;FED5;0642;0642; # (ﻕ; ﻕ; ﻕ; ق; ق; ) ARABIC LETTER QAF ISOLATED FORM
+FED6;FED6;FED6;0642;0642; # (ﻖ; ﻖ; ﻖ; ق; ق; ) ARABIC LETTER QAF FINAL FORM
+FED7;FED7;FED7;0642;0642; # (ﻗ; ﻗ; ﻗ; ق; ق; ) ARABIC LETTER QAF INITIAL FORM
+FED8;FED8;FED8;0642;0642; # (ﻘ; ﻘ; ﻘ; ق; ق; ) ARABIC LETTER QAF MEDIAL FORM
+FED9;FED9;FED9;0643;0643; # (ﻙ; ﻙ; ﻙ; ك; ك; ) ARABIC LETTER KAF ISOLATED FORM
+FEDA;FEDA;FEDA;0643;0643; # (ﻚ; ﻚ; ﻚ; ك; ك; ) ARABIC LETTER KAF FINAL FORM
+FEDB;FEDB;FEDB;0643;0643; # (ﻛ; ﻛ; ﻛ; ك; ك; ) ARABIC LETTER KAF INITIAL FORM
+FEDC;FEDC;FEDC;0643;0643; # (ﻜ; ﻜ; ﻜ; ك; ك; ) ARABIC LETTER KAF MEDIAL FORM
+FEDD;FEDD;FEDD;0644;0644; # (ﻝ; ﻝ; ﻝ; ل; ل; ) ARABIC LETTER LAM ISOLATED FORM
+FEDE;FEDE;FEDE;0644;0644; # (ﻞ; ﻞ; ﻞ; ل; ل; ) ARABIC LETTER LAM FINAL FORM
+FEDF;FEDF;FEDF;0644;0644; # (ﻟ; ﻟ; ﻟ; ل; ل; ) ARABIC LETTER LAM INITIAL FORM
+FEE0;FEE0;FEE0;0644;0644; # (ﻠ; ﻠ; ﻠ; ل; ل; ) ARABIC LETTER LAM MEDIAL FORM
+FEE1;FEE1;FEE1;0645;0645; # (ﻡ; ﻡ; ﻡ; م; م; ) ARABIC LETTER MEEM ISOLATED FORM
+FEE2;FEE2;FEE2;0645;0645; # (ﻢ; ﻢ; ﻢ; م; م; ) ARABIC LETTER MEEM FINAL FORM
+FEE3;FEE3;FEE3;0645;0645; # (ﻣ; ﻣ; ﻣ; م; م; ) ARABIC LETTER MEEM INITIAL FORM
+FEE4;FEE4;FEE4;0645;0645; # (ﻤ; ﻤ; ﻤ; م; م; ) ARABIC LETTER MEEM MEDIAL FORM
+FEE5;FEE5;FEE5;0646;0646; # (ﻥ; ﻥ; ﻥ; ن; ن; ) ARABIC LETTER NOON ISOLATED FORM
+FEE6;FEE6;FEE6;0646;0646; # (ﻦ; ﻦ; ﻦ; ن; ن; ) ARABIC LETTER NOON FINAL FORM
+FEE7;FEE7;FEE7;0646;0646; # (ﻧ; ﻧ; ﻧ; ن; ن; ) ARABIC LETTER NOON INITIAL FORM
+FEE8;FEE8;FEE8;0646;0646; # (ﻨ; ﻨ; ﻨ; ن; ن; ) ARABIC LETTER NOON MEDIAL FORM
+FEE9;FEE9;FEE9;0647;0647; # (ﻩ; ﻩ; ﻩ; ه; ه; ) ARABIC LETTER HEH ISOLATED FORM
+FEEA;FEEA;FEEA;0647;0647; # (ﻪ; ﻪ; ﻪ; ه; ه; ) ARABIC LETTER HEH FINAL FORM
+FEEB;FEEB;FEEB;0647;0647; # (ﻫ; ﻫ; ﻫ; ه; ه; ) ARABIC LETTER HEH INITIAL FORM
+FEEC;FEEC;FEEC;0647;0647; # (ﻬ; ﻬ; ﻬ; ه; ه; ) ARABIC LETTER HEH MEDIAL FORM
+FEED;FEED;FEED;0648;0648; # (ﻭ; ﻭ; ﻭ; و; و; ) ARABIC LETTER WAW ISOLATED FORM
+FEEE;FEEE;FEEE;0648;0648; # (ﻮ; ﻮ; ﻮ; و; و; ) ARABIC LETTER WAW FINAL FORM
+FEEF;FEEF;FEEF;0649;0649; # (ﻯ; ﻯ; ﻯ; ى; ى; ) ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FEF0;FEF0;FEF0;0649;0649; # (ﻰ; ﻰ; ﻰ; ى; ى; ) ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF1;FEF1;FEF1;064A;064A; # (ﻱ; ﻱ; ﻱ; ي; ي; ) ARABIC LETTER YEH ISOLATED FORM
+FEF2;FEF2;FEF2;064A;064A; # (ﻲ; ﻲ; ﻲ; ي; ي; ) ARABIC LETTER YEH FINAL FORM
+FEF3;FEF3;FEF3;064A;064A; # (ﻳ; ﻳ; ﻳ; ي; ي; ) ARABIC LETTER YEH INITIAL FORM
+FEF4;FEF4;FEF4;064A;064A; # (ﻴ; ﻴ; ﻴ; ي; ي; ) ARABIC LETTER YEH MEDIAL FORM
+FEF5;FEF5;FEF5;0644 0622;0644 0627 0653; # (ﻵ; ﻵ; ﻵ; لآ; لا◌ٓ; ) ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF6;FEF6;FEF6;0644 0622;0644 0627 0653; # (ﻶ; ﻶ; ﻶ; لآ; لا◌ٓ; ) ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF7;FEF7;FEF7;0644 0623;0644 0627 0654; # (ﻷ; ﻷ; ﻷ; لأ; لا◌ٔ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEF8;FEF8;FEF8;0644 0623;0644 0627 0654; # (ﻸ; ﻸ; ﻸ; لأ; لا◌ٔ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF9;FEF9;FEF9;0644 0625;0644 0627 0655; # (ﻹ; ﻹ; ﻹ; لإ; لا◌ٕ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFA;FEFA;FEFA;0644 0625;0644 0627 0655; # (ﻺ; ﻺ; ﻺ; لإ; لا◌ٕ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFB;FEFB;FEFB;0644 0627;0644 0627; # (ﻻ; ﻻ; ﻻ; لا; لا; ) ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+FEFC;FEFC;FEFC;0644 0627;0644 0627; # (ﻼ; ﻼ; ﻼ; لا; لا; ) ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF01;FF01;FF01;0021;0021; # (!; !; !; !; !; ) FULLWIDTH EXCLAMATION MARK
+FF02;FF02;FF02;0022;0022; # ("; "; "; "; "; ) FULLWIDTH QUOTATION MARK
+FF03;FF03;FF03;0023;0023; # (#; #; #; #; #; ) FULLWIDTH NUMBER SIGN
+FF04;FF04;FF04;0024;0024; # ($; $; $; $; $; ) FULLWIDTH DOLLAR SIGN
+FF05;FF05;FF05;0025;0025; # (%; %; %; %; %; ) FULLWIDTH PERCENT SIGN
+FF06;FF06;FF06;0026;0026; # (&; &; &; &; &; ) FULLWIDTH AMPERSAND
+FF07;FF07;FF07;0027;0027; # ('; '; '; '; '; ) FULLWIDTH APOSTROPHE
+FF08;FF08;FF08;0028;0028; # ((; (; (; (; (; ) FULLWIDTH LEFT PARENTHESIS
+FF09;FF09;FF09;0029;0029; # (); ); ); ); ); ) FULLWIDTH RIGHT PARENTHESIS
+FF0A;FF0A;FF0A;002A;002A; # (*; *; *; *; *; ) FULLWIDTH ASTERISK
+FF0B;FF0B;FF0B;002B;002B; # (+; +; +; +; +; ) FULLWIDTH PLUS SIGN
+FF0C;FF0C;FF0C;002C;002C; # (,; ,; ,; ,; ,; ) FULLWIDTH COMMA
+FF0D;FF0D;FF0D;002D;002D; # (-; -; -; -; -; ) FULLWIDTH HYPHEN-MINUS
+FF0E;FF0E;FF0E;002E;002E; # (.; .; .; .; .; ) FULLWIDTH FULL STOP
+FF0F;FF0F;FF0F;002F;002F; # (/; /; /; /; /; ) FULLWIDTH SOLIDUS
+FF10;FF10;FF10;0030;0030; # (0; 0; 0; 0; 0; ) FULLWIDTH DIGIT ZERO
+FF11;FF11;FF11;0031;0031; # (1; 1; 1; 1; 1; ) FULLWIDTH DIGIT ONE
+FF12;FF12;FF12;0032;0032; # (2; 2; 2; 2; 2; ) FULLWIDTH DIGIT TWO
+FF13;FF13;FF13;0033;0033; # (3; 3; 3; 3; 3; ) FULLWIDTH DIGIT THREE
+FF14;FF14;FF14;0034;0034; # (4; 4; 4; 4; 4; ) FULLWIDTH DIGIT FOUR
+FF15;FF15;FF15;0035;0035; # (5; 5; 5; 5; 5; ) FULLWIDTH DIGIT FIVE
+FF16;FF16;FF16;0036;0036; # (6; 6; 6; 6; 6; ) FULLWIDTH DIGIT SIX
+FF17;FF17;FF17;0037;0037; # (7; 7; 7; 7; 7; ) FULLWIDTH DIGIT SEVEN
+FF18;FF18;FF18;0038;0038; # (8; 8; 8; 8; 8; ) FULLWIDTH DIGIT EIGHT
+FF19;FF19;FF19;0039;0039; # (9; 9; 9; 9; 9; ) FULLWIDTH DIGIT NINE
+FF1A;FF1A;FF1A;003A;003A; # (:; :; :; :; :; ) FULLWIDTH COLON
+FF1B;FF1B;FF1B;003B;003B; # (;; ;; ;; ;; ;; ) FULLWIDTH SEMICOLON
+FF1C;FF1C;FF1C;003C;003C; # (<; <; <; <; <; ) FULLWIDTH LESS-THAN SIGN
+FF1D;FF1D;FF1D;003D;003D; # (=; =; =; =; =; ) FULLWIDTH EQUALS SIGN
+FF1E;FF1E;FF1E;003E;003E; # (>; >; >; >; >; ) FULLWIDTH GREATER-THAN SIGN
+FF1F;FF1F;FF1F;003F;003F; # (?; ?; ?; ?; ?; ) FULLWIDTH QUESTION MARK
+FF20;FF20;FF20;0040;0040; # (@; @; @; @; @; ) FULLWIDTH COMMERCIAL AT
+FF21;FF21;FF21;0041;0041; # (A; A; A; A; A; ) FULLWIDTH LATIN CAPITAL LETTER A
+FF22;FF22;FF22;0042;0042; # (B; B; B; B; B; ) FULLWIDTH LATIN CAPITAL LETTER B
+FF23;FF23;FF23;0043;0043; # (C; C; C; C; C; ) FULLWIDTH LATIN CAPITAL LETTER C
+FF24;FF24;FF24;0044;0044; # (D; D; D; D; D; ) FULLWIDTH LATIN CAPITAL LETTER D
+FF25;FF25;FF25;0045;0045; # (E; E; E; E; E; ) FULLWIDTH LATIN CAPITAL LETTER E
+FF26;FF26;FF26;0046;0046; # (F; F; F; F; F; ) FULLWIDTH LATIN CAPITAL LETTER F
+FF27;FF27;FF27;0047;0047; # (G; G; G; G; G; ) FULLWIDTH LATIN CAPITAL LETTER G
+FF28;FF28;FF28;0048;0048; # (H; H; H; H; H; ) FULLWIDTH LATIN CAPITAL LETTER H
+FF29;FF29;FF29;0049;0049; # (I; I; I; I; I; ) FULLWIDTH LATIN CAPITAL LETTER I
+FF2A;FF2A;FF2A;004A;004A; # (J; J; J; J; J; ) FULLWIDTH LATIN CAPITAL LETTER J
+FF2B;FF2B;FF2B;004B;004B; # (K; K; K; K; K; ) FULLWIDTH LATIN CAPITAL LETTER K
+FF2C;FF2C;FF2C;004C;004C; # (L; L; L; L; L; ) FULLWIDTH LATIN CAPITAL LETTER L
+FF2D;FF2D;FF2D;004D;004D; # (M; M; M; M; M; ) FULLWIDTH LATIN CAPITAL LETTER M
+FF2E;FF2E;FF2E;004E;004E; # (N; N; N; N; N; ) FULLWIDTH LATIN CAPITAL LETTER N
+FF2F;FF2F;FF2F;004F;004F; # (O; O; O; O; O; ) FULLWIDTH LATIN CAPITAL LETTER O
+FF30;FF30;FF30;0050;0050; # (P; P; P; P; P; ) FULLWIDTH LATIN CAPITAL LETTER P
+FF31;FF31;FF31;0051;0051; # (Q; Q; Q; Q; Q; ) FULLWIDTH LATIN CAPITAL LETTER Q
+FF32;FF32;FF32;0052;0052; # (R; R; R; R; R; ) FULLWIDTH LATIN CAPITAL LETTER R
+FF33;FF33;FF33;0053;0053; # (S; S; S; S; S; ) FULLWIDTH LATIN CAPITAL LETTER S
+FF34;FF34;FF34;0054;0054; # (T; T; T; T; T; ) FULLWIDTH LATIN CAPITAL LETTER T
+FF35;FF35;FF35;0055;0055; # (U; U; U; U; U; ) FULLWIDTH LATIN CAPITAL LETTER U
+FF36;FF36;FF36;0056;0056; # (V; V; V; V; V; ) FULLWIDTH LATIN CAPITAL LETTER V
+FF37;FF37;FF37;0057;0057; # (W; W; W; W; W; ) FULLWIDTH LATIN CAPITAL LETTER W
+FF38;FF38;FF38;0058;0058; # (X; X; X; X; X; ) FULLWIDTH LATIN CAPITAL LETTER X
+FF39;FF39;FF39;0059;0059; # (Y; Y; Y; Y; Y; ) FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A;FF3A;FF3A;005A;005A; # (Z; Z; Z; Z; Z; ) FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B;FF3B;FF3B;005B;005B; # ([; [; [; [; [; ) FULLWIDTH LEFT SQUARE BRACKET
+FF3C;FF3C;FF3C;005C;005C; # (\; \; \; \; \; ) FULLWIDTH REVERSE SOLIDUS
+FF3D;FF3D;FF3D;005D;005D; # (]; ]; ]; ]; ]; ) FULLWIDTH RIGHT SQUARE BRACKET
+FF3E;FF3E;FF3E;005E;005E; # (^; ^; ^; ^; ^; ) FULLWIDTH CIRCUMFLEX ACCENT
+FF3F;FF3F;FF3F;005F;005F; # (_; _; _; _; _; ) FULLWIDTH LOW LINE
+FF40;FF40;FF40;0060;0060; # (`; `; `; `; `; ) FULLWIDTH GRAVE ACCENT
+FF41;FF41;FF41;0061;0061; # (a; a; a; a; a; ) FULLWIDTH LATIN SMALL LETTER A
+FF42;FF42;FF42;0062;0062; # (b; b; b; b; b; ) FULLWIDTH LATIN SMALL LETTER B
+FF43;FF43;FF43;0063;0063; # (c; c; c; c; c; ) FULLWIDTH LATIN SMALL LETTER C
+FF44;FF44;FF44;0064;0064; # (d; d; d; d; d; ) FULLWIDTH LATIN SMALL LETTER D
+FF45;FF45;FF45;0065;0065; # (e; e; e; e; e; ) FULLWIDTH LATIN SMALL LETTER E
+FF46;FF46;FF46;0066;0066; # (f; f; f; f; f; ) FULLWIDTH LATIN SMALL LETTER F
+FF47;FF47;FF47;0067;0067; # (g; g; g; g; g; ) FULLWIDTH LATIN SMALL LETTER G
+FF48;FF48;FF48;0068;0068; # (h; h; h; h; h; ) FULLWIDTH LATIN SMALL LETTER H
+FF49;FF49;FF49;0069;0069; # (i; i; i; i; i; ) FULLWIDTH LATIN SMALL LETTER I
+FF4A;FF4A;FF4A;006A;006A; # (j; j; j; j; j; ) FULLWIDTH LATIN SMALL LETTER J
+FF4B;FF4B;FF4B;006B;006B; # (k; k; k; k; k; ) FULLWIDTH LATIN SMALL LETTER K
+FF4C;FF4C;FF4C;006C;006C; # (l; l; l; l; l; ) FULLWIDTH LATIN SMALL LETTER L
+FF4D;FF4D;FF4D;006D;006D; # (m; m; m; m; m; ) FULLWIDTH LATIN SMALL LETTER M
+FF4E;FF4E;FF4E;006E;006E; # (n; n; n; n; n; ) FULLWIDTH LATIN SMALL LETTER N
+FF4F;FF4F;FF4F;006F;006F; # (o; o; o; o; o; ) FULLWIDTH LATIN SMALL LETTER O
+FF50;FF50;FF50;0070;0070; # (p; p; p; p; p; ) FULLWIDTH LATIN SMALL LETTER P
+FF51;FF51;FF51;0071;0071; # (q; q; q; q; q; ) FULLWIDTH LATIN SMALL LETTER Q
+FF52;FF52;FF52;0072;0072; # (r; r; r; r; r; ) FULLWIDTH LATIN SMALL LETTER R
+FF53;FF53;FF53;0073;0073; # (s; s; s; s; s; ) FULLWIDTH LATIN SMALL LETTER S
+FF54;FF54;FF54;0074;0074; # (t; t; t; t; t; ) FULLWIDTH LATIN SMALL LETTER T
+FF55;FF55;FF55;0075;0075; # (u; u; u; u; u; ) FULLWIDTH LATIN SMALL LETTER U
+FF56;FF56;FF56;0076;0076; # (v; v; v; v; v; ) FULLWIDTH LATIN SMALL LETTER V
+FF57;FF57;FF57;0077;0077; # (w; w; w; w; w; ) FULLWIDTH LATIN SMALL LETTER W
+FF58;FF58;FF58;0078;0078; # (x; x; x; x; x; ) FULLWIDTH LATIN SMALL LETTER X
+FF59;FF59;FF59;0079;0079; # (y; y; y; y; y; ) FULLWIDTH LATIN SMALL LETTER Y
+FF5A;FF5A;FF5A;007A;007A; # (z; z; z; z; z; ) FULLWIDTH LATIN SMALL LETTER Z
+FF5B;FF5B;FF5B;007B;007B; # ({; {; {; {; {; ) FULLWIDTH LEFT CURLY BRACKET
+FF5C;FF5C;FF5C;007C;007C; # (|; |; |; |; |; ) FULLWIDTH VERTICAL LINE
+FF5D;FF5D;FF5D;007D;007D; # (}; }; }; }; }; ) FULLWIDTH RIGHT CURLY BRACKET
+FF5E;FF5E;FF5E;007E;007E; # (~; ~; ~; ~; ~; ) FULLWIDTH TILDE
+FF61;FF61;FF61;3002;3002; # (。; 。; 。; 。; 。; ) HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62;FF62;FF62;300C;300C; # (「; 「; 「; 「; 「; ) HALFWIDTH LEFT CORNER BRACKET
+FF63;FF63;FF63;300D;300D; # (」; 」; 」; 」; 」; ) HALFWIDTH RIGHT CORNER BRACKET
+FF64;FF64;FF64;3001;3001; # (、; 、; 、; 、; 、; ) HALFWIDTH IDEOGRAPHIC COMMA
+FF65;FF65;FF65;30FB;30FB; # (・; ・; ・; ・; ・; ) HALFWIDTH KATAKANA MIDDLE DOT
+FF66;FF66;FF66;30F2;30F2; # (ヲ; ヲ; ヲ; ヲ; ヲ; ) HALFWIDTH KATAKANA LETTER WO
+FF67;FF67;FF67;30A1;30A1; # (ァ; ァ; ァ; ァ; ァ; ) HALFWIDTH KATAKANA LETTER SMALL A
+FF68;FF68;FF68;30A3;30A3; # (ィ; ィ; ィ; ィ; ィ; ) HALFWIDTH KATAKANA LETTER SMALL I
+FF69;FF69;FF69;30A5;30A5; # (ゥ; ゥ; ゥ; ゥ; ゥ; ) HALFWIDTH KATAKANA LETTER SMALL U
+FF6A;FF6A;FF6A;30A7;30A7; # (ェ; ェ; ェ; ェ; ェ; ) HALFWIDTH KATAKANA LETTER SMALL E
+FF6B;FF6B;FF6B;30A9;30A9; # (ォ; ォ; ォ; ォ; ォ; ) HALFWIDTH KATAKANA LETTER SMALL O
+FF6C;FF6C;FF6C;30E3;30E3; # (ャ; ャ; ャ; ャ; ャ; ) HALFWIDTH KATAKANA LETTER SMALL YA
+FF6D;FF6D;FF6D;30E5;30E5; # (ュ; ュ; ュ; ュ; ュ; ) HALFWIDTH KATAKANA LETTER SMALL YU
+FF6E;FF6E;FF6E;30E7;30E7; # (ョ; ョ; ョ; ョ; ョ; ) HALFWIDTH KATAKANA LETTER SMALL YO
+FF6F;FF6F;FF6F;30C3;30C3; # (ッ; ッ; ッ; ッ; ッ; ) HALFWIDTH KATAKANA LETTER SMALL TU
+FF70;FF70;FF70;30FC;30FC; # (ー; ー; ー; ー; ー; ) HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71;FF71;FF71;30A2;30A2; # (ア; ア; ア; ア; ア; ) HALFWIDTH KATAKANA LETTER A
+FF72;FF72;FF72;30A4;30A4; # (イ; イ; イ; イ; イ; ) HALFWIDTH KATAKANA LETTER I
+FF73;FF73;FF73;30A6;30A6; # (ウ; ウ; ウ; ウ; ウ; ) HALFWIDTH KATAKANA LETTER U
+FF74;FF74;FF74;30A8;30A8; # (エ; エ; エ; エ; エ; ) HALFWIDTH KATAKANA LETTER E
+FF75;FF75;FF75;30AA;30AA; # (オ; オ; オ; オ; オ; ) HALFWIDTH KATAKANA LETTER O
+FF76;FF76;FF76;30AB;30AB; # (カ; カ; カ; カ; カ; ) HALFWIDTH KATAKANA LETTER KA
+FF77;FF77;FF77;30AD;30AD; # (キ; キ; キ; キ; キ; ) HALFWIDTH KATAKANA LETTER KI
+FF78;FF78;FF78;30AF;30AF; # (ク; ク; ク; ク; ク; ) HALFWIDTH KATAKANA LETTER KU
+FF79;FF79;FF79;30B1;30B1; # (ケ; ケ; ケ; ケ; ケ; ) HALFWIDTH KATAKANA LETTER KE
+FF7A;FF7A;FF7A;30B3;30B3; # (コ; コ; コ; コ; コ; ) HALFWIDTH KATAKANA LETTER KO
+FF7B;FF7B;FF7B;30B5;30B5; # (サ; サ; サ; サ; サ; ) HALFWIDTH KATAKANA LETTER SA
+FF7C;FF7C;FF7C;30B7;30B7; # (シ; シ; シ; シ; シ; ) HALFWIDTH KATAKANA LETTER SI
+FF7D;FF7D;FF7D;30B9;30B9; # (ス; ス; ス; ス; ス; ) HALFWIDTH KATAKANA LETTER SU
+FF7E;FF7E;FF7E;30BB;30BB; # (セ; セ; セ; セ; セ; ) HALFWIDTH KATAKANA LETTER SE
+FF7F;FF7F;FF7F;30BD;30BD; # (ソ; ソ; ソ; ソ; ソ; ) HALFWIDTH KATAKANA LETTER SO
+FF80;FF80;FF80;30BF;30BF; # (タ; タ; タ; タ; タ; ) HALFWIDTH KATAKANA LETTER TA
+FF81;FF81;FF81;30C1;30C1; # (チ; チ; チ; チ; チ; ) HALFWIDTH KATAKANA LETTER TI
+FF82;FF82;FF82;30C4;30C4; # (ツ; ツ; ツ; ツ; ツ; ) HALFWIDTH KATAKANA LETTER TU
+FF83;FF83;FF83;30C6;30C6; # (テ; テ; テ; テ; テ; ) HALFWIDTH KATAKANA LETTER TE
+FF84;FF84;FF84;30C8;30C8; # (ト; ト; ト; ト; ト; ) HALFWIDTH KATAKANA LETTER TO
+FF85;FF85;FF85;30CA;30CA; # (ナ; ナ; ナ; ナ; ナ; ) HALFWIDTH KATAKANA LETTER NA
+FF86;FF86;FF86;30CB;30CB; # (ニ; ニ; ニ; ニ; ニ; ) HALFWIDTH KATAKANA LETTER NI
+FF87;FF87;FF87;30CC;30CC; # (ヌ; ヌ; ヌ; ヌ; ヌ; ) HALFWIDTH KATAKANA LETTER NU
+FF88;FF88;FF88;30CD;30CD; # (ネ; ネ; ネ; ネ; ネ; ) HALFWIDTH KATAKANA LETTER NE
+FF89;FF89;FF89;30CE;30CE; # (ノ; ノ; ノ; ノ; ノ; ) HALFWIDTH KATAKANA LETTER NO
+FF8A;FF8A;FF8A;30CF;30CF; # (ハ; ハ; ハ; ハ; ハ; ) HALFWIDTH KATAKANA LETTER HA
+FF8B;FF8B;FF8B;30D2;30D2; # (ヒ; ヒ; ヒ; ヒ; ヒ; ) HALFWIDTH KATAKANA LETTER HI
+FF8C;FF8C;FF8C;30D5;30D5; # (フ; フ; フ; フ; フ; ) HALFWIDTH KATAKANA LETTER HU
+FF8D;FF8D;FF8D;30D8;30D8; # (ヘ; ヘ; ヘ; ヘ; ヘ; ) HALFWIDTH KATAKANA LETTER HE
+FF8E;FF8E;FF8E;30DB;30DB; # (ホ; ホ; ホ; ホ; ホ; ) HALFWIDTH KATAKANA LETTER HO
+FF8F;FF8F;FF8F;30DE;30DE; # (マ; マ; マ; マ; マ; ) HALFWIDTH KATAKANA LETTER MA
+FF90;FF90;FF90;30DF;30DF; # (ミ; ミ; ミ; ミ; ミ; ) HALFWIDTH KATAKANA LETTER MI
+FF91;FF91;FF91;30E0;30E0; # (ム; ム; ム; ム; ム; ) HALFWIDTH KATAKANA LETTER MU
+FF92;FF92;FF92;30E1;30E1; # (メ; メ; メ; メ; メ; ) HALFWIDTH KATAKANA LETTER ME
+FF93;FF93;FF93;30E2;30E2; # (モ; モ; モ; モ; モ; ) HALFWIDTH KATAKANA LETTER MO
+FF94;FF94;FF94;30E4;30E4; # (ヤ; ヤ; ヤ; ヤ; ヤ; ) HALFWIDTH KATAKANA LETTER YA
+FF95;FF95;FF95;30E6;30E6; # (ユ; ユ; ユ; ユ; ユ; ) HALFWIDTH KATAKANA LETTER YU
+FF96;FF96;FF96;30E8;30E8; # (ヨ; ヨ; ヨ; ヨ; ヨ; ) HALFWIDTH KATAKANA LETTER YO
+FF97;FF97;FF97;30E9;30E9; # (ラ; ラ; ラ; ラ; ラ; ) HALFWIDTH KATAKANA LETTER RA
+FF98;FF98;FF98;30EA;30EA; # (リ; リ; リ; リ; リ; ) HALFWIDTH KATAKANA LETTER RI
+FF99;FF99;FF99;30EB;30EB; # (ル; ル; ル; ル; ル; ) HALFWIDTH KATAKANA LETTER RU
+FF9A;FF9A;FF9A;30EC;30EC; # (レ; レ; レ; レ; レ; ) HALFWIDTH KATAKANA LETTER RE
+FF9B;FF9B;FF9B;30ED;30ED; # (ロ; ロ; ロ; ロ; ロ; ) HALFWIDTH KATAKANA LETTER RO
+FF9C;FF9C;FF9C;30EF;30EF; # (ワ; ワ; ワ; ワ; ワ; ) HALFWIDTH KATAKANA LETTER WA
+FF9D;FF9D;FF9D;30F3;30F3; # (ン; ン; ン; ン; ン; ) HALFWIDTH KATAKANA LETTER N
+FF9E;FF9E;FF9E;3099;3099; # (゙; ゙; ゙; ◌゙; ◌゙; ) HALFWIDTH KATAKANA VOICED SOUND MARK
+FF9F;FF9F;FF9F;309A;309A; # (゚; ゚; ゚; ◌゚; ◌゚; ) HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0;FFA0;FFA0;1160;1160; # (ᅠ; ᅠ; ᅠ; ᅠ; ᅠ; ) HALFWIDTH HANGUL FILLER
+FFA1;FFA1;FFA1;1100;1100; # (ᄀ; ᄀ; ᄀ; ᄀ; ᄀ; ) HALFWIDTH HANGUL LETTER KIYEOK
+FFA2;FFA2;FFA2;1101;1101; # (ᄁ; ᄁ; ᄁ; ᄁ; ᄁ; ) HALFWIDTH HANGUL LETTER SSANGKIYEOK
+FFA3;FFA3;FFA3;11AA;11AA; # (ᆪ; ᆪ; ᆪ; ᆪ; ᆪ; ) HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+FFA4;FFA4;FFA4;1102;1102; # (ᄂ; ᄂ; ᄂ; ᄂ; ᄂ; ) HALFWIDTH HANGUL LETTER NIEUN
+FFA5;FFA5;FFA5;11AC;11AC; # (ᆬ; ᆬ; ᆬ; ᆬ; ᆬ; ) HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+FFA6;FFA6;FFA6;11AD;11AD; # (ᆭ; ᆭ; ᆭ; ᆭ; ᆭ; ) HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+FFA7;FFA7;FFA7;1103;1103; # (ᄃ; ᄃ; ᄃ; ᄃ; ᄃ; ) HALFWIDTH HANGUL LETTER TIKEUT
+FFA8;FFA8;FFA8;1104;1104; # (ᄄ; ᄄ; ᄄ; ᄄ; ᄄ; ) HALFWIDTH HANGUL LETTER SSANGTIKEUT
+FFA9;FFA9;FFA9;1105;1105; # (ᄅ; ᄅ; ᄅ; ᄅ; ᄅ; ) HALFWIDTH HANGUL LETTER RIEUL
+FFAA;FFAA;FFAA;11B0;11B0; # (ᆰ; ᆰ; ᆰ; ᆰ; ᆰ; ) HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+FFAB;FFAB;FFAB;11B1;11B1; # (ᆱ; ᆱ; ᆱ; ᆱ; ᆱ; ) HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+FFAC;FFAC;FFAC;11B2;11B2; # (ᆲ; ᆲ; ᆲ; ᆲ; ᆲ; ) HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+FFAD;FFAD;FFAD;11B3;11B3; # (ᆳ; ᆳ; ᆳ; ᆳ; ᆳ; ) HALFWIDTH HANGUL LETTER RIEUL-SIOS
+FFAE;FFAE;FFAE;11B4;11B4; # (ᆴ; ᆴ; ᆴ; ᆴ; ᆴ; ) HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+FFAF;FFAF;FFAF;11B5;11B5; # (ᆵ; ᆵ; ᆵ; ᆵ; ᆵ; ) HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+FFB0;FFB0;FFB0;111A;111A; # (ᄚ; ᄚ; ᄚ; ᄚ; ᄚ; ) HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+FFB1;FFB1;FFB1;1106;1106; # (ᄆ; ᄆ; ᄆ; ᄆ; ᄆ; ) HALFWIDTH HANGUL LETTER MIEUM
+FFB2;FFB2;FFB2;1107;1107; # (ᄇ; ᄇ; ᄇ; ᄇ; ᄇ; ) HALFWIDTH HANGUL LETTER PIEUP
+FFB3;FFB3;FFB3;1108;1108; # (ᄈ; ᄈ; ᄈ; ᄈ; ᄈ; ) HALFWIDTH HANGUL LETTER SSANGPIEUP
+FFB4;FFB4;FFB4;1121;1121; # (ᄡ; ᄡ; ᄡ; ᄡ; ᄡ; ) HALFWIDTH HANGUL LETTER PIEUP-SIOS
+FFB5;FFB5;FFB5;1109;1109; # (ᄉ; ᄉ; ᄉ; ᄉ; ᄉ; ) HALFWIDTH HANGUL LETTER SIOS
+FFB6;FFB6;FFB6;110A;110A; # (ᄊ; ᄊ; ᄊ; ᄊ; ᄊ; ) HALFWIDTH HANGUL LETTER SSANGSIOS
+FFB7;FFB7;FFB7;110B;110B; # (ᄋ; ᄋ; ᄋ; ᄋ; ᄋ; ) HALFWIDTH HANGUL LETTER IEUNG
+FFB8;FFB8;FFB8;110C;110C; # (ᄌ; ᄌ; ᄌ; ᄌ; ᄌ; ) HALFWIDTH HANGUL LETTER CIEUC
+FFB9;FFB9;FFB9;110D;110D; # (ᄍ; ᄍ; ᄍ; ᄍ; ᄍ; ) HALFWIDTH HANGUL LETTER SSANGCIEUC
+FFBA;FFBA;FFBA;110E;110E; # (ᄎ; ᄎ; ᄎ; ᄎ; ᄎ; ) HALFWIDTH HANGUL LETTER CHIEUCH
+FFBB;FFBB;FFBB;110F;110F; # (ᄏ; ᄏ; ᄏ; ᄏ; ᄏ; ) HALFWIDTH HANGUL LETTER KHIEUKH
+FFBC;FFBC;FFBC;1110;1110; # (ᄐ; ᄐ; ᄐ; ᄐ; ᄐ; ) HALFWIDTH HANGUL LETTER THIEUTH
+FFBD;FFBD;FFBD;1111;1111; # (ᄑ; ᄑ; ᄑ; ᄑ; ᄑ; ) HALFWIDTH HANGUL LETTER PHIEUPH
+FFBE;FFBE;FFBE;1112;1112; # (ᄒ; ᄒ; ᄒ; ᄒ; ᄒ; ) HALFWIDTH HANGUL LETTER HIEUH
+FFC2;FFC2;FFC2;1161;1161; # (ᅡ; ᅡ; ᅡ; ᅡ; ᅡ; ) HALFWIDTH HANGUL LETTER A
+FFC3;FFC3;FFC3;1162;1162; # (ᅢ; ᅢ; ᅢ; ᅢ; ᅢ; ) HALFWIDTH HANGUL LETTER AE
+FFC4;FFC4;FFC4;1163;1163; # (ᅣ; ᅣ; ᅣ; ᅣ; ᅣ; ) HALFWIDTH HANGUL LETTER YA
+FFC5;FFC5;FFC5;1164;1164; # (ᅤ; ᅤ; ᅤ; ᅤ; ᅤ; ) HALFWIDTH HANGUL LETTER YAE
+FFC6;FFC6;FFC6;1165;1165; # (ᅥ; ᅥ; ᅥ; ᅥ; ᅥ; ) HALFWIDTH HANGUL LETTER EO
+FFC7;FFC7;FFC7;1166;1166; # (ᅦ; ᅦ; ᅦ; ᅦ; ᅦ; ) HALFWIDTH HANGUL LETTER E
+FFCA;FFCA;FFCA;1167;1167; # (ᅧ; ᅧ; ᅧ; ᅧ; ᅧ; ) HALFWIDTH HANGUL LETTER YEO
+FFCB;FFCB;FFCB;1168;1168; # (ᅨ; ᅨ; ᅨ; ᅨ; ᅨ; ) HALFWIDTH HANGUL LETTER YE
+FFCC;FFCC;FFCC;1169;1169; # (ᅩ; ᅩ; ᅩ; ᅩ; ᅩ; ) HALFWIDTH HANGUL LETTER O
+FFCD;FFCD;FFCD;116A;116A; # (ᅪ; ᅪ; ᅪ; ᅪ; ᅪ; ) HALFWIDTH HANGUL LETTER WA
+FFCE;FFCE;FFCE;116B;116B; # (ᅫ; ᅫ; ᅫ; ᅫ; ᅫ; ) HALFWIDTH HANGUL LETTER WAE
+FFCF;FFCF;FFCF;116C;116C; # (ᅬ; ᅬ; ᅬ; ᅬ; ᅬ; ) HALFWIDTH HANGUL LETTER OE
+FFD2;FFD2;FFD2;116D;116D; # (ᅭ; ᅭ; ᅭ; ᅭ; ᅭ; ) HALFWIDTH HANGUL LETTER YO
+FFD3;FFD3;FFD3;116E;116E; # (ᅮ; ᅮ; ᅮ; ᅮ; ᅮ; ) HALFWIDTH HANGUL LETTER U
+FFD4;FFD4;FFD4;116F;116F; # (ᅯ; ᅯ; ᅯ; ᅯ; ᅯ; ) HALFWIDTH HANGUL LETTER WEO
+FFD5;FFD5;FFD5;1170;1170; # (ᅰ; ᅰ; ᅰ; ᅰ; ᅰ; ) HALFWIDTH HANGUL LETTER WE
+FFD6;FFD6;FFD6;1171;1171; # (ᅱ; ᅱ; ᅱ; ᅱ; ᅱ; ) HALFWIDTH HANGUL LETTER WI
+FFD7;FFD7;FFD7;1172;1172; # (ᅲ; ᅲ; ᅲ; ᅲ; ᅲ; ) HALFWIDTH HANGUL LETTER YU
+FFDA;FFDA;FFDA;1173;1173; # (ᅳ; ᅳ; ᅳ; ᅳ; ᅳ; ) HALFWIDTH HANGUL LETTER EU
+FFDB;FFDB;FFDB;1174;1174; # (ᅴ; ᅴ; ᅴ; ᅴ; ᅴ; ) HALFWIDTH HANGUL LETTER YI
+FFDC;FFDC;FFDC;1175;1175; # (ᅵ; ᅵ; ᅵ; ᅵ; ᅵ; ) HALFWIDTH HANGUL LETTER I
+FFE0;FFE0;FFE0;00A2;00A2; # (¢; ¢; ¢; ¢; ¢; ) FULLWIDTH CENT SIGN
+FFE1;FFE1;FFE1;00A3;00A3; # (£; £; £; £; £; ) FULLWIDTH POUND SIGN
+FFE2;FFE2;FFE2;00AC;00AC; # (¬; ¬; ¬; ¬; ¬; ) FULLWIDTH NOT SIGN
+FFE3;FFE3;FFE3;0020 0304;0020 0304; # ( ̄;  ̄;  ̄;  ◌̄;  ◌̄; ) FULLWIDTH MACRON
+FFE4;FFE4;FFE4;00A6;00A6; # (¦; ¦; ¦; ¦; ¦; ) FULLWIDTH BROKEN BAR
+FFE5;FFE5;FFE5;00A5;00A5; # (¥; ¥; ¥; ¥; ¥; ) FULLWIDTH YEN SIGN
+FFE6;FFE6;FFE6;20A9;20A9; # (₩; ₩; ₩; ₩; ₩; ) FULLWIDTH WON SIGN
+FFE8;FFE8;FFE8;2502;2502; # (│; │; │; │; │; ) HALFWIDTH FORMS LIGHT VERTICAL
+FFE9;FFE9;FFE9;2190;2190; # (←; ←; ←; ←; ←; ) HALFWIDTH LEFTWARDS ARROW
+FFEA;FFEA;FFEA;2191;2191; # (↑; ↑; ↑; ↑; ↑; ) HALFWIDTH UPWARDS ARROW
+FFEB;FFEB;FFEB;2192;2192; # (→; →; →; →; →; ) HALFWIDTH RIGHTWARDS ARROW
+FFEC;FFEC;FFEC;2193;2193; # (↓; ↓; ↓; ↓; ↓; ) HALFWIDTH DOWNWARDS ARROW
+FFED;FFED;FFED;25A0;25A0; # (■; ■; ■; ■; ■; ) HALFWIDTH BLACK SQUARE
+FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
+#
+# Part 2: Canonical Order Test
+#
+0061 0315 0300 05AE 0300 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̕◌̀◌֮◌̀b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
+0061 0300 0315 0300 05AE 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̀◌̕◌̀◌֮b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0301 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062; # (a◌̕◌̀◌֮◌́b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ACUTE ACCENT, LATIN SMALL LETTER B
+0061 0301 0315 0300 05AE 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062; # (a◌́◌̕◌̀◌֮b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0302 0062;00E0 05AE 0302 0315 0062;0061 05AE 0300 0302 0315 0062;00E0 05AE 0302 0315 0062;0061 05AE 0300 0302 0315 0062; # (a◌̕◌̀◌֮◌̂b; à◌֮◌̂◌̕b; a◌֮◌̀◌̂◌̕b; à◌֮◌̂◌̕b; a◌֮◌̀◌̂◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CIRCUMFLEX ACCENT, LATIN SMALL LETTER B
+0061 0302 0315 0300 05AE 0062;1EA7 05AE 0315 0062;0061 05AE 0302 0300 0315 0062;1EA7 05AE 0315 0062;0061 05AE 0302 0300 0315 0062; # (a◌̂◌̕◌̀◌֮b; ầ◌֮◌̕b; a◌֮◌̂◌̀◌̕b; ầ◌֮◌̕b; a◌֮◌̂◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CIRCUMFLEX ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0303 0062;00E0 05AE 0303 0315 0062;0061 05AE 0300 0303 0315 0062;00E0 05AE 0303 0315 0062;0061 05AE 0300 0303 0315 0062; # (a◌̕◌̀◌֮◌̃b; à◌֮◌̃◌̕b; a◌֮◌̀◌̃◌̕b; à◌֮◌̃◌̕b; a◌֮◌̀◌̃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING TILDE, LATIN SMALL LETTER B
+0061 0303 0315 0300 05AE 0062;00E3 05AE 0300 0315 0062;0061 05AE 0303 0300 0315 0062;00E3 05AE 0300 0315 0062;0061 05AE 0303 0300 0315 0062; # (a◌̃◌̕◌̀◌֮b; ã◌֮◌̀◌̕b; a◌֮◌̃◌̀◌̕b; ã◌֮◌̀◌̕b; a◌֮◌̃◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING TILDE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0304 0062;00E0 05AE 0304 0315 0062;0061 05AE 0300 0304 0315 0062;00E0 05AE 0304 0315 0062;0061 05AE 0300 0304 0315 0062; # (a◌̕◌̀◌֮◌̄b; à◌֮◌̄◌̕b; a◌֮◌̀◌̄◌̕b; à◌֮◌̄◌̕b; a◌֮◌̀◌̄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING MACRON, LATIN SMALL LETTER B
+0061 0304 0315 0300 05AE 0062;0101 05AE 0300 0315 0062;0061 05AE 0304 0300 0315 0062;0101 05AE 0300 0315 0062;0061 05AE 0304 0300 0315 0062; # (a◌̄◌̕◌̀◌֮b; ā◌֮◌̀◌̕b; a◌֮◌̄◌̀◌̕b; ā◌֮◌̀◌̕b; a◌֮◌̄◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0305 0062;00E0 05AE 0305 0315 0062;0061 05AE 0300 0305 0315 0062;00E0 05AE 0305 0315 0062;0061 05AE 0300 0305 0315 0062; # (a◌̕◌̀◌֮◌̅b; à◌֮◌̅◌̕b; a◌֮◌̀◌̅◌̕b; à◌֮◌̅◌̕b; a◌֮◌̀◌̅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING OVERLINE, LATIN SMALL LETTER B
+0061 0305 0315 0300 05AE 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062; # (a◌̅◌̕◌̀◌֮b; a◌֮◌̅◌̀◌̕b; a◌֮◌̅◌̀◌̕b; a◌֮◌̅◌̀◌̕b; a◌֮◌̅◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING OVERLINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0306 0062;00E0 05AE 0306 0315 0062;0061 05AE 0300 0306 0315 0062;00E0 05AE 0306 0315 0062;0061 05AE 0300 0306 0315 0062; # (a◌̕◌̀◌֮◌̆b; à◌֮◌̆◌̕b; a◌֮◌̀◌̆◌̕b; à◌֮◌̆◌̕b; a◌֮◌̀◌̆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING BREVE, LATIN SMALL LETTER B
+0061 0306 0315 0300 05AE 0062;1EB1 05AE 0315 0062;0061 05AE 0306 0300 0315 0062;1EB1 05AE 0315 0062;0061 05AE 0306 0300 0315 0062; # (a◌̆◌̕◌̀◌֮b; ằ◌֮◌̕b; a◌֮◌̆◌̀◌̕b; ằ◌֮◌̕b; a◌֮◌̆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING BREVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0307 0062;00E0 05AE 0307 0315 0062;0061 05AE 0300 0307 0315 0062;00E0 05AE 0307 0315 0062;0061 05AE 0300 0307 0315 0062; # (a◌̕◌̀◌֮◌̇b; à◌֮◌̇◌̕b; a◌֮◌̀◌̇◌̕b; à◌֮◌̇◌̕b; a◌֮◌̀◌̇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOT ABOVE, LATIN SMALL LETTER B
+0061 0307 0315 0300 05AE 0062;0227 05AE 0300 0315 0062;0061 05AE 0307 0300 0315 0062;0227 05AE 0300 0315 0062;0061 05AE 0307 0300 0315 0062; # (a◌̇◌̕◌̀◌֮b; ȧ◌֮◌̀◌̕b; a◌֮◌̇◌̀◌̕b; ȧ◌֮◌̀◌̕b; a◌֮◌̇◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0308 0062;00E0 05AE 0308 0315 0062;0061 05AE 0300 0308 0315 0062;00E0 05AE 0308 0315 0062;0061 05AE 0300 0308 0315 0062; # (a◌̕◌̀◌֮◌̈b; à◌֮◌̈◌̕b; a◌֮◌̀◌̈◌̕b; à◌֮◌̈◌̕b; a◌֮◌̀◌̈◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DIAERESIS, LATIN SMALL LETTER B
+0061 0308 0315 0300 05AE 0062;00E4 05AE 0300 0315 0062;0061 05AE 0308 0300 0315 0062;00E4 05AE 0300 0315 0062;0061 05AE 0308 0300 0315 0062; # (a◌̈◌̕◌̀◌֮b; ä◌֮◌̀◌̕b; a◌֮◌̈◌̀◌̕b; ä◌֮◌̀◌̕b; a◌֮◌̈◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DIAERESIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0309 0062;00E0 05AE 0309 0315 0062;0061 05AE 0300 0309 0315 0062;00E0 05AE 0309 0315 0062;0061 05AE 0300 0309 0315 0062; # (a◌̕◌̀◌֮◌̉b; à◌֮◌̉◌̕b; a◌֮◌̀◌̉◌̕b; à◌֮◌̉◌̕b; a◌֮◌̀◌̉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING HOOK ABOVE, LATIN SMALL LETTER B
+0061 0309 0315 0300 05AE 0062;1EA3 05AE 0300 0315 0062;0061 05AE 0309 0300 0315 0062;1EA3 05AE 0300 0315 0062;0061 05AE 0309 0300 0315 0062; # (a◌̉◌̕◌̀◌֮b; ả◌֮◌̀◌̕b; a◌֮◌̉◌̀◌̕b; ả◌֮◌̀◌̕b; a◌֮◌̉◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING HOOK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 030A 0062;00E0 05AE 030A 0315 0062;0061 05AE 0300 030A 0315 0062;00E0 05AE 030A 0315 0062;0061 05AE 0300 030A 0315 0062; # (a◌̕◌̀◌֮◌̊b; à◌֮◌̊◌̕b; a◌֮◌̀◌̊◌̕b; à◌֮◌̊◌̕b; a◌֮◌̀◌̊◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RING ABOVE, LATIN SMALL LETTER B
+0061 030A 0315 0300 05AE 0062;00E5 05AE 0300 0315 0062;0061 05AE 030A 0300 0315 0062;00E5 05AE 0300 0315 0062;0061 05AE 030A 0300 0315 0062; # (a◌̊◌̕◌̀◌֮b; å◌֮◌̀◌̕b; a◌֮◌̊◌̀◌̕b; å◌֮◌̀◌̕b; a◌֮◌̊◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RING ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 030B 0062;00E0 05AE 030B 0315 0062;0061 05AE 0300 030B 0315 0062;00E0 05AE 030B 0315 0062;0061 05AE 0300 030B 0315 0062; # (a◌̕◌̀◌֮◌̋b; à◌֮◌̋◌̕b; a◌֮◌̀◌̋◌̕b; à◌֮◌̋◌̕b; a◌֮◌̀◌̋◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE ACUTE ACCENT, LATIN SMALL LETTER B
+0061 030B 0315 0300 05AE 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062; # (a◌̋◌̕◌̀◌֮b; a◌֮◌̋◌̀◌̕b; a◌֮◌̋◌̀◌̕b; a◌֮◌̋◌̀◌̕b; a◌֮◌̋◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 030C 0062;00E0 05AE 030C 0315 0062;0061 05AE 0300 030C 0315 0062;00E0 05AE 030C 0315 0062;0061 05AE 0300 030C 0315 0062; # (a◌̕◌̀◌֮◌̌b; à◌֮◌̌◌̕b; a◌֮◌̀◌̌◌̕b; à◌֮◌̌◌̕b; a◌֮◌̀◌̌◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CARON, LATIN SMALL LETTER B
+0061 030C 0315 0300 05AE 0062;01CE 05AE 0300 0315 0062;0061 05AE 030C 0300 0315 0062;01CE 05AE 0300 0315 0062;0061 05AE 030C 0300 0315 0062; # (a◌̌◌̕◌̀◌֮b; ǎ◌֮◌̀◌̕b; a◌֮◌̌◌̀◌̕b; ǎ◌֮◌̀◌̕b; a◌֮◌̌◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CARON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 030D 0062;00E0 05AE 030D 0315 0062;0061 05AE 0300 030D 0315 0062;00E0 05AE 030D 0315 0062;0061 05AE 0300 030D 0315 0062; # (a◌̕◌̀◌֮◌̍b; à◌֮◌̍◌̕b; a◌֮◌̀◌̍◌̕b; à◌֮◌̍◌̕b; a◌֮◌̀◌̍◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING VERTICAL LINE ABOVE, LATIN SMALL LETTER B
+0061 030D 0315 0300 05AE 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062; # (a◌̍◌̕◌̀◌֮b; a◌֮◌̍◌̀◌̕b; a◌֮◌̍◌̀◌̕b; a◌֮◌̍◌̀◌̕b; a◌֮◌̍◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL LINE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 030E 0062;00E0 05AE 030E 0315 0062;0061 05AE 0300 030E 0315 0062;00E0 05AE 030E 0315 0062;0061 05AE 0300 030E 0315 0062; # (a◌̕◌̀◌֮◌̎b; à◌֮◌̎◌̕b; a◌֮◌̀◌̎◌̕b; à◌֮◌̎◌̕b; a◌֮◌̀◌̎◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE VERTICAL LINE ABOVE, LATIN SMALL LETTER B
+0061 030E 0315 0300 05AE 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062; # (a◌̎◌̕◌̀◌֮b; a◌֮◌̎◌̀◌̕b; a◌֮◌̎◌̀◌̕b; a◌֮◌̎◌̀◌̕b; a◌֮◌̎◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE VERTICAL LINE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 030F 0062;00E0 05AE 030F 0315 0062;0061 05AE 0300 030F 0315 0062;00E0 05AE 030F 0315 0062;0061 05AE 0300 030F 0315 0062; # (a◌̕◌̀◌֮◌̏b; à◌֮◌̏◌̕b; a◌֮◌̀◌̏◌̕b; à◌֮◌̏◌̕b; a◌֮◌̀◌̏◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE GRAVE ACCENT, LATIN SMALL LETTER B
+0061 030F 0315 0300 05AE 0062;0201 05AE 0300 0315 0062;0061 05AE 030F 0300 0315 0062;0201 05AE 0300 0315 0062;0061 05AE 030F 0300 0315 0062; # (a◌̏◌̕◌̀◌֮b; ȁ◌֮◌̀◌̕b; a◌֮◌̏◌̀◌̕b; ȁ◌֮◌̀◌̕b; a◌֮◌̏◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0310 0062;00E0 05AE 0310 0315 0062;0061 05AE 0300 0310 0315 0062;00E0 05AE 0310 0315 0062;0061 05AE 0300 0310 0315 0062; # (a◌̕◌̀◌֮◌̐b; à◌֮◌̐◌̕b; a◌֮◌̀◌̐◌̕b; à◌֮◌̐◌̕b; a◌֮◌̀◌̐◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CANDRABINDU, LATIN SMALL LETTER B
+0061 0310 0315 0300 05AE 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062; # (a◌̐◌̕◌̀◌֮b; a◌֮◌̐◌̀◌̕b; a◌֮◌̐◌̀◌̕b; a◌֮◌̐◌̀◌̕b; a◌֮◌̐◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CANDRABINDU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0311 0062;00E0 05AE 0311 0315 0062;0061 05AE 0300 0311 0315 0062;00E0 05AE 0311 0315 0062;0061 05AE 0300 0311 0315 0062; # (a◌̕◌̀◌֮◌̑b; à◌֮◌̑◌̕b; a◌֮◌̀◌̑◌̕b; à◌֮◌̑◌̕b; a◌֮◌̀◌̑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING INVERTED BREVE, LATIN SMALL LETTER B
+0061 0311 0315 0300 05AE 0062;0203 05AE 0300 0315 0062;0061 05AE 0311 0300 0315 0062;0203 05AE 0300 0315 0062;0061 05AE 0311 0300 0315 0062; # (a◌̑◌̕◌̀◌֮b; ȃ◌֮◌̀◌̕b; a◌֮◌̑◌̀◌̕b; ȃ◌֮◌̀◌̕b; a◌֮◌̑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING INVERTED BREVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0312 0062;00E0 05AE 0312 0315 0062;0061 05AE 0300 0312 0315 0062;00E0 05AE 0312 0315 0062;0061 05AE 0300 0312 0315 0062; # (a◌̕◌̀◌֮◌̒b; à◌֮◌̒◌̕b; a◌֮◌̀◌̒◌̕b; à◌֮◌̒◌̕b; a◌֮◌̀◌̒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING TURNED COMMA ABOVE, LATIN SMALL LETTER B
+0061 0312 0315 0300 05AE 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062; # (a◌̒◌̕◌̀◌֮b; a◌֮◌̒◌̀◌̕b; a◌֮◌̒◌̀◌̕b; a◌֮◌̒◌̀◌̕b; a◌֮◌̒◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING TURNED COMMA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0313 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062; # (a◌̕◌̀◌֮◌̓b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING COMMA ABOVE, LATIN SMALL LETTER B
+0061 0313 0315 0300 05AE 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062; # (a◌̓◌̕◌̀◌֮b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0314 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062; # (a◌̕◌̀◌֮◌̔b; à◌֮◌̔◌̕b; a◌֮◌̀◌̔◌̕b; à◌֮◌̔◌̕b; a◌֮◌̀◌̔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING REVERSED COMMA ABOVE, LATIN SMALL LETTER B
+0061 0314 0315 0300 05AE 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062; # (a◌̔◌̕◌̀◌֮b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING REVERSED COMMA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0362 0315 0300 0315 0062;00E0 0315 0315 0362 0062;0061 0300 0315 0315 0362 0062;00E0 0315 0315 0362 0062;0061 0300 0315 0315 0362 0062; # (a◌͢◌̕◌̀◌̕b; à◌̕◌̕◌͢b; a◌̀◌̕◌̕◌͢b; à◌̕◌̕◌͢b; a◌̀◌̕◌̕◌͢b; ) LATIN SMALL LETTER A, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B
+0061 0315 0362 0315 0300 0062;00E0 0315 0315 0362 0062;0061 0300 0315 0315 0362 0062;00E0 0315 0315 0362 0062;0061 0300 0315 0315 0362 0062; # (a◌̕◌͢◌̕◌̀b; à◌̕◌̕◌͢b; a◌̀◌̕◌̕◌͢b; à◌̕◌̕◌͢b; a◌̀◌̕◌̕◌͢b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
+0061 059A 0316 302A 0316 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; # (a◌֚◌̖◌〪◌̖b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
+0061 0316 059A 0316 302A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; # (a◌̖◌֚◌̖◌〪b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0317 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062; # (a◌֚◌̖◌〪◌̗b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING ACUTE ACCENT BELOW, LATIN SMALL LETTER B
+0061 0317 059A 0316 302A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062; # (a◌̗◌֚◌̖◌〪b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING ACUTE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0318 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062; # (a◌֚◌̖◌〪◌̘b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT TACK BELOW, LATIN SMALL LETTER B
+0061 0318 059A 0316 302A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062; # (a◌̘◌֚◌̖◌〪b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0319 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062; # (a◌֚◌̖◌〪◌̙b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT TACK BELOW, LATIN SMALL LETTER B
+0061 0319 059A 0316 302A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062; # (a◌̙◌֚◌̖◌〪b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0362 0315 0300 031A 0062;00E0 0315 031A 0362 0062;0061 0300 0315 031A 0362 0062;00E0 0315 031A 0362 0062;0061 0300 0315 031A 0362 0062; # (a◌͢◌̕◌̀◌̚b; à◌̕◌̚◌͢b; a◌̀◌̕◌̚◌͢b; à◌̕◌̚◌͢b; a◌̀◌̕◌̚◌͢b; ) LATIN SMALL LETTER A, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, COMBINING LEFT ANGLE ABOVE, LATIN SMALL LETTER B
+0061 031A 0362 0315 0300 0062;00E0 031A 0315 0362 0062;0061 0300 031A 0315 0362 0062;00E0 031A 0315 0362 0062;0061 0300 031A 0315 0362 0062; # (a◌̚◌͢◌̕◌̀b; à◌̚◌̕◌͢b; a◌̀◌̚◌̕◌͢b; à◌̚◌̕◌͢b; a◌̀◌̚◌̕◌͢b; ) LATIN SMALL LETTER A, COMBINING LEFT ANGLE ABOVE, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
+0061 302A 031B 0321 031B 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062; # (a◌〪◌̛◌̡◌̛b; a◌̡◌̛◌̛◌〪b; a◌̡◌̛◌̛◌〪b; a◌̡◌̛◌̛◌〪b; a◌̡◌̛◌̛◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, COMBINING HORN, LATIN SMALL LETTER B
+0061 031B 302A 031B 0321 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062; # (a◌̛◌〪◌̛◌̡b; a◌̡◌̛◌̛◌〪b; a◌̡◌̛◌̛◌〪b; a◌̡◌̛◌̛◌〪b; a◌̡◌̛◌̛◌〪b; ) LATIN SMALL LETTER A, COMBINING HORN, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, LATIN SMALL LETTER B
+0061 059A 0316 302A 031C 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062; # (a◌֚◌̖◌〪◌̜b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT HALF RING BELOW, LATIN SMALL LETTER B
+0061 031C 059A 0316 302A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062; # (a◌̜◌֚◌̖◌〪b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 031D 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062; # (a◌֚◌̖◌〪◌̝b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING UP TACK BELOW, LATIN SMALL LETTER B
+0061 031D 059A 0316 302A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062; # (a◌̝◌֚◌̖◌〪b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING UP TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 031E 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062; # (a◌֚◌̖◌〪◌̞b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOWN TACK BELOW, LATIN SMALL LETTER B
+0061 031E 059A 0316 302A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062; # (a◌̞◌֚◌̖◌〪b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOWN TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 031F 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062; # (a◌֚◌̖◌〪◌̟b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING PLUS SIGN BELOW, LATIN SMALL LETTER B
+0061 031F 059A 0316 302A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062; # (a◌̟◌֚◌̖◌〪b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING PLUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0320 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062; # (a◌֚◌̖◌〪◌̠b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING MINUS SIGN BELOW, LATIN SMALL LETTER B
+0061 0320 059A 0316 302A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062; # (a◌̠◌֚◌̖◌〪b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING MINUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 031B 0321 0F74 0321 0062;0061 0F74 0321 0321 031B 0062;0061 0F74 0321 0321 031B 0062;0061 0F74 0321 0321 031B 0062;0061 0F74 0321 0321 031B 0062; # (a◌̛◌̡◌ུ◌̡b; a◌ུ◌̡◌̡◌̛b; a◌ུ◌̡◌̡◌̛b; a◌ུ◌̡◌̡◌̛b; a◌ུ◌̡◌̡◌̛b; ) LATIN SMALL LETTER A, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING PALATALIZED HOOK BELOW, LATIN SMALL LETTER B
+0061 0321 031B 0321 0F74 0062;0061 0F74 0321 0321 031B 0062;0061 0F74 0321 0321 031B 0062;0061 0F74 0321 0321 031B 0062;0061 0F74 0321 0321 031B 0062; # (a◌̡◌̛◌̡◌ུb; a◌ུ◌̡◌̡◌̛b; a◌ུ◌̡◌̡◌̛b; a◌ུ◌̡◌̡◌̛b; a◌ུ◌̡◌̡◌̛b; ) LATIN SMALL LETTER A, COMBINING PALATALIZED HOOK BELOW, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
+0061 031B 0321 0F74 0322 0062;0061 0F74 0321 0322 031B 0062;0061 0F74 0321 0322 031B 0062;0061 0F74 0321 0322 031B 0062;0061 0F74 0321 0322 031B 0062; # (a◌̛◌̡◌ུ◌̢b; a◌ུ◌̡◌̢◌̛b; a◌ུ◌̡◌̢◌̛b; a◌ུ◌̡◌̢◌̛b; a◌ུ◌̡◌̢◌̛b; ) LATIN SMALL LETTER A, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING RETROFLEX HOOK BELOW, LATIN SMALL LETTER B
+0061 0322 031B 0321 0F74 0062;0061 0F74 0322 0321 031B 0062;0061 0F74 0322 0321 031B 0062;0061 0F74 0322 0321 031B 0062;0061 0F74 0322 0321 031B 0062; # (a◌̢◌̛◌̡◌ུb; a◌ུ◌̢◌̡◌̛b; a◌ུ◌̢◌̡◌̛b; a◌ུ◌̢◌̡◌̛b; a◌ུ◌̢◌̡◌̛b; ) LATIN SMALL LETTER A, COMBINING RETROFLEX HOOK BELOW, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
+0061 059A 0316 302A 0323 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062; # (a◌֚◌̖◌〪◌̣b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOT BELOW, LATIN SMALL LETTER B
+0061 0323 059A 0316 302A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062; # (a◌̣◌֚◌̖◌〪b; ạ◌〪◌̖◌֚b; a◌〪◌̣◌̖◌֚b; ạ◌〪◌̖◌֚b; a◌〪◌̣◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0324 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062; # (a◌֚◌̖◌〪◌̤b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DIAERESIS BELOW, LATIN SMALL LETTER B
+0061 0324 059A 0316 302A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062; # (a◌̤◌֚◌̖◌〪b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DIAERESIS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0325 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062; # (a◌֚◌̖◌〪◌̥b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RING BELOW, LATIN SMALL LETTER B
+0061 0325 059A 0316 302A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062; # (a◌̥◌֚◌̖◌〪b; ḁ◌〪◌̖◌֚b; a◌〪◌̥◌̖◌֚b; ḁ◌〪◌̖◌֚b; a◌〪◌̥◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0326 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062; # (a◌֚◌̖◌〪◌̦b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING COMMA BELOW, LATIN SMALL LETTER B
+0061 0326 059A 0316 302A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062; # (a◌̦◌֚◌̖◌〪b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING COMMA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 031B 0321 0F74 0327 0062;0061 0F74 0321 0327 031B 0062;0061 0F74 0321 0327 031B 0062;0061 0F74 0321 0327 031B 0062;0061 0F74 0321 0327 031B 0062; # (a◌̛◌̡◌ུ◌̧b; a◌ུ◌̡◌̧◌̛b; a◌ུ◌̡◌̧◌̛b; a◌ུ◌̡◌̧◌̛b; a◌ུ◌̡◌̧◌̛b; ) LATIN SMALL LETTER A, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING CEDILLA, LATIN SMALL LETTER B
+0061 0327 031B 0321 0F74 0062;0061 0F74 0327 0321 031B 0062;0061 0F74 0327 0321 031B 0062;0061 0F74 0327 0321 031B 0062;0061 0F74 0327 0321 031B 0062; # (a◌̧◌̛◌̡◌ུb; a◌ུ◌̧◌̡◌̛b; a◌ུ◌̧◌̡◌̛b; a◌ུ◌̧◌̡◌̛b; a◌ུ◌̧◌̡◌̛b; ) LATIN SMALL LETTER A, COMBINING CEDILLA, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
+0061 031B 0321 0F74 0328 0062;0061 0F74 0321 0328 031B 0062;0061 0F74 0321 0328 031B 0062;0061 0F74 0321 0328 031B 0062;0061 0F74 0321 0328 031B 0062; # (a◌̛◌̡◌ུ◌̨b; a◌ུ◌̡◌̨◌̛b; a◌ུ◌̡◌̨◌̛b; a◌ུ◌̡◌̨◌̛b; a◌ུ◌̡◌̨◌̛b; ) LATIN SMALL LETTER A, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING OGONEK, LATIN SMALL LETTER B
+0061 0328 031B 0321 0F74 0062;0105 0F74 0321 031B 0062;0061 0F74 0328 0321 031B 0062;0105 0F74 0321 031B 0062;0061 0F74 0328 0321 031B 0062; # (a◌̨◌̛◌̡◌ུb; ą◌ུ◌̡◌̛b; a◌ུ◌̨◌̡◌̛b; ą◌ུ◌̡◌̛b; a◌ུ◌̨◌̡◌̛b; ) LATIN SMALL LETTER A, COMBINING OGONEK, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
+0061 059A 0316 302A 0329 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062; # (a◌֚◌̖◌〪◌̩b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING VERTICAL LINE BELOW, LATIN SMALL LETTER B
+0061 0329 059A 0316 302A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062; # (a◌̩◌֚◌̖◌〪b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 032A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062; # (a◌֚◌̖◌〪◌̪b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING BRIDGE BELOW, LATIN SMALL LETTER B
+0061 032A 059A 0316 302A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062; # (a◌̪◌֚◌̖◌〪b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 032B 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062; # (a◌֚◌̖◌〪◌̫b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING INVERTED DOUBLE ARCH BELOW, LATIN SMALL LETTER B
+0061 032B 059A 0316 302A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062; # (a◌̫◌֚◌̖◌〪b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING INVERTED DOUBLE ARCH BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 032C 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062; # (a◌֚◌̖◌〪◌̬b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING CARON BELOW, LATIN SMALL LETTER B
+0061 032C 059A 0316 302A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062; # (a◌̬◌֚◌̖◌〪b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING CARON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 032D 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062; # (a◌֚◌̖◌〪◌̭b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING CIRCUMFLEX ACCENT BELOW, LATIN SMALL LETTER B
+0061 032D 059A 0316 302A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062; # (a◌̭◌֚◌̖◌〪b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING CIRCUMFLEX ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 032E 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062; # (a◌֚◌̖◌〪◌̮b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING BREVE BELOW, LATIN SMALL LETTER B
+0061 032E 059A 0316 302A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062; # (a◌̮◌֚◌̖◌〪b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 032F 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062; # (a◌֚◌̖◌〪◌̯b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING INVERTED BREVE BELOW, LATIN SMALL LETTER B
+0061 032F 059A 0316 302A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062; # (a◌̯◌֚◌̖◌〪b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING INVERTED BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0330 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062; # (a◌֚◌̖◌〪◌̰b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING TILDE BELOW, LATIN SMALL LETTER B
+0061 0330 059A 0316 302A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062; # (a◌̰◌֚◌̖◌〪b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING TILDE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0331 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062; # (a◌֚◌̖◌〪◌̱b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING MACRON BELOW, LATIN SMALL LETTER B
+0061 0331 059A 0316 302A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062; # (a◌̱◌֚◌̖◌〪b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING MACRON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0332 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062; # (a◌֚◌̖◌〪◌̲b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LOW LINE, LATIN SMALL LETTER B
+0061 0332 059A 0316 302A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062; # (a◌̲◌֚◌̖◌〪b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0333 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062; # (a◌֚◌̖◌〪◌̳b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOUBLE LOW LINE, LATIN SMALL LETTER B
+0061 0333 059A 0316 302A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062; # (a◌̳◌֚◌̖◌〪b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOUBLE LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 093C 0334 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062; # (a◌़◌̴◌̴b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 0334 093C 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062; # (a◌̴◌़◌̴b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING TILDE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 093C 0334 0335 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062; # (a◌़◌̴◌̵b; a◌̴◌̵◌़b; a◌̴◌̵◌़b; a◌̴◌̵◌़b; a◌̴◌̵◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING SHORT STROKE OVERLAY, LATIN SMALL LETTER B
+0061 0335 093C 0334 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062; # (a◌̵◌़◌̴b; a◌̵◌̴◌़b; a◌̵◌̴◌़b; a◌̵◌̴◌़b; a◌̵◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING SHORT STROKE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 093C 0334 0336 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062; # (a◌़◌̴◌̶b; a◌̴◌̶◌़b; a◌̴◌̶◌़b; a◌̴◌̶◌़b; a◌̴◌̶◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LONG STROKE OVERLAY, LATIN SMALL LETTER B
+0061 0336 093C 0334 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062; # (a◌̶◌़◌̴b; a◌̶◌̴◌़b; a◌̶◌̴◌़b; a◌̶◌̴◌़b; a◌̶◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LONG STROKE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 093C 0334 0337 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062; # (a◌़◌̴◌̷b; a◌̴◌̷◌़b; a◌̴◌̷◌़b; a◌̴◌̷◌़b; a◌̴◌̷◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING SHORT SOLIDUS OVERLAY, LATIN SMALL LETTER B
+0061 0337 093C 0334 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062; # (a◌̷◌़◌̴b; a◌̷◌̴◌़b; a◌̷◌̴◌़b; a◌̷◌̴◌़b; a◌̷◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING SHORT SOLIDUS OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 093C 0334 0338 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062; # (a◌़◌̴◌̸b; a◌̴◌̸◌़b; a◌̴◌̸◌़b; a◌̴◌̸◌़b; a◌̴◌̸◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LONG SOLIDUS OVERLAY, LATIN SMALL LETTER B
+0061 0338 093C 0334 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062; # (a◌̸◌़◌̴b; a◌̸◌̴◌़b; a◌̸◌̴◌़b; a◌̸◌̴◌़b; a◌̸◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LONG SOLIDUS OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 059A 0316 302A 0339 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062; # (a◌֚◌̖◌〪◌̹b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT HALF RING BELOW, LATIN SMALL LETTER B
+0061 0339 059A 0316 302A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062; # (a◌̹◌֚◌̖◌〪b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 033A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062; # (a◌֚◌̖◌〪◌̺b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING INVERTED BRIDGE BELOW, LATIN SMALL LETTER B
+0061 033A 059A 0316 302A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062; # (a◌̺◌֚◌̖◌〪b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING INVERTED BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 033B 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062; # (a◌֚◌̖◌〪◌̻b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING SQUARE BELOW, LATIN SMALL LETTER B
+0061 033B 059A 0316 302A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062; # (a◌̻◌֚◌̖◌〪b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING SQUARE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 033C 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062; # (a◌֚◌̖◌〪◌̼b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING SEAGULL BELOW, LATIN SMALL LETTER B
+0061 033C 059A 0316 302A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062; # (a◌̼◌֚◌̖◌〪b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING SEAGULL BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 033D 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062; # (a◌̕◌̀◌֮◌̽b; à◌֮◌̽◌̕b; a◌֮◌̀◌̽◌̕b; à◌֮◌̽◌̕b; a◌֮◌̀◌̽◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING X ABOVE, LATIN SMALL LETTER B
+0061 033D 0315 0300 05AE 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062; # (a◌̽◌̕◌̀◌֮b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING X ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 033E 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062; # (a◌̕◌̀◌֮◌̾b; à◌֮◌̾◌̕b; a◌֮◌̀◌̾◌̕b; à◌֮◌̾◌̕b; a◌֮◌̀◌̾◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING VERTICAL TILDE, LATIN SMALL LETTER B
+0061 033E 0315 0300 05AE 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062; # (a◌̾◌̕◌̀◌֮b; a◌֮◌̾◌̀◌̕b; a◌֮◌̾◌̀◌̕b; a◌֮◌̾◌̀◌̕b; a◌֮◌̾◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL TILDE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 033F 0062;00E0 05AE 033F 0315 0062;0061 05AE 0300 033F 0315 0062;00E0 05AE 033F 0315 0062;0061 05AE 0300 033F 0315 0062; # (a◌̕◌̀◌֮◌̿b; à◌֮◌̿◌̕b; a◌֮◌̀◌̿◌̕b; à◌֮◌̿◌̕b; a◌֮◌̀◌̿◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE OVERLINE, LATIN SMALL LETTER B
+0061 033F 0315 0300 05AE 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062; # (a◌̿◌̕◌̀◌֮b; a◌֮◌̿◌̀◌̕b; a◌֮◌̿◌̀◌̕b; a◌֮◌̿◌̀◌̕b; a◌֮◌̿◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE OVERLINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0340 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̕◌̀◌֮◌̀b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRAVE TONE MARK, LATIN SMALL LETTER B
+0061 0340 0315 0300 05AE 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̀◌̕◌̀◌֮b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRAVE TONE MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0341 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062; # (a◌̕◌̀◌֮◌́b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ACUTE TONE MARK, LATIN SMALL LETTER B
+0061 0341 0315 0300 05AE 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062; # (a◌́◌̕◌̀◌֮b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ACUTE TONE MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0342 0062;00E0 05AE 0342 0315 0062;0061 05AE 0300 0342 0315 0062;00E0 05AE 0342 0315 0062;0061 05AE 0300 0342 0315 0062; # (a◌̕◌̀◌֮◌͂b; à◌֮◌͂◌̕b; a◌֮◌̀◌͂◌̕b; à◌֮◌͂◌̕b; a◌֮◌̀◌͂◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK PERISPOMENI, LATIN SMALL LETTER B
+0061 0342 0315 0300 05AE 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062; # (a◌͂◌̕◌̀◌֮b; a◌֮◌͂◌̀◌̕b; a◌֮◌͂◌̀◌̕b; a◌֮◌͂◌̀◌̕b; a◌֮◌͂◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK PERISPOMENI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0343 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062; # (a◌̕◌̀◌֮◌̓b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK KORONIS, LATIN SMALL LETTER B
+0061 0343 0315 0300 05AE 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062; # (a◌̓◌̕◌̀◌֮b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK KORONIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0344 0062;00E0 05AE 0308 0301 0315 0062;0061 05AE 0300 0308 0301 0315 0062;00E0 05AE 0308 0301 0315 0062;0061 05AE 0300 0308 0301 0315 0062; # (a◌̕◌̀◌֮◌̈́b; à◌֮◌̈◌́◌̕b; a◌֮◌̀◌̈◌́◌̕b; à◌֮◌̈◌́◌̕b; a◌֮◌̀◌̈◌́◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK DIALYTIKA TONOS, LATIN SMALL LETTER B
+0061 0344 0315 0300 05AE 0062;00E4 05AE 0301 0300 0315 0062;0061 05AE 0308 0301 0300 0315 0062;00E4 05AE 0301 0300 0315 0062;0061 05AE 0308 0301 0300 0315 0062; # (a◌̈́◌̕◌̀◌֮b; ä◌֮◌́◌̀◌̕b; a◌֮◌̈◌́◌̀◌̕b; ä◌֮◌́◌̀◌̕b; a◌֮◌̈◌́◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK DIALYTIKA TONOS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0345 0360 0345 0062;0061 0360 0345 0345 0062;0061 0360 0345 0345 0062;0061 0360 0345 0345 0062;0061 0360 0345 0345 0062; # (a◌ͅ◌͠◌ͅb; a◌͠◌ͅ◌ͅb; a◌͠◌ͅ◌ͅb; a◌͠◌ͅ◌ͅb; a◌͠◌ͅ◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE TILDE, COMBINING GREEK YPOGEGRAMMENI, LATIN SMALL LETTER B
+0061 0345 0345 0360 0062;0061 0360 0345 0345 0062;0061 0360 0345 0345 0062;0061 0360 0345 0345 0062;0061 0360 0345 0345 0062; # (a◌ͅ◌ͅ◌͠b; a◌͠◌ͅ◌ͅb; a◌͠◌ͅ◌ͅb; a◌͠◌ͅ◌ͅb; a◌͠◌ͅ◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE TILDE, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0346 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062; # (a◌̕◌̀◌֮◌͆b; à◌֮◌͆◌̕b; a◌֮◌̀◌͆◌̕b; à◌֮◌͆◌̕b; a◌֮◌̀◌͆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING BRIDGE ABOVE, LATIN SMALL LETTER B
+0061 0346 0315 0300 05AE 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062; # (a◌͆◌̕◌̀◌֮b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING BRIDGE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0347 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062; # (a◌֚◌̖◌〪◌͇b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING EQUALS SIGN BELOW, LATIN SMALL LETTER B
+0061 0347 059A 0316 302A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062; # (a◌͇◌֚◌̖◌〪b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING EQUALS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0348 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062; # (a◌֚◌̖◌〪◌͈b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOUBLE VERTICAL LINE BELOW, LATIN SMALL LETTER B
+0061 0348 059A 0316 302A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062; # (a◌͈◌֚◌̖◌〪b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOUBLE VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0349 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062; # (a◌֚◌̖◌〪◌͉b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT ANGLE BELOW, LATIN SMALL LETTER B
+0061 0349 059A 0316 302A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062; # (a◌͉◌֚◌̖◌〪b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT ANGLE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 034A 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062; # (a◌̕◌̀◌֮◌͊b; à◌֮◌͊◌̕b; a◌֮◌̀◌͊◌̕b; à◌֮◌͊◌̕b; a◌֮◌̀◌͊◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING NOT TILDE ABOVE, LATIN SMALL LETTER B
+0061 034A 0315 0300 05AE 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062; # (a◌͊◌̕◌̀◌֮b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING NOT TILDE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 034B 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062; # (a◌̕◌̀◌֮◌͋b; à◌֮◌͋◌̕b; a◌֮◌̀◌͋◌̕b; à◌֮◌͋◌̕b; a◌֮◌̀◌͋◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING HOMOTHETIC ABOVE, LATIN SMALL LETTER B
+0061 034B 0315 0300 05AE 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062; # (a◌͋◌̕◌̀◌֮b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING HOMOTHETIC ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 034C 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062; # (a◌̕◌̀◌֮◌͌b; à◌֮◌͌◌̕b; a◌֮◌̀◌͌◌̕b; à◌֮◌͌◌̕b; a◌֮◌̀◌͌◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ALMOST EQUAL TO ABOVE, LATIN SMALL LETTER B
+0061 034C 0315 0300 05AE 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062; # (a◌͌◌̕◌̀◌֮b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ALMOST EQUAL TO ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 034D 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062; # (a◌֚◌̖◌〪◌͍b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT RIGHT ARROW BELOW, LATIN SMALL LETTER B
+0061 034D 059A 0316 302A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062; # (a◌͍◌֚◌̖◌〪b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT RIGHT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 034E 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062; # (a◌֚◌̖◌〪◌͎b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING UPWARDS ARROW BELOW, LATIN SMALL LETTER B
+0061 034E 059A 0316 302A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062; # (a◌͎◌֚◌̖◌〪b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING UPWARDS ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0345 0360 0362 0360 0062;0061 0362 0360 0360 0345 0062;0061 0362 0360 0360 0345 0062;0061 0362 0360 0360 0345 0062;0061 0362 0360 0360 0345 0062; # (a◌ͅ◌͠◌͢◌͠b; a◌͢◌͠◌͠◌ͅb; a◌͢◌͠◌͠◌ͅb; a◌͢◌͠◌͠◌ͅb; a◌͢◌͠◌͠◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE TILDE, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING DOUBLE TILDE, LATIN SMALL LETTER B
+0061 0360 0345 0360 0362 0062;0061 0362 0360 0360 0345 0062;0061 0362 0360 0360 0345 0062;0061 0362 0360 0360 0345 0062;0061 0362 0360 0360 0345 0062; # (a◌͠◌ͅ◌͠◌͢b; a◌͢◌͠◌͠◌ͅb; a◌͢◌͠◌͠◌ͅb; a◌͢◌͠◌͠◌ͅb; a◌͢◌͠◌͠◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE TILDE, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE TILDE, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, LATIN SMALL LETTER B
+0061 0345 0360 0362 0361 0062;0061 0362 0360 0361 0345 0062;0061 0362 0360 0361 0345 0062;0061 0362 0360 0361 0345 0062;0061 0362 0360 0361 0345 0062; # (a◌ͅ◌͠◌͢◌͡b; a◌͢◌͠◌͡◌ͅb; a◌͢◌͠◌͡◌ͅb; a◌͢◌͠◌͡◌ͅb; a◌͢◌͠◌͡◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE TILDE, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING DOUBLE INVERTED BREVE, LATIN SMALL LETTER B
+0061 0361 0345 0360 0362 0062;0061 0362 0361 0360 0345 0062;0061 0362 0361 0360 0345 0062;0061 0362 0361 0360 0345 0062;0061 0362 0361 0360 0345 0062; # (a◌͡◌ͅ◌͠◌͢b; a◌͢◌͡◌͠◌ͅb; a◌͢◌͡◌͠◌ͅb; a◌͢◌͡◌͠◌ͅb; a◌͢◌͡◌͠◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE INVERTED BREVE, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE TILDE, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, LATIN SMALL LETTER B
+0061 0360 0362 0315 0362 0062;0061 0315 0362 0362 0360 0062;0061 0315 0362 0362 0360 0062;0061 0315 0362 0362 0360 0062;0061 0315 0362 0362 0360 0062; # (a◌͠◌͢◌̕◌͢b; a◌̕◌͢◌͢◌͠b; a◌̕◌͢◌͢◌͠b; a◌̕◌͢◌͢◌͠b; a◌̕◌͢◌͢◌͠b; ) LATIN SMALL LETTER A, COMBINING DOUBLE TILDE, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, LATIN SMALL LETTER B
+0061 0362 0360 0362 0315 0062;0061 0315 0362 0362 0360 0062;0061 0315 0362 0362 0360 0062;0061 0315 0362 0362 0360 0062;0061 0315 0362 0362 0360 0062; # (a◌͢◌͠◌͢◌̕b; a◌̕◌͢◌͢◌͠b; a◌̕◌͢◌͢◌͠b; a◌̕◌͢◌͢◌͠b; a◌̕◌͢◌͢◌͠b; ) LATIN SMALL LETTER A, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING DOUBLE TILDE, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0483 0062;00E0 05AE 0483 0315 0062;0061 05AE 0300 0483 0315 0062;00E0 05AE 0483 0315 0062;0061 05AE 0300 0483 0315 0062; # (a◌̕◌̀◌֮◌҃b; à◌֮◌҃◌̕b; a◌֮◌̀◌҃◌̕b; à◌֮◌҃◌̕b; a◌֮◌̀◌҃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC TITLO, LATIN SMALL LETTER B
+0061 0483 0315 0300 05AE 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062; # (a◌҃◌̕◌̀◌֮b; a◌֮◌҃◌̀◌̕b; a◌֮◌҃◌̀◌̕b; a◌֮◌҃◌̀◌̕b; a◌֮◌҃◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC TITLO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0484 0062;00E0 05AE 0484 0315 0062;0061 05AE 0300 0484 0315 0062;00E0 05AE 0484 0315 0062;0061 05AE 0300 0484 0315 0062; # (a◌̕◌̀◌֮◌҄b; à◌֮◌҄◌̕b; a◌֮◌̀◌҄◌̕b; à◌֮◌҄◌̕b; a◌֮◌̀◌҄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC PALATALIZATION, LATIN SMALL LETTER B
+0061 0484 0315 0300 05AE 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062; # (a◌҄◌̕◌̀◌֮b; a◌֮◌҄◌̀◌̕b; a◌֮◌҄◌̀◌̕b; a◌֮◌҄◌̀◌̕b; a◌֮◌҄◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC PALATALIZATION, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0485 0062;00E0 05AE 0485 0315 0062;0061 05AE 0300 0485 0315 0062;00E0 05AE 0485 0315 0062;0061 05AE 0300 0485 0315 0062; # (a◌̕◌̀◌֮◌҅b; à◌֮◌҅◌̕b; a◌֮◌̀◌҅◌̕b; à◌֮◌҅◌̕b; a◌֮◌̀◌҅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC DASIA PNEUMATA, LATIN SMALL LETTER B
+0061 0485 0315 0300 05AE 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062; # (a◌҅◌̕◌̀◌֮b; a◌֮◌҅◌̀◌̕b; a◌֮◌҅◌̀◌̕b; a◌֮◌҅◌̀◌̕b; a◌֮◌҅◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC DASIA PNEUMATA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0486 0062;00E0 05AE 0486 0315 0062;0061 05AE 0300 0486 0315 0062;00E0 05AE 0486 0315 0062;0061 05AE 0300 0486 0315 0062; # (a◌̕◌̀◌֮◌҆b; à◌֮◌҆◌̕b; a◌֮◌̀◌҆◌̕b; à◌֮◌҆◌̕b; a◌֮◌̀◌҆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC PSILI PNEUMATA, LATIN SMALL LETTER B
+0061 0486 0315 0300 05AE 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062; # (a◌҆◌̕◌̀◌֮b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC PSILI PNEUMATA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0591 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062; # (a◌֚◌̖◌〪◌֑b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT ETNAHTA, LATIN SMALL LETTER B
+0061 0591 059A 0316 302A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062; # (a◌֑◌֚◌̖◌〪b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT ETNAHTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0592 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062; # (a◌̕◌̀◌֮◌֒b; à◌֮◌֒◌̕b; a◌֮◌̀◌֒◌̕b; à◌֮◌֒◌̕b; a◌֮◌̀◌֒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT SEGOL, LATIN SMALL LETTER B
+0061 0592 0315 0300 05AE 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062; # (a◌֒◌̕◌̀◌֮b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT SEGOL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0593 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062; # (a◌̕◌̀◌֮◌֓b; à◌֮◌֓◌̕b; a◌֮◌̀◌֓◌̕b; à◌֮◌֓◌̕b; a◌֮◌̀◌֓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT SHALSHELET, LATIN SMALL LETTER B
+0061 0593 0315 0300 05AE 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062; # (a◌֓◌̕◌̀◌֮b; a◌֮◌֓◌̀◌̕b; a◌֮◌֓◌̀◌̕b; a◌֮◌֓◌̀◌̕b; a◌֮◌֓◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT SHALSHELET, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0594 0062;00E0 05AE 0594 0315 0062;0061 05AE 0300 0594 0315 0062;00E0 05AE 0594 0315 0062;0061 05AE 0300 0594 0315 0062; # (a◌̕◌̀◌֮◌֔b; à◌֮◌֔◌̕b; a◌֮◌̀◌֔◌̕b; à◌֮◌֔◌̕b; a◌֮◌̀◌֔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ZAQEF QATAN, LATIN SMALL LETTER B
+0061 0594 0315 0300 05AE 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062; # (a◌֔◌̕◌̀◌֮b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZAQEF QATAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0595 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062; # (a◌̕◌̀◌֮◌֕b; à◌֮◌֕◌̕b; a◌֮◌̀◌֕◌̕b; à◌֮◌֕◌̕b; a◌֮◌̀◌֕◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ZAQEF GADOL, LATIN SMALL LETTER B
+0061 0595 0315 0300 05AE 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062; # (a◌֕◌̕◌̀◌֮b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZAQEF GADOL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0596 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062; # (a◌֚◌̖◌〪◌֖b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT TIPEHA, LATIN SMALL LETTER B
+0061 0596 059A 0316 302A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062; # (a◌֖◌֚◌̖◌〪b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT TIPEHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0597 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062; # (a◌̕◌̀◌֮◌֗b; à◌֮◌֗◌̕b; a◌֮◌̀◌֗◌̕b; à◌֮◌֗◌̕b; a◌֮◌̀◌֗◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT REVIA, LATIN SMALL LETTER B
+0061 0597 0315 0300 05AE 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062; # (a◌֗◌̕◌̀◌֮b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT REVIA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0598 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062; # (a◌̕◌̀◌֮◌֘b; à◌֮◌֘◌̕b; a◌֮◌̀◌֘◌̕b; à◌֮◌֘◌̕b; a◌֮◌̀◌֘◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ZARQA, LATIN SMALL LETTER B
+0061 0598 0315 0300 05AE 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062; # (a◌֘◌̕◌̀◌֮b; a◌֮◌֘◌̀◌̕b; a◌֮◌֘◌̀◌̕b; a◌֮◌֘◌̀◌̕b; a◌֮◌֘◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZARQA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0599 0062;00E0 05AE 0599 0315 0062;0061 05AE 0300 0599 0315 0062;00E0 05AE 0599 0315 0062;0061 05AE 0300 0599 0315 0062; # (a◌̕◌̀◌֮◌֙b; à◌֮◌֙◌̕b; a◌֮◌̀◌֙◌̕b; à◌֮◌֙◌̕b; a◌֮◌̀◌֙◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT PASHTA, LATIN SMALL LETTER B
+0061 0599 0315 0300 05AE 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062; # (a◌֙◌̕◌̀◌֮b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT PASHTA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 302E 059A 0316 059A 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; # (a◌〮◌֚◌̖◌֚b; a◌̖◌֚◌֚◌〮b; a◌̖◌֚◌֚◌〮b; a◌̖◌֚◌֚◌〮b; a◌̖◌֚◌֚◌〮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT YETIV, LATIN SMALL LETTER B
+0061 059A 302E 059A 0316 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; # (a◌֚◌〮◌֚◌̖b; a◌̖◌֚◌֚◌〮b; a◌̖◌֚◌֚◌〮b; a◌̖◌֚◌֚◌〮b; a◌̖◌֚◌֚◌〮b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
+0061 059A 0316 302A 059B 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062; # (a◌֚◌̖◌〪◌֛b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT TEVIR, LATIN SMALL LETTER B
+0061 059B 059A 0316 302A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062; # (a◌֛◌֚◌̖◌〪b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT TEVIR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 059C 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062; # (a◌̕◌̀◌֮◌֜b; à◌֮◌֜◌̕b; a◌֮◌̀◌֜◌̕b; à◌֮◌֜◌̕b; a◌֮◌̀◌֜◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT GERESH, LATIN SMALL LETTER B
+0061 059C 0315 0300 05AE 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062; # (a◌֜◌̕◌̀◌֮b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT GERESH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 059D 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062; # (a◌̕◌̀◌֮◌֝b; à◌֮◌֝◌̕b; a◌֮◌̀◌֝◌̕b; à◌֮◌֝◌̕b; a◌֮◌̀◌֝◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT GERESH MUQDAM, LATIN SMALL LETTER B
+0061 059D 0315 0300 05AE 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062; # (a◌֝◌̕◌̀◌֮b; a◌֮◌֝◌̀◌̕b; a◌֮◌֝◌̀◌̕b; a◌֮◌֝◌̀◌̕b; a◌֮◌֝◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT GERESH MUQDAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 059E 0062;00E0 05AE 059E 0315 0062;0061 05AE 0300 059E 0315 0062;00E0 05AE 059E 0315 0062;0061 05AE 0300 059E 0315 0062; # (a◌̕◌̀◌֮◌֞b; à◌֮◌֞◌̕b; a◌֮◌̀◌֞◌̕b; à◌֮◌֞◌̕b; a◌֮◌̀◌֞◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT GERSHAYIM, LATIN SMALL LETTER B
+0061 059E 0315 0300 05AE 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062; # (a◌֞◌̕◌̀◌֮b; a◌֮◌֞◌̀◌̕b; a◌֮◌֞◌̀◌̕b; a◌֮◌֞◌̀◌̕b; a◌֮◌֞◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT GERSHAYIM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 059F 0062;00E0 05AE 059F 0315 0062;0061 05AE 0300 059F 0315 0062;00E0 05AE 059F 0315 0062;0061 05AE 0300 059F 0315 0062; # (a◌̕◌̀◌֮◌֟b; à◌֮◌֟◌̕b; a◌֮◌̀◌֟◌̕b; à◌֮◌֟◌̕b; a◌֮◌̀◌֟◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT QARNEY PARA, LATIN SMALL LETTER B
+0061 059F 0315 0300 05AE 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062; # (a◌֟◌̕◌̀◌֮b; a◌֮◌֟◌̀◌̕b; a◌֮◌֟◌̀◌̕b; a◌֮◌֟◌̀◌̕b; a◌֮◌֟◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT QARNEY PARA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05A0 0062;00E0 05AE 05A0 0315 0062;0061 05AE 0300 05A0 0315 0062;00E0 05AE 05A0 0315 0062;0061 05AE 0300 05A0 0315 0062; # (a◌̕◌̀◌֮◌֠b; à◌֮◌֠◌̕b; a◌֮◌̀◌֠◌̕b; à◌֮◌֠◌̕b; a◌֮◌̀◌֠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT TELISHA GEDOLA, LATIN SMALL LETTER B
+0061 05A0 0315 0300 05AE 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062; # (a◌֠◌̕◌̀◌֮b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT TELISHA GEDOLA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05A1 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062; # (a◌̕◌̀◌֮◌֡b; à◌֮◌֡◌̕b; a◌֮◌̀◌֡◌̕b; à◌֮◌֡◌̕b; a◌֮◌̀◌֡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT PAZER, LATIN SMALL LETTER B
+0061 05A1 0315 0300 05AE 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062; # (a◌֡◌̕◌̀◌֮b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT PAZER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 05A3 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062; # (a◌֚◌̖◌〪◌֣b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MUNAH, LATIN SMALL LETTER B
+0061 05A3 059A 0316 302A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062; # (a◌֣◌֚◌̖◌〪b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MUNAH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 05A4 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062; # (a◌֚◌̖◌〪◌֤b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MAHAPAKH, LATIN SMALL LETTER B
+0061 05A4 059A 0316 302A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062; # (a◌֤◌֚◌̖◌〪b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MAHAPAKH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 05A5 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062; # (a◌֚◌̖◌〪◌֥b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MERKHA, LATIN SMALL LETTER B
+0061 05A5 059A 0316 302A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062; # (a◌֥◌֚◌̖◌〪b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MERKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 05A6 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062; # (a◌֚◌̖◌〪◌֦b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MERKHA KEFULA, LATIN SMALL LETTER B
+0061 05A6 059A 0316 302A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062; # (a◌֦◌֚◌̖◌〪b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MERKHA KEFULA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 05A7 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062; # (a◌֚◌̖◌〪◌֧b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT DARGA, LATIN SMALL LETTER B
+0061 05A7 059A 0316 302A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062; # (a◌֧◌֚◌̖◌〪b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT DARGA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05A8 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062; # (a◌̕◌̀◌֮◌֨b; à◌֮◌֨◌̕b; a◌֮◌̀◌֨◌̕b; à◌֮◌֨◌̕b; a◌֮◌̀◌֨◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT QADMA, LATIN SMALL LETTER B
+0061 05A8 0315 0300 05AE 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062; # (a◌֨◌̕◌̀◌֮b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT QADMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05A9 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062; # (a◌̕◌̀◌֮◌֩b; à◌֮◌֩◌̕b; a◌֮◌̀◌֩◌̕b; à◌֮◌֩◌̕b; a◌֮◌̀◌֩◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT TELISHA QETANA, LATIN SMALL LETTER B
+0061 05A9 0315 0300 05AE 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062; # (a◌֩◌̕◌̀◌֮b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT TELISHA QETANA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 05AA 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062; # (a◌֚◌̖◌〪◌֪b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT YERAH BEN YOMO, LATIN SMALL LETTER B
+0061 05AA 059A 0316 302A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062; # (a◌֪◌֚◌̖◌〪b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YERAH BEN YOMO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05AB 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062; # (a◌̕◌̀◌֮◌֫b; à◌֮◌֫◌̕b; a◌֮◌̀◌֫◌̕b; à◌֮◌֫◌̕b; a◌֮◌̀◌֫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT OLE, LATIN SMALL LETTER B
+0061 05AB 0315 0300 05AE 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062; # (a◌֫◌̕◌̀◌֮b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT OLE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05AC 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062; # (a◌̕◌̀◌֮◌֬b; à◌֮◌֬◌̕b; a◌֮◌̀◌֬◌̕b; à◌֮◌֬◌̕b; a◌֮◌̀◌֬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ILUY, LATIN SMALL LETTER B
+0061 05AC 0315 0300 05AE 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062; # (a◌֬◌̕◌̀◌֮b; a◌֮◌֬◌̀◌̕b; a◌֮◌֬◌̀◌̕b; a◌֮◌֬◌̀◌̕b; a◌֮◌֬◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ILUY, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 302E 059A 0316 05AD 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062; # (a◌〮◌֚◌̖◌֭b; a◌̖◌֚◌֭◌〮b; a◌̖◌֚◌֭◌〮b; a◌̖◌֚◌֭◌〮b; a◌̖◌֚◌֭◌〮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT DEHI, LATIN SMALL LETTER B
+0061 05AD 302E 059A 0316 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062; # (a◌֭◌〮◌֚◌̖b; a◌̖◌֭◌֚◌〮b; a◌̖◌֭◌֚◌〮b; a◌̖◌֭◌֚◌〮b; a◌̖◌֭◌֚◌〮b; ) LATIN SMALL LETTER A, HEBREW ACCENT DEHI, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
+0061 0300 05AE 302E 05AE 0062;00E0 302E 05AE 05AE 0062;0061 302E 05AE 05AE 0300 0062;00E0 302E 05AE 05AE 0062;0061 302E 05AE 05AE 0300 0062; # (a◌̀◌֮◌〮◌֮b; à◌〮◌֮◌֮b; a◌〮◌֮◌֮◌̀b; à◌〮◌֮◌֮b; a◌〮◌֮◌֮◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 05AE 0300 05AE 302E 0062;00E0 302E 05AE 05AE 0062;0061 302E 05AE 05AE 0300 0062;00E0 302E 05AE 05AE 0062;0061 302E 05AE 05AE 0300 0062; # (a◌֮◌̀◌֮◌〮b; à◌〮◌֮◌֮b; a◌〮◌֮◌֮◌̀b; à◌〮◌֮◌֮b; a◌〮◌֮◌֮◌̀b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZINOR, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05AF 0062;00E0 05AE 05AF 0315 0062;0061 05AE 0300 05AF 0315 0062;00E0 05AE 05AF 0315 0062;0061 05AE 0300 05AF 0315 0062; # (a◌̕◌̀◌֮◌֯b; à◌֮◌֯◌̕b; a◌֮◌̀◌֯◌̕b; à◌֮◌֯◌̕b; a◌֮◌̀◌֯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW MARK MASORA CIRCLE, LATIN SMALL LETTER B
+0061 05AF 0315 0300 05AE 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062; # (a◌֯◌̕◌̀◌֮b; a◌֮◌֯◌̀◌̕b; a◌֮◌֯◌̀◌̕b; a◌֮◌֯◌̀◌̕b; a◌֮◌֯◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW MARK MASORA CIRCLE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 05B1 05B0 094D 05B0 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062; # (a◌ֱ◌ְ◌्◌ְb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, HEBREW POINT SHEVA, LATIN SMALL LETTER B
+0061 05B0 05B1 05B0 094D 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062; # (a◌ְ◌ֱ◌ְ◌्b; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, LATIN SMALL LETTER B
+0061 05B2 05B1 05B0 05B1 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062; # (a◌ֲ◌ֱ◌ְ◌ֱb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, HEBREW POINT HATAF SEGOL, LATIN SMALL LETTER B
+0061 05B1 05B2 05B1 05B0 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062; # (a◌ֱ◌ֲ◌ֱ◌ְb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF SEGOL, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, LATIN SMALL LETTER B
+0061 05B3 05B2 05B1 05B2 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062; # (a◌ֳ◌ֲ◌ֱ◌ֲb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, HEBREW POINT HATAF PATAH, LATIN SMALL LETTER B
+0061 05B2 05B3 05B2 05B1 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062; # (a◌ֲ◌ֳ◌ֲ◌ֱb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, LATIN SMALL LETTER B
+0061 05B4 05B3 05B2 05B3 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062; # (a◌ִ◌ֳ◌ֲ◌ֳb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; ) LATIN SMALL LETTER A, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF QAMATS, LATIN SMALL LETTER B
+0061 05B3 05B4 05B3 05B2 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062; # (a◌ֳ◌ִ◌ֳ◌ֲb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF QAMATS, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, LATIN SMALL LETTER B
+0061 05B5 05B4 05B3 05B4 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062; # (a◌ֵ◌ִ◌ֳ◌ִb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; ) LATIN SMALL LETTER A, HEBREW POINT TSERE, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, HEBREW POINT HIRIQ, LATIN SMALL LETTER B
+0061 05B4 05B5 05B4 05B3 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062; # (a◌ִ◌ֵ◌ִ◌ֳb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; ) LATIN SMALL LETTER A, HEBREW POINT HIRIQ, HEBREW POINT TSERE, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, LATIN SMALL LETTER B
+0061 05B6 05B5 05B4 05B5 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062; # (a◌ֶ◌ֵ◌ִ◌ֵb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; ) LATIN SMALL LETTER A, HEBREW POINT SEGOL, HEBREW POINT TSERE, HEBREW POINT HIRIQ, HEBREW POINT TSERE, LATIN SMALL LETTER B
+0061 05B5 05B6 05B5 05B4 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062; # (a◌ֵ◌ֶ◌ֵ◌ִb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; ) LATIN SMALL LETTER A, HEBREW POINT TSERE, HEBREW POINT SEGOL, HEBREW POINT TSERE, HEBREW POINT HIRIQ, LATIN SMALL LETTER B
+0061 05B7 05B6 05B5 05B6 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062; # (a◌ַ◌ֶ◌ֵ◌ֶb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; ) LATIN SMALL LETTER A, HEBREW POINT PATAH, HEBREW POINT SEGOL, HEBREW POINT TSERE, HEBREW POINT SEGOL, LATIN SMALL LETTER B
+0061 05B6 05B7 05B6 05B5 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062; # (a◌ֶ◌ַ◌ֶ◌ֵb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; ) LATIN SMALL LETTER A, HEBREW POINT SEGOL, HEBREW POINT PATAH, HEBREW POINT SEGOL, HEBREW POINT TSERE, LATIN SMALL LETTER B
+0061 05B8 05B7 05B6 05B7 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062; # (a◌ָ◌ַ◌ֶ◌ַb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; ) LATIN SMALL LETTER A, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW POINT SEGOL, HEBREW POINT PATAH, LATIN SMALL LETTER B
+0061 05B7 05B8 05B7 05B6 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062; # (a◌ַ◌ָ◌ַ◌ֶb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; ) LATIN SMALL LETTER A, HEBREW POINT PATAH, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW POINT SEGOL, LATIN SMALL LETTER B
+0061 05B9 05B8 05B7 05B8 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062; # (a◌ֹ◌ָ◌ַ◌ָb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; ) LATIN SMALL LETTER A, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW POINT QAMATS, LATIN SMALL LETTER B
+0061 05B8 05B9 05B8 05B7 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062; # (a◌ָ◌ֹ◌ָ◌ַb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; ) LATIN SMALL LETTER A, HEBREW POINT QAMATS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT PATAH, LATIN SMALL LETTER B
+0061 05BB 05B9 05B8 05B9 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; # (a◌ֻ◌ֹ◌ָ◌ֹb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; ) LATIN SMALL LETTER A, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT HOLAM, LATIN SMALL LETTER B
+0061 05B9 05BB 05B9 05B8 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; # (a◌ֹ◌ֻ◌ֹ◌ָb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; ) LATIN SMALL LETTER A, HEBREW POINT HOLAM, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, LATIN SMALL LETTER B
+0061 05BC 05BB 05B9 05BB 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; # (a◌ּ◌ֻ◌ֹ◌ֻb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; ) LATIN SMALL LETTER A, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QUBUTS, LATIN SMALL LETTER B
+0061 05BB 05BC 05BB 05B9 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; # (a◌ֻ◌ּ◌ֻ◌ֹb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; ) LATIN SMALL LETTER A, HEBREW POINT QUBUTS, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, LATIN SMALL LETTER B
+0061 05BD 05BC 05BB 05BC 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062; # (a◌ֽ◌ּ◌ֻ◌ּb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; ) LATIN SMALL LETTER A, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, HEBREW POINT DAGESH OR MAPIQ, LATIN SMALL LETTER B
+0061 05BC 05BD 05BC 05BB 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062; # (a◌ּ◌ֽ◌ּ◌ֻb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; ) LATIN SMALL LETTER A, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, LATIN SMALL LETTER B
+0061 05BF 05BD 05BC 05BD 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062; # (a◌ֿ◌ֽ◌ּ◌ֽb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; ) LATIN SMALL LETTER A, HEBREW POINT RAFE, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT METEG, LATIN SMALL LETTER B
+0061 05BD 05BF 05BD 05BC 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062; # (a◌ֽ◌ֿ◌ֽ◌ּb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; ) LATIN SMALL LETTER A, HEBREW POINT METEG, HEBREW POINT RAFE, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, LATIN SMALL LETTER B
+0061 05C1 05BF 05BD 05BF 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062; # (a◌ׁ◌ֿ◌ֽ◌ֿb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; ) LATIN SMALL LETTER A, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, HEBREW POINT METEG, HEBREW POINT RAFE, LATIN SMALL LETTER B
+0061 05BF 05C1 05BF 05BD 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062; # (a◌ֿ◌ׁ◌ֿ◌ֽb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; ) LATIN SMALL LETTER A, HEBREW POINT RAFE, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, HEBREW POINT METEG, LATIN SMALL LETTER B
+0061 05C2 05C1 05BF 05C1 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062; # (a◌ׂ◌ׁ◌ֿ◌ׁb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; ) LATIN SMALL LETTER A, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, HEBREW POINT SHIN DOT, LATIN SMALL LETTER B
+0061 05C1 05C2 05C1 05BF 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062; # (a◌ׁ◌ׂ◌ׁ◌ֿb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; ) LATIN SMALL LETTER A, HEBREW POINT SHIN DOT, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, LATIN SMALL LETTER B
+0061 FB1E 05C2 05C1 05C2 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; # (a◌ﬞ◌ׂ◌ׁ◌ׂb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; ) LATIN SMALL LETTER A, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, HEBREW POINT SIN DOT, LATIN SMALL LETTER B
+0061 05C2 FB1E 05C2 05C1 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; # (a◌ׂ◌ﬞ◌ׂ◌ׁb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; ) LATIN SMALL LETTER A, HEBREW POINT SIN DOT, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, LATIN SMALL LETTER B
+0061 0315 0300 05AE 05C4 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062; # (a◌̕◌̀◌֮◌ׄb; à◌֮◌ׄ◌̕b; a◌֮◌̀◌ׄ◌̕b; à◌֮◌ׄ◌̕b; a◌֮◌̀◌ׄ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW MARK UPPER DOT, LATIN SMALL LETTER B
+0061 05C4 0315 0300 05AE 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062; # (a◌ׄ◌̕◌̀◌֮b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW MARK UPPER DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 064C 064B FB1E 064B 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062; # (a◌ٌ◌ً◌ﬞ◌ًb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; ) LATIN SMALL LETTER A, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, ARABIC FATHATAN, LATIN SMALL LETTER B
+0061 064B 064C 064B FB1E 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062; # (a◌ً◌ٌ◌ً◌ﬞb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; ) LATIN SMALL LETTER A, ARABIC FATHATAN, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, LATIN SMALL LETTER B
+0061 064D 064C 064B 064C 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062; # (a◌ٍ◌ٌ◌ً◌ٌb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; ) LATIN SMALL LETTER A, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC FATHATAN, ARABIC DAMMATAN, LATIN SMALL LETTER B
+0061 064C 064D 064C 064B 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062; # (a◌ٌ◌ٍ◌ٌ◌ًb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; ) LATIN SMALL LETTER A, ARABIC DAMMATAN, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC FATHATAN, LATIN SMALL LETTER B
+0061 064E 064D 064C 064D 0062;0061 064C 064D 064D 064E 0062;0061 064C 064D 064D 064E 0062;0061 064C 064D 064D 064E 0062;0061 064C 064D 064D 064E 0062; # (a◌َ◌ٍ◌ٌ◌ٍb; a◌ٌ◌ٍ◌ٍ◌َb; a◌ٌ◌ٍ◌ٍ◌َb; a◌ٌ◌ٍ◌ٍ◌َb; a◌ٌ◌ٍ◌ٍ◌َb; ) LATIN SMALL LETTER A, ARABIC FATHA, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC KASRATAN, LATIN SMALL LETTER B
+0061 064D 064E 064D 064C 0062;0061 064C 064D 064D 064E 0062;0061 064C 064D 064D 064E 0062;0061 064C 064D 064D 064E 0062;0061 064C 064D 064D 064E 0062; # (a◌ٍ◌َ◌ٍ◌ٌb; a◌ٌ◌ٍ◌ٍ◌َb; a◌ٌ◌ٍ◌ٍ◌َb; a◌ٌ◌ٍ◌ٍ◌َb; a◌ٌ◌ٍ◌ٍ◌َb; ) LATIN SMALL LETTER A, ARABIC KASRATAN, ARABIC FATHA, ARABIC KASRATAN, ARABIC DAMMATAN, LATIN SMALL LETTER B
+0061 064F 064E 064D 064E 0062;0061 064D 064E 064E 064F 0062;0061 064D 064E 064E 064F 0062;0061 064D 064E 064E 064F 0062;0061 064D 064E 064E 064F 0062; # (a◌ُ◌َ◌ٍ◌َb; a◌ٍ◌َ◌َ◌ُb; a◌ٍ◌َ◌َ◌ُb; a◌ٍ◌َ◌َ◌ُb; a◌ٍ◌َ◌َ◌ُb; ) LATIN SMALL LETTER A, ARABIC DAMMA, ARABIC FATHA, ARABIC KASRATAN, ARABIC FATHA, LATIN SMALL LETTER B
+0061 064E 064F 064E 064D 0062;0061 064D 064E 064E 064F 0062;0061 064D 064E 064E 064F 0062;0061 064D 064E 064E 064F 0062;0061 064D 064E 064E 064F 0062; # (a◌َ◌ُ◌َ◌ٍb; a◌ٍ◌َ◌َ◌ُb; a◌ٍ◌َ◌َ◌ُb; a◌ٍ◌َ◌َ◌ُb; a◌ٍ◌َ◌َ◌ُb; ) LATIN SMALL LETTER A, ARABIC FATHA, ARABIC DAMMA, ARABIC FATHA, ARABIC KASRATAN, LATIN SMALL LETTER B
+0061 0650 064F 064E 064F 0062;0061 064E 064F 064F 0650 0062;0061 064E 064F 064F 0650 0062;0061 064E 064F 064F 0650 0062;0061 064E 064F 064F 0650 0062; # (a◌ِ◌ُ◌َ◌ُb; a◌َ◌ُ◌ُ◌ِb; a◌َ◌ُ◌ُ◌ِb; a◌َ◌ُ◌ُ◌ِb; a◌َ◌ُ◌ُ◌ِb; ) LATIN SMALL LETTER A, ARABIC KASRA, ARABIC DAMMA, ARABIC FATHA, ARABIC DAMMA, LATIN SMALL LETTER B
+0061 064F 0650 064F 064E 0062;0061 064E 064F 064F 0650 0062;0061 064E 064F 064F 0650 0062;0061 064E 064F 064F 0650 0062;0061 064E 064F 064F 0650 0062; # (a◌ُ◌ِ◌ُ◌َb; a◌َ◌ُ◌ُ◌ِb; a◌َ◌ُ◌ُ◌ِb; a◌َ◌ُ◌ُ◌ِb; a◌َ◌ُ◌ُ◌ِb; ) LATIN SMALL LETTER A, ARABIC DAMMA, ARABIC KASRA, ARABIC DAMMA, ARABIC FATHA, LATIN SMALL LETTER B
+0061 0651 0650 064F 0650 0062;0061 064F 0650 0650 0651 0062;0061 064F 0650 0650 0651 0062;0061 064F 0650 0650 0651 0062;0061 064F 0650 0650 0651 0062; # (a◌ّ◌ِ◌ُ◌ِb; a◌ُ◌ِ◌ِ◌ّb; a◌ُ◌ِ◌ِ◌ّb; a◌ُ◌ِ◌ِ◌ّb; a◌ُ◌ِ◌ِ◌ّb; ) LATIN SMALL LETTER A, ARABIC SHADDA, ARABIC KASRA, ARABIC DAMMA, ARABIC KASRA, LATIN SMALL LETTER B
+0061 0650 0651 0650 064F 0062;0061 064F 0650 0650 0651 0062;0061 064F 0650 0650 0651 0062;0061 064F 0650 0650 0651 0062;0061 064F 0650 0650 0651 0062; # (a◌ِ◌ّ◌ِ◌ُb; a◌ُ◌ِ◌ِ◌ّb; a◌ُ◌ِ◌ِ◌ّb; a◌ُ◌ِ◌ِ◌ّb; a◌ُ◌ِ◌ِ◌ّb; ) LATIN SMALL LETTER A, ARABIC KASRA, ARABIC SHADDA, ARABIC KASRA, ARABIC DAMMA, LATIN SMALL LETTER B
+0061 0652 0651 0650 0651 0062;0061 0650 0651 0651 0652 0062;0061 0650 0651 0651 0652 0062;0061 0650 0651 0651 0652 0062;0061 0650 0651 0651 0652 0062; # (a◌ْ◌ّ◌ِ◌ّb; a◌ِ◌ّ◌ّ◌ْb; a◌ِ◌ّ◌ّ◌ْb; a◌ِ◌ّ◌ّ◌ْb; a◌ِ◌ّ◌ّ◌ْb; ) LATIN SMALL LETTER A, ARABIC SUKUN, ARABIC SHADDA, ARABIC KASRA, ARABIC SHADDA, LATIN SMALL LETTER B
+0061 0651 0652 0651 0650 0062;0061 0650 0651 0651 0652 0062;0061 0650 0651 0651 0652 0062;0061 0650 0651 0651 0652 0062;0061 0650 0651 0651 0652 0062; # (a◌ّ◌ْ◌ّ◌ِb; a◌ِ◌ّ◌ّ◌ْb; a◌ِ◌ّ◌ّ◌ْb; a◌ِ◌ّ◌ّ◌ْb; a◌ِ◌ّ◌ّ◌ْb; ) LATIN SMALL LETTER A, ARABIC SHADDA, ARABIC SUKUN, ARABIC SHADDA, ARABIC KASRA, LATIN SMALL LETTER B
+0061 0670 0652 0651 0652 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062; # (a◌ٰ◌ْ◌ّ◌ْb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; ) LATIN SMALL LETTER A, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, ARABIC SHADDA, ARABIC SUKUN, LATIN SMALL LETTER B
+0061 0652 0670 0652 0651 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062; # (a◌ْ◌ٰ◌ْ◌ّb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; ) LATIN SMALL LETTER A, ARABIC SUKUN, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, ARABIC SHADDA, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0653 0062;00E0 05AE 0653 0315 0062;0061 05AE 0300 0653 0315 0062;00E0 05AE 0653 0315 0062;0061 05AE 0300 0653 0315 0062; # (a◌̕◌̀◌֮◌ٓb; à◌֮◌ٓ◌̕b; a◌֮◌̀◌ٓ◌̕b; à◌֮◌ٓ◌̕b; a◌֮◌̀◌ٓ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC MADDAH ABOVE, LATIN SMALL LETTER B
+0061 0653 0315 0300 05AE 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062; # (a◌ٓ◌̕◌̀◌֮b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC MADDAH ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0654 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062; # (a◌̕◌̀◌֮◌ٔb; à◌֮◌ٔ◌̕b; a◌֮◌̀◌ٔ◌̕b; à◌֮◌ٔ◌̕b; a◌֮◌̀◌ٔ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC HAMZA ABOVE, LATIN SMALL LETTER B
+0061 0654 0315 0300 05AE 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062; # (a◌ٔ◌̕◌̀◌֮b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC HAMZA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0655 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062; # (a◌֚◌̖◌〪◌ٕb; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC HAMZA BELOW, LATIN SMALL LETTER B
+0061 0655 059A 0316 302A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062; # (a◌ٕ◌֚◌̖◌〪b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC HAMZA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0711 0670 0652 0670 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; # (a◌ܑ◌ٰ◌ْ◌ٰb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; ) LATIN SMALL LETTER A, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, ARABIC LETTER SUPERSCRIPT ALEF, LATIN SMALL LETTER B
+0061 0670 0711 0670 0652 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; # (a◌ٰ◌ܑ◌ٰ◌ْb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; ) LATIN SMALL LETTER A, ARABIC LETTER SUPERSCRIPT ALEF, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06D6 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062; # (a◌̕◌̀◌֮◌ۖb; à◌֮◌ۖ◌̕b; a◌֮◌̀◌ۖ◌̕b; à◌֮◌ۖ◌̕b; a◌֮◌̀◌ۖ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA, LATIN SMALL LETTER B
+0061 06D6 0315 0300 05AE 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062; # (a◌ۖ◌̕◌̀◌֮b; a◌֮◌ۖ◌̀◌̕b; a◌֮◌ۖ◌̀◌̕b; a◌֮◌ۖ◌̀◌̕b; a◌֮◌ۖ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06D7 0062;00E0 05AE 06D7 0315 0062;0061 05AE 0300 06D7 0315 0062;00E0 05AE 06D7 0315 0062;0061 05AE 0300 06D7 0315 0062; # (a◌̕◌̀◌֮◌ۗb; à◌֮◌ۗ◌̕b; a◌֮◌̀◌ۗ◌̕b; à◌֮◌ۗ◌̕b; a◌֮◌̀◌ۗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA, LATIN SMALL LETTER B
+0061 06D7 0315 0300 05AE 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062; # (a◌ۗ◌̕◌̀◌֮b; a◌֮◌ۗ◌̀◌̕b; a◌֮◌ۗ◌̀◌̕b; a◌֮◌ۗ◌̀◌̕b; a◌֮◌ۗ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06D8 0062;00E0 05AE 06D8 0315 0062;0061 05AE 0300 06D8 0315 0062;00E0 05AE 06D8 0315 0062;0061 05AE 0300 06D8 0315 0062; # (a◌̕◌̀◌֮◌ۘb; à◌֮◌ۘ◌̕b; a◌֮◌̀◌ۘ◌̕b; à◌֮◌ۘ◌̕b; a◌֮◌̀◌ۘ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH MEEM INITIAL FORM, LATIN SMALL LETTER B
+0061 06D8 0315 0300 05AE 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062; # (a◌ۘ◌̕◌̀◌֮b; a◌֮◌ۘ◌̀◌̕b; a◌֮◌ۘ◌̀◌̕b; a◌֮◌ۘ◌̀◌̕b; a◌֮◌ۘ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH MEEM INITIAL FORM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06D9 0062;00E0 05AE 06D9 0315 0062;0061 05AE 0300 06D9 0315 0062;00E0 05AE 06D9 0315 0062;0061 05AE 0300 06D9 0315 0062; # (a◌̕◌̀◌֮◌ۙb; à◌֮◌ۙ◌̕b; a◌֮◌̀◌ۙ◌̕b; à◌֮◌ۙ◌̕b; a◌֮◌̀◌ۙ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH LAM ALEF, LATIN SMALL LETTER B
+0061 06D9 0315 0300 05AE 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062; # (a◌ۙ◌̕◌̀◌֮b; a◌֮◌ۙ◌̀◌̕b; a◌֮◌ۙ◌̀◌̕b; a◌֮◌ۙ◌̀◌̕b; a◌֮◌ۙ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH LAM ALEF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06DA 0062;00E0 05AE 06DA 0315 0062;0061 05AE 0300 06DA 0315 0062;00E0 05AE 06DA 0315 0062;0061 05AE 0300 06DA 0315 0062; # (a◌̕◌̀◌֮◌ۚb; à◌֮◌ۚ◌̕b; a◌֮◌̀◌ۚ◌̕b; à◌֮◌ۚ◌̕b; a◌֮◌̀◌ۚ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH JEEM, LATIN SMALL LETTER B
+0061 06DA 0315 0300 05AE 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062; # (a◌ۚ◌̕◌̀◌֮b; a◌֮◌ۚ◌̀◌̕b; a◌֮◌ۚ◌̀◌̕b; a◌֮◌ۚ◌̀◌̕b; a◌֮◌ۚ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH JEEM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06DB 0062;00E0 05AE 06DB 0315 0062;0061 05AE 0300 06DB 0315 0062;00E0 05AE 06DB 0315 0062;0061 05AE 0300 06DB 0315 0062; # (a◌̕◌̀◌֮◌ۛb; à◌֮◌ۛ◌̕b; a◌֮◌̀◌ۛ◌̕b; à◌֮◌ۛ◌̕b; a◌֮◌̀◌ۛ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH THREE DOTS, LATIN SMALL LETTER B
+0061 06DB 0315 0300 05AE 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062; # (a◌ۛ◌̕◌̀◌֮b; a◌֮◌ۛ◌̀◌̕b; a◌֮◌ۛ◌̀◌̕b; a◌֮◌ۛ◌̀◌̕b; a◌֮◌ۛ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH THREE DOTS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06DC 0062;00E0 05AE 06DC 0315 0062;0061 05AE 0300 06DC 0315 0062;00E0 05AE 06DC 0315 0062;0061 05AE 0300 06DC 0315 0062; # (a◌̕◌̀◌֮◌ۜb; à◌֮◌ۜ◌̕b; a◌֮◌̀◌ۜ◌̕b; à◌֮◌ۜ◌̕b; a◌֮◌̀◌ۜ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH SEEN, LATIN SMALL LETTER B
+0061 06DC 0315 0300 05AE 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062; # (a◌ۜ◌̕◌̀◌֮b; a◌֮◌ۜ◌̀◌̕b; a◌֮◌ۜ◌̀◌̕b; a◌֮◌ۜ◌̀◌̕b; a◌֮◌ۜ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH SEEN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06DF 0062;00E0 05AE 06DF 0315 0062;0061 05AE 0300 06DF 0315 0062;00E0 05AE 06DF 0315 0062;0061 05AE 0300 06DF 0315 0062; # (a◌̕◌̀◌֮◌۟b; à◌֮◌۟◌̕b; a◌֮◌̀◌۟◌̕b; à◌֮◌۟◌̕b; a◌֮◌̀◌۟◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH ROUNDED ZERO, LATIN SMALL LETTER B
+0061 06DF 0315 0300 05AE 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062; # (a◌۟◌̕◌̀◌֮b; a◌֮◌۟◌̀◌̕b; a◌֮◌۟◌̀◌̕b; a◌֮◌۟◌̀◌̕b; a◌֮◌۟◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH ROUNDED ZERO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06E0 0062;00E0 05AE 06E0 0315 0062;0061 05AE 0300 06E0 0315 0062;00E0 05AE 06E0 0315 0062;0061 05AE 0300 06E0 0315 0062; # (a◌̕◌̀◌֮◌۠b; à◌֮◌۠◌̕b; a◌֮◌̀◌۠◌̕b; à◌֮◌۠◌̕b; a◌֮◌̀◌۠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO, LATIN SMALL LETTER B
+0061 06E0 0315 0300 05AE 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062; # (a◌۠◌̕◌̀◌֮b; a◌֮◌۠◌̀◌̕b; a◌֮◌۠◌̀◌̕b; a◌֮◌۠◌̀◌̕b; a◌֮◌۠◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06E1 0062;00E0 05AE 06E1 0315 0062;0061 05AE 0300 06E1 0315 0062;00E0 05AE 06E1 0315 0062;0061 05AE 0300 06E1 0315 0062; # (a◌̕◌̀◌֮◌ۡb; à◌֮◌ۡ◌̕b; a◌֮◌̀◌ۡ◌̕b; à◌֮◌ۡ◌̕b; a◌֮◌̀◌ۡ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH DOTLESS HEAD OF KHAH, LATIN SMALL LETTER B
+0061 06E1 0315 0300 05AE 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062; # (a◌ۡ◌̕◌̀◌֮b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH DOTLESS HEAD OF KHAH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06E2 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062; # (a◌̕◌̀◌֮◌ۢb; à◌֮◌ۢ◌̕b; a◌֮◌̀◌ۢ◌̕b; à◌֮◌ۢ◌̕b; a◌֮◌̀◌ۢ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH MEEM ISOLATED FORM, LATIN SMALL LETTER B
+0061 06E2 0315 0300 05AE 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062; # (a◌ۢ◌̕◌̀◌֮b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH MEEM ISOLATED FORM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 06E3 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062; # (a◌֚◌̖◌〪◌ۣb; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC SMALL LOW SEEN, LATIN SMALL LETTER B
+0061 06E3 059A 0316 302A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062; # (a◌ۣ◌֚◌̖◌〪b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW SEEN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06E4 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062; # (a◌̕◌̀◌֮◌ۤb; à◌֮◌ۤ◌̕b; a◌֮◌̀◌ۤ◌̕b; à◌֮◌ۤ◌̕b; a◌֮◌̀◌ۤ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH MADDA, LATIN SMALL LETTER B
+0061 06E4 0315 0300 05AE 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062; # (a◌ۤ◌̕◌̀◌֮b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH MADDA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06E7 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062; # (a◌̕◌̀◌֮◌ۧb; à◌֮◌ۧ◌̕b; a◌֮◌̀◌ۧ◌̕b; à◌֮◌ۧ◌̕b; a◌֮◌̀◌ۧ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH YEH, LATIN SMALL LETTER B
+0061 06E7 0315 0300 05AE 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062; # (a◌ۧ◌̕◌̀◌֮b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH YEH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06E8 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062; # (a◌̕◌̀◌֮◌ۨb; à◌֮◌ۨ◌̕b; a◌֮◌̀◌ۨ◌̕b; à◌֮◌ۨ◌̕b; a◌֮◌̀◌ۨ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH NOON, LATIN SMALL LETTER B
+0061 06E8 0315 0300 05AE 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062; # (a◌ۨ◌̕◌̀◌֮b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH NOON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 06EA 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062; # (a◌֚◌̖◌〪◌۪b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC EMPTY CENTRE LOW STOP, LATIN SMALL LETTER B
+0061 06EA 059A 0316 302A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062; # (a◌۪◌֚◌̖◌〪b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC EMPTY CENTRE LOW STOP, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06EB 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062; # (a◌̕◌̀◌֮◌۫b; à◌֮◌۫◌̕b; a◌֮◌̀◌۫◌̕b; à◌֮◌۫◌̕b; a◌֮◌̀◌۫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC EMPTY CENTRE HIGH STOP, LATIN SMALL LETTER B
+0061 06EB 0315 0300 05AE 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062; # (a◌۫◌̕◌̀◌֮b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC EMPTY CENTRE HIGH STOP, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 06EC 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062; # (a◌̕◌̀◌֮◌۬b; à◌֮◌۬◌̕b; a◌֮◌̀◌۬◌̕b; à◌֮◌۬◌̕b; a◌֮◌̀◌۬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE, LATIN SMALL LETTER B
+0061 06EC 0315 0300 05AE 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062; # (a◌۬◌̕◌̀◌֮b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 06ED 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062; # (a◌֚◌̖◌〪◌ۭb; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC SMALL LOW MEEM, LATIN SMALL LETTER B
+0061 06ED 059A 0316 302A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062; # (a◌ۭ◌֚◌̖◌〪b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW MEEM, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0C55 0711 0670 0711 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; # (a◌ౕ◌ܑ◌ٰ◌ܑb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; ) LATIN SMALL LETTER A, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, SYRIAC LETTER SUPERSCRIPT ALAPH, LATIN SMALL LETTER B
+0061 0711 0C55 0711 0670 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; # (a◌ܑ◌ౕ◌ܑ◌ٰb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; ) LATIN SMALL LETTER A, SYRIAC LETTER SUPERSCRIPT ALAPH, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0730 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062; # (a◌̕◌̀◌֮◌ܰb; à◌֮◌ܰ◌̕b; a◌֮◌̀◌ܰ◌̕b; à◌֮◌ܰ◌̕b; a◌֮◌̀◌ܰ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC PTHAHA ABOVE, LATIN SMALL LETTER B
+0061 0730 0315 0300 05AE 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062; # (a◌ܰ◌̕◌̀◌֮b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC PTHAHA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0731 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062; # (a◌֚◌̖◌〪◌ܱb; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC PTHAHA BELOW, LATIN SMALL LETTER B
+0061 0731 059A 0316 302A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062; # (a◌ܱ◌֚◌̖◌〪b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC PTHAHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0732 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062; # (a◌̕◌̀◌֮◌ܲb; à◌֮◌ܲ◌̕b; a◌֮◌̀◌ܲ◌̕b; à◌֮◌ܲ◌̕b; a◌֮◌̀◌ܲ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC PTHAHA DOTTED, LATIN SMALL LETTER B
+0061 0732 0315 0300 05AE 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062; # (a◌ܲ◌̕◌̀◌֮b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC PTHAHA DOTTED, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0733 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062; # (a◌̕◌̀◌֮◌ܳb; à◌֮◌ܳ◌̕b; a◌֮◌̀◌ܳ◌̕b; à◌֮◌ܳ◌̕b; a◌֮◌̀◌ܳ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC ZQAPHA ABOVE, LATIN SMALL LETTER B
+0061 0733 0315 0300 05AE 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062; # (a◌ܳ◌̕◌̀◌֮b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC ZQAPHA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0734 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062; # (a◌֚◌̖◌〪◌ܴb; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC ZQAPHA BELOW, LATIN SMALL LETTER B
+0061 0734 059A 0316 302A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062; # (a◌ܴ◌֚◌̖◌〪b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC ZQAPHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0735 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062; # (a◌̕◌̀◌֮◌ܵb; à◌֮◌ܵ◌̕b; a◌֮◌̀◌ܵ◌̕b; à◌֮◌ܵ◌̕b; a◌֮◌̀◌ܵ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC ZQAPHA DOTTED, LATIN SMALL LETTER B
+0061 0735 0315 0300 05AE 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062; # (a◌ܵ◌̕◌̀◌֮b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC ZQAPHA DOTTED, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0736 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062; # (a◌̕◌̀◌֮◌ܶb; à◌֮◌ܶ◌̕b; a◌֮◌̀◌ܶ◌̕b; à◌֮◌ܶ◌̕b; a◌֮◌̀◌ܶ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC RBASA ABOVE, LATIN SMALL LETTER B
+0061 0736 0315 0300 05AE 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062; # (a◌ܶ◌̕◌̀◌֮b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC RBASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0737 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062; # (a◌֚◌̖◌〪◌ܷb; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC RBASA BELOW, LATIN SMALL LETTER B
+0061 0737 059A 0316 302A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062; # (a◌ܷ◌֚◌̖◌〪b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC RBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0738 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062; # (a◌֚◌̖◌〪◌ܸb; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC DOTTED ZLAMA HORIZONTAL, LATIN SMALL LETTER B
+0061 0738 059A 0316 302A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062; # (a◌ܸ◌֚◌̖◌〪b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC DOTTED ZLAMA HORIZONTAL, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0739 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062; # (a◌֚◌̖◌〪◌ܹb; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC DOTTED ZLAMA ANGULAR, LATIN SMALL LETTER B
+0061 0739 059A 0316 302A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062; # (a◌ܹ◌֚◌̖◌〪b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC DOTTED ZLAMA ANGULAR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 073A 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062; # (a◌̕◌̀◌֮◌ܺb; à◌֮◌ܺ◌̕b; a◌֮◌̀◌ܺ◌̕b; à◌֮◌ܺ◌̕b; a◌֮◌̀◌ܺ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC HBASA ABOVE, LATIN SMALL LETTER B
+0061 073A 0315 0300 05AE 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062; # (a◌ܺ◌̕◌̀◌֮b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC HBASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 073B 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062; # (a◌֚◌̖◌〪◌ܻb; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC HBASA BELOW, LATIN SMALL LETTER B
+0061 073B 059A 0316 302A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062; # (a◌ܻ◌֚◌̖◌〪b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC HBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 073C 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062; # (a◌֚◌̖◌〪◌ܼb; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC HBASA-ESASA DOTTED, LATIN SMALL LETTER B
+0061 073C 059A 0316 302A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062; # (a◌ܼ◌֚◌̖◌〪b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC HBASA-ESASA DOTTED, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 073D 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062; # (a◌̕◌̀◌֮◌ܽb; à◌֮◌ܽ◌̕b; a◌֮◌̀◌ܽ◌̕b; à◌֮◌ܽ◌̕b; a◌֮◌̀◌ܽ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC ESASA ABOVE, LATIN SMALL LETTER B
+0061 073D 0315 0300 05AE 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062; # (a◌ܽ◌̕◌̀◌֮b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC ESASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 073E 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062; # (a◌֚◌̖◌〪◌ܾb; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC ESASA BELOW, LATIN SMALL LETTER B
+0061 073E 059A 0316 302A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062; # (a◌ܾ◌֚◌̖◌〪b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC ESASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 073F 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062; # (a◌̕◌̀◌֮◌ܿb; à◌֮◌ܿ◌̕b; a◌֮◌̀◌ܿ◌̕b; à◌֮◌ܿ◌̕b; a◌֮◌̀◌ܿ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC RWAHA, LATIN SMALL LETTER B
+0061 073F 0315 0300 05AE 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062; # (a◌ܿ◌̕◌̀◌֮b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC RWAHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0740 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062; # (a◌̕◌̀◌֮◌݀b; à◌֮◌݀◌̕b; a◌֮◌̀◌݀◌̕b; à◌֮◌݀◌̕b; a◌֮◌̀◌݀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC FEMININE DOT, LATIN SMALL LETTER B
+0061 0740 0315 0300 05AE 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062; # (a◌݀◌̕◌̀◌֮b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC FEMININE DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0741 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062; # (a◌̕◌̀◌֮◌݁b; à◌֮◌݁◌̕b; a◌֮◌̀◌݁◌̕b; à◌֮◌݁◌̕b; a◌֮◌̀◌݁◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC QUSHSHAYA, LATIN SMALL LETTER B
+0061 0741 0315 0300 05AE 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062; # (a◌݁◌̕◌̀◌֮b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC QUSHSHAYA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0742 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062; # (a◌֚◌̖◌〪◌݂b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC RUKKAKHA, LATIN SMALL LETTER B
+0061 0742 059A 0316 302A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062; # (a◌݂◌֚◌̖◌〪b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC RUKKAKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0743 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062; # (a◌̕◌̀◌֮◌݃b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC TWO VERTICAL DOTS ABOVE, LATIN SMALL LETTER B
+0061 0743 0315 0300 05AE 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062; # (a◌݃◌̕◌̀◌֮b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC TWO VERTICAL DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0744 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062; # (a◌֚◌̖◌〪◌݄b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC TWO VERTICAL DOTS BELOW, LATIN SMALL LETTER B
+0061 0744 059A 0316 302A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062; # (a◌݄◌֚◌̖◌〪b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC TWO VERTICAL DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0745 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062; # (a◌̕◌̀◌֮◌݅b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC THREE DOTS ABOVE, LATIN SMALL LETTER B
+0061 0745 0315 0300 05AE 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062; # (a◌݅◌̕◌̀◌֮b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC THREE DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0746 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062; # (a◌֚◌̖◌〪◌݆b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC THREE DOTS BELOW, LATIN SMALL LETTER B
+0061 0746 059A 0316 302A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062; # (a◌݆◌֚◌̖◌〪b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC THREE DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0747 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062; # (a◌̕◌̀◌֮◌݇b; à◌֮◌݇◌̕b; a◌֮◌̀◌݇◌̕b; à◌֮◌݇◌̕b; a◌֮◌̀◌݇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC OBLIQUE LINE ABOVE, LATIN SMALL LETTER B
+0061 0747 0315 0300 05AE 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062; # (a◌݇◌̕◌̀◌֮b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC OBLIQUE LINE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0748 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062; # (a◌֚◌̖◌〪◌݈b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC OBLIQUE LINE BELOW, LATIN SMALL LETTER B
+0061 0748 059A 0316 302A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062; # (a◌݈◌֚◌̖◌〪b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC OBLIQUE LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0749 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062; # (a◌̕◌̀◌֮◌݉b; à◌֮◌݉◌̕b; a◌֮◌̀◌݉◌̕b; à◌֮◌݉◌̕b; a◌֮◌̀◌݉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC MUSIC, LATIN SMALL LETTER B
+0061 0749 0315 0300 05AE 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062; # (a◌݉◌̕◌̀◌֮b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC MUSIC, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 074A 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062; # (a◌̕◌̀◌֮◌݊b; à◌֮◌݊◌̕b; a◌֮◌̀◌݊◌̕b; à◌֮◌݊◌̕b; a◌֮◌̀◌݊◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC BARREKH, LATIN SMALL LETTER B
+0061 074A 0315 0300 05AE 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062; # (a◌݊◌̕◌̀◌֮b; a◌֮◌݊◌̀◌̕b; a◌֮◌݊◌̀◌̕b; a◌֮◌݊◌̀◌̕b; a◌֮◌݊◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC BARREKH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 3099 093C 0334 093C 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; # (a◌゙◌़◌̴◌़b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, DEVANAGARI SIGN NUKTA, LATIN SMALL LETTER B
+0061 093C 3099 093C 0334 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; # (a◌़◌゙◌़◌̴b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 05B0 094D 3099 094D 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; # (a◌ְ◌्◌゙◌्b; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN VIRAMA, LATIN SMALL LETTER B
+0061 094D 05B0 094D 3099 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; # (a◌्◌ְ◌्◌゙b; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; ) LATIN SMALL LETTER A, DEVANAGARI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0951 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062; # (a◌̕◌̀◌֮◌॑b; à◌֮◌॑◌̕b; a◌֮◌̀◌॑◌̕b; à◌֮◌॑◌̕b; a◌֮◌̀◌॑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, DEVANAGARI STRESS SIGN UDATTA, LATIN SMALL LETTER B
+0061 0951 0315 0300 05AE 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062; # (a◌॑◌̕◌̀◌֮b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; ) LATIN SMALL LETTER A, DEVANAGARI STRESS SIGN UDATTA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0952 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062; # (a◌֚◌̖◌〪◌॒b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, DEVANAGARI STRESS SIGN ANUDATTA, LATIN SMALL LETTER B
+0061 0952 059A 0316 302A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062; # (a◌॒◌֚◌̖◌〪b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; ) LATIN SMALL LETTER A, DEVANAGARI STRESS SIGN ANUDATTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0953 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062; # (a◌̕◌̀◌֮◌॓b; à◌֮◌॓◌̕b; a◌֮◌̀◌॓◌̕b; à◌֮◌॓◌̕b; a◌֮◌̀◌॓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, DEVANAGARI GRAVE ACCENT, LATIN SMALL LETTER B
+0061 0953 0315 0300 05AE 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062; # (a◌॓◌̕◌̀◌֮b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; ) LATIN SMALL LETTER A, DEVANAGARI GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0954 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062; # (a◌̕◌̀◌֮◌॔b; à◌֮◌॔◌̕b; a◌֮◌̀◌॔◌̕b; à◌֮◌॔◌̕b; a◌֮◌̀◌॔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, DEVANAGARI ACUTE ACCENT, LATIN SMALL LETTER B
+0061 0954 0315 0300 05AE 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062; # (a◌॔◌̕◌̀◌֮b; a◌֮◌॔◌̀◌̕b; a◌֮◌॔◌̀◌̕b; a◌֮◌॔◌̀◌̕b; a◌֮◌॔◌̀◌̕b; ) LATIN SMALL LETTER A, DEVANAGARI ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 3099 093C 0334 09BC 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062; # (a◌゙◌़◌̴◌়b; a◌̴◌़◌়◌゙b; a◌̴◌़◌়◌゙b; a◌̴◌़◌়◌゙b; a◌̴◌़◌়◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BENGALI SIGN NUKTA, LATIN SMALL LETTER B
+0061 09BC 3099 093C 0334 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062; # (a◌়◌゙◌़◌̴b; a◌̴◌়◌़◌゙b; a◌̴◌়◌़◌゙b; a◌̴◌়◌़◌゙b; a◌̴◌়◌़◌゙b; ) LATIN SMALL LETTER A, BENGALI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 05B0 094D 3099 09CD 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062; # (a◌ְ◌्◌゙◌্b; a◌゙◌्◌্◌ְb; a◌゙◌्◌্◌ְb; a◌゙◌्◌্◌ְb; a◌゙◌्◌্◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BENGALI SIGN VIRAMA, LATIN SMALL LETTER B
+0061 09CD 05B0 094D 3099 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062; # (a◌্◌ְ◌्◌゙b; a◌゙◌্◌्◌ְb; a◌゙◌্◌्◌ְb; a◌゙◌্◌्◌ְb; a◌゙◌্◌्◌ְb; ) LATIN SMALL LETTER A, BENGALI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 3099 093C 0334 0A3C 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062; # (a◌゙◌़◌̴◌਼b; a◌̴◌़◌਼◌゙b; a◌̴◌़◌਼◌゙b; a◌̴◌़◌਼◌゙b; a◌̴◌़◌਼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, GURMUKHI SIGN NUKTA, LATIN SMALL LETTER B
+0061 0A3C 3099 093C 0334 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062; # (a◌਼◌゙◌़◌̴b; a◌̴◌਼◌़◌゙b; a◌̴◌਼◌़◌゙b; a◌̴◌਼◌़◌゙b; a◌̴◌਼◌़◌゙b; ) LATIN SMALL LETTER A, GURMUKHI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0A4D 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062; # (a◌ְ◌्◌゙◌੍b; a◌゙◌्◌੍◌ְb; a◌゙◌्◌੍◌ְb; a◌゙◌्◌੍◌ְb; a◌゙◌्◌੍◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, GURMUKHI SIGN VIRAMA, LATIN SMALL LETTER B
+0061 0A4D 05B0 094D 3099 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062; # (a◌੍◌ְ◌्◌゙b; a◌゙◌੍◌्◌ְb; a◌゙◌੍◌्◌ְb; a◌゙◌੍◌्◌ְb; a◌゙◌੍◌्◌ְb; ) LATIN SMALL LETTER A, GURMUKHI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 3099 093C 0334 0ABC 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062; # (a◌゙◌़◌̴◌઼b; a◌̴◌़◌઼◌゙b; a◌̴◌़◌઼◌゙b; a◌̴◌़◌઼◌゙b; a◌̴◌़◌઼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, GUJARATI SIGN NUKTA, LATIN SMALL LETTER B
+0061 0ABC 3099 093C 0334 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062; # (a◌઼◌゙◌़◌̴b; a◌̴◌઼◌़◌゙b; a◌̴◌઼◌़◌゙b; a◌̴◌઼◌़◌゙b; a◌̴◌઼◌़◌゙b; ) LATIN SMALL LETTER A, GUJARATI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0ACD 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062; # (a◌ְ◌्◌゙◌્b; a◌゙◌्◌્◌ְb; a◌゙◌्◌્◌ְb; a◌゙◌्◌્◌ְb; a◌゙◌्◌્◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, GUJARATI SIGN VIRAMA, LATIN SMALL LETTER B
+0061 0ACD 05B0 094D 3099 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062; # (a◌્◌ְ◌्◌゙b; a◌゙◌્◌्◌ְb; a◌゙◌્◌्◌ְb; a◌゙◌્◌्◌ְb; a◌゙◌્◌्◌ְb; ) LATIN SMALL LETTER A, GUJARATI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 3099 093C 0334 0B3C 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062; # (a◌゙◌़◌̴◌଼b; a◌̴◌़◌଼◌゙b; a◌̴◌़◌଼◌゙b; a◌̴◌़◌଼◌゙b; a◌̴◌़◌଼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, ORIYA SIGN NUKTA, LATIN SMALL LETTER B
+0061 0B3C 3099 093C 0334 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062; # (a◌଼◌゙◌़◌̴b; a◌̴◌଼◌़◌゙b; a◌̴◌଼◌़◌゙b; a◌̴◌଼◌़◌゙b; a◌̴◌଼◌़◌゙b; ) LATIN SMALL LETTER A, ORIYA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0B4D 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062; # (a◌ְ◌्◌゙◌୍b; a◌゙◌्◌୍◌ְb; a◌゙◌्◌୍◌ְb; a◌゙◌्◌୍◌ְb; a◌゙◌्◌୍◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, ORIYA SIGN VIRAMA, LATIN SMALL LETTER B
+0061 0B4D 05B0 094D 3099 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062; # (a◌୍◌ְ◌्◌゙b; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; ) LATIN SMALL LETTER A, ORIYA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0BCD 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062; # (a◌ְ◌्◌゙◌்b; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TAMIL SIGN VIRAMA, LATIN SMALL LETTER B
+0061 0BCD 05B0 094D 3099 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062; # (a◌்◌ְ◌्◌゙b; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; ) LATIN SMALL LETTER A, TAMIL SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0C4D 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062; # (a◌ְ◌्◌゙◌్b; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TELUGU SIGN VIRAMA, LATIN SMALL LETTER B
+0061 0C4D 05B0 094D 3099 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062; # (a◌్◌ְ◌्◌゙b; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; ) LATIN SMALL LETTER A, TELUGU SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 0C56 0C55 0711 0C55 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062; # (a◌ౖ◌ౕ◌ܑ◌ౕb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; ) LATIN SMALL LETTER A, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, TELUGU LENGTH MARK, LATIN SMALL LETTER B
+0061 0C55 0C56 0C55 0711 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062; # (a◌ౕ◌ౖ◌ౕ◌ܑb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; ) LATIN SMALL LETTER A, TELUGU LENGTH MARK, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, LATIN SMALL LETTER B
+0061 0E38 0C56 0C55 0C56 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062; # (a◌ุ◌ౖ◌ౕ◌ౖb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; ) LATIN SMALL LETTER A, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, TELUGU AI LENGTH MARK, LATIN SMALL LETTER B
+0061 0C56 0E38 0C56 0C55 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062; # (a◌ౖ◌ุ◌ౖ◌ౕb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; ) LATIN SMALL LETTER A, TELUGU AI LENGTH MARK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0CCD 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062; # (a◌ְ◌्◌゙◌್b; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KANNADA SIGN VIRAMA, LATIN SMALL LETTER B
+0061 0CCD 05B0 094D 3099 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062; # (a◌್◌ְ◌्◌゙b; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; ) LATIN SMALL LETTER A, KANNADA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0D4D 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062; # (a◌ְ◌्◌゙◌്b; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MALAYALAM SIGN VIRAMA, LATIN SMALL LETTER B
+0061 0D4D 05B0 094D 3099 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062; # (a◌്◌ְ◌्◌゙b; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; ) LATIN SMALL LETTER A, MALAYALAM SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0DCA 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062; # (a◌ְ◌्◌゙◌්b; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SINHALA SIGN AL-LAKUNA, LATIN SMALL LETTER B
+0061 0DCA 05B0 094D 3099 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062; # (a◌්◌ְ◌्◌゙b; a◌゙◌්◌्◌ְb; a◌゙◌්◌्◌ְb; a◌゙◌්◌्◌ְb; a◌゙◌්◌्◌ְb; ) LATIN SMALL LETTER A, SINHALA SIGN AL-LAKUNA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 0E48 0E38 0C56 0E38 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062; # (a◌่◌ุ◌ౖ◌ุb; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, THAI CHARACTER SARA U, LATIN SMALL LETTER B
+0061 0E38 0E48 0E38 0C56 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062; # (a◌ุ◌่◌ุ◌ౖb; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER SARA U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, LATIN SMALL LETTER B
+0061 0E48 0E38 0C56 0E39 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062; # (a◌่◌ุ◌ౖ◌ูb; a◌ౖ◌ุ◌ู◌่b; a◌ౖ◌ุ◌ู◌่b; a◌ౖ◌ุ◌ู◌่b; a◌ౖ◌ุ◌ู◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, THAI CHARACTER SARA UU, LATIN SMALL LETTER B
+0061 0E39 0E48 0E38 0C56 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062; # (a◌ู◌่◌ุ◌ౖb; a◌ౖ◌ู◌ุ◌่b; a◌ౖ◌ู◌ุ◌่b; a◌ౖ◌ู◌ุ◌่b; a◌ౖ◌ู◌ุ◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER SARA UU, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0E3A 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062; # (a◌ְ◌्◌゙◌ฺb; a◌゙◌्◌ฺ◌ְb; a◌゙◌्◌ฺ◌ְb; a◌゙◌्◌ฺ◌ְb; a◌゙◌्◌ฺ◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, THAI CHARACTER PHINTHU, LATIN SMALL LETTER B
+0061 0E3A 05B0 094D 3099 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062; # (a◌ฺ◌ְ◌्◌゙b; a◌゙◌ฺ◌्◌ְb; a◌゙◌ฺ◌्◌ְb; a◌゙◌ฺ◌्◌ְb; a◌゙◌ฺ◌्◌ְb; ) LATIN SMALL LETTER A, THAI CHARACTER PHINTHU, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 0EB8 0E48 0E38 0E48 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062; # (a◌ຸ◌่◌ุ◌่b; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B
+0061 0E48 0EB8 0E48 0E38 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062; # (a◌่◌ຸ◌่◌ุb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B
+0061 0EB8 0E48 0E38 0E49 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062; # (a◌ຸ◌่◌ุ◌้b; a◌ุ◌่◌้◌ຸb; a◌ุ◌่◌้◌ຸb; a◌ุ◌่◌้◌ຸb; a◌ุ◌่◌้◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI THO, LATIN SMALL LETTER B
+0061 0E49 0EB8 0E48 0E38 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062; # (a◌้◌ຸ◌่◌ุb; a◌ุ◌้◌่◌ຸb; a◌ุ◌้◌่◌ຸb; a◌ุ◌้◌่◌ຸb; a◌ุ◌้◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI THO, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B
+0061 0EB8 0E48 0E38 0E4A 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062; # (a◌ຸ◌่◌ุ◌๊b; a◌ุ◌่◌๊◌ຸb; a◌ุ◌่◌๊◌ຸb; a◌ุ◌่◌๊◌ຸb; a◌ุ◌่◌๊◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI TRI, LATIN SMALL LETTER B
+0061 0E4A 0EB8 0E48 0E38 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062; # (a◌๊◌ຸ◌่◌ุb; a◌ุ◌๊◌่◌ຸb; a◌ุ◌๊◌่◌ຸb; a◌ุ◌๊◌่◌ຸb; a◌ุ◌๊◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI TRI, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B
+0061 0EB8 0E48 0E38 0E4B 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062; # (a◌ຸ◌่◌ุ◌๋b; a◌ุ◌่◌๋◌ຸb; a◌ุ◌่◌๋◌ຸb; a◌ุ◌่◌๋◌ຸb; a◌ุ◌่◌๋◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI CHATTAWA, LATIN SMALL LETTER B
+0061 0E4B 0EB8 0E48 0E38 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062; # (a◌๋◌ຸ◌่◌ุb; a◌ุ◌๋◌่◌ຸb; a◌ุ◌๋◌่◌ຸb; a◌ุ◌๋◌่◌ຸb; a◌ุ◌๋◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI CHATTAWA, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B
+0061 0EC8 0EB8 0E48 0EB8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062; # (a◌່◌ຸ◌่◌ຸb; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B
+0061 0EB8 0EC8 0EB8 0E48 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062; # (a◌ຸ◌່◌ຸ◌่b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B
+0061 0EC8 0EB8 0E48 0EB9 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062; # (a◌່◌ຸ◌่◌ູb; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; ) LATIN SMALL LETTER A, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LAO VOWEL SIGN UU, LATIN SMALL LETTER B
+0061 0EB9 0EC8 0EB8 0E48 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062; # (a◌ູ◌່◌ຸ◌่b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO VOWEL SIGN UU, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B
+0061 0F71 0EC8 0EB8 0EC8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; # (a◌ཱ◌່◌ຸ◌່b; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI EK, LATIN SMALL LETTER B
+0061 0EC8 0F71 0EC8 0EB8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; # (a◌່◌ཱ◌່◌ຸb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI EK, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B
+0061 0F71 0EC8 0EB8 0EC9 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062; # (a◌ཱ◌່◌ຸ◌້b; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI THO, LATIN SMALL LETTER B
+0061 0EC9 0F71 0EC8 0EB8 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062; # (a◌້◌ཱ◌່◌ຸb; a◌ຸ◌້◌່◌ཱb; a◌ຸ◌້◌່◌ཱb; a◌ຸ◌້◌່◌ཱb; a◌ຸ◌້◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI THO, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B
+0061 0F71 0EC8 0EB8 0ECA 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062; # (a◌ཱ◌່◌ຸ◌໊b; a◌ຸ◌່◌໊◌ཱb; a◌ຸ◌່◌໊◌ཱb; a◌ຸ◌່◌໊◌ཱb; a◌ຸ◌່◌໊◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI TI, LATIN SMALL LETTER B
+0061 0ECA 0F71 0EC8 0EB8 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062; # (a◌໊◌ཱ◌່◌ຸb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI TI, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B
+0061 0F71 0EC8 0EB8 0ECB 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062; # (a◌ཱ◌່◌ຸ◌໋b; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI CATAWA, LATIN SMALL LETTER B
+0061 0ECB 0F71 0EC8 0EB8 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062; # (a◌໋◌ཱ◌່◌ຸb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI CATAWA, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B
+0061 059A 0316 302A 0F18 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062; # (a◌֚◌̖◌〪◌༘b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, LATIN SMALL LETTER B
+0061 0F18 059A 0316 302A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062; # (a◌༘◌֚◌̖◌〪b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0F19 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062; # (a◌֚◌̖◌〪◌༙b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, LATIN SMALL LETTER B
+0061 0F19 059A 0316 302A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062; # (a◌༙◌֚◌̖◌〪b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0F35 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062; # (a◌֚◌̖◌〪◌༵b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN MARK NGAS BZUNG NYI ZLA, LATIN SMALL LETTER B
+0061 0F35 059A 0316 302A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062; # (a◌༵◌֚◌̖◌〪b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN MARK NGAS BZUNG NYI ZLA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 059A 0316 302A 0F37 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062; # (a◌֚◌̖◌〪◌༷b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN MARK NGAS BZUNG SGOR RTAGS, LATIN SMALL LETTER B
+0061 0F37 059A 0316 302A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062; # (a◌༷◌֚◌̖◌〪b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN MARK NGAS BZUNG SGOR RTAGS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 302A 031B 0321 0F39 0062;0061 0321 031B 0F39 302A 0062;0061 0321 031B 0F39 302A 0062;0061 0321 031B 0F39 302A 0062;0061 0321 031B 0F39 302A 0062; # (a◌〪◌̛◌̡◌༹b; a◌̡◌̛◌༹◌〪b; a◌̡◌̛◌༹◌〪b; a◌̡◌̛◌༹◌〪b; a◌̡◌̛◌༹◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, TIBETAN MARK TSA -PHRU, LATIN SMALL LETTER B
+0061 0F39 302A 031B 0321 0062;0061 0321 0F39 031B 302A 0062;0061 0321 0F39 031B 302A 0062;0061 0321 0F39 031B 302A 0062;0061 0321 0F39 031B 302A 0062; # (a◌༹◌〪◌̛◌̡b; a◌̡◌༹◌̛◌〪b; a◌̡◌༹◌̛◌〪b; a◌̡◌༹◌̛◌〪b; a◌̡◌༹◌̛◌〪b; ) LATIN SMALL LETTER A, TIBETAN MARK TSA -PHRU, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING PALATALIZED HOOK BELOW, LATIN SMALL LETTER B
+0061 0F72 0F71 0EC8 0F71 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; # (a◌ི◌ཱ◌່◌ཱb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B
+0061 0F71 0F72 0F71 0EC8 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; # (a◌ཱ◌ི◌ཱ◌່b; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LATIN SMALL LETTER B
+0061 0F74 0F72 0F71 0F72 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062; # (a◌ུ◌ི◌ཱ◌ིb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN I, LATIN SMALL LETTER B
+0061 0F72 0F74 0F72 0F71 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062; # (a◌ི◌ུ◌ི◌ཱb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B
+0061 0321 0F74 0F72 0F74 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062; # (a◌̡◌ུ◌ི◌ུb; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; ) LATIN SMALL LETTER A, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B
+0061 0F74 0321 0F74 0F72 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062; # (a◌ུ◌̡◌ུ◌ིb; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, LATIN SMALL LETTER B
+0061 0F74 0F72 0F71 0F7A 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062; # (a◌ུ◌ི◌ཱ◌ེb; a◌ཱ◌ི◌ེ◌ུb; a◌ཱ◌ི◌ེ◌ུb; a◌ཱ◌ི◌ེ◌ུb; a◌ཱ◌ི◌ེ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN E, LATIN SMALL LETTER B
+0061 0F7A 0F74 0F72 0F71 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062; # (a◌ེ◌ུ◌ི◌ཱb; a◌ཱ◌ེ◌ི◌ུb; a◌ཱ◌ེ◌ི◌ུb; a◌ཱ◌ེ◌ི◌ུb; a◌ཱ◌ེ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN E, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B
+0061 0F74 0F72 0F71 0F7B 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062; # (a◌ུ◌ི◌ཱ◌ཻb; a◌ཱ◌ི◌ཻ◌ུb; a◌ཱ◌ི◌ཻ◌ུb; a◌ཱ◌ི◌ཻ◌ུb; a◌ཱ◌ི◌ཻ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN EE, LATIN SMALL LETTER B
+0061 0F7B 0F74 0F72 0F71 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062; # (a◌ཻ◌ུ◌ི◌ཱb; a◌ཱ◌ཻ◌ི◌ུb; a◌ཱ◌ཻ◌ི◌ུb; a◌ཱ◌ཻ◌ི◌ུb; a◌ཱ◌ཻ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN EE, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B
+0061 0F74 0F72 0F71 0F7C 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062; # (a◌ུ◌ི◌ཱ◌ོb; a◌ཱ◌ི◌ོ◌ུb; a◌ཱ◌ི◌ོ◌ུb; a◌ཱ◌ི◌ོ◌ུb; a◌ཱ◌ི◌ོ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN O, LATIN SMALL LETTER B
+0061 0F7C 0F74 0F72 0F71 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062; # (a◌ོ◌ུ◌ི◌ཱb; a◌ཱ◌ོ◌ི◌ུb; a◌ཱ◌ོ◌ི◌ུb; a◌ཱ◌ོ◌ི◌ུb; a◌ཱ◌ོ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN O, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B
+0061 0F74 0F72 0F71 0F7D 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062; # (a◌ུ◌ི◌ཱ◌ཽb; a◌ཱ◌ི◌ཽ◌ུb; a◌ཱ◌ི◌ཽ◌ུb; a◌ཱ◌ི◌ཽ◌ུb; a◌ཱ◌ི◌ཽ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN OO, LATIN SMALL LETTER B
+0061 0F7D 0F74 0F72 0F71 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062; # (a◌ཽ◌ུ◌ི◌ཱb; a◌ཱ◌ཽ◌ི◌ུb; a◌ཱ◌ཽ◌ི◌ུb; a◌ཱ◌ཽ◌ི◌ུb; a◌ཱ◌ཽ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN OO, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B
+0061 0F74 0F72 0F71 0F80 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062; # (a◌ུ◌ི◌ཱ◌ྀb; a◌ཱ◌ི◌ྀ◌ུb; a◌ཱ◌ི◌ྀ◌ུb; a◌ཱ◌ི◌ྀ◌ུb; a◌ཱ◌ི◌ྀ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN REVERSED I, LATIN SMALL LETTER B
+0061 0F80 0F74 0F72 0F71 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062; # (a◌ྀ◌ུ◌ི◌ཱb; a◌ཱ◌ྀ◌ི◌ུb; a◌ཱ◌ྀ◌ི◌ུb; a◌ཱ◌ྀ◌ི◌ུb; a◌ཱ◌ྀ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN REVERSED I, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0F82 0062;00E0 05AE 0F82 0315 0062;0061 05AE 0300 0F82 0315 0062;00E0 05AE 0F82 0315 0062;0061 05AE 0300 0F82 0315 0062; # (a◌̕◌̀◌֮◌ྂb; à◌֮◌ྂ◌̕b; a◌֮◌̀◌ྂ◌̕b; à◌֮◌ྂ◌̕b; a◌֮◌̀◌ྂ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN NYI ZLA NAA DA, LATIN SMALL LETTER B
+0061 0F82 0315 0300 05AE 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062; # (a◌ྂ◌̕◌̀◌֮b; a◌֮◌ྂ◌̀◌̕b; a◌֮◌ྂ◌̀◌̕b; a◌֮◌ྂ◌̀◌̕b; a◌֮◌ྂ◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN NYI ZLA NAA DA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0F83 0062;00E0 05AE 0F83 0315 0062;0061 05AE 0300 0F83 0315 0062;00E0 05AE 0F83 0315 0062;0061 05AE 0300 0F83 0315 0062; # (a◌̕◌̀◌֮◌ྃb; à◌֮◌ྃ◌̕b; a◌֮◌̀◌ྃ◌̕b; à◌֮◌ྃ◌̕b; a◌֮◌̀◌ྃ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN SNA LDAN, LATIN SMALL LETTER B
+0061 0F83 0315 0300 05AE 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062; # (a◌ྃ◌̕◌̀◌֮b; a◌֮◌ྃ◌̀◌̕b; a◌֮◌ྃ◌̀◌̕b; a◌֮◌ྃ◌̀◌̕b; a◌֮◌ྃ◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN SNA LDAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 05B0 094D 3099 0F84 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062; # (a◌ְ◌्◌゙◌྄b; a◌゙◌्◌྄◌ְb; a◌゙◌्◌྄◌ְb; a◌゙◌्◌྄◌ְb; a◌゙◌्◌྄◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TIBETAN MARK HALANTA, LATIN SMALL LETTER B
+0061 0F84 05B0 094D 3099 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062; # (a◌྄◌ְ◌्◌゙b; a◌゙◌྄◌्◌ְb; a◌゙◌྄◌्◌ְb; a◌゙◌྄◌्◌ְb; a◌゙◌྄◌्◌ְb; ) LATIN SMALL LETTER A, TIBETAN MARK HALANTA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0F86 0062;00E0 05AE 0F86 0315 0062;0061 05AE 0300 0F86 0315 0062;00E0 05AE 0F86 0315 0062;0061 05AE 0300 0F86 0315 0062; # (a◌̕◌̀◌֮◌྆b; à◌֮◌྆◌̕b; a◌֮◌̀◌྆◌̕b; à◌֮◌྆◌̕b; a◌֮◌̀◌྆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN LCI RTAGS, LATIN SMALL LETTER B
+0061 0F86 0315 0300 05AE 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062; # (a◌྆◌̕◌̀◌֮b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN LCI RTAGS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 0F87 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062; # (a◌̕◌̀◌֮◌྇b; à◌֮◌྇◌̕b; a◌֮◌̀◌྇◌̕b; à◌֮◌྇◌̕b; a◌֮◌̀◌྇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN YANG RTAGS, LATIN SMALL LETTER B
+0061 0F87 0315 0300 05AE 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062; # (a◌྇◌̕◌̀◌֮b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN YANG RTAGS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 059A 0316 302A 0FC6 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062; # (a◌֚◌̖◌〪◌࿆b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN SYMBOL PADMA GDAN, LATIN SMALL LETTER B
+0061 0FC6 059A 0316 302A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062; # (a◌࿆◌֚◌̖◌〪b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN SYMBOL PADMA GDAN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 3099 093C 0334 1037 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062; # (a◌゙◌़◌̴◌့b; a◌̴◌़◌့◌゙b; a◌̴◌़◌့◌゙b; a◌̴◌़◌့◌゙b; a◌̴◌़◌့◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, MYANMAR SIGN DOT BELOW, LATIN SMALL LETTER B
+0061 1037 3099 093C 0334 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062; # (a◌့◌゙◌़◌̴b; a◌̴◌့◌़◌゙b; a◌̴◌့◌़◌゙b; a◌̴◌့◌़◌゙b; a◌̴◌့◌़◌゙b; ) LATIN SMALL LETTER A, MYANMAR SIGN DOT BELOW, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 05B0 094D 3099 1039 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062; # (a◌ְ◌्◌゙◌္b; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MYANMAR SIGN VIRAMA, LATIN SMALL LETTER B
+0061 1039 05B0 094D 3099 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062; # (a◌္◌ְ◌्◌゙b; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; ) LATIN SMALL LETTER A, MYANMAR SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 05B0 094D 3099 17D2 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062; # (a◌ְ◌्◌゙◌្b; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KHMER SIGN COENG, LATIN SMALL LETTER B
+0061 17D2 05B0 094D 3099 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062; # (a◌្◌ְ◌्◌゙b; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; ) LATIN SMALL LETTER A, KHMER SIGN COENG, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 0300 05AE 302E 18A9 0062;00E0 302E 05AE 18A9 0062;0061 302E 05AE 18A9 0300 0062;00E0 302E 05AE 18A9 0062;0061 302E 05AE 18A9 0300 0062; # (a◌̀◌֮◌〮◌ᢩb; à◌〮◌֮◌ᢩb; a◌〮◌֮◌ᢩ◌̀b; à◌〮◌֮◌ᢩb; a◌〮◌֮◌ᢩ◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, MONGOLIAN LETTER ALI GALI DAGALGA, LATIN SMALL LETTER B
+0061 18A9 0300 05AE 302E 0062;00E0 302E 18A9 05AE 0062;0061 302E 18A9 05AE 0300 0062;00E0 302E 18A9 05AE 0062;0061 302E 18A9 05AE 0300 0062; # (a◌ᢩ◌̀◌֮◌〮b; à◌〮◌ᢩ◌֮b; a◌〮◌ᢩ◌֮◌̀b; à◌〮◌ᢩ◌֮b; a◌〮◌ᢩ◌֮◌̀b; ) LATIN SMALL LETTER A, MONGOLIAN LETTER ALI GALI DAGALGA, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20D0 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062; # (a◌̕◌̀◌֮◌⃐b; à◌֮◌⃐◌̕b; a◌֮◌̀◌⃐◌̕b; à◌֮◌⃐◌̕b; a◌֮◌̀◌⃐◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT HARPOON ABOVE, LATIN SMALL LETTER B
+0061 20D0 0315 0300 05AE 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062; # (a◌⃐◌̕◌̀◌֮b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT HARPOON ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20D1 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062; # (a◌̕◌̀◌֮◌⃑b; à◌֮◌⃑◌̕b; a◌֮◌̀◌⃑◌̕b; à◌֮◌⃑◌̕b; a◌֮◌̀◌⃑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RIGHT HARPOON ABOVE, LATIN SMALL LETTER B
+0061 20D1 0315 0300 05AE 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062; # (a◌⃑◌̕◌̀◌֮b; a◌֮◌⃑◌̀◌̕b; a◌֮◌⃑◌̀◌̕b; a◌֮◌⃑◌̀◌̕b; a◌֮◌⃑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RIGHT HARPOON ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 093C 0334 20D2 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062; # (a◌़◌̴◌⃒b; a◌̴◌⃒◌़b; a◌̴◌⃒◌़b; a◌̴◌⃒◌़b; a◌̴◌⃒◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LONG VERTICAL LINE OVERLAY, LATIN SMALL LETTER B
+0061 20D2 093C 0334 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062; # (a◌⃒◌़◌̴b; a◌⃒◌̴◌़b; a◌⃒◌̴◌़b; a◌⃒◌̴◌़b; a◌⃒◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LONG VERTICAL LINE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 093C 0334 20D3 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062; # (a◌़◌̴◌⃓b; a◌̴◌⃓◌़b; a◌̴◌⃓◌़b; a◌̴◌⃓◌़b; a◌̴◌⃓◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING SHORT VERTICAL LINE OVERLAY, LATIN SMALL LETTER B
+0061 20D3 093C 0334 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062; # (a◌⃓◌़◌̴b; a◌⃓◌̴◌़b; a◌⃓◌̴◌़b; a◌⃓◌̴◌़b; a◌⃓◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING SHORT VERTICAL LINE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20D4 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062; # (a◌̕◌̀◌֮◌⃔b; à◌֮◌⃔◌̕b; a◌֮◌̀◌⃔◌̕b; à◌֮◌⃔◌̕b; a◌֮◌̀◌⃔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ANTICLOCKWISE ARROW ABOVE, LATIN SMALL LETTER B
+0061 20D4 0315 0300 05AE 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062; # (a◌⃔◌̕◌̀◌֮b; a◌֮◌⃔◌̀◌̕b; a◌֮◌⃔◌̀◌̕b; a◌֮◌⃔◌̀◌̕b; a◌֮◌⃔◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ANTICLOCKWISE ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20D5 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062; # (a◌̕◌̀◌֮◌⃕b; à◌֮◌⃕◌̕b; a◌֮◌̀◌⃕◌̕b; à◌֮◌⃕◌̕b; a◌֮◌̀◌⃕◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CLOCKWISE ARROW ABOVE, LATIN SMALL LETTER B
+0061 20D5 0315 0300 05AE 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062; # (a◌⃕◌̕◌̀◌֮b; a◌֮◌⃕◌̀◌̕b; a◌֮◌⃕◌̀◌̕b; a◌֮◌⃕◌̀◌̕b; a◌֮◌⃕◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CLOCKWISE ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20D6 0062;00E0 05AE 20D6 0315 0062;0061 05AE 0300 20D6 0315 0062;00E0 05AE 20D6 0315 0062;0061 05AE 0300 20D6 0315 0062; # (a◌̕◌̀◌֮◌⃖b; à◌֮◌⃖◌̕b; a◌֮◌̀◌⃖◌̕b; à◌֮◌⃖◌̕b; a◌֮◌̀◌⃖◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT ARROW ABOVE, LATIN SMALL LETTER B
+0061 20D6 0315 0300 05AE 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062; # (a◌⃖◌̕◌̀◌֮b; a◌֮◌⃖◌̀◌̕b; a◌֮◌⃖◌̀◌̕b; a◌֮◌⃖◌̀◌̕b; a◌֮◌⃖◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20D7 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062; # (a◌̕◌̀◌֮◌⃗b; à◌֮◌⃗◌̕b; a◌֮◌̀◌⃗◌̕b; à◌֮◌⃗◌̕b; a◌֮◌̀◌⃗◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RIGHT ARROW ABOVE, LATIN SMALL LETTER B
+0061 20D7 0315 0300 05AE 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062; # (a◌⃗◌̕◌̀◌֮b; a◌֮◌⃗◌̀◌̕b; a◌֮◌⃗◌̀◌̕b; a◌֮◌⃗◌̀◌̕b; a◌֮◌⃗◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RIGHT ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 093C 0334 20D8 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062; # (a◌़◌̴◌⃘b; a◌̴◌⃘◌़b; a◌̴◌⃘◌़b; a◌̴◌⃘◌़b; a◌̴◌⃘◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING RING OVERLAY, LATIN SMALL LETTER B
+0061 20D8 093C 0334 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062; # (a◌⃘◌़◌̴b; a◌⃘◌̴◌़b; a◌⃘◌̴◌़b; a◌⃘◌̴◌़b; a◌⃘◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING RING OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 093C 0334 20D9 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062; # (a◌़◌̴◌⃙b; a◌̴◌⃙◌़b; a◌̴◌⃙◌़b; a◌̴◌⃙◌़b; a◌̴◌⃙◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING CLOCKWISE RING OVERLAY, LATIN SMALL LETTER B
+0061 20D9 093C 0334 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062; # (a◌⃙◌़◌̴b; a◌⃙◌̴◌़b; a◌⃙◌̴◌़b; a◌⃙◌̴◌़b; a◌⃙◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING CLOCKWISE RING OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 093C 0334 20DA 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062; # (a◌़◌̴◌⃚b; a◌̴◌⃚◌़b; a◌̴◌⃚◌़b; a◌̴◌⃚◌़b; a◌̴◌⃚◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING ANTICLOCKWISE RING OVERLAY, LATIN SMALL LETTER B
+0061 20DA 093C 0334 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062; # (a◌⃚◌़◌̴b; a◌⃚◌̴◌़b; a◌⃚◌̴◌़b; a◌⃚◌̴◌़b; a◌⃚◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING ANTICLOCKWISE RING OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20DB 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062; # (a◌̕◌̀◌֮◌⃛b; à◌֮◌⃛◌̕b; a◌֮◌̀◌⃛◌̕b; à◌֮◌⃛◌̕b; a◌֮◌̀◌⃛◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING THREE DOTS ABOVE, LATIN SMALL LETTER B
+0061 20DB 0315 0300 05AE 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062; # (a◌⃛◌̕◌̀◌֮b; a◌֮◌⃛◌̀◌̕b; a◌֮◌⃛◌̀◌̕b; a◌֮◌⃛◌̀◌̕b; a◌֮◌⃛◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING THREE DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20DC 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062; # (a◌̕◌̀◌֮◌⃜b; à◌֮◌⃜◌̕b; a◌֮◌̀◌⃜◌̕b; à◌֮◌⃜◌̕b; a◌֮◌̀◌⃜◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING FOUR DOTS ABOVE, LATIN SMALL LETTER B
+0061 20DC 0315 0300 05AE 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062; # (a◌⃜◌̕◌̀◌֮b; a◌֮◌⃜◌̀◌̕b; a◌֮◌⃜◌̀◌̕b; a◌֮◌⃜◌̀◌̕b; a◌֮◌⃜◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING FOUR DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE 20E1 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062; # (a◌̕◌̀◌֮◌⃡b; à◌֮◌⃡◌̕b; a◌֮◌̀◌⃡◌̕b; à◌֮◌⃡◌̕b; a◌֮◌̀◌⃡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT RIGHT ARROW ABOVE, LATIN SMALL LETTER B
+0061 20E1 0315 0300 05AE 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062; # (a◌⃡◌̕◌̀◌֮b; a◌֮◌⃡◌̀◌̕b; a◌֮◌⃡◌̀◌̕b; a◌֮◌⃡◌̀◌̕b; a◌֮◌⃡◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT RIGHT ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0316 302A 031B 302A 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; # (a◌̖◌〪◌̛◌〪b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B
+0061 302A 0316 302A 031B 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; # (a◌〪◌̖◌〪◌̛b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, LATIN SMALL LETTER B
+0061 0300 05AE 302E 302B 0062;00E0 302E 05AE 302B 0062;0061 302E 05AE 302B 0300 0062;00E0 302E 05AE 302B 0062;0061 302E 05AE 302B 0300 0062; # (a◌̀◌֮◌〮◌〫b; à◌〮◌֮◌〫b; a◌〮◌֮◌〫◌̀b; à◌〮◌֮◌〫b; a◌〮◌֮◌〫◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, IDEOGRAPHIC RISING TONE MARK, LATIN SMALL LETTER B
+0061 302B 0300 05AE 302E 0062;00E0 302E 302B 05AE 0062;0061 302E 302B 05AE 0300 0062;00E0 302E 302B 05AE 0062;0061 302E 302B 05AE 0300 0062; # (a◌〫◌̀◌֮◌〮b; à◌〮◌〫◌֮b; a◌〮◌〫◌֮◌̀b; à◌〮◌〫◌֮b; a◌〮◌〫◌֮◌̀b; ) LATIN SMALL LETTER A, IDEOGRAPHIC RISING TONE MARK, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, LATIN SMALL LETTER B
+0061 0362 0315 0300 302C 0062;00E0 0315 302C 0362 0062;0061 0300 0315 302C 0362 0062;00E0 0315 302C 0362 0062;0061 0300 0315 302C 0362 0062; # (a◌͢◌̕◌̀◌〬b; à◌̕◌〬◌͢b; a◌̀◌̕◌〬◌͢b; à◌̕◌〬◌͢b; a◌̀◌̕◌〬◌͢b; ) LATIN SMALL LETTER A, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, IDEOGRAPHIC DEPARTING TONE MARK, LATIN SMALL LETTER B
+0061 302C 0362 0315 0300 0062;00E0 302C 0315 0362 0062;0061 0300 302C 0315 0362 0062;00E0 302C 0315 0362 0062;0061 0300 302C 0315 0362 0062; # (a◌〬◌͢◌̕◌̀b; à◌〬◌̕◌͢b; a◌̀◌〬◌̕◌͢b; à◌〬◌̕◌͢b; a◌̀◌〬◌̕◌͢b; ) LATIN SMALL LETTER A, IDEOGRAPHIC DEPARTING TONE MARK, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
+0061 302E 059A 0316 302D 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062; # (a◌〮◌֚◌̖◌〭b; a◌̖◌֚◌〭◌〮b; a◌̖◌֚◌〭◌〮b; a◌̖◌֚◌〭◌〮b; a◌̖◌֚◌〭◌〮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC ENTERING TONE MARK, LATIN SMALL LETTER B
+0061 302D 302E 059A 0316 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062; # (a◌〭◌〮◌֚◌̖b; a◌̖◌〭◌֚◌〮b; a◌̖◌〭◌֚◌〮b; a◌̖◌〭◌֚◌〮b; a◌̖◌〭◌֚◌〮b; ) LATIN SMALL LETTER A, IDEOGRAPHIC ENTERING TONE MARK, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B
+0061 05AE 302E 059A 302E 0062;0061 059A 302E 302E 05AE 0062;0061 059A 302E 302E 05AE 0062;0061 059A 302E 302E 05AE 0062;0061 059A 302E 302E 05AE 0062; # (a◌֮◌〮◌֚◌〮b; a◌֚◌〮◌〮◌֮b; a◌֚◌〮◌〮◌֮b; a◌֚◌〮◌〮◌֮b; a◌֚◌〮◌〮◌֮b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, HANGUL SINGLE DOT TONE MARK, LATIN SMALL LETTER B
+0061 302E 05AE 302E 059A 0062;0061 059A 302E 302E 05AE 0062;0061 059A 302E 302E 05AE 0062;0061 059A 302E 302E 05AE 0062;0061 059A 302E 302E 05AE 0062; # (a◌〮◌֮◌〮◌֚b; a◌֚◌〮◌〮◌֮b; a◌֚◌〮◌〮◌֮b; a◌֚◌〮◌〮◌֮b; a◌֚◌〮◌〮◌֮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, LATIN SMALL LETTER B
+0061 05AE 302E 059A 302F 0062;0061 059A 302E 302F 05AE 0062;0061 059A 302E 302F 05AE 0062;0061 059A 302E 302F 05AE 0062;0061 059A 302E 302F 05AE 0062; # (a◌֮◌〮◌֚◌〯b; a◌֚◌〮◌〯◌֮b; a◌֚◌〮◌〯◌֮b; a◌֚◌〮◌〯◌֮b; a◌֚◌〮◌〯◌֮b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, HANGUL DOUBLE DOT TONE MARK, LATIN SMALL LETTER B
+0061 302F 05AE 302E 059A 0062;0061 059A 302F 302E 05AE 0062;0061 059A 302F 302E 05AE 0062;0061 059A 302F 302E 05AE 0062;0061 059A 302F 302E 05AE 0062; # (a◌〯◌֮◌〮◌֚b; a◌֚◌〯◌〮◌֮b; a◌֚◌〯◌〮◌֮b; a◌֚◌〯◌〮◌֮b; a◌֚◌〯◌〮◌֮b; ) LATIN SMALL LETTER A, HANGUL DOUBLE DOT TONE MARK, HEBREW ACCENT ZINOR, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, LATIN SMALL LETTER B
+0061 094D 3099 093C 3099 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062; # (a◌्◌゙◌़◌゙b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 3099 094D 3099 093C 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062; # (a◌゙◌्◌゙◌़b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, LATIN SMALL LETTER B
+0061 094D 3099 093C 309A 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062; # (a◌्◌゙◌़◌゚b; a◌़◌゙◌゚◌्b; a◌़◌゙◌゚◌्b; a◌़◌゙◌゚◌्b; a◌़◌゙◌゚◌्b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, LATIN SMALL LETTER B
+0061 309A 094D 3099 093C 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062; # (a◌゚◌्◌゙◌़b; a◌़◌゚◌゙◌्b; a◌़◌゚◌゙◌्b; a◌़◌゚◌゙◌्b; a◌़◌゚◌゙◌्b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, LATIN SMALL LETTER B
+0061 064B FB1E 05C2 FB1E 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; # (a◌ً◌ﬞ◌ׂ◌ﬞb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; ) LATIN SMALL LETTER A, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, HEBREW POINT JUDEO-SPANISH VARIKA, LATIN SMALL LETTER B
+0061 FB1E 064B FB1E 05C2 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; # (a◌ﬞ◌ً◌ﬞ◌ׂb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; ) LATIN SMALL LETTER A, HEBREW POINT JUDEO-SPANISH VARIKA, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, LATIN SMALL LETTER B
+0061 0315 0300 05AE FE20 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062; # (a◌̕◌̀◌֮◌︠b; à◌֮◌︠◌̕b; a◌֮◌̀◌︠◌̕b; à◌֮◌︠◌̕b; a◌֮◌̀◌︠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LIGATURE LEFT HALF, LATIN SMALL LETTER B
+0061 FE20 0315 0300 05AE 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062; # (a◌︠◌̕◌̀◌֮b; a◌֮◌︠◌̀◌̕b; a◌֮◌︠◌̀◌̕b; a◌֮◌︠◌̀◌̕b; a◌֮◌︠◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LIGATURE LEFT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE FE21 0062;00E0 05AE FE21 0315 0062;0061 05AE 0300 FE21 0315 0062;00E0 05AE FE21 0315 0062;0061 05AE 0300 FE21 0315 0062; # (a◌̕◌̀◌֮◌︡b; à◌֮◌︡◌̕b; a◌֮◌̀◌︡◌̕b; à◌֮◌︡◌̕b; a◌֮◌̀◌︡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LIGATURE RIGHT HALF, LATIN SMALL LETTER B
+0061 FE21 0315 0300 05AE 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062; # (a◌︡◌̕◌̀◌֮b; a◌֮◌︡◌̀◌̕b; a◌֮◌︡◌̀◌̕b; a◌֮◌︡◌̀◌̕b; a◌֮◌︡◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LIGATURE RIGHT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE FE22 0062;00E0 05AE FE22 0315 0062;0061 05AE 0300 FE22 0315 0062;00E0 05AE FE22 0315 0062;0061 05AE 0300 FE22 0315 0062; # (a◌̕◌̀◌֮◌︢b; à◌֮◌︢◌̕b; a◌֮◌̀◌︢◌̕b; à◌֮◌︢◌̕b; a◌֮◌̀◌︢◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE TILDE LEFT HALF, LATIN SMALL LETTER B
+0061 FE22 0315 0300 05AE 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062; # (a◌︢◌̕◌̀◌֮b; a◌֮◌︢◌̀◌̕b; a◌֮◌︢◌̀◌̕b; a◌֮◌︢◌̀◌̕b; a◌֮◌︢◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE TILDE LEFT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+0061 0315 0300 05AE FE23 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062; # (a◌̕◌̀◌֮◌︣b; à◌֮◌︣◌̕b; a◌֮◌̀◌︣◌̕b; à◌֮◌︣◌̕b; a◌֮◌̀◌︣◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE TILDE RIGHT HALF, LATIN SMALL LETTER B
+0061 FE23 0315 0300 05AE 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062; # (a◌︣◌̕◌̀◌֮b; a◌֮◌︣◌̀◌̕b; a◌֮◌︣◌̀◌̕b; a◌֮◌︣◌̀◌̕b; a◌֮◌︣◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE TILDE RIGHT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
+#
+# END OF FILE
diff --git a/src/data/unicode/SpecialCasing-2.txt b/src/data/unicode/SpecialCasing-2.txt
new file mode 100755
index 0000000..af002ef
--- /dev/null
+++ b/src/data/unicode/SpecialCasing-2.txt
@@ -0,0 +1,219 @@
+# SpecialCasing-2.txt
+#
+# Special Casing Properties
+#
+# This file is a supplement to the UnicodeData file.
+# It contains additional information about the casing of Unicode characters.
+# (For compatibility, the UnicodeData.txt file only contains case mappings for
+# characters where they are 1-1, and does not have locale-specific mappings.)
+# These are informative character properties.
+#
+# Send comments to mark@unicode.org
+#
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <entry> := <case_mapping> <condition_list>? (<s>* "#" <comment>)?
+#
+# <case_mapping> := <source> <sep> <lower> <sep> <title> <sep> <upper> <sep>
+#
+# <source> := <code_point>
+# <sep> := <s>* ";" <s>*
+# <lower> := <code_point_list>
+# <title> := <code_point_list>
+# <upper> := <code_point_list>
+# <code_point_list> := <code_point> (<s>+ <code_point>)*
+# <code_point> := <hex><hex><hex><hex>
+# <hex> := [0-1A-Fa-f]
+# <s> := <space>
+#
+# <condition_list> := <locale>? (<s>+ <context>)*
+# <locale> := <ISO_3166_code> ( "_" <ISO_639_code> )? ( "_" <variant> )?
+# <ISO_3166_code> := 2-letter country code,
+#                    as in http://www.unicode.org/unicode/onlinedat/countries.html
+# <ISO_639_code> :=  2-letter code,
+#                    as in http://www.unicode.org/unicode/onlinedat/languages.html
+# <context> := "FINAL" | "NON_FINAL" | "MODERN" | "NON_MODERN"
+#
+#  A condition list overrides the normal behavior if any of the listed conditions is true.
+#   FINAL:  The letter is not followed by a letter of category L* (e.g. Ll, Lt, Lu, Lm, or Lo).
+#   MODERN: The mapping is only used for modern text.
+#  Conditions preceded by "NON_" represent the negation of the condition
+#
+# New contexts may be added in the future.
+# Parsers of this file must be prepared to deal with that situation.
+# Additional whitespace around elements is optional. Blank lines are ignored in parsing.
+# On any line, all text following "#" is a comment, and are ignored in parsing.
+# ================================================================================
+
+# ================================================================================
+# Unconditional mappings
+# ================================================================================
+
+# The German es-zed is special--the normal mapping is to SS.
+# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
+
+00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
+
+# Ligatures
+
+FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
+FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
+FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
+FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
+FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
+FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
+FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
+
+0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
+FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
+
+# No corresponding uppercase precomposed character
+
+0149; 0149; 02BC 006E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
+1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+
+# IMPORTANT-when capitalizing iota-subscript (0345)
+#  It MUST be in normalized form--moved to the end of any sequence of combining marks.
+#  This is because logically it represents a following base character!
+#  E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
+# It should never be the first character in a word, so in titlecasing it can be left as is.
+
+# The following cases are already in the UnicodeData file, so are only commented here.
+
+# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
+
+# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
+# have special uppercases.
+# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
+
+1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+
+1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+
+# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
+
+1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+
+1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+
+# ================================================================================
+# Conditional mappings
+# ================================================================================
+
+# Special case for final form of sigma
+
+03A3; 03C2; 03A3; 03A3; FINAL; # GREEK CAPITAL LETTER SIGMA
+
+# Note: the following cases for non-final are already in the UnicodeData file.
+
+# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
+# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
+
+# Note: the following cases are not included, since they would normalize in lowercasing
+
+# 03C3; 03C2; 03A3; 03A3; FINAL; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C3; 03A3; 03A3; NON_FINAL; # GREEK SMALL LETTER FINAL SIGMA
+
+# ================================================================================
+# Locale-sensitive mappings
+# ================================================================================
+
+# Turkish
+
+0049; 0131; 0049; 0049; TR; # LATIN CAPITAL LETTER I
+0069; 0069; 0130; 0130; TR; # LATIN SMALL LETTER I
+
+# Note: the following cases are already in the UnicodeData file.
+
+# 0131; 0131; 0049; 0049; TR; # LATIN SMALL LETTER DOTLESS I
+# 0130; 0069; 0130; 0130; TR; # LATIN CAPITAL LETTER I WITH DOT ABOVE
diff --git a/src/data/unicode/SpecialCasing.txt b/src/data/unicode/SpecialCasing.txt
new file mode 100755
index 0000000..c1288ba
--- /dev/null
+++ b/src/data/unicode/SpecialCasing.txt
@@ -0,0 +1,221 @@
+# SpecialCasing-2.txt
+#
+# Special Casing Properties
+#
+# This file is a supplement to the UnicodeData file.
+# It contains additional information about the casing of Unicode characters.
+# (For compatibility, the UnicodeData.txt file only contains case mappings for
+# characters where they are 1-1, and does not have locale-specific mappings.)
+# These are informative character properties.
+#
+# Send comments to mark@unicode.org
+#
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <entry> := <case_mapping> <condition_list>? (<s>* "#" <comment>)?
+#
+# <case_mapping> := <source> <sep> <lower> <sep> <title> <sep> <upper> <sep>
+#
+# <source> := <code_point>
+# <sep> := <s>* ";" <s>*
+# <lower> := <code_point_list>
+# <title> := <code_point_list>
+# <upper> := <code_point_list>
+# <code_point_list> := <code_point> (<s>+ <code_point>)*
+# <code_point> := <hex><hex><hex><hex>
+# <hex> := [0-1A-Fa-f]
+# <s> := <space>
+#
+# <condition_list> := <locale>? (<s>+ <context>)*
+# <locale> := <ISO_3166_code> ( "_" <ISO_639_code> )? ( "_" <variant> )?
+# <ISO_3166_code> := 2-letter country code,
+#                    as in http://www.unicode.org/unicode/onlinedat/countries.html
+# <ISO_639_code> :=  2-letter code,
+#                    as in http://www.unicode.org/unicode/onlinedat/languages.html
+# <context> := "FINAL" | "NON_FINAL" | "MODERN" | "NON_MODERN"
+#
+#  A condition list overrides the normal behavior if any of the listed conditions is true.
+#   FINAL:  The letter is not followed by a letter of category L* (e.g. Ll, Lt, Lu, Lm, or Lo).
+#   MODERN: The mapping is only used for modern text.
+#  Conditions preceded by "NON_" represent the negation of the condition
+#
+# New contexts may be added in the future.
+# Parsers of this file must be prepared to deal with that situation.
+# Additional whitespace around elements is optional. Blank lines are ignored in parsing.
+# On any line, all text following "#" is a comment, and are ignored in parsing.
+# ================================================================================
+
+# ================================================================================
+# Unconditional mappings
+# ================================================================================
+
+# The German es-zed is special--the normal mapping is to SS.
+# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
+
+00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
+
+# Ligatures
+
+FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
+FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
+FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
+FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
+FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
+FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
+FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
+
+0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
+FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
+
+# No corresponding uppercase precomposed character
+
+0149; 0149; 02BC 006E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
+1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+
+# IMPORTANT-when capitalizing iota-subscript (0345)
+#  It MUST be in normalized form--moved to the end of any sequence of combining marks.
+#  This is because logically it represents a following base character!
+#  E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
+# It should never be the first character in a word, so in titlecasing it can be left as is.
+
+# The following cases are already in the UnicodeData file, so are only commented here.
+
+# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
+
+# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
+# have special uppercases.
+# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
+
+1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+
+1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+
+# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
+
+1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+
+1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+
+# ================================================================================
+# Conditional mappings
+# ================================================================================
+
+# Special case for final form of sigma
+
+03A3; 03C2; 03A3; 03A3; FINAL; # GREEK CAPITAL LETTER SIGMA
+
+# Note: the following cases for non-final are already in the UnicodeData file.
+
+# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
+# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
+
+# Note: the following cases are not included, since they would normalize in lowercasing
+
+# 03C3; 03C2; 03A3; 03A3; FINAL; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C3; 03A3; 03A3; NON_FINAL; # GREEK SMALL LETTER FINAL SIGMA
+
+# ================================================================================
+# Locale-sensitive mappings
+# ================================================================================
+
+# Turkish
+
+0049; 0131; 0049; 0049; TR; # LATIN CAPITAL LETTER I
+0069; 0069; 0130; 0130; TR; # LATIN SMALL LETTER I
+
+# Note: the following cases are already in the UnicodeData file.
+
+# 0131; 0131; 0049; 0049; TR; # LATIN SMALL LETTER DOTLESS I
+# 0130; 0069; 0130; 0130; TR; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+
+
diff --git a/src/data/unicode/UnicodeData-2.1.2.txt b/src/data/unicode/UnicodeData-2.1.2.txt
new file mode 100755
index 0000000..bca59e6
--- /dev/null
+++ b/src/data/unicode/UnicodeData-2.1.2.txt
@@ -0,0 +1,6590 @@
+0000;<control>;Cc;0;ON;;;;;N;NULL;;;;
+0001;<control>;Cc;0;ON;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;ON;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;ON;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;ON;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;ON;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;ON;;;;;N;BELL;;;;
+0008;<control>;Cc;0;ON;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+000A;<control>;Cc;0;ON;;;;;N;LINE FEED;;;;
+000B;<control>;Cc;0;ON;;;;;N;VERTICAL TABULATION;;;;
+000C;<control>;Cc;0;ON;;;;;N;FORM FEED;;;;
+000D;<control>;Cc;0;ON;;;;;N;CARRIAGE RETURN;;;;
+000E;<control>;Cc;0;ON;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;ON;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;ON;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;ON;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;ON;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;ON;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;ON;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;ON;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;ON;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;ON;;;;;N;FILE SEPARATOR;;;;
+001D;<control>;Cc;0;ON;;;;;N;GROUP SEPARATOR;;;;
+001E;<control>;Cc;0;ON;;;;;N;RECORD SEPARATOR;;;;
+001F;<control>;Cc;0;ON;;;;;N;UNIT SEPARATOR;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;<compat> 0020 0302;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;<compat> 0020 0332;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;<compat> 0020 0300;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;ON;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;ON;;;;;N;;;;;
+0081;<control>;Cc;0;ON;;;;;N;;;;;
+0082;<control>;Cc;0;ON;;;;;N;;;;;
+0083;<control>;Cc;0;ON;;;;;N;;;;;
+0084;<control>;Cc;0;ON;;;;;N;;;;;
+0085;<control>;Cc;0;ON;;;;;N;;;;;
+0086;<control>;Cc;0;ON;;;;;N;;;;;
+0087;<control>;Cc;0;ON;;;;;N;;;;;
+0088;<control>;Cc;0;ON;;;;;N;;;;;
+0089;<control>;Cc;0;ON;;;;;N;;;;;
+008A;<control>;Cc;0;ON;;;;;N;;;;;
+008B;<control>;Cc;0;ON;;;;;N;;;;;
+008C;<control>;Cc;0;ON;;;;;N;;;;;
+008D;<control>;Cc;0;ON;;;;;N;;;;;
+008E;<control>;Cc;0;ON;;;;;N;;;;;
+008F;<control>;Cc;0;ON;;;;;N;;;;;
+0090;<control>;Cc;0;ON;;;;;N;;;;;
+0091;<control>;Cc;0;ON;;;;;N;;;;;
+0092;<control>;Cc;0;ON;;;;;N;;;;;
+0093;<control>;Cc;0;ON;;;;;N;;;;;
+0094;<control>;Cc;0;ON;;;;;N;;;;;
+0095;<control>;Cc;0;ON;;;;;N;;;;;
+0096;<control>;Cc;0;ON;;;;;N;;;;;
+0097;<control>;Cc;0;ON;;;;;N;;;;;
+0098;<control>;Cc;0;ON;;;;;N;;;;;
+0099;<control>;Cc;0;ON;;;;;N;;;;;
+009A;<control>;Cc;0;ON;;;;;N;;;;;
+009B;<control>;Cc;0;ON;;;;;N;;;;;
+009C;<control>;Cc;0;ON;;;;;N;;;;;
+009D;<control>;Cc;0;ON;;;;;N;;;;;
+009E;<control>;Cc;0;ON;;;;;N;;;;;
+009F;<control>;Cc;0;ON;;;;;N;;;;;
+00A0;NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;ON;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING GUILLEMET;;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;ON;<compat> 03BC;;;;N;;;;;
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;ON;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING GUILLEMET;;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;;;
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Lo;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Lo;0;L;;;;;N;;;;;
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0041 0307 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0061 0307 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;;019F;
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;;;
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Sk;0;L;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;L;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;L;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;L;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;L;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;L;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Sk;0;L;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;L;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Sk;0;L;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;L;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Sk;0;L;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;L;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;L;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;L;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;L;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;L;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;L;;;;;N;;;;;
+02D8;BREVE;Sk;0;L;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;L;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;L;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;L;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;L;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;L;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;L;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;L;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;L;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;L;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;L;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;L;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING ACUTE;Oxia;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;L;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;L;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;L;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;L;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;L;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;L;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;L;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;L;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;L;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;L;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;L;0306 0307;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;L;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;L;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;L;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;L;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;L;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;L;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;L;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;L;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;L;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;L;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;L;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;L;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;L;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;L;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;L;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;L;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;L;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;L;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;L;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;L;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;L;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;L;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;L;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;L;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;L;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;L;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;L;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;L;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;L;0308 030D;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;220;L;;;;;N;GREEK NON-SPACING IOTA BELOW;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;L;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;L;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Po;0;L;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Po;0;L;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;L;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;L;<compat> 0020 030D;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;L;00A8 030D;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 030D;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;L;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 030D;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 030D;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 030D;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 030D;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 030D;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 030D;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03B9 0344;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 030D;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 030D;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 030D;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 030D;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03C5 0344;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 030D;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 030D;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 030D;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;
+03D1;GREEK THETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 030D;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;
+03D6;GREEK PI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;;
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;;
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;;
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;;
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;
+03F1;GREEK RHO SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;;;
+03F3;GREEK LETTER YOT;Lo;0;L;;;;;N;;;;;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;L;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lo;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;00C6;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;00E6;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;018F;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;0259;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;018F 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;0259 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;01B7;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;0292;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;019F;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;0275;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;019F 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;0275 0308;;;;N;;;04EA;;04EA
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;R;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;R;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;R;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;R;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;R;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;R;;;;;N;;;;;
+0597;HEBREW ACCENT REVIA;Mn;230;R;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;R;;;;;N;;;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;R;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;R;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;R;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;R;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;R;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;R;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;R;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;R;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;R;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;R;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;R;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;R;;;;;N;;;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;R;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;R;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;R;;;;;N;;;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;R;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;R;;;;;N;;;;;
+05AB;HEBREW ACCENT OLE;Mn;230;R;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;R;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;R;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;230;R;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;R;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;R;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;R;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;R;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;R;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;R;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;R;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;R;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;R;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;R;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;R;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;R;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;R;;;;;N;HEBREW POINT DAGESH;;;;
+05BD;HEBREW POINT METEG;Mn;22;R;;;;;N;;;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;R;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;R;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;R;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;R;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;R;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;R;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;R;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;R;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;R;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;R;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;R;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;R;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;R;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;R;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;R;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;R;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;R;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;R;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;R;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;R;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;R;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;R;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;R;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;R;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;R;;;;;N;;;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;R;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;R;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;R;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;R;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;R;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;R;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06D0;ARABIC LETTER E;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;R;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;R;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;R;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;R;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;R;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;R;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;R;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;R;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Me;0;R;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;R;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;R;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;R;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;R;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;R;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;R;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;R;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;R;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;R;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;R;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;R;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;R;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;R;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;R;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;R;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;R;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;37;L;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;36;L;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;38;L;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;39;L;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;40;L;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;41;L;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;42;L;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;43;L;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;44;L;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;45;L;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0950;DEVANAGARI OM;So;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;46;L;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;47;L;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;L;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;L;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;48;L;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;49;L;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;50;L;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;09AC 09BC;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;51;L;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;52;L;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;53;L;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;54;L;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;55;L;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;56;L;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;L;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;L;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;-1;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;57;L;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;58;L;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;59;L;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;60;L;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;61;L;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;62;L;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;63;L;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;0A21 0A3C;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;64;L;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;65;L;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;67;L;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;66;L;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;68;L;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;69;L;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;70;L;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;71;L;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;72;L;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;73;L;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;74;L;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0AD0;GUJARATI OM;So;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;75;L;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;L;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;76;L;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;77;L;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;78;L;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;79;L;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;230;L;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;0B2F 0B3C;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;L;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;80;L;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;81;L;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;82;L;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;83;L;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;84;L;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;85;L;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;86;L;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;87;L;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;88;L;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;89;L;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;90;L;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;L;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;92;L;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;93;L;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CC6 0CC2 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;94;L;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;95;L;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;96;L;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;97;L;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Po;0;L;;;;;N;THAI PAI YAN NOI;;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;98;L;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;99;L;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;100;L;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;101;L;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;102;L;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
+0E38;THAI CHARACTER SARA U;Mn;103;L;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;104;L;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;105;L;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;L;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;106;L;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;L;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;108;L;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;109;L;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;110;L;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;111;L;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;112;L;;;;;N;THAI NIKKHAHIT;;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;128;L;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;So;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Po;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;113;L;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;114;L;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;115;L;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;116;L;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;117;L;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;L;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;119;L;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;120;L;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;121;L;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;L;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;123;L;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;124;L;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;125;L;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;126;L;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;127;L;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;So;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;L;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;L;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;230;L;;;;;N;;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;230;L;;;;;N;;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;L;;;;;N;;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;L;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;L;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;L;;;;;N;;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;L;;;;;N;;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;220;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;220;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;145;L;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;L;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;131;L;0F72 0F71;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;L;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;133;L;0F74 0F71;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;134;L;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;135;L;0F76 0F71;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;136;L;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;137;L;0F78 0F71;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;138;L;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;139;L;;;;;N;;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;140;L;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;141;L;;;;;N;;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;142;L;;;;;N;;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;143;L;;;;;N;;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;144;L;0F80 0F71;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;L;;;;;N;;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;L;;;;;N;;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;L;;;;;N;;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;L;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;L;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Mn;230;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Mn;230;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Mn;230;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Mn;230;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;6;L;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;6;L;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;6;L;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;6;L;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;6;L;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;6;L;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;6;L;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;6;L;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;6;L;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;6;L;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;6;L;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;6;L;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;6;L;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;6;L;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;6;L;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;6;L;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;6;L;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;6;L;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;6;L;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;6;L;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;6;L;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;6;L;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;6;L;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;6;L;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;6;L;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;6;L;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;6;L;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;6;L;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;6;L;;;;;N;;;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;6;L;;;;;N;;;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;6;L;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;6;L;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;6;L;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;6;L;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;6;L;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;6;L;0F90 0FB5;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;10D0;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;10D1;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;10D2;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;10D3;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;10D4;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;10D5;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;10D6;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;10D7;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;10D8;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;10D9;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;10DA;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;10DB;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;10DC;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;10DD;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;10DE;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;10DF;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;10E0;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;10E1;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;10E2;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;10E3;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;10E4;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;10E5;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;10E6;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;10E7;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;10E8;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;10E9;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;10EA;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;10EB;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;10EC;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;10ED;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;10EE;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;10EF;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;10F0;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;10F1;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;10F2;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;10F3;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;10F4;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;10F5;
+10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;<compat> 1100 1100;;;;N;;;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;<compat> 1103 1103;;;;N;;;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;<compat> 1107 1107;;;;N;;;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;<compat> 1109 1109;;;;N;;;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;<compat> 110C 110C;;;;N;;;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 1102 1100;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;<compat> 1102 1102;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 1102 1103;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;<compat> 1102 1107;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 1103 1100;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;<compat> 1105 1102;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;<compat> 1105 1105;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;<compat> 1105 1112;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;<compat> 1105 110B;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;<compat> 1106 1107;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 1106 110B;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;<compat> 1107 1100;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;<compat> 1107 1102;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;<compat> 1107 1103;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;<compat> 1107 1109;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1107 1109 1100;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1107 1109 1103;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;<compat> 1107 1109 1107;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;<compat> 1107 1109 1109;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;<compat> 1107 1109 110C;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;<compat> 1107 110C;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;<compat> 1107 110E;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;<compat> 1107 1110;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 1107 1111;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 1107 110B;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 1107 1107 110B;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;<compat> 1109 1100;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;<compat> 1109 1102;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;<compat> 1109 1103;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;<compat> 1109 1105;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;<compat> 1109 1106;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;<compat> 1109 1107;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;<compat> 1109 1107 1100;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;<compat> 1109 1109 1109;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;<compat> 1109 110B;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;<compat> 1109 110C;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;<compat> 1109 110E;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;<compat> 1109 110F;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;<compat> 1109 1110;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;<compat> 1109 1111;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;<compat> 1109 1112;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;<compat> 113C 113C;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;<compat> 113E 113E;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 110B 1100;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;<compat> 110B 1103;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;<compat> 110B 1106;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;<compat> 110B 1107;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;<compat> 110B 1109;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;<compat> 110B 1140;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;<compat> 110B 110B;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;<compat> 110B 110C;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;<compat> 110B 110E;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;<compat> 110B 1110;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;<compat> 110B 1111;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;<compat> 110C 110B;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;<compat> 114E 114E;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;<compat> 1150 1150;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;<compat> 110E 110F;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;<compat> 110E 1112;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 1111 1107;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1111 110B;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;<compat> 1112 1112;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;<compat> 1161 1175;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;<compat> 1163 1175;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;<compat> 1165 1175;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;<compat> 1167 1175;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;<compat> 1169 1161;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;<compat> 1169 1161 1175;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;<compat> 1169 1175;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;<compat> 116E 1165;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;<compat> 116E 1165 1175;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;<compat> 116E 1175;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;<compat> 1173 1175;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;<compat> 1161 1169;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;<compat> 1161 116E;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;<compat> 1163 1169;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;<compat> 1163 116D;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;<compat> 1165 1169;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;<compat> 1165 116E;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;<compat> 1165 1173;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;<compat> 1167 1169;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;<compat> 1167 116E;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;<compat> 1169 1165;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;<compat> 1169 1166;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;<compat> 1169 1168;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;<compat> 1169 1169;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;<compat> 1169 116E;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;<compat> 116D 1163;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;<compat> 116D 1164;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;<compat> 116D 1167;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;<compat> 116D 1169;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;<compat> 116D 1175;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;<compat> 116E 1161;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;<compat> 116E 1162;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;<compat> 116E 1165 1173;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;<compat> 116E 1168;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;<compat> 116E 116E;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;<compat> 1172 1161;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;<compat> 1172 1165;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;<compat> 1172 1166;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;<compat> 1172 1167;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;<compat> 1172 1168;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;<compat> 1172 116E;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;<compat> 1172 1175;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;<compat> 1173 116E;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;<compat> 1173 1173;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;<compat> 1174 116E;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;<compat> 1175 1161;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;<compat> 1175 1163;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;<compat> 1175 1169;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;<compat> 1175 116E;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;<compat> 1175 1173;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;<compat> 1175 119E;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;<compat> 119E 1165;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;<compat> 119E 116E;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;<compat> 119E 1175;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;<compat> 119E 119E;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;<compat> 11A8 11A8;;;;N;;;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;<compat> 11A8 11BA;;;;N;;;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;<compat> 11AB 11BD;;;;N;;;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;<compat> 11AB 11C2;;;;N;;;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;<compat> 11AF 11A8;;;;N;;;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;<compat> 11AF 11B7;;;;N;;;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;<compat> 11AF 11B8;;;;N;;;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;<compat> 11AF 11BA;;;;N;;;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;<compat> 11AF 11C0;;;;N;;;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;<compat> 11AF 11C1;;;;N;;;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;<compat> 11AF 11C2;;;;N;;;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;<compat> 11B8 11BA;;;;N;;;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;<compat> 11BA 11BA;;;;N;;;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;<compat> 11A8 11AF;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;<compat> 11A8 11BA 11A8;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 11AB 11A8;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 11AB 11AE;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;<compat> 11AB 11BA;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;<compat> 11AB 11EB;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;<compat> 11AB 11C0;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 11AE 11A8;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;<compat> 11AE 11AF;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11AF 11A8 11BA;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;<compat> 11AF 11AB;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;<compat> 11AF 11AE;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;<compat> 11AF 11AE 11C2;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;<compat> 11AF 11AF;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;<compat> 11AF 11B7 11A8;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;<compat> 11AF 11B7 11BA;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11AF 11B8 11BA;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;<compat> 11AF 11B8 11C2;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;<compat> 11AF 11B8 11BC;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;<compat> 11AF 11BA 11BA;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;<compat> 11AF 11EB;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;<compat> 11AF 11BF;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11AF 11F9;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;<compat> 11B7 11A8;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;<compat> 11B7 11AF;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;<compat> 11B7 11B8;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;<compat> 11B7 11BA;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;<compat> 11B7 11BA 11BA;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;<compat> 11B7 11EB;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;<compat> 11B7 11BE;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;<compat> 11B7 11C2;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 11B7 11BC;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;<compat> 11B8 11AF;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 11B8 11C1;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;<compat> 11B8 11C2;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 11B8 11BC;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;<compat> 11BA 11A8;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;<compat> 11BA 11AE;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;<compat> 11BA 11AF;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;<compat> 11BA 11B8;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 11BC 11A8;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;<compat> 11BC 11A8 11A8;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;<compat> 11BC 11BC;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;<compat> 11BC 11BF;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;<compat> 11F0 11BA;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F0 11EB;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 11C1 11B8;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 11C1 11BC;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;<compat> 11C2 11AB;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;<compat> 11C2 11AF;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;<compat> 11C2 11B7;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;<compat> 11C2 11B8;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0114 0327;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0115 0327;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00C2 0323;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00E2 0323;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;0102 0323;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;0103 0323;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00CA 0323;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00EA 0323;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00D4 0323;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00F4 0323;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03B1 0301;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03B5 0301;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03B7 0301;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03B9 0301;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03BF 0301;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03C5 0301;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03C9 0301;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F71 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0391 0301;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lu;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;L;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Lu;0;L;03B9;;;;N;;;;;
+1FBF;GREEK PSILI;Sk;0;L;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;L;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;L;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F75 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0395 0301;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0397 0301;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lu;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;L;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;L;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;L;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;03CA 0301;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;0399 0301;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;L;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;L;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;L;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03CB 0301;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;03A5 0301;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;L;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;L;00A8 0301;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;L;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F79 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;039F 0301;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;03A9 0301;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lu;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;L;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;L;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Zs;0;WS;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;ON;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;ON;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Ps;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pe;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pe;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;B;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;ON;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;ON;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;ON;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;ON;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;ON;;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;ON;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;L;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;L;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;L;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;L;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;1;L;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+2100;ACCOUNT OF;So;0;ON;;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;ON;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;;;;;N;;;;;
+2106;CADA UNA;So;0;ON;;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;ON;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;ON;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;ON;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;ON;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;ON;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;ON;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;ON;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;ON;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;ON;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;ON;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;ON;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;ON;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;Lu;0;ON;<font> 0050;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;ON;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;ON;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;ON;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;ON;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;ON;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<super> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;ON;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;ON;03A9;;;;N;OHM;;;;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;ON;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;ON;004B;;;;N;DEGREES KELVIN;;;;
+212B;ANGSTROM SIGN;Lu;0;ON;00C5;;;;N;ANGSTROM UNIT;;;;
+212C;SCRIPT CAPITAL B;Lu;0;ON;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;ON;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;Ll;0;ON;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;ON;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;ON;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;ON;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;ON;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;ON;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;ON;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;ON;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;ON;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;ON;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;So;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;007E 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;ON;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;ON;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;ON;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;ON;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;ON;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;ON;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;ON;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;ON;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;ON;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;ON;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;ON;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;ON;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;ON;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;ON;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;ON;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;ON;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;ON;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;ON;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;ON;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;ON;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;ON;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;ON;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;ON;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;ON;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;ON;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;ON;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;ON;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;ON;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;ON;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;ON;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;ON;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;ON;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;ON;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;ON;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;ON;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;ON;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;ON;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;ON;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;ON;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;ON;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;ON;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;ON;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;ON;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;ON;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;ON;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;ON;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;ON;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;ON;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;ON;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;ON;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;ON;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;ON;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;ON;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;ON;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;ON;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;ON;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;ON;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;ON;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;ON;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;ON;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;ON;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;ON;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;ON;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;ON;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;ON;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;ON;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;ON;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;ON;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;ON;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;ON;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;ON;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;ON;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;ON;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;ON;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;ON;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;ON;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;ON;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;ON;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;ON;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;ON;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;ON;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;ON;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;ON;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;ON;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;ON;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;ON;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;ON;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;ON;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;ON;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;ON;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;ON;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;ON;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;ON;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;ON;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;ON;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;ON;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;ON;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;ON;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;So;0;ON;;;;;N;SHARP;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;ON;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Po;0;ON;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;ON;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;L;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;L;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;L;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;L;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;L;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;L;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;ON;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;ON;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;ON;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Lm;0;L;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Lm;0;L;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;L;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Unassigned High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Unassigned High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;<CJK Compatibility Ideograph, First>;Lo;0;L;;;;;N;;;;;
+FA2D;<CJK Compatibility Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;R;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;R;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;05E9 05BC 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;05E9 05BC 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;R;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;R;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;R;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;R;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;R;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;R;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;R;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;R;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;R;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;R;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;R;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;R;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;R;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;R;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;R;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;R;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;R;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;R;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;R;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;R;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;R;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;R;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;R;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;R;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;R;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;R;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;R;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;R;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;R;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;R;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;R;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;R;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;R;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;R;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;R;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;R;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;R;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;R;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;R;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;R;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;R;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;R;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;R;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;R;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;R;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;R;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;R;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;R;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;R;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;R;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;R;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;R;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;R;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;R;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;R;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;R;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;R;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;R;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;R;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;R;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;R;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;R;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;R;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;R;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;R;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;R;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;R;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;R;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;R;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;R;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;R;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;R;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;R;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;R;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;R;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;R;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;R;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;R;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;R;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;R;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;R;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;R;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;R;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;R;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;R;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;R;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;R;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;R;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;R;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;R;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;R;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;R;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;R;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;R;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;R;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;R;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;R;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;R;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;R;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;R;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;R;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;R;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;R;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;R;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;R;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;R;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;R;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;R;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;R;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;R;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;R;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;R;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;R;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;R;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;R;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;R;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;R;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;R;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;R;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;R;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;R;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;R;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;R;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;R;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;R;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;R;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;R;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;R;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;R;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;R;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;R;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;R;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;R;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064C;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064D;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064E;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064F;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0650;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;R;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;R;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;R;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;R;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;R;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;R;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;R;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;R;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;R;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;R;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;R;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;R;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;R;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;R;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;R;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;R;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;R;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;R;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;R;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;R;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;R;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;R;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;R;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;R;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;R;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;R;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;R;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;R;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;R;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;R;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;R;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;R;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;R;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064E;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064F;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 0650;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;R;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;R;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;R;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;R;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;R;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;R;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;R;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;R;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;R;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;R;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;R;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;R;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;R;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;R;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;R;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;R;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;R;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;R;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;R;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;R;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;R;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;R;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;R;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;ON;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;ON;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;ON;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ON;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ON;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ON;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ON;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ON;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;R;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;R;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;R;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;R;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;R;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;R;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;R;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;R;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;R;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;R;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;R;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;R;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;R;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;R;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;R;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;R;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;R;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;R;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;R;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;R;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;R;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;R;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;R;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;R;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;R;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;R;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;R;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;R;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;R;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;R;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;R;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;R;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;R;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;R;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;R;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;R;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;R;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;R;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;R;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;R;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;R;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;R;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;R;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;R;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;R;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;R;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;R;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;R;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;R;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;R;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;R;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;R;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;R;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;R;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;R;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;R;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;R;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;R;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;R;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;R;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;R;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;R;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;R;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;R;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;R;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;R;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;R;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;R;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;R;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;R;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;R;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;R;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;R;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;R;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;R;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;R;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;R;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;R;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;R;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;R;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;R;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;R;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;R;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;R;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;R;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;R;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;R;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;R;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;R;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;R;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;R;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;R;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;R;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;R;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;R;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;R;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;R;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;R;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;R;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;R;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;R;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;R;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;R;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;R;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;R;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;R;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;R;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;R;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;R;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;ON;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ON;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ON;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ON;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ON;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;ON;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ON;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;ON;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;ON;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;ON;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;L;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 309B;;;;N;;;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309C;;;;N;;;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ON;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ON;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ON;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ON;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;Sm;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff --git a/src/data/unicode/UnicodeData-2.1.5.txt b/src/data/unicode/UnicodeData-2.1.5.txt
new file mode 100755
index 0000000..4e4e629
--- /dev/null
+++ b/src/data/unicode/UnicodeData-2.1.5.txt
@@ -0,0 +1,6890 @@
+0000;<control>;Cc;0;ON;;;;;N;NULL;;;;
+0001;<control>;Cc;0;ON;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;ON;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;ON;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;ON;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;ON;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;ON;;;;;N;BELL;;;;
+0008;<control>;Cc;0;ON;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
+000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
+000C;<control>;Cc;0;B;;;;;N;FORM FEED;;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
+000E;<control>;Cc;0;ON;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;ON;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;ON;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;ON;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;ON;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;ON;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;ON;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;ON;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;ON;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
+001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
+001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
+001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;<compat> 0020 0302;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;<compat> 0020 0332;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;<compat> 0020 0300;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;ON;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;ON;;;;;N;;;;;
+0081;<control>;Cc;0;ON;;;;;N;;;;;
+0082;<control>;Cc;0;ON;;;;;N;;;;;
+0083;<control>;Cc;0;ON;;;;;N;;;;;
+0084;<control>;Cc;0;ON;;;;;N;;;;;
+0085;<control>;Cc;0;ON;;;;;N;;;;;
+0086;<control>;Cc;0;ON;;;;;N;;;;;
+0087;<control>;Cc;0;ON;;;;;N;;;;;
+0088;<control>;Cc;0;ON;;;;;N;;;;;
+0089;<control>;Cc;0;ON;;;;;N;;;;;
+008A;<control>;Cc;0;ON;;;;;N;;;;;
+008B;<control>;Cc;0;ON;;;;;N;;;;;
+008C;<control>;Cc;0;ON;;;;;N;;;;;
+008D;<control>;Cc;0;ON;;;;;N;;;;;
+008E;<control>;Cc;0;ON;;;;;N;;;;;
+008F;<control>;Cc;0;ON;;;;;N;;;;;
+0090;<control>;Cc;0;ON;;;;;N;;;;;
+0091;<control>;Cc;0;ON;;;;;N;;;;;
+0092;<control>;Cc;0;ON;;;;;N;;;;;
+0093;<control>;Cc;0;ON;;;;;N;;;;;
+0094;<control>;Cc;0;ON;;;;;N;;;;;
+0095;<control>;Cc;0;ON;;;;;N;;;;;
+0096;<control>;Cc;0;ON;;;;;N;;;;;
+0097;<control>;Cc;0;ON;;;;;N;;;;;
+0098;<control>;Cc;0;ON;;;;;N;;;;;
+0099;<control>;Cc;0;ON;;;;;N;;;;;
+009A;<control>;Cc;0;ON;;;;;N;;;;;
+009B;<control>;Cc;0;ON;;;;;N;;;;;
+009C;<control>;Cc;0;ON;;;;;N;;;;;
+009D;<control>;Cc;0;ON;;;;;N;;;;;
+009E;<control>;Cc;0;ON;;;;;N;;;;;
+009F;<control>;Cc;0;ON;;;;;N;;;;;
+00A0;NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;N;LEFT POINTING GUILLEMET;;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;;;
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;N;RIGHT POINTING GUILLEMET;;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;;;
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Lo;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Lo;0;L;;;;;N;;;;;
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0041 0307 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0061 0307 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;;;
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;ON;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;ON;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;ON;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;ON;;;;;N;NON-SPACING ACUTE;Oxia;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;ON;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;ON;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;ON;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;ON;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;ON;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;ON;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;ON;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;ON;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;ON;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;ON;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;ON;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;ON;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;ON;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;ON;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;ON;0306 0307;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;ON;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;ON;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;ON;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;ON;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;ON;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;ON;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;ON;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;ON;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;ON;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;ON;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;ON;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;ON;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;ON;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;ON;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;ON;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;ON;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;ON;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;ON;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;ON;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;ON;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;ON;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;ON;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;ON;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;ON;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;ON;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;ON;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;ON;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;ON;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;ON;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;ON;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;ON;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;ON;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;ON;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;ON;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;ON;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;ON;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;ON;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;ON;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;ON;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;ON;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;ON;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;ON;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;ON;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;ON;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;ON;0308 030D;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;220;ON;;;;;N;GREEK NON-SPACING IOTA BELOW;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;ON;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;ON;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Po;0;L;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Po;0;L;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;L;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 030D;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 030D;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 030D;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;L;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 030D;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 030D;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 030D;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 030D;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 030D;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 030D;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03B9 0344;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 030D;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 030D;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 030D;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 030D;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03C5 0344;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 030D;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 030D;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 030D;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 030D;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;;
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;;
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;;
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;;
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
+03F3;GREEK LETTER YOT;Lo;0;L;;;;;N;;;;;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lo;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;ON;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;ON;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;ON;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;ON;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;ON;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;ON;;;;;N;;;;;
+0597;HEBREW ACCENT REVIA;Mn;230;ON;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;ON;;;;;N;;;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;ON;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;ON;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;ON;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;ON;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;ON;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;ON;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;ON;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;ON;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;ON;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;ON;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;ON;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;ON;;;;;N;;;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;ON;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;ON;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;ON;;;;;N;;;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;ON;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;ON;;;;;N;;;;;
+05AB;HEBREW ACCENT OLE;Mn;230;ON;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;ON;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;ON;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;230;ON;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;ON;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;ON;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;ON;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;ON;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;ON;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;ON;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;ON;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;ON;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;ON;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;ON;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;ON;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;ON;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;ON;;;;;N;HEBREW POINT DAGESH;;;;
+05BD;HEBREW POINT METEG;Mn;22;ON;;;;;N;;;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;ON;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;ON;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;ON;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;ON;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;R;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;R;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;R;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;R;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;ON;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;ON;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;ON;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;ON;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;ON;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;ON;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;ON;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;ON;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;R;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;ON;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;R;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;R;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;R;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;R;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;R;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;R;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;R;;;;;N;;;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;R;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;R;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;R;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;R;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;R;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;R;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06D0;ARABIC LETTER E;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;R;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;R;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;R;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;ON;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;ON;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;ON;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;ON;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;ON;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;ON;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;ON;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Me;0;ON;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;ON;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;ON;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;ON;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;ON;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;ON;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;ON;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;ON;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;R;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;R;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;ON;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;ON;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;ON;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;ON;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;ON;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;ON;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;37;ON;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;36;ON;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;38;ON;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;39;ON;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;40;ON;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;41;ON;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;42;ON;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;43;ON;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;44;ON;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;45;ON;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0950;DEVANAGARI OM;So;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;46;ON;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;47;ON;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;ON;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;ON;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;48;ON;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;49;ON;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;50;ON;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;09AC 09BC;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;51;ON;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;52;ON;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;53;ON;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;54;ON;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;55;ON;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;56;ON;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;L;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;L;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;-1;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;57;ON;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;58;ON;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;59;ON;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;60;ON;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;61;ON;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;62;ON;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;63;ON;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;0A21 0A3C;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;64;ON;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;65;ON;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;67;ON;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;66;ON;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;68;ON;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;69;ON;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;70;ON;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;71;ON;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;72;ON;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;73;ON;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;74;ON;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0AD0;GUJARATI OM;So;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;75;ON;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;76;ON;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;77;ON;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;78;ON;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;79;ON;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;230;ON;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;0B2F 0B3C;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;ON;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;80;ON;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;81;ON;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;82;ON;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;83;ON;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;84;ON;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;85;ON;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;86;ON;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;87;ON;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;88;ON;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;89;ON;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;90;ON;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;ON;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;92;ON;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;93;ON;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CC6 0CC2 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;94;ON;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;95;ON;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;96;ON;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;97;ON;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Po;0;L;;;;;N;THAI PAI YAN NOI;;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;98;ON;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;99;ON;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;100;ON;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;101;ON;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;102;ON;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
+0E38;THAI CHARACTER SARA U;Mn;103;ON;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;104;ON;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;105;ON;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;106;ON;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;ON;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;108;ON;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;109;ON;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;110;ON;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;111;ON;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;112;ON;;;;;N;THAI NIKKHAHIT;;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;128;ON;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;So;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Po;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;113;ON;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;114;ON;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;115;ON;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;116;ON;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;117;ON;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;ON;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;119;ON;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;120;ON;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;121;ON;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;ON;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;123;ON;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;124;ON;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;125;ON;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;126;ON;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;127;ON;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;So;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;ON;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;ON;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;230;ON;;;;;N;;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;230;ON;;;;;N;;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;ON;;;;;N;;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;L;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;L;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;L;;;;;N;;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;L;;;;;N;;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Ps;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Pe;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;145;ON;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;ON;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;131;ON;0F72 0F71;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;ON;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;133;ON;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;134;ON;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;135;ON;0F76 0F71;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;136;ON;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;137;ON;0F78 0F71;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;138;ON;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;139;ON;;;;;N;;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;140;ON;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;141;ON;;;;;N;;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;142;ON;;;;;N;;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;143;ON;;;;;N;;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;144;ON;0F80 0F71;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;ON;;;;;N;;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;ON;;;;;N;;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;ON;;;;;N;;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;ON;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;ON;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;So;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;So;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;So;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;So;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;6;ON;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;6;ON;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;6;ON;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;6;ON;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;6;ON;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;6;ON;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;6;ON;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;6;ON;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;6;ON;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;6;ON;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;6;ON;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;6;ON;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;6;ON;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;6;ON;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;6;ON;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;6;ON;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;6;ON;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;6;ON;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;6;ON;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;6;ON;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;6;ON;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;6;ON;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;6;ON;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;6;ON;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;6;ON;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;6;ON;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;6;ON;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;6;ON;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;6;ON;;;;;N;;;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;6;ON;;;;;N;;;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;6;ON;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;6;ON;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;6;ON;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;6;ON;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;6;ON;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;6;ON;0F90 0FB5;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;10D0;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;10D1;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;10D2;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;10D3;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;10D4;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;10D5;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;10D6;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;10D7;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;10D8;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;10D9;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;10DA;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;10DB;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;10DC;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;10DD;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;10DE;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;10DF;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;10E0;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;10E1;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;10E2;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;10E3;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;10E4;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;10E5;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;10E6;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;10E7;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;10E8;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;10E9;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;10EA;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;10EB;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;10EC;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;10ED;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;10EE;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;10EF;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;10F0;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;10F1;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;10F2;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;10F3;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;10F4;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;10F5;
+10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;<compat> 1100 1100;;;;N;;;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;<compat> 1103 1103;;;;N;;;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;<compat> 1107 1107;;;;N;;;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;<compat> 1109 1109;;;;N;;;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;<compat> 110C 110C;;;;N;;;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 1102 1100;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;<compat> 1102 1102;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 1102 1103;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;<compat> 1102 1107;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 1103 1100;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;<compat> 1105 1102;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;<compat> 1105 1105;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;<compat> 1105 1112;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;<compat> 1105 110B;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;<compat> 1106 1107;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 1106 110B;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;<compat> 1107 1100;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;<compat> 1107 1102;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;<compat> 1107 1103;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;<compat> 1107 1109;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1107 1109 1100;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1107 1109 1103;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;<compat> 1107 1109 1107;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;<compat> 1107 1109 1109;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;<compat> 1107 1109 110C;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;<compat> 1107 110C;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;<compat> 1107 110E;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;<compat> 1107 1110;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 1107 1111;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 1107 110B;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 1107 1107 110B;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;<compat> 1109 1100;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;<compat> 1109 1102;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;<compat> 1109 1103;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;<compat> 1109 1105;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;<compat> 1109 1106;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;<compat> 1109 1107;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;<compat> 1109 1107 1100;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;<compat> 1109 1109 1109;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;<compat> 1109 110B;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;<compat> 1109 110C;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;<compat> 1109 110E;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;<compat> 1109 110F;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;<compat> 1109 1110;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;<compat> 1109 1111;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;<compat> 1109 1112;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;<compat> 113C 113C;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;<compat> 113E 113E;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 110B 1100;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;<compat> 110B 1103;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;<compat> 110B 1106;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;<compat> 110B 1107;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;<compat> 110B 1109;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;<compat> 110B 1140;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;<compat> 110B 110B;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;<compat> 110B 110C;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;<compat> 110B 110E;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;<compat> 110B 1110;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;<compat> 110B 1111;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;<compat> 110C 110B;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;<compat> 114E 114E;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;<compat> 1150 1150;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;<compat> 110E 110F;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;<compat> 110E 1112;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 1111 1107;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1111 110B;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;<compat> 1112 1112;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;<compat> 1161 1175;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;<compat> 1163 1175;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;<compat> 1165 1175;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;<compat> 1167 1175;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;<compat> 1169 1161;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;<compat> 1169 1161 1175;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;<compat> 1169 1175;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;<compat> 116E 1165;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;<compat> 116E 1165 1175;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;<compat> 116E 1175;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;<compat> 1173 1175;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;<compat> 1161 1169;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;<compat> 1161 116E;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;<compat> 1163 1169;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;<compat> 1163 116D;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;<compat> 1165 1169;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;<compat> 1165 116E;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;<compat> 1165 1173;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;<compat> 1167 1169;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;<compat> 1167 116E;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;<compat> 1169 1165;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;<compat> 1169 1166;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;<compat> 1169 1168;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;<compat> 1169 1169;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;<compat> 1169 116E;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;<compat> 116D 1163;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;<compat> 116D 1164;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;<compat> 116D 1167;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;<compat> 116D 1169;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;<compat> 116D 1175;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;<compat> 116E 1161;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;<compat> 116E 1162;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;<compat> 116E 1165 1173;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;<compat> 116E 1168;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;<compat> 116E 116E;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;<compat> 1172 1161;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;<compat> 1172 1165;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;<compat> 1172 1166;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;<compat> 1172 1167;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;<compat> 1172 1168;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;<compat> 1172 116E;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;<compat> 1172 1175;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;<compat> 1173 116E;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;<compat> 1173 1173;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;<compat> 1174 116E;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;<compat> 1175 1161;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;<compat> 1175 1163;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;<compat> 1175 1169;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;<compat> 1175 116E;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;<compat> 1175 1173;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;<compat> 1175 119E;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;<compat> 119E 1165;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;<compat> 119E 116E;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;<compat> 119E 1175;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;<compat> 119E 119E;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;<compat> 11A8 11A8;;;;N;;;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;<compat> 11A8 11BA;;;;N;;;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;<compat> 11AB 11BD;;;;N;;;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;<compat> 11AB 11C2;;;;N;;;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;<compat> 11AF 11A8;;;;N;;;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;<compat> 11AF 11B7;;;;N;;;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;<compat> 11AF 11B8;;;;N;;;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;<compat> 11AF 11BA;;;;N;;;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;<compat> 11AF 11C0;;;;N;;;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;<compat> 11AF 11C1;;;;N;;;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;<compat> 11AF 11C2;;;;N;;;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;<compat> 11B8 11BA;;;;N;;;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;<compat> 11BA 11BA;;;;N;;;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;<compat> 11A8 11AF;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;<compat> 11A8 11BA 11A8;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 11AB 11A8;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 11AB 11AE;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;<compat> 11AB 11BA;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;<compat> 11AB 11EB;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;<compat> 11AB 11C0;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 11AE 11A8;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;<compat> 11AE 11AF;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11AF 11A8 11BA;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;<compat> 11AF 11AB;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;<compat> 11AF 11AE;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;<compat> 11AF 11AE 11C2;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;<compat> 11AF 11AF;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;<compat> 11AF 11B7 11A8;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;<compat> 11AF 11B7 11BA;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11AF 11B8 11BA;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;<compat> 11AF 11B8 11C2;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;<compat> 11AF 11B8 11BC;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;<compat> 11AF 11BA 11BA;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;<compat> 11AF 11EB;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;<compat> 11AF 11BF;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11AF 11F9;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;<compat> 11B7 11A8;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;<compat> 11B7 11AF;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;<compat> 11B7 11B8;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;<compat> 11B7 11BA;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;<compat> 11B7 11BA 11BA;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;<compat> 11B7 11EB;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;<compat> 11B7 11BE;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;<compat> 11B7 11C2;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 11B7 11BC;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;<compat> 11B8 11AF;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 11B8 11C1;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;<compat> 11B8 11C2;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 11B8 11BC;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;<compat> 11BA 11A8;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;<compat> 11BA 11AE;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;<compat> 11BA 11AF;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;<compat> 11BA 11B8;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 11BC 11A8;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;<compat> 11BC 11A8 11A8;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;<compat> 11BC 11BC;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;<compat> 11BC 11BF;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;<compat> 11F0 11BA;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F0 11EB;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 11C1 11B8;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 11C1 11BC;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;<compat> 11C2 11AB;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;<compat> 11C2 11AF;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;<compat> 11C2 11B7;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;<compat> 11C2 11B8;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0114 0327;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0115 0327;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00C2 0323;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00E2 0323;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;0102 0323;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;0103 0323;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00CA 0323;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00EA 0323;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00D4 0323;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00F4 0323;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03B1 0301;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03B5 0301;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03B7 0301;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03B9 0301;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03BF 0301;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03C5 0301;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03C9 0301;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F71 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0391 0301;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lu;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Lu;0;L;03B9;;;;N;;;;;
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F75 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0395 0301;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0397 0301;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lu;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;03CA 0301;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;0399 0301;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03CB 0301;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;03A5 0301;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;00A8 0301;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F79 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;039F 0301;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;03A9 0301;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lu;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Zs;0;WS;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;ON;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;ON;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;B;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;L;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;R;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;ON;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;L;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;R;;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;N;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;N;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;ON;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;ON;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;ON;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;ON;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;ON;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;ON;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;ON;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;ON;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;ON;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;ON;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;ON;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;1;ON;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+2100;ACCOUNT OF;So;0;ON;;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;;;;;N;;;;;
+2106;CADA UNA;So;0;ON;;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;Ll;0;L;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;So;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;007E 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;So;0;ON;;;;;N;SHARP;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;ON;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Po;0;ON;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;ON;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;ON;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;ON;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;ON;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;ON;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;ON;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;ON;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;ON;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;ON;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;ON;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;ON;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;ON;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Lm;0;L;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Lm;0;L;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;L;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Unassigned High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Unassigned High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;ON;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;05E9 05BC 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;05E9 05BC 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;R;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;R;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;R;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;R;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;R;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;R;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;R;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;R;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;R;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;R;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;R;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;R;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;R;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;R;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;R;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;R;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;R;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;R;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;R;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;R;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;R;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;R;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;R;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;R;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;R;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;R;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;R;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;R;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;R;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;R;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;R;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;R;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;R;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;R;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;R;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;R;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;R;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;R;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;R;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;R;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;R;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;R;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;R;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;R;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;R;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;R;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;R;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;R;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;R;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;R;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;R;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;R;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;R;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;R;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;R;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;R;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;R;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;R;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;R;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;R;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;R;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;R;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;R;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;R;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;R;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;R;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;R;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;R;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;R;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;R;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;R;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;R;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;R;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;R;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;R;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;R;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;R;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;R;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;R;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;R;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;R;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;R;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;R;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;R;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;R;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;R;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;R;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;R;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;R;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;R;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;R;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;R;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;R;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;R;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;R;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;R;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;R;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;R;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;R;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;R;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;R;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;R;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;R;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;R;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;R;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;R;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;R;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;R;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;R;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;R;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;R;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;R;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;R;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;R;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;R;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;R;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;R;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;R;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;R;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;R;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;R;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;R;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;R;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;R;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;R;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;R;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;R;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;R;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;R;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;R;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;R;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;R;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;R;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064C;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064D;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064E;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064F;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0650;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;R;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;R;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;R;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;R;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;R;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;R;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;R;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;R;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;R;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;R;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;R;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;R;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;R;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;R;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;R;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;R;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;R;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;R;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;R;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;R;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;R;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;R;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;R;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;R;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;R;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;R;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;R;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;R;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;R;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;R;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;R;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;R;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;R;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064E;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064F;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 0650;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;R;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;R;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;R;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;R;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;R;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;R;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;R;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;R;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;R;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;R;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;R;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;R;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;R;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;R;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;R;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;R;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;R;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;R;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;R;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;R;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;R;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;R;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;R;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;R;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;R;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;R;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;R;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;R;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;R;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;R;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;R;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;R;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;R;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;R;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;R;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;R;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;R;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;R;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;R;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;R;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;R;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;R;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;R;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;R;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;R;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;R;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;R;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;R;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;R;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;R;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;R;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;R;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;R;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;R;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;R;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;R;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;R;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;R;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;R;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;R;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;R;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;R;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;R;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;R;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;R;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;R;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;R;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;R;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;R;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;R;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;R;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;R;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;R;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;R;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;R;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;R;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;R;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;R;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;R;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;R;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;R;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;R;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;R;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;R;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;R;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;R;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;R;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;R;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;R;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;R;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;R;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;R;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;R;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;R;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;R;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;R;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;R;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;R;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;R;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;R;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;R;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;R;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;R;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;R;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;R;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;R;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;R;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;R;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;R;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;R;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;R;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;R;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;R;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;R;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;R;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;R;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;R;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;R;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;R;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;R;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;R;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;R;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;R;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;R;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;R;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;R;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;R;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;R;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;R;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;R;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;R;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;R;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;ON;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;L;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;Sm;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff --git a/src/data/unicode/UnicodeData-2.1.8.txt b/src/data/unicode/UnicodeData-2.1.8.txt
new file mode 100755
index 0000000..6c2f693
--- /dev/null
+++ b/src/data/unicode/UnicodeData-2.1.8.txt
@@ -0,0 +1,6890 @@
+0000;<control>;Cc;0;ON;;;;;N;NULL;;;;
+0001;<control>;Cc;0;ON;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;ON;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;ON;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;ON;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;ON;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;ON;;;;;N;BELL;;;;
+0008;<control>;Cc;0;ON;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
+000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
+000C;<control>;Cc;0;B;;;;;N;FORM FEED;;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
+000E;<control>;Cc;0;ON;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;ON;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;ON;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;ON;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;ON;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;ON;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;ON;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;ON;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;ON;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
+001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
+001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
+001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;<compat> 0020 0302;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;<compat> 0020 0332;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;<compat> 0020 0300;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;ON;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;ON;;;;;N;;;;;
+0081;<control>;Cc;0;ON;;;;;N;;;;;
+0082;<control>;Cc;0;ON;;;;;N;;;;;
+0083;<control>;Cc;0;ON;;;;;N;;;;;
+0084;<control>;Cc;0;ON;;;;;N;;;;;
+0085;<control>;Cc;0;ON;;;;;N;;;;;
+0086;<control>;Cc;0;ON;;;;;N;;;;;
+0087;<control>;Cc;0;ON;;;;;N;;;;;
+0088;<control>;Cc;0;ON;;;;;N;;;;;
+0089;<control>;Cc;0;ON;;;;;N;;;;;
+008A;<control>;Cc;0;ON;;;;;N;;;;;
+008B;<control>;Cc;0;ON;;;;;N;;;;;
+008C;<control>;Cc;0;ON;;;;;N;;;;;
+008D;<control>;Cc;0;ON;;;;;N;;;;;
+008E;<control>;Cc;0;ON;;;;;N;;;;;
+008F;<control>;Cc;0;ON;;;;;N;;;;;
+0090;<control>;Cc;0;ON;;;;;N;;;;;
+0091;<control>;Cc;0;ON;;;;;N;;;;;
+0092;<control>;Cc;0;ON;;;;;N;;;;;
+0093;<control>;Cc;0;ON;;;;;N;;;;;
+0094;<control>;Cc;0;ON;;;;;N;;;;;
+0095;<control>;Cc;0;ON;;;;;N;;;;;
+0096;<control>;Cc;0;ON;;;;;N;;;;;
+0097;<control>;Cc;0;ON;;;;;N;;;;;
+0098;<control>;Cc;0;ON;;;;;N;;;;;
+0099;<control>;Cc;0;ON;;;;;N;;;;;
+009A;<control>;Cc;0;ON;;;;;N;;;;;
+009B;<control>;Cc;0;ON;;;;;N;;;;;
+009C;<control>;Cc;0;ON;;;;;N;;;;;
+009D;<control>;Cc;0;ON;;;;;N;;;;;
+009E;<control>;Cc;0;ON;;;;;N;;;;;
+009F;<control>;Cc;0;ON;;;;;N;;;;;
+00A0;NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;;;
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;;;
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Lo;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Lo;0;L;;;;;N;;;;;
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0041 0307 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0061 0307 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;ON;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;ON;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;ON;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;ON;;;;;N;NON-SPACING ACUTE;Oxia;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;ON;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;ON;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;ON;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;ON;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;ON;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;ON;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;ON;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;ON;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;ON;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;ON;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;ON;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;ON;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;ON;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;ON;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;ON;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;ON;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;ON;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;ON;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;ON;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;ON;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;ON;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;ON;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;ON;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;ON;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;ON;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;ON;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;ON;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;ON;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;ON;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;ON;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;ON;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;ON;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;ON;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;ON;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;ON;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;ON;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;ON;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;ON;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;ON;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;ON;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;ON;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;ON;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;ON;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;ON;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;ON;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;ON;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;ON;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;ON;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;ON;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;ON;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;ON;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;ON;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;ON;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;ON;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;ON;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;ON;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;ON;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;ON;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;ON;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;ON;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;ON;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;ON;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;
+0360;COMBINING DOUBLE TILDE;Mn;234;ON;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;ON;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Po;0;L;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Po;0;L;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;;
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;;
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;;
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;;
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
+03F3;GREEK LETTER YOT;Lo;0;L;;;;;N;;;;;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;ON;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lo;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;ON;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;ON;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;ON;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;ON;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;ON;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;ON;;;;;N;;;;;
+0597;HEBREW ACCENT REVIA;Mn;230;ON;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;ON;;;;;N;;;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;ON;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;ON;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;ON;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;ON;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;ON;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;ON;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;ON;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;ON;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;ON;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;ON;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;ON;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;ON;;;;;N;;;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;ON;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;ON;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;ON;;;;;N;;;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;ON;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;ON;;;;;N;;;;;
+05AB;HEBREW ACCENT OLE;Mn;230;ON;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;ON;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;ON;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;230;ON;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;ON;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;ON;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;ON;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;ON;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;ON;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;ON;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;ON;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;ON;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;ON;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;ON;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;ON;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;ON;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;ON;;;;;N;HEBREW POINT DAGESH;;;;
+05BD;HEBREW POINT METEG;Mn;22;ON;;;;;N;;;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;ON;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;ON;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;ON;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;ON;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;R;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;R;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;R;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;R;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;ON;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;ON;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;ON;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;ON;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;ON;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;ON;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;ON;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;ON;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;R;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;ON;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;R;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;R;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;R;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;R;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;R;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;R;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;R;;;;;N;;;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;R;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;R;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;R;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;R;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;R;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;R;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06D0;ARABIC LETTER E;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;R;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;R;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;R;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;ON;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;ON;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;ON;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;ON;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;ON;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;ON;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;ON;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Me;0;ON;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;ON;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;ON;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;ON;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;ON;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;ON;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;ON;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;ON;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;R;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;R;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;ON;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;ON;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;ON;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;ON;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;ON;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;ON;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;ON;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;ON;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;ON;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;ON;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;ON;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;ON;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;ON;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;ON;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;ON;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;ON;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;ON;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;ON;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;ON;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;ON;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;ON;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;ON;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;ON;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;09AC 09BC;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;ON;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;ON;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;ON;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;ON;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;ON;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;ON;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;-1;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;ON;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;ON;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;ON;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;ON;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;ON;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;ON;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;ON;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;0A21 0A3C;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;ON;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;ON;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;ON;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;ON;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;ON;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;ON;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;ON;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;ON;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;ON;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;ON;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;ON;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;ON;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;ON;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;ON;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;ON;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;ON;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;ON;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;ON;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;0B2F 0B3C;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;ON;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;ON;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;ON;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;ON;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;ON;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;84;ON;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;ON;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;ON;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;ON;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;ON;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;ON;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;ON;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;ON;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;ON;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;ON;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;ON;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;ON;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;ON;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;ON;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;ON;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;ON;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;ON;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;ON;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;ON;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;ON;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
+0E38;THAI CHARACTER SARA U;Mn;103;ON;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;ON;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;ON;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;ON;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;ON;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;ON;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;ON;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;ON;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;ON;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;107;ON;;;;;N;THAI NIKKHAHIT;;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;ON;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;So;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;ON;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;ON;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;ON;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;ON;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;ON;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;ON;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;ON;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;ON;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;ON;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;ON;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;ON;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;ON;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;ON;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;ON;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;122;ON;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;ON;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;ON;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;230;ON;;;;;N;;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;230;ON;;;;;N;;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;ON;;;;;N;;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;ON;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;ON;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;0;ON;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;ON;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;ON;0F72 0F71;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;ON;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;ON;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;ON;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;ON;0F76 0F71;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;ON;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;ON;0F78 0F71;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;ON;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;ON;;;;;N;;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;ON;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;ON;;;;;N;;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;ON;;;;;N;;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;ON;;;;;N;;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;ON;0F80 0F71;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;ON;;;;;N;;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;ON;;;;;N;;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;ON;;;;;N;;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;ON;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;ON;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;ON;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;ON;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;ON;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;ON;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;ON;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;ON;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;ON;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;ON;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;ON;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;ON;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;ON;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;ON;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;ON;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;ON;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;ON;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;ON;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;ON;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;ON;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;ON;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;ON;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;ON;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;ON;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;ON;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;ON;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;ON;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;ON;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;ON;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;ON;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;ON;;;;;N;;;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;ON;;;;;N;;;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;ON;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;ON;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;ON;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;ON;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;ON;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;ON;0F90 0FB5;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;10D0;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;10D1;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;10D2;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;10D3;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;10D4;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;10D5;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;10D6;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;10D7;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;10D8;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;10D9;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;10DA;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;10DB;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;10DC;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;10DD;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;10DE;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;10DF;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;10E0;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;10E1;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;10E2;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;10E3;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;10E4;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;10E5;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;10E6;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;10E7;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;10E8;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;10E9;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;10EA;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;10EB;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;10EC;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;10ED;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;10EE;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;10EF;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;10F0;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;10F1;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;10F2;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;10F3;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;10F4;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;10F5;
+10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;<compat> 1100 1100;;;;N;;;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;<compat> 1103 1103;;;;N;;;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;<compat> 1107 1107;;;;N;;;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;<compat> 1109 1109;;;;N;;;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;<compat> 110C 110C;;;;N;;;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 1102 1100;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;<compat> 1102 1102;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 1102 1103;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;<compat> 1102 1107;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 1103 1100;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;<compat> 1105 1102;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;<compat> 1105 1105;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;<compat> 1105 1112;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;<compat> 1105 110B;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;<compat> 1106 1107;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 1106 110B;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;<compat> 1107 1100;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;<compat> 1107 1102;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;<compat> 1107 1103;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;<compat> 1107 1109;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1107 1109 1100;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1107 1109 1103;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;<compat> 1107 1109 1107;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;<compat> 1107 1109 1109;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;<compat> 1107 1109 110C;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;<compat> 1107 110C;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;<compat> 1107 110E;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;<compat> 1107 1110;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 1107 1111;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 1107 110B;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 1107 1107 110B;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;<compat> 1109 1100;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;<compat> 1109 1102;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;<compat> 1109 1103;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;<compat> 1109 1105;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;<compat> 1109 1106;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;<compat> 1109 1107;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;<compat> 1109 1107 1100;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;<compat> 1109 1109 1109;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;<compat> 1109 110B;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;<compat> 1109 110C;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;<compat> 1109 110E;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;<compat> 1109 110F;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;<compat> 1109 1110;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;<compat> 1109 1111;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;<compat> 1109 1112;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;<compat> 113C 113C;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;<compat> 113E 113E;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 110B 1100;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;<compat> 110B 1103;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;<compat> 110B 1106;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;<compat> 110B 1107;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;<compat> 110B 1109;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;<compat> 110B 1140;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;<compat> 110B 110B;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;<compat> 110B 110C;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;<compat> 110B 110E;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;<compat> 110B 1110;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;<compat> 110B 1111;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;<compat> 110C 110B;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;<compat> 114E 114E;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;<compat> 1150 1150;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;<compat> 110E 110F;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;<compat> 110E 1112;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 1111 1107;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1111 110B;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;<compat> 1112 1112;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;<compat> 1161 1175;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;<compat> 1163 1175;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;<compat> 1165 1175;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;<compat> 1167 1175;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;<compat> 1169 1161;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;<compat> 1169 1161 1175;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;<compat> 1169 1175;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;<compat> 116E 1165;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;<compat> 116E 1165 1175;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;<compat> 116E 1175;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;<compat> 1173 1175;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;<compat> 1161 1169;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;<compat> 1161 116E;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;<compat> 1163 1169;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;<compat> 1163 116D;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;<compat> 1165 1169;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;<compat> 1165 116E;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;<compat> 1165 1173;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;<compat> 1167 1169;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;<compat> 1167 116E;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;<compat> 1169 1165;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;<compat> 1169 1166;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;<compat> 1169 1168;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;<compat> 1169 1169;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;<compat> 1169 116E;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;<compat> 116D 1163;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;<compat> 116D 1164;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;<compat> 116D 1167;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;<compat> 116D 1169;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;<compat> 116D 1175;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;<compat> 116E 1161;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;<compat> 116E 1162;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;<compat> 116E 1165 1173;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;<compat> 116E 1168;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;<compat> 116E 116E;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;<compat> 1172 1161;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;<compat> 1172 1165;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;<compat> 1172 1166;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;<compat> 1172 1167;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;<compat> 1172 1168;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;<compat> 1172 116E;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;<compat> 1172 1175;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;<compat> 1173 116E;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;<compat> 1173 1173;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;<compat> 1174 116E;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;<compat> 1175 1161;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;<compat> 1175 1163;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;<compat> 1175 1169;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;<compat> 1175 116E;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;<compat> 1175 1173;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;<compat> 1175 119E;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;<compat> 119E 1165;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;<compat> 119E 116E;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;<compat> 119E 1175;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;<compat> 119E 119E;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;<compat> 11A8 11A8;;;;N;;;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;<compat> 11A8 11BA;;;;N;;;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;<compat> 11AB 11BD;;;;N;;;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;<compat> 11AB 11C2;;;;N;;;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;<compat> 11AF 11A8;;;;N;;;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;<compat> 11AF 11B7;;;;N;;;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;<compat> 11AF 11B8;;;;N;;;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;<compat> 11AF 11BA;;;;N;;;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;<compat> 11AF 11C0;;;;N;;;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;<compat> 11AF 11C1;;;;N;;;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;<compat> 11AF 11C2;;;;N;;;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;<compat> 11B8 11BA;;;;N;;;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;<compat> 11BA 11BA;;;;N;;;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;<compat> 11A8 11AF;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;<compat> 11A8 11BA 11A8;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 11AB 11A8;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 11AB 11AE;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;<compat> 11AB 11BA;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;<compat> 11AB 11EB;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;<compat> 11AB 11C0;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 11AE 11A8;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;<compat> 11AE 11AF;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11AF 11A8 11BA;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;<compat> 11AF 11AB;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;<compat> 11AF 11AE;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;<compat> 11AF 11AE 11C2;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;<compat> 11AF 11AF;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;<compat> 11AF 11B7 11A8;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;<compat> 11AF 11B7 11BA;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11AF 11B8 11BA;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;<compat> 11AF 11B8 11C2;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;<compat> 11AF 11B8 11BC;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;<compat> 11AF 11BA 11BA;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;<compat> 11AF 11EB;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;<compat> 11AF 11BF;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11AF 11F9;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;<compat> 11B7 11A8;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;<compat> 11B7 11AF;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;<compat> 11B7 11B8;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;<compat> 11B7 11BA;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;<compat> 11B7 11BA 11BA;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;<compat> 11B7 11EB;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;<compat> 11B7 11BE;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;<compat> 11B7 11C2;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 11B7 11BC;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;<compat> 11B8 11AF;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 11B8 11C1;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;<compat> 11B8 11C2;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 11B8 11BC;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;<compat> 11BA 11A8;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;<compat> 11BA 11AE;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;<compat> 11BA 11AF;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;<compat> 11BA 11B8;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 11BC 11A8;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;<compat> 11BC 11A8 11A8;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;<compat> 11BC 11BC;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;<compat> 11BC 11BF;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;<compat> 11F0 11BA;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F0 11EB;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 11C1 11B8;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 11C1 11BC;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;<compat> 11C2 11AB;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;<compat> 11C2 11AF;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;<compat> 11C2 11B7;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;<compat> 11C2 11B8;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0114 0327;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0115 0327;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00C2 0323;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00E2 0323;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;0102 0323;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;0103 0323;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00CA 0323;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00EA 0323;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00D4 0323;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00F4 0323;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lu;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lu;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lu;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Zs;0;WS;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;ON;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;ON;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;B;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;L;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;R;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;ON;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;L;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;R;;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;ON;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;ON;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;ON;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;ON;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;ON;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;ON;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;ON;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;ON;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;ON;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;ON;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;ON;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;ON;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;ON;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;1;ON;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;Ll;0;L;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;Ll;0;L;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;So;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;007E 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;So;0;ON;;;;;N;SHARP;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;ON;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;ON;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;ON;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;ON;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;ON;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;ON;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;ON;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;ON;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;ON;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;ON;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;ON;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;ON;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Pc;0;L;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Unassigned High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Unassigned High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;ON;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;R;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;R;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;R;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;R;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;R;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;R;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;R;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;R;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;R;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;R;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;R;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;R;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;R;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;R;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;R;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;R;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;R;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;R;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;R;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;R;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;R;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;R;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;R;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;R;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;R;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;R;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;R;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;R;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;R;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;R;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;R;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;R;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;R;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;R;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;R;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;R;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;R;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;R;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;R;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;R;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;R;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;R;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;R;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;R;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;R;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;R;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;R;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;R;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;R;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;R;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;R;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;R;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;R;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;R;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;R;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;R;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;R;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;R;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;R;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;R;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;R;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;R;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;R;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;R;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;R;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;R;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;R;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;R;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;R;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;R;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;R;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;R;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;R;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;R;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;R;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;R;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;R;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;R;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;R;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;R;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;R;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;R;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;R;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;R;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;R;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;R;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;R;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;R;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;R;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;R;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;R;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;R;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;R;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;R;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;R;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;R;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;R;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;R;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;R;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;R;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;R;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;R;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;R;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;R;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;R;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;R;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;R;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;R;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;R;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;R;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;R;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;R;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;R;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;R;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;R;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;R;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;R;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;R;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;R;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;R;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;R;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;R;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;R;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;R;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;R;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;R;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;R;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;R;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;R;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;R;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;R;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;R;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;R;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064C;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064D;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064E;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064F;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0650;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;R;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;R;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;R;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;R;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;R;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;R;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;R;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;R;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;R;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;R;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;R;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;R;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;R;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;R;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;R;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;R;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;R;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;R;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;R;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;R;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;R;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;R;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;R;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;R;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;R;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;R;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;R;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;R;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;R;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;R;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;R;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;R;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;R;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064E;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064F;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 0650;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;R;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;R;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;R;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;R;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;R;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;R;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;R;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;R;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;R;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;R;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;R;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;R;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;R;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;R;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;R;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;R;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;R;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;R;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;R;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;R;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;R;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;R;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;R;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;ON;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;R;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;R;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;R;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;R;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;R;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;R;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;R;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;R;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;R;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;R;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;R;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;R;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;R;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;R;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;R;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;R;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;R;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;R;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;R;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;R;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;R;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;R;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;R;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;R;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;R;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;R;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;R;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;R;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;R;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;R;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;R;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;R;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;R;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;R;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;R;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;R;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;R;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;R;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;R;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;R;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;R;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;R;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;R;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;R;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;R;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;R;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;R;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;R;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;R;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;R;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;R;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;R;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;R;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;R;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;R;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;R;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;R;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;R;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;R;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;R;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;R;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;R;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;R;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;R;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;R;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;R;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;R;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;R;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;R;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;R;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;R;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;R;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;R;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;R;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;R;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;R;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;R;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;R;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;R;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;R;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;R;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;R;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;R;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;R;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;R;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;R;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;R;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;R;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;R;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;R;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;R;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;R;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;R;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;R;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;R;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;R;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;R;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;R;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;R;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;R;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;R;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;R;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;R;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;R;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;R;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;R;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;R;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;R;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;R;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;ON;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;L;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;ON;<narrow> 3099;;;;N;;;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;ON;<narrow> 309A;;;;N;;;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;Sm;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff --git a/src/data/unicode/UnicodeData-3.0.0.txt b/src/data/unicode/UnicodeData-3.0.0.txt
new file mode 100755
index 0000000..6a54d3d
--- /dev/null
+++ b/src/data/unicode/UnicodeData-3.0.0.txt
@@ -0,0 +1,10617 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
+000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED;;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
+001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
+001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
+001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;INDEX;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE;;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;;
+16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;;
+16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;;
+17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff --git a/src/data/unicode/UnicodeData.txt b/src/data/unicode/UnicodeData.txt
new file mode 100755
index 0000000..a90744a
--- /dev/null
+++ b/src/data/unicode/UnicodeData.txt
@@ -0,0 +1,10619 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
+000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED;;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
+001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
+001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
+001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;INDEX;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE;;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;;
+16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;;
+16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;;
+17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+
+